summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-12-13 16:29:21 -0500
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-12-13 16:29:21 -0500
commit6dffced09ecda024e0884e352778c221ad066fd6 (patch)
tree1707e8d8df4d9c47317a39ab6abbfc2ca66a6c29
parentb603554ed044638dd40b6863d5dada59eefe03b8 (diff)
parente3196755e60ba7f1ed9d432e73f26a85e0c8893c (diff)
downloadguix-6dffced09ecda024e0884e352778c221ad066fd6.tar.gz
Merge branch 'core-updates-frozen' into 'master'.
At last!
-rw-r--r--.dir-locals.el7
-rw-r--r--Makefile.am6
-rw-r--r--doc/build.scm2
-rw-r--r--doc/guix-cookbook.texi52
-rw-r--r--doc/guix.texi395
-rw-r--r--etc/news.scm48
-rw-r--r--etc/release-manifest.scm9
-rw-r--r--gnu/build/marionette.scm72
-rw-r--r--gnu/build/vm.scm4
-rw-r--r--gnu/ci.scm52
-rw-r--r--gnu/installer/keymap.scm17
-rw-r--r--gnu/installer/parted.scm8
-rw-r--r--gnu/local.mk208
-rw-r--r--gnu/packages/accessibility.scm26
-rw-r--r--gnu/packages/acl.scm10
-rw-r--r--gnu/packages/ada.scm17
-rw-r--r--gnu/packages/admin.scm517
-rw-r--r--gnu/packages/adns.scm37
-rw-r--r--gnu/packages/agda.scm46
-rw-r--r--gnu/packages/aidc.scm128
-rw-r--r--gnu/packages/algebra.scm184
-rw-r--r--gnu/packages/android.scm192
-rw-r--r--gnu/packages/animation.scm21
-rw-r--r--gnu/packages/antivirus.scm10
-rw-r--r--gnu/packages/apr.scm11
-rw-r--r--gnu/packages/arcan.scm42
-rw-r--r--gnu/packages/aspell.scm15
-rw-r--r--gnu/packages/assembly.scm63
-rw-r--r--gnu/packages/astronomy.scm150
-rw-r--r--gnu/packages/attr.scm21
-rw-r--r--gnu/packages/audio.scm962
-rw-r--r--gnu/packages/augeas.scm6
-rw-r--r--gnu/packages/authentication.scm26
-rw-r--r--gnu/packages/autogen.scm6
-rw-r--r--gnu/packages/autotools.scm55
-rw-r--r--gnu/packages/aux-files/guile-launcher.c7
-rw-r--r--gnu/packages/aux-files/python/sanity-check.py92
-rw-r--r--gnu/packages/aux-files/python/sitecustomize.py55
-rw-r--r--gnu/packages/avahi.scm33
-rw-r--r--gnu/packages/avr.scm3
-rw-r--r--gnu/packages/axoloti.scm15
-rw-r--r--gnu/packages/backup.scm226
-rw-r--r--gnu/packages/base.scm613
-rw-r--r--gnu/packages/bash.scm63
-rw-r--r--gnu/packages/batik.scm11
-rw-r--r--gnu/packages/bdw-gc.scm25
-rw-r--r--gnu/packages/benchmark.scm35
-rw-r--r--gnu/packages/bioconductor.scm7630
-rw-r--r--gnu/packages/bioinformatics.scm4979
-rw-r--r--gnu/packages/bison.scm27
-rw-r--r--gnu/packages/bittorrent.scm106
-rw-r--r--gnu/packages/boost.scm51
-rw-r--r--gnu/packages/bootloaders.scm89
-rw-r--r--gnu/packages/bootstrap.scm157
-rw-r--r--gnu/packages/build-tools.scm110
-rw-r--r--gnu/packages/busybox.scm12
-rw-r--r--gnu/packages/c.scm77
-rw-r--r--gnu/packages/calcurse.scm8
-rw-r--r--gnu/packages/calendar.scm74
-rw-r--r--gnu/packages/ccache.scm8
-rw-r--r--gnu/packages/cdrom.scm120
-rw-r--r--gnu/packages/cedille.scm9
-rw-r--r--gnu/packages/certs.scm148
-rw-r--r--gnu/packages/check.scm637
-rw-r--r--gnu/packages/chemistry.scm95
-rw-r--r--gnu/packages/chez.scm49
-rw-r--r--gnu/packages/chicken.scm15
-rw-r--r--gnu/packages/chromium.scm29
-rw-r--r--gnu/packages/ci.scm44
-rw-r--r--gnu/packages/cinnamon.scm34
-rw-r--r--gnu/packages/clojure.scm2
-rw-r--r--gnu/packages/cluster.scm21
-rw-r--r--gnu/packages/cmake.scm215
-rw-r--r--gnu/packages/cobol.scm6
-rw-r--r--gnu/packages/code.scm83
-rw-r--r--gnu/packages/commencement.scm1421
-rw-r--r--gnu/packages/compression.scm409
-rw-r--r--gnu/packages/compton.scm62
-rw-r--r--gnu/packages/configuration-management.scm100
-rw-r--r--gnu/packages/conky.scm26
-rw-r--r--gnu/packages/connman.scm40
-rw-r--r--gnu/packages/convmv.scm2
-rw-r--r--gnu/packages/cook.scm22
-rw-r--r--gnu/packages/coq.scm90
-rw-r--r--gnu/packages/cpio.scm10
-rw-r--r--gnu/packages/cpp.scm192
-rw-r--r--gnu/packages/cran.scm7844
-rw-r--r--gnu/packages/crates-graphics.scm109
-rw-r--r--gnu/packages/crates-gtk.scm52
-rw-r--r--gnu/packages/crates-io.scm807
-rw-r--r--gnu/packages/cross-base.scm59
-rw-r--r--gnu/packages/crypto.scm180
-rw-r--r--gnu/packages/cryptsetup.scm14
-rw-r--r--gnu/packages/cups.scm379
-rw-r--r--gnu/packages/curl.scm84
-rw-r--r--gnu/packages/cvassistant.scm4
-rw-r--r--gnu/packages/cybersecurity.scm35
-rw-r--r--gnu/packages/cyrus-sasl.scm11
-rw-r--r--gnu/packages/databases.scm937
-rw-r--r--gnu/packages/datamash.scm4
-rw-r--r--gnu/packages/datastructures.scm15
-rw-r--r--gnu/packages/dav.scm60
-rw-r--r--gnu/packages/dbm.scm60
-rw-r--r--gnu/packages/dc.scm14
-rw-r--r--gnu/packages/debian.scm45
-rw-r--r--gnu/packages/debug.scm62
-rw-r--r--gnu/packages/dejagnu.scm2
-rw-r--r--gnu/packages/dhall.scm112
-rw-r--r--gnu/packages/dico.scm2
-rw-r--r--gnu/packages/dictionaries.scm32
-rw-r--r--gnu/packages/diffoscope.scm37
-rw-r--r--gnu/packages/direct-connect.scm16
-rw-r--r--gnu/packages/disk.scm181
-rw-r--r--gnu/packages/display-managers.scm97
-rw-r--r--gnu/packages/distributed.scm23
-rw-r--r--gnu/packages/django.scm401
-rw-r--r--gnu/packages/djvu.scm53
-rw-r--r--gnu/packages/dlang.scm544
-rw-r--r--gnu/packages/dns.scm138
-rw-r--r--gnu/packages/docbook.scm198
-rw-r--r--gnu/packages/docker.scm67
-rw-r--r--gnu/packages/documentation.scm46
-rw-r--r--gnu/packages/dunst.scm29
-rw-r--r--gnu/packages/dvtm.scm2
-rw-r--r--gnu/packages/easyrpg.scm37
-rw-r--r--gnu/packages/ebook.scm77
-rw-r--r--gnu/packages/ed.scm6
-rw-r--r--gnu/packages/education.scm187
-rw-r--r--gnu/packages/efi.scm22
-rw-r--r--gnu/packages/electronics.scm60
-rw-r--r--gnu/packages/elf.scm57
-rw-r--r--gnu/packages/elixir.scm3
-rw-r--r--gnu/packages/elm.scm41
-rw-r--r--gnu/packages/emacs-xyz.scm2222
-rw-r--r--gnu/packages/emacs.scm29
-rw-r--r--gnu/packages/embedded.scm83
-rw-r--r--gnu/packages/emulators.scm399
-rw-r--r--gnu/packages/enchant.scm23
-rw-r--r--gnu/packages/engineering.scm434
-rw-r--r--gnu/packages/enlightenment.scm83
-rw-r--r--gnu/packages/entr.scm10
-rw-r--r--gnu/packages/erlang.scm4
-rw-r--r--gnu/packages/esolangs.scm9
-rw-r--r--gnu/packages/fabric-management.scm49
-rw-r--r--gnu/packages/fcitx.scm11
-rw-r--r--gnu/packages/fcitx5.scm42
-rw-r--r--gnu/packages/file-systems.scm195
-rw-r--r--gnu/packages/file.scm6
-rw-r--r--gnu/packages/finance.scm537
-rw-r--r--gnu/packages/firmware.scm14
-rw-r--r--gnu/packages/flashing-tools.scm76
-rw-r--r--gnu/packages/flex.scm5
-rw-r--r--gnu/packages/fltk.scm8
-rw-r--r--gnu/packages/fonts.scm34
-rw-r--r--gnu/packages/fontutils.scm286
-rw-r--r--gnu/packages/forth.scm2
-rw-r--r--gnu/packages/fpga.scm82
-rw-r--r--gnu/packages/freedesktop.scm639
-rw-r--r--gnu/packages/freeipmi.scm2
-rw-r--r--gnu/packages/fribidi.scm2
-rw-r--r--gnu/packages/ftp.scm39
-rw-r--r--gnu/packages/fvwm.scm20
-rw-r--r--gnu/packages/game-development.scm295
-rw-r--r--gnu/packages/games.scm2422
-rw-r--r--gnu/packages/gawk.scm30
-rw-r--r--gnu/packages/gcc.scm234
-rw-r--r--gnu/packages/gd.scm29
-rw-r--r--gnu/packages/gdb.scm159
-rw-r--r--gnu/packages/genealogy.scm40
-rw-r--r--gnu/packages/genimage.scm186
-rw-r--r--gnu/packages/geo.scm807
-rw-r--r--gnu/packages/gettext.scm65
-rw-r--r--gnu/packages/ghostscript.scm54
-rw-r--r--gnu/packages/gimp.scm98
-rw-r--r--gnu/packages/gkrellm.scm2
-rw-r--r--gnu/packages/gl.scm274
-rw-r--r--gnu/packages/glib.scm953
-rw-r--r--gnu/packages/gnome-xyz.scm103
-rw-r--r--gnu/packages/gnome.scm5465
-rw-r--r--gnu/packages/gnu-pw-mgr.scm2
-rw-r--r--gnu/packages/gnucash.scm32
-rw-r--r--gnu/packages/gnunet.scm33
-rw-r--r--gnu/packages/gnupg.scm274
-rw-r--r--gnu/packages/gnustep.scm37
-rw-r--r--gnu/packages/gnuzilla.scm161
-rw-r--r--gnu/packages/gobby.scm36
-rw-r--r--gnu/packages/golang.scm696
-rw-r--r--gnu/packages/gpodder.scm60
-rw-r--r--gnu/packages/gps.scm57
-rw-r--r--gnu/packages/graph.scm92
-rw-r--r--gnu/packages/graphics.scm442
-rw-r--r--gnu/packages/graphviz.scm201
-rw-r--r--gnu/packages/groff.scm8
-rw-r--r--gnu/packages/groovy.scm2
-rw-r--r--gnu/packages/gsasl.scm16
-rw-r--r--gnu/packages/gstreamer.scm384
-rw-r--r--gnu/packages/gtk.scm2011
-rw-r--r--gnu/packages/guile-wm.scm12
-rw-r--r--gnu/packages/guile-xyz.scm770
-rw-r--r--gnu/packages/guile.scm262
-rw-r--r--gnu/packages/gv.scm2
-rw-r--r--gnu/packages/gxmessage.scm5
-rw-r--r--gnu/packages/hardware.scm82
-rw-r--r--gnu/packages/haskell-apps.scm508
-rw-r--r--gnu/packages/haskell-check.scm323
-rw-r--r--gnu/packages/haskell-crypto.scm238
-rw-r--r--gnu/packages/haskell-web.scm1241
-rw-r--r--gnu/packages/haskell-xyz.scm4396
-rw-r--r--gnu/packages/haskell.scm28
-rw-r--r--gnu/packages/hexedit.scm11
-rw-r--r--gnu/packages/hugs.scm2
-rw-r--r--gnu/packages/hurd.scm83
-rw-r--r--gnu/packages/hyperledger.scm29
-rw-r--r--gnu/packages/i2p.scm5
-rw-r--r--gnu/packages/ibus.scm179
-rw-r--r--gnu/packages/icu4c.scm57
-rw-r--r--gnu/packages/idris.scm75
-rw-r--r--gnu/packages/idutils.scm12
-rw-r--r--gnu/packages/image-processing.scm268
-rw-r--r--gnu/packages/image-viewers.scm214
-rw-r--r--gnu/packages/image.scm432
-rw-r--r--gnu/packages/imagemagick.scm12
-rw-r--r--gnu/packages/inklingreader.scm8
-rw-r--r--gnu/packages/inkscape.scm95
-rw-r--r--gnu/packages/installers.scm2
-rw-r--r--gnu/packages/ipfs.scm144
-rw-r--r--gnu/packages/irc.scm130
-rw-r--r--gnu/packages/irods.scm19
-rw-r--r--gnu/packages/iso-codes.scm15
-rw-r--r--gnu/packages/jami.scm83
-rw-r--r--gnu/packages/java-compression.scm9
-rw-r--r--gnu/packages/java-graphics.scm13
-rw-r--r--gnu/packages/java-maths.scm2
-rw-r--r--gnu/packages/java.scm1306
-rw-r--r--gnu/packages/javascript.scm43
-rw-r--r--gnu/packages/jemalloc.scm42
-rw-r--r--gnu/packages/jose.scm6
-rw-r--r--gnu/packages/jrnl.scm18
-rw-r--r--gnu/packages/julia-jll.scm481
-rw-r--r--gnu/packages/julia-xyz.scm863
-rw-r--r--gnu/packages/julia.scm241
-rw-r--r--gnu/packages/jupyter.scm238
-rw-r--r--gnu/packages/kawa.scm2
-rw-r--r--gnu/packages/kde-frameworks.scm1587
-rw-r--r--gnu/packages/kde-internet.scm421
-rw-r--r--gnu/packages/kde-multimedia.scm558
-rw-r--r--gnu/packages/kde-pim.scm1746
-rw-r--r--gnu/packages/kde-plasma.scm102
-rw-r--r--gnu/packages/kde-systemtools.scm282
-rw-r--r--gnu/packages/kde-utils.scm406
-rw-r--r--gnu/packages/kde.scm727
-rw-r--r--gnu/packages/kerberos.scm164
-rw-r--r--gnu/packages/key-mon.scm4
-rw-r--r--gnu/packages/kodi.scm17
-rw-r--r--gnu/packages/language.scm91
-rw-r--r--gnu/packages/ld-wrapper.in3
-rw-r--r--gnu/packages/lean.scm2
-rw-r--r--gnu/packages/lego.scm6
-rw-r--r--gnu/packages/less.scm15
-rw-r--r--gnu/packages/lesstif.scm5
-rw-r--r--gnu/packages/libcanberra.scm6
-rw-r--r--gnu/packages/libdaemon.scm42
-rw-r--r--gnu/packages/libedit.scm2
-rw-r--r--gnu/packages/libevent.scm73
-rw-r--r--gnu/packages/libffi.scm75
-rw-r--r--gnu/packages/libftdi.scm2
-rw-r--r--gnu/packages/libidn.scm17
-rw-r--r--gnu/packages/libphidget.scm2
-rw-r--r--gnu/packages/libreoffice.scm254
-rw-r--r--gnu/packages/libsigsegv.scm4
-rw-r--r--gnu/packages/libusb.scm81
-rw-r--r--gnu/packages/license.scm48
-rw-r--r--gnu/packages/lighting.scm19
-rw-r--r--gnu/packages/linphone.scm57
-rw-r--r--gnu/packages/linux.scm1042
-rw-r--r--gnu/packages/lirc.scm7
-rw-r--r--gnu/packages/lisp-check.scm57
-rw-r--r--gnu/packages/lisp-xyz.scm1777
-rw-r--r--gnu/packages/lisp.scm110
-rw-r--r--gnu/packages/llvm.scm649
-rw-r--r--gnu/packages/logging.scm31
-rw-r--r--gnu/packages/logo.scm2
-rw-r--r--gnu/packages/lout.scm2
-rw-r--r--gnu/packages/lsof.scm140
-rw-r--r--gnu/packages/lua.scm89
-rw-r--r--gnu/packages/lxde.scm203
-rw-r--r--gnu/packages/lxqt.scm526
-rw-r--r--gnu/packages/machine-learning.scm621
-rw-r--r--gnu/packages/magic-wormhole.scm52
-rw-r--r--gnu/packages/mail.scm887
-rw-r--r--gnu/packages/make-bootstrap.scm515
-rw-r--r--gnu/packages/man.scm67
-rw-r--r--gnu/packages/markup.scm15
-rw-r--r--gnu/packages/mastodon.scm58
-rw-r--r--gnu/packages/mate.scm728
-rw-r--r--gnu/packages/maths.scm1202
-rw-r--r--gnu/packages/matrix.scm153
-rw-r--r--gnu/packages/maven-parent-pom.scm35
-rw-r--r--gnu/packages/maven.scm861
-rw-r--r--gnu/packages/mc.scm17
-rw-r--r--gnu/packages/mcrypt.scm6
-rw-r--r--gnu/packages/medical.scm4
-rw-r--r--gnu/packages/mercury.scm6
-rw-r--r--gnu/packages/mes.scm288
-rw-r--r--gnu/packages/messaging.scm597
-rw-r--r--gnu/packages/microcom.scm5
-rw-r--r--gnu/packages/minetest.scm24
-rw-r--r--gnu/packages/moe.scm4
-rw-r--r--gnu/packages/monitoring.scm85
-rw-r--r--gnu/packages/mono.scm2
-rw-r--r--gnu/packages/moreutils.scm9
-rw-r--r--gnu/packages/mp3.scm78
-rw-r--r--gnu/packages/mpd.scm161
-rw-r--r--gnu/packages/mpi.scm25
-rw-r--r--gnu/packages/multiprecision.scm45
-rw-r--r--gnu/packages/music.scm1555
-rw-r--r--gnu/packages/nano.scm3
-rw-r--r--gnu/packages/ncdu.scm2
-rw-r--r--gnu/packages/ncurses.scm55
-rw-r--r--gnu/packages/netpbm.scm8
-rw-r--r--gnu/packages/nettle.scm34
-rw-r--r--gnu/packages/networking.scm663
-rw-r--r--gnu/packages/nfs.scm8
-rw-r--r--gnu/packages/nickle.scm2
-rw-r--r--gnu/packages/nicotine.scm4
-rw-r--r--gnu/packages/ninja.scm10
-rw-r--r--gnu/packages/node-xyz.scm9
-rw-r--r--gnu/packages/node.scm112
-rw-r--r--gnu/packages/noweb.scm2
-rw-r--r--gnu/packages/nss.scm116
-rw-r--r--gnu/packages/ntp.scm12
-rw-r--r--gnu/packages/nvi.scm5
-rw-r--r--gnu/packages/ocaml.scm938
-rw-r--r--gnu/packages/ocr.scm4
-rw-r--r--gnu/packages/onc-rpc.scm29
-rw-r--r--gnu/packages/openbox.scm27
-rw-r--r--gnu/packages/opencl.scm32
-rw-r--r--gnu/packages/opencog.scm31
-rw-r--r--gnu/packages/openkinect.scm14
-rw-r--r--gnu/packages/openldap.scm103
-rw-r--r--gnu/packages/openpgp.scm14
-rw-r--r--gnu/packages/openstack.scm345
-rw-r--r--gnu/packages/orange.scm89
-rw-r--r--gnu/packages/orpheus.scm23
-rw-r--r--gnu/packages/ots.scm5
-rw-r--r--gnu/packages/package-management.scm323
-rw-r--r--gnu/packages/pantheon.scm17
-rw-r--r--gnu/packages/parallel.scm36
-rw-r--r--gnu/packages/pascal.scm77
-rw-r--r--gnu/packages/password-utils.scm140
-rw-r--r--gnu/packages/patches/abseil-cpp-fix-gtest.patch16
-rw-r--r--gnu/packages/patches/agg-2.5-gcc8.patch14
-rw-r--r--gnu/packages/patches/atlas-gfortran-compat.patch37
-rw-r--r--gnu/packages/patches/awesome-4.3-fno-common.patch178
-rw-r--r--gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch22
-rw-r--r--gnu/packages/patches/biber-fix-encoding-write.patch31
-rw-r--r--gnu/packages/patches/biber-sortinithash.patch1666
-rw-r--r--gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch231
-rw-r--r--gnu/packages/patches/binutils-loongson-workaround.patch14
-rw-r--r--gnu/packages/patches/binutils-mingw-w64-timestamp.patch39
-rw-r--r--gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch126
-rw-r--r--gnu/packages/patches/cdrkit-libre-cross-compile.patch32
-rw-r--r--gnu/packages/patches/ceph-boost-compat.patch18
-rw-r--r--gnu/packages/patches/ceph-fix-snappy-breaking-change.patch13
-rw-r--r--gnu/packages/patches/ceph-rocksdb-compat.patch303
-rw-r--r--gnu/packages/patches/cheese-vala-update.patch180
-rw-r--r--gnu/packages/patches/classpath-miscompilation.patch71
-rw-r--r--gnu/packages/patches/cling-use-shared-library.patch329
-rw-r--r--gnu/packages/patches/coreutils-gnulib-tests.patch45
-rw-r--r--gnu/packages/patches/cups-CVE-2020-10001.patch47
-rw-r--r--gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch64
-rw-r--r--gnu/packages/patches/curl-7.77-tls-priority-string.patch98
-rw-r--r--gnu/packages/patches/curl-use-ssl-cert-env.patch4
-rw-r--r--gnu/packages/patches/dbus-CVE-2020-12049.patch58
-rw-r--r--gnu/packages/patches/diffutils-fix-signal-processing.patch58
-rw-r--r--gnu/packages/patches/diffutils-gets-undeclared.patch71
-rw-r--r--gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch11
-rw-r--r--gnu/packages/patches/docbook-xsl-support-old-url.patch17
-rw-r--r--gnu/packages/patches/doxygen-1.8.17-runtests.patch73
-rw-r--r--gnu/packages/patches/doxygen-test.patch60
-rw-r--r--gnu/packages/patches/elogind-revert-polkit-detection.patch41
-rw-r--r--gnu/packages/patches/evolution-CVE-2020-11879.patch122
-rw-r--r--gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch115
-rw-r--r--gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch28
-rw-r--r--gnu/packages/patches/evolution-data-server-libical-compat.patch36
-rw-r--r--gnu/packages/patches/evolution-data-server-locales.patch33
-rw-r--r--gnu/packages/patches/farstream-gupnp.patch140
-rw-r--r--gnu/packages/patches/findutils-test-rwlock-threads.patch38
-rw-r--r--gnu/packages/patches/fontconfig-cache-ignore-mtime.patch15
-rw-r--r--gnu/packages/patches/fontconfig-hurd-path-max.patch17
-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/freeglut-gcc-compat.patch53
-rw-r--r--gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch21
-rw-r--r--gnu/packages/patches/gcc-10-cross-environment-variables.patch51
-rw-r--r--gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch64
-rw-r--r--gnu/packages/patches/gcc-cross-gxx-include-dir.patch73
-rw-r--r--gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch179
-rw-r--r--gnu/packages/patches/gdb-fix-gnu-nat-build.patch254
-rw-r--r--gnu/packages/patches/gdb-hurd.patch69
-rw-r--r--gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch53
-rw-r--r--gnu/packages/patches/gdm-default-session.patch27
-rw-r--r--gnu/packages/patches/gdm-elogind-support.patch211
-rw-r--r--gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch24
-rw-r--r--gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch22
-rw-r--r--gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch35
-rw-r--r--gnu/packages/patches/geary-CVE-2020-24661.patch133
-rw-r--r--gnu/packages/patches/geeqie-clutter.patch35
-rw-r--r--gnu/packages/patches/genimage-mke2fs-test.patch10
-rw-r--r--gnu/packages/patches/ghostscript-CVE-2020-15900.patch36
-rw-r--r--gnu/packages/patches/ghostscript-freetype-compat.patch35
-rw-r--r--gnu/packages/patches/ghostscript-no-header-creationdate.patch22
-rw-r--r--gnu/packages/patches/glade-gls-set-script-name.patch32
-rw-r--r--gnu/packages/patches/glade-test-widget-null-icon.patch30
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27218.patch132
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-01.patch176
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-02.patch264
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-03.patch136
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-04.patch308
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-05.patch47
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-06.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-07.patch118
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-08.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-09.patch98
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-10.patch52
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-11.patch57
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-12.patch30
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-13.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-14.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-15.patch95
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-16.patch43
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-17.patch37
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-18.patch232
-rw-r--r--gnu/packages/patches/glib-CVE-2021-28153.patch283
-rw-r--r--gnu/packages/patches/glib-networking-32-bit-time.patch61
-rw-r--r--gnu/packages/patches/glib-networking-gnutls-binding.patch21
-rw-r--r--gnu/packages/patches/glib-skip-failing-test.patch27
-rw-r--r--gnu/packages/patches/glib-tests-timer.patch15
-rw-r--r--gnu/packages/patches/glibc-2.27-git-fixes.patch702
-rw-r--r--gnu/packages/patches/glibc-2.27-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.28-git-fixes.patch248
-rw-r--r--gnu/packages/patches/glibc-2.28-supported-locales.patch33
-rw-r--r--gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch84
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch37
-rw-r--r--gnu/packages/patches/glibc-cross-objcopy.patch159
-rw-r--r--gnu/packages/patches/glibc-cross-objdump.patch159
-rw-r--r--gnu/packages/patches/glibc-dl-cache.patch140
-rw-r--r--gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch19
-rw-r--r--gnu/packages/patches/glibc-skip-c++.patch31
-rw-r--r--gnu/packages/patches/glibc-static-nss.patch1244
-rw-r--r--gnu/packages/patches/gnome-boxes-add-guix-logo.patch32
-rw-r--r--gnu/packages/patches/gnome-online-miners-tracker-3.patch1505
-rw-r--r--gnu/packages/patches/gnome-screenshot-meson-0.60.patch39
-rw-r--r--gnu/packages/patches/gnome-session-support-elogind.patch73
-rw-r--r--gnu/packages/patches/gnome-shell-CVE-2020-17489.patch46
-rw-r--r--gnu/packages/patches/gnome-shell-disable-test.patch25
-rw-r--r--gnu/packages/patches/gnome-shell-theme.patch51
-rw-r--r--gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch10
-rw-r--r--gnu/packages/patches/gnupg-1-build-with-gcc10.patch64
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20231.patch62
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20232.patch60
-rw-r--r--gnu/packages/patches/gnutls-guile-eintr-eagain.patch56
-rw-r--r--gnu/packages/patches/graphviz-CVE-2020-18032.patch49
-rw-r--r--gnu/packages/patches/gst-libav-64channels-stack-corruption.patch31
-rw-r--r--gnu/packages/patches/gst-plugins-bad-fix-overflow.patch263
-rw-r--r--gnu/packages/patches/gst-plugins-base-fix-id3v2-invalid-read.patch40
-rw-r--r--gnu/packages/patches/gst-plugins-good-CVE-2021-3497.patch174
-rw-r--r--gnu/packages/patches/gst-plugins-good-CVE-2021-3498.patch22
-rw-r--r--gnu/packages/patches/gst-plugins-ugly-fix-out-of-bound-reads.patch119
-rw-r--r--gnu/packages/patches/gtk-doc-respect-xml-catalog.patch16
-rw-r--r--gnu/packages/patches/gtk2-fix-builder-test.patch94
-rw-r--r--gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch51
-rw-r--r--gnu/packages/patches/guile-email-fix-tests.patch35
-rw-r--r--gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch78
-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/gvfs-add-support-for-libplist-2.2.patch34
-rw-r--r--gnu/packages/patches/helm-fix-gcc-9-build.patch140
-rw-r--r--gnu/packages/patches/icu4c-CVE-2020-10531.patch127
-rw-r--r--gnu/packages/patches/inetutils-hurd.patch583
-rw-r--r--gnu/packages/patches/json-c-CVE-2020-12762.patch193
-rw-r--r--gnu/packages/patches/jsoncpp-fix-inverted-case.patch22
-rw-r--r--gnu/packages/patches/jsoncpp-pkg-config-version.patch24
-rw-r--r--gnu/packages/patches/julia-allow-parallel-build.patch32
-rw-r--r--gnu/packages/patches/lcms-CVE-2018-16435.patch171
-rw-r--r--gnu/packages/patches/ldc-bootstrap-disable-tests.patch72
-rw-r--r--gnu/packages/patches/ldc-disable-phobos-tests.patch22
-rw-r--r--gnu/packages/patches/lib2geom-fix-tests.patch192
-rw-r--r--gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch35
-rw-r--r--gnu/packages/patches/librime-fix-build-with-gcc10.patch41
-rw-r--r--gnu/packages/patches/libtirpc-hurd-client.patch50
-rw-r--r--gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch40
-rw-r--r--gnu/packages/patches/libxml2-parent-pointers.patch228
-rw-r--r--gnu/packages/patches/libxml2-terminating-newline.patch33
-rw-r--r--gnu/packages/patches/libxml2-xpath-recursion-limit.patch20
-rw-r--r--gnu/packages/patches/libxt-guix-search-paths.patch13
-rw-r--r--gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch13
-rw-r--r--gnu/packages/patches/mariadb-CVE-2021-27928.patch642
-rw-r--r--gnu/packages/patches/mesa-opencl-all-targets.patch25
-rw-r--r--gnu/packages/patches/mesa-skip-tests.patch48
-rw-r--r--gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch20
-rw-r--r--gnu/packages/patches/meson-for-build-rpath.patch24
-rw-r--r--gnu/packages/patches/metabat-fix-compilation.patch39
-rw-r--r--gnu/packages/patches/mit-krb5-hurd.patch15
-rw-r--r--gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch29
-rw-r--r--gnu/packages/patches/mpg321-gcc-10.patch83
-rw-r--r--gnu/packages/patches/network-manager-meson.patch21
-rw-r--r--gnu/packages/patches/network-manager-plugin-path.patch69
-rw-r--r--gnu/packages/patches/nss-getcwd-nonnull.patch30
-rw-r--r--gnu/packages/patches/ocaml-4.09-multiple-definitions.patch41
-rw-r--r--gnu/packages/patches/ocaml-multiple-definitions.patch43
-rw-r--r--gnu/packages/patches/p11-kit-hurd.patch46
-rw-r--r--gnu/packages/patches/perl-cross.patch60
-rw-r--r--gnu/packages/patches/perl-deterministic-ordering.patch29
-rw-r--r--gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch33
-rw-r--r--gnu/packages/patches/perl-no-sys-dirs.patch99
-rw-r--r--gnu/packages/patches/pipewire-0.2.7-fno-common.patch51
-rw-r--r--gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch46
-rw-r--r--gnu/packages/patches/polkit-CVE-2021-3560.patch21
-rw-r--r--gnu/packages/patches/polkit-configure-elogind.patch15
-rw-r--r--gnu/packages/patches/polkit-use-duktape.patch5030
-rw-r--r--gnu/packages/patches/python-2.7-no-static-lib.patch70
-rw-r--r--gnu/packages/patches/python-3-fix-tests.patch194
-rw-r--r--gnu/packages/patches/python-3-hurd-configure.patch27
-rw-r--r--gnu/packages/patches/python-3-no-static-lib.patch75
-rw-r--r--gnu/packages/patches/python-3.8-CVE-2021-3177.patch194
-rw-r--r--gnu/packages/patches/python-3.8-fix-tests.patch42
-rw-r--r--gnu/packages/patches/python-3.9-fix-tests.patch370
-rw-r--r--gnu/packages/patches/python-babel-fix-parse-future-test.patch68
-rw-r--r--gnu/packages/patches/python-chai-drop-python2.patch32
-rw-r--r--gnu/packages/patches/python-docopt-pytest6-compat.patch29
-rw-r--r--gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch59
-rw-r--r--gnu/packages/patches/python-poppler-qt5-fix-build.patch116
-rw-r--r--gnu/packages/patches/python-pyflakes-test-location.patch42
-rw-r--r--gnu/packages/patches/python-random2-getrandbits-test.patch23
-rw-r--r--gnu/packages/patches/python-testtools.patch57
-rw-r--r--gnu/packages/patches/python-typing-inspect-fix.patch38
-rw-r--r--gnu/packages/patches/python-werkzeug-tests.patch58
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch54
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch21
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch152
-rw-r--r--gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch35
-rw-r--r--gnu/packages/patches/range-v3-build-with-gcc10.patch122
-rw-r--r--gnu/packages/patches/rust-1.19-mrustc.patch28
-rw-r--r--gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch111
-rw-r--r--gnu/packages/patches/rust-1.30-gdb-llvm.patch89
-rw-r--r--gnu/packages/patches/rust-1.45-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-1.48-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-bootstrap-stage0-test.patch55
-rw-r--r--gnu/packages/patches/rust-reproducible-builds.patch25
-rw-r--r--gnu/packages/patches/rustc-1.39.0-src.patch99
-rw-r--r--gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch170
-rw-r--r--gnu/packages/patches/scalapack-gcc-10-compilation.patch5684
-rw-r--r--gnu/packages/patches/strace-readlink-tests.patch46
-rw-r--r--gnu/packages/patches/syslinux-gcc10.patch87
-rw-r--r--gnu/packages/patches/syslinux-strip-gnu-property.patch31
-rw-r--r--gnu/packages/patches/tcl-fix-cross-compilation.patch39
-rw-r--r--gnu/packages/patches/tcsh-fix-autotest.patch11
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.83.patch52
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.86.patch17
-rw-r--r--gnu/packages/patches/tor-sandbox-i686.patch36
-rw-r--r--gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch61
-rw-r--r--gnu/packages/patches/vigra-python-compat.patch18
-rw-r--r--gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch79
-rw-r--r--gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch64
-rw-r--r--gnu/packages/patches/xygrib-fix-finding-data.patch131
-rw-r--r--gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch68
-rw-r--r--gnu/packages/patches/zziplib-CVE-2018-16548.patch49
-rw-r--r--gnu/packages/patchutils.scm49
-rw-r--r--gnu/packages/patool.scm38
-rw-r--r--gnu/packages/pciutils.scm3
-rw-r--r--gnu/packages/pcre.scm58
-rw-r--r--gnu/packages/pdf.scm250
-rw-r--r--gnu/packages/pem.scm2
-rw-r--r--gnu/packages/pep.scm31
-rw-r--r--gnu/packages/perl-check.scm234
-rw-r--r--gnu/packages/perl-compression.scm11
-rw-r--r--gnu/packages/perl-maths.scm3
-rw-r--r--gnu/packages/perl-web.scm11
-rw-r--r--gnu/packages/perl.scm1779
-rw-r--r--gnu/packages/perl6.scm44
-rw-r--r--gnu/packages/phabricator.scm5
-rw-r--r--gnu/packages/photo.scm103
-rw-r--r--gnu/packages/php.scm18
-rw-r--r--gnu/packages/piet.scm13
-rw-r--r--gnu/packages/pkg-config.scm37
-rw-r--r--gnu/packages/plan9.scm3
-rw-r--r--gnu/packages/plotutils.scm100
-rw-r--r--gnu/packages/poedit.scm21
-rw-r--r--gnu/packages/polkit.scm144
-rw-r--r--gnu/packages/popt.scm2
-rw-r--r--gnu/packages/presentation.scm21
-rw-r--r--gnu/packages/pretty-print.scm28
-rw-r--r--gnu/packages/profiling.scm41
-rw-r--r--gnu/packages/protobuf.scm67
-rw-r--r--gnu/packages/pth.scm22
-rw-r--r--gnu/packages/pulseaudio.scm165
-rw-r--r--gnu/packages/pumpio.scm10
-rw-r--r--gnu/packages/pure.scm4
-rw-r--r--gnu/packages/purescript.scm149
-rw-r--r--gnu/packages/python-build.scm216
-rw-r--r--gnu/packages/python-check.scm457
-rw-r--r--gnu/packages/python-compression.scm94
-rw-r--r--gnu/packages/python-crypto.scm258
-rw-r--r--gnu/packages/python-science.scm309
-rw-r--r--gnu/packages/python-web.scm1639
-rw-r--r--gnu/packages/python-xyz.scm6683
-rw-r--r--gnu/packages/python.scm644
-rw-r--r--gnu/packages/qt.scm363
-rw-r--r--gnu/packages/racket.scm8
-rw-r--r--gnu/packages/radio.scm645
-rw-r--r--gnu/packages/rails.scm179
-rw-r--r--gnu/packages/ratpoison.scm3
-rw-r--r--gnu/packages/rcm.scm3
-rw-r--r--gnu/packages/rdesktop.scm25
-rw-r--r--gnu/packages/rdf.scm71
-rw-r--r--gnu/packages/re2c.scm2
-rw-r--r--gnu/packages/readline.scm27
-rw-r--r--gnu/packages/rednotebook.scm6
-rw-r--r--gnu/packages/robotics.scm35
-rw-r--r--gnu/packages/rocm.scm23
-rw-r--r--gnu/packages/rpc.scm35
-rw-r--r--gnu/packages/rpm.scm46
-rw-r--r--gnu/packages/rrdtool.scm17
-rw-r--r--gnu/packages/rsync.scm13
-rw-r--r--gnu/packages/ruby.scm2029
-rw-r--r--gnu/packages/rust-apps.scm66
-rw-r--r--gnu/packages/rust.scm1852
-rw-r--r--gnu/packages/sagemath.scm46
-rw-r--r--gnu/packages/samba.scm88
-rw-r--r--gnu/packages/sawfish.scm32
-rw-r--r--gnu/packages/scanner.scm6
-rw-r--r--gnu/packages/scheme.scm90
-rw-r--r--gnu/packages/screen.scm8
-rw-r--r--gnu/packages/scribus.scm4
-rw-r--r--gnu/packages/sdl.scm73
-rw-r--r--gnu/packages/search.scm136
-rw-r--r--gnu/packages/security-token.scm202
-rw-r--r--gnu/packages/selinux.scm87
-rw-r--r--gnu/packages/sequoia.scm23
-rw-r--r--gnu/packages/serialization.scm92
-rw-r--r--gnu/packages/serveez.scm4
-rw-r--r--gnu/packages/shells.scm107
-rw-r--r--gnu/packages/shellutils.scm45
-rw-r--r--gnu/packages/simh.scm2
-rw-r--r--gnu/packages/simulation.scm82
-rw-r--r--gnu/packages/skarnet.scm24
-rw-r--r--gnu/packages/skribilo.scm24
-rw-r--r--gnu/packages/slang.scm22
-rw-r--r--gnu/packages/smalltalk.scm34
-rw-r--r--gnu/packages/sml.scm6
-rw-r--r--gnu/packages/solidity.scm90
-rw-r--r--gnu/packages/speech.scm56
-rw-r--r--gnu/packages/sphinx.scm275
-rw-r--r--gnu/packages/spice.scm134
-rw-r--r--gnu/packages/spreadsheet.scm16
-rw-r--r--gnu/packages/sqlite.scm72
-rw-r--r--gnu/packages/ssh.scm138
-rw-r--r--gnu/packages/sssd.scm87
-rw-r--r--gnu/packages/stalonetray.scm2
-rw-r--r--gnu/packages/statistics.scm1303
-rw-r--r--gnu/packages/stb.scm2
-rw-r--r--gnu/packages/stenography.scm20
-rw-r--r--gnu/packages/storage.scm72
-rw-r--r--gnu/packages/suckless.scm53
-rw-r--r--gnu/packages/swig.scm28
-rw-r--r--gnu/packages/sync.scm105
-rw-r--r--gnu/packages/syncthing.scm71
-rw-r--r--gnu/packages/syndication.scm196
-rw-r--r--gnu/packages/synergy.scm2
-rw-r--r--gnu/packages/task-management.scm30
-rw-r--r--gnu/packages/task-runners.scm2
-rw-r--r--gnu/packages/tbb.scm37
-rw-r--r--gnu/packages/tcl.scm99
-rw-r--r--gnu/packages/telegram.scm46
-rw-r--r--gnu/packages/telephony.scm147
-rw-r--r--gnu/packages/terminals.scm118
-rw-r--r--gnu/packages/tex.scm3803
-rw-r--r--gnu/packages/texinfo.scm43
-rw-r--r--gnu/packages/text-editors.scm171
-rw-r--r--gnu/packages/textutils.scm39
-rw-r--r--gnu/packages/time.scm62
-rw-r--r--gnu/packages/tls.scm575
-rw-r--r--gnu/packages/tmux.scm20
-rw-r--r--gnu/packages/tor.scm173
-rw-r--r--gnu/packages/toys.scm19
-rw-r--r--gnu/packages/tryton.scm1483
-rw-r--r--gnu/packages/tv.scm26
-rw-r--r--gnu/packages/uglifyjs.scm3
-rw-r--r--gnu/packages/uml.scm3
-rw-r--r--gnu/packages/upnp.scm4
-rw-r--r--gnu/packages/usb-modeswitch.scm9
-rw-r--r--gnu/packages/uucp.scm23
-rw-r--r--gnu/packages/valgrind.scm6
-rw-r--r--gnu/packages/version-control.scm414
-rw-r--r--gnu/packages/video.scm989
-rw-r--r--gnu/packages/vim.scm33
-rw-r--r--gnu/packages/virtualization.scm327
-rw-r--r--gnu/packages/vlang.scm2
-rw-r--r--gnu/packages/vnc.scm44
-rw-r--r--gnu/packages/vpn.scm196
-rw-r--r--gnu/packages/vulkan.scm64
-rw-r--r--gnu/packages/w3m.scm25
-rw-r--r--gnu/packages/wdiff.scm6
-rw-r--r--gnu/packages/web-browsers.scm116
-rw-r--r--gnu/packages/web.scm1537
-rw-r--r--gnu/packages/webkit.scm64
-rw-r--r--gnu/packages/wget.scm25
-rw-r--r--gnu/packages/wicd.scm5
-rw-r--r--gnu/packages/wine.scm37
-rw-r--r--gnu/packages/wireservice.scm12
-rw-r--r--gnu/packages/wm.scm706
-rw-r--r--gnu/packages/wordnet.scm3
-rw-r--r--gnu/packages/wv.scm9
-rw-r--r--gnu/packages/wxwidgets.scm40
-rw-r--r--gnu/packages/xdisorg.scm560
-rw-r--r--gnu/packages/xfce.scm533
-rw-r--r--gnu/packages/xfig.scm6
-rw-r--r--gnu/packages/xiph.scm91
-rw-r--r--gnu/packages/xml.scm400
-rw-r--r--gnu/packages/xnee.scm18
-rw-r--r--gnu/packages/xorg.scm1765
-rw-r--r--gnu/packages/zig.scm6
-rw-r--r--gnu/packages/zile.scm4
-rw-r--r--gnu/packages/zwave.scm9
-rw-r--r--gnu/services.scm8
-rw-r--r--gnu/services/cups.scm3
-rw-r--r--gnu/services/databases.scm4
-rw-r--r--gnu/services/dbus.scm13
-rw-r--r--gnu/services/desktop.scm20
-rw-r--r--gnu/services/xorg.scm42
-rw-r--r--gnu/system.scm23
-rw-r--r--gnu/system/locale.scm3
-rw-r--r--gnu/system/shadow.scm8
-rw-r--r--gnu/system/vm.scm8
-rw-r--r--gnu/tests/audio.scm7
-rw-r--r--gnu/tests/base.scm45
-rw-r--r--gnu/tests/ci.scm9
-rw-r--r--gnu/tests/cups.scm7
-rw-r--r--gnu/tests/databases.scm24
-rw-r--r--gnu/tests/desktop.scm9
-rw-r--r--gnu/tests/dict.scm9
-rw-r--r--gnu/tests/docker.scm14
-rw-r--r--gnu/tests/file-sharing.scm7
-rw-r--r--gnu/tests/ganeti.scm7
-rw-r--r--gnu/tests/guix.scm14
-rw-r--r--gnu/tests/install.scm13
-rw-r--r--gnu/tests/ldap.scm7
-rw-r--r--gnu/tests/linux-modules.scm11
-rw-r--r--gnu/tests/mail.scm30
-rw-r--r--gnu/tests/messaging.scm23
-rw-r--r--gnu/tests/monitoring.scm15
-rw-r--r--gnu/tests/networking.scm42
-rw-r--r--gnu/tests/nfs.scm23
-rw-r--r--gnu/tests/package-management.scm8
-rw-r--r--gnu/tests/reconfigure.scm21
-rw-r--r--gnu/tests/rsync.scm7
-rw-r--r--gnu/tests/security-token.scm7
-rw-r--r--gnu/tests/singularity.scm9
-rw-r--r--gnu/tests/ssh.scm9
-rw-r--r--gnu/tests/telephony.scm7
-rw-r--r--gnu/tests/version-control.scm33
-rw-r--r--gnu/tests/virtualization.scm16
-rw-r--r--gnu/tests/web.scm36
-rw-r--r--guix/build-system/android-ndk.scm99
-rw-r--r--guix/build-system/ant.scm82
-rw-r--r--guix/build-system/asdf.scm146
-rw-r--r--guix/build-system/cargo.scm81
-rw-r--r--guix/build-system/chicken.scm96
-rw-r--r--guix/build-system/clojure.scm110
-rw-r--r--guix/build-system/cmake.scm221
-rw-r--r--guix/build-system/copy.scm77
-rw-r--r--guix/build-system/dub.scm89
-rw-r--r--guix/build-system/dune.scm87
-rw-r--r--guix/build-system/emacs.scm66
-rw-r--r--guix/build-system/font.scm65
-rw-r--r--guix/build-system/glib-or-gtk.scm264
-rw-r--r--guix/build-system/gnu.scm329
-rw-r--r--guix/build-system/go.scm194
-rw-r--r--guix/build-system/guile.scm170
-rw-r--r--guix/build-system/haskell.scm90
-rw-r--r--guix/build-system/julia.scm66
-rw-r--r--guix/build-system/linux-module.scm176
-rw-r--r--guix/build-system/maven.scm114
-rw-r--r--guix/build-system/meson.scm344
-rw-r--r--guix/build-system/minify.scm60
-rw-r--r--guix/build-system/node.scm65
-rw-r--r--guix/build-system/ocaml.scm84
-rw-r--r--guix/build-system/perl.scm77
-rw-r--r--guix/build-system/python.scm87
-rw-r--r--guix/build-system/qt.scm213
-rw-r--r--guix/build-system/r.scm68
-rw-r--r--guix/build-system/rakudo.scm62
-rw-r--r--guix/build-system/renpy.scm89
-rw-r--r--guix/build-system/ruby.scm72
-rw-r--r--guix/build-system/scons.scm76
-rw-r--r--guix/build-system/texlive.scm103
-rw-r--r--guix/build-system/trivial.scm97
-rw-r--r--guix/build-system/waf.scm88
-rw-r--r--guix/build/copy-build-system.scm11
-rw-r--r--guix/build/emacs-build-system.scm16
-rw-r--r--guix/build/glib-or-gtk-build-system.scm173
-rw-r--r--guix/build/gnu-build-system.scm220
-rw-r--r--guix/build/gremlin.scm121
-rw-r--r--guix/build/julia-build-system.scm48
-rw-r--r--guix/build/lisp-utils.scm2
-rw-r--r--guix/build/maven/pom.scm2
-rw-r--r--guix/build/meson-build-system.scm20
-rw-r--r--guix/build/meson-configuration.scm56
-rw-r--r--guix/build/minify-build-system.scm11
-rw-r--r--guix/build/python-build-system.scm144
-rw-r--r--guix/build/qt-build-system.scm1
-rw-r--r--guix/build/qt-utils.scm6
-rw-r--r--guix/build/rakudo-build-system.scm12
-rw-r--r--guix/build/rpath.scm59
-rw-r--r--guix/build/ruby-build-system.scm25
-rw-r--r--guix/build/syscalls.scm7
-rw-r--r--guix/build/texlive-build-system.scm50
-rw-r--r--guix/build/union.scm7
-rw-r--r--guix/build/utils.scm251
-rw-r--r--guix/deprecation.scm22
-rw-r--r--guix/derivations.scm31
-rw-r--r--guix/gexp.scm388
-rw-r--r--guix/grafts.scm12
-rw-r--r--guix/import/cran.scm6
-rw-r--r--guix/import/egg.scm14
-rw-r--r--guix/import/elpa.scm7
-rw-r--r--guix/import/gem.scm8
-rw-r--r--guix/import/hackage.scm11
-rw-r--r--guix/import/opam.scm17
-rw-r--r--guix/import/print.scm34
-rw-r--r--guix/import/pypi.scm13
-rw-r--r--guix/lint.scm36
-rw-r--r--guix/packages.scm859
-rw-r--r--guix/profiles.scm50
-rw-r--r--guix/scripts/pack.scm29
-rw-r--r--guix/scripts/style.scm548
-rw-r--r--guix/status.scm2
-rw-r--r--guix/store.scm6
-rw-r--r--guix/store/roots.scm2
-rw-r--r--guix/svn-download.scm4
-rw-r--r--guix/tests.scm69
-rw-r--r--guix/utils.scm225
-rw-r--r--m4/guix.m44
-rw-r--r--po/guix/POTFILES.in1
-rw-r--r--tests/build-utils.scm49
-rw-r--r--tests/builders.scm132
-rw-r--r--tests/cran.scm10
-rw-r--r--tests/egg.scm27
-rw-r--r--tests/gem.scm15
-rw-r--r--tests/gexp.scm54
-rw-r--r--tests/gremlin.scm88
-rw-r--r--tests/guix-build.sh2
-rw-r--r--tests/guix-environment.sh8
-rw-r--r--tests/guix-shell.sh6
-rw-r--r--tests/hackage.scm22
-rw-r--r--tests/lint.scm16
-rw-r--r--tests/opam.scm9
-rw-r--r--tests/pack.scm4
-rw-r--r--tests/packages.scm292
-rw-r--r--tests/print.scm4
-rw-r--r--tests/pypi.scm27
-rw-r--r--tests/store.scm3
-rw-r--r--tests/style.scm366
-rw-r--r--tests/utils.scm17
865 files changed, 88275 insertions, 84539 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index aaa48ab552..12a6f08739 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -57,6 +57,12 @@
    (eval . (put 'substitute* 'scheme-indent-function 1))
    (eval . (put 'match-record 'scheme-indent-function 2))
 
+   ;; '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))
    (eval . (put 'replace 'scheme-indent-function 1))
@@ -120,6 +126,7 @@
    (eval . (put 'with-extensions 'scheme-indent-function 1))
    (eval . (put 'with-parameters 'scheme-indent-function 1))
    (eval . (put 'let-system 'scheme-indent-function 1))
+   (eval . (put 'with-build-variables 'scheme-indent-function 2))
 
    (eval . (put 'with-database 'scheme-indent-function 2))
    (eval . (put 'call-with-database 'scheme-indent-function 1))
diff --git a/Makefile.am b/Makefile.am
index f7e7b5184f..c4ccee65f1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -229,7 +229,6 @@ MODULES =					\
   guix/build/union.scm				\
   guix/build/profiles.scm			\
   guix/build/compile.scm			\
-  guix/build/rpath.scm				\
   guix/build/cvs.scm				\
   guix/build/svn.scm				\
   guix/build/syscalls.scm                       \
@@ -240,6 +239,7 @@ MODULES =					\
   guix/build/emacs-utils.scm			\
   guix/build/java-utils.scm			\
   guix/build/lisp-utils.scm			\
+  guix/build/meson-configuration.scm		\
   guix/build/maven/java.scm			\
   guix/build/maven/plugin.scm			\
   guix/build/maven/pom.scm			\
@@ -294,6 +294,7 @@ MODULES =					\
   guix/scripts/refresh.scm			\
   guix/scripts/repl.scm				\
   guix/scripts/describe.scm			\
+  guix/scripts/style.scm			\
   guix/scripts/system.scm			\
   guix/scripts/system/search.scm		\
   guix/scripts/system/reconfigure.scm		\
@@ -400,6 +401,8 @@ AUX_FILES =						\
   gnu/packages/aux-files/linux-libre/4.4-i686.conf	\
   gnu/packages/aux-files/linux-libre/4.4-x86_64.conf	\
   gnu/packages/aux-files/pack-audit.c			\
+  gnu/packages/aux-files/python/sanity-check.py		\
+  gnu/packages/aux-files/python/sitecustomize.py	\
   gnu/packages/aux-files/run-in-namespace.c
 
 # Templates, examples.
@@ -514,6 +517,7 @@ SCM_TESTS =					\
   tests/swh.scm				\
   tests/syscalls.scm				\
   tests/system.scm				\
+  tests/style.scm				\
   tests/texlive.scm				\
   tests/transformations.scm			\
   tests/ui.scm					\
diff --git a/doc/build.scm b/doc/build.scm
index e7b42be17c..eebb493a2e 100644
--- a/doc/build.scm
+++ b/doc/build.scm
@@ -725,7 +725,7 @@ makeinfo OPTIONS."
   ;; accented letters.
   ;;
   ;; (define texlive
-  ;;   (texlive-union (list texlive-tex-texinfo
+  ;;   (texlive-updmap.cfg (list texlive-tex-texinfo
   ;;                        texlive-generic-epsf
   ;;                        texlive-fonts-ec)))
 
diff --git a/doc/guix-cookbook.texi b/doc/guix-cookbook.texi
index dc52f6d38c..88d3b98394 100644
--- a/doc/guix-cookbook.texi
+++ b/doc/guix-cookbook.texi
@@ -795,10 +795,8 @@ another, more sophisticated package (slightly modified from the source):
                   "17pjvprmdrx4h6bb1hhc98w9qi6ki7yl57f090n9kbhswxqfs7s3"))
                 (patches (search-patches "libgit2-mtime-0.patch"))
                 (modules '((guix build utils)))
-                (snippet '(begin
-                            ;; Remove bundled software.
-                            (delete-file-recursively "deps")
-                            #true))))
+                ;; Remove bundled software.
+                (snippet '(delete-file-recursively "deps"))))
       (build-system cmake-build-system)
       (outputs '("out" "debug"))
       (arguments
@@ -812,23 +810,19 @@ another, more sophisticated package (slightly modified from the source):
                  (("#!/bin/sh") (string-append "#!" (which "sh"))))
                (substitute* "tests/clar/fs.h"
                  (("/bin/cp") (which "cp"))
-                 (("/bin/rm") (which "rm")))
-               #true))
+                 (("/bin/rm") (which "rm")))))
            ;; Run checks more verbosely.
            (replace 'check
              (lambda _ (invoke "./libgit2_clar" "-v" "-Q")))
            (add-after 'unpack 'make-files-writable-for-tests
              (lambda _ (for-each make-file-writable (find-files "." ".*")))))))
       (inputs
-       `(("libssh2" ,libssh2)
-         ("http-parser" ,http-parser)
-         ("python" ,python-wrapper)))
+       (list libssh2 http-parser python-wrapper))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (propagated-inputs
        ;; These two libraries are in 'Requires.private' in libgit2.pc.
-       `(("openssl" ,openssl)
-         ("zlib" ,zlib)))
+       (list openssl zlib))
       (home-page "https://libgit2.github.com/")
       (synopsis "Library providing Git core methods")
       (description
@@ -892,22 +886,6 @@ Snippets might need additional Guile modules which can be imported from the
 
 @subsubsection Inputs
 
-First, a syntactic comment: See the quasi-quote / comma syntax?
-
-@lisp
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-@end lisp
-
-is equivalent to
-
-@lisp
-    (native-inputs
-     (list (list "pkg-config" pkg-config)))
-@end lisp
-
-You'll mostly see the former because it's shorter.
-
 There are 3 different input types.  In short:
 
 @table @asis
@@ -941,6 +919,24 @@ It also matters when a substitute is available, in which case only the @emph{inp
 and @emph{propagated inputs} will be fetched: the @emph{native inputs} are not required to
 install a package from a substitute.
 
+@quotation Note
+You may see here and there snippets where package inputs are written
+quite differently, like so:
+
+@lisp
+;; The "old style" for inputs.
+(inputs
+ `(("libssh2" ,libssh2)
+   ("http-parser" ,http-parser)
+   ("python" ,python-wrapper)))
+@end lisp
+
+This is the ``old style'', where each input in the list is explicitly
+given a label (a string).  It is still supported but we recommend using
+the style above instead.  @xref{package Reference,,, guix, GNU Guix
+Reference Manual}, for more info.
+@end quotation
+
 @subsubsection Outputs
 
 Just like how a package can have multiple inputs, it can also produce multiple
diff --git a/doc/guix.texi b/doc/guix.texi
index 757e44398c..49dd80e9dc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -96,6 +96,7 @@ Copyright @copyright{} 2021 Domagoj Stolfa@*
 Copyright @copyright{} 2021 Hui Lu@*
 Copyright @copyright{} 2021 pukkamustard@*
 Copyright @copyright{} 2021 Alice Brenon@*
+Copyright @copyright{} 2021 Josselin Poiret@*
 Copyright @copyright{} 2021 Andrew Tropin@*
 Copyright @copyright{} 2021 Sarah Morgensen@*
 Copyright @copyright{} 2021 Josselin Poiret@*
@@ -297,6 +298,7 @@ Utilities
 * Invoking guix hash::          Computing the cryptographic hash of a file.
 * Invoking guix import::        Importing package definitions.
 * Invoking guix refresh::       Updating package definitions.
+* Invoking guix style::         Styling package definitions.
 * Invoking guix lint::          Finding errors in package definitions.
 * Invoking guix size::          Profiling disk usage.
 * Invoking guix graph::         Visualizing the graph of packages.
@@ -1918,12 +1920,12 @@ themselves.
 @subsection X11 Fonts
 
 @cindex fonts
-The majority of graphical applications use Fontconfig to locate and
-load fonts and perform X11-client-side rendering.  The @code{fontconfig}
-package in Guix looks for fonts in @file{$HOME/.guix-profile}
-by default.  Thus, to allow graphical applications installed with Guix
-to display fonts, you have to install fonts with Guix as well.
-Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
+The majority of graphical applications use Fontconfig to locate and load
+fonts and perform X11-client-side rendering.  The @code{fontconfig}
+package in Guix looks for fonts in @file{$HOME/.guix-profile} by
+default.  Thus, to allow graphical applications installed with Guix to
+display fonts, you have to install fonts with Guix as well.  Essential
+font packages include @code{font-ghostscript}, @code{font-dejavu}, and
 @code{font-gnu-freefont}.
 
 @cindex @code{fc-cache}
@@ -2822,8 +2824,8 @@ you should add them to @file{~/.bash_profile} (or equivalent file if you
 do not use Bash) so that environment variables are set next time you
 spawn a shell.  You only need to do this once and other search paths
 environment variables will be taken care of similarly---e.g., if you
-eventually install @code{python} and Python libraries, @code{PYTHONPATH}
-will be defined.
+eventually install @code{python} and Python libraries,
+@env{GUIX_PYTHONPATH} will be defined.
 
 You can go on installing packages at your will.  To list installed
 packages, run:
@@ -3578,24 +3580,26 @@ Show details about @var{package}, taken from the list of available packages, in
 recutils manual}).
 
 @example
-$ guix package --show=python | recsel -p name,version
-name: python
-version: 2.7.6
+$ guix package --show=guile | recsel -p name,version
+name: guile
+version: 3.0.5
+
+name: guile
+version: 3.0.2
 
-name: python
-version: 3.3.5
+name: guile
+version: 2.2.7
+@dots{}
 @end example
 
 You may also specify the full name of a package to only get details about a
 specific version of it (this time using the @command{guix show} alias):
 @example
-$ guix show python@@3.4 | recsel -p name,version
-name: python
-version: 3.4.3
+$ guix show guile@@3.0.5 | recsel -p name,version
+name: guile
+version: 3.0.5
 @end example
 
-
-
 @item --list-installed[=@var{regexp}]
 @itemx -I [@var{regexp}]
 List the currently installed packages in the specified profile, with the
@@ -6033,11 +6037,11 @@ guix environment guile -- make -j4
 
 In other situations, it is more convenient to specify the list of
 packages needed in the environment.  For example, the following command
-runs @command{python} from an environment containing Python@tie{}2.7 and
+runs @command{python} from an environment containing Python@tie{}3 and
 NumPy:
 
 @example
-guix environment --ad-hoc python2-numpy python-2.7 -- python
+guix environment --ad-hoc python-numpy python -- python3
 @end example
 
 Furthermore, one might want the dependencies of a package and also some
@@ -6917,7 +6921,7 @@ package looks like this:
                 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-silent-rules")))
-    (inputs `(("gawk" ,gawk)))
+    (inputs (list gawk))
     (synopsis "Hello, GNU world: An example GNU package")
     (description "Guess what GNU Hello prints!")
     (home-page "https://www.gnu.org/software/hello/")
@@ -7005,8 +7009,8 @@ Reference Manual}).
 
 @item
 The @code{inputs} field specifies inputs to the build process---i.e.,
-build-time or run-time dependencies of the package.  Here, we define an
-input called @code{"gawk"} whose value is that of the @code{gawk}
+build-time or run-time dependencies of the package.  Here, we add
+an input, a reference to the @code{gawk}
 variable; @code{gawk} is itself bound to a @code{<package>} object.
 
 @cindex backquote (quasiquote)
@@ -7131,20 +7135,42 @@ list, typically containing sequential keyword-value pairs.
 @itemx @code{native-inputs} (default: @code{'()})
 @itemx @code{propagated-inputs} (default: @code{'()})
 @cindex inputs, of packages
-These fields list dependencies of the package.  Each one is a list of
-tuples, where each tuple has a label for the input (a string) as its
+These fields list dependencies of the package.  Each element of these
+lists is either a package, origin, or other ``file-like object''
+(@pxref{G-Expressions}); to specify the output of that file-like object
+that should be used, pass a two-element list where the second element is
+the output (@pxref{Packages with Multiple Outputs}, for more on package
+outputs).  For example, the list below specifies three inputs:
+
+@lisp
+(list libffi libunistring
+      `(,glib "bin"))      ;the "bin" output of GLib
+@end lisp
+
+In the example above, the @code{"out"} output of @code{libffi} and
+@code{libunistring} is used.
+
+@quotation Compatibility Note
+Until version 1.3.0, input lists were a list of tuples,
+where each tuple has a label for the input (a string) as its
 first element, a package, origin, or derivation as its second element,
 and optionally the name of the output thereof that should be used, which
-defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
-more on package outputs).  For example, the list below specifies three
-inputs:
+defaults to @code{"out"}.  For example, the list below is equivalent to
+the one above, but using the @dfn{old input style}:
 
 @lisp
+;; Old input style (deprecated).
 `(("libffi" ,libffi)
   ("libunistring" ,libunistring)
-  ("glib:bin" ,glib "bin"))  ;the "bin" output of Glib
+  ("glib:bin" ,glib "bin"))  ;the "bin" output of GLib
 @end lisp
 
+This style is now deprecated; it is still supported but support will be
+removed in a future version.  It should not be used for new package
+definitions.  @xref{Invoking guix style}, on how to migrate to the new
+style.
+@end quotation
+
 @cindex cross compilation, package dependencies
 The distinction between @code{native-inputs} and @code{inputs} is
 necessary when considering cross-compilation.  When cross-compiling,
@@ -7230,13 +7256,37 @@ cross-compiling:
   ;; When cross-compiled, Guile, for example, depends on
   ;; a native version of itself.  Add it here.
   (native-inputs (if (%current-target-system)
-                     `(("self" ,this-package))
+                     (list this-package)
                      '())))
 @end lisp
 
 It is an error to refer to @code{this-package} outside a package definition.
 @end deffn
 
+The following helper procedures are provided to help deal with package
+inputs.
+
+@deffn {Scheme Procedure} lookup-package-input @var{package} @var{name}
+@deffnx {Scheme Procedure} lookup-package-native-input @var{package} @var{name}
+@deffnx {Scheme Procedure} lookup-package-propagated-input @var{package} @var{name}
+@deffnx {Scheme Procedure} lookup-package-direct-input @var{package} @var{name}
+Look up @var{name} among @var{package}'s inputs (or native, propagated,
+or direct inputs).  Return it if found, @code{#f} otherwise.
+
+@var{name} is the name of a package depended on.  Here's how you might
+use it:
+
+@lisp
+(use-modules (guix packages) (gnu packages base))
+
+(lookup-package-direct-input coreutils "gmp")
+@result{} #<package gmp@@6.2.1 @dots{}>
+@end lisp
+
+In this example we obtain the @code{gmp} package that is among the
+direct inputs of @code{coreutils}.
+@end deffn
+
 @cindex development inputs, of a package
 @cindex implicit inputs, of a package
 Sometimes you will want to obtain the list of inputs needed to
@@ -7558,20 +7608,42 @@ optional dependency, you can define a variant that removes that
 dependency like so:
 
 @lisp
-(use-modules (gnu packages gdb)    ;for 'gdb'
-             (srfi srfi-1))        ;for 'alist-delete'
+(use-modules (gnu packages gdb))   ;for 'gdb'
 
 (define gdb-sans-guile
   (package
     (inherit gdb)
-    (inputs (alist-delete "guile"
-                          (package-inputs gdb)))))
+    (inputs (modify-inputs (package-inputs gdb)
+              (delete "guile")))))
 @end lisp
 
-The @code{alist-delete} call above removes the tuple from the
-@code{inputs} field that has @code{"guile"} as its first element
-(@pxref{SRFI-1 Association Lists,,, guile, GNU Guile Reference
-Manual}).
+The @code{modify-inputs} form above removes the @code{"guile"} package
+from the @code{inputs} field of @code{gdb}.  The @code{modify-inputs}
+macro is a helper that can prove useful anytime you want to remove, add,
+or replace package inputs.
+
+@deffn {Scheme Syntax} modify-inputs @var{inputs} @var{clauses}
+Modify the given package inputs, as returned by @code{package-inputs} & co.,
+according to the given clauses.  The example below removes the GMP and ACL
+inputs of Coreutils and adds libcap to the back of the input list:
+
+@lisp
+(modify-inputs (package-inputs coreutils)
+  (delete "gmp" "acl")
+  (append libcap))
+@end lisp
+
+The example below replaces the @code{guile} package from the inputs of
+@code{guile-redis} with @code{guile-2.2}:
+
+@lisp
+(modify-inputs (package-inputs guile-redis)
+  (replace "guile" guile-2.2))
+@end lisp
+
+The last type of clause is @code{prepend}, to add inputs to the front of
+the list.
+@end deffn
 
 In some cases, you may find it useful to write functions
 (``procedures'', in Scheme parlance) that return a package based on some
@@ -7588,8 +7660,7 @@ depends on it:
     (name name)
     (version "3.0")
     ;; several fields omitted
-    (inputs
-     `(("lua" ,lua)))
+    (inputs (list lua))
     (synopsis "Socket library for Lua")))
 
 (define-public lua5.1-socket
@@ -8429,8 +8500,9 @@ packages, which consists in running @code{python setup.py build} and
 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
 
 For packages that install stand-alone Python programs under @code{bin/},
-it takes care of wrapping these programs so that their @env{PYTHONPATH}
-environment variable points to all the Python libraries they depend on.
+it takes care of wrapping these programs so that their
+@env{GUIX_PYTHONPATH} environment variable points to all the Python
+libraries they depend on.
 
 Which Python package is used to perform the build can be specified with
 the @code{#:python} parameter.  This is a useful way to force a package
@@ -8442,6 +8514,13 @@ By default guix calls @code{setup.py} under control of
 @code{setuptools}, much like @command{pip} does.  Some packages are not
 compatible with setuptools (and pip), thus you can disable this by
 setting the @code{#:use-setuptools?} parameter to @code{#f}.
+
+If a @code{"python"} output is available, the package is installed into it
+instead of the default @code{"out"} output. This is useful for packages that
+include a Python package as only a part of the software, and thus want to
+combine the phases of @code{python-build-system} with another build system.
+Python bindings are a common usecase.
+
 @end defvr
 
 @defvr {Scheme Variable} perl-build-system
@@ -8662,9 +8741,7 @@ implements the build procedure for packages that use
 
 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
 of inputs, and they can be changed with the parameters @code{#:meson}
-and @code{#:ninja} if needed.  The default Meson is
-@code{meson-for-build}, which is special because it doesn't clear the
-@code{RUNPATH} of binaries and libraries when they are installed.
+and @code{#:ninja} if needed.
 
 This build system is an extension of @code{gnu-build-system}, but with the
 following phases changed to some specific for Meson:
@@ -8682,8 +8759,10 @@ The phase runs @code{ninja} to build the package in parallel by default, but
 this can be changed with @code{#:parallel-build?}.
 
 @item check
-The phase runs @code{ninja} with the target specified in @code{#:test-target},
-which is @code{"test"} by default.
+The phase runs @samp{meson test} with a base set of options that cannot
+be overridden.  This base set of options can be extended via the
+@code{#:test-options} argument, for example to select or skip a specific
+test suite.
 
 @item install
 The phase runs @code{ninja install} and can not be changed.
@@ -8695,11 +8774,11 @@ Apart from that, the build system also adds the following phases:
 
 @item fix-runpath
 This phase ensures that all binaries can find the libraries they need.
-It searches for required libraries in subdirectories of the package being
-built, and adds those to @code{RUNPATH} where needed.  It also removes
-references to libraries left over from the build phase by
-@code{meson-for-build}, such as test dependencies, that aren't actually
-required for the program to run.
+It searches for required libraries in subdirectories of the package
+being built, and adds those to @code{RUNPATH} where needed.  It also
+removes references to libraries left over from the build phase by
+@code{meson}, such as test dependencies, that aren't actually required
+for the program to run.
 
 @item glib-or-gtk-wrap
 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
@@ -9078,12 +9157,14 @@ Make @var{file} writable for its owner.
 @end deffn
 
 @deffn {Scheme Procedure} copy-recursively @var{source} @var{destination} @
-  [#:log (current-output-port)] [#:follow-symlinks? #f] [#:keep-mtime? #f]
+  [#:log (current-output-port)] [#:follow-symlinks? #f] @
+  [#:copy-file copy-file] [#:keep-mtime? #f] [#:keep-permissions? #t]
 Copy @var{source} directory to @var{destination}.  Follow symlinks if
-@var{follow-symlinks?}  is true; otherwise, just preserve them.  When
-@var{keep-mtime?} is true, keep the modification time of the files in
-@var{source} on those of @var{destination}.  Write verbose output to the
-@var{log} port.
+@var{follow-symlinks?}  is true; otherwise, just preserve them.  Call
+@var{copy-file} to copy regular files.  When @var{keep-mtime?} is true,
+keep the modification time of the files in @var{source} on those of
+@var{destination}.  When @var{keep-permissions?} is true, preserve file
+permissions.  Write verbose output to the @var{log} port.
 @end deffn
 
 @deffn {Scheme Procedure} delete-file-recursively @var{dir} @
@@ -9167,6 +9248,31 @@ Return the complete file name for @var{program} as found in
 @code{$PATH}, or @code{#f} if @var{program} could not be found.
 @end deffn
 
+@deffn {Scheme Procedure} search-input-file @var{inputs} @var{name}
+@deffnx {Scheme Procedure} search-input-directory @var{inputs} @var{name}
+Return the complete file name for @var{name} as found in @var{inputs};
+@code{search-input-file} searches for a regular file and
+@code{search-input-directory} searches for a directory.  If @var{name}
+could not be found, an exception is raised.
+
+Here, @var{inputs} must be an association list like @code{inputs} and
+@code{native-inputs} as available to build phases (@pxref{Build
+Phases}).
+@end deffn
+
+Here is a (simplified) example of how @code{search-input-file} is used
+in a build phase of the @code{wireguard-tools} package:
+
+@lisp
+(add-after 'install 'wrap-wg-quick
+  (lambda* (#:key inputs outputs #:allow-other-keys)
+    (let ((coreutils (string-append (assoc-ref inputs "coreutils")
+                                    "/bin")))
+      (wrap-program (search-input-file outputs "bin/wg-quick")
+        #:sh (search-input-file inputs "bin/bash")
+        `("PATH" ":" prefix ,(list coreutils))))))
+@end lisp
+
 @subsection Build Phases
 
 @cindex build phases
@@ -10664,6 +10770,7 @@ the Scheme programming interface of Guix in a convenient way.
 * Invoking guix hash::          Computing the cryptographic hash of a file.
 * Invoking guix import::        Importing package definitions.
 * Invoking guix refresh::       Updating package definitions.
+* Invoking guix style::         Styling package definitions.
 * Invoking guix lint::          Finding errors in package definitions.
 * Invoking guix size::          Profiling disk usage.
 * Invoking guix graph::         Visualizing the graph of packages.
@@ -12579,6 +12686,102 @@ token procured from @uref{https://github.com/settings/tokens} or
 otherwise.
 
 
+@node Invoking guix style
+@section Invoking @command{guix style}
+
+The @command{guix style} command helps packagers style their package
+definitions according to the latest fashionable trends.  The command
+currently focuses on one aspect: the style of package inputs.  It may
+eventually be extended to handle other stylistic matters.
+
+The way package inputs are written is going through a transition
+(@pxref{package Reference}, for more on package inputs).  Until version
+1.3.0, package inputs were written using the ``old style'', where each
+input was given an explicit label, most of the time the package name:
+
+@lisp
+(package
+  ;; @dots{}
+  ;; The "old style" (deprecated).
+  (inputs `(("libunistring" ,libunistring)
+            ("libffi" ,libffi))))
+@end lisp
+
+Today, the old style is deprecated and the preferred style looks like
+this:
+
+@lisp
+(package
+  ;; @dots{}
+  ;; The "new style".
+  (inputs (list libunistring libffi)))
+@end lisp
+
+Likewise, uses of @code{alist-delete} and friends to manipulate inputs
+is now deprecated in favor of @code{modify-inputs} (@pxref{Defining
+Package Variants}, for more info on @code{modify-inputs}).
+
+In the vast majority of cases, this is a purely mechanical change on the
+surface syntax that does not even incur a package rebuild.  Running
+@command{guix style} can do that for you, whether you're working on
+packages in Guix proper or in an external channel.
+
+The general syntax is:
+
+@example
+guix style [@var{options}] @var{package}@dots{}
+@end example
+
+This causes @command{guix style} to analyze and rewrite the definition
+of @var{package}@dots{}.  It does so in a conservative way: preserving
+comments and bailing out if it cannot make sense of the code that
+appears in an inputs field.  The available options are listed below.
+
+@table @code
+@item --dry-run
+@itemx -n
+Show source file locations that would be edited but do not modify them.
+
+@item --load-path=@var{directory}
+@itemx -L @var{directory}
+Add @var{directory} to the front of the package module search path
+(@pxref{Package Modules}).
+
+@item --expression=@var{expr}
+@itemx -e @var{expr}
+Style the package @var{expr} evaluates to.
+
+For example, running:
+
+@example
+guix style -e '(@@ (gnu packages gcc) gcc-5)'
+@end example
+
+styles the @code{gcc-5} package definition.
+
+@item --input-simplification=@var{policy}
+Specify the package input simplification policy for cases where an input
+label does not match the corresponding package name.  @var{policy} may
+be one of the following:
+
+@table @code
+@item silent
+Simplify inputs only when the change is ``silent'', meaning that the
+package does not need to be rebuilt (its derivation is unchanged).
+
+@item safe
+Simplify inputs only when that is ``safe'' to do: the package might need
+to be rebuilt, but the change is known to have no observable effect.
+
+@item always
+Simplify inputs even when input labels do not match package names, and
+even if that might have an observable effect.
+@end table
+
+The default is @code{silent}, meaning that input simplifications do not
+trigger any package rebuild.
+@end table
+
 @node Invoking guix lint
 @section Invoking @command{guix lint}
 
@@ -12707,6 +12910,13 @@ declare them as in this example:
 @item formatting
 Warn about obvious source code formatting issues: trailing white space,
 use of tabulations, etc.
+
+@item input-labels
+Report old-style input labels that do not match the name of the
+corresponding package.  This aims to help migrate from the ``old input
+style''.  @xref{package Reference}, for more information on package
+inputs and input styles.  @xref{Invoking guix style}, on how to migrate
+to the new style.
 @end table
 
 The general syntax is:
@@ -18837,19 +19047,26 @@ example the @code{windowmaker} or @code{openbox} packages---preferably
 by adding it to the @code{packages} field of your operating system
 definition (@pxref{operating-system Reference, system-wide packages}).
 
+@anchor{wayland-gdm}
+GDM also supports Wayland: it can itself use Wayland instead of X11 for
+its user interface, and it can also start Wayland sessions.  The former is
+required for the latter, to enable, set @code{wayland?} to @code{#t} in
+@code{gdm-configuration}.
+
 @defvr {Scheme Variable} gdm-service-type
 This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
 Desktop Manager} (GDM), a program that manages graphical display servers and
 handles graphical user logins.  Its value must be a @code{gdm-configuration}
 (see below).
 
-@cindex session types (X11)
-@cindex X11 session types
+@cindex session types
 GDM looks for @dfn{session types} described by the @file{.desktop} files in
-@file{/run/current-system/profile/share/xsessions} and allows users to choose
-a session from the log-in screen.  Packages such as @code{gnome}, @code{xfce},
-and @code{i3} provide @file{.desktop} files; adding them to the system-wide
-set of packages automatically makes them available at the log-in screen.
+@file{/run/current-system/profile/share/xsessions} (for X11 sessions) and
+@file{/run/current-system/profile/share/wayland-sessions} (for Wayland
+sessions) and allows users to choose a session from the log-in screen.
+Packages such as @code{gnome}, @code{xfce}, @code{i3} and @code{sway} provide
+@file{.desktop} files; adding them to the system-wide set of packages
+automatically makes them available at the log-in screen.
 
 In addition, @file{~/.xsession} files are honored.  When available,
 @file{~/.xsession} must be an executable that starts a window manager
@@ -18882,6 +19099,13 @@ File name of the @code{dbus-daemon} executable.
 
 @item @code{gdm} (default: @code{gdm})
 The GDM package to use.
+
+@item @code{wayland?} (default: @code{#f})
+When true, enables Wayland in GDM, necessary to use Wayland sessions.
+
+@item @code{wayland-session} (default: @code{gdm-wayland-session-wrapper})
+The Wayland session wrapper to use, needed to setup the
+environment.
 @end table
 @end deftp
 
@@ -19363,6 +19587,12 @@ programs.
 Defaults to @samp{"lp"}.
 @end deftypevr
 
+@deftypevr {@code{files-configuration} parameter} string log-file-group
+Specifies the group name or ID that will be used for log files.
+
+Defaults to @samp{"lpadmin"}.
+@end deftypevr
+
 @deftypevr {@code{files-configuration} parameter} string log-file-perm
 Specifies the permissions for all log files that the scheduler writes.
 
@@ -20103,11 +20333,12 @@ expected.
 
 The desktop environments in Guix use the Xorg display server by
 default.  If you'd like to use the newer display server protocol
-called Wayland, you need to use the @code{sddm-service} instead of
-GDM as the graphical login manager.  You should then
-select the ``GNOME (Wayland)'' session in SDDM@.  Alternatively you can
-also try starting GNOME on Wayland manually from a TTY with the
-command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
+called Wayland, you need to enable Wayland support in GDM
+(@pxref{wayland-gdm}).  Another solution is to use the
+@code{sddm-service} instead of GDM as the graphical login manager.
+You should then select the ``GNOME (Wayland)'' session in SDDM@.
+Alternatively you can also try starting GNOME on Wayland manually from a
+TTY with the command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
 gnome-session``.  Currently only GNOME has support for Wayland.
 
 @defvr {Scheme Variable} gnome-desktop-service-type
@@ -20849,7 +21080,7 @@ configuration.
 @item @code{ident-file} (default: @code{%default-postgres-ident})
 Filename or G-expression for the user name mapping configuration.
 
-@item @code{socket-directory} (default: @code{#false})
+@item @code{socket-directory} (default: @code{"/var/run/postgresql"})
 Specifies the directory of the Unix-domain socket(s) on which PostgreSQL
 is to listen for connections from client applications. If set to
 @code{""} PostgreSQL does not listen on any Unix-domain sockets, in
@@ -33606,8 +33837,7 @@ The common way to create this file is as follows:
 (let* ((out       (assoc-ref %outputs "out"))
        (targetdir (string-append out "/share/" ,name))
        (app       (string-append out "/bin/" ,name))
-       (Rbin      (string-append (assoc-ref %build-inputs "r-min")
-                                 "/bin/Rscript")))
+       (Rbin      (search-input-file %build-inputs "/bin/Rscript")))
   ;; @dots{}
   (mkdir-p (string-append out "/bin"))
   (call-with-output-file app
@@ -35701,6 +35931,15 @@ are created using @code{define-record-type*}, you can write a succinct
 @var{body} that evaluates to the new service parameters by using the
 @code{inherit} feature that @code{define-record-type*} provides.
 
+Clauses can also have the following form:
+
+@lisp
+(delete @var{type})
+@end lisp
+
+Such a clause removes all services of the given @var{type} from
+@var{services}.
+
 @xref{Using the Configuration System}, for example usage.
 
 @end deffn
@@ -37099,6 +37338,20 @@ GDB}):
 From there on, GDB will pick up debugging information from the
 @file{.debug} files under @file{~/.guix-profile/lib/debug}.
 
+Below is an alternative GDB script which is useful when working with
+other profiles.  It takes advantage of the optional Guile integration in
+GDB.  This snippet is included by default on Guix System in the
+@file{~/.gdbinit} file.
+
+@example
+guile
+(use-modules (gdb))
+(execute (string-append "set debug-file-directory "
+                        (or (getenv "GDB_DEBUG_FILE_DIRECTORY")
+                            "~/.guix-profile/lib/debug")))
+end
+@end example
+
 In addition, you will most likely want GDB to be able to show the source
 code being debugged.  To do that, you will have to unpack the source
 code of the package of interest (obtained with @code{guix build
diff --git a/etc/news.scm b/etc/news.scm
index 49b0664edd..46bac0b625 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -312,6 +312,54 @@ Ce recours à Software Heritage fonctionne aussi pour les autres clones Git que
 Guix peut faire, comme lorsqu'on utilise @option{--with-commit} et les options
 de transformation de paquet similaires.")))
 
+ (entry (commit "db4681a4c17d282a661552f2f57e5c453d02e414")
+        (title
+         (en "@code{gdm-service-type} now supports Wayland")
+         (fr "@code{gdm-service-type} prend maintenant en charge Wayland"))
+        (body
+         (en "@code{gdm-service-type} has been updated to support being launched
+as a Wayland client, and to launch Wayland sessions. The @code{wayland?} boolean
+field in @code{gdm-configuration} controls whether GDM starts in Wayland or X
+mode. See @command{info \"(guix) X Window\"} for more information.
+
+Wayland mode for GDM will soon become the default in Guix, so if your
+hardware doesn't support Wayland (Nvidia users are the most concerned here),
+please consider disabling it now.")
+         (fr "@code{gdm-service-type} a été mis à jour et peut maintenant être
+lancé comme client Wayland, ainsi que lancer des sessions Wayland. Le champ
+booléen @code{wayland?} de @code{gdm-configuration} contrôle le mode dans lequel
+GDM est lancé (Wayland ou X). Pour plus d'informations, voir
+@command{info \"(guix) X Window\"} (en anglais).
+
+GDM sera bientôt lancé en mode Wayland par défaut sur Guix, donc si votre matériel
+ne le prend pas en charge (les utilisateur·ices de cartes Nvidia sont les plus
+concerné·es), merci de le désactiver dès maintenant.")))
+
+ (entry (commit "f23803af2018a148fb088f2516d79c20d6bf95f0")
+        (title
+         (en "Input labels can now be omitted in package definitions"))
+        (body
+         (en "If you have written package definitions before, you may know
+that package inputs required a bit of boilerplate: each input needs to have an
+associated label (a string), which you can refer to in ``build-side code''.
+
+Input labels are now unnecessary, meaning that you can write code like:
+
+@lisp
+(package
+  ;; @dots{}
+  (inputs (list libunistring libffi libgc)))
+@end lisp
+
+Notice that the @code{inputs} field is simplified compared to the ``old
+style''.  When needed, you can now use g-expressions (gexps) to refer to
+another package in build-side code.  Additionally, the new
+@code{modify-inputs} macro facilitates common operations on inputs---deleting,
+replacing, adding inputs.
+
+To ease transition to the ``new style'', a new @command{guix style} command is
+provided.  Run @command{info \"(guix) Invoking guix style\"} for more info.")))
+
  (entry (commit "82daab42811a2e3c7684ebdf12af75ff0fa67b99")
         (title
          (en "New @samp{deb} format for the @command{guix pack} command")
diff --git a/etc/release-manifest.scm b/etc/release-manifest.scm
index 4375c9bf8b..e7e64efda4 100644
--- a/etc/release-manifest.scm
+++ b/etc/release-manifest.scm
@@ -125,8 +125,13 @@ TARGET."
 (define %system-manifest
   (manifest
    (append-map (lambda (system)
-                 (map (cut package->manifest-entry* <> system)
-                      %system-packages))
+                 ;; Some of %SYSTEM-PACKAGES are currently unsupported on some
+                 ;; systems--e.g., GNOME on non-x86_64, due to Rust.  Filter
+                 ;; them out.
+                 (filter-map (lambda (package)
+                               (and (supported-package? package system)
+                                    (package->manifest-entry* package system)))
+                             %system-packages))
                '("x86_64-linux" "i686-linux"))))  ;Guix System
 
 (define %cross-manifest
diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm
index fe754cd147..0ebe535526 100644
--- a/gnu/build/marionette.scm
+++ b/gnu/build/marionette.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -20,6 +20,7 @@
 (define-module (gnu build marionette)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-64)
   #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
   #:use-module (ice-9 popen)
@@ -33,7 +34,9 @@
             marionette-screen-text
             wait-for-screen-text
             %qwerty-us-keystrokes
-            marionette-type))
+            marionette-type
+
+            system-test-runner))
 
 ;;; Commentary:
 ;;;
@@ -358,4 +361,69 @@ to actual keystrokes."
   (for-each (cut marionette-control <> marionette)
             (string->keystroke-commands str keystrokes)))
 
+
+;;;
+;;; Test helper.
+;;;
+
+(define* (system-test-runner #:optional log-directory)
+  "Return a SRFI-64 test runner that calls 'exit' upon 'test-end'.  When
+LOG-DIRECTORY is specified, create log file within it."
+  (let ((runner  (test-runner-simple)))
+    ;; Log to a file under LOG-DIRECTORY.
+    (test-runner-on-group-begin! runner
+      (let ((on-begin (test-runner-on-group-begin runner)))
+        (lambda (runner suite-name count)
+          (when log-directory
+            (catch 'system-error
+              (lambda ()
+                (mkdir log-directory))
+              (lambda args
+                (unless (= (system-error-errno args) EEXIST)
+                  (apply throw args))))
+            (set! test-log-to-file
+                  (string-append log-directory "/" suite-name ".log")))
+          (on-begin runner suite-name count))))
+
+    ;; The default behavior on 'test-end' is to only write a line if the test
+    ;; failed.  Arrange to also write a line on success.
+    (test-runner-on-test-end! runner
+      (let ((on-end (test-runner-on-test-end runner)))
+        (lambda (runner)
+          (let* ((kind      (test-result-ref runner 'result-kind))
+                 (results   (test-result-alist runner))
+                 (test-name (assq-ref results 'test-name)))
+            (unless (memq kind '(fail xpass))
+              (format (current-output-port) "~a: ~a~%"
+                      (string-upcase (symbol->string kind))
+                      test-name)))
+
+          (on-end runner))))
+
+    ;; On 'test-end', display test results and exit with zero if and only if
+    ;; there were no test failures.
+    (test-runner-on-final! runner
+      (lambda (runner)
+        (let ((success? (= (test-runner-fail-count runner) 0)))
+          (test-on-final-simple runner)
+
+          (when (not success?)
+            (let* ((log-port (test-runner-aux-value runner))
+                   (log-file (port-filename log-port)))
+              (format (current-error-port)
+                      "\nTests failed, dumping log file '~a'.\n\n"
+                      log-file)
+
+              ;; At this point LOG-PORT is not closed yet; flush it.
+              (force-output log-port)
+
+              ;; Brute force to avoid dependency on (guix build utils) for
+              ;; 'dump-port'.
+              (let ((content (call-with-input-file log-file
+                               get-bytevector-all)))
+                (put-bytevector (current-error-port) content))))
+
+          (exit success?))))
+    runner))
+
 ;;; marionette.scm ends here
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index 7b55127599..9d32824764 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -164,8 +164,8 @@ the #:references-graphs parameter of 'derivation'."
          "-cpu" "max"
          "-m" (number->string memory-size)
          "-nic" "user,model=virtio-net-pci"
-         "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
-         "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
+         "-object" "rng-random,filename=/dev/urandom,id=guix-vm-rng"
+         "-device" "virtio-rng-pci,rng=guix-vm-rng"
          "-virtfs"
          (string-append "local,id=store_dev,path="
                         (%store-directory)
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 289e2a98c2..6039af8f07 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -69,7 +69,6 @@
   #:export (derivation->job
             image->job
 
-            %bootstrap-packages
             %core-packages
             %cross-targets
             channel-source->package
@@ -130,7 +129,7 @@ building the derivation."
 (define (package-cross-job store job-name package target system)
   "Return a job called TARGET.JOB-NAME that cross-builds PACKAGE for TARGET on
 SYSTEM."
-  (let ((name (string-append target "." job-name "." system)))
+  (let ((name (string-append target "." job-name)))
     (package-job store name package system
                  #:cross? #t
                  #:target target)))
@@ -139,9 +138,9 @@ SYSTEM."
   ;; Note: Don't put the '-final' package variants because (1) that's
   ;; implicit, and (2) they cannot be cross-built (due to the explicit input
   ;; chain.)
-  (list gcc-7 gcc-8 gcc-9 gcc-10 glibc binutils
+  (list gcc-8 gcc-9 gcc-10 gcc-11 glibc binutils
         gmp mpfr mpc coreutils findutils diffutils patch sed grep
-        gawk gnu-gettext hello guile-2.0 guile-2.2 zlib gzip xz guix
+        gawk gnu-gettext hello guile-2.2 guile-3.0 zlib gzip xz guix
         %bootstrap-binaries-tarball
         %binutils-bootstrap-tarball
         (%glibc-bootstrap-tarball)
@@ -149,13 +148,18 @@ SYSTEM."
         %guile-bootstrap-tarball
         %bootstrap-tarballs))
 
-(define %bootstrap-packages
-  ;; Return the list of bootstrap packages from the commencement module.
-  (filter package?
-          (module-map
-           (lambda (sym var)
-             (variable-ref var))
-           (resolve-module '(gnu packages commencement)))))
+(define (commencement-packages system)
+  "Return the list of bootstrap packages from the commencement module for
+SYSTEM."
+  ;; Only include packages supported on SYSTEM.  For example, the Mes
+  ;; bootstrap graph is currently not supported on ARM so it should be
+  ;; excluded.
+  (filter (lambda (obj)
+            (and (package? obj)
+                 (supported-package? obj system)))
+          (module-map (lambda (sym var)
+                        (variable-ref var))
+                      (resolve-module '(gnu packages commencement)))))
 
 (define (packages-to-cross-build target)
   "Return the list of packages to cross-build for TARGET."
@@ -297,20 +301,16 @@ otherwise use the IMAGE name."
 
 (define channel-build-system
   ;; Build system used to "convert" a channel instance to a package.
-  (let* ((build (lambda* (store name inputs
-                                #:key source commit system
-                                #:allow-other-keys)
-                  (run-with-store store
-                    ;; SOURCE can be a lowerable object such as <local-file>
-                    ;; or a file name.  Adjust accordingly.
-                    (mlet* %store-monad ((source (if (string? source)
-                                                     (return source)
-                                                     (lower-object source)))
-                                         (instance
-                                          -> (checkout->channel-instance
-                                              source #:commit commit)))
-                      (channel-instances->derivation (list instance)))
-                    #:system system)))
+  (let* ((build (lambda* (name inputs
+                               #:key source commit system
+                               #:allow-other-keys)
+                  (mlet* %store-monad ((source (if (string? source)
+                                                   (return source)
+                                                   (lower-object source)))
+                                       (instance
+                                        -> (checkout->channel-instance
+                                            source #:commit commit)))
+                    (channel-instances->derivation (list instance)))))
          (lower (lambda* (name #:key system source commit
                                #:allow-other-keys)
                   (bag
@@ -538,7 +538,7 @@ names."
            (map (lambda (package)
                   (package-job store (job-name package)
                                package system))
-                (append %bootstrap-packages %core-packages))
+                (append (commencement-packages system) %core-packages))
            (cross-jobs store system)))
          ('guix
           ;; Build Guix modules only.
diff --git a/gnu/installer/keymap.scm b/gnu/installer/keymap.scm
index c42b308009..83b65a0427 100644
--- a/gnu/installer/keymap.scm
+++ b/gnu/installer/keymap.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2018, 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -79,6 +79,11 @@
   "Parse FILE and return two values, the list of supported X11-KEYMAP-MODEL
 and X11-KEYMAP-LAYOUT records. FILE is an XML file from the X Keyboard
 Configuration Database, describing possible XKB configurations."
+  (define maybe-empty
+    (match-lambda
+      ((x) x)
+      (#f "")))
+
   (define (model m)
     (sxml-match m
                 [(model
@@ -108,7 +113,7 @@ Configuration Database, describing possible XKB configurations."
                    . ,rest-variant))
                  (x11-keymap-variant
                   (name name)
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-variant 'description))))]))
 
   (define (layout l)
@@ -120,9 +125,9 @@ Configuration Database, describing possible XKB configurations."
                   (variantList ,[variant -> v] ...))
                  (x11-keymap-layout
                   (name name)
-                  (synopsis (car
+                  (synopsis (maybe-empty
                              (assoc-ref rest-layout 'shortDescription)))
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-layout 'description)))
                   (variants (list v ...)))]
                 [(layout
@@ -131,9 +136,9 @@ Configuration Database, describing possible XKB configurations."
                    . ,rest-layout))
                  (x11-keymap-layout
                   (name name)
-                  (synopsis (car
+                  (synopsis (maybe-empty
                              (assoc-ref rest-layout 'shortDescription)))
-                  (description (car
+                  (description (maybe-empty
                                 (assoc-ref rest-layout 'description)))
                   (variants '()))]))
 
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index ad7dd6bf91..289cd660fd 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -1418,9 +1418,11 @@ USER-PARTITIONS, or return nothing."
             (let* ((uuids (map (lambda (file)
                                  (uuid->string (read-partition-uuid file)))
                                swap-devices)))
-              `((swap-devices (list ,@(map (lambda (uuid)
-                                             `(uuid ,uuid))
-                                           uuids))))))
+              `((swap-devices
+                 (list ,@(map (lambda (uuid)
+                                `(swap-space
+                                  (target (uuid ,uuid))))
+                              uuids))))))
       ,@(if (null? encrypted-partitions)
             '()
             `((mapped-devices
diff --git a/gnu/local.mk b/gnu/local.mk
index f485e733e0..7e1cedf186 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -11,7 +11,7 @@
 # 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>
-# Copyright © 2016, 2017, 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 # Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 # Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -40,11 +40,13 @@
 # Copyright © 2020 Malte Frank Gerdes <mate.f.gerdes@gmail.com>
 # 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 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 # Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz>
 # Copyright © 2021 Andrew Tropin <andrew@trop.in>
+# Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -539,6 +541,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/slang.scm			\
   %D%/packages/smalltalk.scm			\
   %D%/packages/sml.scm				\
+  %D%/packages/solidity.scm			\
   %D%/packages/speech.scm			\
   %D%/packages/sphinx.scm			\
   %D%/packages/spice.scm			\
@@ -821,7 +824,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/abcl-fix-build-xml.patch	\
   %D%/packages/patches/ableton-link-system-libraries-debian.patch	\
   %D%/packages/patches/abiword-explictly-cast-bools.patch	\
-  %D%/packages/patches/abseil-cpp-fix-gtest.patch		\
   %D%/packages/patches/abseil-cpp-fix-strerror_test.patch	\
   %D%/packages/patches/adb-add-libraries.patch			\
   %D%/packages/patches/adb-libssl_11-compatibility.patch	\
@@ -834,6 +836,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/aegisub-boost68.patch			\
   %D%/packages/patches/aegisub-make43.patch			\
   %D%/packages/patches/agg-am_c_prototype.patch			\
+  %D%/packages/patches/agg-2.5-gcc8.patch			\
   %D%/packages/patches/akonadi-paths.patch		\
   %D%/packages/patches/akonadi-not-relocatable.patch		\
   %D%/packages/patches/akonadi-timestamps.patch		\
@@ -850,6 +853,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ath9k-htc-firmware-gcc.patch		\
   %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-build-with-system-portaudio.patch \
   %D%/packages/patches/audacity-add-include.patch 		\
   %D%/packages/patches/audiofile-fix-datatypes-in-tests.patch	\
@@ -870,6 +874,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/avahi-localstatedir.patch		\
   %D%/packages/patches/avidemux-install-to-lib.patch		\
   %D%/packages/patches/awesome-reproducible-png.patch		\
+  %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	\
@@ -878,6 +883,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/bastet-change-source-of-unordered_set.patch	\
   %D%/packages/patches/bazaar-CVE-2017-14176.patch		\
   %D%/packages/patches/bc-fix-cross-compilation.patch		\
+  %D%/packages/patches/bdb-5.3-atomics-on-gcc-9.patch		\
   %D%/packages/patches/bear-disable-preinstall-tests.patch	\
   %D%/packages/patches/bind-re-add-attr-constructor-priority.patch	\
   %D%/packages/patches/brightnessctl-elogind-support.patch	\
@@ -895,9 +901,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/beancount-disable-googleapis-fonts.patch	\
   %D%/packages/patches/behave-skip-a-couple-of-tests.patch	\
   %D%/packages/patches/beignet-correct-file-names.patch		\
-  %D%/packages/patches/biber-fix-encoding-write.patch		\
-  %D%/packages/patches/biber-sortinithash.patch			\
   %D%/packages/patches/bidiv-update-fribidi.patch		\
+  %D%/packages/patches/binutils-2.37-file-descriptor-leak.patch	\
   %D%/packages/patches/binutils-boot-2.20.1a.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/binutils-mingw-w64-timestamp.patch	\
@@ -921,9 +926,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/catdoc-CVE-2017-11110.patch		\
   %D%/packages/patches/circos-remove-findbin.patch		\
   %D%/packages/patches/cdparanoia-fpic.patch			\
+  %D%/packages/patches/cdrkit-libre-cross-compile.patch	\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
-  %D%/packages/patches/ceph-fix-snappy-breaking-change.patch	\
+  %D%/packages/patches/ceph-boost-compat.patch			\
+  %D%/packages/patches/ceph-rocksdb-compat.patch		\
+  %D%/packages/patches/cheese-vala-update.patch		        \
   %D%/packages/patches/chez-scheme-build-util-paths-backport.patch      \
   %D%/packages/patches/chmlib-inttypes.patch			\
   %D%/packages/patches/cl-asdf-config-directories.patch		\
@@ -946,12 +954,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-runtime-3.9-libsanitizer-mode-field.patch	\
   %D%/packages/patches/clang-runtime-3.8-libsanitizer-mode-field.patch	\
   %D%/packages/patches/classpath-aarch64-support.patch		\
+  %D%/packages/patches/classpath-miscompilation.patch		\
+  %D%/packages/patches/cling-use-shared-library.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
   %D%/packages/patches/cmake-curl-certificates.patch		\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %D%/packages/patches/collectd-5.11.0-noinstallvar.patch		\
   %D%/packages/patches/combinatorial-blas-awpm.patch		\
   %D%/packages/patches/combinatorial-blas-io-fix.patch		\
+  %D%/packages/patches/coreutils-gnulib-tests.patch		\
   %D%/packages/patches/coq-fix-envvars.patch			\
   %D%/packages/patches/coreutils-ls.patch			\
   %D%/packages/patches/cpuinfo-system-libraries.patch		\
@@ -959,20 +970,17 @@ dist_patch_DATA =						\
   %D%/packages/patches/crda-optional-gcrypt.patch		\
   %D%/packages/patches/clucene-contribs-lib.patch               \
   %D%/packages/patches/cube-nocheck.patch			\
-  %D%/packages/patches/cups-CVE-2020-10001.patch		\
   %D%/packages/patches/curl-use-ssl-cert-env.patch		\
-  %D%/packages/patches/curl-7.76-use-ssl-cert-env.patch	\
-  %D%/packages/patches/curl-7.77-tls-priority-string.patch	\
   %D%/packages/patches/cursynth-wave-rand.patch			\
   %D%/packages/patches/cvs-CVE-2017-12836.patch		\
   %D%/packages/patches/cyrus-sasl-ac-try-run-fix.patch		\
   %D%/packages/patches/cyrus-sasl-CVE-2019-19906.patch		\
   %D%/packages/patches/c++-gsl-find-system-gtest.patch		\
+  %D%/packages/patches/c++-gsl-move-array-bounds-tests.patch	\
   %D%/packages/patches/date-output-pkg-config-files.patch	\
   %D%/packages/patches/datefudge-gettimeofday.patch		\
   %D%/packages/patches/dbacl-include-locale.h.patch		\
   %D%/packages/patches/dbus-helper-search-path.patch		\
-  %D%/packages/patches/dbus-CVE-2020-12049.patch		\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
   %D%/packages/patches/dbxfs-remove-sentry-sdk.patch		\
@@ -983,15 +991,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/desmume-gcc7-fixes.patch			\
   %D%/packages/patches/dfu-programmer-fix-libusb.patch		\
   %D%/packages/patches/diffoscope-fix-llvm-test.patch		\
-  %D%/packages/patches/diffutils-gets-undeclared.patch		\
+  %D%/packages/patches/diffutils-fix-signal-processing.patch	\
   %D%/packages/patches/dkimproxy-add-ipv6-support.patch		\
   %D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch	\
+  %D%/packages/patches/docbook-xsl-support-old-url.patch	\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
   %D%/packages/patches/docker-fix-tests.patch			\
   %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch	\
-  %D%/packages/patches/doxygen-test.patch			\
-  %D%/packages/patches/doxygen-1.8.17-runtests.patch		\
   %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch	\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
   %D%/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch	\
@@ -1009,6 +1016,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/elixir-path-length.patch			\
   %D%/packages/patches/elm-compiler-disable-reactor.patch	\
   %D%/packages/patches/elm-compiler-fix-map-key.patch		\
+  %D%/packages/patches/elogind-revert-polkit-detection.patch	\
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
   %D%/packages/patches/emacs-ignore-empty-xim-styles.patch	\
@@ -1026,14 +1034,10 @@ dist_patch_DATA =						\
   %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/evolution-CVE-2020-11879.patch		\
-  %D%/packages/patches/evolution-data-server-CVE-2020-14928.patch	\
-  %D%/packages/patches/evolution-data-server-CVE-2020-16117.patch	\
-  %D%/packages/patches/evolution-data-server-locales.patch	\
-  %D%/packages/patches/evolution-data-server-libical-compat.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		\
+  %D%/packages/patches/farstream-gupnp.patch                         \
   %D%/packages/patches/farstream-make.patch                          \
   %D%/packages/patches/fastcap-mulGlobal.patch			\
   %D%/packages/patches/fastcap-mulSetup.patch			\
@@ -1047,17 +1051,19 @@ dist_patch_DATA =						\
   %D%/packages/patches/fifo-map-fix-flags-for-gcc.patch		\
   %D%/packages/patches/fifo-map-remove-catch.hpp.patch		\
   %D%/packages/patches/findutils-localstatedir.patch		\
-  %D%/packages/patches/findutils-test-rwlock-threads.patch	\
   %D%/packages/patches/flann-cmake-3.11.patch			\
   %D%/packages/patches/flatpak-fix-path.patch			\
+  %D%/packages/patches/fontconfig-cache-ignore-mtime.patch	\
   %D%/packages/patches/foobillard++-pkg-config.patch		\
   %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
   %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch	\
-  %D%/packages/patches/fontconfig-hurd-path-max.patch		\
   %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		\
   %D%/packages/patches/fuse-overlapping-headers.patch				\
   %D%/packages/patches/fxdiv-system-libraries.patch		\
@@ -1065,7 +1071,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ganeti-disable-version-symlinks.patch	\
   %D%/packages/patches/ganeti-haskell-compat.patch		\
   %D%/packages/patches/ganeti-haskell-pythondir.patch		\
-  %D%/packages/patches/ganeti-preserve-PYTHONPATH.patch		\
   %D%/packages/patches/ganeti-shepherd-master-failover.patch	\
   %D%/packages/patches/ganeti-shepherd-support.patch		\
   %D%/packages/patches/ganeti-sphinx-compat.patch		\
@@ -1094,6 +1099,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-4.9.3-mingw-gthr-default.patch	\
   %D%/packages/patches/gcc-5-hurd.patch				\
   %D%/packages/patches/gcc-5.0-libvtv-runpath.patch		\
+  %D%/packages/patches/gcc-5-fix-powerpc64le-build.patch	\
   %D%/packages/patches/gcc-5-source-date-epoch-1.patch		\
   %D%/packages/patches/gcc-5-source-date-epoch-2.patch		\
   %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch	\
@@ -1108,46 +1114,32 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-8-strmov-store-file-names.patch	\
   %D%/packages/patches/gcc-9-asan-fix-limits-include.patch	\
   %D%/packages/patches/gcc-9-strmov-store-file-names.patch	\
-  %D%/packages/patches/gdb-hurd.patch				\
   %D%/packages/patches/gd-fix-tests-on-i686.patch		\
   %D%/packages/patches/gd-brect-bounds.patch			\
-  %D%/packages/patches/gdk-pixbuf-CVE-2020-29385.patch		\
+  %D%/packages/patches/gd-Revert-fix-303-gdlib.pc.patch		\
+  %D%/packages/patches/gdb-fix-gnu-nat-build.patch		\
   %D%/packages/patches/gdm-default-session.patch		\
-  %D%/packages/patches/geary-CVE-2020-24661.patch		\
+  %D%/packages/patches/gdm-elogind-support.patch		\
+  %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch	\
+  %D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch	\
+  %D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch	\
+  %D%/packages/patches/geeqie-clutter.patch			\
   %D%/packages/patches/genimage-mke2fs-test.patch		\
   %D%/packages/patches/geoclue-config.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-CVE-2020-15900.patch		\
-  %D%/packages/patches/ghostscript-freetype-compat.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 \
   %D%/packages/patches/giara-fix-login.patch                      \
+  %D%/packages/patches/glade-gls-set-script-name.patch	        \
+  %D%/packages/patches/glade-test-widget-null-icon.patch	\
   %D%/packages/patches/glib-appinfo-watch.patch			\
-  %D%/packages/patches/glib-tests-timer.patch			\
-  %D%/packages/patches/glib-CVE-2021-27218.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-01.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-02.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-03.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-04.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-05.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-06.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-07.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-08.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-09.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-10.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-11.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-12.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-13.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-14.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-15.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-16.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-17.patch		\
-  %D%/packages/patches/glib-CVE-2021-27219-18.patch		\
-  %D%/packages/patches/glib-CVE-2021-28153.patch		\
+  %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		\
@@ -1159,8 +1151,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-bootstrap-system-2.2.5.patch 	\
   %D%/packages/patches/glibc-bootstrap-system-2.16.0.patch 	\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
+  %D%/packages/patches/glibc-cross-objcopy.patch		\
+  %D%/packages/patches/glibc-cross-objdump.patch		\
+  %D%/packages/patches/glibc-dl-cache.patch			\
   %D%/packages/patches/glibc-hidden-visibility-ldconfig.patch	\
   %D%/packages/patches/glibc-hurd-clock_gettime_monotonic.patch	\
+  %D%/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch	\
   %D%/packages/patches/glibc-hurd-clock_t_centiseconds.patch	\
   %D%/packages/patches/glibc-hurd-gettyent.patch		\
   %D%/packages/patches/glibc-hurd-mach-print.patch		\
@@ -1171,28 +1167,25 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-locales.patch			\
   %D%/packages/patches/glibc-locales-2.28.patch			\
   %D%/packages/patches/glibc-reinstate-prlimit64-fallback.patch	\
+  %D%/packages/patches/glibc-skip-c++.patch			\
   %D%/packages/patches/glibc-versioned-locpath.patch		\
-  %D%/packages/patches/glibc-2.27-git-fixes.patch		\
-  %D%/packages/patches/glibc-2.28-git-fixes.patch		\
   %D%/packages/patches/glibc-2.29-git-updates.patch     	\
-  %D%/packages/patches/glibc-2.27-supported-locales.patch     	\
-  %D%/packages/patches/glibc-2.28-supported-locales.patch     	\
   %D%/packages/patches/glibc-2.29-supported-locales.patch     	\
+  %D%/packages/patches/glibc-static-nss.patch			\
   %D%/packages/patches/glibc-supported-locales.patch     	\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
   %D%/packages/patches/gmp-faulty-test.patch			\
   %D%/packages/patches/gnash-fix-giflib-version.patch	        \
-  %D%/packages/patches/gnome-shell-theme.patch			\
-  %D%/packages/patches/gnome-shell-disable-test.patch		\
-  %D%/packages/patches/gnome-shell-CVE-2020-17489.patch		\
+  %D%/packages/patches/gnome-boxes-add-guix-logo.patch		\
+  %D%/packages/patches/gnome-online-miners-tracker-3.patch	\
+  %D%/packages/patches/gnome-screenshot-meson-0.60.patch	\
   %D%/packages/patches/gnome-settings-daemon-gc.patch		\
-  %D%/packages/patches/gnome-todo-delete-esource-duplicate.patch \
   %D%/packages/patches/gnome-tweaks-search-paths.patch		\
   %D%/packages/patches/gnupg-default-pinentry.patch		\
+  %D%/packages/patches/gnupg-1-build-with-gcc10.patch		\
   %D%/packages/patches/gnutls-skip-trust-store-test.patch	\
   %D%/packages/patches/gnutls-cross.patch			\
-  %D%/packages/patches/gnutls-CVE-2021-20231.patch		\
-  %D%/packages/patches/gnutls-CVE-2021-20232.patch		\
+  %D%/packages/patches/gnutls-guile-eintr-eagain.patch		\
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   %D%/packages/patches/gobject-introspection-cc.patch		\
   %D%/packages/patches/gobject-introspection-girepository.patch	\
@@ -1205,7 +1198,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/gpodder-disable-updater.patch		\
   %D%/packages/patches/gpsbabel-fix-i686-test.patch		\
   %D%/packages/patches/grantlee-merge-theme-dirs.patch		\
-  %D%/packages/patches/graphviz-CVE-2020-18032.patch		\
   %D%/packages/patches/grep-timing-sensitive-test.patch		\
   %D%/packages/patches/grocsvs-dont-use-admiral.patch		\
   %D%/packages/patches/gromacs-tinyxml2.patch			\
@@ -1213,13 +1205,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/grub-efi-fat-serial-number.patch		\
   %D%/packages/patches/grub-setup-root.patch			\
   %D%/packages/patches/gspell-dash-test.patch			\
-  %D%/packages/patches/gst-libav-64channels-stack-corruption.patch	\
-  %D%/packages/patches/gst-plugins-bad-fix-overflow.patch	\
-  %D%/packages/patches/gst-plugins-base-fix-id3v2-invalid-read.patch	\
   %D%/packages/patches/gst-plugins-good-fix-test.patch		\
-  %D%/packages/patches/gst-plugins-good-CVE-2021-3497.patch	\
-  %D%/packages/patches/gst-plugins-good-CVE-2021-3498.patch	\
-  %D%/packages/patches/gst-plugins-ugly-fix-out-of-bound-reads.patch	\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
   %D%/packages/patches/guile-2.2-skip-oom-test.patch            \
   %D%/packages/patches/guile-2.2-skip-so-test.patch             \
@@ -1231,17 +1217,23 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-3.0-linux-syscalls.patch		\
   %D%/packages/patches/guile-fibers-destroy-peer-schedulers.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 \
   %D%/packages/patches/gtk2-theme-paths.patch			\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
+  %D%/packages/patches/gtk-doc-respect-xml-catalog.patch	 \
+  %D%/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch    \
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
   %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
-  %D%/packages/patches/gvfs-add-support-for-libplist-2.2.patch	\
   %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
   %D%/packages/patches/gzdoom-find-system-libgme.patch	\
   %D%/packages/patches/hdf4-architectures.patch 		\
@@ -1257,6 +1249,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
   %D%/packages/patches/hedgewars-network-bsd.patch		\
+  %D%/packages/patches/helm-fix-gcc-9-build.patch		\
   %D%/packages/patches/http-parser-CVE-2020-8287.patch		\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-cross.patch				\
@@ -1268,8 +1261,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch	\
   %D%/packages/patches/icecat-use-system-media-libs.patch	\
   %D%/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch	\
-  %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch	\
-  %D%/packages/patches/icu4c-CVE-2020-10531.patch  		\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
   %D%/packages/patches/id3lib-UTF16-writing-bug.patch			\
   %D%/packages/patches/idris-disable-test.patch			\
@@ -1280,7 +1271,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/inetutils-hurd.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	\
@@ -1290,9 +1280,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
   %D%/packages/patches/isc-dhcp-gcc-compat.patch		\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
-  %D%/packages/patches/json-c-CVE-2020-12762.patch		\
   %D%/packages/patches/json-c-0.13-CVE-2020-12762.patch	\
   %D%/packages/patches/json-c-0.12-CVE-2020-12762.patch	\
+  %D%/packages/patches/jsoncpp-pkg-config-version.patch		\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
   %D%/packages/patches/jamvm-1.5.1-aarch64-support.patch	\
   %D%/packages/patches/jamvm-1.5.1-armv7-support.patch	\
@@ -1315,12 +1305,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-gcc-compat.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
-  %D%/packages/patches/jsoncpp-fix-inverted-case.patch		\
   %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/julia-tracker-16-compat.patch		\
+  %D%/packages/patches/julia-allow-parallel-build.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %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/libziparchive-add-includes.patch		\
   %D%/packages/patches/localed-xorg-keyboard.patch		\
@@ -1353,13 +1344,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/lcalc-default-parameters-2.patch		\
   %D%/packages/patches/lcalc-lcommon-h.patch    		\
   %D%/packages/patches/lcalc-using-namespace-std.patch 		\
-  %D%/packages/patches/lcms-CVE-2018-16435.patch		\
-  %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
-  %D%/packages/patches/ldc-disable-phobos-tests.patch		\
   %D%/packages/patches/ldns-drill-examples.patch		\
   %D%/packages/patches/leela-zero-gtest.patch			\
   %D%/packages/patches/less-hurd-path-max.patch			\
-  %D%/packages/patches/lib2geom-fix-tests.patch			\
   %D%/packages/patches/liba52-enable-pic.patch			\
   %D%/packages/patches/liba52-link-with-libm.patch		\
   %D%/packages/patches/liba52-set-soname.patch			\
@@ -1391,6 +1378,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libmad-length-check.patch		\
   %D%/packages/patches/libmad-md_size.patch			\
   %D%/packages/patches/libmad-mips-newgcc.patch			\
+  %D%/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch	\
   %D%/packages/patches/libmp4v2-c++11.patch			\
   %D%/packages/patches/libmpeg2-arm-private-symbols.patch	\
   %D%/packages/patches/libmpeg2-global-symbol-test.patch	\
@@ -1404,15 +1392,18 @@ dist_patch_DATA =						\
   %D%/packages/patches/libtgvoip-disable-webrtc.patch 		\
   %D%/packages/patches/libtheora-config-guess.patch		\
   %D%/packages/patches/libtirpc-hurd.patch			\
-  %D%/packages/patches/libtirpc-hurd-client.patch		\
   %D%/packages/patches/libtommath-fix-linkage.patch		\
   %D%/packages/patches/libtool-skip-tests2.patch		\
+  %D%/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch \
   %D%/packages/patches/libusb-0.1-disable-tests.patch		\
   %D%/packages/patches/libusb-for-axoloti.patch			\
   %D%/packages/patches/libutils-add-includes.patch		\
   %D%/packages/patches/libutils-remove-damaging-includes.patch	\
   %D%/packages/patches/libvdpau-va-gl-unbundle.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
+  %D%/packages/patches/libxml2-parent-pointers.patch		\
+  %D%/packages/patches/libxml2-terminating-newline.patch	\
+  %D%/packages/patches/libxml2-xpath-recursion-limit.patch	\
   %D%/packages/patches/libxml2-xpath0-Add-option-xpath0.patch	\
   %D%/packages/patches/libxslt-generated-ids.patch		\
   %D%/packages/patches/libxt-guix-search-paths.patch		\
@@ -1430,6 +1421,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lirc-reproducible-build.patch		\
   %D%/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch	\
   %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch	\
+  %D%/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch	\
   %D%/packages/patches/llvm-9-fix-bitcast-miscompilation.patch	\
   %D%/packages/patches/llvm-9-fix-lpad-miscompilation.patch	\
   %D%/packages/patches/llvm-9-fix-scev-miscompilation.patch	\
@@ -1451,7 +1443,6 @@ dist_patch_DATA =						\
   %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-CVE-2021-27928.patch		\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
   %D%/packages/patches/maxima-defsystem-mkdir.patch		\
@@ -1464,10 +1455,10 @@ dist_patch_DATA =						\
   %D%/packages/patches/libmemcached-build-with-gcc7.patch	\
   %D%/packages/patches/libmhash-hmac-fix-uaf.patch		\
   %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-for-build-rpath.patch		\
-  %D%/packages/patches/metabat-fix-compilation.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	\
   %D%/packages/patches/mingw-w64-6.0.0-gcc.patch		\
@@ -1476,11 +1467,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/minisat-friend-declaration.patch		\
   %D%/packages/patches/minisat-install.patch			\
   %D%/packages/patches/mit-krb5-hurd.patch			\
-  %D%/packages/patches/mit-krb5-qualify-short-hostnames.patch	\
   %D%/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch	\
   %D%/packages/patches/mixxx-system-googletest-benchmark.patch	\
   %D%/packages/patches/mpc123-initialize-ao.patch		\
   %D%/packages/patches/mpg321-CVE-2019-14247.patch		\
+  %D%/packages/patches/mpg321-gcc-10.patch			\
   %D%/packages/patches/module-init-tools-moduledir.patch	\
   %D%/packages/patches/monero-use-system-miniupnpc.patch			\
   %D%/packages/patches/mono-mdoc-timestamping.patch		\
@@ -1517,10 +1508,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/ngircd-handle-zombies.patch		\
   %D%/packages/patches/ngless-unliftio.patch		\
   %D%/packages/patches/network-manager-plugin-path.patch	\
+  %D%/packages/patches/network-manager-meson.patch		\
   %D%/packages/patches/nginx-socket-cloexec.patch		\
   %D%/packages/patches/nnpack-system-libraries.patch		\
   %D%/packages/patches/nsis-env-passthru.patch			\
   %D%/packages/patches/nsis-source-date-epoch.patch		\
+  %D%/packages/patches/nss-getcwd-nonnull.patch			\
   %D%/packages/patches/nss-CVE-2021-43527.patch			\
   %D%/packages/patches/nss-increase-test-timeout.patch		\
   %D%/packages/patches/nss-3.56-pkgconfig.patch			\
@@ -1537,6 +1530,8 @@ dist_patch_DATA =						\
   %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	\
@@ -1570,9 +1565,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/pango-skip-libthai-test.patch		\
   %D%/packages/patches/pciutils-hurd-configure.patch		\
   %D%/packages/patches/pciutils-hurd-fix.patch			\
+  %D%/packages/patches/pitivi-fix-build-with-meson-0.60.patch	\
   %D%/packages/patches/plasma-framework-fix-KF5PlasmaMacros.cmake.patch \
   %D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch		\
   %D%/packages/patches/pthreadpool-system-libraries.patch	\
+  %D%/packages/patches/python-chai-drop-python2.patch		\
+  %D%/packages/patches/python-random2-getrandbits-test.patch		\
+  %D%/packages/patches/python-poppler-qt5-fix-build.patch	\
   %D%/packages/patches/sdcc-disable-non-free-code.patch		\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
@@ -1582,14 +1581,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/sdl-pango-sans-serif.patch		\
   %D%/packages/patches/smalltalk-multiplication-overflow.patch	\
   %D%/packages/patches/sqlite-hurd.patch			\
+  %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-autosplit-default-time.patch	\
-  %D%/packages/patches/perl-cross.patch				\
-  %D%/packages/patches/perl-deterministic-ordering.patch	\
   %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
   %D%/packages/patches/perl-image-exiftool-CVE-2021-22204.patch	\
-  %D%/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \
   %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch	\
   %D%/packages/patches/perl-net-dns-resolver-programmable-fix.patch	\
   %D%/packages/patches/perl-no-sys-dirs.patch			\
@@ -1610,6 +1609,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/pinball-system-ltdl.patch		\
   %D%/packages/patches/pingus-boost-headers.patch		\
   %D%/packages/patches/pingus-sdl-libs-config.patch		\
+  %D%/packages/patches/pipewire-0.2.7-fno-common.patch		\
   %D%/packages/patches/pixman-CVE-2016-5296.patch		\
   %D%/packages/patches/pjproject-correct-the-cflags-field.patch \
   %D%/packages/patches/pjproject-fix-pkg-config-ldflags.patch	\
@@ -1618,7 +1618,8 @@ 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-3560.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	\
@@ -1642,13 +1643,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-2.7-site-prefixes.patch		\
   %D%/packages/patches/python-2.7-source-date-epoch.patch	\
   %D%/packages/patches/python-2.7-CVE-2021-3177.patch		\
+  %D%/packages/patches/python-2.7-no-static-lib.patch		\
   %D%/packages/patches/python-3-arm-alignment.patch		\
   %D%/packages/patches/python-3-deterministic-build-info.patch	\
   %D%/packages/patches/python-3-search-paths.patch		\
   %D%/packages/patches/python-3-fix-tests.patch			\
-  %D%/packages/patches/python-3.8-fix-tests.patch		\
-  %D%/packages/patches/python-3.8-CVE-2021-3177.patch		\
-  %D%/packages/patches/python-3.9-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	\
@@ -1657,18 +1658,21 @@ dist_patch_DATA =						\
   %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	\
+  %D%/packages/patches/python-fixtures-remove-monkeypatch-test.patch	\
   %D%/packages/patches/python-flask-restful-werkzeug-compat.patch	\
   %D%/packages/patches/python-keras-integration-test.patch	\
-  %D%/packages/patches/python-peachpy-determinism.patch		\
+  %D%/packages/patches/python-peachpy-determinism.patch	\
   %D%/packages/patches/python-pep8-stdlib-tokenize-compat.patch \
   %D%/packages/patches/python-pyfakefs-remove-bad-test.patch	\
+  %D%/packages/patches/python-pyflakes-test-location.patch	\
   %D%/packages/patches/python-flint-includes.patch		\
   %D%/packages/patches/python-libxml2-utf8.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-testtools.patch			\
+  %D%/packages/patches/python-typing-inspect-fix.patch		\
   %D%/packages/patches/python-packaging-test-arch.patch		\
   %D%/packages/patches/python2-parameterized-docstring-test.patch	\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
@@ -1688,6 +1692,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-unittest2-python3-compat.patch	\
   %D%/packages/patches/python-unittest2-remove-argparse.patch	\
   %D%/packages/patches/python-waitress-fix-tests.patch		\
+  %D%/packages/patches/python-werkzeug-tests.patch		\
   %D%/packages/patches/qemu-build-info-manual.patch		\
   %D%/packages/patches/qemu-CVE-2021-20203.patch		\
   %D%/packages/patches/qemu-glibc-2.27.patch 			\
@@ -1704,7 +1709,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/quassel-qt-514-compat.patch		\
   %D%/packages/patches/quickswitch-fix-dmenu-check.patch	\
   %D%/packages/patches/qtwebkit-pbutils-include.patch		\
+  %D%/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch \
+  %D%/packages/patches/qtwebkit-fix-building-with-python-3.9.patch	\
+  %D%/packages/patches/qtwebkit-fix-building-with-icu-68.patch	\
+  %D%/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch	\
   %D%/packages/patches/randomjungle-disable-static-build.patch	\
+  %D%/packages/patches/range-v3-build-with-gcc10.patch	\
   %D%/packages/patches/rapicorn-isnan.patch			\
   %D%/packages/patches/rapidjson-gcc-compat.patch		\
   %D%/packages/patches/raptor2-heap-overflow.patch		\
@@ -1734,19 +1744,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/rocm-opencl-runtime-4.3-nocltrace.patch \
   %D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
   %D%/packages/patches/ruby-sanitize-system-libxml.patch	\
-  %D%/packages/patches/rust-1.19-mrustc.patch			\
-  %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \
-  %D%/packages/patches/rust-1.45-linker-locale.patch		\
-  %D%/packages/patches/rust-1.48-linker-locale.patch		\
+  %D%/packages/patches/rustc-1.39.0-src.patch			\
   %D%/packages/patches/rust-adblock-ignore-live-tests.patch		\
-  %D%/packages/patches/rust-bootstrap-stage0-test.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	\
   %D%/packages/patches/rust-nettle-disable-vendor.patch		 \
   %D%/packages/patches/rust-nettle-sys-disable-vendor.patch	 \
-  %D%/packages/patches/rust-reproducible-builds.patch		 \
   %D%/packages/patches/rust-openssl-sys-no-vendor.patch	\
   %D%/packages/patches/rust-shell2batch-lint-fix.patch		\
   %D%/packages/patches/sbc-fix-build-non-x86.patch		\
@@ -1755,7 +1760,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/sbcl-burgled-batteries3-fix-signals.patch	\
   %D%/packages/patches/sbcl-clml-fix-types.patch		\
   %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch	\
-  %D%/packages/patches/scalapack-blacs-mpi-deprecations.patch	\
+  %D%/packages/patches/scalapack-gcc-10-compilation.patch	\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scotch-build-parallelism.patch		\
   %D%/packages/patches/scotch-integer-declarations.patch	\
@@ -1777,6 +1782,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/slim-reset.patch				\
   %D%/packages/patches/slim-login.patch				\
   %D%/packages/patches/slim-display.patch			\
+  %D%/packages/patches/syslinux-gcc10.patch			\
+  %D%/packages/patches/syslinux-strip-gnu-property.patch	\
   %D%/packages/patches/snappy-add-O2-flag-in-CmakeLists.txt.patch	\
   %D%/packages/patches/snappy-add-inline-for-GCC.patch		\
   %D%/packages/patches/sphinxbase-fix-doxygen.patch		\
@@ -1803,12 +1810,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/tar-skip-unreliable-tests.patch		\
   %D%/packages/patches/tcc-boot-0.9.27.patch			\
   %D%/packages/patches/tclxml-3.2-install.patch			\
-  %D%/packages/patches/tcl-fix-cross-compilation.patch		\
   %D%/packages/patches/tcsh-fix-autotest.patch			\
   %D%/packages/patches/teensy-loader-cli-help.patch		\
   %D%/packages/patches/texinfo-5-perl-compat.patch		\
-  %D%/packages/patches/texlive-bin-poppler-0.83.patch		\
-  %D%/packages/patches/texlive-bin-poppler-0.86.patch		\
   %D%/packages/patches/telegram-purple-adjust-test.patch	\
   %D%/packages/patches/telepathy-glib-channel-memory-leak.patch	\
   %D%/packages/patches/texi2html-document-encoding.patch	\
@@ -1823,9 +1827,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/tk-find-library.patch			\
   %D%/packages/patches/tla2tools-build-xml.patch		\
   %D%/packages/patches/tlf-support-hamlib-4.2+.patch		\
+  %D%/packages/patches/tor-sandbox-i686.patch			\
   %D%/packages/patches/transcode-ffmpeg.patch	\
   %D%/packages/patches/transmission-honor-localedir.patch	\
-  %D%/packages/patches/transmission-remote-gtk-fix-appstream.patch	\
   %D%/packages/patches/ttf2eot-cstddef.patch			\
   %D%/packages/patches/tup-unbundle-dependencies.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
@@ -1883,7 +1887,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/vboot-utils-fix-format-load-address.patch	\
   %D%/packages/patches/vboot-utils-fix-tests-show-contents.patch	\
   %D%/packages/patches/vboot-utils-skip-test-workbuf.patch	\
-  %D%/packages/patches/vigra-python-compat.patch		\
   %D%/packages/patches/vinagre-newer-freerdp.patch             \
   %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
   %D%/packages/patches/virglrenderer-CVE-2017-6386.patch 	\
@@ -1910,7 +1913,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/wpa-supplicant-CVE-2021-30004.patch	\
   %D%/packages/patches/x265-arm-flags.patch			\
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
+  %D%/packages/patches/xf86-video-mach64-bool-to-boolean.patch	\
   %D%/packages/patches/xf86-video-mach64-glibc-2.20.patch	\
+  %D%/packages/patches/xf86-video-nouveau-fixup-ABI.patch	\
   %D%/packages/patches/xf86-video-savage-xorg-compat.patch 	\
   %D%/packages/patches/xf86-video-siliconmotion-fix-ftbfs.patch \
   %D%/packages/patches/xf86-video-tga-remove-mibstore.patch	\
@@ -1930,15 +1935,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/xsane-fix-snprintf-buffer-length.patch	\
   %D%/packages/patches/xsane-support-ipv6.patch			\
   %D%/packages/patches/xsane-tighten-default-umask.patch	\
+  %D%/packages/patches/xygrib-fix-finding-data.patch		\
   %D%/packages/patches/yggdrasil-extra-config.patch	\
   %D%/packages/patches/ytfzf-programs.patch        \
   %D%/packages/patches/ytfzf-updates.patch        \
   %D%/packages/patches/ytnef-CVE-2021-3403.patch	\
   %D%/packages/patches/ytnef-CVE-2021-3404.patch	\
   %D%/packages/patches/zig-disable-libc-note-test.patch         \
-  %D%/packages/patches/zig-use-system-paths.patch	        \
-  %D%/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch	\
-  %D%/packages/patches/zziplib-CVE-2018-16548.patch
+  %D%/packages/patches/zig-use-system-paths.patch
 
 MISC_DISTRO_FILES =				\
   %D%/packages/ld-wrapper.in
diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm
index f3bd094c92..02159cbfcc 100644
--- a/gnu/packages/accessibility.scm
+++ b/gnu/packages/accessibility.scm
@@ -223,19 +223,17 @@ incorporated.")
                                "--without-docs"
                                "--with-notification")))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libglade" ,libglade)
-       ("librsvg" ,librsvg)
-       ("gstreamer" ,gstreamer)
-       ("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("libxtst" ,libxtst)
-       ("libxcomposite" ,libxcomposite)
-       ("libnotify" ,libnotify)))
+     (list libxml2
+           libglade
+           librsvg
+           gstreamer
+           cairo
+           gtk+
+           libxtst
+           libxcomposite
+           libnotify))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (home-page "http://florence.sourceforge.net/")
     (synopsis "Extensible, scalable virtual keyboard for X11")
     (description
@@ -268,9 +266,9 @@ available to help to click.")
                   "14pyzc4ws1mj859xs9n4x83wzxxvd3bh5bdxzr6nv267xwx1mq68"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("hidapi" ,hidapi)))
+       (list hidapi))
       (arguments
        `(#:tests? #f ; no tests
          #:make-flags (list (string-append "CC=" ,(cc-for-target)))
diff --git a/gnu/packages/acl.scm b/gnu/packages/acl.scm
index 6fb4894302..da6dead3c2 100644
--- a/gnu/packages/acl.scm
+++ b/gnu/packages/acl.scm
@@ -40,7 +40,7 @@
 (define-public acl
   (package
     (name "acl")
-    (version "2.2.53")
+    (version "2.3.1")
     (source
      (origin
       (method url-fetch)
@@ -48,7 +48,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1ir6my3w74s6nfbgbqgzj6w570sn0qjf3524zx8xh67lqrjrigh6"))))
+        "1bqi7hj0xkpivwg7lx5cv3yvs9ks1i6azvpgbvfpzcq1i736233n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
@@ -86,7 +86,7 @@
                ((".*test/cp\\.test.*") "")
                ((".*test/setfacl-X\\.test.*") ""))
              #t)))))
-    (inputs `(("attr" ,attr)))
+    (inputs (list attr))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)))
@@ -125,8 +125,8 @@
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "tests")))))))
-    (inputs `(("acl" ,acl)))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+    (inputs (list acl))
+    (native-inputs (list python-pytest))
     (home-page "https://pylibacl.k1024.org/")
     (synopsis "POSIX.1e @acronym{ACLs, access control lists} for Python")
     (description
diff --git a/gnu/packages/ada.scm b/gnu/packages/ada.scm
index 240e13f3ef..a3bba245ec 100644
--- a/gnu/packages/ada.scm
+++ b/gnu/packages/ada.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,17 +49,20 @@
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (supported-systems (list "i686-linux" "x86_64-linux"
-                             "armhf-linux" "aarch64-linux"))
+                             "armhf-linux" "aarch64-linux"
+                             "powerpc-linux"))
     (outputs (list "out" "debug"))
     (arguments
      `(#:system
        ,@(match (%current-system)
            ;; This package predates 64-bit PCs: a ‘64-bit’ adaexec segfaults.
            ;; Force a 32-bit build targeting a similar architecture.
-           ((or "armhf-linux" "aarch64-linux")
+           ("aarch64-linux"
             `("armhf-linux"))
+           ("x86_64-linux"
+            `("i686-linux"))
            (_
-            `("i686-linux")))
+            (list (%current-system))))
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
          (list (string-append
@@ -130,7 +134,7 @@
                                    (find-files "share" ".")))
                  #t)))))))
     (native-inputs
-     `(("sed" ,sed)))
+     (list sed))
     (home-page (string-append "https://web.archive.org/web/20140902150609/"
                               "http://www2.informatik.uni-stuttgart.de/iste/ps/"
                               "ada-software/html/dos_ada.html"))
@@ -163,10 +167,7 @@ level.")
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python2-docutils" ,python2-docutils)
-         ("python2-enum34" ,python2-enum34)
-         ("python2-funcy" ,python2-funcy)
-         ("python2-mako" ,python2-mako)))
+       (list python2-docutils python2-enum34 python2-funcy python2-mako))
       (arguments
        `(#:python ,python-2
          #:tests? #f))           ; Tests would requite gprbuild (Ada).
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 0e3d5944da..de2f67f238 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 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>
@@ -35,6 +35,7 @@
 ;;; Copyright © 2020, 2021 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>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
@@ -179,13 +180,9 @@
                 "supath=/run/setuid-programs/su"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (synopsis "Graphical front end for @command{su}")
     (description
      "Ktsuss stands for ``Keep the @command{su} simple, stupid''.
@@ -207,16 +204,15 @@ simplicity in mind.")
         (base32 "15xp47sz7kk1ciffw3f5xw2jg2mb2lqrbr3q6p4bkbz5dap9iy8p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libmhash" ,libmhash)
-       ("pcre:static" ,pcre "static")
-       ("pcre" ,pcre)
-       ("zlib:static" ,zlib "static")
-       ("zlib" ,zlib)))
+     (list libgcrypt
+           libgpg-error
+           libmhash
+           `(,pcre "static")
+           pcre
+           `(,zlib "static")
+           zlib))
     (synopsis "File and directory integrity checker")
     (description
      "AIDE (Advanced Intrusion Detection Environment) is a file and directory
@@ -243,10 +239,9 @@ usual file attributes can be checked for inconsistencies.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:make-flags
@@ -278,23 +273,28 @@ and provides a \"top-like\" mode (monitoring).")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))))
+                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Build with -O1 to work around <https://bugs.gnu.org/48368>.
+                  (substitute* "Makefile.in"
+                    (("compile --target")
+                     "compile -O1 --target"))))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--localstatedir=/var")
        #:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; This is the Guile we use as a cross-compiler...
-       ("guile" ,guile-3.0)))
+     (list pkg-config
+           ;; This is the Guile we use as a cross-compiler...
+           guile-3.0))
     (inputs
      ;; ... and this is the one that appears in shebangs when cross-compiling.
-     `(("guile" ,guile-3.0)
-
-       ;; The 'shepherd' command uses Readline when used interactively.  It's
-       ;; an unusual use case though, so we don't propagate it.
-       ("guile-readline" ,guile-readline)))
+     (list guile-3.0
+           ;; The 'shepherd' command uses Readline when used interactively.  It's
+           ;; an unusual use case though, so we don't propagate it.
+           guile-readline))
     (synopsis "System service manager")
     (description
      "The GNU Shepherd is a daemon-managing daemon, meaning that it supervises
@@ -309,22 +309,18 @@ interface and is based on GNU Guile.")
     (inherit shepherd)
     (name "guile2.2-shepherd")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("guile" ,guile-2.2)))
+     (list pkg-config guile-2.2))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("guile2.2-readline" ,guile2.2-readline)))))
+     (list guile-2.2 guile2.2-readline))))
 
 (define-public guile2.0-shepherd
   (package
     (inherit shepherd)
     (name "guile2.0-shepherd")
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-2.0)))
+     (list help2man pkg-config guile-2.0))
     (inputs
-     `(("guile" ,guile-2.0)))
+     (list guile-2.0))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -401,8 +397,7 @@ inspired by @command{vi}.")
                                       ,(dirname (which "readlink"))))))
              #t)))))
     (inputs
-     `(("python" ,python)
-       ("util-linux" ,util-linux))) ; contains sfdisk for growpart
+     (list python util-linux)) ; contains sfdisk for growpart
     (home-page "https://launchpad.net/cloud-utils")
     (synopsis "Set of utilities for cloud computing environments")
     (description
@@ -648,10 +643,9 @@ console.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake python-minimal-wrapper))     ; for scripts/MakeHeader.py
     (home-page "https://htop.dev")
     (synopsis "Interactive process viewer")
     (description
@@ -695,7 +689,7 @@ memory, disks, network and processes.")
         (base32 "1fwmiwvs8ax9az3hbp1p79x6m3wq73pn3vkbhcg9jvps4wv8wcwb"))))
     (build-system python-build-system)
     (inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -752,15 +746,14 @@ re-executing them as necessary.")
 (define-public inetutils
   (package
     (name "inetutils")
-    (version "1.9.4")
+    (version "2.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/inetutils/inetutils-"
                                  version ".tar.gz"))
-             (patches (search-patches "inetutils-hurd.patch"))
              (sha256
               (base32
-               "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy"))))
+               "0j1nb69bhg29cm4xkqqjh2ln1zqcj2lnpm92v638lpwrs11dypxl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--localstatedir=/var"
@@ -781,10 +774,17 @@ re-executing them as necessary.")
                                    "--disable-uucpd"
                                    "--disable-whois")
                                  '()))
+       ;; Make sure that canonical "coreutils" package is not referred.
+       #:make-flags
+       (list (string-append "CPPFLAGS=-DPATHDEF_CP=\\\""
+                            (assoc-ref %build-inputs "coreutils*")
+                            "/bin/cp\\\""))
        ;; On some systems, 'libls.sh' may fail with an error such as:
        ;; "Failed to tell switch -a apart from -A".
        #:parallel-tests? #f))
-    (inputs `(("ncurses" ,ncurses)
+    (inputs `(("coreutils*" ,coreutils)
+              ("shadow" ,shadow)    ;for login (used in telnetd and rlogind)
+              ("ncurses" ,ncurses)
               ("readline" ,readline)))        ;for 'ftp'
     (native-inputs (if (member (%current-system)
                                (package-supported-systems net-tools))
@@ -819,6 +819,7 @@ hostname.")
        '(,@(if (hurd-target?)
              '()
              '("--with-libpam"))
+          "shadow_cv_logdir=/var/log"
           "ac_cv_func_setpgrp_void=yes")
 
        #:phases
@@ -915,7 +916,7 @@ login, passwd, su, groupadd, and useradd.")
                (mkdir-p man8))
              #t)))
        #:tests? #f))                              ; no tests
-    (inputs `(("shadow" ,shadow)))
+    (inputs (list shadow))
 
     (home-page "https://sourceforge.net/projects/mingetty")
     (synopsis "Getty for the text console")
@@ -940,6 +941,11 @@ to allow automatic login and starting any app.")
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
+       ;; This package consists solely of architecture-independent
+       ;; tables. Cross-compilation is pointless! Make sure we'll
+       ;; always get the same derivation.
+       #:target #f
+       #:allowed-references ()
        #:builder (begin
                    (use-modules (guix build utils)
                                 (srfi srfi-26))
@@ -959,8 +965,7 @@ to allow automatic login and starting any app.")
                                (map (cut string-append etc "/" <>)
                                     '("services" "protocols" "rpc")))
                      #t))))
-    (native-inputs `(("tar" ,tar)
-                     ("xz" ,xz)))
+    (native-inputs (list tar xz))
     (synopsis "IANA protocol, port, and RPC number assignments")
     (description
      "This package provides the /etc/services, /etc/protocols, and /etc/rpc
@@ -1035,9 +1040,8 @@ would need and has several interesting built-in capabilities.")
                (install-file "nc.1" man)
                (install-file "debian/copyright" doc)
                (copy-recursively "debian/examples" examples)))))))
-    (inputs `(("libbsd" ,libbsd)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("quilt" ,quilt)))
+    (inputs (list libbsd))
+    (native-inputs (list pkg-config quilt))
     (home-page "https://packages.debian.org/sid/netcat-openbsd")
     (synopsis "Read and write data over TCP/IP")
     (description
@@ -1119,7 +1123,7 @@ recursive runs on the generated subnets.  (also IPv6)
                       (let ((out (assoc-ref outputs "out")))
                         (install-file "prips"
                                       (string-append out "/bin"))))))))
-    (native-inputs `(("perl-test-harness" ,perl-test-harness)))
+    (native-inputs (list perl-test-harness))
     (synopsis "Tool that prints the IP addresses in a given range")
     (description "Prips can be used to print all of the IP addresses in
  a given range.  This allows the enhancement of tools only work
@@ -1140,8 +1144,7 @@ recursive runs on the generated subnets.  (also IPv6)
                "053hfp7s66lnilm1ii4jrjmy44wpa2cwwh6f0sl8cyz0mm813x4b"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("alive_cv_nice_ping=yes")))
-    (inputs `(("guile" ,guile-2.0)
-              ("inetutils" ,inetutils)))
+    (inputs (list guile-2.0 inetutils))
     (home-page "https://www.gnu.org/software/alive/")
     (synopsis "Autologin and keep-alive daemon")
     (description
@@ -1259,8 +1262,7 @@ connection alive.")
                       (sed       (assoc-ref inputs "sed*")))
                  (substitute* "client/scripts/linux"
                    (("/sbin/ip")
-                    (string-append (assoc-ref inputs "iproute")
-                                   "/sbin/ip")))
+                    (search-input-file inputs "/sbin/ip")))
 
                  (mkdir-p libexec)
                  (copy-file "client/scripts/linux"
@@ -1289,8 +1291,7 @@ connection alive.")
                  #t))))))
 
       (native-inputs
-       `(("perl" ,perl)
-         ("file" ,file)))
+       (list perl file))
 
       (inputs `(("inetutils" ,inetutils)
                 ;; TODO(core-updates): simply make this unconditional
@@ -1341,12 +1342,12 @@ tools: server, client, and relay agent.")
         (base32 "1df827m3vkjq2bcs5y9wg2cygvpdwl8ppl446qqhyym584gz54nl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("check" ,check)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           bison
+           check
+           flex
+           pkg-config))
     (arguments
      `(#:configure-flags '("--with-check")))
     (home-page "https://radvd.litech.org/")
@@ -1371,8 +1372,7 @@ message.  These messages are required for IPv6 stateless autoconfiguration.")
                 "1m5x26vlbymp90k1qh0w3nj2nxzyvfrmfmwpj17k81dgri55ya7d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      ;; There are some tests in testprogs/, but no automated test suite.
      `(#:tests? #f
@@ -1406,9 +1406,8 @@ network statistics collection, security monitoring, network debugging, etc.")
                (base32
                 "1ghfs5gifzrk3813zf9zalfbjs70wg6llz6q31k180r7zf2nkcvr"))))
     (build-system gnu-build-system)
-    (inputs `(("libpcap" ,libpcap)
-              ("openssl" ,openssl)))
-    (native-inputs `(("perl" ,perl)))        ; for tests
+    (inputs (list libpcap openssl))
+    (native-inputs (list perl))        ; for tests
     (home-page "https://www.tcpdump.org/")
     (synopsis "Network packet analyzer")
     (description
@@ -1431,11 +1430,9 @@ through the network interface controller.")
                 "1855np7c4b0bqzhf1l1dyzxb90fpnvrirdisajhci5am6als31z9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("libpcap" ,libpcap)))
+     (list glib ncurses libpcap))
     (home-page
      "https://web.archive.org/web/20160703195221/http://jnettop.kubs.info/wiki/")
     (synopsis "Visualize network traffic by bandwidth use")
@@ -1504,26 +1501,26 @@ by bandwidth they use.")
                   (find-files "." ".*")))
                #t))))))
     (native-inputs
-     `(("perl-cpan-changes" ,perl-cpan-changes)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-readonly" ,perl-readonly)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-distmanifest" ,perl-test-distmanifest)
-       ("perl-test-perltidy" ,perl-test-perltidy)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perltidy" ,perltidy)))
+     (list perl-cpan-changes
+           perl-file-slurp
+           perl-file-which
+           perl-module-build
+           perl-readonly
+           perl-test-differences
+           perl-test-distmanifest
+           perl-test-perltidy
+           perl-test-pod
+           perl-test-pod-coverage
+           perl-test-trap
+           perltidy))
     (inputs
-     `(("perl-exception-class" ,perl-exception-class)
-       ("perl-sort-naturally" ,perl-sort-naturally)
-       ("perl-tk" ,perl-tk)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-x11-protocol" ,perl-x11-protocol)
-       ("perl-x11-protocol-other" ,perl-x11-protocol-other)
-       ("xterm" ,xterm)))
+     (list perl-exception-class
+           perl-sort-naturally
+           perl-tk
+           perl-try-tiny
+           perl-x11-protocol
+           perl-x11-protocol-other
+           xterm))
     ;; The clusterssh.sourceforge.net address requires login to view
     (home-page "https://sourceforge.net/projects/clusterssh/")
     (synopsis "Secure concurrent multi-server terminal control")
@@ -1569,10 +1566,7 @@ over ssh connections.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("glib" ,glib)
-       ("mit-krb5" ,mit-krb5)
-       ("openldap" ,openldap)
-       ("polkit" ,polkit)))
+     (list glib mit-krb5 openldap polkit))
     (synopsis "DBus service for network authentication")
     (description "This package provides an on demand system DBus service.
 It allows callers to configure network authentication and domain membership
@@ -1613,9 +1607,7 @@ realms/domains like Active Directory or IPA.")
                   (find-files "." ".*")))
                #t))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/pod/distribution/File-Rename/rename.PL")
     (synopsis "Perl extension for renaming multiple files")
     (description
@@ -1661,8 +1653,7 @@ at once based on a Perl regular expression.")
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "rc/rc"
                         (("/usr/sbin/sendmail")
-                         (string-append (assoc-ref inputs "mailutils")
-                                        "/bin/mail")))
+                         (search-input-file inputs "/bin/mail")))
                       #t))
                   (add-after 'unpack 'fix-configure
                     (lambda* (#:key inputs native-inputs #:allow-other-keys)
@@ -1698,9 +1689,7 @@ at once based on a Perl regular expression.")
                   (add-after 'install 'install-info
                     (lambda _
                       (invoke "make" "install-info"))))))
-    (native-inputs `(("texinfo" ,texinfo)
-                     ("automake" ,automake)
-                     ("util-linux" ,util-linux))) ; for 'cal'
+    (native-inputs (list texinfo automake util-linux)) ; for 'cal'
     (inputs `(("coreutils*" ,coreutils)
               ("mailutils" ,mailutils)))
     (home-page "https://www.gnu.org/software/rottlog/")
@@ -1789,10 +1778,7 @@ system administrator.")
        ;; the chroot's /etc/passwd doesn't have it.  Turn off the tests.
        #:tests? #f))
     (native-inputs
-     ;; XXX TODO: Remove on next rebuild cycle.
-     (if (hurd-target?)
-         '()
-         `(("groff" ,groff))))
+     (list groff))
     (inputs
      `(("coreutils" ,coreutils)
        ,@(if (hurd-target?)
@@ -1856,7 +1842,7 @@ commands and their arguments.")
        (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f))                 ; no test suite
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (home-page "https://github.com/Duncaen/OpenDoas")
     (synopsis "Portable version of OpenBSD's doas command")
     (description "Doas is a minimal replacement for the venerable sudo.  It was
@@ -1951,11 +1937,9 @@ features of sudo with a fraction of the codebase.")
                                         "/lib"))
       #:tests? #f))
     (inputs
-     `(("readline" ,readline)
-       ("libnl" ,libnl)
-       ("openssl" ,openssl)))
+     (list readline libnl openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://w1.fi/wpa_supplicant/")
     (synopsis "Connecting to WPA and WPA2-protected wireless networks")
     (description
@@ -1976,8 +1960,8 @@ command.")
 (define-public wpa-supplicant
   (package (inherit wpa-supplicant-minimal)
     (name "wpa-supplicant")
-    (inputs `(("dbus" ,dbus)
-              ,@(package-inputs wpa-supplicant-minimal)))
+    (inputs (modify-inputs (package-inputs wpa-supplicant-minimal)
+              (prepend dbus)))
     (arguments
      (substitute-keyword-arguments (package-arguments wpa-supplicant-minimal)
        ((#:phases phases)
@@ -2003,14 +1987,12 @@ command.")
   (package
     (inherit wpa-supplicant)
     (name "wpa-supplicant-gui")
-    (inputs `(("qtbase" ,qtbase-5)
-              ("qtsvg" ,qtsvg)
-              ,@(package-inputs wpa-supplicant)))
+    (inputs (modify-inputs (package-inputs wpa-supplicant)
+              (prepend qtbase-5 qtsvg)))
     (native-inputs
      ;; For icons.
-     `(("imagemagick" ,imagemagick)
-       ("inkscape" ,inkscape)
-       ,@(package-native-inputs wpa-supplicant)))
+     (modify-inputs (package-native-inputs wpa-supplicant)
+       (prepend imagemagick inkscape)))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'chdir
@@ -2102,11 +2084,10 @@ command.")
                          (string-append "LIBDIR=" (assoc-ref %outputs "out")
                                         "/lib"))
       #:tests? #f))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
 
     ;; There's an optional dependency on SQLite.
-    (inputs `(("openssl" ,openssl)
-              ("libnl" ,libnl)))
+    (inputs (list openssl libnl))
     (home-page "https://w1.fi/hostapd/")
     (synopsis "Daemon for Wi-Fi access points and authentication servers")
     (description
@@ -2201,8 +2182,7 @@ module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
                (base32
                 "06wsrl1118sl9z76p9sh53zvzv5hpm82qks896d8slx5dgnzrrll"))))
     (build-system gnu-build-system)
-    (native-inputs `(("flex" ,flex)
-                     ("bison" ,bison)))
+    (native-inputs (list flex bison))
     (arguments
      `(#:make-flags (list (string-append "PREFIX=" %output)
                           (string-append "CC=" ,(cc-for-target))
@@ -2236,8 +2216,7 @@ development, not the kernel implementation of ACPI.")
         (base32 "1l2ik5iwmb8vxa2aqdy62zfy3zfzbpq5a0pgpka2vvlw9ivpqy5p"))))
     (build-system python-build-system)
     (inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-urwid" ,python-urwid)))
+     (list python-psutil python-urwid))
     (home-page "https://github.com/amanusk/s-tui")
     (synopsis "Interactive terminal stress test and monitoring tool")
     (description
@@ -2258,8 +2237,7 @@ utilization, temperature and power.")
                 "09shpd85g8dvpiw0mnwykss676g0s7lbi8ab37xjinb5lfff960p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://packages.debian.org/sid/stress")
     (synopsis "Impose load on and stress test a computer system")
     (description
@@ -2289,9 +2267,7 @@ system is under heavy load.")
                 "116bgpbkh3c96h6vq0880rmnpb5kbnnlvvkpsrcib6928bj8lfvi"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("flex" ,flex)))
+     (list autoconf automake flex))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'delete-configure
@@ -2325,14 +2301,14 @@ characters can be replaced as well, as can UTF-8 characters.")
                 "1zlh44w67py416hkvw6nrfmjickc2d43v51vcli5p374d5sw84ql"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ntfs-3g" ,ntfs-3g)
-       ("util-linux" ,util-linux "lib")
-       ("openssl" ,openssl)
-       ;; FIXME: add reiserfs.
-       ("zlib" ,zlib)
-       ("e2fsprogs" ,e2fsprogs)
-       ("libjpeg" ,libjpeg-turbo)
-       ("ncurses" ,ncurses)))
+     (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
@@ -2481,7 +2457,7 @@ various ways that may be running with too much privilege.")
                (base32
                 "1mlc25sd5rgj5xmzcllci47inmfdw7cp185fday6hc9rwqkqmnaw"))))
     (build-system gnu-build-system)
-    (inputs `(("libcap-ng" ,libcap-ng)))
+    (inputs (list libcap-ng))
     (home-page "https://www.smartmontools.org/")
     (synopsis "S.M.A.R.T. harddisk control and monitoring tools")
     (description
@@ -2506,8 +2482,7 @@ degradation and failure.")
         (base32 "1g9p50xhi2sp0hqxml4w2k0kq9jv988q2yxm347z5349dlxvap6d"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)))
+     (list ncurses pcre2))
     (home-page "https://github.com/adrianlopezroche/fdupes")
     (synopsis "Identify duplicate files")
     (description
@@ -2600,7 +2575,7 @@ sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
            (lambda _
              (substitute* "test/lib/ansible_test/_internal/ansible_util.py"
                (("PYTHONPATH=get_ansible_python_path\\(args\\)" all)
-                (string-append all "+ ':' + os.environ['PYTHONPATH']")))))
+                (string-append all "+ ':' + os.environ['GUIX_PYTHONPATH']")))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "lib/ansible/module_utils/compat/selinux.py"
@@ -2637,27 +2612,24 @@ sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
                ;; devel/test/utils/shippable/shippable.sh.
                (invoke "ansible-test" "units" "-v")))))))
     (native-inputs
-     `(("openssh" ,openssh)
-       ("openssl" ,openssl)
-       ("python-mock" ,python-mock)
-       ("python-pycrypto" ,python-pycrypto)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-pytz" ,python-pytz)))
+     (list openssh
+           openssl
+           python-mock
+           python-pycrypto
+           python-pytest
+           python-pytest-forked
+           python-pytest-mock
+           python-pytest-xdist
+           python-pytz))
     (inputs                    ;optional dependencies captured in wrap scripts
-     `(("libselinux" ,libselinux)
-       ("python-paramiko" ,python-paramiko)
-       ("python-passlib" ,python-passlib)
-       ("python-pexpect" ,python-pexpect)
-       ("sshpass" ,sshpass)))
+     (list libselinux python-paramiko python-passlib python-pexpect
+           sshpass))
     (propagated-inputs      ;core dependencies listed in egg-info/requires.txt
-     `(("python-cryptography" ,python-cryptography)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-packaging" ,python-packaging) ;for version number parsing
-       ("python-resolvelib" ,python-resolvelib-0.5)))
+     (list python-cryptography
+           python-jinja2
+           python-pyyaml
+           python-packaging ;for version number parsing
+           python-resolvelib-0.5))
     (home-page "https://www.ansible.com/")
     (synopsis "Radically simple IT automation")
     (description "Ansible aims to be a radically simple IT automation system.
@@ -2684,16 +2656,16 @@ provides the following commands:
 (define-public ansible
   (package
     (name "ansible")
-    (version "4.4.0")
+    (version "4.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ansible" version))
        (sha256
-        (base32 "031n22j0lsmh69x6i6gkva81j68b4yzh1pbg3q2h4bknl85q46ag"))))
+        (base32 "0aab9id6dqfw2111r731c7y1p77dpzczynmgl4d989p3a7n54z0b"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("ansible-core" ,ansible-core)))
+     (list ansible-core))
     ;; The Ansible collections are found by ansible-core via PYTHONPATH; the
     ;; following search path ensures that they are found even when Python is
     ;; not present in the profile.
@@ -2733,18 +2705,17 @@ modules and plugins that extend Ansible.")
                         "debops-debops-defaults-fall-back-to-less.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("git" ,git)))
+     (list git))
     (inputs
-     `(("ansible" ,ansible)
-       ("encfs" ,encfs)
-       ("fuse" ,fuse)
-       ("util-linux" ,util-linux)  ;; for umount
-       ("findutils" ,findutils)
-       ("gnupg" ,gnupg)
-       ("which" ,which)))
+     (list ansible
+           encfs
+           fuse
+           util-linux ;; for umount
+           findutils
+           gnupg
+           which))
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-distro" ,python-distro)))
+     (list python-future python-distro))
     (arguments
      `(#:tests? #f
        #:phases
@@ -2895,8 +2866,7 @@ limits.")
         (base32 "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws"))))
     (build-system gnu-build-system)
     (native-inputs                      ; for tests
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (inputs
      `(("python" ,python-wrapper)))
     (arguments
@@ -2969,8 +2939,10 @@ the command line.")
                 "15sgkdyijb7vbxpxjavh5qm5nvyii3fqcg9mzvw7fx8s6zmfwczp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libpcap" ,libpcap)
-        ("ncurses" ,ncurses)))
+      (list libpcap ncurses))
+    (arguments
+      ;; Fix build failure with GCC 10
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Monitor network usage")
     (description "Iftop does for network usage what @command{top} does
 for CPU usage.  It listens to network traffic on a named interface and
@@ -3001,8 +2973,7 @@ displays a table of current bandwidth usage by pairs of hosts.")
                      ""))
                   #t))))
     (inputs
-     `(("openssl" ,openssl)
-       ("libgcrypt" ,libgcrypt)))
+     (list openssl libgcrypt))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -3044,13 +3015,13 @@ platform-specific methods.")
   (package
     (name "audit")
     (home-page "https://people.redhat.com/sgrubb/audit/")
-    (version "2.8.5")
+    (version "3.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "audit-" version ".tar.gz"))
               (sha256
                (base32
-                "1dzcwb2q78q7x41shcachn7f4aksxbxd470yk38zh03fch1l2p8f"))))
+                "1xlcvc2g7qrbnin5pw0bacalva5ldjw97yi6nr17g0yjp4jyhnlc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--with-python=no"
@@ -3133,7 +3104,7 @@ done with the @code{auditctl} utility.")
                  "install-nping")
                (make ndiff "install-ndiff")
                (wrap-program (string-append ndiff "/bin/ndiff")
-                 `("PYTHONPATH" prefix
+                 `("GUIX_PYTHONPATH" prefix
                    (,(python-path ndiff)))))))
          ;; These are the tests that do not require network access.
          (replace 'check
@@ -3188,7 +3159,7 @@ results (ndiff), and a packet generation and response analysis tool (nping).")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/dstat")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("python" ,python-wrapper)
@@ -3237,16 +3208,10 @@ throughput (in the same interval).")
                (("settings\\.init\\(\\)") ""))
              (invoke "py.test" "-v"))))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-decorator" ,python-decorator)
-       ("python-psutil" ,python-psutil)
-       ("python-pyte" ,python-pyte)
-       ("python-six" ,python-six)))
+     (list python-colorama python-decorator python-psutil python-pyte
+           python-six))
     (native-inputs
-     `(("go" ,go)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list go python-mock python-pytest python-pytest-mock))
     (home-page "https://github.com/nvbn/thefuck")
     (synopsis "Correct mistyped console command")
     (description
@@ -3311,7 +3276,7 @@ produce uniform output across heterogeneous networks.")
        ("gettext" ,gettext-minimal)
        ("libnotify" ,libnotify)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Lightweight battery icon for the system tray")
     (description "cbatticon is a lightweight battery icon that displays
 the status of your battery in the system tray.")
@@ -3342,9 +3307,9 @@ the status of your battery in the system tray.")
          #:make-flags (list (string-append "PREFIX="
                                            (assoc-ref %outputs "out")))))
       (inputs
-       `(("libx11" ,libx11)))
+       (list libx11))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (synopsis "Scriptable launcher menu")
       (description "Interrobang is a scriptable launcher menu with a customizable
 shortcut syntax and completion options.")
@@ -3381,11 +3346,9 @@ shortcut syntax and completion options.")
                (("pam-util/vector\n")  ""))
              #t)))))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("mit-krb5" ,mit-krb5)))
+     (list linux-pam mit-krb5))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-test-pod" ,perl-test-pod))) ; required for tests
+     (list perl perl-test-pod)) ; required for tests
     (synopsis "Kerberos PAM module")
     (description
      "Pam-krb5 is a Kerberos PAM module for either MIT Kerberos or Heimdal.
@@ -3462,10 +3425,9 @@ Kerberos and Heimdal and FAST is supported with recent MIT Kerberos.")
     (source
      (sunxi-tools-source version))
     (native-inputs
-     `(("sunxi-target-tools" ,sunxi-target-tools)
-       ("pkg-config" ,pkg-config)))
+     (list sunxi-target-tools pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests exist
@@ -3586,18 +3548,16 @@ buffers.")
     (arguments
      `(#:tests? #f))            ; many of the tests try to load kernel modules
     (inputs
-     `(("cairo" ,cairo)
-       ("elfutils" ,elfutils)           ; libdw
-       ("eudev" ,eudev)
-       ("kmod" ,kmod)
-       ("libdrm" ,libdrm)
-       ("libpciaccess" ,libpciaccess)
-       ("libunwind" ,libunwind)
-       ("procps" ,procps)))
+     (list cairo
+           elfutils ; libdw
+           eudev
+           kmod
+           libdrm
+           libpciaccess
+           libunwind
+           procps))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list bison flex pkg-config))
     (home-page "https://gitlab.freedesktop.org/drm/igt-gpu-tools")
     (synopsis "Tools for development and testing of the Intel DRM driver")
     (description "IGT GPU Tools is a collection of tools for development and
@@ -3671,8 +3631,7 @@ you are running, what theme or icon set you are using, etc.")
                          (string-append out "/share/doc/" ,name "-" ,version))
            (substitute* (string-append out "/bin/screenfetch")
              (("/usr/bin/env bash")
-              (string-append (assoc-ref %build-inputs "bash")
-                             "/bin/bash")))
+              (search-input-file %build-inputs "/bin/bash")))
            (wrap-program
                (string-append out "/bin/screenfetch")
              `("PATH" ":" prefix
@@ -3682,14 +3641,11 @@ you are running, what theme or icon set you are using, etc.")
                                 (assoc-ref %build-inputs "xprop") "/bin"))))
            (substitute* (string-append out "/bin/screenfetch")
              (("#!#f")
-              (string-append "#!" (assoc-ref %build-inputs "bash")
-                             "/bin/bash")))))))
+              (string-append "#!"
+                             (search-input-file %build-inputs
+                                                "/bin/bash"))))))))
     (inputs
-     `(("bash" ,bash)
-       ("bc" ,bc)
-       ("scrot" ,scrot)
-       ("xdpyinfo" ,xdpyinfo)
-       ("xprop" ,xprop)))
+     (list bash bc scrot xdpyinfo xprop))
     (home-page "https://github.com/KittyKatt/screenFetch")
     (synopsis "System information script")
     (description "Bash screenshot information tool which can be used to
@@ -3725,7 +3681,7 @@ everyone's screenshots nowadays.")
                   (output (assoc-ref %outputs "out"))
                   (bindir (string-append output "/bin"))
                   (docdir (string-append output "/share/doc/ufetch-" ,version))
-                  (tput (string-append (assoc-ref %build-inputs "tput") "/bin/tput")))
+                  (tput   (search-input-file %build-inputs "/bin/tput")))
              (install-file (string-append source "/LICENSE") docdir)
              (setenv "PATH" (string-append (assoc-ref %build-inputs "bash") "/bin"))
              (mkdir-p bindir)
@@ -3762,7 +3718,7 @@ everyone's screenshots nowadays.")
                  (base32
                   "1md40av6i3xvvwig5jzhy4kf3s5sgxxk35r0vcyrjd8qyndk927l"))))
       (build-system trivial-build-system)
-      (inputs `(("bash" ,bash)))
+      (inputs (list bash))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -3798,10 +3754,9 @@ information tool.")
         (base32 "0lqn7pyy8c1vy29vn8ad4x23cw67cy1d21ghns6f3w9a1h7kyjp0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -3850,18 +3805,14 @@ hard-coded.")
            (lambda _
              (setenv "NO_CONFIGURE" "yet"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autoconf-archive
+           automake
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gtk-doc
+           pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("libevdev" ,libevdev)
-       ("libxml2" ,libxml2)
-       ("upower" ,upower)
-       ("xz" ,xz)))
+     (list dbus-glib libevdev libxml2 upower xz))
     (home-page "https://01.org/linux-thermal-daemon/")
     (synopsis "CPU scaling for thermal management")
     (description "The Linux Thermal Daemon helps monitor and control temperature
@@ -3885,7 +3836,7 @@ on systems running the Linux kernel.")
         (base32 "0q0c7bsf0pbl8napry1qyg0gl4pd8wn872h4mz9b56dx4rx90vqg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      `(#:test-target "regress"
        #:make-flags
@@ -3965,12 +3916,12 @@ late.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("mpi" ,openmpi)
-       ("munge" ,munge)
-       ("boost" ,boost)
-       ("libelf" ,libelf)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)))
+     (list openmpi
+           munge
+           boost
+           libelf
+           libgcrypt
+           libgpg-error))
     (synopsis "Infrastructue for large scale tool daemon launching")
     (description
      "LaunchMON is a software infrastructure that enables HPC run-time
@@ -4033,7 +3984,7 @@ Python loading in HPC environments.")
          ("perl" ,perl)
          ("procps" ,procps)))
       (native-inputs
-       `(("gzip" ,gzip)))
+       (list gzip))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -4139,11 +4090,9 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
         (base32 "1sm99423hh90kr4wdjqi9sdrrpk65j2vz2hzj65zcxfxyr6khjci"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("libpng" ,libpng)
-       ("libx11" ,libx11)))
+     (list cairo libpng libx11))
     (home-page "https://gitlab.com/mildlyparallel/pscircle")
     (synopsis "Visualize Linux processes in a form of radial tree")
     (description
@@ -4177,15 +4126,12 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
                 (("= find_library") "= "))
                #t))))))
     (inputs
-     `(("eudev" ,eudev)))
+     (list eudev))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-hypothesis python-mock python-pytest
+           python-sphinx))
     (home-page "https://pyudev.readthedocs.io/")
     (synopsis "Python udev binding")
     (description "This package provides @code{udev} bindings for Python.")
@@ -4206,7 +4152,7 @@ support forum.  It runs with the @code{/exec} command in most IRC clients.")
         (base32 "08da6apzfkfjwasn4dxrlfxqfx7arl28apdzac5nvm0fhvws0dxk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:tests? #f                      ; no tests
        #:make-flags
@@ -4242,17 +4188,16 @@ cache of unix and unix-like systems.")
        (modify-phases %standard-phases
          (add-before 'build 'setenv-PATH
            (lambda _
-             (setenv "PYTHONPATH" (string-append "lib:" (getenv "PYTHONPATH"))))))))
+             (setenv "PYTHONPATH" "lib"))))))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("python-pyudev" ,python-pyudev)
-
-       ;; For GUI.
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-psutil" ,python-psutil)
-       ("python-xlib" ,python-xlib)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-pygobject
+           python-pyudev
+           ;; For GUI.
+           python-pyyaml
+           python-psutil
+           python-xlib
+           gtk+
+           python-pygobject))
     (home-page "https://pwr-solaar.github.io/Solaar/")
     (synopsis "Linux devices manager for the Logitech Unifying Receiver")
     (description "This package provides tools to manage clients of the
@@ -4350,7 +4295,7 @@ possible configuration issues.")
          "1x2fyd7wdqlj1r76ilal06cl2wmbz0ws6i3ys204sbjh1cj6dcl7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      `(#:tests? #f ;; No tests.
        #:configure-flags (list (string-append "--with-pcap-includes="
@@ -4380,8 +4325,7 @@ tcpdump and snoop.")
         (base32 "0832nh2qf9pisgwnbgx6hkylx5d7i416l19y3ly4ifv7k1p7mxqa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("cryptsetup" ,cryptsetup)
        ("libhx" ,libhx)
@@ -4444,9 +4388,7 @@ supplied by the user when logging in.")
         (base32 "0rwvyyrdnw43pixp8h51rncq2inc9pbbj1j2191y5si00pjw34zr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-xmltodict" ,python-xmltodict)))
+     (list python-pygments python-ruamel.yaml python-xmltodict))
     (home-page "https://github.com/kellyjonbrazil/jc")
     (synopsis "Convert the output of command-line tools to JSON")
     (description "@code{jc} JSONifies the output of many CLI tools and
@@ -4468,7 +4410,7 @@ file-types for easier parsing in scripts.")
                 "19i21fqz2m40cds9pb17brjxkczqagmx2f7mfb0xdvbygaply5wz"))))
     (build-system python-build-system)
     (inputs
-     `(("python-tabulate" ,python-tabulate)))
+     (list python-tabulate))
     (home-page "https://github.com/kellyjonbrazil/jtbl")
     (synopsis "Command-line tool to print JSON data as a table in the terminal")
     (description "@code{jtbl} accepts piped JSON data from stdin and outputs a
@@ -4522,7 +4464,7 @@ text table representation to stdout.")
                            "\nPATH=" (getenv "PATH"))))
          ;; check phase
          (setenv "TERM" "linux") ;set to tty for test
-         (invoke (string-append (assoc-ref %build-inputs "bats") "/bin/bats")
+         (invoke (search-input-file %build-inputs "/bin/bats")
                  "test")
          ;; install phase
          (install-file "hosts" (string-append %output "/bin"))
@@ -4566,10 +4508,9 @@ entries, providing commands to add, remove, comment, and search.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libnl" ,libnl)
-       ("libpcap" ,libpcap)))
+     (list libnl libpcap))
     (arguments
      `(#:tests? #f ; None exist
        #:make-flags
@@ -4728,7 +4669,7 @@ disk utilization, priority, username, state, and exit code.")
                (install-file "novena-eeprom" out-bin)
                (install-file "novena-eeprom.8" out-share-man)))))))
     (inputs
-     `(("i2c-tools" ,i2c-tools)))
+     (list i2c-tools))
     (synopsis "Novena EEPROM editor")
     (description "This package provides an editor for the Novena EEPROM.
 Novena boards contain a device-dependent descriptive EEPROM that defines
@@ -4780,7 +4721,7 @@ the XMODEM/YMODEM/ZMODEM file transfer protocols.")
         (base32 "0sdamjzvmf6cxhjmd1rjvn7zm6k10fp5n6vabyxd3yl30cgrxw2i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "PREFIX=" (assoc-ref %outputs "out")))
@@ -4811,7 +4752,7 @@ setup, maintenance, supervision, or any long-running processes.")
                   "058x04yp6bc77hbl3qchqm7pa8f9vqfl9jryr88m8pzl7kvpif54"))))
       (build-system trivial-build-system)
       (inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
diff --git a/gnu/packages/adns.scm b/gnu/packages/adns.scm
index 51694d0982..5703016549 100644
--- a/gnu/packages/adns.scm
+++ b/gnu/packages/adns.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,7 +52,7 @@
        ;; XXX: Tests expect real name resolution to work.
        #:tests? #f))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (home-page "https://www.gnu.org/software/adns/")
     (synopsis "Asynchronous DNS client library and utilities")
     (description
@@ -65,7 +65,7 @@ scripts.")
 (define-public c-ares
   (package
     (name "c-ares")
-    (version "1.16.0")
+    (version "1.17.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -73,11 +73,19 @@ scripts.")
                     ".tar.gz"))
               (sha256
                (base32
-                "129sm0wzij0mp8vdv68v18hnykcjb6ivi66wnqnnw598q7bql1fy"))))
-    (replacement c-ares/fixed)
+                "0gcincjvpll2qmlc906jx6mfq97s87mgi0zby0753ki0rr2ch0s8"))))
     (build-system gnu-build-system)
+    (arguments
+     '(;; FIXME: Some tests require network access
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'filter-live-tests
+           (lambda _
+             ;; Filter tests that require internet access.
+             (setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://c-ares.haxx.se/")
     (synopsis "C library for asynchronous DNS requests")
     (description
@@ -88,23 +96,6 @@ The primary examples of such applications are servers which communicate with
 multiple clients and programs with graphical user interfaces.")
     (license (x11-style "https://c-ares.haxx.se/license.html"))))
 
-(define-public c-ares/fixed
-  (package
-    (inherit c-ares)
-    (name "c-ares")
-    (version "1.17.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://c-ares.haxx.se/download/" name "-" version
-                    ".tar.gz"))
-              (sha256
-               (base32
-                "0gcincjvpll2qmlc906jx6mfq97s87mgi0zby0753ki0rr2ch0s8"))))
-    (arguments
-     `(;; FIXME: Some tests require network access
-       #:tests? #f))))
-
 ;; gRPC requires a c-ares built with CMake in order to get the .cmake modules.
 ;; We can not build c-ares itself with CMake because that would introduce a
 ;; circular dependency through nghttp2.
diff --git a/gnu/packages/agda.scm b/gnu/packages/agda.scm
index de7454c4e8..606b0e48b5 100644
--- a/gnu/packages/agda.scm
+++ b/gnu/packages/agda.scm
@@ -49,28 +49,28 @@
          "159hznnsxg7hlp80r1wqizyd7gwgnq0j13cm4d27cns0ganslb07"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-alex" ,ghc-alex)
-       ("ghc-async" ,ghc-async)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-boxes" ,ghc-boxes)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-hash" ,ghc-data-hash)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-equivalence" ,ghc-equivalence)
-       ("ghc-gitrev" ,ghc-gitrev)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-murmur-hash" ,ghc-murmur-hash)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-split" ,ghc-split)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uri-encode" ,ghc-uri-encode)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-aeson
+           ghc-alex
+           ghc-async
+           ghc-blaze-html
+           ghc-boxes
+           ghc-case-insensitive
+           ghc-data-hash
+           ghc-edit-distance
+           ghc-equivalence
+           ghc-gitrev
+           ghc-happy
+           ghc-hashable
+           ghc-hashtables
+           ghc-monad-control
+           ghc-murmur-hash
+           ghc-parallel
+           ghc-regex-tdfa
+           ghc-split
+           ghc-strict
+           ghc-unordered-containers
+           ghc-uri-encode
+           ghc-zlib))
     (arguments
      `(#:modules ((guix build haskell-build-system)
                   (guix build utils)
@@ -139,7 +139,7 @@ Agda.  It also aids the input of Unicode characters.")))
                 "0dlis6v6nzbscf713cmwlx8h9n2gxghci8y21qak3hp18gkxdp0g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("agda" ,agda)))
+     (list agda))
     (arguments
      `(#:parallel-build? #f
        #:phases
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 3db631d92e..ec038c5d33 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -30,60 +30,65 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages video)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
 (define-public zxing-cpp
-  (package
+  ;; Use the master branch as it includes unreleased build system improvements
+  ;; allowing to use system libraries (instead of attempting to fetch them
+  ;; from the Internet).
+  (let ((revision "0")
+        (commit "00783db7aa3bcf8620a301854ac71c0ceaaca0c1"))
+    (package
+      (name "zxing-cpp")
+      (version (git-version "1.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/nu-book/zxing-cpp")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1yl2cpaqiv1g4nq9v0xfj1vd5faz55k4541vz6hsffvcxgn9nmc5"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       (list fmt googletest))
+      (synopsis "C++ port of ZXing")
+      (description "ZXing-CPP is a barcode scanning library.")
+      (home-page "https://github.com/nu-book/zxing-cpp")
+      (license license:asl2.0))))
+
+;;; This older variant is kept for gst-plugins-bad (see:
+;;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1684).
+(define-public zxing-cpp-1.2
+  (package/inherit zxing-cpp
     (name "zxing-cpp")
-    (version "1.0.8")
-    (source
-     (origin
-       (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/nu-book/zxing-cpp")
-         (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "011sq8wcjfxbnd8sj6bf2fgkamlp8gj6q835g61c952npvwsnl71"))))
-    (native-inputs
-     `(("googletest-source" ,(package-source googletest))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:out-of-source? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-googletest
-           ;; Copy the googletest sources to where the CMake build expects them.
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((source (assoc-ref inputs "googletest-source"))
-                   (target "test/unit/googletest-src"))
-               (mkdir-p target)
-               (copy-recursively source target)
-               ;; Disable downloading via ExternalProject.
-               (substitute* "test/unit/CMakeLists.txt.in"
-                (("ExternalProject_Add\\(") "message("))
-               #t)))
-         (replace 'check
-           (lambda _
-             (with-directory-excursion "test/unit"
-               (invoke "cmake" ".")
-               (invoke "make")
-               (invoke "./ZXingUnitTest"))
-             #t)))))
-    (synopsis "C++ port of ZXing")
-    (description "ZXing-CPP is a barcode scanning library.")
-    (home-page "https://github.com/nu-book/zxing-cpp")
-    (license license:asl2.0)))
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nu-book/zxing-cpp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gjj9c7h634rrmmgzbc7cxjqsxdq0paj6113k02ncjm1s9abk7ik"))))
+    ;; Disable tests to avoid bundled dependencies.
+    (arguments '(#:tests? #f
+                 #:configure-flags '("-DBUILD_BLACKBOX_TESTS=OFF")))
+    (native-inputs '())))
 
 (define-public barcode
   (package
@@ -127,8 +132,8 @@ formats.")
                (with-directory-excursion "tests"
                  (invoke "./test_basic.sh")))
              #t)))))
-    (inputs `(("libpng" ,libpng)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list libpng))
+    (native-inputs (list pkg-config))
     (synopsis "Encode data into a QR Code symbol")
     (description "Libqrencode is a C library for encoding data in a QR Code
 symbol, a kind of 2D symbology that can be scanned by handy terminals such as
@@ -155,10 +160,7 @@ characters, and is highly robust.")
      ;; XXX Test suite is broken: https://github.com/dmtx/libdmtx/issues/22
      `(#:tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/dmtx")
     (synopsis "Library for reading and writing Data Matrix 2D barcodes")
     (description "libdmtx is software for reading and writing Data Matrix 2D
@@ -169,16 +171,18 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
 (define-public zbar
   (package
     (name "zbar")
-    (version "0.23")
+    (version "0.23.90")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://linuxtv.org/downloads/zbar/zbar-"
-                           version
-                           ".tar.bz2"))
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mchehab/zbar")
+         (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0bmd93a15qpgbsq9c9j33qms18rdrgz6gbc48zi6z9w5pvrvi7z9"))))
+         "0rf3i7lx0fqzxsngird6l4d4dnl612nr32rm8sib699qqx67px8n"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list "--with-gtk=auto"
@@ -187,17 +191,25 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
                                               (assoc-ref %outputs "out")
                                               "/etc"))))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
+     `(("dbus" ,dbus)
        ("imagemagick" ,imagemagick)
        ("libjpeg" ,libjpeg-turbo)
+       ("perl" ,perl)
        ("python" ,python)
-       ("qtbase" ,qtbase-5)
        ("qtx11extras" ,qtx11extras)
        ("v4l-utils" ,v4l-utils)))
+    (propagated-inputs
+     ;; These are in 'requires' field of .pc files.
+     (list glib gtk+ qtbase-5))
     (synopsis "Bar code reader")
     (description
      "ZBar can read barcodes from various sources, such as video streams,
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 985120d4e5..2c9674fdb4 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 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 Efraim Flashner <efraim@flashner.co.il>
+;;; 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>
@@ -89,9 +89,7 @@
               "1545vgizpypqi2rrriad0ybqv0qwbn9zr0ibxpk00gha9ihv7acx"))))
    (build-system gnu-build-system)
    (propagated-inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc"  ,mpc))) ; Header files are included by mpfrcx.h.
+     (list gmp mpfr mpc)) ; Header files are included by mpfrcx.h.
    (synopsis "Arithmetic of polynomials over arbitrary precision numbers")
    (description
     "Mpfrcx is a library for the arithmetic of univariate polynomials over
@@ -138,10 +136,9 @@ greatest common divisor operations.")
               "0qq6b1kwb1byj8ws33ya5awq0ilkpm32037pi1l4cf2737fg9m42"))))
    (build-system gnu-build-system)
    (propagated-inputs
-     `(("mpfrcx" ,mpfrcx)
-       ("zlib" ,zlib))) ; Header files included from cm_common.h.
+     (list mpfrcx zlib)) ; Header files included from cm_common.h.
    (inputs
-     `(("pari-gp"  ,pari-gp)))
+     (list pari-gp))
    (synopsis "CM constructions for elliptic curves")
    (description
     "The CM software implements the construction of ring class fields of
@@ -168,13 +165,9 @@ line applications.")
               (patches (search-patches "fplll-std-fenv.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs ; header files pulled in by fplll/defs.h
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)))
+     (list gmp mpfr))
     (home-page "https://github.com/fplll/fplll")
     (synopsis "Library for LLL-reduction of euclidean lattices")
     (description
@@ -219,16 +212,10 @@ the real span of the lattice.")
          "1a25iibihph626jl4wbs4b77xc4a2c4nfc2ypscf9wpani3dnhjf"))))
     (build-system python-build-system)
     (inputs
-     `(("fplll" ,fplll)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("pari-gp" ,pari-gp)))
+     (list fplll gmp mpfr pari-gp))
     (propagated-inputs
-     `(("cysignals" ,python-cysignals)
-       ("cython" ,python-cython)
-       ("flake8" ,python-flake8)
-       ("numpy" ,python-numpy)
-       ("pytest" ,python-pytest)))
+     (list python-cysignals python-cython python-flake8 python-numpy
+           python-pytest))
     (home-page "https://github.com/fplll/fpylll")
     (synopsis "Python interface for fplll")
     (description "fpylll is a Python wrapper for fplll.")
@@ -248,12 +235,9 @@ the real span of the lattice.")
                 "1jm1cz1687cz8pl8lgvmyk3l33cms1xbayv38ca4z1f60qb7zfnc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("texlive" ,(texlive-union
-                    (list texlive-amsfonts/patched)))))
-    (inputs `(("gmp" ,gmp)
-              ("libx11" ,libx11)
-              ("perl" ,perl)
-              ("readline" ,readline)))
+     `(("texlive" ,(texlive-updmap.cfg
+                    (list texlive-amsfonts)))))
+    (inputs (list gmp libx11 perl readline))
     (arguments
      '(#:make-flags '("all")
        #:test-target "dobench"
@@ -289,8 +273,8 @@ PARI is also available as a C library to allow for faster computations.")
               (base32
                 "039ip7qkwwv46wrcdrz7y12m30kazzkjr44kqbc0h137g4wzd7zf"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))
-   (inputs `(("pari-gp" ,pari-gp)))
+   (native-inputs (list perl))
+   (inputs (list pari-gp))
    (arguments
     '(#:configure-flags
       (list (string-append "--with-paricfg="
@@ -324,12 +308,12 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
               "1ws2yhzxmm2l5xqqqcjcimmg40f9qq5l9i6d4i5434an9v9s8531"))))
    (build-system gnu-build-system)
    (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc" ,mpc)
-       ("mpfrcx" ,mpfrcx)
-       ("fplll" ,fplll)
-       ("pari-gp"  ,pari-gp)))
+     (list gmp
+           mpfr
+           mpc
+           mpfrcx
+           fplll
+           pari-gp))
    (synopsis "Igusa class polynomial computations")
    (description
     "The CMH software computes Igusa (genus 2) class polynomials, which
@@ -440,10 +424,9 @@ or text interfaces) or as a C++ library.")
        (base32 "1gp4wm2s8c27g2hh53d09cys62da1bsxfwbcsj9cd7cfikm95pv1"))))
    (build-system gnu-build-system)
    (inputs
-    `(("ntl" ,ntl)))
+    (list ntl))
    (propagated-inputs
-    `(("gmp" ,gmp)
-      ("mpfr" ,mpfr))) ; header files from both are included by flint/arith.h
+    (list gmp mpfr)) ; header files from both are included by flint/arith.h
    (arguments
     `(#:parallel-tests? #f              ; seems to be necessary on arm
       #:phases
@@ -497,10 +480,9 @@ fast arithmetic.")
                 "1lmcl122qy6mr1g1y65bm7dk9fj0sym7gzmvar5vdgk7ln03c5iq"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("flint" ,flint)))               ; flint.h is included by arf.h
+     (list flint))               ; flint.h is included by arf.h
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)))
+     (list gmp mpfr))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -542,12 +524,11 @@ real and complex numbers, with automatic, rigorous error control.")
               (patches (search-patches "python-flint-includes.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("arb" ,arb)
-       ("flint" ,flint)))
+     (list arb flint))
     (synopsis "Python module wrapping ARB and FLINT")
     (description
      "Python-flint is a Python extension module wrapping FLINT
@@ -576,11 +557,9 @@ these types and other mathematical functions.")
                 #t))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("libtool" ,libtool)
-      ("perl" ,perl))) ; for configuration
+    (list libtool perl)) ; for configuration
    (inputs
-    `(("gmp" ,gmp)
-      ("gf2x" ,gf2x)))
+    (list gmp gf2x))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -627,9 +606,7 @@ matrices, and polynomials over the integers and over finite fields.")
                       "13gy1gdng8zijwlr1fn5sixw53z0zf9czzlg0vh1dcc59zw6v998"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("doxygen" ,doxygen)
-      ("graphviz" ,graphviz)
-      ("perl" ,perl)))
+    (list doxygen graphviz perl))
    (inputs
     `(("cddlib" ,cddlib)
       ("gmp" ,gmp)
@@ -668,7 +645,7 @@ geometry and singularity theory.")
                       "0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
    (build-system gnu-build-system)
    (inputs
-    `(("gmp" ,gmp)))
+    (list gmp))
    (arguments
     `(#:configure-flags '("--enable-shared"
                           ;; Disable specific assembly routines, which depend
@@ -698,17 +675,15 @@ binary.")
              (patches (search-patches "bc-fix-cross-compilation.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("ed" ,ed)
-       ("flex" ,flex)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf ed flex texinfo))
+    (inputs
+     (list readline))
     (arguments
      '(#:configure-flags
        (list "--with-readline")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
+         (replace 'bootstrap
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (home-page "https://www.gnu.org/software/bc/")
@@ -782,7 +757,7 @@ a C program.")
          ;; available on the user's machine when that package is built on a
          ;; different machine.
          "ax_cv_c_flags__mtune_native=no")))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "http://fftw.org")
     (synopsis "Computing the discrete Fourier transform")
     (description
@@ -853,8 +828,7 @@ cosine/ sine transforms or DCT/DST).")
                             "**/SparseVectorTest.java"
                             "**/DenseVectorTest.java")))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "http://la4j.org/")
     (synopsis "Java library that provides Linear Algebra primitives and algorithms")
     (description "The la4j library is a Java library that provides Linear
@@ -891,7 +865,7 @@ the la4j library are:
        #:tests? #f ; tests are not included in the release archive
        #:jdk ,icedtea-8))
     (propagated-inputs
-     `(("java-commons-math3" ,java-commons-math3)))
+     (list java-commons-math3))
     (home-page "https://gitlab.com/ICM-VisLab/JLargeArrays")
     (synopsis "Library of one-dimensional arrays that can store up to 263 elements")
     (description "JLargeArrays is a Java library of one-dimensional arrays
@@ -916,8 +890,7 @@ that can store up to 263 elements.")
        #:tests? #f ; tests are not included in the release archive
        #:jdk ,icedtea-8))
     (propagated-inputs
-     `(("java-commons-math3" ,java-commons-math3)
-       ("java-jlargearrays" ,java-jlargearrays)))
+     (list java-commons-math3 java-jlargearrays))
     (home-page "https://github.com/wendykierp/JTransforms")
     (synopsis "Multithreaded FFT library written in pure Java")
     (description "JTransforms is a multithreaded FFT library written in pure
@@ -941,7 +914,7 @@ Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
                 "00bch77a6qgnw6vzsjn2a42n8n683ih3xm0wpr454jxa15hw78vf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)))                   ; for pod2man
+     (list perl))                   ; for pod2man
     (home-page "https://jugit.fz-juelich.de/mlz/lmfit")
     (synopsis "Levenberg-Marquardt minimization and least-squares fitting")
     (description "lmfit is a C library for Levenberg-Marquardt least-squares
@@ -974,10 +947,7 @@ algorithms from the FORTRAN library MINPACK.")
          "-DWITH_SYMENGINE_THREAD_SAFE=on"
          "-DBUILD_SHARED_LIBS=on")))    ;also build libsymengine
     (inputs
-     `(("flint" ,flint)
-       ("gmp" ,gmp)
-       ("mpc" ,mpc)
-       ("mpfr" ,mpfr)))
+     (list flint gmp mpc mpfr))
     (home-page "https://github.com/symengine/symengine")
     (synopsis "Fast symbolic manipulation library")
     (description
@@ -1006,8 +976,7 @@ Optional thin wrappers allow usage of the library from other languages.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper))) ; Python is required
     (inputs
-     `(("cln" ,cln)
-       ("readline" ,readline)))
+     (list cln readline))
     (home-page "https://www.ginac.de/")
     (synopsis "Library for symbolic computation")
     (description "GiNaC is a C++ library for symbolic computation.  Contrary
@@ -1142,8 +1111,7 @@ features, and more.")
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)
-       ("xtl" ,xtl)))
+     (list googletest xtl))
     (arguments
      `(#:configure-flags
        '("-DBUILD_TESTS=ON")
@@ -1224,9 +1192,7 @@ xtensor provides:
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list gmp readline zlib))
     (arguments
      `(#:modules ((ice-9 ftw)
                   (srfi srfi-26)
@@ -1313,9 +1279,7 @@ objects.")
               "0q1wdiwqj6fsbifaayb1zkp20bz8a1my81sqjsail577jmzwi07w"))))
    (build-system gnu-build-system)
    (inputs
-    `(("boost" ,boost)
-      ("gmp" ,gmp)
-      ("mpfr" ,mpfr)))
+    (list boost gmp mpfr))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -1356,11 +1320,9 @@ for the Coq proof assistant.")
                 "11wz57q6ijsvfs5r82masxgr319as92syi78lnl9lgdblpc6xigk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (propagated-inputs
-     `(("gmp" ,gmp))) ; gmp++.h includes gmpxx.h
+     (list gmp)) ; gmp++.h includes gmpxx.h
     (synopsis "Algebraic computations with exact rings and fields")
     (description
      "Givaro is a C++ library implementing the basic arithmetic of various
@@ -1387,14 +1349,11 @@ compound objects, such as vectors, matrices and univariate polynomials.")
                 "1ynbjd72qrwp0b4kpn0p5d7gddpvj8dlb5fwdxajr5pvkvi3if74"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (propagated-inputs
-     `(("givaro" ,givaro))) ; required according to the .pc file
+     (list givaro)) ; required according to the .pc file
     (arguments
      `(#:configure-flags
        (list (string-append "--with-blas-libs="
@@ -1430,12 +1389,9 @@ algebra, such as the row echelon form.")
               (patches (search-patches "linbox-fix-pkgconfig.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
-     `(("fflas-ffpack" ,fflas-ffpack)))
+     (list fflas-ffpack))
     (synopsis "C++ library for linear algebra over exact rings")
     (description
      "LinBox is a C++ template library for exact linear algebra computation
@@ -1459,12 +1415,9 @@ finite fields.")
                 "0xfg6pffbn8r1s0y7bn9b8i55l00d41dkmhrpf7pwk53qa3achd3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (synopsis "Arithmetic of dense matrices over F_2")
     (description "M4RI is a library for fast arithmetic with dense matrices
 over F2.  The name M4RI comes from the first implemented algorithm: The
@@ -1549,11 +1502,9 @@ polynomials, and the representation theory of Hecke algebras of type A_n.")
                 "0r8lv46qx5mkz5kp3ay2jnsp0mbhlqr5z2z220wdk73wdshcznss"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("m4ri" ,m4ri)))
+     (list m4ri))
     (synopsis "Arithmetic of dense matrices over F_{2^e}")
     (description "M4RI is a library for fast arithmetic with dense matrices
 over finite fields of characteristic 2.  So it extends the functionality
@@ -1576,12 +1527,9 @@ of M4RI from F_2 to F_{2^e}.")
                 "1gw27lqc3f525n8qdcmr2nyn16y9g10z9f6dnmckyyxcdzvhq35n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("ntl" ,ntl)
-       ("pari-gp" ,pari-gp)))
+     (list ntl pari-gp))
     (synopsis "Ranks of elliptic curves and modular symbols")
     (description "The eclib package includes mwrank (for 2-descent on
 elliptic curves over Q) and modular symbol code; it has been written by
@@ -1606,9 +1554,7 @@ John Cremona to compute his elliptic curve database.")
               (patches (search-patches "lrcalc-includes.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1718,12 +1664,12 @@ no more than about 20 bits long).")
               "11290ivi9h665cxi8f1shlavhy10vzb8s28m57hrcgnxyxqmhx0m"))))
    (build-system gnu-build-system)
    (inputs
-    `(("fplll" ,fplll)
-      ("gmp" ,gmp)
-      ("gnuplot" ,gnuplot)
-      ("libxml2" ,libxml2)
-      ("mpfi" ,mpfi)
-      ("mpfr" ,mpfr)))
+    (list fplll
+          gmp
+          gnuplot
+          libxml2
+          mpfi
+          mpfr))
    (arguments
     `(#:configure-flags
       (list (string-append "--docdir=${datadir}/doc/sollya-" ,version))
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index 74d97ab3b6..5fa4e6c8e9 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -4,12 +4,13 @@
 ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2017, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2017, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Sergey Trofimov <sarg@sarg.org.ru>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +30,7 @@
 (define-module (gnu packages android)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system android-ndk)
   #:use-module (guix build-system gnu)
@@ -309,7 +311,7 @@ various Android core host applications.")
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "libsparse") #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform sparse library")
     (description "@code{android-libsparse} is a library in common use by the
@@ -340,11 +342,9 @@ various Android core host applications.")
                                  (string-append out "/include/ziparchive"))
                #t))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("android-libbase" ,android-libbase)
-       ("android-libutils" ,android-libutils)
-       ("android-liblog" ,android-liblog)))
+     (list android-libbase android-libutils android-liblog))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform ZIP library")
     (description "@code{android-libziparchive} is a library in common use by the
@@ -360,10 +360,12 @@ various Android core host applications.")
     (arguments
      `(#:tests? #f ; Test failure: sysdeps_poll.fd_count
        #:make-flags
-       (list "CFLAGS=-Wno-error"
-             "CXXFLAGS=-fpermissive -Wno-error -std=gnu++14 -D_Nonnull= -D_Nullable= -I ."
-             (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib "
-                            "-Wl,-rpath=" (assoc-ref %build-inputs "openssl") "/lib -L ."))
+       ,#~(list
+           "CFLAGS=-Wno-error"
+           "CXXFLAGS=-fpermissive -Wno-error -std=gnu++14 -D_Nonnull= -D_Nullable= -I ."
+           (string-append
+            "LDFLAGS=-Wl,-rpath=" #$output "/lib "
+            "-Wl,-rpath=" #$(this-package-input "openssl") "/lib -L ."))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
@@ -385,10 +387,7 @@ various Android core host applications.")
              (install-file "diagnose_usb.h" (string-append (assoc-ref outputs "out") "/include"))
              #t)))))
     (inputs
-     `(("android-libbase" ,android-libbase)
-       ("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("openssl" ,openssl)))
+     (list android-libbase android-libcutils android-liblog openssl))
     (home-page "https://developer.android.com/studio/command-line/adb.html")
     (synopsis "Android Debug Bridge")
     (description
@@ -507,11 +506,11 @@ that is safe to use for user space.  It also includes
               (("#ifdef HOST") "#ifdef XXX"))
              #t)))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("android-bionic-uapi" ,android-bionic-uapi)
-       ;; pcre is inlined by our package.
-       ("pcre" ,pcre)))
+     (list android-bionic-uapi
+           ;; pcre is inlined by our package.
+           pcre))
     (home-page "https://developer.android.com/")
     (synopsis "Android version of the SELinux libraries and utilities")
     (description
@@ -530,29 +529,25 @@ the core SELinux management utilities.")
     (build-system android-ndk-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "CPPFLAGS="
-                            ;"-Wno-error "
-                            "-I "
-                            (assoc-ref %build-inputs "android-libselinux")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-libsparse")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-libcutils")
-                            "/include "
-                            "-I " (assoc-ref %build-inputs "android-liblog") "/include "
-                            "-I ../core/include")
-             "CFLAGS=-Wno-error"
-             "install-libext4_utils_host.a"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list
+           (string-append
+            "CPPFLAGS="
+            ;"-Wno-error "
+            "-I " #$(this-package-input "android-libselinux") "/include "
+            "-I " #$(this-package-input "android-libsparse")  "/include "
+            "-I " #$(this-package-input "android-libcutils")  "/include "
+            "-I " #$(this-package-input "android-liblog") "/include "
+            "-I ../core/include")
+           "CFLAGS=-Wno-error"
+           "install-libext4_utils_host.a"
+           (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-core
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "core")
-             (with-directory-excursion "core"
-               (invoke "tar" "axf" (assoc-ref inputs "android-core")
-                             "--strip-components=1"))
-             #t))
+             (copy-recursively (assoc-ref inputs "android-core")
+                               "core")))
          (add-after 'unpack-core 'enter-source
            (lambda _ (chdir "ext4_utils") #t))
          (replace 'install
@@ -561,11 +556,8 @@ the core SELinux management utilities.")
                (copy-recursively "." (string-append out "/include")))
              #t)))))
     (inputs
-     `(("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("android-libselinux" ,android-libselinux)
-       ("android-libsparse" ,android-libsparse)
-       ("zlib" ,zlib)))
+     (list android-libcutils android-liblog android-libselinux
+           android-libsparse zlib))
     (native-inputs
      `(("android-core" ,(android-platform-system-core version))))
     (home-page "https://developer.android.com/")
@@ -585,6 +577,9 @@ Android core.")
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "f2fs_utils") #t))
+         (add-before 'build 'set-compilation-flags
+           (lambda _
+             (setenv "CFLAGS" "-fcommon")))
          (add-after 'install 'install-headers
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively "." (string-append (assoc-ref outputs "out")
@@ -600,11 +595,8 @@ Android core.")
                (install-file "mkf2fsuserimg.sh" bin)
                #t))))))
     (inputs
-     `(("f2fs-tools" ,f2fs-tools-1.7)
-       ("android-libselinux" ,android-libselinux)
-       ("android-libsparse" ,android-libsparse)
-       ("android-libcutils" ,android-libcutils)
-       ("zlib" ,zlib)))
+     (list f2fs-tools-1.7 android-libselinux android-libsparse
+           android-libcutils zlib))
     (home-page "https://developer.android.com/")
     (synopsis "Android f2fs utils")
     (description "@code{android-f2fs-utils} is a library in common use by the
@@ -641,8 +633,7 @@ file system.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively "../include/utils" (string-append (assoc-ref outputs "out") "/include/utils")))))))
     (inputs
-     `(("android-safe-iop" ,android-safe-iop)
-       ("android-libcutils" ,android-libcutils)))
+     (list android-safe-iop android-libcutils))
     (native-inputs
      `(("android-bionic-uapi" ,android-bionic-uapi)
        ("android-liblog" ,android-liblog)
@@ -679,22 +670,22 @@ file system.")
                (install-file "fastboot" bin)
                #t))))))
     (inputs
-     `(("adb" ,adb)
-       ("android-safe-iop" ,android-safe-iop)
-       ("android-ext4-utils" ,android-ext4-utils)
-       ("android-f2fs-utils" ,android-f2fs-utils)
-       ("android-libbase" ,android-libbase)
-       ("android-libcutils" ,android-libcutils)
-       ("android-liblog" ,android-liblog)
-       ("android-libutils" ,android-libutils)
-       ("android-libsparse" ,android-libsparse)
-       ("android-libziparchive" ,android-libziparchive)
-       ("android-libselinux" ,android-libselinux)
-       ("pcre" ,pcre)
-       ("mkbootimg" ,mkbootimg)
-       ("zlib" ,zlib)))
+     (list adb
+           android-safe-iop
+           android-ext4-utils
+           android-f2fs-utils
+           android-libbase
+           android-libcutils
+           android-liblog
+           android-libutils
+           android-libsparse
+           android-libziparchive
+           android-libselinux
+           pcre
+           mkbootimg
+           zlib))
     (native-inputs
-     `(("xz" ,xz)))
+     (list xz))
     (home-page "https://developer.android.com/studio/command-line/")
     (synopsis "Android image flasher")
     (description
@@ -894,21 +885,18 @@ safest way, on a file image.")
              (invoke "nosetests" "--with-coverage" "--with-timer"
                      "--timer-top-n" "50"))))))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-nose-timer" ,python-nose-timer)))
+     (list python-codecov python-coverage python-mock python-nose
+           python-nose-timer))
     (propagated-inputs
-     `(("python-asn1crypto" ,python-asn1crypto)
-       ("python-colorama" ,python-colorama)
-       ("python-future" ,python-future)
-       ("python-ipython" ,python-ipython)
-       ("python-lxml" ,python-lxml)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-pygments" ,python-pygments)
-       ("python-pyperclip" ,python-pyperclip)))
+     (list python-asn1crypto
+           python-colorama
+           python-future
+           python-ipython
+           python-lxml
+           python-matplotlib
+           python-networkx
+           python-pygments
+           python-pyperclip))
     (home-page "https://github.com/androguard/androguard")
     (synopsis "Python tool to play with Android files")
     (description
@@ -943,28 +931,25 @@ useful for reverse engineering, analysis of Android applications and more.")
                (("docker-py >= 1.9, < 2.0") "docker >= 1.9"))
              #t)))))
     (propagated-inputs
-     `(("python-androguard" ,python-androguard)
-       ("python-apache-libcloud" ,python-apache-libcloud)
-       ("python-clint" ,python-clint)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-docker" ,python-docker)
-       ("python-gitpython" ,python-gitpython)
-       ("python-mwclient" ,python-mwclient)
-       ("python-paramiko" ,python-paramiko)
-       ("python-pillow" ,python-pillow)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-qrcode" ,python-qrcode)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-requests" ,python-requests)
-       ("python-vagrant" ,python-vagrant)))
+     (list python-androguard
+           python-apache-libcloud
+           python-clint
+           python-defusedxml
+           python-docker
+           python-gitpython
+           python-mwclient
+           python-paramiko
+           python-pillow
+           python-pyasn1
+           python-pyasn1-modules
+           python-pyyaml
+           python-qrcode
+           python-ruamel.yaml
+           python-requests
+           python-vagrant))
     (native-inputs
-     `(("python-babel" ,python-babel)
-       ("python-bcrypt" ,python-bcrypt)
-       ("python-docker-pycreds" ,python-docker-pycreds)
-       ("python-pynacl" ,python-pynacl)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-babel python-bcrypt python-docker-pycreds python-pynacl
+           python-websocket-client))
     (home-page "https://f-droid.org")
     (synopsis "F-Droid server tools")
     (description
@@ -993,7 +978,7 @@ main repository.")
        #:tests? #f  ; TODO: Inputs missing.
        #:install-source? #f))
     (inputs
-     `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-kr-pretty))
     ;(native-inputs
     ; `(("go-github-com-rogpeppe-go-internal-testscript"
     ;    ,go-github-com-rogpeppe-go-internal-testscript)))
@@ -1026,13 +1011,6 @@ connected devices via ADB.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'enjarify-wrapper-inherit-pythonpath
-           ;; enjarify sets PYTHONPATH from a shell script, overwriting
-           ;; PYTHONPATH set from guix. Comment out this line.
-           (lambda _
-             (substitute* "enjarify.sh"
-               (("export PYTHONPATH") "# export PYTHONPATH"))
-             #t))
          (add-before 'check 'fixup-expected-test-results
            ;; Upstream adjusted this test in commit:
            ;; 3ae884a6485af82d300515813f537685b08dd800
@@ -1053,7 +1031,7 @@ connected devices via ADB.")
                  (mkdir-p (string-append out "/bin/"))
                  (copy-file "enjarify.sh" (string-append out "/bin/enjarify"))
                  #t))))))
-    (native-inputs `(("openjdk" ,openjdk12)))
+    (native-inputs (list openjdk12))
     (synopsis "Translate Dalvik bytecode to equivalent Java bytecode")
     (description "Android applications are Java programs that run on a
 customized virtual machine, which is part of the Android operating system, the
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index a8ead4295c..c281772563 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -82,8 +82,7 @@
         "-Dlog=true"
         "-Dtest=true")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (synopsis "Lottie Animation Library")
     (description "Rlottie is a platform independent standalone c++ library for
 rendering vector based animations and art in realtime.")
@@ -182,8 +181,7 @@ C++ @dfn{Standard Template Library} (STL).")
        ("openexr" ,openexr-2)
        ("pango" ,pango)))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation renderer")
     (description
@@ -225,13 +223,9 @@ for tweening, preventing the need to hand-draw each frame.")
                  `("XDG_DATA_DIRS" ":" prefix (,gtk-share)))
                #t))))))
     (inputs
-     `(("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("libsigc++" ,libsigc++)
-       ("synfig" ,synfig)))
+     (list gtkmm-3 gtk+ libsigc++ synfig))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation package (GUI)")
     (description
@@ -454,7 +448,7 @@ language.")
          ("qtmultimedia" ,qtmultimedia)
          ("libsndfile" ,libsndfile)))
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (home-page "https://www.lostmarble.com/papagayo/")
       (synopsis "Lip-syncing for animations")
       (description
@@ -480,10 +474,7 @@ waveform until they line up with the proper sounds.")
                 "0b1nwiwyg01087q318vymg4si76dw41ykxbn2zwd6dqbxzbpr1dh"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtxmlpatterns qtmultimedia qtsvg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm
index 368b0efde7..80126a5b59 100644
--- a/gnu/packages/antivirus.scm
+++ b/gnu/packages/antivirus.scm
@@ -66,11 +66,11 @@
                                "clamav-config-llvm-libs.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("check" ,check)                 ; for tests
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           check ; for tests
+           libtool
+           pkg-config))
     (inputs
      `(("bzip2" ,bzip2)
        ("libcurl" ,curl)
diff --git a/gnu/packages/apr.scm b/gnu/packages/apr.scm
index 1a4a1c6304..3b4968089b 100644
--- a/gnu/packages/apr.scm
+++ b/gnu/packages/apr.scm
@@ -30,14 +30,14 @@
 (define-public apr
   (package
     (name "apr")
-    (version "1.6.5")
+    (version "1.7.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://apache/apr/apr-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "01d1n1ql66bxsjx0wyzazmkqdqdmr0is6a7lwyy5kzy4z7yajz56"))
+               "1spp6r2a3xcl5yajm9safhzyilsdzgagc2dadif8x6z9nbq4iqg2"))
              (patches
               (search-patches "apr-skip-getservbyname-test.patch"))
              (patch-flags '("-p0"))))
@@ -48,8 +48,7 @@
      ;; Thus, build sequentially.
      '(#:parallel-build? #f
        #:parallel-tests? #f))
-    (inputs `(("perl" ,perl)
-              ("libltdl" ,libltdl)))
+    (inputs (list perl libltdl))
     (home-page "http://apr.apache.org/")
     (synopsis "The Apache Portable Runtime Library")
     (description
@@ -75,9 +74,9 @@ around or take advantage of platform-specific deficiencies or features.")
                "0nq3s1yn13vplgl6qfm09f7n0wm08malff9s59bqf9nid9xjzqfk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("apr" ,apr)))
+     (list apr))
     (propagated-inputs
-     `(("expat" ,expat)))
+     (list expat))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/arcan.scm b/gnu/packages/arcan.scm
index a84bf0d8dd..c25d64903c 100644
--- a/gnu/packages/arcan.scm
+++ b/gnu/packages/arcan.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 L  p R n  d n <guix@lprndn.info>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,7 +66,8 @@
                  (base32 "1pd0avlzc2rig1hd37zbhc7r2s6fjzdhshfg9l9cfzibl7caclyw"))))
       (build-system cmake-build-system)
       (arguments
-       `(#:configure-flags '("-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
+       `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon"
+                             "-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
                              "-DSTATIC_OPENAL=off""-DENABLE_LWA=on"
                              "-DSTATIC_SQLITE3=off" "-DSTATIC_FREETYPE=off"
                              "-DSHMIF_TUI_ACCEL=on")
@@ -75,12 +77,10 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/platform/cmake/modules/FindGBMKMS.cmake"
                  (("/usr/local/include/libdrm")
-                  (string-append (assoc-ref inputs "libdrm")
-                                 "/include/libdrm")))
+                  (search-input-directory inputs "include/libdrm")))
                (substitute* "src/platform/cmake/modules/FindAPR.cmake"
                  (("/usr/local/apr/include/apr-1")
-                  (string-append (assoc-ref inputs "apr")
-                                 "/include/apr-1")))
+                  (search-input-directory inputs "include/apr-1")))
                #t))
            ;; Normally, it tries to fetch patched openal with git
            ;; but copying files manually in the right place seems to work too.
@@ -151,8 +151,7 @@
                              (base32
                               "0dcxcnqjkyyqdr2yk84mprvkncy5g172kfs6vc4zrkklsbkr8yi2"))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("ruby" ,ruby)))               ; For documentation and testing
+       (list pkg-config ruby))               ; For documentation and testing
       (home-page "https://arcan-fe.com")
       (synopsis "Display server, multimedia framework and game engine (egl-dri)")
       (description "Arcan is a development framework for creating virtually
@@ -171,14 +170,15 @@ engine programmable using Lua.")
     (inherit arcan)
     (name "arcan-sdl")
     (inputs
-     `(("sdl" ,sdl)
-       ,@(fold alist-delete (package-inputs arcan)
-               '("libdrm"))))
+     (modify-inputs (package-inputs arcan)
+       (delete "libdrm")
+       (prepend sdl)))
     (arguments
      `(,@(ensure-keyword-arguments
           (package-arguments arcan)
           '(#:configure-flags
-            '("-DVIDEO_PLATFORM=sdl" "-DBUILTIN_LUA=off"
+            '("-DCMAKE_C_FLAGS=-fcommon"
+              "-DVIDEO_PLATFORM=sdl" "-DBUILTIN_LUA=off"
               "-DSTATIC_OPENAL=off" "-DDISABLE_JIT=off"
               "-DENABLE_LWA=on" "-DSTATIC_SQLITE3=off"
               "-DSTATIC_FREETYPE=off" "-DSHMIF_TUI_ACCEL=on")))))
@@ -218,11 +218,7 @@ engine programmable using Lua.")
            ,(string-append "--with-xkb-output="
                            "/tmp"))))   ; FIXME: Copied from xorg
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("util-macros" ,util-macros)))
+       (list pkg-config autoconf automake libtool util-macros))
       (inputs
        `(("arcan" ,arcan)
          ("font-util" ,font-util)
@@ -250,14 +246,14 @@ as a window under Arcan.")
     (inherit arcan)
     (name "arcan-wayland")
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("arcan" ,arcan)
-       ("libseccomp" ,libseccomp)
-       ("libxkbcommon" ,libxkbcommon)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list arcan
+           libseccomp
+           libxkbcommon
+           mesa
+           wayland
+           wayland-protocols))
     (arguments
      `(#:tests? #f
        #:phases
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index a86984b28c..753f65642d 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -73,7 +73,7 @@
                   (string-append "\"filter-path" middle
                                  "\"" libdir "\"")))
                #t))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
 
     (native-search-paths
      ;; This is a Guix-specific environment variable that takes a single
@@ -131,8 +131,7 @@ dictionaries, including personal ones.")
          (list (string-append "dictdir=" out "/lib/aspell")
                (string-append "datadir=" out "/lib/aspell")))
        #:tests? #f))
-    (native-inputs `(("aspell" ,aspell)
-                     ("which" ,which)))
+    (native-inputs (list aspell which))
     (synopsis (string-append full-name " dictionary for GNU Aspell")) ; XXX: i18n
     (description
      "This package provides a dictionary for the GNU Aspell spell checker.")
@@ -389,10 +388,7 @@ dictionaries, including personal ones.")
                (base32
                 "11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)
-       ("perl" ,perl)
-       ("aspell" ,aspell)))
+     (list tar gzip perl aspell))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -522,10 +518,9 @@ under permissive licensing terms.  See the 'Copyright' file."))))
                    (format port "#define MAN45DIR \"~a/share/man/man5\"~%" out))))
              #t)))))
     (inputs
-     `(("grep" ,grep)
-       ("ncurses" ,ncurses)))
+     (list grep ncurses))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (synopsis "Interactive spell-checking tool for Unix")
     (description "Ispell is an interactive spell-checking tool supporting many
 European languages.")
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index 6e4dede589..51bf840bee 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,17 +59,17 @@
 (define-public nasm
   (package
     (name "nasm")
-    (version "2.14.02")
+    (version "2.15.05")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.nasm.us/pub/nasm/releasebuilds/"
                                   version "/nasm-" version ".tar.xz"))
               (sha256
                (base32
-                "1xg8dfr49py15vbwk1rzcjc3zpqydmr49ahlijm56wlgj8zdwjp2"))))
+                "0gqand86b0r86k3h46dh560lykxmxqqywz5m55kgjfq7q4lngbrw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)  ;for doc and test target
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl ;for doc and test target
+                         texinfo))
     (arguments
      `(#:test-target "test"
        #:phases
@@ -75,11 +77,10 @@
          (add-after 'unpack 'dont-build-ps-pdf-outputs
            (lambda _
              (substitute* "doc/Makefile.in"
-               (("html nasmdoc.txt nasmdoc.pdf")
+               (("html nasmdoc.txt nasmdoc.pdf \\$\\(XZFILES\\)")
                 "html nasmdoc.txt")
                (("\\$\\(INSTALL_DATA\\) nasmdoc.pdf")
-                "$(INSTALL_DATA)"))
-             #t))
+                "$(INSTALL_DATA)"))))
          (add-after 'install 'install-info
            (lambda _
              (invoke "make" "install_doc"))))))
@@ -139,7 +140,10 @@ debugging information in STABS, DWARF 2, and CodeView 8 formats.")
               (base32
                "1jgxbq2cm51dzi3zhz38mmgwdcgs328mfl8iviw8dxn6dn36p1gd"))))
     (build-system gnu-build-system)
-    (native-inputs `(("zlib" ,zlib)))
+    (native-inputs (list zlib))
+    (arguments
+     ;; Some tests fail when run in parallel.
+     `(#:parallel-tests? #f))
     (synopsis "Library for generating assembly code at runtime")
     (description
      "GNU Lightning is a library that generates assembly language code at
@@ -267,15 +271,15 @@ assembler, a C compiler and a linker.  The assembler uses Intel syntax
                   "0p6wklslkkp3s4aisj3w5a53bagqn5fy4m6088ppd4fcfxgqkrcd"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("bison" ,bison)
-         ("flex" ,flex)
-         ("help2man" ,help2man)
-         ("gettext" ,gettext-minimal)
-         ("libtool" ,libtool)
-         ("makeinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf
+             automake
+             bison
+             flex
+             help2man
+             gettext-minimal
+             libtool
+             texinfo
+             pkg-config))
       (home-page "https://www.gnu.org/software/libjit/")
       (synopsis "Just-In-Time compilation library")
       (description
@@ -320,12 +324,9 @@ runtime")
                       ,(string-append "PREFIX="
                                       (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux)))
+     (list bison flex pkg-config util-linux))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://github.com/gbdev/rgbds")
     (synopsis "Rednex Game Boy Development System")
     (description
@@ -398,7 +399,7 @@ Supported architectures are:
        (modify-phases %standard-phases
          (delete 'configure))            ; no "configure" script
        #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "https://www.floodgap.com/retrotech/xa/")
     (synopsis "Two-pass portable cross-assembler")
     (description
@@ -445,19 +446,19 @@ sets, both THUMB and ARM mode.")
 (define-public intel-xed
   (package
     (name "intel-xed")
-    (version "11.2.0")
+    (version "12.0.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/intelxed/xed")
              (commit version)))
-       (sha256 (base32 "1jffayski2gpd54vaska7fmiwnnia8v3cka4nfyzjgl8xsky9v2s"))
+       (sha256 (base32 "07zfff8zf29c2n0wal87hiqfq3cwcjn80zz78mz0nyjfj09nd39f"))
        (file-name (git-file-name name version))
        (patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python-wrapper" ,python-wrapper)
+     `(("python" ,python-wrapper)
        ("tcsh" ,tcsh)
        ;; As of the time of writing this comment, mbuild does not exist in the
        ;; Python Package Index and seems to only be used by intel-xed, so we
@@ -471,10 +472,10 @@ sets, both THUMB and ARM mode.")
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/intelxed/mbuild")
-                   (commit "5304b94361fccd830c0e2417535a866b79c1c297")))
+                   (commit "3de3f0d753c11dbe634bec611d4cc13f74768e4f")))
              (sha256
               (base32
-               "0r3avc3035aklqxcnc14rlmmwpj3jp09vbcbwynhvvmcp8srl7dl"))
+               "0z8hdhpmk8y5c9429p2yns9daswnffbprni9czkq3vij8f58lkg4"))
              (file-name (git-file-name name version)))))))
     (outputs '("out" "lib"))
     (arguments
@@ -489,8 +490,7 @@ sets, both THUMB and ARM mode.")
            (replace 'build
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((mbuild (assoc-ref inputs "mbuild")))
-                 (setenv "PYTHONPATH" (string-append
-                                       (getenv "PYTHONPATH") ":" mbuild))
+                 (setenv "PYTHONPATH" mbuild)
                  (invoke "./mfile.py"
                          (string-append "--build-dir=" build-dir)
                          (string-append "--install-dir=" kit-dir)
@@ -517,8 +517,7 @@ sets, both THUMB and ARM mode.")
                  (copy-recursively (string-append kit-dir "/include")
                                    (string-append lib "/include"))
                  (copy-recursively (string-append kit-dir "/lib")
-                                   (string-append lib "/lib"))
-                 #t)))))))
+                                   (string-append lib "/lib")))))))))
     (home-page "https://intelxed.github.io/")
     (synopsis "Encoder and decoder for x86 (IA32 and Intel64) instructions")
     (description "The Intel X86 Encoder Decoder (XED) is a software library and
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 8e3403c85c..d88a0ef739 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -144,8 +144,7 @@ in FITS files.")
              (substitute* "fitsio/test.py"
                (("'SKIP_BZIP_TEST' in os.environ") "True")))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("cfitsio" ,cfitsio)))
+     (list python-numpy cfitsio))
     (home-page "https://github.com/esheldon/fitsio")
     (synopsis
      "Python library to read from and write to FITS files")
@@ -201,10 +200,7 @@ for reading and writing.")
         (base32 "0nh12dr7gk4ki55lz95pkm4fpf7kazirra3zax9pab6v4qql4hlw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoreconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool pkg-config))
     (home-page "https://github.com/liberfa/erfa")
     (synopsis "Essential Routines for Fundamental Astronomy")
     (description
@@ -250,7 +246,7 @@ feature detection and cosmetic corrections.")
        (sha256
         (base32 "1536gmcpm6pckn9xrb6j8s4pm1vryjhzvhfaj9wx3jwxcpbdy0dw"))))
     (inputs
-     `(("cfitsio" ,cfitsio)))
+     (list cfitsio))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -321,8 +317,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
        ("wcslib" ,wcslib)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("lzip" ,lzip)))
+     (list libtool lzip))
     (home-page "https://www.gnu.org/software/gnuastro/")
     (synopsis "Astronomy utilities")
     (description "The GNU Astronomy Utilities (Gnuastro) is a suite of
@@ -360,9 +355,7 @@ programs for the manipulation and analysis of astronomical data.")
         (string-append
          "--with-fftw-incdir=" (assoc-ref %build-inputs "fftw") "/include"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
      `(("openblas" ,openblas)
        ("fftw" ,fftwf)))
@@ -454,11 +447,9 @@ astronomical fields.  SkyMaker is part of the EFIGI
                (copy-recursively "lang" lang))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
      (inputs
-      `(("gtkmm" ,gtkmm)
-        ("libskry" ,libskry)
-        ("ffmpeg" ,ffmpeg)))
+      (list gtkmm-3 libskry ffmpeg))
      (home-page "https://github.com/GreatAttractor/stackistry")
      (synopsis "Astronomical lucky imaging/image stacking tool")
      (description
@@ -483,12 +474,12 @@ deconvolution).  Such post-processing is not performed by Stackistry.")
         (base32 "049jlc8vx06pad5h2syrmf7f1l346yr5iraai0wkn8s8pk30j8q7"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtscript" ,qtscript)
-       ("qtserialport" ,qtserialport)
-       ("zlib" ,zlib)))
+     (list qtbase-5
+           qtlocation
+           qtmultimedia
+           qtscript
+           qtserialport
+           zlib))
     (native-inputs
      `(("gettext" ,gettext-minimal)     ; xgettext is used at compile time
        ("perl" ,perl)                   ; for pod2man
@@ -591,7 +582,7 @@ any arbitrary astrometric projection defined in the WCS standard.")
          ;; glut: for glut interface
          ("freeglut" ,freeglut)))
       (propagated-inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:configure-flags '("-DENABLE_GLUT=ON" "-DENABLE_QT=OFF")
          #:tests? #f))                            ;no tests
@@ -683,27 +674,23 @@ accurately in real time at any rate desired.")
                        ;; Skip tests that need remote data.
                        "-m" "not remote_data")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-coverage" ,python-coverage)
-       ("python-cython" ,python-cython)
-       ("python-extension-helpers" ,python-extension-helpers)
-       ("python-ipython" ,python-ipython)
-       ("python-jplephem" ,python-jplephem)
-       ("python-objgraph" ,python-objgraph)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-astropy" ,python-pytest-astropy)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sgp4" ,python-sgp4)
-       ("python-skyfield" ,python-skyfield)))
+     (list pkg-config
+           python-coverage
+           python-cython
+           python-extension-helpers
+           python-ipython
+           python-jplephem
+           python-objgraph
+           python-pytest
+           python-pytest-astropy
+           python-pytest-xdist
+           python-setuptools-scm
+           python-sgp4
+           python-skyfield))
     (inputs
-     `(("cfitsio" ,cfitsio)
-       ("expat" ,expat)))
+     (list cfitsio expat))
     (propagated-inputs
-     `(("python-configobj" ,python-configobj)
-       ("python-numpy" ,python-numpy)
-       ("python-ply" ,python-ply)
-       ("python-pyerfa" ,python-pyerfa)))
+     (list python-configobj python-numpy python-ply python-pyerfa))
     (home-page "https://www.astropy.org/")
     (synopsis "Core package for Astronomy in Python")
     (description
@@ -736,9 +723,7 @@ astronomy and astrophysics.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Celestial mechanics, astrometry and astrodynamics library")
     (description "Libnova is a general purpose, double precision, Celestial
 Mechanics, Astrometry and Astrodynamics library.")
@@ -779,7 +764,7 @@ Mechanics, Astrometry and Astrodynamics library.")
                (copy-recursively "include" include))
              #t)))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (home-page "https://github.com/GreatAttractor/libskry")
     (synopsis "Astronimical lucky imaging library")
     (description
@@ -885,7 +870,7 @@ on FITS files:
          "xplanet-1.3.1-xpUtil-Add2017LeapSecond.cpp.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libx11" ,libx11)
        ("libxscrnsaver" ,libxscrnsaver)
@@ -933,12 +918,10 @@ Mercator, Mollweide, Peters, polyconic, orthographic and rectangular.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("goocanvas" ,goocanvas)
-       ("gtk+" ,gtk+)))
+     (list curl glib goocanvas gtk+))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-tests
            (lambda _
@@ -1019,13 +1002,9 @@ It can be used to calculate the trajectory of satellites.")
               (string-append "-DCMAKE_INSTALL_PREFIX=" (assoc-ref outputs "out"))
               ".."))))))
     (native-inputs
-     `(("boost" ,boost)
-       ("pkg-config" ,pkg-config)))
+     (list boost pkg-config))
     (inputs
-     `(("cfitsio" ,cfitsio)
-       ("freeimage" ,freeimage)
-       ("glew" ,glew)
-       ("wxwidgets" ,wxwidgets)))
+     (list cfitsio freeimage glew wxwidgets))
     (home-page "https://github.com/GreatAttractor/imppg")
     (synopsis "Astronomical Image Post-Proccessor (ImPPG)")
     (description
@@ -1075,17 +1054,17 @@ floating-point (no compression, LZW- or ZIP-compressed), FITS 8-bit, 16-bit,
              (let ((out (assoc-ref outputs "out")))
                (mkdir-p (string-append out "/lib/udev/rules.d"))))))))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (inputs
-     `(("cfitsio" ,cfitsio)
-       ("curl" ,curl)
-       ("fftw" ,fftw)
-       ("gsl" ,gsl)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libnova" ,libnova)
-       ("libtiff" ,libtiff)
-       ("libusb" ,libusb)
-       ("zlib" ,zlib)))
+     (list cfitsio
+           curl
+           fftw
+           gsl
+           libjpeg-turbo
+           libnova
+           libtiff
+           libusb
+           zlib))
     (home-page "https://www.indilib.org")
     (synopsis "Library for astronimical intrumentation control")
     (description
@@ -1143,12 +1122,9 @@ gzip -f \\*.vmf")
                (invoke "xmkmf"))))
          #:tests? #f))  ; No check target.
       (inputs
-       `(("libjpeg-turbo" ,libjpeg-turbo)
-         ("libpng" ,libpng)
-         ("libx11" ,libx11)
-         ("libxpm" ,libxpm)))
+       (list libjpeg-turbo libpng libx11 libxpm))
       (native-inputs
-       `(("imake" ,imake)))
+       (list imake))
       (home-page "https://github.com/nongiach/Sunclock")
       (synopsis
        "Map of the Earth that shows which portion is illuminated by the Sun")
@@ -1176,16 +1152,14 @@ Moon position, etc.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append "./build/lib:"
-                                      (getenv "PYTHONPATH")))
-               (setenv "PATH" (string-append out "/bin:"
-                                             (getenv "PATH")))
-               (invoke "python" "-m" "unittest" "discover" "-s" "test")))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let ((out (assoc-ref outputs "out")))
+                 (add-installed-pythonpath inputs outputs)
+                 (setenv "PATH" (string-append out "/bin:" (getenv "PATH")))
+                 (invoke "python" "-m" "unittest" "discover" "-s" "test"))))))))
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/brandon-rhodes/python-jplephem")
     (synopsis "Python version of NASA DE4xx ephemerides")
     (description
@@ -1224,7 +1198,7 @@ JPL ephemerides use to predict raw (x,y,z) planetary positions.")
     (inputs
      `(("liberfa" ,erfa)))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/liberfa/pyerfa")
     (synopsis "Python bindings for ERFA")
     (description
@@ -1247,10 +1221,9 @@ functions, so that they can be called with scalar or array inputs.")
         (base32 "0wxdqn92q1grv8k7xi7h88ac6wnznw4xh5bdlz1vz6za2dgsyj4m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("cython" ,python-cython)
-       ("pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/kbarbary/sep")
     (synopsis "Astronomical source extraction and photometry library")
     (description
@@ -1334,10 +1307,7 @@ astronomical images, especially when there is no WCS information available.")
      ;; framework https://github.com/brandon-rhodes/assay
      `(#:tests? #f))
     (inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-jplephem" ,python-jplephem)
-       ("python-numpy" ,python-numpy)
-       ("python-sgp4" ,python-sgp4)))
+     (list python-certifi python-jplephem python-numpy python-sgp4))
     (home-page "https://rhodesmill.org/skyfield/")
     (synopsis "Astronomy for Python")
     (description
diff --git a/gnu/packages/attr.scm b/gnu/packages/attr.scm
index 3237376d40..8c1a4aca7c 100644
--- a/gnu/packages/attr.scm
+++ b/gnu/packages/attr.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
@@ -23,6 +23,7 @@
   #:use-module (guix licenses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages hurd)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -30,18 +31,29 @@
 (define-public attr
   (package
     (name "attr")
-    (version "2.4.48")
+    (version "2.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/attr/attr-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1rr4adzwax4bzr2c00f06zcsljv5y6p9wymz1g89ww7cb2rp5bay"))))
+                "1y6sibbkrcjygv8naadnsg6xmsqwfh6cwrqk01l0v2i5kfacdqds"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ,@(if (hurd-target?)
+               `((add-before 'configure 'skip-linux-syscalls
+                   (lambda _
+                     ;; Starting from 2.5.1, libattr includes Linux-specific
+                     ;; calls to syscall(2).  Comment them out for GNU/Hurd
+                     ;; and instead use the glibc-provided wrappers.
+                     (substitute* "Makefile.in"
+                       (("libattr/syscalls\\.c") "")
+                       (("\tlibattr/la-syscalls\\.lo") "")
+                       (("-Wl,[[:graph:]]+/libattr\\.lds") "")))))
+               '())
          (replace 'check
            (lambda* (#:key target #:allow-other-keys)
              ;; Use the right shell.
@@ -57,8 +69,7 @@
              ;; extended attributes, and we wish to allow Guix to be built
              ;; on such systems.
              (unless target
-               (system* "make" "tests" "-C" "test"))
-             #t)))))
+               (system* "make" "tests" "-C" "test")))))))
     (inputs
      ;; Perl is needed to run tests; remove it from cross builds.
      (if (%current-target-system)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 7f780e13cf..2181b8e907 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -374,9 +374,7 @@ Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
                (for-each delete-file (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen perl pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("flac" ,flac)
@@ -413,12 +411,11 @@ library.  It is based on the player code of the Open ModPlug Tracker project.")
          "libofa-ftbfs-2.diff"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("expat" ,expat)))
+     (list curl expat))
     (propagated-inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (synopsis "Open Fingerprint Architecture")
     (description "LibOFA is an audio fingerprint library, created and provided
 by MusicIP.")
@@ -433,16 +430,13 @@ by MusicIP.")
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/faac/files/faac-src/"
-                       "faac-1.30/faac-1_30.tar.gz/download"))
+        (string-append "mirror://sourceforge/faac/faac-src"
+                       "/faac-" version "/faac-1_30.tar.gz"))
        (sha256
         (base32 "1lmj0dib3mjp84jhxc5ddvydkzzhb0gfrdh3ikcidjlcb378ghxd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Freeware Advanced Audio Coder")
     (description "FAAC is an MPEG-4 and MPEG-2 AAC encoder.")
     (home-page "https://www.audiocoding.com/faac.html")
@@ -469,9 +463,9 @@ by MusicIP.")
     (arguments
      `(#:tests? #f))       ; XXX: LibTiMidity could not be initialised
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ao" ,ao)))
+     (list ao))
     (synopsis "MIDI to WAVE converter library")
     (description "LibTiMidity is a MIDI to WAVE converter library that uses
 Gravis Ultrasound-compatible patch files to generate digital audio data from
@@ -536,18 +530,17 @@ implementation of Adaptive Multi Rate Narrowband and Wideband
                 "056dn6b9c5nsw2jdww7z1kxrjqqfvxjzxhsd5x9gi4wkwyiv21nz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to
-       ;; license incompatibility.
-       ("clalsadrv" ,clalsadrv)
-       ("fftw" ,fftw)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib
+           ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to
+           ;; license incompatibility.
+           clalsadrv
+           fftw
+           jack-1
+           ladspa
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://alsamodular.sourceforge.net/")
     (synopsis "Realtime modular synthesizer and effect processor")
     (description
@@ -582,13 +575,9 @@ Filter) modules follow the convention of 1V / Octave.")
         "--enable-avcodec")
        #:python ,python-2))
     (inputs
-     `(("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("fftwf" ,fftwf)
-       ("ffmpeg" ,ffmpeg))) ; for libavcodec
+     (list jack-1 libsndfile libsamplerate fftwf ffmpeg)) ; for libavcodec
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://aubio.org/")
     (synopsis "Library for audio labelling")
     (description
@@ -672,48 +661,48 @@ namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \
              #t)))
        #:test-target "test"))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("atkmm" ,atkmm)
-       ("aubio" ,aubio)
-       ("boost" ,boost)
-       ("cairomm" ,cairomm)
-       ("curl" ,curl)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("flac" ,flac)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm-2)
-       ("jack" ,jack-1)
-       ("libarchive" ,libarchive)
-       ("libart-lgpl" ,libart-lgpl)
-       ("libgnomecanvasmm" ,libgnomecanvasmm)
-       ("liblo" ,liblo)
-       ("libogg" ,libogg)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("libusb" ,libusb)
-       ("libvorbis" ,libvorbis)
-       ("libwebsockets" ,libwebsockets)
-       ("libxml2" ,libxml2)
-       ("lilv" ,lilv)
-       ("lrdf" ,lrdf)
-       ("lv2" ,lv2)
-       ("openssl" ,openssl)  ; Required by libwebsockets.
-       ("pangomm" ,pangomm)
-       ("python-rdflib" ,python-rdflib)
-       ("pulseaudio" ,pulseaudio)
-       ("readline" ,readline)
-       ("redland" ,redland)
-       ("rubberband" ,rubberband)
-       ("serd" ,serd)
-       ("sord" ,sord)
-       ("soundtouch" ,soundtouch)
-       ("sratom" ,sratom)
-       ("suil" ,suil)
-       ("taglib" ,taglib)
-       ("vamp" ,vamp)))
+     (list alsa-lib
+           atkmm
+           aubio
+           boost
+           cairomm
+           curl
+           dbus
+           eudev
+           fftw
+           fftwf
+           flac
+           glibmm
+           gtkmm-2
+           jack-1
+           libarchive
+           libart-lgpl
+           libgnomecanvasmm
+           liblo
+           libogg
+           libsamplerate
+           libsndfile
+           libusb
+           libvorbis
+           libwebsockets
+           libxml2
+           lilv
+           lrdf
+           lv2
+           openssl ; Required by libwebsockets.
+           pangomm
+           python-rdflib
+           pulseaudio
+           readline
+           redland
+           rubberband
+           serd
+           sord
+           soundtouch
+           sratom
+           suil
+           taglib
+           vamp))
     (native-inputs
      `(("cppunit" ,cppunit)
        ("gettext" ,gettext-minimal)
@@ -769,27 +758,27 @@ engineers, musicians, soundtrack editors and composers.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("gtk+" ,gtk+)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("expat" ,expat)
-       ("ffmpeg" ,ffmpeg)
-       ("lame" ,lame)
-       ("flac" ,flac)
-       ("libid3tag" ,libid3tag)
-       ("libmad" ,libmad)
-       ;;("libsbsms" ,libsbsms)         ;bundled version is modified
-       ("libsndfile" ,libsndfile)
-       ("soundtouch" ,soundtouch)
-       ("soxr" ,soxr)                   ;replaces libsamplerate
-       ("twolame" ,twolame)
-       ("vamp" ,vamp)
-       ("libvorbis" ,libvorbis)
-       ("lv2" ,lv2)
-       ("lilv" ,lilv)                   ;for lv2
-       ("suil" ,suil)                   ;for lv2
-       ("portmidi" ,portmidi)))
+     (list wxwidgets
+           gtk+
+           alsa-lib
+           jack-1
+           expat
+           ffmpeg
+           lame
+           flac
+           libid3tag
+           libmad
+           ;;("libsbsms" ,libsbsms)         ;bundled version is modified
+           libsndfile
+           soundtouch
+           soxr ;replaces libsamplerate
+           twolame
+           vamp
+           libvorbis
+           lv2
+           lilv ;for lv2
+           suil ;for lv2
+           portmidi))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -890,7 +879,7 @@ tools.")
                                       "CVE-2017-6831" "CVE-2017-6833"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (home-page "https://audiofile.68k.org/")
     (synopsis "Library to handle various audio file formats")
     (description "This is an open-source version of SGI's audiofile library.
@@ -931,7 +920,7 @@ G.711 mu-law and A-law.")
                 (string-append (assoc-ref outputs "out") "/lib/ladspa")))
              #t)))))
     (inputs
-     `(("ladspa" ,ladspa)))
+     (list ladspa))
     (home-page "http://tombaran.info/autotalent.html")
     (synopsis "Pitch-correction LADSPA audio plugin")
     (description
@@ -970,12 +959,9 @@ formant warp.")
                (utime "azr3.1" early-1980 early-1980))
              #t)))))
     (inputs
-     `(("gtkmm" ,gtkmm-2)
-       ("lvtk" ,lvtk)
-       ("jack" ,jack-1)
-       ("lash" ,lash)))
+     (list gtkmm-2 lvtk jack-1 lash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://ll-plugins.nongnu.org/azr3/")
     (synopsis "Tonewheel organ synthesizer")
     (description
@@ -999,18 +985,18 @@ plugins are provided.")
                 "17x4hylgq4dn9qycsdacfxy64f5cv57n2qgkvsdp524gnqzw4az3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fluidsynth" ,fluidsynth)
-       ("expat" ,expat)
-       ("glib" ,glib)
-       ("gtk" ,gtk+-2)
-       ("cairo" ,cairo)
-       ("lash" ,lash)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("ladspa" ,ladspa)
-       ("fftw" ,fftw)))
+     (list fluidsynth
+           expat
+           glib
+           gtk+-2
+           cairo
+           lash
+           jack-1
+           lv2
+           ladspa
+           fftw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -1055,7 +1041,7 @@ tools (analyzer, mono/stereo tools, crossovers).")
                (("/usr/local")(assoc-ref outputs "out")))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     ;; home-page of the original LADSPA version: http://quitte.de/dsp/caps.html
     (home-page "https://github.com/moddevices/caps-lv2")
     (synopsis "LV2 port of the CAPS audio plugin collection")
@@ -1095,13 +1081,9 @@ generators of mostly elementary and occasionally exotic nature.")
                (("_LV2UI_Descriptor") "LV2UI_Descriptor"))
              #t)))))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftwf" ,fftwf)
-       ("lv2" ,lv2)
-       ("ntk" ,ntk)
-       ("zita-resampler" ,zita-resampler)))
+     (list cairo fftwf lv2 ntk zita-resampler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://ssj71.github.io/infamousPlugins")
     (synopsis "LV2 plugins for live use")
     (description
@@ -1127,16 +1109,16 @@ envelope follower, distortion effects, tape effects and more.")
     (arguments
      '(#:tests? #f))                    ; no included tests
     (inputs
-     `(("boost" ,boost)
-       ("libvorbis" ,libvorbis)
-       ("soxr" ,soxr)
-       ("alsa-lib" ,alsa-lib)
-       ("avahi" ,avahi)
-       ("pulseaudio" ,pulseaudio)
-       ("flac" ,flac)
-       ("opus" ,opus)))
+     (list boost
+           libvorbis
+           soxr
+           alsa-lib
+           avahi
+           pulseaudio
+           flac
+           opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/badaix/snapcast")
     (synopsis "Synchronous multiroom audio player")
     (description
@@ -1158,16 +1140,15 @@ synchronized with the server to play synced audio.")
                (base32
                 "1c98z2xxz9pgcb4dg99gz8qrylh5cnag0j18a52d88ifsy24isvq"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal) ;for autopoint
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal ;for autopoint
+           libtool
+           perl
+           pkg-config
+           which))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list fftwf perl-xml-parser))
     (build-system gnu-build-system)
     (home-page "http://plugin.org.uk")
     (synopsis "The SWH Plugins package for the LADSPA plugin system")
@@ -1205,11 +1186,9 @@ synchronized with the server to play synced audio.")
                (("install:") "install: install-system"))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)
-       ("fftwf" ,fftwf)))
+     (list lv2 fftwf))
     (native-inputs
-     `(("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt pkg-config))
     (home-page "http://plugin.org.uk")
     (synopsis "SWH plugins in LV2 format")
     (description
@@ -1241,11 +1220,9 @@ emulation (valve, tape), bit fiddling (decimator, pointer-cast), etc.")
            (lambda _
              (for-each make-file-writable (find-files ".")))))))
     (native-inputs
-     `(("boost" ,boost)
-       ("pkg-config" ,pkg-config)))
+     (list boost pkg-config))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list sqlite zlib))
     (home-page "https://github.com/xsco/libdjinterop")
     (synopsis "C++ library for access to DJ record libraries")
     (description
@@ -1338,18 +1315,15 @@ object library.")
         (base32 "1sr9knfhbm2m0wpkjq2l5n471vnl51wy4p6j4m95zqybimzb4s2j"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("gettext" ,gettext-minimal)
-       ("zlib" ,zlib)))
+     (list bison flex gettext-minimal zlib))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           boost
+           jack-1
+           ladspa
+           liblo
+           libsndfile
+           pulseaudio))
     (home-page "https://csound.com/")
     (synopsis "Sound and music computing system")
     (description
@@ -1423,8 +1397,7 @@ language and software synthesizer.")
          ;; no configure script
          (delete 'configure))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)))
+     (list alsa-lib fftw))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "C++ wrapper around the ALSA API")
     (description
@@ -1771,15 +1744,15 @@ follower.")
                 "LIB_SUFFIX \"\""))
              #t)))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lash" ,lash)
-       ("readline" ,readline)
-       ("glib" ,glib)))
+     (list libsndfile
+           alsa-lib
+           jack-1
+           ladspa
+           lash
+           readline
+           glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.fluidsynth.org/")
     (synopsis "SoundFont synthesizer")
     (description
@@ -1859,7 +1832,7 @@ also play midifiles using a Soundfont.")
                        (find-files "architecture/max-msp" ".*"))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://faust.grame.fr/")
     (synopsis "Signal processing language")
     (description
@@ -1891,11 +1864,7 @@ also play midifiles using a Soundfont.")
        ("ctags" ,emacs-minimal)  ; for ctags
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))))
+     (list libsndfile libmicrohttpd ncurses openssl zlib))))
 
 (define-public freepats
   (package
@@ -1927,8 +1896,7 @@ also play midifiles using a Soundfont.")
                      (copy-recursively "." out)
                      #t))))
     (native-inputs
-     `(("tar" ,tar)
-       ("bzip2" ,bzip2)))
+     (list tar bzip2))
     (home-page "http://freepats.zenvoid.org")
     (synopsis "GUS compatible patches for MIDI players")
     (description
@@ -1957,21 +1925,21 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
         ;; Add the output lib directory to the RUNPATH.
         (string-append "--ldflags=-Wl,-rpath=" %output "/lib"))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("boost" ,boost)
-       ("curl" ,curl)
-       ("avahi" ,avahi)
-       ("eigen" ,eigen)
-       ("lv2" ,lv2)
-       ("lilv" ,lilv)
-       ("ladspa" ,ladspa)
-       ("jack" ,jack-1)
-       ("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("fftwf" ,fftwf)
-       ("lrdf" ,lrdf)
-       ("zita-resampler" ,zita-resampler)
-       ("zita-convolver" ,zita-convolver)))
+     (list libsndfile
+           boost
+           curl
+           avahi
+           eigen
+           lv2
+           lilv
+           ladspa
+           jack-1
+           gtkmm-3
+           gtk+
+           fftwf
+           lrdf
+           zita-resampler
+           zita-convolver))
     (native-inputs
      `(("gperf" ,gperf)
        ("faust" ,faust)
@@ -2023,21 +1991,21 @@ auto-wah.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-utils" ,alsa-utils)
-       ("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)
-       ("libxrender" ,libxrender)
-       ("libxpm" ,libxpm)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("zlib" ,zlib)))
+     (list alsa-utils
+           fltk
+           libx11
+           libxext
+           libxfixes
+           libxft
+           libxrender
+           libxpm
+           fontconfig
+           freetype
+           jack-1
+           alsa-lib
+           libsndfile
+           libsamplerate
+           zlib))
     (home-page "http://rakarrack.sourceforge.net/")
     (synopsis "Audio effects processor")
     (description
@@ -2082,14 +2050,14 @@ well suited to all musical instruments and vocals.")
                (("_LV2UI_Descriptor") "LV2UI_Descriptor"))
              #t)))))
     (inputs
-     `(("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("lv2" ,lv2)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("zita-convolver" ,zita-convolver)))
+     (list libsndfile
+           libsamplerate
+           lv2
+           glib
+           gtk+-2
+           zita-convolver))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -2126,15 +2094,14 @@ especially for creating reverb effects.  It supports impulse responses with 1,
                         (("libnn=lib64") "libnn=lib"))
                       #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("readline" ,readline)))
+     (list alsa-lib readline))
     ;; uuid.h is included in the JACK type headers
     ;; db.h is included in the libjack metadata headers
     (propagated-inputs
      `(("libuuid" ,util-linux "lib")
        ("bdb" ,bdb)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://jackaudio.org/")
     (synopsis "JACK audio connection kit")
     (description
@@ -2188,20 +2155,20 @@ synchronous execution of all clients, and low latency operation.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'jack_control' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/jack_control")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("expat" ,expat)
-       ("libsamplerate" ,libsamplerate)
-       ("opus" ,opus)
-       ("python-dbus" ,python-dbus)
-       ("readline" ,readline)))
+     (list alsa-lib
+           dbus
+           expat
+           libsamplerate
+           opus
+           python-dbus
+           readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; Most files are under GPLv2+, but some headers are under LGPLv2.1+
     (license (list license:gpl2+ license:lgpl2.1+))))
 
@@ -2230,7 +2197,7 @@ synchronous execution of all clients, and low latency operation.")
        ("qtbase" ,qtbase-5)
        ("jack" ,jack-1)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/jalv/")
     (synopsis "Simple LV2 host for JACK")
     (description
@@ -2326,11 +2293,9 @@ to be plugged into a wide range of audio synthesis and recording packages.")
     ;; According to pkg-config, packages depending on lash also need to have
     ;; at least the following packages declared as inputs.
     (propagated-inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("libxml2" ,libxml2)))
+     (list alsa-lib dbus libxml2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.nongnu.org/lash/")
     (synopsis "Audio application session manager")
     (description
@@ -2352,8 +2317,8 @@ connections between them.")
                (base32
                 "1mcc4gjkmphczjybnsrip3gq1f974knzys7x49bv197xk3fn8wdr"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libsndfile" ,libsndfile)))
+    (native-inputs (list pkg-config))
+    (inputs (list libsndfile))
     (home-page "https://sourceforge.net/projects/bs2b/")
     (synopsis "Bauer stereophonic-to-binaural DSP")
     (description
@@ -2376,9 +2341,8 @@ essential distortions.")
                (base32
                 "1b4aipbj1ba5k99gbc7gmgy14sywyrjd8rpyqj5l905j0mjv8jg2"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("ladspa" ,ladspa)
-              ("libbs2b" ,libbs2b)))
+    (native-inputs (list pkg-config))
+    (inputs (list ladspa libbs2b))
     (home-page "https://sourceforge.net/projects/bs2b/")
     (synopsis "Bauer stereophonic-to-binaural DSP - LADSPA plugin")
     (description "The Bauer stereophonic-to-binaural DSP (bs2b) library and
@@ -2438,11 +2402,9 @@ implementation of the Open Sound Control (@dfn{OSC}) protocol.")
                (rename-file (string-append inc "/RtAudio.h")
                             (string-append inc "/rtaudio/RtAudio.h"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib jack-1 pulseaudio))
     (synopsis "Common API for real-time audio I/O")
     (description
      "RtAudio is a set of C++ classes that provides a common API for real-time
@@ -2478,7 +2440,7 @@ compensation, (de)interleaving, and byte-swapping
          "0x7vdsigm7xgvyg3shd3lj113m8zqj2pxmrgdyj66kmnw0qdxgwk"))))
     (build-system python-build-system)
     (inputs
-     `(("portaudio" ,portaudio)))
+     (list portaudio))
     (home-page "https://people.csail.mit.edu/hubert/pyaudio/")
     (synopsis "Bindings for PortAudio v19")
     (description "This package provides bindings for PortAudio v19, the
@@ -2502,9 +2464,9 @@ cross-platform audio input/output stream library.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ;no tests
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("liblo" ,liblo)))
+     (list liblo))
     (home-page "http://das.nasophon.de/pyliblo/")
     (synopsis "Python bindings for liblo")
     (description
@@ -2530,11 +2492,9 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
          "0yqhrfz7xkvqrwdxdx2ydy4h467sk7z3gf984y1x2cq7cm1gy329"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-numpy" ,python-numpy)
-       ("libsndfile" ,libsndfile)))
+     (list python-cffi python-numpy libsndfile))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:tests? #f ; missing OGG support
        #:phases
@@ -2585,15 +2545,15 @@ files.")
             "12wf17abn3psbsg2r2lk0xdnk8n5cd5rrvjlpxjnjfhd09n7qqgm"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-cffi" ,python-cffi)
-        ("python-cython" ,python-cython)
-        ("python-numpy" ,python-numpy)
-        ("python-progressbar2" ,python-progressbar2)
-        ("python-pycparser" ,python-pycparser)
-        ("python-python3-midi" ,python-python3-midi)
-        ("python-soundfile" ,python-soundfile)))
+      (list python-cffi
+            python-cython
+            python-numpy
+            python-progressbar2
+            python-pycparser
+            python-python3-midi
+            python-soundfile))
     (native-inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2639,13 +2599,9 @@ frequencies.  This data is then formatted to MIDI and written to disk.")
                                                   "/lib/liblilv-0.so")))))))))
     ;; Required by lilv-0.pc.
     (propagated-inputs
-     `(("lv2" ,lv2)
-       ("serd" ,serd)
-       ("sord" ,sord)
-       ("sratom" ,sratom)))
+     (list lv2 serd sord sratom))
     (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
+     (list python pkg-config))
     (home-page "https://drobilla.net/software/lilv")
     (synopsis "Library to simplify use of LV2 plugins in applications")
     (description
@@ -2671,9 +2627,9 @@ significantly faster and have minimal dependencies.")
        #:configure-flags '("--no-plugins")))
     (inputs
      ;; Leaving off cairo and gtk+-2.0 which are needed for example plugins
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://lv2plug.in/")
     (synopsis "LV2 audio plugin specification")
     (description
@@ -2704,10 +2660,9 @@ software.")
        #:tests? #f ; no check target
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("lv2" ,lv2)
-       ("lvtk" ,lvtk)))
+     (list lv2 lvtk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -2752,11 +2707,9 @@ software.")
                             (assoc-ref %build-inputs "boost")
                             "/include"))))
     (inputs
-     `(("boost" ,boost)
-       ("gtkmm" ,gtkmm-2)
-       ("lv2" ,lv2)))
+     (list boost gtkmm-2 lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/lvtk/lvtk")
     (synopsis "C++ libraries for LV2 plugins")
     (description
@@ -2799,8 +2752,7 @@ lv2-c++-tools.")
                               "\")")))
             #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (synopsis "3D audio API")
     (description
      "OpenAL provides capabilities for playing audio in a virtual 3D
@@ -2832,7 +2784,7 @@ buffers, and audio capture.")
     (arguments
      `(#:tests? #f))  ; no check target
     (inputs
-     `(("openal" ,openal)))
+     (list openal))
     (synopsis "Free implementation of OpenAL's ALUT standard")
     (description "freealut is the OpenAL Utility Toolkit.")
     (home-page "https://kcat.strangesoft.net/openal.html")
@@ -2854,15 +2806,15 @@ buffers, and audio capture.")
     (arguments
      `(#:tests? #f))                    ; no check target
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("jack" ,jack-1)
-       ("ganv" ,ganv)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm-2)
-       ("dbus-glib" ,dbus-glib)))
+     (list alsa-lib
+           boost
+           jack-1
+           ganv
+           glibmm
+           gtkmm-2
+           dbus-glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/patchage.html")
     (synopsis "Modular patch bay for audio and MIDI systems")
     (description
@@ -2886,14 +2838,9 @@ and ALSA.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf automake libtool pkg-config which))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (synopsis "Portable C audio library")
     (description
      "The Portable C Audio Library (pcaudiolib) provides a C@tie{}API to
@@ -2918,14 +2865,9 @@ different audio devices such as ALSA or PulseAudio.")
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
-     `(("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)
-       ("portaudio" ,portaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list jack-1 alsa-lib portaudio qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://qjackctl.sourceforge.io/")
     (synopsis "Jack server control application")
     (description "Control a Jack server.  Allows you to plug various sources
@@ -2955,11 +2897,9 @@ into various outputs and to start, stop and configure jackd")
                      (string-append "PREFIX="
                                     (assoc-ref outputs "out"))))))))
     (native-inputs
-     `(("qtbase" ,qtbase-5))) ; for qmake
+     (list qtbase-5)) ; for qmake
     (inputs
-     `(("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1 libsndfile qtbase-5))
     (home-page "https://sourceforge.net/projects/qjackrcd/")
     (synopsis "Stereo audio recorder for JACK")
     (description "QJackRcd is a simple graphical stereo recorder for JACK
@@ -3051,10 +2991,7 @@ link REQUIRED)"))
                (delete-file scide)
                #t))))))
     (native-inputs
-     `(("ableton-link" ,ableton-link)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list ableton-link pkg-config qttools xorg-server-for-tests))
     (inputs
      `(("jack" ,jack-1)
        ("libsndfile" ,libsndfile)
@@ -3074,7 +3011,7 @@ link REQUIRED)"))
        ("qtwebchannel" ,qtwebchannel)
        ("qtwebsockets" ,qtwebsockets)))
     (propagated-inputs                  ;to get native-search-path
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (home-page "https://github.com/supercollider/supercollider")
     (synopsis "Synthesis engine and programming language")
     (description "SuperCollider is a synthesis engine (@code{scsynth} or
@@ -3100,12 +3037,9 @@ using Guix System.")
         (base32 "1r9z8ggxylr2ab0isaljbm574rplnlcb12758j994h54nh2vikwb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libogg" ,libogg)
-       ("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("speex" ,speex)))
+     (list libogg libtheora libvorbis speex))
     (home-page "http://idjc.sourceforge.net/")
     (synopsis "Broadcast streaming library with IDJC extensions")
     (description "This package provides libshout plus IDJC extensions.")
@@ -3128,10 +3062,9 @@ using Guix System.")
      `(#:python ,python-2
        #:tests? #f)) ; no check target
     (inputs
-     `(("glib" ,glib)
-       ("boost" ,boost)))
+     (list glib boost))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/raul/")
     (synopsis "Real-time audio utility library")
     (description
@@ -3169,10 +3102,7 @@ aimed at audio/musical applications.")
                        "074zj8ydp05yy1hjcglfv3hkvj4cm50f9nralka1992pm6yf8yvy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (synopsis "Sampling rate conversion and filter design utilities")
     (description "This package contains the @command{resample} and
 @command{windowfilter} command line utilities.  The @command{resample} command
@@ -3209,11 +3139,9 @@ filters using the so-called @emph{window method}.")
                ((".*cp -f \\$\\(JNI_TARGET\\).*") ""))
              #t)))))
     (inputs
-     `(("ladspa" ,ladspa)
-       ("libsamplerate" ,libsamplerate)
-       ("vamp" ,vamp)))
+     (list ladspa libsamplerate vamp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://breakfastquay.com/rubberband/")
     (synopsis "Audio time-stretching and pitch-shifting library")
     (description
@@ -3235,13 +3163,9 @@ tempo and pitch of an audio recording independently of one another.")
                 "1k962ljpnwyjw9jjiky2372khhri1wqvrj5qsalfpys31xqzw31p"))))
     (build-system gnu-build-system)
     (inputs
-     `(("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)))
+     (list jack-1 alsa-lib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://www.music.mcgill.ca/~gary/rtmidi")
     (synopsis "Cross-platform MIDI library for C++")
     (description
@@ -3265,11 +3189,9 @@ input/output.")
     (arguments `(#:tests? #f))          ;no check target
     (propagated-inputs
      ;; In Requires of sratom-0.pc.
-     `(("lv2" ,lv2)
-       ("serd" ,serd)
-       ("sord" ,sord)))
+     (list lv2 serd sord))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/sratom/")
     (synopsis "Library for serialising LV2 atoms to/from RDF")
     (description
@@ -3297,7 +3219,7 @@ the Turtle syntax.")
        ("gtk+" ,gtk+)
        ("qt" ,qtbase-5)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://drobilla.net/software/suil/")
     (synopsis "Library for loading and wrapping LV2 plugin UIs")
     (description
@@ -3373,17 +3295,17 @@ for loudness normalisation.")
                                                "/share/freepats/freepats.cfg")))))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("flac" ,flac)
-       ("jack" ,jack-1)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("speex" ,speex)
-       ("ncurses" ,ncurses)
-       ("freepats" ,freepats)))
+     (list alsa-lib
+           ao
+           flac
+           jack-1
+           libogg
+           libvorbis
+           speex
+           ncurses
+           freepats))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://timidity.sourceforge.net/")
     (synopsis "Software synthesizer for playing MIDI files")
     (description
@@ -3421,9 +3343,9 @@ disks as various audio file formats.")
                                (string-append out "/lib/libvamp-hostsdk.la"))))
              #t)))))
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://vamp-plugins.org")
     (synopsis "Modular and extensible audio processing system")
     (description
@@ -3446,7 +3368,7 @@ analysis plugins or audio feature extraction plugins.")
        (sha256
         (base32 "1vmf84iy4dkwxv887grnlsfk43fmhd9gbg26gc2kgcv40sbkvayf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("automake" ,automake)))
+    (native-inputs (list automake))
     (arguments
      `(#:configure-flags
        ;; Disable the use of SSE unless on x86_64.
@@ -3462,8 +3384,10 @@ analysis plugins or audio feature extraction plugins.")
             ;; Originally a symlink to '/usr/local/share/automake-1.12/ar-lib'.
             (delete-file "ar-lib")
             (symlink
-             (string-append (assoc-ref inputs "automake") "/share/automake-"
-                            ,(package-version automake) "/ar-lib")
+             (search-input-file inputs
+                                (string-append "/share/automake-"
+                                               ,(package-version automake)
+                                               "/ar-lib"))
              "ar-lib")
             #t)))))
     (home-page "http://sbsms.sourceforge.net/")
@@ -3490,9 +3414,9 @@ stretching and pitch scaling of audio.  This package contains the library.")
         (base32 "1623kirmxhmvmhx7f8lbzk0f18w2hrhwlkzl8l4aa906lfqffdp2"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch" ,catch-framework2)))
+     (list catch-framework2))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (home-page "https://mixxxdj.github.io/libkeyfinder/")
     (synopsis "Musical key detection for digital audio")
     (description
@@ -3586,10 +3510,9 @@ Scream Tracker 3 (S3M), Fast Tracker II (XM), and Impulse Tracker (IT).")
                 "17i8fc7x7yn3z1x963xp9iv108gxfakxmdgmpv3mlm438w3n3g8x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxmp" ,libxmp)
-       ("pulseaudio" ,pulseaudio)))
+     (list libxmp pulseaudio))
     (home-page "http://xmp.sourceforge.net/")
     (synopsis "Extended module player")
     (description
@@ -3613,10 +3536,7 @@ Tracker 3 S3M and Impulse Tracker IT files.")
         (base32 "12i6yg8vvqwyk412lxl2krbfby6hnxld8qxy0k4m5xp4g94jiq4p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("file" ,file)))
+     (list autoconf automake libtool file))
     (home-page "https://www.surina.net/soundtouch/")
     (synopsis
      "Audio processing library for changing tempo, pitch and playback rate")
@@ -3645,18 +3565,18 @@ control functionality, or just for playing around with the sound effects.")
        ;; bug reports.
        '("--with-distro=Guix System Distribution")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("flac" ,flac)
-       ("lame" ,lame)
-       ("libid3tag" ,libid3tag)
-       ("libltdl" ,libltdl)
-       ("libmad" ,libmad)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           ao
+           flac
+           lame
+           libid3tag
+           libltdl
+           libmad
+           libpng
+           libvorbis
+           pulseaudio))
     (home-page "http://sox.sourceforge.net")
     (synopsis "Sound processing utility")
     (description
@@ -3702,10 +3622,9 @@ conversion.  It may be used, for example, to resample PCM-encoded audio.")
         (base32 "0zf8sxqb02w07ah55b1y7ab643zmpbhn62spa9pqra0rc17l4dfc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)))               ;used in tests/test.pl
+     (list perl which))               ;used in tests/test.pl
     (home-page "https://www.twolame.org/")
     (synopsis "MPEG Audio Layer 2 (MP2) encoder")
     (description
@@ -3731,15 +3650,11 @@ portions of LAME.")
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add ASIHPI.
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)))
+     (list alsa-lib jack-1))
     ;; Autoreconf is necessary because the audacity-compat patch modifies .in
     ;; files.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (arguments
      '(#:tests? #f                      ;no 'check' target
        #:parallel-build? #f             ;fails on some systems
@@ -3792,12 +3707,9 @@ interface.")
     (arguments
      `(#:tests? #f))                    ; no "check" phase
     (native-inputs
-     `(("qttools" ,qttools)
-       ("pkg-config" ,pkg-config)))
+     (list qttools pkg-config))
     (inputs
-     `(("fluidsynth" ,fluidsynth)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list fluidsynth qtbase-5 qtx11extras))
     (home-page "https://qsynth.sourceforge.io")
     (synopsis "Graphical user interface for FluidSynth")
     (description
@@ -3820,13 +3732,13 @@ synthesizer written in C++.")
         (base32 "0gspmr3klwnq98h17p5hc6ifygya4p80g4g8r7a1qavm3mv19waf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ao" ,ao)
-       ("libsamplerate" ,libsamplerate)
-       ("openal" ,openal)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           jack-1
+           ao
+           libsamplerate
+           openal
+           portaudio
+           pulseaudio))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3864,12 +3776,9 @@ with a much different focus than most other audio daemons.")
        (list (string-append "docdir=" (assoc-ref %outputs "out")
                             "/share/doc/xjackfreak"))))
     (inputs
-     `(("jack" ,jack-1)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("libxext" ,libxext)))
+     (list jack-1 libx11 libxt libxext))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/johnhldavis/xjackfreak")
     (synopsis "JACK audio frequency analyzer and display")
     (description
@@ -3921,7 +3830,7 @@ result.")
              #t))
          ;; no configure script
          (delete 'configure))))
-    (inputs `(("fftwf" ,fftwf)))
+    (inputs (list fftwf))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "Fast, partitioned convolution engine library")
     (description
@@ -4019,8 +3928,7 @@ provide high-quality sample rate conversion.")
           ;; no configure script
           (delete 'configure))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)))
+     (list alsa-lib fftw))
     (home-page "https://kokkinizita.linuxaudio.org")
     (synopsis "C++ wrapper around the ALSA API")
     (description
@@ -4046,10 +3954,7 @@ point audio data.")
     (build-system gnu-build-system)
     ;; The source checkout is not bootstrapped.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list autoconf automake flex bison))
     (synopsis "Cue and toc file parsers and utilities")
     (description "Cuetools is a set of programs that are useful for manipulating
 and using CUE sheet (cue) files and Table of Contents (toc) files.  CUE and TOC
@@ -4175,8 +4080,7 @@ with support for HD extensions.")
               ,home-page))
            #t))))
     (build-system gnu-build-system)
-    (inputs `(("ffmpeg" ,ffmpeg)
-              ("sox" ,sox)))
+    (inputs (list ffmpeg sox))
     (synopsis "Tool to adjust loudness of media files")
     (description
      "BS1770GAIN is a loudness scanner compliant with ITU-R BS.1770 and its
@@ -4283,7 +4187,7 @@ code, used in @code{libtoxcore}.")
     (arguments
      `(#:tests? #f))                   ; tests require access to ALSA devices.
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (home-page "https://larsimmisch.github.io/pyalsaaudio/")
     (synopsis "ALSA wrappers for Python")
     (description
@@ -4342,20 +4246,17 @@ kbps at 24 bit/96 kHz.")
                             (assoc-ref %outputs "out")
                             "/etc/dbus-1/system.d"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bluez" ,bluez)
-       ("dbus" ,dbus)
-       ("glib" ,glib)
-       ("ldacbt" ,ldacbt)
-       ("libbsd" ,libbsd)
-       ("ncurses" ,ncurses)
-       ("ortp" ,ortp)
-       ("sbc" ,sbc)))
+     (list alsa-lib
+           bluez
+           dbus
+           glib
+           ldacbt
+           libbsd
+           ncurses
+           ortp
+           sbc))
     (home-page "https://github.com/Arkq/bluez-alsa")
     (synopsis "Bluetooth ALSA backend")
     (description "This project is a rebirth of a direct integration between
@@ -4404,23 +4305,23 @@ on the ALSA software PCM plugin.")
                (copy-recursively "pix" (string-append doc "/pix"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("flac" ,flac)
-       ("gmp" ,gmp)
-       ("gsl" ,gsl)
-       ("gtk+" ,gtk+)
-       ("jack" ,jack-1)
-       ("libsamplerate" ,libsamplerate)
-       ("mpc" ,mpc)
-       ("mpfr" ,mpfr)
-       ("mpg123" ,mpg123)
-       ("speex" ,speex)
-       ("timidity++" ,timidity++)
-       ("vorbis-tools" ,vorbis-tools)
-       ("wavpack" ,wavpack)))
+     (list alsa-lib
+           fftw
+           flac
+           gmp
+           gsl
+           gtk+
+           jack-1
+           libsamplerate
+           mpc
+           mpfr
+           mpg123
+           speex
+           timidity++
+           vorbis-tools
+           wavpack))
     (synopsis "Sound editor")
     (home-page "https://ccrma.stanford.edu/software/snd/")
     (description
@@ -4448,10 +4349,9 @@ the Snd sources), Ruby, or Forth.")
        (list (string-append "--prefix=" (assoc-ref %outputs "out")
                             "/lib/lv2"))))
     (inputs
-     `(("lv2" ,lv2)
-       ("fftwf" ,fftwf)))
+     (list lv2 fftwf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/lucianodato/noise-repellent")
     (synopsis "LV2 plugin for broadband noise reduction")
     (description "Noise Repellent is an LV2 plugin to reduce noise.  It has
@@ -4490,8 +4390,7 @@ the following features:
           (base32 "189l6lz8sz5vr6bjyzgcsrvksl1w6crqsg0q65r94b5yjsmjnpr4"))))
       (build-system meson-build-system)
       (arguments
-       `(#:meson ,meson-0.55
-         ;; Using a "release" build is recommended for performance
+       `(;; Using a "release" build is recommended for performance
          #:build-type "release"
          #:phases
          (modify-phases %standard-phases
@@ -4517,12 +4416,9 @@ the following features:
                    (invoke "make")
                    (setenv "CFLAGS" old-CFLAGS))))))))
       (inputs
-       `(("lv2" ,lv2)))
+       (list lv2))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (home-page "https://github.com/werman/noise-suppression-for-voice")
       (synopsis "Speech denoise LV2 plugin based on Xiph's RNNoise library")
       (description "RNNoise is a library that uses deep learning to apply
@@ -4546,12 +4442,10 @@ an LV2 audio plugin.")
     (build-system cmake-build-system)
     (native-inputs
      ;; TODO: Try using the latest googletest for versions > 1.8.
-     `( ;; ("googletest" ,googletest-1.8)
-       ("which" ,which)))
+     (list ;; ("googletest" ,googletest-1.8)
+           which))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)))
+     (list fftw ncurses pulseaudio))
     (arguments
      '(#:tests? #f
        ;; XXX Enable tests after patching them to use the system googletest.
@@ -4591,13 +4485,9 @@ representations.")
                 "1mziklmqifhnb4kg9ia2r56r8wjn6xp40bkpf484hsgqvnrccl86"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)))
+     (list fftw ncurses pulseaudio))
     (arguments
      `(#:configure-flags
        (list (string-append "PREFIX=" %output)
@@ -4678,9 +4568,7 @@ using ALSA, MPD, PulseAudio, or a FIFO buffer as its input.")
           "1fkrnzs78fmj11n9z3l0w53i2fl16jcfiyavwidck9bzmkmsf486"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/mstorsjo/fdk-aac")
     (synopsis "Fraunhofer FDK AAC library")
     (description "FDK is a library for encoding and decoding Advanced Audio
@@ -4708,13 +4596,13 @@ library supports sample rates up to 96 kHz and up to eight channels (7.1
                 "03dygh85riljk7dpn5a5a0d22a2kz45fs13gzwqgnbzzr1k17p2y"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ;; The following are for JUCE GUI components:
-       ("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxcursor" ,libxcursor)))
+     (list alsa-lib
+           ;; The following are for JUCE GUI components:
+           libx11
+           freetype
+           libxrandr
+           libxinerama
+           libxcursor))
     (arguments
      `(#:tests? #f                      ;there are no tests
        #:configure-flags
@@ -4745,10 +4633,8 @@ library.")
      '(#:tests? #f                      ; No tests.
        #:configure-flags '("-DGSTREAMER=ON")))
     (build-system cmake-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("gstreamer" ,gstreamer)
-              ("gst-plugins-base" ,gst-plugins-base)
-              ("sdl2" ,sdl2)))
+    (native-inputs (list pkg-config))
+    (inputs (list gstreamer gst-plugins-base sdl2))
     (home-page "https://github.com/FNA-XNA/FAudio")
     (synopsis "XAudio reimplementation")
     (description "FAudio is an XAudio reimplementation that focuses solely on
@@ -4773,12 +4659,9 @@ developing fully accurate DirectX Audio runtime libraries.")
          "1gq519c0imsh57zklyi0f8h64l3ai48lh672c834470z8c6kvbfi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+-2)
-       ("libsndfile" ,libsndfile)
-       ("portaudio" ,portaudio)))
+     (list alsa-lib gtk+-2 libsndfile portaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gnaural.sourceforge.net/")
     (synopsis "Binaural beat synthesizer")
     (description "Gnaural is a programmable auditory binaural beat synthesizer
@@ -4801,15 +4684,15 @@ other Gnaural instances, allowing synchronous sessions between many users.")
                (base32
                 "05yq7lggxygrkd76yiqby3msrgdn082p0qlvmzzv9xbw8hmyra76"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("lame" ,lame)
-              ("libvorbis" ,libvorbis)
-              ("opus" ,opus)
-              ("twolame" ,twolame)
-              ("alsa-lib" ,alsa-lib)
-              ("pulseaudio" ,pulseaudio)
-              ("jack" ,jack-1)
-              ("libsamplerate" ,libsamplerate)))
+    (native-inputs (list pkg-config))
+    (inputs (list lame
+                  libvorbis
+                  opus
+                  twolame
+                  alsa-lib
+                  pulseaudio
+                  jack-1
+                  libsamplerate))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-lame-prefix="
@@ -4838,8 +4721,7 @@ stream to one or more IceCast and/or ShoutCast servers.")
     (arguments
      `(#:parallel-tests? #f))           ;tests fail otherwise
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (synopsis "Encode or decode Linear/Longitudinal Time Code (LTC) audio")
     (description "Libltc is a POSIX-C Library for handling
 @dfn{Linear/Longitudinal Time Code} (LTC) data.")
@@ -4903,11 +4785,9 @@ supports both of ID3v1/v2 and APEv2 tags.")
     (arguments
      `(#:tests? #f)) ;no tests included
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib jack-1 pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://libsound.io")
     (synopsis "C library for real-time audio input and output")
     (description "@code{libsoundio} is a C library providing audio input and
@@ -4932,9 +4812,9 @@ workstations as well as consumer software such as music players.")
     (arguments
      `(#:tests? #f))                    ;no tests included
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Small GUI toolkit")
     (description "Redkite is a small GUI toolkit developed in C++17 and
 inspired from other well known GUI toolkits such as Qt and GTK.  It is
@@ -4976,10 +4856,11 @@ as is the case with audio plugins.")
                (chmod (string-append out "/share/carla/carla") #o555)
                #t)))
          (add-after 'install 'wrap-executables
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-script (string-append out "/bin/carla")
-                            `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                            #:guile (search-input-file inputs "bin/guile")
+                            `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -5004,7 +4885,7 @@ as is the case with audio plugins.")
        ;; For WRAP-SCRIPT above.
        ("guile" ,guile-2.2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://kx.studio/Applications:Carla")
     (synopsis "Audio plugin host")
     (description "Carla is a modular audio plugin host, with features like
@@ -5025,22 +4906,22 @@ default and preferred audio driver but also supports native drivers like ALSA.")
               (sha256
                (base32 "1m7njfjdb7sqf0lhgc4swihgdr4snkg8v02wcly08wb5ar2fr2s6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; It would be nice to add mikmod to inputs if that gets packaged
     ;; eventually.
-    (inputs `(("alsa-lib" ,alsa-lib)
-              ("jack" ,jack-1)
-              ("mpg123" ,mpg123)
-              ("lame" ,lame)
-              ("vorbis-tools" ,vorbis-tools)
-              ("faad2" ,faad2)
-              ("flac" ,flac)
-              ("timidity++" ,timidity++)
-              ("libsndfile" ,libsndfile)
-              ("libsamplerate" ,libsamplerate)
-              ("ncurses" ,ncurses)
-              ("ladspa" ,ladspa)
-              ("lilv" ,lilv)))
+    (inputs (list alsa-lib
+                  jack-1
+                  mpg123
+                  lame
+                  vorbis-tools
+                  faad2
+                  flac
+                  timidity++
+                  libsndfile
+                  libsamplerate
+                  ncurses
+                  ladspa
+                  lilv))
     (home-page "https://nosignal.fi/ecasound/index.php")
     (synopsis "Multitrack audio processing")
     (description "Ecasound is a software package designed for multitrack audio
@@ -5073,15 +4954,13 @@ in the package.")
             "1570m2dfia17dbkhd2qhx8jjihrpm7g8nnyg6n4wif4vv229s7dz"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      #:configure-flags
+    `(#:configure-flags
       ;; Build the tests.
       `("-Dtests=true")))
    (inputs
-    `(("libsamplerate" ,libsamplerate)
-      ("libsndfile" ,libsndfile)))
+    (list libsamplerate libsndfile))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "Library for reading and resampling audio files")
    (description "libaudec is a wrapper library over ffmpeg, sndfile and
 libsamplerate for reading and resampling audio files, based on Robin Gareus'
@@ -5109,11 +4988,9 @@ libsamplerate for reading and resampling audio files, based on Robin Gareus'
        `("-Delf-tests=true" ; for checking symbol visibility
          "-Donline-tests=true"))) ; for checking URI existence
     (inputs
-      `(("curl" ,curl)
-        ("libelf" ,libelf)
-        ("lilv" ,lilv)))
+      (list curl libelf lilv))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "LV2 plugin lint tool")
     (description "lv2lint is an LV2 lint-like tool that checks whether a
 given plugin and its UI(s) match up with the provided metadata and adhere
@@ -5144,11 +5021,9 @@ to well-known best practices.")
       (modify-phases %standard-phases
         (delete 'configure))))
     (inputs
-      `(("jalv" ,jalv)
-        ("lilv" ,lilv)))
+      (list jalv lilv))
     (native-inputs
-      `(("help2man" ,help2man)
-        ("pkg-config" ,pkg-config)))
+      (list help2man pkg-config))
     (synopsis "Documentation generator for LV2 plugins")
     (description
       "lv2toweb allows the user to create an xhtml page with information
@@ -5173,12 +5048,11 @@ with the provided metadata and adhere to well-known best practices.")
          "07xl3cmdaf7k9mm58m93cn8i1jvgimmiifdw1w7v2jl88nx60pm1"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; These are listed as propagated inputs because they are dependencies
     ;; in pkgconfig.
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("libx11" ,libx11)))
+     (list cairo libx11))
     (synopsis "GUI toolkit for LV2 plugins")
     (description "ZToolkit (Ztk) is a cross-platform GUI toolkit heavily
 inspired by GTK.  It handles events and low level drawing on behalf of
@@ -5209,8 +5083,7 @@ minimum.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("libsndfile" ,libsndfile)))
+     (list glib libsndfile))
     (home-page "http://www.swamiproject.org/")
     (synopsis "Instrument file software library")
     (description
@@ -5281,9 +5154,7 @@ currently operate on IEEE-754 single-precision floating-point numbers.")
         (base32 "1jpvr7bra8srz8jvnlbmhf8andbaavq5v01qjnp2f61za93rzwba"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bc" ,bc)
-       ("octave" ,octave)
-       ("valgrind" ,valgrind)))
+     (list bc octave valgrind))
     (arguments
      `(#:tests? #f ; TODO: Fix tests (paths, graphic toolkit, octave modules).
        #:phases
@@ -5354,19 +5225,19 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
                   #t))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch" ,catch-framework)
-       ("python" ,python)       ;for running tests
-       ("portaudio" ,portaudio) ;for portaudio examples
-       ("qtbase" ,qtbase-5)       ;for Qt examples
-       ("qtdeclarative" ,qtdeclarative)
-       ("qttools" ,qttools)))
+     (list catch-framework
+           python ;for running tests
+           portaudio ;for portaudio examples
+           qtbase-5 ;for Qt examples
+           qtdeclarative
+           qttools))
     (inputs
-     `(("jack" ,jack-1)                       ;for JACK examples
-       ("qtquickcontrols" ,qtquickcontrols))) ;for Qt examples
+     (list jack-1 ;for JACK examples
+           qtquickcontrols)) ;for Qt examples
     (propagated-inputs
      ;; This is because include/ableton/platforms/asio/AsioWrapper.hpp
      ;; contains '#include <asio.hpp>'.
-     `(("asio" ,asio)))
+     (list asio))
     (arguments
      `(#:configure-flags
        '("-DLINK_BUILD_QT_EXAMPLES=ON"
@@ -5375,11 +5246,10 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((python (string-append (assoc-ref inputs "python")
-                                          "/bin/python3"))
-                   (run-tests (string-append "../ableton-link-"
-                                             ,version
-                                             "-checkout/ci/run-tests.py")))
+             (let* ((python (search-input-file inputs "/bin/python3"))
+                    (run-tests (string-append "../ableton-link-"
+                                              ,version
+                                              "-checkout/ci/run-tests.py")))
                (invoke python run-tests "--target" "LinkCoreTest")
                (invoke python run-tests "--target" "LinkDiscoveryTest"))))
          (add-before 'install 'patch-cmake
@@ -5521,7 +5391,7 @@ Icecast server.")
                          (list "/bin" "/share/man/man1" "/share/man/man5"))
                (apply invoke "make" "sysinstall" make-flags)))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
      `(("groff" ,groff-minimal)         ; for nroff
        ("util-linux" ,util-linux)))     ; for col
@@ -5569,13 +5439,9 @@ device.  There is support for mono and/or stereo and 8 or 16 bit samples.")
                  (add-installed-pythonpath inputs outputs)
                  (invoke "pytest")))))))
       (propagated-inputs
-       `(("python-numpy" ,python-numpy)
-         ("python-typing-extensions" ,python-typing-extensions)))
+       (list python-numpy python-typing-extensions))
       (native-inputs
-       `(("sox" ,sox)
-         ("python-pytest" ,python-pytest)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-soundfile" ,python-soundfile)))
+       (list sox python-pytest python-pytest-cov python-soundfile))
       (home-page "https://github.com/rabitt/pysox")
       (synopsis "Python wrapper around SoX")
       (description "@code{python-pysox} is a wrapper around the @command{sox}
@@ -5604,9 +5470,9 @@ and much more.")
        (list (string-append "--prefix="
                             (assoc-ref %outputs "out")))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
diff --git a/gnu/packages/augeas.scm b/gnu/packages/augeas.scm
index b3c4803e04..2fd933604c 100644
--- a/gnu/packages/augeas.scm
+++ b/gnu/packages/augeas.scm
@@ -44,11 +44,11 @@
     (build-system gnu-build-system)
     ;; Marked as "required" in augeas.pc.
     (propagated-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://augeas.net")
     (synopsis "Edit configuration files programmatically")
     (description
diff --git a/gnu/packages/authentication.scm b/gnu/packages/authentication.scm
index a8070f4789..f5fba35031 100644
--- a/gnu/packages/authentication.scm
+++ b/gnu/packages/authentication.scm
@@ -59,14 +59,11 @@
                (for-each delete-file (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; XXX: Perhaps this should be propagated from xmlsec.
-       ("libltdl" ,libltdl)))
+     (list pkg-config
+           ;; XXX: Perhaps this should be propagated from xmlsec.
+           libltdl))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)
-       ("xmlsec-openssl" ,xmlsec-openssl)))
+     (list linux-pam openssl xmlsec-openssl))
     (home-page "https://www.nongnu.org/oath-toolkit/")
     (synopsis "One-time password (OTP) components")
     (description
@@ -111,16 +108,9 @@ data.")
        ;; The pam_test fails because ykclient fails to build a Curl handle.
        '(#:make-flags '("TESTS=util_test")))
       (inputs
-       `(("linux-pam" ,linux-pam)
-         ("libyubikey" ,libyubikey)
-         ("ykclient" ,ykclient)
-         ("yubikey-personalization" ,yubikey-personalization)))
+       (list linux-pam libyubikey ykclient yubikey-personalization))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("asciidoc" ,asciidoc)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool asciidoc pkg-config))
       (home-page "https://developers.yubico.com/yubico-pam")
       (synopsis "Yubico pluggable authentication module")
       (description "The Yubico PAM module provides an easy way to integrate the
@@ -141,9 +131,9 @@ YubiKey into your existing user authentication infrastructure.")
         (base32 "1mdj1wj0adcnx354fs17928yn2xfr1hj5mfraq282dagi873sqw3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (home-page "http://pamtester.sourceforge.net/")
     (synopsis "Utility for testing pluggable authentication modules (PAM) facility")
     (description
diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm
index 968337ad8d..1fe742bbae 100644
--- a/gnu/packages/autogen.scm
+++ b/gnu/packages/autogen.scm
@@ -42,10 +42,8 @@
        (sha256
         (base32 "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("which" ,which)))
-    (inputs `(("guile" ,guile-2.2)
-              ("perl" ,perl)))          ; for doc generator mdoc
+    (native-inputs (list pkg-config which))
+    (inputs (list guile-2.2 perl))          ; for doc generator mdoc
     (arguments
      '(#:configure-flags
        ;; XXX Needed to build 5.18.16.  ./configure fails without it:
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 238bd6bc11..a8bf36a966 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -59,15 +59,11 @@
         "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("bash" ,bash-minimal)
-           ("perl" ,perl)
-           ("m4" ,m4))
-         '()))
-    (native-inputs
-     `(("perl" ,perl)
+     `(("bash" ,bash-minimal)
+       ("perl" ,perl)
        ("m4" ,m4)))
+    (native-inputs
+     (list perl m4))
     (arguments
      `(;; XXX: testsuite: 209 and 279 failed.  The latter is an impurity.  It
        ;; should use our own "cpp" instead of "/lib/cpp".
@@ -216,9 +212,9 @@ files with a system-specific shebang."
     (inputs `(("guile"
                ;; XXX: Kludge to hide the circular dependency.
                ,(module-ref (resolve-interface '(gnu packages guile))
-                            'guile-2.0))
+                            'guile-3.0/fixed))
               ("autoconf" ,autoconf)
-              ("bash" ,bash)))
+              ("bash" ,bash-minimal)))
     (arguments
      '(#:modules ((guix build utils))
        #:builder
@@ -316,7 +312,7 @@ contributed as free software by the community.")
                (base32
                 "0gv7g61ja9q9zg1m30k4snqwwy1kq7b4df6sb7d2qra7kbdq8af1"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Process generated build logs")
     (description "Autobuild is a package that processes build logs generated
 when building software.  Autobuild is primarily focused on packages using
@@ -331,24 +327,21 @@ output is indexed in many ways to simplify browsing.")
 (define-public automake
   (package
     (name "automake")
-    (version "1.16.2")
+    (version "1.16.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/automake/automake-"
                                  version ".tar.xz"))
              (sha256
               (base32
-                "1l7dkqbsmbf94ax29jj1jf6a0r6ikc8jybg1p5m0c3ki7pg5ki6c"))
+                "0fmz2fhmzcpacnprl5msphvaflwiy0hvpgmqlgfny72ddijzfazz"))
              (patches
               (search-patches "automake-skip-amhello-tests.patch"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("autoconf" ,autoconf-wrapper)
-           ("bash" ,bash-minimal)
-           ("perl" ,perl))
-         '()))
+     `(("autoconf" ,autoconf-wrapper)
+       ("bash" ,bash-minimal)
+       ("perl" ,perl)))
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
        ("perl" ,perl)))
@@ -471,7 +464,7 @@ Makefile, simplifying the entire process for the developer.")
                 "0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
               (patches (search-patches "libtool-skip-tests2.patch"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("m4" ,m4)))
+    (propagated-inputs (list m4))
     (native-inputs `(("m4" ,m4)
                      ("perl" ,perl)
                      ;; XXX: this shouldn't be necessary, but without it test
@@ -507,11 +500,19 @@ Makefile, simplifying the entire process for the developer.")
                (("/bin/sh")
                 (string-append bash "/bin/sh")))
              #t)))
-         (add-after 'patch-source-shebangs 'restore-ltmain-shebang
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build-aux/ltmain.in"
-               (("^#!.*/bin/sh$") "#!/bin/sh"))
-             #t)))))
+         ;; These files may be copied into source trees by libtoolize,
+         ;; therefore they must not point to store file names that would be
+         ;; leaked with tarballs generated by make dist.
+         (add-after 'install 'restore-build-aux-shebang
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/share/libtool/build-aux")))
+               (for-each (lambda (file)
+                           (format #t "restoring shebang on `~a'~%" file)
+                           (substitute* file
+                             (("^#!.*/bin/sh") "#!/bin/sh")))
+                         (find-files dir ".*"))
+               #t))))))
 
     (synopsis "Generic shared library support tools")
     (description
@@ -560,7 +561,7 @@ complexity of working with shared libraries across platforms.")
                           (install-file "doc/config.sub.1" man1)
                           #t))))))
       (native-inputs
-       `(("help2man" ,help2man)))
+       (list help2man))
       (home-page "https://savannah.gnu.org/projects/config")
       (synopsis "Ubiquitous config.guess and config.sub scripts")
       (description "The `config.guess' script tries to guess a canonical system triple,
@@ -616,7 +617,7 @@ configuration in nearly all GNU packages (and many others).")
                (("/usr/bin/env python") (which "python3")))
              #t)))))
     (inputs
-     `(("python" ,python-3)))
+     (list python-3))
     (synopsis "@command{configure} interface for Python-based packages")
     (description
      "GNU pyconfigure provides template files for easily implementing
diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.c
index 47ba069de1..ad0094bff5 100644
--- a/gnu/packages/aux-files/guile-launcher.c
+++ b/gnu/packages/aux-files/guile-launcher.c
@@ -82,10 +82,13 @@ main (int argc, char **argv)
   unsetenv ("GUILE_LOAD_PATH");
   unsetenv ("GUILE_LOAD_COMPILED_PATH");
 
-  /* XXX: Do not let GMP allocate via libgc as this can lead to memory
-     corruption in GnuTLS/Nettle since Nettle also uses GMP:
+#if !SCM_ENABLE_MINI_GMP
+  /* XXX: On Guile < 3.0.6 and Guile built without its bundled mini-GMP, do
+     not let GMP allocate via libgc as this can lead to memory corruption in
+     GnuTLS/Nettle since Nettle also uses GMP:
      <https://issues.guix.gnu.org/46330>.  */
   scm_install_gmp_memory_functions = 0;
+#endif
 
   scm_boot_guile (argc, argv, inner_main, 0);
   return 0; /* never reached */
diff --git a/gnu/packages/aux-files/python/sanity-check.py b/gnu/packages/aux-files/python/sanity-check.py
new file mode 100644
index 0000000000..a84f8f03c0
--- /dev/null
+++ b/gnu/packages/aux-files/python/sanity-check.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+#
+# 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/>.
+
+from __future__ import print_function  # Python 2 support.
+import importlib
+import pkg_resources
+import sys
+import traceback
+
+try:
+    from importlib.machinery import PathFinder
+except ImportError:
+    PathFinder = None
+
+ret = 0
+
+# Only check site-packages installed by this package, but not dependencies
+# (which pkg_resources.working_set would include). Path supplied via argv.
+ws = pkg_resources.find_distributions(sys.argv[1])
+
+for dist in ws:
+    print('validating', repr(dist.project_name), dist.location)
+    try:
+        print('...checking requirements: ', end='')
+        req = str(dist.as_requirement())
+        # dist.activate() is not enough to actually check requirements, we
+        # have to .require() it.
+        pkg_resources.require(req)
+        print('OK')
+    except Exception as e:
+        print('ERROR:', req, e)
+        ret = 1
+        continue
+
+    # Try to load top level modules. This should not have any side-effects.
+    try:
+        metalines = dist.get_metadata_lines('top_level.txt')
+    except (KeyError, EnvironmentError):
+        # distutils (i.e. #:use-setuptools? #f) will not install any metadata.
+        # This file is also missing for packages built using a PEP 517 builder
+        # such as poetry.
+        print('WARNING: cannot determine top-level modules')
+        continue
+    for name in metalines:
+        # Only available on Python 3.
+        if PathFinder and PathFinder.find_spec(name) is None:
+            # Ignore unavailable modules, often C modules, which were not
+            # installed at the top-level. Cannot use ModuleNotFoundError,
+            # because it is raised by failed imports too.
+            continue
+        try:
+            print('...trying to load module', name, end=': ')
+            importlib.import_module(name)
+            print('OK')
+        except Exception:
+            print('ERROR:')
+            traceback.print_exc(file=sys.stdout)
+            ret = 1
+
+    # Try to load entry points of console scripts too, making sure they
+    # work. They should be removed if they don't. Other groups may not be
+    # safe, as they can depend on optional packages.
+    for group, v in dist.get_entry_map().items():
+        if group not in {'console_scripts', 'gui_scripts'}:
+            continue
+        for name, ep in v.items():
+            try:
+                print('...trying to load endpoint', group, name, end=': ')
+                ep.load()
+                print('OK')
+            except Exception:
+                print('ERROR:')
+                traceback.print_exc(file=sys.stdout)
+                ret = 1
+
+sys.exit(ret)
diff --git a/gnu/packages/aux-files/python/sitecustomize.py b/gnu/packages/aux-files/python/sitecustomize.py
new file mode 100644
index 0000000000..71e328b9ac
--- /dev/null
+++ b/gnu/packages/aux-files/python/sitecustomize.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+
+# Commentary:
+#
+# Site-specific customization for Guix.
+#
+# The program below honors the GUIX_PYTHONPATH environment variable to
+# discover Python packages.  File names appearing in this variable that match
+# a predefined versioned installation prefix are added to the sys.path.  To be
+# considered, a Python package must be installed under the
+# 'lib/pythonX.Y/site-packages' directory, where X and Y are the major and
+# minor version numbers of the Python interpreter.
+#
+# Code:
+
+major_minor = '{}.{}'.format(*sys.version_info)
+site_packages_prefix = os.path.join(
+    'lib', 'python' + major_minor, 'site-packages')
+python_site = os.path.join(sys.prefix, site_packages_prefix)
+
+try:
+    all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(os.path.pathsep)
+except KeyError:
+    all_sites_raw = []
+# Normalize paths, otherwise a trailing slash would cause it to not match.
+all_sites_norm = [os.path.normpath(p) for p in all_sites_raw]
+matching_sites = [p for p in all_sites_norm
+                  if p.endswith(site_packages_prefix)]
+
+# Insert sites matching the current version into sys.path, right before
+# Python's own site.  This way, the user can override the libraries provided
+# by Python itself.
+sys_path_absolute = [os.path.realpath(p) for p in sys.path]
+index = sys_path_absolute.index(python_site)
+sys.path[index:index] = matching_sites
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
index b2aeeadf47..7dcaa17a76 100644
--- a/gnu/packages/avahi.scm
+++ b/gnu/packages/avahi.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,9 +23,11 @@
 (define-module (gnu packages avahi)
   #:use-module ((guix licenses) #:select (lgpl2.1+))
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -58,7 +61,7 @@
                  #t))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--with-distro=none"
+     `(#:configure-flags '("--with-distro=none"
                            "--disable-static"
                            "--localstatedir=/var" ; for the DBus socket
                            "--disable-python"
@@ -68,13 +71,35 @@
                            "--enable-tests"
                            "--disable-qt4" "--disable-qt5"
                            "--disable-gtk" "--disable-gtk3"
-                           "--enable-compat-libdns_sd")))
+                           "--enable-compat-libdns_sd"
+                           ,@(if (%current-target-system)
+                                 '("ac_cv_prog_have_pkg_config=yes")
+                                 '()))
+       ;; TODO(core-updates): Make this unconditional.
+       ,@(if (%current-target-system)
+             `(#:modules ((srfi srfi-26)
+                          (guix build utils)
+                          (guix build gnu-build-system))
+               #:phases
+               ,#~(modify-phases %standard-phases
+                    (add-after 'patch-shebangs 'patch-more-shebangs
+                      (lambda* (#:key inputs #:allow-other-keys)
+                        (define path
+                          `(,(dirname (search-input-file inputs "bin/sh"))))
+                        (for-each
+                         (cut patch-shebang <> path)
+                         (find-files (string-append #$output "/etc/avahi")))))))
+             '())))
     (inputs
-     `(("dbus" ,dbus)
+     ;; TODO(core-updates): Make this input unconditional.
+     `(,@(if (%current-target-system)
+             `(("bash-minimal" ,bash-minimal))
+             '())
+       ("dbus" ,dbus)
        ("expat" ,expat)
        ("gdbm" ,gdbm)
        ("glib" ,glib)
-       ("libcap" ,libcap-2.31)       ;to enable chroot support in avahi-daemon
+       ("libcap" ,libcap)            ;to enable chroot support in avahi-daemon
        ("libdaemon" ,libdaemon)
        ("libevent" ,libevent)))
     (native-inputs
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index c113707283..3cc5a6964e 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -168,8 +168,7 @@ C++.")
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("xxd" ,xxd)))
+     (list unzip xxd))
     (home-page "https://github.com/ryansuchocki/microscheme/")
     (synopsis "Scheme subset for Atmel microcontrollers")
     (description
diff --git a/gnu/packages/axoloti.scm b/gnu/packages/axoloti.scm
index c6dd748773..f680d6fb83 100644
--- a/gnu/packages/axoloti.scm
+++ b/gnu/packages/axoloti.scm
@@ -205,7 +205,7 @@
        ;; for uploading compiled patches and firmware
        ("dfu-util" ,dfu-util-for-axoloti)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://www.axoloti.com/")
     (synopsis "Audio development environment for the Axoloti core board")
     (description
@@ -318,8 +318,8 @@ runtime.")
                    (lambda ()
                      (let* ((dir       (string-append (assoc-ref outputs "out")
                                                       "/share/axoloti"))
-                            (runtime   (string-append (assoc-ref inputs "axoloti-runtime")
-                                                      "/share/axoloti"))
+                            (runtime   (search-input-directory inputs
+                                                               "share/axoloti"))
                             (toolchain (assoc-ref inputs "cross-toolchain"))
                             (includes  (string-append
                                         toolchain
@@ -351,9 +351,8 @@ runtime.")
        ("java-jgit" ,java-jgit-4.2)
        ("axoloti-runtime" ,axoloti-runtime)))
     (native-inputs
-     `(("ant" ,ant)
-       ("zip" ,zip) ; for repacking the jar
-       ("unzip" ,unzip)))
+     (list ant zip ; for repacking the jar
+           unzip))
     (description
      "The Axoloti patcher offers a “patcher” environment similar to Pure Data
 for sketching digital audio algorithms.  The patches run on a standalone
@@ -530,8 +529,8 @@ patcher application.")))
                ;; Install old firmware
                (let ((target (string-append share "/old_firmware/firmware-1.0.12"))
                      (old-firmware
-                      (string-append (assoc-ref inputs "axoloti-runtime")
-                                     "/share/axoloti/firmware/")))
+                      (search-input-directory inputs
+                                              "share/axoloti/firmware")))
                  (mkdir-p target)
                  (install-file (string-append old-firmware
                                               "flasher/flasher_build/flasher.bin")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index dcc0412d1b..fdb84898bb 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
@@ -118,11 +118,11 @@
        ("pygobject" ,python-pygobject)
        ("urllib3" ,python-urllib3)))
     (inputs
-     `(("dbus" ,dbus)                   ; dbus-launch (Gio backend)
-       ("librsync" ,librsync)
-       ("lftp" ,lftp)
-       ("gnupg" ,gnupg)                 ; gpg executable needed
-       ("util-linux" ,util-linux)))     ; for setsid
+     (list dbus ; dbus-launch (Gio backend)
+           librsync
+           lftp
+           gnupg ; gpg executable needed
+           util-linux))     ; for setsid
     (arguments
      `(#:test-target "test"
        #:phases
@@ -144,8 +144,7 @@
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" (getcwd))   ; gpg needs to write to $HOME
              (setenv "TZDIR"            ; some timestamp checks need TZDIR
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
              ;; Some things respect TMPDIR, others hard-code /tmp, and the
              ;; defaults don't match up, breaking test_restart.  Fix it.
              (setenv "TMPDIR" "/tmp"))))))
@@ -174,8 +173,7 @@ spying and/or modification by the server.")
                (base32
                 "11mx8q29cr0sryd11awab7y4mhqgbamb1ss77rffjj6in8pb4hdk"))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list automake autoconf))
     (build-system gnu-build-system)
     (synopsis "File verification and repair tools")
     (description "Par2cmdline uses Reed-Solomon error-correcting codes to
@@ -201,14 +199,14 @@ can even repair them.")
        (base32
         "02bnczg01cyhajmm4rhbnc0ja0dd9ikv9fwv28asxh1rlx9yr0b7"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("tar" ,tar)
-       ("lzop" ,lzop)
-       ("mcrypt" ,mcrypt)
-       ("openssh" ,openssh)
-       ("gnupg" ,gnupg-1)))
+     (list glib
+           tar
+           lzop
+           mcrypt
+           openssh
+           gnupg-1))
     (arguments
      `(#:configure-flags
        `(,(string-append "--sbindir=" (assoc-ref %outputs "out") "/bin"))
@@ -226,7 +224,7 @@ backups (called chunks) to allow easy burning to CD/DVD.")
 (define-public libarchive
   (package
     (name "libarchive")
-    (version "3.4.2")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
@@ -237,16 +235,16 @@ backups (called chunks) to allow easy burning to CD/DVD.")
                                  version ".tar.xz")))
        (sha256
         (base32
-         "18dd01ahs2hv74xm7axjc3yhq839p0x0s4vssvlmm8fknja09qfq"))))
+         "16r95rlmikll1k8vbhh06vq6x3srkc10hzxjjf3021mjs2ld65qf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libxml2" ,libxml2)
-       ("lzo" ,lzo)
-       ("nettle" ,nettle)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           libxml2
+           lzo
+           nettle
+           xz
+           zlib
+           `(,zstd "lib")))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -338,21 +336,15 @@ random access nor for in-place modification.")
         (base32 "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("dejagnu" ,dejagnu)))
+     (list autoconf automake pkg-config
+           ;; For tests.
+           dejagnu))
     (inputs
      ;; XXX Compiling with nettle (encryption) support requires patching out
      ;; -Werror from GNUmakefile.in.  Then, rdup-tr-{en,de}crypt tests fail:
      ;; free(): invalid pointer
      ;; ** rdup-tr: SIGPIPE received, exiting
-     `(("glib" ,glib)
-       ("pcre" ,pcre)
-       ("libarchive" ,libarchive)
-       ("mcrypt" ,mcrypt)))
+     (list glib pcre libarchive mcrypt))
     (arguments
      `(#:parallel-build? #f             ;race conditions
        #:phases
@@ -415,13 +407,11 @@ list and implement the backup strategy.")
              (setenv "VERSION" ,version)
              (patch-shebang "autover.sh"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-
-       ;; For the tests.
-       ("valgrind" ,valgrind)))
+     (list automake autoconf
+           ;; For the tests.
+           valgrind))
     (inputs
-     `(("util-linux" ,util-linux "lib"))) ; libblkid
+     (list `(,util-linux "lib"))) ; libblkid
     (home-page "https://www.snapraid.it/")
     (synopsis "Efficient backups using parity snapshots across disk arrays")
     (description
@@ -463,7 +453,7 @@ remain fully idle, saving power and producing less noise.")
          "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("librsync" ,librsync-0.9)))
+     (list librsync-0.9))
     (arguments
      `(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
                       ,(string-append "CC=" ,(cc-for-target)))
@@ -494,10 +484,9 @@ errors.")
         (base32 "11rvjcp77zwgkphz1kyf5yqgr3rlss7dm9xzmvpvc4lp99xq7drb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (inputs
-     `(("python" ,python)
-       ("librsync" ,librsync)))
+     (list python librsync))
     (arguments
      `(#:tests? #f))                    ; Tests require root/sudo
     (home-page "https://rdiff-backup.net/")
@@ -536,8 +525,7 @@ rdiff-backup is easy to use and settings have sensible defaults.")
            (lambda _
              (invoke "make" "test"))))))
     (inputs
-     `(("perl" ,perl)
-       ("rsync" ,rsync)))
+     (list perl rsync))
     (home-page "https://rsnapshot.org")
     (synopsis "Deduplicating snapshot backup utility based on rsync")
     (description "rsnapshot is a file system snapshot utility based on rsync.
@@ -557,7 +545,6 @@ rsnapshot uses hard links to deduplicate identical files.")
               (sha256
                (base32
                 "0fpdyxww41ba52d98blvnf543xvirq1v9xz1i3x1gm9lzlzpmc2g"))
-              (patches (search-patches "diffutils-gets-undeclared.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -584,41 +571,38 @@ rsnapshot uses hard links to deduplicate identical files.")
                       (substitute* "configure"
                         (("GUILE=(.*)--variable bindir`" _ middle)
                          (string-append "GUILE=" middle
-                                        "--variable bindir`/guile")))
-                      #t))
+                                        "--variable bindir`/guile")))))
                   (add-before 'build 'set-libtirpc-include-path
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; Allow <rpc/rpc.h> & co. to be found.
-                      (let ((libtirpc (assoc-ref inputs "libtirpc")))
-                        (setenv "CPATH"
-                                (string-append (getenv "CPATH")
-                                               ":" libtirpc
-                                               "/include/tirpc"))
-                        #t)))
+                      (let ((tirpc (string-append (assoc-ref inputs "libtirpc")
+                                                  "/include/tirpc")))
+                        (if (getenv "CPATH")
+                          (setenv "CPATH"
+                                  (string-append (getenv "CPATH")
+                                                 ":" tirpc))
+                          (setenv "CPATH" tirpc)))))
                   (add-before 'check 'skip-test
                     (lambda _
                       ;; XXX: This test fails (1) because current GnuTLS no
                       ;; longer supports OpenPGP authentication, and (2) for
                       ;; some obscure reason.  Better skip it.
-                      (setenv "XFAIL_TESTS" "utils/block-server")
-                      #t)))))
+                      (setenv "XFAIL_TESTS" "utils/block-server"))))))
     (native-inputs
-     `(("guile" ,guile-2.0)
-       ("gperf" ,gperf-3.0)                  ;see <https://bugs.gnu.org/32382>
-       ("pkg-config" ,pkg-config)
-       ("rpcsvc-proto" ,rpcsvc-proto)))           ;for 'rpcgen'
+     (list guile-2.0 gperf-3.0 ;see <https://bugs.gnu.org/32382>
+           pkg-config rpcsvc-proto))           ;for 'rpcgen'
     (inputs
-     `(("guile" ,guile-2.0)
-       ("util-linux" ,util-linux)
-       ("libtirpc" ,libtirpc)
-       ("gnutls" ,gnutls)
-       ("tdb" ,tdb)
-       ("bdb" ,bdb)
-       ("gdbm" ,gdbm)
-       ("libgcrypt" ,libgcrypt)
-       ("lzo" ,lzo)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list guile-2.0
+           util-linux
+           libtirpc
+           gnutls
+           tdb
+           bdb
+           gdbm
+           libgcrypt
+           lzo
+           bzip2
+           zlib))
     (home-page "https://nongnu.org/libchop/")
     (synopsis "Tools & library for data backup and distributed storage")
     (description
@@ -743,16 +727,14 @@ detection, and lossless compression.")
                                (string-append share "/fish/vendor_completions.d")))
                #t))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-setuptools-scm python-pytest))
     (inputs
-     `(("acl" ,acl)
-       ("libb2" ,libb2)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("python-llfuse" ,python-llfuse)
-       ("zstd" ,zstd "lib")))
+     (list acl
+           libb2
+           lz4
+           openssl
+           python-llfuse
+           `(,zstd "lib")))
     (synopsis "Deduplicated, encrypted, authenticated and compressed backups")
     (description "Borg is a deduplicating backup program.  Optionally, it
 supports compression and authenticated encryption.  The main goal of Borg is to
@@ -776,12 +758,9 @@ to not fully trusted targets.  Borg is a fork of Attic.")
                 "04ny5s5z05gk6davbwkjkraan781k2xzw6kjwp75h6ncv45dv1sb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("libxml2" ,libxml2)
-       ("ntfs-3g" ,ntfs-3g)
-       ("openssl" ,openssl)))
+     (list fuse libxml2 ntfs-3g openssl))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -837,12 +816,11 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
                     (output-dir
                      (assoc-ref outputs "out"))
 
-                    ;; Just a default... not so useful on guixsd though
-                    ;; You probably want to a service with file(s) to point to.
+                    ;; Just a default... not so useful on Guix Systems though.
+                    ;; You probably want a service with file(s) to point to.
                     (confdir "/etc/dirvish")
 
-                    (perl (string-append (assoc-ref %build-inputs "perl")
-                                         "/bin/perl"))
+                    (perl (search-input-file inputs "/bin/perl"))
                     (loadconfig.pl (call-with-input-file "loadconfig.pl"
                                      read-string)))
 
@@ -893,10 +871,7 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
                (for-each write-man man-pages)
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("rsync" ,rsync)
-       ("perl-libtime-period" ,perl-libtime-period)
-       ("perl-libtime-parsedate" ,perl-libtime-parsedate)))
+     (list perl rsync perl-libtime-period perl-libtime-parsedate))
     (home-page "http://dirvish.org/")
     (synopsis "Fast, disk based, rotating network backup system")
     (description
@@ -1042,11 +1017,7 @@ precious backup space.
     (arguments
      `(#:tests? #f))                    ;no test
     (inputs
-     `(("lzo" ,lzo)
-       ("libressl" ,libressl)
-       ("protobuf" ,protobuf)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list lzo libressl protobuf xz zlib))
     (home-page "http://zbackup.org")
     (synopsis "Versatile deduplicating backup tool")
     (description
@@ -1080,12 +1051,10 @@ is format-agnostic, so you can feed virtually any files to it.")
          "--disable-readline"
          "--disable-rmt")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("util-linux" ,util-linux "lib")
-       ("e2fsprogs" ,e2fsprogs)))
+     (list openssl zlib
+           `(,util-linux "lib") e2fsprogs))
     (home-page "https://dump.sourceforge.io/")
     (synopsis "Ext2/3/4 file system dump/restore utilities")
     (description "Dump examines files in a file system, determines which ones
@@ -1122,17 +1091,14 @@ interactive mode.")
                 (string-append prefix " 3600" suffix "\n")))
              #t)))))
     (inputs
-     `(("acl" ,acl)
-       ("librsync" ,librsync)
-       ("ncurses" ,ncurses)             ; for the live status monitor
-       ("openssl" ,openssl)
-       ("uthash" ,uthash)
-       ("zlib" ,zlib)))
+     (list acl
+           librsync
+           ncurses ; for the live status monitor
+           openssl
+           uthash
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("check" ,check-0.14)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake check-0.14 pkg-config))
     (home-page "https://burp.grke.org")
     (synopsis "Differential backup and restore")
     (description "Burp is a network backup and restore program.  It attempts
@@ -1153,17 +1119,16 @@ backup.")
                 "0jgc53rrbas8i4z13l2ii99cpav1ma73spsjg70ygihf0635r3dh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)             ;for cross-compilation
-       ("guile-gcrypt" ,guile-gcrypt)
-       ("guile-quickcheck" ,guile-quickcheck)))
+     (list autoconf
+           automake
+           pkg-config
+           guile-3.0 ;for cross-compilation
+           guile-gcrypt
+           guile-quickcheck))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("zlib" ,zlib)))
+     (list guile-3.0 zlib))
     (propagated-inputs
-     `(("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-gcrypt))
     (home-page "https://ngyro.com/software/disarchive.html")
     (synopsis "Software archive disassembler")
     (description "Disarchive can disassemble software archives into data
@@ -1204,15 +1169,10 @@ compression parameters used by Gzip.")
                                              ":" (getenv "PATH")))
                (invoke "pytest")))))))
     (inputs
-     `(("borg" ,borg)
-       ("python-colorama" ,python-colorama)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-requests" ,python-requests)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)))
+     (list borg python-colorama python-jsonschema python-requests
+           python-ruamel.yaml))
     (native-inputs
-     `(("python-flexmock" ,python-flexmock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-flexmock python-pytest python-pytest-cov))
     (home-page "https://torsion.org/borgmatic/")
     (synopsis "Simple, configuration-driven backup software")
     (description
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 77731d3720..dd590575a4 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
@@ -17,6 +17,9 @@
 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
 ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +42,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages ed)
@@ -56,6 +60,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (guix i18n)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -67,6 +72,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (glibc
+            make-ld-wrapper
             libiconv-if-needed))
 
 ;;; Commentary:
@@ -98,18 +104,18 @@ command-line arguments, multiple languages, and so on.")
 (define-public grep
   (package
    (name "grep")
-   (version "3.4")
+   (version "3.6")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/grep/grep-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1yy33kiwrxrwj2nxa4fg15bvmwyghqbs8qwkdvy5phm784f7brjq"))
+              "0gipv6bzkm1aihj0ncqpyh164xrzgcxcv9r1kwzyk2g1mzl1azk6"))
             (patches (search-patches "grep-timing-sensitive-test.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))             ;some of the tests require it
-   (inputs `(("pcre" ,pcre)))
+   (native-inputs (list perl))                   ;some of the tests require it
+   (inputs (list pcre))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -122,8 +128,7 @@ command-line arguments, multiple languages, and so on.")
               (substitute* (list (string-append bin "/egrep")
                                  (string-append bin "/fgrep"))
                 (("^exec grep")
-                 (string-append "exec " bin "/grep")))
-              #t))))))
+                 (string-append "exec " bin "/grep")))))))))
    (synopsis "Print lines matching a pattern")
    (description
      "grep is a tool for finding text inside files.  Text is found by
@@ -146,27 +151,24 @@ including, for example, recursive directory searching.")
                                 ".tar.gz"))
             (sha256
              (base32
-              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))))
+              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))
+            (patches (search-patches "coreutils-gnulib-tests.patch"))
+
+            ;; Remove this snippet once upstream releases a fixed version.
+            ;; This snippet changes Makefile.in, even though the upstream
+            ;; patch changes testsuite/local.mk, since we build sed from a
+            ;; release tarball.  See: https://bugs.gnu.org/36150
+            (snippet
+             '(begin
+                (substitute* "Makefile.in"
+                  (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
+                   (string-append
+                    previous-line
+                    "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))))
+            (modules '((guix build utils)))))
    (build-system gnu-build-system)
-   (arguments
-    ;; TODO: When merging this into core-updates, keep the version of
-    ;; this code (with comment!) applied as a snippet.
-    `(,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
-                                              (%current-system)))
-          `(#:phases
-            (modify-phases %standard-phases
-              (add-after 'unpack 'allow-building-on-selinux-systems
-                (lambda _
-                  (substitute* "Makefile.in"
-                    (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
-                     (string-append
-                      previous-line
-                      "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))
-                  #t))))
-          '())))
    (synopsis "Stream editor")
-   (native-inputs
-    `(("perl" ,perl)))                            ;for tests
+   (native-inputs (list perl))                    ;for tests
    (description
     "Sed is a non-interactive, text stream editor.  It receives a text
 input from a file or from standard input and it then applies a series of text
@@ -179,15 +181,14 @@ implementation offers several extensions over the standard utility.")
 (define-public tar
   (package
    (name "tar")
-   (version "1.32")
-   (replacement tar-1.34)
+   (version "1.34")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/tar/tar-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh"))
+              "0a0x87anh9chbi2cgcyy7pmnm5hzk4yd1w2j8gm1wplwhwkbvgk3"))
             (patches (search-patches "tar-skip-unreliable-tests.patch"
                                      "tar-remove-wholesparse-check.patch"))))
    (build-system gnu-build-system)
@@ -215,13 +216,12 @@ implementation offers several extensions over the standard utility.")
                      (let ((bash (assoc-ref inputs "bash")))
                        (substitute* "src/system.c"
                          (("/bin/sh")
-                          (string-append bash "/bin/sh")))
-                       #t))))))
+                          (string-append bash "/bin/sh")))))))))
 
    ;; When cross-compiling, the 'set-shell-file-name' phase needs to be able
    ;; to refer to the target Bash.
    (inputs (if (%current-target-system)
-               `(("bash" ,bash))
+               (list bash)
                '()))
 
    (synopsis "Managing tar archives")
@@ -235,21 +235,6 @@ standard utility.")
    (license gpl3+)
    (home-page "https://www.gnu.org/software/tar/")))
 
-(define-public tar-1.34  ; fixes CVE-2021-20193
-  (package
-    (inherit tar)
-    (version "1.34")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/tar/tar-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "0a0x87anh9chbi2cgcyy7pmnm5hzk4yd1w2j8gm1wplwhwkbvgk3"))
-              (patches
-               (search-patches "tar-skip-unreliable-tests.patch"
-                               "tar-remove-wholesparse-check.patch"))))))
-
 (define-public patch
   (package
    (name "patch")
@@ -269,7 +254,7 @@ standard utility.")
     (if (%current-target-system)
         `(#:configure-flags '("gl_cv_func_working_mktime=yes"))
         '()))
-   (native-inputs `(("ed" ,ed)))
+   (native-inputs (list ed))
    (synopsis "Apply differences to originals, with optional backups")
    (description
     "Patch is a program that applies changes to files based on differences
@@ -283,16 +268,17 @@ differences.")
 (define-public diffutils
   (package
    (name "diffutils")
-   (version "3.7")
+   (version "3.8")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/diffutils/diffutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk"))))
+              "1v4g8gi0lgakqa7iix8s4fq7lq6l92vw3rjd9wfd2rhjng8xggd6"))
+            (patches (search-patches "diffutils-fix-signal-processing.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))
+   (native-inputs (list perl))
    (synopsis "Comparing and merging files")
    (description
     "GNU Diffutils is a package containing tools for finding the
@@ -306,16 +292,15 @@ interactive means to merge two files.")
 (define-public findutils
   (package
    (name "findutils")
-   (version "4.7.0")
+   (version "4.8.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/findutils/findutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "16kqz9yz98dasmj70jwf5py7jk558w96w0vgp3zf9xsqk3gzpzn5"))
-            (patches (search-patches "findutils-localstatedir.patch"
-                                     "findutils-test-rwlock-threads.patch"))))
+              "0r3i72hnw0a30khlczi9k2c51aamaj6kfmp5mk3844nrjxz7n4jp"))
+            (patches (search-patches "findutils-localstatedir.patch"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags (list
@@ -327,8 +312,7 @@ interactive means to merge two files.")
                      (substitute* '("tests/xargs/verbose-quote.sh"
                                     "tests/find/exec-plus-last-file.sh")
                        (("#!/bin/sh")
-                        (string-append "#!" (which "sh"))))
-                     #t)))))
+                        (string-append "#!" (which "sh")))))))))
    (synopsis "Operating on files matching given criteria")
    (description
     "Findutils supplies the basic file directory searching utilities of the
@@ -351,18 +335,20 @@ used to apply commands with arbitrarily long arguments.")
             (sha256
              (base32
               "1yjcrh5hw70c0yn8zw55pd6j51dj90anpq8mmg649ps9g3gdhn24"))
-            (patches (search-patches "coreutils-ls.patch"))))
+            (patches (search-patches "coreutils-ls.patch"
+                                     "coreutils-gnulib-tests.patch"))))
    (build-system gnu-build-system)
-   (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
-             ("gmp"  ,gmp)                        ;bignums in 'expr', yay!
+   (inputs `(,acl                                 ;TODO: add SELinux
+             ,attr                                ;for xattrs in ls, mv, etc
+             ,gmp                                 ;bignums in 'expr', yay!
 
              ;; Do not use libcap when cross-compiling since it's not quite
              ;; cross-compilable; and use it only for supported systems.
              ,@(if (and (not (%current-target-system))
                         (member (%current-system)
                                 (package-supported-systems libcap)))
-             `(("libcap" ,libcap-2.31))        ;capability support in 'ls', etc.
-             '())))
+                   `(,libcap)                ;capability support in 'ls', etc.
+                   '())))
    (native-inputs
     ;; Perl is needed to run tests in native builds, and to run the bundled
     ;; copy of help2man.  However, don't pass it when cross-compiling since
@@ -370,7 +356,7 @@ used to apply commands with arbitrarily long arguments.")
     ;; for help2man.
     (if (%current-target-system)
         '()
-        `(("perl" ,perl))))
+        (list perl)))
    (outputs '("out" "debug"))
    (arguments
     `(#:parallel-build? #f            ; help2man may be called too early
@@ -399,16 +385,18 @@ used to apply commands with arbitrarily long arguments.")
                      (substitute* (find-files "gnulib-tests" "\\.c$")
                        (("/bin/sh") (which "sh")))
                      (substitute* (find-files "tests" "\\.sh$")
-                       (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                     #t))
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'remove-tests
-                           (lambda _
-                             (substitute* "Makefile.in"
+                       (("#!/bin/sh") (string-append "#!" (which "sh"))))))
+                 (add-after 'unpack 'remove-tests
+                   (lambda _
+                     ,@(if (hurd-target?)
+                           '((substitute* "Makefile.in"
                                ;; this test hangs
-                               (("^ *tests/misc/timeout-group.sh.*") ""))
-                             #t)))
-                       '()))))
+                               (("^ *tests/misc/timeout-group.sh.*") "")))
+                           '())
+                     (substitute* "Makefile.in"
+                       ;; fails on filesystems where inotify cannot be used,
+                       ;; more info in #47935
+                       (("^ *tests/tail-2/inotify-dir-recreate.sh.*") "")))))))
    (synopsis "Core GNU utilities (file, text, shell)")
    (description
     "GNU Coreutils package includes all of the basic command-line tools that
@@ -425,6 +413,7 @@ standard.")
     (inherit coreutils)
     (name "coreutils-minimal")
     (outputs '("out"))
+    (native-inputs '())
     (inputs '())))
 
 (define-public coreutils-8.30
@@ -452,8 +441,7 @@ standard.")
                 ;; specific issue, but "env-S.pl" is not adjusted for build
                 ;; environments with long prefixes (/tmp/guix-build-...).
                 (substitute* "Makefile"
-                  (("^.*tests/misc/env-S.pl.*$") ""))
-                #t)))))))))
+                  (("^.*tests/misc/env-S.pl.*$") "")))))))))))
 
 (define-public gnu-make
   (package
@@ -468,8 +456,8 @@ standard.")
               "06cfqzpqsvdnsxbysl5p2fgdgxgl9y4p7scpnrfa8z2zgkjdspz0"))
             (patches (search-patches "make-impure-dirs.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)))  ; to detect Guile
-   (inputs `(("guile" ,guile-3.0)))
+   (native-inputs (list pkg-config))              ;to detect Guile
+   (inputs (list guile-3.0))
    (outputs '("out" "debug"))
    (arguments
     `(,@(if (hurd-target?)
@@ -485,8 +473,7 @@ standard.")
               (substitute* "src/job.c"
                 (("default_shell =.*$")
                  (format #f "default_shell = \"~a/bin/sh\";\n"
-                         bash)))
-              #t))))))
+                         bash)))))))))
    (synopsis "Remake files automatically")
    (description
     "Make is a program that is used to control the production of
@@ -510,7 +497,7 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                (base32
                 "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn"))))
     (arguments
-     `(#:configure-flags '("CFLAGS=-D__alloca=alloca")
+     `(#:configure-flags '("CFLAGS=-D__alloca=alloca -D__stat=stat")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-default-shell
@@ -520,24 +507,22 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                (substitute* "job.c"
                  (("default_shell =.*$")
                   (format #f "default_shell = \"~a/bin/sh\";\n"
-                          bash)))
-               #t))))))))
+                          bash)))))))))))
 
 (define-public binutils
   (package
    (name "binutils")
-   (version "2.34")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnu/binutils/binutils-"
-                                version ".tar.bz2"))
-            (sha256
-             (base32
-              "1rin1f5c7wm4n3piky6xilcrpf2s0n3dd5vqq8irrxkcic3i1w49"))
-            (patches (search-patches "binutils-loongson-workaround.patch"))))
+   (version "2.37")
+   (source
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/binutils/binutils-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32 "1m3b2rdfv1dmdpd0bzg1hy7i8a2qng53szc6livyi3nh6101mz37"))
+      (patches (search-patches "binutils-loongson-workaround.patch"
+                               "binutils-2.37-file-descriptor-leak.patch"))))
    (build-system gnu-build-system)
-
-   ;; TODO: Add dependency on zlib + those for Gold.
    (arguments
     `(#:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
                           ;; on GCC when bootstrapping.
@@ -558,17 +543,7 @@ change.  GNU make offers many powerful extensions over the standard utility.")
 
                           ;; Make sure 'ar' and 'ranlib' produce archives in a
                           ;; deterministic fashion.
-                          "--enable-deterministic-archives")
-
-      ;; XXX: binutils 2.34 was mistakenly released without generated manuals:
-      ;; <https://sourceware.org/bugzilla/show_bug.cgi?id=25491>.  To avoid a
-      ;; circular dependency on texinfo, prevent the build system from creating
-      ;; the manuals by calling "true" instead of "makeinfo"...
-      #:make-flags '("MAKEINFO=true")))
-
-   ;; ...and "hide" this package so that users who install binutils get the
-   ;; version with documentation defined below.
-   (properties '((hidden? . #t)))
+                          "--enable-deterministic-archives")))
 
    (synopsis "Binary utilities: bfd gas gprof ld")
    (description
@@ -581,17 +556,22 @@ included.")
    (license gpl3+)
    (home-page "https://www.gnu.org/software/binutils/")))
 
-;; Work around a problem with binutils 2.34 whereby manuals are missing from
-;; the release tarball.  Remove this and the related code above when updating.
-(define-public binutils+documentation
-  (package/inherit
-   binutils
-   (native-inputs
-    `(("texinfo" ,texinfo)))
-   (arguments
-    (substitute-keyword-arguments (package-arguments binutils)
-      ((#:make-flags _ ''()) ''())))
-   (properties '())))
+;;; TODO: Merge into binutils on the next world rebuild.
+(define-public binutils-next
+  (package/inherit binutils
+    (name "binutils-next")
+    (version "2.37")
+    (arguments
+     (substitute-keyword-arguments (package-arguments binutils)
+       ((#:out-of-source? _ #f)         ;recommended in the README
+        #t)
+       ((#:configure-flags flags)
+        `(cons* "--enable-64-bit-bfd"
+                "--enable-compressed-debug-sections=all"
+                "--enable-lto"
+                "--enable-separate-code"
+                "--enable-threads"
+                ,flags))))))
 
 ;; FIXME: ath9k-firmware-htc-binutils.patch do not apply on 2.34 because of a
 ;; big refactoring of xtensa-modules.c (commit 567607c11fbf7105 upstream).
@@ -606,41 +586,34 @@ included.")
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1cmd0riv37bqy9mwbg6n3523qgr8b3bbm5kwj19sjrasl4yq9d0c"))))
+               "1cmd0riv37bqy9mwbg6n3523qgr8b3bbm5kwj19sjrasl4yq9d0c"))
+             (patches '())))
    (arguments
     (substitute-keyword-arguments (package-arguments binutils)
       ((#:make-flags _ ''()) ''())))
    (properties '())))
 
 (define-public binutils-gold
-  (package/inherit binutils+documentation
+  (package/inherit binutils-next
     (name "binutils-gold")
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-source-shebangs 'patch-more-shebangs
-           (lambda _
-             (substitute* "gold/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             #t)))
-       ,@(substitute-keyword-arguments (package-arguments binutils)
-         ; Upstream is aware of unrelocatable test failures on arm*.
-         ((#:tests? _ #f)
-          (if (any (cute string-prefix? <> (or (%current-target-system)
-                                               (%current-system)))
-                   '("i686" "x86_64"))
-              '#t '#f))
-         ((#:configure-flags flags)
-          `(cons* "--enable-gold=default"
-                 (delete "LDFLAGS=-static-libgcc" ,flags))))))
-     (native-inputs
-     `(("bc" ,bc)))
-     (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")))))
+     (substitute-keyword-arguments (package-arguments binutils)
+       ((#:configure-flags flags)
+        `(cons* "--enable-gold=default"
+                (delete "LDFLAGS=-static-libgcc" ,flags)))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'patch-source-shebangs 'patch-more-shebangs
+             (lambda _
+               (substitute* "gold/Makefile.in"
+                 (("/bin/sh") (which "sh")))))))))
+    (native-inputs
+     `(("bc" ,bc)))))
 
 (define* (make-ld-wrapper name #:key
                           (target (const #f))
                           binutils
+                          (linker "ld")
                           (guile (canonical-package guile-3.0))
                           (bash (canonical-package bash))
                           (guile-for-build guile))
@@ -650,7 +623,9 @@ wrapper uses GUILE and BASH.
 
 TARGET must be a one-argument procedure that, given a system type, returns a
 cross-compilation target triplet or #f.  When the result is not #f, make a
-wrapper for the cross-linker for that target, called 'TARGET-ld'."
+wrapper for the cross-linker for that target, called 'TARGET-ld'.  To use a
+different linker than the default \"ld\", such as \"ld.gold\" the linker name
+can be provided via the LINKER argument."
   ;; Note: #:system->target-triplet is a procedure so that the evaluation of
   ;; its result can be delayed until the 'arguments' field is evaluated, thus
   ;; in a context where '%current-system' is accurate.
@@ -675,8 +650,9 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'."
                      (let* ((out (assoc-ref %outputs "out"))
                             (bin (string-append out "/bin"))
                             (ld  ,(if target
-                                      `(string-append bin "/" ,target "-ld")
-                                      '(string-append bin "/ld")))
+                                      `(string-append bin "/" ,target "-"
+                                                      ,linker)
+                                      `(string-append bin "/" ,linker)))
                             (go  (string-append ld ".go")))
 
                        (setvbuf (current-output-port)
@@ -701,11 +677,10 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'."
                           (string-append (assoc-ref %build-inputs "binutils")
                                          ,(if target
                                               (string-append "/bin/"
-                                                             target "-ld")
-                                              "/bin/ld"))))
+                                                             target "-" linker)
+                                              (string-append "/bin/" linker)))))
                        (chmod ld #o555)
-                       (compile-file ld #:output-file go)
-                       #t)))))
+                       (compile-file ld #:output-file go))))))
     (synopsis "The linker wrapper")
     (description
      "The linker wrapper (or @code{ld-wrapper}) wraps the linker to add any
@@ -714,39 +689,31 @@ the store.")
     (home-page "https://www.gnu.org/software/guix//")
     (license gpl3+)))
 
-(export make-ld-wrapper)
-
 (define-public glibc
   ;; This is the GNU C Library, used on GNU/Linux and GNU/Hurd.  Prior to
   ;; version 2.28, GNU/Hurd used a different glibc branch.
   (package
    (name "glibc")
-   (version "2.31")
+   (version "2.33")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
             (sha256
              (base32
-              "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
-            (snippet
-             ;; Disable 'ldconfig' and /etc/ld.so.cache.  The latter is
-             ;; required on LFS distros to avoid loading the distro's libc.so
-             ;; instead of ours.
-             '(begin
-                (substitute* "sysdeps/unix/sysv/linux/configure"
-                  (("use_ldconfig=yes")
-                   "use_ldconfig=no"))
-                #t))
-            (modules '((guix build utils)))
-            (patches (search-patches "glibc-ldd-x86_64.patch"
-                                     "glibc-hidden-visibility-ldconfig.patch"
+              "1zvp0qdfbdyqrzydz18d9zg3n5ygy8ps7cmny1bvsp8h1q05c99f"))
+            (patches (search-patches "glibc-ldd-powerpc.patch"
+                                     "glibc-ldd-x86_64.patch"
+                                     "glibc-dl-cache.patch"
                                      "glibc-versioned-locpath.patch"
                                      "glibc-allow-kernel-2.6.32.patch"
                                      "glibc-reinstate-prlimit64-fallback.patch"
                                      "glibc-supported-locales.patch"
+                                     "glibc-cross-objdump.patch"
+                                     "glibc-cross-objcopy.patch" ;must come 2nd
                                      "glibc-hurd-clock_t_centiseconds.patch"
                                      "glibc-hurd-clock_gettime_monotonic.patch"
-                                     "glibc-hurd-signal-sa-siginfo.patch"))))
+                                     "glibc-hurd-mach-print.patch"
+                                     "glibc-hurd-gettyent.patch"))))
    (build-system gnu-build-system)
 
    ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
@@ -832,8 +799,7 @@ the store.")
                            (bash (or (assoc-ref inputs "static-bash")
                                      (assoc-ref native-inputs "static-bash"))))
                       ;; Install the rpc data base file under `$out/etc/rpc'.
-                      ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ];
-                      (substitute* "sunrpc/Makefile"
+                      (substitute* "inet/Makefile"
                         (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
                          (string-append out "/etc/rpc" suffix "\n"))
                         (("^install-others =.*$")
@@ -846,6 +812,11 @@ the store.")
                         ;; 4.7.1.
                         ((" -lgcc_s") ""))
 
+                      ;; Tell the ld.so cache code where the store is.
+                      (substitute* "elf/dl-cache.c"
+                        (("@STORE_DIRECTORY@")
+                         (string-append "\"" (%store-directory) "\"")))
+
                       ;; Have `system' use that Bash.
                       (substitute* "sysdeps/posix/system.c"
                         (("#define[[:blank:]]+SHELL_PATH.*$")
@@ -864,15 +835,6 @@ the store.")
                          (string-append "#define _PATH_BSHELL \""
                                         bash "/bin/sh\"\n")))
 
-                      ;; Nscd uses __DATE__ and __TIME__ to create a string to
-                      ;; make sure the client and server come from the same
-                      ;; libc.  Use something deterministic instead.
-                      (substitute* "nscd/nscd_stat.c"
-                        (("static const char compilation\\[21\\] =.*$")
-                         (string-append
-                          "static const char compilation[21] = \""
-                          (string-take (basename out) 20) "\";\n")))
-
                       ;; Make sure we don't retain a reference to the
                       ;; bootstrap Perl.
                       (substitute* "malloc/mtrace.pl"
@@ -881,9 +843,7 @@ the store.")
                          ;; "bilingual" eval/exec magic at the top of the file.
                          "")
                         (("exec @PERL@")
-                         "exec perl"))
-
-                      #t)))
+                         "exec perl")))))
 
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -921,17 +881,8 @@ the store.")
                                      ((out) static)))
                                  (filter linker-script?
                                          (map (cut string-append slib "/" <>)
-                                              files)))
-                       #t)))
-
-                 ,@(if (target-powerpc?)
-                     '((add-after 'unpack 'apply-patch
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (let ((patch (assoc-ref inputs
-                                                   "powerpc64le-patch")))
-                             (invoke "patch" "--force" "-p1"
-                                     "-i" patch)))))
-                     '())
+                                              files))))))
+
                  ,@(if (hurd-target?)
                        '((add-after 'install 'augment-libc.so
                            (lambda* (#:key outputs #:allow-other-keys)
@@ -939,8 +890,7 @@ the store.")
                                (substitute* (string-append out "/lib/libc.so")
                                  (("/[^ ]+/lib/libc.so.0.3")
                                   (string-append out "/lib/libc.so.0.3"
-                                                 " libmachuser.so libhurduser.so"))))
-                             #t)))
+                                                 " libmachuser.so libhurduser.so")))))))
                        '()))))
 
    (inputs `(("static-bash" ,static-bash)))
@@ -953,10 +903,6 @@ the store.")
                     ("gettext" ,gettext-minimal)
                     ("python" ,python-minimal)
 
-                    ,@(if (target-powerpc?)
-                        `(("powerpc64le-patch" ,@(search-patches
-                                                   "glibc-ldd-powerpc.patch")))
-                        '())
                     ,@(if (hurd-target?)
                           `(("mig" ,mig)
                             ("perl" ,perl))
@@ -985,17 +931,62 @@ with the Linux kernel.")
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
-(define-public glibc-2.30
+(define-public glibc-2.31
   (package
     (inherit glibc)
+    (version "2.31")
+    (source (origin
+              (inherit (package-source glibc))
+              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
+              (sha256
+               (base32
+                "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
+              (patches (search-patches
+                        "glibc-skip-c++.patch"
+                        "glibc-ldd-powerpc.patch"
+                        "glibc-ldd-x86_64.patch"
+                        "glibc-dl-cache.patch"
+                        "glibc-hidden-visibility-ldconfig.patch"
+                        "glibc-versioned-locpath.patch"
+                        "glibc-allow-kernel-2.6.32.patch"
+                        "glibc-reinstate-prlimit64-fallback.patch"
+                        "glibc-supported-locales.patch"
+                        "glibc-hurd-clock_t_centiseconds.patch"
+                        "glibc-2.31-hurd-clock_gettime_monotonic.patch"
+                        "glibc-hurd-signal-sa-siginfo.patch"
+                        "glibc-hurd-mach-print.patch"
+                        "glibc-hurd-gettyent.patch"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments glibc)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'set-etc-rpc-installation-directory
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Install the rpc data base file under `$out/etc/rpc'.
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* "sunrpc/Makefile"
+                   (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
+                    (string-append out "/etc/rpc" suffix "\n"))
+                   (("^install-others =.*$")
+                    (string-append "install-others = " out "/etc/rpc\n"))))))))))))
+
+(define-public glibc-2.30
+  (package
+    (inherit glibc-2.31)
     (version "2.30")
+    (native-inputs
+     ;; This fails with a build error in libc-tls.c when using GCC 10.  Use an
+     ;; older compiler.
+     (modify-inputs (package-native-inputs glibc)
+       (prepend gcc-8)))
     (source (origin
               (inherit (package-source glibc))
               (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
               (sha256
                (base32
                 "1bxqpg91d02qnaz837a5kamm0f43pr1il4r9pknygywsar713i72"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (search-patches "glibc-skip-c++.patch"
+                                       "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-19126.patch"
                                        "glibc-hidden-visibility-ldconfig.patch"
                                        "glibc-versioned-locpath.patch"
@@ -1005,7 +996,7 @@ with the Linux kernel.")
 
 (define-public glibc-2.29
   (package
-    (inherit glibc)
+    (inherit glibc-2.30)
     (version "2.29")
     (source (origin
               (inherit (package-source glibc))
@@ -1013,7 +1004,8 @@ with the Linux kernel.")
               (sha256
                (base32
                 "0jzh58728flfh939a8k9pi1zdyalfzlxmwra7k0rzji5gvavivpk"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (search-patches "glibc-skip-c++.patch"
+                                       "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-7309.patch"
                                        "glibc-CVE-2019-9169.patch"
                                        "glibc-2.29-git-updates.patch"
@@ -1023,46 +1015,6 @@ with the Linux kernel.")
                                        "glibc-reinstate-prlimit64-fallback.patch"
                                        "glibc-2.29-supported-locales.patch"))))))
 
-(define-public glibc-2.28
-  (package
-    (inherit glibc)
-    (version "2.28")
-    (source (origin
-              (inherit (package-source glibc))
-              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
-              (sha256
-               (base32
-                "10iha5ynvdj5m62vgpgqbq4cwvc2yhyl2w9yyyjgfxmdmx8h145i"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
-                                       "glibc-2.28-git-fixes.patch"
-                                       "glibc-hidden-visibility-ldconfig.patch"
-                                       "glibc-versioned-locpath.patch"
-                                       "glibc-allow-kernel-2.6.32.patch"
-                                       "glibc-reinstate-prlimit64-fallback.patch"
-                                       "glibc-hurd-magic-pid.patch"
-                                       "glibc-2.28-supported-locales.patch"))))))
-
-(define-public glibc-2.27
-  (package
-    (inherit glibc)
-    (version "2.27")
-    (source (origin
-              (inherit (package-source glibc))
-              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
-              (sha256
-               (base32
-                "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
-                                       "glibc-2.27-git-fixes.patch"
-                                       "glibc-hidden-visibility-ldconfig.patch"
-                                       "glibc-versioned-locpath.patch"
-                                       "glibc-allow-kernel-2.6.32.patch"
-                                       "glibc-reinstate-prlimit64-fallback.patch"
-                                       "glibc-2.27-supported-locales.patch"
-                                       "glibc-CVE-2018-11236.patch"
-                                       "glibc-CVE-2018-11237.patch"))))
-    (properties `((lint-hidden-cve . ("CVE-2017-18269")))))) ; glibc-2.27-git-fixes
-
 (define-public (make-gcc-libc base-gcc libc)
   "Return a GCC that targets LIBC."
   (package (inherit base-gcc)
@@ -1142,8 +1094,7 @@ to the @code{share/locale} sub-directory of this package.")
                                             (string-append (dirname directory)
                                                            "/" name "."
                                                            normalized)))))
-                             locales)
-                   #t)))
+                             locales))))
              (delete 'install)
              (delete 'move-static-libs)))
          ((#:configure-flags flags)
@@ -1200,8 +1151,7 @@ to the @code{share/locale} sub-directory of this package.")
                                                          locale ".UTF-8")))
                                ',locales)
                      #t))))
-    (native-inputs `(("glibc" ,glibc)
-                     ("gzip" ,gzip)))
+    (native-inputs (list glibc gzip))
     (synopsis (if default-locales?
                   (P_ "Small sample of UTF-8 locales")
                   (P_ "Customized sample of UTF-8 locales")))
@@ -1254,17 +1204,15 @@ command.")
   (package (inherit glibc)
     (name "glibc-hurd-headers")
     (outputs '("out"))
-    (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
-                         ("hurd-headers" ,hurd-headers)))
+    (propagated-inputs (list gnumach-headers hurd-headers))
     (native-inputs
-     `(("mig" ,(if (%current-target-system)
-                   ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
-                   ;; hence this hack.
-                   (package
-                     (inherit mig)
-                     (arguments `(#:system "i686-linux")))
-                   mig))
-       ,@(package-native-inputs glibc)))
+     (modify-inputs (package-native-inputs glibc)
+       (prepend (if (%current-target-system)
+                    ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
+                    ;; hence this hack.
+                    (package (inherit mig)
+                             (arguments `(#:system "i686-linux")))
+                    mig))))
     (arguments
      (substitute-keyword-arguments (package-arguments glibc)
        ;; We just pass the flags really needed to build the headers.
@@ -1283,8 +1231,7 @@ command.")
                (let ((out (assoc-ref outputs "out")))
                  (close-port
                   (open-output-file
-                   (string-append out "/include/gnu/stubs.h"))))
-               #t))
+                   (string-append out "/include/gnu/stubs.h"))))))
            (delete 'build)))))))                  ; nothing to build
 
 (define-public tzdata
@@ -1292,7 +1239,7 @@ command.")
     (name "tzdata")
     ;; This package should be kept in sync with python-pytz in (gnu packages
     ;; time).
-    (version "2021a")
+    (version "2021e")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1300,67 +1247,75 @@ command.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "022fn6gkmp7pamlgab04x0dm5hnyn2m2fcnyr3pvm36612xd5rrr"))))
+               "1cdjdcxl0s9xf0dg1z64kh7llm80byxqlzrkkjzcdlyh6yvl5v07"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f
-       #:make-flags (let ((out (assoc-ref %outputs "out"))
-                          (tmp (getenv "TMPDIR")))
-                      (list (string-append "TOPDIR=" out)
-                            (string-append "TZDIR=" out "/share/zoneinfo")
-                            (string-append "TZDEFAULT=" out
-                                           "/share/zoneinfo/localtime")
-
-                            ;; Likewise for the C library routines.
-                            (string-append "LIBDIR=" tmp "/lib")
-                            (string-append "MANDIR=" tmp "/man")
-
-                            ;; XXX: tzdata 2020b changed the on-disk format
-                            ;; of the time zone files from 'fat' to 'slim'.
-                            ;; Many packages (particularly evolution-data-server)
-                            ;; can not yet handle the latter, so we stick with
-                            ;; 'fat' for now.
-                            ,@(if (version>=? (package-version this-package)
-                                              "2020b")
-                                  '("CPPFLAGS=-DZIC_BLOAT_DEFAULT='\"fat\"'")
-                                  '())
-
-                            "AWK=awk"
-                            "CC=gcc"))
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'unpack
-           (lambda* (#:key source inputs #:allow-other-keys)
-             (invoke "tar" "xvf" source)
-             (invoke "tar" "xvf" (assoc-ref inputs "tzcode"))))
-         (add-after 'install 'post-install
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Move data in the right place.
-             (let ((out (assoc-ref outputs "out")))
-               ;; Discard zic, dump, and tzselect, already
-               ;; provided by glibc.
-               (delete-file-recursively (string-append out "/usr"))
-               (symlink (string-append out "/share/zoneinfo")
-                        (string-append out "/share/zoneinfo/posix"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-posix"))
-               (copy-recursively (string-append out "/share/zoneinfo-leaps")
-                                 (string-append out "/share/zoneinfo/right"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-leaps"))
-               #t)))
-         (delete 'configure))))
-    (inputs `(("tzcode" ,(origin
-                          (method url-fetch)
-                          (uri (string-append
-                                "https://data.iana.org/time-zones/releases/tzcode"
-                                version ".tar.gz"))
-                          (sha256
-                           (base32
-                            "1l02b0jiwp3fl0xd6227i69d26rmx3yrnq0ssq9vvdmm4jhvyipb"))))))
+     (list #:tests? #f
+
+           ;; This consists purely of (architecture-independent) data, so
+           ;; ‘cross-compilation’ is pointless here!  (The binaries zic,
+           ;; dump, and tzselect are deleted in the post-install phase.)
+           #:target #f
+
+           #:make-flags
+           #~(let ((out #$output)
+                   (tmp (getenv "TMPDIR")))
+               (list (string-append "TOPDIR=" out)
+                     (string-append "TZDIR=" out "/share/zoneinfo")
+                     (string-append "TZDEFAULT=" out
+                                    "/share/zoneinfo/localtime")
+
+                     ;; Likewise for the C library routines.
+                     (string-append "LIBDIR=" tmp "/lib")
+                     (string-append "MANDIR=" tmp "/man")
+
+                     ;; XXX: tzdata 2020b changed the on-disk format
+                     ;; of the time zone files from 'fat' to 'slim'.
+                     ;; Many packages (particularly evolution-data-server)
+                     ;; can not yet handle the latter, so we stick with
+                     ;; 'fat' for now.
+                     #$@(if (version>=? (package-version this-package)
+                                        "2020b")
+                            '("CPPFLAGS=-DZIC_BLOAT_DEFAULT='\"fat\"'")
+                            '())
+
+                     "AWK=awk"
+                     "CC=gcc"))
+           #:modules '((guix build utils)
+                       (guix build gnu-build-system)
+                       (srfi srfi-1))
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'unpack
+                 (lambda* (#:key source inputs #:allow-other-keys)
+                   (invoke "tar" "xvf" source)
+                   (invoke "tar" "xvf"
+                           #$(match (package-inputs this-package)
+                               (((_ tzcode)) tzcode)))))
+               (add-after 'install 'post-install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Move data in the right place.
+                   (let ((out (assoc-ref outputs "out")))
+                     ;; Discard zic, dump, and tzselect, already
+                     ;; provided by glibc.
+                     (delete-file-recursively (string-append out "/usr"))
+                     (symlink (string-append out "/share/zoneinfo")
+                              (string-append out "/share/zoneinfo/posix"))
+                     (delete-file-recursively
+                      (string-append out "/share/zoneinfo-posix"))
+                     (copy-recursively (string-append out "/share/zoneinfo-leaps")
+                                       (string-append out "/share/zoneinfo/right"))
+                     (delete-file-recursively
+                      (string-append out "/share/zoneinfo-leaps")))))
+               (delete 'configure))))
+    (inputs (list (origin
+                    (method url-fetch)
+                    (uri (string-append
+                          "https://data.iana.org/time-zones/releases/tzcode"
+                          version ".tar.gz"))
+                    (sha256
+                     (base32
+                      "0x8pcfmjvxk29yfh8bklchv2f0vpl4yih0gc4wyx292l78wncijq")))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
@@ -1375,28 +1330,10 @@ and daylight-saving rules.")
 ;;; thousands of packages (for example, in a core-updates rebuild). This package
 ;;; will typically be obsolete and should never be referred to by a built
 ;;; package.
-(define-public tzdata-for-tests
-  (hidden-package
-   (package
-     (inherit tzdata)
-     (version "2019c")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append
-                     "https://data.iana.org/time-zones/releases/tzdata"
-                     version ".tar.gz"))
-               (sha256
-                (base32
-                 "0z7w1yv37cfk8yhix2cillam091vgp1j4g8fv84261q9mdnq1ivr"))))
-     (inputs
-      `(("tzcode" ,(origin
-                     (method url-fetch)
-                     (uri (string-append
-                           "https://data.iana.org/time-zones/releases/tzcode"
-                           version ".tar.gz"))
-                     (sha256
-                      (base32
-                       "1m3y2rnf1nggxxhxplab5zdd5whvar3ijyrv7lifvm82irkd7szn")))))))))
+;;;
+;;; Please make this a hidden-package if it is different from the primary tzdata
+;;; package.
+(define-public tzdata-for-tests tzdata)
 
 (define-public libiconv
   (package
@@ -1413,11 +1350,9 @@ and daylight-saving rules.")
               (snippet
                ;; Work around "declared gets" error on glibc systems (fixed by
                ;; Gnulib commit 66712c23388e93e5c518ebc8515140fa0c807348.)
-               '(begin
-                  (substitute* "srclib/stdio.in.h"
-                    (("^#undef gets") "")
-                    (("^_GL_WARN_ON_USE \\(gets.*") ""))
-                  #t))))
+               '(substitute* "srclib/stdio.in.h"
+                  (("^#undef gets") "")
+                  (("^_GL_WARN_ON_USE \\(gets.*") "")))))
     (build-system gnu-build-system)
     (synopsis "Character set conversion library")
     (description
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index ed2931fd97..cf40ee94f6 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,7 +58,7 @@
 
 (define (patch-url seqno)
   "Return the URL of Bash patch number SEQNO."
-  (format #f "mirror://gnu/bash/bash-5.0-patches/bash50-~3,'0d" seqno))
+  (format #f "mirror://gnu/bash/bash-5.1-patches/bash51-~3,'0d" seqno))
 
 (define (bash-patch seqno sha256-bv)
   "Return the origin of Bash patch SEQNO, with expected hash SHA256-BV."
@@ -70,26 +71,18 @@
   (list (bash-patch seqno (base32 hash))
         ...))
 
-(define %patch-series-5.0
+(define %patch-series-5.1
   ;; This is the current patches series for 5.0, generated using
   ;; 'download-patches' below.
   (patch-series
-    (1 "12bjfdy6bg8nhyw27bdgxn7h4paylx8d927skfmi9pxd1wgrxzpj")
-    (2 "01w7yrzmz10mw06ys0546vhl7isv2v402ziyvfd7k67588spvs47")
-    (3 "0ny81ridp5n0j69hb8ixrc7dmxybby54jbsz5hikly8kgg1wvssf")
-    (4 "021gqqvgydixkrmqss64b6srfdlkvnx88lyfzpxfrn5d6bc7li0l")
-    (5 "0xl2kyzm84nlyklrqzkn73ixabhzfhn9x91lzcmis89cppclvxav")
-    (6 "0844749ixk1z60437nkznzms1f0nzh9an62kj7sny6r0zyk2k1fn")
-    (7 "16xg37gp1b8zlj5969w8mcrparwqlcbj9695vn3qhgb7wdz1xd0p")
-    (8 "1qyp19krjh8zxvb0jgwmyjz40djslwcf4xi7kc1ab0iaca44bipf")
-    (9 "00yrjjqd95s81b21qq3ba1y7h879q8jaajlkjggc6grhcwbs4g7d")
-    (10 "04ca5bjv456v538mkspzvn4xb2zdphh31r4fpvfm9p5my0jw7yyn")
-    (11 "1sklyixvsv8993kxzs0jigacpdchjrq7jv5xpdx7kbqyp4rf6k9c")
-    (12 "0cz21qg2gbr40lfgza7g02bqi2qknwqgxnq459pjj640d0cywhr9")
-    (13 "16h9nwz3yzwj7fnxvlidjymdc4yr30h818433gh9j1x3in6igmzm")
-    (14 "12gm5bvv2pd3m72z2ilj26pa08c61az253dsgfl24vpf2ijywvjx")
-    (15 "0pm0px758w4i23s55wajcv6lqfiym7zgxvq0pxf6vclkv8nxy5x5")
-    (16 "0vdha332km2iwx8g2ld15jy7d24cbplzgr1531dpzylr9ajxglgz")))
+   (1 "1ymm8ppss6gyh9ifznjwiabrb4k91npd09c10y7mk66xp8yppc7b")
+   (2 "1gjx9zqcm407am3n2sh44b8dxm48kgm15rzfiijqxr01m0hn3shm")
+   (3 "1cdnpbfc64yhvkjj4d12s9ywp11g195vzfl1cab24sq55wkcrwi2")
+   (4 "11iwhy6v562bv0kk7lwj7f5jj65ma9bblivy0v02h3ggcibbdbls")
+   (5 "19bdyigdr81824nxvqr6a7k0cax60wq7376j6b91afbnwvlvbjyc")
+   (6 "051x8wlwrqk0yr0zg378vh824iklfl5g9pkmcdf62qp8gn9pvqbm")
+   (7 "0fir80pp1gmlpadmqcgkrv4y119pc7xllchjzg05fd7px73viz5c")
+   (8 "1lfjgshk8i9vch92p5wgc9r90j3phw79aa7gbai89w183b2z6b7j")))
 
 (define (download-patches store count)
   "Download COUNT Bash patches into store.  Return a list of
@@ -125,7 +118,7 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                " -Wl,-rpath -Wl,"
                (assoc-ref %build-inputs "ncurses")
                "/lib")))
-         (version "5.0"))
+         (version "5.1"))
     (package
      (name "bash")
      (source (origin
@@ -134,18 +127,17 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                     "mirror://gnu/bash/bash-" version ".tar.gz"))
               (sha256
                (base32
-                "0kgvfwqdcd90waczf4gx39xnrxzijhjrzyzv7s8v4w31qqm0za5l"))
+                "1alv68wplnfdm6mh39hm57060xgssb9vqca4yr1cyva0c342n0fc"))
               (patch-flags '("-p0"))
               (patches (cons (search-patch "bash-linux-pgrp-pipe.patch")
-                             %patch-series-5.0))))
-     (version (string-append version "." (number->string (length %patch-series-5.0))))
+                             %patch-series-5.1))))
+     (version (string-append version "." (number->string (length %patch-series-5.1))))
      (build-system gnu-build-system)
 
      (outputs '("out"
                 "doc"                         ;1.7 MiB of HTML and extra files
                 "include"))                   ;headers used by extensions
-     (inputs `(("readline" ,readline)
-               ("ncurses" ,ncurses)))             ;TODO: add texinfo
+     (inputs (list readline ncurses))             ;TODO: add texinfo
      (arguments
       `(;; When cross-compiling, `configure' incorrectly guesses that job
         ;; control is missing.
@@ -292,7 +284,7 @@ without modification.")
               (patches
                (search-patches "bash-completion-directories.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("util-linux" ,util-linux)))
+    (native-inputs (list util-linux))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after
@@ -385,10 +377,8 @@ capturing.")
                (base32
                 "0f59zh4d4pa1a7ybs5zl6h0csbqqv11lbnq0jl1dgwm1s6p49bsq"))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("guile" ,guile-3.0) ;for wrap-script
-       ("grep" ,grep)))
+     (list bash coreutils guile-3.0 ;for wrap-script
+           grep))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -409,6 +399,7 @@ capturing.")
          ;; Install phase
          (invoke "./install.sh" %output)
          (wrap-script (string-append %output "/bin/bats")
+                      #:guile (search-input-file %build-inputs "bin/guile")
                       (list "PATH" 'prefix (string-split (getenv "PATH")
                                                          #\:))))))
     (build-system trivial-build-system)
@@ -434,14 +425,14 @@ in Bash, but you can use it to test any UNIX program.")
         (base32 "0s1sifqzqmr0dnciv06yqrpzgj11d7n0gy5zaxh6b3x8bx7k75l8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("elfutils" ,elfutils)
-       ("libelf" ,libelf)
-       ("libffi" ,libffi)
-       ("zlib" ,zlib)
-       ;; Require a bash with C plugin support to build.
-       ("bash" ,bash)))
+     (list elfutils
+           libelf
+           libffi
+           zlib
+           ;; Require a bash with C plugin support to build.
+           bash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/taviso/ctypes.sh")
     (synopsis "Foreign function interface for Bash")
     (description "Bash-ctypes is a Bash plugin that provides a foreign
diff --git a/gnu/packages/batik.scm b/gnu/packages/batik.scm
index 9cff05d949..2072dd467c 100644
--- a/gnu/packages/batik.scm
+++ b/gnu/packages/batik.scm
@@ -84,7 +84,7 @@ public interface TimeEvent extends Event {
 ")))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SAC interface for CSS parsers in Java")
     (description "This package provides a SAC interface by the W3C.
@@ -136,9 +136,9 @@ public interface EventListenerInitializer {
 ")))
              #t)))))
     (propagated-inputs
-     `(("java-w3c-smil" ,java-w3c-smil-3.0)))
+     (list java-w3c-smil-3.0))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SVG 1.0 interface")
     (description "This package provides a SVG 1.0 interface.")
@@ -189,7 +189,7 @@ public interface EventListenerInitializer {
            (lambda* (#:key source #:allow-other-keys)
              (invoke "unzip" source))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.w3.org/Style/CSS/SAC/")
     (synopsis "W3C SAC interface for CSS parsers in Java")
     (description "This package provides a SAC interface by the W3C.
@@ -248,8 +248,7 @@ SAC is an interface for CSS parsers.")
        ("java-mockito" ,java-mockito-1)
        ("java-objenesis" ,java-objenesis)))
     (propagated-inputs
-     `(("java-commons-io" ,java-commons-io)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-io java-commons-logging-minimal))
     (home-page "https://xmlgraphics.apache.org/commons/")
     (synopsis "XMLGraphics constants")
     (description "This package provides XMLGraphics constants (originally
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index ecac5b9368..2698d56da0 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -46,17 +46,21 @@
       (list
        ;; Install gc_cpp.h et al.
        "--enable-cplusplus"
-       ;; In GNU/Hurd systems during the 'Check' phase,
+
+       ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
+       "--disable-munmap"
+
+       ;; In GNU/Hurd systems during the 'check' phase,
        ;; there is a deadlock caused by the 'gctest' test.
        ;; To disable the error set "--disable-gcj-support"
        ;; to configure script. See bug report and discussion:
        ;; <https://lists.opendylan.org/pipermail/bdwgc/2017-April/006275.html>
        ;; <https://lists.gnu.org/archive/html/bug-hurd/2017-01/msg00008.html>
-       ,@(if (hurd-triplet? (or (%current-system)
-                                (%current-target-system)))
+       ,@(if (target-hurd? (or (%current-system)
+                               (%current-target-system)))
              '("--disable-gcj-support")
              '()))))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (native-inputs (list pkg-config))
    (propagated-inputs
     (if (%current-target-system)
         ;; The build system refuses to check for compiler intrinsics when
@@ -85,17 +89,6 @@ C or C++ programs, though that is not its primary goal.")
 
    (license (x11-style (string-append home-page "license.txt")))))
 
-(define-public libgc/disable-munmap
-  ;; TODO: Use '--disable-munmap' by default on next rebuild cycle.
-  (package/inherit libgc
-    (arguments
-     ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
-     (substitute-keyword-arguments (package-arguments libgc)
-       ((#:configure-flags flags ''())
-        `(cons "--disable-munmap" ,flags))))
-    (properties `((hidden? . #t)
-                  ,@(package-properties libgc)))))
-
 ;; TODO: Add a static output in libgc in the next rebuild cycle.
 (define-public libgc/static-libs
   (package/inherit
@@ -116,7 +109,7 @@ C or C++ programs, though that is not its primary goal.")
              (sha256
               (base32
                "10jhhi79d5brwlsyhwgpnrmc8nhlf7aan2lk9xhgihk5jc6srbvc"))))
-   (propagated-inputs `(("libatomic-ops" ,libatomic-ops)))))
+   (propagated-inputs (list libatomic-ops))))
 
 (define-public libgc/back-pointers
   (package/inherit
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index fdb00ca538..b3be9bfed4 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -94,9 +94,7 @@
                          (find-files oldbin script?))))))))
     (outputs '("out" "utils"))
     (inputs
-     `(("libaio" ,libaio)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list libaio python zlib))
     (home-page "https://github.com/axboe/fio")
     (synopsis "Flexible I/O tester")
     (description
@@ -132,7 +130,7 @@ is to write a job file matching the I/O load one wants to simulate.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -241,7 +239,7 @@ tests.")
                 "010bmlmi0nrlp3aq7p624sfaj5a65lswnyyxk3cnz1bqig0cn2vf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments '(#:tests? #f)) ; there are no tests
     (home-page "https://doc.coker.com.au/projects/bonnie/")
     (synopsis "Hard drive and file system benchmark suite")
@@ -298,20 +296,18 @@ file metadata operations that can be performed per second.")
                             "not test_custom_exit_code"
                             "not test_webserver") " and ")))))))
     (propagated-inputs
-     `(("python-configargparse" ,python-configargparse)
-       ("python-flask" ,python-flask)
-       ("python-flask-basicauth" ,python-flask-basicauth)
-       ("python-gevent" ,python-gevent)
-       ("python-geventhttpclient" ,python-geventhttpclient)
-       ("python-msgpack" ,python-msgpack)
-       ("python-psutil" ,python-psutil)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-configargparse
+           python-flask
+           python-flask-basicauth
+           python-gevent
+           python-geventhttpclient
+           python-msgpack
+           python-psutil
+           python-pyzmq
+           python-requests
+           python-werkzeug))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyquery" ,python-pyquery)
-       ("python-pytest" ,python-pytest))) ;for more easily skipping tests
+     (list python-mock python-pyquery python-pytest)) ;for more easily skipping tests
     (home-page "https://locust.io/")
     (synopsis "Distributed load testing framework")
     (description "Locust is a performance testing tool that aims to be easy to
@@ -383,8 +379,7 @@ and options.  With careful benchmarking, different hardware can be compared.")
       (build-system cmake-build-system)
       (home-page "https://github.com/krrishnarraj/clpeak")
       (inputs
-        `(("opencl-clhpp" ,opencl-clhpp)
-          ("opencl-icd-loader" ,opencl-icd-loader)))
+        (list opencl-clhpp opencl-icd-loader))
       (synopsis "OpenCL benchmark tool")
       (description
         "A synthetic benchmarking tool to measure peak capabilities of OpenCL
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 6c5b633c36..ab34958cf7 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -73,7 +73,7 @@
      `((upstream-name . "org.EcK12.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/org.EcK12.eg.db")
     (synopsis "Genome wide annotation for E coli strain K12")
     (description
@@ -103,7 +103,7 @@ analysis.")
     (properties `((upstream-name . "org.Bt.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/org.Bt.eg.db")
     (synopsis "Genome wide annotation for Bovine")
     (description
@@ -125,7 +125,7 @@ based on mapping using Entrez Gene identifiers.")
     (properties `((upstream-name . "reactome.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/reactome.db/")
     (synopsis "Annotation maps for reactome")
     (description
@@ -148,7 +148,7 @@ database, assembled using data from REACTOME.")
      `((upstream-name . "BSgenome.Btaurus.UCSC.bosTau8")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Btaurus.UCSC.bosTau8/")
     (synopsis "Full genome sequences for Bos taurus (UCSC version bosTau8)")
@@ -171,7 +171,7 @@ taurus (UCSC version bosTau8).")
      `((upstream-name . "BSgenome.Celegans.UCSC.ce6")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce6/")
     (synopsis "Full genome sequences for Worm")
@@ -196,7 +196,7 @@ objects.")
      `((upstream-name . "BSgenome.Celegans.UCSC.ce10")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce10/")
     (synopsis "Full genome sequences for Worm")
@@ -221,7 +221,7 @@ objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm6")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm6/")
     (synopsis "Full genome sequences for Fly")
@@ -246,7 +246,7 @@ objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm3/")
     (synopsis "Full genome sequences for Fly")
@@ -271,9 +271,7 @@ Biostrings objects.")
      `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm3.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-dmelanogaster-ucsc-dm3"
-        ,r-bsgenome-dmelanogaster-ucsc-dm3)))
+     (list r-bsgenome r-bsgenome-dmelanogaster-ucsc-dm3))
     (home-page "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm3.masked/")
     (synopsis "Full masked genome sequences for Fly")
     (description
@@ -301,7 +299,7 @@ Finder (TRF mask).  Only the AGAPS and AMB masks are \"active\" by default.")
     (properties `((upstream-name . "BSgenome.Drerio.UCSC.danRer11")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page "https://bioconductor.org/packages/BSgenome.Drerio.UCSC.danRer11")
     (synopsis "Full genome sequences for Danio rerio (UCSC version danRer11)")
     (description
@@ -324,7 +322,7 @@ as provided by UCSC (danRer11, May 2017) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Hsapiens.1000genomes.hs37d5")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.1000genomes.hs37d5/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -347,7 +345,7 @@ as provided by UCSC (danRer11, May 2017) and stored in Biostrings objects.")
          "0y75qdq578fh6420vbvsbwmdw8jvr3g06qli2h3vj3pxmjykh9c1"))))
     (properties `((upstream-name . "BSgenome.Hsapiens.NCBI.GRCh38")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-bsgenome" ,r-bsgenome)))
+    (propagated-inputs (list r-bsgenome))
     (home-page
      "https://bioconductor.org/packages/release/data/annotation/html/\
 BSgenome.Hsapiens.NCBI.GRCh38.html")
@@ -372,9 +370,7 @@ provided by NCBI (GRCh38, 2013-12-17) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg19.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19"
-        ,r-bsgenome-hsapiens-ucsc-hg19)))
+     (list r-bsgenome r-bsgenome-hsapiens-ucsc-hg19))
     (home-page "https://bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg19.masked/")
     (synopsis "Full masked genome sequences for Homo sapiens")
     (description
@@ -403,7 +399,7 @@ default.")
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm9")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm9/")
     (synopsis "Full genome sequences for Mouse")
@@ -427,9 +423,7 @@ provided by UCSC (mm9, July 2007) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm9.masked")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-mmusculus-ucsc-mm9"
-        ,r-bsgenome-mmusculus-ucsc-mm9)))
+     (list r-bsgenome r-bsgenome-mmusculus-ucsc-mm9))
     (home-page "https://bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm9.masked/")
     (synopsis "Full masked genome sequences for Mouse")
     (description
@@ -458,7 +452,7 @@ default."  )
      `((upstream-name . "BSgenome.Mmusculus.UCSC.mm10")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Mmusculus.UCSC.mm10/")
     (synopsis "Full genome sequences for Mouse")
@@ -501,7 +495,7 @@ ID and species.  It is used by functions in the GenomeInfoDb package.")
      `((upstream-name . "GO.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/GO.db")
     (synopsis "Annotation maps describing the entire Gene Ontology")
     (description
@@ -523,12 +517,12 @@ information about the latest version of the Gene Ontologies.")
      `((upstream-name . "Homo.sapiens")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-go-db" ,r-go-db)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene" ,r-txdb-hsapiens-ucsc-hg19-knowngene)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-genomicfeatures
+           r-go-db
+           r-org-hs-eg-db
+           r-txdb-hsapiens-ucsc-hg19-knowngene
+           r-organismdbi
+           r-annotationdbi))
     (home-page "https://bioconductor.org/packages/Homo.sapiens/")
     (synopsis "Annotation package for the Homo.sapiens object")
     (description
@@ -550,13 +544,12 @@ several related annotation packages.")
     (properties `((upstream-name . "Mus.musculus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-go-db" ,r-go-db)
-       ("r-org-mm-eg-db" ,r-org-mm-eg-db)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-txdb-mmusculus-ucsc-mm10-knowngene"
-        ,r-txdb-mmusculus-ucsc-mm10-knowngene)))
+     (list r-annotationdbi
+           r-genomicfeatures
+           r-go-db
+           r-org-mm-eg-db
+           r-organismdbi
+           r-txdb-mmusculus-ucsc-mm10-knowngene))
     (home-page "https://bioconductor.org/packages/Mus.musculus")
     (synopsis "Annotation package for the Mus.musculus object")
     (description
@@ -578,7 +571,7 @@ from several related annotation packages.")
      `((upstream-name . "org.Ce.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Ce.eg.db/")
     (synopsis "Genome wide annotation for Worm")
     (description
@@ -600,7 +593,7 @@ annotations for the genome of the model worm Caenorhabditis elegans.")
      `((upstream-name . "org.Dm.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Dm.eg.db/")
     (synopsis "Genome wide annotation for Fly")
     (description
@@ -622,7 +615,7 @@ annotations for the genome of the model fruit fly Drosophila melanogaster.")
      `((upstream-name . "org.Dr.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Dr.eg.db/")
     (synopsis "Annotation for Zebrafish")
     (description
@@ -644,7 +637,7 @@ based on mapping using Entrez Gene identifiers.")
      `((upstream-name . "org.Hs.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Hs.eg.db/")
     (synopsis "Genome wide annotation for Human")
     (description
@@ -666,7 +659,7 @@ on mapping using Entrez Gene identifiers.")
      `((upstream-name . "org.Mm.eg.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/org.Mm.eg.db/")
     (synopsis "Genome wide annotation for Mouse")
     (description
@@ -689,7 +682,7 @@ annotations for the genome of the model mouse Mus musculus.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg19/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -713,7 +706,7 @@ by UCSC (hg19, February 2009) and stored in Biostrings objects.")
      `((upstream-name . "BSgenome.Hsapiens.UCSC.hg38")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)))
+     (list r-bsgenome))
     (home-page
      "https://www.bioconductor.org/packages/BSgenome.Hsapiens.UCSC.hg38/")
     (synopsis "Full genome sequences for Homo sapiens")
@@ -737,7 +730,7 @@ as provided by UCSC (hg38, Dec. 2013) and stored in Biostrings objects.")
      `((upstream-name . "EnsDb.Hsapiens.v75")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ensembldb" ,r-ensembldb)))
+     (list r-ensembldb))
     (home-page "https://bioconductor.org/packages/EnsDb.Hsapiens.v75")
     (synopsis "Ensembl based annotation package")
     (description
@@ -760,8 +753,7 @@ as provided by UCSC (hg38, Dec. 2013) and stored in Biostrings objects.")
      `((upstream-name . "TxDb.Dmelanogaster.UCSC.dm6.ensGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-annotationdbi r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Dmelanogaster.UCSC.dm6.ensGene")
     (synopsis "Annotation package for TxDb object(s)")
@@ -785,7 +777,7 @@ exposing these as TxDb objects.")
      `((upstream-name . "TxDb.Hsapiens.UCSC.hg19.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Hsapiens.UCSC.hg19.knownGene/")
     (synopsis "Annotation package for human genome in TxDb format")
@@ -810,7 +802,7 @@ track.  The database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Hsapiens.UCSC.hg38.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-genomicfeatures))
     (home-page
      "https://bioconductor.org/packages/TxDb.Hsapiens.UCSC.hg38.knownGene/")
     (synopsis "Annotation package for human genome in TxDb format")
@@ -835,8 +827,7 @@ track.  The database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Mmusculus.UCSC.mm9.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-genomicfeatures r-annotationdbi))
     (home-page
      "https://bioconductor.org/packages/TxDb.Mmusculus.UCSC.mm9.knownGene/")
     (synopsis "Annotation package for mouse genome in TxDb format")
@@ -861,9 +852,7 @@ database is exposed as a @code{TxDb} object.")
      `((upstream-name . "TxDb.Mmusculus.UCSC.mm10.knownGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)))
+     (list r-bsgenome r-genomicfeatures r-annotationdbi))
     (home-page
      "https://bioconductor.org/packages/TxDb.Mmusculus.UCSC.mm10.knownGene/")
     (synopsis "Annotation package for TxDb knownGene object(s) for Mouse")
@@ -890,8 +879,7 @@ based on the knownGene track.")
      `((upstream-name . "TxDb.Celegans.UCSC.ce6.ensGene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-annotationdbi r-genomicfeatures))
     (home-page "https://bioconductor.org/packages/TxDb.Celegans.UCSC.ce6.ensGene/")
     (synopsis "Annotation package for C elegans TxDb objects")
     (description
@@ -914,11 +902,8 @@ by exposing these as TxDb objects.")
      `((upstream-name . "FDb.InfiniumMethylation.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene" ,r-txdb-hsapiens-ucsc-hg19-knowngene)))
+     (list r-biostrings r-genomicfeatures r-annotationdbi r-org-hs-eg-db
+           r-txdb-hsapiens-ucsc-hg19-knowngene))
     (home-page "https://bioconductor.org/packages/FDb.InfiniumMethylation.hg19/")
     (synopsis "Compiled HumanMethylation27 and HumanMethylation450 annotations")
     (description
@@ -942,7 +927,7 @@ annotations.")
      `((upstream-name . "IlluminaHumanMethylationEPICmanifest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-minfi" ,r-minfi)))
+     (list r-minfi))
     (home-page "https://bioconductor.org/packages/IlluminaHumanMethylationEPICmanifest/")
     (synopsis "Manifest for Illumina's EPIC methylation arrays")
     (description
@@ -963,7 +948,7 @@ annotations.")
      `((upstream-name . "DO.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/DO.db/")
     (synopsis "Annotation maps describing the entire Disease Ontology")
     (description
@@ -985,7 +970,7 @@ Disease Ontology.")
     (properties `((upstream-name . "PFAM.db")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://bioconductor.org/packages/PFAM.db")
     (synopsis "Set of protein ID mappings for PFAM")
     (description
@@ -1009,12 +994,12 @@ using data from public repositories.")
      `((upstream-name . "phastCons100way.UCSC.hg19")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-genomicscores
+           r-iranges
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/phastCons100way.UCSC.hg19")
     (synopsis "UCSC phastCons conservation scores for hg19")
     (description
@@ -1040,7 +1025,7 @@ species.")
      `((upstream-name . "ABAData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)))
+     (list r-annotationdbi))
     (home-page "https://www.bioconductor.org/packages/ABAData/")
     (synopsis "Gene expression in human brain regions from Allen Brain Atlas")
     (description
@@ -1087,29 +1072,29 @@ All datasets are restricted to protein coding genes.")
                 "0xn8952fkchhx7m8dam6gjy86j551xp1cs67510s1qrmfgzpkjp0"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-aneufinderdata" ,r-aneufinderdata)
-       ("r-ecp" ,r-ecp)
-       ("r-foreach" ,r-foreach)
-       ("r-doparallel" ,r-doparallel)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-bamsignals" ,r-bamsignals)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-reordercluster" ,r-reordercluster)
-       ("r-mclust" ,r-mclust)
-       ("r-cowplot" ,r-cowplot)))
+     (list r-knitr))
+    (propagated-inputs
+     (list r-genomicranges
+           r-aneufinderdata
+           r-ecp
+           r-foreach
+           r-doparallel
+           r-biocgenerics
+           r-s4vectors
+           r-genomeinfodb
+           r-iranges
+           r-rsamtools
+           r-bamsignals
+           r-dnacopy
+           r-biostrings
+           r-genomicalignments
+           r-ggplot2
+           r-reshape2
+           r-ggdendro
+           r-ggrepel
+           r-reordercluster
+           r-mclust
+           r-cowplot))
     (home-page "https://bioconductor.org/packages/AneuFinder/")
     (synopsis "Copy number variation analysis in single-cell-sequencing data")
     (description "This package implements functions for copy number variant
@@ -1152,10 +1137,8 @@ from Illumina 450k methylation arrays.")
      `((upstream-name . "biscuiteerData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-curl" ,r-curl)
-       ("r-experimenthub" ,r-experimenthub)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub r-curl r-experimenthub))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/biscuiteerData")
     (synopsis "Data package for Biscuiteer")
     (description
@@ -1250,8 +1233,7 @@ GenomicRanges Bioconductor package.")
      `((upstream-name . "geneLenDataBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rtracklayer" ,r-rtracklayer)
-       ("r-genomicfeatures" ,r-genomicfeatures)))
+     (list r-rtracklayer r-genomicfeatures))
     (home-page "https://bioconductor.org/packages/geneLenDataBase/")
     (synopsis "Lengths of mRNA transcripts for a number of genomes")
     (description
@@ -1276,7 +1258,7 @@ genomes and gene ID formats, largely based on the UCSC table browser.")
     ;; make sense to build substitutes.
     (arguments `(#:substitutable? #f))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioinformatics.mdc-berlin.de/genomation/")
     (synopsis "Experimental data for use with the genomation package")
     (description
@@ -1299,10 +1281,7 @@ downloaded from Encode.")
                 "0h124i2fb2lbj2k48zzf1n7ldqa471bs26fbd9vw50299aqx28x0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocstyle" ,r-biocstyle)
-       ("r-dexseq" ,r-dexseq)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-biocstyle r-dexseq r-knitr r-rmarkdown))
     (home-page "https://www.bioconductor.org/packages/pasilla/")
     (synopsis "Data package with per-exon and per-gene read counts")
     (description "This package provides per-exon and per-gene read counts
@@ -1353,7 +1332,7 @@ resulting in a complete gene expression profile for each cell.")
     (properties `((upstream-name . "ALL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)))
+     (list r-biobase))
     (home-page "https://bioconductor.org/packages/ALL")
     (synopsis "Acute Lymphoblastic Leukemia data from the Ritz laboratory")
     (description
@@ -1378,7 +1357,7 @@ the form of an @code{exprSet} object.")
     (properties `((upstream-name . "affydata")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)))
+     (list r-affy))
     (home-page "https://bioconductor.org/packages/affydata/")
     (synopsis "Affymetrix data for demonstration purposes")
     (description
@@ -1428,12 +1407,12 @@ yeast are also included.")
      `((upstream-name . "curatedTCGAData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-experimenthub" ,r-experimenthub)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-multiassayexperiment" ,r-multiassayexperiment)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-annotationhub
+           r-experimenthub
+           r-hdf5array
+           r-multiassayexperiment
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/curatedTCGAData/")
     (synopsis "Curated data from The Cancer Genome Atlas")
     (description
@@ -1501,12 +1480,12 @@ packages.")
                 "0sb1h5qsk41c9xisq73agqh502wv6p2j1k45s32a4bkdynf696as"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-s4vectors
+           r-iranges
+           r-genomicranges
+           r-genomicalignments
+           r-rtracklayer
+           r-rsamtools))
     (home-page "https://bioconductor.org/packages/CoverageView/")
     (synopsis "Coverage visualization package for R")
     (description "This package provides a framework for the visualization of
@@ -1528,16 +1507,16 @@ how the coverage distributed across the genome.")
                "0130hrlz2jabbshis1g11ndda8b8vlirzi7a004li3cgdghscxql"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-biocgenerics" ,r-biocgenerics)
-      ("r-fastcluster" ,r-fastcluster)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-gviz" ,r-gviz)
-      ("r-plyr" ,r-plyr)
-      ("r-reshape2" ,r-reshape2)
-      ("r-rsqlite" ,r-rsqlite)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)))
+    (list r-biobase
+          r-biocgenerics
+          r-fastcluster
+          r-ggplot2
+          r-gviz
+          r-plyr
+          r-reshape2
+          r-rsqlite
+          r-rtracklayer
+          r-s4vectors))
    (home-page "https://bioconductor.org/packages/cummeRbund/")
    (synopsis "Analyze Cufflinks high-throughput sequencing data")
    (description "This package allows for persistent storage, access,
@@ -1559,14 +1538,14 @@ used visualizations.")
          "07vr27rv3z86ajd62c0ilvfgz9z35qsiwwi5pv4sygbhnnjwh3rc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-patchwork" ,r-patchwork)
-       ("r-pbapply" ,r-pbapply)
-       ("r-statmod" ,r-statmod)
-       ("r-survey" ,r-survey)
-       ("r-viridislite" ,r-kernsmooth)))
+     (list r-ggplot2
+           r-kernsmooth
+           r-matrixstats
+           r-patchwork
+           r-pbapply
+           r-statmod
+           r-survey
+           r-kernsmooth))
     (home-page "https://github.com/borishejblum/dearseq")
     (synopsis "DEA for RNA-seq data through a robust variance component test")
     (description
@@ -1588,12 +1567,12 @@ set analyses, and can deal with repeated or longitudinal data.")
                 "0a9k3f70jmd17kxf1zjmdzrfjs0dmwfad2zgz6wihxh5s1shc8qm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biostrings
+           r-dbi
+           r-iranges
+           r-rsqlite
+           r-s4vectors
+           r-xvector))
     (home-page "https://www.bioconductor.org/packages/DECIPHER/")
     (synopsis "Tools for deciphering and managing biological sequences")
     (description "This package provides a toolset for deciphering and managing
@@ -1613,15 +1592,15 @@ biological sequences.")
     (properties `((upstream-name . "deepSNV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)
-       ("r-vgam" ,r-vgam)))
+     (list r-biostrings
+           r-genomicranges
+           r-iranges
+           r-rhtslib
+           r-summarizedexperiment
+           r-variantannotation
+           r-vgam))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gerstung-lab/deepSNV/")
     (synopsis "Detection of subclonal SNVs in deep sequencing data")
     (description
@@ -1650,13 +1629,10 @@ bases such as COSMIC.")
      `((upstream-name . "DelayedArray")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)))
+     (list r-biocgenerics r-s4vectors r-iranges r-matrix
+           r-matrixgenerics))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DelayedArray")
     (synopsis "Delayed operations on array-like objects")
     (description
@@ -1682,11 +1658,9 @@ array-like objects like @code{DataFrame} objects (typically with Rle columns),
     (properties `((upstream-name . "derfinderHelper")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-iranges r-matrix r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/leekgroup/derfinderHelper")
     (synopsis "Helper for derfinder")
     (description
@@ -1709,17 +1683,17 @@ calculation in parallel.")
     (properties `((upstream-name . "DRIMSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-edger" ,r-edger)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-edger
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-limma
+           r-mass
+           r-reshape2
+           r-s4vectors))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/DRIMSeq")
     (synopsis "Differential transcript usage and tuQTL analyses with Dirichlet-multinomial model in RNA-seq")
     (description
@@ -1744,15 +1718,15 @@ results.")
    (properties `((upstream-name . "bluster")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocneighbors" ,r-biocneighbors)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-cluster" ,r-cluster)
-      ("r-igraph" ,r-igraph)
-      ("r-matrix" ,r-matrix)
-      ("r-rcpp" ,r-rcpp)
-      ("r-s4vectors" ,r-s4vectors)))
+    (list r-biocneighbors
+          r-biocparallel
+          r-cluster
+          r-igraph
+          r-matrix
+          r-rcpp
+          r-s4vectors))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://bioconductor.org/packages/bluster")
    (synopsis "Clustering algorithms for Bioconductor")
    (description"This package wraps common clustering algorithms in an easily
@@ -1773,12 +1747,12 @@ and evaluate clustering results.")
                 "0cclk2pcb2mvsfxhw0zq3qlnfkblb1gqxnn7xypmlf0bm6hcvl4g"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-genomeinfodb" ,r-genomeinfodb)))
+     (list r-biobase
+           r-iranges
+           r-genomicranges
+           r-rcolorbrewer
+           r-rtracklayer
+           r-genomeinfodb))
     (home-page "https://bioconductor.org/packages/IdeoViz/")
     (synopsis "Plots data along a chromosomal ideogram")
     (description "This package provides functions to plot data associated with
@@ -1799,8 +1773,7 @@ arbitrary genomic intervals along chromosomal ideogram.")
      `((upstream-name . "IRanges")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-s4vectors))
     (home-page "https://bioconductor.org/packages/IRanges")
     (synopsis "Infrastructure for manipulating intervals on sequences")
     (description
@@ -1827,37 +1800,37 @@ possible.")
     (properties `((upstream-name . "IsoformSwitchAnalyzeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dbi" ,r-dbi)
-       ("r-dexseq" ,r-dexseq)
-       ("r-dplyr" ,r-dplyr)
-       ("r-drimseq" ,r-drimseq)
-       ("r-edger" ,r-edger)
-       ("r-futile-logger" ,r-futile-logger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcurl" ,r-rcurl)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tximeta" ,r-tximeta)
-       ("r-tximport" ,r-tximport)
-       ("r-venndiagram" ,r-venndiagram)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-dbi
+           r-dexseq
+           r-dplyr
+           r-drimseq
+           r-edger
+           r-futile-logger
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gridextra
+           r-iranges
+           r-limma
+           r-magrittr
+           r-plyr
+           r-rcolorbrewer
+           r-rcurl
+           r-readr
+           r-reshape2
+           r-rtracklayer
+           r-stringr
+           r-tibble
+           r-tximeta
+           r-tximport
+           r-venndiagram
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/IsoformSwitchAnalyzeR/")
     (synopsis "Analyze alternative splicing in RNA-seq data")
     (description
@@ -1881,11 +1854,7 @@ Kallisto, Salmon, StringTie, Cufflinks/Cuffdiff etc.")
     (properties `((upstream-name . "AbsFilterGSEA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-deseq" ,r-deseq)
-       ("r-limma" ,r-limma)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-biobase r-deseq r-limma r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/AbsFilterGSEA/")
     (synopsis "Improved false positive control of gene-permuting with absolute filtering")
     (description
@@ -1909,10 +1878,9 @@ absolute GSEA.")
    (properties `((upstream-name . "BisqueRNA")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-limsolve" ,r-limsolve)))
+    (list r-biobase r-limsolve))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (home-page "https://www.biorxiv.org/content/10.1101/669911v1")
    (synopsis "Decomposition of bulk expression with single-cell sequencing")
    (description "This package provides tools to accurately estimate cell type
@@ -1939,10 +1907,8 @@ relative abundances across samples.")
      `((upstream-name . "deconstructSigs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-bsgenome r-bsgenome-hsapiens-ucsc-hg19 r-genomeinfodb
+           r-reshape2))
     (home-page "https://github.com/raerose01/deconstructSigs")
     (synopsis "Identifies signatures present in a tumor sample")
     (description "This package takes sample information in the form of the
@@ -1966,25 +1932,25 @@ closely reconstructs the mutational profile.")
     (properties `((upstream-name . "NMF")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-bigmemory" ,r-bigmemory) ; suggested
-       ("r-synchronicity" ,r-synchronicity) ; suggested
-       ("r-colorspace" ,r-colorspace)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridbase" ,r-gridbase)
-       ("r-pkgmaker" ,r-pkgmaker)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-registry" ,r-registry)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rngtools" ,r-rngtools)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-cluster
+           r-biobase
+           r-biocmanager
+           r-bigmemory ; suggested
+           r-synchronicity ; suggested
+           r-colorspace
+           r-digest
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-gridbase
+           r-pkgmaker
+           r-rcolorbrewer
+           r-registry
+           r-reshape2
+           r-rngtools
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://renozao.github.io/NMF")
     (synopsis "Algorithms and framework for nonnegative matrix factorization")
     (description
@@ -2009,14 +1975,14 @@ performing parallel computations on multicore machines.")
          "0z66pyn2020h3x22xabkmnjxb20kbgblivvk7mqjk9134wvvf15a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-preprocesscore
+           r-zlibbioc))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://bioconductor.org/packages/affy")
     (synopsis "Methods for affymetrix oligonucleotide arrays")
     (description
@@ -2037,7 +2003,7 @@ analysis.")
          "0kawlfff82ikrbrfyyy38zm5wj5xdri2ii9wgwilnq50z5qc6r21"))))
     (properties `((upstream-name . "affycomp")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/affycomp/")
     (synopsis "Graphics toolbox for assessment of Affymetrix expression measures")
     (description
@@ -2060,9 +2026,7 @@ measures for Affymetrix Oligonucleotide Arrays.")
      `((upstream-name . "AffyCompatible")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)))
+     (list r-biostrings r-rcurl r-xml))
     (home-page "https://bioconductor.org/packages/AffyCompatible/")
     (synopsis "Work with Affymetrix GeneChip files")
     (description
@@ -2087,9 +2051,7 @@ Command Console} (AGCC)-compatible sample annotation files.")
     (properties `((upstream-name . "affyContam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-affydata" ,r-affydata)
-       ("r-biobase" ,r-biobase)))
+     (list r-affy r-affydata r-biobase))
     (home-page "https://bioconductor.org/packages/affyContam/")
     (synopsis "Structured corruption of Affymetrix CEL file data")
     (description
@@ -2112,27 +2074,27 @@ problems in CEL-level data to help evaluate performance of quality metrics.")
     (properties `((upstream-name . "affycoretools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-edger" ,r-edger)
-       ("r-gcrma" ,r-gcrma)
-       ("r-glimma" ,r-glimma)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gostats" ,r-gostats)
-       ("r-gplots" ,r-gplots)
-       ("r-hwriter" ,r-hwriter)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-reportingtools" ,r-reportingtools)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xtable" ,r-xtable)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-affy
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-edger
+           r-gcrma
+           r-glimma
+           r-ggplot2
+           r-gostats
+           r-gplots
+           r-hwriter
+           r-lattice
+           r-limma
+           r-oligoclasses
+           r-reportingtools
+           r-rsqlite
+           r-s4vectors
+           r-xtable))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/affycoretools/")
     (synopsis "Functions for analyses with Affymetrix GeneChips")
     (description
@@ -2153,9 +2115,9 @@ to streamline the more common analyses that a Biostatistician might see.")
          "02lqdq8hcldkf9qbyhhllkm3smpqc51sn2d9gbkm74r96fx37lvm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zlibbioc" ,r-zlibbioc)))
+     (list r-zlibbioc))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/bmbolstad/affyio")
     (synopsis "Tools for parsing Affymetrix data files")
     (description
@@ -2205,13 +2167,13 @@ structure.")
          "0p7q5hdk7003q72vg4hrgdzn463spybxhrkvcq3a6l6jkgy9sf84"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-httr" ,r-httr)
-       ("r-xml" ,r-xml)
-       ("r-xtable" ,r-xtable)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-httr
+           r-xml
+           r-xtable))
     (home-page
      "https://bioconductor.org/packages/annotate")
     (synopsis "Annotation for microarrays")
@@ -2233,15 +2195,15 @@ microarrays.")
      `((upstream-name . "AnnotationDbi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-keggrest" ,r-keggrest)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase
+           r-biocgenerics
+           r-dbi
+           r-keggrest
+           r-iranges
+           r-rsqlite
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationDbi")
     (synopsis "Annotation database interface")
     (description
@@ -2263,10 +2225,9 @@ annotation data packages using SQLite data storage.")
      `((upstream-name . "AnnotationFilter")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-lazyeval" ,r-lazyeval)))
+     (list r-genomicranges r-lazyeval))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Bioconductor/AnnotationFilter")
     (synopsis "Facilities for filtering Bioconductor annotation resources")
     (description
@@ -2290,16 +2251,16 @@ used by @code{ensembldb}, @code{Organism.dplyr}, and other packages.")
      `((upstream-name . "AnnotationForge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-dbi
+           r-rcurl
+           r-rsqlite
+           r-s4vectors
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationForge")
     (synopsis "Code for building annotation database packages")
     (description
@@ -2321,21 +2282,21 @@ databases.  Packages produced are intended to be used with AnnotationDbi.")
     (properties `((upstream-name . "AnnotationHub")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocversion" ,r-biocversion)
-       ("r-curl" ,r-curl)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-interactivedisplaybase" ,r-interactivedisplaybase)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-biocversion
+           r-curl
+           r-dplyr
+           r-httr
+           r-interactivedisplaybase
+           r-rappdirs
+           r-rsqlite
+           r-s4vectors
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AnnotationHub")
     (synopsis "Client to access AnnotationHub resources")
     (description
@@ -2362,10 +2323,7 @@ by the user, helping with quick and reproducible access.")
     (properties `((upstream-name . "aroma.light")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrixstats" ,r-matrixstats)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-matrixstats r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/aroma.light")
     (synopsis "Methods for normalization and visualization of microarray data")
     (description
@@ -2388,14 +2346,14 @@ classes.")
          "03m3yaagplh7j4q5hp3cfcdqwsnh1pwrlla9cv3ajnfd83s8ncqv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-rcpp
+           r-rhtslib
+           r-zlibbioc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/bamsignals")
     (synopsis "Extract read count signals from bam files")
     (description
@@ -2419,7 +2377,7 @@ paired-end data.")
      `((upstream-name . "Biobase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/Biobase")
     (synopsis "Base functions for Bioconductor")
     (description
@@ -2441,17 +2399,17 @@ on Bioconductor or which replace R functions.")
      `((upstream-name . "biomaRt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-progress" ,r-progress)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-stringr" ,r-stringr)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)))
+     (list r-annotationdbi
+           r-biocfilecache
+           r-digest
+           r-httr
+           r-progress
+           r-rappdirs
+           r-stringr
+           r-xml
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/biomaRt")
     (synopsis "Interface to BioMart databases")
     (description
@@ -2507,11 +2465,9 @@ powerful online queries from gene annotation to database mining.")
                 (string-append
                  m "; if (!is.na(Sys.getenv(\"SOURCE_DATE_EPOCH\"))) {set.seed(100)}\n"))))))))
     (propagated-inputs
-     `(("r-futile-logger" ,r-futile-logger)
-       ("r-snow" ,r-snow)
-       ("r-bh" ,r-bh)))
+     (list r-futile-logger r-snow r-bh))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocParallel")
     (synopsis "Bioconductor facilities for parallel evaluation")
     (description
@@ -2534,12 +2490,12 @@ objects.")
      `((upstream-name . "Biostrings")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-crayon" ,r-crayon)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics
+           r-crayon
+           r-genomeinfodb
+           r-iranges
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/Biostrings")
     (synopsis "String objects and algorithms for biological sequences")
     (description
@@ -2562,25 +2518,25 @@ biological sequences or sets of sequences.")
     (properties `((upstream-name . "biovizBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dichromat" ,r-dichromat)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biocgenerics
+           r-biostrings
+           r-dichromat
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-hmisc
+           r-iranges
+           r-rcolorbrewer
+           r-rlang
+           r-rsamtools
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/biovizBase")
     (synopsis "Basic graphic utilities for visualization of genomic data")
     (description
@@ -2604,16 +2560,16 @@ effort and encourages consistency.")
      `((upstream-name . "BSgenome")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrixstats
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/BSgenome")
     (synopsis "Infrastructure for Biostrings-based genome data packages")
     (description
@@ -2635,16 +2591,16 @@ genome data packages and support for efficient SNP representation.")
     (properties `((upstream-name . "Category")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genefilter" ,r-genefilter)
-       ("r-graph" ,r-graph)
-       ("r-gseabase" ,r-gseabase)
-       ("r-matrix" ,r-matrix)
-       ("r-rbgl" ,r-rbgl)
-       ("r-dbi" ,r-dbi)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-genefilter
+           r-graph
+           r-gseabase
+           r-matrix
+           r-rbgl
+           r-dbi))
     (home-page "https://bioconductor.org/packages/Category")
     (synopsis "Category analysis")
     (description
@@ -2664,28 +2620,27 @@ analysis.")
                 "1nr5p1h9131rvbpnh2kizzx9q6f4ycq6rzxy1yqg2pczqcg7hy4x"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-boot" ,r-boot)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-iranges" ,r-iranges)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gplots" ,r-gplots)
-       ("r-gtools" ,r-gtools)
-       ("r-dplyr" ,r-dplyr)
-       ("r-plotrix" ,r-plotrix)
-       ("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-txdb-hsapiens-ucsc-hg19-knowngene"
-        ,r-txdb-hsapiens-ucsc-hg19-knowngene)))
+     (list r-knitr))
+    (propagated-inputs
+     (list r-annotationdbi
+           r-biocgenerics
+           r-boot
+           r-enrichplot
+           r-iranges
+           r-genomeinfodb
+           r-genomicranges
+           r-genomicfeatures
+           r-ggplot2
+           r-gplots
+           r-gtools
+           r-dplyr
+           r-plotrix
+           r-dplyr
+           r-magrittr
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors
+           r-txdb-hsapiens-ucsc-hg19-knowngene))
     (home-page "https://www.bioconductor.org/packages/ChIPseeker/")
     (synopsis "ChIPseeker for ChIP peak annotation, comparison, and visualization")
     (description "This package implements functions to retrieve the nearest
@@ -2712,12 +2667,12 @@ annotation, distance to TSS, and overlap of peaks or genes.")
          "1jw209bfh1c22mqs9z44qx3pmca9m68rhxp0p9bvbmqsnqwrndi6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)))
+     (list r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-s4vectors
+           r-shortread))
     (home-page "https://bioconductor.org/packages/chipseq")
     (synopsis "Package for analyzing ChIPseq data")
     (description
@@ -2740,20 +2695,20 @@ experiments.")
      `((upstream-name . "ComplexHeatmap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circlize" ,r-circlize)
-       ("r-clue" ,r-clue)
-       ("r-colorspace" ,r-colorspace)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-circlize
+           r-clue
+           r-colorspace
+           r-digest
+           r-doparallel
+           r-foreach
+           r-getoptlong
+           r-globaloptions
+           r-iranges
+           r-matrixstats
+           r-png
+           r-rcolorbrewer))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://github.com/jokergoo/ComplexHeatmap")
     (synopsis "Making Complex Heatmaps")
@@ -2778,20 +2733,20 @@ self-defined annotation graphics.")
     (properties `((upstream-name . "CopywriteR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-chipseq" ,r-chipseq)
-       ("r-copyhelper" ,r-copyhelper)
-       ("r-data-table" ,r-data-table)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-futile-logger" ,r-futile-logger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocparallel
+           r-chipseq
+           r-copyhelper
+           r-data-table
+           r-dnacopy
+           r-futile-logger
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-matrixstats
+           r-rsamtools
+           r-s4vectors))
     (home-page "https://github.com/PeeperLab/CopywriteR")
     (synopsis "Copy number information from targeted sequencing")
     (description
@@ -2818,14 +2773,14 @@ number detection tools.")
     (properties `((upstream-name . "DESeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-lattice" ,r-lattice)
-       ("r-locfit" ,r-locfit)
-       ("r-mass" ,r-mass)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-biocgenerics
+           r-genefilter
+           r-geneplotter
+           r-lattice
+           r-locfit
+           r-mass
+           r-rcolorbrewer))
     (home-page "https://www-huber.embl.de/users/anders/DESeq/")
     (synopsis "Differential gene expression analysis")
     (description
@@ -2849,21 +2804,21 @@ distribution.")
     (properties `((upstream-name . "DESeq2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-locfit" ,r-locfit)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-genefilter
+           r-geneplotter
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-locfit
+           r-rcpp
+           r-rcpparmadillo
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DESeq2")
     (synopsis "Differential gene expression analysis")
     (description
@@ -2887,25 +2842,25 @@ distribution.")
     (properties `((upstream-name . "DEXSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biomart" ,r-biomart)
-       ("r-deseq2" ,r-deseq2)
-       ("r-genefilter" ,r-genefilter)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-statmod" ,r-statmod)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biomart
+           r-deseq2
+           r-genefilter
+           r-geneplotter
+           r-genomicranges
+           r-hwriter
+           r-iranges
+           r-rcolorbrewer
+           r-rsamtools
+           r-s4vectors
+           r-statmod
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DEXSeq")
     (synopsis "Inference of differential exon usage in RNA-Seq")
     (description
@@ -2933,11 +2888,9 @@ exploration of the results.")
      `((upstream-name . "DirichletMultinomial")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-iranges r-s4vectors))
     (home-page "https://bioconductor.org/packages/DirichletMultinomial")
     (synopsis "Dirichlet-Multinomial mixture models for microbiome data")
     (description
@@ -2961,20 +2914,20 @@ originally made available by Holmes, Harris, and Quince, 2012, PLoS ONE 7(2):
     (properties `((upstream-name . "EDASeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-aroma-light" ,r-aroma-light)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-aroma-light
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-biomart
+           r-biostrings
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/drisso/EDASeq")
     (synopsis "Exploratory data analysis and normalization for RNA-Seq")
     (description
@@ -3000,10 +2953,7 @@ global-scaling and full-quantile normalization.")
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-rcpp" ,r-rcpp)
-       ("r-statmod" ,r-statmod))) ;for estimateDisp
+     (list r-limma r-locfit r-rcpp r-statmod)) ;for estimateDisp
     (home-page "http://bioinf.wehi.edu.au/edgeR")
     (synopsis "EdgeR does empirical analysis of digital gene expression data")
     (description "This package can do differential expression analysis of
@@ -3028,24 +2978,24 @@ CAGE.")
          "0q56gv0isa9ayw505py7i7x65pvcshmd2j1mna1wpbk66wqj4qzx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-curl
+           r-dbi
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-protgenerics
+           r-rsamtools
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/jotsetung/ensembldb")
     (synopsis "Utilities to create and use Ensembl-based annotation databases")
     (description
@@ -3073,11 +3023,8 @@ chromosome region or transcript models of lincRNA genes.")
          "1ds0hhc41nhfj3lmvld8nk2p547wd80b3yq7fjlf3dl3wfaxzy80"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase r-biocgenerics r-genomicranges r-iranges
+           r-s4vectors))
     (home-page "https://www.bioinf.jku.at/software/fastseg/index.html")
     (synopsis "Fast segmentation algorithm for genetic sequencing data")
     (description
@@ -3103,10 +3050,7 @@ microarrays or GRanges for sequencing data.")
          "1spndmvl8wlz3z3wsvzi0fg9nzk81xi8c220pg2rf81j9181nkar"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-keggrest" ,r-keggrest)))
+     (list r-annotationdbi r-go-db r-graph r-keggrest))
     (home-page (string-append "https://bmcbioinformatics.biomedcentral.com/"
                               "articles/10.1186/1471-2105-10-161"))
     (synopsis "Generally applicable gene-set enrichment for pathway analysis")
@@ -3134,14 +3078,10 @@ analysis using other methods.")
          "05ba33m99dg414lasn36mjmkd9lvrxgpamy1qj2zvi31i9vkq6y2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-survival" ,r-survival)))
+     (list r-annotate r-annotationdbi r-biobase r-biocgenerics
+           r-survival))
     (home-page "https://bioconductor.org/packages/genefilter")
     (synopsis "Filter genes from high-throughput experiments")
     (description
@@ -3161,8 +3101,7 @@ high-throughput sequencing experiments.")
                 "18l5dc4xcy1xa2h3sfw92w9rq9v0mnclamjxmzs5fqi469y5mwmm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-gplots" ,r-gplots)))
+     (list r-rcolorbrewer r-gplots))
     (home-page "https://www.bioconductor.org/packages/GeneOverlap/")
     (synopsis "Test and visualize gene overlaps")
     (description "This package can be used to test two sets of gene lists
@@ -3181,28 +3120,28 @@ and visualize the results.")
                 "0ynwsrlnp98iyz4bl2s7plin0k9iy9zix4jy4v38lcqg6n4iz00j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-data-table" ,r-data-table)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridbase" ,r-gridbase)
-       ("r-impute" ,r-impute)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-plotrix" ,r-plotrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqpattern" ,r-seqpattern)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biostrings
+           r-bsgenome
+           r-data-table
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-gridbase
+           r-impute
+           r-iranges
+           r-matrixstats
+           r-plotrix
+           r-plyr
+           r-rcpp
+           r-readr
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-seqpattern))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioinformatics.mdc-berlin.de/genomation/")
     (synopsis "Summary, annotation and visualization of genomic data")
     (description
@@ -3230,13 +3169,10 @@ genomic intervals.  In addition, it can use BAM or BigWig files as input.")
      `((upstream-name . "GenomeInfoDb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodbdata" ,r-genomeinfodbdata)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-genomeinfodbdata r-iranges r-rcurl
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomeInfoDb")
     (synopsis "Utilities for manipulating chromosome identifiers")
     (description
@@ -3260,15 +3196,15 @@ names in their natural, rather than lexicographic, order.")
      `((upstream-name . "GenomicAlignments")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/GenomicAlignments")
     (synopsis "Representation and manipulation of short genomic alignments")
     (description
@@ -3293,23 +3229,23 @@ alignments.")
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocio" ,r-biocio)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocio
+           r-biomart
+           r-biostrings
+           r-dbi
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rcurl
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomicFeatures")
     (synopsis "Tools for working with transcript centric annotations")
     (description
@@ -3337,18 +3273,18 @@ extracting the desired features in a convenient format.")
     (properties `((upstream-name . "GenomicFiles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-matrixgenerics
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/GenomicFiles")
     (synopsis "Distributed computing by file or by range")
     (description
@@ -3371,13 +3307,9 @@ provide added flexibility for data combination and manipulation.")
      `((upstream-name . "GenomicRanges")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics r-genomeinfodb r-iranges r-s4vectors r-xvector))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GenomicRanges")
     (synopsis "Representation and manipulation of genomic intervals")
     (description
@@ -3402,15 +3334,15 @@ manipulating genomic intervals and variables defined along a genome.")
     (properties `((upstream-name . "GOstats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationforge" ,r-annotationforge)
-       ("r-biobase" ,r-biobase)
-       ("r-category" ,r-category)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-annotate
+           r-annotationdbi
+           r-annotationforge
+           r-biobase
+           r-category
+           r-go-db
+           r-graph
+           r-rgraphviz
+           r-rbgl))
     (home-page "https://bioconductor.org/packages/GOstats")
     (synopsis "Tools for manipulating GO and microarrays")
     (description
@@ -3433,14 +3365,14 @@ testing and other simple calculations.")
     (properties `((upstream-name . "GSEABase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-graph" ,r-graph)
-       ("r-xml" ,r-xml)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-graph
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GSEABase")
     (synopsis "Gene set enrichment data structures and methods")
     (description
@@ -3461,7 +3393,7 @@ Enrichment Analysis} (GSEA).")
          "1inajapdhjxg0vwhsdnhfq22h3fv7ad7m1lv58y5v41p59av1w76"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/hpar/")
     (synopsis "Human Protein Atlas in R")
     (description "This package provides a simple interface to and data from
@@ -3485,12 +3417,10 @@ the Human Protein Atlas project.")
     ;; which makes R abort the build.
     (arguments '(#:configure-flags '("--no-staged-install")))
     (propagated-inputs
-     `(("curl" ,curl)
-       ("zlib" ,zlib) ; packages using rhtslib need to link with zlib
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list curl zlib ; packages using rhtslib need to link with zlib
+           r-zlibbioc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/nhayden/Rhtslib")
     (synopsis "High-throughput sequencing library as an R package")
     (description
@@ -3510,7 +3440,7 @@ of other R packages who wish to make use of HTSlib.")
                (base32
                 "0k6dil8ljgp5qr87m7hxli4igb36fbxiwczaqc5pi8mlfh70fqj5"))))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/impute")
     (synopsis "Imputation for microarray data")
@@ -3534,11 +3464,9 @@ microarray data, using nearest neighbor averaging.")
      `((upstream-name . "interactiveDisplayBase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-dt" ,r-dt)
-       ("r-shiny" ,r-shiny)))
+     (list r-biocgenerics r-dt r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/interactiveDisplayBase")
     (synopsis "Base package for web displays of Bioconductor objects")
     (description
@@ -3560,11 +3488,9 @@ Shiny-based display methods for Bioconductor objects.")
     (properties `((upstream-name . "KEGGREST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-httr" ,r-httr)
-       ("r-png" ,r-png)))
+     (list r-biostrings r-httr r-png))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/KEGGREST")
     (synopsis "Client-side REST access to KEGG")
     (description
@@ -3604,27 +3530,27 @@ different technologies, including microarrays, RNA-seq, and quantitative PCR.")
     (properties `((upstream-name . "methylKit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-emdbook" ,r-emdbook)
-       ("r-fastseg" ,r-fastseg)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-limma" ,r-limma)
-       ("r-mclust" ,r-mclust)
-       ("r-mgcv" ,r-mgcv)
-       ("r-qvalue" ,r-qvalue)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-data-table
+           r-emdbook
+           r-fastseg
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-kernsmooth
+           r-limma
+           r-mclust
+           r-mgcv
+           r-qvalue
+           r-r-utils
+           r-rcpp
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/al2na/methylKit")
     (synopsis
      "DNA methylation analysis from high-throughput bisulfite sequencing results")
@@ -3652,12 +3578,12 @@ TAB-Seq.")
     (properties `((upstream-name . "motifRG")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-iranges" ,r-iranges)
-       ("r-seqlogo" ,r-seqlogo)
-       ("r-xvector" ,r-xvector)))
+     (list r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-iranges
+           r-seqlogo
+           r-xvector))
     (home-page "https://bioconductor.org/packages/motifRG")
     (synopsis "Discover motifs in high throughput sequencing data")
     (description
@@ -3678,32 +3604,32 @@ throughput genetic sequencing data sets using regression methods.")
          "1n9rakj57yf17hay1bzvwc2h761yijmlflb3crg1bzwvmn32yhsl"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ;; These two packages are suggested packages
-       ("r-bsgenome-hsapiens-1000g" ,r-bsgenome-hsapiens-1000genomes-hs37d5)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggalluvial" ,r-ggalluvial)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-nmf" ,r-nmf)
-       ("r-pracma" ,r-pracma)
-       ("r-purrr" ,r-purrr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-knitr))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           ;; These two packages are suggested packages
+           r-bsgenome-hsapiens-1000genomes-hs37d5
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-cowplot
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggalluvial
+           r-ggdendro
+           r-ggplot2
+           r-iranges
+           r-magrittr
+           r-nmf
+           r-pracma
+           r-purrr
+           r-rcolorbrewer
+           r-s4vectors
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/MutationalPatterns/")
     (synopsis "Extract and visualize mutational patterns in genomic data")
     (description "This package provides an extensive toolset for the
@@ -3725,30 +3651,30 @@ in SNV base substitution data.")
     (properties `((upstream-name . "MSnbase")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-digest" ,r-digest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-impute" ,r-impute)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-maldiquant" ,r-maldiquant)
-       ("r-mass" ,r-mass)
-       ("r-mscoreutils" ,r-mscoreutils)
-       ("r-mzid" ,r-mzid)
-       ("r-mzr" ,r-mzr)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-vsn" ,r-vsn)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-affy
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-digest
+           r-ggplot2
+           r-impute
+           r-iranges
+           r-lattice
+           r-maldiquant
+           r-mass
+           r-mscoreutils
+           r-mzid
+           r-mzr
+           r-pcamethods
+           r-plyr
+           r-protgenerics
+           r-rcpp
+           r-s4vectors
+           r-scales
+           r-vsn
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/lgatto/MSnbase")
     (synopsis "Base functions and classes for MS-based proteomics")
     (description
@@ -3775,32 +3701,32 @@ of mass spectrometry based proteomics data.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-msnbase" ,r-msnbase)
-       ("r-msmstests" ,r-msmstests)
-       ("r-mzid" ,r-mzid)
-       ("r-mzr" ,r-mzr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-purrr" ,r-purrr)
-       ("r-r-cache" ,r-r-cache)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-runit" ,r-runit)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-xtable" ,r-xtable)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biobase
+           r-biocgenerics
+           r-biocstyle
+           r-biostrings
+           r-data-table
+           r-doparallel
+           r-dplyr
+           r-foreach
+           r-ggplot2
+           r-iterators
+           r-msnbase
+           r-msmstests
+           r-mzid
+           r-mzr
+           r-protgenerics
+           r-purrr
+           r-r-cache
+           r-rcpp
+           r-reshape2
+           r-rlang
+           r-runit
+           r-stringr
+           r-tibble
+           r-xtable))
     (home-page "https://bioconductor.org/packages/MSnID")
     (synopsis "Utilities for LC-MSn proteomics identifications")
     (description
@@ -3827,14 +3753,14 @@ and irregular enzymatic cleavages, mass measurement accuracy, etc.")
     (properties `((upstream-name . "mzID")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-xml" ,r-xml)))
+     (list r-doparallel
+           r-foreach
+           r-iterators
+           r-plyr
+           r-protgenerics
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/mzID")
     (synopsis "Parser for mzIdentML files")
     (description
@@ -3876,20 +3802,20 @@ specific parser.")
 -lboost_iostreams -lboost_thread -lboost_filesystem -lboost_chrono\n")))
              #t)))))
     (inputs
-     `(;; Our default boost package won't work here, unfortunately, even with
-       ;; mzR version 2.28.0.
-       ("boost" ,boost-for-mysql) ; use this instead of the bundled boost sources
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-ncdf4" ,r-ncdf4)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list ;; Our default boost package won't work here, unfortunately, even with
+           ;; mzR version 2.28.0.
+           boost-for-mysql ; use this instead of the bundled boost sources
+           zlib))
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-ncdf4
+           r-protgenerics
+           r-rcpp
+           r-rhdf5lib
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/sneumann/mzR/")
     (synopsis "Parser for mass spectrometry data files")
     (description
@@ -3915,17 +3841,17 @@ previously been used in XCMS.")
     (properties `((upstream-name . "OrganismDbi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-graph" ,r-graph)
-       ("r-iranges" ,r-iranges)
-       ("r-rbgl" ,r-rbgl)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-graph
+           r-iranges
+           r-rbgl
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/OrganismDbi")
     (synopsis "Software to enable the smooth interfacing of database packages")
     (description "The package enables a simple unified interface to several
@@ -3947,10 +3873,7 @@ the fact that each of these packages implements a select methods.")
     (properties `((upstream-name . "pcaMethods")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-biocgenerics r-mass r-rcpp))
     (home-page "https://github.com/hredestig/pcamethods")
     (synopsis "Collection of PCA methods")
     (description
@@ -3997,8 +3920,7 @@ proteomics packages.")
     (properties `((upstream-name . "RBGL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-graph" ,r-graph)))
+     (list r-bh r-graph))
     (home-page "https://www.bioconductor.org/packages/RBGL")
     (synopsis "Interface to the Boost graph library")
     (description
@@ -4019,35 +3941,35 @@ the graph algorithms contained in the Boost library.")
     (properties `((upstream-name . "RCAS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-cowplot" ,r-cowplot)
-       ("r-data-table" ,r-data-table)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggseqlogo" ,r-ggseqlogo)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-pbapply" ,r-pbapply)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-plotrix" ,r-plotrix)
-       ("r-proxy" ,r-proxy)
-       ("r-ranger" ,r-ranger)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-s4vectors" ,r-s4vectors)
-       ("pandoc" ,pandoc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-cowplot
+           r-data-table
+           r-dt
+           r-genomation
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-ggseqlogo
+           r-gprofiler2
+           r-iranges
+           r-knitr
+           r-pbapply
+           r-pheatmap
+           r-plotly
+           r-plotrix
+           r-proxy
+           r-ranger
+           r-rsqlite
+           r-rtracklayer
+           r-rmarkdown
+           r-s4vectors
+           pandoc))
+    (native-inputs
+     (list r-knitr))
     (synopsis "RNA-centric annotation system")
     (description
      "RCAS aims to be a standalone RNA-centric annotation system that provides
@@ -4070,16 +3992,16 @@ library implementing most of the pipeline's features.")
     (properties `((upstream-name . "regioneR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-memoise" ,r-memoise)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-memoise
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/regioneR/")
     (synopsis "Association analysis of genomic regions")
     (description "This package offers a statistical framework based on
@@ -4102,27 +4024,27 @@ region sets and other genomic features.")
      `((upstream-name . "ReportingTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-category" ,r-category)
-       ("r-deseq2" ,r-deseq2)
-       ("r-edger" ,r-edger)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gostats" ,r-gostats)
-       ("r-gseabase" ,r-gseabase)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-pfam-db" ,r-pfam-db)
-       ("r-r-utils" ,r-r-utils)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-category
+           r-deseq2
+           r-edger
+           r-ggbio
+           r-ggplot2
+           r-gostats
+           r-gseabase
+           r-hwriter
+           r-iranges
+           r-knitr
+           r-lattice
+           r-limma
+           r-pfam-db
+           r-r-utils
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ReportingTools/")
     (synopsis "Tools for making reports in various formats")
     (description
@@ -4149,10 +4071,9 @@ browser.")
                 "13zm993l3i9f98gqdpxgsrzf9fgqppx2ajvrl0i3f7cvpifcgxqg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rhdf5filters" ,r-rhdf5filters)
-       ("r-rhdf5lib" ,r-rhdf5lib)))
+     (list r-rhdf5filters r-rhdf5lib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/rhdf5")
     (synopsis "HDF5 interface to R")
     (description
@@ -4179,11 +4100,11 @@ the available RAM.")
     (properties `((upstream-name . "rhdf5filters")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rhdf5lib" ,r-rhdf5lib)))
+     (list r-rhdf5lib))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/grimbough/rhdf5filters")
     (synopsis "HDF5 compression filters")
     (description
@@ -4214,16 +4135,16 @@ HDF5 datasets.")
              (substitute* "NAMESPACE"
                (("import\\(zlibbioc\\)") "")))))))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bitops" ,r-bitops)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bitops
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rhtslib
+           r-s4vectors
+           r-xvector))
     (home-page "https://bioconductor.org/packages/release/bioc/html/Rsamtools.html")
     (synopsis "Interface to samtools, bcftools, and tabix")
     (description
@@ -4249,11 +4170,7 @@ tab-delimited (tabix) files.")
     (properties `((upstream-name . "restfulr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
+     (list r-rcurl r-rjson r-s4vectors r-xml r-yaml))
     (home-page "https://cran.r-project.org/package=restfulr")
     (synopsis "R interface to RESTful web services")
     (description
@@ -4281,24 +4198,24 @@ tab-delimited (tabix) files.")
              (substitute* "NAMESPACE"
                (("import\\(zlibbioc\\)") "")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocio" ,r-biocio)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-restfulr" ,r-restfulr)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biocio
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-rcurl
+           r-restfulr
+           r-rsamtools
+           r-s4vectors
+           r-xml
+           r-xvector
+           r-zlibbioc))
     (home-page "https://bioconductor.org/packages/rtracklayer")
     (synopsis "R interface to genome browsers and their annotation tracks")
     (description
@@ -4324,13 +4241,13 @@ as well as query and modify the browser state, such as the current viewport.")
     (properties `((upstream-name . "samr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gsa" ,r-gsa)
-       ("r-impute" ,r-impute)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyfiles" ,r-shinyfiles)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-gsa
+           r-impute
+           r-matrixstats
+           r-openxlsx
+           r-shiny
+           r-shinyfiles))
+    (native-inputs (list gfortran))
     (home-page "https://statweb.stanford.edu/~tibs/SAM/")
     (synopsis "Significance analysis of Microarrays")
     (description
@@ -4352,23 +4269,23 @@ differential expression analysis, RNAseq data and related problems.")
     (properties `((upstream-name . "scDblFinder")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocneighbors" ,r-biocneighbors)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-bluster" ,r-bluster)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scater" ,r-scater)
-       ("r-scran" ,r-scran)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-xgboost" ,r-xgboost)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-bluster
+           r-delayedarray
+           r-igraph
+           r-mass
+           r-matrix
+           r-s4vectors
+           r-scater
+           r-scran
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment
+           r-xgboost))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/plger/scDblFinder")
     (synopsis "Detect multiplets in single-cell RNA sequencing data")
     (description
@@ -4393,7 +4310,7 @@ comprehensive scDblFinder method.")
     (properties `((upstream-name . "seqLogo")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/seqLogo")
     (synopsis "Sequence logos for DNA sequence alignments")
     (description
@@ -4416,11 +4333,7 @@ Stephens (1990).")
      `((upstream-name . "seqPattern")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-biostrings r-genomicranges r-iranges r-kernsmooth r-plotrix))
     (home-page "https://bioconductor.org/packages/seqPattern")
     (synopsis "Visualising oligonucleotide patterns and motif occurrences")
     (description
@@ -4443,24 +4356,24 @@ reference point and sorted by a user defined feature.")
     (properties `((upstream-name . "ShortRead")))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-hwriter" ,r-hwriter)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-rhtslib
+           r-hwriter
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-rsamtools
+           r-s4vectors
+           r-xvector
+           r-zlibbioc))
     (home-page "https://bioconductor.org/packages/ShortRead")
     (synopsis "FASTQ input and manipulation tools")
     (description
@@ -4487,22 +4400,22 @@ ungapped alignment formats.")
      `((upstream-name . "simplifyEnrichment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-circlize" ,r-circlize)
-       ("r-clue" ,r-clue)
-       ("r-cluster" ,r-cluster)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-digest" ,r-digest)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-go-db" ,r-go-db)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-matrix" ,r-matrix)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-proxyc" ,r-proxyc)
-       ("r-slam" ,r-slam)
-       ("r-tm" ,r-tm)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-circlize
+           r-clue
+           r-cluster
+           r-complexheatmap
+           r-digest
+           r-getoptlong
+           r-go-db
+           r-gosemsim
+           r-matrix
+           r-org-hs-eg-db
+           r-proxyc
+           r-slam
+           r-tm))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jokergoo/simplifyEnrichment")
     (synopsis "Simplify functional enrichment results")
     (description "This package provides a new clustering algorithm, binary
@@ -4526,12 +4439,9 @@ and comparing the clusterings.")
      `((upstream-name . "TrajectoryUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-igraph r-matrix r-s4vectors r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/TrajectoryUtils")
     (synopsis "Single-cell trajectory analysis utilities")
     (description
@@ -4553,15 +4463,15 @@ structures to hold pseudotime inference results.")
               "081kp9b0lpw2xq9xvd2kykqqrqcj322mp7xa44xc3kf0nzsivqfa"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-igraph" ,r-igraph)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-princurve" ,r-princurve)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-singlecellexperiment" ,r-singlecellexperiment)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-trajectoryutils" ,r-trajectoryutils)))
+    (list r-igraph
+          r-matrixstats
+          r-princurve
+          r-s4vectors
+          r-singlecellexperiment
+          r-summarizedexperiment
+          r-trajectoryutils))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://bioconductor.org/packages/slingshot")
    (synopsis "Tools for ordering single-cell sequencing")
    (description "This package provides functions for inferring continuous,
@@ -4586,15 +4496,15 @@ graph construction.")
     (properties `((upstream-name . "STRINGdb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gplots" ,r-gplots)
-       ("r-hash" ,r-hash)
-       ("r-igraph" ,r-igraph)
-       ("r-plotrix" ,r-plotrix)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcurl" ,r-rcurl)
-       ("r-sqldf" ,r-sqldf)))
+     (list r-gplots
+           r-hash
+           r-igraph
+           r-plotrix
+           r-plyr
+           r-png
+           r-rcolorbrewer
+           r-rcurl
+           r-sqldf))
     (home-page "https://git.bioconductor.org/packages/STRINGdb")
     (synopsis "Search tool for the retrieval of interacting proteins database")
     (description
@@ -4618,22 +4528,22 @@ that integrates the various evidences.")
         (base32 "1pw7d39944dwk5gw6q7igcn866zpqwz01ljaha2ih5dfvmhxka8n"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rlang" ,r-rlang)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-biocgenerics
+           r-biostrings
+           r-dplyr
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-rlang
+           r-rtracklayer
+           r-s4vectors
+           r-stringr
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/StructuralVariantAnnotation/")
     (synopsis "R package designed to simplify structural variant analysis")
     (description
@@ -4657,17 +4567,17 @@ involving two separate genomic loci encoded as GRanges objects.")
      `((upstream-name . "SummarizedExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biobase
+           r-biocgenerics
+           r-delayedarray
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-matrixgenerics
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SummarizedExperiment")
     (synopsis "Container for representing genomic ranges by sample")
     (description
@@ -4690,12 +4600,12 @@ samples.")
          "0clzid9di2qfgc5bvnqx312k3inj1lc599ckqkllvr894wxb7mdj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-edger" ,r-edger)
-       ("r-genefilter" ,r-genefilter)
-       ("r-mgcv" ,r-mgcv)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-limma" ,r-limma)))
+     (list r-edger
+           r-genefilter
+           r-mgcv
+           r-biocparallel
+           r-matrixstats
+           r-limma))
     (home-page "https://bioconductor.org/packages/sva")
     (synopsis "Surrogate variable analysis")
     (description
@@ -4722,21 +4632,21 @@ unmodeled, or latent sources of noise.")
     (properties `((upstream-name . "systemPipeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-crayon" ,r-crayon)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-crayon
+           r-genomicranges
+           r-ggplot2
+           r-htmlwidgets
+           r-magrittr
+           r-rsamtools
+           r-s4vectors
+           r-shortread
+           r-stringr
+           r-summarizedexperiment
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/tgirke/systemPipeR")
     (synopsis "Next generation sequencing workflow and reporting environment")
     (description
@@ -4765,15 +4675,15 @@ annotation infrastructure.")
      `((upstream-name . "topGO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dbi" ,r-dbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-go-db" ,r-go-db)
-       ("r-graph" ,r-graph)
-       ("r-lattice" ,r-lattice)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-annotationdbi
+           r-dbi
+           r-biobase
+           r-biocgenerics
+           r-go-db
+           r-graph
+           r-lattice
+           r-matrixstats
+           r-sparsem))
     (home-page "https://bioconductor.org/packages/topGO")
     (synopsis "Enrichment analysis for gene ontology")
     (description
@@ -4796,7 +4706,7 @@ dependencies between GO terms can be implemented and applied.")
                 "0w6pr7s9j8l4fpn3przbfrsyxvzxc3ficgsychvhq3bami9np8g4"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/tximport")
     (synopsis "Import and summarize transcript-level estimates for gene-level analysis")
     (description
@@ -4821,24 +4731,24 @@ of gene-level counts.")
     (properties
      `((upstream-name . "VariantAnnotation")))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-dbi
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-matrixgenerics
+           r-summarizedexperiment
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector
+           r-zlibbioc))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/VariantAnnotation")
     (synopsis "Package for annotation of genetic variants")
@@ -4859,13 +4769,9 @@ coding changes and predict coding outcomes.")
          "03p2wdjbjnrn1ddyz0fbn04mdxpsmv83qhh3apj6azshl0bs1j2x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)))
+     (list r-affy r-biobase r-ggplot2 r-lattice r-limma))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://bioconductor.org/packages/release/bioc/html/vsn.html")
     (synopsis "Variance stabilization and calibration for microarray data")
     (description
@@ -4895,14 +4801,14 @@ and specific in detecting differential transcription.")
     (properties `((upstream-name . "XINA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-alluvial" ,r-alluvial)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-igraph" ,r-igraph)
-       ("r-mclust" ,r-mclust)
-       ("r-plyr" ,r-plyr)
-       ("r-stringdb" ,r-stringdb)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-alluvial
+           r-ggplot2
+           r-gridextra
+           r-igraph
+           r-mclust
+           r-plyr
+           r-stringdb))
+    (native-inputs (list r-knitr))
     (home-page "https://git.bioconductor.org/packages/XINA")
     (synopsis "Identifying proteins that exhibit similar patterns")
     (description
@@ -4969,11 +4875,9 @@ describing each of the graphs.")
                (("import\\(zlibbioc\\)") ""))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-iranges r-s4vectors))
     (home-page "https://bioconductor.org/packages/XVector")
     (synopsis "Representation and manpulation of external sequences")
     (description
@@ -5013,15 +4917,15 @@ libraries for systems that do not have these available via other means.")
     (properties `((upstream-name . "zellkonverter")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-basilisk" ,r-basilisk)
-       ("r-cli" ,r-cli)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-reticulate" ,r-reticulate)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-basilisk
+           r-cli
+           r-delayedarray
+           r-matrix
+           r-reticulate
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/theislab/zellkonverter")
     (synopsis "Conversion between AnnData and single-cell experiments objects")
     (description
@@ -5045,12 +4949,12 @@ saving AnnData objects to disk.")
          "1b7ngp9l00vrymx3d3nsda546s7p4ifr90idn3x2v4ilf38rfhp8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-lattice" ,r-lattice)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-lattice
+           r-rcolorbrewer))
     (home-page "https://bioconductor.org/packages/geneplotter")
     (synopsis "Graphics functions for genomic data")
     (description
@@ -5071,19 +4975,19 @@ saving AnnData objects to disk.")
     (properties `((upstream-name . "oligoClasses")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-ff" ,r-ff)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biocmanager
+           r-biostrings
+           r-dbi
+           r-ff
+           r-foreach
+           r-genomicranges
+           r-iranges
+           r-rsqlite
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/oligoClasses/")
     (synopsis "Classes for high-throughput arrays")
     (description
@@ -5105,21 +5009,21 @@ packages.")
          "1cmnnq0d5xsjsx8c8n8wcl6l9d31sbglb8yrsibykcvnhw15fsf6"))))
     (properties `((upstream-name . "oligo")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-affxparser" ,r-affxparser)
-       ("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-ff" ,r-ff)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-zlibbioc" ,r-zlibbioc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list zlib))
+    (propagated-inputs
+     (list r-affxparser
+           r-affyio
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-dbi
+           r-ff
+           r-oligoclasses
+           r-preprocesscore
+           r-rsqlite
+           r-zlibbioc))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/oligo/")
     (synopsis "Preprocessing tools for oligonucleotide arrays")
     (description
@@ -5141,10 +5045,9 @@ Affymetrix (CEL files) and NimbleGen arrays (XYS files).")
          "1mn2qmqn89lfsx7rg54d1lwz45bfx0b91q6ahf43a1yzrrhwn138"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/StoreyLab/qvalue")
     (synopsis "Q-value estimation for false discovery rate control")
     (description
@@ -5196,13 +5099,13 @@ integration with @code{Rcpp}.")
    (properties `((upstream-name . "apeglm")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-emdbook" ,r-emdbook)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-rcpp" ,r-rcpp)
-      ("r-rcppeigen" ,r-rcppeigen)
-      ("r-rcppnumerical" ,r-rcppnumerical)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)))
-   (native-inputs `(("r-knitr" ,r-knitr)))
+    (list r-emdbook
+          r-genomicranges
+          r-rcpp
+          r-rcppeigen
+          r-rcppnumerical
+          r-summarizedexperiment))
+   (native-inputs (list r-knitr))
    (home-page "https://bioconductor.org/packages/apeglm")
    (synopsis "Approximate posterior estimation for GLM coefficients")
    (description "This package provides Bayesian shrinkage estimators for
@@ -5223,14 +5126,14 @@ posterior for individual coefficients.")
    (properties `((upstream-name . "GreyListChIP")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-bsgenome" ,r-bsgenome)
-      ("r-genomeinfodb" ,r-genomeinfodb)
-      ("r-genomicalignments" ,r-genomicalignments)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-mass" ,r-mass)
-      ("r-rsamtools" ,r-rsamtools)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)))
+    (list r-bsgenome
+          r-genomeinfodb
+          r-genomicalignments
+          r-genomicranges
+          r-mass
+          r-rsamtools
+          r-rtracklayer
+          r-summarizedexperiment))
    (home-page "https://bioconductor.org/packages/GreyListChIP")
    (synopsis "Greylist artefact regions based on ChIP inputs")
    (description "This package identifies regions of ChIP experiments with high
@@ -5251,29 +5154,29 @@ signal in the input, that lead to spurious peaks during peak calling.")
     (properties `((upstream-name . "DiffBind")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-amap" ,r-amap)
-       ("r-apeglm" ,r-apeglm)
-       ("r-ashr" ,r-ashr)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gplots" ,r-gplots)
-       ("r-greylistchip" ,r-greylistchip)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-rcolorbrewer" , r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-systempiper" ,r-systempiper)))
+     (list r-amap
+           r-apeglm
+           r-ashr
+           r-biocparallel
+           r-deseq2
+           r-dplyr
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-gplots
+           r-greylistchip
+           r-iranges
+           r-lattice
+           r-limma
+           r-locfit
+           r-rcolorbrewer
+           r-rcpp
+           r-rhtslib
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment
+           r-systempiper))
     (home-page "https://bioconductor.org/packages/DiffBind")
     (synopsis "Differential binding analysis of ChIP-Seq peak data")
     (description
@@ -5296,13 +5199,13 @@ occupancy (overlap) analysis and plotting functions.")
     (properties `((upstream-name . "RIPSeeker")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-s4vectors
+           r-iranges
+           r-genomicranges
+           r-summarizedexperiment
+           r-rsamtools
+           r-genomicalignments
+           r-rtracklayer))
     (home-page "https://bioconductor.org/packages/RIPSeeker")
     (synopsis
      "Identifying protein-associated transcripts from RIP-seq experiments")
@@ -5327,20 +5230,20 @@ processing to visualization and annotation.")
                 "03hpj218s8fynmk1s50s0rinhsljikxdrff06yc8ysbyc6hyfb4k"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-benchmarkme" ,r-benchmarkme)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-clusterr" ,r-clusterr)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-knitr))
+    (propagated-inputs
+     (list r-beachmat
+           r-benchmarkme
+           r-biocparallel
+           r-clusterr
+           r-delayedarray
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rhdf5lib
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
     (home-page "https://bioconductor.org/packages/mbkmeans")
     (synopsis "Mini-batch k-means clustering for single-cell RNA-seq")
     (description "This package implements the mini-batch k-means algorithm for
@@ -5360,10 +5263,7 @@ large datasets, including support for on-disk data representation.")
          "03z71r7g318nwwgiz0k8qwbhghw1hhdhh1an4qnb0nc62c5x9kns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biobase" ,r-biobase)
-       ("r-mass" ,r-mass)))
+     (list r-survival r-biocgenerics r-biobase r-mass))
     (home-page "https://bioconductor.org/packages/multtest")
     (synopsis "Resampling-based multiple hypothesis testing")
     (description
@@ -5397,7 +5297,7 @@ expressed genes in DNA microarray experiments.")
                 "0x31lz3qimxmng6w99xnqazaj943d94b04nbziad4jfv7c1bc2h0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/graph")
     (synopsis "Handle graph data structures in R")
     (description
@@ -5419,8 +5319,7 @@ expressed genes in DNA microarray experiments.")
     (properties `((upstream-name . "ggm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-igraph" ,r-igraph)))
+     (list r-graph r-igraph))
     (home-page "https://cran.r-project.org/package=ggm")
     (synopsis "Functions for graphical Markov models")
     (description
@@ -5443,9 +5342,7 @@ fitting of some classes of graphical Markov models.")
     (properties `((upstream-name . "PerfMeas")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-limma" ,r-limma)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-graph r-limma r-rbgl))
     (home-page "https://cran.r-project.org/web/packages/PerfMeas/")
     (synopsis "Performance measures for ranking and classification tasks")
     (description
@@ -5469,9 +5366,7 @@ a given recall, F-score for single and multiple classes are available.")
     (properties `((upstream-name . "CodeDepends")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-graph" ,r-graph)
-       ("r-xml" ,r-xml)))
+     (list r-codetools r-graph r-xml))
     (home-page "https://cran.r-project.org/web/packages/CodeDepends")
     (synopsis "Analysis of R code for reproducible research and code comprehension")
     (description
@@ -5497,33 +5392,33 @@ determining dependencies between variables, code improvement suggestions.")
     (properties `((upstream-name . "ChIPpeakAnno")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-graph" ,r-graph)
-       ("r-interactionset" ,r-interactionset)
-       ("r-iranges" ,r-iranges)
-       ("r-keggrest" ,r-keggrest)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-multtest" ,r-multtest)
-       ("r-rbgl" ,r-rbgl)
-       ("r-regioner" ,r-regioner)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-venndiagram" ,r-venndiagram)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biomart
+           r-biostrings
+           r-dbi
+           r-dplyr
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-graph
+           r-interactionset
+           r-iranges
+           r-keggrest
+           r-matrixstats
+           r-multtest
+           r-rbgl
+           r-regioner
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-venndiagram))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ChIPpeakAnno")
     (synopsis "Peaks annotation from ChIP-seq and ChIP-chip experiments")
     (description
@@ -5551,7 +5446,7 @@ enrichedGO (addGeneIDs).")
     `((upstream-name . "MatrixGenerics")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-matrixstats" ,r-matrixstats)))
+    (list r-matrixstats))
    (home-page "https://bioconductor.org/packages/MatrixGenerics")
    (synopsis "S4 generic summary statistic functions for matrix-like objects")
    (description
@@ -5575,7 +5470,7 @@ incompatibilities.")
                (base32 "1la805y8j522vpiazm1z6wpq4ibia9bib5fpiia5mxmpzmqg6gzz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)))
+     (list r-limma))
     (home-page "https://bioconductor.org/packages/marray")
     (synopsis "Exploratory analysis for two-color spotted microarray data")
     (description "This package contains class definitions for two-color spotted
@@ -5595,8 +5490,7 @@ normalization and quality checking.")
    (properties `((upstream-name . "CGHbase")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-marray" ,r-marray)))
+    (list r-biobase r-marray))
    (home-page "https://bioconductor.org/packages/CGHbase")
    (synopsis "Base functions and classes for arrayCGH data analysis")
    (description "This package contains functions and classes that are needed by
@@ -5615,11 +5509,7 @@ the @code{arrayCGH} packages.")
    (properties `((upstream-name . "CGHcall")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-cghbase" ,r-cghbase)
-      ("r-impute" ,r-impute)
-      ("r-dnacopy" ,r-dnacopy)
-      ("r-snowfall" ,r-snowfall)))
+    (list r-biobase r-cghbase r-impute r-dnacopy r-snowfall))
    (home-page "https://bioconductor.org/packages/CGHcall")
    (synopsis "Base functions and classes for arrayCGH data analysis")
    (description "This package contains functions and classes that are needed by
@@ -5638,16 +5528,16 @@ the @code{arrayCGH} packages.")
     (properties `((upstream-name . "QDNAseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-cghbase" ,r-cghbase)
-       ("r-cghcall" ,r-cghcall)
-       ("r-dnacopy" ,r-dnacopy)
-       ("r-future-apply" ,r-future-apply)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-biobase
+           r-cghbase
+           r-cghcall
+           r-dnacopy
+           r-future-apply
+           r-genomicranges
+           r-iranges
+           r-matrixstats
+           r-r-utils
+           r-rsamtools))
     (home-page "https://bioconductor.org/packages/QDNAseq")
     (synopsis "Quantitative DNA sequencing for chromosomal aberrations")
     (description "The genome is divided into non-overlapping fixed-sized bins,
@@ -5672,9 +5562,7 @@ respectively.")
     (properties `((upstream-name . "baySeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-edger" ,r-edger)
-       ("r-genomicranges" ,r-genomicranges)))
+     (list r-abind r-edger r-genomicranges))
     (home-page "https://bioconductor.org/packages/baySeq/")
     (synopsis "Bayesian analysis of differential expression patterns in count data")
     (description
@@ -5698,16 +5586,16 @@ more complex hypotheses) via empirical Bayesian methods.")
     (properties `((upstream-name . "ChIPComp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-bsgenome-mmusculus-ucsc-mm9" ,r-bsgenome-mmusculus-ucsc-mm9)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-bsgenome-mmusculus-ucsc-mm9
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-limma
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/ChIPComp")
     (synopsis "Quantitative comparison of multiple ChIP-seq datasets")
     (description
@@ -5732,24 +5620,24 @@ datasets.")
     (properties `((upstream-name . "RiboProfiling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sqldf" ,r-sqldf)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-data-table
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-iranges
+           r-plyr
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-sqldf))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/RiboProfiling/")
     (synopsis "Ribosome profiling data analysis")
     (description "Starting with a BAM file, this package provides the
@@ -5773,13 +5661,13 @@ assessment, principal component analysis on codon coverage.")
     (properties `((upstream-name . "riboSeqR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bayseq" ,r-bayseq)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-seqlogo" ,r-seqlogo)))
+     (list r-abind
+           r-bayseq
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-rsamtools
+           r-seqlogo))
     (home-page "https://bioconductor.org/packages/riboSeqR/")
     (synopsis "Analysis of sequencing data from ribosome profiling experiments")
     (description
@@ -5802,16 +5690,16 @@ parsing of genetic sequencing data from ribosome profiling experiments.")
      `((upstream-name . "InteractionSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcpp
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/InteractionSet")
     (synopsis "Base classes for storing genomic interaction data")
     (description
@@ -5836,24 +5724,24 @@ experiments.")
      `((upstream-name . "GenomicInteractions")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gviz" ,r-gviz)
-       ("r-igraph" ,r-igraph)
-       ("r-interactionset" ,r-interactionset)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gridextra
+           r-gviz
+           r-igraph
+           r-interactionset
+           r-iranges
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/ComputationalRegulatoryGenomicsICL/GenomicInteractions/")
     (synopsis "R package for handling genomic interaction data")
     (description
@@ -5874,7 +5762,7 @@ information and producing various plots and statistics.")
         (base32
          "1yq5igwzcwfhxy49qf3pralpikiqq7sqr1cig8mkpjpaj5bbaayx"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-amap" ,r-amap)))
+    (propagated-inputs (list r-amap))
     (home-page "https://bioconductor.org/packages/ctc/")
     (synopsis "Cluster and tree conversion")
     (description
@@ -5895,12 +5783,12 @@ trees and clusters to other programs.")
          "1psl9mqgx1d21kayaxvrxriw34fq30wnd57q5c1sk3p8iahg73g0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biasedurn" ,r-biasedurn)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genelendatabase" ,r-genelendatabase)
-       ("r-go-db" ,r-go-db)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-annotationdbi
+           r-biasedurn
+           r-biocgenerics
+           r-genelendatabase
+           r-go-db
+           r-mgcv))
     (home-page "https://bioconductor.org/packages/goseq/")
     (synopsis "Gene Ontology analyser for RNA-seq and other length biased data")
     (description
@@ -5922,15 +5810,15 @@ defined categories which are over/under represented in RNA-seq data.")
     (properties `((upstream-name . "Glimma")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-deseq2" ,r-deseq2)
-       ("r-edger" ,r-edger)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-limma" ,r-limma)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-deseq2
+           r-edger
+           r-htmlwidgets
+           r-jsonlite
+           r-limma
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Shians/Glimma")
     (synopsis "Interactive HTML graphics")
     (description
@@ -5955,8 +5843,7 @@ information.")
     (properties `((upstream-name . "ROTS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-rcpp))
     (home-page "https://bioconductor.org/packages/ROTS/")
     (synopsis "Reproducibility-Optimized Test Statistic")
     (description
@@ -5978,8 +5865,7 @@ in omics data.")
          "06w8xlw4j1fc9ipdgw55dvhp07f04icmhr20lqzwwhqd5pskrra3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-mass))
     (home-page "http://www.genopolis.it")
     (synopsis "Detect differential expression in microarray and proteomics datasets")
     (description
@@ -6004,30 +5890,29 @@ genes or proteins in these datasets.")
     (properties `((upstream-name . "INSPEcT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-deseq2" ,r-deseq2)
-       ("r-desolve" ,r-desolve)
-       ("r-gdata" ,r-gdata)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-plgem" ,r-plgem)
-       ("r-proc" ,r-proc)
-       ("r-rootsolve" ,r-rootsolve)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-txdb-mmusculus-ucsc-mm9-knowngene"
-        ,r-txdb-mmusculus-ucsc-mm9-knowngene)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-deseq2
+           r-desolve
+           r-gdata
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-kernsmooth
+           r-plgem
+           r-proc
+           r-rootsolve
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment
+           r-txdb-mmusculus-ucsc-mm9-knowngene))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/INSPEcT")
     (synopsis "Analysis of 4sU-seq and RNA-seq time-course data")
     (description
@@ -6051,11 +5936,9 @@ modeling the rates that determines changes in mature mRNA levels.")
     (properties `((upstream-name . "DNABarcodes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh r-matrix r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DNABarcodes")
     (synopsis "Create and analyze DNA barcodes")
     (description
@@ -6080,12 +5963,9 @@ demultiplexed, i.e. assigned to their original reference barcode.")
     (properties `((upstream-name . "RUVSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-edaseq" ,r-edaseq)
-       ("r-edger" ,r-edger)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-edaseq r-edger r-mass))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/drisso/RUVSeq")
     (synopsis "Remove unwanted variation from RNA-Seq data")
     (description
@@ -6108,13 +5988,9 @@ samples.")
     (properties `((upstream-name . "BiocNeighbors")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpphnsw" ,r-rcpphnsw)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocparallel r-matrix r-rcpp r-rcpphnsw r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocNeighbors")
     (synopsis "Nearest Neighbor Detection for Bioconductor packages")
     (description
@@ -6140,10 +6016,8 @@ achieved for all methods using the BiocParallel framework.")
     (properties `((upstream-name . "ScaledMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-delayedarray r-matrix r-s4vectors))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/LTLA/ScaledMatrix")
     (synopsis "Create a DelayedMatrix of scaled and centered values")
     (description
@@ -6168,14 +6042,14 @@ multiplication.")
     (properties `((upstream-name . "treeio")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidytree" ,r-tidytree)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-dplyr
+           r-jsonlite
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidytree))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/YuLab-SMU/treeio")
     (synopsis "Base classes and functions for Phylogenetic tree input and output")
     (description
@@ -6200,20 +6074,20 @@ platform for merging tree with associated data and converting file formats.")
     (properties `((upstream-name . "ggtree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-aplot" ,r-aplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidytree" ,r-tidytree)
-       ("r-treeio" ,r-treeio)
-       ("r-yulab-utils" ,r-yulab-utils)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-aplot
+           r-dplyr
+           r-ggfun
+           r-ggplot2
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-scales
+           r-tidyr
+           r-tidytree
+           r-treeio
+           r-yulab-utils))
+    (native-inputs (list r-knitr))
     (home-page "https://yulab-smu.top/treedata-book/")
     (synopsis "R package for visualization of trees and annotation data")
     (description
@@ -6237,9 +6111,9 @@ data.")
     (properties `((upstream-name . "metapod")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/metapod")
     (synopsis "Meta-analyses on p-values of differential analyses")
     (description
@@ -6266,18 +6140,18 @@ missing values and weighting where appropriate.")
     (properties `((upstream-name . "BiocSingular")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsvd" ,r-rsvd)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scaledmatrix" ,r-scaledmatrix)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocparallel
+           r-delayedarray
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rsvd
+           r-s4vectors
+           r-scaledmatrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LTLA/BiocSingular")
     (synopsis "Singular value decomposition for Bioconductor packages")
     (description
@@ -6300,30 +6174,30 @@ possible, parallelization is achieved using the BiocParallel framework.")
          "1i7f5q02zvpfaxhd76fbw0h1wfgjphyn5hrmrjpvlnv4ardzsir2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-ggplot-multistats" ,r-ggplot-multistats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggthemes" ,r-ggthemes)
-       ("r-irlba" ,r-irlba)
-       ("r-knn-covertree" ,r-knn-covertree)
-       ("r-matrix" ,r-matrix)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-proxy" ,r-proxy)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcpphnsw" ,r-rcpphnsw)
-       ("r-rspectra" ,r-rspectra)
-       ("r-scales" ,r-scales)
-       ("r-scatterplot3d" ,r-scatterplot3d)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-smoother" ,r-smoother)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vim" ,r-vim)))
-    (native-inputs
-     `(("r-nbconvertr" ,r-nbconvertr))) ; for vignettes
+     (list r-biobase
+           r-biocgenerics
+           r-ggplot-multistats
+           r-ggplot2
+           r-ggthemes
+           r-irlba
+           r-knn-covertree
+           r-matrix
+           r-pcamethods
+           r-proxy
+           r-rcpp
+           r-rcppeigen
+           r-rcpphnsw
+           r-rspectra
+           r-scales
+           r-scatterplot3d
+           r-singlecellexperiment
+           r-smoother
+           r-summarizedexperiment
+           r-tidyr
+           r-tidyselect
+           r-vim))
+    (native-inputs
+     (list r-nbconvertr)) ; for vignettes
     (home-page "https://bioconductor.org/packages/destiny/")
     (synopsis "Create and plot diffusion maps")
     (description "This package provides tools to create and plot diffusion
@@ -6345,11 +6219,7 @@ maps.")
     (properties `((upstream-name . "savR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)
-       ("r-xml" ,r-xml)))
+     (list r-ggplot2 r-gridextra r-reshape2 r-scales r-xml))
     (home-page "https://github.com/bcalder/savR")
     (synopsis "Parse and analyze Illumina SAV files")
     (description
@@ -6371,25 +6241,25 @@ Viewer (SAV) files, access data, and generate QC plots.")
     (properties `((upstream-name . "ChIPexoQual")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-broom" ,r-broom)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hexbin" ,r-hexbin)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-biovizbase
+           r-broom
+           r-data-table
+           r-dplyr
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-hexbin
+           r-iranges
+           r-rcolorbrewer
+           r-rmarkdown
+           r-rsamtools
+           r-s4vectors
+           r-scales
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/keleslab/ChIPexoQual")
     (synopsis "Quality control pipeline for ChIP-exo/nexus data")
     (description
@@ -6409,10 +6279,7 @@ sequencing data.")
                 "143ifvjkjz0392drm82xmpj1f8b5pc2dyyxyc9dkqmay8lf1n534"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-biocgenerics" ,r-biocgenerics)))
+     (list r-s4vectors r-iranges r-genomicranges r-biocgenerics))
     (home-page "https://bioconductor.org/packages/copynumber")
     (synopsis "Segmentation of single- and multi-track copy number data")
     (description
@@ -6433,7 +6300,7 @@ penalized least squares regression method.")
          "19ax431i97r49gh1232vf8mgmkvc6k26lnq44j3g10n6q01czswm"))))
     (properties `((upstream-name . "DNAcopy")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://bioconductor.org/packages/DNAcopy")
     (synopsis "DNA copy number data analysis")
     (description
@@ -6458,9 +6325,7 @@ abnormal copy number.")
     (properties `((upstream-name . "HTSCluster")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-capushe" ,r-capushe)
-       ("r-edger" ,r-edger)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-capushe r-edger r-plotrix))
     (home-page "https://cran.r-project.org/web/packages/HTSCluster")
     (synopsis "Clustering high-throughput transcriptome sequencing (HTS) data")
     (description
@@ -6512,7 +6377,7 @@ and summarizing a set of statistics using a weighted distance approach.")
     (properties `((upstream-name . "NBPSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-qvalue" ,r-qvalue)))
+     (list r-qvalue))
     (home-page "https://cran.r-project.org/web/packages/NBPSeq")
     (synopsis "Negative binomial models for RNA-Seq data")
     (description
@@ -6534,9 +6399,7 @@ and regression inferences from RNA-sequencing data.")
     (properties `((upstream-name . "EBSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-blockmodeling" ,r-blockmodeling)
-       ("r-gplots" ,r-gplots)
-       ("r-testthat" ,r-testthat)))
+     (list r-blockmodeling r-gplots r-testthat))
     (home-page "https://bioconductor.org/packages/EBSeq")
     (synopsis "Differential expression analysis of RNA-seq data")
     (description
@@ -6556,23 +6419,23 @@ gene and isoform level using RNA-seq data")
                 "0x3mld9q55r2fy452wxq5sjzmms10zmpkzs71c3w1fdli5hwszdq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-bamsignals" ,r-bamsignals)
-       ("r-bezier" ,r-bezier)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-digest" ,r-digest)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-memoise" ,r-memoise)
-       ("r-regioner" ,r-regioner)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-bamsignals
+           r-bezier
+           r-biovizbase
+           r-digest
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-memoise
+           r-regioner
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/karyoploteR/")
     (synopsis "Plot customizable linear genomes displaying arbitrary data")
     (description "This package creates karyotype plots of arbitrary genomes and
@@ -6595,10 +6458,9 @@ coordinates.")
          "1bv28b1fgcazv6j0xw4nn6wljs37qnkyahqy7anrwissdpryhjfs"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://r-forge.r-project.org/projects/rsymphony")
     (synopsis "Symphony integer linear programming solver in R")
     (description
@@ -6626,12 +6488,9 @@ to install interface to SYMPHONY.")
     (properties `((upstream-name . "IHW")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-lpsymphony" ,r-lpsymphony)
-       ("r-slam" ,r-slam)))
+     (list r-biocgenerics r-fdrtool r-lpsymphony r-slam))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/IHW")
     (synopsis "Independent hypothesis weighting")
     (description
@@ -6658,19 +6517,19 @@ independent of the p-value under the null hypothesis.")
     (properties `((upstream-name . "iCOBRA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-limma" ,r-limma)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rocr" ,r-rocr)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinybs" ,r-shinybs)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-upsetr" ,r-upsetr)))
+     (list r-dplyr
+           r-dt
+           r-ggplot2
+           r-limma
+           r-reshape2
+           r-rocr
+           r-scales
+           r-shiny
+           r-shinybs
+           r-shinydashboard
+           r-upsetr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/iCOBRA")
     (synopsis "Comparison and visualization of ranking and assignment methods")
     (description
@@ -6695,11 +6554,9 @@ interactive exploration of results.")
      `((upstream-name . "ResidualMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-delayedarray r-matrix r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LTLA/ResidualMatrix")
     (synopsis "Create a DelayedMatrix of regression residuals")
     (description
@@ -6725,23 +6582,23 @@ multiplication and calculation of row/column sums or means.")
     (properties `((upstream-name . "batchelor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocneighbors" ,r-biocneighbors)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-residualmatrix" ,r-residualmatrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scaledmatrix" ,r-scaledmatrix)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-delayedarray
+           r-delayedmatrixstats
+           r-igraph
+           r-matrix
+           r-rcpp
+           r-residualmatrix
+           r-s4vectors
+           r-scaledmatrix
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/batchelor")
     (synopsis "Single-Cell Batch Correction Methods")
     (description
@@ -6768,20 +6625,20 @@ the numbers of cells across batches.")
     (properties `((upstream-name . "MAST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-biobase
+           r-biocgenerics
+           r-data-table
+           r-ggplot2
+           r-plyr
+           r-progress
+           r-reshape2
+           r-s4vectors
+           r-singlecellexperiment
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/RGLab/MAST/")
     (synopsis "Model-based analysis of single cell transcriptomics")
     (description
@@ -6802,38 +6659,38 @@ single cell assay data.")
          "0wb2c1jf502lrfx3d0amb09fvhalrwxvpsp99jsab162v4hddg85"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocviews" ,r-biocviews)
-       ("r-cluster" ,r-cluster)
-       ("r-combinat" ,r-combinat)
-       ("r-ddrtree" ,r-ddrtree)
-       ("r-densityclust" ,r-densityclust)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fastica" ,r-fastica)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hsmmsinglecell" ,r-hsmmsinglecell)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plyr" ,r-plyr)
-       ("r-proxy" ,r-proxy)
-       ("r-qlcmatrix" ,r-qlcmatrix)
-       ("r-rann" ,r-rann)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtsne" ,r-rtsne)
-       ("r-slam" ,r-slam)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-vgam" ,r-vgam)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocviews
+           r-cluster
+           r-combinat
+           r-ddrtree
+           r-densityclust
+           r-dplyr
+           r-fastica
+           r-ggplot2
+           r-hsmmsinglecell
+           r-igraph
+           r-irlba
+           r-limma
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-pheatmap
+           r-plyr
+           r-proxy
+           r-qlcmatrix
+           r-rann
+           r-rcpp
+           r-reshape2
+           r-rtsne
+           r-slam
+           r-stringr
+           r-tibble
+           r-vgam
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/monocle")
     (synopsis "Clustering, differential expression, and trajectory analysis for single-cell RNA-Seq")
     (description
@@ -6865,11 +6722,11 @@ qPCR data, but could be used with other types as well.")
       (properties `((upstream-name . "leidenbase")))
       (build-system r-build-system)
       (inputs
-       `(("zlib" ,zlib)))
+       (list zlib))
       (native-inputs
-       `(("gfortran" ,gfortran)))
+       (list gfortran))
       (propagated-inputs
-       `(("r-igraph" ,r-igraph)))
+       (list r-igraph))
       (home-page "https://github.com/cole-trapnell-lab/leidenbase")
       (synopsis "R and C wrappers to run the Leiden find_partition function")
       (description
@@ -6898,11 +6755,7 @@ several functions from the R igraph package.")
                   "13ycdd790qw64qy2zdvcrpj3fc8as628rsly32438d3rifnlc5sk"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-generics" ,r-generics)
-         ("r-matrix" ,r-matrix)
-         ("r-matrixstats" ,r-matrixstats)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpparmadillo" ,r-rcpparmadillo)))
+       (list r-generics r-matrix r-matrixstats r-rcpp r-rcpparmadillo))
       (home-page "https://pneuvial.github.io/sanssouci")
       (synopsis "Post Hoc multiple testing inference")
       (description
@@ -6927,50 +6780,50 @@ user-defined and/or data-driven sets of hypotheses.")
          "16vpvlbms8fdvpfwzcig0rkg2mxnsq1h80d2l7q3953wm91qc9x4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-batchelor" ,r-batchelor)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-grr" ,r-grr)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-leidenbase" ,r-leidenbase)
-       ("r-limma" ,r-limma)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrix-utils" ,r-matrix-utils)
-       ("r-pbapply" ,r-pbapply)
-       ("r-pbmcapply" ,r-pbmcapply)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-pryr" ,r-pryr)
-       ("r-proxy" ,r-proxy)
-       ("r-pscl" ,r-pscl)
-       ("r-purrr" ,r-purrr)
-       ("r-rann" ,r-rann)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-reshape2" ,r-reshape2)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)
-       ("r-rsample" ,r-rsample)
-       ("r-rtsne" ,r-rtsne)
-       ("r-shiny" ,r-shiny)
-       ("r-slam" ,r-slam)
-       ("r-spdep" ,r-spdep)
-       ("r-speedglm" ,r-speedglm)
-       ("r-stringr" ,r-stringr)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-uwot" ,r-uwot)
-       ("r-viridis" ,r-viridis)))
+     (list r-assertthat
+           r-batchelor
+           r-biobase
+           r-biocgenerics
+           r-delayedmatrixstats
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-grr
+           r-htmlwidgets
+           r-igraph
+           r-irlba
+           r-leidenbase
+           r-limma
+           r-lmtest
+           r-mass
+           r-matrix
+           r-matrix-utils
+           r-pbapply
+           r-pbmcapply
+           r-pheatmap
+           r-plotly
+           r-pryr
+           r-proxy
+           r-pscl
+           r-purrr
+           r-rann
+           r-rcpp
+           r-rcppparallel
+           r-reshape2
+           r-reticulate
+           r-rhpcblasctl
+           r-rsample
+           r-rtsne
+           r-shiny
+           r-slam
+           r-spdep
+           r-speedglm
+           r-stringr
+           r-singlecellexperiment
+           r-tibble
+           r-tidyr
+           r-uwot
+           r-viridis))
     (home-page "https://github.com/cole-trapnell-lab/monocle3")
     (synopsis "Analysis toolkit for single-cell RNA-Seq data")
     (description
@@ -6991,8 +6844,7 @@ user-defined and/or data-driven sets of hypotheses.")
     (properties `((upstream-name . "NOISeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-matrix" ,r-matrix)))
+     (list r-biobase r-matrix))
     (home-page "https://bioconductor.org/packages/NOISeq")
     (synopsis "Exploratory analysis and differential expression for RNA-seq data")
     (description
@@ -7018,19 +6870,19 @@ assumptions.")
     (properties `((upstream-name . "scDD")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arm" ,r-arm)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-ebseq" ,r-ebseq)
-       ("r-fields" ,r-fields)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mclust" ,r-mclust)
-       ("r-outliers" ,r-outliers)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scran" ,r-scran)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-arm
+           r-biocparallel
+           r-ebseq
+           r-fields
+           r-ggplot2
+           r-mclust
+           r-outliers
+           r-s4vectors
+           r-scran
+           r-singlecellexperiment
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kdkorthauer/scDD")
     (synopsis "Mixture modeling of single-cell RNA-seq data")
     (description
@@ -7055,29 +6907,29 @@ distributions.")
          "1fqlwg195rzpwh35cj941vhmj2plzpn253skig6glr0z2sirr9r1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aroma-light" ,r-aroma-light)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-boot" ,r-boot)
-       ("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-compositions" ,r-compositions)
-       ("r-diptest" ,r-diptest)
-       ("r-edger" ,r-edger)
-       ("r-fpc" ,r-fpc)
-       ("r-gplots" ,r-gplots)
-       ("r-hexbin" ,r-hexbin)
-       ("r-limma" ,r-limma)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mixtools" ,r-mixtools)
-       ("r-rarpack" ,r-rarpack)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-ruvseq" ,r-ruvseq)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-aroma-light
+           r-biocparallel
+           r-boot
+           r-class
+           r-cluster
+           r-compositions
+           r-diptest
+           r-edger
+           r-fpc
+           r-gplots
+           r-hexbin
+           r-limma
+           r-matrixgenerics
+           r-matrixstats
+           r-mixtools
+           r-rarpack
+           r-rcolorbrewer
+           r-rhdf5
+           r-ruvseq
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/scone")
     (synopsis "Single cell overview of normalized expression data")
     (description
@@ -7100,18 +6952,18 @@ high-throughput analyses.")
     (properties `((upstream-name . "GEOquery")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
+     (list r-biobase
+           r-data-table
+           r-dplyr
+           r-httr
+           r-limma
+           r-magrittr
+           r-r-utils
+           r-readr
+           r-tidyr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/seandavi/GEOquery/")
     (synopsis "Get data from NCBI Gene Expression Omnibus (GEO)")
     (description
@@ -7134,7 +6986,7 @@ the bridge between GEO and BioConductor.")
          "0icsp610am5vrd8x2h9c450phn4vl9c5wnzqmkix5hkqzrykk34m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64" ,r-base64)))
+     (list r-base64))
     (home-page "https://github.com/HenrikBengtsson/illuminaio/")
     (synopsis "Parse Illumina microarray output files")
     (description
@@ -7155,9 +7007,7 @@ files, including IDAT.")
          "1fymp5ci1nwkk5yfj7hli464xqvvlvzf2a5j0w3qkxly9hrymix9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-multtest" ,r-multtest)
-       ("r-scrime" ,r-scrime)))
+     (list r-biobase r-multtest r-scrime))
     (home-page "https://bioconductor.org/packages/siggenes/")
     (synopsis
      "Multiple testing using SAM and Efron's empirical Bayes approaches")
@@ -7181,19 +7031,19 @@ Bayes Analyses of Microarrays} (EBAM).")
          "0d5cz9xy7vhcaj5n3h4cfiv08sn7wn83458525pdwvdzzm449xgv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dorng" ,r-dorng)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-iterators" ,r-iterators)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-dorng
+           r-foreach
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-iterators
+           r-limma
+           r-locfit
+           r-matrixstats
+           r-s4vectors))
     (home-page "https://github.com/ririzarr/bumphunter")
     (synopsis "Find bumps in genomic data")
     (description
@@ -7215,37 +7065,37 @@ studies.")
          "0d5220nknwgi1020vhvf7408n5p80dmad66n85af5776qn84a6nx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beanplot" ,r-beanplot)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bumphunter" ,r-bumphunter)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genefilter" ,r-genefilter)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-geoquery" ,r-geoquery)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-nlme" ,r-nlme)
-       ("r-nor1mix" ,r-nor1mix)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-siggenes" ,r-siggenes)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beanplot
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bumphunter
+           r-data-table
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genefilter
+           r-genomeinfodb
+           r-genomicranges
+           r-geoquery
+           r-hdf5array
+           r-illuminaio
+           r-iranges
+           r-lattice
+           r-limma
+           r-mass
+           r-mclust
+           r-nlme
+           r-nor1mix
+           r-preprocesscore
+           r-quadprog
+           r-rcolorbrewer
+           r-reshape
+           r-s4vectors
+           r-siggenes
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/minfi")
     (synopsis "Analyze Illumina Infinium DNA methylation arrays")
     (description
@@ -7266,27 +7116,27 @@ methylation arrays.")
          "1lfcsv8k9c4ndfwlbdk3vd7fq58100bfijyxklna41zf8m8kkkka"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-fdb-infiniummethylation-hg19" ,r-fdb-infiniummethylation-hg19)
-       ("r-genefilter" ,r-genefilter)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-minfi" ,r-minfi)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotate
+           r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-fdb-infiniummethylation-hg19
+           r-genefilter
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-illuminaio
+           r-iranges
+           r-lattice
+           r-matrixstats
+           r-minfi
+           r-reshape2
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/methylumi")
     (synopsis "Handle Illumina methylation data")
     (description
@@ -7313,21 +7163,21 @@ and Infinium HD arrays are also included.")
          "0v33p66vn4alhx2il9wwdvc9sqvgasgj0s2gk85gjc76ad0017in"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annotate" ,r-annotate)
-       ("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-methylumi" ,r-methylumi)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-affy
+           r-annotate
+           r-annotationdbi
+           r-biobase
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-kernsmooth
+           r-lattice
+           r-mass
+           r-methylumi
+           r-mgcv
+           r-nleqslv
+           r-preprocesscore
+           r-rsqlite))
     (home-page "https://bioconductor.org/packages/lumi")
     (synopsis "BeadArray-specific methods for Illumina methylation and expression microarrays")
     (description
@@ -7353,26 +7203,26 @@ especially Illumina Infinium methylation microarrays.")
     (properties `((upstream-name . "Linnorm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-amap" ,r-amap)
-       ("r-apcluster" ,r-apcluster)
-       ("r-ellipse" ,r-ellipse)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-fpc" ,r-fpc)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gmodels" ,r-gmodels)
-       ("r-igraph" ,r-igraph)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rtsne" ,r-rtsne)
-       ("r-statmod" ,r-statmod)
-       ("r-vegan" ,r-vegan)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-amap
+           r-apcluster
+           r-ellipse
+           r-fastcluster
+           r-fpc
+           r-ggdendro
+           r-ggplot2
+           r-gmodels
+           r-igraph
+           r-limma
+           r-mass
+           r-mclust
+           r-rcpp
+           r-rcpparmadillo
+           r-rtsne
+           r-statmod
+           r-vegan
+           r-zoo))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.jjwanglab.org/Linnorm/")
     (synopsis "Linear model and normality based transformation method")
     (description
@@ -7414,21 +7264,21 @@ evaluation of DEG analysis methods.")
     (properties `((upstream-name . "IONiseR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bit64" ,r-bit64)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-shortread" ,r-shortread)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bit64
+           r-dplyr
+           r-ggplot2
+           r-magrittr
+           r-rhdf5
+           r-shortread
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/IONiseR/")
     (synopsis "Quality assessment tools for Oxford Nanopore MinION data")
     (description
@@ -7455,10 +7305,7 @@ surface of a flowcell.")
     (properties `((upstream-name . "mutoss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-multcomp" ,r-multcomp)
-       ("r-multtest" ,r-multtest)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-multcomp r-multtest r-mvtnorm r-plotrix))
     (home-page "https://github.com/kornl/mutoss/")
     (synopsis "Unified multiple testing procedures")
     (description
@@ -7483,10 +7330,7 @@ are standardized and usable by the accompanying mutossGUI package.")
          "1jmmmmjiklaxfl604hwqil193ydaghvd5jv8xsr4bx3pzn5i9kvz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mutoss" ,r-mutoss)
-       ("r-rdpack" ,r-rdpack)
-       ("r-tfisher" ,r-tfisher)))
+     (list r-lattice r-mutoss r-rdpack r-tfisher))
     (home-page "http://www.dewey.myzen.co.uk/meta/meta.html")
     (synopsis "Meta-analysis of significance values")
     (description
@@ -7509,28 +7353,28 @@ published results; and a routine for graphical display.")
               "1s5anbb38gi5sfkxy19zpvkj8d0ij7m6cd0z4gmx4f5pf7pz0m3j"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-edger" ,r-edger)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-igraph" ,r-igraph)
-      ("r-magrittr" ,r-magrittr)
-      ("r-mass" ,r-mass)
-      ("r-matrix" ,r-matrix)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-mgcv" ,r-mgcv)
-      ("r-pbapply" ,r-pbapply)
-      ("r-princurve" ,r-princurve)
-      ("r-rcolorbrewer" ,r-rcolorbrewer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-singlecellexperiment" ,r-singlecellexperiment)
-      ("r-slingshot" ,r-slingshot)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-tibble" ,r-tibble)
-      ("r-trajectoryutils" ,r-trajectoryutils)
-      ("r-viridis" ,r-viridis)))
+    (list r-biobase
+          r-biocparallel
+          r-edger
+          r-ggplot2
+          r-igraph
+          r-magrittr
+          r-mass
+          r-matrix
+          r-matrixstats
+          r-mgcv
+          r-pbapply
+          r-princurve
+          r-rcolorbrewer
+          r-s4vectors
+          r-singlecellexperiment
+          r-slingshot
+          r-summarizedexperiment
+          r-tibble
+          r-trajectoryutils
+          r-viridis))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://statomics.github.io/tradeSeq/index.html")
    (synopsis "Trajectory-based differential expression analysis")
    (description
@@ -7557,9 +7401,7 @@ performs inference on the parameters of the GAM.")
          "089b7f6dwpi9abj0ncswbi4s30k45996zb99sh43avw6jcb6qj60"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-yaml" ,r-yaml)))
+     (list r-biocgenerics r-iranges r-yaml))
     (home-page "https://bioconductor.org/packages/triform/")
     (synopsis "Find enriched regions in transcription factor ChIP-sequencing data")
     (description
@@ -7582,20 +7424,20 @@ peak definition in combination with known profile characteristics.")
     (properties `((upstream-name . "VariantTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-variantannotation))
     (home-page "https://bioconductor.org/packages/VariantTools/")
     (synopsis "Tools for exploratory analysis of variant calls")
     (description
@@ -7622,7 +7464,7 @@ gmapR.")
     (properties `((upstream-name . "Heatplus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-rcolorbrewer))
     (home-page "https://github.com/alexploner/Heatplus")
     (synopsis "Heatmaps with row and/or column covariates and colored clusters")
     (description
@@ -7647,11 +7489,9 @@ information about samples and features can be added to the plot.")
     (properties `((upstream-name . "GOSemSim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-go-db" ,r-go-db)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-annotationdbi r-go-db r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/GOSemSim")
     (synopsis "GO-terms semantic similarity measures")
     (description
@@ -7675,8 +7515,7 @@ sets of GO terms, gene products and gene clusters.")
          "0agvcpb3lr9v55h53ywf662gpxayivxacv8dcm526cc8i8hdqa9f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-multtest" ,r-multtest)
-       ("r-qvalue" ,r-qvalue)))
+     (list r-multtest r-qvalue))
     (home-page "https://bioconductor.org/packages/anota/")
     (synopsis "Analysis of translational activity")
     (description
@@ -7728,15 +7567,15 @@ phenotype of interest.")
     (properties `((upstream-name . "fcScan")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-plyr" ,r-plyr)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-doparallel
+           r-foreach
+           r-genomicranges
+           r-iranges
+           r-plyr
+           r-rtracklayer
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/fcScan")
     (synopsis "Detect clusters of coordinates with user defined options")
     (description
@@ -7761,16 +7600,16 @@ presence of additional sites within the allowed window size.")
          "10flcdm4b1kxnsvhl4k6mwkzb1vbai33k291j8nsrhj2cl5l8gm9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-data-table" ,r-data-table)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh
+           r-biocparallel
+           r-data-table
+           r-fastmatch
+           r-ggplot2
+           r-gridextra
+           r-matrix
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ctlab/fgsea/")
     (synopsis "Fast gene set enrichment analysis")
     (description
@@ -7794,16 +7633,16 @@ to multiple hypothesis correction.")
     (properties `((upstream-name . "DOSE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-do-db" ,r-do-db)
-       ("r-fgsea" ,r-fgsea)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-qvalue" ,r-qvalue)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-annotationdbi
+           r-biocparallel
+           r-do-db
+           r-fgsea
+           r-ggplot2
+           r-gosemsim
+           r-qvalue
+           r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/DOSE/")
     (synopsis "Disease ontology semantic and enrichment analysis")
     (description
@@ -7828,23 +7667,23 @@ data.")
          "0nsx96mkcg0hhg3x8jndzq3xvq9bq7m4yf1b3ry73b17ladx81ch"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aplot" ,r-aplot)
-       ("r-dose" ,r-dose)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-ggtree" ,r-ggtree)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-purrr" ,r-purrr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scatterpie" ,r-scatterpie)
-       ("r-shadowtext" ,r-shadowtext)
-       ("r-yulab-utils" ,r-yulab-utils)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-aplot
+           r-dose
+           r-ggplot2
+           r-ggraph
+           r-ggtree
+           r-gosemsim
+           r-igraph
+           r-magrittr
+           r-plyr
+           r-purrr
+           r-rcolorbrewer
+           r-reshape2
+           r-scatterpie
+           r-shadowtext
+           r-yulab-utils))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/enrichplot")
     (synopsis "Visualization of functional enrichment result")
     (description
@@ -7868,21 +7707,21 @@ All the visualization methods are developed based on ggplot2 graphics.")
      `((upstream-name . "clusterProfiler")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dose" ,r-dose)
-       ("r-downloader" ,r-downloader)
-       ("r-dplyr" ,r-dplyr)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-go-db" ,r-go-db)
-       ("r-gosemsim" ,r-gosemsim)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-qvalue" ,r-qvalue)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)
-       ("r-yulab-utils" ,r-yulab-utils)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-dose
+           r-downloader
+           r-dplyr
+           r-enrichplot
+           r-go-db
+           r-gosemsim
+           r-magrittr
+           r-plyr
+           r-qvalue
+           r-rlang
+           r-tidyr
+           r-yulab-utils))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/clusterProfiler/")
     (synopsis "Analysis and visualization of functional profiles for gene clusters")
     (description
@@ -7902,33 +7741,33 @@ profiles (GO and KEGG) of gene and gene clusters.")
                 "0riray1f841d5fx6mbcki5xmqz21kg5q5l0qz4pkgg9c1d9f7mbc"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-cluster" ,r-cluster)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-edger" ,r-edger)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-howmany" ,r-howmany)
-       ("r-kernlab" ,r-kernlab)
-       ("r-limma" ,r-limma)
-       ("r-locfdr" ,r-locfdr)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mbkmeans" ,r-mbkmeans)
-       ("r-nmf" ,r-nmf)
-       ("r-phylobase" ,r-phylobase)
-       ("r-pracma" ,r-pracma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-zinbwave" ,r-zinbwave)))
+     (list r-knitr))
+    (propagated-inputs
+     (list r-ape
+           r-biocgenerics
+           r-biocsingular
+           r-cluster
+           r-delayedarray
+           r-edger
+           r-hdf5array
+           r-howmany
+           r-kernlab
+           r-limma
+           r-locfdr
+           r-matrix
+           r-matrixstats
+           r-mbkmeans
+           r-nmf
+           r-phylobase
+           r-pracma
+           r-rcolorbrewer
+           r-rcpp
+           r-s4vectors
+           r-scales
+           r-singlecellexperiment
+           r-stringr
+           r-summarizedexperiment
+           r-zinbwave))
     (home-page "https://bioconductor.org/packages/clusterExperiment/")
     (synopsis "Compare clusterings for single-cell sequencing")
     (description "This package provides functionality for running and comparing
@@ -7950,26 +7789,26 @@ expression data sets.")
     (properties `((upstream-name . "MLInterfaces")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cluster" ,r-cluster)
-       ("r-fpc" ,r-fpc)
-       ("r-gbm" ,r-gbm)
-       ("r-gdata" ,r-gdata)
-       ("r-genefilter" ,r-genefilter)
-       ("r-ggvis" ,r-ggvis)
-       ("r-hwriter" ,r-hwriter)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-mlbench" ,r-mlbench)
-       ("r-pls" ,r-pls)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rpart" ,r-rpart)
-       ("r-sfsmisc" ,r-sfsmisc)
-       ("r-shiny" ,r-shiny)
-       ("r-threejs" ,r-threejs)))
+     (list r-annotate
+           r-biobase
+           r-biocgenerics
+           r-cluster
+           r-fpc
+           r-gbm
+           r-gdata
+           r-genefilter
+           r-ggvis
+           r-hwriter
+           r-magrittr
+           r-mass
+           r-mlbench
+           r-pls
+           r-rcolorbrewer
+           r-rcpp
+           r-rpart
+           r-sfsmisc
+           r-shiny
+           r-threejs))
     (home-page "https://bioconductor.org/packages/MLInterfaces/")
     (synopsis "Interfaces to R machine learning procedures")
     (description
@@ -7998,11 +7837,7 @@ data in R and Bioconductor containers.")
              (substitute* "DESCRIPTION"
                ((", KEGG.db") "")))))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-dbi" ,r-dbi)
-       ("r-go-db" ,r-go-db)))
+     (list r-annotationdbi r-biobase r-biocmanager r-dbi r-go-db))
     (home-page "https://bioconductor.org/packages/annaffy/")
     (synopsis "Annotation tools for Affymetrix biological metadata")
     (description
@@ -8028,10 +7863,9 @@ It allows searching of biological metadata using various criteria.")
     (properties `((upstream-name . "a4Core")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-glmnet" ,r-glmnet)))
+     (list r-biobase r-glmnet))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Core")
     (synopsis "Automated Affymetrix array analysis core package")
     (description
@@ -8053,15 +7887,15 @@ arrays.")
     (properties `((upstream-name . "a4Classif")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-biobase" ,r-biobase)
-       ("r-glmnet" ,r-glmnet)
-       ("r-pamr" ,r-pamr)
-       ("r-rocr" ,r-rocr)
-       ("r-varselrf" ,r-varselrf)))
+     (list r-a4core
+           r-a4preproc
+           r-biobase
+           r-glmnet
+           r-pamr
+           r-rocr
+           r-varselrf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Classif/")
     (synopsis "Automated Affymetrix array analysis classification package")
     (description
@@ -8083,10 +7917,9 @@ Affymetrix arrays.")
     (properties `((upstream-name . "a4Preproc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biobase r-biocgenerics))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Preproc/")
     (synopsis "Automated Affymetrix array analysis preprocessing package")
     (description
@@ -8108,9 +7941,9 @@ is used for preprocessing the arrays.")
     (properties `((upstream-name . "a4Reporting")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xtable" ,r-xtable)))
+     (list r-xtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/a4Reporting/")
     (synopsis "Automated Affymetrix array analysis reporting package")
     (description
@@ -8132,16 +7965,16 @@ provides reporting features.")
     (properties `((upstream-name . "a4Base")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-annaffy" ,r-annaffy)
-       ("r-biobase" ,r-biobase)
-       ("r-genefilter" ,r-genefilter)
-       ("r-glmnet" ,r-glmnet)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-mpm" ,r-mpm)
-       ("r-multtest" ,r-multtest)))
+     (list r-a4core
+           r-a4preproc
+           r-annaffy
+           r-biobase
+           r-genefilter
+           r-glmnet
+           r-gplots
+           r-limma
+           r-mpm
+           r-multtest))
     (home-page "https://bioconductor.org/packages/a4Base/")
     (synopsis "Automated Affymetrix array analysis base package")
     (description
@@ -8162,11 +7995,7 @@ Affymetrix arrays.")
          "0mkgim93441zxhn4wmbin9ydl94srsawis0xwx479l0byj88n07m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-a4base" ,r-a4base)
-       ("r-a4classif" ,r-a4classif)
-       ("r-a4core" ,r-a4core)
-       ("r-a4preproc" ,r-a4preproc)
-       ("r-a4reporting" ,r-a4reporting)))
+     (list r-a4base r-a4classif r-a4core r-a4preproc r-a4reporting))
     (home-page "https://bioconductor.org/packages/a4/")
     (synopsis "Automated Affymetrix array analysis umbrella package")
     (description
@@ -8188,28 +8017,28 @@ Affymetrix arrays.")
     (properties `((upstream-name . "abseqR")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-circlize" ,r-circlize)
-       ("r-flexdashboard" ,r-flexdashboard)
-       ("r-ggcorrplot" ,r-ggcorrplot)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-knitr" ,r-knitr)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-stringr" ,r-stringr)
-       ("r-vegan" ,r-vegan)
-       ("r-venndiagram" ,r-venndiagram)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-biocparallel
+           r-biocstyle
+           r-circlize
+           r-flexdashboard
+           r-ggcorrplot
+           r-ggdendro
+           r-ggplot2
+           r-gridextra
+           r-knitr
+           r-plotly
+           r-plyr
+           r-png
+           r-rcolorbrewer
+           r-reshape2
+           r-rmarkdown
+           r-stringr
+           r-vegan
+           r-venndiagram))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/malhamdoosh/abseqR")
     (synopsis "Reporting and data analysis for Rep-Seq datasets of antibody libraries")
     (description
@@ -8235,11 +8064,9 @@ further downstream analysis on its output.")
          "13dhma34j9ggryainn4x6qvd3hphpxks5gf0mysia00r9hhpwwlc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-ellipse" ,r-ellipse)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-biocparallel r-ellipse r-ggplot2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/bacon/")
     (synopsis "Controlling bias and inflation in association studies")
     (description
@@ -8263,11 +8090,7 @@ fitting a three-component normal mixture on z-scores.")
     (properties `((upstream-name . "rGADEM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-seqlogo" ,r-seqlogo)))
+     (list r-biostrings r-bsgenome r-genomicranges r-iranges r-seqlogo))
     (home-page "https://bioconductor.org/packages/rGADEM/")
     (synopsis "De novo sequence motif discovery")
     (description
@@ -8289,15 +8112,15 @@ genomic sequence data.")
     (properties `((upstream-name . "MotIV")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-rgadem" ,r-rgadem)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list gsl))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biostrings
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-rgadem
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/MotIV/")
     (synopsis "Motif identification and validation")
     (description
@@ -8319,15 +8142,15 @@ distributions, modules and filter motifs.")
    (properties `((upstream-name . "MotifDb")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocgenerics" ,r-biocgenerics)
-      ("r-biostrings" ,r-biostrings)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-iranges" ,r-iranges)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-splitstackshape" ,r-splitstackshape)))
+    (list r-biocgenerics
+          r-biostrings
+          r-genomicranges
+          r-iranges
+          r-rtracklayer
+          r-s4vectors
+          r-splitstackshape))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (home-page "https://www.bioconductor.org/packages/MotifDb/")
    (synopsis "Annotated collection of protein-DNA binding sequence motifs")
    (description "This package provides more than 2000 annotated position
@@ -8346,26 +8169,26 @@ frequency matrices from nine public sources, for multiple organisms.")
    (properties `((upstream-name . "motifbreakR")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-biocgenerics" ,r-biocgenerics)
-      ("r-biocparallel" ,r-biocparallel)
-      ("r-biostrings" ,r-biostrings)
-      ("r-bsgenome" ,r-bsgenome)
-      ("r-genomeinfodb" ,r-genomeinfodb)
-      ("r-genomicranges" ,r-genomicranges)
-      ("r-grimport" ,r-grimport)
-      ("r-gviz" ,r-gviz)
-      ("r-iranges" ,r-iranges)
-      ("r-matrixstats" ,r-matrixstats)
-      ("r-motifdb" ,r-motifdb)
-      ("r-motifstack" ,r-motifstack)
-      ("r-rtracklayer" ,r-rtracklayer)
-      ("r-s4vectors" ,r-s4vectors)
-      ("r-stringr" ,r-stringr)
-      ("r-summarizedexperiment" ,r-summarizedexperiment)
-      ("r-tfmpvalue" ,r-tfmpvalue)
-      ("r-variantannotation" ,r-variantannotation)))
+    (list r-biocgenerics
+          r-biocparallel
+          r-biostrings
+          r-bsgenome
+          r-genomeinfodb
+          r-genomicranges
+          r-grimport
+          r-gviz
+          r-iranges
+          r-matrixstats
+          r-motifdb
+          r-motifstack
+          r-rtracklayer
+          r-s4vectors
+          r-stringr
+          r-summarizedexperiment
+          r-tfmpvalue
+          r-variantannotation))
    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
    (home-page "https://www.bioconductor.org/packages/motifbreakR/")
    (synopsis "Predicting disruptiveness of single nucleotide polymorphisms")
    (description "This package allows biologists to judge in the first place
@@ -8399,13 +8222,9 @@ Bioconductor.")
     (properties `((upstream-name . "motifStack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-xml" ,r-xml)))
+     (list r-ade4 r-biostrings r-ggplot2 r-htmlwidgets r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/motifStack/")
     (synopsis "Plot stacked logos for DNA, RNA and amino acid sequences")
     (description
@@ -8430,22 +8249,22 @@ type and symbol colors.")
     (properties `((upstream-name . "GenomicScores")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biobase" ,r-biobase)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-iranges" ,r-iranges)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-biobase
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-biostrings
+           r-delayedarray
+           r-genomeinfodb
+           r-genomicranges
+           r-hdf5array
+           r-iranges
+           r-rhdf5
+           r-s4vectors
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/rcastelo/GenomicScores/")
     (synopsis "Work with genome-wide position-specific scores")
     (description
@@ -8467,26 +8286,26 @@ position-specific scores within R and Bioconductor.")
     (properties `((upstream-name . "ATACseqQC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-chippeakanno" ,r-chippeakanno)
-       ("r-edger" ,r-edger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-iranges" ,r-iranges)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-limma" ,r-limma)
-       ("r-motifstack" ,r-motifstack)
-       ("r-preseqr" ,r-preseqr)
-       ("r-randomforest" ,r-randomforest)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-chippeakanno
+           r-edger
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-genomicscores
+           r-iranges
+           r-kernsmooth
+           r-limma
+           r-motifstack
+           r-preseqr
+           r-randomforest
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ATACseqQC/")
     (synopsis "ATAC-seq quality control")
     (description
@@ -8514,15 +8333,15 @@ footprints.")
     (properties `((upstream-name . "GOfuncR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-mapplots" ,r-mapplots)
-       ("r-rcpp" ,r-rcpp)
-       ("r-vioplot" ,r-vioplot)))
+     (list r-annotationdbi
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-mapplots
+           r-rcpp
+           r-vioplot))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GOfuncR/")
     (synopsis "Gene ontology enrichment using FUNC")
     (description
@@ -8563,14 +8382,14 @@ annotations and ontologies.")
     (properties `((upstream-name . "ABAEnrichment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abadata" ,r-abadata)
-       ("r-data-table" ,r-data-table)
-       ("r-gofuncr" ,r-gofuncr)
-       ("r-gplots" ,r-gplots)
-       ("r-gtools" ,r-gtools)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-abadata
+           r-data-table
+           r-gofuncr
+           r-gplots
+           r-gtools
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ABAEnrichment/")
     (synopsis "Gene expression enrichment in human brain regions")
     (description
@@ -8596,8 +8415,7 @@ the brain using an ontology, both provided by the Allen Brain Atlas project.")
      `((upstream-name . "AnnotationFuncs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dbi" ,r-dbi)))
+     (list r-annotationdbi r-dbi))
     (home-page "https://www.iysik.com/r/annotationfuncs")
     (synopsis "Annotation translation functions")
     (description
@@ -8620,7 +8438,7 @@ different identifieres using the Biocore Data Team data-packages (e.g.
     (properties
      `((upstream-name . "annotationTools")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/annotationTools/")
     (synopsis "Annotate microarrays and perform gene expression analyses")
     (description
@@ -8646,27 +8464,27 @@ text files).")
      `((upstream-name . "AllelicImbalance")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-nlme" ,r-nlme)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-gridextra
+           r-gviz
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-nlme
+           r-rsamtools
+           r-s4vectors
+           r-seqinr
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/pappewaio/AllelicImbalance")
     (synopsis "Investigate allele-specific expression")
     (description
@@ -8688,16 +8506,16 @@ investigation using RNA-seq data.")
     (properties `((upstream-name . "AUCell")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-gseabase" ,r-gseabase)
-       ("r-mixtools" ,r-mixtools)
-       ("r-r-utils" ,r-r-utils)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-data-table
+           r-gseabase
+           r-mixtools
+           r-r-utils
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/AUCell/")
     (synopsis "Analysis of gene set activity in single-cell RNA-seq data")
     (description
@@ -8727,18 +8545,18 @@ needed.")
     (properties `((upstream-name . "EBImage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-fftwtools" ,r-fftwtools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jpeg" ,r-jpeg)
-       ("r-locfit" ,r-locfit)
-       ("r-png" ,r-png)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tiff" ,r-tiff)))
+     (list r-abind
+           r-biocgenerics
+           r-fftwtools
+           r-htmltools
+           r-htmlwidgets
+           r-jpeg
+           r-locfit
+           r-png
+           r-rcurl
+           r-tiff))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/aoles/EBImage")
     (synopsis "Image processing and analysis toolbox for R")
     (description
@@ -8765,18 +8583,17 @@ visualization with image data.")
          "141hbryifm6na5shjyrbjwwksqnl75kqp1m2zl03l9sjqm0kapab"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-ebimage" ,r-ebimage)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-matrix" ,r-matrix)
-       ("r-mzr" ,r-mzr)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment"
-        ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-data-table
+           r-ebimage
+           r-iranges
+           r-limma
+           r-matrix
+           r-mzr
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/yamss")
     (synopsis "Tools for high-throughput metabolomics")
     (description
@@ -8799,12 +8616,9 @@ analysis.")
          "0q2lyb8p1xhqqhw4q1br4r8mwq06mjws8iwbbilkngvs3brbmrzl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circlize" ,r-circlize)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-iranges" ,r-iranges)))
+     (list r-circlize r-genomicranges r-getoptlong r-iranges))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/gtrellis")
     (synopsis "Genome level Trellis layout")
     (description
@@ -8830,21 +8644,21 @@ genomic categories and to add self-defined graphics in the plot.")
      `((upstream-name . "SomaticSignatures")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-nmf" ,r-nmf)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-proxy" ,r-proxy)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-iranges
+           r-nmf
+           r-pcamethods
+           r-proxy
+           r-reshape2
+           r-s4vectors
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/juliangehring/SomaticSignatures")
     (synopsis "Somatic signatures")
     (description
@@ -8868,31 +8682,31 @@ decomposition algorithms.")
     (properties `((upstream-name . "YAPSA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-circlize" ,r-circlize)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-corrplot" ,r-corrplot)
-       ("r-dendextend" ,r-dendextend)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtrellis" ,r-gtrellis)
-       ("r-keggrest" ,r-keggrest)
-       ("r-limsolve" ,r-limsolve)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pmcmr" ,r-pmcmr)
-       ("r-pracma" ,r-pracma)
-       ("r-reshape2" ,r-reshape2)
-       ("r-somaticsignatures" ,r-somaticsignatures)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biostrings
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-circlize
+           r-complexheatmap
+           r-corrplot
+           r-dendextend
+           r-doparallel
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-getoptlong
+           r-ggbeeswarm
+           r-ggplot2
+           r-gridextra
+           r-gtrellis
+           r-keggrest
+           r-limsolve
+           r-magrittr
+           r-pmcmr
+           r-pracma
+           r-reshape2
+           r-somaticsignatures
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/YAPSA/")
     (synopsis "Yet another package for signature analysis")
     (description
@@ -8916,12 +8730,12 @@ provided.")
          "0h7dl4if6skbcqdjdzqyghyswhwpx7xvb54lffz4wdaxpabp3001"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-affyio" ,r-affyio)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biostrings" ,r-biostrings)
-       ("r-xvector" ,r-xvector)))
+     (list r-affy
+           r-affyio
+           r-biobase
+           r-biocmanager
+           r-biostrings
+           r-xvector))
     (home-page "https://bioconductor.org/packages/gcrma/")
     (synopsis "Background adjustment using sequence information")
     (description
@@ -8952,11 +8766,7 @@ gene-specific binding is expected.")
          "04a11dsqd5y4b39nny94acnh0qhdazjc6d1803izza4vrgmw2csb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-gcrma" ,r-gcrma)
-       ("r-genefilter" ,r-genefilter)))
+     (list r-affy r-biobase r-biocgenerics r-gcrma r-genefilter))
     (home-page "https://bioconductor.org/packages/simpleaffy/")
     (synopsis "Very simple high level analysis of Affymetrix data")
     (description
@@ -8980,7 +8790,7 @@ generating high resolution journal figures.")
          "18gphcjj15iivrahp52186bvdg07yd2dvrykfjdd4r1vyf33im96"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-simpleaffy" ,r-simpleaffy)))
+     (list r-simpleaffy))
     (home-page "https://bioconductor.org/packages/yaqcaffy/")
     (synopsis "Affymetrix quality control and reproducibility analysis")
     (description
@@ -9002,15 +8812,15 @@ chips with the MAQC reference datasets.")
          "1r2wbsndc0ji22ap27gbr1wy8icj3cjxwqlz1x0gvxkaj69mwsfq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-minfi" ,r-minfi)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-iterators
+           r-minfi
+           r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/quantro/")
     (synopsis "Test for when to use quantile normalization")
     (description
@@ -9035,19 +8845,19 @@ groups.")
          "0nk4qzrwjiv8q39lgil9x25bm3gpzrnhd37d7754kpxhs2fsmw9d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biomart" ,r-biomart)
-       ("r-downloader" ,r-downloader)
-       ("r-edger" ,r-edger)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-quantro" ,r-quantro)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-readr" ,r-readr)))
+     (list r-biobase
+           r-biomart
+           r-downloader
+           r-edger
+           r-gplots
+           r-limma
+           r-matrixstats
+           r-preprocesscore
+           r-quantro
+           r-rcolorbrewer
+           r-readr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/yarn/")
     (synopsis "Robust multi-condition RNA-Seq preprocessing and normalization")
     (description
@@ -9072,14 +8882,14 @@ large RNA-seq experiments.")
          "0hqh4vsnxl2sn1bf6s6wxl2nskb40rhvrysdvb6dr60zkih3g347"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment))
     (home-page "https://github.com/vodkatad/roar/")
     (synopsis "Identify differential APA usage from RNA-seq alignments")
     (description
@@ -9102,17 +8912,17 @@ sites and alignments obtained from standard RNA-seq experiments.")
     (properties `((upstream-name . "XBSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-locfit" ,r-locfit)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pracma" ,r-pracma)
-       ("r-roar" ,r-roar)))
+     (list r-biobase
+           r-deseq2
+           r-dplyr
+           r-ggplot2
+           r-locfit
+           r-magrittr
+           r-matrixstats
+           r-pracma
+           r-roar))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Liuy12/XBSeq")
     (synopsis "Test for differential expression for RNA-seq data")
     (description
@@ -9142,7 +8952,7 @@ genes.")
      `((upstream-name . "MassSpecWavelet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-waveslim" ,r-waveslim)))
+     (list r-waveslim))
     (home-page "https://bioconductor.org/packages/MassSpecWavelet/")
     (synopsis "Mass spectrum processing by wavelet-based algorithms")
     (description
@@ -9164,25 +8974,25 @@ based on @dfn{Continuous Wavelet Transform} (CWT).")
          "19kjyi6br9qp2pnp24shgbww3iqaaqxk9791w8w8qbd6sxijd143"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-massspecwavelet" ,r-massspecwavelet)
-       ("r-mscoreutils" ,r-mscoreutils)
-       ("r-msfeatures" ,r-msfeatures)
-       ("r-msnbase" ,r-msnbase)
-       ("r-mzr" ,r-mzr)
-       ("r-plyr" ,r-plyr)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-rann" ,r-rann)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-robustbase" ,r-robustbase)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-iranges
+           r-lattice
+           r-massspecwavelet
+           r-mscoreutils
+           r-msfeatures
+           r-msnbase
+           r-mzr
+           r-plyr
+           r-protgenerics
+           r-rann
+           r-rcolorbrewer
+           r-robustbase
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/xcms/")
     (synopsis "LC/MS and GC/MS mass spectrometry data analysis")
     (description
@@ -9206,11 +9016,9 @@ data for high-throughput, untargeted analyte profiling.")
     (properties `((upstream-name . "Wrench")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)))
+     (list r-limma r-locfit r-matrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/HCBravoLab/Wrench")
     (synopsis "Wrench normalization for sparse count data")
     (description
@@ -9231,18 +9039,18 @@ that arising from 16s metagenomic surveys.")
          "01y1rbmxjza7qx3q33k0r241if69hzkx9plgmj59wyji22lm7syi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-purrr" ,r-purrr)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-assertthat
+           r-cowplot
+           r-dplyr
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-purrr
+           r-rtracklayer
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wiggleplotr/")
     (synopsis "Make read coverage plots from BigWig files")
     (description
@@ -9286,17 +9094,16 @@ widgets in R.")
          "1r3rjvfhqbbzdhlslnc86kr2iip3xgvr81zpvcr8xv9mysgrln17"))))
     (build-system r-build-system)
     (inputs
-     `(("netpbm" ,netpbm)
-       ("perl" ,perl)))
-    (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-annaffy" ,r-annaffy)
-       ("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-gcrma" ,r-gcrma)
-       ("r-multtest" ,r-multtest)
-       ("r-qvalue" ,r-qvalue)
-       ("r-vsn" ,r-vsn)))
+     (list netpbm perl))
+    (propagated-inputs
+     (list r-affy
+           r-annaffy
+           r-biobase
+           r-biocmanager
+           r-gcrma
+           r-multtest
+           r-qvalue
+           r-vsn))
     (home-page "https://www.bioconductor.org/")
     (synopsis "Bioconductor web interface")
     (description
@@ -9319,15 +9126,15 @@ Currently only Affymetrix oligonucleotide analysis is supported.")
          "05w95bnq63a339d8x4932k81ycqf825s3qwn98vr52v5g2hv46fq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-edger" ,r-edger)
-       ("r-genefilter" ,r-genefilter)
-       ("r-matrix" ,r-matrix)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-softimpute" ,r-softimpute)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocparallel
+           r-edger
+           r-genefilter
+           r-matrix
+           r-singlecellexperiment
+           r-softimpute
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/zinbwave")
     (synopsis "Zero-inflated negative binomial model for RNA-seq data")
     (description "This package implements a general and flexible zero-inflated
@@ -9353,13 +9160,9 @@ the data.")
     (properties `((upstream-name . "zFPKM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-checkmate r-dplyr r-ggplot2 r-summarizedexperiment r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ronammar/zFPKM/")
     (synopsis "Functions to facilitate zFPKM transformations")
     (description
@@ -9382,13 +9185,11 @@ This algorithm is based on the publication by Hart et al., 2013 (Pubmed ID
     (properties `((upstream-name . "Rbowtie2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-magrittr r-rsamtools))
     (inputs
-     `(("samtools" ,samtools)
-       ("zlib" ,zlib)))
+     (list samtools zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Rbowtie2/")
     (synopsis "R wrapper for Bowtie2 and AdapterRemoval")
     (description
@@ -9410,14 +9211,14 @@ rapid adapter trimming, identification, and read merging.")
          "0zhr5i5v87akzqjb6wid67nhg2icrw6w0awdy87x848c6c1i6j9y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gridextra" ,r-gridextra)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/saezlab/progeny")
     (synopsis "Pathway responsive gene activity inference")
     (description
@@ -9441,7 +9242,7 @@ expression\".")
     (properties
      `((upstream-name . "ARRmNormalization")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-arrmdata" ,r-arrmdata)))
+    (propagated-inputs (list r-arrmdata))
     (home-page "https://bioconductor.org/packages/ARRmNormalization/")
     (synopsis "Adaptive robust regression normalization for methylation data")
     (description
@@ -9464,16 +9265,16 @@ Infinium HumanMethylation 450k assay.")
     (properties `((upstream-name . "BiocFileCache")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-dbplyr" ,r-dbplyr)
-       ("r-dplyr" ,r-dplyr)
-       ("r-filelock" ,r-filelock)
-       ("r-httr" ,r-httr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-curl
+           r-dbi
+           r-dbplyr
+           r-dplyr
+           r-filelock
+           r-httr
+           r-rappdirs
+           r-rsqlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocFileCache/")
     (synopsis "Manage files across sessions")
     (description
@@ -9496,7 +9297,7 @@ and data files used across sessions.")
          "0w6r2clk8wdnnnjmq3cspmxiq1c8vwprd66xmdrhcqzbjkpkdw2b"))))
     (properties `((upstream-name . "iClusterPlus")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://bioconductor.org/packages/iClusterPlus/")
     (synopsis "Integrative clustering of multi-type genomic data")
     (description
@@ -9527,7 +9328,7 @@ Gaussian distributions.")
     (properties `((upstream-name . "Rbowtie")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Rbowtie/")
     (synopsis "R bowtie wrapper")
     (description
@@ -9550,22 +9351,22 @@ alignment tool.")
     (properties `((upstream-name . "SGSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-igraph" ,r-igraph)
-       ("r-iranges" ,r-iranges)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-runit" ,r-runit)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biocgenerics
+           r-biostrings
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-igraph
+           r-iranges
+           r-rsamtools
+           r-rtracklayer
+           r-runit
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SGSeq/")
     (synopsis "Splice event prediction and quantification from RNA-seq data")
     (description
@@ -9605,11 +9406,9 @@ interpretation.")
                (("^CPP =.*") (which "g++")))
              #t)))))
     (propagated-inputs
-     `(("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-sgseq" ,r-sgseq)))
+     (list r-genomicfeatures r-genomicranges r-sgseq))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/fmicompbio/Rhisat2")
     (synopsis "R Wrapper for HISAT2 sequence aligner")
     (description
@@ -9633,25 +9432,25 @@ index.")
     (properties `((upstream-name . "QuasR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rbowtie" ,r-rbowtie)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicfiles
+           r-genomicranges
+           r-iranges
+           r-rbowtie
+           r-rhtslib
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/QuasR/")
     (synopsis "Quantify and annotate short reads in R")
     (description
@@ -9675,26 +9474,26 @@ quantification of genomic regions of interest.")
     (properties `((upstream-name . "Rqc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocstyle" ,r-biocstyle)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-shortread" ,r-shortread)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biocstyle
+           r-biostrings
+           r-biovizbase
+           r-genomicalignments
+           r-genomicfiles
+           r-ggplot2
+           r-iranges
+           r-knitr
+           r-markdown
+           r-plyr
+           r-rcpp
+           r-reshape2
+           r-rsamtools
+           r-s4vectors
+           r-shiny
+           r-shortread))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/labbcb/Rqc")
     (synopsis "Quality control tool for high-throughput sequencing data")
     (description
@@ -9718,10 +9517,7 @@ graphics.")
     (properties `((upstream-name . "BiRewire")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-slam" ,r-slam)
-       ("r-tsne" ,r-tsne)))
+     (list r-igraph r-matrix r-slam r-tsne))
     (home-page "https://bioconductor.org/packages/release/bioc/html/BiRewire.html")
     (synopsis "Tools for randomization of bipartite graphs")
     (description
@@ -9746,9 +9542,7 @@ routines to analyse the resulting networks and their natural projections.")
          "00a1kcfmcgdbx6wpnhk45wm45bynhry5m93l9hm75j2rwyc4lnca"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-limma" ,r-limma)
-       ("r-mass" ,r-mass)))
+     (list r-biobase r-limma r-mass))
     (home-page "https://bioconductor.org/packages/birta")
     (synopsis "Bayesian inference of regulation of transcriptional activity")
     (description
@@ -9776,18 +9570,18 @@ Markov-Chain-Monte-Carlo is applied to sample the activity states.")
     (properties `((upstream-name . "MultiDataSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-qqman" ,r-qqman)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biobase
+           r-biocgenerics
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-iranges
+           r-limma
+           r-qqman
+           r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/MultiDataSet/")
     (synopsis "Implementation of MultiDataSet and ResultSet")
     (description
@@ -9812,10 +9606,9 @@ packages.")
          "0mz5lrdsihx66sgx9klnvpxvw1mjjcbijcsdbgxwaimzl9k1kr05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-multidataset" ,r-multidataset)))
+     (list r-biobase r-multidataset))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://dx.doi.org/10.1021/acs.jproteome.5b00354")
     (synopsis "Multivariate analysis and feature selection of omics data")
     (description
@@ -9850,13 +9643,9 @@ coefficients).")
          "189018qahyw33dmg73wa7k4rp8nzrx6ai8f2dr6vhbpcdc1gnm0z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-e1071" ,r-e1071)
-       ("r-multidataset" ,r-multidataset)
-       ("r-randomforest" ,r-randomforest)
-       ("r-ropls" ,r-ropls)))
+     (list r-biobase r-e1071 r-multidataset r-randomforest r-ropls))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/biosigner/")
     (synopsis "Signature discovery from omics data")
     (description
@@ -9883,21 +9672,21 @@ datasets.")
          "1ha2wn56cdab4p3wdwv4xlqjsgl7sd8phbx71qbclrbdwpq2mi7i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-readr" ,r-readr)
-       ("r-regioner" ,r-regioner)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-dplyr
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-readr
+           r-regioner
+           r-reshape2
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/annotatr/")
     (synopsis "Annotation of genomic regions to genomic annotations")
     (description
@@ -9924,9 +9713,9 @@ annotations.")
          "0lpx0dp5570kbrq7v0g573axkhi00qrf38si59vmvnqxhmkvsixn"))))
     (properties `((upstream-name . "Rsubread")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://bioconductor.org/packages/Rsubread/")
     (synopsis "Subread sequence alignment and counting for R")
     (description
@@ -9951,12 +9740,12 @@ and to both short and long sequence reads.")
     (properties `((upstream-name . "flowUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-corpcor" ,r-corpcor)
-       ("r-flowcore" ,r-flowcore)
-       ("r-graph" ,r-graph)
-       ("r-runit" ,r-runit)
-       ("r-xml" ,r-xml)))
+     (list r-biobase
+           r-corpcor
+           r-flowcore
+           r-graph
+           r-runit
+           r-xml))
     (home-page "https://github.com/jspidlen/flowUtils")
     (synopsis "Utilities for flow cytometry")
     (description
@@ -9978,9 +9767,7 @@ and to both short and long sequence reads.")
      `((upstream-name . "ConsensusClusterPlus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-all" ,r-all)
-       ("r-biobase" ,r-biobase)
-       ("r-cluster" ,r-cluster)))
+     (list r-all r-biobase r-cluster))
     (home-page "https://bioconductor.org/packages/ConsensusClusterPlus")
     (synopsis "Clustering algorithm")
     (description
@@ -10002,14 +9789,14 @@ cluster count and membership by stability evidence in unsupervised analysis.")
     (properties `((upstream-name . "cytolib")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)))
+     (list r-bh
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rhdf5lib
+           r-rprotobuflib))
     (home-page "https://bioconductor.org/packages/cytolib/")
     (synopsis "C++ infrastructure for working with gated cytometry")
     (description
@@ -10031,17 +9818,17 @@ interact with gated cytometry data.")
     (properties `((upstream-name . "flowCore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cytolib" ,r-cytolib)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-bh
+           r-biobase
+           r-biocgenerics
+           r-cytolib
+           r-matrixstats
+           r-rcpp
+           r-rcpparmadillo
+           r-rprotobuflib
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowCore")
     (synopsis "Basic structures for flow cytometry data")
     (description
@@ -10063,10 +9850,7 @@ with flow cytometry data.")
     (properties `((upstream-name . "flowMeans")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-feature" ,r-feature)
-       ("r-flowcore" ,r-flowcore)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-biobase r-feature r-flowcore r-rrcov))
     (home-page "https://bioconductor.org/packages/flowMeans")
     (synopsis "Non-parametric flow cytometry data gating")
     (description
@@ -10089,16 +9873,16 @@ change point detection.")
     (properties `((upstream-name . "ncdfFlow")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-flowcore" ,r-flowcore)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-bh
+           r-biobase
+           r-biocgenerics
+           r-flowcore
+           r-rcpp
+           r-rcpparmadillo
+           r-rhdf5lib
+           r-zlibbioc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ncdfFlow/")
     (synopsis "HDF5 based storage for flow cytometry data")
     (description
@@ -10120,19 +9904,19 @@ manipulation of flow cytometry data.")
     (properties `((upstream-name . "ggcyto")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-hexbin" ,r-hexbin)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-plyr" ,r-plyr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-data-table
+           r-flowcore
+           r-flowworkspace
+           r-ggplot2
+           r-gridextra
+           r-hexbin
+           r-ncdfflow
+           r-plyr
+           r-rcolorbrewer
+           r-rlang
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/RGLab/ggcyto/issues")
     (synopsis "Visualize Cytometry data with ggplot")
     (description
@@ -10157,17 +9941,17 @@ statistics to the plot.")
     (properties `((upstream-name . "flowViz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-flowcore" ,r-flowcore)
-       ("r-hexbin" ,r-hexbin)
-       ("r-idpmisc" ,r-idpmisc)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-mass" ,r-mass)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-biobase
+           r-flowcore
+           r-hexbin
+           r-idpmisc
+           r-kernsmooth
+           r-lattice
+           r-latticeextra
+           r-mass
+           r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowViz/")
     (synopsis "Visualization for flow cytometry")
     (description
@@ -10191,20 +9975,19 @@ statistics to the plot.")
      `(#:configure-flags
        (list "--configure-args=--enable-bundled-gsl=no")))
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-clue" ,r-clue)
-       ("r-corpcor" ,r-corpcor)
-       ("r-ellipse" ,r-ellipse)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowviz" ,r-flowviz)
-       ("r-graph" ,r-graph)
-       ("r-mnormt" ,r-mnormt)))
+     (list r-biobase
+           r-biocgenerics
+           r-clue
+           r-corpcor
+           r-ellipse
+           r-flowcore
+           r-flowviz
+           r-graph
+           r-mnormt))
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://bioconductor.org/packages/flowClust")
     (synopsis "Clustering for flow cytometry")
     (description
@@ -10235,7 +10018,7 @@ model with Box-Cox transformation.")
              (with-directory-excursion "src"
                (invoke "tar" "xf" "protobuf-3.13.0.tar.gz")))))))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/RProtoBufLib/")
     (synopsis "C++ headers and static libraries of Protocol buffers")
     (description
@@ -10257,35 +10040,35 @@ for other R packages to compile and link against.")
     (properties `((upstream-name . "flowWorkspace")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aws-s3" ,r-aws-s3)
-       ("r-aws-signature" ,r-aws-signature)
-       ("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cytolib" ,r-cytolib)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-graph" ,r-graph)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-xml" ,r-xml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-aws-s3
+           r-aws-signature
+           r-bh
+           r-biobase
+           r-biocgenerics
+           r-cytolib
+           r-data-table
+           r-delayedarray
+           r-digest
+           r-dplyr
+           r-flowcore
+           r-ggplot2
+           r-graph
+           r-lattice
+           r-latticeextra
+           r-matrixstats
+           r-ncdfflow
+           r-rbgl
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rgraphviz
+           r-rhdf5lib
+           r-rprotobuflib
+           r-s4vectors
+           r-scales
+           r-xml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/flowWorkspace/")
     (synopsis "Infrastructure for working with cytometry data")
     (description
@@ -10311,20 +10094,20 @@ matches the flowJo analysis.")
     (properties `((upstream-name . "flowStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-cluster" ,r-cluster)
-       ("r-fda" ,r-fda)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowviz" ,r-flowviz)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-ks" ,r-ks)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-biobase
+           r-biocgenerics
+           r-cluster
+           r-fda
+           r-flowcore
+           r-flowviz
+           r-flowworkspace
+           r-kernsmooth
+           r-ks
+           r-lattice
+           r-mass
+           r-ncdfflow
+           r-rcolorbrewer
+           r-rrcov))
     (home-page "http://www.github.com/RGLab/flowStats")
     (synopsis "Statistical methods for the analysis of flow cytometry data")
     (description
@@ -10347,29 +10130,29 @@ package.")
     (properties `((upstream-name . "openCyto")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-clue" ,r-clue)
-       ("r-data-table" ,r-data-table)
-       ("r-flowclust" ,r-flowclust)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowstats" ,r-flowstats)
-       ("r-flowviz" ,r-flowviz)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-graph" ,r-graph)
-       ("r-gtools" ,r-gtools)
-       ("r-ks" ,r-ks)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-ncdfflow" ,r-ncdfflow)
-       ("r-plyr" ,r-plyr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rrcov" ,r-rrcov)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-clue
+           r-data-table
+           r-flowclust
+           r-flowcore
+           r-flowstats
+           r-flowviz
+           r-flowworkspace
+           r-graph
+           r-gtools
+           r-ks
+           r-lattice
+           r-mass
+           r-ncdfflow
+           r-plyr
+           r-r-utils
+           r-rbgl
+           r-rcolorbrewer
+           r-rcpp
+           r-rrcov))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/openCyto")
     (synopsis "Hierarchical gating pipeline for flow cytometry data")
     (description
@@ -10391,38 +10174,37 @@ sequential way to mimic the manual gating strategy.")
     (properties `((upstream-name . "CytoML")))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-bh" ,r-bh)
-       ("r-biobase" ,r-biobase)
-       ("r-corpcor" ,r-corpcor)
-       ("r-cytolib" ,r-cytolib)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggcyto" ,r-ggcyto)
-       ("r-graph" ,r-graph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lattice" ,r-lattice)
-       ("r-opencyto" ,r-opencyto)
-       ("r-plyr" ,r-plyr)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-rprotobuflib" ,r-rprotobuflib)
-       ("r-runit" ,r-runit)
-       ("r-tibble" ,r-tibble)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list libxml2 zlib))
+    (propagated-inputs
+     (list r-base64enc
+           r-bh
+           r-biobase
+           r-corpcor
+           r-cytolib
+           r-data-table
+           r-dplyr
+           r-flowcore
+           r-flowworkspace
+           r-ggcyto
+           r-graph
+           r-jsonlite
+           r-lattice
+           r-opencyto
+           r-plyr
+           r-rbgl
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-rgraphviz
+           r-rhdf5lib
+           r-rprotobuflib
+           r-runit
+           r-tibble
+           r-xml
+           r-xml2
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/RGLab/CytoML")
     (synopsis "GatingML interface for cross platform cytometry data sharing")
     (description
@@ -10444,28 +10226,28 @@ standard to exchange gated cytometry data with other software platforms.")
     (properties `((upstream-name . "FlowSOM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-colorramps" ,r-colorramps)
-       ("r-consensusclusterplus" ,r-consensusclusterplus)
-       ("r-cytoml" ,r-cytoml)
-       ("r-dplyr" ,r-dplyr)
-       ("r-flowcore" ,r-flowcore)
-       ("r-flowworkspace" ,r-flowworkspace)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggnewscale" ,r-ggnewscale)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpointdensity" ,r-ggpointdensity)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rtsne" ,r-rtsne)
-       ("r-scattermore" ,r-scattermore)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml" ,r-xml)))
+     (list r-biocgenerics
+           r-colorramps
+           r-consensusclusterplus
+           r-cytoml
+           r-dplyr
+           r-flowcore
+           r-flowworkspace
+           r-ggforce
+           r-ggnewscale
+           r-ggplot2
+           r-ggpointdensity
+           r-ggpubr
+           r-ggrepel
+           r-igraph
+           r-magrittr
+           r-pheatmap
+           r-rcolorbrewer
+           r-rlang
+           r-rtsne
+           r-scattermore
+           r-tidyr
+           r-xml))
     (home-page "https://bioconductor.org/packages/FlowSOM/")
     (synopsis "Visualize and interpret cytometry data")
     (description
@@ -10487,23 +10269,23 @@ self-organizing map clustering and minimal spanning trees.")
     (properties `((upstream-name . "mixOmics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-corpcor" ,r-corpcor)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipse" ,r-ellipse)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-igraph" ,r-igraph)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rarpack" ,r-rarpack)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-corpcor
+           r-dplyr
+           r-ellipse
+           r-ggrepel
+           r-ggplot2
+           r-gridextra
+           r-igraph
+           r-lattice
+           r-mass
+           r-matrixstats
+           r-rarpack
+           r-rcolorbrewer
+           r-reshape2
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.mixOmics.org")
     (synopsis "Multivariate methods for exploration of biological datasets")
     (description
@@ -10533,25 +10315,25 @@ delete entire rows with missing data.")
     (properties `((upstream-name . "DepecheR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beanplot" ,r-beanplot)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gmodels" ,r-gmodels)
-       ("r-gplots" ,r-gplots)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mixomics" ,r-mixomics)
-       ("r-moments" ,r-moments)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-reshape2" ,r-reshape2)
-       ("r-robustbase" ,r-robustbase)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beanplot
+           r-dosnow
+           r-dplyr
+           r-fnn
+           r-foreach
+           r-ggplot2
+           r-gmodels
+           r-gplots
+           r-mass
+           r-matrixstats
+           r-mixomics
+           r-moments
+           r-rcpp
+           r-rcppeigen
+           r-reshape2
+           r-robustbase
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/DepecheR/")
     (synopsis "Identify traits of clusters in high-dimensional entities")
     (description
@@ -10579,20 +10361,20 @@ data, to only emphasize the data that actually matters.")
     (properties `((upstream-name . "RcisTarget")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arrow" ,r-arrow)
-       ("r-aucell" ,r-aucell)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-feather" ,r-feather)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gseabase" ,r-gseabase)
-       ("r-r-utils" ,r-r-utils)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-arrow
+           r-aucell
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-feather
+           r-genomeinfodb
+           r-genomicranges
+           r-gseabase
+           r-r-utils
+           r-summarizedexperiment
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://aertslab.org/#scenic")
     (synopsis "Identify transcription factor binding motifs enriched on a gene list")
     (description
@@ -10621,12 +10403,8 @@ genes in the gene-set that are ranked above the leading edge).")
     (properties `((upstream-name . "Chicago")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-delaporte" ,r-delaporte)
-       ("r-hmisc" ,r-hmisc)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-data-table r-delaporte r-hmisc r-mass r-matrixstats))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/Chicago")
     (synopsis "Capture Hi-C analysis of genomic organization")
     (description
@@ -10646,30 +10424,30 @@ genes in the gene-set that are ranked above the leading edge).")
          "1fc69nkm2cwpr6gkfmra2ph0lrmw486chswp4pn8i70ia43fzdm7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glasso" ,r-glasso)
-       ("r-gviz" ,r-gviz)
-       ("r-igraph" ,r-igraph)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-monocle" ,r-monocle)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vgam" ,r-vgam)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-biobase
+           r-biocgenerics
+           r-data-table
+           r-dplyr
+           r-fnn
+           r-genomicranges
+           r-ggplot2
+           r-glasso
+           r-gviz
+           r-igraph
+           r-iranges
+           r-matrix
+           r-monocle
+           r-plyr
+           r-reshape2
+           r-s4vectors
+           r-stringi
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-vgam))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/cicero/")
     (synopsis "Predict cis-co-accessibility from single-cell data")
     (description
@@ -10696,9 +10474,9 @@ accessibility data.")
           (base32
            "077yza93wdhi08n40md20jwk55k9lw1f3y0063qkk90cpz60wi0c"))))
       (propagated-inputs
-       `(("r-monocle3" ,r-monocle3)
-         ,@(alist-delete "r-monocle"
-                         (package-propagated-inputs r-cicero)))))))
+       (modify-inputs (package-propagated-inputs r-cicero)
+         (delete "r-monocle")
+         (prepend r-monocle3))))))
 
 (define-public r-circrnaprofiler
   (package
@@ -10715,31 +10493,31 @@ accessibility data.")
      `((upstream-name . "circRNAprofiler")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-edger" ,r-edger)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gwascat" ,r-gwascat)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-universalmotif" ,r-universalmotif)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-deseq2
+           r-dplyr
+           r-edger
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-gwascat
+           r-iranges
+           r-magrittr
+           r-r-utils
+           r-readr
+           r-reshape2
+           r-rlang
+           r-rtracklayer
+           r-s4vectors
+           r-seqinr
+           r-stringi
+           r-stringr
+           r-universalmotif))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://github.com/Aufiero/circRNAprofiler")
     (synopsis
@@ -10769,21 +10547,21 @@ analysis, evolutionary conservation, biogenesis to functional analysis.")
          "0c4553rnxq7b1w451kcc3iwvak4qa5h2b43xmfw6ii8096zd1gbf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aucell" ,r-aucell)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dt" ,r-dt)
-       ("r-feather" ,r-feather)
-       ("r-fitdistrplus" ,r-fitdistrplus)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lda" ,r-lda)
-       ("r-matrix" ,r-matrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rcistarget" ,r-rcistarget)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-aucell
+           r-data-table
+           r-dplyr
+           r-dosnow
+           r-dt
+           r-feather
+           r-fitdistrplus
+           r-genomicranges
+           r-ggplot2
+           r-lda
+           r-matrix
+           r-plyr
+           r-rcistarget
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://github.com/aertslab/cisTopic")
     (synopsis "Modelling of cis-regulatory topics from single cell epigenomics data")
     (description
@@ -10816,24 +10594,24 @@ cisTopics and explore the nature and regulatory proteins driving them.")
            "11cg9szlysnsjiaahda4k5v2vh4rxx27zhz53hafgaq9mdz0kgi2"))))
       (properties `((upstream-name . "cisTopic")))
       (propagated-inputs
-       `(("r-aucell" ,r-aucell)
-         ("r-data-table" ,r-data-table)
-         ("r-dosnow" ,r-dosnow)
-         ("r-dplyr" ,r-dplyr)
-         ("r-dt" ,r-dt)
-         ("r-feather" ,r-feather)
-         ("r-fitdistrplus" ,r-fitdistrplus)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-lda" ,r-lda)
-         ("r-matrix" ,r-matrix)
-         ("r-plyr" ,r-plyr)
-         ("r-rcistarget" ,r-rcistarget)
-         ("r-rtracklayer" ,r-rtracklayer)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-text2vec" ,r-text2vec)))
+       (list r-aucell
+             r-data-table
+             r-dosnow
+             r-dplyr
+             r-dt
+             r-feather
+             r-fitdistrplus
+             r-genomicranges
+             r-ggplot2
+             r-lda
+             r-matrix
+             r-plyr
+             r-rcistarget
+             r-rtracklayer
+             r-s4vectors
+             r-text2vec))
       (native-inputs
-       `(("r-knitr" ,r-knitr))))))
+       (list r-knitr)))))
 
 (define-public r-genie3
   (package
@@ -10849,10 +10627,9 @@ cisTopics and explore the nature and regulatory proteins driving them.")
     (properties `((upstream-name . "GENIE3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-dplyr r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/GENIE3")
     (synopsis "Gene network inference with ensemble of trees")
     (description
@@ -10874,7 +10651,7 @@ regulatory networks from expression data.")
     (properties `((upstream-name . "ROC")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://www.bioconductor.org/packages/ROC/")
     (synopsis "Utilities for ROC curves")
     (description
@@ -10899,7 +10676,7 @@ Characteristic} (ROC) curves, with a focus on micro arrays.")
      `((upstream-name
         . "IlluminaHumanMethylation450kanno.ilmn12.hg19")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-minfi" ,r-minfi)))
+    (propagated-inputs (list r-minfi))
     (home-page
      "https://bioconductor.org/packages/IlluminaHumanMethylation450kanno.ilmn12.hg19/")
     (synopsis "Annotation for Illumina's 450k methylation arrays")
@@ -10922,17 +10699,16 @@ data.")
     (properties `((upstream-name . "wateRmelon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-illuminahumanmethylation450kanno-ilmn12-hg19"
-        ,r-illuminahumanmethylation450kanno-ilmn12-hg19)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-limma" ,r-limma)
-       ("r-lumi" ,r-lumi)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-methylumi" ,r-methylumi)
-       ("r-roc" ,r-roc)))
+     (list r-biobase
+           r-illuminahumanmethylation450kanno-ilmn12-hg19
+           r-illuminaio
+           r-limma
+           r-lumi
+           r-matrixstats
+           r-methylumi
+           r-roc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wateRmelon/")
     (synopsis "Illumina 450 methylation array normalization and metrics")
     (description
@@ -10983,11 +10759,9 @@ metrics, with methods for objects produced by the @code{methylumi} and
     (properties `((upstream-name . "gdsfmt")))
     (build-system r-build-system)
     (inputs
-     `(("lz4" ,lz4)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list lz4 xz zlib))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://corearray.sourceforge.net/")
     (synopsis
      "R Interface to CoreArray Genomic Data Structure (GDS) Files")
@@ -11019,14 +10793,14 @@ with multiple R processes supported by the package @code{parallel}.")
     (properties `((upstream-name . "bigmelon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-gdsfmt" ,r-gdsfmt)
-       ("r-geoquery" ,r-geoquery)
-       ("r-illuminaio" ,r-illuminaio)
-       ("r-methylumi" ,r-methylumi)
-       ("r-minfi" ,r-minfi)
-       ("r-watermelon" ,r-watermelon)))
+     (list r-biobase
+           r-biocgenerics
+           r-gdsfmt
+           r-geoquery
+           r-illuminaio
+           r-methylumi
+           r-minfi
+           r-watermelon))
     (home-page "https://bioconductor.org/packages/bigmelon/")
     (synopsis "Illumina methylation array analysis for large experiments")
     (description
@@ -11048,9 +10822,7 @@ with multiple R processes supported by the package @code{parallel}.")
     (properties `((upstream-name . "seqbias")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rhtslib" ,r-rhtslib)))
+     (list r-biostrings r-genomicranges r-rhtslib))
     (home-page "https://bioconductor.org/packages/seqbias/")
     (synopsis "Estimation of per-position bias in high-throughput sequencing data")
     (description
@@ -11076,13 +10848,13 @@ genome sequence.")
     ;; doesn't make sense to build substitutes.
     (arguments `(#:substitutable? #f))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-biostrings" ,r-biostrings)))
+     (list r-biocgenerics
+           r-s4vectors
+           r-iranges
+           r-genomeinfodb
+           r-genomicranges
+           r-bsgenome
+           r-biostrings))
     (home-page
      "https://bioconductor.org/packages/SNPlocs.Hsapiens.dbSNP144.GRCh37/")
     (synopsis "SNP locations for Homo sapiens (dbSNP Build 144)")
@@ -11112,9 +10884,7 @@ injected in that sequence).")
     (properties `((upstream-name . "ReQON")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rjava" ,r-rjava)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-seqbias" ,r-seqbias)))
+     (list r-rjava r-rsamtools r-seqbias))
     (home-page "https://bioconductor.org/packages/ReQON/")
     (synopsis "Recalibrating quality of nucleotides")
     (description
@@ -11137,22 +10907,22 @@ format.")
     (properties `((upstream-name . "wavClusteR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-mclust" ,r-mclust)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqinr" ,r-seqinr)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-foreach
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-hmisc
+           r-iranges
+           r-mclust
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-seqinr
+           r-stringr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/wavClusteR/")
     (synopsis "Identification of RNA-protein interaction sites in PAR-CLIP data")
     (description
@@ -11185,23 +10955,23 @@ procedures that induce nucleotide substitutions (e.g. BisSeq).")
      `((upstream-name . "TimeSeriesExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-edger" ,r-edger)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-limma" ,r-limma)
-       ("r-magrittr" ,r-magrittr)
-       ("r-proxy" ,r-proxy)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vegan" ,r-vegan)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-deseq2
+           r-dplyr
+           r-dynamictreecut
+           r-edger
+           r-ggplot2
+           r-hmisc
+           r-limma
+           r-magrittr
+           r-proxy
+           r-s4vectors
+           r-summarizedexperiment
+           r-tibble
+           r-tidyr
+           r-vegan
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/nlhuong/TimeSeriesExperiment/")
     (synopsis "Analysis for short time-series data")
     (description
@@ -11226,30 +10996,30 @@ provides methods for retrieving enriched pathways.")
      `((upstream-name . "VariantFiltering")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dt" ,r-dt)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-genomicscores" ,r-genomicscores)
-       ("r-graph" ,r-graph)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-shinythemes" ,r-shinythemes)
-       ("r-shinytree" ,r-shinytree)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)
-       ("r-xvector" ,r-xvector)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-dt
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-genomicscores
+           r-graph
+           r-gviz
+           r-iranges
+           r-rbgl
+           r-rsamtools
+           r-s4vectors
+           r-shiny
+           r-shinyjs
+           r-shinythemes
+           r-shinytree
+           r-summarizedexperiment
+           r-variantannotation
+           r-xvector))
     (home-page "https://github.com/rcastelo/VariantFiltering")
     (synopsis "Filtering of coding and non-coding genetic variants")
     (description
@@ -11272,7 +11042,7 @@ populations, splice site strength, conservation, etc.")
     (properties `((upstream-name . "GenomeGraphs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biomart" ,r-biomart)))
+     (list r-biomart))
     (home-page "https://bioconductor.org/packages/GenomeGraphs/")
     (synopsis "Plotting genomic information from Ensembl")
     (description
@@ -11300,16 +11070,16 @@ same genome coordinate system.")
     (properties `((upstream-name . "waveTiling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomegraphs" ,r-genomegraphs)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-oligo" ,r-oligo)
-       ("r-oligoclasses" ,r-oligoclasses)
-       ("r-preprocesscore" ,r-preprocesscore)
-       ("r-waveslim" ,r-waveslim)))
+     (list r-affy
+           r-biobase
+           r-biostrings
+           r-genomegraphs
+           r-genomicranges
+           r-iranges
+           r-oligo
+           r-oligoclasses
+           r-preprocesscore
+           r-waveslim))
     (home-page "https://r-forge.r-project.org/projects/wavetiling/")
     (synopsis "Wavelet-based models for tiling array transcriptome analysis")
     (description
@@ -11332,25 +11102,25 @@ arrays based on fast wavelet-based functional models.")
      `((upstream-name . "variancePartition")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gplots" ,r-gplots)
-       ("r-iterators" ,r-iterators)
-       ("r-limma" ,r-limma)
-       ("r-lme4" ,r-lme4)
-       ("r-lmertest" ,r-lmertest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-progress" ,r-progress)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocparallel
+           r-doparallel
+           r-foreach
+           r-ggplot2
+           r-gplots
+           r-iterators
+           r-limma
+           r-lme4
+           r-lmertest
+           r-mass
+           r-matrix
+           r-pbkrtest
+           r-progress
+           r-reshape2
+           r-rlang
+           r-scales))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/variancePartition/")
     (synopsis "Analyze variation in gene expression experiments")
     (description
@@ -11376,11 +11146,7 @@ measures.")
     (properties `((upstream-name . "HTqPCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-gplots" ,r-gplots)
-       ("r-limma" ,r-limma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-affy r-biobase r-gplots r-limma r-rcolorbrewer))
     (home-page (string-append "https://www.ebi.ac.uk/sites/ebi.ac.uk/files/"
                               "groups/bertone/software/HTqPCR.pdf"))
     (synopsis "Automated analysis of high-throughput qPCR data")
@@ -11411,8 +11177,7 @@ features (e.g.  genes, microRNAs).")
      `((upstream-name . "unifiedWMWqPCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-htqpcr" ,r-htqpcr)))
+     (list r-biocgenerics r-htqpcr))
     (home-page "https://bioconductor.org/packages/unifiedWMWqPCR")
     (synopsis "Unified Wilcoxon-Mann Whitney Test for differential expression in qPCR data")
     (description
@@ -11443,18 +11208,18 @@ data.")
              (substitute* "src/Makevars"
                (("/usr/bin/strip") (which "strip"))))))))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppthread" ,r-rcppthread)
-       ("r-rlang" ,r-rlang)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biostrings
+           r-ggplot2
+           r-iranges
+           r-mass
+           r-rcpp
+           r-rcppthread
+           r-rlang
+           r-s4vectors
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/universalmotif/")
     (synopsis
@@ -11486,15 +11251,15 @@ motifs, and others.")
      `((upstream-name . "ActiveDriverWGS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biostrings
+           r-bsgenome
+           r-bsgenome-hsapiens-ucsc-hg19
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActiveDriverWGS/")
     (synopsis "Driver discovery tool for cancer whole genomes")
     (description
@@ -11521,10 +11286,9 @@ using whole genome sequencing data.")
      `((upstream-name . "ActivePathways")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-data-table r-ggplot2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActivePathways/")
     (synopsis "Multivariate pathway enrichment analysis")
     (description
@@ -11549,7 +11313,7 @@ cellular organization in health and disease.")
     (properties `((upstream-name . "BGmix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)))
+     (list r-kernsmooth))
     (home-page "https://bioconductor.org/packages/BGmix/")
     (synopsis "Bayesian models for differential gene expression")
     (description
@@ -11571,10 +11335,7 @@ gene expression.")
     (properties `((upstream-name . "bgx")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-affy" ,r-affy)
-       ("r-biobase" ,r-biobase)
-       ("r-gcrma" ,r-gcrma)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-affy r-biobase r-gcrma r-rcpp))
     (home-page "https://bioconductor.org/packages/bgx/")
     (synopsis "Bayesian gene expression")
     (description
@@ -11622,9 +11383,7 @@ algorithm which is more efficient for larger data sets.")
     (properties `((upstream-name . "BicARE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-gseabase" ,r-gseabase)
-       ("r-multtest" ,r-multtest)))
+     (list r-biobase r-gseabase r-multtest))
     (home-page "http://bioinfo.curie.fr")
     (synopsis "Biclustering analysis and results exploration")
     (description
@@ -11646,10 +11405,9 @@ results.")
     (properties `((upstream-name . "BiFET")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-poibin" ,r-poibin)))
+     (list r-genomicranges r-poibin))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiFET")
     (synopsis "Bias-free footprint enrichment test")
     (description
@@ -11676,12 +11434,11 @@ the read count and GC content bias.")
     (properties `((upstream-name . "rsbml")))
     (build-system r-build-system)
     (inputs
-     `(("libsbml" ,libsbml)))
+     (list libsbml))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-graph" ,r-graph)))
+     (list r-biocgenerics r-graph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.sbml.org")
     (synopsis "R support for SBML")
     (description
@@ -11703,7 +11460,7 @@ validating output, provides an S4 SBML DOM, converts SBML to R graph objects.")
     (properties `((upstream-name . "hypergraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)))
+     (list r-graph))
     (home-page "https://bioconductor.org/packages/hypergraph")
     (synopsis "Hypergraph data structures")
     (description
@@ -11724,11 +11481,9 @@ manipulating hypergraphs.")
          "1lkiqrk01hshms9ghsfynxwj69zr3463r3rg8rn7hkwn3bj8xyzj"))))
     (properties `((upstream-name . "hyperdraw")))
     (build-system r-build-system)
-    (inputs `(("graphviz" ,graphviz)))
+    (inputs (list graphviz))
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-hypergraph" ,r-hypergraph)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-graph r-hypergraph r-rgraphviz))
     (home-page "https://bioconductor.org/packages/hyperdraw")
     (synopsis "Visualizing hypergraphs")
     (description
@@ -11749,12 +11504,12 @@ manipulating hypergraphs.")
     (properties `((upstream-name . "BiGGR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hyperdraw" ,r-hyperdraw)
-       ("r-hypergraph" ,r-hypergraph)
-       ("r-lim" ,r-lim)
-       ("r-limsolve" ,r-limsolve)
-       ("r-rsbml" ,r-rsbml)
-       ("r-stringr" ,r-stringr)))
+     (list r-hyperdraw
+           r-hypergraph
+           r-lim
+           r-limsolve
+           r-rsbml
+           r-stringr))
     (home-page "https://bioconductor.org/packages/BiGGR/")
     (synopsis "Constraint based modeling using metabolic reconstruction databases")
     (description
@@ -11780,9 +11535,9 @@ networks and estimated fluxes can be visualized with hypergraphs.")
      `((upstream-name . "bigmemoryExtras")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigmemory" ,r-bigmemory)))
+     (list r-bigmemory))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/phaverty/bigmemoryExtras")
     (synopsis "Extension of the bigmemory package")
     (description
@@ -11813,26 +11568,26 @@ a file-backed matrix with factor properties.")
     (properties `((upstream-name . "bigPint")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggally" ,r-ggally)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-hexbin" ,r-hexbin)
-       ("r-hmisc" ,r-hmisc)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-shiny" ,r-shiny)
-       ("r-shinycssloaders" ,r-shinycssloaders)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-delayedarray
+           r-dplyr
+           r-ggally
+           r-ggplot2
+           r-gridextra
+           r-hexbin
+           r-hmisc
+           r-htmlwidgets
+           r-plotly
+           r-plyr
+           r-rcolorbrewer
+           r-reshape
+           r-shiny
+           r-shinycssloaders
+           r-shinydashboard
+           r-stringr
+           r-summarizedexperiment
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/lindsayrutter/bigPint")
     (synopsis "Big multivariate data plotted interactively")
     (description
@@ -11856,23 +11611,23 @@ visualizing RNA-sequencing datasets and differentially expressed genes.")
     (properties `((upstream-name . "ChemmineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-bh" ,r-bh)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-png" ,r-png)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)
-       ("r-rsvg" ,r-rsvg)
-       ("r-stringi" ,r-stringi)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-bh
+           r-biocgenerics
+           r-dbi
+           r-digest
+           r-dt
+           r-ggplot2
+           r-gridextra
+           r-jsonlite
+           r-png
+           r-rcpp
+           r-rcurl
+           r-rjson
+           r-rsvg
+           r-stringi))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/girke-lab/ChemmineR")
     (synopsis "Cheminformatics toolkit for R")
     (description
@@ -11898,10 +11653,8 @@ structures.")
     (properties `((upstream-name . "fmcsR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-chemminer" ,r-chemminer)
-       ("r-runit" ,r-runit)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics r-chemminer r-runit))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/girke-lab/fmcsR")
     (synopsis "Mismatch tolerant maximum common substructure searching")
     (description
@@ -11930,15 +11683,15 @@ searching and clustering.")
     (properties `((upstream-name . "bioassayR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-chemminer" ,r-chemminer)
-       ("r-dbi" ,r-dbi)
-       ("r-matrix" ,r-matrix)
-       ("r-rjson" ,r-rjson)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-xml" ,r-xml)))
+     (list r-biocgenerics
+           r-chemminer
+           r-dbi
+           r-matrix
+           r-rjson
+           r-rsqlite
+           r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/girke-lab/bioassayR")
     (synopsis "Cross-target analysis of small molecule bioactivity")
     (description
@@ -11965,12 +11718,9 @@ available bioactivity data.")
     (properties `((upstream-name . "biobroom")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase r-broom r-dplyr r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/StoreyLab/biobroom")
     (synopsis "Turn Bioconductor objects into tidy data frames")
     (description
@@ -11997,11 +11747,7 @@ visualize bioinformatics analyses.")
     (properties `((upstream-name . "graphite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-checkmate" ,r-checkmate)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-rappdirs" ,r-rappdirs)))
+     (list r-annotationdbi r-checkmate r-graph r-httr r-rappdirs))
     (home-page "https://bioconductor.org/packages/graphite/")
     (synopsis "Networks from pathway databases")
     (description
@@ -12024,16 +11770,16 @@ symbols).")
     (properties `((upstream-name . "ReactomePA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dose" ,r-dose)
-       ("r-enrichplot" ,r-enrichplot)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-graphite" ,r-graphite)
-       ("r-igraph" ,r-igraph)
-       ("r-reactome-db" ,r-reactome-db)))
+     (list r-annotationdbi
+           r-dose
+           r-enrichplot
+           r-ggplot2
+           r-ggraph
+           r-graphite
+           r-igraph
+           r-reactome-db))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/software/ReactomePA")
     (synopsis "Reactome pathway analysis")
     (description
@@ -12056,9 +11802,7 @@ enrichment analysis and several functions for visualization.")
     (properties `((upstream-name . "EBarrays")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-cluster" ,r-cluster)
-       ("r-lattice" ,r-lattice)))
+     (list r-biobase r-cluster r-lattice))
     (home-page "https://bioconductor.org/packages/EBarrays/")
     (synopsis "Gene clustering and differential expression identification")
     (description
@@ -12080,7 +11824,7 @@ microarray data.")
     (properties
      `((upstream-name . "BiocCaseStudies")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-biobase" ,r-biobase)))
+    (propagated-inputs (list r-biobase))
     (home-page "https://bioconductor.org/packages/BiocCaseStudies")
     (synopsis "Support for the case studies monograph")
     (description
@@ -12102,16 +11846,16 @@ monograph.")
      `((upstream-name . "BiocCheck")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-knitr" ,r-knitr)
-       ("r-optparse" ,r-optparse)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocviews" ,r-biocviews)
-       ("r-stringdist" ,r-stringdist)))
+     (list r-codetools
+           r-graph
+           r-httr
+           r-knitr
+           r-optparse
+           r-biocmanager
+           r-biocviews
+           r-stringdist))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocCheck")
     (synopsis "Executes Bioconductor-specific package checks")
     (description "This package contains tools to perform additional quality
@@ -12132,10 +11876,7 @@ checks on R packages that are to be submitted to the Bioconductor repository.")
     (properties `((upstream-name . "biocGraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-geneplotter" ,r-geneplotter)
-       ("r-graph" ,r-graph)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-biocgenerics r-geneplotter r-graph r-rgraphviz))
     (home-page "https://bioconductor.org/packages/biocGraph/")
     (synopsis "Graph examples and use cases in Bioinformatics")
     (description
@@ -12157,13 +11898,9 @@ different graph related packages produced by Bioconductor.")
      `((upstream-name . "BiocStyle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-bookdown" ,r-bookdown)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-yaml" ,r-yaml)))
+     (list r-biocmanager r-bookdown r-knitr r-rmarkdown r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocStyle")
     (synopsis "Bioconductor formatting styles")
     (description "This package provides standard formatting styles for
@@ -12185,13 +11922,13 @@ functionality.")
      `((upstream-name . "biocViews")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-graph" ,r-graph)
-       ("r-rbgl" ,r-rbgl)
-       ("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)
-       ("r-runit" ,r-runit)))
+     (list r-biobase
+           r-biocmanager
+           r-graph
+           r-rbgl
+           r-rcurl
+           r-xml
+           r-runit))
     (home-page "https://bioconductor.org/packages/biocViews")
     (synopsis "Bioconductor package categorization helper")
     (description "The purpose of biocViews is to create HTML pages that
@@ -12213,15 +11950,15 @@ also known as views, in a controlled vocabulary.")
     (properties `((upstream-name . "ExperimentHub")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-curl" ,r-curl)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-annotationhub
+           r-biocfilecache
+           r-biocgenerics
+           r-biocmanager
+           r-curl
+           r-rappdirs
+           r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ExperimentHub/")
     (synopsis "Client to access ExperimentHub resources")
     (description
@@ -12247,13 +11984,13 @@ access.")
     (properties `((upstream-name . "groHMM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-mass" ,r-mass)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-iranges
+           r-mass
+           r-rtracklayer
+           r-s4vectors))
     (home-page "https://github.com/Kraus-Lab/groHMM")
     (synopsis "GRO-seq analysis pipeline")
     (description
@@ -12275,15 +12012,15 @@ access.")
      `((upstream-name . "MultiAssayExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-biobase
+           r-biocgenerics
+           r-genomicranges
+           r-iranges
+           r-s4vectors
+           r-summarizedexperiment
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://waldronlab.io/MultiAssayExperiment/")
     (synopsis "Integration of multi-omics experiments in Bioconductor")
     (description
@@ -12309,30 +12046,30 @@ rownames.")
     (properties `((upstream-name . "BiocOncoTK")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigrquery" ,r-bigrquery)
-       ("r-car" ,r-car)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-curatedtcgadata" ,r-curatedtcgadata)
-       ("r-dbi" ,r-dbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-graph" ,r-graph)
-       ("r-httr" ,r-httr)
-       ("r-iranges" ,r-iranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rjson" ,r-rjson)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-bigrquery
+           r-car
+           r-complexheatmap
+           r-curatedtcgadata
+           r-dbi
+           r-dplyr
+           r-dt
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-ggpubr
+           r-graph
+           r-httr
+           r-iranges
+           r-magrittr
+           r-plyr
+           r-rgraphviz
+           r-rjson
+           r-s4vectors
+           r-scales
+           r-shiny
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocOncoTK")
     (synopsis "Bioconductor components for general cancer genomics")
     (description
@@ -12354,11 +12091,9 @@ tools for genome-scale analysis of cancer studies.")
     (properties `((upstream-name . "BioCor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-gseabase" ,r-gseabase)
-       ("r-matrix" ,r-matrix)))
+     (list r-biocparallel r-gseabase r-matrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://llrs.github.io/BioCor/")
     (synopsis "Functional similarities")
     (description
@@ -12383,30 +12118,30 @@ gene selection, testing relationships, and so on.")
     (properties `((upstream-name . "BiocPkgTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocfilecache" ,r-biocfilecache)
-       ("r-biocmanager" ,r-biocmanager)
-       ("r-biocviews" ,r-biocviews)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-gh" ,r-gh)
-       ("r-graph" ,r-graph)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-httr" ,r-httr)
-       ("r-igraph" ,r-igraph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rbgl" ,r-rbgl)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocfilecache
+           r-biocmanager
+           r-biocviews
+           r-dplyr
+           r-dt
+           r-gh
+           r-graph
+           r-htmltools
+           r-htmlwidgets
+           r-httr
+           r-igraph
+           r-jsonlite
+           r-magrittr
+           r-rbgl
+           r-readr
+           r-rlang
+           r-rvest
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/seandavi/BiocPkgTools")
     (synopsis "Collection of tools for learning about Bioconductor packages")
     (description
@@ -12431,18 +12166,18 @@ analytics on packages.")
     (properties `((upstream-name . "BiocSet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocio" ,r-biocio)
-       ("r-dplyr" ,r-dplyr)
-       ("r-keggrest" ,r-keggrest)
-       ("r-ontologyindex" ,r-ontologyindex)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-annotationdbi
+           r-biocio
+           r-dplyr
+           r-keggrest
+           r-ontologyindex
+           r-plyr
+           r-rlang
+           r-s4vectors
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/BiocSet")
     (synopsis
@@ -12470,17 +12205,17 @@ accessing web references for elements/sets are also available in BiocSet.")
      `((upstream-name . "BiocWorkflowTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocstyle" ,r-biocstyle)
-       ("r-bookdown" ,r-bookdown)
-       ("r-git2r" ,r-git2r)
-       ("r-httr" ,r-httr)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringr" ,r-stringr)
-       ("r-usethis" ,r-usethis)))
+     (list r-biocstyle
+           r-bookdown
+           r-git2r
+           r-httr
+           r-knitr
+           r-rmarkdown
+           r-rstudioapi
+           r-stringr
+           r-usethis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocWorkflowTools/")
     (synopsis "Tools to aid the development of Bioconductor Workflow packages")
     (description
@@ -12502,8 +12237,7 @@ Rmarkdown and LaTeX documents when authoring a Bioconductor Workflow.")
     (properties `((upstream-name . "bioDist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-biobase r-kernsmooth))
     (home-page "https://bioconductor.org/packages/bioDist/")
     (synopsis "Different distance measures")
     (description
@@ -12525,21 +12259,21 @@ distance measures.")
     (properties `((upstream-name . "PCAtools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-bh" ,r-bh)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-cowplot" ,r-cowplot)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dqrng" ,r-dqrng)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-bh
+           r-biocparallel
+           r-biocsingular
+           r-cowplot
+           r-delayedarray
+           r-delayedmatrixstats
+           r-dqrng
+           r-ggplot2
+           r-ggrepel
+           r-lattice
+           r-matrix
+           r-rcpp
+           r-reshape2))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/kevinblighe/PCAtools")
     (synopsis "PCAtools: everything Principal Components Analysis")
     (description
@@ -12571,12 +12305,8 @@ dimensional mass cytometry data.")
     (properties `((upstream-name . "rGREAT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-getoptlong" ,r-getoptlong)
-       ("r-iranges" ,r-iranges)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rjson" ,r-rjson)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-genomicranges r-getoptlong r-iranges r-rcurl r-rjson))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jokergoo/rGREAT")
     (synopsis "Client for GREAT analysis")
     (description
@@ -12599,17 +12329,17 @@ user's input and automatically retrieving results from GREAT web server.")
     (properties `((upstream-name . "M3C")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-corpcor" ,r-corpcor)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dosnow" ,r-dosnow)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixcalc" ,r-matrixcalc)
-       ("r-rtsne" ,r-rtsne)
-       ("r-umap" ,r-umap)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-cluster
+           r-corpcor
+           r-doparallel
+           r-dosnow
+           r-foreach
+           r-ggplot2
+           r-matrix
+           r-matrixcalc
+           r-rtsne
+           r-umap))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/M3C")
     (synopsis "Monte Carlo reference-based consensus clustering")
     (description
@@ -12632,7 +12362,7 @@ hypothesis @code{K=1}.")
     (properties `((upstream-name . "Icens")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (home-page "https://bioconductor.org/packages/Icens")
     (synopsis "NPMLE for censored and truncated data")
     (description
@@ -12657,10 +12387,7 @@ truncated data.")
     (properties `((upstream-name . "interval")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-icens" ,r-icens)
-       ("r-mlecens" ,r-mlecens)
-       ("r-perm" ,r-perm)
-       ("r-survival" ,r-survival)))
+     (list r-icens r-mlecens r-perm r-survival))
     (home-page "https://cran.r-project.org/web/packages/interval/")
     (synopsis "Weighted Logrank tests and NPMLE for interval censored data")
     (description
@@ -12684,11 +12411,7 @@ plot them, and perform logrank or Wilcoxon type tests.")
     (properties `((upstream-name . "FHtest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-interval" ,r-interval)
-       ("r-kmsurv" ,r-kmsurv)
-       ("r-mass" ,r-mass)
-       ("r-perm" ,r-perm)
-       ("r-survival" ,r-survival)))
+     (list r-interval r-kmsurv r-mass r-perm r-survival))
     (home-page "https://cran.r-project.org/web/packages/FHtest/")
     (synopsis "Tests for survival data based on the Fleming-Harrington class")
     (description
@@ -12717,23 +12440,23 @@ with:
     (properties `((upstream-name . "FourCSeq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biostrings" ,r-biostrings)
-       ("r-deseq2" ,r-deseq2)
-       ("r-fda" ,r-fda)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtools" ,r-gtools)
-       ("r-lsd" ,r-lsd)
-       ("r-matrix" ,r-matrix)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biostrings
+           r-deseq2
+           r-fda
+           r-genomicalignments
+           r-genomicranges
+           r-ggbio
+           r-ggplot2
+           r-gtools
+           r-lsd
+           r-matrix
+           r-reshape2
+           r-rsamtools
+           r-rtracklayer
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page
      "https://bioconductor.org/packages/release/bioc/html/FourCSeq.html")
     (synopsis "Analysis of multiplexed 4C sequencing data")
@@ -12783,7 +12506,7 @@ routines.")
      `((upstream-name . "S4Vectors")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
+     (list r-biocgenerics))
     (home-page "https://bioconductor.org/packages/S4Vectors")
     (synopsis "S4 implementation of vectors and lists")
     (description
@@ -12812,18 +12535,18 @@ S4Vectors package itself.")
     (properties `((upstream-name . "WGCNA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-foreach" ,r-foreach)
-       ("r-go-db" ,r-go-db)
-       ("r-hmisc" ,r-hmisc)
-       ("r-impute" ,r-impute)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survival" ,r-survival)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-preprocesscore" ,r-preprocesscore)))
+     (list r-annotationdbi
+           r-doparallel
+           r-dynamictreecut
+           r-fastcluster
+           r-foreach
+           r-go-db
+           r-hmisc
+           r-impute
+           r-rcpp
+           r-survival
+           r-matrixstats
+           r-preprocesscore))
     (home-page
      "http://www.genetics.ucla.edu/labs/horvath/CoexpressionNetwork/Rpackages/WGCNA/")
     (synopsis "Weighted correlation network analysis")
@@ -12862,11 +12585,11 @@ data manipulation and visualization.")
     ;; FIXME: Rgraphviz bundles the sources of an older variant of
     ;; graphviz.  It does not build with the latest version of graphviz, so
     ;; we do not add graphviz to the inputs.
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-graph" ,r-graph)))
+     (list r-graph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://bioconductor.org/packages/Rgraphviz")
     (synopsis "Plotting capabilities for R graph objects")
     (description
@@ -12887,11 +12610,9 @@ objects from the @code{graph} package.")
     (properties `((upstream-name . "FitHiC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-data-table r-fdrtool r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/FitHiC")
     (synopsis "Confidence estimation for intra-chromosomal contact maps")
     (description
@@ -12913,13 +12634,13 @@ assays such as Hi-C.")
     (properties `((upstream-name . "HiTC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-biostrings
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcolorbrewer
+           r-rtracklayer))
     (home-page "https://bioconductor.org/packages/HiTC")
     (synopsis "High throughput chromosome conformation capture analysis")
     (description
@@ -12943,16 +12664,16 @@ provided.")
     (properties `((upstream-name . "HDF5Array")))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-rhdf5filters" ,r-rhdf5filters)
-       ("r-rhdf5lib" ,r-rhdf5lib)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list zlib))
+    (propagated-inputs
+     (list r-biocgenerics
+           r-delayedarray
+           r-iranges
+           r-matrix
+           r-rhdf5
+           r-rhdf5filters
+           r-rhdf5lib
+           r-s4vectors))
     (home-page "https://bioconductor.org/packages/HDF5Array")
     (synopsis "HDF5 back end for DelayedArray objects")
     (description "This package provides an array-like container for convenient
@@ -13032,8 +12753,7 @@ block processing.")
                  (("cp \"\\$\\{SZIP_LIB\\}.*") "")
                  (("PKG_LIBS =.*") "PKG_LIBS = -lz -lhdf5\n"))))))))
     (propagated-inputs
-     `(("hdf5" ,hdf5-1.10)
-       ("zlib" ,zlib)))
+     (list hdf5-1.10 zlib))
     (native-inputs
      `(("hdf5-source" ,(package-source hdf5-1.10))
        ("r-knitr" ,r-knitr)))
@@ -13056,12 +12776,9 @@ packages.")
          "1l8c9q35mf90ckb366bcfqa0v2gw7ahs2h362j7cwv8fp39h4mpb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biocgenerics r-delayedarray r-matrix r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/beachmat")
     (synopsis "Compiling Bioconductor to handle each matrix type")
     (description "This package provides a consistent C++ class interface for a
@@ -13084,29 +12801,29 @@ matrices.")
         (base32 "0w4iqmyyhsb6l9bi8c6qwdh4j6z2i1i5fi85ia9069fpl9d0hpl2"))))
     (properties `((upstream-name . "CNEr")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-annotate" ,r-annotate)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-dbi" ,r-dbi)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-go-db" ,r-go-db)
-       ("r-iranges" ,r-iranges)
-       ("r-keggrest" ,r-keggrest)
-       ("r-powerlaw" ,r-powerlaw)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list zlib))
+    (propagated-inputs
+     (list r-annotate
+           r-biocgenerics
+           r-biostrings
+           r-dbi
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-go-db
+           r-iranges
+           r-keggrest
+           r-powerlaw
+           r-r-utils
+           r-readr
+           r-reshape2
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/ge11232002/CNEr")
     (synopsis "CNE Detection and Visualization")
     (description
@@ -13134,27 +12851,27 @@ advanced visualization of sets of conserved noncoding elements.")
     (properties `((upstream-name . "TFBSTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-catools" ,r-catools)
-       ("r-cner" ,r-cner)
-       ("r-dbi" ,r-dbi)
-       ("r-dirichletmultinomial" ,r-dirichletmultinomial)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-seqlogo" ,r-seqlogo)
-       ("r-tfmpvalue" ,r-tfmpvalue)
-       ("r-xml" ,r-xml)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-catools
+           r-cner
+           r-dbi
+           r-dirichletmultinomial
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-iranges
+           r-rsqlite
+           r-rtracklayer
+           r-s4vectors
+           r-seqlogo
+           r-tfmpvalue
+           r-xml
+           r-xvector))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ge11232002/TFBSTools")
     (synopsis "Transcription factor binding site (TFBS) analysis")
     (description
@@ -13180,19 +12897,19 @@ provides a wrapper of de novo motif discovery software.")
     (properties `((upstream-name . "motifmatchr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tfbstools" ,r-tfbstools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biostrings
+           r-bsgenome
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rsamtools
+           r-s4vectors
+           r-summarizedexperiment
+           r-tfbstools))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/motifmatchr")
     (synopsis "Fast motif matching in R")
     (description
@@ -13213,29 +12930,29 @@ This package wraps C++ code from the MOODS motif calling library.")
     (properties `((upstream-name . "chromVAR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-dt" ,r-dt)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-miniui" ,r-miniui)
-       ("r-nabor" ,r-nabor)
-       ("r-plotly" ,r-plotly)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtsne" ,r-rtsne)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tfbstools" ,r-tfbstools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-dt
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-matrix
+           r-miniui
+           r-nabor
+           r-plotly
+           r-rcolorbrewer
+           r-rcpp
+           r-rcpparmadillo
+           r-rsamtools
+           r-rtsne
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment
+           r-tfbstools))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/release/bioc/html/chromVAR.html")
     (synopsis "Determine chromatin variation across regions")
     (description
@@ -13262,13 +12979,10 @@ sequence (@code{DNAse-seq}) experiments.")
      `((upstream-name . "SingleCellExperiment")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-biocgenerics r-delayedarray r-genomicranges r-s4vectors
+           r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/SingleCellExperiment")
     (synopsis "S4 classes for single cell data")
     (description "This package defines an S4 class for storing data from
@@ -13292,18 +13006,18 @@ libraries.")
     (properties `((upstream-name . "scuttle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocparallel
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genomicranges
+           r-matrix
+           r-rcpp
+           r-s4vectors
+           r-singlecellexperiment
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/scuttle")
     (synopsis "Single-cell RNA-Seq analysis utilities")
     (description
@@ -13325,28 +13039,28 @@ of other packages.")
                 "0k4i9pwmwxcr5a40ljl27wriccwn5vc52xy48yjjh8ppl5dbggdg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocneighbors" ,r-biocneighbors)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrix" ,r-matrix)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-rtsne" ,r-rtsne)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-viridis" ,r-viridis)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biocgenerics
+           r-biocneighbors
+           r-biocparallel
+           r-biocsingular
+           r-delayedarray
+           r-delayedmatrixstats
+           r-ggbeeswarm
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-matrix
+           r-rcolorbrewer
+           r-rlang
+           r-rtsne
+           r-s4vectors
+           r-scuttle
+           r-singlecellexperiment
+           r-summarizedexperiment
+           r-viridis))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/davismcc/scater")
     (synopsis "Single-cell analysis toolkit for gene expression data in R")
     (description "This package provides a collection of tools for doing
@@ -13367,28 +13081,28 @@ quality control.")
          "06lcxya6rpa8dv0il7m7fwyx0ci1y1jn16ff5lmvzf2mnr6q7lic"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-bh" ,r-bh)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biocsingular" ,r-biocsingular)
-       ("r-bluster" ,r-bluster)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dqrng" ,r-dqrng)
-       ("r-edger" ,r-edger)
-       ("r-igraph" ,r-igraph)
-       ("r-limma" ,r-limma)
-       ("r-matrix" ,r-matrix)
-       ("r-metapod" ,r-metapod)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scuttle" ,r-scuttle)
-       ("r-singlecellexperiment" ,r-singlecellexperiment)
-       ("r-statmod" ,r-statmod)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-bh
+           r-biocgenerics
+           r-biocparallel
+           r-biocsingular
+           r-bluster
+           r-delayedarray
+           r-delayedmatrixstats
+           r-dqrng
+           r-edger
+           r-igraph
+           r-limma
+           r-matrix
+           r-metapod
+           r-rcpp
+           r-s4vectors
+           r-scuttle
+           r-singlecellexperiment
+           r-statmod
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/scran")
     (synopsis "Methods for single-cell RNA-Seq data analysis")
     (description "This package implements a variety of low-level analyses of
@@ -13412,11 +13126,8 @@ variable and significantly correlated genes.")
      `((upstream-name . "sparseMatrixStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-matrix r-matrixgenerics r-matrixstats r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/sparseMatrixStats/")
     (synopsis "Summary statistics for rows and columns of sparse matrices")
     (description
@@ -13440,15 +13151,15 @@ data in the column sparse format.")
      `((upstream-name . "DelayedMatrixStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-delayedarray" ,r-delayedarray)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sparsematrixstats" ,r-sparsematrixstats)))
+     (list r-delayedarray
+           r-iranges
+           r-matrix
+           r-matrixgenerics
+           r-matrixstats
+           r-s4vectors
+           r-sparsematrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/PeteHaitch/DelayedMatrixStats")
     (synopsis "Functions that apply to rows and columns of DelayedMatrix objects")
     (description
@@ -13475,12 +13186,9 @@ memory usage and processing time is minimized.")
     (properties `((upstream-name . "MsCoreUtils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-clue" ,r-clue)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-clue r-mass r-rcpp r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/RforMassSpectrometry/MsCoreUtils")
     (synopsis "Core utils for mass spectrometry data")
     (description
@@ -13506,11 +13214,9 @@ within the R for Mass Spectrometry packages.")
     (properties `((upstream-name . "MsFeatures")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mscoreutils" ,r-mscoreutils)
-       ("r-protgenerics" ,r-protgenerics)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+     (list r-mscoreutils r-protgenerics r-summarizedexperiment))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/RforMassSpectrometry/MsFeatures")
     (synopsis "Functionality for mass spectrometry features")
     (description
@@ -13539,10 +13245,9 @@ the respective packages (such as e.g. @code{xcms}).")
     (properties `((upstream-name . "BiocIO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)))
+     (list r-biocgenerics r-s4vectors))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocIO")
     (synopsis "Standard input and output for Bioconductor packages")
     (description
@@ -13573,10 +13278,7 @@ as well as local access.  Developers can register a file extension, e.g.,
     (properties `((upstream-name . "msmsEDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gplots" ,r-gplots)
-       ("r-mass" ,r-mass)
-       ("r-msnbase" ,r-msnbase)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-gplots r-mass r-msnbase r-rcolorbrewer))
     (home-page
      "https://bioconductor.org/packages/msmsEDA")
     (synopsis "Exploratory data analysis of LC-MS/MS data by spectral counts")
@@ -13599,10 +13301,7 @@ experiments, and visualize de influence of the involved factors.")
     (properties `((upstream-name . "msmsTests")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-edger" ,r-edger)
-       ("r-msmseda" ,r-msmseda)
-       ("r-msnbase" ,r-msnbase)
-       ("r-qvalue" ,r-qvalue)))
+     (list r-edger r-msmseda r-msnbase r-qvalue))
     (home-page
      "https://bioconductor.org/packages/msmsTests")
     (synopsis "Differential LC-MS/MS expression tests")
@@ -13631,34 +13330,34 @@ relevant, and the minimum expression of the most abundant condition.")
     (properties `((upstream-name . "CATALYST")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-circlize" ,r-circlize)
-        ("r-complexheatmap" ,r-complexheatmap)
-        ("r-consensusclusterplus" ,r-consensusclusterplus)
-        ("r-cowplot" ,r-cowplot)
-        ("r-data-table" ,r-data-table)
-        ("r-dplyr" ,r-dplyr)
-        ("r-drc" ,r-drc)
-        ("r-flowcore" ,r-flowcore)
-        ("r-flowsom" ,r-flowsom)
-        ("r-ggplot2" ,r-ggplot2)
-        ("r-ggrepel" ,r-ggrepel)
-        ("r-ggridges" ,r-ggridges)
-        ("r-gridextra" ,r-gridextra)
-        ("r-magrittr" ,r-magrittr)
-        ("r-matrix" ,r-matrix)
-        ("r-matrixstats" ,r-matrixstats)
-        ("r-nnls" ,r-nnls)
-        ("r-purrr" ,r-purrr)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-reshape2" ,r-reshape2)
-        ("r-rtsne" ,r-rtsne)
-        ("r-s4vectors" ,r-s4vectors)
-        ("r-scales" ,r-scales)
-        ("r-scater" ,r-scater)
-        ("r-singlecellexperiment" ,r-singlecellexperiment)
-        ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+      (list r-circlize
+            r-complexheatmap
+            r-consensusclusterplus
+            r-cowplot
+            r-data-table
+            r-dplyr
+            r-drc
+            r-flowcore
+            r-flowsom
+            r-ggplot2
+            r-ggrepel
+            r-ggridges
+            r-gridextra
+            r-magrittr
+            r-matrix
+            r-matrixstats
+            r-nnls
+            r-purrr
+            r-rcolorbrewer
+            r-reshape2
+            r-rtsne
+            r-s4vectors
+            r-scales
+            r-scater
+            r-singlecellexperiment
+            r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page
       "https://github.com/HelenaLC/CATALYST")
     (synopsis "Cytometry data analysis tools")
@@ -13688,22 +13387,22 @@ standards, ii) single-cell deconvolution, and iii) bead-based compensation.")
          "0pb9ar1wy613vg6sfdmn8n4cfv1328m8bagnigsjdb3hc3hbir4z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-iranges" ,r-iranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-genomeinfodb
+           r-genomicfiles
+           r-genomicranges
+           r-ggplot2
+           r-homo-sapiens
+           r-iranges
+           r-rtracklayer
+           r-s4vectors
+           r-shiny
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/erma")
     (synopsis "Epigenomic road map adventures")
     (description
@@ -13738,35 +13437,35 @@ by Ernst and Kellis.")
                (("fechable") "fetchable"))
              #t)))))
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationfilter" ,r-annotationfilter)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggally" ,r-ggally)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-hmisc" ,r-hmisc)
-       ("r-iranges" ,r-iranges)
-       ("r-organismdbi" ,r-organismdbi)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationfilter
+           r-biobase
+           r-biocgenerics
+           r-biostrings
+           r-biovizbase
+           r-bsgenome
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-ggally
+           r-ggplot2
+           r-gridextra
+           r-gtable
+           r-hmisc
+           r-iranges
+           r-organismdbi
+           r-reshape2
+           r-rlang
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "http://www.tengfei.name/ggbio/")
     (synopsis "Visualization tools for genomic data")
     (description
@@ -13804,21 +13503,21 @@ interval to data view, mismatch pileup, and several splicing summaries.")
                (("importFrom\\(ff,.*") "import(ff)\n"))
              #t)))))
     (propagated-inputs
-     `(("r-batchjobs" ,r-batchjobs)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-bit" ,r-bit)
-       ("r-doparallel" ,r-doparallel)
-       ("r-ff" ,r-ff)
-       ("r-ffbase" ,r-ffbase)
-       ("r-foreach" ,r-foreach)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-batchjobs
+           r-bbmisc
+           r-biocgenerics
+           r-bit
+           r-doparallel
+           r-ff
+           r-ffbase
+           r-foreach
+           r-genomicfiles
+           r-genomicranges
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gQTLBase")
     (synopsis "Infrastructure for eQTL, mQTL and similar studies")
     (description
@@ -13841,38 +13540,38 @@ and more.")
     (properties `((upstream-name . "gQTLstats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-batchjobs" ,r-batchjobs)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-beeswarm" ,r-beeswarm)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-erma" ,r-erma)
-       ("r-ffbase" ,r-ffbase)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggbeeswarm" ,r-ggbeeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gqtlbase" ,r-gqtlbase)
-       ("r-hardyweinberg" ,r-hardyweinberg)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-mgcv" ,r-mgcv)
-       ("r-plotly" ,r-plotly)
-       ("r-reshape2" ,r-reshape2)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-shiny" ,r-shiny)
-       ("r-snpstats" ,r-snpstats)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-batchjobs
+           r-bbmisc
+           r-beeswarm
+           r-biobase
+           r-biocgenerics
+           r-doparallel
+           r-dplyr
+           r-erma
+           r-ffbase
+           r-foreach
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicfiles
+           r-genomicranges
+           r-ggbeeswarm
+           r-ggplot2
+           r-gqtlbase
+           r-hardyweinberg
+           r-homo-sapiens
+           r-iranges
+           r-limma
+           r-mgcv
+           r-plotly
+           r-reshape2
+           r-s4vectors
+           r-shiny
+           r-snpstats
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gQTLstats")
     (synopsis "Computationally efficient analysis for eQTL and allied studies")
     (description
@@ -13897,30 +13596,30 @@ family of feature/genome hypotheses.")
     (properties `((upstream-name . "Gviz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-biovizbase" ,r-biovizbase)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-digest" ,r-digest)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-biobase
+           r-biocgenerics
+           r-biomart
+           r-biostrings
+           r-biovizbase
+           r-bsgenome
+           r-digest
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-lattice
+           r-latticeextra
+           r-matrixstats
+           r-rcolorbrewer
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-xvector))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Gviz")
     (synopsis "Plotting data and annotation information along genomic coordinates")
     (description
@@ -13945,20 +13644,20 @@ with your data.")
          "0s67jgk3gnfiyfjwhq4r5xlfnip29blis4fg75kn4qmvjv5j2pxx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biostrings" ,r-biostrings)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-readr" ,r-readr)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-snpstats" ,r-snpstats)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biocfilecache
+           r-biostrings
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-readr
+           r-s4vectors
+           r-snpstats
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/gwascat")
     (synopsis "Tools for data in the EMBL-EBI GWAS catalog")
     (description
@@ -13979,10 +13678,7 @@ EMBL-EBI GWAS catalog.")
     (properties `((upstream-name . "KEGGgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-graph" ,r-graph)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-xml" ,r-xml)))
+     (list r-graph r-rcurl r-rgraphviz r-xml))
     (home-page "https://bioconductor.org/packages/KEGGgraph")
     (synopsis "Graph approach to Kegg Pathway database in R and Bioconductor")
     (description
@@ -14006,18 +13702,18 @@ functionalities including parsing, graph operation, visualization and etc.")
          "1v9b372d5hpwwik6956mfwc9b3bibygz042i4nydsklnbwm5vcmg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-ensdb-hsapiens-v75" ,r-ensdb-hsapiens-v75)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfiles" ,r-genomicfiles)
-       ("r-httr" ,r-httr)
-       ("r-matrix" ,r-matrix)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-snpstats" ,r-snpstats)
-       ("r-variantannotation" ,r-variantannotation)))
+     (list r-biocgenerics
+           r-ensdb-hsapiens-v75
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicfiles
+           r-httr
+           r-matrix
+           r-rsamtools
+           r-snpstats
+           r-variantannotation))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ldblock")
     (synopsis "Data structures for linkage disequilibrium measures in populations")
     (description
@@ -14043,9 +13739,7 @@ defining LD blocks.")
     (properties `((upstream-name . "LDheatmap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genetics" ,r-genetics)
-       ("r-rcpp" ,r-rcpp)
-       ("r-snpstats" ,r-snpstats)))
+     (list r-genetics r-rcpp r-snpstats))
     (home-page "https://stat.sfu.ca/statgen/research/ldheatmap.html")
     (synopsis "Graphical display of pairwise linkage disequilibria between SNPs")
     (description
@@ -14070,14 +13764,14 @@ on the plot.")
          "1fqmhw0mhdl6az1gpg0byvx5snhz1pl3fqikhyfjcjrc9xbsq8yw"))))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
-    (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-nnet" ,r-nnet)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-rjags" ,r-rjags)))
+     (list gsl))
+    (propagated-inputs
+     (list r-lme4
+           r-nnet
+           r-rcpp
+           r-rcpparmadillo
+           r-rgraphviz
+           r-rjags))
     (home-page "https://r-bayesian-networks.org/")
     (synopsis "Modelling multivariate data with additive bayesian networks")
     (description
@@ -14107,12 +13801,9 @@ statistical dependencies in messy, complex data.")
                 "08zxxgyp0h6733b08jmml7k4rhfd3mi5dda3jrzid0s184y0z29w"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-catools" ,r-catools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsamtools" ,r-rsamtools)))
+     (list r-bh r-catools r-rcpp r-rsamtools))
     (home-page "https://cran.r-project.org/web/packages/spp/")
     (synopsis "ChIP-Seq processing pipeline")
     (description "This package provides tools for analysis of ChIP-seq and
@@ -14132,14 +13823,14 @@ other functional sequencing data.")
     (properties `((upstream-name . "pathview")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-graph" ,r-graph)
-       ("r-kegggraph" ,r-kegggraph)
-       ("r-keggrest" ,r-keggrest)
-       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
-       ("r-png" ,r-png)
-       ("r-rgraphviz" ,r-rgraphviz)
-       ("r-xml" ,r-xml)))
+     (list r-annotationdbi
+           r-graph
+           r-kegggraph
+           r-keggrest
+           r-org-hs-eg-db
+           r-png
+           r-rgraphviz
+           r-xml))
     (home-page "https://pathview.uncc.edu/")
     (synopsis "Tool set for pathway based data integration and visualization")
     (description
@@ -14166,12 +13857,9 @@ large-scale and fully automated analysis.")
          "0ha34b5cg26940xihgky45adns1nflrgq2qjq77w4bncxpaacsqq"))))
     (properties `((upstream-name . "snpStats")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-matrix" ,r-matrix)
-       ("r-survival" ,r-survival)
-       ("r-zlibbioc" ,r-zlibbioc)))
+     (list r-biocgenerics r-matrix r-survival r-zlibbioc))
     (home-page "https://bioconductor.org/packages/snpStats")
     (synopsis "Methods for SNP association studies")
     (description
@@ -14194,21 +13882,21 @@ the earlier snpMatrix package, allowing for uncertainty in genotypes.")
     (properties `((upstream-name . "chromstaR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bamsignals" ,r-bamsignals)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-chromstardata" ,r-chromstardata)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-bamsignals
+           r-biocgenerics
+           r-chromstardata
+           r-doparallel
+           r-foreach
+           r-genomeinfodb
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-mvtnorm
+           r-reshape2
+           r-rsamtools
+           r-s4vectors))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ataudt/chromstaR")
     (synopsis "Chromatin state analysis for ChIP-Seq data")
     (description
@@ -14232,16 +13920,16 @@ analyses.")
     (properties `((upstream-name . "Guitar")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rtracklayer" ,r-rtracklayer)))
+     (list r-annotationdbi
+           r-dplyr
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-knitr
+           r-magrittr
+           r-rtracklayer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/Guitar")
     (synopsis "Visualize genomic features")
     (description
@@ -14263,8 +13951,7 @@ starting site, start codon, stop codon and transcription ending site.")
     (properties `((upstream-name . "Sushi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biomart" ,r-biomart)
-       ("r-zoo" ,r-zoo)))
+     (list r-biomart r-zoo))
     (home-page "https://bioconductor.org/packages/Sushi")
     (synopsis "Tools for visualizing genomics data")
     (description
@@ -14286,17 +13973,17 @@ visualizations for publication-quality multi-panel figures.")
     (properties `((upstream-name . "ballgown")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-sva" ,r-sva)))
+     (list r-biobase
+           r-genomeinfodb
+           r-genomicranges
+           r-iranges
+           r-limma
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors
+           r-sva))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/ballgown")
     (synopsis "Flexible, isoform-level differential expression analysis")
     (description
@@ -14319,17 +14006,17 @@ to annotation.")
          "0mg7n3990qv65rg624473ssccka0yjpgc20glrdc5saci891j44r"))))
     (properties `((upstream-name . "megadepth")))
     (build-system r-build-system)
-    (inputs `(("megadepth" ,megadepth)))
+    (inputs (list megadepth))
     (propagated-inputs
-     `(("r-cmdfun" ,r-cmdfun)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fs" ,r-fs)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-magrittr" ,r-magrittr)
-       ("r-readr" ,r-readr)
-       ("r-xfun" ,r-xfun)))
+     (list r-cmdfun
+           r-dplyr
+           r-fs
+           r-genomicranges
+           r-magrittr
+           r-readr
+           r-xfun))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/LieberInstitute/megadepth")
     (synopsis "BigWig and BAM related utilities")
     (description
@@ -14353,16 +14040,16 @@ regions or annotations of your choice from BigWig files.")
     (properties `((upstream-name . "BEclear")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-data-table" ,r-data-table)
-       ("r-futile-logger" ,r-futile-logger)
-       ("r-matrix" ,r-matrix)
-       ("r-outliers" ,r-outliers)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rdpack" ,r-rdpack)))
+     (list r-abind
+           r-biocparallel
+           r-data-table
+           r-futile-logger
+           r-matrix
+           r-outliers
+           r-rcpp
+           r-rdpack))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/uds-helms/BEclear")
     (synopsis "Correction of batch effects in DNA methylation data")
     (description
@@ -14386,19 +14073,19 @@ real numbers.")
     (properties `((upstream-name . "BgeeCall")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("kallisto" ,kallisto)
-       ("r-biomart" ,r-biomart)
-       ("r-biostrings" ,r-biostrings)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-rslurm" ,r-rslurm)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-tximport" ,r-tximport)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list kallisto
+           r-biomart
+           r-biostrings
+           r-data-table
+           r-dplyr
+           r-genomicfeatures
+           r-jsonlite
+           r-rhdf5
+           r-rslurm
+           r-rtracklayer
+           r-sjmisc
+           r-tximport))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/BgeeDB/BgeeCall")
     (synopsis "RNA-Seq present/absent gene expression calls generation")
     (description
@@ -14422,18 +14109,18 @@ all RNA-Seq libraries of each species integrated in Bgee.")
     (properties `((upstream-name . "BgeeDB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-curl" ,r-curl)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-graph" ,r-graph)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-tidyr" ,r-tidyr)
-       ("r-topgo" ,r-topgo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-curl
+           r-data-table
+           r-digest
+           r-dplyr
+           r-graph
+           r-r-utils
+           r-rcurl
+           r-rsqlite
+           r-tidyr
+           r-topgo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/BgeeDB/BgeeDB_R")
     (synopsis "Annotation and gene expression data retrieval from Bgee database")
     (description
@@ -14456,11 +14143,8 @@ anatomical terms, mapped to genes by expression patterns.")
     (properties `((upstream-name . "biobtreeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpuv" ,r-httpuv)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-stringi" ,r-stringi)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-httpuv r-httr r-jsonlite r-stringi))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/tamerh/biobtreeR")
     (synopsis "Use biobtree tool from R")
     (description
@@ -14483,7 +14167,7 @@ mappings functionalities.")
     (properties `((upstream-name . "minet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-infotheo" ,r-infotheo)))
+     (list r-infotheo))
     (home-page "http://minet.meyerp.com")
     (synopsis "Mutual information networks")
     (description
@@ -14506,10 +14190,7 @@ information networks from data.")
      `((upstream-name . "geNetClassifier")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-e1071" ,r-e1071)
-       ("r-ebarrays" ,r-ebarrays)
-       ("r-minet" ,r-minet)))
+     (list r-biobase r-e1071 r-ebarrays r-minet))
     (home-page "https://www.cicancer.org")
     (synopsis "Classify diseases and build gene networks using expression profiles")
     (description
@@ -14532,8 +14213,8 @@ interface to query the classifier.")
          "1bwmlxmizhmim2l0mk406hxfr5mnmsg5zbqkjyygaipa971m9s00"))))
     (properties `((upstream-name . "dir.expiry")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-filelock" ,r-filelock)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-filelock))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/dir.expiry")
     (synopsis "Managing expiration for cache directories")
     (description
@@ -14558,8 +14239,8 @@ eliminating obsolete caches generated by old versions of packages.")
      `((upstream-name . "basilisk.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dir-expiry" ,r-dir-expiry)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dir-expiry))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/basilisk.utils")
     (synopsis "Basilisk installation utilities")
     (description
@@ -14581,10 +14262,8 @@ package, primarily for creation of the underlying Conda instance.")
     (properties `((upstream-name . "basilisk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-basilisk-utils" ,r-basilisk-utils)
-       ("r-dir-expiry" ,r-dir-expiry)
-       ("r-reticulate" ,r-reticulate)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-basilisk-utils r-dir-expiry r-reticulate))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/basilisk")
     (synopsis "Freeze Python dependencies inside Bioconductor packages")
     (description
@@ -14614,13 +14293,13 @@ Python environments in a single R session.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-fs" ,r-fs)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-styler" ,r-styler)
-       ("r-usethis" ,r-usethis)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocmanager
+           r-fs
+           r-glue
+           r-rlang
+           r-styler
+           r-usethis))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/lcolladotor/biocthis")
     (synopsis "Automate package and project setup for Bioconductor packages")
     (description
@@ -14644,13 +14323,13 @@ Bioconductor-friendly.")
      `((upstream-name . "BiocDockerManager")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("docker" ,docker)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-memoise" ,r-memoise)
-       ("r-readr" ,r-readr)
-       ("r-whisker" ,r-whisker)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list docker
+           r-dplyr
+           r-httr
+           r-memoise
+           r-readr
+           r-whisker))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/BiocDockerManager")
     (synopsis "Access and manage Bioconductor Docker images")
     (description
@@ -14673,25 +14352,25 @@ the Bioconductor project.")
     (properties `((upstream-name . "biodb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocfilecache" ,r-biocfilecache)
-       ("r-chk" ,r-chk)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lgr" ,r-lgr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-openssl" ,r-openssl)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-stringr" ,r-stringr)
-       ("r-testthat" ,r-testthat)
-       ("r-withr" ,r-withr)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-biocfilecache
+           r-chk
+           r-jsonlite
+           r-lgr
+           r-lifecycle
+           r-openssl
+           r-plyr
+           r-progress
+           r-r6
+           r-rappdirs
+           r-rcpp
+           r-rcurl
+           r-rsqlite
+           r-stringr
+           r-testthat
+           r-withr
+           r-xml
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://bioconductor.org/packages/biodb")
     (synopsis "Library for connecting to chemical and biological databases")
     (description
@@ -14718,11 +14397,8 @@ separate published packages.")
     (properties `((upstream-name . "biomformat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-plyr" ,r-plyr)
-       ("r-rhdf5" ,r-rhdf5)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-jsonlite r-matrix r-plyr r-rhdf5))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/joey711/biomformat/")
     (synopsis "Interface package for the BIOM file format")
     (description
@@ -14770,10 +14446,7 @@ design.")
     (properties `((upstream-name . "BioMVCClass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-graph" ,r-graph)
-       ("r-mvcclass" ,r-mvcclass)
-       ("r-rgraphviz" ,r-rgraphviz)))
+     (list r-biobase r-graph r-mvcclass r-rgraphviz))
     (home-page "https://bioconductor.org/packages/BioMVCClass")
     (synopsis "Model-View-Controller (MVC) classes that use Biobase")
     (description
@@ -14795,10 +14468,7 @@ design.")
     (properties `((upstream-name . "biomvRCNS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-genomicranges" ,r-genomicranges)
-       ("r-gviz" ,r-gviz)
-       ("r-iranges" ,r-iranges)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-genomicranges r-gviz r-iranges r-mvtnorm))
     (home-page "https://bioconductor.org/packages/biomvRCNS")
     (synopsis "Copy number study and segmentation for multivariate biological data")
     (description
@@ -14823,28 +14493,28 @@ using aCGH or sequencing.")
     (properties `((upstream-name . "BioNERO")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-complexheatmap" ,r-complexheatmap)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dynamictreecut" ,r-dynamictreecut)
-       ("r-genie3" ,r-genie3)
-       ("r-ggnetwork" ,r-ggnetwork)
-       ("r-ggnewscale" ,r-ggnewscale)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-igraph" ,r-igraph)
-       ("r-intergraph" ,r-intergraph)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-minet" ,r-minet)
-       ("r-netrep" ,r-netrep)
-       ("r-networkd3" ,r-networkd3)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-sva" ,r-sva)
-       ("r-wgcna" ,r-wgcna)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-complexheatmap
+           r-deseq2
+           r-dynamictreecut
+           r-genie3
+           r-ggnetwork
+           r-ggnewscale
+           r-ggplot2
+           r-ggpubr
+           r-igraph
+           r-intergraph
+           r-matrixstats
+           r-minet
+           r-netrep
+           r-networkd3
+           r-rcolorbrewer
+           r-reshape2
+           r-summarizedexperiment
+           r-sva
+           r-wgcna))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/almeidasilvaf/BioNERO")
     (synopsis "Biological network reconstruction omnibus")
     (description
@@ -14879,11 +14549,7 @@ networks.")
     (properties `((upstream-name . "BioNet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biobase" ,r-biobase)
-       ("r-graph" ,r-graph)
-       ("r-igraph" ,r-igraph)
-       ("r-rbgl" ,r-rbgl)))
+     (list r-annotationdbi r-biobase r-graph r-igraph r-rbgl))
     (home-page "http://bioconductor.org/packages/release/bioc/html/BioNet.html")
     (synopsis "Functional analysis of biological networks")
     (description
@@ -14912,26 +14578,26 @@ scoring subnetwork.")
     (properties `((upstream-name . "BioNetStat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocparallel" ,r-biocparallel)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-pathview" ,r-pathview)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plyr" ,r-plyr)
-       ("r-psych" ,r-psych)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rjsonio" ,r-rjsonio)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)
-       ("r-shinybs" ,r-shinybs)
-       ("r-whisker" ,r-whisker)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biocparallel
+           r-dt
+           r-ggplot2
+           r-hmisc
+           r-igraph
+           r-knitr
+           r-markdown
+           r-pathview
+           r-pheatmap
+           r-plyr
+           r-psych
+           r-rcolorbrewer
+           r-rjsonio
+           r-rmarkdown
+           r-shiny
+           r-shinybs
+           r-whisker
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/jardimViniciusC/BioNetStat")
     (synopsis "Biological network analysis")
     (description
@@ -14954,11 +14620,9 @@ network and metabolic pathways view.")
     (properties `((upstream-name . "BioQC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-edger" ,r-edger)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-biobase r-edger r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://accio.github.io/BioQC/")
     (synopsis "Detect tissue heterogeneity in expression profiles with gene sets")
     (description
@@ -14982,15 +14646,15 @@ optimised for high performance.")
     (properties `((upstream-name . "BioTIP")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-psych" ,r-psych)
-       ("r-stringr" ,r-stringr)))
+     (list r-cluster
+           r-genomicranges
+           r-hmisc
+           r-igraph
+           r-mass
+           r-psych
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/xyang2uchicago/BioTIP")
     (synopsis "R package for characterization of biological tipping-point")
     (description
@@ -15012,20 +14676,20 @@ help unravel disease regulatory trajectory.")
     (properties `((upstream-name . "biotmle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-drtmle" ,r-drtmle)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggsci" ,r-ggsci)
-       ("r-limma" ,r-limma)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-superheat" ,r-superheat)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-biocgenerics
+           r-biocparallel
+           r-dplyr
+           r-drtmle
+           r-ggplot2
+           r-ggsci
+           r-limma
+           r-s4vectors
+           r-summarizedexperiment
+           r-superheat
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://code.nimahejazi.org/biotmle/")
     (synopsis "Targeted learning with moderated statistics for biomarker discovery")
     (description
@@ -15054,31 +14718,31 @@ ensemble machine learning for the estimation of nuisance functions.")
     (properties `((upstream-name . "bsseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beachmat" ,r-beachmat)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bsgenome" ,r-bsgenome)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedarray" ,r-delayedarray)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-iranges" ,r-iranges)
-       ("r-limma" ,r-limma)
-       ("r-locfit" ,r-locfit)
-       ("r-permute" ,r-permute)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-beachmat
+           r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biostrings
+           r-bsgenome
+           r-data-table
+           r-delayedarray
+           r-delayedmatrixstats
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-hdf5array
+           r-iranges
+           r-limma
+           r-locfit
+           r-permute
+           r-r-utils
+           r-rcpp
+           r-rhdf5
+           r-s4vectors
+           r-scales
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/hansenlab/bsseq")
     (synopsis "Analyze, manage and store bisulfite sequencing data")
     (description
@@ -15100,25 +14764,25 @@ visualizing bisulfite sequencing data.")
     (properties `((upstream-name . "dmrseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationhub" ,r-annotationhub)
-       ("r-annotatr" ,r-annotatr)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-bsseq" ,r-bsseq)
-       ("r-bumphunter" ,r-bumphunter)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iranges" ,r-iranges)
-       ("r-locfit" ,r-locfit)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-nlme" ,r-nlme)
-       ("r-outliers" ,r-outliers)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationhub
+           r-annotatr
+           r-biocparallel
+           r-bsseq
+           r-bumphunter
+           r-delayedmatrixstats
+           r-genomeinfodb
+           r-genomicranges
+           r-ggplot2
+           r-iranges
+           r-locfit
+           r-matrixstats
+           r-nlme
+           r-outliers
+           r-rcolorbrewer
+           r-rtracklayer
+           r-s4vectors))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bioconductor.org/packages/dmrseq")
     (synopsis "Detection and inference of differentially methylated regions")
     (description
@@ -15150,30 +14814,30 @@ interest on transformed methylation proportions.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-crayon" ,r-crayon)
-       ("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-igraph" ,r-igraph)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-later" ,r-later)
-       ("r-logger" ,r-logger)
-       ("r-magrittr" ,r-magrittr)
-       ("r-progress" ,r-progress)
-       ("r-purrr" ,r-purrr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-checkmate
+           r-crayon
+           r-curl
+           r-digest
+           r-dplyr
+           r-httr
+           r-igraph
+           r-jsonlite
+           r-later
+           r-logger
+           r-magrittr
+           r-progress
+           r-purrr
+           r-rappdirs
+           r-readr
+           r-readxl
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-xml2
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://saezlab.github.io/OmnipathR/")
     (synopsis "OmniPath web service client and more")
     (description
@@ -15198,34 +14862,34 @@ for ligand activity prediction from transcriptomics data.")
     (properties `((upstream-name . "biscuiteer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biscuiteerdata" ,r-biscuiteerdata)
-       ("r-bsseq" ,r-bsseq)
-       ("r-data-table" ,r-data-table)
-       ("r-delayedmatrixstats" ,r-delayedmatrixstats)
-       ("r-dmrseq" ,r-dmrseq)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-gtools" ,r-gtools)
-       ("r-hdf5array" ,r-hdf5array)
-       ("r-homo-sapiens" ,r-homo-sapiens)
-       ("r-impute" ,r-impute)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mus-musculus" ,r-mus-musculus)
-       ("r-qdnaseq" ,r-qdnaseq)
-       ("r-qualv" ,r-qualv)
-       ("r-r-utils" ,r-r-utils)
-       ("r-readr" ,r-readr)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-variantannotation" ,r-variantannotation)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-biobase
+           r-biocgenerics
+           r-biocparallel
+           r-biscuiteerdata
+           r-bsseq
+           r-data-table
+           r-delayedmatrixstats
+           r-dmrseq
+           r-genomeinfodb
+           r-genomicranges
+           r-gtools
+           r-hdf5array
+           r-homo-sapiens
+           r-impute
+           r-matrix
+           r-matrixstats
+           r-mus-musculus
+           r-qdnaseq
+           r-qualv
+           r-r-utils
+           r-readr
+           r-rsamtools
+           r-rtracklayer
+           r-s4vectors
+           r-summarizedexperiment
+           r-variantannotation))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/trichelab/biscuiteer")
     (synopsis "Convenience functions for the Biscuit package")
     (description
@@ -15249,23 +14913,23 @@ estimates, etc.")
     (properties `((upstream-name . "tximeta")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-biostrings" ,r-biostrings)
-       ("r-ensembldb" ,r-ensembldb)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-tibble" ,r-tibble)
-       ("r-tximport" ,r-tximport)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biocfilecache
+           r-biostrings
+           r-ensembldb
+           r-genomeinfodb
+           r-genomicfeatures
+           r-genomicranges
+           r-iranges
+           r-jsonlite
+           r-matrix
+           r-s4vectors
+           r-summarizedexperiment
+           r-tibble
+           r-tximport))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/mikelove/tximeta")
     (synopsis "Transcript quantification import with automatic metadata")
     (description
@@ -15289,24 +14953,24 @@ reproducibility.")
     (properties `((upstream-name . "phyloseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-ape" ,r-ape)
-       ("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-biomformat" ,r-biomformat)
-       ("r-biostrings" ,r-biostrings)
-       ("r-cluster" ,r-cluster)
-       ("r-data-table" ,r-data-table)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-igraph" ,r-igraph)
-       ("r-multtest" ,r-multtest)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)
-       ("r-vegan" ,r-vegan)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-ade4
+           r-ape
+           r-biobase
+           r-biocgenerics
+           r-biomformat
+           r-biostrings
+           r-cluster
+           r-data-table
+           r-foreach
+           r-ggplot2
+           r-igraph
+           r-multtest
+           r-plyr
+           r-reshape2
+           r-scales
+           r-vegan))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/joey711/phyloseq")
     (synopsis "Handling and analysis of high-throughput microbiome census data")
     (description
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 259b72b5f4..8c3be14e65 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018, 2019, 2020, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
@@ -42,6 +42,7 @@
 (define-module (gnu packages bioinformatics)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -59,7 +60,6 @@
   #:use-module (guix build-system qt)
   #:use-module (guix build-system r)
   #:use-module (guix build-system ruby)
-  #:use-module (guix build-system scons)
   #:use-module (guix build-system trivial)
   #:use-module (guix deprecation)
   #:use-module (gnu packages)
@@ -138,6 +138,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages rpc)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages serialization)
@@ -227,17 +228,16 @@ structure of the predicted RNA.")
               (snippet
                `(begin
                   ;; Delete bundled htslib.
-                  (delete-file-recursively "c/htslib-1.3.1")
-                  #t))))
+                  (delete-file-recursively "c/htslib-1.3.1")))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2 ; BamM is Python 2 only.
        ;; Do not use bundled libhts.  Do use the bundled libcfu because it has
        ;; been modified from its original form.
        #:configure-flags
-       (let ((htslib (assoc-ref %build-inputs "htslib")))
-         (list "--with-libhts-lib" (string-append htslib "/lib")
-               "--with-libhts-inc" (string-append htslib "/include/htslib")))
+       ,#~(let ((htslib #$(this-package-input "htslib")))
+            (list "--with-libhts-lib" (string-append htslib "/lib")
+                  "--with-libhts-inc" (string-append htslib "/include/htslib")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'autogen
@@ -248,53 +248,38 @@ structure of the predicted RNA.")
                  ;; Use autogen so that 'configure' works.
                  (substitute* "autogen.sh" (("/bin/sh") sh))
                  (setenv "CONFIG_SHELL" sh)
-                 (invoke "./autogen.sh")))
-             #t))
-         (delete 'build)
-         ;; Run tests after installation so compilation only happens once.
-         (delete 'check)
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out  (assoc-ref outputs "out"))
-                   (path (getenv "PATH")))
-              (wrap-program (string-append out "/bin/bamm")
-                `("PATH" ":" prefix (,path))))
-            #t))
-         (add-after 'wrap-executable 'post-install-check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (setenv "PATH"
-                     (string-append (assoc-ref outputs "out")
-                                    "/bin:"
-                                    (getenv "PATH")))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (assoc-ref outputs "out")
-                      "/lib/python"
-                      (string-take (string-take-right
-                                    (assoc-ref inputs "python") 5) 3)
-                      "/site-packages:"
-                      (getenv "PYTHONPATH")))
+                 (invoke "./autogen.sh")))))
+         (delete 'build)                ;the build loops otherwise
+         (replace 'check
+           (lambda _
              ;; There are 2 errors printed, but they are safe to ignore:
              ;; 1) [E::hts_open_format] fail to open file ...
              ;; 2) samtools view: failed to open ...
-             (invoke "nosetests")
-             #t)))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("zlib" ,zlib)
-       ("python-nose" ,python2-nose)
-       ("python-pysam" ,python2-pysam)))
-    (inputs
-     `(("htslib" ,htslib-1.3) ; At least one test fails on htslib-1.4+.
-       ("samtools" ,samtools)
-       ("bwa" ,bwa)
-       ("grep" ,grep)
-       ("sed" ,sed)
-       ("coreutils" ,coreutils)))
+             (invoke "nosetests")))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (path (getenv "PATH"))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
+               (wrap-program (string-append out "/bin/bamm")
+                 `("PATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,pythonpath)))))))))
+    (native-inputs
+     (list autoconf
+           automake
+           libtool
+           zlib
+           python2-nose
+           python2-pysam))
+    (inputs
+     (list htslib-1.3 ; At least one test fails on htslib-1.4+.
+           samtools
+           bwa
+           grep
+           sed
+           coreutils))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy)))
+     (list python2-numpy))
     (home-page "https://ecogenomics.github.io/BamM/")
     (synopsis "Metagenomics-focused BAM file manipulator")
     (description
@@ -329,7 +314,7 @@ instance, it implements several methods to assess contig-wise read coverage.")
                      "-Wl,-rpath="
                      (assoc-ref outputs "out") "/lib/bamtools"))
             #t)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://github.com/pezmaster31/bamtools")
     (synopsis "C++ API and command-line toolkit for working with BAM data")
     (description
@@ -340,27 +325,43 @@ BAM files.")
 (define-public bamutils
   (package
     (name "bamutils")
-    (version "1.0.13")
+    (version "1.0.14")
     (source (origin
-              (method url-fetch)
-              (uri
-               (string-append
-                "https://genome.sph.umich.edu/w/images/7/70/"
-                "BamUtilLibStatGen." version ".tgz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/statgen/bamUtil")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0asr1kmjbr3cyf4hkg865y8c2s30v87xvws4q6c8pyfi6wfd1h8n"))))
+                "0i2r332k1kz0jysyg89d858wqq59n16lw6dv5qmilcwshb77r9v7"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; There are no tests.
-       #:make-flags `("USER_WARNINGS=-std=gnu++98"
-                      ,(string-append "INSTALLDIR="
-                                      (assoc-ref %outputs "out") "/bin"))
+     `(#:tests? #f ; Unclear how to run tests
+       #:make-flags
+       ,#~(list "USER_WARNINGS=-std=gnu++98" ;
+                (string-append "INSTALLDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/Makefile" ;
+               (("^DATE=.*") "DATE=\"1970-01-01\"\n"))
+             (copy-recursively (assoc-ref inputs "libstatgen")
+                               "../libStatGen"))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
+    (native-inputs
+     `(("libstatgen"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/statgen/libStatGen/")
+                 (commit (string-append "v" version))))
+           (file-name (git-file-name "libstatgen" version))
+           (sha256
+            (base32
+             "0q9iyk046r4m7qnav8c3f28zsar25lj9nydiklwaswmzdijhi4p1"))))))
     (home-page "https://genome.sph.umich.edu/wiki/BamUtil")
     (synopsis "Programs for working on SAM/BAM files")
     (description "This package provides several programs that perform
@@ -398,11 +399,9 @@ single executable called @code{bam}.")
                (("/bin/bash") (which "bash")))
              #t)))))
     (native-inputs
-     `(("htslib" ,htslib)
-       ("perl" ,perl)))
+     (list htslib perl))
     (inputs
-     `(("gsl" ,gsl)
-       ("zlib" ,zlib)))
+     (list gsl zlib))
     (home-page "https://samtools.github.io/bcftools/")
     (synopsis "Utilities for variant calling and manipulating VCFs and BCFs")
     (description
@@ -431,8 +430,7 @@ transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
                           #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("htslib" ,htslib-1.10)
-       ("perl" ,perl)))))
+     (list htslib-1.10 perl))))
 
 (define-public bedops
   (package
@@ -508,17 +506,16 @@ computational cluster.")
                 "1f2hh79l7dn147c2xyfgf5wfjvlqfw32kjfnnh2n1qy6rpzx2fik"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:test-target "test"
+     `(#:test-target "test"
        #:make-flags
-       (list (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
      `(("python" ,python-wrapper)))
     (inputs
-     `(("samtools" ,samtools)
-       ("zlib" ,zlib)))
+     (list samtools zlib))
     (home-page "https://github.com/arq5x/bedtools2")
     (synopsis "Tools for genome analysis and arithmetic")
     (description
@@ -566,50 +563,79 @@ BED, GFF/GTF, VCF.")
     (native-inputs
      `(("python" ,python-wrapper)))
     (inputs
-     `(("samtools" ,samtools)
-       ("zlib" ,zlib)))))
+     (list samtools zlib))))
+
+(define-public pbcopper
+  ;; This is the latest commit at the time of this writing.
+  (let ((commit "ad4143afd25a0bd6adc977c544865c992a515841")
+        (revision "1"))
+    (package
+      (name "pbcopper")
+      (version (git-version "1.9.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/PacificBiosciences/pbcopper")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1qxkbpdkamfisnk36lpi1vdvf3p1lg2hdqna3xgd94pz52bwbmp7"))))
+      (build-system meson-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-meson-files
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "meson.build"
+                 (("-msse4.1") "")))))))
+      (inputs
+       (list boost))
+      (native-inputs
+       (list googletest pkg-config))
+      (home-page "https://github.com/PacificBiosciences/pbcopper")
+      (synopsis "Data structures, algorithms, and utilities for PacBio C++ applications")
+      (description
+       "The pbcopper library provides a suite of data structures, algorithms,
+and utilities for PacBio C++ applications.")
+      (license license:bsd-3))))
 
 (define-public pbbam
   (package
     (name "pbbam")
-    (version "0.23.0")
+    (version "1.7.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/PacificBiosciences/pbbam")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0h9gkrpf2lrxklxp72xfl5bi3h5zcm5hprrya9gf0hr3xwlbpp0x"))))
+                "1avdm5hwhr5ls79017blyalx1npzbf1aa6dgb6j6lg8sq4nk9yyg"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'find-googletest
+         (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; It doesn't find gtest_main because there's no pkg-config file
-             ;; for it.  Find it another way.
-             (substitute* "tests/meson.build"
-               (("pbbam_gtest_dep = dependency\\('gtest_main'.*")
-                (format #f "cpp = meson.get_compiler('cpp')
-pbbam_gtest_dep = cpp.find_library('gtest_main', dirs : '~a')\n"
-                        (assoc-ref inputs "googletest"))))
-             #t)))
-       ;; TODO: tests/pbbam_test cannot be linked
-       ;; ld: tests/59830eb@@pbbam_test@exe/src_test_Accuracy.cpp.o:
-       ;;   undefined reference to symbol '_ZTIN7testing4TestE'
-       ;; ld: /gnu/store/...-googletest-1.8.0/lib/libgtest.so:
-       ;;   error adding symbols: DSO missing from command line
-       #:tests? #f
-       #:configure-flags '("-Dtests=false")))
+             ;; Disable this test.  I tried fixing it by including
+             ;; optional_io.hpp, but there's a type error.
+             (substitute* "tests/src/meson.build"
+               (("'test_ReadGroupInfo.cpp',") ""))
+             #;
+             (substitute* "include/pbbam/ReadGroupInfo.h"
+               (("#include <boost/optional.hpp>" m)
+                (string-append m "\n#include <boost/optional/optional_io.hpp>")))
+             (substitute* '("tests/scripts/cram/_test.py"
+                            "tests/scripts/cram/_main.py")
+               (("'/bin/sh'")
+                (string-append "'" (which "sh") "'"))))))))
     ;; These libraries are listed as "Required" in the pkg-config file.
     (propagated-inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib pbcopper zlib))
     (inputs
-     `(("boost" ,boost)
-       ("samtools" ,samtools)))
+     (list boost samtools))
     (native-inputs
      `(("googletest" ,googletest)
        ("pkg-config" ,pkg-config)
@@ -641,10 +667,9 @@ Non-PacBio BAMs will cause exceptions to be thrown.")
                   "1mlmq0v96irbz71bgw5zcc43g1x32zwnxx21a5p1f1ch4cikw1yd"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (inputs
-       `(("zlib" ,zlib)))
+       (list zlib))
       (home-page "https://github.com/nh13/pbgzip")
       (synopsis "Parallel Block GZIP")
       (description "This package implements parallel block gzip.  For many
@@ -662,7 +687,7 @@ speedup comes during compression.")
 (define-public blasr-libcpp
   (package
     (name "blasr-libcpp")
-    (version "5.3.3")
+    (version "5.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -671,7 +696,7 @@ speedup comes during compression.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0cn5l42zyq67sj0g2imqkhayz2iqvv0a1pgpbmlq0qynjmsrbfd2"))))
+                "07cdfnfl29zf2j7fpaaqaxghq3p0wnc109razs0icwm2q6l3gycb"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -706,13 +731,9 @@ libblasr_gtest_dep = cpp.find_library('gtest_main', dirs : '~a')\n"
        #:tests? #f
        #:configure-flags '("-Dtests=false")))
     (inputs
-     `(("boost" ,boost)
-       ("hdf5" ,hdf5)
-       ("pbbam" ,pbbam)
-       ("zlib" ,zlib)))
+     (list boost hdf5 htslib pbbam zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/PacificBiosciences/blasr_libcpp")
     (synopsis "Library for analyzing PacBio genomic sequences")
     (description
@@ -724,7 +745,7 @@ hdf and alignment.")
 (define-public blasr
   (package
     (name "blasr")
-    (version "5.3.3")
+    (version "5.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -733,7 +754,7 @@ hdf and alignment.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1skgy2mvz8gsgfh1gc2nfgwvpyzb1hpmp2cf2773h5wsj8nw22kl"))))
+                "0axyd06gn2xa0p0k76fihsbxpfxvhlb18jn6bf97c0ii58r1wc0k"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -747,19 +768,14 @@ hdf and alignment.")
                    m
                    (format #f "cpp.find_library('hdf5', dirs : '~a'), \
 cpp.find_library('hdf5_cpp', dirs : '~a'), "
-                           hdf5 hdf5)))))
-             #t)))
+                           hdf5 hdf5))))))))
        ;; Tests require "cram" executable, which is not packaged.
        #:tests? #f
        #:configure-flags '("-Dtests=false")))
     (inputs
-     `(("boost" ,boost)
-       ("blasr-libcpp" ,blasr-libcpp)
-       ("hdf5" ,hdf5)
-       ("pbbam" ,pbbam)
-       ("zlib" ,zlib)))
+     (list boost blasr-libcpp hdf5 pbbam zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/PacificBiosciences/blasr")
     (synopsis "PacBio long read aligner")
     (description
@@ -795,14 +811,14 @@ cpp.find_library('hdf5_cpp', dirs : '~a'), "
                   "Ribotaper.sh")))
              #t)))))
     (inputs
-     `(("bedtools" ,bedtools-2.18)
-       ("samtools" ,samtools-0.1)
-       ("r-minimal" ,r-minimal)
-       ("r-foreach" ,r-foreach)
-       ("r-xnomial" ,r-xnomial)
-       ("r-domc" ,r-domc)
-       ("r-multitaper" ,r-multitaper)
-       ("r-seqinr" ,r-seqinr)))
+     (list bedtools-2.18
+           samtools-0.1
+           r-minimal
+           r-foreach
+           r-xnomial
+           r-domc
+           r-multitaper
+           r-seqinr))
     (home-page "https://ohlerlab.mdc-berlin.de/software/RiboTaper_126/")
     (synopsis "Define translated ORFs using ribosome profiling data")
     (description
@@ -843,13 +859,10 @@ provides the Ribotaper pipeline.")
                 (string-append line "\n"
                                prefix "scripts=['scripts/TE.py'],\n"))))))))
     (inputs
-     `(("python-numpy" ,python2-numpy)
-       ("python-matplotlib" ,python2-matplotlib)
-       ("python-scipy" ,python2-scipy)
-       ("python-statsmodels" ,python2-statsmodels)))
+     (list python2-numpy python2-matplotlib python2-scipy
+           python2-statsmodels))
     (native-inputs
-     `(("python-mock" ,python2-mock)
-       ("python-nose" ,python2-nose)))
+     (list python2-mock python2-nose))
     (home-page "https://public.bmi.inf.ethz.ch/user/zhongy/RiboDiff/")
     (synopsis "Detect translation efficiency changes from ribosome footprints")
     (description "RiboDiff is a statistical tool that detects the protein
@@ -875,9 +888,9 @@ independently with transcriptional regulation.")
                 "1pxc3zdnirxbf9a0az698hd8xdik7qkhypm7v6hn922x8y9qmspm"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (arguments
      `(#:tests? #f ; There are no tests to run.
        ;; Bison must generate files, before other targets can build.
@@ -916,11 +929,9 @@ intended to behave exactly the same as the original BWK awk.")
               "0ic07q85vhw9djf23k57b21my7i5xp400m8gfqgr5gcryqvdr0yk"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-setuptools-scm))
    (propagated-inputs
-    `(("python-humanize" ,python-humanize)
-      ("python-requests" ,python-requests)
-      ("python-six" ,python-six)))
+    (list python-humanize python-requests python-six))
    (home-page "https://pypi.org/project/htsget/")
    (synopsis "Python API and command line interface for the GA4GH htsget API")
    (description "This package is a client implementation of the GA4GH htsget
@@ -940,9 +951,7 @@ servers supporting the protocol.")
                 "0wc7z8g8prgdx7n5chjva2fdq03wiwhqisjjxzkjg1j5k5ha7151"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
+     `(#:modules ((srfi srfi-26)
                   (guix build utils)
                   (guix build python-build-system))
        ;; See https://github.com/daler/pybedtools/issues/192
@@ -962,8 +971,6 @@ servers supporting the protocol.")
              (substitute* "pybedtools/test/test_issues.py"
                (("def test_issue_303")
                 "def _test_issue_303"))))
-         ;; TODO: Remove phase after it's part of PYTHON-BUILD-SYSTEM.
-         ;; build system.
          ;; Force the Cythonization of C++ files to guard against compilation
          ;; problems.
          (add-after 'unpack 'remove-cython-generated-files
@@ -975,40 +982,29 @@ servers supporting the protocol.")
                  (string-take filename (string-index-right filename #\.)))
                (define (cythonized? c/c++-file)
                  (member (strip-extension c/c++-file) cython-sources))
-               (for-each delete-file (filter cythonized? c/c++-files))
-               #t)))
+               (for-each delete-file (filter cythonized? c/c++-files)))))
          (add-after 'remove-cython-generated-files 'generate-cython-extensions
            (lambda _
              (invoke "python" "setup.py" "cythonize")))
          (replace 'check
            (lambda _
-             (let* ((build-root-directory (string-append (getcwd) "/build/"))
-                    (build (string-append
-                            build-root-directory
-                            (find (cut string-prefix? "lib" <>)
-                                  (scandir build-root-directory)))))
-               (setenv "PYTHONPATH"
-                       (string-append build ":" (getenv "PYTHONPATH"))))
              ;; The tests need to be run from elsewhere...
              (mkdir-p "/tmp/test")
              (copy-recursively "pybedtools/test" "/tmp/test")
              (with-directory-excursion "/tmp/test"
                (invoke "pytest" "-v" "--doctest-modules")))))))
     (propagated-inputs
-     `(("bedtools" ,bedtools)
-       ("samtools" ,samtools)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pysam" ,python-pysam)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-cython" ,python-cython)
-       ("kentutils" ,kentutils)         ; for bedGraphToBigWig
-       ("python-six" ,python-six)
-       ;; For the test suite.
-       ("python-pytest" ,python-pytest)
-       ("python-psutil" ,python-psutil)))
+     (list bedtools samtools python-matplotlib python-pysam
+           python-pyyaml))
+    (native-inputs
+     (list python-numpy
+           python-pandas
+           python-cython
+           kentutils ; for bedGraphToBigWig
+           python-six
+           ;; For the test suite.
+           python-pytest
+           python-psutil))
     (home-page "https://pythonhosted.org/pybedtools/")
     (synopsis "Python wrapper for BEDtools programs")
     (description
@@ -1023,8 +1019,8 @@ Python.")
     (package
       (inherit pybedtools)
       (native-inputs
-       `(("python2-pathlib" ,python2-pathlib)
-         ,@(package-native-inputs pybedtools))))))
+       (modify-inputs (package-native-inputs pybedtools)
+         (prepend python2-pathlib))))))
 
 (define-public python-biom-format
   (package
@@ -1075,19 +1071,16 @@ Python.")
                (for-each (lambda (file) (chmod file #o644))
                          (find-files out "\\.gz"))))))))
     (propagated-inputs
-     `(("python-anndata" ,python-anndata)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-flake8" ,python-flake8)
-       ("python-future" ,python-future)
-       ("python-click" ,python-click)
-       ("python-h5py" ,python-h5py)
-       ("python-pandas" ,python-pandas)))
-    (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-nose" ,python-nose)))
+     (list python-anndata
+           python-numpy
+           python-scipy
+           python-flake8
+           python-future
+           python-click
+           python-h5py
+           python-pandas))
+    (native-inputs
+     (list python-cython python-pytest python-pytest-cov python-nose))
     (home-page "http://www.biom-format.org")
     (synopsis "Biological Observation Matrix (BIOM) format utilities")
     (description
@@ -1126,17 +1119,15 @@ e.g. microbiome samples, genomes, metagenomes.")
              (with-directory-excursion "/tmp"
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-nose python-pytest))
     (inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("htslib" ,htslib)               ; for bgzip, looked up in PATH
-       ("samtools" ,samtools)           ; looked up in PATH
-       ("lz4" ,lz4) ; for lz4c
-       ("python-click" ,python-click)
-       ("python-numpy" ,python-numpy)))
+     (list htslib ; for bgzip, looked up in PATH
+           samtools ; looked up in PATH
+           lz4 ; for lz4c
+           python-click
+           python-numpy))
     (home-page "https://github.com/mirnylab/pairtools")
     (synopsis "Process mapped Hi-C data")
     (description "Pairtools is a simple and fast command-line framework to
@@ -1203,12 +1194,9 @@ alignments and perform the following operations:
                            (find-files bin "\\.pl$"))
                  #t)))))))
     (inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-data-stag" ,perl-data-stag)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-module-build perl-data-stag perl-libwww perl-uri))
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (home-page "https://metacpan.org/release/BioPerl")
     (synopsis "Bioinformatics toolkit")
     (description
@@ -1236,11 +1224,9 @@ provide a coordinated and extensible framework to do computational biology.")
          "0hjg0igfkpvh27zdkdr6pa7cqm9n6r7cwz0np74cl4wmawgvr9hj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("pkg-config" ,pkg-config)))
+     (list perl-module-build pkg-config))
     (propagated-inputs
-     `(("bioperl-minimal" ,bioperl-minimal)
-       ("htslib" ,htslib-1.9)))
+     (list bioperl-minimal htslib-1.9))
     (home-page "https://metacpan.org/release/Bio-DB-HTS")
     (synopsis "Perl interface to HTS library for DNA sequencing")
     (description "This is a Perl interface to the HTS library for DNA
@@ -1266,7 +1252,7 @@ sequencing.")
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://biopython.org/")
     (synopsis "Tools for biological computation in Python")
     (description
@@ -1340,7 +1326,7 @@ relying on a complex dependency tree.")
              (when tests?
                (invoke "./bin/biosoup_test")))))))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/rvaser/biosoup")
     (synopsis "C++ support library for bioinformatics tools")
     (description "Biosoup is a C++ collection of header-only data structures
@@ -1371,11 +1357,11 @@ used for storage and logging in bioinformatics tools.")
              (when tests?
                (invoke "./bin/bioparser_test")))))))
     (inputs
-     `(("biosoup" ,biosoup)))
+     (list biosoup))
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/rvaser/bioparser")
     (synopsis "C++ library for parsing several formats in bioinformatics")
     (description "Bioparser is a C++ header only parsing library for several
@@ -1425,12 +1411,9 @@ compressed files.")
         ("rust-serde" ,rust-serde-1)
         ("rust-seq-io" ,rust-seq-io-0.3))))
     (inputs
-     `(("bioparser" ,bioparser)
-       ("biosoup" ,biosoup)))
+     (list bioparser biosoup))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)
-       ("googletest" ,googletest)))
+     (list cmake pkg-config googletest))
     (home-page "https://github.com/Kevinzjy/circtools")
     (synopsis "Accelerating functions in CIRI toolkit")
     (description "This package provides accelerated functions for the CIRI
@@ -1478,21 +1461,19 @@ consensus sequences.")
              (substitute* "CIRI_long/main.py"
                (("os.chmod\\(lib_path.*") "")))))))
     (inputs
-     `(("circtools" ,circtools)
-       ("python-biopython" ,python-biopython)
-       ("python-bwapy" ,python-bwapy)
-       ("python-levenshtein" ,python-levenshtein)
-       ("python-mappy" ,python-mappy)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-pyspoa" ,python-pyspoa)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
-    (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-setuptools" ,python-setuptools)))
+     (list circtools
+           python-biopython
+           python-bwapy
+           python-levenshtein
+           python-mappy
+           python-numpy
+           python-pandas
+           python-pysam
+           python-pyspoa
+           python-scikit-learn
+           python-scipy))
+    (native-inputs
+     (list python-cython python-nose python-setuptools))
     (home-page "https://ciri-cookbook.readthedocs.io/")
     (synopsis "Circular RNA identification for Nanopore sequencing")
     (description "CIRI-long is a package for circular RNA identification using
@@ -1515,20 +1496,20 @@ long-read sequencing data.")
     (arguments
      `(#:tests? #f                      ; no tests included
        #:make-flags
-       (list (string-append "BOOST_INC="
-                            (assoc-ref %build-inputs "boost") "/include")
-             (string-append "BOOST_LIB="
-                            (assoc-ref %build-inputs "boost") "/lib")
-             (string-append "HTSLD_INC="
-                            (assoc-ref %build-inputs "htslib") "/include")
-             (string-append "HTSLD_LIB="
-                            (assoc-ref %build-inputs "htslib") "/lib")
-             (string-append "RMATH_INC="
-                            (assoc-ref %build-inputs "rmath-standalone")
-                            "/include")
-             (string-append "RMATH_LIB="
-                            (assoc-ref %build-inputs "rmath-standalone")
-                            "/lib"))
+       ,#~(list (string-append "BOOST_INC="
+                               #$(this-package-input "boost") "/include")
+                (string-append "BOOST_LIB="
+                               #$(this-package-input "boost") "/lib")
+                (string-append "HTSLD_INC="
+                               #$(this-package-input "htslib") "/include")
+                (string-append "HTSLD_LIB="
+                               #$(this-package-input "htslib") "/lib")
+                (string-append "RMATH_INC="
+                               #$(this-package-input "rmath-standalone")
+                               "/include")
+                (string-append "RMATH_LIB="
+                               #$(this-package-input "rmath-standalone")
+                               "/lib"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-linkage
@@ -1560,14 +1541,14 @@ $(BOOST_LIB)/libboost_program_options.so"))))
                (mkdir-p bin)
                (install-file "bin/QTLtools" bin)))))))
     (inputs
-     `(("curl" ,curl)
-       ("gsl" ,gsl)
-       ("boost" ,boost)
-       ("rmath-standalone" ,rmath-standalone)
-       ("htslib" ,htslib-1.3)
-       ("openssl" ,openssl)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list curl
+           gsl
+           boost
+           rmath-standalone
+           htslib-1.3
+           openssl
+           openblas
+           zlib))
     (home-page "https://qtltools.github.io/qtltools/")
     (synopsis "Tool set for molecular QTL discovery and analysis")
     (description "QTLtools is a tool set for molecular QTL discovery
@@ -1630,8 +1611,7 @@ providing them a set of re-usable tools.")
          ;; so the tests fail.
          #:out-of-source? #f))
       (inputs
-       `(("bpp-core" ,bpp-core)
-         ("bpp-seq" ,bpp-seq)))
+       (list bpp-core bpp-seq))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ phylogenetic Library")
       (description
@@ -1662,8 +1642,7 @@ library provides phylogenetics-related modules.")
        `(#:parallel-build? #f
          #:tests? #f)) ; There are no tests.
       (inputs
-       `(("bpp-core" ,bpp-core)
-         ("bpp-seq" ,bpp-seq)))
+       (list bpp-core bpp-seq))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ population genetics library")
       (description
@@ -1696,7 +1675,7 @@ library provides population genetics-related modules.")
          ;; so the tests fail.
          #:out-of-source? #f))
       (inputs
-       `(("bpp-core" ,bpp-core)))
+       (list bpp-core))
       (home-page "http://biopp.univ-montp2.fr")
       (synopsis "Bio++ sequence library")
       (description
@@ -1727,9 +1706,7 @@ library provides sequence-related modules.")
        `(#:parallel-build? #f
          #:tests? #f)) ; There are no tests.
       (native-inputs
-       `(("groff" ,groff)
-         ("man-db" ,man-db)
-         ("texinfo" ,texinfo)))
+       (list groff man-db texinfo))
       (inputs
        `(("bpp-core" ,bpp-core)
          ("bpp-seq" ,bpp-seq)
@@ -1868,7 +1845,7 @@ package provides command line tools using the Bio++ library.")
        ("perl" ,perl)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("cpio" ,cpio)))
+     (list cpio))
     (home-page "https://blast.ncbi.nlm.nih.gov")
     (synopsis "Basic local alignment search tool")
     (description
@@ -1915,28 +1892,26 @@ confidence to have in an alignment.")
                   (delete-file-recursively "pigz")
                   (delete-file-recursively "google-sparsehash")
                   (delete-file-recursively "zlib")
-                  (delete-file-recursively ".git")
-                  #t))))
+                  (delete-file-recursively ".git")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;no "check" target
+     `(#:tests? #f ;no "check" target
        #:make-flags
-       (list (string-append "ZLIB="
-                            (assoc-ref %build-inputs "zlib:static")
-                            "/lib/libz.a")
-             (string-append "LDFLAGS="
-                            (string-join '("-lboost_filesystem"
-                                           "-lboost_system"
-                                           "-lboost_iostreams"
-                                           "-lz"
-                                           "-fopenmp"))))
+       ,#~(list (string-append "ZLIB="
+                               #$(this-package-input "zlib")
+                               "/lib/libz.so")
+                (string-append "LDFLAGS="
+                               (string-join '("-lboost_filesystem"
+                                              "-lboost_system"
+                                              "-lboost_iostreams"
+                                              "-lz"
+                                              "-fopenmp"))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'do-not-build-bundled-pigz
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "Makefile"
-              (("cd pigz/pigz-2.3.3; make") ""))
-            #t))
+              (("cd pigz/pigz-2.3.3; make") ""))))
          (add-after 'unpack 'patch-paths-to-executables
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "parse_args.cpp"
@@ -1947,25 +1922,18 @@ confidence to have in an alignment.")
               (("pigz_binary = .*")
                (string-append "pigz_binary = \""
                               (assoc-ref inputs "pigz")
-                              "/bin/pigz\";")))
-            #t))
+                              "/bin/pigz\";")))))
          (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
               (for-each (lambda (file)
                           (install-file file bin))
-                        '("bless" "kmc/bin/kmc"))
-              #t)))
+                        '("bless" "kmc/bin/kmc")))))
          (delete 'configure))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("openmpi" ,openmpi)
-       ("boost" ,boost)
-       ("sparsehash" ,sparsehash)
-       ("pigz" ,pigz)
-       ("zlib:static" ,zlib "static")
-       ("zlib" ,zlib)))
+     (list openmpi boost sparsehash pigz zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "https://sourceforge.net/p/bless-ec/wiki/Home/")
     (synopsis "Bloom-filter-based error correction tool for NGS reads")
@@ -1998,33 +1966,33 @@ errors at the end of reads.")
                   (substitute* "Makefile"
                     ;; replace BUILD_HOST and BUILD_TIME for deterministic build
                     (("-DBUILD_HOST=.*") "-DBUILD_HOST=\"\\\"guix\\\"\"")
-                    (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))
-                  #t))))
+                    (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags
-       (list "allall"
-             "WITH_TBB=1"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+     `(#:make-flags
+       ,#~(list "allall"
+                "WITH_TBB=1"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (replace 'configure
+           (lambda _
+             ;; This "extended character" is not considered valid.
+             (substitute* "processor_support.h"
+               (("“") "\"")
+               (("”") "\""))))
          (replace 'check
            (lambda _
              (invoke "perl"
                      "scripts/test/simple_tests.pl"
                      "--bowtie2=./bowtie2"
-                     "--bowtie2-build=./bowtie2-build")
-             #t)))))
+                     "--bowtie2-build=./bowtie2-build"))))))
     (inputs
-     `(("tbb" ,tbb)
+     `(("tbb" ,tbb-2020)
        ("zlib" ,zlib)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-clone" ,perl-clone)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl perl-clone perl-test-deep perl-test-simple))
     (home-page "http://bowtie-bio.sourceforge.net/bowtie2/index.shtml")
     (synopsis "Fast and sensitive nucleotide sequence read aligner")
     (description
@@ -2057,17 +2025,15 @@ gapped, local, and paired-end alignment modes.")
                   (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\"")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; no "check" target
+     `(#:tests? #f                      ; no "check" target
        #:make-flags
-       (list "CC=gcc" "all"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc" "all"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)
-       ("tbb" ,tbb)
-       ("zlib" ,zlib)))
+     (list python-wrapper tbb-2020 zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "http://bowtie-bio.sourceforge.net/index.shtml")
     (synopsis "Fast aligner for short nucleotide sequence reads")
@@ -2173,6 +2139,7 @@ splice junctions between exons.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ;no "check" target
+       #:make-flags '("CFLAGS=-fcommon")
        #:phases
        (modify-phases %standard-phases
          (replace 'install
@@ -2185,11 +2152,10 @@ splice junctions between exons.")
                (install-file "bwa" bin)
                (install-file "libbwa.a" lib)
                (install-file "README.md" doc)
-               (install-file "bwa.1" man))
-             #t))
+               (install-file "bwa.1" man))))
            ;; no "configure" script
           (delete 'configure))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -2221,10 +2187,16 @@ and more accurate.  BWA-MEM also has better performance than BWA-backtrack for
                (base32
                 "076c4q0cdqz8jgylb067y9zmvxglppnzi3qiscn0xiypgc6lgb5r"))))
     (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments bwa)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-C-error
+             (lambda _
+               (substitute* "pssm.c"
+                 (("inline int map") "int map"))))))))
     (inputs
-     `(("gdsl" ,gdsl)
-       ("zlib" ,zlib)
-       ("perl" ,perl)))
+     (list gdsl zlib perl))
     (home-page "http://bwa-pssm.binf.ku.dk/")
     (synopsis "Burrows-Wheeler transform-based probabilistic short read mapper")
     (description
@@ -2263,9 +2235,9 @@ well as many of the command line options.")
                (("^checkX.*") ""))
              #t)))))
     (inputs
-     `(("bwa" ,bwa)))
+     (list bwa))
     (native-inputs
-     `(("python-toolshed" ,python-toolshed)))
+     (list python-toolshed))
     (home-page "https://github.com/brentp/bwa-meth")
     (synopsis "Fast and accurante alignment of BS-Seq reads")
     (description
@@ -2281,25 +2253,23 @@ off-target reads for a capture method that targets CpG-rich region.")
 (define-public python-bx-python
   (package
     (name "python-bx-python")
-    (version "0.8.2")
+    (version "0.8.12")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "bx-python" version))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/bxlab/bx-python")
+                    (commit "f4e6a5c93e719db69b5798b6fdd9b167da358316")))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "11kksg2rbzihpmcid823xvg42xi88m7sz58rzk29abybkxy0rszs"))))
+                "0mclahslz34vq9x424jmzsxk0nmpm1j716fa8h3zwr9ssvch7skc"))))
     (build-system python-build-system)
-    ;; Tests fail because test data are not included
-    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("python-lzo" ,python-lzo)
-       ("python-nose" ,python-nose)
-       ("python-cython" ,python-cython)))
+     (list python-lzo python-nose python-cython))
     (home-page "https://github.com/bxlab/bx-python")
     (synopsis "Tools for manipulating biological data")
     (description
@@ -2307,9 +2277,6 @@ off-target reads for a capture method that targets CpG-rich region.")
 multiple sequence alignments.")
     (license license:expat)))
 
-(define-public python2-bx-python
-  (package-with-python2 python-bx-python))
-
 (define-public python-pyega3
   (package
     (name "python-pyega3")
@@ -2324,13 +2291,9 @@ multiple sequence alignments.")
     (arguments
      `(#:tests? #f)) ; The tests require network access.
     (native-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-htsget" ,python-htsget)))
+     (list python-psutil python-htsget))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-tqdm" ,python-tqdm)
-       ("python-urllib3" ,python-urllib3)
-       ("python-responses" ,python-responses)))
+     (list python-requests python-tqdm python-urllib3 python-responses))
     (home-page "https://github.com/EGA-archive/ega-download-client")
     (synopsis "Python client for EGA")
     (description "This package is a python-based tool for viewing and
@@ -2367,15 +2330,10 @@ has several key features:
               (snippet '(begin
                           ;; Drop bundled htslib. TODO: Also remove samtools
                           ;; and bcftools.
-                          (delete-file-recursively "htslib")
-                          #t))))
+                          (delete-file-recursively "htslib")))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build python-build-system)
-                  (guix build utils))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-flags
            (lambda* (#:key inputs #:allow-other-keys)
@@ -2385,19 +2343,12 @@ has several key features:
              (setenv "HTSLIB_INCLUDE_DIR"
                      (string-append (assoc-ref inputs "htslib") "/include"))
              (setenv "LDFLAGS" "-lncurses")
-             (setenv "CFLAGS" "-D_CURSES_LIB=1")
-             #t))
+             (setenv "CFLAGS" "-D_CURSES_LIB=1")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             ;; Failing test removed in the next release.
+             ;; FIXME: These tests fail with "AttributeError: 'array.array'
+             ;; object has no attribute 'tostring'".
              (delete-file "tests/AlignmentFile_test.py")
-             ;; Add first subdirectory of "build" directory to PYTHONPATH.
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build"
-                                    (negate (cut string-prefix? "." <>))))))
              (when tests?
                ;; Step out of source dir so python does not import from CWD.
                (with-directory-excursion "tests"
@@ -2414,18 +2365,16 @@ has several key features:
                            " and not TestHeaderCRAM"
                            " and not test_text_processing")))))))))
     (propagated-inputs
-     `(("htslib" ,htslib-1.10)))    ; Included from installed header files.
+     (list htslib-1.10))    ; Included from installed header files.
     (inputs
-     `(("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("zlib" ,zlib)))
+     (list ncurses curl zlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ;; Dependencies below are are for tests only.
-       ("samtools" ,samtools-1.10)
-       ("bcftools" ,bcftools-1.10)
-       ("python-nose" ,python-nose)))
+     (list python-cython
+           python-pytest
+           ;; Dependencies below are are for tests only.
+           samtools-1.10
+           bcftools-1.10
+           python-nose))
     (home-page "https://github.com/pysam-developers/pysam")
     (synopsis "Python bindings to the SAMtools C API")
     (description
@@ -2454,7 +2403,7 @@ also includes an interface for tabix.")
     ;; Tests are not included
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/benjschiller/twobitreader")
     (synopsis "Python library for reading .2bit files")
     (description
@@ -2462,35 +2411,31 @@ also includes an interface for tabix.")
 UCSC genome browser.")
     (license license:artistic2.0)))
 
-(define-public python2-twobitreader
-  (package-with-python2 python-twobitreader))
-
 (define-public python-plastid
   (package
     (name "python-plastid")
-    (version "0.4.8")
+    (version "0.5.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "plastid" version))
               (sha256
                (base32
-                "0l24dd3q66if8yj042m4s0g95n6acn7im1imqd3p6h8ns43kxhj8"))))
+                "1a7mdky2xw02y88l51f58pqk8039ahdp6sblj3zx58zarmy2pqyl"))))
     (build-system python-build-system)
     (arguments
      ;; Some test files are not included.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-biopython" ,python-biopython)
-       ("python-twobitreader" ,python-twobitreader)
-       ("python-termcolor" ,python-termcolor)))
-    (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)))
+     (list python-numpy
+           python-scipy
+           python-pandas
+           python-pysam
+           python-matplotlib
+           python-biopython
+           python-twobitreader
+           python-termcolor))
+    (native-inputs
+     (list python-cython python-nose))
     (home-page "https://github.com/joshuagryphon/plastid")
     (synopsis "Python library for genomic analysis")
     (description
@@ -2498,9 +2443,6 @@ UCSC genome browser.")
 high-throughput sequencing data – with an emphasis on simplicity.")
     (license license:bsd-3)))
 
-(define-public python2-plastid
-  (package-with-python2 python-plastid))
-
 (define-public tetoolkit
   (package
     (name "tetoolkit")
@@ -2550,12 +2492,12 @@ high-throughput sequencing data – with an emphasis on simplicity.")
                   "TEcount")))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("bedtools" ,bedtools)
-       ("python-argparse" ,python2-argparse)
-       ("python-pysam" ,python2-pysam)
-       ("r-minimal" ,r-minimal)
-       ("r-deseq2" ,r-deseq2)))
+     (list coreutils
+           bedtools
+           python2-argparse
+           python2-pysam
+           r-minimal
+           r-deseq2))
     (home-page "https://github.com/mhammell-laboratory/tetoolkit")
     (synopsis "Transposable elements in differential enrichment analysis")
     (description
@@ -2585,9 +2527,9 @@ are not included due to their size.")
      `(#:tests? #f ; there are no tests
        #:make-flags
        ;; Executables are copied directly to the PREFIX.
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out") "/bin")
-             ;; Support longer sequences (e.g. Pacbio sequences)
-             "MAX_SEQ=60000000")
+       ,#~(list (string-append "PREFIX=" #$output "/bin")
+                ;; Support longer sequences (e.g. Pacbio sequences)
+                "MAX_SEQ=60000000")
        #:phases
        (modify-phases %standard-phases
          ;; No "configure" script
@@ -2607,7 +2549,7 @@ are not included due to their size.")
              (mkdir-p (string-append (assoc-ref outputs "out") "/bin"))
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://weizhongli-lab.org/cd-hit/")
     (synopsis "Cluster and compare protein or nucleotide sequences")
     (description
@@ -2621,7 +2563,7 @@ databases.")
 (define-public clipper
   (package
     (name "clipper")
-    (version "2.0")
+    (version "2.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2630,10 +2572,16 @@ databases.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bcag4lb5bkzsj2vg7lrq24aw6yfgq275ifrbhd82l7kqgbbjbkv"))))
+                "0508rgnfjk5ar5d1mjbjyrnarv4kw9ksq0m3jw2bmgabmb5v6ikk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete pre-compiled files.
+                  (delete-file "clipper/src/peaks.so")))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #false
+       #:phases
        (modify-phases %standard-phases
          (add-before 'reset-gzip-timestamps 'make-files-writable
            (lambda* (#:key outputs #:allow-other-keys)
@@ -2641,29 +2589,45 @@ databases.")
              ;; 'reset-gzip-timestamps' phase can do its work.
              (let ((out (assoc-ref outputs "out")))
                (for-each make-file-writable
-                         (find-files out "\\.gz$"))
-               #t)))
+                         (find-files out "\\.gz$")))))
+         (add-after 'unpack 'use-python3-for-cython
+           (lambda _
+             (substitute* "setup.py"
+               (("^setup")
+                "\
+peaks.cython_directives = {'language_level': '3'}
+readsToWiggle.cython_directives = {'language_level': '3'}
+setup"))))
          (add-after 'unpack 'disable-nondeterministic-test
            (lambda _
              ;; This test fails/succeeds non-deterministically.
              (substitute* "clipper/test/test_call_peak.py"
-               (("test_get_FDR_cutoff_mean") "_test_get_FDR_cutoff_mean"))
-             #t)))))
-    (inputs
-     `(("htseq" ,htseq)
-       ("python-pybedtools" ,python-pybedtools)
-       ("python-cython" ,python-cython)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
-    (native-inputs
-     `(("python-setuptools-git" ,python-setuptools-git)
-       ("python-mock" ,python-mock)   ; for tests
-       ("python-nose" ,python-nose)   ; for tests
-       ("python-pytz" ,python-pytz))) ; for tests
+               (("test_get_FDR_cutoff_mean") "_test_get_FDR_cutoff_mean"))))
+         ;; This doesn't work because "usage" is executed, and that calls
+         ;; exit(8).
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (with-directory-excursion "clipper/test"
+                 (invoke "python" "-m" "unittest")))))
+         ;; This is not a library
+         (delete 'sanity-check))))
+    (inputs
+     (list htseq
+           python-pybedtools
+           python-cython
+           python-scikit-learn
+           python-matplotlib
+           python-pandas
+           python-pysam
+           python-numpy
+           python-scipy))
+    (native-inputs
+     (list python-setuptools-git
+           python-mock ; for tests
+           python-nose ; for tests
+           python-pytz)) ; for tests
     (home-page "https://github.com/YeoLab/clipper")
     (synopsis "CLIP peak enrichment recognition")
     (description
@@ -2699,7 +2663,7 @@ databases.")
                (install-file "CodingQuarry" bin)
                (install-file "CufflinksGTF_to_CodingQuarryGFF3.py" bin))
              #t)))))
-    (inputs `(("openmpi" ,openmpi)))
+    (inputs (list openmpi))
     (native-search-paths
      (list (search-path-specification
             (variable "QUARRY_PATH")
@@ -2724,7 +2688,7 @@ gene predictor designed to work with assembled, aligned RNA-seq transcripts.")
                 "1vm30mzncwdv881vrcwg11vzvrsmwy4wg80j5i0lcfk6dlld50w6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("argtable" ,argtable)))
+     (list argtable))
     (home-page "http://www.clustal.org/omega/")
     (synopsis "Multiple sequence aligner for protein and DNA/RNA")
     (description
@@ -2737,23 +2701,25 @@ time.")
 (define-public crossmap
   (package
     (name "crossmap")
-    (version "0.3.8")
+    (version "0.6.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "CrossMap" version))
               (sha256
                (base32
-                "1sb2f2qbxya4fzw3yjl09vbrs8vfmw22zrygrvz004sf9gb1vkan"))))
+                "0hqminh5wn1p3x481jbyc7gmncp5xc196hpvki7k25vzbryhwcix"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete compiled Python files.
+                  (for-each delete-file (find-files "." "\\.pyc$"))
+                  (delete-file-recursively ".eggs")))))
     (build-system python-build-system)
     (inputs
-     `(("python-bx-python" ,python-bx-python)
-       ("python-numpy" ,python-numpy)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("zlib" ,zlib)))
+     (list python-bx-python python-numpy python-pybigwig python-pysam
+           zlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)))
+     (list python-cython python-nose))
     (home-page "http://crossmap.sourceforge.net/")
     (synopsis "Convert genome coordinates between assemblies")
     (description
@@ -2765,19 +2731,17 @@ file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.")
 (define-public python-dnaio
   (package
     (name "python-dnaio")
-    (version "0.3")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dnaio" version))
        (sha256
         (base32
-         "0f16m7hdlm0fz1n7y5asy0v9ghyrq17ni1p9iybq22ddzyd49r27"))))
+         "14v5yyasq2bz34j38wi3xfcp06jj7l35ppibjcn95l2n73hz3zwi"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-xopen" ,python-xopen)))
+     (list python-cython python-pytest python-xopen))
     (home-page "https://github.com/marcelm/dnaio/")
     (synopsis "Read FASTA and FASTQ files efficiently")
     (description
@@ -2797,7 +2761,7 @@ files.  The code was previously part of the cutadapt tool.")
                 "1xnl80nblysj6dylj4683wgrfa425rkx4dp5k65hvwdns9pw753x"))))
     (build-system python-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/deeptools/deeptools_intervals")
     (synopsis "Create GTF-based interval trees with associated meta-data")
     (description
@@ -2821,18 +2785,17 @@ interval trees with associated meta-data.  It is primarily used by the
                 "0l09vyynz6s6w7fnyd94rpys4a6aja6kp4gli64pngdxdz3md1nl"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-py2bit" ,python-py2bit)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)
-       ("python-deeptoolsintervals" ,python-deeptoolsintervals)
-       ("python-plotly" ,python-plotly-2.4.1)))
+     (list python-matplotlib
+           python-numpy
+           python-numpydoc
+           python-py2bit
+           python-pybigwig
+           python-pysam
+           python-scipy
+           python-deeptoolsintervals
+           python-plotly-2.4.1))
     (home-page "https://pypi.org/project/deepTools/")
     (synopsis "Useful tools for exploring deep sequencing data")
     (description "This package addresses the challenge of handling large amounts
@@ -2860,13 +2823,20 @@ annotations of the genome.")
                (base32
                 "1vqmsfkm6llxzmsz9wcfcvzx9a9f8iabvwik2rbyn7nc4wm25z89"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'always-cythonize
+           (lambda _
+             (delete-file "src/cutadapt/_align.c")
+             ;; If PKG-INFO exists, setup.py decides not to run Cython.
+             (substitute* "setup.py"
+               (("os.path.exists\\('PKG-INFO'\\):")
+                "os.path.exists('totally-does-not-exist'):")))))))
     (inputs
-     `(("python-dnaio" ,python-dnaio)
-       ("python-xopen" ,python-xopen)))
+     (list python-dnaio python-xopen))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-pytest python-setuptools-scm))
     (home-page "https://cutadapt.readthedocs.io/en/stable/")
     (synopsis "Remove adapter sequences from nucleotide sequencing reads")
     (description
@@ -2892,14 +2862,13 @@ other types of unwanted sequence from high-throughput sequencing reads.")
      `(#:test-target "test"
        #:tests? #f ; tests require access to the web
        #:make-flags
-       (list "CC=gcc"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc"
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)
-       ("curl" ,curl)))
+     (list zlib curl))
     (native-inputs
      `(("doxygen" ,doxygen)
        ;; Need for tests
@@ -2937,11 +2906,9 @@ files.")
                (("libs=\\[") "libs=[\"BigWig\", "))
              #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)
-       ("curl" ,curl)))
+     (list libbigwig zlib curl))
     (home-page "https://github.com/dpryan79/pyBigWig")
     (synopsis "Access bigWig files in Python using libBigWig")
     (description
@@ -2955,14 +2922,14 @@ accessing bigWig files.")
 (define-public python-schema-salad
   (package
     (name "python-schema-salad")
-    (version "7.1.20210316164414")
+    (version "8.2.20211116214159")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "schema-salad" version))
         (sha256
          (base32
-          "04jaykdpgfnkrghvli5swxzqp7yba842am4bz42hcfljsmkrxvrk"))))
+          "005dh2y45x92zl8sf2sqjmfvcqr4hrz8dfckgkckv87003v7lwqc"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2974,20 +2941,18 @@ accessing bigWig files.")
                (("^def test_(secondaryFiles|outputBinding)" all)
                 (string-append "@pytest.mark.skip(reason="
                                "\"test requires network access\")\n"
-                               all)))
-             #t)))))
+                               all))))))))
     (propagated-inputs
-     `(("python-cachecontrol" ,python-cachecontrol-0.11)
-       ("python-lockfile" ,python-lockfile)
-       ("python-mistune" ,python-mistune)
-       ("python-rdflib" ,python-rdflib)
-       ("python-rdflib-jsonld" ,python-rdflib-jsonld)
-       ("python-requests" ,python-requests)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cachecontrol
+           python-lockfile
+           python-mistune
+           python-rdflib
+           python-rdflib-jsonld
+           python-requests
+           python-ruamel.yaml
+           python-typing-extensions))
+    (native-inputs
+     (list python-black python-pytest python-pytest-runner))
     (home-page "https://github.com/common-workflow-language/schema_salad")
     (synopsis "Schema Annotations for Linked Avro Data (SALAD)")
     (description
@@ -3003,7 +2968,7 @@ and record oriented data modeling and the Semantic Web.")
 (define-public cwltool
   (package
     (name "cwltool")
-    (version "3.0.20210319143721")
+    (version "3.1.20211107152837")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3012,7 +2977,7 @@ and record oriented data modeling and the Semantic Web.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1sgs9ckyxb9f9169mc3wm9lnjg4080ai42xqsrwpw9l8apy4c9m5"))))
+                "0i3x9wdgpzgyc1askxymlhn0ps2x9xhqaax496iwpx66ab6132c4"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -3020,17 +2985,13 @@ and record oriented data modeling and the Semantic Web.")
          (add-after 'unpack 'loosen-version-restrictions
            (lambda _
              (substitute* "setup.py"
-               (("== 1.5.1") ">=1.5.1")   ; prov
-               ((", < 3.5") "")           ; shellescape
-               ((" >= 6.0.2, < 6.2") "")) ; pytest
-             #t))
+               (("== 1.5.1") ">=1.5.1")))) ; prov
          (add-after 'unpack 'dont-use-git
            (lambda _
              (substitute* "gittaggers.py"
                (("self.git_timestamp_tag\\(\\)")
                 (string-append "time.strftime('.%Y%m%d%H%M%S', time.gmtime(int("
-                               (string-drop ,version 4) ")))")))
-             #t))
+                               (string-drop ,version 4) ")))")))))
          (add-after 'unpack 'modify-tests
            (lambda _
              ;; Tries to connect to the internet.
@@ -3050,32 +3011,43 @@ and record oriented data modeling and the Semantic Web.")
                (("def test_v1_0_arg_empty_prefix_separate_false")
                 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
                                "def test_v1_0_arg_empty_prefix_separate_false")))
-             #t)))))
+
+             (substitute* '("cwltool/schemas/v1.1/tests/env-tool1.cwl"
+                            "cwltool/schemas/v1.1/tests/env-tool2.cwl"
+                            "cwltool/schemas/v1.1/tests/imported-hint.cwl"
+                            "tests/subgraph/env-tool2.cwl"
+                            "tests/subgraph/env-tool2_req.cwl"
+                            "tests/subgraph/env-wf2_subwf-packed.cwl"
+                            "tests/subgraph/env-tool2_no_env.cwl")
+               (("\"/bin/sh\"") (string-append "\"" (which "sh") "\"")))
+             ;; Pytest doesn't know what to do with "-n auto"
+             (substitute* "tox.ini"
+               (("-n auto") "")))))))
     (propagated-inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-bagit" ,python-bagit)
-       ("python-coloredlogs" ,python-coloredlogs)
-       ("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-prov" ,python-prov)
-       ("python-pydot" ,python-pydot)
-       ("python-psutil" ,python-psutil)
-       ("python-rdflib" ,python-rdflib)
-       ("python-requests" ,python-requests)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-schema-salad" ,python-schema-salad)
-       ("python-shellescape" ,python-shellescape)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ;; Not listed as needed but still necessary:
-       ("node" ,node)))
-    (native-inputs
-     `(("python-arcp" ,python-arcp)
-       ("python-humanfriendly" ,python-humanfriendly)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-rdflib-jsonld" ,python-rdflib-jsonld)))
+     (list python-argcomplete
+           python-bagit
+           python-coloredlogs
+           python-mypy-extensions
+           python-prov
+           python-pydot
+           python-psutil
+           python-rdflib
+           python-requests
+           python-ruamel.yaml
+           python-schema-salad
+           python-shellescape
+           python-typing-extensions
+           ;; Not listed as needed but still necessary:
+           node))
+    (native-inputs
+     (list python-arcp
+           python-humanfriendly
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner
+           python-rdflib-jsonld))
     (home-page
      "https://github.com/common-workflow-language/common-workflow-language")
     (synopsis "Common Workflow Language reference implementation")
@@ -3095,7 +3067,7 @@ CWL descriptions.")
 (define-public python-dendropy
   (package
     (name "python-dendropy")
-    (version "4.4.0")
+    (version "4.5.1")
     (source
      (origin
        (method git-fetch)
@@ -3106,8 +3078,27 @@ CWL descriptions.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "097hfyv2kaf4x92i4rjx0paw2cncxap48qivv8zxng4z7nhid0x9"))))
+         "0lrfzjqzbpk1rrra9vd7z2j7q09jy9w1ss7wn2rd85i4k5y3xz8l"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-broken-tests
+           (lambda _
+             ;; These tests fail because we have no "paup" executable.
+             (substitute* "tests/test_datamodel_split_bitmasks.py"
+               (((format #false "(~{~a~^|~})"
+                         '("test_group1"
+                           "test_basic_split_counting_under_different_rootings"
+                           "test_basic_split_count_with_incorrect_weight_treatment_raises_error"
+                           "test_basic_split_count_with_incorrect_rootings_raises_error")) m)
+                (string-append "_skip_" m)))
+             (delete-file "tests/test_paup.py")
+             (delete-file "tests/test_dataio_nexml_reader_tree_list.py")
+             ;; Assert error for unknown reasons
+             (substitute* "tests/test_protractedspeciation.py"
+               (("test_by_num_lineages" m)
+                (string-append "_skip_" m))))))))
     (home-page "https://dendropy.org/")
     (synopsis "Library for phylogenetics and phylogenetic computing")
     (description
@@ -3172,8 +3163,8 @@ with Python.")
     (arguments
      `(#:tests? #f ; There are no tests to run.
        #:make-flags
-       (list "PARALLEL=1"  ; Allow parallel execution at run-time.
-             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ,#~(list "PARALLEL=1"           ; Allow parallel execution at run-time.
+                (string-append "prefix=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure) ; There is no configure phase.
@@ -3185,10 +3176,7 @@ with Python.")
                (copy-recursively "excludeTemplates" templates)
                #t))))))
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list boost bzip2 htslib zlib))
     (home-page "https://github.com/dellytools/delly")
     (synopsis "Integrated structural variant prediction method")
     (description "Delly is an integrated structural variant prediction method
@@ -3225,14 +3213,14 @@ bases are detected.")
 (define-public repeat-masker
   (package
     (name "repeat-masker")
-    (version "4.1.1")
+    (version "4.1.2-p1")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.repeatmasker.org/"
                                   "RepeatMasker/RepeatMasker-"
                                   version ".tar.gz"))
               (sha256
-               (base32 "03144sl9kh5ni2i33phi7x2pjndzbm5bjw3r4kqvmm6hxyb4k4x2"))))
+               (base32 "15hfdfpzmdjcx7ng7rjfid69bmvgn3z9g9r43qhjnhjhq3v4prab"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #false ; there are none
@@ -3261,12 +3249,12 @@ bases are detected.")
                (wrap-program (string-append bin "/RepeatMasker")
                  `("PERL5LIB" ":" prefix (,path ,share)))))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-text-soundex" ,perl-text-soundex)
-       ("python" ,python)
-       ("python-h5py" ,python-h5py)
-       ("hmmer" ,hmmer)
-       ("trf" ,trf)))
+     (list perl
+           perl-text-soundex
+           python
+           python-h5py
+           hmmer
+           trf))
     (home-page "https://github.com/Benson-Genomics-Lab/TRF")
     (synopsis "Tandem Repeats Finder: a program to analyze DNA sequences")
     (description "A tandem repeat in DNA is two or more adjacent, approximate
@@ -3301,7 +3289,7 @@ bases are detected.")
              (substitute* "CMakeLists.txt" (("-march=native") ""))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/bbuchfink/diamond")
     (synopsis "Accelerated BLAST compatible local sequence aligner")
     (description
@@ -3346,8 +3334,7 @@ data and settings.")
                (("≤") "<="))
              ;; This seems to be a syntax error.
              (substitute* "doc/discrover-manual.tex"
-               (("theverbbox\\[t\\]") "theverbbox"))
-             #t))
+               (("theverbbox\\[t\\]") "theverbbox"))))
          (add-after 'unpack 'add-missing-includes
            (lambda _
              (substitute* "src/executioninformation.hpp"
@@ -3355,29 +3342,21 @@ data and settings.")
                 (string-append line "\n#include <random>")))
              (substitute* "src/plasma/fasta.hpp"
                (("#define FASTA_HPP" line)
-                (string-append line "\n#include <random>")))
-             #t))
-         ;; FIXME: this is needed because we're using texlive-union, which
-         ;; doesn't handle fonts correctly.  It expects to be able to generate
-         ;; fonts in the home directory.
-         (add-before 'build 'setenv-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
-    (inputs
-     `(("boost" ,boost)
-       ("cairo" ,cairo)
-       ("rmath-standalone" ,rmath-standalone)))
-    (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-cm
-                                        texlive-fonts-amsfonts
-
-                                        texlive-latex-doi
-                                        texlive-latex-examplep
-                                        texlive-latex-hyperref
-                                        texlive-latex-ms
-                                        texlive-latex-natbib
-                                        texlive-bibtex         ; style files used by natbib
-                                        texlive-latex-pgf      ; tikz
-                                        texlive-latex-verbatimbox)))
+                (string-append line "\n#include <random>"))))))))
+    (inputs
+     (list boost cairo rmath-standalone))
+    (native-inputs
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-cm
+                                             texlive-amsfonts
+                                             texlive-doi
+                                             texlive-fonts-ec
+                                             texlive-latex-examplep
+                                             texlive-hyperref
+                                             texlive-latex-ms
+                                             texlive-latex-natbib
+                                             texlive-bibtex ; style files used by natbib
+                                             texlive-latex-pgf ; tikz
+                                             texlive-latex-verbatimbox)))
        ("imagemagick" ,imagemagick)))
     (home-page "https://dorina.mdc-berlin.de/public/rajewsky/discrover/")
     (synopsis "Discover discriminative nucleotide sequence motifs")
@@ -3426,11 +3405,8 @@ of nucleic acid binding proteins.")
                          (find-files "../bin" ".*"))
                #t))))))
     (inputs
-     `(("gsl" ,gsl)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("perl" ,perl)
-       ("gfortran" ,gfortran "lib")))
+     (list gsl lapack openblas perl
+           `(,gfortran "lib")))
     (home-page "https://github.com/DReichLab/EIG")
     (synopsis "Tools for population genetics")
     (description "The EIGENSOFT package provides tools for population
@@ -3520,23 +3496,23 @@ quantitative phenotypes.")
                      "-filter" "-help")
              #t)))))
     (inputs
-     `(("edirect-go-programs" ,edirect-go-programs)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-encode-locale" ,perl-encode-locale)
-       ("perl-file-listing" ,perl-file-listing)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-http-cookies" ,perl-http-cookies)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-negotiate" ,perl-http-negotiate)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-net-http" ,perl-net-http)
-       ("perl-uri" ,perl-uri)
-       ("perl-www-robotrules" ,perl-www-robotrules)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl" ,perl)))
+     (list edirect-go-programs
+           perl-html-parser
+           perl-encode-locale
+           perl-file-listing
+           perl-html-tagset
+           perl-html-tree
+           perl-http-cookies
+           perl-http-date
+           perl-http-message
+           perl-http-negotiate
+           perl-lwp-mediatypes
+           perl-lwp-protocol-https
+           perl-net-http
+           perl-uri
+           perl-www-robotrules
+           perl-xml-simple
+           perl))
     (home-page "https://www.ncbi.nlm.nih.gov/books/NBK179288/")
     (synopsis "Tools for accessing the NCBI's set of databases")
     (description
@@ -3593,16 +3569,16 @@ software to answer ad hoc questions.")
     (native-inputs '())
     (propagated-inputs '())
     (inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-fogleman-gg" ,go-github-com-fogleman-gg)
-       ("go-github-com-gedex-inflector" ,go-github-com-gedex-inflector)
-       ("go-github-com-golang-freetype" ,go-github-com-golang-freetype)
-       ("go-github-com-klauspost-cpuid" ,go-github-com-klauspost-cpuid)
-       ("go-github-com-pbnjay-memory" ,go-github-com-pbnjay-memory)
-       ("go-github-com-surgebase-porter2" ,go-github-com-surgebase-porter2)
-       ("go-golang-org-rainycape-unidecode" ,go-golang-org-rainycape-unidecode)
-       ("go-golang-org-x-image" ,go-golang-org-x-image)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))))
+     (list go-github-com-fatih-color
+           go-github-com-fogleman-gg
+           go-github-com-gedex-inflector
+           go-github-com-golang-freetype
+           go-github-com-klauspost-cpuid
+           go-github-com-pbnjay-memory
+           go-github-com-surgebase-porter2
+           go-golang-org-rainycape-unidecode
+           go-golang-org-x-image
+           go-golang-org-x-text))))
 
 (define-public exonerate
   (package
@@ -3622,9 +3598,9 @@ software to answer ad hoc questions.")
     (arguments
      `(#:parallel-build? #f)) ; Building in parallel fails on some machines.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page
      "https://www.ebi.ac.uk/about/vertebrate-genomics/software/exonerate")
     (synopsis "Generic tool for biological sequence alignment")
@@ -3671,10 +3647,7 @@ dynamic programming or a variety of heuristics.")
                (("check_version\\(PACKAGE_VERSION\\);") ""))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("bamtools" ,bamtools)
-       ("protobuf" ,protobuf)
-       ("zlib" ,zlib)))
+     (list boost bamtools protobuf zlib))
     (home-page "http://bio.math.berkeley.edu/eXpress")
     (synopsis "Streaming quantification for high-throughput genomic sequencing")
     (description
@@ -3794,10 +3767,10 @@ reasonable amount of time and memory.  For large alignments, FastTree is
                 "01jqzw386873sr0pjp1wr4rn8fsga2vxs1qfmicvx1pjr72007wy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgtextutils" ,libgtextutils)))
+     (list libgtextutils))
     (native-inputs
-     `(("gcc" ,gcc-6) ;; doesn't build with later versions
-       ("pkg-config" ,pkg-config)))
+     (list gcc-6 ;; doesn't build with later versions
+           pkg-config))
     (home-page "http://hannonlab.cshl.edu/fastx_toolkit/")
     (synopsis "Tools for FASTA/FASTQ file preprocessing")
     (description
@@ -3832,26 +3805,21 @@ results.  The FASTX-Toolkit tools perform some of these preprocessing tasks.")
          (add-after 'unpack 'do-not-tune-to-CPU
            (lambda _
              (substitute* "src/CMakeLists.txt"
-               ((" -march=native") ""))
-             #t))
+               ((" -march=native") ""))))
          (replace 'check
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
              (with-directory-excursion "../source/test"
-               (invoke "bash" "flexbar_test.sh"))
-             #t))
+               (invoke "bash" "flexbar_test.sh"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (string-append (assoc-ref outputs "out")))
                     (bin (string-append out "/bin/")))
-               (install-file "flexbar" bin))
-             #t)))))
+               (install-file "flexbar" bin)))))))
     (inputs
-     `(("tbb" ,tbb)
-       ("zlib" ,zlib)))
+     (list tbb-2020 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("seqan" ,seqan-2)))
+     (list pkg-config seqan-2))
     (home-page "https://github.com/seqan/flexbar")
     (synopsis "Barcode and adapter removal tool for sequencing platforms")
     (description
@@ -3970,9 +3938,9 @@ genes in incomplete assemblies or complete genomes.")
            "0hab3gpwf4w9s87qlbswq6ws1qqybh4dcqk79q1ahyldzai5fgp5"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:make-flags (list
-                       (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                       "CC=gcc")
+       `(#:make-flags ,#~(list
+                          (string-append "PREFIX=" #$output)
+                          "CC=gcc")
          #:test-target "fxtract_test"
          #:phases
          (modify-phases %standard-phases
@@ -3990,8 +3958,7 @@ genes in incomplete assemblies or complete genomes.")
                  (install-file "fxtract" bin)
                  #t))))))
       (inputs
-       `(("pcre" ,pcre)
-         ("zlib" ,zlib)))
+       (list pcre zlib))
       (native-inputs
        ;; ctskennerton-util is licensed under GPL2.
        `(("ctskennerton-util"
@@ -4038,9 +4005,7 @@ comment or quality sections.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("gsl" ,gsl)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list gsl openblas zlib))
     (native-inputs
      `(("catch" ,catch-framework2-1)
        ("perl" ,perl)
@@ -4104,12 +4069,9 @@ genome-wide association studies}.")
                (("Cython.Setup") "Cython.Build"))
              #t)))))
     (inputs
-     `(("python-scipy" ,python2-scipy)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-networkx" ,python2-networkx)))
+     (list python2-scipy python2-numpy python2-pysam python2-networkx))
     (native-inputs
-     `(("python-cython" ,python2-cython)))
+     (list python2-cython))
     ;; The canonical <http://grit-bio.org> home page times out as of 2020-01-21.
     (home-page "https://github.com/nboley/grit")
     (synopsis "Tool for integrative analysis of RNA-seq type assays")
@@ -4125,7 +4087,7 @@ estimates transcript expression.")
 (define-public hisat
   (package
     (name "hisat")
-    (version "0.1.4")
+    (version "0.1.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4133,7 +4095,7 @@ estimates transcript expression.")
                     version "-beta-source.zip"))
               (sha256
                (base32
-                "1k381ydranqxp09yf2y7w1d0chz5d59vb6jchi89hbb0prq19lk5"))))
+                "177z85vqp9b30vgxl5py5hz4mm37ila37nzhfam23ci9iyfxgyv9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no check target
@@ -4158,7 +4120,10 @@ estimates transcript expression.")
                (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))
              (substitute* '("hisat-build" "hisat-inspect")
                (("/usr/bin/env") (which "env")))
-             #t))
+             ;; This "extended character" is not considered valid.
+             (substitute* "processor_support.h"
+               (("“") "\"")
+               (("”") "\""))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
@@ -4166,15 +4131,12 @@ estimates transcript expression.")
                            (install-file file bin))
                          (find-files
                           "."
-                          "hisat(-(build|align|inspect)(-(s|l)(-debug)*)*)*$")))
-             #t))
+                          "hisat(-(build|align|inspect)(-(s|l)(-debug)*)*)*$")))))
          (delete 'configure))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list perl python zlib))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -4233,8 +4195,7 @@ particular, reads spanning multiple exons.")
                (mkdir-p doc)
                (install-file "doc/manual.inc.html" doc)))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pandoc" ,pandoc)))             ; for documentation
+     (list perl pandoc))             ; for documentation
     (inputs
      `(("python" ,python-wrapper)))
     (home-page "https://daehwankimlab.github.io/hisat2/")
@@ -4265,8 +4226,7 @@ indexing scheme is called a @dfn{Hierarchical Graph FM index} (HGFM).")
         (base32
          "0s9wf6n0qanbx8qs6igfl3vyjikwbrvh4d9d6mv54yp3xysykzlj"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("python" ,python))) ; for tests
+    (native-inputs (list perl python)) ; for tests
     (home-page "http://hmmer.org/")
     (synopsis "Biosequence analysis using profile hidden Markov models")
     (description
@@ -4282,22 +4242,21 @@ HMMs).")
 (define-public htseq
   (package
     (name "htseq")
-    (version "0.9.1")
+    (version "0.12.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "HTSeq" version))
               (sha256
                (base32
-                "11flgb1381xdhk43bzbfm3vhnszkpqg6jk76rpa5xd1zbrvvlnxg"))))
+                "0pk41vkzxsbb5nv644325mh8akmz4zdply9r2s80dgg5b21pgp0b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     ;; Numpy needs to be propagated when htseq is used as a Python library.
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-pysam python-matplotlib))
     (home-page "https://htseq.readthedocs.io/")
     (synopsis "Analysing high-throughput sequencing data with Python")
     (description
@@ -4333,8 +4292,7 @@ from high-throughput sequencing assays.")
      `(#:tests? #f ; test require Internet access
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Ddist=" (assoc-ref %outputs "out")
-                            "/share/java/htsjdk/"))
+       ,#~(list (string-append "-Ddist=" #$output "/share/java/htsjdk/"))
        #:build-target "all"
        #:phases
        (modify-phases %standard-phases
@@ -4348,7 +4306,7 @@ from high-throughput sequencing assays.")
        ("java-commons-jexl-2" ,java-commons-jexl-2)
        ("java-xz" ,java-xz)))
     (native-inputs
-     `(("java-testng" ,java-testng)))
+     (list java-testng))
     (home-page "http://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
@@ -4391,7 +4349,7 @@ manipulating HTS data.")
        ("java-commons-jexl-2" ,java-commons-jexl-2)
        ("java-xz" ,java-xz)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
@@ -4469,12 +4427,12 @@ manipulating HTS data.")
        ;; Tests require jacoco:coverage.
        #:tests? #f
        #:make-flags
-       (list (string-append "-Dhtsjdk_lib_dir="
-                            (assoc-ref %build-inputs "java-htsjdk")
-                            "/share/java/htsjdk/")
-             "-Dhtsjdk-classes=dist/tmp"
-             (string-append "-Dhtsjdk-version="
-                            ,(package-version java-htsjdk)))
+       ,#~(list (string-append "-Dhtsjdk_lib_dir="
+                               #$(this-package-input "java-htsjdk")
+                               "/share/java/htsjdk/")
+                "-Dhtsjdk-classes=dist/tmp"
+                (string-append "-Dhtsjdk-version="
+                               #$(package-version java-htsjdk)))
        #:jdk ,icedtea-8
        #:phases
        (modify-phases %standard-phases
@@ -4484,9 +4442,8 @@ manipulating HTS data.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("\\$\\{htsjdk\\}/lib")
-                (string-append (assoc-ref inputs "java-htsjdk")
-                               "/share/java/htsjdk/")))
-             #t))
+                (search-input-directory inputs
+                                        "share/java/htsjdk")))))
          (add-after 'unpack 'make-test-target-independent
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
@@ -4495,10 +4452,9 @@ manipulating HTS data.")
              #t))
          (replace 'install (install-jars "dist")))))
     (inputs
-     `(("java-htsjdk" ,java-htsjdk)
-       ("java-guava" ,java-guava)))
+     (list java-htsjdk java-guava))
     (native-inputs
-     `(("java-testng" ,java-testng)))
+     (list java-testng))
     (home-page "http://broadinstitute.github.io/picard/")
     (synopsis "Tools for manipulating high-throughput sequencing data and formats")
     (description "Picard is a set of Java command line tools for manipulating
@@ -4585,10 +4541,9 @@ Class-Path: /~a \
              (rename-file "build.xml.new" "build.xml")
              #t)))))
     (propagated-inputs
-     `(("java-htsjdk" ,java-htsjdk-2.10.1)))
+     (list java-htsjdk-2.10.1))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-guava" ,java-guava)))
+     (list java-testng java-guava))
     (home-page "http://broadinstitute.github.io/picard/")
     (synopsis "Tools for manipulating high-throughput sequencing data and formats")
     (description "Picard is a set of Java command line tools for manipulating
@@ -4641,9 +4596,7 @@ VCF.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("\\$\\{lib\\}/apache-ant-1.8.2-bzip2.jar")
-                (string-append (assoc-ref inputs "ant")
-                               "/lib/ant.jar")))
-             #t))
+                (search-input-file inputs "/lib/ant.jar")))))
          (add-after 'unpack 'make-test-target-independent
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
@@ -4740,15 +4693,13 @@ VCF.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                (("jbzip2-0.9.jar")
-                (string-append (assoc-ref inputs "java-jbzip2")
-                               "/share/java/jbzip2.jar"))
+                (search-input-file inputs "/share/java/jbzip2.jar"))
                (("sam-1.103.jar")
-                (string-append (assoc-ref inputs "java-picard-1.113")
-                               "/share/java/sam-1.112.jar"))
+                (search-input-file inputs
+                                   "/share/java/sam-1.112.jar"))
                (("cisd-jhdf5.jar")
-                (string-append (assoc-ref inputs "java-cisd-jhdf5")
-                               "/share/java/sis-jhdf5.jar")))
-             #t))
+                (search-input-file inputs
+                                   "/share/java/sis-jhdf5.jar")))))
          ;; There is no installation target
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -4773,7 +4724,7 @@ VCF.")
        ("java-picard-1.113" ,java-picard-1.113)
        ("java-jbzip2" ,java-jbzip2)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/")
     (synopsis "Quality control tool for high throughput sequence data")
     (description
@@ -4814,7 +4765,7 @@ The main functions of FastQC are:
     (arguments
      `(#:tests? #f ; there are none
        #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "PREFIX=" #$output))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -4822,7 +4773,7 @@ The main functions of FastQC are:
            (lambda* (#:key outputs #:allow-other-keys)
              (mkdir-p (string-append (assoc-ref outputs "out") "/bin")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/OpenGene/fastp/")
     (synopsis "All-in-one FastQ preprocessor")
     (description
@@ -4852,13 +4803,12 @@ performance.")
                            "--enable-libcurl"
                            "--enable-s3")))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)))
+     (list curl openssl))
     ;; This is referred to in the pkg-config file as a required library.
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.htslib.org")
     (synopsis "C library for reading/writing high-throughput sequencing data")
     (description
@@ -4909,6 +4859,30 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
                (base32
                 "1rja282fwdc25ql6izkhdyh8ppw8x2fs0w0js78zgkmqjlikmma9"))))))
 
+(define htslib-for-samtools-1.2
+  (package
+    (inherit htslib)
+    (version "1.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1c32ssscbnjwfw3dra140fq7riarp2x990qxybh34nr1p5r17nxx"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (substitute* "test/test.pl"
+               (("/bin/bash") (which "bash"))))))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)))))
+
 (define-public idr
   (package
     (name "idr")
@@ -4931,12 +4905,9 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
     ;; causes the tests to always fail.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-scipy" ,python-scipy)
-       ("python-sympy" ,python-sympy)
-       ("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-scipy python-sympy python-numpy python-matplotlib))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/nboley/idr")
     (synopsis "Tool to measure the irreproducible discovery rate (IDR)")
     (description
@@ -4959,15 +4930,11 @@ experiments and provide highly stable thresholds based on reproducibility.")
                 "0npa62wzasdibas5zp3n8j3armsci4kyvh0jw7jr0am4gg7vg5g1"))))
     (build-system gnu-build-system)
     (outputs '("out"      ;for library
-               "ruby"     ;for Ruby bindings
                "python")) ;for Python bindings
     (arguments
      `(#:configure-flags
-       (list "--without-sse" ; configure script probes for CPU features when SSE is enabled.
-             (string-append "--enable-ruby-binding="
-                            (assoc-ref %outputs "ruby"))
-             (string-append "--enable-python-binding="
-                            (assoc-ref %outputs "python")))
+       ,#~(list "--without-sse" ; configure script probes for CPU features when SSE is enabled.
+                (string-append "--enable-python-binding=" #$output:python))
        #:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-SHELL-variable
@@ -4978,11 +4945,10 @@ experiments and provide highly stable thresholds based on reproducibility.")
     (native-inputs
      `(("bc" ,bc)
        ("time" ,time)
-       ("ruby" ,ruby)
        ("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("htslib" ,htslib)))
+     (list htslib))
     (synopsis "Tool for fast counting of k-mers in DNA")
     (description
      "Jellyfish is a tool for fast, memory-efficient counting of k-mers in
@@ -5029,7 +4995,9 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
              (("# libraries = z,bz2")
               "libraries = z,bz2")
              (("include:third-party/zlib:third-party/bzip2")
-              "include:"))))))
+              "include:"))
+           ;; Delete generated Cython CPP files.
+           (for-each delete-file (find-files "khmer/_oxli/" "\\.cpp$"))))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5042,23 +5010,28 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
              (substitute* "sandbox/sweep-reads.py"
                (("time\\.clock")
                 "time.process_time"))))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))))))))
+         (add-after 'unpack 'do-use-cython
+           (lambda _
+             (substitute* "setup.py"
+               (("from setuptools import Extension as CyExtension")
+                "from Cython.Distutils import Extension as CyExtension")
+               (("from setuptools.command.build_ext import build_ext as _build_ext")
+                "from Cython.Distutils import build_ext as _build_ext")
+               (("HAS_CYTHON = False") "HAS_CYTHON = True")
+               (("cy_ext = 'cpp'") "cy_ext = 'pyx'"))))
+         (add-before 'build 'build-extensions
+           (lambda _
+             ;; Cython extensions have to be built before running the tests.
+             (invoke "python" "setup.py" "build_ext" "--inplace")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-pytest python-pytest-runner))
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("seqan" ,seqan-1)
-       ("python-screed" ,python-screed)
-       ("python-bz2file" ,python-bz2file)))
+     (list zlib bzip2 seqan-1 python-screed python-bz2file))
     (home-page "https://khmer.readthedocs.org/")
     (synopsis "K-mer counting, filtering and graph traversal library")
     (description "The khmer software is a set of command-line tools for
@@ -5100,8 +5073,7 @@ data.")
                (copy-recursively "bin" bin))
              #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "http://kaiju.binf.ku.dk/")
     (synopsis "Fast and sensitive taxonomic classification for metagenomics")
     (description "Kaiju is a program for sensitive taxonomic classification
@@ -5138,16 +5110,17 @@ experiments.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'build 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-v")))))))
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (home-page "https://github.com/macs3-project/MACS")
     (synopsis "Model based analysis for ChIP-Seq data")
     (description
@@ -5175,10 +5148,9 @@ sequencing tag position and orientation.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no automated tests, though there are tests in the read me
-       #:make-flags (let ((out (assoc-ref %outputs "out")))
-                      (list (string-append "PREFIX=" out)
-                            (string-append "BINDIR="
-                                           (string-append out "/bin"))))
+       #:make-flags ,#~(list (string-append "PREFIX=" #$output)
+                             (string-append "BINDIR="
+                                            (string-append #$output "/bin")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -5218,22 +5190,17 @@ sequencing tag position and orientation.")
              #t))
          (delete 'configure)
          (add-after 'install 'wrap-programs
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (path (string-append
-                           (assoc-ref %build-inputs "coreutils") "/bin:")))
+                           (assoc-ref inputs "coreutils") "/bin:")))
                (for-each (lambda (file)
                            (wrap-program file
                              `("PATH" ":" prefix (,path))))
-                         (find-files bin)))
-             #t)))))
+                         (find-files bin))))))))
     (inputs
-     `(("perl" ,perl)
-       ("ruby" ,ruby)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("coreutils" ,coreutils)))
+     (list perl ruby gawk grep coreutils))
     (home-page "https://mafft.cbrc.jp/alignment/software/")
     (synopsis "Multiple sequence alignment program")
     (description
@@ -5260,18 +5227,16 @@ sequences).")
                 "049hwcc059p2fd9vwndn63laifvvsi0wmv84i6y1fr79k15dxwy6"))
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  ;; Delete bundled kseq.
-                  ;; TODO: Also delete bundled murmurhash and open bloom filter.
-                  (delete-file "src/mash/kseq.h")
-                  #t))))
+               ;; Delete bundled kseq.
+               ;; TODO: Also delete bundled murmurhash and open bloom filter.
+               '(delete-file "src/mash/kseq.h"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests.
        #:configure-flags
-       (list
-        (string-append "--with-capnp=" (assoc-ref %build-inputs "capnproto"))
-        (string-append "--with-gsl=" (assoc-ref %build-inputs "gsl")))
+       ,#~(list
+           (string-append "--with-capnp=" #$(this-package-input "capnproto"))
+           (string-append "--with-gsl=" #$(this-package-input "gsl")))
        #:make-flags (list "CC=gcc")
        #:phases
        (modify-phases %standard-phases
@@ -5292,14 +5257,14 @@ sequences).")
                (("c\\+\\+11") "c++14"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ;; Capnproto and htslib are statically embedded in the final
-       ;; application. Therefore we also list their licenses, below.
-       ("capnproto" ,capnproto)
-       ("htslib" ,htslib)))
+     (list autoconf))
     (inputs
-     `(("gsl" ,gsl)
-       ("zlib" ,zlib)))
+     (list ;; Capnproto and htslib are statically embedded in the final
+           ;; application. Therefore we also list their licenses, below.
+           capnproto
+           htslib
+           gsl
+           zlib))
     (supported-systems '("x86_64-linux"))
     (home-page "https://mash.readthedocs.io")
     (synopsis "Fast genome and metagenome distance estimation using MinHash")
@@ -5314,7 +5279,7 @@ form of assemblies or reads.")
 (define-public metabat
   (package
     (name "metabat")
-    (version "2.12.1")
+    (version "2.15")
     (source
      (origin
        (method git-fetch)
@@ -5324,52 +5289,34 @@ form of assemblies or reads.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hyg2smw1nz69mfvjpk45xyyychmda92c80a0cv7baji84ri4iyn"))
-       (patches (search-patches "metabat-fix-compilation.patch"))))
-    (build-system scons-build-system)
-    (arguments
-     `(#:scons ,scons-python2
-       #:scons-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "BOOST_ROOT=" (assoc-ref %build-inputs "boost")))
-       #:tests? #f ;; Tests are run during the build phase.
+         "0v3gsps0ypani14102z2y1a2wignhpf7s1h45mxmj5f783rkhqd9"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       ,#~(list (string-append "-Dzlib_LIB=" #$(this-package-input "zlib")
+                               "/lib/libz.so")
+                (string-append "-Dhtslib_LIB=" #$(this-package-input "htslib")
+                               "/lib/libhts.so")
+                (string-append "-DBOOST_ROOT=" #$(this-package-input "boost")))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-includes
+         (add-after 'unpack 'configure-version-file
            (lambda _
-             (substitute* "src/BamUtils.h"
-               (("^#include \"bam/bam\\.h\"")
-                "#include \"samtools/bam.h\"")
-               (("^#include \"bam/sam\\.h\"")
-                "#include \"samtools/sam.h\""))
-             (substitute* "src/KseqReader.h"
-               (("^#include \"bam/kseq\\.h\"")
-                "#include \"htslib/kseq.h\""))
-             #t))
-         (add-after 'unpack 'fix-scons
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "SConstruct"
-               (("^htslib_dir += 'samtools'")
-                (string-append "htslib_dir = '"
-                               (assoc-ref inputs "htslib")
-                               "'"))
-               (("^samtools_dir = 'samtools'")
-                (string-append "samtools_dir = '"
-                               (assoc-ref inputs "samtools")
-                               "'"))
-               (("^findStaticOrShared\\('bam', hts_lib")
-                (string-append "findStaticOrShared('bam', '"
-                               (assoc-ref inputs "samtools")
-                               "/lib'"))
-               ;; Do not distribute README.
-               (("^env\\.Install\\(idir_prefix, 'README\\.md'\\)") ""))
-             #t)))))
+             (copy-file "metabat_version.h.in" "metabat_version.h")
+             (substitute* "metabat_version.h"
+               (("@_time_stamp@") "19700101")
+               (("@GIT_IS_DIRTY@") "0")
+               (("@GIT_RETRIEVED_STATE@") "0")
+               (("@GIT_HEAD_SHA1@") (string-append "v" ,version)))))
+         (add-after 'unpack 'do-not-use-bundled-libraries
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("include\\(cmake.*") ""))
+             (substitute* "src/CMakeLists.txt"
+               (("set\\(Boost.*") "")
+               (("add_dependencies.*") "")))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("perl" ,perl)
-       ("samtools" ,samtools)
-       ("htslib" ,htslib)
-       ("boost" ,boost)))
+     (list zlib perl samtools htslib boost))
     (home-page "https://bitbucket.org/berkeleylab/metabat")
     (synopsis
      "Reconstruction of single genomes from complex microbial communities")
@@ -5442,52 +5389,52 @@ assembled metagenomic sequence.")
     (license license:gpl3+)))
 
 (define-public miso
-  (package
-    (name "miso")
-    (version "0.5.4")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "misopy" version))
-              (sha256
-               (base32
-                "1z3x0vd8ma7pdrnywj7i3kgwl89sdkwrrn62zl7r5calqaq2hyip"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          (substitute* "setup.py"
-                            ;; Use setuptools, or else the executables are not
-                            ;; installed.
-                            (("distutils.core") "setuptools")
-                            ;; Use "gcc" instead of "cc" for compilation.
-                            (("^defines")
-                             "cc.set_executables(
+  (let ((commit "b71402188000465e3430736a11ea118fd5639a4a")
+        (revision "1"))
+    (package
+      (name "miso")
+      (version (git-version "0.5.4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/yarden/MISO/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0x37ipwwvpxbkrg17gmq3hp92c9cphch8acd6cj7fqgnrjwd47g5"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(substitute* "setup.py"
+                    ;; Use "gcc" instead of "cc" for compilation.
+                    (("^defines")
+                     "cc.set_executables(
 compiler='gcc',
 compiler_so='gcc',
 linker_exe='gcc',
-linker_so='gcc -shared'); defines"))
-                          #t))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2               ; only Python 2 is supported
-       #:tests? #f))                    ; no "test" target
-    (inputs
-     `(("samtools" ,samtools)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-scipy" ,python2-scipy)
-       ("python-matplotlib" ,python2-matplotlib)))
-    (native-inputs
-     `(("python-mock" ,python2-mock)    ; for tests
-       ("python-pytz" ,python2-pytz)))  ; for tests
-    (home-page "https://www.genes.mit.edu/burgelab/miso/index.html")
-    (synopsis "Mixture of Isoforms model for RNA-Seq isoform quantitation")
-    (description
-     "MISO (Mixture-of-Isoforms) is a probabilistic framework that quantitates
+linker_so='gcc -shared'); defines")))))
+      (build-system python-build-system)
+      (arguments
+       `(#:python ,python-2               ; only Python 2 is supported
+         #:tests? #f))                    ; no "test" target
+      (inputs
+       ;; Samtools must not be newer than 1.2.  See
+       ;; https://github.com/yarden/MISO/issues/135
+       (list samtools-1.2 python2-numpy python2-pysam python2-scipy
+             python2-matplotlib))
+      (native-inputs
+       (list python2-mock ; for tests
+             python2-pytz))  ; for tests
+      (home-page "https://miso.readthedocs.io/en/fastmiso/")
+      (synopsis "Mixture of Isoforms model for RNA-Seq isoform quantitation")
+      (description
+       "MISO (Mixture-of-Isoforms) is a probabilistic framework that quantitates
 the expression level of alternatively spliced genes from RNA-Seq data, and
 identifies differentially regulated isoforms or exons across samples.  By
 modeling the generative process by which reads are produced from isoforms in
 RNA-Seq, the MISO model uses Bayesian inference to compute the probability
 that a read originated from a particular isoform.")
-    (license license:gpl2)))
+      (license license:gpl2))))
 
 (define-public muscle
   (package
@@ -5539,24 +5486,22 @@ program for nucleotide and protein sequences.")
                 (sha256
                  (base32
                   "1hkw21rq1mwf7xp0rmbb2gqc0i6p11108m69i7mr7xcjl268pxnb"))))
-    (build-system gnu-build-system)
-    (inputs
-     ;; XXX: TODO: Enable Lua and Guile bindings.
-     ;; https://github.com/tjunier/newick_utils/issues/13
-     `(("libxml2" ,libxml2)
-       ("flex" ,flex)
-       ("bison" ,bison)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-    (synopsis "Programs for working with newick format phylogenetic trees")
-    (description
-     "Newick-utils is a suite of utilities for processing phylogenetic trees
+      (build-system gnu-build-system)
+      (arguments
+       '(#:make-flags (list "CFLAGS=-O2 -g -fcommon")))
+      (inputs
+       ;; XXX: TODO: Enable Lua and Guile bindings.
+       ;; https://github.com/tjunier/newick_utils/issues/13
+       (list libxml2 flex bison))
+      (native-inputs
+       (list autoconf automake libtool))
+      (synopsis "Programs for working with newick format phylogenetic trees")
+      (description
+       "Newick-utils is a suite of utilities for processing phylogenetic trees
 in Newick format.  Functions include re-rooting, extracting subtrees,
 trimming, pruning, condensing, drawing (ASCII graphics or SVG).")
-    (home-page "https://github.com/tjunier/newick_utils")
-    (license license:bsd-3))))
+      (home-page "https://github.com/tjunier/newick_utils")
+      (license license:bsd-3))))
 
 (define-public orfm
   (package
@@ -5571,11 +5516,9 @@ trimming, pruning, condensing, drawing (ASCII graphics or SVG).")
                (base32
                 "16iigyr2gd8x0imzkk1dr3k5xsds9bpmwg31ayvjg0f4pir9rwqr"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (native-inputs
-     `(("ruby-bio-commandeer" ,ruby-bio-commandeer)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby" ,ruby)))
+     (list ruby-bio-commandeer ruby-rspec ruby))
     (synopsis "Simple and not slow open reading frame (ORF) caller")
     (description
      "An ORF caller finds stretches of DNA that, when translated, are not
@@ -5606,13 +5549,9 @@ interrupted by stop codons.  OrfM finds and prints these ORFs.")
                         (("^sphinx") ""))
                       #t)))))
     (propagated-inputs
-     `(("python-cython" ,python2-cython)
-       ("python-numpy" ,python2-numpy)
-       ("python-pysam" ,python2-pysam)
-       ("python-h5py" ,python2-h5py)))
+     (list python2-cython python2-numpy python2-pysam python2-h5py))
     (native-inputs
-     `(("python-nose" ,python2-nose)
-       ("python-pyxb" ,python2-pyxb)))
+     (list python2-nose python2-pyxb))
     (home-page "https://pacificbiosciences.github.io/pbcore/")
     (synopsis "Library for reading and writing PacBio data files")
     (description
@@ -5644,17 +5583,15 @@ files and writing bioinformatics applications.")
                 "from scipy import linalg\nimport weave"))
              #t)))))
     (propagated-inputs
-     `(("python-scipy" ,python2-scipy)
-       ("python-numpy" ,python2-numpy)
-       ("python-matplotlib" ,python2-matplotlib)
-       ("python-fastlmm" ,python2-fastlmm)
-       ("python-pandas" ,python2-pandas)
-       ("python-pysnptools" ,python2-pysnptools)
-       ("python-weave" ,python2-weave)))
-    (native-inputs
-     `(("python-mock" ,python2-mock)
-       ("python-nose" ,python2-nose)
-       ("unzip" ,unzip)))
+     (list python2-scipy
+           python2-numpy
+           python2-matplotlib
+           python2-fastlmm
+           python2-pandas
+           python2-pysnptools
+           python2-weave))
+    (native-inputs
+     (list python2-mock python2-nose unzip))
     (home-page "https://github.com/PMBio/warpedLMM")
     (synopsis "Implementation of warped linear mixed models")
     (description
@@ -5663,63 +5600,6 @@ which automatically learns an optimal warping function (or transformation) for
 the phenotype as it models the data.")
     (license license:asl2.0)))
 
-(define-public pbtranscript-tofu
-  (let ((commit "8f5467fe6a4472bcfb4226c8720993c8507adfe4"))
-    (package
-      (name "pbtranscript-tofu")
-      (version (string-append "2.2.3." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/PacificBiosciences/cDNA_primer")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1lgnpi35ihay42qx0b6yl3kkgra723i413j33kvs0kvs61h82w0f"))
-                (modules '((guix build utils)))
-                (snippet
-                 '(begin
-                    ;; remove bundled Cython sources
-                    (delete-file "pbtranscript-tofu/pbtranscript/Cython-0.20.1.tar.gz")
-                    #t))))
-      (build-system python-build-system)
-      (arguments
-       `(#:python ,python-2
-         ;; FIXME: Tests fail with "No such file or directory:
-         ;; pbtools/pbtranscript/modified_bx_intervals/intersection_unique.so"
-         #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'enter-directory
-            (lambda _
-              (chdir "pbtranscript-tofu/pbtranscript/")
-              #t))
-           ;; With setuptools version 18.0 and later this setup.py hack causes
-           ;; a build error, so we disable it.
-           (add-after 'enter-directory 'patch-setuppy
-            (lambda _
-              (substitute* "setup.py"
-                (("if 'setuptools.extension' in sys.modules:")
-                 "if False:"))
-              #t)))))
-      (inputs
-       `(("python-numpy" ,python2-numpy)
-         ("python-bx-python" ,python2-bx-python)
-         ("python-networkx" ,python2-networkx)
-         ("python-scipy" ,python2-scipy)
-         ("python-pbcore" ,python2-pbcore)
-         ("python-h5py" ,python2-h5py)))
-      (native-inputs
-       `(("python-cython" ,python2-cython)
-         ("python-nose" ,python2-nose)))
-      (home-page "https://github.com/PacificBiosciences/cDNA_primer")
-      (synopsis "Analyze transcriptome data generated with the Iso-Seq protocol")
-      (description
-       "pbtranscript-tofu contains scripts to analyze transcriptome data
-generated using the PacBio Iso-Seq protocol.")
-      (license license:bsd-3))))
-
 (define-public prank
   (package
     (name "prank")
@@ -5737,34 +5617,29 @@ generated using the PacBio Iso-Seq protocol.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-src-dir
-            (lambda _
-              (chdir "src")
-              #t))
+           (lambda _ (chdir "src")))
          (add-after 'unpack 'remove-m64-flag
            ;; Prank will build with the correct 'bit-ness' without this flag
            ;; and this allows building on 32-bit machines.
-           (lambda _ (substitute* "src/Makefile"
-                                  (("-m64") ""))
-             #t))
+           (lambda _
+             (substitute* "src/Makefile"
+               (("-m64") ""))))
          (delete 'configure)
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (man (string-append out "/share/man/man1"))
                     (path (string-append
-                           (assoc-ref %build-inputs "mafft") "/bin:"
-                           (assoc-ref %build-inputs "exonerate") "/bin:"
-                           (assoc-ref %build-inputs "bppsuite") "/bin")))
+                           (assoc-ref inputs "mafft") "/bin:"
+                           (assoc-ref inputs "exonerate") "/bin:"
+                           (assoc-ref inputs "bppsuite") "/bin")))
                (install-file "prank" bin)
                (wrap-program (string-append bin "/prank")
                  `("PATH" ":" prefix (,path)))
-               (install-file "prank.1" man))
-             #t)))))
+               (install-file "prank.1" man)))))))
     (inputs
-     `(("mafft" ,mafft)
-       ("exonerate" ,exonerate)
-       ("bppsuite" ,bppsuite)))
+     (list mafft exonerate bppsuite))
     (home-page "http://wasabiapp.org/software/prank/")
     (synopsis "Probabilistic multiple sequence alignment program")
     (description
@@ -5819,9 +5694,11 @@ predicts the locations of structural units in the sequences.")
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((path (getenv "PATH"))
-                   (out (assoc-ref outputs "out")))
+                   (out (assoc-ref outputs "out"))
+                   (guile (search-input-file inputs "bin/guile")))
                (for-each (lambda (script)
-                           (wrap-script script `("PATH" ":" prefix (,path))))
+                           (wrap-script script #:guile guile
+                                        `("PATH" ":" prefix (,path))))
                          (cons (string-append out "/bin/proteinortho")
                                (find-files out "\\.(pl|py)$"))))
              #t)))))
@@ -5834,7 +5711,7 @@ predicts the locations of structural units in the sequences.")
        ("lapack" ,lapack)
        ("openblas" ,openblas)))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "http://www.bioinf.uni-leipzig.de/Software/proteinortho")
     (synopsis "Detect orthologous genes across species")
     (description
@@ -5863,7 +5740,7 @@ large-scale data and can be applied to hundreds of species at once.")
      `(#:python ,python-2 ; does not work with Python 3
        #:tests? #f))      ; there are no tests
     (inputs
-     `(("python2-matplotlib" ,python2-matplotlib)))
+     (list python2-matplotlib))
     (home-page "https://bitbucket.org/regulatorygenomicsupf/pyicoteo")
     (synopsis "Analyze high-throughput genetic sequencing data")
     (description
@@ -5901,9 +5778,8 @@ different command-line tools:
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:make-flags (list (string-append "INSTALLDIR="
-                                         (assoc-ref %outputs "out")
-                                         "/bin"))
+       #:make-flags
+       ,#~(list (string-append "INSTALLDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -5979,7 +5855,7 @@ partial genes, and identifies translation initiation sites.")
                       (string-append out "/bin/roary-create_pan_genome_plots.R"))
                      (r-site-lib (getenv "R_LIBS_SITE"))
                      (coreutils-path
-                      (string-append (assoc-ref inputs "coreutils") "/bin")))
+                      (dirname (search-input-file inputs "bin/chmod"))))
                  (wrap-program file
                    `("R_LIBS_SITE" ":" prefix
                      (,(string-append r-site-lib ":" out "/site-library/"))))
@@ -5988,10 +5864,7 @@ partial genes, and identifies translation initiation sites.")
                      (,(string-append coreutils-path ":" out "/bin"))))))
              #t)))))
     (native-inputs
-     `(("perl-env-path" ,perl-env-path)
-       ("perl-test-files" ,perl-test-files)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-env-path perl-test-files perl-test-most perl-test-output))
     (inputs
      `(("perl-array-utils" ,perl-array-utils)
        ("bioperl" ,bioperl-minimal)
@@ -6064,7 +5937,7 @@ extremely diverse sets of genomes.")
                (symlink (string-append bin "/" executable) "raxml"))
              #t)))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (home-page "https://cme.h-its.org/exelixis/web/software/raxml/index.html")
     (synopsis "Randomized Axelerated Maximum Likelihood phylogenetic trees")
     (description
@@ -6077,7 +5950,7 @@ phylogenies.")
 (define-public rsem
   (package
     (name "rsem")
-    (version "1.3.1")
+    (version "1.3.3")
     (source
      (origin
        (method git-fetch)
@@ -6085,38 +5958,46 @@ phylogenies.")
              (url "https://github.com/deweylab/RSEM")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1jlq11d1p8qp64w75yj8cnbbd1a93viq10pzsbwal7vdn8fg13j1"))
+        (base32 "1yl4i7z20n2p84j1lmk15aiak3yqc6fiw0q5a4pndw7pxfiq3rzp"))
        (file-name (git-file-name name version))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; remove bundled copy of boost and samtools
            (delete-file-recursively "boost")
-           (delete-file-recursively "samtools-1.3")
-           #t))))
+           (delete-file-recursively "samtools-1.3")))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
        #:make-flags
-       (list (string-append "BOOST="
-                            (assoc-ref %build-inputs "boost")
-                            "/include/")
-             (string-append "SAMHEADERS="
-                            (assoc-ref %build-inputs "htslib")
-                            "/include/htslib/sam.h")
-             (string-append "SAMLIBS="
-                            (assoc-ref %build-inputs "htslib")
-                            "/lib/libhts.so"))
+       ,#~(list (string-append "BOOST="
+                               #$(this-package-input "boost")
+                               "/include/")
+                (string-append "SAMHEADERS="
+                               #$(this-package-input "htslib")
+                               "/include/htslib/sam.h")
+                (string-append "SAMLIBS="
+                               #$(this-package-input "htslib")
+                               "/lib/libhts.so"))
        #:phases
        (modify-phases %standard-phases
          ;; No "configure" script.
-         ;; Do not build bundled samtools library.
          (replace 'configure
            (lambda _
              (substitute* "Makefile"
                (("^all : \\$\\(PROGRAMS\\).*") "all: $(PROGRAMS)\n")
-               (("^\\$\\(SAMLIBS\\).*") ""))
-             #t))
+               ;; Do not build bundled samtools library.
+               (("^\\$\\(SAMLIBS\\).*") "")
+               ;; Needed for Boost
+               (("gnu\\+\\+98") "gnu++11"))
+             ;; C++11 compatibility
+             (substitute* "buildReadIndex.cpp"
+               (("success = \\(getline")
+                "success = (bool)(getline"))
+             (substitute* '("PairedEndHit.h"
+                            "SingleHit.h")
+               (("return \\(in>>sid>>pos")
+                "return (bool)(in>>sid>>pos"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (string-append (assoc-ref outputs "out")))
@@ -6127,8 +6008,7 @@ phylogenies.")
                (for-each (lambda (file)
                            (install-file file bin))
                          (find-files "." "rsem-.*"))
-               (install-file "rsem_perl_utils.pm" perl))
-             #t))
+               (install-file "rsem_perl_utils.pm" perl))))
          (add-after 'install 'wrap-program
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -6143,14 +6023,9 @@ phylogenies.")
                            "rsem-plot-transcript-wiggles"
                            "rsem-prepare-reference"
                            "rsem-run-ebseq"
-                           "rsem-run-prsem-testing-procedure")))
-             #t)))))
+                           "rsem-run-prsem-testing-procedure"))))))))
     (inputs
-     `(("boost" ,boost)
-       ("r-minimal" ,r-minimal)
-       ("perl" ,perl)
-       ("htslib" ,htslib-1.3)
-       ("zlib" ,zlib)))
+     (list boost r-minimal perl htslib-1.3 zlib))
     (home-page "http://deweylab.biostat.wisc.edu/rsem/")
     (synopsis "Estimate gene expression levels from RNA-Seq data")
     (description
@@ -6178,14 +6053,14 @@ BAM and Wiggle files in both transcript-coordinate and genomic-coordinate.")
          "0gbb9iyb7swiv5455fm5rg98r7l6qn27v564yllqjd574hncpx6m"))))
     (build-system python-build-system)
     (inputs
-     `(("python-cython" ,python-cython)
-       ("python-bx-python" ,python-bx-python)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-numpy" ,python-numpy)
-       ("zlib" ,zlib)))
+     (list python-cython
+           python-bx-python
+           python-pybigwig
+           python-pysam
+           python-numpy
+           zlib))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "http://rseqc.sourceforge.net/")
     (synopsis "RNA-seq quality control package")
     (description
@@ -6197,67 +6072,55 @@ distribution, coverage uniformity, strand specificity, etc.")
     (license license:gpl3+)))
 
 (define-public seek
-  ;; There are no release tarballs.  According to the installation
-  ;; instructions at http://seek.princeton.edu/installation.jsp, the latest
-  ;; stable release is identified by this changeset ID.
-  (let ((changeset "2329130")
+  ;; There are no release tarballs.  And the installation instructions at
+  ;; http://seek.princeton.edu/installation.jsp only mention a mercurial
+  ;; changeset ID.  This is a git repository, though.  So we just take the
+  ;; most recent commit.
+  (let ((commit "196ed4c7633246e9c628e4330d77577ccfd7f1e5")
         (revision "1"))
     (package
       (name "seek")
-      (version (string-append "0-" revision "." changeset))
+      (version (git-version "1" revision commit))
       (source (origin
-                (method hg-fetch)
-                (uri (hg-reference
-                      (url "https://bitbucket.org/libsleipnir/sleipnir")
-                      (changeset changeset)))
-                (file-name (string-append name "-" version "-checkout"))
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/FunctionLab/sleipnir.git")
+                      (commit commit)
+                      (recursive? #true)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0qrvilwh18dpbhkf92qvxbmay0j75ra3jg2wrhz67gf538zzphsx"))))
-      (build-system gnu-build-system)
+                  "0c658n8nz563a96dsi4gl2685vxph0yfmmqq5yjc6i4xin1jy1ab"))))
+      (build-system cmake-build-system)
       (arguments
-       `(#:modules ((srfi srfi-1)
-                    (guix build gnu-build-system)
-                    (guix build utils))
+       `(#:configure-flags
+         ,#~(list (string-append "-DSVM_LIBRARY="
+                                 #$(this-package-input "libsvm")
+                                 "/lib/libsvm.so.2")
+                  (string-append "-DSVM_INCLUDE="
+                                 #$(this-package-input "libsvm")
+                                 "/include"))
+         #:tests? #false ; tests only fail in the build container
          #:phases
-         (let ((dirs '("SeekMiner"
-                       "SeekEvaluator"
-                       "SeekPrep"
-                       "Distancer"
-                       "Data2DB"
-                       "PCL2Bin")))
-           (modify-phases %standard-phases
-             (replace 'bootstrap
-               (lambda _
-                 (substitute* "gen_tools_am"
-                   (("/usr/bin/env.*") (which "perl")))
-                 (invoke "bash" "gen_auto")
-                 #t))
-             (add-after 'build 'build-additional-tools
-               (lambda* (#:key make-flags #:allow-other-keys)
-                 (for-each (lambda (dir)
-                             (with-directory-excursion (string-append "tools/" dir)
-                               (apply invoke "make" make-flags)))
-                           dirs)
-                 #t))
-             (add-after 'install 'install-additional-tools
-               (lambda* (#:key make-flags #:allow-other-keys)
-                 (for-each (lambda (dir)
-                             (with-directory-excursion (string-append "tools/" dir)
-                               (apply invoke `("make" ,@make-flags "install"))))
-                           dirs)
-                 #t))))))
+         (modify-phases %standard-phases
+           ;; The check phase expects to find the unit_tests executable in the
+           ;; "build/bin" directory, but it is actually in "build/tests".
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "tests/unit_tests")))))))
       (inputs
-       `(("gsl" ,gsl)
+       `(("apache-thrift:include" ,apache-thrift "include")
+         ("apache-thrift:lib" ,apache-thrift "lib")
+         ("gsl" ,gsl)
          ("boost" ,boost)
-         ("libsvm" ,libsvm)
-         ("readline" ,readline)
          ("gengetopt" ,gengetopt)
-         ("log4cpp" ,log4cpp)))
+         ("libsvm" ,libsvm)
+         ("log4cpp" ,log4cpp)
+         ("python" ,python)
+         ("readline" ,readline)))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("perl" ,perl)))
+       (list pkg-config))
       (home-page "http://seek.princeton.edu")
       (synopsis "Gene co-expression search engine")
       (description
@@ -6315,13 +6178,9 @@ to the user's query of interest.")
                            (install-file file include))
                          (scandir "." (lambda (name) (string-match "\\.h$" name))))
                #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list htslib ncurses perl python zlib))
     (home-page "http://samtools.sourceforge.net")
     (synopsis "Utilities to efficiently manipulate nucleotide sequence alignments")
     (description
@@ -6350,11 +6209,64 @@ viewer.")
                    (delete-file-recursively "htslib-1.10")
                    #t))))
     (inputs
-     `(("htslib" ,htslib-1.10)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))))
+     (list htslib-1.10 ncurses perl python zlib))))
+
+(define-public samtools-1.2
+  (package (inherit samtools)
+    (name "samtools")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/samtools/samtools/"
+                       version "/samtools-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1akdqb685pk9xk1nb6sa9aq8xssjjhvvc06kp4cpdqvz2157l3j2"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete bundled htslib and Windows binaries
+        '(for-each delete-file-recursively (list "win32" "htslib-1.2.1")))))
+    (arguments
+     `(#:make-flags
+       ,#~(list (string-append "prefix=" #$output)
+                (string-append "BGZIP="
+                               #$(this-package-input "htslib")
+                               "/bin/bgzip")
+                (string-append "HTSLIB="
+                               #$(this-package-input "htslib")
+                               "/lib/libhts.so")
+                (string-append "HTSDIR="
+                               #$(this-package-input "htslib")
+                               "/include"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-makefile-curses
+           (lambda _
+             (substitute* "Makefile"
+               (("-lcurses") "-lncurses")
+               (("include \\$\\(HTSDIR.*") ""))))
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (substitute* "test/test.pl"
+               ;; The test script calls out to /bin/bash
+               (("/bin/bash") (which "bash"))
+               ;; There are two failing tests upstream relating to the "stats"
+               ;; subcommand in test_usage_subcommand ("did not have Usage"
+               ;; and "usage did not mention samtools stats"), so we disable
+               ;; them.
+               (("(test_usage_subcommand\\(.*\\);)" cmd)
+                (string-append "unless ($subcommand eq 'stats') {" cmd "};")))
+             ;; This test fails because the grep output doesn't look as
+             ;; expected; it is correct, though.
+             (substitute* "test/mpileup/mpileup.reg"
+               (("P 52.out.*") ""))))
+         (delete 'configure))))
+    (native-inputs
+     (list grep gawk pkg-config))
+    (inputs
+     (list htslib-for-samtools-1.2 ncurses perl python zlib))))
 
 (define-public samtools-0.1
   ;; This is the most recent version of the 0.1 line of samtools.  The input
@@ -6466,8 +6378,7 @@ Roche 454, Ion Torrent and Pacific BioSciences SMRT.")
                (mkdir-p share)
                (copy-recursively "../R" share)))))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)))
+     (list boost htslib))
     (home-page "https://github.com/friendsofstrandseq/mosaicatcher")
     (synopsis "Count and classify Strand-seq reads")
     (description
@@ -6509,7 +6420,7 @@ each chromosome in each cell using a Hidden Markov Model.")
                #t)))
          (add-after 'unpack 'enter-dir
            (lambda _ (chdir "ngs-sdk") #t)))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     ;; According to the test
     ;;   unless ($MARCH =~ /x86_64/i || $MARCH =~ /i?86/i)
     ;; in ngs-sdk/setup/konfigure.perl
@@ -6647,7 +6558,7 @@ simultaneously.")
        ("java-ngs" ,java-ngs)
        ("libmagic" ,file)
        ("hdf5" ,hdf5)))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     ;; NCBI-VDB requires SSE capability.
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "https://github.com/ncbi/ncbi-vdb")
@@ -6675,29 +6586,27 @@ accessed/downloaded on demand across HTTP.")
                                 "plink-endian-detection.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;no "check" target
-       #:make-flags (list (string-append "LIB_LAPACK="
-                                         (assoc-ref %build-inputs "lapack")
-                                         "/lib/liblapack.so")
-                          "WITH_LAPACK=1"
-                          "FORCE_DYNAMIC=1"
-                          ;; disable phoning home
-                          "WITH_WEBCHECK=")
+     `(#:tests? #f ;no "check" target
+       #:make-flags ,#~(list (string-append "LIB_LAPACK="
+                                            #$(this-package-input "lapack")
+                                            "/lib/liblapack.so")
+                             "WITH_LAPACK=1"
+                             "FORCE_DYNAMIC=1"
+                             ;; disable phoning home
+                             "WITH_WEBCHECK=")
        #:phases
        (modify-phases %standard-phases
          ;; no "configure" script
          (delete 'configure)
          (replace 'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let ((bin (string-append (assoc-ref outputs "out")
-                                              "/bin/")))
-                      (install-file "plink" bin)
-                      #t))))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out")
+                                       "/bin/")))
+               (install-file "plink" bin)))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("lapack" ,lapack)))
+     (list zlib lapack))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://pngu.mgh.harvard.edu/~purcell/plink/")
     (synopsis "Whole genome association analysis toolset")
     (description
@@ -6727,23 +6636,36 @@ subsequent visualization, annotation and storage of results.")
         (base32 "1p88lz9agzjlspjhciz61qjc36cfniv4nkxszyy0njqyc5rzc0cd"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ;no "check" target
-       #:make-flags (list "BLASFLAGS=-llapack -lopenblas"
-                          "CFLAGS=-Wall -O2 -DDYNAMIC_ZLIB=1"
-                          "ZLIB=-lz"
-                          "BIN=plink prettify"
-                          (string-append "CC=" ,(cc-for-target))
-                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          "DESTDIR=")
+     `(#:make-flags
+       ,#~(list "BLASFLAGS=-llapack -lopenblas"
+                "CFLAGS=-Wall -O2 -DDYNAMIC_ZLIB=1"
+                "ZLIB=-lz"
+                "BIN=plink prettify"
+                (string-append "CC=" #$(cc-for-target))
+                (string-append "PREFIX=" #$output)
+                "DESTDIR=")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
-           (lambda _ (chdir "1.9") #t))
-         (delete 'configure)))) ; no "configure" script
+           (lambda _ (chdir "1.9")))
+         (delete 'configure)  ; no "configure" script
+         (replace 'check
+           (lambda* (#:key tests? inputs #:allow-other-keys)
+             (when tests?
+               (symlink "plink" "plink19")
+               (symlink (search-input-file inputs "/bin/plink") "plink107")
+               (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
+               (with-directory-excursion "tests"
+                 ;; The model test fails because of a 0.0001 difference.
+                 (substitute* "tests.py"
+                   (("diff -q test1.model test2.model")
+                    "echo yes"))
+                 (invoke "bash" "test_setup.sh")
+                 (invoke "python3" "tests.py"))))))))
     (inputs
-     `(("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list lapack openblas zlib))
+    (native-inputs
+     (list diffutils plink python)) ; for tests
     (home-page "https://www.cog-genomics.org/plink/")
     (license license:gpl3+)))
 
@@ -6790,8 +6712,7 @@ subsequent visualization, annotation and storage of results.")
               #t))
            (delete 'configure))))
       (inputs
-       `(("samtools" ,samtools-0.1)
-         ("zlib" ,zlib)))
+       (list samtools-0.1 zlib))
       (home-page "https://github.com/smithlabcode/smithlab_cpp")
       (synopsis "C++ helper library for functions used in Smith lab projects")
       (description
@@ -6812,10 +6733,8 @@ structures, classes for genomic regions, mapped sequencing reads, etc.")
               (sha256
                (base32 "149x9xmk1wy1gff85325yfzqc0qk4sgp1w6gbyj9cnji4x1dszbl"))
               (modules '((guix build utils)))
-              (snippet '(begin
-                          ;; Remove bundled samtools.
-                          (delete-file-recursively "samtools")
-                          #t))))
+              ;; Remove bundled samtools.
+              (snippet '(delete-file-recursively "samtools"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
@@ -6823,21 +6742,17 @@ structures, classes for genomic regions, mapped sequencing reads, etc.")
        (modify-phases %standard-phases
          (delete 'configure))
        #:make-flags
-       (list (string-append "PREFIX="
-                            (assoc-ref %outputs "out"))
-             (string-append "LIBBAM="
-                            (assoc-ref %build-inputs "samtools")
-                            "/lib/libbam.a")
-             (string-append "SMITHLAB_CPP="
-                            (assoc-ref %build-inputs "smithlab-cpp")
-                            "/lib")
-             "PROGS=preseq"
-             "INCLUDEDIRS=$(SMITHLAB_CPP)/../include/smithlab-cpp $(SAMTOOLS_DIR)")))
-    (inputs
-     `(("gsl" ,gsl)
-       ("samtools" ,samtools-0.1)
-       ("smithlab-cpp" ,smithlab-cpp)
-       ("zlib" ,zlib)))
+       ,#~(list (string-append "PREFIX=" #$output)
+                (string-append "LIBBAM="
+                               #$(this-package-input "samtools")
+                               "/lib/libbam.a")
+                (string-append "SMITHLAB_CPP="
+                               #$(this-package-input "smithlab-cpp")
+                               "/lib")
+                "PROGS=preseq"
+                "INCLUDEDIRS=$(SMITHLAB_CPP)/../include/smithlab-cpp $(SAMTOOLS_DIR)")))
+    (inputs
+     (list gsl samtools-0.1 smithlab-cpp zlib))
     (home-page "http://smithlabresearch.org/software/preseq/")
     (synopsis "Program for analyzing library complexity")
     (description
@@ -6862,31 +6777,10 @@ complexity samples.")
         (base32
          "148vcb7w2wr6a4w6vs2bsxanbqibxfk490zbcbg4m61s8669zdjx"))))
     (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Tests must be run after installation, as the "screed" command does
-         ;; not exist right after building.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append out "/lib/python"
-                                      (string-take (string-take-right
-                                                    (assoc-ref inputs "python")
-                                                    5) 3)
-                                      "/site-packages:"
-                                      (getenv "PYTHONPATH")))
-               (setenv "PATH" (string-append out "/bin:" (getenv "PATH"))))
-             (invoke "python" "setup.py" "test")
-             #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (inputs
-     `(("python-bz2file" ,python-bz2file)))
+     (list python-bz2file))
     (home-page "https://github.com/dib-lab/screed/")
     (synopsis "Short read sequence database utilities")
     (description "Screed parses FASTA and FASTQ files and generates databases.
@@ -6916,19 +6810,19 @@ sequence itself can be retrieved from these databases.")
      `(#:parallel-build? #f             ; not supported
        #:tests? #f                      ; no "check" target
        #:make-flags
-       (list (string-append "DEFAULT_CRT="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            "/kfg/certs.kfg")
-             (string-append "DEFAULT_KFG="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            "/kfg/default.kfg")
-             (string-append "VDB_LIBDIR="
-                            (assoc-ref %build-inputs "ncbi-vdb")
-                            ,(if (string-prefix? "x86_64"
-                                                 (or (%current-target-system)
-                                                     (%current-system)))
-                                 "/lib64"
-                                 "/lib32")))
+       ,#~(list (string-append "DEFAULT_CRT="
+                               #$(this-package-input "ncbi-vdb")
+                               "/kfg/certs.kfg")
+                (string-append "DEFAULT_KFG="
+                               #$(this-package-input "ncbi-vdb")
+                               "/kfg/default.kfg")
+                (string-append "VDB_LIBDIR="
+                               #$(this-package-input "ncbi-vdb")
+                               #$(if (string-prefix? "x86_64"
+                                                     (or (%current-target-system)
+                                                         (%current-system)))
+                                     "/lib64"
+                                     "/lib32")))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'set-perl-search-path
@@ -6984,7 +6878,7 @@ sequence itself can be retrieved from these databases.")
                      (string-append "--with-hdf5-prefix="
                                     (assoc-ref inputs "hdf5")))
              #t)))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
      `(("ngs-sdk" ,ngs-sdk)
        ("ncbi-vdb" ,ncbi-vdb)
@@ -7022,9 +6916,7 @@ writing files into the .sra format.")
            (lambda _
              (invoke "ctest" "test" "--output-on-failure"))))))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("cereal" ,cereal)
-       ("zlib" ,zlib)))
+     (list bzip2 cereal zlib))
     (home-page "https://www.seqan.de")
     (synopsis "Library for nucleotide sequence analysis")
     (description
@@ -7054,18 +6946,17 @@ bioinformatics file formats, sequence alignment, and more.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((tar (assoc-ref %build-inputs "tar"))
-               (xz  (assoc-ref %build-inputs "xz"))
-               (out (assoc-ref %outputs "out"))
-               (doc (assoc-ref %outputs "doc")))
-           (setenv "PATH" (string-append tar "/bin:" xz "/bin"))
-           (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
-           (chdir (string-append "seqan-library-" ,version))
-           (copy-recursively "include" (string-append out "/include"))
-           (copy-recursively "share"  (string-append doc "/share"))
-           #t))))
+       ,#~(begin
+            (use-modules (guix build utils))
+            (let ((tar #$(this-package-native-input "tar"))
+                  (xz  #$(this-package-native-input "xz"))
+                  (out #$output)
+                  (doc #$output:doc))
+              (setenv "PATH" (string-append tar "/bin:" xz "/bin"))
+              (invoke "tar" "xvf" #$(this-package-native-input "source"))
+              (chdir (string-append "seqan-library-" #$version))
+              (copy-recursively "include" (string-append out "/include"))
+              (copy-recursively "share"  (string-append doc "/share"))))))
     (native-inputs
      `(("source" ,source)
        ("tar" ,tar)
@@ -7089,18 +6980,17 @@ bioinformatics file formats, sequence alignment, and more.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((tar  (assoc-ref %build-inputs "tar"))
-               (bzip (assoc-ref %build-inputs "bzip2"))
-               (out  (assoc-ref %outputs "out"))
-               (doc  (assoc-ref %outputs "doc")))
-           (setenv "PATH" (string-append tar "/bin:" bzip "/bin"))
-           (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
-           (chdir (string-append "seqan-library-" ,version))
-           (copy-recursively "include" (string-append out "/include"))
-           (copy-recursively "share"  (string-append doc "/share"))
-           #t))))
+       ,#~(begin
+            (use-modules (guix build utils))
+            (let ((tar  #$(this-package-native-input "tar"))
+                  (bzip #$(this-package-native-input "bzip2"))
+                  (out #$output)
+                  (doc #$output:doc))
+              (setenv "PATH" (string-append tar "/bin:" bzip "/bin"))
+              (invoke "tar" "xvf" #$(this-package-native-input "source"))
+              (chdir (string-append "seqan-library-" #$version))
+              (copy-recursively "include" (string-append out "/include"))
+              (copy-recursively "share"  (string-append doc "/share"))))))
     (native-inputs
      `(("source" ,source)
        ("tar" ,tar)
@@ -7119,9 +7009,9 @@ bioinformatics file formats, sequence alignment, and more.")
          "0pf98da7i59q47gwrbx0wjk6xlvbybiwphw80w7h4ydjj0579a2b"))))
     (build-system python-build-system)
     (inputs
-     `(("python-biopython" ,python-biopython)))
+     (list python-biopython))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/fhcrc/seqmagick")
     (synopsis "Tools for converting and modifying sequence files")
     (description
@@ -7159,7 +7049,7 @@ is one that takes arguments.")
                (install-file "seqtk" bin)
                #t))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/lh3/seqtk")
     (synopsis "Toolkit for processing biological sequences in FASTA/Q format")
     (description
@@ -7171,7 +7061,7 @@ optionally compressed by gzip.")
 (define-public snap-aligner
   (package
     (name "snap-aligner")
-    (version "1.0beta.18")
+    (version "2.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7180,22 +7070,23 @@ optionally compressed by gzip.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01w3qq4wm07z73vky0cfwlmrbf50n3w722cxrlzxfi99mnb808d8"))))
+                "0yag3jcazdqfxgmw0vbi91i98kj9sr0aqx83qqj6m5b45wxs7jms"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (replace 'check (lambda _ (invoke "./unit_tests") #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "./unit_tests"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "snap-aligner" bin)
-               (install-file "SNAPCommand" bin)
-               #t))))))
+               (install-file "SNAPCommand" bin)))))))
     (native-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://snap.cs.berkeley.edu/")
     (synopsis "Short read DNA sequence aligner")
     (description
@@ -7243,7 +7134,7 @@ of these reads to align data quickly through a hash-based indexing scheme.")
                          (find-files "rRNA_databases" ".*fasta"))
                #t))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://bioinfo.lifl.fr/RNA/sortmerna/")
     (synopsis "Biological sequence analysis tool for NGS reads")
     (description
@@ -7325,10 +7216,9 @@ application of SortMeRNA is filtering rRNA from metatranscriptomic data.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("xxd" ,xxd)))
+     (list xxd))
     (inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib zlib))
     (home-page "https://github.com/alexdobin/STAR")
     (synopsis "Universal RNA-seq aligner")
     (description
@@ -7395,14 +7285,14 @@ sequences.")
 (define-public subread
   (package
     (name "subread")
-    (version "1.6.0")
+    (version "2.0.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/subread/subread-"
                                   version "/subread-" version "-source.tar.gz"))
               (sha256
                (base32
-                "0ah0n4jx6ksk2m2j7xk385x2qzmk1y4rfc6a4mfrdqrlq721w99i"))))
+                "0szmllia7jl0annk5568xjhw6cc8yj1c5mb961qk5m0lz6ig7kjn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
@@ -7414,7 +7304,7 @@ sequences.")
                                 (%current-system)))
                    (flags '("-ggdb" "-fomit-frame-pointer"
                             "-ffast-math" "-funroll-loops"
-                            "-fmessage-length=0"
+                            "-fmessage-length=0" "-fcommon"
                             "-O9" "-Wall" "-DMAKE_FOR_EXON"
                             "-DMAKE_STANDALONE"
                             "-DSUBREAD_VERSION=\\\"${SUBREAD_VERSION}\\\""))
@@ -7427,17 +7317,16 @@ sequences.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir "src") #t))
+           (lambda _ (chdir "src")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
                (mkdir-p bin)
-               (copy-recursively "../bin" bin))
-             #t))
+               (copy-recursively "../bin" bin))))
          ;; no "configure" script
          (delete 'configure))))
-    (inputs `(("zlib" ,zlib)))
-    (home-page "http://bioinf.wehi.edu.au/subread-package/")
+    (inputs (list zlib))
+    (home-page "http://subread.sourceforge.net/")
     (synopsis "Tool kit for processing next-gen sequencing data")
     (description
      "The subread package contains the following tools: subread aligner, a
@@ -7493,8 +7382,7 @@ against local background noises.")
               (install-file "stringtie" bin)
               #t))))))
     (inputs
-     `(("samtools" ,samtools-0.1)
-       ("zlib" ,zlib)))
+     (list samtools-0.1 zlib))
     (home-page "http://ccb.jhu.edu/software/stringtie/")
     (synopsis "Transcript assembly and quantification for RNA-Seq data")
     (description
@@ -7512,7 +7400,7 @@ Cuffdiff or Ballgown programs.")
 (define-public taxtastic
   (package
     (name "taxtastic")
-    (version "0.8.11")
+    (version "0.9.2")
     (source (origin
               ;; The Pypi version does not include tests.
               (method git-fetch)
@@ -7522,15 +7410,13 @@ Cuffdiff or Ballgown programs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1sv8mkg64jn7zdwf1jj71c16686yrwxk0apb1l8sjszy9p166g0p"))))
+                "1k6wg9ych1j3srnhdny1y4470qlhfg730rb3rm3pq7l7gw62vmgb"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'prepare-directory
            (lambda _
-             ;; The git checkout must be writable for tests.
-             (for-each make-file-writable (find-files "."))
              ;; This test fails, but the error is not caught by the test
              ;; framework, so the tests fail...
              (substitute* "tests/test_taxit.py"
@@ -7539,29 +7425,27 @@ Cuffdiff or Ballgown programs.")
              ;; This version file is expected to be created with git describe.
              (mkdir-p "taxtastic/data")
              (with-output-to-file "taxtastic/data/ver"
-               (lambda () (display ,version)))
-             #t))
-         (add-after 'unpack 'python37-compatibility
-           (lambda _
-             (substitute* "taxtastic/utils.py"
-               (("import csv") "import csv, errno")
-               (("os.errno") "errno"))
-             #t))
+               (lambda () (display ,version)))))
          (replace 'check
            ;; Note, this fails to run with "-v" as it tries to write to a
            ;; closed output stream.
-           (lambda _ (invoke "python" "-m" "unittest") #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest"))))
+         ;; This fails because it cannot find psycopg2 even though it is
+         ;; available.
+         (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-decorator" ,python-decorator)
-       ("python-biopython" ,python-biopython)
-       ("python-pandas" ,python-pandas)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-fastalite" ,python-fastalite)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-jinja2" ,python-jinja2)
-       ("python-dendropy" ,python-dendropy)))
+     (list python-sqlalchemy
+           python-decorator
+           python-biopython
+           python-pandas
+           python-psycopg2
+           python-fastalite
+           python-pyyaml
+           python-six
+           python-jinja2
+           python-dendropy))
     (home-page "https://github.com/fhcrc/taxtastic")
     (synopsis "Tools for taxonomic naming and annotation")
     (description
@@ -7585,16 +7469,15 @@ profiles, and associated taxonomic information.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
-       #:make-flags (list
-                     "CFLAGS=-O2" ; override "-m64" flag
-                     (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                     (string-append "MANDIR=" (assoc-ref %outputs "out")
-                                    "/share/man/man1"))))
+       #:make-flags
+       ,#~(list
+           "CFLAGS=-O2"                 ; override "-m64" flag
+           (string-append "PREFIX=" #$output)
+           (string-append "MANDIR=" #$output "/share/man/man1"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "https://vcftools.github.io/")
     (synopsis "Tools for working with VCF files")
     (description
@@ -7619,8 +7502,7 @@ data in the form of VCF files.")
                 "1z4mgwqg1j4n5ika08ai8mg9yjyjhf4821jp83v2bgwzxrykqjgr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python))) ; for tests
+     (list perl python)) ; for tests
     (home-page "http://eddylab.org/infernal/")
     (synopsis "Inference of RNA alignments")
     (description "Infernal (\"INFERence of RNA ALignment\") is a tool for
@@ -7653,15 +7535,15 @@ sequence.")
       (properties `((upstream . "presto")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-data-table" ,r-data-table)
-         ("r-deseq2" ,r-deseq2)
-         ("r-dplyr" ,r-dplyr)
-         ("r-matrix" ,r-matrix)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpparmadillo" ,r-rcpparmadillo)
-         ("r-reshape2" ,r-reshape2)
-         ("r-rlang" ,r-rlang)
-         ("r-tidyr" ,r-tidyr)))
+       (list r-data-table
+             r-deseq2
+             r-dplyr
+             r-matrix
+             r-rcpp
+             r-rcpparmadillo
+             r-reshape2
+             r-rlang
+             r-tidyr))
       (home-page "https://github.com/immunogenomics/presto")
       (synopsis "Fast Functions for Differential Expression using Wilcox and AUC")
       (description "This package performs a fast Wilcoxon rank sum test and
@@ -7684,25 +7566,25 @@ auROC analysis.")
     (properties `((upstream-name . "SnapATAC")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-bigmemory" ,r-bigmemory)
-        ("r-doparallel" ,r-doparallel)
-        ("r-dosnow" ,r-dosnow)
-        ("r-edger" ,r-edger)
-        ("r-foreach" ,r-foreach)
-        ("r-genomicranges" ,r-genomicranges)
-        ("r-igraph" ,r-igraph)
-        ("r-iranges" ,r-iranges)
-        ("r-irlba" ,r-irlba)
-        ("r-matrix" ,r-matrix)
-        ("r-plyr" ,r-plyr)
-        ("r-plot3d" ,r-plot3d)
-        ("r-rann" ,r-rann)
-        ("r-raster" ,r-raster)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-rhdf5" ,r-rhdf5)
-        ("r-rtsne" ,r-rtsne)
-        ("r-scales" ,r-scales)
-        ("r-viridis" ,r-viridis)))
+      (list r-bigmemory
+            r-doparallel
+            r-dosnow
+            r-edger
+            r-foreach
+            r-genomicranges
+            r-igraph
+            r-iranges
+            r-irlba
+            r-matrix
+            r-plyr
+            r-plot3d
+            r-rann
+            r-raster
+            r-rcolorbrewer
+            r-rhdf5
+            r-rtsne
+            r-scales
+            r-viridis))
     (home-page "https://github.com/r3fang/SnapATAC")
     (synopsis "Single nucleus analysis package for ATAC-Seq")
     (description
@@ -7747,12 +7629,10 @@ single cell ATAC-seq sequencing data.")
                  (("\"perl")
                   (string-append "\"" (which "perl")))))))))
       (inputs
-       `(("perl" ,perl)
-         ("bowtie" ,bowtie)))
+       (list perl bowtie))
       (propagated-inputs
-       `(("r-misha" ,r-misha)
-         ("r-zoo" ,r-zoo)))
-      (native-inputs `(("r-knitr" ,r-knitr)))
+       (list r-misha r-zoo))
+      (native-inputs (list r-knitr))
       (home-page "https://github.com/tanaylab/umi4cpackage")
       (synopsis "Processing and analysis of UMI-4C contact profiles")
       (description "This is a package that lets you process UMI-4C data from
@@ -7779,16 +7659,16 @@ scratch to produce nice plots.")
       (properties `((upstream-name . "ShinyCell")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-data-table" ,r-data-table)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-glue" ,r-glue)
-         ("r-gridextra" ,r-gridextra)
-         ("r-hdf5r" ,r-hdf5r)
-         ("r-matrix" ,r-matrix)
-         ("r-r-utils" ,r-r-utils)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-readr" ,r-readr)
-         ("r-reticulate" ,r-reticulate)))
+       (list r-data-table
+             r-ggplot2
+             r-glue
+             r-gridextra
+             r-hdf5r
+             r-matrix
+             r-r-utils
+             r-rcolorbrewer
+             r-readr
+             r-reticulate))
       (home-page "https://github.com/SGDDNB/ShinyCell")
       (synopsis "Shiny interactive web apps for single-cell data")
       (description
@@ -7815,30 +7695,30 @@ single-cell data.")
       (properties `((upstream-name . "ArchR")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biocgenerics" ,r-biocgenerics)
-         ("r-biostrings" ,r-biostrings)
-         ("r-chromvar" ,r-chromvar)
-         ("r-complexheatmap" ,r-complexheatmap)
-         ("r-data-table" ,r-data-table)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gtable" ,r-gtable)
-         ("r-gtools" ,r-gtools)
-         ("r-magrittr" ,r-magrittr)
-         ("r-matrix" ,r-matrix)
-         ("r-matrixstats" ,r-matrixstats)
-         ("r-motifmatchr" ,r-motifmatchr)
-         ("r-nabor" ,r-nabor)
-         ("r-plyr" ,r-plyr)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rhdf5" ,r-rhdf5)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-stringr" ,r-stringr)
-         ("r-summarizedexperiment" ,r-summarizedexperiment)
-         ("r-uwot" ,r-uwot)))
+       (list r-biocgenerics
+             r-biostrings
+             r-chromvar
+             r-complexheatmap
+             r-data-table
+             r-genomicranges
+             r-ggplot2
+             r-ggrepel
+             r-gridextra
+             r-gtable
+             r-gtools
+             r-magrittr
+             r-matrix
+             r-matrixstats
+             r-motifmatchr
+             r-nabor
+             r-plyr
+             r-rcpp
+             r-rhdf5
+             r-rsamtools
+             r-s4vectors
+             r-stringr
+             r-summarizedexperiment
+             r-uwot))
       (home-page "https://github.com/GreenleafLab/ArchR")
       (synopsis "Analyze single-cell regulatory chromatin in R")
       (description
@@ -7860,21 +7740,21 @@ single-cell data.")
                 "10na2gyka24mszdxf92wz9h2c13hdf1ww30c68gfsw53lvvhhhxb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-mgcv" ,r-mgcv)
-       ("r-rook" ,r-rook)
-       ("r-rjson" ,r-rjson)
-       ("r-cairo" ,r-cairo)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-edger" ,r-edger)
-       ("r-quantreg" ,r-quantreg)
-       ("r-nnet" ,r-nnet)
-       ("r-rmtstat" ,r-rmtstat)
-       ("r-extremes" ,r-extremes)
-       ("r-pcamethods" ,r-pcamethods)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-flexmix" ,r-flexmix)))
+     (list r-rcpp
+           r-rcpparmadillo
+           r-mgcv
+           r-rook
+           r-rjson
+           r-cairo
+           r-rcolorbrewer
+           r-edger
+           r-quantreg
+           r-nnet
+           r-rmtstat
+           r-extremes
+           r-pcamethods
+           r-biocparallel
+           r-flexmix))
     (home-page "https://hms-dbmi.github.io/scde/")
     (synopsis "R package for analyzing single-cell RNA-seq data")
     (description "The SCDE package implements a set of statistical methods for
@@ -7916,7 +7796,7 @@ of transcriptional heterogeneity among single cells.")
                                (assoc-ref inputs "kentutils")
                                "/bin/bigWigToWig"))))))))
     (inputs
-     `(("kentutils" ,kentutils)))
+     (list kentutils))
     (home-page "https://github.com/tanaylab/misha")
     (synopsis "Toolkit for analysis of genomic data")
     (description "This package is intended to help users to efficiently
@@ -7944,18 +7824,18 @@ analyze genomic data resulting from various experiments.")
                  '(delete-file "inst/doc/shaman-package.R"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-data-table" ,r-data-table)
-         ("r-domc" ,r-domc)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-gviz" ,r-gviz)
-         ("r-misha" ,r-misha)
-         ("r-plyr" ,r-plyr)
-         ("r-rann" ,r-rann)
-         ("r-rcpp" ,r-rcpp)
-         ("r-reshape2" ,r-reshape2)
-         ;; For vignettes
-         ("r-rmarkdown" ,r-rmarkdown)
-         ("r-knitr" ,r-knitr)))
+       (list r-data-table
+             r-domc
+             r-ggplot2
+             r-gviz
+             r-misha
+             r-plyr
+             r-rann
+             r-rcpp
+             r-reshape2
+             ;; For vignettes
+             r-rmarkdown
+             r-knitr))
       (home-page "https://github.com/tanaylab/shaman")
       (synopsis "Sampling HiC contact matrices for a-parametric normalization")
       (description "The Shaman package implements functions for
@@ -8010,11 +7890,7 @@ information as possible.")
       (properties `((upstream-name . "deMULTIplex")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-kernsmooth" ,r-kernsmooth)
-         ("r-reshape2" ,r-reshape2)
-         ("r-rtsne" ,r-rtsne)
-         ("r-shortread" ,r-shortread)
-         ("r-stringdist" ,r-stringdist)))
+       (list r-kernsmooth r-reshape2 r-rtsne r-shortread r-stringdist))
       (home-page "https://github.com/chris-mcginnis-ucsf/MULTI-seq")
       (synopsis "MULTI-seq pre-processing and classification tools")
       (description
@@ -8053,17 +7929,17 @@ includes software to
              (substitute* "requirements.txt"
                (("==") ">=")))))))
     (inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-lxml" ,python-lxml)
-       ("python-ndg-httpsclient" ,python-ndg-httpsclient)
-       ("python-progressbar2" ,python-progressbar2)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-cryptography
+           python-intervaltree
+           python-jsonschema
+           python-lxml
+           python-ndg-httpsclient
+           python-progressbar2
+           python-pyasn1
+           python-pyopenssl
+           python-pyyaml
+           python-requests
+           python-termcolor))
     (home-page "https://gdc.nci.nih.gov/access-data/gdc-data-transfer-tool")
     (synopsis "GDC data transfer tool")
     (description "The gdc-client provides several convenience functions over
@@ -8095,12 +7971,9 @@ the GDC API which provides general download/upload via HTTPS.")
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("cityhash" ,cityhash)))
+     (list zlib bzip2 cityhash))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Sequence search tools for metagenomics")
     (description
      "VSEARCH supports DNA sequence searching, clustering, chimera detection,
@@ -8139,8 +8012,7 @@ Needleman-Wunsch).")
              (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
                (install-file "ParDRe" bin)))))))
     (inputs
-     `(("openmpi-c++" ,openmpi-c++)
-       ("zlib" ,zlib)))
+     (list openmpi-c++ zlib))
     (synopsis "Parallel tool to remove duplicate DNA reads")
     (description
      "ParDRe is a parallel tool to remove duplicate genetic sequence reads.
@@ -8171,7 +8043,7 @@ clusters.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #false))      ; there are none
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://github.com/cbg-ethz/ngshmmalign/")
     (synopsis "Profile HMM aligner for NGS reads")
     (description
@@ -8200,10 +8072,11 @@ experience substantial biological insertions and deletions.")
          (delete 'configure)
          (delete 'build)
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (scripts (find-files "." "prinseq.*.pl")))
+                    (scripts (find-files "." "prinseq.*.pl"))
+                    (guile (search-input-file inputs "bin/guile")))
                (substitute* scripts
                  (("\"perl -pe")
                   (string-append "\"" (which "perl") " -pe")))
@@ -8211,18 +8084,19 @@ experience substantial biological insertions and deletions.")
                            (chmod file #o555)
                            (install-file file bin)
                            (wrap-script (string-append bin "/" (basename file))
+                                        #:guile guile
                                         `("PERL5LIB" ":" prefix
                                           (,(getenv "PERL5LIB")))))
                          scripts)))))))
     (inputs
-     `(("guile" ,guile-3.0)             ; for wrapper scripts
-       ("perl" ,perl)
-       ("perl-cairo" ,perl-cairo)
-       ("perl-data-dumper" ,perl-data-dumper)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-json" ,perl-json)
-       ("perl-statistics-pca" ,perl-statistics-pca)))
+     (list guile-3.0 ; for wrapper scripts
+           perl
+           perl-cairo
+           perl-data-dumper
+           perl-digest-md5
+           perl-getopt-long
+           perl-json
+           perl-statistics-pca))
     (home-page "http://prinseq.sourceforge.net/")
     (synopsis "Preprocess sequence data in FASTA or FASTQ formats")
     (description
@@ -8264,23 +8138,23 @@ data.  It also generates basic statistics for your sequences.")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages"))
-                    (pythonpath (getenv "PYTHONPATH"))
+                    (pythonpath (getenv "GUIX_PYTHONPATH"))
                     (script (string-append out "/bin/shorah")))
                (chmod script #o555)
-               (wrap-program script `("PYTHONPATH" ":" prefix (,site ,pythonpath))))))
+               (wrap-program script `("GUIX_PYTHONPATH" ":" prefix (,site ,pythonpath))))))
          (add-after 'wrap-programs 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (invoke "make" "check")))))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)
-       ("python" ,python)
-       ("python-biopython" ,python-biopython)
-       ("python-numpy" ,python-numpy)
-       ("zlib" ,zlib)))
+     (list boost
+           htslib
+           python
+           python-biopython
+           python-numpy
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "")
     (synopsis "Short reads assembly into haplotypes")
     (description
@@ -8305,11 +8179,9 @@ frequency of the different genetic variants present in a mixed sample.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rspec ruby-rake-compiler))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Ruby bindings for the kseq.h FASTA/Q parser")
     (description
      "@code{Bio::Kseq} provides ruby bindings to the @code{kseq.h} FASTA and
@@ -8331,7 +8203,7 @@ quality scores.")
          "02vmrxyimkj9sahsp4zhfhnmbvz6dbbqz1y01vglf8cbwvkajfl0"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Tool for fast querying of genome locations")
     (description
      "Bio-locus is a tabix-like tool for fast querying of genome
@@ -8354,10 +8226,9 @@ chr+pos+alt information in a database.")
                 "1wf4qygcmdjgcqm6flmvsagfr1gs9lf63mj32qv3z1f481zc5692"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-bio-logger" ,ruby-bio-logger)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-bio-logger ruby-nokogiri))
     (inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Fast big data BLAST XML parser and library")
     (description
      "Very fast parallel big-data BLAST XML file parser which can be used as
@@ -8379,9 +8250,9 @@ generate FASTA, JSON, YAML, RDF, JSON-LD, HTML, CSV, tabular output etc.")
          "1d56amdsjv1mag7m6gv2w0xij8hqx1v5xbdjsix8sp3yp36m7938"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-libxml" ,ruby-libxml)))
+     (list ruby-libxml))
     (native-inputs
-     `(("which" ,which)))  ; required for test phase
+     (list which))  ; required for test phase
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8422,7 +8293,7 @@ BLAST, KEGG, GenBank, MEDLINE and GO.")
           "1glw5pn9s8z13spxk6yyfqaz80n9lga67f33w35nkpq9dwi2vg6g"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-cucumber" ,ruby-cucumber)))
+     (list ruby-cucumber))
     (synopsis "Smart VCF parser DSL")
     (description
      "Bio-vcf provides a @acronym{DSL, domain specific language} for processing
@@ -8465,16 +8336,16 @@ including VCF header and contents in RDF and JSON.")
       (inputs
        `(("r" ,r-minimal)))
       (propagated-inputs
-       `(("r-catools" ,r-catools)
-         ("r-snow" ,r-snow)
-         ("r-snowfall" ,r-snowfall)
-         ("r-bitops" ,r-bitops)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-spp" ,r-spp)
-         ("gawk" ,gawk)
-         ("samtools" ,samtools)
-         ("boost" ,boost)
-         ("gzip" ,gzip)))
+       (list r-catools
+             r-snow
+             r-snowfall
+             r-bitops
+             r-rsamtools
+             r-spp
+             gawk
+             samtools
+             boost
+             gzip))
       (home-page "https://github.com/kundajelab/phantompeakqualtools")
       (synopsis "Informative enrichment for ChIP-seq data")
       (description "This package computes informative enrichment and quality
@@ -8497,8 +8368,7 @@ characteristic tag shift values in these assays.")
          "1p0i78wh76jfgmn9jphbwwaz6yy6pipzfg08xs54cxavxg2j81p5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-optparse" ,r-optparse)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-optparse r-rcolorbrewer))
     (home-page "https://www.e-rna.org/r-chie/index.cgi")
     (synopsis "Analysis framework for RNA secondary structure")
     (description
@@ -8550,7 +8420,7 @@ secondary structure and comparative analysis in R.")
        ("guile-json" ,guile-json-1)
        ("guile-redis" ,guile2.2-redis)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/BIMSBbioinfo/rcas-web")
     (synopsis "Web interface for RNA-centric annotation system (RCAS)")
     (description "This package provides a simple web interface for the
@@ -8575,16 +8445,16 @@ secondary structure and comparative analysis in R.")
            "14bj5qhjm1hsm9ay561nfbqi9wxsa7y487df2idsaaf6z10nw4v0"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-iranges" ,r-iranges)
-         ("r-xvector" ,r-xvector)
-         ("r-biostrings" ,r-biostrings)
-         ("r-bsgenome" ,r-bsgenome)
-         ("r-gtools" ,r-gtools)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-sfsmisc" ,r-sfsmisc)
-         ("r-kernlab" ,r-kernlab)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-biocgenerics" ,r-biocgenerics)))
+       (list r-iranges
+             r-xvector
+             r-biostrings
+             r-bsgenome
+             r-gtools
+             r-genomicranges
+             r-sfsmisc
+             r-kernlab
+             r-s4vectors
+             r-biocgenerics))
       (home-page "https://github.com/ManuSetty/ChIPKernels")
       (synopsis "Build string kernels for DNA Sequence analysis")
       (description "ChIPKernels is an R package for building different string
@@ -8609,12 +8479,12 @@ Sequences.")
          "1r6ywvhxl3ffv48lgj7sbd582mcc6dha3ksgc2qjlvjrnkbj3799"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biostrings" ,r-biostrings)
-       ("r-chipkernels" ,r-chipkernels)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-spams" ,r-spams)
-       ("r-wgcna" ,r-wgcna)
-       ("r-fastcluster" ,r-fastcluster)))
+     (list r-biostrings
+           r-chipkernels
+           r-genomicranges
+           r-spams
+           r-wgcna
+           r-fastcluster))
     (home-page "https://github.com/ManuSetty/SeqGL")
     (synopsis "Group lasso for Dnase/ChIP-seq data")
     (description "SeqGL is a group lasso based algorithm to extract
@@ -8639,8 +8509,8 @@ factors bound at the specific regions.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "--with-hpdf="
-                            (assoc-ref %build-inputs "libharu")))
+       ,#~(list (string-append "--with-hpdf="
+                               #$(this-package-input "libharu")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-checks
@@ -8664,17 +8534,14 @@ AM_CONDITIONAL(AMPNG, true)"))
          (add-after 'disable-update-check 'autogen
            (lambda _ (invoke "autoreconf" "-vif") #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("libpng" ,libpng)
-       ("gd" ,gd)
-       ("libx11" ,libx11)
-       ("libharu" ,libharu)
-       ("zlib" ,zlib)))
+     (list perl
+           libpng
+           gd
+           libx11
+           libharu
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "http://emboss.sourceforge.net")
     (synopsis "Molecular biology analysis suite")
     (description "EMBOSS is the \"European Molecular Biology Open Software
@@ -8722,8 +8589,7 @@ tools for sequence analysis into a seamless whole.")
                 "bin" (string-append (assoc-ref outputs "out") "/bin"))
                #t)))))
       (inputs
-       `(("gsl" ,gsl)
-         ("zlib" ,zlib)))
+       (list gsl zlib))
       (home-page "https://github.com/arq5x/bits")
       (synopsis "Implementation of binary interval search algorithm")
       (description "This package provides an implementation of the
@@ -8759,21 +8625,19 @@ intervals (e.g. genes, sequence alignments).")
              (lambda* (#:key inputs #:allow-other-keys)
                (for-each (lambda (file)
                            (install-file file "./src/smithlab_cpp/"))
-                         (find-files (assoc-ref inputs "smithlab-cpp")))
-               #t))
+                         (find-files (assoc-ref inputs "smithlab-cpp")))))
            (add-after 'install 'install-to-store
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin")))
                  (for-each (lambda (file)
                              (install-file file bin))
-                           (find-files "bin" ".*")))
-               #t)))
+                           (find-files "bin" ".*"))))))
          #:configure-flags
-         (list (string-append "--with-bam_tools_headers="
-                              (assoc-ref %build-inputs "bamtools") "/include/bamtools")
-               (string-append "--with-bam_tools_library="
-                              (assoc-ref %build-inputs "bamtools") "/lib/bamtools"))))
+         ,#~(list (string-append "--with-bam_tools_headers="
+                                 #$(this-package-input "bamtools") "/include/bamtools")
+                  (string-append "--with-bam_tools_library="
+                                 #$(this-package-input "bamtools") "/lib/bamtools"))))
       (inputs
        `(("bamtools" ,bamtools)
          ("samtools" ,samtools-0.1)
@@ -8815,9 +8679,7 @@ may optionally be provided to further inform the peak-calling process.")
      `(#:python ,python-2 ; python2 only
        #:tests? #f)) ; no tests included
     (propagated-inputs
-     `(("python2-numpy" ,python2-numpy)
-       ("python2-scipy" ,python2-scipy)
-       ("python2-pysam" ,python2-pysam)))
+     (list python2-numpy python2-scipy python2-pysam))
     (home-page "https://github.com/shawnzhangyx/PePr")
     (synopsis "Peak-calling and prioritization pipeline for ChIP-Seq data")
     (description
@@ -8885,23 +8747,27 @@ replacement for strverscmp.")
                  ;; ModuleNotFoundError: No module named 'multiqc.modules.ccs'
                  (delete-file "/tmp/tests/unit_tests/test_ccs.py")
                  (with-directory-excursion "/tmp/tests"
-                   (setenv "PYTHONPATH" (string-append here ":" (getenv "PYTHONPATH")))
-                   (invoke "python" "-munittest" "discover")))))))))
+                   (setenv "GUIX_PYTHONPATH"
+                           (string-append here ":" (getenv "GUIX_PYTHONPATH")))
+                   (invoke "python" "-munittest" "discover"))))))
+         ;; TODO: importing the picard and gatk modules fails for unknown
+         ;; reasons.
+         (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-coloredlogs" ,python-coloredlogs)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-lzstring" ,python-lzstring)
-       ("python-markdown" ,python-markdown)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-rich" ,python-rich)
-       ("python-simplejson" ,python-simplejson)
-       ("python-spectra" ,python-spectra)))
+     (list python-click
+           python-coloredlogs
+           python-future
+           python-jinja2
+           python-lzstring
+           python-markdown
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-pyyaml
+           python-requests
+           python-rich
+           python-simplejson
+           python-spectra))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("tests"
@@ -8940,19 +8806,16 @@ common bioinformatics tools.")
          "12ibdmksj7icyqhks4xyvd61bygk4pjmxn618kp6vgk1af01y34g"))))
     (build-system python-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("c-blosc" ,c-blosc)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("hdf5-blosc" ,hdf5-blosc)
-       ("python-cython" ,python-cython)
-       ("zlib" ,zlib)))
+     (list boost
+           c-blosc
+           gsl
+           hdf5
+           hdf5-blosc
+           python-cython
+           zlib))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pycurl" ,python-pycurl)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-scipy" ,python-scipy)
-       ("python-tables" ,python-tables)))
+     (list python-numpy python-pycurl python-pyzmq python-scipy
+           python-tables))
     (home-page "https://vatlab.github.io/vat-docs/")
     (synopsis "Analyze genetic variants from Next-Gen sequencing studies")
     (description
@@ -8978,11 +8841,7 @@ manipulate and analyze genetic variants.")
     (properties `((upstream-name . "RareMETALS2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-seqminer" ,r-seqminer)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-mass" ,r-mass)
-       ("r-compquadform" ,r-compquadform)
-       ("r-getopt" ,r-getopt)))
+     (list r-seqminer r-mvtnorm r-mass r-compquadform r-getopt))
     (home-page "http://genome.sph.umich.edu/wiki/RareMETALS2")
     (synopsis "Analyze gene-level association tests for binary trait")
     (description
@@ -9013,11 +8872,7 @@ trait.")
            "0sbzma49aiiyw8b0jpr7fnhzys9nsqmp4hy4hdz1gzyg1lhnca26"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-ggplot2" ,r-ggplot2)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gplots" ,r-gplots)
-         ("r-plyr" ,r-plyr)))
+       (list r-ggplot2 r-rcolorbrewer r-gridextra r-gplots r-plyr))
       (home-page "https://github.com/rajewsky-lab/dropbead")
       (synopsis "Basic exploration and analysis of Drop-seq data")
       (description "This package offers a quick and straight-forward way to
@@ -9049,41 +8904,41 @@ droplet sequencing.  It has been particularly tailored for Drop-seq.")
       (properties `((upstream-name . "CellChat")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biocgenerics" ,r-biocgenerics)
-         ("r-circlize" ,r-circlize)
-         ("r-colorspace" ,r-colorspace)
-         ("r-complexheatmap" ,r-complexheatmap)
-         ("r-cowplot" ,r-cowplot)
-         ("r-dplyr" ,r-dplyr)
-         ("r-expm" ,r-expm)
-         ("r-fnn" ,r-fnn)
-         ("r-forcats" ,r-forcats)
-         ("r-future" ,r-future)
-         ("r-future-apply" ,r-future-apply)
-         ("r-gg-gap" ,r-gg-gap)
-         ("r-ggalluvial" ,r-ggalluvial)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-igraph" ,r-igraph)
-         ("r-irlba" ,r-irlba)
-         ("r-magrittr" ,r-magrittr)
-         ("r-matrix" ,r-matrix)
-         ("r-nmf" ,r-nmf)
-         ("r-patchwork" ,r-patchwork)
-         ("r-pbapply" ,r-pbapply)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcppeigen" ,r-rcppeigen)
-         ("r-reshape2" ,r-reshape2)
-         ("r-reticulate" ,r-reticulate)
-         ("r-rspectra" ,r-rspectra)
-         ("r-rtsne" ,r-rtsne)
-         ("r-scales" ,r-scales)
-         ("r-shape" ,r-shape)
-         ("r-sna" ,r-sna)
-         ("r-stringr" ,r-stringr)
-         ("r-svglite" ,r-svglite)))
-      (native-inputs `(("r-knitr" ,r-knitr)))
+       (list r-biocgenerics
+             r-circlize
+             r-colorspace
+             r-complexheatmap
+             r-cowplot
+             r-dplyr
+             r-expm
+             r-fnn
+             r-forcats
+             r-future
+             r-future-apply
+             r-gg-gap
+             r-ggalluvial
+             r-ggplot2
+             r-ggrepel
+             r-igraph
+             r-irlba
+             r-magrittr
+             r-matrix
+             r-nmf
+             r-patchwork
+             r-pbapply
+             r-rcolorbrewer
+             r-rcpp
+             r-rcppeigen
+             r-reshape2
+             r-reticulate
+             r-rspectra
+             r-rtsne
+             r-scales
+             r-shape
+             r-sna
+             r-stringr
+             r-svglite))
+      (native-inputs (list r-knitr))
       (home-page "https://github.com/sqjin/CellChat")
       (synopsis "Analysis of cell-cell communication from single-cell transcriptomics data")
       (description
@@ -9116,27 +8971,22 @@ communication networks from scRNA-seq data.")
            (lambda _
              (substitute* "Makefile"
                ;; We use ldc2 instead of ldmd2 to compile sambamba.
-               (("\\$\\(shell which ldmd2\\)") (which "ldc2")))
-             #t))
+               (("\\$\\(shell which ldmd2\\)") (which "ldc2")))))
          (add-after 'unpack 'unbundle-prerequisites
            (lambda _
              (substitute* "Makefile"
                (("= lz4/lib/liblz4.a") "= -L-llz4")
-               (("ldc_version_info lz4-static") "ldc_version_info"))
-             #t))
+               (("ldc_version_info lz4-static") "ldc_version_info"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
                (mkdir-p bin)
                (copy-file (string-append "bin/sambamba-" ,version)
-                          (string-append bin "/sambamba"))
-               #t))))))
+                          (string-append bin "/sambamba"))))))))
     (native-inputs
-     `(("python" ,python)))
+     (list python))
     (inputs
-     `(("ldc" ,ldc)
-       ("lz4" ,lz4)
-       ("zlib" ,zlib)))
+     (list ldc lz4 zlib))
     (home-page "https://github.com/biod/sambamba")
     (synopsis "Tools for working with SAM/BAM data")
     (description "Sambamba is a high performance modern robust and
@@ -9179,10 +9029,7 @@ sort, markdup, and depth.")
                (install-file "bin/Ritornello" bin)
                #t))))))
     (inputs
-     `(("samtools" ,samtools-0.1)
-       ("fftw" ,fftw)
-       ("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list samtools-0.1 fftw boost zlib))
     (home-page "https://github.com/KlugerLab/Ritornello")
     (synopsis "Control-free peak caller for ChIP-seq data")
     (description "Ritornello is a ChIP-seq peak calling algorithm based on
@@ -9248,12 +9095,9 @@ with narrow binding events such as transcription factor ChIP-seq.")
                (install-file "trim_galore" bin)
                #t))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl" ,perl)
-       ("pigz" ,pigz)
-       ("cutadapt" ,cutadapt)))
+     (list gzip perl pigz cutadapt))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/")
     (synopsis "Wrapper around Cutadapt and FastQC")
     (description "Trim Galore! is a wrapper script to automate quality and
@@ -9304,7 +9148,8 @@ matplotlib.use('Agg')
 " line)))
                ;; Make sure GESS has all modules in its path
                (wrap-script (string-append target "GESS.py")
-                 `("PYTHONPATH" ":" = (,target ,(getenv "PYTHONPATH"))))
+                 #:guile (search-input-file inputs "bin/guile")
+                 `("GUIX_PYTHONPATH" ":" = (,target ,(getenv "GUIX_PYTHONPATH"))))
                (mkdir-p bin)
                (symlink (string-append target "GESS.py")
                         (string-append bin "GESS.py"))
@@ -9329,7 +9174,7 @@ exon-skipping scanner detection scheme.")
 (define-public phylip
   (package
     (name "phylip")
-    (version "3.696")
+    (version "3.697")
     (source
      (origin
        (method url-fetch)
@@ -9337,16 +9182,16 @@ exon-skipping scanner detection scheme.")
                            "download/phylip-" version ".tar.gz"))
        (sha256
         (base32
-         "01jar1rayhr2gba2pgbw49m56rc5z4p5wn3ds0m188hrlln4a2nd"))))
+         "1h8h0nafnlbqryswxgplx80k2044yhfz97jh13vsgzlaifqdh9ls"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
-       #:make-flags (list "-f" "Makefile.unx" "install")
+       #:make-flags (list "-f" "Makefile.unx" "CFLAGS=-fcommon" "install")
        #:parallel-build? #f             ; not supported
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir "src") #t))
+           (lambda _ (chdir "src")))
          (delete 'configure)
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -9355,8 +9200,7 @@ exon-skipping scanner detection scheme.")
                (mkdir-p target)
                (for-each (lambda (file)
                            (install-file file target))
-                         (find-files "../exe" ".*")))
-             #t)))))
+                         (find-files "../exe" ".*"))))))))
     (home-page "http://evolution.genetics.washington.edu/phylip/")
     (synopsis "Tools for inferring phylogenies")
     (description "PHYLIP (the PHYLogeny Inference Package) is a package of
@@ -9377,9 +9221,7 @@ programs for inferring phylogenies (evolutionary trees).")
          "05hsrnkpkajppa3f45x4qsarnkj616hlby749zxg4is3bv4i6b5y"))))
     (build-system cmake-build-system)
     (arguments
-     `( ;; CMake 3.17 or newer is required for the CMAKE_TEST_ARGUMENTS used
-       ;; below to have an effect.
-       #:cmake ,cmake
+     `(#:tests? #false ; The test suite is notoriously fickle
        #:configure-flags
        (let ((disabled-tests
               '("expensive"                 ;exclude expensive tests
@@ -9401,22 +9243,19 @@ programs for inferring phylogenies (evolutionary trees).")
      `(("python" ,python-wrapper)
        ("swig" ,swig)))
     (inputs
-     `(("boost" ,boost)
-       ("cgal" ,cgal)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("fftw" ,fftw)
-       ("eigen" ,eigen)
-       ;; Enabling MPI causes the build to use all the available memory and
-       ;; fail (tested on a machine with 32 GiB of RAM).
-       ;;("mpi" ,openmpi)
-       ("opencv" ,opencv)))
+     (list boost
+           cgal
+           gsl
+           hdf5
+           fftw
+           eigen
+           ;; Enabling MPI causes the build to use all the available memory and
+           ;; fail (tested on a machine with 32 GiB of RAM).
+           ;;("mpi" ,openmpi)
+           opencv))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-networkx" ,python-networkx)))
+     (list python-numpy python-scipy python-pandas python-scikit-learn
+           python-networkx))
     (home-page "https://integrativemodeling.org")
     (synopsis "Integrative modeling platform")
     (description "IMP's broad goal is to contribute to a comprehensive
@@ -9431,66 +9270,72 @@ applications for tackling some common problems in a user-friendly way.")
     (license (list license:lgpl2.1+
                    license:gpl3+))))
 
+;; We use this seemingly arbitrary commit because of
+;; https://github.com/3DGenomes/TADbit/issues/371
 (define-public tadbit
-  (package
-    (name "tadbit")
-    (version "1.0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/3DGenomes/TADbit")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0hqrlymh2a2bimcfdvlssy1x5h1lp3h1c5a7jj11hmcqczzqn3ni"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-problems-with-setup.py
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Don't attempt to install the bash completions to
-             ;; the home directory.
-             (rename-file "extras/.bash_completion"
-                          "extras/tadbit")
-             (substitute* "setup.py"
-               (("\\(path.expanduser\\('~'\\)")
-                (string-append "(\""
-                               (assoc-ref outputs "out")
-                               "/etc/bash_completion.d\""))
-               (("extras/\\.bash_completion")
-                "extras/tadbit"))
-             #t))
-         (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python3" "test/test_all.py")
-             #t)))))
-    (native-inputs
-     `(("glib" ,glib "bin")             ;for gtester
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     ;; TODO: add Chimera for visualization
-     `(("imp" ,imp)
-       ("mcl" ,mcl)
-       ("python-future" ,python-future)
-       ("python-h5py" ,python-h5py)
-       ("python-scipy" ,python-scipy)
-       ("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pysam" ,python-pysam)))
-    (home-page "https://3dgenomes.github.io/TADbit/")
-    (synopsis "Analyze, model, and explore 3C-based data")
-    (description
-     "TADbit is a complete Python library to deal with all steps to analyze,
+  (let ((commit "5c4c1ddaadfbaf7e6edc58173e46d801093bdc9b")
+        (revision "1"))
+    (package
+      (name "tadbit")
+      (version (git-version "1.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/3DGenomes/TADbit")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "17nwlvjgqpa7x6jgh56m3di61ynaz34kl1jamyv7r2a5rhfcbkla"))))
+      (build-system python-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-problems-with-setup.py
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "src/test/Makefile"
+                 (("^CFLAGS=") "CFLAGS= -fcommon"))
+               
+               ;; Don't attempt to install the bash completions to
+               ;; the home directory.
+               (rename-file "extras/.bash_completion"
+                            "extras/tadbit")
+               (substitute* "setup.py"
+                 (("\\(path.expanduser\\('~'\\)")
+                  (string-append "(\""
+                                 (assoc-ref outputs "out")
+                                 "/etc/bash_completion.d\""))
+                 (("extras/\\.bash_completion")
+                  "extras/tadbit"))))
+           (replace 'check
+             (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+               (when tests?
+                 (add-installed-pythonpath inputs outputs)
+                 (invoke "python3" "test/test_all.py")))))))
+      (native-inputs
+       (list `(,glib "bin") ;for gtester
+             pkg-config))
+      (inputs
+       ;; TODO: add Chimera for visualization
+       (list imp
+             mcl
+             python-future
+             python-h5py
+             python-scipy
+             python-numpy
+             python-matplotlib
+             python-pysam))
+      (home-page "https://3dgenomes.github.io/TADbit/")
+      (synopsis "Analyze, model, and explore 3C-based data")
+      (description
+       "TADbit is a complete Python library to deal with all steps to analyze,
 model, and explore 3C-based data.  With TADbit the user can map FASTQ files to
 obtain raw interaction binned matrices (Hi-C like matrices), normalize and
 correct interaction matrices, identify and compare the so-called
 @dfn{Topologically Associating Domains} (TADs), build 3D models from the
 interaction matrices, and finally, extract structural properties from the
 models.  TADbit is complemented by TADkit for visualizing 3D models.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public kentutils
   (package
@@ -9628,9 +9473,7 @@ browser.")
                 (modules '((guix build utils)))
                 ;; Remove bundled Java library archives.
                 (snippet
-                 '(begin
-                    (for-each delete-file (find-files "lib" ".*"))
-                    #t))))
+                 '(for-each delete-file (find-files "lib" ".*")))))
       (build-system ant-build-system)
       (arguments
        `(#:tests? #f ; no tests included
@@ -9647,18 +9490,20 @@ browser.")
                  (substitute* "bin/linux/fseq"
                    (("java") (which "java"))
                    (("\\$REALDIR/../lib/commons-cli-1.1.jar")
-                    (string-append (assoc-ref inputs "java-commons-cli")
-                                   "/share/java/commons-cli.jar"))
+                    (search-input-file inputs
+                                       (string-append "/lib/m2/commons-cli/commons-cli/"
+                                                      ,(package-version java-commons-cli)
+                                                      "/commons-cli-"
+                                                      ,(package-version java-commons-cli)
+                                                      ".jar")))
                    (("REALDIR=.*")
                     (string-append "REALDIR=" bin "\n")))
                  (install-file "README.txt" doc)
                  (install-file "bin/linux/fseq" bin)
                  (install-file "build~/fseq.jar" lib)
-                 (copy-recursively "lib" lib)
-                 #t))))))
+                 (copy-recursively "lib" lib)))))))
       (inputs
-       `(("perl" ,perl)
-         ("java-commons-cli" ,java-commons-cli)))
+       (list perl java-commons-cli))
       (home-page "https://fureylab.web.unc.edu/software/fseq/")
       (synopsis "Feature density estimator for high-throughput sequence tags")
       (description
@@ -9744,9 +9589,7 @@ Browser.")
                                  "/bin/gunzip -c")))
                #t))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl-carp" ,perl-carp)
-       ("perl-getopt-long" ,perl-getopt-long)))
+     (list gzip perl-carp perl-getopt-long))
     (native-inputs
      `(("plotly.js"
         ,(origin
@@ -9797,15 +9640,14 @@ straight away.  Its main features are:
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there are no tests
-       #:make-flags '("CC=gcc")
+       #:make-flags '("CC=gcc" "CFLAGS=-fcommon -O3")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
              (substitute* "src/BFdriver.c"
                (("/bin/bash") (which "bash")))
-             (chdir "src")
-             #t))
+             (chdir "src")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((tools '("baseml" "basemlg" "codeml"
@@ -9815,8 +9657,7 @@ straight away.  Its main features are:
                                            "/share/doc/paml")))
                (mkdir-p bin)
                (for-each (lambda (file) (install-file file bin)) tools)
-               (copy-recursively "../doc" docdir)
-               #t))))))
+               (copy-recursively "../doc" docdir)))))))
     (home-page "http://abacus.gene.ucl.ac.uk/software/paml.html")
     (synopsis "Phylogentic analysis by maximum likelihood")
     (description "PAML (for Phylogentic Analysis by Maximum Likelihood)
@@ -9857,11 +9698,9 @@ using nucleotide or amino-acid sequence data.")
                            (install-file exe bin))
                          exes)))))))
     (inputs
-     `(("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list htslib ncurses zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.bioinf.uni-leipzig.de/Software/segemehl")
     (synopsis "Map short sequencer reads to reference genomes")
     (description "Segemehl is software to map short sequencer reads to
@@ -9910,9 +9749,7 @@ output of segemehl is a SAM or BAM formatted alignment file.")
                (("include_directories\\(\\.\\./ext/htslib\\)") ""))
              #t)))))
     (inputs
-     `(("hdf5" ,hdf5)
-       ("htslib" ,htslib-1.9)
-       ("zlib" ,zlib)))
+     (list hdf5 htslib-1.9 zlib))
     (home-page "https://pachterlab.github.io/kallisto/")
     (synopsis "Near-optimal RNA-Seq quantification")
     (description
@@ -9962,31 +9799,29 @@ dependency like SeqAn.")
                (base32
                 "1amcc5hqvsl42hg4x19bi9vy47cl874s0lw1fmi0hwsdk9i8c03v"))
               (modules '((guix build utils)))
+              ;; Delete bundled headers for eigen3.
               (snippet
-               '(begin
-                  ;; Delete bundled headers for eigen3.
-                  (delete-file-recursively "include/eigen3/")
-                  #t))))
+               '(delete-file-recursively "include/eigen3/"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "-DBOOST_INCLUDEDIR="
-                            (assoc-ref %build-inputs "boost")
-                            "/include/")
-             (string-append "-DBOOST_LIBRARYDIR="
-                            (assoc-ref %build-inputs "boost")
-                            "/lib/")
-             (string-append "-DBoost_LIBRARIES="
-                            "-lboost_iostreams "
-                            "-lboost_filesystem "
-                            "-lboost_system "
-                            "-lboost_thread "
-                            "-lboost_timer "
-                            "-lboost_chrono "
-                            "-lboost_program_options")
-             "-DBoost_FOUND=TRUE"
-             ;; Don't download RapMap---we already have it!
-             "-DFETCHED_RAPMAP=1")
+       ,#~(list (string-append "-DBOOST_INCLUDEDIR="
+                               #$(this-package-input "boost")
+                               "/include/")
+                (string-append "-DBOOST_LIBRARYDIR="
+                               #$(this-package-input "boost")
+                               "/lib/")
+                (string-append "-DBoost_LIBRARIES="
+                               "-lboost_iostreams "
+                               "-lboost_filesystem "
+                               "-lboost_system "
+                               "-lboost_thread "
+                               "-lboost_timer "
+                               "-lboost_chrono "
+                               "-lboost_program_options")
+                "-DBoost_FOUND=TRUE"
+                ;; Don't download RapMap---we already have it!
+                "-DFETCHED_RAPMAP=1")
        ;; Tests must be run after installation and the location of the test
        ;; data file must be overridden.  But the tests fail.  It looks like
        ;; they are not really meant to be run.
@@ -9997,30 +9832,22 @@ dependency like SeqAn.")
          (add-after 'unpack 'do-not-look-for-boost
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "CMakeLists.txt"
-               (("find_package\\(Boost 1\\.53\\.0") "#"))
-             #t))
+               (("find_package\\(Boost 1\\.53\\.0") "#"))))
          (add-after 'unpack 'do-not-assign-to-macro
            (lambda _
              (substitute* "include/spdlog/details/format.cc"
-               (("const unsigned CHAR_WIDTH = 1;") ""))
-             #t))
+               (("const unsigned CHAR_WIDTH = 1;") ""))))
          (add-after 'unpack 'prepare-rapmap
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((src "external/install/src/rapmap/")
                    (include "external/install/include/rapmap/")
                    (rapmap (assoc-ref inputs "rapmap")))
-               (mkdir-p "/tmp/rapmap")
-               (invoke "tar" "xf"
-                       (assoc-ref inputs "rapmap")
-                       "-C" "/tmp/rapmap"
-                       "--strip-components=1")
                (mkdir-p src)
                (mkdir-p include)
                (for-each (lambda (file)
                            (install-file file src))
-                         (find-files "/tmp/rapmap/src" "\\.(c|cpp)"))
-               (copy-recursively "/tmp/rapmap/include" include))
-             #t))
+                         (find-files (string-append rapmap "/src") "\\.(c|cpp)"))
+               (copy-recursively (string-append rapmap "/include") include))))
          (add-after 'unpack 'use-system-libraries
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("src/SailfishIndexer.cpp"
@@ -10035,17 +9862,18 @@ dependency like SeqAn.")
                (("#include \"jellyfish/config.h\"") ""))
              (substitute* "src/CMakeLists.txt"
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/include/jellyfish-2.2..")
-                (string-append (assoc-ref inputs "jellyfish")
-                               "/include/jellyfish-" ,(package-version jellyfish)))
+                (search-input-directory
+                 inputs
+                 (string-append "/include/jellyfish-" ,(package-version jellyfish))))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libjellyfish-2.0.a")
-                (string-append (assoc-ref inputs "jellyfish")
-                               "/lib/libjellyfish-2.0.a"))
+                (search-input-file inputs
+                                   "/lib/libjellyfish-2.0.a"))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort.a")
-                (string-append (assoc-ref inputs "libdivsufsort")
-                               "/lib/libdivsufsort.so"))
+                (search-input-file inputs
+                                   "/lib/libdivsufsort.so"))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort64.a")
-                (string-append (assoc-ref inputs "libdivsufsort")
-                               "/lib/libdivsufsort64.so")))
+                (search-input-file inputs
+                                   "/lib/libdivsufsort64.so")))
              (substitute* "CMakeLists.txt"
                ;; Don't prefer static libs
                (("SET\\(CMAKE_FIND_LIBRARY_SUFFIXES.*") "")
@@ -10057,10 +9885,10 @@ dependency like SeqAn.")
 
              ;; Ensure that Eigen headers can be found
              (setenv "CPLUS_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "eigen")
-                                    "/include/eigen3:"
-                                    (or (getenv "CPLUS_INCLUDE_PATH") "")))
-             #t)))))
+                     (string-append (search-input-directory
+                                     inputs "/include/eigen3")
+                                    ":"
+                                    (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (inputs
      `(("boost" ,boost)
        ("eigen" ,eigen)
@@ -10081,14 +9909,13 @@ dependency like SeqAn.")
                     (snippet
                      '(begin (delete-file-recursively "include/spdlog")
                              (for-each delete-file '("include/xxhash.h"
-                                                     "src/xxhash.c"))
-                             #t))))
+                                                     "src/xxhash.c"))))))
        ("libdivsufsort" ,libdivsufsort)
        ("libgff" ,libgff)
-       ("tbb" ,tbb)
+       ("tbb" ,tbb-2020)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.cs.cmu.edu/~ckingsf/software/sailfish/")
     (synopsis "Mapping-based isoform quantification from RNA-Seq reads")
     (description "Sailfish is a tool for genomic transcript quantification
@@ -10142,7 +9969,7 @@ The following file formats are supported:
 (define-public salmon
   (package
     (name "salmon")
-    (version "1.4.0")
+    (version "1.6.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -10151,7 +9978,7 @@ The following file formats are supported:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1di7y2s8cjr9480lngcmaz3wcabc1lpkyanzbhir1nkhcjmj70h4"))
+                "1wb5wl0rc77svbwq6zvak5h7pf9acw3di0vz5i3gqyhg5l6qd736"))
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled headers for eigen3.
@@ -10159,14 +9986,15 @@ The following file formats are supported:
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "-Dlibgff_DIR="
-                            (assoc-ref %build-inputs "libgff") "/lib")
-             "-Dlibgff_FOUND=TRUE"
-             "-DTBB_FOUND=TRUE"
-             "-DTBB_VERSION=2020.3"
-             "-DTBB_LIBRARIES=tbb -ltbbmalloc"
-             "-DFETCHED_PUFFERFISH=TRUE"
-             "-DUSE_SHARED_LIBS=TRUE")
+       ,#~(list (string-append "-Dlibgff_DIR="
+                               #$(this-package-input "libgff") "/lib")
+                "-DCMAKE_CXX_FLAGS=\"-DHAVE_NUMERIC_LIMITS128=1\""
+                "-Dlibgff_FOUND=TRUE"
+                "-DTBB_FOUND=TRUE"
+                #$(string-append "-DTBB_VERSION=" (package-version tbb-2020))
+                "-DTBB_LIBRARIES=tbb -ltbbmalloc"
+                "-DFETCHED_PUFFERFISH=TRUE"
+                "-DUSE_SHARED_LIBS=TRUE")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'prepare-pufferfish
@@ -10256,13 +10084,13 @@ The following file formats are supported:
                         (file-name (git-file-name "pufferfish" version))
                         (sha256
                          (base32
-                          "0qb4a2nl1d59qasr17sslgxnkjd5kbk5mns4cjshrmsvkrqp995n"))))
-       ("tbb" ,tbb)
+                          "0jakgpbanl6cs23x3g26iab54p7zylcf9v8vc32ps57smp8wql52"))))
+       ("tbb" ,tbb-2020)
        ("libstadenio-for-salmon" ,libstadenio-for-salmon)
        ("xz" ,xz)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/COMBINE-lab/salmon")
     (synopsis "Quantification from RNA-seq reads using lightweight alignments")
     (description "Salmon is a program to produce highly-accurate,
@@ -10293,18 +10121,11 @@ variational inference.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest" "tests")
-             #t)))))
+             (invoke "pytest" "tests"))))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-h5py python-numpy python-pandas python-scipy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/linnarsson-lab/loompy")
     (synopsis "Work with .loom files for single-cell RNA-seq data")
     (description "The loom file format is an efficient format for very large
@@ -10326,7 +10147,7 @@ single-cell RNA-seq data.")
         (base32 "0bccs37d5saxn5xsd2rfpkrnc5a120xs3ibizai66fgvp1vxbnc4"))))
     (build-system python-build-system)
     (arguments `(#:tests? #false)) ; require internet access
-    (propagated-inputs `(("python-requests" ,python-requests)))
+    (propagated-inputs (list python-requests))
     (home-page "https://github.com/biothings/biothings_client.py")
     (synopsis "Python client for BioThings API services")
     (description "This package provides a Python client for BioThings
@@ -10345,7 +10166,7 @@ API services.")
         (base32 "1snszwdgfygchxshcbry3b5pbcw3g1isp8dw46razxccqaxwlag7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-biothings-client" ,python-biothings-client)))
+     (list python-biothings-client))
     (home-page "https://github.com/biothings/mygene.py")
     (synopsis "Python Client for MyGene.Info services.")
     (description "MyGene.Info provides simple-to-use REST web services
@@ -10421,8 +10242,7 @@ MyGene.Info services.")
            ;; There is no install target
            (replace 'install (install-jars ".")))))
       (propagated-inputs
-       `(("java-commons-codec" ,java-commons-codec)
-         ("java-openchart2" ,java-openchart2)))
+       (list java-commons-codec java-openchart2))
       (home-page "https://sites.google.com/site/cmzmasek/home/software/forester")
       (synopsis "Phylogenomics libraries for Java")
       (description "Forester is a collection of Java libraries for
@@ -10494,8 +10314,7 @@ reading, writing, and exporting phylogenetic trees.")
          ;; There is no install target
          (replace 'install (install-jars ".")))))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)
-       ("java-openchart2" ,java-openchart2)))
+     (list java-commons-codec java-openchart2))
     ;; The source archive does not contain the resources.
     (native-inputs
      `(("phyloxml.xsd"
@@ -10563,13 +10382,10 @@ reading, writing, and exporting phylogenetic trees.")
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)))
+     (list java-log4j-api java-log4j-core java-slf4j-api
+           java-slf4j-simple))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Core libraries of Java framework for processing biological data")
     (description "BioJava is a project dedicated to providing a Java framework
@@ -10604,15 +10420,14 @@ This package provides the core libraries.")
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core)
-       ("java-forester" ,java-forester)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core
+           java-forester))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava interface to the forester phylogenomics library")
     (description "The phylo module provides a biojava interface layer to the
@@ -10640,16 +10455,15 @@ forester phylogenomics library for constructing phylogenetic trees.")))
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core)
-       ("java-biojava-phylo" ,java-biojava-phylo)
-       ("java-forester" ,java-forester)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core
+           java-biojava-phylo
+           java-forester))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava API for genetic sequence alignment")
     (description "The alignment module of BioJava provides an API that
@@ -10698,15 +10512,14 @@ contains
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core-4.0)
-       ("java-forester" ,java-forester-1.005)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core-4.0
+           java-forester-1.005))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava interface to the forester phylogenomics library")
     (description "The phylo module provides a biojava interface layer to the
@@ -10734,16 +10547,15 @@ forester phylogenomics library for constructing phylogenetic trees.")))
                                "build/test-classes")
              #t)))))
     (propagated-inputs
-     `(("java-log4j-api" ,java-log4j-api)
-       ("java-log4j-core" ,java-log4j-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
-       ("java-biojava-core" ,java-biojava-core-4.0)
-       ("java-biojava-phylo" ,java-biojava-phylo-4.0)
-       ("java-forester" ,java-forester-1.005)))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-log4j-api
+           java-log4j-core
+           java-slf4j-api
+           java-slf4j-simple
+           java-biojava-core-4.0
+           java-biojava-phylo-4.0
+           java-forester-1.005))
+    (native-inputs
+     (list java-junit java-hamcrest-core))
     (home-page "https://biojava.org")
     (synopsis "Biojava API for genetic sequence alignment")
     (description "The alignment module of BioJava provides an API that
@@ -10773,8 +10585,7 @@ contains
        (snippet
         '(begin
            (for-each delete-file (find-files "jar/lib" "\\.jar$"))
-           (delete-file-recursively "3rdParty")
-           #t))))
+           (delete-file-recursively "3rdParty")))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f                      ; test data are not included
@@ -10783,9 +10594,9 @@ contains
        #:source-dir "public/src/"
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Dpicard.executable.dir="
-                            (assoc-ref %build-inputs "java-picard")
-                            "/share/java/"))
+       (list ,#~(string-append "-Dpicard.executable.dir="
+                               #$(this-package-input "java-picard")
+                               "/share/java/"))
        #:modules ((ice-9 match)
                   (srfi srfi-1)
                   (guix build utils)
@@ -10811,8 +10622,7 @@ contains
                (for-each (lambda (jar)
                            (symlink jar (string-append "jar/lib/" (basename jar))))
                          (append-map (lambda (dir) (find-files dir "\\.jar$"))
-                                     dirs)))
-	     #t))
+                                     dirs)))))
          ;; There is no installation target
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -10855,8 +10665,7 @@ contains
                                  scripts)
                  (("^java") (which "java"))
                  (("jar_deploy_dir=.*")
-                  (string-append "jar_deploy_dir=" share "\n"))))
-             #t))
+                  (string-append "jar_deploy_dir=" share "\n"))))))
          ;; FIXME: We do this after stripping jars because we don't want it to
          ;; copy all these jars and strip them.  We only want to install
          ;; links.  Arguably, this is a problem with the ant-build-system.
@@ -10868,8 +10677,7 @@ contains
                (for-each (lambda (jar)
                            (symlink (readlink jar)
                                     (string-append lib (basename jar))))
-                         (find-files "jar/lib" "\\.jar$")))
-             #t)))))
+                         (find-files "jar/lib" "\\.jar$"))))))))
     (inputs
      `(("jdk" ,icedtea-8)
        ("java-picard" ,java-picard-2.10.3)
@@ -10888,8 +10696,7 @@ contains
        ("java-simple-xml" ,java-simple-xml)
        ("java-snakeyaml" ,java-snakeyaml)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-testng" ,java-testng)))
+     (list unzip java-testng))
     (home-page "http://mccarrolllab.com/dropseq/")
     (synopsis "Tools for Drop-seq analyses")
     (description "Drop-seq is a technology to enable biologists to
@@ -10930,47 +10737,45 @@ once.  This package provides tools to perform Drop-seq analyses.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo")))))))
-    (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("gzip" ,gzip)
-       ("snakemake" ,snakemake)
-       ("multiqc" ,multiqc)
-       ("star" ,star-for-pigx)
-       ("hisat2" ,hisat2)
-       ("fastp" ,fastp)
-       ("htseq" ,htseq)
-       ("samtools" ,samtools)
-       ("r-minimal" ,r-minimal)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dt" ,r-dt)
-       ("r-knitr" ,r-knitr)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-corrplot" ,r-corrplot)
-       ("r-reshape2" ,r-reshape2)
-       ("r-plotly" ,r-plotly)
-       ("r-scales" ,r-scales)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-tximport" ,r-tximport)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rjson" ,r-rjson)
-       ("salmon" ,salmon)
-       ("pandoc" ,pandoc)
-       ("python-wrapper" ,python-wrapper)
-       ("python-deeptools" ,python-deeptools)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("tzdata" ,tzdata)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (inputs
+     (list coreutils
+           sed
+           gzip
+           snakemake
+           multiqc
+           star-for-pigx
+           hisat2
+           fastp
+           htseq
+           samtools
+           r-minimal
+           r-rmarkdown
+           r-ggplot2
+           r-ggpubr
+           r-ggrepel
+           r-gprofiler2
+           r-deseq2
+           r-dt
+           r-knitr
+           r-pheatmap
+           r-corrplot
+           r-reshape2
+           r-plotly
+           r-scales
+           r-summarizedexperiment
+           r-crosstalk
+           r-tximport
+           r-rtracklayer
+           r-rjson
+           salmon
+           pandoc
+           python-wrapper
+           python-deeptools
+           python-pyyaml))
+    (native-inputs
+     (list tzdata automake autoconf))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for RNA sequencing experiments")
     (description "PiGX RNAseq is an analysis pipeline for preprocessing and
@@ -11003,58 +10808,56 @@ expression report comparing samples in an easily configurable manner.")
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (inputs
-     `(("grep" ,grep)
-       ("coreutils" ,coreutils)
-       ("r-minimal" ,r-minimal)
-       ("r-argparser" ,r-argparser)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-chipseq" ,r-chipseq)
-       ("r-corrplot" ,r-corrplot)
-       ("r-data-table" ,r-data-table)
-       ("r-deseq2" ,r-deseq2)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gprofiler2" ,r-gprofiler2)
-       ("r-heatmaply" ,r-heatmaply)
-       ("r-hexbin" ,r-hexbin)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-pheatmap" ,r-pheatmap)
-       ("r-plotly" ,r-plotly)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rsamtools" ,r-rsamtools)
-       ("r-rsubread" ,r-rsubread)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("python-wrapper" ,python-wrapper)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-magic" ,python-magic)
-       ("python-xlrd" ,python-xlrd)
-       ("trim-galore" ,trim-galore)
-       ("macs" ,macs)
-       ("multiqc" ,multiqc)
-       ("perl" ,perl)
-       ("pandoc" ,pandoc)
-       ("fastqc" ,fastqc)
-       ("bowtie" ,bowtie)
-       ("idr" ,idr)
-       ("snakemake" ,snakemake)
-       ("samtools" ,samtools)
-       ("bedtools" ,bedtools)
-       ("kentutils" ,kentutils)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("python-pytest" ,python-pytest)))
+     (list grep
+           coreutils
+           r-minimal
+           r-argparser
+           r-biocparallel
+           r-biostrings
+           r-chipseq
+           r-corrplot
+           r-data-table
+           r-deseq2
+           r-dplyr
+           r-dt
+           r-genomation
+           r-genomicalignments
+           r-genomicranges
+           r-ggplot2
+           r-ggrepel
+           r-gprofiler2
+           r-heatmaply
+           r-hexbin
+           r-htmlwidgets
+           r-jsonlite
+           r-pheatmap
+           r-plotly
+           r-rmarkdown
+           r-rsamtools
+           r-rsubread
+           r-rtracklayer
+           r-s4vectors
+           r-stringr
+           r-tibble
+           r-tidyr
+           python-wrapper
+           python-pyyaml
+           python-magic
+           python-xlrd
+           trim-galore
+           macs
+           multiqc
+           perl
+           pandoc
+           fastqc
+           bowtie
+           idr
+           snakemake
+           samtools
+           bedtools
+           kentutils))
+    (native-inputs
+     (list autoconf automake python-pytest))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for ChIP sequencing experiments")
     (description "PiGX ChIPseq is an analysis pipeline for preprocessing, peak
@@ -11094,44 +10897,42 @@ in an easily configurable manner.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo")))))))
-    (native-inputs
-     `(("tzdata" ,tzdata)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
-    (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("grep" ,grep)
-       ("r-minimal" ,r-minimal)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-dt" ,r-dt)
-       ("r-genomation" ,r-genomation)
-       ("r-ggbio" ,r-ggbio)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-methylkit" ,r-methylkit)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-bookdown" ,r-bookdown)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggbio" ,r-ggbio)
-       ("pandoc" ,pandoc)
-       ("python-wrapper" ,python-wrapper)
-       ("python-pyyaml" ,python-pyyaml)
-       ("snakemake" ,snakemake)
-       ("bismark" ,bismark)
-       ("bowtie" ,bowtie)
-       ("bwa-meth" ,bwa-meth)
-       ("fastqc" ,fastqc)
-       ("methyldackel" ,methyldackel)
-       ("multiqc" ,multiqc)
-       ("trim-galore" ,trim-galore)
-       ("cutadapt" ,cutadapt)
-       ("samblaster" ,samblaster)
-       ("samtools" ,samtools)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (native-inputs
+     (list tzdata automake autoconf))
+    (inputs
+     (list coreutils
+           sed
+           grep
+           r-minimal
+           r-annotationhub
+           r-dt
+           r-genomation
+           r-ggbio
+           r-ggrepel
+           r-matrixstats
+           r-methylkit
+           r-reshape2
+           r-rtracklayer
+           r-rmarkdown
+           r-bookdown
+           r-ggplot2
+           r-ggbio
+           pandoc
+           python-wrapper
+           python-pyyaml
+           snakemake
+           bismark
+           bowtie
+           bwa-meth
+           fastqc
+           methyldackel
+           multiqc
+           trim-galore
+           cutadapt
+           samblaster
+           samtools))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Bisulfite sequencing pipeline from fastq to methylation reports")
     (description "PiGx BSseq is a data processing pipeline for raw fastq read
@@ -11161,8 +10962,7 @@ methylation and segmentation.")
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list automake autoconf))
     (inputs
      `(("coreutils" ,coreutils)
        ("perl" ,perl)
@@ -11236,40 +11036,39 @@ based methods.")
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)))
-    (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("bbmap" ,bbmap)
-       ("bedtools" ,bedtools)
-       ("bwa" ,bwa)
-       ("ensembl-vep" ,ensembl-vep)
-       ("fastp" ,fastp)
-       ("fastqc" ,fastqc)
-       ("ivar" ,ivar)
-       ("kraken2" ,kraken2)
-       ("krona-tools" ,krona-tools)
-       ("lofreq" ,lofreq)
-       ("multiqc" ,multiqc)
-       ("prinseq" ,prinseq)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-wrapper" ,python-wrapper)
-       ("r-base64url" ,r-base64url)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-minimal" ,r-minimal)
-       ("r-plotly" ,r-plotly)
-       ("r-qpcr" ,r-qpcr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("samtools" ,samtools)
-       ("snakemake" ,snakemake)
-       ("wget" ,wget)))
+     (list automake autoconf))
+    (inputs
+     (list bash-minimal
+           bbmap
+           bedtools
+           bwa
+           ensembl-vep
+           fastp
+           fastqc
+           ivar
+           kraken2
+           krona-tools
+           lofreq
+           multiqc
+           prinseq
+           python-pyyaml
+           python-wrapper
+           r-base64url
+           r-dplyr
+           r-dt
+           r-ggplot2
+           r-magrittr
+           r-minimal
+           r-plotly
+           r-qpcr
+           r-r-utils
+           r-reshape2
+           r-rmarkdown
+           r-stringr
+           r-tidyr
+           samtools
+           snakemake
+           wget))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipeline for wastewater sequencing")
     (description "PiGx SARS-CoV-2 is a pipeline for analysing data from
@@ -11293,11 +11092,7 @@ variant abundance over time and location.")
                 "1i5njdy1clj5ncw45d16p7mwmqvb1ilikl9n797pxklc3f4s7mq7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python)
-       ("pigx-bsseq" ,pigx-bsseq)
-       ("pigx-chipseq" ,pigx-chipseq)
-       ("pigx-rnaseq" ,pigx-rnaseq)
-       ("pigx-scrnaseq" ,pigx-scrnaseq)))
+     (list python pigx-bsseq pigx-chipseq pigx-rnaseq pigx-scrnaseq))
     (home-page "https://bioinformatics.mdc-berlin.de/pigx/")
     (synopsis "Analysis pipelines for genomics")
     (description "PiGx is a collection of genomics pipelines.  It includes the
@@ -11339,7 +11134,7 @@ HTML reports with interesting findings about your samples.")
              (install-file "Genrich" (string-append (assoc-ref outputs "out") "/bin"))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/jsh58/Genrich")
     (synopsis "Detecting sites of genomic enrichment")
     (description "Genrich is a peak-caller for genomic enrichment
@@ -11349,11 +11144,12 @@ enrichment.")
     (license license:expat)))
 
 (define-public mantis
-  (let ((commit "4ffd171632c2cb0056a86d709dfd2bf21bc69b84")
-        (revision "1"))
+  ;; This is an arbitrary commit as a year has passed since 0.1 was tagged.
+  (let ((commit "b6979a269172a45201c8366680d8b889f889432b")
+        (revision "2"))
     (package
       (name "mantis")
-      (version (git-version "0" revision commit))
+      (version (git-version "0.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -11362,13 +11158,15 @@ enrichment.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0iqbr0dhmlc8mzpirmm2s4pkzkwdgrcx50yx6cv3wlr2qi064p55"))))
+                  "0dq8a785hnaxx5kq757m5czs8xpcjpcph1inq2nm8h6zfvqyj8xs"))))
       (build-system cmake-build-system)
-      (arguments '(#:tests? #f)) ; there are none
+      (arguments
+       '(#:tests? #f ; there are none
+         #:configure-flags (list "-DNH=ON"))) ; do not use SSE4.2 instructions
       (inputs
-       `(("sdsl-lite" ,sdsl-lite)
-         ("openssl" ,openssl)
-         ("zlib" ,zlib)))
+       (list sdsl-lite openssl zlib))
+      (native-inputs
+       (list gcc-7))
       (home-page "https://github.com/splatlab/mantis")
       (synopsis "Large-scale sequence-search index data structure")
       (description "Mantis is a space-efficient data structure that can be
@@ -11403,9 +11201,9 @@ analyses in addition to large-scale sequence-level searches.")
       (arguments
        `(#:tests? #f                    ; requires a 1.4G test file
          #:make-flags
-         (list (string-append "SAMTOOLS_DIR="
-                              (assoc-ref %build-inputs "samtools")
-                              "/lib/"))
+         ,#~(list (string-append "SAMTOOLS_DIR="
+                                 #$(this-package-input "samtools")
+                                 "/lib/"))
          #:phases
          (modify-phases %standard-phases
            (replace 'configure
@@ -11414,19 +11212,16 @@ analyses in addition to large-scale sequence-level searches.")
                  (("-I \\$\\{SAMTOOLS_DIR\\}")
                   (string-append "-I" (assoc-ref inputs "samtools")
                                  "/include/samtools"))
-                 (("-lz ") "-lz -lpthread "))
-               #t))
+                 (("-lz ") "-lz -lpthread "))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (for-each (lambda (tool)
                            (install-file tool
                                          (string-append (assoc-ref outputs "out")
                                                         "/bin")))
-                         '("j_count" "b_count" "sjcount"))
-               #t)))))
+                         '("j_count" "b_count" "sjcount")))))))
       (inputs
-       `(("samtools" ,samtools-0.1)
-         ("zlib" ,zlib)))
+       (list samtools-0.1 zlib))
       (home-page "https://github.com/pervouchine/sjcount-full/")
       (synopsis "Annotation-agnostic splice junction counting pipeline")
       (description "Sjcount is a utility for fast quantification of splice
@@ -11501,7 +11296,7 @@ version does count multisplits.")
                           out ,version))))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://lh3.github.io/minimap2/")
     (synopsis "Pairwise aligner for genomic and spliced nucleotide sequences")
     (description "Minimap2 is a versatile sequence alignment program that
@@ -11532,9 +11327,9 @@ cases include:
               "1a05p7rkmxa6qhm108na8flzj2v45jab06drk59kzk1ip2sgvzqq"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-cython" ,python-cython)))
+    (list python-cython))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (home-page "https://github.com/lh3/minimap2")
    (synopsis "Python binding for minimap2")
    (description "This package provides a convenient interface to minimap2,
@@ -11557,7 +11352,7 @@ sequences.")
               "04dv5wv8bhsw1imxwyd438bnn9kby7svp44nbcz8lsadzjjci5gs"))))
    (build-system gnu-build-system)
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (arguments
     `(#:tests? #f ; There are no tests.
       #:phases
@@ -11615,10 +11410,9 @@ Thus the per-base error rate is similar to the raw input reads.")
                (install-file "Bandage" (string-append out "/bin"))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (native-inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://rrwick.github.io/Bandage/")
     (synopsis
      "Bioinformatics Application for Navigating De novo Assembly Graphs Easily")
@@ -11654,10 +11448,10 @@ contigs alone.")
     ;; The test suite attempts to execute ../test-driver, which does not exist.
     (arguments '(#:tests? #false))
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("gcc" ,gcc-10)                   ;Code has C++17 requirements
-       ("pkg-config" ,pkg-config)))
+     (list gcc-10 ;Code has C++17 requirements
+           pkg-config))
     (home-page "https://gitlab.com/german.tischler/libmaus2")
     (synopsis "Collection of data structures and algorithms useful for bioinformatics")
     (description "libmaus2 is a collection of data structures and
@@ -11695,14 +11489,13 @@ and many lower level support classes.
      ;; The test suite attempts to execute ../test-driver, which does not exist.
      `(#:tests? #false
        #:configure-flags
-       (list (string-append "--with-libmaus2="
-                            (assoc-ref %build-inputs "libmaus2")))))
+       ,#~(list (string-append "--with-libmaus2="
+                               #$(this-package-input "libmaus2")))))
     (inputs
-     `(("libmaus2" ,libmaus2)
-       ("xerces-c" ,xerces-c)))
+     (list libmaus2 xerces-c))
     (native-inputs
-     `(("gcc" ,gcc-10)                  ;Code has C++17 requirements
-       ("pkg-config" ,pkg-config)))
+     (list gcc-10 ;Code has C++17 requirements
+           pkg-config))
     (home-page "https://gitlab.com/german.tischler/biobambam2")
     (synopsis "Tools for processing BAM files")
     (description "This package contains some tools for processing BAM files
@@ -11743,23 +11536,23 @@ including:
          "0jhjn3ilb057hbf6yzrihj13ifxxs32y7nkby8l3lkm28dg4p97h"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-annotationhub" ,r-annotationhub)
-       ("r-biomart" ,r-biomart)
-       ("r-data-table" ,r-data-table)
-       ("r-dbi" ,r-dbi)
-       ("r-genomicfeatures" ,r-genomicfeatures)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hash" ,r-hash)
-       ("r-iranges" ,r-iranges)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rmysql" ,r-rmysql)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-stringr" ,r-stringr)
-       ("r-summarizedexperiment" ,r-summarizedexperiment)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-annotationdbi
+           r-annotationhub
+           r-biomart
+           r-data-table
+           r-dbi
+           r-genomicfeatures
+           r-genomicranges
+           r-ggplot2
+           r-hash
+           r-iranges
+           r-rcolorbrewer
+           r-rmysql
+           r-s4vectors
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/BIMSBbioinfo/ciRcus")
     (synopsis "Annotation, analysis and visualization of circRNA data")
     (description "Circus is an R package for annotation, analysis and
@@ -11860,11 +11653,11 @@ conversions, region filtering, FASTA sequence extraction and more.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (for-each (lambda (script)
                              (install-file script bin)
                              (wrap-program (string-append bin "/" script)
-                               `("PYTHONPATH" ":" prefix (,path))))
+                               `("GUIX_PYTHONPATH" ":" prefix (,path))))
                            '("cmp_bed.py"
                              "find_circ.py"
                              "maxlength.py"
@@ -11872,9 +11665,7 @@ conversions, region filtering, FASTA sequence extraction and more.")
                              "unmapped2anchors.py")))
                #t)))))
       (inputs
-       `(("python2" ,python-2)
-         ("python2-pysam" ,python2-pysam)
-         ("python2-numpy" ,python2-numpy)))
+       (list python-2 python2-pysam python2-numpy))
       (home-page "https://github.com/marvin-jens/find_circ")
       (synopsis "circRNA detection from RNA-seq reads")
       (description "This package provides tools to detect head-to-tail
@@ -11925,7 +11716,7 @@ in RNA-seq data.")
                   (string-append "FAST_TSNE_SCRIPT_DIR = \"" out "\"\n")))
                (install-file "fast_tsne.R" share)))))))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (home-page "https://github.com/KlugerLab/FIt-SNE")
     (synopsis "Fast Fourier Transform-accelerated interpolation-based t-SNE")
     (description "@dfn{t-Stochastic Neighborhood Embedding} (t-SNE) is a
@@ -11948,7 +11739,7 @@ implementation differs in these ways:
 (define-public python-scanpy
   (package
     (name "python-scanpy")
-    (version "1.8.1")
+    (version "1.8.2")
     (source
      (origin
        (method git-fetch)
@@ -11958,7 +11749,7 @@ implementation differs in these ways:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0w1qmv3djqi8q0sn5hv34ivzs157fwjjb9nflfnagnhpxmw8vx5g"))))
+         "14zax23lqinv7xyv3491vpl3ydi38naiwaxg5mkfs5zk2406cqdr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -12004,7 +11795,7 @@ implementation differs in these ways:
                (setenv "PYTHONPATH"
                        (string-append (getcwd) ":"
                                       (assoc-ref inputs "python-anndata:source") ":"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "pytest" "-vv"
                        "-k"
                        ;; Plot tests that fail.
@@ -12015,6 +11806,7 @@ implementation differs in these ways:
                                       " and not test_scatter_embedding_add_outline_vmin_vmax_norm"
                                       " and not test_paga"
                                       " and not test_paga_compare"
+                                      " and not test_clustermap"
 
                                       ;; These try to connect to the network
                                       " and not test_plot_rank_genes_groups_gene_symbols"
@@ -12022,28 +11814,28 @@ implementation differs in these ways:
                                       " and not test_pca_sparse"
                                       " and not test_pca_reproducible"))))))))
     (propagated-inputs
-     `(("python-anndata" ,python-anndata)
-       ("python-h5py" ,python-h5py)
-       ("python-igraph" ,python-igraph)
-       ("python-joblib" ,python-joblib)
-       ("python-legacy-api-wrap" ,python-legacy-api-wrap)
-       ("python-louvain" ,python-louvain-0.6)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-natsort" ,python-natsort)
-       ("python-networkx" ,python-networkx)
-       ("python-numba" ,python-numba)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-patsy" ,python-patsy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-sinfo" ,python-sinfo)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-tables" ,python-tables)
-       ("python-pytoml" ,python-pytoml)
-       ("python-tqdm" ,python-tqdm)
-       ("python-umap-learn" ,python-umap-learn)))
+     (list python-anndata
+           python-h5py
+           python-igraph
+           python-joblib
+           python-legacy-api-wrap
+           python-louvain-0.6
+           python-matplotlib
+           python-natsort
+           python-networkx
+           python-numba
+           python-packaging
+           python-pandas
+           python-patsy
+           python-scikit-learn
+           python-scipy
+           python-seaborn
+           python-sinfo
+           python-statsmodels
+           python-tables
+           python-pytoml
+           python-tqdm
+           python-umap-learn))
     (native-inputs
      `(;; This package needs anndata.tests, which is not installed.
        ("python-anndata:source" ,(package-source python-anndata))
@@ -12073,13 +11865,21 @@ million cells.")
          "1jbsh01f57zj4bhvjr3jh4532zznqd6nccmgrl3qi9gnhkf7c4y0"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; TODO: Enable after migration to scikit-learn.
+     `(#:tests? #f ; no tests are included
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'do-not-fail-to-find-sklearn
+           (lambda _
+             ;; XXX: I have no idea why it cannot seem to find sklearn.
+             (substitute* "setup.py"
+               (("'sklearn'") "")))))))
     (propagated-inputs
-     `(("python-annoy" ,python-annoy)
-       ("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-umap-learn" ,python-umap-learn)))
+     (list python-annoy
+           python-cython
+           python-numpy
+           python-scikit-learn
+           python-scipy
+           python-umap-learn))
     (home-page "https://github.com/Teichlab/bbknn")
     (synopsis "Batch balanced KNN")
     (description "BBKNN is a batch effect removal tool that can be directly
@@ -12107,14 +11907,14 @@ altering the counts or PCA space.")
          "08vk0x6v5c5n7afgd5pcjhsvb424absypxy22hw1cm1n9kirbi77"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-seaborn" ,python-seaborn)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-biopython
+           python-matplotlib
+           python-numpy
+           python-pandas
+           python-pytest
+           python-scikit-learn
+           python-seaborn
+           python-tqdm))
     (home-page "https://github.com/MrOlm/drep")
     (synopsis "De-replication of microbial genomes assembled from multiple samples")
     (description
@@ -12147,24 +11947,24 @@ set.")
                (("from job_utils")
                 "from .job_utils")))))))
     (inputs
-     `(("python-biopython" ,python-biopython-1.73)
-       ("python-boto3" ,python-boto3)
-       ("python-h5py" ,python-h5py)
-       ("python-lmfit" ,python-lmfit)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-psutil" ,python-psutil)
-       ("python-pysam" ,python-pysam)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-seaborn" ,python-seaborn)
-       ("python-tqdm" ,python-tqdm)
-       ;; drep is needed for deprecated plot utilities
-       ("python-drep" ,python-drep)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-biopython-1.73
+           python-boto3
+           python-h5py
+           python-lmfit
+           python-matplotlib
+           python-networkx
+           python-numba
+           python-numpy
+           python-pandas
+           python-psutil
+           python-pysam
+           python-scikit-learn
+           python-seaborn
+           python-tqdm
+           ;; drep is needed for deprecated plot utilities
+           python-drep))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/MrOlm/inStrain")
     (synopsis "Calculation of strain-level metrics")
     (description
@@ -12256,9 +12056,9 @@ reference transcripts provided in a annotation file (also in GTF/GFF3 format).
            (base32 "0rgv6q5fl4x5d74n6p5wvdna6zmbdbqpb4jqqh6vq3670gn08xad"))))
       (build-system gnu-build-system)
       (arguments
-       '(#:tests? #f ; No tests.
-         #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                            "DESTDIR=\"\"")
+       `(#:tests? #f                    ; No tests.
+         #:make-flags
+         ,#~(list (string-append "PREFIX=" #$output) "DESTDIR=\"\"")
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)))) ; There is no configure phase.
@@ -12295,9 +12095,9 @@ allowing the insertion of arbitrary types into the tree.")
              (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
              #t)))))
     (propagated-inputs
-     `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-sortedcontainers))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/chaimleib/intervaltree")
     (synopsis "Editable interval tree data structure")
     (description
@@ -12337,7 +12137,7 @@ bound.")
                                       "/bin"))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/4dn-dcic/pairix")
     (synopsis "Support for querying pairix-indexed bgzipped text files")
     (description
@@ -12358,7 +12158,7 @@ bgzipped text file that contains a pair of genomic coordinates per line.")
          "038xi3a6zvrxbyyfpp64ka8pcjgsdq4fgw9cl5lpxbvmm1bzzw2q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "http://mattshirley.com")
     (synopsis "Random access to fasta subsequences")
     (description
@@ -12406,29 +12206,26 @@ fasta subsequences.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-asciitree" ,python-asciitree)
-       ("python-biopython" ,python-biopython)
-       ("python-click" ,python-click)
-       ("python-cytoolz" ,python-cytoolz)
-       ("python-dask" ,python-dask)
-       ("python-h5py" ,python-h5py)
-       ("python-multiprocess" ,python-multiprocess)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pyfaidx" ,python-pyfaidx)
-       ("python-pypairix" ,python-pypairix)
-       ("python-pysam" ,python-pysam)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-scipy" ,python-scipy)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)
-       ("python-sparse" ,python-sparse)))
-    (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)))
+     (list python-asciitree
+           python-biopython
+           python-click
+           python-cytoolz-for-cooler
+           python-dask
+           python-h5py
+           python-multiprocess
+           python-numpy
+           python-pandas
+           python-pyfaidx
+           python-pypairix
+           python-pysam
+           python-pyyaml
+           python-scipy
+           python-simplejson
+           python-six
+           python-sparse))
+    (native-inputs
+     (list python-codecov python-mock python-pytest python-pytest-cov
+           python-pytest-flake8))
     ;; Almost all the projects of the Mirnylab are moved under Open2C umbrella
     (home-page "https://github.com/open2c/cooler")
     (synopsis "Sparse binary format for genomic interaction matrices")
@@ -12462,14 +12259,14 @@ such as Hi-C contact matrices.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-tables" ,python-tables)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-cooler
+           python-intervaltree
+           python-numpy
+           python-pandas
+           python-scipy
+           python-tables))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/deeptools/HiCMatrix/")
     (synopsis "HiCMatrix class for HiCExplorer and pyGenomeTracks")
     (description
@@ -12502,21 +12299,21 @@ the HiCExplorer and pyGenomeTracks packages.")
                (("==") ">="))
              #t)))))
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-configparser" ,python-configparser)
-       ("python-cooler" ,python-cooler)
-       ("python-future" ,python-future)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-jinja2" ,python-jinja2)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("python-tables" ,python-tables)
-       ("python-unidecode" ,python-unidecode)))
+     (list python-biopython
+           python-configparser
+           python-cooler
+           python-future
+           python-intervaltree
+           python-jinja2
+           python-matplotlib
+           python-numpy
+           python-pandas
+           python-pybigwig
+           python-pysam
+           python-scipy
+           python-six
+           python-tables
+           python-unidecode))
     (home-page "https://hicexplorer.readthedocs.io")
     (synopsis "Process, analyze and visualize Hi-C data")
     (description
@@ -12553,17 +12350,17 @@ genomic scores), long range contacts and the visualization of viewpoints.")
                 "matplotlib >=3.1.1"))
              #t)))))
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-gffutils" ,python-gffutils)
-       ("python-hicmatrix" ,python-hicmatrix)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pybigwig" ,python-pybigwig)
-       ("python-pysam" ,python-pysam)
-       ("python-tqdm" ,python-tqdm)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-future
+           python-gffutils
+           python-hicmatrix
+           python-intervaltree
+           python-matplotlib
+           python-numpy
+           python-pybigwig
+           python-pysam
+           python-tqdm))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://pygenometracks.readthedocs.io")
     (synopsis "Program and library to plot beautiful genome browser tracks")
     (description
@@ -12587,10 +12384,7 @@ pyGenomeTracks can make plots with or without Hi-C data.")
     (build-system python-build-system)
     (arguments `(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-scikit-learn" ,python-scikit-learn)))
+     (list python-numpy python-pandas python-scipy python-scikit-learn))
     (home-page "https://github.com/hiclib/iced")
     (synopsis "ICE normalization")
     (description "This is a package for normalizing Hi-C contact counts
@@ -12624,11 +12418,8 @@ efficiently.")
                        (list "test_data/hic2cool_0.4.2_single_res.cool"
                              "test_data/hic2cool_0.7.0_multi_res.mcool")))))))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-cooler python-h5py python-numpy python-pandas
+           python-scipy))
     (home-page "https://github.com/4dn-dcic/hic2cool")
     (synopsis "Converter for .hic and .cool files")
     (description
@@ -12653,11 +12444,7 @@ matrices.")
     (properties `((upstream-name . "poRe")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit64" ,r-bit64)
-       ("r-data-table" ,r-data-table)
-       ("r-rhdf5" ,r-rhdf5)
-       ("r-shiny" ,r-shiny)
-       ("r-svdialogs" ,r-svdialogs)))
+     (list r-bit64 r-data-table r-rhdf5 r-shiny r-svdialogs))
     (home-page "https://sourceforge.net/projects/rpore/")
     (synopsis "Visualize Nanopore sequencing data")
     (description
@@ -12684,15 +12471,15 @@ sequencing data.")
                   "0w8bsq5myiwkfhh83nm6is5ichiyvwa1axx2szvxnzq39x6knf66"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-annotationdbi" ,r-annotationdbi)
-         ("r-assertthat" ,r-assertthat)
-         ("r-biobase" ,r-biobase)
-         ("r-biocmanager" ,r-biocmanager)
-         ("r-digest" ,r-digest)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-reshape2" ,r-reshape2)
-         ("r-stringr" ,r-stringr)))
+       (list r-annotationdbi
+             r-assertthat
+             r-biobase
+             r-biocmanager
+             r-digest
+             r-pkgmaker
+             r-plyr
+             r-reshape2
+             r-stringr))
       (home-page "https://github.com/renozao/xbioc/")
       (synopsis "Extra base functions for Bioconductor")
       (description "This package provides extra utility functions to perform
@@ -12717,12 +12504,12 @@ provided by Bioconductor packages.")
                   "128syf9v39gk0z3ip000qpsjbg6l1siyq6c8b0hz41dzg5achyb3"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-formula" ,r-formula)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-rngtools" ,r-rngtools)
-         ("r-scales" ,r-scales)))
+       (list r-formula
+             r-ggplot2
+             r-pkgmaker
+             r-plyr
+             r-rngtools
+             r-scales))
       (home-page "https://github.com/shenorrLab/csSAM/")
       (synopsis "Cell type-specific statistical analysis of microarray")
       (description "This package implements the method csSAM that computes
@@ -12748,23 +12535,23 @@ SAM.")
                   "1prw13wa20f7wlc3gkkls66n1kxz8d28qrb8icfqdwdnnv8w5qg8"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-abind" ,r-abind)
-         ("r-annotationdbi" ,r-annotationdbi)
-         ("r-biobase" ,r-biobase)
-         ("r-cssam" ,r-cssam)
-         ("r-dplyr" ,r-dplyr)
-         ("r-e1071" ,r-e1071)
-         ("r-edger" ,r-edger)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-nmf" ,r-nmf)
-         ("r-openxlsx" ,r-openxlsx)
-         ("r-pkgmaker" ,r-pkgmaker)
-         ("r-plyr" ,r-plyr)
-         ("r-preprocesscore" ,r-preprocesscore)
-         ("r-rngtools" ,r-rngtools)
-         ("r-scales" ,r-scales)
-         ("r-stringr" ,r-stringr)
-         ("r-xbioc" ,r-xbioc)))
+       (list r-abind
+             r-annotationdbi
+             r-biobase
+             r-cssam
+             r-dplyr
+             r-e1071
+             r-edger
+             r-ggplot2
+             r-nmf
+             r-openxlsx
+             r-pkgmaker
+             r-plyr
+             r-preprocesscore
+             r-rngtools
+             r-scales
+             r-stringr
+             r-xbioc))
       (home-page "https://github.com/shenorrLab/bseqsc")
       (synopsis "Deconvolution of bulk sequencing experiments using single cell data")
       (description "BSeq-sc is a bioinformatics analysis pipeline that
@@ -12828,13 +12615,10 @@ Barcoding Kit or Rapid Barcoding Kit.")
       ;; requires python >=2.7, <3.0, and the same for python dependencies
       (arguments `(#:python ,python-2))
       (inputs
-       `(("hdf5" ,hdf5)))
+       (list hdf5))
       (propagated-inputs
-       `(("python-dateutil" ,python2-dateutil)
-         ("python-h5py" ,python2-h5py)
-         ("python-matplotlib" ,python2-matplotlib)
-         ("python-pandas" ,python2-pandas)
-         ("python-seaborn" ,python2-seaborn)))
+       (list python2-dateutil python2-h5py python2-matplotlib
+             python2-pandas python2-seaborn))
       (home-page "https://poretools.readthedocs.io")
       (synopsis "Toolkit for working with nanopore sequencing data")
       (description
@@ -12902,14 +12686,14 @@ of the Hierarchical Data Format (HDF5) standard.")
                 (list "JAMM.sh" "SignalGenerator.sh")))
              #t)))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("gawk" ,gawk)
-       ("perl" ,perl)
-       ("r-minimal" ,r-minimal)
-       ;;("r-parallel" ,r-parallel)
-       ("r-signal" ,r-signal)
-       ("r-mclust" ,r-mclust)))
+     (list bash
+           coreutils
+           gawk
+           perl
+           r-minimal
+           ;;("r-parallel" ,r-parallel)
+           r-signal
+           r-mclust))
     (home-page "https://github.com/mahmoudibrahim/JAMM")
     (synopsis "Peak finder for NGS datasets")
     (description
@@ -12964,77 +12748,69 @@ datasets.")
          (add-after 'install 'link-tools
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
-               (symlink (string-append (assoc-ref inputs "prodigal")
-                                       "/bin/prodigal")
+               (symlink (search-input-file inputs "/bin/prodigal")
                         (string-append bin "ngless-" ,version "-prodigal"))
-               (symlink (string-append (assoc-ref inputs "minimap2")
-                                       "/bin/minimap2")
+               (symlink (search-input-file inputs "/bin/minimap2")
                         (string-append bin "ngless-" ,version "-minimap2"))
-               (symlink (string-append (assoc-ref inputs "samtools")
-                                       "/bin/samtools")
+               (symlink (search-input-file inputs "/bin/samtools")
                         (string-append bin "ngless-" ,version "-samtools"))
-               (symlink (string-append (assoc-ref inputs "bwa")
-                                       "/bin/bwa")
+               (symlink (search-input-file inputs "/bin/bwa")
                         (string-append bin "ngless-" ,version "-bwa"))
                #t))))))
     (inputs
-     `(("prodigal" ,prodigal)
-       ("bwa" ,bwa)
-       ("samtools" ,samtools)
-       ("minimap2" ,minimap2)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-async" ,ghc-async)
-       ("ghc-atomic-write" ,ghc-atomic-write)
-       ("ghc-bytestring-lexing" ,ghc-bytestring-lexing)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-algorithms" ,ghc-conduit-algorithms)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-configurator" ,ghc-configurator)
-       ("ghc-convertible" ,ghc-convertible)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-lib" ,ghc-diagrams-lib)
-       ("ghc-diagrams-svg" ,ghc-diagrams-svg)
-       ("ghc-double-conversion" ,ghc-double-conversion)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-either" ,ghc-either)
-       ("ghc-errors" ,ghc-errors)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-gitrev" ,ghc-gitrev)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-inline-c" ,ghc-inline-c)
-       ("ghc-inline-c-cpp" ,ghc-inline-c-cpp)
-       ("ghc-int-interval-map" ,ghc-int-interval-map)
-       ("ghc-missingh" ,ghc-missingh)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-regex" ,ghc-regex)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-safeio" ,ghc-safeio)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-tar-conduit" ,ghc-tar-conduit)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list prodigal
+           bwa
+           samtools
+           minimap2
+           ghc-aeson
+           ghc-ansi-terminal
+           ghc-async
+           ghc-atomic-write
+           ghc-bytestring-lexing
+           ghc-conduit
+           ghc-conduit-algorithms
+           ghc-conduit-extra
+           ghc-configurator
+           ghc-convertible
+           ghc-data-default
+           ghc-diagrams-core
+           ghc-diagrams-lib
+           ghc-diagrams-svg
+           ghc-double-conversion
+           ghc-edit-distance
+           ghc-either
+           ghc-errors
+           ghc-extra
+           ghc-filemanip
+           ghc-file-embed
+           ghc-gitrev
+           ghc-hashtables
+           ghc-http-conduit
+           ghc-inline-c
+           ghc-inline-c-cpp
+           ghc-int-interval-map
+           ghc-missingh
+           ghc-optparse-applicative
+           ghc-regex
+           ghc-safe
+           ghc-safeio
+           ghc-strict
+           ghc-tar
+           ghc-tar-conduit
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-vector
+           ghc-yaml
+           ghc-zlib))
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-hdf5r" ,r-hdf5r)
-       ("r-iterators" ,r-iterators)
-       ("r-itertools" ,r-itertools)
-       ("r-matrix" ,r-matrix)))
-    (native-inputs
-     `(("ghc-hpack" ,ghc-hpack)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit",ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list r-r6 r-hdf5r r-iterators r-itertools r-matrix))
+    (native-inputs
+     (list ghc-hpack
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-th))
     (home-page "https://ngless.embl.de/")
     (synopsis "DSL for processing next-generation sequencing data")
     (description "Ngless is a domain-specific language for
@@ -13057,17 +12833,14 @@ datasets.")
           (sha256 (base32 "0fd728b5if89vj5j4f9y7k0b2xv2ycz5a21iy15wbdcf5bhim7i8"))))
       (build-system haskell-build-system)
       (inputs
-        `(("ghc-either" ,ghc-either)
-          ("ghc-primitive" ,ghc-primitive)
-          ("ghc-vector" ,ghc-vector)
-          ("ghc-vector-algorithms" ,ghc-vector-algorithms)))
+        (list ghc-either ghc-primitive ghc-vector ghc-vector-algorithms))
       (native-inputs
-        `(("ghc-hedgehog" ,ghc-hedgehog)
-          ("ghc-tasty" ,ghc-tasty)
-          ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-          ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-          ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-          ("ghc-tasty-th" ,ghc-tasty-th)))
+        (list ghc-hedgehog
+              ghc-tasty
+              ghc-tasty-hedgehog
+              ghc-tasty-hunit
+              ghc-tasty-quickcheck
+              ghc-tasty-th))
       (home-page "https://github.com/luispedro/interval-to-int#readme")
       (synopsis "Interval map structure in Haskell")
       (description "An interval map structure that is optimized for low
@@ -13114,10 +12887,10 @@ phase + query phase).")
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (wrap-program (string-append out
                                               "/share/filtlong/scripts/histogram.py")
-                   `("PYTHONPATH" ":" prefix (,path))))
+                   `("GUIX_PYTHONPATH" ":" prefix (,path))))
                #t))
            (add-before 'check 'patch-tests
              (lambda _
@@ -13173,10 +12946,9 @@ choosing which reads pass the filter.")
            (add-after 'unpack 'find-eigen
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "eigen")
-                                      "/include/eigen3:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "/include/eigen3")
+                        ":" (or (getenv "CPATH") "")))))
            (delete 'configure)
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
@@ -13189,16 +12961,18 @@ choosing which reads pass the filter.")
                            (find-files "scripts" ".*"))
                  #t)))
            (add-after 'install 'wrap-programs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((pythonpath (getenv "PYTHONPATH"))
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((pythonpath (getenv "GUIX_PYTHONPATH"))
                      (perl5lib (getenv "PERL5LIB"))
                      (scripts (string-append (assoc-ref outputs "out")
-                                             "/share/nanopolish/scripts")))
+                                             "/share/nanopolish/scripts"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each (lambda (file)
-                             (wrap-program file `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             (wrap-program file `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                            (find-files scripts "\\.py"))
                  (for-each (lambda (file)
-                             (wrap-script file `("PERL5LIB" ":" prefix (,perl5lib))))
+                             (wrap-script file #:guile guile
+                                          `("PERL5LIB" ":" prefix (,perl5lib))))
                            (find-files scripts "\\.pl"))))))))
       (inputs
        `(("guile" ,guile-3.0) ; for wrappers
@@ -13239,17 +13013,17 @@ polymorphisms) and indels with respect to a reference genome and more.")
         (base32 "0g2f78k68yglmj4fsfmgs8idqv3di9aj53fg0ld0hqljg8chhh82"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-future" ,python-future)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-reportlab" ,python-reportlab)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-pyfaidx" ,python-pyfaidx)
-       ("python-scipy" ,python-scipy)
-       ;; R packages
-       ("r-dnacopy" ,r-dnacopy)))
+     (list python-biopython
+           python-future
+           python-matplotlib
+           python-numpy
+           python-reportlab
+           python-pandas
+           python-pysam
+           python-pyfaidx
+           python-scipy
+           ;; R packages
+           r-dnacopy))
     (home-page "https://cnvkit.readthedocs.org/")
     (synopsis "Copy number variant detection from targeted DNA sequencing")
     (description
@@ -13263,7 +13037,7 @@ Torrent.")
 (define-public python-pyfit-sne
   (package
     (name "python-pyfit-sne")
-    (version "1.0.1")
+    (version "1.2.1")
     (source
      (origin
        (method git-fetch)
@@ -13272,14 +13046,15 @@ Torrent.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13wh3qkzs56azmmgnxib6xfr29g7xh09sxylzjpni5j0pp0rc5qw"))))
+        (base32 "0f3n7wcmxbnqiisgimhpa6p5chqpb1hj69i6rpg2hv2671i8nn68"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/KlugerLab/pyFIt-SNE")
     (synopsis "FFT-accelerated Interpolation-based t-SNE")
     (description
@@ -13306,9 +13081,9 @@ is a Cython wrapper for FIt-SNE.")
      `(#:build-target "dist"
        #:tests? #f ; there are none
        #:make-flags
-       (list (string-append "-Dmpijar="
-                            (assoc-ref %build-inputs "java-openmpi")
-                            "/lib/mpi.jar"))
+       ,#~(list (string-append "-Dmpijar="
+                               #$(this-package-input "java-openmpi")
+                               "/lib/mpi.jar"))
        #:modules ((guix build ant-build-system)
                   (guix build utils)
                   (guix build java-utils))
@@ -13348,10 +13123,8 @@ is a Cython wrapper for FIt-SNE.")
              #t)))
        #:jdk ,openjdk11))
     (inputs
-     `(("gawk" ,gawk)
-       ("java-eclipse-jdt-core" ,java-eclipse-jdt-core)
-       ("java-eclipse-jdt-compiler-apt" ,java-eclipse-jdt-compiler-apt)
-       ("java-openmpi" ,java-openmpi)))
+     (list gawk java-eclipse-jdt-core java-eclipse-jdt-compiler-apt
+           java-openmpi))
     (home-page "https://sourceforge.net/projects/bbmap/")
     (synopsis "Aligner and other tools for short sequencing reads")
     (description
@@ -13382,8 +13155,7 @@ to an artifact/contaminant file.")
               (snippet
                '(begin
                   (delete-file "Manual.pdf")
-                  (delete-file-recursively "third-party")
-                  #t))))
+                  (delete-file-recursively "third-party")))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("OPENMP=t")
@@ -13394,8 +13166,7 @@ to an artifact/contaminant file.")
          (add-after 'unpack 'fix-zlib-include
            (lambda _
              (substitute* "src/binarySequences.c"
-               (("../third-party/zlib-1.2.3/zlib.h") "zlib.h"))
-             #t))
+               (("../third-party/zlib-1.2.3/zlib.h") "zlib.h"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -13406,14 +13177,13 @@ to an artifact/contaminant file.")
                (install-file "velveth" bin)
                (install-file "velvetg" bin)
                (install-file "Manual.pdf" doc)
-               (install-file "Columbus_manual.pdf" doc)
-               #t))))))
+               (install-file "Columbus_manual.pdf" doc)))))))
     (inputs
-     `(("openmpi" ,openmpi)
-       ("zlib" ,zlib)))
+     (list openmpi zlib))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-graphics
-                                        texlive-latex-hyperref)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-latex-graphics
+                                             texlive-fonts-ec
+                                             texlive-hyperref)))))
     (home-page "https://www.ebi.ac.uk/~zerbino/velvet/")
     (synopsis "Nucleic acid sequence assembler for very short reads")
     (description
@@ -13434,22 +13204,26 @@ repeated areas between contigs.")
        (uri (pypi-uri "velocyto" version))
        (sha256
         (base32
-         "0fgygyzqgrq32dv6a00biq1p1cwi6kbl5iqblxq1kklj6b2mzmhs"))))
+         "0fgygyzqgrq32dv6a00biq1p1cwi6kbl5iqblxq1kklj6b2mzmhs"))
+       (modules '((guix build utils)))
+       ;; Delete generated C files.
+       (snippet
+        '(for-each delete-file (find-files "." "\\.c")))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-joblib" ,python-joblib)))
+     (list python-joblib))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-cython" ,python-cython)
-       ("python-h5py" ,python-h5py)
-       ("python-loompy" ,python-loompy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pysam" ,python-pysam)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-click
+           python-cython
+           python-h5py
+           python-loompy
+           python-matplotlib
+           python-numba
+           python-numpy
+           python-pandas
+           python-pysam
+           python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/velocyto-team/velocyto.py")
     (synopsis "RNA velocity analysis for single cell RNA-seq data")
     (description
@@ -13501,14 +13275,14 @@ includes a command line tool and an analysis pipeline.")
                  `("R_LIBS_SITE" ":" prefix (,(getenv "R_LIBS_SITE")))))
              #t)))))
     (inputs
-     `(("htslib" ,htslib)
-       ("r-minimal" ,r-minimal)
-       ("r-circlize" ,r-circlize)
-       ("r-genomicalignments" ,r-genomicalignments)
-       ("r-genomicranges" ,r-genomicranges)
-       ("samtools" ,samtools)
-       ("star" ,star)
-       ("zlib" ,zlib)))
+     (list htslib
+           r-minimal
+           r-circlize
+           r-genomicalignments
+           r-genomicranges
+           samtools
+           star
+           zlib))
     (home-page "https://github.com/suhrig/arriba")
     (synopsis "Gene fusion detection from RNA-Seq data ")
     (description
@@ -13539,15 +13313,15 @@ tools which build on STAR, Arriba does not require to reduce the
          "1nf3ki5pfzalhrx2fr1y6pfqfi133yj2m7q4fj9irf5fb94bapwr"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "COLOR_BUILD=no"
-                          (string-append "PREFIX="
-                                         (assoc-ref %outputs "out")))
+     `(#:make-flags
+       ,#~(list "COLOR_BUILD=no"
+                (string-append "PREFIX=" #$output))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://adapterremoval.readthedocs.io/")
     (synopsis "Rapid sequence adapter trimming, identification, and read merging")
     (description
@@ -13651,7 +13425,7 @@ let before_space s =
        #:findlib ,ocaml4.07-findlib))
       (inputs
        `(("zlib" ,zlib "static")
-         ("gsl" ,gsl)
+         ("gsl" ,gsl-static)
          ("ocaml-ounit" ,(package-with-ocaml4.07 ocaml-ounit))
          ("ocaml-batteries" ,(package-with-ocaml4.07 ocaml-batteries))
          ("ocaml-camlzip" ,(package-with-ocaml4.07 camlzip))
@@ -13666,7 +13440,7 @@ let before_space s =
          ("ocamlbuild" ,(package-with-ocaml4.07 ocamlbuild))
          ("pkg-config" ,pkg-config)))
       (propagated-inputs
-       `(("pplacer-scripts" ,pplacer-scripts)))
+       (list pplacer-scripts))
       (synopsis "Phylogenetic placement of biological sequences")
       (description
        "Pplacer places query sequences on a fixed reference phylogenetic tree
@@ -13736,11 +13510,8 @@ downstream analysis.")
            (lambda _
              (setenv "HOME" "/tmp"))))))
     (inputs
-     `(("python-dendropy" ,python-dendropy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pysam" ,python-pysam)
-       ("python-scipy" ,python-scipy)))
+     (list python-dendropy python-matplotlib python-numpy python-pysam
+           python-scipy))
     (home-page "https://ecogenomics.github.io/CheckM/")
     (synopsis "Assess the quality of putative genome bins")
     (description
@@ -13772,14 +13543,14 @@ proximity within a reference genome.")
          "08y3vz1vcx09whmbsn722lcs6jl9wyrh9i4p3k8j4cb1i32bij4a"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-future" ,python-future)
-       ("python-scipy" ,python-scipy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-regex" ,python-regex)
-       ("python-pysam" ,python-pysam)))
+     (list python-pandas
+           python-future
+           python-scipy
+           python-matplotlib
+           python-regex
+           python-pysam))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/CGATOxford/UMI-tools")
     (synopsis "Tools for analyzing unique modular identifiers")
     (description "This package provides tools for dealing with @dfn{Unique
@@ -13809,22 +13580,19 @@ on the needs of the user.")
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "prefix=" (assoc-ref %outputs "out"))
-             (string-append "BOOST_ROOT="
-                            (assoc-ref %build-inputs "boost"))
-             (string-append "HTSLIB_ROOT="
-                            (assoc-ref %build-inputs "htslib")))
+       ,#~(list (string-append "prefix=" #$output)
+                (string-append "BOOST_ROOT="
+                               #$(this-package-input "boost"))
+                (string-append "HTSLIB_ROOT="
+                               #$(this-package-input "htslib")))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("boost" ,boost)
-       ("htslib" ,htslib)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list boost htslib ncurses zlib))
     (native-inputs
-     `(("lcov" ,lcov)))
+     (list lcov))
     (home-page "https://github.com/ParkerLab/ataqv")
     (synopsis "Toolkit for quality control and visualization of ATAC-seq data")
     (description "This package provides a toolkit for measuring and comparing
@@ -13848,13 +13616,13 @@ might be caused by ATAC-seq library prep or sequencing.  The main program,
         (base32 "08438h16cfry5kqh3y9hs8q1b1a8bxhblsm75knviz5r6q0n1jxh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-dplyr" ,r-dplyr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-mass
+           r-dplyr
+           r-tidyr
+           r-purrr
+           r-readr
+           r-magrittr
+           r-ggplot2))
     (home-page "https://github.com/kcha/psiplot")
     (synopsis "Plot percent spliced-in values of alternatively-spliced exons")
     (description
@@ -13888,10 +13656,10 @@ are generated using @code{ggplot2}.")
          ;; disable building them.
          "-DENABLE_PYTHON=OFF")))
     (inputs
-     `(;("hdf5" ,hdf5-1.10)
-       ("zstd" ,zstd "lib")))
+     (list ;("hdf5" ,hdf5-1.10)
+           `(,zstd "lib")))
     (native-inputs
-     `(("googlebenchmark" ,googlebenchmark)))
+     (list googlebenchmark))
     (home-page "https://github.com/nanoporetech/vbz_compression/")
     (synopsis "VBZ compression plugin for nanopore signal data")
     (description
@@ -13930,12 +13698,9 @@ effective when applied to the signal dataset.")
                             "/hdf5/lib/plugin/libvbz_hdf_plugin.so")
                            "ont_fast5_api/vbz_plugin/"))))))
     (inputs
-     `(("vbz-compression" ,vbz-compression)))
+     (list vbz-compression))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-h5py" ,python-h5py)
-       ("python-packaging" ,python-packaging)
-       ("python-progressbar33" ,python-progressbar33)))
+     (list python-numpy python-h5py python-packaging python-progressbar33))
     (home-page "https://github.com/nanoporetech/ont_fast5_api")
     (synopsis "Interface to HDF5 files of the Oxford Nanopore fast5 file format")
     (description
@@ -13946,8 +13711,8 @@ and reflect the fast5 file schema, and tools to convert between
     (license license:mpl2.0)))
 
 (define-public tbsp
-  (let ((commit "ec8fff4410cfb13a677dbbb95cbbc60217e64907")
-        (revision "1"))
+  (let ((commit "dc30c03868233c5504299c9cb0d7b2064ba9cb41")
+        (revision "2"))
     (package
       (name "tbsp")
       (version (git-version "1.0.0" revision commit))
@@ -13960,17 +13725,24 @@ and reflect the fast5 file schema, and tools to convert between
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "025ym14x8gbd6hb55lsinqj6f5qzw36i10klgs7ldzxxd7s39ki1"))))
+           "1im0bik2hxkcb7jzkcxp5nqb30hd8lfraxml6i5ik52j6z3qqln1"))))
       (build-system python-build-system)
-      (arguments '(#:tests? #f))        ; no tests included
+      (arguments
+       '(#:tests? #f         ; no tests included
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'relax-requirements
+             (lambda _
+               (substitute* "setup.py"
+                 ((", <3.0") ""))))))) ; matplotlib
       (inputs
-       `(("python-matplotlib" ,python-matplotlib)
-         ("python-networkx" ,python-networkx)
-         ("python-numpy" ,python-numpy)
-         ("python-pybigwig" ,python-pybigwig)
-         ("python-biopython" ,python-biopython)
-         ("python-scikit-learn" ,python-scikit-learn)
-         ("python-scipy" ,python-scipy)))
+       (list python-matplotlib
+             python-networkx
+             python-numpy
+             python-pybigwig
+             python-biopython-1.73
+             python-scikit-learn
+             python-scipy))
       (home-page "https://github.com/phoenixding/tbsp/")
       (synopsis "SNP-based trajectory inference")
       (description
@@ -14001,8 +13773,7 @@ mutations from scRNA-Seq data.")
          (delete-file-recursively "htslib") #t))))
    (build-system gnu-build-system)
    (inputs
-    `(("htslib" ,htslib)
-      ("zlib" ,zlib)))
+    (list htslib zlib))
    (arguments
     `(#:tests? #f ; There are no tests to run.
       #:phases
@@ -14176,8 +13947,9 @@ combinatorial configurations.\", G. Ehrlich - Journal of the ACM (JACM),
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-                 (install-file "fsom" bin))
-               #t)))))
+                 (install-file "fsom" bin)))))))
+      (native-inputs
+       (list gcc-6))
       (home-page "https://github.com/ekg/fsom")
       (synopsis "Manage SOM (Self-Organizing Maps) neural networks")
       (description "A tiny C library for managing SOM (Self-Organizing Maps)
@@ -14288,15 +14060,15 @@ library automatically handles index file generation and use.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("htslib" ,htslib)
-       ("fastahack" ,fastahack)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("smithwaterman" ,smithwaterman)
-       ("tabixpp" ,tabixpp)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           htslib
+           fastahack
+           perl
+           python
+           smithwaterman
+           tabixpp
+           xz
+           zlib))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ;; Submodules.
@@ -14381,11 +14153,7 @@ manipulations on VCF files.")
                   #t))))
     (build-system meson-build-system)
     (inputs
-     `(("fastahack" ,fastahack)
-       ("htslib" ,htslib)
-       ("smithwaterman" ,smithwaterman)
-       ("tabixpp" ,tabixpp)
-       ("vcflib" ,vcflib)))
+     (list fastahack htslib smithwaterman tabixpp vcflib))
     (native-inputs
      `(("bash-tap" ,bash-tap)
        ("bc" ,bc)
@@ -14502,24 +14270,24 @@ pairs.")
            "16wqf70j7rd7pay2q513iyz12i8n9vrpg1bisah4lddbcpx5dz1n"))))
       (build-system r-build-system)
       (inputs
-       `(("boost" ,boost)))
+       (list boost))
       (propagated-inputs
-       `(("r-hdf5r" ,r-hdf5r)
-         ("r-mass" ,r-mass)
-         ("r-mgcv" ,r-mgcv)
-         ("r-pcamethods" ,r-pcamethods)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpparmadillo" ,r-rcpparmadillo)
-         ;; Suggested packages
-         ("r-rtsne" ,r-rtsne)
-         ("r-cluster" ,r-cluster)
-         ("r-abind" ,r-abind)
-         ("r-h5" ,r-h5)
-         ("r-biocgenerics" ,r-biocgenerics)
-         ("r-genomicalignments" ,r-genomicalignments)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-edger" ,r-edger)
-         ("r-igraph" ,r-igraph)))
+       (list r-hdf5r
+             r-mass
+             r-mgcv
+             r-pcamethods
+             r-rcpp
+             r-rcpparmadillo
+             ;; Suggested packages
+             r-rtsne
+             r-cluster
+             r-abind
+             r-h5
+             r-biocgenerics
+             r-genomicalignments
+             r-rsamtools
+             r-edger
+             r-igraph))
       (home-page "https://velocyto.org")
       (synopsis "RNA velocity estimation in R")
       (description
@@ -14545,9 +14313,9 @@ patterns.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list "CC=gcc"
-             (string-append "prefix="
-                            (assoc-ref %outputs "out") "/bin/"))
+       ,#~(list "CC=gcc"
+                "CFLAGS=-fcommon"
+                (string-append "prefix=" #$output "/bin/"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -14555,13 +14323,10 @@ patterns.")
              (substitute* "Makefile"
                (("-lhts ") "-lhts -lBigWig ")
                (("install MethylDackel \\$\\(prefix\\)" match)
-                (string-append "install -d $(prefix); " match)))
-             #t)))))
+                (string-append "install -d $(prefix); " match))))))))
     (inputs
-     `(("curl" ,curl) ; XXX: needed by libbigwig
-       ("htslib" ,htslib-1.9)
-       ("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)))
+     (list curl ; XXX: needed by libbigwig
+           htslib-1.9 libbigwig zlib))
     ;; Needed for tests
     (native-inputs
      `(("python" ,python-wrapper)))
@@ -14593,8 +14358,8 @@ containing the reference genome as well.")
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
-       (list "CC=gcc"
-             (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+       ,#~(list "CC=gcc"
+                (string-append "DESTDIR=" #$output))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -14631,9 +14396,9 @@ containing the reference genome as well.")
              ;; unknown reasons.
              (invoke "make" "-C" "test" "msa_view"))))))
     (inputs
-     `(("clapack" ,clapack)))
+     (list clapack))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://compgen.cshl.edu/phast/")
     (synopsis "Phylogenetic analysis with space/time models")
     (description
@@ -14678,15 +14443,15 @@ alignments, trees and genomic annotations.")
                          (find-files "." "\\.gz"))
                #t)))))
       (propagated-inputs
-       `(("python-argcomplete" ,python-argcomplete)
-         ("python-argh" ,python-argh)
-         ("python-biopython" ,python-biopython)
-         ("python-pybedtools" ,python-pybedtools)
-         ("python-pyfaidx" ,python-pyfaidx)
-         ("python-simplejson" ,python-simplejson)
-         ("python-six" ,python-six)))
+       (list python-argcomplete
+             python-argh
+             python-biopython
+             python-pybedtools
+             python-pyfaidx
+             python-simplejson
+             python-six))
       (native-inputs
-       `(("python-nose" , python-nose)))
+       (list python-nose))
       (home-page "https://github.com/daler/gffutils")
       (synopsis "Tool for manipulation of GFF and GTF files")
       (description
@@ -14719,7 +14484,7 @@ than is possible with plain-text methods alone.")
      `(("java-commons-lang2" ,java-commons-lang)
        ("java-args4j" ,java-args4j)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/cbg-ethz/InDelFixer/")
     (synopsis "Iterative and sensitive NGS sequence aligner")
     (description "InDelFixer is a sensitive aligner for 454, Illumina and
@@ -14748,18 +14513,17 @@ The output is in SAM format.")
     (arguments
      `(#:test-target "test"
        #:configure-flags
-       (list "-DWITH_CHECK=ON"
-             (string-append "-DLIBXML_LIBRARY="
-                            (assoc-ref %build-inputs "libxml2")
-                            "/lib/libxml2.so")
-             (string-append "-DLIBXML_INCLUDE_DIR="
-                            (assoc-ref %build-inputs "libxml2")
-                            "/include/libxml2"))))
+       ,#~(list "-DWITH_CHECK=ON"
+                (string-append "-DLIBXML_LIBRARY="
+                               #$(this-package-input "libxml2")
+                               "/lib/libxml2.so")
+                (string-append "-DLIBXML_INCLUDE_DIR="
+                               #$(this-package-input "libxml2")
+                               "/include/libxml2"))))
     (propagated-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("swig" ,swig)))
+     (list check-0.14 swig))
     (home-page "http://sbml.org/Software/libSBML")
     (synopsis "Process SBML files and data streams")
     (description "LibSBML is a library to help you read, write, manipulate,
@@ -14786,9 +14550,9 @@ international community.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #false                  ; there are none
-       #:make-flags (list "-C" "src"
-                          (string-append "KRAKEN2_DIR="
-                                         (assoc-ref %outputs "out") "/bin"))
+       #:make-flags
+       ,#~(list "-C" "src"
+                (string-append "KRAKEN2_DIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -14844,12 +14608,12 @@ international community.")
                                (install-file script bin))
                              scripts)))))))))
     (inputs
-     `(("gzip" ,gzip)
-       ("perl" ,perl)
-       ("rsync" ,rsync)
-       ("sed" ,sed)
-       ("wget" ,wget)
-       ("which" ,which)))
+     (list gzip
+           perl
+           rsync
+           sed
+           wget
+           which))
   (home-page "https://github.com/DerrickWood/kraken2")
   (synopsis "Taxonomic sequence classification system")
   (description "Kraken is a taxonomic sequence classifier that assigns
@@ -14881,9 +14645,7 @@ genomes known to contain a given k-mer.")
        ("python" ,python-wrapper)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("which" ,which)))
+     (list autoconf automake which))
     (home-page "https://csb5.github.io/lofreq/")
     (synopsis "Sensitive variant calling from sequencing data ")
     (description "LoFreq is a fast and sensitive variant-caller for inferring
@@ -14909,11 +14671,9 @@ usually ignored by other methods or only used for filtering.")
     (build-system gnu-build-system)
     (arguments `(#:parallel-tests? #false)) ; not supported
     (inputs
-     `(("htslib" ,htslib)
-       ("zlib" ,zlib)))
+     (list htslib zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://andersen-lab.github.io/ivar/html/")
     (synopsis "Tools for amplicon-based sequencing")
     (description "iVar is a computational package that contains functions
@@ -14937,7 +14697,7 @@ broadly useful for viral amplicon-based sequencing. ")
     (build-system python-build-system)
     (arguments `(#:tests? #false)) ; the tests access the web
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/konstantint/pyliftover")
     (synopsis "Python implementation of UCSC liftOver genome coordinate conversion")
     (description
@@ -14984,15 +14744,15 @@ coordinates between different assemblies.")
        ("hostname" ,inetutils)
        ("openssl" ,openssl)))
     (inputs
-     `(("time" ,time)))
+     (list time))
     (propagated-inputs
-     `(("python-apsw" ,python-apsw)
-       ("python-gevent" ,python-gevent)
-       ("python-pandas" ,python-pandas)
-       ("python-paramiko" ,python-paramiko)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-ruffus" ,python-ruffus)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-apsw
+           python-gevent
+           python-pandas
+           python-paramiko
+           python-pyyaml
+           python-ruffus
+           python-sqlalchemy))
     (home-page "https://github.com/cgat-developers/cgat-core")
     (synopsis "Computational genomics analysis toolkit")
     (description
@@ -15075,7 +14835,7 @@ large-scale data-analysis.")
                                 (string-append ":" out
                                                "/lib/perl5/site_perl"))
                            pl)
-                 (for-each (cut wrap <> "PYTHONPATH") py))))))))
+                 (for-each (cut wrap <> "GUIX_PYTHONPATH") py))))))))
     (inputs
      `(("libgd" ,gd)
        ("perl-gd" ,perl-gd)
@@ -15088,7 +14848,7 @@ large-scale data-analysis.")
        ("python-scikit-learn" ,python-scikit-learn)
        ("r-minimal" ,r-minimal)))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://github.com/dekkerlab/cworld-dekker")
     (synopsis "Utility and analysis scripts for 3C, 4C, 5C, and Hi-C data")
     (description "This package is a collection of Perl, Python, and R
@@ -15204,16 +14964,16 @@ my @test_files = map {\"$dirname\\/t\\/\".$_} grep {!/^\\./ && /\\.t$/} readdir
 runtests(@test_files);
 "))))))))
       (inputs
-       `(("bioperl-minimal" ,bioperl-minimal)
-         ("perl-bio-db-hts" ,perl-bio-db-hts)
-         ("perl-dbi" ,perl-dbi)
-         ("perl-dbd-mysql" ,perl-dbd-mysql)
-         ("perl-libwww" ,perl-libwww)
-         ("perl-http-tiny" ,perl-http-tiny)
-         ("perl-json" ,perl-json)
-         ("which" ,which)))
+       (list bioperl-minimal
+             perl-bio-db-hts
+             perl-dbi
+             perl-dbd-mysql
+             perl-libwww
+             perl-http-tiny
+             perl-json
+             which))
       (propagated-inputs
-       `(("kentutils" ,kentutils)))
+       (list kentutils))
       (native-inputs
        `(("unzip" ,unzip)
          ("perl" ,perl)
@@ -15259,39 +15019,39 @@ translates between different variant encodings.")
            "1yihhrv7zs87ax61la1nb4y12lg3knraw4b20k5digbcwm8488lb"))))
       (properties `((upstream-name . "Signac")))
       (build-system r-build-system)
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (propagated-inputs
-       `(("r-annotationfilter" ,r-annotationfilter)
-         ("r-biocgenerics" ,r-biocgenerics)
-         ("r-biostrings" ,r-biostrings)
-         ("r-biovizbase" ,r-biovizbase)
-         ("r-data-table" ,r-data-table)
-         ("r-dplyr" ,r-dplyr)
-         ("r-fastmatch" ,r-fastmatch)
-         ("r-future" ,r-future)
-         ("r-future-apply" ,r-future-apply)
-         ("r-genomeinfodb" ,r-genomeinfodb)
-         ("r-genomicranges" ,r-genomicranges)
-         ("r-ggbio" ,r-ggbio)
-         ("r-ggforce" ,r-ggforce)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggrepel" ,r-ggrepel)
-         ("r-ggseqlogo" ,r-ggseqlogo)
-         ("r-iranges" ,r-iranges)
-         ("r-irlba" ,r-irlba)
-         ("r-lsa" ,r-lsa)
-         ("r-matrix" ,r-matrix)
-         ("r-patchwork" ,r-patchwork)
-         ("r-pbapply" ,r-pbapply)
-         ("r-rcpp" ,r-rcpp)
-         ("r-rcpproll" ,r-rcpproll)
-         ("r-rsamtools" ,r-rsamtools)
-         ("r-s4vectors" ,r-s4vectors)
-         ("r-scales" ,r-scales)
-         ("r-seurat" ,r-seurat)
-         ("r-seuratobject" ,r-seuratobject)
-         ("r-stringi" ,r-stringi)
-         ("r-tidyr" ,r-tidyr)))
+       (list r-annotationfilter
+             r-biocgenerics
+             r-biostrings
+             r-biovizbase
+             r-data-table
+             r-dplyr
+             r-fastmatch
+             r-future
+             r-future-apply
+             r-genomeinfodb
+             r-genomicranges
+             r-ggbio
+             r-ggforce
+             r-ggplot2
+             r-ggrepel
+             r-ggseqlogo
+             r-iranges
+             r-irlba
+             r-lsa
+             r-matrix
+             r-patchwork
+             r-pbapply
+             r-rcpp
+             r-rcpproll
+             r-rsamtools
+             r-s4vectors
+             r-scales
+             r-seurat
+             r-seuratobject
+             r-stringi
+             r-tidyr))
       (home-page "https://github.com/timoast/signac/")
       (synopsis "Analysis of single-cell chromatin data")
       (description
@@ -15315,18 +15075,17 @@ sequence motif analysis.")
          "1023hadgcsgi53kz53ql45207hfizf9sw57z0qij3ay1bx68zbpm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose2" ,python-nose2)))
+     (list python-cython python-nose2))
     ;; The package mainly consists of a command-line tool, but also has a
     ;; Python-API. Thus these must be propagated.
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-h5py" ,python-h5py)
-       ("python-mappy" ,python-mappy)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-tqdm" ,python-tqdm)
-       ("python-rpy2" ,python-rpy2)))
+     (list python-future
+           python-h5py
+           python-mappy
+           python-numpy
+           python-scipy
+           python-tqdm
+           python-rpy2))
     (home-page "https://github.com/nanoporetech/tombo")
     (synopsis "Analysis of raw nanopore sequencing data")
     (description "Tombo is a suite of tools primarily for the identification of
@@ -15355,17 +15114,21 @@ for the analysis and visualization of raw nanopore signal.")
     (arguments
      `(#:phases
         (modify-phases %standard-phases
+          (add-after 'unpack 'patch-sample-script
+            (lambda _
+              ;; Add Python 3 compatibility to this sample script.
+              (substitute* "scripts/vcf_sample_filter.py"
+                (("print (.*)\n" _ arg)
+                 (string-append "print(" arg ")\n")))))
           (add-after 'install 'remove-installed-tests
             ;; Do not install test files.
             (lambda* (#:key inputs outputs #:allow-other-keys)
               (delete-file-recursively (string-append
                                          (site-packages inputs outputs)
-                                         "vcf/test"))
-              #t)))))
-    (native-inputs `(("python-cython" ,python-cython)))
+                                         "/vcf/test")))))))
+    (native-inputs (list python-cython))
     (propagated-inputs
-     `(("python-pysam" ,python-pysam)
-       ("python-rpy2" ,python-rpy2)))
+     (list python-pysam python-rpy2))
     (home-page "https://github.com/jamescasbon/PyVCF")
     (synopsis "Variant Call Format parser for Python")
     (description "This package provides a @acronym{VCF,Variant Call Format}
@@ -15384,9 +15147,7 @@ parser for Python.")
               "1wl2daj0bwrl8fx5xi8j8hfs3mp3vg3qycy66538n032v1qkc6xg"))))
    (build-system python-build-system)
    (inputs
-    `(("python-configparser" ,python-configparser)
-      ("python-pysam" ,python-pysam)
-      ("python-pyvcf" ,python-pyvcf)))
+    (list python-configparser python-pysam python-pyvcf))
    (home-page "https://github.com/mroosmalen/nanosv")
    (synopsis "Structural variation detection tool for Oxford Nanopore data.")
    (description "NanoSV is a software package that can be used to identify
@@ -15408,10 +15169,9 @@ instruments, or Pacific Biosciences RSII or Sequel sequencers.")
          "1z1gy8n56lhriy6hdkh9r82ndikndipq2cy2wh8q185qig4rimr6"))))
     (build-system python-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("zlib" ,zlib)))
+     (list curl zlib))
     (propagated-inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (home-page "https://github.com/aidenlab/straw")
     (synopsis "Stream data from .hic files")
     (description "Straw is library which allows rapid streaming of contact
@@ -15444,18 +15204,11 @@ data from @file{.hic} files.  This package provides Python bindings.")
                (with-directory-excursion "/tmp/tests"
                  (invoke "python" "-m" "pytest" "-v"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pkgconfig python-pytest))
     (inputs
-     `(("libpng" ,libpng)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libpng openssl zlib))
     (propagated-inputs
-     `(("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-six" ,python-six)))
+     (list python-cython python-numpy python-pandas python-six))
     (home-page "https://github.com/nvictus/pybbi")
     (synopsis "Python bindings to UCSC Big Binary file library")
     (description
@@ -15479,8 +15232,7 @@ feature is fast retrieval of range queries into numpy arrays.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are none
     (propagated-inputs
-     `(("python-biopython" ,python-biopython)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-biopython python-matplotlib))
     (home-page
      "https://github.com/Edinburgh-Genome-Foundry/DnaFeaturesViewer")
     (synopsis "Plot features from DNA sequences")
@@ -15503,28 +15255,28 @@ e.g. from GenBank or Gff files, or Biopython SeqRecords.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are none
     (inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (propagated-inputs
-     `(("python-cooler" ,python-cooler)
-       ("python-dna-features-viewer" ,python-dna-features-viewer)
-       ("python-fire" ,python-fire)
-       ("python-h5py" ,python-h5py)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("jupyter" ,jupyter)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-nbformat" ,python-nbformat)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-pandas" ,python-pandas)
-       ("python-pybbi" ,python-pybbi)
-       ("python-pytest" ,python-pytest)
-       ("python-scipy" ,python-scipy)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-strawc" ,python-strawc)
-       ("python-svgutils" ,python-svgutils)
-       ("python-termcolor" ,python-termcolor)
-       ("python-voila" ,python-voila)))
+     (list python-cooler
+           python-dna-features-viewer
+           python-fire
+           python-h5py
+           python-intervaltree
+           python-ipywidgets
+           jupyter
+           python-matplotlib
+           python-nbformat
+           python-numpy
+           python-numpydoc
+           python-pandas
+           python-pybbi
+           python-pytest
+           python-scipy
+           python-statsmodels
+           python-strawc
+           python-svgutils
+           python-termcolor
+           python-voila))
     (home-page "https://github.com/GangCaoLab/CoolBox")
     (synopsis "Genomic data visualization toolkit")
     (description
@@ -15572,7 +15324,7 @@ browser.")
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "tests/test_pyspoa.py")))))))
     (propagated-inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (native-inputs
      `(("cmake" ,cmake-minimal)))
     (home-page "https://github.com/nanoporetech/pyspoa")
@@ -15593,14 +15345,25 @@ sequences")
        (method url-fetch)
        (uri (pypi-uri "bwapy" version))
        (sha256
-        (base32 "090qwx3vl729zn3a7sksbviyg04kc71gpbm3nd8dalqp673x1npw"))))
+        (base32 "090qwx3vl729zn3a7sksbviyg04kc71gpbm3nd8dalqp673x1npw"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "." "\\.o$")))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "setup.py"
+               (("wheel>=0.34") "wheel>=0.30"))))
+         ;; TODO: it's possible that the import error points to a real
+         ;; problem with the C sources.
+         (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-setuptools" ,python-setuptools)
-       ("python-wheel" ,python-wheel)))
+     (list python-cffi python-setuptools python-wheel))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/ACEnglish/bwapy")
     (synopsis "Python bindings to bwa alinger")
     (description "This package provides Python bindings to the bwa mem
@@ -15633,21 +15396,21 @@ aligner.")
              (substitute* "setup.py"
                (("'sklearn',") "")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-numpy" ,python-numpy)
-       ("python-hmmlearn" ,python-hmmlearn)
-       ("python-pandas" ,python-pandas)
-       ("python-numba" ,python-numba)
-       ("python-anndata" ,python-anndata)
-       ("python-scanpy" ,python-scanpy)
-       ("python-pybedtools" ,python-pybedtools)
-       ("python-pysam" ,python-pysam)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-seaborn" ,python-seaborn)
-       ("python-coolbox" ,python-coolbox)))
+     (list python-scikit-learn
+           python-scipy
+           python-numpy
+           python-hmmlearn
+           python-pandas
+           python-numba
+           python-anndata
+           python-scanpy
+           python-pybedtools
+           python-pysam
+           python-matplotlib
+           python-seaborn
+           python-coolbox))
     (home-page "https://github.com/BIMSBbioinfo/scregseg")
     (synopsis "Single-cell regulatory landscape segmentation")
     (description "Scregseg (Single-Cell REGulatory landscape SEGmentation) is a
@@ -15706,15 +15469,9 @@ cross-cluster accessibility profiles.")
                (copy-file "megadepth_dynamic"
                           (string-append bin "/megadepth"))))))))
     (native-inputs
-     `(("diffutils" ,diffutils)
-       ("perl" ,perl)
-       ("grep" ,grep)))
+     (list diffutils perl grep))
     (inputs
-     `(("curl" ,curl)
-       ("htslib" ,htslib)
-       ("libdeflate" ,libdeflate)
-       ("libbigwig" ,libbigwig)
-       ("zlib" ,zlib)))
+     (list curl htslib libdeflate libbigwig zlib))
     (home-page "https://github.com/ChristopherWilks/megadepth")
     (synopsis "BigWig and BAM/CRAM related utilities")
     (description "Megadepth is an efficient tool for extracting coverage
@@ -15745,7 +15502,7 @@ both types of files.")
          (lambda _
            (chdir "ASCAT"))))))
    (propagated-inputs
-    `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+    (list r-rcolorbrewer))
    (home-page "https://github.com/VanLoo-lab/ascat/")
    (synopsis "Allele-Specific Copy Number Analysis of Tumors in R")
    (description "This package provides the @acronym{ASCAT,Allele-Specific Copy
@@ -15768,14 +15525,14 @@ ploidy and allele-specific copy number profiles.")
               "0nmcq4c7y5g8h8lxsq9vadz9bj4qgqn118alip520ny6czaxki4h"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-devtools" ,r-devtools)
-      ("r-readr" ,r-readr)
-      ("r-doparallel" ,r-doparallel)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-rcolorbrewer" ,r-rcolorbrewer)
-      ("r-gridextra" ,r-gridextra)
-      ("r-gtools" ,r-gtools)
-      ("r-ascat" ,r-ascat)))
+    (list r-devtools
+          r-readr
+          r-doparallel
+          r-ggplot2
+          r-rcolorbrewer
+          r-gridextra
+          r-gtools
+          r-ascat))
    (home-page "https://github.com/Wedge-lab/battenberg")
    (synopsis "Subclonal copy number estimation in R")
    (description "This package contains the Battenberg R package for subclonal
@@ -15830,51 +15587,51 @@ value of physical insulation between neighboring domains.")
       (properties `((upstream-name . "Spectre")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-biobase" ,r-biobase)
-         ("r-biocmanager" ,r-biocmanager)
-         ("r-caret" ,r-caret)
-         ("r-class" ,r-class)
-         ("r-colorramps" ,r-colorramps)
-         ("r-data-table" ,r-data-table)
-         ("r-devtools" ,r-devtools)
-         ("r-dplyr" ,r-dplyr)
-         ("r-exactextractr" ,r-exactextractr)
-         ("r-factoextra" ,r-factoextra)
-         ("r-flowcore" ,r-flowcore)
-         ("r-flowsom" ,r-flowsom)
-         ("r-flowviz" ,r-flowviz)
-         ("r-fnn" ,r-fnn)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-ggpointdensity" ,r-ggpointdensity)
-         ("r-ggpubr" ,r-ggpubr)
-         ("r-ggraph" ,r-ggraph)
-         ("r-ggthemes" ,r-ggthemes)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gridextra" ,r-gridextra)
-         ("r-gtools" ,r-gtools)
-         ("r-hdf5array" ,r-hdf5array)
-         ("r-irlba" ,r-irlba)
-         ("r-pheatmap" ,r-pheatmap)
-         ("r-plyr" ,r-plyr)
-         ("r-qs" ,r-qs)
-         ("r-raster" ,r-raster)
-         ("r-rcolorbrewer" ,r-rcolorbrewer)
-         ("r-rgeos" ,r-rgeos)
-         ("r-rhdf5" ,r-rhdf5)
-         ("r-rstudioapi" ,r-rstudioapi)
-         ("r-rsvd" ,r-rsvd)
-         ("r-rtsne" ,r-rtsne)
-         ("r-s2" ,r-s2)
-         ("r-scales" ,r-scales)
-         ("r-sf" ,r-sf)
-         ("r-sp" ,r-sp)
-         ("r-stars" ,r-stars)
-         ("r-stringr" ,r-stringr)
-         ("r-tidygraph" ,r-tidygraph)
-         ("r-tidyr" ,r-tidyr)
-         ("r-tidyr" ,r-tidyr)
-         ("r-tiff" ,r-tiff)
-         ("r-umap" ,r-umap)))
+       (list r-biobase
+             r-biocmanager
+             r-caret
+             r-class
+             r-colorramps
+             r-data-table
+             r-devtools
+             r-dplyr
+             r-exactextractr
+             r-factoextra
+             r-flowcore
+             r-flowsom
+             r-flowviz
+             r-fnn
+             r-ggplot2
+             r-ggpointdensity
+             r-ggpubr
+             r-ggraph
+             r-ggthemes
+             r-gridextra
+             r-gridextra
+             r-gtools
+             r-hdf5array
+             r-irlba
+             r-pheatmap
+             r-plyr
+             r-qs
+             r-raster
+             r-rcolorbrewer
+             r-rgeos
+             r-rhdf5
+             r-rstudioapi
+             r-rsvd
+             r-rtsne
+             r-s2
+             r-scales
+             r-sf
+             r-sp
+             r-stars
+             r-stringr
+             r-tidygraph
+             r-tidyr
+             r-tidyr
+             r-tiff
+             r-umap))
       (home-page "https://github.com/ImmuneDynamics/Spectre")
       (synopsis "High-dimensional cytometry and imaging analysis")
       (description
@@ -15902,16 +15659,16 @@ cytometry and imaging data.")
       (properties `((upstream-name . "CytoNorm")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-cytoml" ,r-cytoml)
-         ("r-dplyr" ,r-dplyr)
-         ("r-emdist" ,r-emdist)
-         ("r-flowcore" ,r-flowcore)
-         ("r-flowsom" ,r-flowsom)
-         ("r-flowworkspace" ,r-flowworkspace)
-         ("r-ggplot2" ,r-ggplot2)
-         ("r-gridextra" ,r-gridextra)
-         ("r-pheatmap" ,r-pheatmap)
-         ("r-stringr" ,r-stringr)))
+       (list r-cytoml
+             r-dplyr
+             r-emdist
+             r-flowcore
+             r-flowsom
+             r-flowworkspace
+             r-ggplot2
+             r-gridextra
+             r-pheatmap
+             r-stringr))
       (home-page "https://github.com/saeyslab/CytoNorm")
       (synopsis "Normalize cytometry data measured across multiple batches")
       (description
@@ -15960,12 +15717,12 @@ interest.")
        ("guile" ,guile-3.0)
        ("guile-libyaml" ,guile-libyaml)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lzip" ,lzip)
-       ;; To build documentation
-       ("cwltool" ,cwltool)
-       ("graphviz" ,graphviz)
-       ("skribilo" ,skribilo)))
+     (list pkg-config
+           lzip
+           ;; To build documentation
+           cwltool
+           graphviz
+           skribilo))
     (home-page "https://ccwl.systemreboot.net")
     (synopsis "Concise common workflow language")
     (description "The @acronym{ccwl, Concise Common Workflow Language} is a
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
index 4c6da7d9b7..5fd25452ff 100644
--- a/gnu/packages/bison.scm
+++ b/gnu/packages/bison.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2015, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
@@ -33,7 +33,7 @@
 (define-public bison
   (package
     (name "bison")
-    (version "3.5.3")
+    (version "3.7.6")
     (source
      (origin
       (method url-fetch)
@@ -41,7 +41,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1i57hbczvr8674z73775jxdd3y59qggs5lmfd60gmwm5i1gmpy1b"))))
+        "1kzkxrd3z4262k2sbxmyh9k5g5r2lakw0gv44l2hb4i1wbhqrmk7"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Building in parallel on many-core systems may cause an error such as
@@ -52,11 +52,11 @@
        ;; "./examples/c/reccalc/scan.l:13:10: fatal error: parse.h: No such file
        ;; or directory".  Full log in <https://bugs.gnu.org/36238>.
        #:parallel-tests? #f))
-    (native-inputs `(("perl" ,perl)
-                     ;; m4 is not present in PATH when cross-building.
-                     ("m4" ,m4)))
-    (inputs `(("flex" ,flex)))
-    (propagated-inputs `(("m4" ,m4)))
+    (native-inputs (list perl
+                         ;; m4 is not present in PATH when cross-building.
+                         m4))
+    (inputs (list flex))
+    (propagated-inputs (list m4))
     (home-page "https://www.gnu.org/software/bison/")
     (synopsis "Yacc-compatible parser generator")
     (description
@@ -68,17 +68,6 @@ simple tools through complex programming languages.
 Bison also provides an implementation of @command{yacc}, as specified by POSIX.")
     (license gpl3+)))
 
-(define-public bison-3.6
-  (package
-    (inherit bison)
-    (version "3.6.3")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/bison/bison-" version ".tar.xz"))
-      (sha256
-       (base32 "0gdpnjh6ra9xa9vj6hzjdf0c04x4pjyy8vssm3qdb7fya4v7knq6"))))))
-
 (define-public bison-3.0
   (package
     (inherit bison)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index e014136c44..0dcb1ee991 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu>
-;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
@@ -93,6 +93,10 @@
        (list (string-append "--localedir="
                             (assoc-ref %outputs "gui")
                             "/share/locale"))
+       ;; Some tests segfault when using libevent 2.12 without internet
+       ;; connection. This has been reported mainstream but not fixed yet:
+       ;; https://github.com/transmission/transmission/issues/1437.
+       #:tests? #f
        #:glib-or-gtk-wrap-excluded-outputs '("out")
        #:phases
        (modify-phases %standard-phases
@@ -118,14 +122,9 @@
                 (string-append gui "/share/man/man1/transmission-gtk.1"))
              #t))))))
     (inputs
-     `(("libevent" ,libevent)
-       ("curl" ,curl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("gtk+" ,gtk+)))
+     (list libevent curl openssl zlib gtk+))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://transmissionbt.com/")
     (synopsis "Fast and easy BitTorrent client")
     (description
@@ -147,26 +146,21 @@ DHT, µTP, PEX and Magnet Links.")
 (define-public transmission-remote-gtk
   (package
     (name "transmission-remote-gtk")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/transmission-remote-gtk/"
                            "transmission-remote-gtk/releases/download/"
                            version "/transmission-remote-gtk-" version
-                           ".tar.xz"))
-       (patches (search-patches "transmission-remote-gtk-fix-appstream.patch"))
+                           ".tar.gz"))
        (sha256
-        (base32 "1aqjl5rgamgcgqvcldd1gzyfh2xci0m7070924d6vz2qln0q75sr"))))
+        (base32 "0qz9wi70qc6vgnaymivc3xz6y86c9hglk6wjv3snnqxpxmp9saay"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gnu-gettext)
-       ("pkg-config" ,pkg-config)))
+     (list gnu-gettext pkg-config))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)))
+     (list appstream-glib curl gtk+ json-glib))
     (synopsis "Gtk frontend to the Transmission daemon")
     (description "transmission-remote-gtk is a GTK client for remote management
 of the Transmission BitTorrent client, using its HTTP RPC protocol.")
@@ -186,10 +180,8 @@ of the Transmission BitTorrent client, using its HTTP RPC protocol.")
                (base32
                 "10z9i1rc41cmmi7nx8k7k1agsx6afv09g9cl7g9zr35fyhl5l4gd"))))
     (build-system gnu-build-system)
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("cppunit" ,cppunit)))
+    (inputs (list openssl zlib))
+    (native-inputs (list pkg-config cppunit))
     (synopsis "BitTorrent library of rtorrent")
     (description
      "LibTorrent is a BitTorrent library used by and developed in parallel
@@ -211,14 +203,13 @@ speed and efficiency.")
                (base32
                 "1bs2fnf4q7mlhkhzp3i1v052v9xn8qa7g845pk9ia8hlpw207pwy"))))
     (build-system gnu-build-system)
-    (inputs `(("libtorrent" ,libtorrent)
-              ("ncurses" ,ncurses)
-              ("curl" ,curl)
-              ("cyrus-sasl" ,cyrus-sasl)
-              ("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("cppunit" ,cppunit)))
+    (inputs (list libtorrent
+                  ncurses
+                  curl
+                  cyrus-sasl
+                  openssl
+                  zlib))
+    (native-inputs (list pkg-config cppunit))
     (synopsis "BitTorrent client with ncurses interface")
     (description
      "rTorrent is a BitTorrent client with an ncurses interface.  It supports
@@ -252,7 +243,7 @@ XML-RPC over SCGI.")
          (delete 'configure)
          (delete 'build))))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Console client for the Transmission BitTorrent daemon")
     (description "Tremc is a console client, with a curses interface, for the
 Transmission BitTorrent daemon.")
@@ -331,17 +322,17 @@ maintained upstream.")
                 (string-append "// " text)))
              #t)))))
     (native-inputs
-     `(("cppunit" ,cppunit) ; for the tests
-       ("pkg-config" ,pkg-config)))
+     (list cppunit ; for the tests
+           pkg-config))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("gnutls" ,gnutls)
-       ("gmp" ,gmp)
-       ("libssh2" ,libssh2)
-       ("libxml2" ,libxml2)
-       ("nettle" ,nettle)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list c-ares
+           gnutls
+           gmp
+           libssh2
+           libxml2
+           nettle
+           sqlite
+           zlib))
     (home-page "https://aria2.github.io/")
     (synopsis "Utility for parallel downloading files")
     (description
@@ -363,18 +354,19 @@ Aria2 can be manipulated via built-in JSON-RPC and XML-RPC interfaces.")
        (sha256
         (base32 "0dlrjhnm1pg2vwmp7nl2xv1aia5hyirb3021rl46x859k63zap24"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (inputs
-     `(("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gstreamer" ,gstreamer)
-       ("libgcrypt" ,libgcrypt)
-       ("libnotify" ,libnotify)
-       ("openssl" ,openssl)))
+     (list curl
+           gtk+
+           glib
+           gnutls
+           gstreamer
+           libgcrypt
+           libnotify
+           openssl))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://ugetdm.com/")
     (synopsis "Universal download manager with GTK+ interface")
     (description
@@ -434,8 +426,7 @@ and will take advantage of multiple processor cores where possible.")
         (base32 "0gwm4w7337ykh5lfnspapnnz6a35g7yay3wnj126s8s5kcsvy9wy"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:cmake ,cmake                   ;3.17 or later
-       #:configure-flags '("-Dpython-bindings=ON"
+     `(#:configure-flags '("-Dpython-bindings=ON"
                            "-Dbuild_tests=ON")
        #:phases
        (modify-phases %standard-phases
@@ -455,8 +446,7 @@ and will take advantage of multiple processor cores where possible.")
                          "-j" (if parallel-tests?
                                   (number->string (parallel-job-count))
                                   "1")))))))))
-    (inputs `(("boost" ,boost)
-              ("openssl" ,openssl)))
+    (inputs (list boost openssl))
     (native-inputs `(("libfaketime" ,libfaketime)
                      ("python" ,python-wrapper)
                      ("pkg-config" ,pkg-config)))
@@ -502,8 +492,7 @@ desktops.")
                (wrap-qt-program "qbittorrent" #:output out #:inputs inputs))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("boost" ,boost)
        ("libtorrent-rasterbar" ,libtorrent-rasterbar)
@@ -556,8 +545,7 @@ features.")
        ("python-twisted" ,python-twisted)
        ("python-zope-interface" ,python-zope-interface)))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-wheel" ,python-wheel)))
+     (list intltool python-wheel))
     ;; TODO: Enable tests.
     ;; After "pytest-twisted" is packaged, HOME is set, and an X server is
     ;; started, some of the tests still fail.  There are likely some tests
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 19556dfdf9..53815c0268 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -3,17 +3,19 @@
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
@@ -65,29 +67,22 @@
 (define-public boost
   (package
     (name "boost")
-    (version "1.72.0")
+    (version "1.77.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://boostorg.jfrog.io/artifactory/main/release/"
                                   version "/source/boost_"
                                   (version-with-underscores version) ".tar.bz2"))
-              (patches
-               (list (boost-patch
-                      ;; 1.72.0 was released with a faulty coroutine submodule:
-                      ;; <https://github.com/boostorg/coroutine/issues/46>.
-                      "0001-revert-cease-dependence-on-range.patch" version
-                      "1zcqxzh56m1s635wqwk15j3zcs2gmjvjy2f0hid7i78s4pgm0yfs")))
               (sha256
                (base32
-                "08h7cv61fd0lzb4z50xanfqn0pdgvizjrpd1kcdgj725pisb5jar"))))
+                "0m08hhk3l7zvzajyk39qlw566q3fhixayhc2j11328qf0gy8b7zw"))))
     (build-system gnu-build-system)
-    (inputs `(("icu4c" ,icu4c)
-              ("zlib" ,zlib)))
+    (inputs (list icu4c zlib))
     (native-inputs
      `(("perl" ,perl)
        ,@(if (%current-target-system)
              '()
-             `(("python" ,python-wrapper)))
+             `(("python" ,python-minimal-wrapper)))
        ("tcsh" ,tcsh)))
     (arguments
      `(#:imported-modules ((guix build python-build-system)
@@ -128,8 +123,7 @@
                    (out (assoc-ref outputs "out")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
-                              "tools/build/src/engine/execunix.cpp"
-                              "tools/build/src/engine/Jambase")
+                              "tools/build/src/engine/execunix.cpp")
                  (("/bin/sh") (which "sh")))
 
                (setenv "SHELL" (which "sh"))
@@ -144,13 +138,9 @@
                      '())
 
                ;; Change an #ifdef __MACH__ that really targets macOS.
-               ;; TODO: Inline this on the next rebuild cycle.
-               ,@(if (hurd-target?)
-                     '((substitute* "boost/test/utils/timer.hpp"
-                         (("defined\\(__MACH__\\)")
-                          "(defined __MACH__ && !defined __GNU__)"))
-                       #t)
-                     '())
+               (substitute* "boost/test/utils/timer.hpp"
+                 (("defined\\(__MACH__\\)")
+                  "(defined __MACH__ && !defined __GNU__)"))
 
                (invoke "./bootstrap.sh"
                        (string-append "--prefix=" out)
@@ -192,8 +182,7 @@
                           (symlink libboost_pythonNN.so
                                    (string-append "libboost_python"
                                                   (string-take python-version 1)
-                                                  ".so")))
-                        #t))))))))
+                                                  ".so")))))))))))
 
     (home-page "https://www.boost.org")
     (synopsis "Peer-reviewed portable C++ source libraries")
@@ -226,9 +215,7 @@ across a broad spectrum of applications.")
        ("libcxxabi" ,libcxxabi-6)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("perl" ,perl)
-       ("tcsh" ,tcsh)))
+     (list clang-6 perl tcsh))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -247,8 +234,7 @@ across a broad spectrum of applications.")
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
@@ -262,7 +248,7 @@ across a broad spectrum of applications.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((icu (assoc-ref inputs "icu4c"))
                    (out (assoc-ref outputs "out"))
-                   (sh  (string-append (assoc-ref inputs "bash") "/bin/sh")))
+                   (sh  (search-input-file inputs "/bin/sh")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
                               "tools/build/src/engine/execunix.c"
@@ -288,6 +274,9 @@ across a broad spectrum of applications.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "./b2" "install" make-flags))))))))
 
+(define-public boost-with-python3
+  (deprecated-package "boost-with-python3" boost))
+
 (define-public boost-with-python2
   (package/inherit boost
     (name "boost-python2")
@@ -470,7 +459,7 @@ signals and slots system.")
                "03b8i43pw4m767mm0cnbi77x7qhpkzpi9b1f6dpp4cmyszmnsk8l"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("boost" ,boost))) ; inclusion of header files
+      (list boost)) ; inclusion of header files
     (home-page "https://gitlab.com/mdds/mdds")
     (synopsis "Multi-dimensional C++ data structures and indexing algorithms")
     (description "Mdds (multi-dimensional data structure) provides a
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 0232efa78c..be6cb8f22a 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -114,6 +114,8 @@
        ;; calling the ‘true’ binary instead.  Python is only needed during
        ;; bootstrapping (for genptl.py), not when building from a release.
        (list "PYTHON=true")
+       ;; Grub fails to load modules stripped with --strip-unneeded.
+       #:strip-flags '("--strip-debug" "--enable-deterministic-archives")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'patch-stuff
                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
@@ -140,9 +142,9 @@
                      ;; Give the absolute file name of 'ckbcomp'.
                      (substitute* "util/grub-kbdcomp.in"
                        (("^ckbcomp ")
-                        (string-append (assoc-ref inputs "console-setup")
-                                       "/bin/ckbcomp ")))
-                     #t))
+                        (string-append
+                         (search-input-file inputs "/bin/ckbcomp")
+                         " ")))))
                   (add-after 'unpack 'set-freetype-variables
                     ;; These variables need to be set to the native versions
                     ;; of the dependencies because they are used to build
@@ -261,11 +263,11 @@ menu to select one of the installed operating systems.")
     (inherit grub)
     (name "grub-minimal")
     (inputs
-     (fold alist-delete (package-inputs grub)
-           '("lvm2" "mdadm" "fuse" "console-setup")))
+     (modify-inputs (package-inputs grub)
+       (delete "lvm2" "mdadm" "fuse" "console-setup")))
     (native-inputs
-     (fold alist-delete (package-native-inputs grub)
-           '("help2man" "texinfo" "parted" "qemu" "xorriso")))
+     (modify-inputs (package-native-inputs grub)
+       (delete "help2man" "texinfo" "parted" "qemu" "xorriso")))
     (arguments
      (substitute-keyword-arguments (package-arguments grub)
        ((#:configure-flags _ ''())
@@ -293,9 +295,8 @@ menu to select one of the installed operating systems.")
     (name "grub-efi")
     (synopsis "GRand Unified Boot loader (UEFI version)")
     (inputs
-     `(("efibootmgr" ,efibootmgr)
-       ("mtools" ,mtools)
-       ,@(package-inputs grub)))
+     (modify-inputs (package-inputs grub)
+       (prepend efibootmgr mtools)))
     (arguments
      `(;; TODO: Tests need a UEFI firmware for qemu. There is one at
        ;; https://github.com/tianocore/edk2/tree/master/OvmfPkg .
@@ -316,9 +317,8 @@ menu to select one of the installed operating systems.")
                  (lambda* (#:key inputs #:allow-other-keys)
                    (substitute* "grub-core/osdep/unix/platform.c"
                      (("efibootmgr")
-                      (string-append (assoc-ref inputs "efibootmgr")
-                                     "/sbin/efibootmgr")))
-                   #t))
+                      (search-input-file inputs
+                                         "/sbin/efibootmgr")))))
                (add-after 'patch-stuff 'use-absolute-mtools-path
                  (lambda* (#:key inputs #:allow-other-keys)
                    (let ((mtools (assoc-ref inputs "mtools")))
@@ -343,8 +343,8 @@ menu to select one of the installed operating systems.")
     (name "grub-hybrid")
     (synopsis "GRand Unified Boot loader (hybrid version)")
     (inputs
-     `(("grub" ,grub)
-       ,@(package-inputs grub-efi)))
+     (modify-inputs (package-inputs grub-efi)
+       (prepend grub)))
     (arguments
      (substitute-keyword-arguments (package-arguments grub-efi)
        ((#:modules modules `((guix build utils) (guix build gnu-build-system)))
@@ -353,8 +353,8 @@ menu to select one of the installed operating systems.")
         `(modify-phases ,phases
            (add-after 'install 'install-non-efi
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((input-dir (string-append (assoc-ref inputs "grub")
-                                               "/lib/grub"))
+               (let ((input-dir (search-input-directory inputs
+                                                        "/lib/grub"))
                      (output-dir (string-append (assoc-ref outputs "out")
                                                 "/lib/grub")))
                  (for-each
@@ -379,7 +379,10 @@ menu to select one of the installed operating systems.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0k8dvafd6410kqxf3kyr4y8jzmpmrih6wbjqg6gklak7945yflrc"))))
+                  "0k8dvafd6410kqxf3kyr4y8jzmpmrih6wbjqg6gklak7945yflrc"))
+                (patches
+                 (search-patches "syslinux-gcc10.patch"
+                                 "syslinux-strip-gnu-property.patch"))))
       (build-system gnu-build-system)
       (native-inputs
        `(("nasm" ,nasm)
@@ -399,6 +402,7 @@ menu to select one of the installed operating systems.")
                (string-append "MANDIR=" %output "/share/man")
                "PERL=perl"
                "bios")
+         #:strip-flags '("--strip-debug" "--enable-deterministic-archives")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'patch-files
@@ -450,14 +454,14 @@ menu to select one of the installed operating systems.")
                 "0wrl43rvd8nnm1v1wyfdr17vk8q7ymib62vli6da8n9ni4lwbkk5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("libyaml" ,libyaml)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("valgrind" ,valgrind)))
+     (list bison
+           flex
+           libyaml
+           pkg-config
+           swig
+           valgrind))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:make-flags
        (list (string-append "CC=" ,(cc-for-target))
@@ -551,8 +555,8 @@ also initializes the boards (RAM etc).")
     (inherit u-boot)
     (name "u-boot-tools")
     (native-inputs
-     `(("sdl2" ,sdl2)
-       ,@(package-native-inputs u-boot)))
+     (modify-inputs (package-native-inputs u-boot)
+       (prepend sdl2)))
     (arguments
      `(#:make-flags '("HOSTCC=gcc")
        #:test-target "tcheck"
@@ -894,9 +898,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -933,10 +936,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
           `(modify-phases ,phases
              (add-after 'unpack 'set-environment
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bl31 (string-append (assoc-ref inputs "firmware")
-                                            "/bl31.elf")))
-                   (setenv "BL31" bl31))
-                 #t))))))
+                 (let ((bl31 (search-input-file inputs "/bl31.elf")))
+                   (setenv "BL31" bl31))))))))
       (native-inputs
        `(("firmware" ,arm-trusted-firmware-rk3328)
          ,@(package-native-inputs base))))))
@@ -951,9 +952,7 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31" (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -971,9 +970,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -991,9 +989,8 @@ to Novena upstream, does not load u-boot.img from the first partition.")
            `(modify-phases ,phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key inputs #:allow-other-keys)
-                  (setenv "BL31" (string-append (assoc-ref inputs "firmware")
-                                                "/bl31.elf"))
-                  #t))
+                  (setenv "BL31"
+                          (search-input-file inputs "/bl31.elf"))))
               ;; Phases do not succeed on the bl31 ELF.
               (delete 'strip)
               (delete 'validate-runpath)))))
@@ -1265,9 +1262,7 @@ order to add a suitable bootloader menu entry.")
              (lambda _ (chdir "..") #t)))
          #:tests? #f))                  ; no test suite
       (native-inputs
-       `(("perl" ,perl)
-         ("syslinux" ,syslinux)
-         ("xorriso" ,xorriso)))
+       (list perl syslinux xorriso))
       (home-page "https://ipxe.org")
       (synopsis "PXE-compliant network boot firmware")
       (description "iPXE is a network boot firmware.  It provides a full PXE
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c598cedc0a..5a8028a465 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -32,11 +32,13 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module ((guix store)
-                #:select (run-with-store add-to-store add-text-to-store))
+                #:select (%store-monad interned-file text-file store-lift))
   #:use-module ((guix derivations)
-                #:select (derivation derivation-input derivation->output-path))
-  #:use-module ((guix utils) #:select (gnu-triplet->nix-system))
+                #:select (raw-derivation derivation-input derivation->output-path))
+  #:use-module (guix utils)
+  #:use-module ((guix build utils) #:select (elf-file?))
   #:use-module ((guix gexp) #:select (lower-object))
+  #:use-module (guix monads)
   #:use-module (guix memoization)
   #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
@@ -89,6 +91,15 @@
       ,(base32 "1j51gv08sfg277yxj73xd564wjq3f8xwd6s9rbcg8v9gms47m4cx"))
      ("xz"
       ,(base32 "1d779rwsrasphg5g3r37qppcqy3p7ay1jb1y83w7x4i3qsc7zjy2")))
+    ("powerpc-linux"
+     ("bash"
+      ,(base32 "0hwlw5lcyjzadprf5fm0cv4zb6jw667g9amnmhq0lbixasy7j72j"))
+     ("mkdir"
+      ,(base32 "12lfwh5p8pp06250wgi9mdvjv1jdfpd5xpmvfc0616aj0xqh09hp"))
+     ("tar"
+      ,(base32 "00sbmwl8qh6alxv9mw4hvj1j4yipwmw5mrw6qad8bi2pr7ya5386"))
+     ("xz"
+      ,(base32 "0hi47y6zh5zz137i59l5ibw92x6g54zn7ris1b1ym9rvavsasg7b")))
     ("armhf-linux"
      ("bash"
       ,(base32 "0s6f1s26g4dsrrkl39zblvwpxmbzi6n9mgqf6vxsqz42gik6bgyn"))
@@ -139,6 +150,7 @@
   ;; This is where the bootstrap executables come from.
   '("https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/packages/bootstrap/"
     "https://alpha.gnu.org/gnu/guix/bootstrap/"
+    "http://flashner.co.il/guix/bootstrap/"
     "http://lilypond.org/janneke/guix/"))
 
 (define (bootstrap-executable-file-name system program)
@@ -146,6 +158,7 @@
   (match system
     ("powerpc64le-linux" (string-append system "/20210106/" program))
     ("i586-gnu" (string-append system "/20200326/" program))
+    ("powerpc-linux" (string-append system "/20200923/bin/" program))
     (_ (string-append system "/" program
                       "?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
 
@@ -341,6 +354,8 @@ or false to signal an error."
                  (match system
                    ("aarch64-linux"
                     "/20170217/guile-2.0.14.tar.xz")
+                   ("powerpc-linux"
+                    "/20200923/guile-2.0.14.tar.xz")
                    ("armhf-linux"
                     "/20150101/guile-2.0.11.tar.xz")
                    ("i586-gnu"
@@ -366,7 +381,9 @@ or false to signal an error."
     ("aarch64-linux"
      (base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))
     ("i586-gnu"
-     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))))
+     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
+    ("powerpc-linux"
+     (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))))
 
 (define (bootstrap-guile-origin system)
   "Return an <origin> object for the Guile tarball of SYSTEM."
@@ -376,59 +393,58 @@ or false to signal an error."
               %bootstrap-base-urls))
     (sha256 (bootstrap-guile-hash system))))
 
-(define (download-bootstrap-guile store system)
+(define (download-bootstrap-guile system)
   "Return a derivation that downloads the bootstrap Guile tarball for SYSTEM."
   (let* ((path (bootstrap-guile-url-path system))
          (base (basename path))
          (urls (map (cut string-append <> path) %bootstrap-base-urls)))
-    (run-with-store store
-      (url-fetch urls 'sha256 (bootstrap-guile-hash system)
-                 #:system system))))
+    (url-fetch urls 'sha256 (bootstrap-guile-hash system)
+               #:system system)))
 
-(define* (raw-build store name inputs
+(define* (raw-build name inputs
                     #:key outputs system search-paths
                     #:allow-other-keys)
   (define (->store file)
-    (run-with-store store
-      (lower-object (bootstrap-executable file system)
-                    system)))
-
-  (let* ((tar   (->store "tar"))
-         (xz    (->store "xz"))
-         (mkdir (->store "mkdir"))
-         (bash  (->store "bash"))
-         (guile (download-bootstrap-guile store system))
-         ;; The following code, run by the bootstrap guile after it is
-         ;; unpacked, creates a wrapper for itself to set its load path.
-         ;; This replaces the previous non-portable method based on
-         ;; reading the /proc/self/exe symlink.
-         (make-guile-wrapper
-          '(begin
-             (use-modules (ice-9 match))
-             (match (command-line)
-               ((_ out bash)
-                (let ((bin-dir    (string-append out "/bin"))
-                      (guile      (string-append out "/bin/guile"))
-                      (guile-real (string-append out "/bin/.guile-real"))
-                      ;; We must avoid using a bare dollar sign in this code,
-                      ;; because it would be interpreted by the shell.
-                      (dollar     (string (integer->char 36))))
-                  (chmod bin-dir #o755)
-                  (rename-file guile guile-real)
-                  (call-with-output-file guile
-                    (lambda (p)
-                      (format p "\
+    (lower-object (bootstrap-executable file system)
+                  system))
+
+  (define (make-guile-wrapper bash guile-real)
+    ;; The following code, run by the bootstrap guile after it is unpacked,
+    ;; creates a wrapper for itself to set its load path.  This replaces the
+    ;; previous non-portable method based on reading the /proc/self/exe
+    ;; symlink.
+    '(begin
+       (use-modules (ice-9 match))
+       (match (command-line)
+         ((_ out bash)
+          (let ((bin-dir    (string-append out "/bin"))
+                (guile      (string-append out "/bin/guile"))
+                (guile-real (string-append out "/bin/.guile-real"))
+                ;; We must avoid using a bare dollar sign in this code,
+                ;; because it would be interpreted by the shell.
+                (dollar     (string (integer->char 36))))
+            (chmod bin-dir #o755)
+            (rename-file guile guile-real)
+            (call-with-output-file guile
+              (lambda (p)
+                (format p "\
 #!~a
 export GUILE_SYSTEM_PATH=~a/share/guile/2.0
 export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/2.0/ccache
 exec -a \"~a0\" ~a \"~a@\"\n"
-                              bash out out dollar guile-real dollar)))
-                  (chmod guile   #o555)
-                  (chmod bin-dir #o555))))))
-         (builder
-          (add-text-to-store store
-                             "build-bootstrap-guile.sh"
-                             (format #f "
+                        bash out out dollar guile-real dollar)))
+            (chmod guile   #o555)
+            (chmod bin-dir #o555))))))
+
+  (mlet* %store-monad ((tar   (->store "tar"))
+                       (xz    (->store "xz"))
+                       (mkdir (->store "mkdir"))
+                       (bash  (->store "bash"))
+                       (guile (download-bootstrap-guile system))
+                       (wrapper -> (make-guile-wrapper bash guile))
+                       (builder
+                        (text-file "build-bootstrap-guile.sh"
+                                   (format #f "
 echo \"unpacking bootstrap Guile to '$out'...\"
 ~a $out
 cd $out
@@ -441,19 +457,19 @@ $out/bin/guile -c ~s $out ~a
 
 # Sanity check.
 $out/bin/guile --version~%"
-                                     (derivation->output-path mkdir)
-                                     (derivation->output-path xz)
-                                     (derivation->output-path tar)
-                                     (format #f "~s" make-guile-wrapper)
-                                     (derivation->output-path bash)))))
-    (derivation store name
-                (derivation->output-path bash) `(,builder)
-                #:system system
-                #:inputs (map derivation-input
-                              (list bash mkdir tar xz guile))
-                #:sources (list builder)
-                #:env-vars `(("GUILE_TARBALL"
-                              . ,(derivation->output-path guile))))))
+                                           (derivation->output-path mkdir)
+                                           (derivation->output-path xz)
+                                           (derivation->output-path tar)
+                                           (object->string wrapper)
+                                           (derivation->output-path bash)))))
+    (raw-derivation name
+                    (derivation->output-path bash) `(,builder)
+                    #:system system
+                    #:inputs (map derivation-input
+                                  (list bash mkdir tar xz guile))
+                    #:sources (list builder)
+                    #:env-vars `(("GUILE_TARBALL"
+                                  . ,(derivation->output-path guile))))))
 
 (define* (make-raw-bag name
                        #:key source inputs native-inputs outputs
@@ -500,6 +516,8 @@ $out/bin/guile --version~%"
                                              "/20210106/static-binaries-0-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/static-binaries-0-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/static-binaries.tar.xz")
                                             (_
                                              "/20131110/static-binaries.tar.xz")))
                                      %bootstrap-base-urls))
@@ -523,6 +541,9 @@ $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "17kllqnf3fg79gzy9ansgi801c46yh9c23h4d923plvb0nfm1cfn"))
+                              ("powerpc-linux"
+                               (base32
+                                "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
                               ("mips64el-linux"
                                (base32
                                 "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -573,6 +594,8 @@ $out/bin/guile --version~%"
                                              "/20210106/binutils-static-stripped-2.34-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/binutils-2.35.1.tar.xz")
                                             (_
                                              "/20131110/binutils-2.23.2.tar.xz")))
                                      %bootstrap-base-urls))
@@ -596,6 +619,9 @@ $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
+                              ("powerpc-linux"
+                               (base32
+                                "0asbg1c4avkrvh057mx0942xwddd136jni382zqsxzn79ls42yq8"))
                               ("mips64el-linux"
                                (base32
                                 "1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -653,6 +679,8 @@ $out/bin/guile --version~%"
                                        "/20210106/glibc-stripped-2.31-powerpc64le-linux-gnu.tar.xz")
                                       ("i586-gnu"
                                        "/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz")
+                                      ("powerpc-linux"
+                                       "/20200923/glibc-2.32.tar.xz")
                                       (_
                                        "/20131110/glibc-2.18.tar.xz")))
                                %bootstrap-base-urls))
@@ -676,6 +704,9 @@ $out/bin/guile --version~%"
                         ("i586-gnu"
                          (base32
                           "14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
+                        ("powerpc-linux"
+                         (base32
+                          "0smmssyjrlk5cvx49586smmk81gkwff0i6r91n4rir4jm6ba25sb"))
                         ("mips64el-linux"
                          (base32
                           "0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -749,6 +780,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                                         "/20210106/gcc-stripped-5.5.0-powerpc64le-linux-gnu.tar.xz")
                                        ("i586-gnu"
                                         "/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz")
+                                       ("powerpc-linux"
+                                        "/20200923/gcc-5.5.0.tar.xz")
                                        (_
                                         "/20131110/gcc-4.8.2.tar.xz")))
                                 %bootstrap-base-urls))
@@ -772,14 +805,20 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                          ("i586-gnu"
                           (base32
                            "1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
+                         ("powerpc-linux"
+                          (base32
+                           "1p7df3yixhm87dw5sccc6yn1i9db1r9hnmsg87wq5xi4rfmirq7w"))
                          ("mips64el-linux"
                           (base32
                            "1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
     (native-search-paths
      (list (search-path-specification
-            (variable "CPATH")
+            (variable "C_INCLUDE_PATH")
             (files '("include")))
            (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
             (variable "LIBRARY_PATH")
             (files '("lib" "lib64")))))
     (synopsis "Bootstrap binaries of the GNU Compiler Collection")
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index f8303a331b..6750446d77 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -91,7 +91,7 @@
     (native-inputs
      `(("python" ,python-2)))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "https://matricks.github.io/bam/")
     (synopsis "Fast and flexible build system")
     (description "Bam is a fast and flexible build system.  Bam uses Lua to
@@ -166,7 +166,7 @@ generate such a compilation database.")
     (inputs
      `(("bash" ,bash-minimal)))
     (native-inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (arguments
      `(#:tests? #f                      ; test during build
        #:phases
@@ -264,7 +264,7 @@ files and generates build instructions for the Ninja build system.")
 (define-public meson
   (package
     (name "meson")
-    (version "0.53.2")
+    (version "0.60.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -272,20 +272,27 @@ files and generates build instructions for the Ninja build system.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "07y2hh9dfn1m9g4bsy49nbn3vdmd0b2iwr8bxg19fhqq6c7q73ry"))))
+                "0irdn7hx5a182jbvq2kmdwd1v7mljzh5fm27pg4xk879hnv6h388"))
+              (patches (search-patches
+                        "meson-allow-dirs-outside-of-prefix.patch"))))
     (build-system python-build-system)
     (arguments
-     `(;; FIXME: Tests require many additional inputs, a fix for the RUNPATH
-       ;; patch in meson-for-build, and patching many hard-coded file system
-       ;; locations in "run_unittests.py".
+     `(;; FIXME: Tests require many additional inputs and patching many
+       ;; hard-coded file system locations in "run_unittests.py".
        #:tests? #f
        #:phases (modify-phases %standard-phases
                   ;; Meson calls the various executables in out/bin through the
                   ;; Python interpreter, so we cannot use the shell wrapper.
                   (delete 'wrap))))
-    (inputs `(("ninja" ,ninja)))
-    (propagated-inputs `(("python" ,python)))
+    (inputs (list ninja))
+
+    ;; XXX: Python is propagated just to 'GUIX_PYTHONPATH' is set (!).
+    ;; MESON-WRAPPED below fixes that by wrapping the 'meson' executable.
+    ;; TODO: Make MESON-WRAPPED the new MESON on the next core update cycle.
+    (propagated-inputs (list python))
+
     (home-page "https://mesonbuild.com/")
+    (properties '((hidden? . #t)))
     (synopsis "Build system designed to be fast and user-friendly")
     (description
      "The Meson build system is focused on user-friendliness and speed.
@@ -296,25 +303,37 @@ files}, are written in a custom domain-specific language (@dfn{DSL}) that
 resembles Python.")
     (license license:asl2.0)))
 
-;; Added temporarily for packages that need it.
-;; TODO: Remove when core-updates is merged.
-(define-public meson-0.55
-  (package
-    (inherit meson)
-    (version "0.55.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mesonbuild/meson/"
-                                  "releases/download/" version  "/meson-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1070kjiirxxdfppmrhi3wsc6rykay1zlciqrzayjhjg0hkw42mrv"))))))
+(define-public meson-wrapped
+  (package/inherit meson
+    (propagated-inputs '())                       ;don't propagate Python
+    (inputs (modify-inputs (package-inputs meson)
+              (prepend python-wrapper)))
+    (arguments
+     `(;; FIXME: Tests require many additional inputs and patching many
+       ;; hard-coded file system locations in "run_unittests.py".
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  ;; Meson calls the various executables in out/bin through the
+                  ;; Python interpreter, so we cannot use the shell wrapper.
+                  (replace 'wrap
+                    (lambda* (#:key outputs inputs #:allow-other-keys)
+                      (let ((python-version
+                             (python-version (assoc-ref inputs "python")))
+                            (output (assoc-ref outputs "out")))
+                        (substitute* (string-append output "/bin/meson")
+                          (("# EASY-INSTALL-ENTRY-SCRIPT")
+                           (format #f "\
+import sys
+sys.path.insert(0, '~a/lib/python~a/site-packages')
+# EASY-INSTALL-ENTRY-SCRIPT"
+                                   output python-version)))))))))
+    (properties '())))
 
-(define-public meson-next
-  (package
-    (inherit meson)
-    (version "0.57.2")
+;;; This older Meson variant is kept for now for gtkmm and others that may
+;;; have problems with 0.60.
+(define-public meson-0.59
+  (package/inherit meson
+    (version "0.59.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -322,18 +341,9 @@ resembles Python.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1iac7p99zfgkznq4qlnkk7b8xwwlilcrnkf33sczm56yqnqyg0rs"))))))
-
-(define-public meson-for-build
-  (package
-    (inherit meson)
-    (name "meson-for-build")
-    (source (origin
-              (inherit (package-source meson))
-              (patches (search-patches "meson-for-build-rpath.patch"))))
-
-    ;; People should probably install "meson", not "meson-for-build".
-    (properties `((hidden? . #t)))))
+                "117cm8794h291lca1wljz1pwnzidgbvrpg3mw3np6ksma368hyd7"))
+              (patches (search-patches
+                        "meson-allow-dirs-outside-of-prefix.patch"))))))
 
 (define-public premake4
   (package
@@ -348,7 +358,7 @@ resembles Python.")
                 "1017rd0wsjfyq2jvpjjhpszaa7kmig6q1nimw76qx3cjz2868lrn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip))) ; for unpacking the source
+     (list unzip)) ; for unpacking the source
     (arguments
      `(#:make-flags (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f ; No test suite
@@ -455,12 +465,11 @@ other lower-level build files.")))
                    (display "au BufNewFile,BufRead Tupfile,*.tup setf tup")))
                #t))))))
     (inputs
-     `(("fuse" ,fuse)
-       ("pcre" ,pcre)
-       ("pcre" ,pcre "bin") ; pcre-config
-       ("sqlite" ,sqlite)))
+     (list fuse pcre
+           `(,pcre "bin") ; pcre-config
+           sqlite))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gittup.org/tup/")
     (synopsis "Fast build system that's hard to get wrong")
     (description "Tup is a generic build system based on a directed acyclic
@@ -497,11 +506,9 @@ a build worked by accident.")
                 (string-append bin "osc"))
                #t))))))
     (native-inputs
-     `(("python-chardet" ,python-chardet)))
+     (list python-chardet))
     (inputs
-     `(("python-m2crypto" ,python-m2crypto)
-       ("python-pycurl" ,python-pycurl)
-       ("rpm" ,rpm)))                   ; for python-rpm
+     (list python-m2crypto python-pycurl rpm))                   ; for python-rpm
     (home-page "https://github.com/openSUSE/osc")
     (synopsis "Open Build Service command line tool")
     (description "@command{osc} is a command line interface to the Open Build
@@ -530,10 +537,9 @@ be reached via direct API calls.")
              (substitute* "setup.py" (("^ *'shutilwhich'\n") ""))
              (substitute* "compiledb/compiler.py" (("shutilwhich") "shutil")))))))
     (propagated-inputs
-      `(("python-bashlex" ,python-bashlex)
-        ("python-click" ,python-click)))
+      (list python-bashlex python-click))
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page
       "https://github.com/nickdiego/compiledb")
     (synopsis
diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm
index f3652813ed..17b91da59f 100644
--- a/gnu/packages/busybox.scm
+++ b/gnu/packages/busybox.scm
@@ -106,11 +106,11 @@
                (apply invoke "make"
                        (string-append "CONFIG_PREFIX=" out)
                        "install" make-flags)))))))
-    (native-inputs `(("perl" ,perl) ; needed to generate the man pages (pod2man)
-                     ;; The following are needed by the tests.
-                     ("inetutils" ,inetutils)
-                     ("which" ,(@ (gnu packages base) which))
-                     ("zip" ,zip)))
+    (native-inputs (list perl ; needed to generate the man pages (pod2man)
+                         ;; The following are needed by the tests.
+                         inetutils
+                         (@ (gnu packages base) which)
+                         zip))
     (synopsis "Many common UNIX utilities in a single executable")
     (description "BusyBox combines tiny versions of many common UNIX utilities
 into a single small executable.  It provides a fairly complete environment for
@@ -162,7 +162,7 @@ any small or embedded system.")
              (let ((out (assoc-ref outputs "out")))
                (delete-file-recursively (string-append out "/usr"))))))
        #:test-target "tests"))
-    (native-inputs `(("bc" ,bc)))
+    (native-inputs (list bc))
     (synopsis "Many common UNIX utilities in a single executable")
     (description "ToyBox combines tiny versions of many common UNIX utilities
 into a single small executable.  It provides a fairly complete environment for
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index e37c173fc0..5c28ea9fb8 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -69,8 +69,7 @@
                (base32
                 "177bdhwzrnqgyrdv1dwvpd04fcxj68s5pm1dzwny6359ziway8yy"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl texinfo))
     (arguments
      `(#:configure-flags (list (string-append "--elfinterp="
                                               (assoc-ref %build-inputs "libc")
@@ -130,8 +129,7 @@ standard.")
          (replace 'check
            (lambda _ (invoke "make" "-C" "cc/cpp" "test") #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (synopsis "Portable C compiler")
     (description
      "PCC is a portable C compiler.  The project goal is to write a C99
@@ -162,8 +160,7 @@ compiler while still keeping it small, simple, fast and understandable.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("mpfr" ,mpfr)
-       ("pcre2" ,pcre2)))
+     (list mpfr pcre2))
     (home-page "https://github.com/storaged-project/libbytesize")
     (synopsis "Tiny C library for working with arbitrary big sizes in bytes")
     (description
@@ -205,7 +202,7 @@ language with thin bindings for other languages.")
      `(#:configure-flags
        (list "--disable-static")))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (home-page "https://www.unidata.ucar.edu/software/udunits/")
     (synopsis "C library for units of physical quantities and value-conversion utils")
     (description
@@ -238,11 +235,7 @@ Its three main components are:
          "1x4q6yspi5g2s98vq4qszw4z3zjgk9l5zs8471w4d4cs6l97w08j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check)))
+     (list autoconf automake libtool pkg-config check))
     (synopsis "Thin wrapper over POSIX syscalls")
     (description
      "The purpose of libfixposix is to offer replacements for parts of POSIX
@@ -317,7 +310,7 @@ checking casts and more.")
                                     headers)
                           (install-file "libwuya.a" (string-append out "/lib"))
                           #t))))))
-      (inputs `(("lua" ,lua)))
+      (inputs (list lua))
       (home-page "https://github.com/WuBingzheng/libwuya/")
       (synopsis "C library implementing various data structures")
       (description "The @code{libwuya} library implements data structures such
@@ -368,7 +361,7 @@ as dictionaries, skip lists, and memory pools.")
                                       (string-append out "/share/doc/packcc"))
                         #t))))))
     (native-inputs
-     `(("bats" ,bats)))
+     (list bats))
     (synopsis "Packrat parser generator for C")
     (description
      "PackCC is a packrat parser generator for the C programming language.
@@ -398,7 +391,7 @@ any other grammar rules.")
                (base32
                 "0z1qds52144nvsdnl82r3zs3vax618v920jmffyyssmwj54qpcka"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (arguments
      '(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
        #:phases (modify-phases %standard-phases
@@ -441,10 +434,7 @@ releases.")
          (replace 'bootstrap
            (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (home-page "https://github.com/rsyslog/libestr")
     (synopsis "Helper functions for handling strings")
     (description
@@ -467,9 +457,7 @@ more, like escaping special characters.")
         (base32 "12rqcdqxazw8czzxbivdapdgj19pcswpw1jp2915sxbljis83g6q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/rsyslog/libfastjson")
     (synopsis "Fast JSON library for C")
     (description
@@ -500,12 +488,12 @@ with essential JSON handling functions, sufficiently good JSON support (not
          (replace 'bootstrap
            (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ;; For rst2man.py
-       ("python-docutils" ,python-docutils)))
+     (list autoconf
+           automake
+           pkg-config
+           libtool
+           ;; For rst2man.py
+           python-docutils))
     (home-page "https://github.com/rsyslog/liblogging")
     (synopsis "Easy to use and lightweight signal-safe logging library")
     (description
@@ -538,7 +526,7 @@ replacement for the syslog() call, but retains its ease of use.")
                           (string-append "prefix=" %output))
        #:tests? #f))                    ;no test suite
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://dotat.at/prog/unifdef/")
     (synopsis "Utility to selectively processes conditional C preprocessor")
     (description "The @command{unifdef} utility selectively processes
@@ -596,7 +584,7 @@ portability.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (inputs
-     `(("aws-c-common" ,aws-c-common)))
+     (list aws-c-common))
     (synopsis "Amazon Web Services checksum library")
     (description
      "This library provides cross-Platform hardware accelerated CRC32c and CRC32
@@ -625,12 +613,9 @@ with fallback to efficient C99 software implementations.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)
-       ("aws-c-io" ,aws-c-io)
-       ("aws-checksums" ,aws-checksums)))
+     (list aws-c-common aws-c-io aws-checksums))
     (inputs
-     `(("aws-c-cal" ,aws-c-cal)
-       ("s2n" ,s2n)))
+     (list aws-c-cal s2n))
     (synopsis "Amazon Web Services client-server message format library")
     (description
      "This library is a C99 implementation for @acronym{AWS,Amazon Web Services}
@@ -661,9 +646,7 @@ communication.")
                             (assoc-ref %build-inputs "aws-c-common"))
              "-DENABLE_NET_TESTS=OFF")))
     (propagated-inputs
-     `(("aws-c-cal" ,aws-c-cal)
-       ("aws-c-common" ,aws-c-common)
-       ("s2n" ,s2n)))
+     (list aws-c-cal aws-c-common s2n))
     (synopsis "Event driven framework for implementing application protocols")
     (description "This library provides a C99 framework for constructing
 event-driven, asynchronous network application protocols.")
@@ -691,7 +674,7 @@ event-driven, asynchronous network application protocols.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)))
+     (list aws-c-common))
     (inputs
      `(("openssl" ,openssl)
        ("openssl:static" ,openssl "static")))
@@ -742,8 +725,7 @@ low level functionality for coroutines.")
                             (assoc-ref %build-inputs "aws-c-common"))
              "-DENABLE_NET_TESTS=OFF")))
     (propagated-inputs
-     `(("aws-c-compression" ,aws-c-compression)
-       ("aws-c-io" ,aws-c-io)))
+     (list aws-c-compression aws-c-io))
     (synopsis "Amazon Web Services HTTP library")
     (description
      "This library provides a C99 implementation of the HTTP/1.1 and HTTP/2
@@ -772,7 +754,7 @@ specifications.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-common" ,aws-c-common)))
+     (list aws-c-common))
     (synopsis "Amazon Web Services compression library")
     (description
      "This library provides a C99 implementation of compression algorithms,
@@ -805,10 +787,7 @@ currently limited to Huffman encoding and decoding.")
                             (assoc-ref %build-inputs "aws-c-common"))
              "-DENABLE_NET_TESTS=OFF")))
     (propagated-inputs
-     `(("aws-c-cal" ,aws-c-cal)
-       ("aws-c-common" ,aws-c-common)
-       ("aws-c-http" ,aws-c-http)
-       ("aws-c-io" ,aws-c-io)))
+     (list aws-c-cal aws-c-common aws-c-http aws-c-io))
     (synopsis "Amazon Web Services client-side authentication library")
     (description
      "This library provides a C99 implementation for AWS client-side
@@ -838,8 +817,7 @@ authentication.")
                             (assoc-ref %build-inputs "aws-c-common"))
              "-DENABLE_NET_TESTS=OFF")))
     (propagated-inputs
-     `(("aws-c-auth" ,aws-c-auth)
-       ("aws-c-http" ,aws-c-http)))
+     (list aws-c-auth aws-c-http))
     (synopsis "Amazon Web Services client library for Amazon S3")
     (description
      "This library provides a C99 client implementation of the Simple Storage
@@ -868,8 +846,7 @@ Service (S3) protocol for object storage.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-c-http" ,aws-c-http)
-       ("aws-c-io" ,aws-c-io)))
+     (list aws-c-http aws-c-io))
     (synopsis "Amazon Web Services MQTT library")
     (description
      "This library provides a C99 implementation of the Message Queuing
diff --git a/gnu/packages/calcurse.scm b/gnu/packages/calcurse.scm
index d807c15d68..5da701492b 100644
--- a/gnu/packages/calcurse.scm
+++ b/gnu/packages/calcurse.scm
@@ -39,8 +39,8 @@
        (sha256
         (base32 "0cgkd285x5pk62lmdx9fjxl46c5lj8wj2cqbxq7d99yb4il5fdjk"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("tzdata" ,tzdata-for-tests)))
+    (inputs (list ncurses))
+    (native-inputs (list tzdata-for-tests))
     (arguments
      ;; The ical tests all want to create a ".calcurse" directory, and may
      ;; fail with "cannot create directory '.calcurse': File exists" if run
@@ -64,8 +64,8 @@
                   (add-before 'check 'check-setup
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "TZDIR"   ; for test/ical-007.sh
-                              (string-append (assoc-ref inputs "tzdata")
-                                             "/share/zoneinfo")))))))
+                              (search-input-directory inputs
+                                                      "share/zoneinfo")))))))
     (home-page "https://www.calcurse.org")
     (synopsis "Text-based calendar and scheduling")
     (description
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 44d1331e32..129eb58aa0 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -80,7 +80,7 @@
           ;; Install pkg-config files
           ;; https://github.com/HowardHinnant/date/pull/538
           (search-patches "date-output-pkg-config-files.patch"))))
-      (inputs `(("tzdata" ,tzdata)))
+      (inputs (list tzdata))
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags (list "-DUSE_SYSTEM_TZ_DB=ON"
@@ -98,8 +98,8 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/tz.cpp"
                  (("/usr/share/zoneinfo")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
-               #t))
+                  (search-input-directory inputs
+                                          "share/zoneinfo")))))
            (replace 'check
              (lambda _
                ;; Disable test that requires checking timezone that
@@ -118,7 +118,7 @@ the <tz.h> library for handling time zones and leap seconds.")
 (define-public libical
   (package
     (name "libical")
-    (version "3.0.8")
+    (version "3.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -126,7 +126,7 @@ the <tz.h> library for handling time zones and leap seconds.")
                     version "/libical-" version ".tar.gz"))
               (sha256
                (base32
-                "0vr8s7hn8204lyc4ys5bs3j5qss4lmc9ffly2m1a59avyz5cmzh9"))))
+                "1d1nqcfilb4k8bc5x85fhnd26l1ski58wpk2nmds6mlxrzkb6czr"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; test suite appears broken
@@ -158,19 +158,17 @@ the <tz.h> library for handling time zones and leap seconds.")
                  (("\\\"/usr/share/lib/zoneinfo\\\"") "")))
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.3)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list docbook-xml-4.3
+           gobject-introspection
+           gtk-doc/stable
+           perl
+           pkg-config
+           vala))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("tzdata" ,tzdata)))
+     (list glib libxml2 tzdata))
     (propagated-inputs
      ;; In Requires.private of libical.pc.
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (home-page "https://libical.github.io/libical/")
     (synopsis "iCalendar protocols and data formats implementation")
     (description
@@ -204,23 +202,22 @@ data units.")
              (string-append (assoc-ref outputs "out") "/share/man/man1"))
             #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ;; Required to build manpage
-       ("python-sphinxcontrib-newsfeed" ,python-sphinxcontrib-newsfeed)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-setuptools-scm
+           ;; Required to build manpage
+           python-sphinxcontrib-newsfeed python-sphinx))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("python-configobj" ,python-configobj)
-       ("python-dateutil" ,python-dateutil)
-       ("python-icalendar" ,python-icalendar)
-       ("python-tzlocal" ,python-tzlocal)
-       ("python-urwid" ,python-urwid)
-       ("python-pytz" ,python-pytz)
-       ("python-setproctitle" ,python-setproctitle)
-       ("python-atomicwrites" ,python-atomicwrites)
-       ("python-click" ,python-click)
-       ("python-click-log" ,python-click-log)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list sqlite
+           python-configobj
+           python-dateutil
+           python-icalendar
+           python-tzlocal
+           python-urwid
+           python-pytz
+           python-setproctitle
+           python-atomicwrites
+           python-click
+           python-click-log
+           python-pyxdg))
     (synopsis "Console calendar program")
     (description "Khal is a standards based console calendar program,
 able to synchronize with CalDAV servers through vdirsyncer.")
@@ -275,10 +272,7 @@ able to synchronize with CalDAV servers through vdirsyncer.")
                 (list "bin/cm2rem.tcl"
                       "bin/tkremind"))))))))
     (inputs
-     `(("inetutils" ,inetutils)
-       ("tcl" ,tcl)
-       ("tcllib" ,tcllib)
-       ("tk" ,tk)))
+     (list inetutils tcl tcllib tk))
     (home-page "https://dianne.skoll.ca/projects/remind/")
     (synopsis "Sophisticated calendar and alarm program")
     (description
@@ -347,9 +341,9 @@ and ruby.  It includes two illustrative command-line programs, @code{hcal} and
                #t))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("perl" ,perl))) ; pod2man
+     (list perl)) ; pod2man
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://www.toastfreeware.priv.at/confclerk")
     (synopsis "Offline conference schedule application")
     (description
@@ -423,11 +417,9 @@ traditional Chinese characters.")
                          "1qyf65l088dqsz25hm6s1cv18j52yaias0llqvpqwjfnvssa5cxg"))
                 (modules '((guix build utils)))))
       (build-system gnu-build-system)
-      (inputs `(("gtk+" ,gtk+)))
+      (inputs (list gtk+))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (home-page "https://dmedvinsky.github.io/gsimplecal/")
       (synopsis "Lightweight calendar applet")
       (description "@command{gsimplecal} is a lightweight calendar application
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 44b0ef606a..bffbff5715 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -40,10 +40,10 @@
        (sha256
         (base32 "186b5lfbdd48cvbxqv2yh93pgr8lhahl1jzw00k2rmjzmbxwl04j"))))
     (build-system cmake-build-system)
-    (native-inputs `(("perl" ,perl)     ; for test/run
-                     ("which" ,(@ (gnu packages base) which))))
-    (inputs `(("zlib" ,zlib)
-              ("zstd" ,zstd "lib")))
+    (native-inputs (list perl ; for test/run
+                         (@ (gnu packages base) which)))
+    (inputs (list zlib
+                  `(,zstd "lib")))
     (arguments
      '( ;; The Redis backend must be explicitly disabled to build without Redis.
        #:configure-flags
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 717d59f0e9..42571531e5 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
@@ -118,11 +118,9 @@ caching facility provided by the library.")
                "0avi6apv5ydjy6b9c3z9a46rvp5i57qyr09vr7x4nndxkmcfjl45"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libcddb" ,libcddb)))
+     (list ncurses libcddb))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list help2man pkg-config))
     (home-page "https://www.gnu.org/software/libcdio/")
     (synopsis "CD Input and Control library")
     (description
@@ -147,8 +145,8 @@ extraction from CDs.")
               (base32
                "12hfnrq7amv9qjzc92cr265m7kh0a1hpasck8cxx1gygbhqczc9k"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (propagated-inputs `(("libcdio" ,libcdio)))
+    (native-inputs (list pkg-config))
+    (propagated-inputs (list libcdio))
     (home-page "https://www.gnu.org/software/libcdio/")
     (synopsis "Jitter- and error-tolerant CD audio extraction")
     (description
@@ -198,10 +196,7 @@ libcdio.")
                  `("PATH" ":" prefix (,(string-append out "/bin"))))
                #t))))))
     (inputs
-     `(("acl" ,acl)
-       ("readline" ,readline)
-       ("tk" ,tk)
-       ("zlib" ,zlib)))
+     (list acl readline tk zlib))
     (home-page "https://www.gnu.org/software/xorriso/")
     (synopsis "Create, manipulate, burn ISO-9660 file systems")
     (description
@@ -235,6 +230,7 @@ files.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there is no check target
+       #:parallel-build? #f             ;randomly fails to link
        #:configure-flags ; Add $libdir to the RUNPATH of all the executables.
        (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
        ;; Building in parallel is flaky: “ld: […]/cachetest.c:393: undefined
@@ -282,14 +278,9 @@ reconstruction capability.")
              (substitute* "configure.ac" (("^AM_GCONF_SOURCE_2.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("ao" ,ao)
-       ("lame" ,lame)
-       ("libmad" ,libmad)
-       ("libvorbis" ,libvorbis)))
+     (list ao lame libmad libvorbis))
     (home-page "http://cdrdao.sourceforge.net")
     (synopsis "Read and write CDs in disk-at-once mode")
     (description "cdrdao records audio or data CDs in disk-at-once (DAO) mode,
@@ -381,9 +372,9 @@ images.")
               (patches (search-patches "dvd+rw-tools-add-include.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cdrtools" ,cdrtools)))
+     (list cdrtools))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (arguments
      `(#:tests? #f ; No tests.
        #:phases
@@ -429,7 +420,7 @@ or @command{xorrisofs} to create ISO 9660 images.")
         (base32 "1hz3fvqfdrwb7dn6ggqkpcgyjag37ivm1layw27ncjz9glklxjbr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
@@ -571,8 +562,7 @@ graphical interface.")
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "https://github.com/lipnitsk/libcue")
     (synopsis "C library to parse cue sheets")
     (description "Libcue is a C library to parse so-called @dfn{cue sheets}
@@ -683,20 +673,18 @@ from an audio CD.")
              #t)))
        #:tests? #f)) ; no test target
 
-    (inputs `(("wget" ,wget)
-              ("which" ,which)
-              ("cdparanoia" ,cdparanoia)
-              ("cd-discid" ,cd-discid)
-              ("vorbis-tools" ,vorbis-tools)
-              ("flac" ,flac)
-
-              ("perl-musicbrainz-discid" ,perl-musicbrainz-discid)
-              ("perl-webservice-musicbrainz" ,perl-webservice-musicbrainz)
-              ("perl-mojolicious" ,perl-mojolicious) ;indirect dependency
-
-              ;; A couple of Python and Perl scripts are included.
-              ("python" ,python)
-              ("perl" ,perl)))
+    (inputs (list wget
+                  which
+                  cdparanoia
+                  cd-discid
+                  vorbis-tools
+                  flac
+                  perl-musicbrainz-discid
+                  perl-webservice-musicbrainz
+                  perl-mojolicious ;indirect dependency
+                  ;; A couple of Python and Perl scripts are included.
+                  python
+                  perl))
 
     (synopsis "Command-line audio CD ripper")
     (description
@@ -729,7 +717,7 @@ and/or MPP/MP+ (Musepack) format, and tags them, all in one go.")
              (let ((out (assoc-ref outputs "out")))
                (install-file "geteltorito"
                              (string-append out "/bin"))))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Extract the boot image from a CD-ROM")
     (description
      "@command{geteltorito} can extract the initial/default boot
@@ -770,8 +758,7 @@ information is written to standard error.")
                                                       "flac"
                                                       "opus-tools"
                                                       "wavpack"))))))))))
-    (native-inputs `(("intltool" ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list intltool pkg-config))
     ;; TODO: Add the necessary packages for Musepack encoding.
     (inputs `(("gtk+-2" ,gtk+-2)
               ("glib" ,glib)
@@ -822,15 +809,11 @@ session, and it can create M3U playlists.")
                (("\\$\\(DESTDIR\\)/usr/local") (assoc-ref outputs "out"))
                (("../../etc") "etc")))))))
     (native-inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("cdparanoia" ,cdparanoia)
-       ("flac" ,flac)
-       ("vorbis-tools" ,vorbis-tools)
-       ("wavpack" ,wavpack)
-       ("perl-cddb-get" ,perl-cddb-get)))
+     (list cdparanoia flac vorbis-tools wavpack perl-cddb-get))
     (home-page (string-append "https://web.archive.org/web/20170119092156/"
                               "http://www.suwald.com/ripit/about.php"))
     (synopsis "Command-line program to extract audio CDs")
@@ -874,7 +857,7 @@ laid out on the image.")
                "0m1vyry6pi115nysfgb0cg313qqhnlxqdg7f920wpiar0z8mjl2j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.lovelyhq.com/libburnia/libburn")
     (synopsis "Library for reading and writing optical discs")
     (description
@@ -896,10 +879,9 @@ DVD-RW, DVD-R, DVD-R/DL, BD-R, and BD-RE.")
                "13m82l13cb5d7ca53dv3akma1jr9gw0hnnshdwqpj6ahly0fv85a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("acl" ,acl)))
+     (list zlib acl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.lovelyhq.com/libburnia/libisofs")
     (synopsis "Library to create ISO 9660 images")
     (description
@@ -927,13 +909,18 @@ Supported extensions to ISO 9660 are Rock Ridge, Joliet, AAIP, zisofs.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0g2zyzb56czh429qy87lvaddzjnlcq8c616ddxsmsshz3clhyzrh"))))
+                "0g2zyzb56czh429qy87lvaddzjnlcq8c616ddxsmsshz3clhyzrh"))
+              (patches (search-patches "cdrkit-libre-cross-compile.patch"))
+              (modules '((guix build utils)))
+              (snippet
+                #~(begin
+                    ;; Fix building with gcc-10.
+                    (substitute* "genisoimage/genisoimage.h"
+                      (("char\t\t\\*outfile")
+                       "extern char\t*outfile"))))))
     (build-system cmake-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libcap" ,libcap)
-       ("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list bzip2 libcap perl zlib))
     (arguments
      `(#:tests? #f ;no tests
        #:phases
@@ -966,10 +953,9 @@ CD data, and more.  It's mostly compatible with @code{cdrtools}.")
                 "0f8i2ha44rykkk3ac2q8zsw3y1zckw6qnf6zvkyrj3qqbzhrf3fm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (arguments
      ;; No tests.
      '(#:tests? #f))
@@ -995,12 +981,9 @@ the data stored in various image formats.")
                 "16g6fv1lxkdmbsy6zh5sj54dvgwvm900fd18aq609yg8jnqm644d"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libmirage" ,libmirage)
-       ("glib" ,glib)
-       ("ao" ,ao)))
+     (list libmirage glib ao))
     (arguments
      ;; No tests.
      '(#:tests? #f))
@@ -1024,12 +1007,9 @@ drive and disc (including CD-ROMs and DVD-ROMs).")
                 "1prrdhv0ia0axc6b73crszqzh802wlkihz6d100yvg7wbgmqabd7"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("cdemu-daemon" ,cdemu-daemon)))
+     (list python python-pygobject cdemu-daemon))
     (arguments
      ;; No tests.
      `(#:tests? #f
@@ -1045,7 +1025,7 @@ drive and disc (including CD-ROMs and DVD-ROMs).")
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/cdemu")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "https://cdemu.sourceforge.io/")
     (synopsis "Command-line client for controlling cdemu-daemon")
diff --git a/gnu/packages/cedille.scm b/gnu/packages/cedille.scm
index d3dd576323..1f00e8f698 100644
--- a/gnu/packages/cedille.scm
+++ b/gnu/packages/cedille.scm
@@ -42,11 +42,7 @@
         (base32
          "1h5s6ayh3s76z184jai3jidcs4cjk8s4nvkkv2am8dg4gfsybq22"))))
     (inputs
-     `(("agda" ,agda)
-       ("agda-ial" ,agda-ial)
-       ("ghc" ,ghc)
-       ("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list agda agda-ial ghc ghc-alex ghc-happy))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -89,8 +85,7 @@
          (add-after 'unpack 'copy-ial
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-recursively
-              (string-append (assoc-ref inputs "agda-ial")
-                             "/include/agda/ial")
+              (search-input-directory inputs "/include/agda/ial")
               "ial")
              ;; Ambiguous module if main is included from ial
              (delete-file "ial/main.agda")
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index e15a9660df..fc4f4f2686 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -1,9 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -24,12 +26,14 @@
 (define-module (gnu packages certs)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
+  #:use-module (gnu packages nss)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages perl)
@@ -72,7 +76,7 @@
          #:install-plan
          '(("." "etc/desec" #:include ("hook.sh")))))
       (inputs
-       `(("curl" ,curl)))
+       (list curl))
       (synopsis "Certbot DNS challenge automatization for deSEC")
       (description "The deSEC can be used to obtain certificates with certbot
 DNS ownership verification.  With the help of this hook script, you can obtain
@@ -82,112 +86,77 @@ port forwarding to your local machine.")
       (home-page "https://desec.io")
       (license license:expat))))
 
-(define certdata2pem
-  (package
-    (name "certdata2pem")
-    (version "2013")
-    (source
-     (origin
-      (method url-fetch)
-        (uri
-          "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/plain/certdata2pem.py?id=053dde8a2f5901e97028a58bf54e7d0ef8095a54")
-        (file-name "certdata2pem.py")
-        (sha256
-          (base32
-            "0zscrm41gnsf14zvlkxhy00h3dmgidyz645ldpda3y3vabnwv8dx"))))
-   (build-system trivial-build-system)
-   (inputs
-     `(("python" ,python-2)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-        (begin
-          (use-modules (guix build utils))
-          (let ((bin (string-append %output "/bin")))
-            (copy-file (assoc-ref %build-inputs "source") "certdata2pem.py")
-            (chmod "certdata2pem.py" #o555)
-            (substitute* "certdata2pem.py"
-              (("/usr/bin/python")
-               (string-append (assoc-ref %build-inputs "python")
-                              "/bin/python"))
-              ;; Use the file extension .pem instead of .crt.
-              (("crt") "pem"))
-            (mkdir-p bin)
-            (copy-file "certdata2pem.py"
-                       (string-append bin "/certdata2pem.py"))
-            #t))))
-   (synopsis "Python script to extract .pem data from certificate collection")
-   (description
-    "certdata2pem.py is a Python script to transform X.509 certificate
-\"source code\" as contained, for example, in the Mozilla sources, into
-.pem formatted certificates.")
-   (license license:gpl2+)
-   (home-page "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/")))
+(define-public certdata2pem
+  (let ((revision "1")
+        (commit "4c576f350f44186d439179f63d5be19f710a73f5"))
+    (package
+      (name "certdata2pem")
+      (version "0.0.0")                   ;no version
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://raw.githubusercontent.com/sabotage-linux/sabotage/"
+                      commit "/KEEP/certdata2pem.c"))
+                (sha256
+                 (base32
+                  "1rywp29q4l1cs2baplkbcravxqs4kw2cys4yifhfznbc210pskq6"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (delete 'configure)
+                    (add-before 'build 'fix-extension
+                      (lambda _
+                        (substitute* "certdata2pem.c"
+                          (("\\.crt")
+                           ".pem"))))
+                    (replace 'build
+                      (lambda _
+                        (invoke ,(cc-for-target) "certdata2pem.c"
+                                "-o" "certdata2pem")))
+                    (delete 'check)     ;no test suite
+                    (replace 'install
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let ((out (assoc-ref outputs "out")))
+                          (install-file "certdata2pem"
+                                        (string-append out "/bin"))))))))
+      (home-page "https://github.com/sabotage-linux/")
+      (synopsis "Utility to split TLS certificates data into multiple PEM files")
+      (description "This is a C version of the certdata2pem Python utility
+that was originally contributed to Debian.")
+      (license license:isc))))
 
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.59")
-    (source (origin
-              (method url-fetch)
-              (uri (let ((version-with-underscores
-                          (string-join (string-split version #\.) "_")))
-                     (string-append
-                      "https://ftp.mozilla.org/pub/mozilla.org/security/nss/"
-                      "releases/NSS_" version-with-underscores "_RTM/src/"
-                      "nss-" version ".tar.gz")))
-              (sha256
-               (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))))
+    (version (package-version nss))
+    (source (package-source nss))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
-     `(("certdata2pem" ,certdata2pem)
-       ("openssl" ,openssl)
-       ("perl" ,perl)))                           ;for OpenSSL's 'c_rehash'
+     (list certdata2pem openssl))
     (inputs '())
     (propagated-inputs '())
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (rnrs io ports)
-                  (srfi srfi-26)
-                  (ice-9 regex))
+                  (srfi srfi-26))
        #:phases
        (modify-phases
            (map (cut assq <> %standard-phases)
                 '(set-paths install-locale unpack))
          (add-after 'unpack 'install
            (lambda _
-             (let ((certsdir (string-append %output "/etc/ssl/certs/"))
-                   (trusted-rx (make-regexp "^# openssl-trust=[a-zA-Z]"
-                                            regexp/newline)))
-
-               (define (maybe-install-cert file)
-                 (let ((cert (call-with-input-file file get-string-all)))
-                   (when (regexp-exec trusted-rx cert)
-                     (call-with-output-file
-                         (string-append certsdir file)
-                       (cut display cert <>)))))
-
-               (mkdir-p certsdir)
+             (let ((certsdir (string-append %output "/etc/ssl/certs/")))
                (with-directory-excursion "nss/lib/ckfw/builtins/"
-                 ;; extract single certificates from blob
-                 (invoke "certdata2pem.py" "certdata.txt")
-                 ;; copy selected .pem files into the output
-                 (for-each maybe-install-cert
-                           (find-files "." ".*\\.pem")))
-
-               (with-directory-excursion certsdir
-                 ;; create symbolic links for and by openssl
-                 ;; Strangely, the call (system* "c_rehash" certsdir)
-                 ;; from inside the build dir fails with
-                 ;; "Usage error; try -help."
-                 ;; This looks like a bug in openssl-1.0.2, but we can also
-                 ;; switch into the target directory.
-                 (invoke "c_rehash" "."))
-               #t))))))
-
+                 (unless (file-exists? "blacklist.txt")
+                   (call-with-output-file "blacklist.txt" (const #t)))
+                 ;; Extract selected single certificates from blob.
+                 (invoke "certdata2pem")
+                 ;; Copy .pem files into the output.
+                 (for-each (cut install-file <> certsdir)
+                           (find-files "." ".*\\.pem$")))
+               (invoke "openssl" "rehash" certsdir)))))))
     (synopsis "CA certificates from Mozilla")
     (description
      "This package provides certificates for Certification Authorities (CA)
@@ -231,8 +200,7 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
                    (string-append openssl "/bin/c_rehash")
                    ".")))))
     (native-inputs
-     `(("openssl" ,openssl)
-       ("perl" ,perl)))                           ;for 'c_rehash'
+     (list openssl perl))                           ;for 'c_rehash'
     (inputs
      `(; The Let's Encrypt root certificate, "ISRG Root X1".
        ("isrgrootx1.pem"
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 4928f02bfd..0a90a3b167 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -25,7 +25,7 @@
 ;;; Copyright © 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2015, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
@@ -68,6 +68,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -102,11 +103,9 @@
         (base32 "0lsg791x6n95pxg6vif8qfc46nqcamhjq3g0dl5xqf6imy7n3acd"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list clang pkg-config python-wrapper))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Code checker for C")
     (description "Pedansee checks C source files for compliance with a particular
 programming style.  The style is currently defined by the pedansee source code
@@ -148,7 +147,27 @@ like Jasmine or Mocha.")
                           version "/check-" version ".tar.gz"))
       (sha256
        (base32
-        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))))
+        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))
+      (patches
+       (list
+        ;; This patch fixes some tests that would otherwise fail on
+        ;; powerpc64le-linux.  Without this patch, the tests make certain
+        ;; assumptions about floating point number precision that are not true
+        ;; on that platform.
+        ;;
+        ;; TODO: Remove this patch when updating to the next check release,
+        ;; since it will be included there.  See:
+        ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47698
+        (origin
+          (method url-fetch)
+          (uri
+           (string-append "https://github.com/libcheck/check/commit/"
+                          "4fbe702fa4f35bee8a90512f9f59d1441c4ae82e.patch"))
+          (file-name (string-append name
+                                    "-fix-test-precision-for-ppc.patch"))
+          (sha256
+           (base32
+            "04qg1p9afdd6453k18qskazrvscysdcjz9j6w4i6p5x4xyma19v6")))))))
     (build-system gnu-build-system)
     (home-page "https://libcheck.github.io/check/")
     (synopsis "Unit test framework for C")
@@ -227,7 +246,7 @@ source code editors and IDEs.")
                              (string-append out "/share/doc/clitest-" ,version))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))                 ;for tests
+     (list perl))                 ;for tests
     (synopsis "Command line test tool")
     (description
      "@command{clitest} is a portable shell script that performs automatic
@@ -255,9 +274,7 @@ testing of Unix command lines.")
                    (replace 'bootstrap
                      (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (home-page "http://cunit.sourceforge.net/")
     (synopsis "Automated testing framework for C")
     (description
@@ -416,7 +433,7 @@ a multi-paradigm automated test framework for C++ and Objective-C.")
                 "100r0kmra8jmra2hv92lzvwcmphpaiccwvq3lpdsa5b7hailhach"))))
     (build-system cmake-build-system)
     (inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (synopsis "Automated test framework for C++ and Objective-C")
     (description "Catch2 stands for C++ Automated Test Cases in Headers and is
 a multi-paradigm automated test framework for C++ and Objective-C.")
@@ -439,12 +456,9 @@ a multi-paradigm automated test framework for C++ and Objective-C.")
     (build-system python-build-system)
     (arguments `(#:tests? #f))          ;requires Python 2!
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python" ,python)))
+     (list python-coverage-test-runner python))
     (inputs
-     `(("python-cliapp" ,python-cliapp)
-       ("python-markdown" ,python-markdown)
-       ("python-ttystatus" ,python-ttystatus)))
+     (list python-cliapp python-markdown python-ttystatus))
     (home-page "https://liw.fi/cmdtest/")
     (synopsis "Black box Unix program tester")
     (description
@@ -538,7 +552,7 @@ normally do not detect.  The goal is to detect only real errors in the code
                (copy-recursively "../sample" (string-append doc-dir "/sample"))
                #t))))))
     (propagated-inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://cxxtest.com/")
     (synopsis "Unit testing framework for C++")
     (description "CxxTest is a unit testing framework for C++ that is similar
@@ -613,7 +627,7 @@ test) much simpler.")
     (arguments
      '(#:import-path "github.com/smartystreets/assertions"))
     (native-inputs
-     `(("go-github.com-smartystreets-gunit" ,go-github.com-smartystreets-gunit)))
+     (list go-github.com-smartystreets-gunit))
     (synopsis "Assertions for testing with Go")
     (description
      "The @code{assertions} package provides convenient assertion functions
@@ -638,8 +652,7 @@ for writing tests in Go.")
     (arguments
      '(#:import-path "github.com/smartystreets/goconvey"))
     (propagated-inputs
-     `(("go-github.com-jtolds-gls" ,go-github.com-jtolds-gls)
-       ("go-github.com-smartystreets-assertions" ,go-github.com-smartystreets-assertions)))
+     (list go-github.com-jtolds-gls go-github.com-smartystreets-assertions))
     (synopsis "Go testing tool with both a web and terminal user interface")
     (description
      "GoConvey is a testing tool for Go. It integrates with go test, can show
@@ -650,7 +663,7 @@ test coverage and has a web user interface that will refresh automatically.")
 (define-public googletest
   (package
     (name "googletest")
-    (version "1.10.0")
+    (version "1.11.0")
     (source
      (origin
        (method git-fetch)
@@ -659,7 +672,7 @@ test coverage and has a web user interface that will refresh automatically.")
              (commit (string-append "release-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1zbmab9295scgg4z2vclgfgjchfjailjnvzc6f5x9jvlsdi3dpwz"))))
+        (base32 "0pd4y1gpx1z8fiyarkvqlmk6hbv0lc8fr00ivnsvqzi1xg34jfaa"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
@@ -716,7 +729,7 @@ similar to unit tests.")
 (define-public cpputest
   (package
     (name "cpputest")
-    (version "3.8")
+    (version "4.0")
     (source
      (origin
        (method url-fetch)
@@ -724,10 +737,10 @@ similar to unit tests.")
                            version "/cpputest-" version ".tar.gz"))
        (sha256
         (base32
-         "0mk48xd3klyqi7wf3f4wn4zqxxzmvrhhl32r25jzrixzl72wq7f8"))))
+         "1xslavlb1974y5xvs8n1j9zkk05dlw8imy4saasrjlmibl895ii1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://cpputest.github.io/")
     (synopsis "Unit testing and mocking framework for C/C++")
     (description
@@ -756,8 +769,7 @@ but it works for any C/C++ project.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (home-page "https://github.com/wolever/parameterized")
     (synopsis "Parameterized testing with any Python test framework")
     (description
@@ -809,7 +821,7 @@ doctest.")
         (base32
          "1hrp6j0yrx2xzylfv02qa8kph661m6yq4p0mc8fnimch9j4psrc3"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Tests require "pytest", which depends on this package.
@@ -870,9 +882,7 @@ available via the @code{unittest.mock} module.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
     (propagated-inputs
-     `(("python-cov-core" ,python-cov-core)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-six" ,python-six)))
+     (list python-cov-core python-pytest-cov python-six))
     (home-page "https://github.com/nose-devs/nose2")
     (synopsis "Next generation of nicer testing for Python")
     (description
@@ -907,8 +917,7 @@ interfaces and processes.")
            (lambda _
              (zero? (system* "python" "-m" "unittest2" "discover" "--verbose")))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)))
+     (list python-six python-traceback2))
     (home-page "https://pypi.org/project/unittest2/")
     (synopsis "Python unit testing library")
     (description
@@ -922,39 +931,46 @@ standard library.")
 (define-public python-pytest
   (package
     (name "python-pytest")
-    (version "5.3.5")
+    (version "6.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest" version))
        (sha256
         (base32
-         "139i9cjhrv5aici3skq8iihvfb3lq0d8xb5j7qycr2hlk8cfjpqd"))))
+         "12cyi0lnyaq8sdqfnqlppd76gkw6zcg10gyih5knx9v611l3c6qk"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'build 'pretend-version
+           ;; The version string is usually derived via setuptools-scm, but
+           ;; without the git metadata available, the version string is set to
+           ;; '0.0.0'.
+           (lambda _
+             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)))
          (replace 'check
            (lambda* (#:key (tests? #t) #:allow-other-keys)
+             (setenv "TERM" "dumb")     ;attempt disabling markup tests
              (if tests?
                  (invoke "pytest" "-vv" "-k"
                          (string-append
-                          ;; These tests involve the /usr directory, and fails.
-                          "not test_remove_dir_prefix"
-                          " and not test_argcomplete"
-                          ;; This test tries to override PYTHONPATH, and
-                          ;; subsequently fails to locate the test libraries.
-                          " and not test_collection"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                          ;; This test involves the /usr directory, and fails.
+                          " not test_argcomplete"
+                          ;; These test do not honor the isatty detection and
+                          ;; fail.
+                          " and not test_code_highlight"
+                          " and not test_color_yes"))
+                 (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-attrs" ,python-attrs-bootstrap)
+     `(("python-attrs" ,python-attrs-bootstrap)
+       ("python-iniconfig" ,python-iniconfig)
        ("python-more-itertools" ,python-more-itertools)
        ("python-packaging" ,python-packaging-bootstrap)
        ("python-pluggy" ,python-pluggy)
        ("python-py" ,python-py)
        ("python-six" ,python-six-bootstrap)
+       ("python-toml" ,python-toml)
        ("python-wcwidth" ,python-wcwidth)))
     (native-inputs
      `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
@@ -964,6 +980,7 @@ standard library.")
        ("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest-bootstrap)
        ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-toml" ,python-toml)
        ("python-xmlschema" ,python-xmlschema)))
     (home-page "https://docs.pytest.org/en/latest/")
     (synopsis "Python testing library")
@@ -974,52 +991,18 @@ and many external plugins.")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-pytest))))))
 
-(define-public python-pytest-6
+(define-public python-pytest-6.1
   (package
-    (inherit (strip-python2-variant python-pytest))
-    (version "6.2.4")
+    (inherit python-pytest)
+    (version "6.1.2")
     (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pytest" version))
-       (sha256
-        (base32
-         "0jy5f83la1864ss42dhsi1mcm5nl79d8bjg7wk474nlw1c5avg2h"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-version
-           ;; The version string is usually derived via setuptools-scm, but
-           ;; without the git metadata available, the version string is set to
-           ;; '0.0.0'.
-           (lambda _
-             (substitute* "setup.py"
-               (("setup\\(\\)")
-                (format #f "setup(version=~s)" ,version)))))
-         (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
-             (setenv "TERM" "dumb")     ;attempt disabling markup tests
-             (if tests?
-                 (invoke "pytest" "-vv" "-k"
-                         (string-append
-                          ;; This test involves the /usr directory, and fails.
-                          " not test_argcomplete"
-                          ;; These test do not honor the isatty detection and
-                          ;; fail.
-                          " and not test_code_highlight"
-                          " and not test_color_yes"))
-                 (format #t "test suite not run~%")))))))
-    (propagated-inputs
-     (append (alist-delete "python-py"
-                           (package-propagated-inputs python-pytest))
-         `(("python-iniconfig" ,python-iniconfig)
-           ("python-py" ,python-py-next))))
-    (native-inputs
-     (append (fold alist-delete (package-native-inputs python-pytest)
-                   '("python-mock"
-                     "python-pytest"))
-         `(("python-pytest" ,python-pytest-6-bootstrap)
-           ("python-toml" ,python-toml))))))
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest" version))
+        (sha256
+         (base32 "0gl2sdm322vzmsh5k4f8kj9raiq2y7kdinnca4m45ifvii5fk9y0"))))))
+
+(define-public python-pytest-6 python-pytest)
 
 ;; Pytest 4.x are the last versions that support Python 2.
 (define-public python2-pytest
@@ -1061,19 +1044,11 @@ and many external plugins.")
   (package
     (inherit (strip-python2-variant python-pytest))
     (name "python-pytest-bootstrap")
-    (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (native-inputs (list python-iniconfig python-setuptools-scm
+                         python-toml))
     (arguments `(#:tests? #f))
     (properties `((python2-variant . ,(delay python2-pytest-bootstrap))))))
 
-(define-public python-pytest-6-bootstrap
-  (package
-    (inherit (strip-python2-variant python-pytest-6))
-    (name "python-pytest-bootstrap")
-    (arguments `(#:tests? #f))
-    (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)))))
-
 (define-public python2-pytest-bootstrap
   (hidden-package
    (package/inherit
@@ -1114,8 +1089,7 @@ and many external plugins.")
                       (when tests?
                         (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/astraw38/pytest-assume")
     (synopsis "Pytest plugin that allows multiple failures per test")
 
@@ -1151,8 +1125,7 @@ following improvements:
             (invoke "python" "./setup.py" "check"
                     "--strict" "--metadata"))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-cov")
     (synopsis "Pytest plugin for measuring coverage")
     (description
@@ -1176,15 +1149,15 @@ supports coverage of subprocesses.")
                 "0vbls0j570l5my83j4jnk5blmnir44i0w511azlh41nl6k8rac5f"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-werkzeug" ,python-werkzeug)))
+     (list python-werkzeug))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'fix-library-loading
            (lambda _
-             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":."))))
+             (setenv "GUIX_PYTHONPATH" (string-append (getenv "GUIX_PYTHONPATH") ":."))))
          (replace 'check
            (lambda _
              (invoke "pytest" "tests" "-vv")
@@ -1213,7 +1186,7 @@ contacting the real http server.")
                       (when tests?
                         (invoke "python" "-m" "pytest" "--random-order")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jbasko/pytest-random-order")
     (synopsis "Pytest plugin to randomize the order of tests")
     (description "@code{pytest-random-order} is a Pytest plugin that
@@ -1249,7 +1222,7 @@ reported in a previous test run.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-runner")
     (synopsis "Invoke py.test as a distutils command")
     (description
@@ -1296,7 +1269,7 @@ reported in a previous test run.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/tvorog/pytest-lazy-fixture")
     (synopsis "Use fixtures in @code{pytest.mark.parametrize}")
     (description "This plugin helps to use fixtures in
@@ -1329,10 +1302,9 @@ reported in a previous test run.")
                (invoke "pytest" "--assert=plain"
                        "-k" "not test_standalone_mock")))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest-asyncio python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-mock/")
     (synopsis "Thin-wrapper around the mock package for easier use with py.test")
     (description
@@ -1358,6 +1330,8 @@ same arguments.")
            "1i5mg3ff1qk0wqfcxfz60hwy3q5dskdp36i10ckigkzffg8hc3ad"))))
       (arguments
        `(#:python ,python-2))
+      (native-inputs
+       `(("python2-setuptools-scm" ,python2-setuptools-scm)))
       (propagated-inputs
        `(("python2-mock" ,python2-mock)
          ("python2-pytest" ,python2-pytest))))))
@@ -1365,20 +1339,32 @@ same arguments.")
 (define-public python-pytest-xdist
   (package
     (name "python-pytest-xdist")
-    ;; There is an issue that causes all releases after 1.34 to fail on Pytest
-    ;; 5 (see: https://github.com/pytest-dev/pytest-xdist/issues/697).
-    (version "1.34.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-xdist" version))
        (sha256
         (base32
-         "1vh4ps32lp5ignch5adbl3pgchvigdfmrl6qpmhxih54wa1qw3il"))))
+         "0wh6pn66nncfs6ay0n863bgyriwsgppn8flx5l7551j1lbqkinc2"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove pre-compiled .pyc files from source.
+           (for-each delete-file-recursively
+                     (find-files "." "__pycache__" #:directories? #t))
+           (for-each delete-file (find-files "." "\\.pyc$"))
+           #t))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     '(#:tests? #f ; Lots of tests fail.
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setup-py
+           (lambda _
+             ;; Relax pytest requirement.
+             (substitute* "setup.py"
+               (("pytest>=6\\.0\\.0") "pytest"))))
          (replace 'check
            (lambda* (#:key inputs outputs tests? #:allow-other-keys)
              (when tests?
@@ -1386,11 +1372,9 @@ same arguments.")
                (invoke "pytest" "-vv"
                        "-n" (number->string (parallel-job-count)))))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-execnet" ,python-execnet)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)))
+     (list python-execnet python-pytest python-py python-pytest-forked))
     (home-page
      "https://github.com/pytest-dev/pytest-xdist")
     (synopsis
@@ -1443,10 +1427,9 @@ result back.")
                       (add-installed-pythonpath inputs outputs)
                       (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (native-inputs
-     `(("python-pexpect" ,python-pexpect)))
+     (list python-pexpect))
     (home-page "https://github.com/pytest-dev/pytest-timeout")
     (synopsis "Plugin for py.test to abort hanging tests")
     (description
@@ -1511,7 +1494,7 @@ side-effects (such as setting environment variables).")
          "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page (string-append "https://web.archive.org/web/20161029233413/"
                               "http://pythonpaste.org/scripttest/"))
     (synopsis "Python library to test command-line scripts")
@@ -1523,25 +1506,20 @@ subprocess and see the output as well as any file modifications.")
 (define-public python-testtools-bootstrap
   (package
     (name "python-testtools-bootstrap")
-    (version "2.3.0")
+    (version "2.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "testtools" version))
        (sha256
         (base32
-         "0n8519lk8aaa91vymz842831181wf7fss98hyllhygi3z1nfq9sq"))
-       (patches (search-patches "python-testtools.patch"))))
+         "0gxjbjk93jjqi491k4s9rh3ia37v21yifd35pvizv7sgv4rk9hap"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))
     (propagated-inputs
      `(("python-extras" ,python-extras)
        ("python-fixtures" ,python-fixtures-bootstrap)
-       ("python-mimeparse" ,python-mimeparse)
-       ("python-pbr" ,python-pbr-minimal)
-       ("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)
-       ("python-unittest2" ,python-unittest2)))
+       ("python-pbr" ,python-pbr-minimal)))
     (home-page "https://github.com/testing-cabal/testtools")
     (synopsis
      "Extensions to the Python standard library unit testing framework")
@@ -1554,19 +1532,15 @@ subprocess and see the output as well as any file modifications.")
     (inherit python-testtools-bootstrap)
     (name "python-testtools")
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (invoke "python" "-m" "testtools.run"
-                              "testtools.tests.test_suite"))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "testtools.run"
+                       "testtools.tests.test_suite")))))))
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-fixtures" ,python-fixtures)
-       ("python-mimeparse" ,python-mimeparse)
-       ("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)
-       ("python-traceback2" ,python-traceback2)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-extras python-fixtures python-pbr))
     (native-inputs
      `(("python-testscenarios" ,python-testscenarios-bootstrap)))
     (description
@@ -1606,8 +1580,7 @@ compatibility.")))
     (inherit python-testscenarios-bootstrap)
     (name "python-testscenarios")
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)))
+     (list python-pbr python-testtools))
     (description
      "Testscenarios provides clean dependency injection for Python unittest
 style tests.")))
@@ -1641,11 +1614,10 @@ testresources package instead.")
     (inherit python-testresources-bootstrap)
     (name "python-testresources")
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (arguments '())
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-testtols" ,python-testtools)))
+     (list python-fixtures python-testtools))
     (description
      "Testresources is an extension to Python's unittest to allow declarative
 use of resources by test cases.")))
@@ -1663,12 +1635,10 @@ use of resources by test cases.")))
          "0j0ymmnc5nfxi1qzvy59j27viqca7l7xd0y9x29g7yr0h693j804"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-testtools" ,python-testtools-bootstrap)))
+     (list python-extras python-testtools-bootstrap))
     (native-inputs
-     `(("python-fixtures" ,python-fixtures-bootstrap)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-testscenarios" ,python-testscenarios-bootstrap)))
+     (list python-fixtures-bootstrap python-hypothesis
+           python-testscenarios-bootstrap))
     (home-page "https://launchpad.net/subunit")
     (synopsis "Python implementation of the subunit protocol")
     (description
@@ -1681,12 +1651,9 @@ python-subunit package instead.")
     (inherit python-subunit-bootstrap)
     (name "python-subunit")
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-testtools" ,python-testtools)))
+     (list python-extras python-testtools))
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-testscenarios" ,python-testscenarios)))
+     (list python-fixtures python-hypothesis python-testscenarios))
     (description
      "Python-subunit is a Python implementation of the subunit test streaming
 protocol.")))
@@ -1697,17 +1664,23 @@ protocol.")))
   (package
     (name "python-fixtures-bootstrap")
     (version "3.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "fixtures" version))
-              (sha256
-               (base32
-                "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "fixtures" version))
+        (sha256
+         (base32
+          "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))
+        (patches (search-patches "python-fixtures-remove-monkeypatch-test.patch"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f))
+    (arguments
+      `(#:tests? #f
+        #:phases
+         (modify-phases %standard-phases
+           ;; Package is not loadable on its own at this stage.
+           (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal)
-       ("python-six" ,python-six)))
+     (list python-pbr-minimal python-six))
     (home-page "https://launchpad.net/python-fixtures")
     (synopsis "Python test fixture library")
     (description
@@ -1723,13 +1696,13 @@ python-fixtures package instead.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "testtools.run"
-                     "fixtures.test_suite"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "testtools.run"
+                       "fixtures.test_suite")))))))
     (propagated-inputs
      ;; Fixtures uses pbr at runtime to check versions, etc.
-     `(("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)))
+     (list python-pbr python-six))
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-testtools" ,python-testtools-bootstrap)))
@@ -1755,7 +1728,7 @@ Python tests.")))
        ("python-subunit" ,python-subunit-bootstrap)
        ("python-testtools" ,python-testtools-bootstrap)))
     (native-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (home-page "https://launchpad.net/testrepository")
     (synopsis "Database for Python test results")
     (description
@@ -1770,11 +1743,9 @@ Python tests.")))
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-subunit python-testtools))
     (native-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (description "Testrepository provides a database of test results which can
 be used as part of a developer's workflow to check things such as what tests
 have failed since the last commit or what tests are currently failing.")))
@@ -1809,9 +1780,7 @@ executed.")
 (define-public python-pytest-asyncio
   (package
     (name "python-pytest-asyncio")
-    ;; Version 0.10.0 is the last version which is compatible with Pytest <=
-    ;; 5.4.0.
-    (version "0.10.0")
+    (version "0.15.1")
     (source
      (origin
        (method git-fetch)               ;for tests
@@ -1820,23 +1789,11 @@ executed.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1m63b7nbph5z20mn8jgh6j9ac873i1k4in29x44vrkw3qwfwg13y"))
-       (patches (search-patches "python-pytest-asyncio-python-3.8.patch"))))
+        (base32 "03drs4myv1ik79148xyhli37q6mp931jb14cz65n8qvls2zvvwgx"))))
     (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 "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-async-generator" ,python-async-generator)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-async-generator python-hypothesis
+           python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-asyncio")
     (synopsis "Pytest support for asyncio")
     (description "Python asyncio code is usually written in the form of
@@ -1858,7 +1815,7 @@ to make testing async code easier.")
           "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/schlamar/cov-core")
     (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
     (description
@@ -1883,10 +1840,9 @@ testing frameworks.")
           "1217c0vqf7ii65635gvl27a5pfhv0r7zhrpdp9cx640hg73bgn4f"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-requests" ,python-requests)))
+     (list python-coverage python-requests))
     (home-page "https://github.com/codecov/codecov-python")
     (synopsis "Upload code coverage reports to @code{codecov.io}")
     (description
@@ -1934,7 +1890,7 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
                                    wheel (string-append "--prefix=" out)))
                          (find-files "dist" "\\.whl$"))))))))
     (native-inputs
-     `(("python-flit" ,python-flit)))
+     (list python-flit))
     (home-page "https://github.com/takluyver/testpath")
     (synopsis "Test utilities for code working with files and commands")
     (description
@@ -1955,7 +1911,7 @@ tools for mocking system commands and recording calls to those.")
         (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))  ; for unpacking the source
+     (list unzip))  ; for unpacking the source
     (synopsis "Python micro test suite harness")
     (description "A micro unittest suite harness for Python.")
     (home-page "https://github.com/trentm/testlib")
@@ -1977,10 +1933,7 @@ tools for mocking system commands and recording calls to those.")
                "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-apipkg" ,python-apipkg)
-       ("python-execnet" ,python-execnet)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)))
+     (list python-apipkg python-execnet python-py python-pytest))
     (synopsis "Py.test plugin with mechanisms for caching across test runs")
     (description "The pytest-cache plugin provides tools to rerun failures from
 the last py.test invocation.")
@@ -2008,11 +1961,9 @@ the last py.test invocation.")
            (lambda _
              (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-pytest python-requests python-six))
     (propagated-inputs
-     `(("python-werkzeug" ,python-werkzeug)))
+     (list python-werkzeug))
     (synopsis "Py.test plugin to test server connections locally")
     (description "Pytest-localserver is a plugin for the pytest testing
 framework which enables you to test server connections locally.")
@@ -2031,15 +1982,13 @@ framework which enables you to test server connections locally.")
                "0rm2rchrr63imn44xk5slwydxf8gvy579524qcxq7dc42pnk17zx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-psutil" ,python-psutil)))
+     (list python-pytest python-psutil))
     (synopsis "Pytest plugin to manage external processes across test runs")
     (description "Pytest-xprocess is an experimental py.test plugin for managing
 processes across test runs.")
-    (home-page "https://github.com/pytest-dev/pytest-xprocess")
+    (home-page "https://github.com/pytest-dev/pytest-xprocess/")
     (license license:expat)))
 
 (define-public python-pytest-subtesthack
@@ -2054,7 +2003,7 @@ processes across test runs.")
                 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "Set-up and tear-down fixtures for unit tests")
     (description "This plugin allows you to set up and tear down fixtures within
 unit test functions that use @code{py.test}. This is useful for using
@@ -2079,9 +2028,7 @@ normally the case.")
         (base32 "1i0hv3h49zvl62jbiyjag84carbrp3zprqzxffdr291nxavvac0n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)
-       ("python-pytest" ,python-pytest)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-packaging python-pytest python-termcolor))
     (home-page "https://pivotfinland.com/pytest-sugar/")
     (synopsis "Plugin for pytest that changes the default look and feel")
     (description
@@ -2093,13 +2040,13 @@ instantly.")
 (define-public python-hypothesis
   (package
     (name "python-hypothesis")
-    (version "5.4.1")
+    (version "6.0.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0zn09bn6hadk4vxl6jy8bkjr5fz8mrhin3z46w7pq5qgbaycr89p"))))
+                "0wj7ip779naf2n076nylf2gi0sjz68z1ir9d9r2rgs7br18naqdf"))))
     (build-system python-build-system)
     (arguments
      ;; XXX: Tests are not distributed with the PyPI archive.
@@ -2116,28 +2063,16 @@ seamlessly into your existing Python unit testing work flow.")
     (license license:mpl2.0)
     (properties `((python2-variant . ,(delay python2-hypothesis))))))
 
-(define-public python-hypothesis-5.23
-  (package
-    (inherit python-hypothesis)
-    (version "5.23.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "hypothesis" version))
-              (sha256
-               (base32
-                "0sy1v6nyxg4rjcf3rlr8nalb7wqd9nccpb2lzkchbj5an13ysf1h"))))
-    (home-page "https://github.com/HypothesisWorks/hypothesis")))
-
 (define-public python-hypothesis-6.23
   (package
     (inherit python-hypothesis)
-    (version "6.23.2")
+    (version "6.23.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0lqhfrqsd81apchz93pdqfn85kx0p790w8hhd9qq85692rwja6xp"))))))
+                "0wp8i9qmd5wl1sq1l2b97fgliyk5fyphssl6j7q5qn5zjlfgi4qs"))))))
 
 ;; This is the last version of Hypothesis that supports Python 2.
 (define-public python2-hypothesis
@@ -2152,25 +2087,23 @@ seamlessly into your existing Python unit testing work flow.")
                  (base32
                   "183gpxbfcdhdqzlahkji5a71n6lmvgqsbkcb0ihqad51n2j6jhrw"))))
       (propagated-inputs
-       `(("python2-enum34" ,python2-enum34)
-         ,@(package-propagated-inputs hypothesis))))))
+       (modify-inputs (package-propagated-inputs hypothesis)
+         (prepend python2-enum34))))))
 
 (define-public python-hypothesmith
   (package
     (name "python-hypothesmith")
-    (version "0.1.2")
+    (version "0.1.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hypothesmith" version))
        (sha256
         (base32
-         "09331sspknv459xcyn1k0lx5flqlc6gmnwp9370pfvg4kg1zmss6"))))
+         "02j101m5grjrbvrgjap17jsxd1hgawkylmyswcn33vf42mxh9zzr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hypothesis" ,python-hypothesis-5.23)
-       ("python-lark-parser" ,python-lark-parser)
-       ("python-libcst" ,python-libcst)))
+     (list python-hypothesis python-lark-parser python-libcst-minimal))
     (home-page "https://github.com/Zac-HD/hypothesmith")
     (synopsis "Strategies for generating Python programs")
     (description
@@ -2181,14 +2114,14 @@ programs, something like CSmith, a random generator of C programs.")
 (define-public python-lit
   (package
     (name "python-lit")
-    (version "0.5.1")
+    (version "12.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "lit" version))
         (sha256
          (base32
-          "0z651m3vkbk85y41larnsjxrszkbi58x9gzml3lb6ga7qwcrsg97"))))
+          "01yggsb73s2gbq36xwifxl6k5ll5lkss5rwz59k9h3jnbnn7m5fj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2197,7 +2130,7 @@ programs, something like CSmith, a random generator of C programs.")
            (lambda _
              (invoke "python" "lit.py" "tests"))))))
     (native-inputs
-     `(("llvm" ,llvm)))
+     (list llvm))
     (home-page "https://llvm.org/")
     (synopsis "LLVM Software Testing Tool")
     (description "@code{lit} is a portable tool for executing LLVM and Clang
@@ -2205,9 +2138,6 @@ style test suites, summarizing their results, and providing indication of
 failures.")
     (license license:ncsa)))
 
-(define-public python2-lit
-  (package-with-python2 python-lit))
-
 (define-public python-pytest-pep8
   (package
     (name "python-pytest-pep8")
@@ -2220,11 +2150,22 @@ failures.")
                 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+     `(#:tests? #f ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-dependencies
+           (lambda _
+             (substitute* "setup.py"
+               (("'pytest-cache', ") ""))))  ; Included in recent pytest
+         (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (add-installed-pythonpath inputs outputs)
+                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-pep8" ,python-pep8)))
+     (list python-pep8))
     (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
     (synopsis "Py.test plugin to check PEP8 requirements")
     (description "Pytest plugin for checking PEP8 compliance.")
@@ -2255,12 +2196,10 @@ failures.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test" "-vv" "-k" "not test_syntax_error"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-pep8" ,python-pytest-pep8)))
+     (list python-coverage python-pytest python-pytest-cache
+           python-pytest-pep8))
     (propagated-inputs
-     `(("python-pyflakes" ,python-pyflakes)))
+     (list python-pyflakes))
     (home-page "https://github.com/fschulze/pytest-flakes")
     (synopsis "Py.test plugin to check source code with pyflakes")
     (description "Pytest plugin for checking Python source code with pyflakes.")
@@ -2291,7 +2230,7 @@ failures.")
            (lambda _
              (invoke "./testrun"))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://liw.fi/coverage-test-runner/")
     (synopsis "Python module for running unit tests")
     (description "@code{CoverageTestRunner} is a python module for running
@@ -2305,30 +2244,21 @@ statements in the module it tests.")
 (define-public python-pylint
   (package
     (name "python-pylint")
-    (version "2.5.3")
+    (version "2.9.6")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/PyCQA/pylint")
-             (commit (string-append "pylint-" version))))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04cgbh2z1mygar63plzziyz34yg6bdr4i0g63jp256fgnqwb1bi3"))))
+        (base32 "15yw69v1cj6zkndk60c2g0dgl0khh8bfm1lrwhjffpdjfc7nkc9a"))))
     (build-system python-build-system)
-    ;; FIXME: Tests are failing since version 2.4.3, see:
-    ;; https://github.com/PyCQA/pylint/issues/3198.
-    (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-tox" ,python-tox)))
+     (list python-pytest python-pytest-benchmark python-pytest-runner))
     (propagated-inputs
-     `(("python-astroid" ,python-astroid)
-       ("python-isort" ,python-isort)
-       ("python-mccabe" ,python-mccabe)
-       ("python-six" ,python-six)
-       ("python-toml" ,python-toml)))
+     (list python-astroid python-isort python-mccabe python-toml))
     (home-page "https://github.com/PyCQA/pylint")
     (synopsis "Python source code analyzer which looks for coding standard
 errors")
@@ -2381,7 +2311,7 @@ recognize TestCases.")
          "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/fschulze/pytest-warnings")
     (synopsis "Pytest plugin to list Python warnings in pytest report")
     (description
@@ -2410,7 +2340,7 @@ pytest report.")
          "038049nyjl7di59ycnxvc9nydivc5m8np3hqq84j2iirkccdbs5n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/memedough/pytest-capturelog/overview")
     (synopsis "Pytest plugin to catch log messages")
     (description
@@ -2433,9 +2363,9 @@ pytest report.")
          "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/eisensheng/pytest-catchlog")
     (synopsis "Pytest plugin to catch log messages")
     (description
@@ -2458,8 +2388,7 @@ a fork of pytest-capturelog.")
                 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/cmheisel/nose-xcover")
     (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
     (description "Nose-xcover is a companion to the built-in
@@ -2510,26 +2439,12 @@ backported from Python 2.7 for Python 2.4+.")
                        "behave-skip-a-couple-of-tests.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pathpy" ,python-pathpy)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-nose python-pathpy python-pyhamcrest
+           python-pytest))
     (propagated-inputs
-     `(("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-six" ,python-six)
-       ("python-parse" ,python-parse)
-       ("python-parse-type" ,python-parse-type)))
+     (list python-parse python-parse-type))
     (arguments
-     '(#:test-target "behave_test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-library-loading
-           (lambda _
-             ;; Otherwise, tests fail with no module named 'path'
-             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":"
-                                                 (getcwd) "/tasks/_vendor"))
-             #t)))))
+     '(#:test-target "behave_test"))
     (home-page "https://github.com/behave/behave")
     (synopsis "Python behavior-driven development")
     (description
@@ -2562,8 +2477,7 @@ tests written in a natural language style, backed up by Python code.")
                (("'ordereddict==1.1'") ""))    ; Python >= 2.7 has it built-in.
              #t)))))
     (propagated-inputs
-     `(("behave" ,behave)
-       ("python-requests" ,python-requests)))
+     (list behave python-requests))
     (home-page "https://github.com/jefersondaniel/behave-web-api")
     (synopsis "Provides testing for JSON APIs with Behave for Python")
     (description "This package provides testing utility modules for testing
@@ -2592,11 +2506,9 @@ JSON APIs with Behave.")
                         (("six==1.10.0") "six"))
                       #t)))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-termstyle" ,python-termstyle)))
+     (list python-colorama python-termstyle))
     (native-inputs
-     `(("python-six" ,python-six)
-       ("python-nose" ,python-nose)))
+     (list python-six python-nose))
     (home-page "https://github.com/JBKahn/rednose")
     (synopsis "Colored output for Python nosetests")
     (description "This package provides colored output for the
@@ -2622,7 +2534,7 @@ JSON APIs with Behave.")
         "1dvip61r2frjv35mv6mmfjc07402z73pjbndfp3mhxyjn2zhksw2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/fzumstein/nose-random")
     (synopsis "Nose plugin to facilitate randomized unit testing with
 Python")
@@ -2644,8 +2556,7 @@ scenarios.")
         (base32 "0z662rqhfk4bjmg806mn4frb8nz4gbh7mrddsrhfffp1g4yklj3y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-numpy" ,python-numpy)))
+     (list python-nose python-numpy))
     (home-page "https://github.com/adamchainz/nose-randomly")
     (synopsis
      "Nose plugin to randomly order tests and control random.seed")
@@ -2672,8 +2583,7 @@ create data based on random numbers and yet remain repeatable.")
           (base32 "05wzkc88vbzw62pqkvhl33211b90kns0lny70b7qw62rcg4flzk4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-nose" ,python-nose)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-nose python-termcolor))
     (home-page "https://github.com/mahmoudimus/nose-timer")
     (synopsis "Timer plugin for nosetests")
     (description "Shows how much time was needed to run individual tests.")
@@ -2694,11 +2604,9 @@ create data based on random numbers and yet remain repeatable.")
         (base32 "0al75mk829j1izxi760b7yjnknjihyfhp2mvi5qiyrxb9cpxwqk2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-dateutil" ,python-dateutil)))
+     (list python-six python-dateutil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2780,8 +2688,8 @@ retried.")
               (sha256
                (base32
                 "05kdzlhs2kvj82pfca13qszszcj6dyrk4b9pbr46x06sq2s4qyls"))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+    (native-inputs                      ;all native inputs are for tests
+     (list python-pytest-cov python-mock python-pytest python-hypothesis))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2823,7 +2731,7 @@ portable to just about any platform.")
 (define-public libfaketime
   (package
     (name "libfaketime")
-    (version "0.9.8")
+    (version "0.9.9")
     (home-page "https://github.com/wolfcw/libfaketime")
     (source (origin
               (method git-fetch)
@@ -2832,35 +2740,41 @@ portable to just about any platform.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1mfdl82ppgbdvy1ny8mb7xii7p0g7awvn4bn36jb8v4r545slmjc"))
+                "1gi1xciqga5hl2xlk7rc3j8wy47ag97pi7ngmdl6ny1d11b2wn1z"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'embed-date-reference
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((coreutils (assoc-ref inputs "coreutils")))
+                        (substitute* "src/faketime.c"
+                          (("\"date\"")
+                           (string-append "\"" coreutils "/bin/date\""))))))
                   (replace 'configure
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
-                        (setenv "CC" "gcc")
+                        (setenv "CC" ,(cc-for-target))
                         (setenv "PREFIX" out)
 
                         ;; XXX: Without this flag, the CLOCK_REALTIME test hangs
                         ;; indefinitely.  See README.packagers for more information.
-                        ;; Try removing this for future versions of libfaketime.
-                        (setenv "FAKETIME_COMPILE_CFLAGS" "-DFORCE_MONOTONIC_FIX")
-
-                        #t)))
+                        ;; There are specific instructions to not enable more flags
+                        ;; than absolutely needed.
+                        ,(if (target-ppc64le?)
+                           `(setenv "FAKETIME_COMPILE_CFLAGS"
+                                    "-DFORCE_MONOTONIC_FIX -DFORCE_PTHREAD_NONVER")
+                           `(setenv "FAKETIME_COMPILE_CFLAGS"
+                                    "-DFORCE_MONOTONIC_FIX")))))
                   (add-before 'check 'pre-check
                     (lambda _
                       (substitute* "test/functests/test_exclude_mono.sh"
-                        (("/bin/bash") (which "bash")))
-
-                      ;; Do not fail due to use of 'ftime', which was deprecated in
-                      ;; glibc 2.31.  Remove this for later versions of libfaketime.
-                      (setenv "FAKETIME_COMPILE_CFLAGS" "-Wno-deprecated-declarations")
-                      #t)))
+                        (("/bin/bash") (which "bash"))))))
        #:test-target "test"))
     (native-inputs
-     `(("perl" ,perl)))                           ;for tests
+     (list perl))                           ;for tests
+    (inputs
+     (list coreutils))
     (synopsis "Fake the system time for single applications")
     (description
      "The libfaketime library allows users to modify the system time that an
@@ -2891,18 +2805,15 @@ provides a simple way to achieve this.")
                (("/run") "/tmp"))
              #t)))))
     (native-inputs
-     `(("vala" ,vala)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("python" ,python)
-       ("which" ,which)))
+     (list vala
+           gobject-introspection
+           gtk-doc/stable
+           pkg-config
+           ;; For tests.
+           python
+           which))
     (inputs
-     `(("glib" ,glib)
-       ("eudev" ,eudev)
-       ("libgudev" ,libgudev)))
+     (list glib eudev libgudev))
     (home-page "https://github.com/martinpitt/umockdev/")
     (synopsis "Mock hardware devices for creating unit tests")
     (description "umockdev mocks hardware devices for creating integration
@@ -2963,15 +2874,23 @@ grew out of the @dfn{Vc} project.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-testsuite
+           (lambda _
+             ;; Time difference is larger than expected.
+             (substitute* "pyfakefs/tests/fake_filesystem_unittest_test.py"
+               (("(\\s+)def test_copy_real_file" all indent)
+                (string-append
+                  indent
+                  "@unittest.skip('disabled by guix')\n"
+                  all)))))
          ;; The default test suite does not run these extra tests.
          (add-after 'check 'check-pytest-plugin
            (lambda _
              (invoke
               "python" "-m" "pytest"
-              "pyfakefs/pytest_tests/pytest_plugin_test.py")
-             #t)))))
+              "pyfakefs/pytest_tests/pytest_plugin_test.py"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (build-system python-build-system)
     ;; Guix lint doesn't like that this is a permanent redirect to the GitHub
     ;; page, but the pyfakefs documentation asks us to use this specific URL
@@ -3026,10 +2945,9 @@ system.  The code under test requires no modification to work with pyfakefs.")
                           (invoke "nosetests" "-v")
                           (format #t "test suite not run~%"))
                       #t)))))
-    (propagated-inputs `(("python-wrapt" ,python-wrapt)))
+    (propagated-inputs (list python-wrapt))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page
      "https://github.com/kwarunek/aiounittest")
     (synopsis "Test asyncio code more easily")
@@ -3050,7 +2968,7 @@ asynchronous code in Python (asyncio).")
             "0swl3mxca7nnjbb5grfzrm3fa2750h9vjsha0f2kyrljc6895a62"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page
       "https://github.com/RKrahl/pytest-dependency")
     (synopsis "Manage dependencies of tests")
@@ -3072,10 +2990,9 @@ skipped if any of the dependencies did fail or has been skipped.")
          "066bg6wlzgq2pqnjp73dfrcmk8951xw3aqcxa3p1axgqimrixbyk"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-wheel))
     (home-page "https://github.com/gabrielcnr/pytest-datadir")
     (synopsis "Pytest plugin for manipulating test data directories and files")
     (description
@@ -3096,19 +3013,17 @@ directories and files.")
          "05jpsvv8rj8i4x24fphpnar5dl4s6d6bw6ikjk5d8v96rdviz9qm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest-datadir" ,python-pytest-datadir)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest-datadir python-pyyaml))
     (native-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-restructuredtext-lint"
-        ,python-restructuredtext-lint)
-       ("python-tox" ,python-tox)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-matplotlib
+           python-numpy
+           python-pandas
+           python-pillow
+           python-pre-commit
+           python-restructuredtext-lint
+           python-tox
+           python-setuptools-scm
+           python-pytest))
     (home-page "https://github.com/ESSS/pytest-regressions")
     (synopsis "Easy to use fixtures to write regression tests")
     (description
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index d2ad632d2c..94803719ac 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -70,20 +70,20 @@
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("eigen" ,eigen)
-       ("mmtf-cpp" ,mmtf-cpp)
-       ("msgpack" ,msgpack)
-       ("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)
-       ("pybind11" ,pybind11)))
+     (list eigen
+           mmtf-cpp
+           msgpack
+           googletest
+           pkg-config
+           pybind11))
     (inputs
-     `(("glew" ,glew)
-       ("libarchive" ,libarchive)
-       ("libmsym" ,libmsym)
-       ("molequeue" ,molequeue)
-       ("python" ,python)
-       ("spglib" ,spglib)
-       ("qtbase" ,qtbase-5)))
+     (list glew
+           libarchive
+           libmsym
+           molequeue
+           python
+           spglib
+           qtbase-5))
     (arguments
      '(#:configure-flags (list "-DENABLE_TESTING=ON"
                                (string-append "-DSPGLIB_INCLUDE_DIR="
@@ -113,13 +113,9 @@ bioinformatics, materials science, and related areas.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("eigen" ,eigen)
-       ("pkg-config" ,pkg-config)))
+     (list eigen pkg-config))
     (inputs
-     `(("avogadrolibs" ,avogadrolibs)
-       ("hdf5" ,hdf5)
-       ("molequeue" ,molequeue)
-       ("qtbase" ,qtbase-5)))
+     (list avogadrolibs hdf5 molequeue qtbase-5))
     ;; TODO: Enable tests with "-DENABLE_TESTING" configure flag.
     (arguments
      '(#:tests? #f))
@@ -147,7 +143,7 @@ powerful plugin architecture.")
          "1z26lsyf7xwnzwjvimmbla7ckipx6p734w7y0jk2a2fzci8fkdcr"))))
     (build-system python-build-system)
     (inputs
-     `(("python-mmtk" ,python2-mmtk)))
+     (list python2-mmtk))
     (arguments
      `(#:python ,python-2
        ;; No test suite
@@ -195,8 +191,7 @@ only with Python 2 and NumPy < 1.9.")
                     (include-dir (string-append out "/include/inchi"))
                     (lib (string-append out "/lib/inchi"))
                     (inchi-doc (assoc-ref inputs "inchi-doc"))
-                    (unzip (string-append (assoc-ref inputs "unzip")
-                                          "/bin/unzip")))
+                    (unzip (search-input-file inputs "/bin/unzip")))
                (chdir "../../..")
                ;; Install binary.
                (with-directory-excursion "INCHI_EXE/bin/Linux"
@@ -304,7 +299,7 @@ biological structures.")
          "1w1fgxzqrb5yxvpmnc3c9ymnvixy0z1nfafkd9whg9zw8nbgl998"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      '(#:configure-flags '("-DENABLE_TESTING=ON")
        #:phases
@@ -356,12 +351,10 @@ staged, and output files collected using a standard interface.")
          "016h4bqg419p6s7bcx55q5iik91gqmk26hbnfgj2j6zl0j36w51r"))))
     (build-system python-build-system)
     (inputs
-     `(("python-matplotlib" ,(with-numpy-1.8 python2-matplotlib))
-       ("python-scientific" ,python2-scientific)
-       ("netcdf" ,netcdf)
-       ("gv" ,gv)))
+     (list (with-numpy-1.8 python2-matplotlib) python2-scientific netcdf
+           gv))
     (propagated-inputs
-     `(("python-mmtk" ,python2-mmtk)))
+     (list python2-mmtk))
     (arguments
      `(#:python ,python-2
        #:tests? #f  ; No test suite
@@ -417,7 +410,7 @@ NumPy < 1.9.")
                 "1apf2n8nb34z09xarj7k4jgriq283l769sakjmj5aalpbilvai4q"))))
     (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -503,13 +496,13 @@ stored with user-specified precision.")
        ("python-pygments" ,python-pygments)
        ("python-sphinx" ,python-sphinx)))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("hwloc" ,hwloc-2 "lib")
-       ("lmfit" ,lmfit)
-       ("openblas" ,openblas)
-       ("perl" ,perl)
-       ("tinyxml2" ,tinyxml2)
-       ("tng" ,tng)))
+     (list fftwf
+           `(,hwloc-2 "lib")
+           lmfit
+           openblas
+           perl
+           tinyxml2
+           tng))
     (home-page "http://www.gromacs.org/")
     (synopsis "Molecular dynamics software package")
     (description "GROMACS is a versatile package to perform molecular dynamics,
@@ -550,12 +543,9 @@ usual algorithms you expect from a modern molecular dynamics implementation.")
                             (assoc-ref %build-inputs "inchi") "/include/inchi"))
        #:test-target "test"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eigen" ,eigen)
-       ("inchi" ,inchi)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list eigen inchi libxml2 zlib))
     (home-page "http://openbabel.org/wiki/Main_Page")
     (synopsis "Chemistry data manipulation toolbox")
     (description
@@ -650,19 +640,18 @@ symmetries written in C.  Spglib can be used to:
                      (string-append "--prefix=" (assoc-ref outputs "out"))
                      "--root=/"))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("freeglut" ,freeglut)
-       ("glew" ,glew)
-       ("libxml2" ,libxml2)
-       ("mmtf-cpp" ,mmtf-cpp)
-       ("msgpack" ,msgpack)
-       ("python-pyqt" ,python-pyqt)
-       ("glm" ,glm)
-       ("netcdf" ,netcdf)))
+     (list freetype
+           libpng
+           freeglut
+           glew
+           libxml2
+           mmtf-cpp
+           msgpack
+           python-pyqt
+           glm
+           netcdf))
     (native-inputs
-     `(("catch2" ,catch-framework2)
-       ("python-setuptools" ,python-setuptools)))
+     (list catch-framework2 python-setuptools))
     (home-page "https://pymol.org")
     (synopsis "Molecular visualization system")
     (description "PyMOL is a capable molecular viewer and renderer.  It can be
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index 2d31d764b0..aaef513538 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -114,8 +114,10 @@
        ;; for docs
        ("stex" ,stex)
        ("xorg-rgb" ,xorg-rgb)
-       ("texlive" ,(texlive-union (list texlive-latex-oberdiek
-                                        texlive-generic-epsf)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-dvips-l3backend
+                                             texlive-epsf
+                                             texlive-fonts-ec
+                                             texlive-oberdiek)))
        ("ghostscript" ,ghostscript)
        ("netpbm" ,netpbm)))
     (native-search-paths
@@ -167,6 +169,7 @@
                ;; Some makefiles (for tests) don't seem to propagate CC
                ;; properly, so we take it out of their hands:
                (setenv "CC" ,(cc-for-target))
+               (setenv "HOME" "/tmp")
                (apply invoke
                       "./configure"
                       flags)
@@ -281,7 +284,7 @@ and 32-bit PowerPC architectures.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list (string-append "PREFIX=" out)
@@ -316,11 +319,10 @@ and 32-bit PowerPC architectures.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("ghostscript" ,ghostscript)
-         ("texlive" ,(texlive-union (list texlive-charter
-                                          texlive-latex-oberdiek
-                                          texlive-generic-epsf
+         ("texlive" ,(texlive-updmap.cfg (list texlive-oberdiek
+                                          texlive-epsf
                                           texlive-metapost
-                                          texlive-fonts-charter
+                                          texlive-charter
                                           texlive-pdftex
                                           texlive-context
                                           texlive-cm
@@ -334,12 +336,6 @@ and 32-bit PowerPC architectures.")
                       #:tests? #f        ; no tests
                       #:phases
                       (modify-phases %standard-phases
-                        (add-before 'build 'set-HOME
-                          (lambda _
-                            ;; FIXME: texlive-union does not find the built
-                            ;; metafonts, so it tries to generate them in HOME.
-                            (setenv "HOME" "/tmp")
-                            #t))
                         ;; This package has a custom "bootstrap" script that
                         ;; is meant to be run from the Makefile.
                         (delete 'bootstrap)
@@ -382,7 +378,7 @@ programming in Scheme.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("chez-web" ,chez-web)
-         ("texlive" ,(texlive-union (list texlive-pdftex)))))
+         ("texlive" ,(texlive-updmap.cfg (list texlive-pdftex)))))
       (arguments
        `(#:tests? #f              ; no tests
          #:phases
@@ -485,9 +481,9 @@ Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi))) ; for tests
+     (list chez-srfi)) ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -514,11 +510,11 @@ Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-matchable" ,chez-matchable))) ; for tests
+     (list chez-matchable)) ; for tests
     (propagated-inputs
-     `(("chez-srfi" ,chez-srfi))) ; for irregex-utils
+     (list chez-srfi)) ; for irregex-utils
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -546,9 +542,9 @@ syntax, with various aliases for commonly used patterns.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("chez-srfi" ,chez-srfi))) ; for irregex-utils
+     (list chez-srfi)) ; for irregex-utils
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "chez-check"
@@ -586,9 +582,9 @@ strings.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi)))       ; for tests
+     (list chez-srfi))       ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:test-target "test"
@@ -616,12 +612,11 @@ required to port the program @code{Scmutils} to Chez Scheme.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("chez-srfi" ,chez-srfi)))       ; for tests
+     (list chez-srfi))       ; for tests
     (native-inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (propagated-inputs
-     `(("chez-mit" ,chez-mit)
-       ("chez-srfi" ,chez-srfi)))
+     (list chez-mit chez-srfi))
     (arguments
      `(#:make-flags ,(chez-make-flags name version)
        #:tests? #f                      ; no test suite
diff --git a/gnu/packages/chicken.scm b/gnu/packages/chicken.scm
index 866ba8a062..d611c1762e 100644
--- a/gnu/packages/chicken.scm
+++ b/gnu/packages/chicken.scm
@@ -68,7 +68,7 @@
             (variable "CHICKEN_REPOSITORY_PATH")
             ;; TODO extract binary version into a module level definition.
             (files (list "var/lib/chicken/11")))))
-    (propagated-inputs `(("gcc-toolchain" ,gcc-toolchain)))
+    (propagated-inputs (list gcc-toolchain))
     (home-page "https://www.call-cc.org/")
     (synopsis "R5RS Scheme implementation that compiles native code via C")
     (description
@@ -99,7 +99,7 @@ language standard, and includes many enhancements and extensions.")
     (build-system chicken-build-system)
     (arguments '(#:egg-name "srfi-1"))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (home-page "https://wiki.call-cc.org/eggref/5/srfi-1")
     (synopsis "SRFI-1 list library")
     (description
@@ -182,11 +182,9 @@ CHICKEN Scheme, along with
     ;; TODO do we really have to make these propagated?
     ;; I don't know Chicken's module system well enough to tell
     (propagated-inputs
-     `(("chicken-datatype" ,chicken-datatype)
-       ("chicken-srfi-1" ,chicken-srfi-1)
-       ("chicken-srfi-14" ,chicken-srfi-14)))
+     (list chicken-datatype chicken-srfi-1 chicken-srfi-14))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (build-system chicken-build-system)
     (arguments '(#:egg-name "agrep"))
     (synopsis "Approximate string matching library")
@@ -217,8 +215,7 @@ file indexing tool.")
     (build-system chicken-build-system)
     (arguments '(#:egg-name "datatype"))
     (inputs
-     `(("chicken-srfi-1" ,chicken-srfi-1)
-       ("chicken-test" ,chicken-test)))
+     (list chicken-srfi-1 chicken-test))
     (home-page "https://wiki.call-cc.org/eggref/5/datatype")
     (synopsis "Facility for creating and using variant records")
     (description
@@ -245,7 +242,7 @@ Languages} by Friedman, Wand, and Haynes.")
         (base32
          "0gz50n5i561n5sk9prry0lrxz6bfrq9if5bclaq6a0f7lzinhnzb"))))
     (inputs
-     `(("chicken-test" ,chicken-test)))
+     (list chicken-test))
     (build-system chicken-build-system)
     (arguments '(#:egg-name "iset"))
     (synopsis "Integer set library")
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 8c37e7b7b1..420c53cf36 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -460,31 +460,6 @@
         `(cons "--enable-custom-modes"
                ,flags))))))
 
-;; 'make-ld-wrapper' can only work with an 'ld' executable, so we need
-;; this trick to make it wrap 'lld'.
-(define (make-lld-wrapper lld)
-  (define lld-as-ld
-    (computed-file "lld-ld"
-                   #~(begin
-                       (mkdir #$output)
-                       (mkdir (string-append #$output "/bin"))
-                       (symlink #$(file-append lld "/bin/lld")
-                                (string-append #$output "/bin/ld")))))
-
-  ;; Create a wrapper for LLD that inserts appropriate -rpath entries.
-  (define lld-wrapper
-    (make-ld-wrapper "lld-wrapper"
-                     #:binutils lld-as-ld))
-
-  ;; Clang looks for an 'ld.lld' executable, so we need to symlink it back.
-  (computed-file "lld-wrapped"
-                 #~(begin
-                     (mkdir #$output)
-                     (mkdir (string-append #$output "/bin"))
-                     (symlink #$(file-append lld-wrapper "/bin/ld")
-                              (string-append #$output "/bin/lld"))
-                     (symlink "lld" (string-append #$output "/bin/ld.lld")))))
-
 (define-public ungoogled-chromium
   (package
     (name "ungoogled-chromium")
@@ -848,7 +823,7 @@
        ("clang" ,clang-12)
        ("gn" ,gn)
        ("gperf" ,gperf)
-       ("ld-wrapper" ,(make-lld-wrapper lld))
+       ("ld-wrapper" ,lld-as-ld-wrapper)
        ("ninja" ,ninja)
        ("node" ,node-lts)
        ("pkg-config" ,pkg-config)
@@ -876,7 +851,7 @@
        ("glib" ,glib)
        ("gtk+" ,gtk+)
        ("harfbuzz" ,harfbuzz-3.0)
-       ("icu4c" ,icu4c-69)
+       ("icu4c" ,icu4c)
        ("lcms" ,lcms)
        ("libevent" ,libevent)
        ("libffi" ,libffi)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 7f41512555..2fa7260b7f 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -168,28 +168,24 @@
                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))
                  #t))))))
       (inputs
-       `(("guile" ,guile-3.0/libgc-7)
-         ("guile-avahi" ,guile-avahi)
-         ("guile-fibers" ,guile-fibers)
-         ("guile-gcrypt" ,guile-gcrypt)
-         ("guile-json" ,guile-json-4)
-         ("guile-simple-zmq" ,guile-simple-zmq)
-         ("guile-squee" ,guile-squee-dev)
-         ("guile-git" ,guile-git)
-         ("guile-zlib" ,guile-zlib)
-         ("guile-mastodon" ,guile-mastodon)
-         ("gnutls" ,gnutls)
-         ("mailutils" ,mailutils)
-         ;; FIXME: this is propagated by "guile-git", but it needs to be among
-         ;; the inputs to add it to GUILE_LOAD_PATH.
-         ("guile-bytestructures" ,guile-bytestructures)
-         ("guix" ,guix)))
+       (list guile-3.0-latest
+             guile-avahi
+             guile-fibers
+             guile-gcrypt
+             guile-json-4
+             guile-simple-zmq
+             guile-squee-dev
+             guile-git
+             guile-zlib
+             guile-mastodon
+             gnutls
+             mailutils
+             ;; FIXME: this is propagated by "guile-git", but it needs to be among
+             ;; the inputs to add it to GUILE_LOAD_PATH.
+             guile-bytestructures
+             guix))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)
-         ("ephemeralpg" ,ephemeralpg)))
+       (list autoconf automake pkg-config texinfo ephemeralpg))
       (native-search-paths
        ;; For HTTPS access, Cuirass itself honors these variables, with the
        ;; same semantics as Git and OpenSSL (respectively).
@@ -275,11 +271,7 @@ intended as a replacement for Hydra.")
 
              #t)))))
     (inputs
-     `(("capnproto" ,capnproto)
-       ("rapidjson" ,rapidjson)
-       ("sqlite" ,sqlite)
-       ("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list capnproto rapidjson sqlite boost zlib))
     (native-inputs
      `(("googletest" ,googletest)
        ("uglifyjs" ,node-uglify-js)
diff --git a/gnu/packages/cinnamon.scm b/gnu/packages/cinnamon.scm
index e1c9d7b614..fe33e797e4 100644
--- a/gnu/packages/cinnamon.scm
+++ b/gnu/packages/cinnamon.scm
@@ -53,24 +53,24 @@
     (build-system gnu-build-system)
     ;; TODO: package 'libgsystem'.
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gnome-common" ,gnome-common)
-       ("libxkbfile" ,libxkbfile)
-       ("libxrandr" ,libxrandr)
-       ("python-2" ,python-2)
-       ("pulseaudio" ,pulseaudio)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list accountsservice
+           gtk+
+           glib
+           gobject-introspection
+           gnome-common
+           libxkbfile
+           libxrandr
+           python-2
+           pulseaudio
+           xkeyboard-config))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin") ; glib-gettextize
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           gettext-minimal
+           `(,glib "bin") ; glib-gettextize
+           intltool
+           libtool
+           pkg-config))
     (home-page "https://github.com/linuxmint/cinnamon-desktop/")
     (synopsis "Library for the Cinnamon Desktop")
     (description
diff --git a/gnu/packages/clojure.scm b/gnu/packages/clojure.scm
index 5b238ab996..f48101079e 100644
--- a/gnu/packages/clojure.scm
+++ b/gnu/packages/clojure.scm
@@ -207,7 +207,7 @@ that can be implemented for any data type.")
        #:test-dirs '("src/test/clojure/")
        #:doc-dirs '()))
     (native-inputs
-     `(("clojure-tools-macro" ,clojure-tools-macro)))
+     (list clojure-tools-macro))
     (synopsis
      "Monad Macros and Definitions")
     (description
diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index 3043760830..d27544e992 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -165,13 +165,9 @@ connection.  This package contains the userland utilities.")
                              (string-append infodir "/keepalived-figures"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list pkg-config python-sphinx texinfo))
     (inputs
-     `(("openssl" ,openssl)
-       ("libnfnetlink" ,libnfnetlink)
-       ("libnl" ,libnl)))
+     (list openssl libnfnetlink libnl))
     (home-page "https://www.keepalived.org/")
     (synopsis "Load balancing and high-availability frameworks")
     (description
@@ -204,8 +200,7 @@ independently or together to provide resilient infrastructures.")
                          ((".*test_uv_append.c.*") ""))
                        #t)))))
     (inputs
-     `(("libuv" ,libuv)
-       ("lz4" ,lz4)))
+     (list libuv lz4))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -245,15 +240,11 @@ snapshots).")
                ;; race condition when tearing down the test server.
                ((".*test_client.c.*") "")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libraft" ,libraft)
-       ("libuv" ,libuv)))
+     (list libraft libuv))
     (propagated-inputs
-     `(("sqlite" ,sqlite)))  ; dqlite.h includes sqlite3.h
+     (list sqlite))  ; dqlite.h includes sqlite3.h
     (build-system gnu-build-system)
     (synopsis "Distributed SQLite")
     (description "dqlite is a C library that implements an embeddable and replicated
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index df8885b4dd..36f8dcf8ff 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -5,10 +5,10 @@
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -83,7 +83,7 @@
       (arguments
        `(#:tests? #f))                  ; No target
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)))
+       (list extra-cmake-modules))
       (synopsis "Shared CMake functions and macros")
       (description "CMake-Shared are shared functions and macros for projects
 using the CMake build system.")
@@ -92,7 +92,7 @@ using the CMake build system.")
 
 ;;; Build phases shared between 'cmake-bootstrap' and the later variants
 ;;; that use cmake-build-system.
-(define %common-build-phases
+(define (%common-build-phases)
   `((add-after 'unpack 'split-package
       ;; Remove files that have been packaged in other package recipes.
       (lambda _
@@ -100,6 +100,17 @@ using the CMake build system.")
         (substitute* "Auxiliary/CMakeLists.txt"
           ((".*cmake-mode.el.*") ""))
         #t))
+    ,@(if (target-x86-32?)
+          '((add-after 'unpack 'skip-cpack-txz-test
+              (lambda _
+                ;; In 'RunCMake.CPack_TXZ', the 'TXZ/THREADED_ALL' test
+                ;; would occasionally fail on i686 with "Internal error
+                ;; initializing compression library: Cannot allocate
+                ;; memory": <https://issues.guix.gnu.org/50617>.  Skip it.
+                (substitute* "Tests/RunCMake/CPack/RunCMakeTest.cmake"
+                  (("THREADED_ALL \"TXZ;DEB\"")
+                   "THREADED_ALL \"DEB\"")))))
+          '())
     (add-before 'configure 'patch-bin-sh
       (lambda _
         ;; Replace "/bin/sh" by the right path in... a lot of
@@ -110,7 +121,6 @@ using the CMake build system.")
               "Source/cmGlobalXCodeGenerator.cxx"
               "Source/cmLocalUnixMakefileGenerator3.cxx"
               "Source/cmExecProgramCommand.cxx"
-              "Utilities/Release/release_cmake.cmake"
               "Tests/CMakeLists.txt"
               "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
           (("/bin/sh") (which "sh")))
@@ -120,23 +130,27 @@ using the CMake build system.")
   '(;; This test copies libgcc_s.so.1 from GCC and tries to modify its RPATH,
     ;; but does not cope with the file being read-only.
     "BundleUtilities"
-    ;; This test requires network access.
-    "CTestTestUpload"
+    ;; These tests require network access.
+    "CTestTestUpload" "CMake.FileDownload"
     ;; This test requires 'ldconfig' which is not available in Guix.
-    "RunCMake.install"))
+    "RunCMake.install"
+    ;; This test fails for unknown reason.
+    "RunCMake.file-GET_RUNTIME_DEPENDENCIES"))
 
 (define %preserved-third-party-files
   '(;; 'Source/cm_getdate.c' includes archive_getdate.c wholesale, so it must
     ;; be available along with the required headers.
     "Utilities/cmlibarchive/libarchive/archive_getdate.c"
-    "Utilities/cmlibarchive/libarchive/archive_getdate.h"))
+    "Utilities/cmlibarchive/libarchive/archive_getdate.h"
+    ;; CMake header wrappers.
+    "Utilities/cm3p"))
 
 ;;; The "bootstrap" CMake.  It is used to build 'cmake-minimal' below, as well
 ;;; as any dependencies that need cmake-build-system.
 (define-public cmake-bootstrap
   (package
     (name "cmake-bootstrap")
-    (version "3.16.5")
+    (version "3.21.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://cmake.org/files/v"
@@ -144,49 +158,7 @@ using the CMake build system.")
                                   "/cmake-" version ".tar.gz"))
               (sha256
                (base32
-                "1z4bb8z6b4dvq5hrvajrf1hyybqay3xybyimf71w1jgcp180nxjz"))
-              (modules '((guix build utils)
-                         (ice-9 ftw)))
-              (snippet
-               `(begin
-                  ;; CMake bundles its dependencies in the "Utilities" directory.
-                  ;; Delete those to ensure the system libraries are used.
-                  (define preserved-files
-                    '(,@%preserved-third-party-files
-                      ;; Use the bundled JsonCpp during bootstrap to work around
-                      ;; a circular dependency.  TODO: JsonCpp can be built with
-                      ;; Meson instead of CMake, but meson-build-system currently
-                      ;; does not support cross-compilation.
-                      "Utilities/cmjsoncpp"
-                      ;; LibUV is required to bootstrap the initial build system.
-                      "Utilities/cmlibuv"))
-
-                  (file-system-fold (lambda (dir stat result)         ;enter?
-                                      (or (string=? "Utilities" dir)  ;init
-                                          ;; The bundled dependencies are
-                                          ;; distinguished by having a "cm"
-                                          ;; prefix to their upstream names.
-                                          (and (string-prefix? "Utilities/cm" dir)
-                                               (not (member dir preserved-files)))))
-                                    (lambda (file stat result)        ;leaf
-                                      (unless (or (member file preserved-files)
-                                                  ;; Preserve top-level files.
-                                                  (string=? "Utilities"
-                                                            (dirname file)))
-                                        (delete-file file)))
-                                    (const #t)                        ;down
-                                    (lambda (dir stat result)         ;up
-                                      (when (equal? (scandir dir) '("." ".."))
-                                        (rmdir dir)))
-                                    (const #t)                        ;skip
-                                    (lambda (file stat errno result)
-                                      (format (current-error-port)
-                                              "warning: failed to delete ~a: ~a~%"
-                                              file (strerror errno)))
-                                    #t
-                                    "Utilities"
-                                    lstat)
-                  #t))
+                "0kvrhgbrvm0lv7jshzd4nsvp3d5q1jkgal2d5kj4w4v58bghckfi"))
               (patches (search-patches "cmake-curl-certificates.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -227,7 +199,7 @@ using the CMake build system.")
            " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$")))
        #:phases
        (modify-phases %standard-phases
-         ,@%common-build-phases
+         ,@(%common-build-phases)
          (add-before 'configure 'set-paths
            (lambda _
              ;; Help cmake's bootstrap process to find system libraries
@@ -242,14 +214,13 @@ using the CMake build system.")
              (apply invoke "./configure" configure-flags))))))
     (inputs
      `(("bzip2" ,bzip2)
-       ("curl" ,curl-minimal)
+       ("curl" ,curl)
        ("expat" ,expat)
        ("file" ,file)
        ("libarchive" ,libarchive)
        ,@(if (hurd-target?)
              '()
              `(("libuv" ,libuv)))       ;not supported on the Hurd
-       ("ncurses" ,ncurses)             ;required for ccmake
        ("rhash" ,rhash)
        ("zlib" ,zlib)))
     (native-search-paths
@@ -287,17 +258,41 @@ and workspaces that can be used in the compiler environment of your choice.")
     (name "cmake-minimal")
     (source (origin
               (inherit (package-source cmake-bootstrap))
+              ;; Purge CMakes bundled dependencies as they are no longer needed.
+              (modules '((ice-9 ftw)))
               (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files ',%preserved-third-party-files))
-                          exp))))))
+               `(begin
+                  (define preserved-files ',%preserved-third-party-files)
+
+                  (file-system-fold (lambda (dir stat result)         ;enter?
+                                      (or (string=? "Utilities" dir)  ;init
+                                          ;; The bundled dependencies are
+                                          ;; distinguished by having a "cm"
+                                          ;; prefix to their upstream names.
+                                          (and (string-prefix? "Utilities/cm" dir)
+                                               (not (member dir preserved-files)))))
+                                    (lambda (file stat result)        ;leaf
+                                      (unless (or (member file preserved-files)
+                                                  ;; Preserve top-level files.
+                                                  (string=? "Utilities"
+                                                            (dirname file)))
+                                        (delete-file file)))
+                                    (const #t)                        ;down
+                                    (lambda (dir stat result)         ;up
+                                      (when (equal? (scandir dir) '("." ".."))
+                                        (rmdir dir)))
+                                    (const #t)                        ;skip
+                                    (lambda (file stat errno result)
+                                      (format (current-error-port)
+                                              "warning: failed to delete ~a: ~a~%"
+                                              file (strerror errno)))
+                                    #t
+                                    "Utilities"
+                                    lstat)
+                  #t))))
     (inputs
-     `(("curl" ,curl)
-       ("jsoncpp" ,jsoncpp)
-       ,@(alist-delete "curl" (package-inputs cmake-bootstrap))))
+     (modify-inputs (package-inputs cmake-bootstrap)
+       (prepend jsoncpp)))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -311,7 +306,16 @@ and workspaces that can be used in the compiler environment of your choice.")
        #:build-type "Release"
        #:phases
        (modify-phases %standard-phases
-         ,@%common-build-phases
+         ,@(%common-build-phases)
+         (add-after 'install 'delete-help-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively
+               (string-append (assoc-ref outputs "out")
+                              "/share/cmake-"
+                              ,(version-major+minor
+                                 (package-version cmake-bootstrap))
+                              "/Help"))
+             #t))
          (replace 'check
            (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
              (let ((skipped-tests (list ,@%common-disabled-tests
@@ -335,39 +339,6 @@ and workspaces that can be used in the compiler environment of your choice.")
   (package
     (inherit cmake-minimal)
     (name "cmake")
-    (version "3.21.1")
-    ;; TODO: Move the following source field to the cmake-bootstrap package in
-    ;; the next rebuild cycle.
-    (source (origin
-              (inherit (package-source cmake-bootstrap))
-              (uri (string-append "https://cmake.org/files/v"
-                                  (version-major+minor version)
-                                  "/cmake-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1m7y9j5lafkrfswsg2vkpx2fz6p6fqpp2pcp2dcz5pylf58r3hzs"))
-              (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files
-                               '(,@%preserved-third-party-files
-                                 ;; TODO: Move this file to the
-                                 ;; %preserved-third-party-files variable in
-                                 ;; the next rebuild cycle.
-                                 "Utilities/cm3p" ;CMake header wrappers
-                                 ;; Use the bundled JsonCpp during bootstrap
-                                 ;; to work around a circular dependency.
-                                 ;; TODO: JsonCpp can be built with Meson
-                                 ;; instead of CMake, but meson-build-system
-                                 ;; currently does not support
-                                 ;; cross-compilation.
-                                 "Utilities/cmjsoncpp"
-                                 ;; LibUV is required to bootstrap the initial
-                                 ;; build system.
-                                 "Utilities/cmlibuv")))
-                          exp))))))
     (arguments
      (substitute-keyword-arguments (package-arguments cmake-minimal)
        ;; Use cmake-minimal this time.
@@ -389,44 +360,7 @@ and workspaces that can be used in the compiler environment of your choice.")
                  ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-build-phases variable instead: the
-           ;; Utilities/Release/release_cmake.cmake file no longer exists in
-           ;; version 3.19.0.
-           (replace 'patch-bin-sh
-             (lambda _
-               ;; Replace "/bin/sh" by the right path in... a lot of
-               ;; files.
-               (substitute*
-                   '("Modules/CompilerId/Xcode-3.pbxproj.in"
-                     "Modules/Internal/CPack/CPack.RuntimeScript.in"
-                     "Source/cmGlobalXCodeGenerator.cxx"
-                     "Source/cmLocalUnixMakefileGenerator3.cxx"
-                     "Source/cmExecProgramCommand.cxx"
-                     "Tests/CMakeLists.txt"
-                     "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
-                 (("/bin/sh") (which "sh")))
-               #t))
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-disabled-tests variable instead.
-           (replace 'check
-             (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
-               (let ((skipped-tests (list ,@%common-disabled-tests
-                                          ;; This test fails for unknown reason.
-                                          "RunCMake.file-GET_RUNTIME_DEPENDENCIES"
-                                          ;; This test fails for unknown reason.
-                                          "ExportImport"
-                                          ;; This test requires the bundled libuv.
-                                          "BootstrapTest")))
-                 (if tests?
-                     (begin
-                       (invoke "ctest" "-j" (if parallel-tests?
-                                                (number->string (parallel-job-count))
-                                                "1")
-                               "--exclude-regex"
-                               (string-append "^(" (string-join skipped-tests "|") ")$")))
-                     (format #t "test suite not run~%"))
-                 #t)))
+           (delete 'delete-help-documentation)
            (add-after 'install 'move-html-doc
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out"))
@@ -437,8 +371,11 @@ and workspaces that can be used in the compiler environment of your choice.")
                                           "/html")))
                  (copy-recursively (string-append out html)
                                    (string-append doc html))
-                 (delete-file-recursively (string-append out html))
-                 #t)))))))
+                 (delete-file-recursively (string-append out html)))))))))
+    (inputs
+     (modify-inputs (package-inputs cmake-minimal)
+       (prepend ncurses ;required for ccmake
+                )))
     ;; Extra inputs required to build the documentation.
     (native-inputs
      `(,@(package-native-inputs cmake-minimal)
diff --git a/gnu/packages/cobol.scm b/gnu/packages/cobol.scm
index 60af9f6a53..9386f3fca2 100644
--- a/gnu/packages/cobol.scm
+++ b/gnu/packages/cobol.scm
@@ -68,11 +68,7 @@
                      (base32
                       "1yb1plmv4firfnbb119r2vh1hay221w1ya34nyz0qwsxppfr56hy"))))))
     (inputs
-     `(("bdb" ,bdb)
-       ("gmp" ,gmp)
-       ("json-c" ,json-c)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)))
+     (list bdb gmp json-c libxml2 ncurses))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/gnucobol/")
     (synopsis "A modern COBOL compiler")
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 9bc9771dc1..d3ff6ae7c8 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -116,8 +116,7 @@ a major mode for Emacs for examining the flowcharts that it produces.")
                 "0lr0l9kj2w3jilz9h9y4np9pf9i9ccpy6331lanki2fnz4z8ldvd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("autogen" ,autogen)))
+     (list texinfo autogen))
     (home-page "https://www.gnu.org/software/complexity/")
     (synopsis "Analyze complexity of C functions")
     (description
@@ -182,7 +181,7 @@ highlighting your own code that seemed comprehensible when you wrote it.")
              (wrap-program
                (string-append (assoc-ref outputs "out")
                               "/share/gtags/script/pygments_parser.py")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))))
         (add-after 'install 'post-install
           (lambda* (#:key outputs #:allow-other-keys)
             ;; Install the plugin files in the right place.
@@ -256,7 +255,7 @@ around in a large, deeply nested project.")
 
         #:make-flags (list (string-append "PREFIX="
                                           (assoc-ref %outputs "out")))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (home-page "https://dwheeler.com/sloccount/")
     (synopsis "Count physical source lines of code (SLOC)")
     (description
@@ -282,12 +281,12 @@ COCOMO model or user-provided parameters.")
         (base32 "0ic9q6qqw5f1wafp9lpmhr0miasbdb9zr59c0jlymnzffdmnliyc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("coreutils" ,coreutils)
-       ("perl" ,perl)
-       ("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
-       ("perl-regexp-common" ,perl-regexp-common)))
+     (list coreutils
+           perl
+           perl-algorithm-diff
+           perl-digest-md5
+           perl-parallel-forkmanager
+           perl-regexp-common))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure)   ; nothing to configure
@@ -335,12 +334,14 @@ cloc can handle a greater variety of programming languages.")
                (base32
                 "0w1icjqd8hd45rn1y6nbfznk1a6ip54whwbfbhxp7ws2hn3ilqnr"))))
     (build-system gnu-build-system)
+    (arguments
+     ;; Required since GCC 10, see:
+     ;; https://gcc.gnu.org/gcc-10/porting_to.html.
+     `(#:configure-flags (list "CFLAGS=-fcommon")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pcre" ,pcre)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list pcre xz zlib))
     (home-page "https://geoff.greer.fm/ag/")
     (synopsis "Fast code searching tool")
     (description
@@ -422,16 +423,9 @@ features that are not supported by the standard @code{stdio} implementation.")
                       (substitute* "Tmain/utils.sh"
                         (("/bin/echo") (which "echo"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("packcc" ,packcc)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake packcc perl pkg-config))
     (inputs
-     `(("jansson" ,jansson)
-       ("libseccomp" ,libseccomp)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)))
+     (list jansson libseccomp libxml2 libyaml))
     (home-page "https://ctags.io/")
     (synopsis "Generate tag files for source code")
     (description
@@ -487,9 +481,8 @@ expressions, and its ability to generate emacs-style TAGS files.")
             #t)))))
     (home-page "https://github.com/cameronwhite/withershins")
     (inputs
-     `(("libiberty" ,libiberty)
-       ("binutils" ,binutils) ;for libbfd
-       ("zlib" ,zlib)))
+     (list libiberty binutils ;for libbfd
+           zlib))
     (synopsis "C++11 library for generating stack traces")
     (description
      "Withershins is a simple cross-platform C++11 library for generating
@@ -534,9 +527,7 @@ stack traces.")
                (wrap-program (string-append out "/bin/geninfo")
                  `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
              #t)))))
-    (inputs `(("perl" ,perl)
-              ("perl-io-compress" ,perl-io-compress)
-              ("perl-json" ,perl-json)))
+    (inputs (list perl perl-io-compress perl-json))
     (home-page "http://ltp.sourceforge.net/coverage/lcov.php")
     (synopsis "Code coverage tool that enhances GNU gcov")
     (description "LCOV is an extension of @command{gcov}, a tool part of the
@@ -594,13 +585,9 @@ results and determine build stability.")
                (("/bin/(bash|sh)" shell)
                 (string-append (assoc-ref inputs "bash") shell)))))))))
     (inputs
-     `(("curl" ,curl)
-       ("elfutils" ,elfutils)
-       ("libelf" ,libelf)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl elfutils libelf openssl zlib))
     (native-inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://github.com/SimonKagstrom/kcov")
     (synopsis "Code coverage tester for compiled languages, Python and Bash")
     (description "Kcov is a FreeBSD/Linux/OSX code coverage tester for compiled
@@ -645,14 +632,14 @@ possible to collect coverage information without special compiler switches.")
          "-DBUILD_TESTING=FALSE")
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bash-completion" ,bash-completion)
-       ("clang" ,clang)
-       ("llvm" ,llvm)
-       ("lua" ,lua)
-       ("rct" ,rct)
-       ("selene" ,selene)))
+     (list bash-completion
+           clang
+           llvm
+           lua
+           rct
+           selene))
     (home-page "https://github.com/Andersbakken/rtags")
     (synopsis "Indexer for the C language family with Emacs integration")
     (description
@@ -678,8 +665,7 @@ importantly we give you proper follow-symbol and find-references support.")
         (base32 "1f9v5s0viq4yc9iv6701h3pv7j21zz1ckl37lpp9hsnliiizv03p"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
+     (list bash perl))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -700,7 +686,7 @@ importantly we give you proper follow-symbol and find-references support.")
            (substitute* "colormake"
              (("colormake\\.pl") (string-append bin "/colormake.pl"))
              (("/bin/bash")
-              (string-append (assoc-ref %build-inputs "bash") "/bin/sh")))
+              (search-input-file %build-inputs "/bin/sh")))
            (install-file "colormake.1" (string-append doc "/man/man1"))
            (install-files '("AUTHORS" "BUGS" "ChangeLog" "README") doc)
            (install-files '("colormake" "colormake-short" "clmake"
@@ -734,7 +720,7 @@ produce colored output.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("graphviz" ,graphviz)))
+     (list graphviz))
     (home-page "https://github.com/lindenb/makefile2graph")
     (synopsis "Creates a graph of dependencies from GNU Make")
     (description
@@ -881,8 +867,7 @@ the C, C++, C++/CLI, Objective‑C, C#, and Java programming languages.")
                         '("config.sub" "config.guess")))
             #t)))))
    (native-inputs
-    `(("texinfo" ,texinfo)
-      ("automake" ,automake))) ; For up to date 'config.guess' and 'config.sub'.
+    (list texinfo automake)) ; For up to date 'config.guess' and 'config.sub'.
    (synopsis "Code reformatter")
    (description
     "Indent is a program that makes source code easier to read by
@@ -951,7 +936,7 @@ source and header amalgamation in projects.")
        (sha256
         (base32 "0ngiv4aj3rr35k3q3wjx0y19gh7i1ydqa0cqip6sjwd8fph5ll65"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (arguments
      `(#:configure-flags
        ;; Specify the correct ncurses directory to prevent incorrect fallback
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e7bd6cf002..e570a95b04 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1,15 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,12 +51,13 @@
   #:use-module (gnu packages shells)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix memoization)
   #:use-module (guix utils)
@@ -116,8 +119,7 @@
                       (guile-dir (assoc-ref inputs "guile"))
                       (guile (string-append guile-dir "/bin/guile")))
                  (invoke guile "--no-auto-compile" source)
-                 (chdir "bootar")
-                 #t)))
+                 (chdir "bootar"))))
            (replace 'configure (bootstrap-configure ,version "." "scripts"))
            (replace 'build (bootstrap-build "."))
            (replace 'install (bootstrap-install "." "scripts"))))))
@@ -163,8 +165,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (symlink (string-append out "/bin/gash")
                           (string-append out "/bin/sh"))
                  (symlink (string-append out "/bin/gash")
-                          (string-append out "/bin/bash"))
-                 #t)))))))
+                          (string-append out "/bin/bash")))))))))
     (inputs `(("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
 
@@ -190,8 +191,7 @@ pure Scheme to Tar and decompression in one easy step.")
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((gash (assoc-ref inputs "gash")))
                  (add-to-load-path (string-append gash "/share/guile/site/"
-                                                  (effective-version))))
-               #t))
+                                                  (effective-version))))))
            (add-before 'configure 'pre-configure
              (lambda _
                (format #t "Creating gash/commands/testb.scm~%")
@@ -217,8 +217,7 @@ pure Scheme to Tar and decompression in one easy step.")
                (copy-file "scripts/template.in" "scripts/[.in")
                (substitute* "scripts/[.in"
                  (("@UTILITY@") "testb"))
-               (delete-file "scripts/template.in")
-               #t))
+               (delete-file "scripts/template.in")))
            (replace 'configure
              (bootstrap-configure ,(package-version gash-utils)
                                   "gash" "scripts"))
@@ -247,8 +246,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (copy-file (string-append gash-godir "/gash/compat.go")
                             (string-append godir "/gash/compat.go"))
                  (copy-recursively (string-append gash-godir "/gash/compat")
-                                   (string-append godir "/gash/compat"))
-                 #t)))))))
+                                   (string-append godir "/gash/compat")))))))))
     (inputs `(("gash" ,gash-boot)
               ("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
@@ -438,8 +436,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                                         (string-suffix? ".s" name))))))
                (for-each (lambda (x) (install-file x cache))
                          (append (objects-in-dir ".")
-                                 (objects-in-dir "mescc-lib"))))
-             #t)))))
+                                 (objects-in-dir "mescc-lib")))))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -573,8 +570,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "util.c"
-               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))
-             #t))
+               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))))
          (replace 'build
            (lambda _
              (let ((files '("bits" "crypt" "deflate" "getopt" "gzip"
@@ -636,13 +632,11 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (substitute* "build.sh.in"
                (("@LIBOBJS@") "getloadavg.o")
-               (("@REMOTE@") "stub"))
-             #t))
+               (("@REMOTE@") "stub"))))
          (add-after 'configure 'configure-fixup
            (lambda _
              (substitute* "make.h"
-               (("^extern long int lseek.*" all) (string-append "// " all)))
-             #t))
+               (("^extern long int lseek.*" all) (string-append "// " all)))))
          (replace 'build
            (lambda _
              (invoke "sh" "./build.sh")))
@@ -694,16 +688,14 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (("uTimBuf[.]" all)
                 (string-append "// " all))
                (("retVal = utime [(] dstName, &uTimBuf [)];" all)
-                (string-append "retVal = 0; // " all)))
-             #t))
+                (string-append "retVal = 0; // " all)))))
          (replace 'configure
            (lambda _
              (with-output-to-file "utime.h"
                (lambda _ (display "
 #define fchown(filedes, owner, group) 0
 #define fchmod(filedes, mode) 0
-")))
-             #t))
+")))))
          (replace 'check
            (lambda _
              (invoke "./bzip2" "--help")))
@@ -759,8 +751,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "CC" "tcc")
                (setenv "LD" "tcc")
                (setenv "AR" "tcc -ar")
-               (setenv "CFLAGS" "-D _POSIX_VERSION=1")
-               #t)))
+               (setenv "CFLAGS" "-D _POSIX_VERSION=1"))))
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "Makefile.in"
@@ -773,8 +764,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "lib/sh/snprintf.c"
                (("^#if (defined [(]HAVE_LOCALE_H[)])" all define) (string-append "#if 0 //" define)))
              (substitute* "configure"
-               ((" egrep") " grep"))
-             #t))
+               ((" egrep") " grep"))))
          (replace 'configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let ((configure-flags (filter (lambda (x)
@@ -789,20 +779,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "config.h"
                (("#define GETCWD_BROKEN 1") "#undef GETCWD_BROKEN"))
              (let ((config.h (open-file "config.h" "a")))
-               (display (string-append
-                         ;; XXX TODO: remove nested ,(string-append ...) and
-                         ;; store file name on next rebuild cycle
-                         ,(string-append "
+               (display "
 // tcc: error: undefined symbol 'enable_hostname_completion'
 #define enable_hostname_completion(on_or_off) 0
 
-// /gnu/store/" "cq0cmv35s9dhilx14zaghlc08gpc0hwr-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
+// /gnu/store/…-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
 #define HAVE_POSIX_SIGNALS 1
 #define endpwent(x) 0
-"))
+"
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -812,8 +798,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define tcc-boot
   ;; The final tcc.
@@ -821,16 +806,11 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
     (inherit tcc-boot0)
     (name "tcc-boot")
     (version "0.9.27")
-    (source (origin
-              (inherit (package-source tcc))
-              ;; `patches' needs XZ
-              ;; (patches (search-patches "tcc-boot-0.9.27.patch"))
-              ))
+    (source (package-source tcc))
     (build-system gnu-build-system)
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(;;("boot-patch" ,(search-patch "tcc-boot-0.9.27.patch"))
-                     ("bzip2" ,bzip2-mesboot)
+    (native-inputs `(("bzip2" ,bzip2-mesboot)
                      ,@(%boot-tcc0-inputs)))
     (arguments
      `(#:implicit-inputs? #f
@@ -846,20 +826,13 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (copy-file source "tarball.tar.bz2")
              (invoke "bzip2" "-d" "tarball.tar.bz2")
              (invoke "tar" "xvf" "tarball.tar")
-             (chdir (string-append "tcc-" ,version))
-             #t))
-         ;; no patch yet
-         ;; (add-after 'unpack 'apply-boot-patch
-         ;;   (lambda* (#:key inputs #:allow-other-keys)
-         ;;     (let ((patch-file (assoc-ref inputs "boot-patch")))
-         ;;       (invoke "patch" "-p1" "-i" patch-file))))
+             (chdir (string-append "tcc-" ,version))))
          (add-after 'unpack 'scripted-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "libtcc.c"
                (("s->alacarte_link = 1;" all)
                 (string-append all "
-    s->static_link = 1;")))
-             #t))
+    s->static_link = 1;")))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -919,57 +892,8 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                 (invoke "tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o")
                 (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a"))
                 (delete-file (string-append out "/lib/tcc/libtcc1.a"))
-                (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))
-                #t)))))))))
-
-(define diffutils-mesboot
-  ;; The initial diffutils.
-  (package
-    (inherit diffutils)
-    (name "diffutils-mesboot")
-    (version "2.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/diffutils/diffutils-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1mirn5i825bn5w7rh6mgn0r8aj9xqanav95dwcl1b8sn82f4iwnm"))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (inputs '())
-    (propagated-inputs '())
-    (native-inputs (%boot-tcc0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:parallel-build? #f
-       #:tests? #f            ; check is naive, also checks non-built PROGRAMS
-       #:strip-binaries? #f   ; no strip yet
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'remove-diff3-sdiff
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile.in"
-               (("PROGRAMS = .*" all) "PROGRAMS = cmp diff"))))
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash")))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "CC" "tcc")
-               (setenv "LD" "tcc")
-               (format (current-error-port)
-                       "running ./configure ~a\n" (string-join configure-flags))
-               (apply invoke (cons "./configure" configure-flags)))))
-         (replace 'install
-           (lambda _
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bin (string-append out "/bin")))
-               (mkdir-p bin)
-               (install-file "cmp" bin)
-               (install-file "diff" bin)
-               #t))))))))
+                (copy-file "libtcc1.a"
+                           (string-append out "/lib/tcc/libtcc1.a")))))))))))
 
 (define patch-mesboot
   ;; The initial patch.
@@ -1002,8 +926,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              ;; avoid another segfault
              (substitute* "pch.c"
                (("while [(]p_end >= 0[)]" all)
-                "p_end = -1;\nwhile (0)"))
-             #t))
+                "p_end = -1;\nwhile (0)"))))
          ;; FIXME: no compressing gzip yet
          (delete 'compress-documentation))))))
 
@@ -1039,8 +962,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bash (assoc-ref %build-inputs "bash"))
                     (shell (string-append bash "/bin/bash")))
                (substitute* "configure"
-                 (("/bin/sh") shell))
-               #t)))
+                 (("/bin/sh") shell)))))
          (replace 'check
            (lambda _
              (invoke "./sed" "--version")))
@@ -1048,16 +970,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "sed" bin)
-               #t))))))))
+               (install-file "sed" bin)))))))))
 
 (define (%boot-tcc-inputs)
   `(("bash" ,bash-mesboot0)
     ("bzip2" ,bzip2-mesboot)
-    ("diffutils" ,diffutils-mesboot)
     ("gzip" ,gzip-mesboot)
     ("patch" ,patch-mesboot)
     ("sed" ,sed-mesboot0)
+    ;; Place lower than sed so we don't override it.
+    ("gash-utils" ,gash-utils-boot)
     ("tcc" ,tcc-boot)
     ,@(alist-delete "tcc" (%boot-tcc0-inputs))))
 
@@ -1105,14 +1027,12 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "SHELL" shell)
                (setenv "AR" "tcc -ar")
                (setenv "RANLIB" "true")
-               (setenv "CC" "tcc -D __GLIBC_MINOR__=6")
-               #t)))
+               (setenv "CC" "tcc -D __GLIBC_MINOR__=6"))))
          (add-after 'unpack 'scripted-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "bfd/configure"
                (("^sed -e '/SRC-POTFILES.*" all)
-                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))
-             #t))
+                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (format (current-error-port)
@@ -1145,96 +1065,95 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-2.95.3.patch"))
-                     ("binutils" ,binutils-mesboot0)
+    (native-inputs `(("binutils" ,binutils-mesboot0)
                      ,@(%boot-tcc-inputs)))
     (outputs '("out"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:parallel-build? #f
-       #:strip-binaries? #f
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out")))
-         `("--enable-static"
-           "--disable-shared"
-           "--disable-werror"
-           "--build=i686-unknown-linux-gnu"
-           "--host=i686-unknown-linux-gnu"
-           ,(string-append "--prefix=" out)))
-       #:make-flags
-       `("CC=tcc -static -D __GLIBC_MINOR__=6"
-         "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
-         "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
-         "AR=ar"
-         "RANLIB=ranlib"
-         ,(string-append "LIBGCC2_INCLUDES=-I "
-                         (assoc-ref %build-inputs "tcc")
-                         "/include")
-         "LANGUAGES=c"
-         ,(string-append "BOOT_LDFLAGS="
-                         " -B" (assoc-ref %build-inputs "tcc")
-                         "/lib/"))
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((patch-file (assoc-ref inputs "boot-patch")))
-               (system* "patch" "--force" "-p1" "-i" patch-file)
-               #t)))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash"))
-                    (tcc (assoc-ref %build-inputs "tcc"))
-                    (cppflags " -D __GLIBC_MINOR__=6"))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "CPPFLAGS" cppflags)
-               (setenv "CC" (string-append "tcc" cppflags))
-               (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
-               (setenv "CPP" (string-append "tcc -E" cppflags))
-               (with-output-to-file "config.cache"
-                 (lambda _
-                   (display "
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:parallel-build? #f
+           #:strip-binaries? #f
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out")))
+               `("--enable-static"
+                 "--disable-shared"
+                 "--disable-werror"
+                 "--build=i686-unknown-linux-gnu"
+                 "--host=i686-unknown-linux-gnu"
+                 ,(string-append "--prefix=" out)))
+           #:make-flags
+           #~`("CC=tcc -static -D __GLIBC_MINOR__=6"
+               "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
+               "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
+               "AR=ar"
+               "RANLIB=ranlib"
+               ,(string-append "LIBGCC2_INCLUDES=-I "
+                               (assoc-ref %build-inputs "tcc")
+                               "/include")
+               "LANGUAGES=c"
+               ,(string-append "BOOT_LDFLAGS="
+                               " -B" (assoc-ref %build-inputs "tcc")
+                               "/lib/"))
+           #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((patch-file
+                          #$(local-file
+                             (search-patch "gcc-boot-2.95.3.patch"))))
+                     (invoke "patch" "--force" "-p1" "-i" patch-file))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash"))
+                          (tcc (assoc-ref %build-inputs "tcc"))
+                          (cppflags " -D __GLIBC_MINOR__=6"))
+                     (setenv "CONFIG_SHELL" shell)
+                     (setenv "CPPFLAGS" cppflags)
+                     (setenv "CC" (string-append "tcc" cppflags))
+                     (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
+                     (setenv "CPP" (string-append "tcc -E" cppflags))
+                     (with-output-to-file "config.cache"
+                       (lambda _
+                         (display "
 ac_cv_c_float_format='IEEE (little-endian)'
 "))))))
-         ;; gcc-2.95.3
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags  #:allow-other-keys)
-             (format (current-error-port)
-                     "running ./configure ~a\n" (string-join configure-flags))
-             (apply invoke "./configure" configure-flags)))
-         (add-after 'configure 'remove-info
-           (lambda _
-             ;; no info at this stage
-             (delete-file-recursively "texinfo")
-             (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
-         (add-after 'install 'install2
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((tcc (assoc-ref %build-inputs "tcc"))
-                    (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
-                    (out (assoc-ref outputs "out"))
-                    (gcc-dir (string-append
-                              out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-               (mkdir-p "tmp")
-               (with-directory-excursion "tmp"
-                 (invoke "ar" "x" (string-append "../gcc/libgcc2.a"))
-                 (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
-                 (apply invoke "ar" "r" (string-append gcc-dir "/libgcc.a")
-                        (find-files "." "\\.o")))
-               (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
-               (copy-file (string-append tcc "/lib/libtcc1.a")
-                          (string-append out "/lib/libtcc1.a"))
-               (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
-               (invoke "ar" "x" (string-append tcc "/lib/libc.a"))
-               (invoke "ar" "r" (string-append gcc-dir "/libc.a")
-                       "libc.o" "libtcc1.o")
-               #t))))))
+               ;; gcc-2.95.3
+               (replace 'configure           ; needs classic invocation of configure
+                 (lambda* (#:key configure-flags  #:allow-other-keys)
+                   (format (current-error-port)
+                           "running ./configure ~a\n" (string-join configure-flags))
+                   (apply invoke "./configure" configure-flags)))
+               (add-after 'configure 'remove-info
+                 (lambda _
+                   ;; no info at this stage
+                   (delete-file-recursively "texinfo")
+                   (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
+               (add-after 'install 'install2
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((tcc (assoc-ref %build-inputs "tcc"))
+                          (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
+                          (out (assoc-ref outputs "out"))
+                          (gcc-dir (string-append
+                                    out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+                     (mkdir-p "tmp")
+                     (with-directory-excursion "tmp"
+                       (invoke "ar" "x" (string-append "../gcc/libgcc2.a"))
+                       (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
+                       (apply invoke "ar" "r" (string-append gcc-dir "/libgcc.a")
+                              (find-files "." "\\.o")))
+                     (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
+                     (copy-file (string-append tcc "/lib/libtcc1.a")
+                                (string-append out "/lib/libtcc1.a"))
+                     (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
+                     (invoke "ar" "x" (string-append tcc "/lib/libc.a"))
+                     (invoke "ar" "r" (string-append gcc-dir "/libc.a")
+                             "libc.o" "libtcc1.o")))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -1277,8 +1196,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (headers (assoc-ref %build-inputs "kernel-headers")))
                (mkdir-p include)
                (copy-recursively "include" out)
-               (copy-recursively headers out)
-               #t))))))))
+               (copy-recursively headers out)))))))))
 
 (define gawk-mesboot0
   ;; The initial Gawk.
@@ -1329,8 +1247,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (setenv "CPP" "tcc -E")
                (setenv "LD" "tcc")
                (setenv "ac_cv_func_getpgrp_void" "yes")
-               (setenv "ac_cv_func_tzset" "yes"))
-             #t))
+               (setenv "ac_cv_func_tzset" "yes"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -1345,8 +1262,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define glibc-mesboot0
   ;; GNU C Library 2.2.5 is the most recent glibc that we managed to build
@@ -1369,87 +1285,84 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs '())
     (propagated-inputs '())
-    (native-inputs `(("boot-patch" ,(search-patch "glibc-boot-2.2.5.patch"))
-                     ("system-patch" ,(search-patch "glibc-bootstrap-system-2.2.5.patch"))
-                     ("headers" ,mesboot-headers)
+    (native-inputs `(("headers" ,mesboot-headers)
                      ,@(%boot-mesboot-core-inputs)))
     (outputs '("out"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:strip-binaries? #f
-       #:validate-runpath? #f   ; no dynamic executables
-       #:parallel-build? #f     ; gcc-2.95.3 ICEs on massively parallel builds
-       #:make-flags (list (string-append
-                           "SHELL="
-                           (assoc-ref %build-inputs "bash")
-                           "/bin/sh"))
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (headers (assoc-ref %build-inputs "headers")))
-         `("--disable-shared"
-           "--enable-static"
-           "--disable-sanity-checks"
-           "--build=i686-unknown-linux-gnu"
-           "--host=i686-unknown-linux-gnu"
-           ,(string-append "--with-headers=" headers "/include")
-           "--enable-static-nss"
-           "--without-__thread"
-           "--without-cvs"
-           "--without-gd"
-           "--without-tls"
-           ,(string-append "--prefix=" out)))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (and (let ((patch (assoc-ref inputs "boot-patch")))
-                    (invoke "patch" "--force" "-p1" "-i" patch))
-                  (let ((patch (assoc-ref inputs "system-patch")))
-                    (invoke "patch" "--force" "-p1" "-i" patch)))))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash"))
-                    (gcc (assoc-ref %build-inputs "gcc"))
-                    (headers (assoc-ref %build-inputs "headers"))
-                    (cppflags (string-append
-                               ;;" -D __STDC__=1"
-                               " -D MES_BOOTSTRAP=1"
-                               " -D BOOTSTRAP_GLIBC=1"))
-                    (cflags (string-append " -L " (getcwd))))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "SHELL" shell)
-               (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-               (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-               #t)))
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (format (current-error-port)
-                     "running ./configure ~a\n" (string-join configure-flags))
-             (apply invoke "./configure" configure-flags)))
-                  (add-after 'configure 'fixup-configure
-                    (lambda _
-                      (let* ((out (assoc-ref %outputs "out"))
-                             (bash (assoc-ref %build-inputs "bash"))
-                             (shell (string-append bash "/bin/bash")))
-                        (substitute* "config.make"
-                          (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
-                        (substitute* "config.make"
-                          (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
-                          (("BASH = ") (string-append
-                                        "SHELL = " shell "
-         BASH = ")))
-                        #t))))))))
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:strip-binaries? #f
+           #:validate-runpath? #f   ; no dynamic executables
+           #:parallel-build? #f     ; gcc-2.95.3 ICEs on massively parallel builds
+           #:make-flags #~(list (string-append
+                                 "SHELL="
+                                 (assoc-ref %build-inputs "bash")
+                                 "/bin/sh"))
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out"))
+                   (headers (assoc-ref %build-inputs "headers")))
+               `("--disable-shared"
+                 "--enable-static"
+                 "--disable-sanity-checks"
+                 "--build=i686-unknown-linux-gnu"
+                 "--host=i686-unknown-linux-gnu"
+                 ,(string-append "--with-headers=" headers "/include")
+                 "--enable-static-nss"
+                 "--without-__thread"
+                 "--without-cvs"
+                 "--without-gd"
+                 "--without-tls"
+                 ,(string-append "--prefix=" out)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (invoke "patch" "--force" "-p1" "-i"
+                           #$(local-file
+                              (search-patch "glibc-boot-2.2.5.patch")))
+                   (invoke "patch" "--force" "-p1" "-i"
+                           #$(local-file
+                              (search-patch "glibc-bootstrap-system-2.2.5.patch")))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash"))
+                          (gcc (assoc-ref %build-inputs "gcc"))
+                          (headers (assoc-ref %build-inputs "headers"))
+                          (cppflags (string-append
+                                     ;;" -D __STDC__=1"
+                                     " -D MES_BOOTSTRAP=1"
+                                     " -D BOOTSTRAP_GLIBC=1"))
+                          (cflags (string-append " -L " (getcwd))))
+                     (setenv "CONFIG_SHELL" shell)
+                     (setenv "SHELL" shell)
+                     (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+                     (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags)))))
+               (replace 'configure           ; needs classic invocation of configure
+                 (lambda* (#:key configure-flags #:allow-other-keys)
+                   (format (current-error-port)
+                           "running ./configure ~a\n" (string-join configure-flags))
+                   (apply invoke "./configure" configure-flags)))
+               (add-after 'configure 'fixup-configure
+                 (lambda _
+                   (let* ((out (assoc-ref %outputs "out"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (shell (string-append bash "/bin/bash")))
+                     (substitute* "config.make"
+                       (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
+                     (substitute* "config.make"
+                       (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
+                       (("BASH = ") (string-append
+                                     "SHELL = " shell "
+         BASH = ")))))))))))
 
 (define gcc-mesboot0
   (package
     (inherit gcc-core-mesboot0)
     (name "gcc-mesboot0")
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-2.95.3.patch"))
-                     ;; Packages are given in an order that's relevant for
+    (native-inputs `(;; Packages are given in an order that's relevant for
                      ;; #include_next purposes.
                      ("libc" ,glibc-mesboot0)
                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
@@ -1457,38 +1370,37 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments gcc-core-mesboot0)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'setenv
-             (lambda _
-               (setenv "CONFIG_SHELL" (which "sh"))
-               (with-output-to-file "config.cache"
-                 (lambda _
-                   (display "
+        #~(modify-phases #$phases
+            (replace 'setenv
+              (lambda _
+                (setenv "CONFIG_SHELL" (which "sh"))
+                (with-output-to-file "config.cache"
+                  (lambda _
+                    (display "
 ac_cv_c_float_format='IEEE (little-endian)'
-")))
-               #t))
-           (replace 'install2
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (gcc-dir (string-append
-                                out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-                 (and
-                  (mkdir-p "tmp")
-                  (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
-                  (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
-                  (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))))))))
+")))))
+            (replace 'install2
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let* ((out (assoc-ref outputs "out"))
+                       (gcc-dir (string-append
+                                 out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+                  (and
+                   (mkdir-p "tmp")
+                   (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
+                   (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
+                   (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))))))))
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out")))
-           `("--disable-shared"
-             "--disable-werror"
-             "--build=i686-unknown-linux-gnu"
-             "--host=i686-unknown-linux-gnu"
-             ,(string-append "--prefix=" out))))
+        #~(let ((out (assoc-ref %outputs "out")))
+            `("--disable-shared"
+              "--disable-werror"
+              "--build=i686-unknown-linux-gnu"
+              "--host=i686-unknown-linux-gnu"
+              ,(string-append "--prefix=" out))))
        ((#:make-flags make-flags)
-        `(let ((gcc (assoc-ref %build-inputs "gcc")))
-           `("RANLIB=true"
-             ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
-             "LANGUAGES=c")))))))
+        #~(let ((gcc (assoc-ref %build-inputs "gcc")))
+            `("RANLIB=true"
+              ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
+              "LANGUAGES=c")))))))
 
 (define (%boot-mesboot0-inputs)
   `(("gcc" ,gcc-mesboot0)
@@ -1543,14 +1455,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (substitute* "configure"
                  ((" /bin/sh") shell)))
              (substitute* "Makefile.in"
-               (("^SUBDIRS = doc") "SUBDIRS ="))
-             #t))
+               (("^SUBDIRS = doc") "SUBDIRS ="))))
          (replace 'install
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "src/tar" bin)
-               #t))))))))
+               (install-file "src/tar" bin)))))))))
 
 (define grep-mesboot
   ;; The initial grep.
@@ -1587,8 +1497,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (install-file "grep" bin)
                (symlink "grep" (string-append bin "/egrep"))
-               (symlink "grep" (string-append bin "/fgrep"))
-               #t))))))))
+               (symlink "grep" (string-append bin "/fgrep"))))))))))
 
 (define binutils-mesboot1
   (package
@@ -1613,8 +1522,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (let* ((out (assoc-ref %outputs "out"))
                       (bash (assoc-ref %build-inputs "bash"))
                       (shell (string-append bash "/bin/bash")))
-                 (setenv "CONFIG_SHELL" shell)
-                 #t)))))))))
+                 (setenv "CONFIG_SHELL" shell))))))))))
 
 (define coreutils-mesboot0
   (package
@@ -1677,8 +1585,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "make" bin)
-               #t))))))))
+               (install-file "make" bin)))))))))
 
 (define gawk-mesboot
   (package
@@ -1713,8 +1620,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define sed-mesboot
   (package
@@ -1745,8 +1651,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (shell (string-append bash "/bin/bash")))
                (substitute* "testsuite/Makefile.tests"
                  (("^SHELL = /bin/sh")
-                  (string-append "SHELL = " shell)))
-               #t))))))))
+                  (string-append "SHELL = " shell)))))))))))
 
 (define bash-mesboot
   (package
@@ -1789,14 +1694,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "shell.c"
-               ((";;") ";"))
-             #t))
+               ((";;") ";"))))
          (add-before 'configure 'setenv
            (lambda _
              (setenv "AWK" "gawk")
              (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
-             (setenv "gl_cv_func_rename_dest_works" "yes")
-             #t))
+             (setenv "gl_cv_func_rename_dest_works" "yes")))
          (add-after 'configure 'configure-fixups
            (lambda _
              (let ((config.h (open-file "config.h" "a")))
@@ -1804,8 +1707,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
 #define enable_hostname_completion(on_or_off) 0
 ")
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -1815,8 +1717,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define (%boot-mesboot1-inputs)
   `(("bash" ,bash-mesboot)
@@ -1832,38 +1733,28 @@ ac_cv_c_float_format='IEEE (little-endian)'
               "gawk" "grep" "guile" "make" "sed" "tar"))))
 
 (define gmp-boot
-  (package
-    (inherit gmp)
-    (version "4.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/gmp/gmp-" version
-                                  ".tar.gz"))
-              (sha256 (base32
-                       "15rwq54fi3s11izas6g985y9jklm3xprfsmym3v1g6xr84bavqvv"))))))
+  (let ((version "4.3.2"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gmp/gmp-" version ".tar.gz"))
+      (sha256
+       (base32 "15rwq54fi3s11izas6g985y9jklm3xprfsmym3v1g6xr84bavqvv")))))
 
 (define mpfr-boot
-  (package
-    (inherit mpfr)
-    (version "2.4.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mpfr/mpfr-" version
-                                  ".tar.gz"))
-              (sha256 (base32
-                       "0dxn4904dra50xa22hi047lj8kkpr41d6vb9sd4grca880c7wv94"))))))
+  (let ((version "2.4.2"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/mpfr/mpfr-" version ".tar.gz"))
+      (sha256
+       (base32 "0dxn4904dra50xa22hi047lj8kkpr41d6vb9sd4grca880c7wv94")))))
 
 (define mpc-boot
-  (package
-    (inherit mpc)
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://gnu/mpc/mpc-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))))
+  (let ((version "1.0.3"))
+    (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/mpc/mpc-" version ".tar.gz"))
+      (sha256
+       (base32 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1")))))
 
 (define gcc-core-mesboot1
   ;; GCC 4.6.4 is the latest modular distribution.  This package is not
@@ -1880,114 +1771,112 @@ ac_cv_c_float_format='IEEE (little-endian)'
                                   version "/gcc-core-" version ".tar.gz"))
               (sha256
                (base32
-                "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75"))
-              ;; Patch needs XZ
-              ;; (patches (search-patches "gcc-boot-4.6.4.patch"))
-              ))
-    (inputs `(("gmp-source" ,(package-source gmp-boot))
-              ("mpfr-source" ,(package-source mpfr-boot))
-              ("mpc-source" ,(package-source mpc-boot))))
-    (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-4.6.4.patch"))
-                     ,@(%boot-mesboot1-inputs)))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:tests? #f
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:parallel-build? #f             ; for debugging
-       #:make-flags
-       (let* ((libc (assoc-ref %build-inputs "libc"))
-              (ldflags (string-append
-                        "-B" libc "/lib "
-                        "-Wl,-dynamic-linker "
-                        "-Wl," libc
-                        ,(glibc-dynamic-linker "i686-linux"))))
-         (list (string-append "LDFLAGS=" ldflags)
-               (string-append "LDFLAGS_FOR_TARGET=" ldflags)))
-       #:configure-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (glibc (assoc-ref %build-inputs "libc")))
-         (list (string-append "--prefix=" out)
-               "--build=i686-unknown-linux-gnu"
-               "--host=i686-unknown-linux-gnu"
-               (string-append "--with-native-system-header-dir=" glibc "/include")
-               (string-append "--with-build-sysroot=" glibc "/include")
-               "--disable-bootstrap"
-               "--disable-decimal-float"
-               "--disable-libatomic"
-               "--disable-libcilkrts"
-               "--disable-libgomp"
-               "--disable-libitm"
-               "--disable-libmudflap"
-               "--disable-libquadmath"
-               "--disable-libsanitizer"
-               "--disable-libssp"
-               "--disable-libvtv"
-               "--disable-lto"
-               "--disable-lto-plugin"
-               "--disable-multilib"
-               "--disable-plugin"
-               "--disable-threads"
-               "--enable-languages=c"
-               "--enable-static"
-               "--disable-shared"
-               "--enable-threads=single"
-               "--disable-libstdcxx-pch"
-               "--disable-build-with-cxx"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'apply-boot-patch
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((patch-file (assoc-ref inputs "boot-patch")))
-               (format (current-error-port) "patch file=~s\n" patch-file)
-               (system* "patch" "--force" "-p1" "-i" patch-file))
-             #t))
-         ;; c&p from commencement.scm:gcc-boot0
-         (add-after 'unpack 'unpack-gmp&co
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                   (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                   (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-               ;; To reduce the set of pre-built bootstrap inputs, build
-               ;; GMP & co. from GCC.
-               (for-each (lambda (source)
-                           (or (invoke "tar" "xvf" source)
-                               (error "failed to unpack tarball"
-                                      source)))
-                         (list gmp mpfr mpc))
-
-               ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-               ,@(map (lambda (lib)
-                        ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                        ;; into gmp-6.0.0.
-                        `(symlink ,(string-trim-right
-                                    (package-full-name lib "-")
-                                    char-set:letter)
-                                  ,(package-name lib)))
-                      (list gmp-boot mpfr-boot mpc-boot))
-               #t)))
-         (add-before 'configure 'setenv
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (binutils (assoc-ref %build-inputs "binutils"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (gcc (assoc-ref %build-inputs "gcc"))
-                    (glibc (assoc-ref %build-inputs "libc"))
-                    (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-               (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-               (setenv "C_INCLUDE_PATH" (string-append
-                                         gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
-                                         ":" kernel-headers "/include"
-                                         ":" glibc "/include"
-                                         ":" (getcwd) "/mpfr/src"))
-               (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                     ":" gcc "/lib"))
-               (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-               (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-               #t))))))))
+                "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75"))))
+    (inputs `(("gmp-source" ,gmp-boot)
+              ("mpfr-source" ,mpfr-boot)
+              ("mpc-source" ,mpc-boot)))
+    (native-inputs (%boot-mesboot1-inputs))
+    (arguments
+     (list #:implicit-inputs? #f
+           #:guile %bootstrap-guile
+           #:tests? #f
+           #:modules '((guix build gnu-build-system)
+                       (guix build utils)
+                       (srfi srfi-1))
+           #:parallel-build? #f             ; for debugging
+           #:make-flags
+           #~(let* ((libc (assoc-ref %build-inputs "libc"))
+                    (ldflags (string-append
+                              "-B" libc "/lib "
+                              "-Wl,-dynamic-linker "
+                              "-Wl," libc
+                              #$(glibc-dynamic-linker "i686-linux"))))
+               (list (string-append "LDFLAGS=" ldflags)
+                     (string-append "LDFLAGS_FOR_TARGET=" ldflags)))
+           #:configure-flags
+           #~(let ((out (assoc-ref %outputs "out"))
+                   (glibc (assoc-ref %build-inputs "libc")))
+               (list (string-append "--prefix=" out)
+                     "--build=i686-unknown-linux-gnu"
+                     "--host=i686-unknown-linux-gnu"
+                     (string-append "--with-native-system-header-dir=" glibc "/include")
+                     (string-append "--with-build-sysroot=" glibc "/include")
+                     "--disable-bootstrap"
+                     "--disable-decimal-float"
+                     "--disable-libatomic"
+                     "--disable-libcilkrts"
+                     "--disable-libgomp"
+                     "--disable-libitm"
+                     "--disable-libmudflap"
+                     "--disable-libquadmath"
+                     "--disable-libsanitizer"
+                     "--disable-libssp"
+                     "--disable-libvtv"
+                     "--disable-lto"
+                     "--disable-lto-plugin"
+                     "--disable-multilib"
+                     "--disable-plugin"
+                     "--disable-threads"
+                     "--enable-languages=c"
+                     "--enable-static"
+                     "--disable-shared"
+                     "--enable-threads=single"
+                     "--disable-libstdcxx-pch"
+                     "--disable-build-with-cxx"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'apply-boot-patch
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((patch-file
+                          #$(local-file
+                             (search-patch "gcc-boot-4.6.4.patch"))))
+                     (invoke "patch" "--force" "-p1" "-i" patch-file))))
+               ;; c&p from commencement.scm:gcc-boot0
+               (add-after 'unpack 'unpack-gmp&co
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                         (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                         (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                     ;; To reduce the set of pre-built bootstrap inputs, build
+                     ;; GMP & co. from GCC.
+                     (for-each (lambda (source)
+                                 (or (invoke "tar" "xvf" source)
+                                     (error "failed to unpack tarball"
+                                            source)))
+                               (list gmp mpfr mpc))
+
+                     ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                     #$@(map (lambda (lib package)
+                               ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                               ;; into gmp-6.0.0.
+                               #~(symlink #$(string-trim-right
+                                             (basename
+                                              (origin-actual-file-name lib)
+                                              ".tar.gz")
+                                             char-set:letter)
+                                          #$package))
+                             (list gmp-boot mpfr-boot mpc-boot)
+                             '("gmp" "mpfr" "mpc")))))
+               (add-before 'configure 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (binutils (assoc-ref %build-inputs "binutils"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (gcc (assoc-ref %build-inputs "gcc"))
+                          (glibc (assoc-ref %build-inputs "libc"))
+                          (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                     (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                     (setenv "C_INCLUDE_PATH" (string-append
+                                               gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
+                                               ":" kernel-headers "/include"
+                                               ":" glibc "/include"
+                                               ":" (getcwd) "/mpfr/src"))
+                     (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                           ":" gcc "/lib"))
+                     (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                     (format (current-error-port) "LIBRARY_PATH=~a\n"
+                             (getenv "LIBRARY_PATH"))))))))))
 
 (define gcc-mesboot1
   (package
@@ -2007,31 +1896,29 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments gcc-core-mesboot1)
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out")))
-           `("--enable-languages=c,c++"
-             ,@(filter
-                (negate (lambda (x) (string-prefix? "--enable-languages=" x)))
-                ,configure-flags))))
+        #~(let ((out (assoc-ref %outputs "out")))
+            `("--enable-languages=c,c++"
+              ,@(filter
+                 (negate (lambda (x) (string-prefix? "--enable-languages=" x)))
+                 #$configure-flags))))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'unpack 'unpack-g++
-             (lambda _
-               (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
-                 (invoke "tar" "xvf" source-g++))
-               #t))
-           (replace 'setenv
-             (lambda _
-               (setenv "CONFIG_SHELL" (which "sh"))
-
-               ;; Allow MPFR headers to be found.
-               (setenv "C_INCLUDE_PATH"
-                       (string-append (getcwd) "/mpfr/src:"
-                                      (getenv "C_INCLUDE_PATH")))
-
-               ;; Set the C++ search path so that C headers can be found as
-               ;; libstdc++ is being compiled.
-               (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
-               #t))))))))
+        #~(modify-phases #$phases
+            (add-before 'unpack 'unpack-g++
+              (lambda _
+                (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
+                  (invoke "tar" "xvf" source-g++))))
+            (replace 'setenv
+              (lambda _
+                (setenv "CONFIG_SHELL" (which "sh"))
+
+                ;; Allow MPFR headers to be found.
+                (setenv "C_INCLUDE_PATH"
+                        (string-append (getcwd) "/mpfr/src:"
+                                       (getenv "C_INCLUDE_PATH")))
+
+                ;; Set the C++ search path so that C headers can be found as
+                ;; libstdc++ is being compiled.
+                (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))))))))))
 
 (define (%boot-mesboot2-inputs)
   `(("gcc" ,gcc-mesboot1)
@@ -2172,8 +2059,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (substitute* "gprof/Makefile.in"
                (("^SUBDIRS = po") "SUBDIRS ="))
              (substitute* "ld/Makefile.in"
-               (("^SUBDIRS = po") "SUBDIRS ="))
-             #t)))))))
+               (("^SUBDIRS = po") "SUBDIRS =")))))))))
 
 (define (%boot-mesboot3-inputs)
   `(("binutils" ,binutils-mesboot)
@@ -2201,92 +2087,89 @@ ac_cv_c_float_format='IEEE (little-endian)'
     (arguments
      (substitute-keyword-arguments (package-arguments glibc-mesboot0)
        ((#:configure-flags configure-flags)
-        `(let ((out (assoc-ref %outputs "out"))
-               (headers (assoc-ref %build-inputs "headers")))
-           (list
-            (string-append "--prefix=" out)
-            "--disable-obsolete-rpc"
-            "--host=i686-unknown-linux-gnu"
-            (string-append "--with-headers=" headers "/include")
-            "--enable-static-nss"
-            "--with-pthread"
-            "--without-cvs"
-            "--without-gd"
-            "--enable-add-ons=nptl"
-            ;; avoid: configure: error: confusing output from nm -u
-            "libc_cv_predef_stack_protector=no")))
+        #~(let ((out (assoc-ref %outputs "out"))
+                (headers (assoc-ref %build-inputs "headers")))
+            (list
+             (string-append "--prefix=" out)
+             "--disable-obsolete-rpc"
+             "--host=i686-unknown-linux-gnu"
+             (string-append "--with-headers=" headers "/include")
+             "--enable-static-nss"
+             "--with-pthread"
+             "--without-cvs"
+             "--without-gd"
+             "--enable-add-ons=nptl"
+             ;; avoid: configure: error: confusing output from nm -u
+             "libc_cv_predef_stack_protector=no")))
        ((#:make-flags make-flags)
-        '(list "install-bootstrap-headers=yes" "install-headers"))
+        #~(list "install-bootstrap-headers=yes" "install-headers"))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (delete 'apply-boot-patch)
-           (delete 'fixup-configure)
-           (delete 'set-path)
-           (replace 'unpack
-             (lambda* (#:key source #:allow-other-keys)
-               (invoke "tar" "xvf" source)
-               (chdir (string-append "glibc-" ,version))
-               #t))
-           (replace 'setenv
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let* ((headers  (assoc-ref inputs "headers"))
-                      (libc     (assoc-ref inputs "libc"))
-                      (gcc      (assoc-ref inputs "gcc"))
-                      (cppflags (string-append
-                                 " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
-                                 " -D BOOTSTRAP_GLIBC=1"))
-                      (cflags (string-append " -L " (getcwd)
-                                             " -L " libc "/lib")))
-                 (setenv "libc_cv_friendly_stddef" "yes")
-                 (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "SHELL" (which "sh"))
-
-                 (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-                 (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-                 (setenv "LD" "gcc")
-
-                 ;; avoid -fstack-protector
-                 (setenv "libc_cv_ssp" "false")
-                 (substitute* "configure"
-                   (("/bin/pwd") "pwd"))
-                 #t)))
-           (replace 'install
-             (lambda* (#:key outputs make-flags #:allow-other-keys)
-               (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                     (out (assoc-ref outputs "out")))
-                 (and (apply invoke "make" make-flags)
-                      (copy-recursively kernel-headers out)
-                      #t))))
-           (replace 'configure
-             (lambda* (#:key configure-flags #:allow-other-keys)
-               (format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
-               (mkdir-p "build")
-               (chdir "build")
-               (apply invoke "../configure" configure-flags)))
-           (add-after 'configure 'remove-sunrpc
-             (lambda _
-               (let* ((out (assoc-ref %outputs "out"))
-                      (bash (assoc-ref %build-inputs "bash"))
-                      (shell (string-append bash "/bin/bash")))
-
-                 (let ((Makefile (open-file "Makefile" "a")))
-                   (display (string-append "
+        #~(modify-phases #$phases
+            (delete 'apply-boot-patch)
+            (delete 'fixup-configure)
+            (delete 'set-path)
+            (replace 'unpack
+              (lambda* (#:key source #:allow-other-keys)
+                (invoke "tar" "xvf" source)
+                (chdir (string-append "glibc-" #$version))))
+            (replace 'setenv
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let* ((headers  (assoc-ref inputs "headers"))
+                       (libc     (assoc-ref inputs "libc"))
+                       (gcc      (assoc-ref inputs "gcc"))
+                       (cppflags (string-append
+                                  " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
+                                  " -D BOOTSTRAP_GLIBC=1"))
+                       (cflags (string-append " -L " (getcwd)
+                                              " -L " libc "/lib")))
+                  (setenv "libc_cv_friendly_stddef" "yes")
+                  (setenv "CONFIG_SHELL" (which "sh"))
+                  (setenv "SHELL" (which "sh"))
+
+                  (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+                  (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
+                  (setenv "LD" "gcc")
+
+                  ;; avoid -fstack-protector
+                  (setenv "libc_cv_ssp" "false")
+                  (substitute* "configure"
+                    (("/bin/pwd") "pwd")))))
+            (replace 'install
+              (lambda* (#:key outputs make-flags #:allow-other-keys)
+                (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                      (out (assoc-ref outputs "out")))
+                  (apply invoke "make" make-flags)
+                  (copy-recursively kernel-headers out))))
+            (replace 'configure
+              (lambda* (#:key configure-flags #:allow-other-keys)
+                (format (current-error-port) "running ../configure ~a\n"
+                        (string-join configure-flags))
+                (mkdir-p "build")
+                (chdir "build")
+                (apply invoke "../configure" configure-flags)))
+            (add-after 'configure 'remove-sunrpc
+              (lambda _
+                (let* ((out (assoc-ref %outputs "out"))
+                       (bash (assoc-ref %build-inputs "bash"))
+                       (shell (string-append bash "/bin/bash")))
+
+                  (let ((Makefile (open-file "Makefile" "a")))
+                    (display (string-append "
 
 SHELL := " shell "
 ")
-                            Makefile)
-                   (close Makefile))
-                 (substitute* "../Makefile"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (substitute* "../Makeconfig"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (substitute* "../elf/Makefile"
-                   (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
-                 (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
-                 (substitute* "sysd-sorted"
-                   ((" sunrpc") " ")
-                   ((" nis") " "))
-                 #t)))))))))
+                             Makefile)
+                    (close Makefile))
+                  (substitute* "../Makefile"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (substitute* "../Makeconfig"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (substitute* "../elf/Makefile"
+                    (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+                  (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
+                  (substitute* "sysd-sorted"
+                    ((" sunrpc") " ")
+                    ((" nis") " ")))))))))))
 
 (define glibc-mesboot
   (package
@@ -2298,18 +2181,17 @@ SHELL := " shell "
      `(#:validate-runpath? #f ; fails when using --enable-shared
        ,@(substitute-keyword-arguments (package-arguments glibc-headers-mesboot)
            ((#:make-flags make-flags)
-            `(let ((bash (assoc-ref %build-inputs "bash")))
-               (list (string-append "SHELL=" bash "/bin/sh"))))
+            #~(let ((bash (assoc-ref %build-inputs "bash")))
+                (list (string-append "SHELL=" bash "/bin/sh"))))
            ((#:phases phases)
-            `(modify-phases ,phases
-               (replace 'install
-                 (lambda* (#:key outputs make-flags #:allow-other-keys)
-                   (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                          (out (assoc-ref outputs "out"))
-                          (install-flags (cons "install" make-flags)))
-                     (and (apply invoke "make" install-flags)
-                          (copy-recursively kernel-headers out)
-                          #t)))))))))))
+            #~(modify-phases #$phases
+                (replace 'install
+                  (lambda* (#:key outputs make-flags #:allow-other-keys)
+                    (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                           (out (assoc-ref outputs "out"))
+                           (install-flags (cons "install" make-flags)))
+                      (apply invoke "make" install-flags)
+                      (copy-recursively kernel-headers out)))))))))))
 
 (define (%boot-mesboot4-inputs)
   `(("libc" ,glibc-mesboot)
@@ -2364,8 +2246,7 @@ exec " gcc "/bin/" program
                   "g++"
                   "i686-unknown-linux-gnu-cpp"
                   "i686-unknown-linux-gnu-gcc"
-                  "i686-unknown-linux-gnu-g++"))
-               #t)))
+                  "i686-unknown-linux-gnu-g++")))))
          (replace 'check
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2380,81 +2261,80 @@ exec " gcc "/bin/" program
     (version (package-version gcc-4.9))
     (source (bootstrap-origin (package-source gcc-4.9)))
     (native-inputs `(("gcc-wrapper" ,gcc-mesboot1-wrapper)
-                     ("gcc" ,gcc-mesboot1)
                      ("headers" ,glibc-headers-mesboot)
                      ,@(%boot-mesboot4-inputs)))
     (arguments
      `(#:validate-runpath? #f
        ,@(substitute-keyword-arguments (package-arguments gcc-mesboot1)
            ((#:configure-flags configure-flags)
-            `(let ((out (assoc-ref %outputs "out"))
-                   (glibc (assoc-ref %build-inputs "libc")))
-               (list (string-append "--prefix=" out)
-                     "--build=i686-unknown-linux-gnu"
-                     "--host=i686-unknown-linux-gnu"
-
-                     "--with-host-libstdcxx=-lsupc++"
-
-                     (string-append "--with-native-system-header-dir=" glibc "/include")
-                     (string-append "--with-build-sysroot=" glibc "/include")
-
-                     "--disable-bootstrap"
-                     "--disable-decimal-float"
-                     "--disable-libatomic"
-                     "--disable-libcilkrts"
-                     "--disable-libgomp"
-                     "--disable-libitm"
-                     "--disable-libmudflap"
-                     "--disable-libquadmath"
-                     "--disable-libsanitizer"
-                     "--disable-libssp"
-                     "--disable-libvtv"
-                     "--disable-lto"
-                     "--disable-lto-plugin"
-                     "--disable-multilib"
-                     "--disable-plugin"
-                     "--disable-threads"
-                     "--enable-languages=c,c++"
-
-                     "--enable-static"
-                     "--enable-shared"
-                     "--enable-threads=single"
-
-                     ;; No pre-compiled libstdc++ headers, to save space.
-                     "--disable-libstdcxx-pch"
-
-                     ;; for libcpp ...
-                     "--disable-build-with-cxx")))
+            #~(let ((out (assoc-ref %outputs "out"))
+                    (glibc (assoc-ref %build-inputs "libc")))
+                (list (string-append "--prefix=" out)
+                      "--build=i686-unknown-linux-gnu"
+                      "--host=i686-unknown-linux-gnu"
+
+                      "--with-host-libstdcxx=-lsupc++"
+
+                      (string-append "--with-native-system-header-dir=" glibc "/include")
+                      (string-append "--with-build-sysroot=" glibc "/include")
+
+                      "--disable-bootstrap"
+                      "--disable-decimal-float"
+                      "--disable-libatomic"
+                      "--disable-libcilkrts"
+                      "--disable-libgomp"
+                      "--disable-libitm"
+                      "--disable-libmudflap"
+                      "--disable-libquadmath"
+                      "--disable-libsanitizer"
+                      "--disable-libssp"
+                      "--disable-libvtv"
+                      "--disable-lto"
+                      "--disable-lto-plugin"
+                      "--disable-multilib"
+                      "--disable-plugin"
+                      "--disable-threads"
+                      "--enable-languages=c,c++"
+
+                      "--enable-static"
+                      "--enable-shared"
+                      "--enable-threads=single"
+
+                      ;; No pre-compiled libstdc++ headers, to save space.
+                      "--disable-libstdcxx-pch"
+
+                      ;; for libcpp ...
+                      "--disable-build-with-cxx")))
            ((#:phases phases)
-            `(modify-phases ,phases
-               (delete 'apply-boot-patch)
-               (delete 'unpack-g++)     ; sadly, gcc-4.9.4 does not provide
-                                        ; modular core/language downloads
-               (replace 'setenv
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let* ((out (assoc-ref outputs "out"))
-                          (binutils (assoc-ref %build-inputs "binutils"))
-                          (bash (assoc-ref %build-inputs "bash"))
-                          (gcc (assoc-ref %build-inputs "gcc"))
-                          (glibc (assoc-ref %build-inputs "libc"))
-                          (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-                     (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                     (setenv "C_INCLUDE_PATH" (string-append
-                                               gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
-                                               ":" kernel-headers "/include"
-                                               ":" glibc "/include"
-                                               ":" (getcwd) "/mpfr/src"))
-                     (setenv "CPLUS_INCLUDE_PATH" (string-append
-                                                   gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
-                                                   ":" kernel-headers "/include"
-                                                   ":" glibc "/include"
-                                                   ":" (getcwd) "/mpfr/src"))
-                     (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                           ":" gcc "/lib"))
-                     (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                     (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
-                     (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                     #t))))))))))
+            #~(modify-phases #$phases
+                (delete 'apply-boot-patch)
+                (delete 'unpack-g++)     ; sadly, gcc-4.9.4 does not provide
+                                                  ; modular core/language downloads
+                (replace 'setenv
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let* ((out (assoc-ref outputs "out"))
+                           (binutils (assoc-ref %build-inputs "binutils"))
+                           (bash (assoc-ref %build-inputs "bash"))
+                           (gcc (assoc-ref %build-inputs "gcc"))
+                           (glibc (assoc-ref %build-inputs "libc"))
+                           (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                      (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                      (setenv "C_INCLUDE_PATH" (string-append
+                                                gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+                                                ":" kernel-headers "/include"
+                                                ":" glibc "/include"
+                                                ":" (getcwd) "/mpfr/src"))
+                      (setenv "CPLUS_INCLUDE_PATH" (string-append
+                                                    gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+                                                    ":" kernel-headers "/include"
+                                                    ":" glibc "/include"
+                                                    ":" (getcwd) "/mpfr/src"))
+                      (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                            ":" gcc "/lib"))
+                      (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                      (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
+                      (format (current-error-port) "LIBRARY_PATH=~a\n"
+                              (getenv "LIBRARY_PATH"))))))))))))
 
 (define gcc-mesboot-wrapper
   ;; We need this so gcc-mesboot can be used to create shared binaries that
@@ -2506,6 +2386,7 @@ exec " gcc "/bin/" program
 (define gnu-make-boot0
   (package
     (inherit gnu-make)
+    (outputs (delete "debug" (package-outputs gnu-make)))
     (source (bootstrap-origin (package-source gnu-make)))
     (name "make-boot0")
     (arguments
@@ -2517,7 +2398,16 @@ exec " gcc "/bin/" program
             ;; The generated config.status has some problems due to the
             ;; bootstrap environment.  Disable dependency tracking to work
             ;; around it.
-            `(cons "--disable-dependency-tracking" ,flags))
+            `(cons "--disable-dependency-tracking"
+
+                   ;; 'glibc-bootstrap' on non-x86 platforms has a buggy
+                   ;; 'posix_spawn'.  Thus, disable it.  See
+                   ;; <https://bugs.gnu.org/49367>.
+                   ,(match (%current-system)
+                      ((or "i686-linux" "x86_64-linux")
+                       flags)
+                      (_
+                       `(cons "--disable-posix-spawn" ,flags)))))
            ((#:phases phases)
             `(modify-phases ,phases
                (replace 'build
@@ -2527,8 +2417,7 @@ exec " gcc "/bin/" program
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out (assoc-ref outputs "out"))
                           (bin (string-append out "/bin")))
-                     (install-file "make" bin)
-                     #t))))))))
+                     (install-file "make" bin)))))))))
     (native-inputs '())                           ; no need for 'pkg-config'
     (inputs (%bootstrap-inputs+toolchain))))
 
@@ -2549,6 +2438,7 @@ exec " gcc "/bin/" program
 (define coreutils-boot0
   (package
     (inherit coreutils)
+    (outputs (delete "debug" (package-outputs coreutils)))
     (source (bootstrap-origin (package-source coreutils)))
     (name "coreutils-boot0")
     (native-inputs `())
@@ -2565,6 +2455,9 @@ exec " gcc "/bin/" program
   (package
     (inherit diffutils)
     (name "diffutils-boot0")
+    (source (origin
+              (inherit (package-source diffutils))
+              (patches '())))                 ;patches for tests unneeded here
     (native-inputs `())
     (inputs
      `(("make" ,gnu-make-boot0)
@@ -2594,6 +2487,8 @@ exec " gcc "/bin/" program
        ,@(%bootstrap-inputs+toolchain)))
     (arguments
      `(#:implicit-inputs? #f
+       ;; Ignore test failure in gnulib for armhf/aarch64.
+       #:tests? ,(not (target-arm?))
        #:guile ,%bootstrap-guile
 
        ;; The build system assumes we have done a mistake when time_t is 32-bit
@@ -2608,7 +2503,20 @@ exec " gcc "/bin/" program
                  ((or "arm-linux" "aarch64-linux")
                   ''("--disable-dependency-tracking"))
                  (_ ''()))
-              ,flags)))))))
+              ,flags))
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+              ;; 'test-fnmatch' fails when using glibc-mesboot@2.16, due
+              ;; to incorrect handling of the [:alpha:] regexp character
+              ;; class.  Ignore it.
+               ,@(if (member (%current-system)
+                             '("x86_64-linux" "i686-linux"))
+                     '((add-before 'check 'skip-fnmatch-test
+                         (lambda _
+                           (substitute* "gnulib-tests/Makefile"
+                             (("^XFAIL_TESTS =")
+                              "XFAIL_TESTS = test-fnmatch ")))))
+                     '()))))))))
 
 (define file
   (package
@@ -2640,7 +2548,7 @@ exec " gcc "/bin/" program
 
 (define gawk-boot0
   (package
-    (inherit patch)
+    (inherit gawk)
     (source (bootstrap-origin (package-source gawk)))
     (name "gawk-boot0")
     (native-inputs '())
@@ -2753,8 +2661,7 @@ exec " gcc "/bin/" program
                         (with-directory-excursion (string-append out "/bin")
                           (for-each (lambda (name)
                                       (symlink name (remove-triplet-prefix name)))
-                                    (scandir "." has-triplet-prefix?)))
-                        #t))))
+                                    (scandir "." has-triplet-prefix?)))))))
 
        ,@(substitute-keyword-arguments (package-arguments binutils)
            ((#:configure-flags cf)
@@ -2789,8 +2696,7 @@ exec " gcc "/bin/" program
                       ;; fail, which in turn confuses the configure script.
                       (lambda _
                         (substitute* "libstdc++-v3/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t))))))
+                          (("g\\+\\+ -v") "true"))))))))
              (_ (package-arguments lib)))))
       (inputs (%boot0-inputs))
       (native-inputs '()))))
@@ -2799,6 +2705,7 @@ exec " gcc "/bin/" program
   (package
     (inherit gcc)
     (name "gcc-cross-boot0")
+    (outputs (delete "debug" (package-outputs gcc)))
     (source (bootstrap-origin (package-source gcc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -2819,13 +2726,6 @@ exec " gcc "/bin/" program
                            "--disable-shared"
                            "--enable-languages=c,c++"
 
-                           ;; boot-triplet inserts "guix" in the triplet.
-                           ,@(if (equal? "powerpc64le-guix-linux-gnu" (boot-triplet))
-                                 ;; On POWER9 (little endian) glibc needs the
-                                 ;; 128-bit long double type.
-                                 '("--with-long-double-128")
-                                 '())
-
                            ;; libstdc++ cannot be built at this stage
                            ;; ("Link tests are not allowed after
                            ;; GCC_NO_EXECUTABLES.").
@@ -2879,8 +2779,7 @@ exec " gcc "/bin/" program
                                           (package-full-name lib "-")
                                           char-set:letter)
                                         ,(package-name lib)))
-                            (list gmp-6.0 mpfr mpc))
-                     #t)))
+                            (list gmp-6.0 mpfr mpc)))))
                ,(match (%current-system)
                   ((or "i686-linux" "x86_64-linux")
                    '(add-before 'configure 'fix-libcc1
@@ -2893,8 +2792,7 @@ exec " gcc "/bin/" program
                                           (assoc-ref inputs "gcc") "/lib")))
                         ;; XXX: "g++ -v" is broken (see also libstdc++ above).
                         (substitute* "libcc1/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t)))
+                          (("g\\+\\+ -v") "true")))))
                   (_ '(add-before 'configure 'return-true
                         (lambda _ #t))))
                (add-after 'install 'symlink-libgcc_eh
@@ -2906,8 +2804,7 @@ exec " gcc "/bin/" program
                          (string-append out "/lib/gcc/"
                                         ,(boot-triplet)
                                         "/" ,(package-version gcc))
-                       (symlink "libgcc.a" "libgcc_eh.a"))
-                     #t))))))))
+                       (symlink "libgcc.a" "libgcc_eh.a"))))))))))
 
     (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
               ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2948,8 +2845,7 @@ exec " gcc "/bin/" program
                  (lambda _
                    (substitute* "Configure"
                      (("^libswanted=(.*)pthread" _ before)
-                      (string-append "libswanted=" before)))
-                   #t))))
+                      (string-append "libswanted=" before)))))))
            ;; Do not configure with '-Dusethreads' since pthread
            ;; support is missing.
            ((#:configure-flags configure-flags)
@@ -2992,6 +2888,15 @@ exec " gcc "/bin/" program
                            "RANLIB=ranlib -D"))
                       "V=1")
 
+       ;; 'glibc-bootstrap' on non-x86 platforms has a buggy 'posix_spawn'.
+       ;; Thus, use the Gnulib replacement instead.  See
+       ;; <https://bugs.gnu.org/49367>.
+       ,@(match (%current-system)
+           ((or "i686-linux" "x86_64-linux")
+            '())
+           (_
+            '(#:configure-flags '("gl_cv_func_posix_spawn_works=no"))))
+
        ,@(package-arguments bison)))))
 
 (define flex-boot0
@@ -3006,15 +2911,6 @@ exec " gcc "/bin/" program
        #:guile ,%bootstrap-guile
        #:tests? #f))))
 
-(define rsync-boot0
-  (package
-    (inherit rsync)
-    (native-inputs `(("perl" ,perl-boot0)))
-    (inputs (%boot0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile))))
-
 (define-syntax define/system-dependent
   (lambda (s)
     "Bind IDENTIFIER to EXP, where the value of EXP is known to depend on
@@ -3050,9 +2946,6 @@ memoized as a function of '%current-system'."
        ;; Flex and Bison are required since version 4.16.
        ("flex" ,flex-boot0)
        ("bison" ,bison-boot0)
-
-       ;; Rsync is required since version 5.3.
-       ("rsync" ,rsync-boot0)
        ,@(%boot0-inputs)))))
 
 (define with-boot0
@@ -3155,6 +3048,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit expat)
     (inputs (%boot0-inputs))
+    (outputs '("out"))
     (arguments
      ;; XXX: Linking 'runtestscpp' fails with things like:
      ;;
@@ -3169,6 +3063,7 @@ memoized as a function of '%current-system'."
             ;; Since we're not passing the right -Wl,-rpath flags, build the
             ;; static library to avoid RUNPATH validation failure.
             `(cons "--disable-shared" ,flags))
+           ((#:phases phases) '%standard-phases)
            ((#:tests? _ #f) #f))))))
 
 (define python-boot0
@@ -3195,54 +3090,54 @@ memoized as a function of '%current-system'."
                    (substitute* "Modules/Setup.dist"
                      ;; Link Expat instead of embedding the bundled one.
                      (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                   #t)))))
+                   ;; Delete windows binaries
+                   (for-each delete-file
+                             (find-files "Lib/distutils/command" ".*.exe$"))
+                   (for-each delete-file
+                             (find-files "Lib/ensurepip" ".*.whl$")))))))
     (inputs
      `(,@(%boot0-inputs)
        ("expat" ,expat-sans-tests)))              ;remove OpenSSL, zlib, etc.
-    (native-inputs '())                           ;and pkg-config
+    (native-inputs                                ;and pkg-config
+     `(("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))))
     (arguments
      `(#:implicit-inputs? #f
        #:guile ,%bootstrap-guile
-
-       ,@(substitute-keyword-arguments (package-arguments python-minimal)
-           ;; Disable features that cannot be built at this stage.
-           ((#:configure-flags _ ''())
-            `(list "--without-ensurepip"
-                   "--without-threads"))
-           ;; Clear #:make-flags, such that changes to the regular
-           ;; Python package won't interfere with this one.
-           ((#:make-flags _ ''()) ''())
-           ((#:phases phases)
-            ;; Remove the 'apply-alignment-patch' phase if present to avoid
-            ;; rebuilding this package.  TODO: for the next rebuild cycle,
-            ;; consider inlining all the arguments instead of inheriting to
-            ;; make it easier to patch Python without risking a full rebuild.
-            ;; Or better yet, change to 'python-on-guile'.
-            `(modify-phases ,@(list (match phases
-                                      (('modify-phases original-phases
-                                         changes ...
-                                         ('add-after unpack apply-alignment-patch _))
-                                       `(modify-phases ,original-phases ,@changes))
-                                      (_ phases)))
-               (add-before 'configure 'disable-modules
-                 (lambda _
-                   (substitute* "setup.py"
-                     ;; Disable ctypes, since it requires libffi.
-                     (("extensions\\.append\\(ctypes\\)") "")
-                     ;; Prevent the 'ossaudiodev' extension from being
-                     ;; built, since it requires Linux headers.
-                     (("'linux', ") ""))
-                   #t))
-               (delete 'set-TZDIR)
-               ,@(if (hurd-system?)
-                     `((add-before 'build 'fix-regen
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (let ((libc (assoc-ref inputs "libc")))
-                             (substitute* "Lib/plat-generic/regen"
-                               (("/usr/include/") (string-append libc "/include/")))
-                             #t))))
-                     '())))
-           ((#:tests? _ #f) #f))))))
+       ;; Running the tests won't work because we lack several required
+       ;; modules (OpenSSL, etc).
+       #:tests? #f
+       ;; Disable features that cannot be built at this stage.
+       #:configure-flags '("--without-ensurepip" "--without-threads")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-lib-shells
+           (lambda _
+             (substitute* '("Lib/subprocess.py"
+                            "Lib/distutils/tests/test_spawn.py"
+                            "Lib/test/support/__init__.py"
+                            "Lib/test/test_subprocess.py")
+               (("/bin/sh") (which "sh")))))
+         (add-before 'configure 'disable-modules
+           (lambda _
+             (substitute* "setup.py"
+               ;; Disable ctypes, since it requires libffi.
+               (("extensions\\.append\\(ctypes\\)") "")
+               ;; Prevent the 'ossaudiodev' extension from being
+               ;; built, since it requires Linux headers.
+               (("'linux', ") ""))))
+         ,@(if (hurd-system?)
+               `((add-before 'build 'fix-regen
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((libc (assoc-ref inputs "libc")))
+                       (substitute* "Lib/plat-generic/regen"
+                         (("/usr/include/")
+                          (string-append libc "/include/")))))))
+               '())
+         (add-after 'install 'install-sitecustomize.py
+           ,(customize-site version)))))
+    (native-search-paths
+     (list (guix-pythonpath-search-path version)))))
 
 (define/system-dependent ld-wrapper-boot0
   ;; The first 'ld' wrapper, defined with 'define/system-dependent' because
@@ -3272,6 +3167,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit glibc)
     (name "glibc-intermediate")
+    (outputs (delete "debug" (package-outputs glibc)))
     (source (bootstrap-origin (package-source glibc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -3289,9 +3185,9 @@ memoized as a function of '%current-system'."
             `(modify-phases ,phases
                (add-before 'configure 'pre-configure
                  (lambda* (#:key inputs #:allow-other-keys)
-                   ;; Don't clobber CPATH with the bootstrap libc.
-                   (setenv "NATIVE_CPATH" (getenv "CPATH"))
-                   (unsetenv "CPATH")
+                   ;; Don't clobber include paths with the bootstrap libc.
+                   (unsetenv "C_INCLUDE_PATH")
+                   (unsetenv "CPLUS_INCLUDE_PATH")
 
                    ;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
                    ,@(if (hurd-system?)
@@ -3301,25 +3197,13 @@ memoized as a function of '%current-system'."
                             (string-append "LDLIBS-pthread.so = "
                                            (assoc-ref %build-inputs "kernel-headers")
                                            "/lib/libihash.a\n"))))
-                       '())
-
-                   ;; 'rpcgen' needs native libc headers to be built.
-                   (substitute* "sunrpc/Makefile"
-                     (("sunrpc-CPPFLAGS =.*" all)
-                      (string-append "CPATH = $(NATIVE_CPATH)\n"
-                                     "export CPATH\n"
-                                     all "\n")))
-                   #t)))))))
+                       '()))))))))
     (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
     (native-inputs
      `(("bison" ,bison-boot0)
        ("texinfo" ,texinfo-boot0)
        ("perl" ,perl-boot0)
-       ("python" ,python-boot0)
-       ,@(if (target-powerpc?)
-           `(("powerpc64le-patch" ,@(search-patches
-                                      "glibc-ldd-powerpc.patch")))
-           '())))
+       ("python" ,python-boot0)))
     (inputs
      `( ;; The boot inputs.  That includes the bootstrap libc.  We don't want
        ;; it in $CPATH, hence the 'pre-configure' phase above.
@@ -3330,9 +3214,6 @@ memoized as a function of '%current-system'."
              `(("mig" ,mig-boot0))
              '())
 
-       ;; A native GCC is needed to build `cross-rpcgen'.
-       ("native-gcc" ,@(assoc-ref (%boot0-inputs) "gcc"))
-
        ;; Here, we use the bootstrap Bash, which is not satisfactory
        ;; because we don't want to depend on bootstrap tools.
        ("static-bash" ,@(assoc-ref (%boot0-inputs) "bash"))))))
@@ -3380,9 +3261,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                                            triplet "-" tool)
                                             tool))
                                  '("ar" "ranlib"))
-                       (for-each wrap-program '("gcc" "g++")))
-
-                     #t))))
+                       (for-each wrap-program '("gcc" "g++")))))))
     (native-inputs
      `(("binutils" ,binutils)
        ("gcc" ,gcc)
@@ -3445,16 +3324,14 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                   ;; Build only the tools.
                   (add-after 'unpack 'chdir
                     (lambda _
-                      (chdir "gettext-tools")
-                      #t))
+                      (chdir "gettext-tools")))
 
                   ;; Some test programs require pthreads, which we don't have.
                   (add-before 'configure 'no-test-programs
                     (lambda _
                       (substitute* "tests/Makefile.in"
                         (("^PROGRAMS =.*$")
-                         "PROGRAMS =\n"))
-                      #t)))))))
+                         "PROGRAMS =\n")))))))))
 
 (define glibc-final
   ;; The final glibc, which embeds the statically-linked Bash built above.
@@ -3470,10 +3347,6 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 
    ;; This time we need 'msgfmt' to install all the libc.mo files.
    (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
-                     ,@(if (target-powerpc?)
-                         `(("powerpc64le-patch" ,@(search-patches
-                                                    "glibc-ldd-powerpc.patch")))
-                         '())
                     ("gettext" ,gettext-boot0)))
 
    (propagated-inputs
@@ -3484,7 +3357,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
    ;; if 'allowed-references' were per-output.
    (arguments
     `(#:allowed-references
-      ((,gcc-boot0 "lib")
+      (,(gexp-input gcc-boot0 "lib")
        ,(kernel-headers-boot0)
        ,static-bash-for-glibc
        ,@(if (hurd-system?)
@@ -3635,8 +3508,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                            (package-full-name lib "-")
                                            char-set:letter)
                                          ,(package-name lib)))
-                             (list gmp-6.0 mpfr mpc))
-                      #t))))))))
+                             (list gmp-6.0 mpfr mpc))))))))))
 
     ;; This time we want Texinfo, so we get the manual.  Add
     ;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
@@ -3712,6 +3584,13 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                    #:guile guile-final
                    #:bash bash-final))
 
+(define-public ld-gold-wrapper
+  (make-ld-wrapper "ld-gold-wrapper"
+                   #:binutils binutils-gold
+                   #:linker "ld.gold"
+                   #:guile guile-final
+                   #:bash bash-final))
+
 (define (%boot5-inputs)
   ;; Now with UTF-8 locales.  Remember that the bootstrap binaries were built
   ;; with an older libc, which cannot load the new locale format.  See
@@ -3925,7 +3804,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-6))
 
 (define-public gcc-toolchain-7
-  gcc-toolchain)
+  (make-gcc-toolchain gcc-7))
 
 (define-public gcc-toolchain-8
   (make-gcc-toolchain gcc-8))
@@ -3934,7 +3813,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-9))
 
 (define-public gcc-toolchain-10
-  (make-gcc-toolchain gcc-10))
+  gcc-toolchain)
 
 (define-public gcc-toolchain-11
   (make-gcc-toolchain gcc-11))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 787359eac5..1a3c639884 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
@@ -32,6 +32,7 @@
 ;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Ahmad Jarara <git@ajarara.io>
 ;;;
@@ -168,10 +169,8 @@ in compression.")
                (delete-file (string-append out "/include/minizip/crypt.h"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-    (propagated-inputs `(("zlib" ,zlib)))
+     (list autoconf automake libtool))
+    (propagated-inputs (list zlib))
     (home-page (package-home-page zlib))
     (synopsis "Zip Compression library")
     (description
@@ -192,7 +191,7 @@ the @code{zlib} source.")
               (base32
                "0iginbz2m15hcsa3x4y7v3mhk54gr1r7m3ghx0pg4n46vv2snmpi"))))
    (build-system gnu-build-system)
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (home-page "https://savannah.nongnu.org/projects/fastjar")
    (synopsis "Replacement for Sun's 'jar' utility")
    (description
@@ -220,11 +219,9 @@ the @code{zlib} source.")
    (build-system gnu-build-system)
    (arguments `(#:tests? #f)) ; no "check" target
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("libtool" ,libtool)))
+    (list autoconf automake libtool))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (synopsis "C library for manipulating POSIX tar files")
    (description
     "libtar is a C library for manipulating POSIX tar files.  It handles
@@ -465,7 +462,7 @@ compatible with bzip2 – both at file format and command line level.")
                "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases (modify-phases %standard-phases
@@ -485,7 +482,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
 (define-public xz
   (package
    (name "xz")
-   (version "5.2.4")
+   (version "5.2.5")
    (source (origin
             (method url-fetch)
             (uri (list (string-append "http://tukaani.org/xz/xz-" version
@@ -494,7 +491,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
                                       version ".tar.gz")))
             (sha256
              (base32
-              "0ibi2zsfaz6l756spjwc5rayf4ckgc9hwmy8qinppcyk4svz64mm"))))
+              "045s9agl3bpv3swlwydhgsqh7791957vmgw2plw8f1rks07r3x7n"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases
@@ -545,11 +542,11 @@ than gzip and 15 % smaller output than bzip2.")
        (modify-phases %standard-phases
          (add-before 'check 'set-up-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-             #t)))))
+             (setenv "TZDIR"
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (native-inputs
-     `(("tzdata" ,tzdata-for-tests)))
+     (list tzdata-for-tests))
     (home-page "https://fragglet.github.com/lhasa/")
     (synopsis "LHA archive decompressor")
     (description "Lhasa is a replacement for the Unix LHA tool, for
@@ -599,7 +596,7 @@ format are designed to be portable across platforms.")
         (base32
          "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky"))))
     (build-system gnu-build-system)
-    (inputs `(("lzo" ,lzo)))
+    (inputs (list lzo))
     (home-page "https://www.lzop.org/")
     (synopsis "Compress or expand files")
     (description
@@ -612,14 +609,14 @@ some compression ratio).")
 (define-public lzip
   (package
     (name "lzip")
-    (version "1.21")
+    (version "1.22")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://savannah/lzip/lzip-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4"))))
+               "0j59hx72258334rmkwn57ahr6s69nlrx0a5ip1jw2fbiwr12sd63"))))
     (build-system gnu-build-system)
     (home-page "https://www.nongnu.org/lzip/lzip.html")
     (synopsis "Lossless data compressor based on the LZMA algorithm")
@@ -695,7 +692,7 @@ decompressors when faced with corrupted input.")
              (string-append "extern " all)))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -738,7 +735,7 @@ This package is mostly for compatibility and historical interest.")
                       (("/usr/local") (assoc-ref outputs "out")))
                     #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/raboof/sfArkLib")
     (synopsis "Library for SoundFont decompression")
     (description
@@ -774,8 +771,7 @@ with the sfArk algorithm.")
                  (("/usr/local") (assoc-ref outputs "out")))
                #t)))))
       (inputs
-       `(("zlib" ,zlib)
-         ("sfarklib" ,sfarklib)))
+       (list zlib sfarklib))
       (home-page "https://github.com/raboof/sfarkxtc")
       (synopsis "Basic sfArk decompressor")
       (description "SfArk extractor converts SoundFonts in the compressed legacy
@@ -817,9 +813,8 @@ decompression of some loosely related file formats used by Microsoft.")
     (build-system gnu-build-system)
     (outputs (list "out" "static"))
     (native-inputs
-     `(;; For tests.
-       ("python" ,python)
-       ("valgrind" ,valgrind)))
+     (list ;; For tests.
+           python valgrind))
     (arguments
      `(;; Not designed for parallel testing.
        ;; See https://github.com/lz4/lz4/issues/957#issuecomment-737419821
@@ -935,10 +930,7 @@ This package allows you to create and extract such file systems.")
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("libselinux" ,libselinux)
 
@@ -1008,7 +1000,7 @@ byte-for-byte identical output.")
        #:make-flags
        (list ,(string-append "CC=" (cc-for-target)))
        #:test-target "tests"))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://zlib.net/pigz/")
     (synopsis "Parallel implementation of gzip")
     (description
@@ -1033,8 +1025,7 @@ multiple processors and multiple cores when compressing data.")
                 "1ifxr18f2h75gkcrkx8033kwmwmrcgxshpaawyc2n4dzn1p2rqz5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libarchive" ,libarchive)))
+     (list pkg-config libarchive))
     (home-page "https://github.com/vasi/pixz")
     (synopsis "Parallel indexing implementation of LZMA")
     (description
@@ -1080,7 +1071,7 @@ tarballs.")
                (delete-file-recursively dir-name)
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libmspack" ,libmspack)
        ("libmspack-source" ,(package-source libmspack))))
@@ -1105,17 +1096,15 @@ tarballs.")
         (base32 "18qkyg19r7fxzv93kar5n808n3582ygjmqwa7rnyg5y4b6hnwihl"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection help2man pkg-config))
     (inputs
-     `(("git" ,git)
-       ("glib" ,glib)
-       ("gnupg" ,gnupg)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("json-glib" ,json-glib)
-       ("vala" ,vala)))
+     (list git
+           glib
+           gnupg
+           gnutls
+           gpgme
+           json-glib
+           vala))
     (home-page "https://github.com/hughsie/libjcat")
     (synopsis "Library for reading and writing Jcat files")
     (description
@@ -1145,8 +1134,7 @@ file.")
            #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1181,10 +1169,7 @@ human-readable output.")
              '())
        ("perl" ,perl)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("zlib" ,zlib)))
+     (list bzip2 lz4 lzo zlib))
     (home-page "http://ck.kolivas.org/apps/lrzip/")
     (synopsis "Large file compressor with a very high compression ratio")
     (description "lrzip is a compression utility that uses long-range
@@ -1223,11 +1208,12 @@ well as bzip2.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-third_party-subprojects
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
              (with-directory-excursion "third_party"
                (for-each (lambda (subproject)
                            (let* ((input (string-append subproject "-source"))
-                                  (source (assoc-ref inputs input)))
+                                  (source (assoc-ref (or native-inputs inputs)
+                                                     input)))
                              (with-directory-excursion subproject
                                ;; Take advantage of the coincidence that both
                                ;; use GIT-FETCH, which creates a directory.
@@ -1278,8 +1264,8 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs
+                                                       "/include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -1293,8 +1279,7 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
     (native-inputs
      `(("clang" ,clang-toolchain-6)))
     (inputs
-     `(("libcxx+libcxxabi" ,libcxx+libcxxabi-6)
-       ("libcxxabi" ,libcxxabi-6)))))
+     (list libcxx+libcxxabi-6 libcxxabi-6))))
 
 (define-public p7zip
   (package
@@ -1320,7 +1305,10 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
                              (find-files  "Utils/file_Codecs_Rar_so.py")))
                   (delete-file-recursively "CPP/7zip/Archive/Rar")
                   (delete-file-recursively "CPP/7zip/Compress/Rar")
-                  #t))
+                  ;; Fix FTBFS with gcc-10.
+                  (substitute* "CPP/Windows/ErrorMsg.cpp"
+                    (("switch\\(errorCode\\) \\{")
+                     "switch(static_cast<HRESULT>(errorCode)) {"))))
               (patches (search-patches "p7zip-CVE-2016-9296.patch"
                                        "p7zip-CVE-2017-17969.patch"
                                        "p7zip-remove-unused-code.patch"))))
@@ -1331,31 +1319,27 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key system outputs #:allow-other-keys)
-             (invoke "cp"
-                     (let ((system ,(or (%current-target-system)
-                                        (%current-system))))
-                       (cond
-                        ((string-prefix? "x86_64" system)
-                         "makefile.linux_amd64_asm")
-                        ((string-prefix? "i686" system)
-                         "makefile.linux_x86_asm_gcc_4.X")
-                        (else
-                         "makefile.linux_any_cpu_gcc_4.X")))
-                     "makefile.machine")))
-         (replace 'check
            (lambda _
-             (invoke "make" "test")
-             (invoke "make" "test_7z")
-             (invoke "make" "test_7zr"))))))
+             (copy-file
+               ,(cond ((target-x86-64?)
+                       "makefile.linux_amd64_asm")
+                      ((target-x86-32?)
+                       "makefile.linux_x86_asm_gcc_4.X")
+                      (else
+                        "makefile.linux_any_cpu_gcc_4.X"))
+               "makefile.machine")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "make" "test")
+               (invoke "make" "test_7z")
+               (invoke "make" "test_7zr")))))))
     (native-inputs
-     (let ((system (or (%current-target-system)
-                       (%current-system))))
-       `(,@(cond ((string-prefix? "x86_64" system)
-                  `(("yasm" ,yasm)))
-                 ((string-prefix? "i686" system)
-                  `(("nasm" ,nasm)))
-                 (else '())))))
+      (cond ((target-x86-64?)
+             (list yasm))
+            ((target-x86-32?)
+             (list nasm))
+            (else '())))
     (home-page "http://p7zip.sourceforge.net/")
     (synopsis "Command-line file archiver with high compression ratio")
     (description "p7zip is a command-line port of 7-Zip, a file archiver that
@@ -1403,7 +1387,7 @@ handles the 7z format which features very high compression ratios.")
                (install-file "libgzstream.a" lib)
                (install-file "gzstream.h" include)
                #t))))))
-    (propagated-inputs `(("zlib" ,zlib)))
+    (propagated-inputs (list zlib))
     (home-page "http://www.cs.unc.edu/Research/compgeom/gzstream/")
     (synopsis "Compressed C++ iostream")
     (description "gzstream is a small library for providing zlib
@@ -1453,7 +1437,7 @@ functionality in a C++ iostream.")
         (string-append "PREFIX="
                        (assoc-ref %outputs "out")))))
     (native-inputs
-     `(("perl" ,perl)))                 ; for pod2man
+     (list perl))                 ; for pod2man
     (home-page "http://mattmahoney.net/dc/zpaq.html")
     (synopsis "Incremental journaling archiver")
     (description "ZPAQ is a command-line archiver for realistic situations with
@@ -1517,7 +1501,7 @@ or junctions, and always follows hard links.")
             (base32 "1k5cw6vnpja8yjlnhx5124xrw9i8s1l539hfdqqrqz3l5gn0bnyd"))
            (file-name "unshield-the-feeble-files-spanish.zip")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:out-of-source? #f
        #:phases
@@ -1565,15 +1549,14 @@ or junctions, and always follows hard links.")
 (define-public zstd
   (package
     (name "zstd")
-    (version "1.4.4")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/facebook/zstd/releases/download/"
                            "v" version "/zstd-" version ".tar.gz"))
        (sha256
-        (base32 "05ckxap00qvc0j51d3ci38150cxsw82w7s9zgd5fgzspnzmp1vsr"))))
-    (replacement zstd/fixed)
+        (base32 "150y541303vnvfhd8wkbih00lfvvm98rd12yijwlbkqzg3xgp52i"))))
     (build-system gnu-build-system)
     (outputs '("out"                    ;1.2MiB executables and documentation
                "lib"                    ;1.2MiB shared library and headers
@@ -1581,6 +1564,26 @@ or junctions, and always follows hard links.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'remove-bogus-check
+           (lambda _
+             ;; lib/Makefile falsely claims that no .pc file can be created.
+             (substitute* "lib/Makefile"
+               (("error configured .*dir ")
+                "true "))
+             #t))
+         (add-after 'unpack 'patch-command-file-names
+           ;; Don't require hard requirements to be in $PATH.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (our (lambda (name) (string-append out "/bin/" name))))
+               (substitute* "programs/zstdgrep"
+                 (("(:-)(grep)" _ prefix command)
+                  (string-append prefix (which command)))
+                 (("(:-)(zstdcat)" _ prefix command)
+                  (string-append prefix (our command))))
+               (substitute* "programs/zstdless"
+                 (("zstdcat" command)
+                  (our command))))))
          (delete 'configure)            ;no configure script
          (add-after 'install 'adjust-library-locations
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1600,17 +1603,16 @@ or junctions, and always follows hard links.")
                ;; Make sure the pkg-config file refers to the right output.
                (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
                  (("^prefix=.*")
-                  (string-append "prefix=" lib "\n")))
-
-               #t))))
+                  ;; Note: The .pc file expects a trailing slash for 'prefix'.
+                  (string-append "prefix=" lib "/\n")))))))
        #:make-flags
-       ;; TODO: Integrate in next rebuild cycle.
-       (list ,(if (%current-target-system)
-                (string-append "CC=" (cc-for-target))
-                "CC=gcc")
-             (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib")
-             (string-append "INCLUDEDIR=" (assoc-ref %outputs "lib") "/include")
+       (list ,(string-append "CC=" (cc-for-target))
+             (string-append "prefix=" (assoc-ref %outputs "out"))
+             (string-append "libdir=" (assoc-ref %outputs "lib") "/lib")
+             (string-append "includedir=" (assoc-ref %outputs "lib") "/include")
+             ;; Auto-detection is over-engineered and buggy.
+             "PCLIBDIR=lib"
+             "PCINCDIR=include"
              ;; Skip auto-detection of, and creating a dependency on, the build
              ;; environment's ‘xz’ for what amounts to a dubious feature anyway.
              "HAVE_LZMA=0"
@@ -1633,17 +1635,6 @@ speed.")
                    license:public-domain ; zlibWrapper/examples/fitblk*
                    license:zlib))))      ; zlibWrapper/{gz*.c,gzguts.h}
 
-(define zstd/fixed
-  (package
-    (inherit zstd)
-    (source
-     (origin
-       (inherit (package-source zstd))
-       (patches
-        (search-patches
-         ;; From Ubuntu focal-security
-         "zstd-CVE-2021-24031_CVE-2021-24032.patch"))))))
-
 (define-public pzstd
   (package/inherit zstd
     (name "pzstd")
@@ -1702,7 +1693,7 @@ the actual decompression, the other input and output.")
         (base32
          "0sb3h3067pzf3a7mlxn1hikpcjrsvycjcnj9hl9b1c3ykcgvps7h"))))
     (build-system gnu-build-system)
-    (inputs `(("bzip2" ,bzip2)))
+    (inputs (list bzip2))
     (arguments
      `(#:tests? #f ; no test target
        #:make-flags (let ((out (assoc-ref %outputs "out")))
@@ -1756,8 +1747,32 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
                                 "unzip-attribs-overflow.patch"
                                 "unzip-overflow-on-invalid-input.patch"
                                 "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"))))
-    (replacement unzip/fixed)
+                                "unzip-overflow-long-fsize.patch"
+
+                                ;; From Fedora
+                                "unzip-alt-iconv-utf8.patch"
+                                "unzip-alt-iconv-utf8-print.patch"
+                                "unzip-fix-recmatch.patch"
+                                "unzip-case-insensitive.patch"
+                                "unzip-close.patch"
+                                "unzip-COVSCAN-fix-unterminated-string.patch"
+                                "unzip-CVE-2016-9844.patch"
+                                "unzip-CVE-2018-1000035.patch"
+                                "unzip-CVE-2018-18384.patch"
+                                "unzip-exec-shield.patch"
+                                "unzip-manpage-fix.patch"
+                                "unzip-overflow.patch"
+                                "unzip-timestamp.patch"
+                                "unzip-valgrind.patch"
+                                "unzip-x-option.patch"
+                                ;; CVE-2019-13232
+                                "unzip-zipbomb-manpage.patch"
+                                "unzip-zipbomb-part1.patch"
+                                "unzip-zipbomb-part2.patch"
+                                "unzip-zipbomb-part3.patch"
+
+                                ;; https://github.com/madler/unzip/issues/2
+                                "unzip-32bit-zipbomb-fix.patch"))))
     (build-system gnu-build-system)
     ;; no inputs; bzip2 is not supported, since not compiled with BZ_NO_STDIO
     (arguments
@@ -1793,57 +1808,6 @@ recreates the stored directory structure by default.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
-(define unzip/fixed
-  (package
-    (inherit unzip)
-    (version "6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/infozip"
-                           "/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"))
-       (sha256
-        (base32
-         "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83"))
-       (patches (search-patches "unzip-CVE-2014-8139.patch"
-                                "unzip-CVE-2014-8140.patch"
-                                "unzip-CVE-2014-8141.patch"
-                                "unzip-CVE-2014-9636.patch"
-                                "unzip-CVE-2015-7696.patch"
-                                "unzip-CVE-2015-7697.patch"
-                                "unzip-allow-greater-hostver-values.patch"
-                                "unzip-initialize-symlink-flag.patch"
-                                "unzip-remove-build-date.patch"
-                                "unzip-attribs-overflow.patch"
-                                "unzip-overflow-on-invalid-input.patch"
-                                "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"
-
-                                ;; From Fedora
-                                "unzip-alt-iconv-utf8.patch"
-                                "unzip-alt-iconv-utf8-print.patch"
-                                "unzip-fix-recmatch.patch"
-                                "unzip-case-insensitive.patch"
-                                "unzip-close.patch"
-                                "unzip-COVSCAN-fix-unterminated-string.patch"
-                                "unzip-CVE-2016-9844.patch"
-                                "unzip-CVE-2018-1000035.patch"
-                                "unzip-CVE-2018-18384.patch"
-                                "unzip-exec-shield.patch"
-                                "unzip-manpage-fix.patch"
-                                "unzip-overflow.patch"
-                                "unzip-timestamp.patch"
-                                "unzip-valgrind.patch"
-                                "unzip-x-option.patch"
-                                ;; CVE-2019-13232
-                                "unzip-zipbomb-manpage.patch"
-                                "unzip-zipbomb-part1.patch"
-                                "unzip-zipbomb-part2.patch"
-                                "unzip-zipbomb-part3.patch"
-
-                                ;; https://github.com/madler/unzip/issues/2
-                                "unzip-32bit-zipbomb-fix.patch"))))))
-
 (define-public ziptime
   (let ((commit "2a5bc9dfbf7c6a80e5f7cb4dd05b4036741478bc")
         (revision "0"))
@@ -1896,39 +1860,21 @@ timestamps in the file header with a fixed time (1 January 2008).
 (define-public zziplib
   (package
     (name "zziplib")
-    (version "0.13.69")
+    (version "0.13.72")
     (home-page "https://github.com/gdraheim/zziplib")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page)
                                   (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              (patches (search-patches "zziplib-CVE-2018-16548.patch"))
               (sha256
                (base32
-                "0fbk9k7ryas2wh2ykwkvm1pbi40i88rfvc3dydh9xyd7w2jcki92"))))
-    (replacement zziplib/fixed)
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'make-files-writable
-                    (lambda _
-                      (for-each make-file-writable
-                                (find-files "test" #:directories? #t))
-                      #t)))
-
-       ;; XXX: The default test target attempts to download external resources and
-       ;; fails without error: <https://github.com/gdraheim/zziplib/issues/53>.
-       ;; To prevent confusing log messages, just run a simple zip test that works.
-       #:test-target "check-readme"))
+                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
+    (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
-    (native-inputs `(("perl" ,perl)     ; for the documentation
-                     ("pkg-config" ,pkg-config)
-                     ;; for the documentation; Python 3 not supported,
-                     ;; http://forums.gentoo.org/viewtopic-t-863161-start-0.html
-                     ("python" ,python-2)
-                     ("zip" ,zip))) ; to create test files
+     (list zlib))
+    (native-inputs (list perl ; for the documentation
+                         pkg-config python zip)) ; to create test files
     (synopsis "Library for accessing zip files")
     (description
      "ZZipLib is a library based on zlib for accessing zip files.")
@@ -1936,40 +1882,6 @@ timestamps in the file header with a fixed time (1 January 2008).
     ;; files carry the Zlib license; see "docs/copying.html" for details.
     (license (list license:lgpl2.0+ license:mpl1.1))))
 
-(define-public zziplib/fixed
-  (package
-    (inherit zziplib)
-    (name "zziplib")
-    (version "0.13.72")
-    (home-page "https://github.com/gdraheim/zziplib")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page)
-                                  (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-compatibility-symlinks
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion
-               (string-append (assoc-ref outputs "out") "/lib")
-               (map (lambda (lib new-symlink)
-                      (symlink lib new-symlink))
-                    (list "libzzip.so.13" "libzzipfseeko.so.13"
-                          "libzzipmmapped.so.13" "libzzipwrap.so.13")
-                    (list "libzzip-0.so.13" "libzzipfseeko-0.so.13"
-                          "libzzipmmapped-0.so.13" "libzzipwrap-0.so.13")))
-             #t)))))
-    (native-inputs
-     `(("python" ,python)
-       ,@(alist-delete "python"
-                       (package-native-inputs zziplib))))
-    (build-system cmake-build-system)))
-
 (define-public libzip
   (package
     (name "libzip")
@@ -1982,14 +1894,10 @@ timestamps in the file header with a fixed time (1 January 2008).
                (base32
                 "0zn9vaiwy2izj8cnm8i7c2mbdn38n328grqb8f07x55s4kd3nxph"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("liblzma" ,xz)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("zstd:lib" ,zstd "lib")))
+     (list gnutls xz openssl zlib
+           `(,zstd "lib")))
     (build-system cmake-build-system)
     (home-page "https://libzip.org")
     (synopsis "C library for reading, creating, and modifying zip archives")
@@ -2023,8 +1931,7 @@ archive can be reverted.")
                                "/bin/file'")))
              #t)))))
     (inputs
-     `(("perl" ,perl)
-       ("file" ,file)))
+     (list perl file))
     (home-page "https://www.nongnu.org/atool/")
     (synopsis  "Universal tool to manage file archives of various types")
     (description "The main command is @command{aunpack} which extracts files
@@ -2128,7 +2035,7 @@ corrupted input.")
         (base32 "19zinpx7hssl6r3vilpvq2s7wha3545xan8b0vcvsxnyipdx3n0l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lzlib" ,lzlib)))
+     (list lzlib))
     (home-page "https://www.nongnu.org/lzip/plzip.html")
     (synopsis "Parallel lossless data compressor for the lzip format")
     (description
@@ -2160,10 +2067,8 @@ single-member files which can't be decompressed in parallel.")
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f))
-   (inputs `(("boost" ,boost)
-             ("libiconv" ,libiconv)
-             ("xz" ,xz)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list boost libiconv xz))
+   (native-inputs (list pkg-config))
    (home-page "https://constexpr.org/innoextract/")
    (synopsis "Tool for extracting Inno Setup installers")
    (description "innoextract allows extracting Inno Setup installers under
@@ -2279,10 +2184,9 @@ decompression is a little bit slower.")
              (patches (search-patches "upx-CVE-2021-20285.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("ucl" ,ucl)
-       ("zlib" ,zlib)))
+     (list ucl zlib))
     (arguments
      `(#:make-flags
        (list "all")
@@ -2329,10 +2233,9 @@ download times, and other distribution and storage costs.")
     (arguments
      `(#:tests? #f))                    ;no test
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list qtbase-5 zlib))
     (home-page "https://stachenov.github.io/quazip/index.html")
     (synopsis "Qt/C++ wrapper for Minizip")
     (description "QuaZIP is a simple C++ wrapper over Gilles Vollant's
@@ -2387,10 +2290,9 @@ reading from and writing to ZIP archives. ")
                          (string-append (assoc-ref inputs "zstd")
                                         "/bin/zstd"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("zstd" ,zstd)))
+     (list curl zstd))
     (propagated-inputs
      `(("zstd:lib" ,zstd "lib")))       ;in Requires.private of zck.pc
     (home-page "https://github.com/zchunk/zchunk")
@@ -2447,7 +2349,7 @@ To download a zchunk file.
                    make-flags))))))
     (native-inputs
      ;; Needed to extract the source tarball and run the test suite.
-     `(("lzip" ,lzip)))
+     (list lzip))
     (home-page "https://www.nongnu.org/zutils/zutils.html")
     (synopsis "Utilities that transparently operate on compressed files")
     (description
@@ -2499,8 +2401,8 @@ at run time, and must be installed separately.")
                   (bin (string-append (assoc-ref %outputs "out") "/bin"))
                   (target (string-append bin "/" name))
                   (python (string-append (assoc-ref %build-inputs "python") "/bin"))
-                  (7z (string-append (assoc-ref %build-inputs "p7zip") "/bin/7z"))
-                  (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+                  (7z (search-input-file %build-inputs "/bin/7z"))
+                  (unzip (search-input-file %build-inputs "/bin/unzip")))
              (setenv "PATH" (string-append (getenv "PATH") ":" python))
              (mkdir-p bin)
              (copy-file source target)
@@ -2558,13 +2460,10 @@ file compression algorithm.")
         (base32 "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool libxslt pkg-config))
     (inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme) ; hard-coded theme
-       ("gtk+" ,gtk+)))
+     (list adwaita-icon-theme ; hard-coded theme
+           gtk+))
     (home-page "https://github.com/ib/xarchiver")
     (synopsis "Graphical front-end for archive operations")
     (description "Xarchiver is a front-end to various command line archiving
@@ -2702,7 +2601,7 @@ to their original, binary CD format.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/ebiggers/libdeflate")
     (synopsis "Library for DEFLATE/zlib/gzip compression and decompression")
     (description "Libdeflate is a library for fast, whole-buffer DEFLATE-based
@@ -2729,9 +2628,9 @@ compression and decompression.  The supported formats are:
         (base32 "1x5dw03lcwfigcv97cg70gkbkfycjmv1012s9lwnl4izvl9235qg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("lzip" ,lzip)))
+     (list lzip))
     (inputs
-     `(("lzlib" ,lzlib)))
+     (list lzlib))
     (home-page "https://www.nongnu.org/lzip/tarlz.html")
     (synopsis "Combination of the tar archiver and the lzip compressor")
     (description
diff --git a/gnu/packages/compton.scm b/gnu/packages/compton.scm
index 2a5f3bff27..290e06478b 100644
--- a/gnu/packages/compton.scm
+++ b/gnu/packages/compton.scm
@@ -58,25 +58,21 @@
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs
-       `(("dbus" ,dbus)
-         ("libconfig" ,libconfig)
-         ("libx11" ,libx11)
-         ("libxcomposite" ,libxcomposite)
-         ("libxdamage" ,libxdamage)
-         ("libxext" ,libxext)
-         ("libxfixes" ,libxfixes)
-         ("libxinerama" ,libxinerama)
-         ("libxrandr" ,libxrandr)
-         ("libxrender" ,libxrender)
-         ("mesa" ,mesa)
-         ("xprop" ,xprop)
-         ("xwininfo" ,xwininfo)))
+       (list dbus
+             libconfig
+             libx11
+             libxcomposite
+             libxdamage
+             libxext
+             libxfixes
+             libxinerama
+             libxrandr
+             libxrender
+             mesa
+             xprop
+             xwininfo))
       (native-inputs
-       `(("asciidoc" ,asciidoc)
-         ("libdrm" ,libdrm)
-         ("pkg-config" ,pkg-config)
-         ("python" ,python)
-         ("xorgproto" ,xorgproto)))
+       (list asciidoc libdrm pkg-config python xorgproto))
       (arguments
        `(#:make-flags (list
                        "CC=gcc"
@@ -127,23 +123,21 @@ performance).
        (file-name (string-append "picom-" version))))
     (build-system meson-build-system)
     (inputs
-     `(("dbus" ,dbus)
-       ("libconfig" ,libconfig)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libev" ,libev)
-       ("mesa" ,mesa)
-       ("xprop" ,xprop)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-image" ,xcb-util-image)
-       ("pixman" ,pixman)
-       ("uthash" ,uthash)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("pcre" ,pcre)))
+     (list dbus
+           libconfig
+           libx11
+           libxext
+           libev
+           mesa
+           xprop
+           xcb-util-renderutil
+           xcb-util-image
+           pixman
+           uthash
+           libxdg-basedir
+           pcre))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto)))
+     (list asciidoc pkg-config xorgproto))
     (arguments
      `(#:build-type "release"
        #:configure-flags '("-Dwith_docs=true")))
diff --git a/gnu/packages/configuration-management.scm b/gnu/packages/configuration-management.scm
index 9aee13a172..c64b937fe5 100644
--- a/gnu/packages/configuration-management.scm
+++ b/gnu/packages/configuration-management.scm
@@ -48,56 +48,56 @@
        ;; We don't need to install the source code for end-user applications.
        #:install-source? #f))
     (native-inputs
-     `(("go-github-com-masterminds-sprig" ,go-github-com-masterminds-sprig)
-       ("go-github-com-masterminds-goutils" ,go-github-com-masterminds-goutils)
-       ("go-github-com-masterminds-semver" ,go-github-com-masterminds-semver)
-       ("go-github-com-google-uuid" ,go-github-com-google-uuid)
-       ("go-github-com-huandu-xstrings" ,go-github-com-huandu-xstrings)
-       ("go-github-com-imdario-mergo" ,go-github-com-imdario-mergo)
-       ("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)
-       ("go-github-com-mitchellh-copystructure" ,go-github-com-mitchellh-copystructure)
-       ("go-github-com-bmatcuk-doublestar" ,go-github-com-bmatcuk-doublestar)
-       ("go-github-com-charmbracelet-glamour" ,go-github-com-charmbracelet-glamour)
-       ("go-github-com-alecthomas-chroma" ,go-github-com-alecthomas-chroma)
-       ("go-github-com-coreos-go-semver" ,go-github-com-coreos-go-semver)
-       ("go-github-com-danwakefield-fnmatch" ,go-github-com-danwakefield-fnmatch)
-       ("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-go-git" ,go-github-go-git)
-       ("go-github-com-google-go-github" ,go-github-com-google-go-github)
-       ("go-github-com-google-go-querystring" ,go-github-com-google-go-querystring)
-       ("go-github-com-google-renameio" ,go-github-com-google-renameio)
-       ("go-github-com-microcosm-cc-bluemonday",go-github-com-microcosm-cc-bluemonday)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-github-com-muesli-reflow-ansi" ,go-github-com-muesli-reflow-ansi)
-       ("go-github-com-muesli-reflow-wordwrap" ,go-github-com-muesli-reflow-wordwrap)
-       ("go-github-com-muesli-reflow-indent" ,go-github-com-muesli-reflow-indent)
-       ("go-github-com-muesli-reflow-padding" ,go-github-com-muesli-reflow-padding)
-       ("go-github-com-muesli-termenv" ,go-github-com-muesli-termenv)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-olekukonko-tablewriter" ,go-github-com-olekukonko-tablewriter)
-       ("go-github-com-pelletier-go-toml" ,go-github-com-pelletier-go-toml)
-       ("go-github-com-pkg-diff" ,go-github-com-pkg-diff)
-       ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)
-       ("go-github-com-spf13-cobra" ,go-github-com-spf13-cobra)
-       ("go-github-com-spf13-viper" ,go-github-com-spf13-viper)
-       ("go-github-com-twpayne-go-shell" ,go-github-com-twpayne-go-shell)
-       ("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)
-       ("go-github-com-twpayne-go-vfsafero" ,go-github-com-twpayne-go-vfsafero)
-       ("go-github-com-twpayne-go-xdg" ,go-github-com-twpayne-go-xdg)
-       ("go-github-com-yuin-goldmark" ,go-github-com-yuin-goldmark)
-       ("go-github-com-zalando-go-keyring" ,go-github-com-zalando-go-keyring)
-       ("go-github-com-godbus-dbus" ,go-github-com-godbus-dbus)
-       ("go-etcd-io-bbolt" ,go-etcd-io-bbolt)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-oauth2" ,go-golang-org-x-oauth2)
-       ("go-github-com-rogpeppe-go-internal" ,go-github-com-rogpeppe-go-internal)
-       ("gopkg-in-errgo-fmt-errors" ,gopkg-in-errgo-fmt-errors)))
+     (list go-github-com-masterminds-sprig
+           go-github-com-masterminds-goutils
+           go-github-com-masterminds-semver
+           go-github-com-google-uuid
+           go-github-com-huandu-xstrings
+           go-github-com-imdario-mergo
+           go-github-com-mitchellh-reflectwalk
+           go-github-com-mitchellh-copystructure
+           go-github-com-bmatcuk-doublestar
+           go-github-com-charmbracelet-glamour
+           go-github-com-alecthomas-chroma
+           go-github-com-coreos-go-semver
+           go-github-com-danwakefield-fnmatch
+           go-github-com-dlclark-regexp2
+           go-github-go-git
+           go-github-com-google-go-github
+           go-github-com-google-go-querystring
+           go-github-com-google-renameio
+           go-github-com-microcosm-cc-bluemonday
+           go-github-com-aymerick-douceur
+           go-github-com-chris-ramon-douceur
+           go-github-com-gorilla-css
+           go-github-com-muesli-reflow-ansi
+           go-github-com-muesli-reflow-wordwrap
+           go-github-com-muesli-reflow-indent
+           go-github-com-muesli-reflow-padding
+           go-github-com-muesli-termenv
+           go-github-com-google-goterm
+           go-golang-org-colorful
+           go-github-com-mattn-go-isatty
+           go-github.com-mattn-go-runewidth
+           go-github-com-olekukonko-tablewriter
+           go-github-com-pelletier-go-toml
+           go-github-com-pkg-diff
+           go-github-com-sergi-go-diff
+           go-github-com-spf13-cobra
+           go-github-com-spf13-viper
+           go-github-com-twpayne-go-shell
+           go-github-com-twpayne-go-vfs
+           go-github-com-twpayne-go-vfsafero
+           go-github-com-twpayne-go-xdg
+           go-github-com-yuin-goldmark
+           go-github-com-zalando-go-keyring
+           go-github-com-godbus-dbus
+           go-etcd-io-bbolt
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-golang-org-x-oauth2
+           go-github-com-rogpeppe-go-internal
+           gopkg-in-errgo-fmt-errors))
     (home-page "https://www.chezmoi.io/")
     (synopsis "Personal configuration files manager")
     (description "This package helps to manage personal configuration files
diff --git a/gnu/packages/conky.scm b/gnu/packages/conky.scm
index ad4d396289..9843cbe3c0 100644
--- a/gnu/packages/conky.scm
+++ b/gnu/packages/conky.scm
@@ -74,20 +74,20 @@
                (install-file "src/conky" bin))
              #t)))))
     (inputs
-     `(("freetype" ,freetype)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("pulseaudio" ,pulseaudio)
-       ("lua" ,lua)
-       ("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("wireless-tools" ,wireless-tools)))
+     (list freetype
+           imlib2
+           libx11
+           libxdamage
+           libxext
+           libxft
+           libxinerama
+           pulseaudio
+           lua
+           ncurses
+           curl
+           wireless-tools))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Lightweight system monitor for X")
     (description
      "Conky is a lightweight system monitor for X that displays operating
diff --git a/gnu/packages/connman.scm b/gnu/packages/connman.scm
index 7268af4c8b..f2ebfc95eb 100644
--- a/gnu/packages/connman.scm
+++ b/gnu/packages/connman.scm
@@ -71,22 +71,22 @@
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("iptables" ,iptables)
-       ("libmnl" ,libmnl)
-       ("lz4" ,lz4)                     ; required by openconnect.pc
-       ("readline" ,readline)
-       ;; These inputs are needed for connman to include the interface to
-       ;; these technologies so IF they are installed they can be used.
-       ;; TODO: add neard, ofono
-       ("openconnect" ,openconnect)
-       ("openvpn" ,openvpn)
-       ("ppp" ,ppp)
-       ("vpnc" ,vpnc)
-       ("wpa-supplicant" ,wpa-supplicant)
-       ("xl2tpd" ,xl2tpd)))
+     (list dbus
+           glib
+           gnutls
+           iptables
+           libmnl
+           lz4 ; required by openconnect.pc
+           readline
+           ;; These inputs are needed for connman to include the interface to
+           ;; these technologies so IF they are installed they can be used.
+           ;; TODO: add neard, ofono
+           openconnect
+           openvpn
+           ppp
+           vpnc
+           wpa-supplicant
+           xl2tpd))
     (home-page "https://01.org/connman")
     (synopsis "Connection management daemon")
     (description "Connman provides a daemon for managing Internet connections.
@@ -123,9 +123,9 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/econnman-bin")))
                (wrap-program bin
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("efl" ,efl)
        ("python" ,python-wrapper)
@@ -150,9 +150,9 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
        (sha256
         (base32 "0jn12wxwjznady6aniwmvahg1dj25p902sdwj0070biv6vx5c7dq"))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/convmv.scm b/gnu/packages/convmv.scm
index 9e6f141818..a7a5129566 100644
--- a/gnu/packages/convmv.scm
+++ b/gnu/packages/convmv.scm
@@ -50,7 +50,7 @@
              (patch-shebang "suite/parsable_tester.pl")
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "Convert filenames between character sets")
     (description
      "convmv is a file renamer, that converts between different encodings,
diff --git a/gnu/packages/cook.scm b/gnu/packages/cook.scm
index ba13709eda..7a064480d4 100644
--- a/gnu/packages/cook.scm
+++ b/gnu/packages/cook.scm
@@ -70,17 +70,17 @@
 
              (setenv "SH" (which "sh"))
              #t)))))
-    (native-inputs `(("bison" ,bison)
-                     ;; For building the documentation:
-                     ("groff" ,groff)
-                     ;; For the tests:
-                     ("sharutils" ,sharutils)
-                     ;; One test wants rsh.  However there is no rsh server
-                     ;; running in the build environment and so far as I'm
-                     ;; aware, it cannot be started without root.
-                     ;; This test is therefore just skipped.
-                     ;; ("inetutils" ,inetutils)
-                     ("ed" ,ed)))
+    (native-inputs (list bison
+                         ;; For building the documentation:
+                         groff
+                         ;; For the tests:
+                         sharutils
+                         ;; One test wants rsh.  However there is no rsh server
+                         ;; running in the build environment and so far as I'm
+                         ;; aware, it cannot be started without root.
+                         ;; This test is therefore just skipped.
+                         ;; ("inetutils" ,inetutils)
+                         ed))
     (home-page (string-append "https://web.archive.org/web/20140727122520/"
                               "http://miller.emu.id.au/pmiller/software/cook/"))
     (synopsis "Tool for constructing files")
diff --git a/gnu/packages/coq.scm b/gnu/packages/coq.scm
index cf0c67f214..5173726ec2 100644
--- a/gnu/packages/coq.scm
+++ b/gnu/packages/coq.scm
@@ -78,11 +78,9 @@
             (separator #f))))
     (build-system dune-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list gmp ocaml-zarith))
     (native-inputs
-     `(("ocaml-ounit2" ,ocaml-ounit2)
-       ("which" ,which)))
+     (list ocaml-ounit2 which))
     (arguments
      `(#:package "coq-core"
        #:test-target "."))
@@ -105,9 +103,7 @@ It is developed using Objective Caml and Camlp5.")
      `(#:package "coq-stdlib"
        #:test-target "."))
     (inputs
-     `(("coq-core" ,coq-core)
-       ("gmp" ,gmp)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list coq-core gmp ocaml-zarith))
     (native-inputs '())))
 
 (define-public coq
@@ -118,8 +114,7 @@ It is developed using Objective Caml and Camlp5.")
      `(#:package "coq"
        #:test-target "."))
     (propagated-inputs
-     `(("coq-core" ,coq-core)
-       ("coq-stdlib" ,coq-stdlib)))
+     (list coq-core coq-stdlib))
     (native-inputs '())))
 
 (define-public coq-ide-server
@@ -130,9 +125,7 @@ It is developed using Objective Caml and Camlp5.")
      `(#:tests? #f
        #:package "coqide-server"))
     (inputs
-     `(("coq" ,coq)
-       ("gmp" ,gmp)
-       ("ocaml-zarith" ,ocaml-zarith)))))
+     (list coq gmp ocaml-zarith))))
 
 (define-public coq-ide
   (package
@@ -142,8 +135,7 @@ It is developed using Objective Caml and Camlp5.")
      `(#:tests? #f
        #:package "coqide"))
     (propagated-inputs
-     `(("coq" ,coq)
-       ("coq-ide-server" ,coq-ide-server)))
+     (list coq coq-ide-server))
     (inputs
      `(("lablgtk3" ,lablgtk3)))))
 
@@ -170,7 +162,7 @@ It is developed using Objective Caml and Camlp5.")
        `(("emacs" ,emacs-minimal)
          ("texinfo" ,texinfo)))
       (inputs
-       `(("perl" ,perl)))
+       (list perl))
       (arguments
        (let ((base-directory "/share/emacs/site-lisp/ProofGeneral"))
          `(#:tests? #f                  ; no check target
@@ -250,11 +242,7 @@ provers.")
          "0j7vq7ifqcdaj2x881aha2rl51l2p72y1cn7r2xya0fjgsssfigy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (arguments
      `(#:configure-flags
        (list (string-append "COQUSERCONTRIB=" (assoc-ref %outputs "out")
@@ -301,21 +289,18 @@ inside Coq.")
          "1ivh8xm1c8191rm4riamjzya2x6ls96qax5byir1fywf9hbxr1vg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)
-       ("camlp5" ,camlp5)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list autoconf
+           automake
+           ocaml
+           which
+           coq
+           camlp5
+           bison
+           flex))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("ocaml-zarith" ,ocaml-zarith)
-       ("boost" ,boost)))
+     (list gmp mpfr ocaml-zarith boost))
     (propagated-inputs
-     `(("coq-flocq" ,coq-flocq)))
+     (list coq-flocq))
     (arguments
      `(#:configure-flags
        (list (string-append "COQUSERCONTRIB=" (assoc-ref %outputs "out")
@@ -361,9 +346,7 @@ assistant.")
         (base32 "0aj8hsdzzds5w0p1858s2b6k9zssjcxa6kgpi0q1nvaml4zfpkcc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list ocaml which coq))
     (arguments
      `(#:tests? #f ; No tests.
        #:make-flags (list (string-append "COQLIBINSTALL="
@@ -401,11 +384,7 @@ part of the distribution.")
          "146s5y2xsc7wb43m1pq1n4p14hw99gqbzx0ic3a4naxq16v7cv4w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (propagated-inputs
      `(("mathcomp" ,coq-mathcomp)))
     (arguments
@@ -453,11 +432,9 @@ theorems between the two libraries.")
                 "0jsgdvj0ddhkls32krprp34r64y1rb5mwxl34fgaxk2k4664yq06"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml" ,ocaml)
-       ("coq" ,coq)))
+     (list ocaml coq))
     (inputs
-     `(("camlp5" ,camlp5)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list camlp5 ocaml-zarith))
     (arguments
      `(#:tests? #f ; No test target.
        #:make-flags
@@ -488,11 +465,7 @@ provides BigN, BigZ, BigQ that used to be part of Coq standard library.")
          "0sr9psildc0sda07r2r47rfgyry49yklk38bg04yyvry5j5pryb6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,which)
-       ("coq" ,coq)))
+     (list autoconf automake ocaml which coq))
     (propagated-inputs
      `(("flocq" ,coq-flocq)
        ("bignums" ,coq-bignums)
@@ -549,7 +522,7 @@ Coq proof assistant.")
          (modify-phases %standard-phases
            (delete 'configure))))
       (native-inputs
-       `(("coq" ,coq)))
+       (list coq))
       (home-page "https://www.ps.uni-saarland.de/autosubst/")
       (synopsis "Coq library for parallel de Bruijn substitutions")
       (description "Formalizing syntactic theories with variable binders is
@@ -580,11 +553,9 @@ uses Ltac to synthesize the substitution operation.")
                 "19bj9nncd1r9g4273h5qx35gs3i4bw5z9bhjni24b413hyj55hkv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ocaml"  ,ocaml)
-       ("coq"    ,coq)
-       ("camlp5" ,camlp5)))
+     (list ocaml coq camlp5))
     (inputs
-     `(("ocaml-zarith" ,ocaml-zarith)))
+     (list ocaml-zarith))
     (arguments
      `(#:test-target "test-suite"
        #:make-flags (list (string-append "COQLIBINSTALL="
@@ -625,12 +596,9 @@ kernel.")
           "0ldrp86bfcjpzsb08p45sgs3aczjzr1gksy5dsf7pxapg05pc7ac"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("coq" ,coq)
-       ("ocaml" ,ocaml)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-findlib" ,ocaml-findlib)))
+     (list coq ocaml ocamlbuild ocaml-findlib))
     (inputs
-     `(("ocaml-num" ,ocaml-num)))
+     (list ocaml-num))
     (arguments
      `(#:tests? #f                      ;included in Makefile
        #:make-flags (list (string-append "COQLIBINSTALL="
@@ -670,7 +638,7 @@ also provided in Coq, without associated proofs.")
                 "1l1w6srzydjg0h3f4krrfgvz455h56shyy2lbcnwdbzjkahibl7v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("coq" ,coq)))
+     (list coq))
     (arguments
      `(#:tests? #f ; Tests are executed during build phase.
        #:make-flags (list (string-append "COQLIBINSTALL="
diff --git a/gnu/packages/cpio.scm b/gnu/packages/cpio.scm
index 58b2f45937..2f7a7b2363 100644
--- a/gnu/packages/cpio.scm
+++ b/gnu/packages/cpio.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +36,14 @@
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))))
+               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                 ;; Remove superfluous declaration that trips GCC 10.
+                 (substitute* "src/global.c"
+                   (("char \\*program_name;")
+                    ""))))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/cpio/")
     (synopsis "Manage cpio and tar file archives")
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 9ab6e0b835..1b6779a036 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -18,6 +18,9 @@
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Milkey Mouse <milkeymouse@meme.institute>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -87,14 +90,14 @@
          (commit version)))
        (file-name
         (git-file-name name version))
+       (patches (search-patches "range-v3-build-with-gcc10.patch"))
        (sha256
         (base32 "18230bg4rq9pmm5f8f65j444jpq56rld4fhmpham8q3vr1c1bdjh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)))
+     (list doxygen gcc-9 perl))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (synopsis "Range library for C++14/17/20")
     (description "Range-v3 is an extension of the Standard Template Library that
 makes its iterators and algorithms more powerful by making them composable.
@@ -129,13 +132,13 @@ range-v3 ranges are an abstraction layer on top of iterators.")
         (git-file-name name version))
        (patches
         (search-patches
-         "c++-gsl-find-system-gtest.patch"))
+         "c++-gsl-find-system-gtest.patch"
+         "c++-gsl-move-array-bounds-tests.patch"))
        (sha256
         (base32 "0gbvr48f03830g3154bjhw92b8ggmg6wwh5xyb8nppk9v6w752l0"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (synopsis "Guidelines Support Library")
     (description "c++-gsl contains functions and types that are suggested for
 use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
@@ -158,9 +161,7 @@ use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
                (base32
                 "1rwaxmid9iv65n0y6xlcyxxydsvihjni9ldxpg6pbqz43amp49xx"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -203,7 +204,7 @@ operating system functions.")
              (substitute* "src/unit_tests/unit_tests.cmake"
                (("misc/library_test.cpp") ""))
              #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/rttrorg/rttr/")
     (synopsis "C++ Reflection Library")
     (description
@@ -234,11 +235,9 @@ the name of the library itself, which is written in C++.")
          '("-DWITH_TESTS=ON"            ; To run the test suite
            "-DRCT_RTTI_ENABLED=ON")))
       (native-inputs
-       `(("cppunit" ,cppunit)
-         ("pkg-config" ,pkg-config)))
+       (list cppunit pkg-config))
       (inputs
-       `(("openssl" ,openssl)
-         ("zlib" ,zlib)))
+       (list openssl zlib))
       (home-page "https://github.com/Andersbakken/rct")
       (synopsis "C++ library providing Qt-like APIs on top of the STL")
       (description "Rct is a set of C++ tools that provide nicer (more Qt-like)
@@ -261,7 +260,7 @@ the name of the library itself, which is written in C++.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no tests
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/aseba-community/dashel")
     (synopsis "Data stream helper encapsulation library")
     (description
@@ -289,7 +288,7 @@ combination of these streams.")
      `(#:configure-flags (list "-DBUILD_TESTS=ON")
        #:test-target "xtest"))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/QuantStack/xsimd")
     (synopsis "C++ wrappers for SIMD intrinsics and math implementations")
     (description
@@ -353,7 +352,7 @@ functions, class methods, and stl containers.
                 (modules '((guix build utils)))
                 (snippet '(delete-file-recursively "./test/thirdparty"))))
       (native-inputs
-       `(("catch2" ,catch-framework2-1)))
+       (list catch-framework2-1))
       (build-system cmake-build-system)
       (arguments
        `(#:phases
@@ -365,10 +364,8 @@ functions, class methods, and stl containers.
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (inc (string-append out "/include/fifo_map")))
-                 (with-directory-excursion
-                     (string-append "../" ,name "-" ,version "-checkout")
-                   (install-file "src/fifo_map.hpp" inc)
-                   #t)))))))
+                 (with-directory-excursion "../source"
+                   (install-file "src/fifo_map.hpp" inc))))))))
       (synopsis "FIFO-ordered associative container for C++")
       (description "Fifo_map is a C++ header only library for associative
 container which uses the order in which keys were inserted to the container
@@ -443,7 +440,7 @@ as ordering relation.")
               (base32
                "0nzsjzlvk14dazwh7k2jb1dinb0pv9jbx5jsyn264wvva0y7daiv")))))))
     (inputs
-     `(("fifo-map" ,fifo-map)))
+     (list fifo-map))
     (synopsis "JSON parser and printer library for C++")
     (description "JSON for Modern C++ is a C++ JSON library that provides
 intuitive syntax and trivial integration.")
@@ -464,8 +461,7 @@ intuitive syntax and trivial integration.")
                 "1kd9zl4h6nrsg29hq13vwp4zhfj8sa90vj40726lpw6vxz48k4di"))
               (file-name (git-file-name name version))))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("json-modern-cxx" ,json-modern-cxx)))
+     (list googletest json-modern-cxx))
     (arguments
      `(#:configure-flags
        '("-DBUILD_TESTS=ON")
@@ -500,10 +496,9 @@ tools (containers, algorithms) used by other QuantStack packages.")
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
-     `(("rapidjson" ,rapidjson)))
+     (list rapidjson))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list clang llvm))
     (home-page "https://github.com/MaskRay/ccls")
     (synopsis "C/C++/Objective-C language server")
     (description
@@ -554,11 +549,9 @@ lock-free fixed size queue written in C++11.")
       ;; https://bugs.gnu.org/46562
      '(#:parallel-tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ;; For tests.
-       ("perl" ,perl)))
+     (list autoconf automake libtool
+           ;; For tests.
+           perl))
     (home-page "https://github.com/gperftools/gperftools")
     (synopsis "Multi-threaded malloc() and performance analysis tools for C++")
     (description
@@ -622,11 +615,9 @@ tools:
                  (invoke "make"))))))))
     (native-inputs
      ;; required to build shared lib
-     `(("python" ,python)))
+     (list python))
     (inputs
-     `(("brotli" ,brotli)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list brotli openssl zlib))
     (home-page "https://github.com/yhirose/cpp-httplib")
     (synopsis "C++ HTTP/HTTPS server and client library")
     (description "cpp-httplib is a C++11 single-file cross platform blocking
@@ -659,9 +650,7 @@ library.")
              #t)))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (home-page "https://github.com/cpplint/cpplint")
     (synopsis "Static code checker for C++")
     (description "@code{cpplint} is a command-line tool to check C/C++ files
@@ -691,7 +680,7 @@ and make @code{cpplint} usable in wider contexts.")
       ;; Enable building of shared library.
       #:configure-flags `("-DBUILD_SHARED_LIBS=1")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "Process IO library")
    (description "reproc (Redirected Process) is a C/C++ library that
 simplifies starting, stopping and communicating with external programs.  The
@@ -703,7 +692,7 @@ code and retrieving their output.")
 (define-public sobjectizer
   (package
     (name "sobjectizer")
-    (version "5.6.1")
+    (version "5.7.2.6")
     (source
      (origin
        (method git-fetch)
@@ -711,7 +700,7 @@ code and retrieving their output.")
              (url "https://github.com/Stiffstream/sobjectizer")
              (commit (string-append "v." version))))
        (sha256
-        (base32 "0jfai7sqxnnjkms38krm7mssj5l79nb3pllkbyj4j581a7l5j6l5"))
+        (base32 "0n6smpjkkkw0xab8wcpy3p0dpw2v9sxgwl6azl3am6abmv4mff12"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -759,7 +748,8 @@ other values of screen objects, by setting their values as the tween starting
 point and then, after each tween step, plugging back the result.")
     (license license:expat)))
 
-(define-public abseil-cpp
+;;; This older LTS release is kept for tensorflow.
+(define-public abseil-cpp-20200923.3
   (package
     (name "abseil-cpp")
     (version "20200923.3")
@@ -772,11 +762,8 @@ point and then, after each tween step, plugging back the result.")
               (sha256
                (base32
                 "1p4djhm1f011ficbjjxx3n8428p8481p20j4glpaawnpsi362hkl"))
-              ;; Remove after next googletest release and update.
               (patches
-               (search-patches
-                "abseil-cpp-fix-gtest.patch"
-                "abseil-cpp-fix-strerror_test.patch"))))
+               (search-patches "abseil-cpp-fix-strerror_test.patch"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
@@ -801,7 +788,7 @@ point and then, after each tween step, plugging back the result.")
                (("check_target\\(gtest_main\\)") "")
                (("check_target\\(gmock\\)") "")))))))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://abseil.io")
     (synopsis "Augmented C++ standard library")
     (description "Abseil is a collection of C++ library code designed to
@@ -809,6 +796,26 @@ augment the C++ standard library.  The Abseil library code is collected from
 Google's C++ code base.")
     (license license:asl2.0)))
 
+(define-public abseil-cpp
+  (let ((base abseil-cpp-20200923.3))
+    (package/inherit base
+      (name "abseil-cpp")
+      (version "20210324.2")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/abseil/abseil-cpp")
+                      (commit version)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0g9rbhk3mwjdfxk7cscd04vm8fphd5flz9yykpgvyy1nwa34zk3x"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:configure-flags flags)
+          `(cons* "-DBUILD_TESTING=ON"
+                  (delete "-DABSL_RUN_TESTS=ON" ,flags))))))))
+
 (define-public pegtl
   (package
     (name "pegtl")
@@ -871,26 +878,23 @@ standard GNU style syntax for options.")
        ;; Leave tests disabled; see https://github.com/facebook/folly/issues/1456
        #:tests? #f))
     (propagated-inputs
-     `(("boost" ,boost)
-       ("gflags" ,gflags)
-       ("glog" ,glog)
-       ("liburing" ,liburing)))
+     (list boost gflags glog liburing))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("double-conversion" ,double-conversion)
-       ("fmt" ,fmt)
-       ("libaio" ,libaio)
-       ("libevent" ,libevent)
-       ("libiberty" ,libiberty)
-       ("libsodium" ,libsodium)
-       ("libunwind" ,libunwind)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           double-conversion
+           fmt
+           libaio
+           libevent
+           libiberty
+           libsodium
+           libunwind
+           lz4
+           openssl
+           snappy
+           zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (synopsis "Collection of C++ components complementing the standard library")
     (description
      "Folly (acronymed loosely after Facebook Open Source Library) is a library
@@ -927,12 +931,12 @@ of C++14 components that complements @code{std} and Boost.")
                             (assoc-ref %build-inputs "aws-c-common"))
                "-DENABLE_NET_TESTS=OFF")))
       (propagated-inputs
-       `(("aws-c-auth" ,aws-c-auth)
-         ("aws-c-cal" ,aws-c-cal)
-         ("aws-c-event-stream" ,aws-c-event-stream)
-         ("aws-c-http" ,aws-c-http)
-         ("aws-c-mqtt" ,aws-c-mqtt)
-         ("aws-c-s3" ,aws-c-s3)))
+       (list aws-c-auth
+             aws-c-cal
+             aws-c-event-stream
+             aws-c-http
+             aws-c-mqtt
+             aws-c-s3))
       (synopsis "C++ wrapper for Amazon Web Services C libraries")
       (description "The AWS Common Runtime (CRT) library provides a C++ wrapper
 implementation for the following @acronym{AWS,Amazon Web Services} C libraries:
@@ -966,12 +970,9 @@ aws-c-http, aws-c-io, aws-c-mqtt, aws-checksums, and s2n.")
              (string-append "-DCMAKE_PREFIX_PATH="
                             (assoc-ref %build-inputs "aws-c-common")))))
     (propagated-inputs
-     `(("aws-crt-cpp" ,aws-crt-cpp)))
+     (list aws-crt-cpp))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("pulseaudio" ,pulseaudio)
-       ("zlib" ,zlib)))
+     (list curl openssl pulseaudio zlib))
     (synopsis "Amazon Web Services SDK for C++")
     (description
      "The AWS SDK for C++ provides a C++11 interface to the @acronym{AWS,Amazon
@@ -1007,7 +1008,7 @@ services including database, analytic, and machine learning technologies.")
            (lambda _
              (invoke "./tests"))))))
     (native-inputs
-     `(("catch2" ,catch-framework2)))
+     (list catch-framework2))
     (synopsis "C++11/14/17 std::expected with functional-style extensions")
     (description "@code{std::expected} is proposed as the preferred way to
 represent objects which will either have an expected value, or an unexpected
@@ -1034,7 +1035,7 @@ provides a number of utilities to make coding with expected cleaner.")
                 "1x47radgsifgz3vn2561mlvf4cq46ii33cpyqf01znm56iirwq89"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("gcc" ,gcc-9)))
+     (list gcc-9))
     (synopsis "C++17 header only library for compile time reflection of enums")
     (description "Magic Enum offers static reflection of enums, with
 conversions to and from strings, iteration and related functionality.")
@@ -1080,8 +1081,7 @@ conversions to and from strings, iteration and related functionality.")
                (("^    PROPERTIES FOLDER \"Extern\"\\)") ""))
              #t)))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("googletest" ,googletest)))
+     (list doxygen googletest))
     (synopsis "Command line parser for C++11")
     (description
      "CLI11 is a command line parser for C++11 and beyond that provides a rich
@@ -1107,7 +1107,7 @@ feature set with a simple and intuitive interface.")
      '(#:configure-flags
        '("-DCAF_ENABLE_EXAMPLES=OFF")))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "C++ implementation of the actor model")
     (description "The C++ Actor Framework (CAF) offers a high-level C++17
 programming environment using the actor model for concurrent, distributed
@@ -1164,9 +1164,7 @@ output randomness while retaining speed, simplicity, and conciseness.")
          (replace 'bootstrap
            (lambda _ (invoke "sh" "bootstrap" "--noconfigure"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://madmurphy.github.io/libconfini/html/index.html")
     (synopsis "INI file parser")
     (description "@code{libconfini} is an INI file parser library written in
@@ -1203,8 +1201,8 @@ almost every type of file containing key/value pairs.")
                                ;;"--with-external-boost"
                                "--with-external-expat")))
     (inputs
-     `(;;("boost ,boost)
-       ("expat" ,expat)))
+     (list ;;("boost ,boost)
+           expat))
     (home-page "https://www.codesynthesis.com/projects/libcutl/")
     (synopsis "C++ utility library with generic and independent components")
     (description "libcutl is a C++ utility library.  It contains a collection
@@ -1249,7 +1247,7 @@ pointers, containers, compiler building blocks, etc.")
                        #:include-regexp ("\\.so$")))
                     args))))))
     (native-inputs
-     `(("build" ,build)))
+     (list build))
     (inputs
      `(("libcutl" ,libcutl)
        ("libxerces-c" ,xerces-c)))
@@ -1297,9 +1295,9 @@ and a traversal mechanism.")
                 (string-append "edge_dispatcher::" all)))))
          (delete 'configure))))
     (native-inputs
-     `(("build" ,build)))
+     (list build))
     (inputs
-     `(("libcutl" ,libcutl)))
+     (list libcutl))
     (synopsis "C++ Command Line Interface (CLI) definition language")
     (description "@code{cli} is a domain-specific language (DSL) for defining
 command line interfaces of C++ programs.  It allows you to describe the
@@ -1340,16 +1338,13 @@ documentation.")
                                                     ,version)))))
                   (delete 'configure))))
     (native-inputs
-     `(("build" ,build)
-       ("cli" ,cli)))
+     (list build cli))
     (inputs
-     `(("libcutl" ,libcutl)
-       ("libnsl" ,libnsl)
-       ("libxsd-frontend" ,libxsd-frontend)))
+     (list libcutl libnsl libxsd-frontend))
     (propagated-inputs
      ;; The code XSD generates requires the following library at run time;
      ;; propagate it for convenience.
-     `(("xerces-c" ,xerces-c)))
+     (list xerces-c))
     (synopsis "XML Data Binding for C++")
     (description "CodeSynthesis XSD (also known as libxsd or xsdcxx) is an XML
 Schema to C++ data binding compiler.  Provided with an XML instance
@@ -1393,10 +1388,9 @@ of reading and writing XML.")
      `(#:configure-flags '("-DUSE_SYSTEM_GTEST=ON" "-DUSE_SYSTEM_JSON=ON"
                            "-DBUILD_STATIC_LIBS=OFF")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (inputs
-     `(("json-modern-cxx" ,json-modern-cxx)))
+     (list json-modern-cxx))
     (home-page "https://jsonnet.org/")
     (synopsis "Data templating language")
     (description "Jsonnet is a templating language extending JSON
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 8d585f0970..ec6d267c51 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -34,6 +34,7 @@
 ;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Aniket Patil <aniket112.patil@gmail.com>
 ;;; Copyright © 2021 Marcel Schilling <marcel.schilling@uni-luebeck.de>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -145,8 +146,7 @@ files and provide more explicit control over line endings.")
     (properties `((upstream-name . "cachem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastmap" ,r-fastmap)
-       ("r-rlang" ,r-rlang)))
+     (list r-fastmap r-rlang))
     (home-page "https://cachem.r-lib.org/")
     (synopsis "Cache R objects with automatic pruning")
     (description
@@ -198,9 +198,9 @@ etc.")
     (properties `((upstream-name . "datawizard")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)))
+     (list r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://easystats.github.io/datawizard/")
     (synopsis "Easy data wrangling")
     (description
@@ -222,8 +222,8 @@ wrangling backend for the packages in the @code{easystats} ecosystem.")
          "0q6gwd9pqh41f6j5p9jl92aji4p8kx9inffpha93d7jc3ndsfq6q"))))
     (properties `((upstream-name . "diffobj")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-crayon" ,r-crayon)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-crayon))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/brodieG/diffobj")
     (synopsis "Diffs for R objects")
     (description
@@ -265,22 +265,22 @@ Distance (EMD).")
     (properties `((upstream-name . "googledrive")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-uuid" ,r-uuid)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-cli
+           r-gargle
+           r-glue
+           r-httr
+           r-jsonlite
+           r-lifecycle
+           r-magrittr
+           r-pillar
+           r-purrr
+           r-rlang
+           r-tibble
+           r-uuid
+           r-vctrs
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://googledrive.tidyverse.org")
     (synopsis "Interface to Google Drive")
     (description "This package lets you manage Google Drive files from R.")
@@ -300,9 +300,8 @@ Distance (EMD).")
     (properties `((upstream-name . "ids")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-uuid" ,r-uuid)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-openssl r-uuid))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/richfitz/ids")
     (synopsis "Generate random identifiers")
     (description
@@ -324,20 +323,20 @@ pronounceable identifiers.")
     (properties `((upstream-name . "googlesheets4")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-cli" ,r-cli)
-       ("r-curl" ,r-curl)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-googledrive" ,r-googledrive)
-       ("r-httr" ,r-httr)
-       ("r-ids" ,r-ids)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cellranger
+           r-cli
+           r-curl
+           r-gargle
+           r-glue
+           r-googledrive
+           r-httr
+           r-ids
+           r-magrittr
+           r-purrr
+           r-rematch2
+           r-rlang
+           r-tibble
+           r-vctrs))
     (home-page "https://github.com/tidyverse/googlesheets4")
     (synopsis "Access Google Sheets using the Sheets API V4")
     (description
@@ -360,13 +359,13 @@ can read and write both the metadata and the cell data in a Sheet.")
     (properties `((upstream-name . "waldo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-diffobj" ,r-diffobj)
-       ("r-fansi" ,r-fansi)
-       ("r-glue" ,r-glue)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-cli
+           r-diffobj
+           r-fansi
+           r-glue
+           r-rematch2
+           r-rlang
+           r-tibble))
     (home-page "https://github.com/r-lib/waldo")
     (synopsis "Find differences between R objects")
     (description
@@ -390,11 +389,7 @@ easier.")
     (properties `((upstream-name . "rticles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)))
+     (list r-knitr r-rmarkdown r-tinytex r-xfun r-yaml))
     (home-page "https://github.com/rstudio/rticles")
     (synopsis "Article formats for R Markdown")
     (description
@@ -414,8 +409,7 @@ for authoring journal articles and conference submissions.")
                 "1n4vjkagqlm6kw2hilf4gjfcdjad0bcg652j9nl2ygbq3kdnh1vf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-tibble" ,r-tibble)))
+     (list r-dplyr r-tibble))
     (home-page "https://github.com/csgillespie/benchmarkme-data")
     (synopsis "Data set for the @code{benchmarkme} package")
     (description "This package contains the data set for the crowd-sourced
@@ -434,15 +428,15 @@ benchmarks from running the @code{benchmarkme} package.")
                 "0ymgsxzrvnpyvs0cff09d3lrkl12qyqx5bwammsc4vgl5ng9p69p"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-benchmarkmedata" ,r-benchmarkmedata)
-       ("r-doparallel" ,r-doparallel)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-httr" ,r-httr)
-       ("r-matrix" ,r-matrix)
-       ("r-tibble" ,r-tibble)))
+     (list r-benchmarkmedata
+           r-doparallel
+           r-dplyr
+           r-foreach
+           r-httr
+           r-matrix
+           r-tibble))
     (home-page "https://csgillespie.github.io/benchmarkme/")
     (synopsis "Crowd-sourced system benchmarks")
     (description "This package provides functionality to benchmark your CPU
@@ -504,11 +498,9 @@ degree elevation and curve fitting.")
      `(("node" ,libnode)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-curl r-jsonlite r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://jeroen.cran.dev/V8")
     (synopsis "Embedded JavaScript and WebAssembly engine for R")
     (description
@@ -530,7 +522,7 @@ WebAssembly engine.")
     (properties `((upstream-name . "DOT")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-v8" ,r-v8)))
+     (list r-v8))
     (home-page "http://haghish.com/dot")
     (synopsis "Render and Export DOT Graphs in R")
     (description
@@ -553,7 +545,7 @@ programming packages such as @code{knitr} and @code{rmarkdown}.")
          "1ywa4kipwc2d7na6iiz3wzdah99h6aynnh74yxl3nzl40xxlgbgz"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/mdlincoln/clipr")
     (synopsis "Read and write from the system clipboard")
     (description
@@ -573,7 +565,7 @@ the system clipboards.")
                 "18vjywalpgzqyk66gajb8x1yp8avdaaf11ykynld9fd8cy82bgmp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "http://zoo.R-Forge.R-project.org/")
     (synopsis "S3 infrastructure for regular and irregular time series")
     (description "This package contains an S3 class with methods for totally
@@ -594,8 +586,7 @@ series of numeric vectors/matrices and factors.")
     (properties `((upstream-name . "fontawesome")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-rlang" ,r-rlang)))
+     (list r-htmltools r-rlang))
     (home-page "https://github.com/rstudio/fontawesome")
     (synopsis "Easily work with Font Awesome icons")
     (description
@@ -644,7 +635,7 @@ Currently handlers are provided for CDK, MOE and BCI fingerprint data.")
         (base32 "0kv46g21ndxchg3q8ynq7hjjkh6i2zlc21axn5y1jjzigrw047ii"))))
     (properties `((upstream-name . "fpeek")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/davidgohel/fpeek")
     (synopsis "Check text files content at a glance")
     (description
@@ -667,14 +658,14 @@ in good performances with large files.")
    (properties `((upstream-name . "ggalluvial")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-dplyr" ,r-dplyr)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-lazyeval" ,r-lazyeval)
-      ("r-rlang" ,r-rlang)
-      ("r-tidyr" ,r-tidyr)
-      ("r-tidyselect" ,r-tidyselect)))
+    (list r-dplyr
+          r-ggplot2
+          r-lazyeval
+          r-rlang
+          r-tidyr
+          r-tidyselect))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "http://corybrunson.github.io/ggalluvial/")
    (synopsis "Alluvial plots for ggplot2")
    (description "This package provides alluvial plots for @code{ggplot2}.
@@ -697,22 +688,22 @@ variables.")
     (properties `((upstream-name . "ggpp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-gridextra" ,r-gridextra)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-polynom" ,r-polynom)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-ggplot2
+           r-glue
+           r-gridextra
+           r-lubridate
+           r-magrittr
+           r-mass
+           r-polynom
+           r-rlang
+           r-scales
+           r-stringr
+           r-tibble
+           r-xts
+           r-zoo))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://docs.r4photobiology.info/ggpp/")
     (synopsis "Grammar extensions to ggplot2")
     (description
@@ -762,22 +753,22 @@ axis} (SMA), and @dfn{ranged major axis} (RMA).")
                 "01dnr2a33zmgi0gjsxlcz4hp68b18xsi8z1lkhgcla5im59qf9xi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpp" ,r-ggpp)
-       ("r-lmodel2" ,r-lmodel2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-mass" ,r-mass)
-       ("r-plyr" ,r-plyr)
-       ("r-polynom" ,r-polynom)
-       ("r-quantreg" ,r-quantreg)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-splus2r" ,r-splus2r)
-       ("r-tibble" ,r-tibble)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-ggplot2
+           r-ggpp
+           r-lmodel2
+           r-lubridate
+           r-mass
+           r-plyr
+           r-polynom
+           r-quantreg
+           r-rlang
+           r-scales
+           r-splus2r
+           r-tibble))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://www.r4photobiology.info/")
     (synopsis "Miscellaneous Extensions to @code{ggplot2}")
     (description "This package provides extensions to @code{ggplot2},
@@ -798,8 +789,7 @@ respecting the grammar of its graphics paradigm.")
     (properties `((upstream-name . "gProfileR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcurl" ,r-rcurl)))
+     (list r-plyr r-rcurl))
     (home-page "https://cran.r-project.org/web/packages/gProfileR/")
     (synopsis "Interface to the g:Profiler toolkit")
     (description
@@ -822,16 +812,16 @@ organisms via the @code{g:Profiler} toolkit.")
     (properties `((upstream-name . "gprofiler2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crosstalk" ,r-crosstalk)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-plotly" ,r-plotly)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tidyr" ,r-tidyr)
-       ("r-viridislite" ,r-viridislite)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-crosstalk
+           r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-jsonlite
+           r-plotly
+           r-rcurl
+           r-tidyr
+           r-viridislite))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gprofiler2/")
     (synopsis "Interface to the g:Profiler toolset")
     (description
@@ -869,9 +859,8 @@ higher.")
     (properties `((upstream-name . "oenb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-xml" ,r-xml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dplyr r-xml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/franzmohr/oenb")
     (synopsis "Tools for the OeNB Data Web Service")
     (description
@@ -892,13 +881,13 @@ higher.")
         (base32 "019ps0njjc0rzrjygqiyn8b9vp0c3c0jd56h1yi19wzi49jvdcj0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-farver" ,r-farver)
-       ("r-labeling" ,r-labeling)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-munsell" ,r-munsell)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-r6" ,r-r6)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-farver
+           r-labeling
+           r-lifecycle
+           r-munsell
+           r-rcolorbrewer
+           r-r6
+           r-viridislite))
     (home-page "https://github.com/hadley/scales")
     (synopsis "Scale functions for visualization")
     (description
@@ -919,7 +908,7 @@ legends.")
                "0z7gngd6h83cpjhq1vg75wvzhdjbgjh7gj5d4zvvi9gd2lmagjcy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-remotes" ,r-remotes)))
+     (list r-remotes))
     (home-page "https://github.com/trinker/pacman")
     (synopsis "Package Management Tool")
     (description "This package provides tools to more conveniently perform
@@ -942,9 +931,7 @@ functions which can speed up workflow.")
          "1hdh74az3vyzz6dqa311rhxdm74n46lyr03p862kn80p0kp9d7ap"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gtable" ,r-gtable)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-scales" ,r-scales)))
+     (list r-gtable r-rcolorbrewer r-scales))
     (home-page "https://cran.r-project.org/web/packages/pheatmap")
     (synopsis "Pretty heatmaps")
     (description
@@ -985,7 +972,7 @@ Chroma.js Color Palette Helper.  See @url{https://gka.github.io/palettes}.")
                 "0n602jssl6rf596nwm6hbl7s9vdlqi20w8mrhxicj373mw5v22m8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/ecp/")
     (synopsis "Multiple change-point analysis of multivariate data")
     (description
@@ -1010,7 +997,7 @@ information.")
          "0n0mm9jngklv7j9wa64jdji035z0smmnsp2dfwcz9isrxgjnc0m9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rlang" ,r-rlang)))
+     (list r-rlang))
     (home-page "https://github.com/hadley/ellipsis")
     (synopsis "Tools for working with additional arguments")
     (description
@@ -1055,8 +1042,7 @@ functions are simplified but can be faster or have other advantages.")
     (properties `((upstream-name . "Matrix.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-grr" ,r-grr)
-       ("r-matrix" ,r-matrix)))
+     (list r-grr r-matrix))
     (home-page "https://github.com/cvarrichio/Matrix.utils")
     (synopsis
      "Data.frame-Like Operations on Sparse and Dense Matrix Objects")
@@ -1078,13 +1064,13 @@ objects.")
               "0yg07fdd1sbjfhhxn1dqgph2vzqyq7l52cdk5iq2a2zy1vh176yg"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-lattice" ,r-lattice)
-      ("r-matrix" ,r-matrix)
-      ("r-nnls" ,r-nnls)
-      ("r-partykit" ,r-partykit)
-      ("r-quadprog" ,r-quadprog)
-      ("r-stabs" ,r-stabs)
-      ("r-survival" ,r-survival)))
+    (list r-lattice
+          r-matrix
+          r-nnls
+          r-partykit
+          r-quadprog
+          r-stabs
+          r-survival))
    (home-page "https://github.com/boost-R/mboost")
    (synopsis "Model-based boosting")
    (description
@@ -1108,10 +1094,9 @@ high-dimensional data.")
    (properties `((upstream-name . "shadowtext")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-ggplot2" ,r-ggplot2)
-      ("r-scales" ,r-scales)))
+    (list r-ggplot2 r-scales))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/GuangchuangYu/shadowtext/")
    (synopsis "Shadow text grob and layer")
    (description "This package implements @code{shadowtextGrob()} for
@@ -1157,15 +1142,15 @@ mechanism.")
    (properties `((upstream-name . "ashr")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-etrunct" ,r-etrunct)
-      ("r-invgamma" ,r-invgamma)
-      ("r-matrix" ,r-matrix)
-      ("r-mixsqp" ,r-mixsqp)
-      ("r-rcpp" ,r-rcpp)
-      ("r-squarem" ,r-squarem)
-      ("r-truncnorm" ,r-truncnorm)))
+    (list r-etrunct
+          r-invgamma
+          r-matrix
+          r-mixsqp
+          r-rcpp
+          r-squarem
+          r-truncnorm))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/stephens999/ashr")
    (synopsis "Methods for adaptive shrinkage, using empirical bayes")
    (description "This package implements an empirical Bayes approach for
@@ -1184,7 +1169,7 @@ large-scale hypothesis testing and false discovery rate estimation.")
         (base32
          "07q0ik8jzk44vpwh48rr3fnpd7dzsdhjjsl4l850rffv3dyq4h6v"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-sys" ,r-sys)))
+    (propagated-inputs (list r-sys))
     (home-page "https://github.com/jeroen/askpass")
     (synopsis "Safe password entry for R")
     (description
@@ -1229,14 +1214,10 @@ Analysis Approach Using R.  Chapman-Hall, 2019,
          "0aj6m9l1vkh32sar6fyvq4p8j4h2f2f347w1300qnzgaa5lmhfz6"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)             ; needed for vignettes
-       ("gfortran" ,gfortran)))
+     (list r-knitr ; needed for vignettes
+           gfortran))
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-permute" ,r-permute)))
+     (list r-cluster r-lattice r-mass r-mgcv r-permute))
     (home-page "https://cran.r-project.org/web/packages/vegan")
     (synopsis "Functions for community ecology")
     (description
@@ -1259,37 +1240,37 @@ data types as well.")
          "0ck6xmsw5p168jmw2fqv79fzfnw5jckfra7mfii261j6kl89bkw3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-dbplyr" ,r-dbplyr)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dtplyr" ,r-dtplyr)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-googledrive" ,r-googledrive)
-       ("r-googlesheets4" ,r-googlesheets4)
-       ("r-haven" ,r-haven)
-       ("r-hms" ,r-hms)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-modelr" ,r-modelr)
-       ("r-pillar" ,r-pillar)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-reprex" ,r-reprex)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-broom
+           r-cli
+           r-crayon
+           r-dbplyr
+           r-dplyr
+           r-dtplyr
+           r-forcats
+           r-ggplot2
+           r-googledrive
+           r-googlesheets4
+           r-haven
+           r-hms
+           r-httr
+           r-jsonlite
+           r-lubridate
+           r-magrittr
+           r-modelr
+           r-pillar
+           r-purrr
+           r-readr
+           r-readxl
+           r-reprex
+           r-rlang
+           r-rstudioapi
+           r-rvest
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://tidyverse.tidyverse.org")
     (synopsis "Install and load packages from the \"Tidyverse\"")
     (description
@@ -1311,15 +1292,15 @@ single step.")
         (base32 "1905vxgnj3q09l1wf6rwxpbpydznp06nbkrclnc05j2415z4gfw9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-selectr" ,r-selectr)
-       ("r-tibble" ,r-tibble)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr
+           r-lifecycle
+           r-magrittr
+           r-rlang
+           r-selectr
+           r-tibble
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/rvest")
     (synopsis "Simple web scraping for R")
     (description
@@ -1340,8 +1321,7 @@ scraping tasks, inspired by libraries like @code{BeautifulSoup}.")
         (base32 "09y1n3iy297g49xlpl7xrjpwgnm57pskx5991lyfcpizbz8ax22m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)
-       ("r-r6" ,r-r6)))
+     (list r-stringr r-r6))
     (home-page "https://sjp.co.nz/projects/selectr/")
     (synopsis "Translate CSS selectors to XPath expressions")
     (description
@@ -1365,18 +1345,18 @@ package is a port of the Python package @code{cssselect}.")
          "09k4rasp7mz6n796dsklcbc5l7prljiznrm7fra16qybr9kqcv8f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-fs" ,r-fs)
-       ("r-glue" ,r-glue)
-       ("r-knitr" ,r-knitr)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-clipr
+           r-fs
+           r-glue
+           r-knitr
+           r-rlang
+           r-rmarkdown
+           r-rstudioapi
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/reprex")
     (synopsis "Prepare reproducible R code examples for sharing")
     (description
@@ -1400,8 +1380,7 @@ such as copy/paste from an R session.")
               "0ss750frzvj0bm1w7zblmcsjpszhnbffwlkaw31sm003lbx9hy58"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-gplots" ,r-gplots)
-      ("r-rcpp" ,r-rcpp)))
+    (list r-gplots r-rcpp))
    (home-page "https://cran.r-project.org/web/packages/ReorderCluster")
    (synopsis "Reordering the dendrogram according to the class labels")
    (description "This package provides tools for performing the leaf reordering
@@ -1422,8 +1401,7 @@ same time tries to group instances from the same class together.")
          "02inaf3c7b0hikii7p2zwaphrq5myv4in92d9jxd1ilmhla5awnn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-processx" ,r-processx)))
+     (list r-r6 r-processx))
     (home-page "https://github.com/r-lib/callr#readme")
     (synopsis "Call R from R")
     (description
@@ -1443,10 +1421,7 @@ that.")
                (base32
                 "1pacvhw5m4fsk3ysbal50fdqbvlaz8ywyqp6bn1wh42wipqbb2i8"))))
     (propagated-inputs
-     `(("r-nnet" ,r-nnet)
-       ("r-nlme" ,r-nlme)
-       ("r-mass" ,r-mass)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-nnet r-nlme r-mass r-rsolnp))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/depmixS4/")
     (synopsis "Dependent Mixture Models")
@@ -1468,10 +1443,7 @@ mixture models.")
          "15mambxr8c7k2ikdfsl1w3vxvm54dsnk0cl1qvks6iig7rql3d14"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-progress" ,r-progress)
-       ("r-rcpp" ,r-rcpp)
-       ("r-tibble" ,r-tibble)))
+     (list r-cellranger r-progress r-rcpp r-tibble))
     (home-page "https://readxl.tidyverse.org")
     (synopsis "Read Excel files")
     (description
@@ -1494,12 +1466,12 @@ the embedded @code{RapidXML} C++ library.")
                 "0pni9v3nradvy8sp2m07903vc7z610xrh426lf19dxss12kgrfi8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-formula" ,r-formula)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-partykit" ,r-partykit)
-       ("r-sandwich" ,r-sandwich)
-       ("r-survival" ,r-survival)))
+     (list r-formula
+           r-ggplot2
+           r-gridextra
+           r-partykit
+           r-sandwich
+           r-survival))
     (home-page "https://cran.r-project.org/web/packages/model4you/")
     (synopsis "Stratified and personalised models based on trees and forests")
     (description
@@ -1525,14 +1497,14 @@ the personalised models.")
          "1i31nff7bqibk6r4hhd4j1vzwbyaf8493v0bjaagn36njmysfnw2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-broom
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-vctrs))
     (home-page "https://github.com/tidyverse/modelr")
     (synopsis "Helper functions for modelling in pipelines")
     (description
@@ -1571,7 +1543,7 @@ models.")
               "05dm3nl0ffsz2ziw3bz5bivyxk7r5bxs8xhky3hz660qaqzd51ki"))))
    (build-system r-build-system)
    (native-inputs
-    `(("gfortran" ,gfortran)))
+    (list gfortran))
    (home-page "https://cran.r-project.org/web/packages/HiddenMarkov/")
    (synopsis "Hidden markov models for R")
    (description "This package contains functions for the analysis of Discrete
@@ -1613,13 +1585,9 @@ Zucchini.")
                (("uv_pipe_init\\(pLoop, &pSocket->handle\\.pipe, true\\);")
                 "uv_pipe_init(pLoop, &pSocket->handle.pipe, 0);")))))))
     (inputs
-     `(("libuv" ,libuv)
-       ("zlib" ,zlib)))
+     (list libuv zlib))
     (propagated-inputs
-     `(("r-later" ,r-later)
-       ("r-promises" ,r-promises)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-later r-promises r-r6 r-rcpp))
     (home-page "https://github.com/rstudio/httpuv")
     (synopsis "HTTP and WebSocket server library for R")
     (description
@@ -1644,7 +1612,7 @@ particularly easy to create complete web applications using httpuv alone.")
                 "1lhzcpz9clwq04i5m6jzkvw9x03pwlqrixv4l9xzchjr8d84nd86"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://arxiv.org/abs/1403.2805")
     (synopsis "Robust, high performance JSON parser and generator for R")
     (description
@@ -1670,10 +1638,7 @@ in systems and applications.")
                 "11x0857m3xzdbzr4z0vx4fcdk36arfagyf2qgamvprich0qisknr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-xfun" ,r-xfun)))
+     (list r-httpuv r-jsonlite r-mime r-xfun))
     (home-page "https://github.com/yihui/servr")
     (synopsis "Simple HTTP server to serve static files or dynamic documents")
     (description
@@ -1717,10 +1682,7 @@ a list of p-values.")
                 "1yv74ydyqm28gfhimmr7825sj1iaawpwsnzq05c2ma756q2dbivx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)
-       ("r-fastmap" ,r-fastmap)
-       ("r-rlang" ,r-rlang)))
+     (list r-base64enc r-digest r-fastmap r-rlang))
     (home-page "https://cran.r-project.org/web/packages/htmltools")
     (synopsis "R tools for HTML")
     (description
@@ -1739,11 +1701,9 @@ a list of p-values.")
                 "1hgz8sx8xrvfcdwa4q15k942w4qsqg8lyxbbf7qyfzbi807wcgqs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-yaml" ,r-yaml)))
+     (list r-htmltools r-jsonlite r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ramnathv/htmlwidgets")
     (synopsis "HTML Widgets for R")
     (description
@@ -1765,15 +1725,15 @@ applications.")
     (properties `((upstream-name . "htmlTable")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringr" ,r-stringr)))
+     (list r-checkmate
+           r-htmltools
+           r-htmlwidgets
+           r-knitr
+           r-magrittr
+           r-rstudioapi
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://gforge.se/packages/")
     (synopsis "Advanced tables for Markdown/HTML")
     (description
@@ -1818,8 +1778,7 @@ if(_ca_bundle != NULL) { curl_easy_setopt(handle, CURLOPT_CAINFO, _ca_bundle); }
      `(("libcurl" ,curl)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroenooms/curl")
     (synopsis "HTTP client for R")
     (description
@@ -1908,7 +1867,7 @@ data structures in C++.")
     (properties `((upstream-name . "fastGHQuad")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/awblocker/fastGHQuad")
     (synopsis "Fast Rcpp implementation of Gauss-Hermite Quadrature")
     (description
@@ -1930,16 +1889,16 @@ rules and utility functions for adaptive GH quadrature.")
     (properties `((upstream-name . "rstpm2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmle" ,r-bbmle)
-       ("r-bh" ,r-bh)
-       ("r-desolve" ,r-desolve)
-       ("r-fastghquad" ,r-fastghquad)
-       ("r-mgcv" ,r-mgcv)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-bbmle
+           r-bh
+           r-desolve
+           r-fastghquad
+           r-mgcv
+           r-rcpp
+           r-rcpparmadillo
+           r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/mclements/rstpm2")
     (synopsis "Link-based survival models")
     (description
@@ -1995,9 +1954,9 @@ multi-state models.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)))
+     (list r-htmltools))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://cran.r-project.org/package=jquerylib")
     (synopsis "Obtain jQuery as an HTML dependency object")
     (description
@@ -2022,12 +1981,8 @@ jQuery.")
     (properties `((upstream-name . "sass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fs" ,r-fs)
-       ("r-htmltools" ,r-htmltools)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-fs r-htmltools r-r6 r-rappdirs r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/rstudio/sass")
     (synopsis "Syntactically Awesome Style Sheets (SASS)")
     (description
@@ -2089,11 +2044,7 @@ language, which is stable, powerful, and CSS compatible.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rlang" ,r-rlang)
-       ("r-sass" ,r-sass)))
+     (list r-htmltools r-jquerylib r-jsonlite r-rlang r-sass))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("js-bootstrap4-bundle"
@@ -2171,17 +2122,17 @@ previewing themes in real time.")
                ;; replace them.
                (with-directory-excursion "inst/www/shared"
                  (replace-file "strftime/strftime-min.js"
-                               (string-append (assoc-ref inputs "js-strftime")
-                                              "/share/javascript/strftime.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/strftime.min.js"))
                  (replace-file "highlight/highlight.pack.js"
-                               (string-append (assoc-ref inputs "js-highlight")
-                                              "/share/javascript/highlight.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/highlight.min.js"))
                  (replace-file "datatables/js/jquery.dataTables.min.js"
-                               (string-append (assoc-ref inputs "js-datatables")
-                                              "/share/javascript/jquery.dataTables.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/jquery.dataTables.min.js"))
                  (replace-file "selectize/js/selectize.min.js"
-                               (string-append (assoc-ref inputs "js-selectize")
-                                              "/share/javascript/selectize.min.js"))
+                               (search-input-file inputs
+                                                  "/share/javascript/selectize.min.js"))
                  (for-each (match-lambda
                              ((source . target)
                               (minify source #:target target)))
@@ -2206,31 +2157,28 @@ previewing themes in real time.")
                              ("showdown/src/showdown.js" .
                               "showdown/compressed/showdown.js"))))))))))
     (propagated-inputs
-     `(("r-bslib" ,r-bslib)
-       ("r-cachem" ,r-cachem)
-       ("r-commonmark" ,r-commonmark)
-       ("r-crayon" ,r-crayon)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fastmap" ,r-fastmap)
-       ("r-fontawesome" ,r-fontawesome)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-later" ,r-later)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-mime" ,r-mime)
-       ("r-promises" ,r-promises)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-sourcetools" ,r-sourcetools)
-       ("r-withr" ,r-withr)
-       ("r-xtable" ,r-xtable)))
+     (list r-bslib
+           r-cachem
+           r-commonmark
+           r-crayon
+           r-ellipsis
+           r-fastmap
+           r-fontawesome
+           r-glue
+           r-htmltools
+           r-httpuv
+           r-jsonlite
+           r-later
+           r-lifecycle
+           r-mime
+           r-promises
+           r-r6
+           r-rlang
+           r-sourcetools
+           r-withr
+           r-xtable))
     (inputs
-     `(("js-datatables" ,js-datatables)
-       ("js-selectize" ,js-selectize)
-       ("js-strftime" ,js-strftime)
-       ("js-highlight" ,js-highlight)))
+     (list js-datatables js-selectize js-strftime js-highlight))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("gfortran" ,gfortran)
@@ -2285,8 +2233,8 @@ responsive, and powerful applications with minimal effort.")
          (add-after 'unpack 'replace-minified-javascript
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "inst/www/jsTree-3.3.7/"
-               (symlink (string-append (assoc-ref inputs "js-requirejs")
-                                       "/share/javascript/require.min.js")
+               (symlink (search-input-file inputs
+                                           "/share/javascript/require.min.js")
                         "libs/require.js")
                (call-with-values
                    (lambda ()
@@ -2306,13 +2254,9 @@ responsive, and powerful applications with minimal effort.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-promises" ,r-promises)
-       ("r-shiny" ,r-shiny)
-       ("r-stringr" ,r-stringr)))
+     (list r-htmlwidgets r-jsonlite r-promises r-shiny r-stringr))
     (inputs
-     `(("js-requirejs" ,js-requirejs)))
+     (list js-requirejs))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-jquery"
@@ -2356,11 +2300,9 @@ supports interactive trees, to enable rich, editable trees in Shiny.")
                  (invoke "esbuild" source "--minify"
                          (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-promises" ,r-promises)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-promises r-shiny))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://rstudio.github.io/shinydashboard/")
     (synopsis "Create dashboards with shiny")
     (description "This package provides an extension to the Shiny web
@@ -2383,11 +2325,7 @@ application framework for R, making it easy to create attractive dashboards.")
     (properties `((upstream-name . "shinyFiles")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fs" ,r-fs)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)
-       ("r-tibble" ,r-tibble)))
+     (list r-fs r-htmltools r-jsonlite r-shiny r-tibble))
     (home-page "https://github.com/thomasp85/shinyFiles")
     (synopsis "Server-side file system viewer for Shiny")
     (description
@@ -2411,7 +2349,7 @@ well as file saving is available.")
          "0qr9bfxw8afxns44i2j4msignf6g5qb2nzpay2lpv343rrlqbmip"))))
     (properties `((upstream-name . "shinythemes")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-shiny" ,r-shiny)))
+    (propagated-inputs (list r-shiny))
     (home-page "https://rstudio.github.io/shinythemes/")
     (synopsis "Themes for Shiny")
     (description
@@ -2468,10 +2406,7 @@ Bootstrap themes, which are packaged for use with Shiny applications.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-htmltools r-rlang r-tidyr))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("d3.v3.js"
@@ -2539,10 +2474,7 @@ R objects into the JSON format that the d3.js library expects.")
            "0jrcnfax321pszbpjdifnkbrgbjr43bjzvlzv1p5a8wskksqwiyx"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-d3r" ,r-d3r)
-         ("r-htmlwidgets" ,r-htmlwidgets)
-         ("r-shiny" ,r-shiny)
-         ("r-magrittr" ,r-magrittr)))
+       (list r-d3r r-htmlwidgets r-shiny r-magrittr))
       (home-page "https://github.com/fbreitwieser/sankeyD3")
       (synopsis "Sankey network graphs from R")
       (description
@@ -2587,8 +2519,7 @@ from Wes Anderson movies.")
     (properties `((upstream-name . "gg.gap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-ggplot2" ,r-ggplot2)))
+     (list r-cowplot r-ggplot2))
     (home-page "https://github.com/ChrisLou-bioinfo/gg.gap")
     (synopsis "Define segments on the y-axis for ggplot2")
     (description
@@ -2641,9 +2572,7 @@ in a ggplot2 plot.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-knitr r-shiny))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("js-requirejs"
@@ -2685,10 +2614,7 @@ contained in the navigation bar.")
     (properties `((upstream-name . "spelling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-commonmark" ,r-commonmark)
-       ("r-hunspell" ,r-hunspell)
-       ("r-knitr" ,r-knitr)
-       ("r-xml2" ,r-xml2)))
+     (list r-commonmark r-hunspell r-knitr r-xml2))
     (home-page "https://docs.ropensci.org/spelling/")
     (synopsis "Tools for spell checking in R")
     (description
@@ -2714,10 +2640,7 @@ punctuation.")
          "180y7mhpj17axpadwhh7s0qvrpdnag7g977vk256l96d6nmvlds2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-r6" ,r-r6)))
+     (list r-htmltools r-jsonlite r-lazyeval r-r6))
     (home-page "https://rstudio.github.io/crosstalk/")
     (synopsis "Inter-widget interactivity for HTML widgets")
     (description
@@ -2739,7 +2662,7 @@ files).  It currently supports linked brushing and filtering.")
          "00s9a0kr9rwxvlq433daxjk4ji8m0w60hjdprf502msw9kxfrx00"))))
     (properties `((upstream-name . "Rook")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-brew" ,r-brew)))
+    (propagated-inputs (list r-brew))
     (home-page "https://cran.r-project.org/web/packages/Rook")
     (synopsis "Web server interface for R")
     (description
@@ -2764,8 +2687,7 @@ named elements: the @code{status}, the @code{headers}, and the @code{body}.")
     (properties `((upstream-name . "miniUI")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-shiny))
     (home-page "https://cran.r-project.org/web/packages/miniUI/")
     (synopsis "Shiny UI widgets for small screens")
     (description
@@ -2786,9 +2708,7 @@ work well on small screens.")
          "1gxd0h2m56sjjlzn4dry6s13nddxc4l5i11gsvavaf2dwbahdzsh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hms" ,r-hms)
-       ("r-rcpp" ,r-rcpp)
-       ("r-tibble" ,r-tibble)))
+     (list r-hms r-rcpp r-tibble))
     (home-page "https://github.com/wesm/feather")
     (synopsis "R Bindings to the Feather API")
     (description "Read and write feather files, a lightweight binary columnar
@@ -2826,7 +2746,7 @@ Projection code and larger maps are in separate packages (@code{mapproj} and
         (base32
          "0nscsfq8md6ri9258xz57c3dj81wdl6kdwf4a9qcrwwbn20i427h"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-maps" ,r-maps)))
+    (propagated-inputs (list r-maps))
     (home-page "https://cran.r-project.org/web/packages/mapproj")
     (synopsis "Map projection in R")
     (description "This package converts latitude/longitude into projected
@@ -2850,8 +2770,7 @@ coordinates.")
     (properties `((upstream-name . "RgoogleMaps")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-png" ,r-png)
-       ("r-sp" ,r-sp)))
+     (list r-png r-sp))
     (home-page "https://cran.r-project.org/web/packages/RgoogleMaps")
     (synopsis "Use Google Maps in R")
     (description "This package serves two purposes:
@@ -2875,7 +2794,7 @@ coordinates.")
         (base32
          "0bg4vfmrw140j2ax0p6bflvb77w03ir39wa87l96rj473jpa9hzj"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-sp" ,r-sp)))
+    (propagated-inputs (list r-sp))
     (home-page "https://cran.r-project.org/web/packages/geosphere")
     (synopsis "Spherical trigonometry")
     (description "This package computes spherical trigonometry for geographic
@@ -2895,7 +2814,7 @@ applications.  That is, compute distances and related measures for angular
         (base32
          "0wihj538wdnr71wdldym83qadb4kh68a6rkallwbh2f25r27b881"))))
     (build-system r-build-system)
-    (inputs `(("libjpeg" ,libjpeg-turbo)))
+    (inputs (list libjpeg-turbo))
     (home-page "https://www.rforge.net/jpeg/")
     (synopsis "Read and write JPEG images with R")
     (description "This package provides a way to read, write and display
@@ -2916,23 +2835,23 @@ files and in-memory raw vectors.")
          "13dmzl6z62pzjiffilarkji46vy0sacxa8a7mhrhc3biq3ylzhln"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)
-       ("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jpeg" ,r-jpeg)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-purrr" ,r-purrr)
-       ("r-rgooglemaps" ,r-rgooglemaps)
-       ("r-rjson" ,r-rjson)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-bitops
+           r-digest
+           r-dplyr
+           r-ggplot2
+           r-glue
+           r-httr
+           r-jpeg
+           r-magrittr
+           r-plyr
+           r-png
+           r-purrr
+           r-rgooglemaps
+           r-rjson
+           r-scales
+           r-stringr
+           r-tibble
+           r-tidyr))
     (home-page "https://github.com/dkahle/ggmap")
     (synopsis "Spatial visualization with ggplot2")
     (description "This package provides a collection of functions to visualize
@@ -2966,18 +2885,18 @@ including functions for geolocation and routing.")
              (substitute* "src/Makevars"
                (("-lz") "-lreadstat")))))))
     (inputs
-     `(("readstat" ,readstat)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-forcats" ,r-forcats)
-       ("r-hms" ,r-hms)
-       ("r-rlang" ,r-rlang)
-       ("r-readr" ,r-readr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list readstat))
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-cpp11
+           r-forcats
+           r-hms
+           r-rlang
+           r-readr
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (home-page "https://haven.tidyverse.org")
     (synopsis "Import and export SPSS, Stata and SAS files")
     (description
@@ -2997,7 +2916,7 @@ including functions for geolocation and routing.")
                 "0zpcb73w413na23f6giml9311jh0j0y766w2fh9i40d2h7bbvyvs"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://mulcyber.toulouse.inra.fr/projects/amap/")
     (synopsis "Another multidimensional analysis package")
     (description "This package provides tools for clustering and principal
@@ -3017,9 +2936,7 @@ component analysis (with robust methods, and parallelized functions).")
          "16i9sny7j90zi0k3znfff5lpnj5naxcy1142v73zxslr9g3h3am3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-lattice r-nlme r-rcpp))
     (home-page "http://ape-package.ird.fr/")
     (synopsis "Analyses of phylogenetics and evolution")
     (description
@@ -3044,12 +2961,12 @@ and several other tools.")
     (properties `((upstream-name . "abbyyR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-readr" ,r-readr)
-       ("r-xml" ,r-xml)))
+     (list r-curl
+           r-httr
+           r-plyr
+           r-progress
+           r-readr
+           r-xml))
     (home-page "https://github.com/soodoku/abbyyR")
     (synopsis "Access to Abbyy Optical Character Recognition (OCR) API")
     (description
@@ -3072,7 +2989,7 @@ XML.  To learn more about the Abbyy OCR API, see @url{http://ocrsdk.com/}.")
         (base32 "0fhq2aykdkxh3r90i8aqjyb37p5api3mjd19ch8mzv99q4pcv4dq"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/colorspace")
     (synopsis "Color space manipulation")
     (description
@@ -3143,7 +3060,7 @@ Station Long Term Ecological Research (LTER) Program.")
               "0z4dic94ar646w7zc2ggi5hgvf2qnznsani94c5pyql8zspz47lc"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-boot" ,r-boot)))
+    (list r-boot))
    (home-page "https://github.com/phgrosjean/pastecs")
    (synopsis "Analysis of space-time ecological series")
    (description
@@ -3164,12 +3081,12 @@ initiative to bring PASSTEC 2000 functionalities to R.")
                "1b73s5l19yicwginqsg5xr7fzb005x372n0wb34kk6jb5x5lbsdj"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-formula" ,r-formula)
-      ("r-inum" ,r-inum)
-      ("r-libcoin" ,r-libcoin)
-      ("r-mvtnorm" ,r-mvtnorm)
-      ("r-rpart" ,r-rpart)
-      ("r-survival" ,r-survival)))
+    (list r-formula
+          r-inum
+          r-libcoin
+          r-mvtnorm
+          r-rpart
+          r-survival))
    (home-page "http://partykit.R-Forge.R-project.org/partykit")
    (synopsis "Toolkit for recursive partytioning")
    (description
@@ -3262,14 +3179,14 @@ processes.  Most of its code is based on the @code{psutil} Python package.")
         (base32 "0qx920h2viwjg10va81nj0xja495d8ni6vcc25ggvzki6a6k069f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-crayon
+           r-desc
+           r-prettyunits
+           r-r6
+           r-rprojroot
+           r-withr))
     (home-page "https://github.com/r-pkgs/pkgbuild")
     (synopsis "Find tools needed to build R packages")
     (description
@@ -3291,13 +3208,13 @@ is configured appropriately so R can use them.")
          "0jdkaj5cl0viy0i0hkcm4n2wlg1mfv3camr7f385njfararfanhh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-withr" ,r-withr)))
+     (list r-cli
+           r-crayon
+           r-desc
+           r-rlang
+           r-rprojroot
+           r-rstudioapi
+           r-withr))
     (home-page "https://github.com/r-lib/pkgload")
     (synopsis "Simulate package installation and attach")
     (description
@@ -3383,8 +3300,7 @@ safely be interrupted from R.")
                 "1a92fql6mijhnr1kxkcxwivf95pk9lhgmhzkshs51h0ybfv5krik"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-rcpp r-rcppeigen))
     (home-page "https://github.com/yixuan/RcppNumerical")
     (synopsis"Numerical computing libraries integration with @code{Rcpp}")
     (description "This package provides a collection of libraries for numerical
@@ -3424,9 +3340,7 @@ where the bound function accepts additional arguments.")
          "0rz4ibjdjsxl99ff3ha79z7cnjmilx4rx58fk9kk7ld9xc4hf4s8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bindr" ,r-bindr)
-       ("r-plogr" ,r-plogr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bindr r-plogr r-rcpp))
     (home-page "https://github.com/krlmlr/bindrcpp")
     (synopsis "Rcpp interface to active bindings")
     (description
@@ -3470,7 +3384,7 @@ is provided.")
         (base32 "19kgrnsyq67iqv1biyssqi30a6v2836ql20nabpy2m692ns0jfvi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/calibrate")
     (synopsis "Calibration of scatterplot and biplot axes")
     (description
@@ -3510,7 +3424,7 @@ ellipses, circles, cylinders, arrows, ...")
     (properties `((upstream-name . "GlobalOptions")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/GlobalOptions")
     (synopsis "Generate functions to get or set global options")
     (description
@@ -3531,11 +3445,9 @@ validation and filtering on the values, making options invisible or private.")
          "16rnqlkgzhnm69y70k9fiz8vvwlm5dyng04hlxqvvaxix3wdpfkc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-shape" ,r-shape)))
+     (list r-colorspace r-globaloptions r-shape))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/circlize")
     (synopsis "Circular visualization")
     (description
@@ -3563,9 +3475,9 @@ multi-dimensional data.")
     (properties `((upstream-name . "poweRlaw")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pracma" ,r-pracma)))
+     (list r-pracma))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/csgillespie/poweRlaw")
     (synopsis "Tools for the analysis of heavy tailed distributions")
     (description
@@ -3610,11 +3522,9 @@ rows, dropping names) to see if the modified versions are identical.")
          "06wjs8451hmnimzgngpzbai3yrgy33133vzzapa8jib9crdqi8sb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-viridis" ,r-viridis)))
+     (list r-ggplot2 r-magrittr r-viridis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/dendextend")
     (synopsis "Extending 'dendrogram' functionality in R")
     (description
@@ -3640,13 +3550,11 @@ compare different dendrograms to one another.")
     (properties `((upstream-name . "GetoptLong")))
     (build-system r-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-globaloptions" ,r-globaloptions)
-       ("r-rjson" ,r-rjson)))
+     (list r-crayon r-globaloptions r-rjson))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jokergoo/GetoptLong")
     (synopsis "Parsing command-line arguments and variable interpolation")
     (description
@@ -3688,7 +3596,7 @@ any subsequent lookup as it keeps the hash table in memory.")
         (base32
          "0dsh6llfdz04w94xr3yl2b4vkk9g3rwhvfnxcd025v2424krxfls"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-bit" ,r-bit)))
+    (propagated-inputs (list r-bit))
     (home-page "http://ff.r-forge.r-project.org/")
     (synopsis "Memory-efficient storage of large data on disk and access functions")
     (description
@@ -3712,9 +3620,7 @@ in main memory.")
          "1dp6lblfq2j7r1b4b8ls47jlx8j27n88d5vp8w116lb8pa01zxmk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit" ,r-bit)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-ff" ,r-ff)))
+     (list r-bit r-fastmatch r-ff))
     (home-page "https://github.com/edwindj/ffbase")
     (synopsis "Basic statistical functions for package 'ff'")
     (description
@@ -3753,7 +3659,7 @@ quantities.")
               "0wzk329bxljkzz57y220lsfckpsn45w348m6dcxh29zbj0ik65h2"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-rcpp" ,r-rcpp)))
+    (list r-rcpp))
    (home-page "https://github.com/rcannood/princurve")
    (synopsis "Fit a principal curve in arbitrary dimension")
    (description "This package provides procedures for fitting a principal
@@ -3773,8 +3679,7 @@ curve to a data matrix in arbitrary dimensions.")
          "0s6i0sqxg1vldxs6miv8mi0zydxbqzgpmzfiwkj8y7jix3yrfmad"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-plyr r-rcpp))
     (home-page "http://had.co.nz/reshape")
     (synopsis "Flexibly reshape data")
     (description
@@ -3794,15 +3699,15 @@ curve to a data matrix in arbitrary dimensions.")
         (base32 "1486hrzj5q5w4nbrsbqlv7vv20ly01y90qc2vygl5syzwvyjd422"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rserve" ,r-rserve)
-       ("r-uuid" ,r-uuid)))
+     (list r-checkmate
+           r-jsonlite
+           r-mime
+           r-r6
+           r-rcpp
+           r-rserve
+           r-uuid))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://restrserve.org")
     (synopsis "R web API framework")
     (description
@@ -3825,10 +3730,7 @@ parallel - each request in a separate fork.")
          "0dgzb362641aqm8xd88iqa8jmpdm43xs0aba0d5kk6fvapnxi95l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-hms" ,r-hms)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)))
+     (list r-crayon r-hms r-prettyunits r-r6))
     (home-page "https://github.com/gaborcsardi/progress")
     (synopsis "Terminal progress bars")
     (description
@@ -3852,20 +3754,20 @@ package also provides a C++ API, that works with or without Rcpp.")
     (properties `((upstream-name . "GGally")))
     (build-system r-build-system)
     (inputs
-     `(("openssl" ,openssl)))
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape" ,r-reshape)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyr" ,r-tidyr)))
+     (list openssl))
+    (propagated-inputs
+     (list r-dplyr
+           r-forcats
+           r-ggplot2
+           r-gtable
+           r-lifecycle
+           r-plyr
+           r-progress
+           r-rcolorbrewer
+           r-reshape
+           r-rlang
+           r-scales
+           r-tidyr))
     (home-page "https://ggobi.github.io/ggally")
     (synopsis "Extension to ggplot2")
     (description
@@ -3909,9 +3811,9 @@ most popular ones.")
         (base32 "09m2ddbrbs2aqnq5si42ipa0g1vbd0pxg4zbcx59is2047pv7sws"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/sp")
     (synopsis "Classes and methods for spatial data")
     (description
@@ -3980,9 +3882,9 @@ matrices.")
                   (add-before 'install 'mpi-setup
                     ,%openmpi-setup))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.stats.uwo.ca/faculty/yu/Rmpi")
     (synopsis "R interface to message-passing interface (MPI)")
     (description
@@ -4004,8 +3906,7 @@ provides an interactive R manager and worker environment.")
     (properties `((upstream-name . "Lmoments")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "http://www.tilastotiede.fi/juha_karvanen.html")
     (synopsis "L-moments and quantile mixtures")
     (description
@@ -4069,8 +3970,7 @@ which should be seen for details.")
     (properties `((upstream-name . "extRemes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-distillery" ,r-distillery)
-       ("r-lmoments" ,r-lmoments)))
+     (list r-distillery r-lmoments))
     (home-page "https://www.assessment.ucar.edu/toolkit/")
     (synopsis "Extreme value analysis")
     (description
@@ -4092,9 +3992,9 @@ or excesses over a high threshold.")
          "126l0y7j2iy6g1w4zii1qkfcjq6wrnc3w2li0bz376smpryddy3i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/lmtest")
     (synopsis "Testing linear regression models")
     (description
@@ -4156,7 +4056,7 @@ and S4 methods with inlined C, C++ or Fortran code supporting @code{.C} and
                 "1khkzja8lwn9075864vbyajqina9m588ahf1fsrrajrsqilyzssz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-libcoin" ,r-libcoin)))
+     (list r-libcoin))
     (home-page "https://cran.r-project.org/web/packages/inum/")
     (synopsis "Interval and enum-type representation of vectors")
     (description
@@ -4216,14 +4116,14 @@ matrices, a special case of sparse matrices.")
          "1bck8rmink4wsk8pcbnj4d60svxymp29pxbzwj8p9gzsg42c1v81"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bdsmatrix" ,r-bdsmatrix)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-bdsmatrix
+           r-lattice
+           r-mass
+           r-matrix
+           r-mvtnorm
+           r-numderiv))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/bbmle")
     (synopsis "Tools for General Maximum Likelihood Estimation")
     (description
@@ -4246,11 +4146,7 @@ classes in the @code{stats4} package.")
          "0ls3zxxlwmdv7zn1v9i1y9zc2sn0hbgmyjvsj7zn3ajsw7wwlih6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmle" ,r-bbmle)
-       ("r-coda" ,r-coda)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-plyr" ,r-plyr)))
+     (list r-bbmle r-coda r-lattice r-mass r-plyr))
     (home-page "http://www.math.mcmaster.ca/bolker/emdbook")
     (synopsis "Support functions and data for \"Ecological Models and Data\"")
     (description
@@ -4296,10 +4192,8 @@ transportation problems.")
     (properties `((upstream-name . "limSolve")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-mass" ,r-mass)
-       ("r-quadprog" ,r-quadprog)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-lpsolve r-mass r-quadprog))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/limSolve")
     (synopsis "Solving linear inverse models")
     (description
@@ -4329,10 +4223,9 @@ functions from LINPACK.")
          "1glnbcm1gghzgvzpxcfsmn7dp2f9jqyx39n3ydwp9fx38409khhp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://riskassessment.r-forge.r-project.org")
     (synopsis "Fitting a parametric distribution from data")
     (description
@@ -4359,9 +4252,7 @@ data).  Weighted versions of MLE, MME and QME are available.")
          "12a7gy681aq3l55iys044cs6sn1s2l5qihghpdl01cvv0ggfh26y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-gsl" ,r-gsl)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-boot r-gsl r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/energy")
     (synopsis "Multivariate inference via the energy of data")
     (description
@@ -4414,7 +4305,7 @@ George Marsaglia are included.")
     (properties `((upstream-name . "kSamples")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-suppdists" ,r-suppdists)))
+     (list r-suppdists))
     (home-page "https://cran.r-project.org/web/packages/kSamples")
     (synopsis "K-Sample rank tests and their combinations")
     (description
@@ -4442,8 +4333,7 @@ samples.")
     (properties `((upstream-name . "CVST")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernlab" ,r-kernlab)
-       ("r-matrix" ,r-matrix)))
+     (list r-kernlab r-matrix))
     (home-page "https://cran.r-project.org/web/packages/CVST")
     (synopsis "Fast cross-validation via sequential testing")
     (description
@@ -4495,7 +4385,7 @@ available in a vignette.")
     (properties `((upstream-name . "progressr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://progressr.futureverse.org")
     (synopsis "Inclusive, unifying API for progress updates")
     (description
@@ -4520,13 +4410,9 @@ these progress updates.")
          "0bi3c1aqwlq7jbz4raz6vga4r264w7lldi0i62xjlbl7hnlgi23s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future-apply" ,r-future-apply)
-       ("r-numderiv" ,r-numderiv)
-       ("r-progressr" ,r-progressr)
-       ("r-squarem" ,r-squarem)
-       ("r-survival" ,r-survival)))
+     (list r-future-apply r-numderiv r-progressr r-squarem r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kkholst/lava")
     (synopsis "Latent variable models")
     (description
@@ -4548,9 +4434,7 @@ variable models.")
     (properties `((upstream-name . "DRR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cvst" ,r-cvst)
-       ("r-kernlab" ,r-kernlab)
-       ("r-matrix" ,r-matrix)))
+     (list r-cvst r-kernlab r-matrix))
     (home-page "https://cran.r-project.org/web/packages/DRR")
     (synopsis "Dimensionality reduction via regression")
     (description
@@ -4571,10 +4455,7 @@ regression using Kernel Ridge Regression.")
          "03wvh3kirp1prac5nky6a5whs97rvaf4hc27x0fnh51sa17r42b8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)
-       ("r-lava" ,r-lava)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survival" ,r-survival)))
+     (list r-kernsmooth r-lava r-rcpp r-survival))
     (home-page "https://cran.r-project.org/web/packages/prodlim")
     (synopsis "Product-limit estimation for censored event history analysis")
     (description
@@ -4597,8 +4478,7 @@ the Kaplan-Meier and Aalen-Johansen methods.")
     (properties `((upstream-name . "dimRed")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-drr" ,r-drr)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-drr r-magrittr))
     (home-page "https://github.com/gdkrmr/dimRed")
     (synopsis "Framework for dimensionality reduction")
     (description
@@ -4641,7 +4521,7 @@ calendar objects.")
          "0snmdh6vk0p6ar1swsihisinxrx7l8371dri5lk0z24ysgr5w7gs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)))
+     (list r-abind))
     (home-page "https://github.com/RobinHankin/magic.git")
     (synopsis "Create and investigate magic squares")
     (description
@@ -4665,10 +4545,9 @@ dimensioned arrays.")
     (properties `((upstream-name . "RMySQL")))
     (build-system r-build-system)
     (inputs
-     `(("mariadb-dev" ,mariadb "dev")
-       ("zlib" ,zlib)))
+     (list `(,mariadb "dev") zlib))
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)))
+     (list r-dbi))
     (home-page "https://github.com/r-dbi/RMySQL")
     (synopsis "Database interface and MySQL driver for R")
     (description
@@ -4692,9 +4571,9 @@ the RMariaDB package.")
     (properties `((upstream-name . "RPostgreSQL")))
     (build-system r-build-system)
     (inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)))
+     (list r-dbi))
     (home-page "https://github.com/tomoakin/RPostgreSQL")
     (synopsis "R interface to the PostgreSQL database system")
     (description
@@ -4716,7 +4595,7 @@ to access PostgreSQL database systems.")
         (base32
          "1ki14an0pmhs2mnmfjjvdzd76pshiyvi659zf7hqvqwj0viv4dw9"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lpsolve" ,r-lpsolve)))
+    (propagated-inputs (list r-lpsolve))
     (home-page "http://linprog.r-forge.r-project.org/")
     (synopsis "Linear programming and optimization")
     (description
@@ -4737,11 +4616,7 @@ Optimization problems by using the simplex algorithm.")
          "1n10l8ax3783v3lgaacb15qsn8b3f0wpmhg3k39j31s6ciyd3vcg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magic" ,r-magic)
-       ("r-linprog" ,r-linprog)
-       ("r-lpsolve" ,r-lpsolve)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppprogress" ,r-rcppprogress)))
+     (list r-magic r-linprog r-lpsolve r-rcpp r-rcppprogress))
     (home-page "http://geometry.r-forge.r-project.org/")
     (synopsis "Mesh generator and surface tessellator")
     (description
@@ -4772,15 +4647,15 @@ Delaunay triangulation and convex hull computation.")
          "1sdnb47r534nh138zk3a6b2mgi74nvshc7p5m304vjs9jlx4l2y3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-class" ,r-class)
-       ("r-geometry" ,r-geometry)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-robustbase" ,r-robustbase)
-       ("r-sfsmisc" ,r-sfsmisc)))
+     (list r-bh
+           r-class
+           r-geometry
+           r-mass
+           r-rcpp
+           r-robustbase
+           r-sfsmisc))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ddalpha")
     (synopsis "Depth-Based classification and calculation of data depth")
     (description
@@ -4827,7 +4702,7 @@ Core algorithms are executed in parallel on systems supporting OpenMP.")
     (properties `((upstream-name . "RcppRoll")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppRoll")
     (synopsis "Efficient rolling and windowed operations")
     (description
@@ -4850,12 +4725,12 @@ provided.")
          "0hsq00382pfd9hzpcgphjxazbxm4zx0k2r6pk6kib56k0ibm7qfn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-prodlim" ,r-prodlim)
-       ("r-rpart" ,r-rpart)
-       ("r-survival" ,r-survival)))
+     (list r-class
+           r-mass
+           r-nnet
+           r-prodlim
+           r-rpart
+           r-survival))
     (home-page "https://cran.r-project.org/web/packages/ipred")
     (synopsis "Improved predictors")
     (description
@@ -4877,11 +4752,9 @@ problems as well as resampling based estimators of prediction error.")
          "032h33i2qlwsw2iq82nri5y8hs7d593w40aghcvnibpi2wxf0x8l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mnormt" ,r-mnormt)
-       ("r-nlme" ,r-nlme)))
+     (list r-lattice r-mnormt r-nlme))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/psych/")
     (synopsis "Procedures for psychological, psychometric, and personality research")
     (description
@@ -4932,19 +4805,19 @@ by base R methods related to model fitting.")
          "0ks64xwkaqh5cinq8j56d89rn9kipm7cdipsgqmz9xxy7ajxb7qj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-backports
+           r-dplyr
+           r-ellipsis
+           r-generics
+           r-ggplot2
+           r-glue
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/broom")
     (synopsis "Convert statistical analysis objects into tidy data frames")
     (description
@@ -4971,26 +4844,26 @@ provides a one-row summary of model-level statistics.")
          "0gbdc5kvbn14s5zrf4vrdjvkfajs00p7vvb433ii0lqnl07bl87d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-gower" ,r-gower)
-       ("r-ipred" ,r-ipred)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-timedate" ,r-timedate)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-ellipsis
+           r-generics
+           r-glue
+           r-gower
+           r-ipred
+           r-lifecycle
+           r-lubridate
+           r-magrittr
+           r-matrix
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-timedate
+           r-vctrs
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/topepo/recipes")
     (synopsis "Preprocessing tools to create design matrices")
     (description
@@ -5039,12 +4912,9 @@ for certain use cases.")
          "1z5xyr5f4aryy0v1gzz9m8m4s5fzzwbrf0fxll1nbflr8xnr3yr9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-rcpp r-rlang r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/slowkow/ggrepel")
     (synopsis "Repulsive text and label geometries for ggplot2")
     (description
@@ -5066,7 +4936,7 @@ from the data points.")
          "1g98jk6xsl08z4n6sy5vriif99m31zhbz7j3dh1kfj4w7yb9zh78"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/taiyun/corrplot")
     (synopsis "Visualization of a correlation matrix")
     (description
@@ -5112,7 +4982,7 @@ or between integer vectors representing generic sequences.")
         (base32
          "01vggwg1w71k98qs6fhb0x1843vi322mf4g3hbclks94kcpkisx2"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ucminf/")
     (synopsis "General-purpose unconstrained non-linear optimization")
     (description
@@ -5137,14 +5007,14 @@ with the package @code{optim}.")
    (properties `((upstream-name . "useful")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-assertthat" ,r-assertthat)
-      ("r-dplyr" ,r-dplyr)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-magrittr" ,r-magrittr)
-      ("r-matrix" ,r-matrix)
-      ("r-plyr" ,r-plyr)
-      ("r-purrr" ,r-purrr)
-      ("r-scales" ,r-scales)))
+    (list r-assertthat
+          r-dplyr
+          r-ggplot2
+          r-magrittr
+          r-matrix
+          r-plyr
+          r-purrr
+          r-scales))
    (home-page "https://github.com/jaredlander/useful")
    (synopsis "Collection of handy, useful functions")
    (description "This package provides a set of little functions that have been
@@ -5167,10 +5037,7 @@ response matrices.")
          "09bpmjmbf4x82kgf6bm4bkncq2apdv9mk20zj4zgma2jx2vyfhbs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-numderiv" ,r-numderiv)
-       ("r-ucminf" ,r-ucminf)))
+     (list r-mass r-matrix r-numderiv r-ucminf))
     (home-page "https://github.com/runehaubo/ordinal")
     (synopsis "Regression models for ordinal data")
     (description
@@ -5194,10 +5061,7 @@ Laplace approximation and adaptive Gauss-Hermite quadrature.")
          "1sbcpacxnxbzwa8rr9x2bq7hh0s3sw6yznr90dkp43n6xk5xaqir"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-ordinal" ,r-ordinal)
-       ("r-survival" ,r-survival)))
+     (list r-lme4 r-mass r-ordinal r-survival))
     (home-page "https://cran.r-project.org/web/packages/jomo/")
     (synopsis "Multilevel Joint Modelling Multiple Imputation")
     (description
@@ -5221,7 +5085,7 @@ impute compatibly with the substantive model.")
         (base32
          "1dk3jjj826p7xrz10qz04vyc068xnypg7bp0pj4c32z3da0xzh5d"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/pan/")
     (synopsis "Multiple imputation for multivariate panel or clustered data")
     (description
@@ -5242,11 +5106,9 @@ clustered data.")
          "00i18nnvrdrg91crgcp2a431xs71cawaip3xkqk2myv0iav3xga9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-haven" ,r-haven)
-       ("r-jomo" ,r-jomo)
-       ("r-pan" ,r-pan)))
+     (list r-haven r-jomo r-pan))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/mitml/")
     (synopsis "Tools for multiple imputation in multilevel modeling")
     (description
@@ -5269,14 +5131,14 @@ analysis of multiply imputed data sets.")
          "11cpyqlilakan2pwjzacb9jjlazazsqdngy237nnrj8j6mky822i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cpp11" ,r-cpp11)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-lattice" ,r-lattice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-broom
+           r-cpp11
+           r-dplyr
+           r-generics
+           r-lattice
+           r-rcpp
+           r-rlang
+           r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/mice/")
     (synopsis "Multivariate imputation by chained equations")
     (description
@@ -5328,7 +5190,7 @@ functions, as well as a random generation function.")
     (properties `((upstream-name . "Rsolnp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-truncnorm" ,r-truncnorm)))
+     (list r-truncnorm))
     (home-page "https://cran.r-project.org/web/packages/Rsolnp/")
     (synopsis "General non-linear optimization")
     (description "The Rsolnp package implements a general non-linear augmented
@@ -5351,9 +5213,7 @@ programming} (SQP) based solver).")
     (properties `((upstream-name . "HardyWeinberg")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mice" ,r-mice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-mice r-rcpp r-rsolnp))
     (home-page "https://cran.r-project.org/package=HardyWeinberg")
     (synopsis "Statistical tests and graphics for Hardy-Weinberg equilibrium")
     (description
@@ -5381,7 +5241,7 @@ acceptance regions, log-ratio plots and Q-Q plots.")
         (base32
          "03z8igsjqr32x407asxvkrbayvm6yhv9xyfs0n8fkmv8zk5a41r6"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "http://www.stats.gla.ac.uk/~adrian/sm/")
     (synopsis "Smoothing methods for nonparametric regression and density estimation")
     (description
@@ -5404,7 +5264,7 @@ and density estimation")
     (properties `((upstream-name . "VennDiagram")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-futile-logger" ,r-futile-logger)))
+     (list r-futile-logger))
     (home-page "https://cran.r-project.org/web/packages/VennDiagram/")
     (synopsis "Generate High-Resolution Venn and Euler Plots")
     (description
@@ -5427,10 +5287,9 @@ structure.")
          "1dmdasp3jldc41233z6r08w3j76vyyp9m3jrj7n4ahk48yd5siq6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sm" ,r-sm)
-       ("r-zoo" ,r-zoo)))
+     (list r-sm r-zoo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://wsopuppenkiste.wiso.uni-goettingen.de/~dadler")
     (synopsis "Violin plot")
     (description
@@ -5455,7 +5314,7 @@ plot and a kernel density plot.")
     (properties `((upstream-name . "RSofia")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/src/contrib/Archive/RSofia")
     (synopsis "Port of sofia-ml to R")
     (description "This package is a port of sofia-ml to R.  Sofia-ml is a
@@ -5475,7 +5334,7 @@ training models for classification or ranking.")
         (base32
          "0b6a7mpyk9aw6axas7nz01gadczprwwfhii01fz31z26z555i06n"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-zoo" ,r-zoo)))
+    (propagated-inputs (list r-zoo))
     (home-page "https://github.com/joshuaulrich/xts")
     (synopsis "Extensible time series")
     (description
@@ -5500,9 +5359,7 @@ simplifying cross-class interoperability.")
      `((upstream-name . "PerformanceAnalytics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-quadprog r-xts r-zoo))
     (home-page "https://r-forge.r-project.org/projects/returnanalytics/")
     (synopsis "Econometric tools for performance and risk analysis")
     (description "This is a collection of econometric functions for
@@ -5528,8 +5385,7 @@ where possible.")
          "1p3ccbaydlr52p8qmgmm2l6kryvq6jjjx7mqn2vv0gpjaxqhyy92"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mass" ,r-mass)))
+     (list r-boot r-mass))
     (home-page "https://cran.r-project.org/web/packages/laeken/")
     (synopsis "Estimation of indicators on social exclusion and poverty")
     (description "This package provides tools for the estimation of indicators
@@ -5550,9 +5406,7 @@ modeling for empirical income distributions.")
          "13sn77qdcyll9lz7nab0bxzfvpgj8f5rl2cq5ylpz8pibynj1d55"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)))
+     (list r-colorspace r-lmtest r-mass))
     (home-page "https://cran.r-project.org/web/packages/vcd/")
     (synopsis "Visualizing categorical data")
     (description "This package provides visualization techniques, data sets,
@@ -5575,20 +5429,20 @@ Analysis with R\" by Michael Friendly and David Meyer (2015).")
               "0lhxb3ac4fafwik9q3cds46svzf0hyca8k54chw3dpk50c0zz1yx"))))
    (build-system r-build-system)
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (inputs
-    `(("zlib" ,zlib)))
+    (list zlib))
    (propagated-inputs
-    `(("r-ape" ,r-ape)
-      ("r-dplyr" ,r-dplyr)
-      ("r-magrittr" ,r-magrittr)
-      ("r-memuse" ,r-memuse)
-      ("r-pinfsc50" ,r-pinfsc50)
-      ("r-rcpp" ,r-rcpp)
-      ("r-stringr" ,r-stringr)
-      ("r-tibble" ,r-tibble)
-      ("r-vegan" ,r-vegan)
-      ("r-viridislite" ,r-viridislite)))
+    (list r-ape
+          r-dplyr
+          r-magrittr
+          r-memuse
+          r-pinfsc50
+          r-rcpp
+          r-stringr
+          r-tibble
+          r-vegan
+          r-viridislite))
    (home-page "https://github.com/knausb/vcfR")
    (synopsis "Manipulate and visualize VCF data")
    (description "This package facilitates easy manipulation of variant call
@@ -5633,7 +5487,7 @@ of Eigenmatrices} (JADE).")
         (base32
          "004gm4mzgdzdj807j3bwqsv5lizmnmz5jq514bdjshhkysnzjz6z"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-proxy" ,r-proxy)))
+    (propagated-inputs (list r-proxy))
     (home-page "http://dtw.r-forge.r-project.org/")
     (synopsis "Dynamic Time Warping Algorithms")
     (description "This package provides a comprehensive implementation of
@@ -5657,7 +5511,7 @@ normalizations, minimum variance matching, and so on.")
          "1xvcd97ikqsfdpk2fddy3k0z1ajqga7nv9bgac9c1wnjk1gqrpgh"))))
     (properties `((upstream-name . "SDMTools")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-r-utils" ,r-r-utils)))
+    (propagated-inputs (list r-r-utils))
     (home-page "https://www.rforge.net/SDMTools/")
     (synopsis "Species distribution modelling tools")
     (description "This package provides a set of tools for post processing
@@ -5699,12 +5553,9 @@ plotting.  a three dimensional point cloud.")
          "0bmlqy1p6rac90af97ffpdi6php7dblx66l2hcm8ljidgyqzmspm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2 r-plyr r-scales r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/clauswilke/ggridges")
     (synopsis "Ridgeline plots in ggplot2")
     (description
@@ -5726,8 +5577,7 @@ plots in @code{ggplot2}.")
          "012md2m0jqfcccb933j423m3ck31v3p0pd41gjxpyg9082y7ixyj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)))
+     (list r-ggplot2 r-ggridges))
     (home-page "https://github.com/clauswilke/ggjoy")
     (synopsis "Joyplots in ggplot2")
     (description "Joyplots provide a convenient way of visualizing changes in
@@ -5748,7 +5598,7 @@ plots in @code{ggplot2}.")
          "04ff3bgsahi736s8l6a26zlwwil8jw4shx7bb56ah1pp1f1n22n7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)))
+     (list r-glue))
     (home-page "https://github.com/r-lib/cli#readme")
     (synopsis "Helpers for developing command line interfaces")
     (description "This package provides a suite of tools designed to build
@@ -5789,7 +5639,7 @@ script.")
         (base32
          "1c9sg55zvf10h8198jdnpamm6f66lzw3c3jnmdp9ls6na0j0xbjd"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-crayon" ,r-crayon)))
+    (propagated-inputs (list r-crayon))
     (home-page "https://github.com/r-lib/debugme#readme")
     (synopsis "Debug R packages")
     (description
@@ -5809,8 +5659,7 @@ constants, and control debugging of packages via environment variables.")
         (base32 "0azw8sx6nv6pp8m8jrwq01b9na2swrnznn7dwrhn07268w82svzd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ps" ,r-ps)
-       ("r-r6" ,r-r6)))
+     (list r-ps r-r6))
     (home-page "https://github.com/r-lib/processx3")
     (synopsis "Execute and control system processes")
     (description
@@ -5836,7 +5685,7 @@ timeout.  It can also poll several processes at once.")
          "0gdwxbj2gria7jhsswmfvc32r43sdd63z3lyy21gbvmfcakvb8j9"))))
     (properties `((upstream-name . "TSP")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-foreach" ,r-foreach)))
+    (propagated-inputs (list r-foreach))
     (home-page "https://cran.r-project.org/web/packages/TSP/")
     (synopsis "Traveling salesperson problem (TSP)")
     (description "This package provides basic infrastructure and some
@@ -5856,7 +5705,7 @@ traveling salesman problem).")
         (base32
          "0d2d1ni1camixyi45lfy00f4pn3p063k7bsi8gj5scp6n15mdgb0"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/qap/")
     (synopsis "Heuristics for the quadratic assignment problem (QAP)")
     (description "This package implements heuristics for the @dfn{quadratic
@@ -5876,7 +5725,7 @@ available.")
         (base32
          "1cz0g0i972955hhaji30rx8448x7f3as7z1sww9i5h86ybgirilw"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cluster" ,r-cluster)))
+    (propagated-inputs (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/gclus/")
     (synopsis "Clustering graphics")
     (description "This package orders panels in scatterplot matrices and
@@ -5898,9 +5747,7 @@ of merit, ordering functions, and enhanced versions of @code{pairs} and
          "0gq4h8cw51z95yvsnf38kj5l58wgljkm0dalmi8mn1sp06bxr0zi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-callr r-jsonlite r-magrittr))
     (home-page "https://github.com/wch/webshot/")
     (synopsis "Take screenshots of web pages")
     (description
@@ -5923,14 +5770,14 @@ Markdown documents.")
          "08c37n3xxc4n4vbkw38k3l3hdlmck8drqpl6z274vkgi2sqv8qyf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-colorspace" ,r-colorspace)
-       ("r-gclus" ,r-gclus)
-       ("r-mass" ,r-mass)
-       ("r-qap" ,r-qap)
-       ("r-registry" ,r-registry)
-       ("r-tsp" ,r-tsp)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster
+           r-colorspace
+           r-gclus
+           r-mass
+           r-qap
+           r-registry
+           r-tsp))
+    (native-inputs (list gfortran))
     (home-page "https://s2.smu.edu/IDA/seriation/")
     (synopsis "Infrastructure for ordering objects using seriation")
     (description
@@ -5977,8 +5824,7 @@ packages maintained by Yihui Xie.")
          "1x6qg19z4qih9lk3mvnmx0vailm1khp5lylw4hlwz6rssj3yw6m7"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown))) ; for vignettes
+     (list r-knitr r-rmarkdown)) ; for vignettes
     (home-page "https://github.com/patperry/r-utf8")
     (synopsis "Unicode text processing")
     (description
@@ -6021,11 +5867,9 @@ to variables on the left-hand side of the assignment.")
          "1c8v5lmap6iq4jpi7p3w05hsv2dq7rjg057pvnfyc5d1xmsqnkkz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)))
+     (list r-ellipsis r-glue r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/vctrs")
     (synopsis "Vector helpers")
     (description
@@ -6059,16 +5903,16 @@ to variables on the left-hand side of the assignment.")
          "17m13rzgwdddwa0n3gpmax6wmfaphbg71l13ffhw5vnxf6i94fh3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fansi" ,r-fansi)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-utf8" ,r-utf8)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cli
+           r-crayon
+           r-ellipsis
+           r-fansi
+           r-lifecycle
+           r-rlang
+           r-utf8
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/pillar")
     (synopsis "Coloured formatting for columns")
     (description
@@ -6128,7 +5972,7 @@ packages that work with genomic data.")
          "04ng34kfds2isz4j9ch1xlii0dfclqay9fsc6wvr6sfifzv9fqyk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xfun" ,r-xfun)))
+     (list r-xfun))
     (home-page "https://github.com/yihui/tinytex")
     (synopsis "Helper functions for TeX Live and compiling LaTeX documents")
     (description
@@ -6187,9 +6031,7 @@ features:
          "19q563v5xfkbmr0ws9nhqx4wrxkf9jsck51rqc8mm2gq2h03lg7w"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-statnet-common" ,r-statnet-common)
-       ("r-tibble" ,r-tibble)))
+     (list r-magrittr r-statnet-common r-tibble))
     (home-page "https://statnet.org/")
     (synopsis "Classes for relational data")
     (description
@@ -6211,7 +6053,7 @@ supports arbitrary vertex/edge/graph attributes.")
          "1nf1yg14cgxrs4np1yghpzw1nczaslfv3rvf3918wrlzg0vp6l7q"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hofnerb/stabs")
     (synopsis "Stability selection with error control")
     (description
@@ -6260,7 +6102,7 @@ vectors.")
       `((upstream-name . "statnet.common")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)))
+     (list r-coda))
     (home-page "https://statnet.org")
     (synopsis "R scripts and utilities used by the Statnet software")
     (description "This package provides non-statistical utilities used by the
@@ -6280,9 +6122,7 @@ software developed by the Statnet Project.")
          "0ivybdcrymlsfv6pg6p5bv70qdvgxf2vgp0kf4r0pf2fcvav1mcp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-ggplot2 r-plyr r-rmarkdown))
     (home-page "https://cran.r-project.org/web/packages/statcheck/")
     (synopsis "Extract statistics from articles and recompute p-values")
     (description "This package can automatically extract statistical
@@ -6304,8 +6144,7 @@ detect possible inconsistencies.")
          "0ai0v4538d30m4wks5s3lch1yfmx1ml0nnrz7ihs097lv586a09s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-network" ,r-network)
-       ("r-statnet-common" ,r-statnet-common)))
+     (list r-network r-statnet-common))
     (home-page "https://statnet.org")
     (synopsis "Tools for social network analysis")
     (description
@@ -6329,9 +6168,7 @@ generation, and 2D/3D network visualization.")
     (properties `((upstream-name . "TFisher")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sn" ,r-sn)))
+     (list r-matrix r-mvtnorm r-sn))
     (home-page "https://cran.r-project.org/web/packages/TFisher/")
     (synopsis "Optimal thresholding Fisher's p-value combination method")
     (description
@@ -6358,9 +6195,7 @@ of these tests are also included.")
     (properties `((upstream-name . "TTR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-curl r-xts r-zoo))
     (home-page "https://github.com/joshuaulrich/TTR")
     (synopsis "Technical trading rules")
     (description
@@ -6380,7 +6215,7 @@ rules with R.")
         (base32
          "1dn3yl1p03n0iynd1vsdkrr0fhmvgrmfkv37y7n371765h83lz1x"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/leaps/")
     (synopsis "Regression subset selection")
     (description
@@ -6422,8 +6257,7 @@ provides some missing S-PLUS functionality in R.")
          "16a7rbvlym3bnfm93ikr5kl0l86ppk0s41fva6idvcx765g3fqkk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-mass r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/ifultools/")
     (synopsis "Insightful research tools")
     (description "This package provides C code used by the wmtsa, fractal, and
@@ -6443,8 +6277,7 @@ sapa R packages.")
          "0kj681rd4c2lvqr926lb6f4qwp281x5274dg6vbk8pf5y7s0qlpc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-ifultools r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/sapa/")
     (synopsis "Spectral analysis for physical applications")
     (description "This package provides software for the book Spectral
@@ -6485,10 +6318,7 @@ Fisher's method), and Sidak correction.")
          "0dbcrncv06iqcbkky95dd7l32xq0hhbnkb0kj8wwzym1jf748h5a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-ttr" ,r-ttr)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-curl r-ttr r-xts r-zoo))
     (home-page "https://cran.r-project.org/web/packages/quantmod/")
     (synopsis "Quantitative financial modelling framework")
     (description "This package provides a quantitative financial modelling
@@ -6509,11 +6339,9 @@ financial trading strategies.")
          "1fhldj95d16cwygw8xg0kvr4xk569mpzprdvahlsf4hzykc2dgs5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)
-       ("r-quantmod" ,r-quantmod)
-       ("r-zoo" ,r-zoo)))
+     (list r-quadprog r-quantmod r-zoo))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/tseries/")
     (synopsis "Time series analysis and computational finance")
     (description
@@ -6534,9 +6362,7 @@ computational finance.")
          "1q436krz5p1f4a7a7sya6a9rh9x9mi8zzcgq66gbk9w9w4hcqcj6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-mass" ,r-mass)
-       ("r-splus2r" ,r-splus2r)))
+     (list r-ifultools r-mass r-splus2r))
     (home-page "https://cran.r-project.org/web/packages/wmtsa/")
     (synopsis "Wavelet methods for time series analysis")
     (description
@@ -6559,10 +6385,7 @@ University Press, 2000.")
     (properties `((upstream-name . "TSA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-leaps" ,r-leaps)
-       ("r-locfit" ,r-locfit)
-       ("r-mgcv" ,r-mgcv)
-       ("r-tseries" ,r-tseries)))
+     (list r-leaps r-locfit r-mgcv r-tseries))
     (home-page "https://homepage.divms.uiowa.edu/~kchan/TSA.htm")
     (synopsis "Time series analysis")
     (description
@@ -6585,7 +6408,7 @@ Cryer and Kung-Sik Chan.")
     (properties `((upstream-name . "extraDistr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/twolodzko/extraDistr")
     (synopsis "Additional univariate and multivariate distributions")
     (description
@@ -6607,12 +6430,12 @@ multivariate distributions.")
          "18lr9z0gslvfc3z8vyj3krqj3bfhg60zv1fzinrwwkc4cpk1w7mp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ifultools" ,r-ifultools)
-       ("r-mass" ,r-mass)
-       ("r-sapa" ,r-sapa)
-       ("r-scatterplot3d" ,r-scatterplot3d)
-       ("r-splus2r" ,r-splus2r)
-       ("r-wmtsa" ,r-wmtsa)))
+     (list r-ifultools
+           r-mass
+           r-sapa
+           r-scatterplot3d
+           r-splus2r
+           r-wmtsa))
     (home-page "https://cran.r-project.org/web/packages/fractal/")
     (synopsis "Fractal time series modeling and analysis")
     (description
@@ -6632,8 +6455,8 @@ chaotic time series analysis.")
         (base32
          "1akaqwf3fvvvx4sgfn641fd4sj51s0701pvfl6s5hnz2k0iwh732"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-nlme" ,r-nlme)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-nlme))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/urca/")
     (synopsis "Unit root and cointegration tests for time series data")
     (description
@@ -6654,9 +6477,9 @@ applied econometric analysis.")
          "0kk9lw3s66h0sayza3in8rdj7bmgqn4v5lfckhslarpvj2fxsnv0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/bnaras/cubature")
     (synopsis "Adaptive multivariate integration over hypercubes")
     (description
@@ -6681,9 +6504,9 @@ interface.")
          "1mr5g5gaxiqj6x83ngcbwwh57vhrhcz0x9dh0rmvs9y2ivk29ccs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extradistr" ,r-extradistr)))
+     (list r-extradistr))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/trend/")
     (synopsis "Non-parametric trend tests and change-point detection")
     (description
@@ -6711,8 +6534,8 @@ sample Robust Rank-Order Distributional Test.")
         (base32
          "1p5dapwv8ycxaysgi6imnby04i4kh1c5a2czqa4wygz0s8pr2y9c"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-matrix" ,r-matrix)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-matrix))
+    (native-inputs (list gfortran))
     (home-page "https://r-forge.r-project.org/projects/expm/")
     (synopsis "Tools for matrix exponentials and related quantities")
     (description
@@ -6733,8 +6556,7 @@ exponential, logarithm, square root, and related quantities.")
          "16w9v7d1ckavqmr86l34frr37pkvdn0iqnb17ssb8xaggns5lgqx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-expm" ,r-expm)
-       ("r-matrix" ,r-matrix)))
+     (list r-expm r-matrix))
     (home-page "https://cran.r-project.org/web/packages/complexplus/")
     (synopsis "Functions of complex or real variables")
     (description
@@ -6777,10 +6599,7 @@ creation and manipulation of WAVE audio files.")
          "1a9kzn37cddwfdki5zjmzanxp75pccdjnsvqfrh84hhcsy51pcx3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-cubature" ,r-cubature)
-       ("r-quadprog" ,r-quadprog)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-boot r-cubature r-quadprog r-quantreg))
     (home-page "https://github.com/JeffreyRacine/R-Package-np")
     (synopsis "Non-parametric kernel smoothing methods for mixed data types")
     (description "This package provides non-parametric (and semi-parametric)
@@ -6802,11 +6621,7 @@ ordered factor data types.")
          "0ayp6x34hkzgris4j3zbbs0r23n81bhww3wgfyy630ri4sk6brrn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-complexplus" ,r-complexplus)
-       ("r-expm" ,r-expm)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-phontools" ,r-phontools)))
+     (list r-complexplus r-expm r-mass r-matrix r-phontools))
     (home-page "https://cran.r-project.org/web/packages/powerplus/")
     (synopsis "Exponentiation operations")
     (description
@@ -6828,9 +6643,7 @@ exponentiation.")
     (properties `((upstream-name . "egg")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)))
+     (list r-ggplot2 r-gridextra r-gtable))
     (home-page "https://cran.r-project.org/web/packages/egg")
     (synopsis "Extensions for ggplot2")
     (description
@@ -6854,9 +6667,9 @@ functions to enforce symmetric scales or add tags to facetted plots.")
          "0sfvizmmwfk1bjhn6zfx5a4qqfgj1ldg8x90b65crqibgfa36k2r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastcluster" ,r-fastcluster)))
+     (list r-fastcluster))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/heatmap3/")
     (synopsis "Improved heatmap package")
     (description
@@ -6878,22 +6691,22 @@ powerful and convenient features.")
          "1w8yyzb68laxd4zxycvgmpqj5wnyidjgv1vbzbxndp9p92f2cp8a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-colorspace" ,r-colorspace)
-       ("r-dendextend" ,r-dendextend)
-       ("r-egg" ,r-egg)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plotly" ,r-plotly)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-scales" ,r-scales)
-       ("r-seriation" ,r-seriation)
-       ("r-viridis" ,r-viridis)
-       ("r-webshot" ,r-webshot)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-colorspace
+           r-dendextend
+           r-egg
+           r-ggplot2
+           r-htmlwidgets
+           r-magrittr
+           r-plotly
+           r-rcolorbrewer
+           r-reshape2
+           r-scales
+           r-seriation
+           r-viridis
+           r-webshot))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=heatmaply")
     (synopsis "Interactive cluster heat maps using plotly")
     (description
@@ -6921,12 +6734,11 @@ dendrograms.")
          "14p7i1sj24ky87kd7qr3n9fc9l64s0bp0rwbyl6i2x69xn75gpsx"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("hdf5" ,hdf5)))
+     (list zlib hdf5))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/mannau/h5")
     (synopsis "Interface to the HDF5 Library")
     (description
@@ -6951,9 +6763,7 @@ fit into memory.")
          "07yc819hkabpzzh0g0cbqza6bcfy67b2marrzz1lj97f9iba78ja"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)))
+     (list r-httr r-r-methodss3 r-r-oo))
     (home-page "https://github.com/cBioPortal/cgdsr")
     (synopsis "R-based API for accessing the MSKCC Cancer Genomics Data Server")
     (description
@@ -6975,7 +6785,7 @@ Memorial-Sloan-Kettering Cancer Center (MSKCC).")
          "018s0x224gqnv4cjfh0fwliyfg6ma9vslmwybrlizfsmqcc5wp37"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/smbache/import")
     (synopsis "Import mechanism for R")
     (description
@@ -7002,8 +6812,7 @@ files.")
     (properties `((upstream-name . "shinyAce")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shiny" ,r-shiny)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-shiny r-jsonlite))
     (home-page "https://cran.r-project.org/web/packages/shinyAce/")
     (synopsis "Ace editor bindings for Shiny")
     (description
@@ -7025,7 +6834,7 @@ environment within Shiny.")
     (properties `((upstream-name . "randomizr")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://declaredesign.org/r/randomizr/")
     (synopsis "Tools for common forms of random assignment and sampling")
     (description
@@ -7046,7 +6855,7 @@ experimental designs and random samples for common sampling designs.")
          "0n1c2b68vza1dh7sk38v6biiwm72c4jpl79kpdg1bsb0hq9qy18x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)))
+     (list r-backports))
     (home-page "https://github.com/mllg/base64url")
     (synopsis "Fast and URL-safe base64 encoder and decoder")
     (description
@@ -7080,38 +6889,38 @@ systems.")
     (properties `((upstream-name . "radiant.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-broom" ,r-broom)
-       ("r-car" ,r-car)
-       ("r-curl" ,r-curl)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dt" ,r-dt)
-       ("r-glue" ,r-glue)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-import" ,r-import)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-markdown" ,r-markdown)
-       ("r-mass" ,r-mass)
-       ("r-patchwork" ,r-patchwork)
-       ("r-plotly" ,r-plotly)
-       ("r-psych" ,r-psych)
-       ("r-randomizr" ,r-randomizr)
-       ("r-readr" ,r-readr)
-       ("r-readxl" ,r-readxl)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyfiles" ,r-shinyfiles)
-       ("r-shinyace" ,r-shinyace)
-       ("r-stringi" ,r-stringi)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-writexl" ,r-writexl)))
+     (list r-base64enc
+           r-broom
+           r-car
+           r-curl
+           r-dplyr
+           r-dt
+           r-glue
+           r-ggplot2
+           r-import
+           r-jsonlite
+           r-knitr
+           r-lubridate
+           r-magrittr
+           r-markdown
+           r-mass
+           r-patchwork
+           r-plotly
+           r-psych
+           r-randomizr
+           r-readr
+           r-readxl
+           r-rlang
+           r-rmarkdown
+           r-rstudioapi
+           r-scales
+           r-shiny
+           r-shinyfiles
+           r-shinyace
+           r-stringi
+           r-tibble
+           r-tidyr
+           r-writexl))
     (home-page "https://github.com/radiant-rstats/radiant.data")
     (synopsis "Data menu for Radiant: business analytics using R and Shiny")
     (description
@@ -7155,7 +6964,7 @@ and within plot factors interact.")
         (base32 "039frwrsxq1lb97s7vf2vbyyadimkigs628ymym06fxka53drdkp"))))
     (properties `((upstream-name . "alluvial")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mbojan/alluvial")
     (synopsis "Create parallel sets plots (Alluvial Diagrams)")
     (description
@@ -7175,8 +6984,8 @@ plots) for multivariate and time series-like data.")
         (base32
          "0qaf39vfmhn3d0bdjqd805ayfkaj48dkmf5dqd47bpk7dp21b837"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-mass))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/signal/")
     (synopsis "Signal processing")
     (description
@@ -7198,7 +7007,7 @@ It also includes interpolation functions.")
         (base32
          "00j6b8b6xsx6v370h220x233rpk6asca78165y3d48jpwvwisdc9"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-proto" ,r-proto)))
+    (propagated-inputs (list r-proto))
     (home-page "https://code.google.com/archive/p/gsubfn/")
     (synopsis "Utilities for strings and function arguments.")
     (description
@@ -7225,11 +7034,7 @@ functions.")
          "0q12vsb53p2wchgp8wfz5bk08wfnm0jxjrakclj4jyy6x3a7ksff"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-chron" ,r-chron)
-       ("r-dbi" ,r-dbi)
-       ("r-gsubfn" ,r-gsubfn)
-       ("r-proto" ,r-proto)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-chron r-dbi r-gsubfn r-proto r-rsqlite))
     (home-page "https://github.com/ggrothendieck/sqldf")
     (synopsis "Manipulate R data frames using SQL")
     (description
@@ -7303,21 +7108,21 @@ specific S3-method.")
     (properties `((upstream-name . "VIM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-colorspace" ,r-colorspace)
-       ("r-data-table" ,r-data-table)
-       ("r-e1071" ,r-e1071)
-       ("r-laeken" ,r-laeken)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-ranger" ,r-ranger)
-       ("r-rcpp" ,r-rcpp)
-       ("r-robustbase" ,r-robustbase)
-       ("r-sp" ,r-sp)
-       ("r-vcd" ,r-vcd)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-car
+           r-colorspace
+           r-data-table
+           r-e1071
+           r-laeken
+           r-magrittr
+           r-mass
+           r-nnet
+           r-ranger
+           r-rcpp
+           r-robustbase
+           r-sp
+           r-vcd))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/alexkowa/VIM")
     (synopsis "Visualization and imputation of missing values")
     (description
@@ -7367,7 +7172,7 @@ regression and information measures are implemented.")
          "0nqr1bvlr5bnasqg74zmknjjl4x28kla9h5cxpga3kq5z215pdci"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ttr" ,r-ttr)))
+     (list r-ttr))
     (home-page "https://cran.r-project.org/web/packages/smoother")
     (synopsis "Functions relating to the smoothing of numerical data")
     (description
@@ -7390,9 +7195,9 @@ are included.")
          "04ap1dsa7fx03l73jhv1ql3adaaaz2100qawdplxa9xmrllgcgbj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-rcolorbrewer))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://logfc.wordpress.com")
     (synopsis "Sankey or ribbon plots")
     (description
@@ -7416,7 +7221,7 @@ plots for R.")
          "16fqv9k7yxdgybwzafjkyqm16qpgqz13lcjpi6a1nc8xbzlzh0gb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (home-page "https://cran.r-project.org/web/packages/dyn")
     (synopsis "Time series regression")
     (description
@@ -7443,7 +7248,7 @@ contain lags, diffs and missing values.")
          "0fyhl69z2lznymvpzxra9qvcg85ggzkfjy68c6mzdmf1ja44d2k5"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/catdap/")
     (synopsis "Tools for categorical data analysis")
     (description
@@ -7466,8 +7271,7 @@ evaluated by the @dfn{Akaike Information Criterion} (AIC).")
          "0zzwr1mg92ha5l6razdb04da8ik3z3k74rm0rah44l1j2a6d30sk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-generics" ,r-generics)
-       ("r-matrix" ,r-matrix)))
+     (list r-generics r-matrix))
     (home-page "https://github.com/mhahsler/arules")
     (synopsis "Mining association rules and frequent itemsets")
     (description
@@ -7490,7 +7294,7 @@ and Eclat.")
          "05l6f1n3dsm383w7jfg3j38klvmzzfvc7qi9zr5ij13rljj8s1vb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rematch2" ,r-rematch2)))
+     (list r-rematch2))
     (home-page "https://github.com/gaborcsardi/parsedate")
     (synopsis
      "Recognize and parse dates in various formats")
@@ -7536,11 +7340,7 @@ goodness-of-fit.")
          "0ngzaaz2y2s03fhngvwipmy4kq38xrmyddaz6a6l858rxvadrlhb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abc-data" ,r-abc-data)
-       ("r-locfit" ,r-locfit)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-abc-data r-locfit r-mass r-nnet r-quantreg))
     (home-page "https://cran.r-project.org/web/packages/abc/")
     (synopsis "Tools for Approximate Bayesian Computation (ABC)")
     (description
@@ -7584,11 +7384,9 @@ additional external tools on any platform.")
          "0vn8ifxb7ccip6b1ijf5lpa6c0n5y5ll8fbabybsb8nfc0y1nmxg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-stringi" ,r-stringi)
-       ("r-zip" ,r-zip)))
+     (list r-rcpp r-stringi r-zip))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/awalker89/openxlsx")
     (synopsis "Read, write and edit XLSX files")
     (description
@@ -7612,15 +7410,15 @@ dependency on Java.")
          "04jlrhyl0791yxwcpp1s8p1hhkljnijlc5iaxpk56h41w63k39lz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-data-table" ,r-data-table)
-       ("r-foreign" ,r-foreign)
-       ("r-haven" ,r-haven)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-readxl" ,r-readxl)
-       ("r-tibble" ,r-tibble)))
+     (list r-curl
+           r-data-table
+           r-foreign
+           r-haven
+           r-openxlsx
+           r-readxl
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/leeper/rio")
     (synopsis "Swiss-army knife for data I/O")
     (description
@@ -7648,9 +7446,7 @@ simple method for converting between file types.")
          "0fa4a43zax8gn3jdp4ngqav61x4g6l33bg9wzqbngkbjhipck59r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreign" ,r-foreign)
-       ("r-lattice" ,r-lattice)
-       ("r-sp" ,r-sp)))
+     (list r-foreign r-lattice r-sp))
     (home-page "https://r-forge.r-project.org/projects/maptools/")
     (synopsis "Tools for reading and handling spatial objects")
     (description
@@ -7676,10 +7472,9 @@ exchanging spatial objects with other R packages.")
          "0acqg29hcm2iq1418b54np7zb5pnr3xzrwc3ijv2pz9wra10ix88"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-rcpp r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/later")
     (synopsis "Utilities for delaying function execution")
     (description
@@ -7700,13 +7495,9 @@ time after the current time, after the R execution stack has emptied.")
          "1dy4cbqw17awh4q8m7cy3anaj0n9iynabfzflb1g94cyj0bq4fld"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-later" ,r-later)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-later r-magrittr r-r6 r-rcpp r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rstudio.github.io/promises")
     (synopsis "Abstractions for promise-based asynchronous programming")
     (description
@@ -7731,9 +7522,7 @@ promises, but with a syntax that is idiomatic R.")
     (properties `((upstream-name . "doSNOW")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-snow" ,r-snow)))
+     (list r-foreach r-iterators r-snow))
     (home-page "https://cran.r-project.org/web/packages/doSNOW")
     (synopsis "Foreach parallel adaptor for the snow package")
     (description
@@ -7754,7 +7543,7 @@ using the @code{snow} package.")
          "0vwclzxww8mw9nnpyj29bn71mrr8jjg7ka03979h9rbzw6d9bjrr"))))
     (properties `((upstream-name . "fst")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "http://www.fstpackage.org")
     (synopsis "Fast serialization of data frames")
     (description
@@ -7777,7 +7566,7 @@ compression with the LZ4 and ZSTD compressors.")
              (base32 "13941rlw1jsdjsndp1plzj1cq5aqravizkrqn6l25r9im7rnsi2w"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-snow" ,r-snow)))
+    (list r-snow))
    (home-page "https://cran.r-project.org/web/packages/snowfall/")
    (synopsis "Easier cluster computing")
    (description "This package is a usability wrapper around snow for easier
@@ -7835,9 +7624,7 @@ it.")
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-servr" ,r-servr)
-       ("r-xml" ,r-xml)))
+     (list r-igraph r-servr r-xml))
     (native-inputs
      `(("r-knitr" ,r-knitr)
        ("esbuild" ,esbuild)
@@ -7890,10 +7677,9 @@ JavaScript library) and interact with the igraph package.")
     (properties `((upstream-name . "data.tree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-stringi" ,r-stringi)))
+     (list r-r6 r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gluc/data.tree")
     (synopsis "General purpose hierarchical data structure")
     (description
@@ -7917,18 +7703,18 @@ finance, conversion from and to JSON, and many other applications.")
     (properties `((upstream-name . "dtplyr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-crayon
+           r-data-table
+           r-dplyr
+           r-ellipsis
+           r-glue
+           r-lifecycle
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/dtplyr")
     (synopsis "Data Table back-end for dplyr")
     (description
@@ -7970,8 +7756,7 @@ automatically translated to the equivalent, but usually much faster,
                  (invoke "esbuild" source "--minify"
                          (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-data-tree" ,r-data-tree)
-       ("r-htmlwidgets" ,r-htmlwidgets)))
+     (list r-data-tree r-htmlwidgets))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("d3.v4.js"
@@ -8024,15 +7809,15 @@ Python's @url{https://github.com/ActiveState/appdirs,Appdirs} to R.")
     (properties `((upstream-name . "rasterVis")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hexbin" ,r-hexbin)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-raster" ,r-raster)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-sp" ,r-sp)
-       ("r-terra" ,r-terra)
-       ("r-viridislite" ,r-viridislite)
-       ("r-zoo" ,r-zoo)))
+     (list r-hexbin
+           r-lattice
+           r-latticeextra
+           r-raster
+           r-rcolorbrewer
+           r-sp
+           r-terra
+           r-viridislite
+           r-zoo))
     (home-page "https://oscarperpinan.github.io/rastervis/")
     (synopsis "Visualization methods for raster data")
     (description
@@ -8056,11 +7841,9 @@ provides methods to display spatiotemporal rasters, and vector fields.")
     (properties `((upstream-name . "rentrez")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-xml" ,r-xml)))
+     (list r-httr r-jsonlite r-xml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/rentrez/")
     (synopsis "Entrez in R")
     (description
@@ -8083,7 +7866,7 @@ those searches and pull data into their R sessions.")
     (properties `((upstream-name . "renv")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rstudio.github.io/renv")
     (synopsis "Project environments")
     (description
@@ -8107,20 +7890,20 @@ reproducible.")
          "08xwmms6x58y3dsfbl9c6d03145hb4ij97nqr1cc9dxxilmr6x31"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-evaluate" ,r-evaluate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-markdown" ,r-markdown)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-renv" ,r-renv)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-shiny" ,r-shiny)
-       ("r-withr" ,r-withr)))
+     (list r-checkmate
+           r-ellipsis
+           r-evaluate
+           r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-markdown
+           r-rappdirs
+           r-renv
+           r-rmarkdown
+           r-rprojroot
+           r-shiny
+           r-withr))
     (home-page "https://rstudio.github.io/learnr/")
     (synopsis "Interactive tutorials for R")
     (description
@@ -8142,18 +7925,18 @@ quizzes to create self-paced tutorials for learning about R and R packages.")
          "0js3c8lwj3knccb55nq03cbjlf4w390p9aid2mi5x80l3ayd9in1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-cluster" ,r-cluster)
-       ("r-fractal" ,r-fractal)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-np" ,r-np)
-       ("r-powerplus" ,r-powerplus)
-       ("r-robust" ,r-robust)
-       ("r-trend" ,r-trend)
-       ("r-tsa" ,r-tsa)
-       ("r-urca" ,r-urca)
-       ("r-vim" ,r-vim)))
+     (list r-car
+           r-cluster
+           r-fractal
+           r-lmtest
+           r-mass
+           r-np
+           r-powerplus
+           r-robust
+           r-trend
+           r-tsa
+           r-urca
+           r-vim))
     (home-page "https://cran.r-project.org/web/packages/analytics/")
     (synopsis "Collection of data analysis tools")
     (description
@@ -8176,8 +7959,8 @@ obtain a better initial configuration in non-metric MDS.")
         (base32 "0srlr8h8qmr0wrmp7gs4g2ry5dni2hx8n947bik3s3a26f091v88"))))
     (properties `((upstream-name . "here")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rprojroot" ,r-rprojroot)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-rprojroot))
+    (native-inputs (list r-knitr))
     (home-page "https://here.r-lib.org/")
     (synopsis "Simpler way to find files")
     (description
@@ -8198,17 +7981,17 @@ always locate the files relative to your project root.")
         (base32
          "0v7m2pv94lfqiw8rhz3c9g66vvz4qvih4vd29rhfk2phmcwpnvmh"))))
     (build-system r-build-system)
-    (inputs `(("python" ,python)))
+    (inputs (list python))
     (propagated-inputs
-     `(("r-here" ,r-here)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-png" ,r-png)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rcpp" ,r-rcpp)
-       ("r-withr" ,r-withr)))
+     (list r-here
+           r-jsonlite
+           r-matrix
+           r-png
+           r-rappdirs
+           r-rcpp
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstudio/reticulate")
     (synopsis "R interface to Python")
     (description
@@ -8230,7 +8013,7 @@ Python to R they are converted back to R types.")
         (base32
          "0vdwx6808r73pk15263f33bkqbfmb08d8jkmr4d7h4ml414ikbbv"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-stringr" ,r-stringr)))
+    (propagated-inputs (list r-stringr))
     (home-page "https://github.com/romainfrancois/bibtex")
     (synopsis "Bibtex parser")
     (description "This package provides a utility for R to parse a bibtex
@@ -8249,7 +8032,7 @@ file.")
         (base32
          "13q6kcpxrqxqbji889fx63p0nsi08lk5yymkchig75r5k1d18ky1"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
+    (propagated-inputs (list r-ggplot2))
     (home-page "https://github.com/omarwagih/ggseqlogo")
     (synopsis "ggplot2 extension for drawing genetic sequence logos")
     (description
@@ -8274,8 +8057,7 @@ Sequence logos can easily be combined with other ggplot2 plots.")
          "0g73x6grbka7ahjh6z23m3wrcifp5rdfdiasbl8lq4sp6rplxwaa"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-scales))
     (home-page "https://nanx.me/ggsci/")
     (synopsis "Scientific journal and sci-fi themed color palettes for ggplot2")
     (description
@@ -8297,9 +8079,9 @@ movies, and TV shows.")
          "1ad774c7s7y4i00xd89lfigr9aybl94q98ch598k3rchanr4b1fa"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://github.com/const-ae/ggsignif")
     (synopsis "Significance brackets for ggplot2")
     (description
@@ -8325,17 +8107,17 @@ and adds the annotation to the plot.")
     (properties `((upstream-name . "rstatix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-car" ,r-car)
-       ("r-corrplot" ,r-corrplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-broom
+           r-car
+           r-corrplot
+           r-dplyr
+           r-generics
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect))
     (home-page "https://rpkgs.datanovia.com/rstatix/")
     (synopsis "Pipe-friendly framework for basic statistical tests")
     (description
@@ -8361,22 +8143,22 @@ matrix.")
          "0x86lmghr25k8w90yrp360dn42dhp5cjvjpdiv2s2gxfn701xcmb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggsci" ,r-ggsci)
-       ("r-ggsignif" ,r-ggsignif)
-       ("r-glue" ,r-glue)
-       ("r-gridextra" ,r-gridextra)
-       ("r-magrittr" ,r-magrittr)
-       ("r-polynom" ,r-polynom)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-rstatix" ,r-rstatix)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-cowplot
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-ggsci
+           r-ggsignif
+           r-glue
+           r-gridextra
+           r-magrittr
+           r-polynom
+           r-purrr
+           r-rlang
+           r-scales
+           r-rstatix
+           r-tibble
+           r-tidyr))
     (home-page "http://www.sthda.com/english/rpkgs/ggpubr")
     (synopsis "ggplot2-based publication-ready plots")
     (description
@@ -8423,7 +8205,7 @@ Analysis and its Applications.")
          "0l4lpz451ll7f7lfxmb7ds24ppzhfg1c3ypvydglcc35p2dq99s8"))))
     (properties `((upstream-name . "flashClust")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/flashClust/")
     (synopsis "Implementation of optimal hierarchical clustering")
     (description
@@ -8445,19 +8227,19 @@ clustering.")
     (properties `((upstream-name . "FactoMineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-cluster" ,r-cluster)
-       ("r-dt" ,r-dt)
-       ("r-ellipse" ,r-ellipse)
-       ("r-flashclust" ,r-flashclust)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-lattice" ,r-lattice)
-       ("r-leaps" ,r-leaps)
-       ("r-mass" ,r-mass)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-car
+           r-cluster
+           r-dt
+           r-ellipse
+           r-flashclust
+           r-ggplot2
+           r-ggrepel
+           r-lattice
+           r-leaps
+           r-mass
+           r-scatterplot3d))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://factominer.free.fr")
     (synopsis "Multivariate exploratory data analysis and data mining")
     (description
@@ -8483,15 +8265,15 @@ structured in groups, etc. and hierarchical cluster analysis.")
          "1allvdjhd3pq8xz30b1cymwcik5iaahghrjrlnn54cwkfhfg0kv2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-cluster" ,r-cluster)
-       ("r-dendextend" ,r-dendextend)
-       ("r-factominer" ,r-factominer)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-reshape2" ,r-reshape2)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-abind
+           r-cluster
+           r-dendextend
+           r-factominer
+           r-ggplot2
+           r-ggpubr
+           r-ggrepel
+           r-reshape2
+           r-tidyr))
     (home-page "http://www.sthda.com/english/rpkgs/factoextra")
     (synopsis "Extract and visualize the results of multivariate data analyses")
     (description
@@ -8518,7 +8300,7 @@ steps and provides ggplot2-based elegant data visualization.")
          "0kx5kjhr8dvqz1mq1zkijkgp29jv8b0irm1xplx1d74n2v1zh6wx"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/brodieG/fansi")
     (synopsis "ANSI control sequence aware string functions")
     (description
@@ -8560,13 +8342,11 @@ results to the user.")
          "0bv2q4ir73sbk5ra2q4mc8wbcmiwkws8k0mjlnx9ysi2mdrm3dw7"))))
     (build-system r-build-system)
     (inputs
-     `(("hdf5" ,hdf5)
-       ("zlib" ,zlib)))
+     (list hdf5 zlib))
     (propagated-inputs
-     `(("r-bit64" ,r-bit64)
-       ("r-r6" ,r-r6)))
+     (list r-bit64 r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://hhoeflin.github.io/hdf5r")
     (synopsis "Interface to the HDF5 binary data format")
     (description
@@ -8590,7 +8370,7 @@ corresponding R counterparts.")
          "1ls5biiva10pb1dj3ph4griykb9vam02hkrdmlr5a5wf660hg6xn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-iterators" ,r-iterators)))
+     (list r-iterators))
     (home-page "https://cran.r-project.org/web/packages/itertools/")
     (synopsis "Iterator tools")
     (description
@@ -8652,11 +8432,11 @@ functions.")
          "041y4zfr50y96g0kl857jcba0a3gpdpk8qfn9fj8zxzbz71k87xr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)))
+     (list r-coda))
     (inputs
-     `(("jags" ,jags)))
+     (list jags))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://mcmc-jags.sourceforge.net")
     (synopsis "Bayesian graphical models using MCMC")
     (description
@@ -8701,7 +8481,7 @@ implemented in bibutils.")
     (properties `((upstream-name . "Rdpack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rbibutils" ,r-rbibutils)))
+     (list r-rbibutils))
     (home-page "https://github.com/GeoBosh/Rdpack")
     (synopsis "Update and manipulate Rd documentation objects")
     (description
@@ -8726,12 +8506,9 @@ references and Rd files.")
          "1gfx299zr4q2264q37994pirv5bd5isn1cszccz603ij3q40wajr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-uuid" ,r-uuid)
-       ("r-xml2" ,r-xml2)
-       ("r-zip" ,r-zip)))
+     (list r-r6 r-uuid r-xml2 r-zip))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://davidgohel.github.io/officer")
     (synopsis "Manipulation of Word and PowerPoint documents")
     (description
@@ -8782,7 +8559,7 @@ on the methods that are implemented can be found in Kosmidis (2008)
     (properties `((upstream-name . "brglm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-profilemodel" ,r-profilemodel)))
+     (list r-profilemodel))
     (home-page "https://github.com/ikosmidis/brglm")
     (synopsis "Bias reduction in binomial-response generalized linear models")
     (description
@@ -8858,11 +8635,7 @@ or missing responses.")
     (properties `((upstream-name . "ACDm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rsolnp" ,r-rsolnp)
-       ("r-zoo" ,r-zoo)))
+     (list r-dplyr r-ggplot2 r-plyr r-rsolnp r-zoo))
     (home-page "https://cran.r-project.org/web/packages/ACDm/")
     (synopsis "Tools for Autoregressive Conditional Duration Models")
     (description
@@ -8906,8 +8679,7 @@ intervals.")
          "1ky1x2cp5rd0ffd9m1fji9sq4z4jsrpxzg30brw8bb4ihfjj114r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)))
+     (list r-stringi r-stringr))
     (home-page "https://github.com/Tazinho/snakecase")
     (synopsis "Convert strings into any case")
     (description
@@ -8928,7 +8700,7 @@ parse and convert strings into cases like snake or camel among others.")
          "0awlq5lxfia6m2b91w73rksp93rbwv5gwqb36wbji4rgq41rzbrx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://github.com/leeper/prediction")
     (synopsis "Tidy, type-safe prediction methods")
     (description
@@ -8952,7 +8724,7 @@ other add-on packages.")
          "10kc72g2hfsiipba4kalda1wxsb01nq2ax2yim386bkk0vjszwfx"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://easystats.github.io/insight/")
     (synopsis "Easy access to model information for various model objects")
     (description
@@ -8980,9 +8752,9 @@ information are missing.")
          "17gskxr43rgbg7syla3b78g2qgksq2kj07iad4139xycqxblxya0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)))
+     (list r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/sjlabelled")
     (synopsis "Labelled data utility functions")
     (description
@@ -9006,15 +8778,15 @@ vice versa), or to deal with multiple declared missing values.")
          "17hcjb2j690qi2zrkwc14sr1wsid6dy6v7bfsf0bc94ql812k8g2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-insight" ,r-insight)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-dplyr
+           r-insight
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-sjlabelled
+           r-tidyselect))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/sjmisc")
     (synopsis "Data and variable transformation functions")
     (description
@@ -9058,14 +8830,14 @@ hypothesis of normality.")
     (properties `((upstream-name . "moonBook")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-nortest" ,r-nortest)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-stringr" ,r-stringr)
-       ("r-survival" ,r-survival)
-       ("r-ztable" ,r-ztable)))
+     (list r-magrittr
+           r-nortest
+           r-sjmisc
+           r-stringr
+           r-survival
+           r-ztable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/cardiomoon/moonBook")
     (synopsis "Functions and datasets for the book by Keon-Woong Moon")
     (description
@@ -9088,18 +8860,18 @@ functions.")
          "01nm0357b0z4dgrplbq9ms63j51n0rgvvxyy068zdsc5p7j3lql2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-data-table" ,r-data-table)
-       ("r-gdtools" ,r-gdtools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-officer" ,r-officer)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-uuid" ,r-uuid)
-       ("r-xml2" ,r-xml2)))
+     (list r-base64enc
+           r-data-table
+           r-gdtools
+           r-htmltools
+           r-knitr
+           r-officer
+           r-rlang
+           r-rmarkdown
+           r-uuid
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://davidgohel.github.io/flextable")
     (synopsis "Functions for tabular reporting")
     (description
@@ -9122,7 +8894,7 @@ documents.")
         (base32
          "0mfzyn8n5x5x5gf382bqgq61zpw9dymrp5kzdm2sbszplmxf6xry"))))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://github.com/ropensci/writexl")
     (synopsis "Export data frames to xlsx format")
     (description
@@ -9167,10 +8939,7 @@ distribution).")
     (properties `((upstream-name . "GOplot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-ggdendro r-ggplot2 r-gridextra r-rcolorbrewer))
     (home-page "https://github.com/wencke/wencke.github.io")
     (synopsis "Visualization of functional analysis data")
     (description
@@ -9239,13 +9008,11 @@ matches version and feature constraints.")
         (base32
          "1cz5qlxw3v8smd5vb00wlzy02mx5i0infm5hnq55hnakffd3b5wr"))))
     (build-system r-build-system)
-    (inputs `(("python" ,python)))
+    (inputs (list python))
     (propagated-inputs
-     `(("r-findpython" ,r-findpython)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-r6" ,r-r6)))
+     (list r-findpython r-jsonlite r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/trevorld/argparse")
     (synopsis "Command line optional and positional argument parser")
     (description
@@ -9287,7 +9054,7 @@ vectors.")
         (base32
          "165axs15fvwhrp89xd87l81q3h2qjll1vrwcsap645cwvb85nwsh"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-psych" ,r-psych)))
+    (propagated-inputs (list r-psych))
     (home-page "https://cran.r-project.org/web/packages/orddom/")
     (synopsis "Ordinal dominance statistics")
     (description
@@ -9337,19 +9104,19 @@ the work.")
     (properties `((upstream-name . "doBy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-curry" ,r-curry)
-       ("r-deriv" ,r-deriv)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-microbenchmark" ,r-microbenchmark)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-tibble" ,r-tibble)))
+     (list r-broom
+           r-curry
+           r-deriv
+           r-dplyr
+           r-ggplot2
+           r-magrittr
+           r-mass
+           r-matrix
+           r-microbenchmark
+           r-pbkrtest
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://people.math.aau.dk/~sorenh/software/doBy/")
     (synopsis "Groupwise statistics, LSmeans, linear contrasts, and utilities")
     (description
@@ -9377,9 +9144,7 @@ the work.")
     (properties `((upstream-name . "refGenome")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-doby" ,r-doby)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-dbi r-doby r-rsqlite))
     (home-page "https://cran.r-project.org/web/packages/refGenome/")
     (synopsis
      "Gene and splice site annotation using annotation data from Ensembl and UCSC")
@@ -9424,7 +9189,7 @@ procedures to speed up calculations in R.")
          "1fcl3yc1cf09znqbj787d3fd2kl5rp63la7pxawsgmap7nxwkp65"))))
     (properties `((upstream-name . "BlockFeST")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-basix" ,r-basix)))
+    (propagated-inputs (list r-basix))
     (home-page "https://cran.r-project.org/web/packages/BlockFeST/")
     (synopsis "Bayesian calculation of region-specific fixation index")
     (description
@@ -9449,8 +9214,7 @@ containing one or more SNPs that evolved under directional selection.")
     (properties `((upstream-name . "pROC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-plyr r-rcpp))
     (home-page "https://web.expasy.org/pROC/")
     (synopsis "Display and analyze ROC curves")
     (description
@@ -9473,7 +9237,7 @@ bootstrap.  Confidence intervals can be computed for (p)AUC or ROC curves.")
          "182bb727sgqi5f3pzmw8jnn328wdjrgj9lfvg49gv8s22rjd3cxm"))))
     (properties `((upstream-name . "rootSolve")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/rootSolve/")
     (synopsis "Tools for the analysis of ordinary differential equations")
     (description
@@ -9506,7 +9270,7 @@ differential equations} (ODE).  It includes routines that:
         (base32 "0wac1ksmnxa36v99ca4hv8k0rsh3igwpcllmlv9wf7i9kgqviqwi"))))
     (properties `((upstream-name . "ABCanalysis")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-plotrix" ,r-plotrix)))
+    (propagated-inputs (list r-plotrix))
     (home-page "https://www.uni-marburg.de/fb12/arbeitsgruppen/datenbionik/software-en/")
     (synopsis "Computed ABC Analysis")
     (description
@@ -9550,17 +9314,17 @@ based on index arrays and simple triplet representations, respectively.")
      `((upstream-name . "manipulateWidget")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-codetools" ,r-codetools)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-knitr" ,r-knitr)
-       ("r-miniui" ,r-miniui)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-webshot" ,r-webshot)))
+     (list r-base64enc
+           r-codetools
+           r-htmltools
+           r-htmlwidgets
+           r-knitr
+           r-miniui
+           r-shiny
+           r-shinyjs
+           r-webshot))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rte-antares-rpackage/manipulateWidget/")
     (synopsis "Add even more interactivity to interactive charts")
     (description
@@ -9583,8 +9347,7 @@ developers to generate user interfaces easy to maintain.")
     (properties `((upstream-name . "A3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pbapply" ,r-pbapply)
-       ("r-xtable" ,r-xtable)))
+     (list r-pbapply r-xtable))
     (home-page "https://cran.r-project.org/web/packages/A3/")
     (synopsis "Error metrics for predictive models")
     (description
@@ -9678,13 +9441,13 @@ visualization and candidate genes around SNPs.")
     (properties `((upstream-name . "precrec")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcpp" ,r-rcpp)
-       ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-data-table
+           r-ggplot2
+           r-gridextra
+           r-rcpp
+           r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://evalclass.github.io/precrec/")
     (synopsis "Calculate accurate precision-recall and ROC curves")
     (description
@@ -9706,15 +9469,15 @@ of precision-recall and ROC (Receiver Operator Characteristics) curves.")
     (properties `((upstream-name . "NetRep")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bh" ,r-bh)
-       ("r-foreach" ,r-foreach)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)
-       ("r-statmod" ,r-statmod)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-bh
+           r-foreach
+           r-rcolorbrewer
+           r-rcpp
+           r-rcpparmadillo
+           r-rhpcblasctl
+           r-statmod))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/package=NetRep")
     (synopsis "Permutation testing network module preservation across datasets")
     (description
@@ -9737,10 +9500,9 @@ through permutation testing.")
     (properties `((upstream-name . "intergraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-network" ,r-network)))
+     (list r-igraph r-network))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://mbojan.github.io/intergraph")
     (synopsis "Coercion routines for network data objects")
     (description
@@ -9762,7 +9524,7 @@ supported classes are those defined in packages @code{network} and
         (base32 "1ih0xk88qhsmpvnxf56041wx5sk8as2f4f2gdnpnwdym9mbr9n4b"))))
     (properties `((upstream-name . "ABCoptim")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/gvegayon/ABCoptim/")
     (synopsis "Optimization of Artificial Bee Colony algorithm")
     (description
@@ -9787,7 +9549,7 @@ colony optimization algorithm @url{http://mf.erciyes.edu.tr/abc/pub/tr06_2005.pd
         (base32 "1s2skkxpzss7c29i8600psgrp0hl46jcrxqrmy2b4db8hc0kcnbx"))))
     (properties `((upstream-name . "ABCp2")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ABCp2/")
     (synopsis "Approximate Bayesian Computational Model for Estimating P2")
     (description
@@ -9808,15 +9570,15 @@ second male (P2) based on the best fit distribution.")
         (base32 "1ghbd24yhqy3xhdxas6ccn84nkavqpgldx5ck8kijknc7qjm8k27"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-mass" ,r-mass)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-ranger" ,r-ranger)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-readr" ,r-readr)
-       ("r-stringr" ,r-stringr)))
+     (list r-doparallel
+           r-foreach
+           r-mass
+           r-matrixstats
+           r-ranger
+           r-rcpp
+           r-rcpparmadillo
+           r-readr
+           r-stringr))
     (home-page "https://cran.r-project.org/web/packages/abcrf/")
     (synopsis "Approximate bayesian computation via random forests")
     (description
@@ -9838,10 +9600,7 @@ ABC algorithms.")
         (base32 "07s9dg10i8lsxl73b4n2hynca2fjgb0ykb0dz8c3zv6cgw3cyx97"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abc" ,r-abc)
-       ("r-abind" ,r-abind)
-       ("r-hmisc" ,r-hmisc)
-       ("r-plyr" ,r-plyr)))
+     (list r-abc r-abind r-hmisc r-plyr))
     (home-page "https://github.com/dennisprangle/abctools/")
     (synopsis "Tools for ABC analyses")
     (description
@@ -9863,10 +9622,7 @@ and coverage methods to tune the choice of threshold.")
         (base32 "0jz9vvnmcc6a38n8nzr458r65sna23bgn5r8mxdhzdlyqibihr7d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2 r-plyr r-rlang r-withr))
     (home-page "https://cran.r-project.org/web/packages/ggstance/")
     (synopsis "Horizontal and vertical versions of @code{r-ggplot2}")
     (description
@@ -9891,12 +9647,8 @@ and coverage methods to tune the choice of threshold.")
     (properties `((upstream-name . "ggnetwork")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-network" ,r-network)
-       ("r-sna" ,r-sna)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-ggrepel r-igraph r-network r-sna))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/briatte/ggnetwork")
     (synopsis "Geometries to plot networks with ggplot2")
     (description
@@ -9918,8 +9670,7 @@ ggplot2 package.")
     (properties `((upstream-name . "cvAUC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-rocr" ,r-rocr)))
+     (list r-data-table r-rocr))
     (home-page "https://github.com/ledell/cvAUC")
     (synopsis "Cross-validated area under the ROC curve confidence intervals")
     (description
@@ -9945,9 +9696,9 @@ repeated measures data, respectively.")
     (properties `((upstream-name . "gam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)))
+     (list r-foreach))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/package=gam")
     (synopsis "Generalized additive models")
     (description
@@ -9971,11 +9722,9 @@ Models\" (Hastie and Tibshirani, 1990).")
     (properties `((upstream-name . "SuperLearner")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cvauc" ,r-cvauc)
-       ("r-gam" ,r-gam)
-       ("r-nnls" ,r-nnls)))
+     (list r-cvauc r-gam r-nnls))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ecpolley/SuperLearner")
     (synopsis "Super learner prediction")
     (description
@@ -9997,11 +9746,9 @@ a library of prediction algorithms to be used in the super learner.")
     (properties `((upstream-name . "drtmle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future-apply" ,r-future-apply)
-       ("r-np" ,r-np)
-       ("r-superlearner" ,r-superlearner)))
+     (list r-future-apply r-np r-superlearner))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/benkeser/drtmle")
     (synopsis "Doubly-robust nonparametric estimation and inference")
     (description
@@ -10029,12 +9776,9 @@ both to consistency and asymptotic normality.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-future" ,r-future)
-       ("r-globals" ,r-globals)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-future r-globals r-iterators))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/doFuture")
     (synopsis "Foreach parallel adapter using the future API")
     (description
@@ -10056,13 +9800,13 @@ futures can be used as backends for the @code{foreach} framework.")
     (properties `((upstream-name . "superheat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-magrittr" ,r-magrittr)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)))
+     (list r-dplyr
+           r-ggdendro
+           r-ggplot2
+           r-gtable
+           r-magrittr
+           r-plyr
+           r-scales))
     (home-page "https://cran.r-project.org/package=superheat")
     (synopsis "Graphical tool for exploring complex datasets using heatmaps")
     (description
@@ -10085,7 +9829,7 @@ data with multiple data types.")
     (properties `((upstream-name . "qualV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)))
+     (list r-kernsmooth))
     (home-page "http://qualV.R-Forge.R-Project.org/")
     (synopsis "Qualitative Validation Methods")
     (description
@@ -10117,10 +9861,7 @@ subsequence} (LCS) using a dynamic programming algorithm.")
     (properties `((upstream-name . "mosaicCore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-mass" ,r-mass)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-mass r-rlang r-tidyr))
     (home-page "https://github.com/ProjectMOSAIC/mosaicCore/")
     (synopsis "Common utilities for mosaic family packages")
     (description
@@ -10141,15 +9882,15 @@ subsequence} (LCS) using a dynamic programming algorithm.")
     (properties `((upstream-name . "labelled")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-haven" ,r-haven)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-dplyr
+           r-haven
+           r-lifecycle
+           r-rlang
+           r-stringr
+           r-tidyr
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://larmarange.github.io/labelled/")
     (synopsis "Manipulating labelled data")
     (description
@@ -10170,19 +9911,19 @@ haven package. ")
         (base32 "1ph5jd8svk8hmshi894vmmpq3zwgdmf4yn3gmdlkad68z8jynhsp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)
-       ("r-ggstance" ,r-ggstance)
-       ("r-labelled" ,r-labelled)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mosaiccore" ,r-mosaiccore)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-ggforce
+           r-ggplot2
+           r-ggridges
+           r-ggstance
+           r-labelled
+           r-magrittr
+           r-mosaiccore
+           r-rlang
+           r-scales
+           r-stringr
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ProjectMOSAIC/ggformula/")
     (synopsis "Formula interface for the @code{r-ggplot2}")
     (description
@@ -10224,9 +9965,7 @@ used to teach mathematics, statistics, computation and modeling.")
          "0wixw1ixnmcmkwczpj8m90c76727zira2rl4ighashggydkm2mlr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-sp" ,r-sp)
-       ("r-terra" ,r-terra)))
+     (list r-rcpp r-sp r-terra))
     (home-page "https://www.rspatial.org/")
     (synopsis "Geographic data analysis and modeling")
     (description
@@ -10247,25 +9986,25 @@ Processing of very large files is supported.")
       (base32 "1y0isqbva0vi5zlx1xvixbq87n4xp66ljh43qnd0cpzaz0mn21cg"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-broom" ,r-broom)
-      ("r-dplyr" ,r-dplyr)
-      ("r-ggdendro" ,r-ggdendro)
-      ("r-ggformula" ,r-ggformula)
-      ("r-ggplot2" ,r-ggplot2)
-      ("r-ggrepel" ,r-ggrepel)
-      ("r-glue" ,r-glue)
-      ("r-gridextra" ,r-gridextra)
-      ("r-lattice" ,r-lattice)
-      ("r-latticeextra" ,r-latticeextra)
-      ("r-lazyeval" ,r-lazyeval)
-      ("r-mass" ,r-mass)
-      ("r-matrix" ,r-matrix)
-      ("r-mosaiccore" ,r-mosaiccore)
-      ("r-mosaicdata" ,r-mosaicdata)
-      ("r-readr" ,r-readr)
-      ("r-tidyr" ,r-tidyr)))
+    (list r-broom
+          r-dplyr
+          r-ggdendro
+          r-ggformula
+          r-ggplot2
+          r-ggrepel
+          r-glue
+          r-gridextra
+          r-lattice
+          r-latticeextra
+          r-lazyeval
+          r-mass
+          r-matrix
+          r-mosaiccore
+          r-mosaicdata
+          r-readr
+          r-tidyr))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/ProjectMOSAIC/mosaic/")
    (synopsis "Mathematics, statistics, and computation teaching utilities")
    (description
@@ -10289,9 +10028,7 @@ professional lives, but which are usually taught in isolation, if at all.")
         (base32 "191gspqzdv573vaw624ri0f5cm6v4j524bjs74d4a1hn3kn6r9b7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mosaic" ,r-mosaic)
-       ("r-nlme" ,r-nlme)))
+     (list r-lattice r-mosaic r-nlme))
     (home-page "https://cran.r-project.org/web/packages/abd/")
     (synopsis "Analysis of biological data")
     (description
@@ -10312,7 +10049,7 @@ biological data by Michael Whitlock and Dolph Schluter.")
     (properties `((upstream-name . "svGUI")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svGUI/")
     (synopsis "Functions for managing GUI clients in R")
     (description
@@ -10335,13 +10072,11 @@ calls to the particular toolkits in use in function of the context.")
     (properties `((upstream-name . "svDialogs")))
     (build-system r-build-system)
     (inputs
-     `(("yad" ,yad)
-       ("zenity" ,zenity)))
+     (list yad zenity))
     (propagated-inputs
-     `(("r-rstudioapi" ,r-rstudioapi)
-       ("r-svgui" ,r-svgui)))
+     (list r-rstudioapi r-svgui))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svDialogs/")
     (synopsis "Portable dialog boxes")
     (description
@@ -10405,8 +10140,7 @@ mode are currently supported.")
     (properties `((upstream-name . "ABHgenotypeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (home-page "https://github.com/StefanReuscher/ABHgenotypeR/")
     (synopsis "Visualize and manipulate ABH genotypes")
     (description
@@ -10431,13 +10165,13 @@ genotypes as \"graphical genotypes\".")
          "001p2yhznrpnrjvdcmf2h3wpgdnw01wnqgid7wbq8bhavhi3888a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-future" ,r-future)
-       ("r-globals" ,r-globals)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-future
+           r-globals
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-vctrs))
     (home-page "https://github.com/DavisVaughan/furrr")
     (synopsis "Apply mapping functions in parallel using futures")
     (description
@@ -10459,14 +10193,14 @@ distributed on a compute cluster.")
         (base32 "18mmlkqsrjfclk8islfjdsp8sbw6dpjj5x45kqilxdiss69gg5zd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-rstudioapi
+           r-stringi
+           r-stringr
+           r-tidyr))
     (home-page "https://github.com/abjur/abjutils/")
     (synopsis "Collection of tools for jurimetrical analysis")
     (description
@@ -10488,8 +10222,7 @@ removal.")
         (base32 "1fzfskl9akl06nliy8hkv2a0pznpj8pwcypg3gj5r2nzvr3kan9v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/abnormality/")
     (synopsis "Measure a subject's abnormality with respect to a reference population")
     (description
@@ -10514,7 +10247,7 @@ research.")
     (properties `((upstream-name . "abodOutlier")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)))
+     (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/abodOutlier/")
     (synopsis "Angle-based outlier detection")
     (description
@@ -10542,7 +10275,7 @@ detection.")
         (base32 "0n3f66nmfi5v94il1mxy026mi84w01ph2aljk60vn3mrz8kwf2ll"))))
     (properties `((upstream-name . "ABPS")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-kernlab" ,r-kernlab)))
+    (propagated-inputs (list r-kernlab))
     (home-page "https://cran.r-project.org/web/packages/ABPS/")
     (synopsis "Abnormal blood profile score to detect blood doping")
     (description
@@ -10586,7 +10319,7 @@ for the reconstruction of gene regulatory networks.")
         (base32 "0vzf5wazs92bhqhqd66v3vwmbfmnh67gb2466g1xxawim649nk05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://github.com/atahk/pscl/")
     (synopsis "Political science computational laboratory")
     (description
@@ -10612,8 +10345,7 @@ data;
         (base32 "1nql9inx6azdzi3z4sfm2vdml2mms6krl8wzlf1dn1c97ahn57fy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mice" ,r-mice)
-       ("r-pscl" ,r-pscl)))
+     (list r-mice r-pscl))
     (home-page "https://cran.r-project.org/web/packages/accelmissing/")
     (synopsis "Missing value imputation for accelerometer data")
     (description
@@ -10636,7 +10368,7 @@ and the non-wearing time, selecting valid days and subjects, and creating plots.
        (sha256
         (base32 "009dj0zkj1zry7jr9hf4cknb686z50a2l967if64xm0dvjmp7dgs"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mvtnorm" ,r-mvtnorm)))
+    (propagated-inputs (list r-mvtnorm))
     (home-page "https://github.com/jaredo/mhsmm/")
     (synopsis "Inference for hidden Markov and semi-Markov models")
     (description
@@ -10659,7 +10391,7 @@ emission distributions.")
        (sha256
         (base32 "1v9znvncyigw9r25wx2ma0b7ib179b488dl0qsrhp5zrcz7mcjgm"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nleqslv/")
     (synopsis "Solve systems of nonlinear equations")
     (description
@@ -10715,19 +10447,19 @@ on user-defined cut-points of accelerometer counts.
         (base32 "1ii2vm47djxbixa75h690q1s2f9m9x6i8nkygik93j6dayr6kr1m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circlize" ,r-circlize)
-       ("r-dbi" ,r-dbi)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-iterators" ,r-iterators)
-       ("r-mhsmm" ,r-mhsmm)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-physicalactivity" ,r-physicalactivity)
-       ("r-plyr" ,r-plyr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-zoo" ,r-zoo)))
+     (list r-circlize
+           r-dbi
+           r-ggplot2
+           r-iterators
+           r-mhsmm
+           r-nleqslv
+           r-physicalactivity
+           r-plyr
+           r-r-utils
+           r-rcpp
+           r-rcpparmadillo
+           r-rsqlite
+           r-zoo))
     (home-page "https://cran.r-project.org/web/packages/acc/")
     (synopsis "Exploring accelerometer data")
     (description
@@ -10772,7 +10504,7 @@ conveniently wrapped into a data frame.")
         (base32
          "0c2x2n1p53lcw0vx4vmy5j7m2f95i7g2iwbryl89imr99rvz617j"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-dbi" ,r-dbi)))
+    (propagated-inputs (list r-dbi))
     (home-page "https://cran.r-project.org/web/packages/mitools/")
     (synopsis "Tools for multiple imputation of missing data")
     (description
@@ -10793,11 +10525,9 @@ multiple-imputation datasets.")
    (properties `((upstream-name . "mixsqp")))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-irlba" ,r-irlba)
-      ("r-rcpp" ,r-rcpp)
-      ("r-rcpparmadillo" ,r-rcpparmadillo)))
+    (list r-irlba r-rcpp r-rcpparmadillo))
    (native-inputs
-    `(("r-knitr" ,r-knitr)))
+    (list r-knitr))
    (home-page "https://github.com/stephenslab/mixsqp")
    (synopsis
     "Sequential quadratic programming for maximum-likelihood estimation")
@@ -10824,15 +10554,11 @@ samples is large and the number of mixture components is not too large.")
          "0h942bn7wfnzbbgq9hrs75c7igmg5r1c5sad2v0znhza4cp7p1w3"))))
     (build-system r-build-system)
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("zlib" ,zlib)))
+     (list imagemagick zlib))
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-curl r-magrittr r-rcpp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/ropensci/magick")
     (synopsis "Advanced graphics and image-processing in R")
     (description
@@ -10858,12 +10584,12 @@ console, resulting in an interactive editing environment.")
          "0ljsszybzri531q6xab04r6zq11vchfs7y0snjzk57m3g0b9ms05"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)
-       ("r-minqa" ,r-minqa)
-       ("r-mitools" ,r-mitools)
-       ("r-numderiv" ,r-numderiv)
-       ("r-survival" ,r-survival)))
+     (list r-lattice
+           r-matrix
+           r-minqa
+           r-mitools
+           r-numderiv
+           r-survival))
     (home-page "http://r-survey.r-forge.r-project.org/survey/")
     (synopsis "Analysis of complex survey samples")
     (description
@@ -10893,7 +10619,7 @@ analysis.")
     (properties `((upstream-name . "gee")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/gee/")
     (synopsis "Generalized estimation equation solver")
     (description
@@ -10914,13 +10640,9 @@ analysis.")
     (properties `((upstream-name . "tab")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-kableextra" ,r-kableextra)
-       ("r-knitr" ,r-knitr)
-       ("r-mass" ,r-mass)
-       ("r-survey" ,r-survey)))
+     (list r-dplyr r-kableextra r-knitr r-mass r-survey))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/tab/")
     (synopsis "Create summary tables for statistical reports")
     (description
@@ -10943,17 +10665,17 @@ handle data from simple random samples as well as complex surveys.")
         (base32 "01v6sixx0f3nrn6ymfifb3pvd2msfrwm21kmdv38laxq29vc4rsi"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cubature" ,r-cubature)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-pracma" ,r-pracma)
-       ("r-rbenchmark" ,r-rbenchmark)
-       ("r-rcpp" ,r-rcpp)
-       ("r-survey" ,r-survey)
-       ("r-tab" ,r-tab)))
+     (list r-cubature
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-mass
+           r-mvtnorm
+           r-pracma
+           r-rbenchmark
+           r-rcpp
+           r-survey
+           r-tab))
     (home-page "https://cran.r-project.org/web/packages/dvmisc/")
     (synopsis "Faster computation of common statistics and miscellaneous functions")
     (description
@@ -10977,8 +10699,7 @@ regression).")
         (base32 "13xzrwhr4i1nj9c8vrmfdg2rmrc8n446iihcyxmy99sm99hpzyip"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dvmisc" ,r-dvmisc)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-dvmisc r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/accelerometry/")
     (synopsis "Functions for processing accelerometer data")
     (description
@@ -11002,8 +10723,7 @@ algorithms to be implemented.")
     (properties `((upstream-name . "AbSim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-powerlaw" ,r-powerlaw)))
+     (list r-ape r-powerlaw))
     (home-page "https://cran.r-project.org/web/packages/AbSim/")
     (synopsis "Time resolved simulations of antibody repertoires")
     (description
@@ -11052,7 +10772,7 @@ estimation problem.")
         (base32 "1m76qdmqvwpgm0sihazi2dna7cgsz9rljal18vgffb5wamwmg9k7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quic" ,r-quic)))
+     (list r-quic))
     (home-page "https://cran.r-project.org/web/packages/abundant/")
     (synopsis "Abundant regression and high-dimensional principal fitted components")
     (description
@@ -11076,7 +10796,7 @@ and Rothman (2012) @url{doi:10.1214/11-AOS962}.")
     (properties `((upstream-name . "Ac3net")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://cran.r-project.org/web/packages/Ac3net/")
     (synopsis "Inferring directional conservative causal core gene networks")
     (description "This package infers directional Conservative causal core
@@ -11193,7 +10913,7 @@ observation.")
          "12aa5083k3sfrfq1jy3l94wffss9h0rga8j71jy3n8pkhiq4nn7n"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-zoo" ,r-zoo)))
+     (list r-zoo))
     (home-page "https://cran.r-project.org/web/packages/sandwich/")
     (synopsis "Robust Covariance Matrix Estimators")
     (description
@@ -11216,10 +10936,9 @@ cross-sectional, time series, clustered, panel, and longitudinal data.")
     (properties `((upstream-name . "TH.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/TH.data/")
     (synopsis "Shared data sets")
     (description
@@ -11240,11 +10959,7 @@ packages maintained by Torsten Hothorn.")
          "02zv739mbmx672yrqqx8am229h7ps476wphig7jrrbfgay29sl21"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sandwich" ,r-sandwich)
-       ("r-survival" ,r-survival)
-       ("r-th-data" ,r-th-data)))
+     (list r-codetools r-mvtnorm r-sandwich r-survival r-th-data))
     (home-page "https://cran.r-project.org/web/packages/multcomp/")
     (synopsis "Simultaneous inference in general parametric models")
     (description
@@ -11268,12 +10983,9 @@ Hothorn, Westfall, 2010, CRC Press).")
          "1ig94mjifhhygznv2xv1gl8hdvk618w5fcmkaj1xmpwpc64m9dnl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-estimability" ,r-estimability)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)
-       ("r-xtable" ,r-xtable)))
+     (list r-estimability r-mvtnorm r-numderiv r-xtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rvlenth/emmeans")
     (synopsis "Estimated marginal means, aka least-squares means")
     (description
@@ -11297,7 +11009,7 @@ comparisons of slopes.")
          "1kfzy73v3z6ipc3kdfkcjrp4b4p5k54nwk796gqi36srm93hgc2v"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/heliosdrm/pwr")
     (synopsis "Basic functions for power analysis")
     (description
@@ -11316,7 +11028,7 @@ Cohen (1988).")
        (sha256
         (base32 "1syrcdj5qg5m3zd3dlxgpfklswbalfg42w058dr09hnzqsvx0z9d"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mvtnorm" ,r-mvtnorm)))
+    (propagated-inputs (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/libcoin")
     (synopsis "Linear test statistics for permutation inference")
     (description
@@ -11337,12 +11049,12 @@ and permutation inference in the framework of Strasser and Weber (1999).")
          "1cpv7jx840inzg98bkhrb5yscx0gpag6br237r5qpnc2gbrd2ikm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-libcoin" ,r-libcoin)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-modeltools" ,r-modeltools)
-       ("r-multcomp" ,r-multcomp)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-survival" ,r-survival)))
+     (list r-libcoin
+           r-matrixstats
+           r-modeltools
+           r-multcomp
+           r-mvtnorm
+           r-survival))
     (home-page "http://coin.r-forge.r-project.org")
     (synopsis "Conditional inference procedures in a permutation test framework")
     (description
@@ -11364,18 +11076,18 @@ correlation, censored, ordered and multivariate problems.")
          "0aman4273i8hy3z0qay1nrsr7v27m4icm1j6f4w59ylix80l5myq"))))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggridges" ,r-ggridges)
-       ("r-glue" ,r-glue)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list pandoc))
+    (native-inputs
+     (list r-knitr))
+    (propagated-inputs
+     (list r-dplyr
+           r-ggplot2
+           r-ggridges
+           r-glue
+           r-reshape2
+           r-rlang
+           r-tibble
+           r-tidyselect))
     (home-page "https://mc-stan.org/bayesplot")
     (synopsis "Plotting for Bayesian models")
     (description
@@ -11400,8 +11112,7 @@ Bayesian modeling.")
     (properties `((upstream-name . "TMB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcppeigen))
     (home-page "http://tmb-project.org")
     (synopsis "Template model builder: a general random effect tool")
     (description
@@ -11426,23 +11137,23 @@ detection, parallelism through BLAS and parallel user templates.")
         (base32 "1cv80yjnyh6qihxf57zivihhia20gibr5f03x8aspy6382wnwlka"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-effectsize" ,r-effectsize)
-       ("r-emmeans" ,r-emmeans)
-       ("r-insight" ,r-insight)
-       ("r-lme4" ,r-lme4)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-modelr" ,r-modelr)
-       ("r-parameters" ,r-parameters)
-       ("r-performance" ,r-performance)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-bayestestr
+           r-broom
+           r-dplyr
+           r-effectsize
+           r-emmeans
+           r-insight
+           r-lme4
+           r-magrittr
+           r-mass
+           r-modelr
+           r-parameters
+           r-performance
+           r-purrr
+           r-rlang
+           r-sjlabelled
+           r-sjmisc
+           r-tidyr))
     (home-page "https://github.com/strengejacke/sjstats")
     (synopsis "Functions for common statistical computations")
     (description
@@ -11471,14 +11182,14 @@ models.")
     (properties `((upstream-name . "glmmTMB")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-tmb" ,r-tmb)))
+     (list r-lme4
+           r-matrix
+           r-nlme
+           r-numderiv
+           r-rcppeigen
+           r-tmb))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/glmmTMB")
     (synopsis "Generalized linear mixed models")
     (description
@@ -11504,10 +11215,9 @@ differentiation.")
     (properties `((upstream-name . "bayestestR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)))
+     (list r-datawizard r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/easystats/bayestestR")
     (synopsis "Describe Bayesian models and posterior distributions")
     (description
@@ -11531,9 +11241,7 @@ ROPE percentage and pd).")
          "1xjjnhqmwfflm5yfgjhycjn0fj0manvsvkk2ppifn0373bajp5n2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)))
+     (list r-bayestestr r-datawizard r-insight))
     (home-page "https://easystats.github.io/performance/")
     (synopsis "Assessment of regression models performance")
     (description
@@ -11559,11 +11267,9 @@ effects models and Bayesian models.")
          "0xrb105kblkj3l9zlj9yy52rjlmx5x2aai1wwb5zvjr1f6nlc84l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-insight" ,r-insight)
-       ("r-mass" ,r-mass)
-       ("r-sjlabelled" ,r-sjlabelled)))
+     (list r-insight r-mass r-sjlabelled))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/strengejacke/ggeffects")
     (synopsis "Create tidy data frames of marginal effects for ggplot")
     (description
@@ -11590,13 +11296,10 @@ results using @code{ggplot2}.")
     (properties `((upstream-name . "effectsize")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)
-       ("r-parameters" ,r-parameters)
-       ("r-performance" ,r-performance)))
+     (list r-bayestestr r-datawizard r-insight r-parameters
+           r-performance))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/easystats/effectsize")
     (synopsis "Indices of effect size and standardized parameters")
     (description
@@ -11618,26 +11321,26 @@ conversion of indices such as Cohen's d, r, odds, etc.")
     (properties `((upstream-name . "sjPlot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-dplyr" ,r-dplyr)
-       ("r-effectsize" ,r-effectsize)
-       ("r-ggeffects" ,r-ggeffects)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-insight" ,r-insight)
-       ("r-knitr" ,r-knitr)
-       ("r-mass" ,r-mass)
-       ("r-parameters" ,r-parameters)
-       ("r-performance" ,r-performance)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-sjlabelled" ,r-sjlabelled)
-       ("r-sjmisc" ,r-sjmisc)
-       ("r-sjstats" ,r-sjstats)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-bayestestr
+           r-datawizard
+           r-dplyr
+           r-effectsize
+           r-ggeffects
+           r-ggplot2
+           r-insight
+           r-knitr
+           r-mass
+           r-parameters
+           r-performance
+           r-purrr
+           r-rlang
+           r-scales
+           r-sjlabelled
+           r-sjmisc
+           r-sjstats
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://strengejacke.github.io/sjPlot/")
     (synopsis "Data visualization for statistics in social science")
     (description
@@ -11685,8 +11388,8 @@ back to file after modifications.")
          "1snzn7nxy0rwz0bzjsg6k04c0n811dgn8gn9cmn2v78aj57ayjmi"))))
     (properties `((upstream-name . "gitcreds")))
     (build-system r-build-system)
-    (inputs `(("git" ,git-minimal)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (inputs (list git-minimal))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/r-lib/gitcreds")
     (synopsis "Query git credentials from R")
     (description
@@ -11709,13 +11412,9 @@ repositories.")
          "077drbxz3rx7idv6w24ipj1p6jnzv86a3iyryab699cc9q2kjh54"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-gitcreds" ,r-gitcreds)
-       ("r-httr" ,r-httr)
-       ("r-ini" ,r-ini)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-cli r-gitcreds r-httr r-ini r-jsonlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/gh#readme")
     (synopsis "Access the GitHub API via R")
     (description
@@ -11735,7 +11434,7 @@ repositories.")
          "15rqc3ljmcmgfvadj1j1kq7kvibagxic8sgplhlcdqqxax9idprn"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://fs.r-lib.org")
     (synopsis "Cross-platform file system operations based on libuv")
     (description
@@ -11787,13 +11486,9 @@ terminals that do not support Unicode.")
     (inputs
      `(("git" ,git-minimal)))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-sys" ,r-sys)))
+     (list r-askpass r-curl r-jsonlite r-openssl r-sys))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/credentials/")
     (synopsis "Tools for managing SSH and Git credentials")
     (description
@@ -11821,18 +11516,16 @@ user credentials.")
     (properties `((upstream-name . "gert")))
     (build-system r-build-system)
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-credentials" ,r-credentials)
-       ("r-openssl" ,r-openssl)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-sys" ,r-sys)
-       ("r-zip" ,r-zip)))
+     (list r-askpass
+           r-credentials
+           r-openssl
+           r-rstudioapi
+           r-sys
+           r-zip))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://docs.ropensci.org/gert/")
     (synopsis "Simple Git client for R")
     (description
@@ -11856,25 +11549,25 @@ User credentials are shared with command line git through the
          "1gwvirp53pa0zychd7d47d56a2vfdzz7l3p61l8m9n270ac7bc1d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-crayon" ,r-crayon)
-       ("r-curl" ,r-curl)
-       ("r-desc" ,r-desc)
-       ("r-fs" ,r-fs)
-       ("r-gert" ,r-gert)
-       ("r-gh" ,r-gh)
-       ("r-glue" ,r-glue)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-whisker" ,r-whisker)
-       ("r-withr" ,r-withr)
-       ("r-yaml" ,r-yaml)))
+     (list r-cli
+           r-clipr
+           r-crayon
+           r-curl
+           r-desc
+           r-fs
+           r-gert
+           r-gh
+           r-glue
+           r-jsonlite
+           r-lifecycle
+           r-purrr
+           r-rappdirs
+           r-rlang
+           r-rprojroot
+           r-rstudioapi
+           r-whisker
+           r-withr
+           r-yaml))
     (home-page "https://github.com/r-lib/usethis")
     (synopsis "Automate R package and project setup")
     (description
@@ -11897,7 +11590,7 @@ Rcpp, RStudio projects, and more.")
          "0w3vhp652524348a4cfyvvs8z9xpxkcznw8x406nvkwfh0gdyka2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)))
+     (list r-cli))
     (home-page "https://github.com/r-lib/sessioninfo#readme")
     (synopsis "R session information")
     (description
@@ -11919,7 +11612,7 @@ more information about packages, and where they were installed from.")
          "0xij8x4ga0r7rp2lxx9hw1zlzv48mfg56v8nf03gsw0dw6r7gmym"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-lib/remotes#readme")
     (synopsis "R package installation from remote repositories")
     (description
@@ -11942,7 +11635,7 @@ the code was copied over from @code{devtools}.")
          "1vrvgdika1d63dwygynbv2wmd87ll8dji5dy89hj576n8hw601z2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-processx" ,r-processx)))
+     (list r-processx))
     (home-page "https://github.com/r-lib/xopen#readme")
     (synopsis "Open system files, URLs, anything")
     (description
@@ -11963,18 +11656,18 @@ directories or URLs with their associated programs.")
          "1l696byn3kjq2xvz4wxybzaj6ink85h4lz3a35v2132ba5yyzm5v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-curl" ,r-curl)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-sessioninfo" ,r-sessioninfo)
-       ("r-withr" ,r-withr)
-       ("r-xopen" ,r-xopen)))
+     (list r-callr
+           r-cli
+           r-curl
+           r-desc
+           r-digest
+           r-pkgbuild
+           r-prettyunits
+           r-r6
+           r-rprojroot
+           r-sessioninfo
+           r-withr
+           r-xopen))
     (home-page "https://github.com/r-Lib/rcmdcheck#readme")
     (synopsis "Run R CMD check from R and capture results")
     (description
@@ -11995,9 +11688,7 @@ of the individual checks.")
          "1sgv4sc737i12arh5dc3263kjsz3dzg06qihfmrqyax94mv2d01b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-pander" ,r-pander)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape" ,r-reshape)))
+     (list r-pander r-plyr r-reshape))
     (home-page "https://cran.r-project.org/web/packages/rapportools/")
     (synopsis "Miscellaneous helper functions with sane defaults for reporting")
     (description
@@ -12019,10 +11710,9 @@ quick reporting.")
          "1knjcr50xxns3w3kh15myjpsizn4d7fdqx071a4yj90imif07qjh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-digest r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rapporter.github.io/pander")
     (synopsis "Render R objects into Pandoc's markdown")
     (description
@@ -12047,20 +11737,20 @@ ways.")
          "04qcysfywljnqkcz2b7kzpy0xv3ykkvvb14vnda63z1wvmadyhkn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magick" ,r-magick)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pander" ,r-pander)
-       ("r-pryr" ,r-pryr)
-       ("r-rapportools" ,r-rapportools)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-checkmate
+           r-dplyr
+           r-htmltools
+           r-lubridate
+           r-magick
+           r-matrixstats
+           r-pander
+           r-pryr
+           r-rapportools
+           r-tibble
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/dcomtois/summarytools")
     (synopsis "Tools to quickly and neatly summarize data")
     (description
@@ -12084,7 +11774,7 @@ users.")
          "1dka0rigfw4vj809qma2dkiwjb3nw5635ynnba5cm299cn7hb2b2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~yongwang")
     (synopsis "Solve regression problems under equality/inequality constraints")
     (description
@@ -12107,7 +11797,7 @@ problems into least squares ones first.")
          "1ihxhb42cga1hssj2jv4ah0f4hlwsky899ij5261fzh1wxvdp1xw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lsei" ,r-lsei)))
+     (list r-lsei))
     (home-page "https://www.stat.auckland.ac.nz/~yongwang")
     (synopsis "Nonparametric survival analysis")
     (description
@@ -12128,8 +11818,7 @@ exact and interval-censored observations.")
          "1ld0bdl4fy8dsfzm3k7a37cyxc6pfc9qs31x4pxd3z5rslghz7rj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-mvtnorm r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/clusteval/")
     (synopsis "Evaluation of clustering algorithms")
     (description
@@ -12149,7 +11838,7 @@ algorithms, clusterings, and individual clusters.")
         (base32
          "1nfhaqblvm62j8gfkyrgba5ai0pb2fsnrxp63637mhys2bawlcm0"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/tweedie/")
     (synopsis "Evaluation of Tweedie exponential family models")
     (description
@@ -12172,8 +11861,7 @@ and related methods.")
     (properties `((upstream-name . "RcppGSL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("gsl" ,gsl)))
+     (list r-rcpp gsl))
     (home-page "https://cran.r-project.org/web/packages/RcppGSL/")
     (synopsis "Rcpp integration for GSL vectors and matrices")
     (description
@@ -12199,11 +11887,7 @@ the interfaces between R and C++.")
          "107pwv2bwird1a98chcnbld2wqj9prkf4pkncyrrp304zpdkkby1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppgsl" ,r-rcppgsl)
-       ("r-statmod" ,r-statmod)
-       ("r-tweedie" ,r-tweedie)))
+     (list r-mass r-rcpp r-rcppgsl r-statmod r-tweedie))
     (home-page "https://cran.r-project.org/web/packages/mvabund/")
     (synopsis "Statistical methods for analysing multivariate abundance data")
     (description
@@ -12224,13 +11908,9 @@ analysing multivariate abundance data in community ecology.")
          "1k04n6gwk2n8kg0l3yk5j3wrqgkv5f6w04yjpif9y451hx5w7svg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-lme4" ,r-lme4)
-       ("r-lmertest" ,r-lmertest)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-car r-lme4 r-lmertest r-pbkrtest r-reshape2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://afex.singmann.science/")
     (synopsis "Analysis of factorial experiments")
     (description
@@ -12252,10 +11932,7 @@ experiments using ANOVA or mixed models.")
     (properties `((upstream-name . "lmerTest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-ggplot2 r-lme4 r-mass r-numderiv))
     (home-page "https://github.com/runehaubo/lmerTestR")
     (synopsis "Tests in linear mixed effects models")
     (description
@@ -12280,16 +11957,16 @@ tests of linear contrasts of fixed effects are also available.")
          "0iim92blpa59vgz97c2pi05yhbjjmaffdbkbmk5kplfb2vmazgiy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-afex" ,r-afex)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-lmertest" ,r-lmertest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-pbkrtest" ,r-pbkrtest)))
+     (list r-afex
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-lmertest
+           r-mass
+           r-matrix
+           r-mgcv
+           r-pbkrtest))
     (home-page "https://github.com/bcjaeger/r2glmm")
     (synopsis "Compute R squared for mixed (multilevel) models")
     (description
@@ -12314,14 +11991,14 @@ al. (2016)).")
     (properties `((upstream-name . "cmdfun")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r-utils" ,r-r-utils)
-       ("r-rlang" ,r-rlang)
-       ("r-testthat" ,r-testthat)
-       ("r-usethis" ,r-usethis)))
+     (list r-magrittr
+           r-purrr
+           r-r-utils
+           r-rlang
+           r-testthat
+           r-usethis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://snystrom.github.io/cmdfun/")
     (synopsis "Framework for building interfaces to shell commands")
     (description
@@ -12347,8 +12024,8 @@ inside R when they might usually leave to execute non-R software.")
          "19451icfh7snjbbmpzpr1hrdf52q8ijv0ag1di3y55r2la3jxxcf"))))
     (properties `((upstream-name . "rslurm")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-whisker" ,r-whisker)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-whisker))
+    (native-inputs (list r-knitr))
     (home-page "http://cyberhelp.sesync.org/rslurm/")
     (synopsis "Submit R calculations to a Slurm cluster")
     (description
@@ -12371,9 +12048,8 @@ parallel calculations across cluster nodes.")
     (properties `((upstream-name . "chk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-lifecycle r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/poissonconsulting/chk")
     (synopsis "Check user-supplied function arguments")
     (description
@@ -12395,10 +12071,7 @@ messages follow the tidyverse style guide.")
          "1fnchf7f0hyl514bk8sc3l884kg25kb5xm4mc2l28n6hm7l6bgpg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdata" ,r-gdata)
-       ("r-hmisc" ,r-hmisc)
-       ("r-lme4" ,r-lme4)
-       ("r-mice" ,r-mice)))
+     (list r-gdata r-hmisc r-lme4 r-mice))
     (home-page "https://cran.r-project.org/web/packages/weights/")
     (synopsis "Weighting and weighted statistics")
     (description "This package Provides a variety of functions for producing
@@ -12424,7 +12097,7 @@ address a bug.")
     (properties `((upstream-name . "RcppAnnoy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppAnnoy/")
     (synopsis "Rcpp bindings for Annoy, a library for Approximate Nearest Neighbors")
     (description
@@ -12448,7 +12121,7 @@ This package provides an R interface.")
          "01z0plf1i6dyibw4ica8shmijyk1grpqb886hcga72z2cpm4xsx0"))))
     (properties `((upstream-name . "RcppHNSW")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/RcppHNSW/")
     (synopsis "Rcpp bindings for hnswlib, a library for approximate nearest neighbors")
     (description
@@ -12493,8 +12166,7 @@ other values.")
          "1fyjhp2zkvp7ls1sxn623far7473lpkfsqqvj3a1fczpmqs6iw4m"))))
     (build-system r-build-system)
     (inputs
-     `(("netcdf" ,netcdf)
-       ("zlib" ,zlib)))
+     (list netcdf zlib))
     (home-page "https://cran.r-project.org/web/packages/ncdf4/index.html")
     (synopsis "R interface to Unidata netCDF format data files")
     (description
@@ -12520,7 +12192,7 @@ netCDF files.")
     (properties `((upstream-name . "BiocManager")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/BiocManager/")
     (synopsis "Access the Bioconductor project package repository")
     (description
@@ -12541,22 +12213,21 @@ Bioconductor packages.")
          "0fqkx079z9y5b1gdg6qfz2wpw2j8q3ddflfkd9wwrkyacas6xyc9"))))
     (build-system r-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("glu" ,glu)
-       ("libx11" ,libx11)
-       ("pandoc" ,pandoc)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)))
+     (list freetype
+           libpng
+           glu
+           libx11
+           pandoc
+           zlib))
+    (propagated-inputs
+     (list r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-r6))
     (home-page "https://r-forge.r-project.org/projects/rgl/")
     (synopsis "3D visualization using OpenGL")
     (description
@@ -12581,7 +12252,7 @@ image formats, including PNG, Postscript, SVG, PGF.")
         (base32
          "0djacq0irfqz4nlnx238kja73yvr1n5qybbfyl6bw1n6qgcjhza8"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/multicool/")
     (synopsis "Permutations of multisets in cool-lex order")
     (description
@@ -12622,16 +12293,16 @@ isosurfaces.")
         (base32 "02gnpyjqdlj6dl2x9i7mmks4f5nrh85j3h0kfa0v1v6wi8blx7kw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fnn" ,r-fnn)
-       ("r-kernlab" ,r-kernlab)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-matrix" ,r-matrix)
-       ("r-mclust" ,r-mclust)
-       ("r-mgcv" ,r-mgcv)
-       ("r-multicool" ,r-multicool)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plot3d" ,r-plot3d)
-       ("r-pracma" ,r-pracma)))
+     (list r-fnn
+           r-kernlab
+           r-kernsmooth
+           r-matrix
+           r-mclust
+           r-mgcv
+           r-multicool
+           r-mvtnorm
+           r-plot3d
+           r-pracma))
     (home-page "https://www.mvstat.net/tduong/")
     (synopsis "Kernel smoothing")
     (description
@@ -12655,10 +12326,9 @@ hypothesis testing.")
          "0yzn1w1sasilcp8v0pcjnxjv9l6lspkskqi412i6h040gqmjjf6y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ks" ,r-ks)
-       ("r-plot3d" ,r-plot3d)))
+     (list r-ks r-plot3d))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://www.mvstat.net/tduong/")
     (synopsis "Inferential feature significance for kernel density estimation")
     (description
@@ -12682,12 +12352,12 @@ features (e.g. local modes).")
          "0pagrc1vkaz460d0lvrgb4xj6gcd920f4mrc8zpzw07c3v1s2sw1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-coda" ,r-coda)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)))
+     (list r-abind
+           r-coda
+           r-lme4
+           r-mass
+           r-matrix
+           r-nlme))
     (home-page "https://cran.r-project.org/web/packages/arm/")
     (synopsis "Data analysis using regression and multilevel/hierarchical models")
     (description
@@ -12709,10 +12379,9 @@ University Press, 2007.")
          "0hki85rs8wc5950pjaw28q54rly2napfbcrx3pchlfap6wwy5kkn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-boot r-mvtnorm))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/circular/")
     (synopsis "Circular statistics")
     (description
@@ -12734,9 +12403,7 @@ Scientific.")
          "1wn2a0hx7wfr2jyj1b772w5fgl6bcqkkw8cybais2s1wyjx8kjr5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-circular" ,r-circular)
-       ("r-insol" ,r-insol)
-       ("r-pbapply" ,r-pbapply)))
+     (list r-circular r-insol r-pbapply))
     (home-page "https://cran.r-project.org/web/packages/activity/")
     (synopsis "Animal activity statistics")
     (description
@@ -12759,7 +12426,7 @@ circular variables).")
         (base32
          "1a7r24j59xz3lxa5wc694j6b80j8m5l86zd1sw9pvs66l8gd98kf"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-subplex" ,r-subplex)))
+    (propagated-inputs (list r-subplex))
     (home-page "https://kingaa.github.io/ouch/")
     (synopsis "Ornstein-Uhlenbeck models for phylogenetic comparative hypotheses")
     (description
@@ -12821,7 +12488,7 @@ parametrizations of Nolan.")
          "118rj9kjx9rzlynvhrly19qz3yxg8jzws35971ssgzrp5lwd367f"))))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (home-page "https://cran.r-project.org/web/packages/gsl")
     (synopsis "Wrapper for the GNU Scientific Library")
     (description
@@ -12865,10 +12532,9 @@ Anderson-Darling Distribution\".")
     (properties `((upstream-name . "sodium")))
     (build-system r-build-system)
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroen/sodium")
     (synopsis "R bindings to the libsodium crypto library")
     (description
@@ -12892,10 +12558,9 @@ after it was discovered that the NSA had backdoored Dual EC DRBG.")
     (properties `((upstream-name . "softImpute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://cran.r-project.org/web/packages/softImpute")
     (synopsis "Matrix completion via iterative soft-thresholded SVD")
     (description
@@ -12918,9 +12583,9 @@ components).")
         (base32
          "0zrchp4l0jdbir2gibjf00x225y9giqk80zvqmr2yyvc12lwkw7i"))))
     (build-system r-build-system)
-    (inputs `(("fftw" ,fftw)))
+    (inputs (list fftw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/krahim/fftwtools")
     (synopsis "Wrapper for FFTW3")
     (description
@@ -12946,11 +12611,9 @@ redundant complex conjugate when the input is real data.")
          "1zha6bzb1rmfl6n2xjkygs9wfi3ah9cjr7a6jzk4zqc5kvl58lak"))))
     (build-system r-build-system)
     (inputs
-     `(("libtiff" ,libtiff)
-       ("libjpeg" ,libjpeg-turbo)
-       ("zlib" ,zlib)))
+     (list libtiff libjpeg-turbo zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.rforge.net/tiff/")
     (synopsis "Read and write TIFF images")
     (description
@@ -12994,11 +12657,7 @@ Processing.")
     (properties `((upstream-name . "tm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-nlp" ,r-nlp)
-       ("r-rcpp" ,r-rcpp)
-       ("r-slam" ,r-slam)
-       ("r-xml2" ,r-xml2)))
+     (list r-bh r-nlp r-rcpp r-slam r-xml2))
     (home-page "http://tm.r-forge.r-project.org/")
     (synopsis "Text mining package")
     (description
@@ -13018,7 +12677,7 @@ Processing.")
          "0ibivnhz0l06sss5rrrcvyiwg3qpbyk3qn4vx4pp90kj09x4yg0k"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://waveslim.blogspot.com")
     (synopsis "Basic wavelet routines for signal processing")
     (description
@@ -13043,11 +12702,10 @@ pairs (Selesnick 2001, 2002).")
          "0j96yyvm6bcrrpbdx4w26piqx44a0vbsr3px9cb4zk8a8da6jwak"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ;; The "tm" package is only "suggested" according to CRAN, but the
-       ;; wordcloud package cannot be loaded without it.
-       ("r-tm" ,r-tm)))
+     (list r-rcolorbrewer r-rcpp
+           ;; The "tm" package is only "suggested" according to CRAN, but the
+           ;; wordcloud package cannot be loaded without it.
+           r-tm))
     (home-page "https://cran.r-project.org/web/packages/wordcloud")
     (synopsis "Word clouds")
     (description
@@ -13088,17 +12746,17 @@ maps.")
         (base32 "1gnpm4zz0kvqng5s179301q0h5993ajynm8y0zbdz38qcmzfpsdk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-ape
+           r-dplyr
+           r-lazyeval
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-yulab-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/tidytree")
     (synopsis "Tidy tool for phylogenetic tree data manipulation")
     (description
@@ -13120,8 +12778,7 @@ manipulate tree data.")
         (base32 "09khjklvzbafd7r55496by01a9g3y291d87hpy43w44dmz9fzn9a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-biocmanager" ,r-biocmanager)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-biocmanager r-yulab-utils))
     (home-page "https://cran.r-project.org/web/packages/rvcheck")
     (synopsis "R package version check")
     (description
@@ -13160,7 +12817,7 @@ giving it a description in the specific format.")
         (base32
          "1xm969fjq3fv1p2sqza2apz8picibj4s2agpwf1sx9nwn3b587qs"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-matrix" ,r-matrix)))
+    (propagated-inputs (list r-matrix))
     (home-page "http://tedlab.mit.edu/~dr/SVDLIBC/")
     (synopsis "Sparse truncated singular value decomposition")
     (description
@@ -13184,8 +12841,7 @@ only sparse real matrices in Matrix package format are supported.")
          "0f37w4lj8dpcg1sfkd7cv6qpdkanmb97mnd8zih2fxzv8bpd0rfh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/speedglm")
     (synopsis "Fit linear and generalized linear models to large data sets")
     (description
@@ -13208,13 +12864,13 @@ linear models to large data sets by updating algorithms.")
     (properties `((upstream-name . "densityClust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fnn" ,r-fnn)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rtsne" ,r-rtsne)))
+     (list r-fnn
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-rcolorbrewer
+           r-rcpp
+           r-rtsne))
     (home-page "https://cran.r-project.org/web/packages/densityClust")
     (synopsis "Clustering by fast search and find of density peaks")
     (description
@@ -13255,10 +12911,7 @@ large datasets (> 100,000 samples) very efficiently.")
     (properties `((upstream-name . "qlcMatrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-docopt" ,r-docopt)
-       ("r-matrix" ,r-matrix)
-       ("r-slam" ,r-slam)
-       ("r-sparsesvd" ,r-sparsesvd)))
+     (list r-docopt r-matrix r-slam r-sparsesvd))
     (home-page "https://cran.r-project.org/web/packages/qlcMatrix")
     (synopsis "Sparse matrix functions for quantitative language comparison")
     (description
@@ -13282,10 +12935,7 @@ while other are highly specific for the special data format used for
     (properties `((upstream-name . "DDRTree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-irlba" ,r-irlba)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-bh r-irlba r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/DDRTree")
     (synopsis "Learning principal graphs with DDRTree")
     (description
@@ -13335,9 +12985,7 @@ definiteness of a matrix.")
     (properties `((upstream-name . "RSpectra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcpp r-rcppeigen))
     (home-page "https://github.com/yixuan/RSpectra")
     (synopsis "Solvers for large-scale Eigenvalue and SVD problems")
     (description
@@ -13383,10 +13031,7 @@ diagnostics for controlling type-1 errors are also provided.")
          "0f992dmgnr6s8g3386i9bjfyf08q8srgw7sjz2yx7snj8znq7251"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)))
+     (list r-igraph r-lattice r-mass r-matrix))
     (home-page "https://cran.r-project.org/web/packages/flare")
     (synopsis "Family of Lasso regression implementations")
     (description
@@ -13407,7 +13052,7 @@ high dimensional sparse linear models.")
         (base32
          "0yawnjw063jypk3riy9xab9cmliv6c9dnabi18670khd3gzb2r9z"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lars" ,r-lars)))
+    (propagated-inputs (list r-lars))
     (home-page "https://github.com/lingfeiwang/lassopv")
     (synopsis "Non-parametric p-value estimation for predictors in Lasso")
     (description
@@ -13430,7 +13075,7 @@ the first time as the statistic.")
          "0mpyf2kkfdl69pdc6brl1r6101vyc6pgr7z17s55ppg3y71k4q35"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://github.com/mrdwab/splitstackshape")
     (synopsis "Stack and reshape datasets after splitting concatenated values")
     (description
@@ -13457,7 +13102,7 @@ handle.")
          "0h9qkl15k8v17v3g9bdnfwvh2s04ywjgg5y0xn2077dmywlja1bd"))))
     (properties `((upstream-name . "TFMPvalue")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/ge11232002/TFMPvalue")
     (synopsis "P-value computation for position weight matrices")
     (description
@@ -13482,8 +13127,7 @@ Touzet and Varre (2007).")
                 "0ss9jqrvv7bhvl5j74cjrp8r866d9dlavrbbfscwz3mhkgfx06bb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-progress" ,r-progress)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-progress r-rcpp))
     (home-page "https://github.com/fmichonneau/rncl")
     (synopsis "Interface to the Nexus class library")
     (description "This package provides an interface to the Nexus class
@@ -13506,13 +13150,9 @@ library which allows parsing of NEXUS, Newick and other phylogenetic tree
                 "0jzr1gdvmi4l640hwwzh9bxqmpja69bn3ygnaqx37awvyh7khi2s"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-ape" ,r-ape)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rncl" ,r-rncl)
-       ("r-rnexml" ,r-rnexml)))
+     (list r-ade4 r-ape r-rcpp r-rncl r-rnexml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/fmichonneau/phylobase")
     (synopsis "Base package for phylogenetic structures and comparative data")
     (description "This package provides a base @code{S4} class for comparative
@@ -13531,20 +13171,20 @@ methods, incorporating one or more trees and trait data.")
                 "1wsl4xq9w5bp3wk69dw57bg0qcw1vs6ajwya4p0w1r00ck5pwrib"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-plyr" ,r-plyr)
-       ("r-reshape2" ,r-reshape2)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-tidyr" ,r-tidyr)
-       ("r-uuid" ,r-uuid)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-ape
+           r-dplyr
+           r-httr
+           r-lazyeval
+           r-plyr
+           r-reshape2
+           r-stringi
+           r-stringr
+           r-tidyr
+           r-uuid
+           r-xml
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/RNeXML/")
     (synopsis "Semantically rich I/O for the NeXML Format")
     (description "This package provides access to phyloinformatic data in
@@ -13566,7 +13206,7 @@ and compatibility with @code{ape} objects.")
          "0bz10ar6hrgkvlzh9j2im24kwi3s2nnax668z40a2wj6s5xghqlr"))))
     (properties `((upstream-name . "RNifti")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/jonclayden/RNifti")
     (synopsis "Fast R and C++ access to NIfTI images")
     (description
@@ -13627,7 +13267,7 @@ substitutions, amongst other features.")
         (base32
          "0zynplxqvbmf23cm2rsz3wz2jx6mv55z94mn1k44ny3lx625cnpw"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ore" ,r-ore)))
+    (propagated-inputs (list r-ore))
     (home-page "https://github.com/jonclayden/reportr")
     (synopsis "General message and error reporting system")
     (description
@@ -13652,10 +13292,7 @@ conditional reporting based on the current \"output level\".")
     (properties `((upstream-name . "tractor.base")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ore" ,r-ore)
-       ("r-reportr" ,r-reportr)
-       ("r-rnifti" ,r-rnifti)
-       ("r-shades" ,r-shades)))
+     (list r-ore r-reportr r-rnifti r-shades))
     (home-page "https://www.tractor-mri.org.uk")
     (synopsis "Read, manipulate and visualize magnetic resonance images")
     (description
@@ -13680,9 +13317,9 @@ handling.")
     (properties `((upstream-name . "grImport")))
     (build-system r-build-system)
     (inputs
-     `(("ghostscript" ,ghostscript)))
+     (list ghostscript))
     (propagated-inputs
-     `(("r-xml" ,r-xml)))
+     (list r-xml))
     (home-page "https://cran.r-project.org/web/packages/grImport")
     (synopsis "Convert, import, and draw PostScript pictures")
     (description
@@ -13704,10 +13341,7 @@ PostScript pictures in R plots.")
     (properties `((upstream-name . "grImport2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-jpeg" ,r-jpeg)
-       ("r-png" ,r-png)
-       ("r-xml" ,r-xml)))
+     (list r-base64enc r-jpeg r-png r-xml))
     (home-page "https://cran.r-project.org/web/packages/grImport2/")
     (synopsis "Import SVG graphics")
     (description
@@ -13734,7 +13368,7 @@ be imported and then exported via the @code{gridSVG} package.")
          "1ck7j13x701g67bx81x7plszz804jfhl1yg42krcj9x88vm5cscr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/kohonen")
     (synopsis "Supervised and unsupervised self-organising maps")
     (description
@@ -13756,7 +13390,7 @@ inventor of the SOM.")
         (base32
          "07vcrrxvswrvfiha6f3ikn640yg0m2b4yd9lkmim1g0jmsmpfp8f"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nnls")
     (synopsis "Lawson-Hanson algorithm for non-negative least squares")
     (description
@@ -13778,7 +13412,7 @@ the combination of non-negative and non-positive constraints.")
          "0vy6jdyvp751430sf2f690yhasjr70cpk3p3lnaaxjq3fs5gg99g"))))
     (properties `((upstream-name . "Iso")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~rolf/")
     (synopsis "Functions to perform isotonic regression")
     (description
@@ -13802,10 +13436,7 @@ linear order on both variables.")
      `((upstream-name . "ChemometricsWithR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-devtools" ,r-devtools)
-       ("r-kohonen" ,r-kohonen)
-       ("r-mass" ,r-mass)
-       ("r-pls" ,r-pls)))
+     (list r-devtools r-kohonen r-mass r-pls))
     (home-page "https://github.com/rwehrens/CWR")
     (synopsis "Chemometrics with R")
     (description
@@ -13828,8 +13459,7 @@ Life Sciences\" by Ron Wehrens, Springer (2011).")
     (properties `((upstream-name . "ALS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-iso" ,r-iso)
-       ("r-nnls" ,r-nnls)))
+     (list r-iso r-nnls))
     (home-page "https://cran.r-project.org/web/packages/ALS")
     (synopsis "Multivariate curve resolution alternating least squares")
     (description
@@ -13858,8 +13488,7 @@ decomposition is shared between datasets.")
          "1y022363a4pp0mnji91sjh1qiyspkh09sybqwj03r9pmwrd7q93x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sandwich" ,r-sandwich)
-       ("r-zoo" ,r-zoo)))
+     (list r-sandwich r-zoo))
     (home-page "https://cran.r-project.org/web/packages/strucchange")
     (synopsis "Testing, monitoring, and dating structural changes")
     (description
@@ -13927,7 +13556,7 @@ library.")
     (properties `((upstream-name . "ontologyIndex")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ontologyIndex")
     (synopsis "Functions for processing ontologies in R")
     (description
@@ -13948,17 +13577,17 @@ and manipulating sets of ontological terms.")
          "0fypj70c1fjmvs57birik76wfx8a2fs4gzicbb52k57i6clwlijd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-fs" ,r-fs)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-withr" ,r-withr)))
+     (list r-cli
+           r-fs
+           r-glue
+           r-httr
+           r-jsonlite
+           r-rappdirs
+           r-rlang
+           r-rstudioapi
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://gargle.r-lib.org")
     (synopsis "Utilities for working with Google APIs")
     (description
@@ -13980,21 +13609,21 @@ preparing, executing, and processing HTTP requests.")
          "02msq61l7vamzpvbhvalh3qil1aa7pr68pwpsivbb6pvz6p4zyns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-bit64" ,r-bit64)
-       ("r-curl" ,r-curl)
-       ("r-dbi" ,r-dbi)
-       ("r-gargle" ,r-gargle)
-       ("r-glue" ,r-glue)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-progress" ,r-progress)
-       ("r-rapidjsonr" ,r-rapidjsonr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-assertthat
+           r-bit64
+           r-curl
+           r-dbi
+           r-gargle
+           r-glue
+           r-httr
+           r-jsonlite
+           r-lifecycle
+           r-prettyunits
+           r-progress
+           r-rapidjsonr
+           r-rcpp
+           r-rlang
+           r-tibble))
     (home-page "https://github.com/rstats-db/bigrquery")
     (synopsis "R interface to Google's BigQuery API")
     (description
@@ -14018,7 +13647,7 @@ preparing, executing, and processing HTTP requests.")
        (modify-phases %standard-phases
          (add-after 'unpack 'set-CC
            (lambda _ (setenv "CC" "gcc") #t)))))
-    (inputs `(("gmp" ,gmp)))
+    (inputs (list gmp))
     (home-page "https://cran.r-project.org/web/packages/gmp")
     (synopsis "Multiple precision arithmetic")
     (description
@@ -14042,12 +13671,11 @@ limitations\" using the GNU Multiple Precision library.")
     (properties `((upstream-name . "Rmpfr")))
     (build-system r-build-system)
     (inputs
-     `(("mpfr" ,mpfr)
-       ("gmp" ,gmp)))
+     (list mpfr gmp))
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)))
+     (list r-gmp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://rmpfr.r-forge.r-project.org/")
     (synopsis "R bindings to the MPFR library")
     (description
@@ -14094,7 +13722,7 @@ want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.properties")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.properties")
     (synopsis "Assertions to check properties of variables")
     (description
@@ -14119,7 +13747,7 @@ testing features in their own packages.")
      `((upstream-name . "assertive.numbers")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.numbers")
     (synopsis "Assertions to check properties of numbers")
     (description
@@ -14143,7 +13771,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.sets")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.sets")
     (synopsis "Assertions to check properties of sets")
     (description
@@ -14167,7 +13795,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.matrices")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.matrices")
     (synopsis "Assertions to check properties of matrices")
     (description
@@ -14192,7 +13820,7 @@ packages.")
      `((upstream-name . "assertive.models")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.models")
     (synopsis "Assertions to check properties of models")
     (description
@@ -14216,7 +13844,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.reflection")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)))
+     (list r-assertive-base))
     (home-page "https://bitbucket.org/richierocks/assertive.reflection")
     (synopsis "Assertions for checking the state of R")
     (description
@@ -14241,9 +13869,7 @@ want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.types")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-codetools" ,r-codetools)))
+     (list r-assertive-base r-assertive-properties r-codetools))
     (home-page "https://bitbucket.org/richierocks/assertive.types")
     (synopsis "Assertions to check types of variables")
     (description
@@ -14267,8 +13893,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.files")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-numbers" ,r-assertive-numbers)))
+     (list r-assertive-base r-assertive-numbers))
     (home-page "https://bitbucket.org/richierocks/assertive.files")
     (synopsis "Assertions to check properties of files")
     (description
@@ -14293,9 +13918,7 @@ packages.")
      `((upstream-name . "assertive.code")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-assertive-types" ,r-assertive-types)))
+     (list r-assertive-base r-assertive-properties r-assertive-types))
     (home-page "https://bitbucket.org/richierocks/assertive.code")
     (synopsis "Assertions to check properties of code")
     (description
@@ -14319,8 +13942,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.datetimes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-types" ,r-assertive-types)))
+     (list r-assertive-base r-assertive-types))
     (home-page "https://bitbucket.org/richierocks/assertive.datetimes")
     (synopsis "Assertions to check properties of dates and times")
     (description
@@ -14345,9 +13967,7 @@ packages.")
      `((upstream-name . "assertive.strings")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-types" ,r-assertive-types)
-       ("r-stringi" ,r-stringi)))
+     (list r-assertive-base r-assertive-types r-stringi))
     (home-page "https://bitbucket.org/richierocks/assertive.strings")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14371,8 +13991,7 @@ who want to include run-time testing features in their own packages.")
      `((upstream-name . "assertive.data.us")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data.us")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14397,8 +14016,7 @@ their own packages.")
      `((upstream-name . "assertive.data.uk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data.uk")
     (synopsis "Assertions to check properties of strings")
     (description
@@ -14423,8 +14041,7 @@ their own packages.")
      `((upstream-name . "assertive.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-strings" ,r-assertive-strings)))
+     (list r-assertive-base r-assertive-strings))
     (home-page "https://bitbucket.org/richierocks/assertive.data")
     (synopsis "Assertions to check properties of data")
     (description
@@ -14447,24 +14064,24 @@ features in their own packages.")
          "02palil82idqhhshcdjsfsja9qkqnd0dczqzj5gbccy4hfg1c0y4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertive-base" ,r-assertive-base)
-       ("r-assertive-code" ,r-assertive-code)
-       ("r-assertive-data" ,r-assertive-data)
-       ("r-assertive-data-uk" ,r-assertive-data-uk)
-       ("r-assertive-data-us" ,r-assertive-data-us)
-       ("r-assertive-datetimes" ,r-assertive-datetimes)
-       ("r-assertive-files" ,r-assertive-files)
-       ("r-assertive-matrices" ,r-assertive-matrices)
-       ("r-assertive-models" ,r-assertive-models)
-       ("r-assertive-numbers" ,r-assertive-numbers)
-       ("r-assertive-properties" ,r-assertive-properties)
-       ("r-assertive-reflection" ,r-assertive-reflection)
-       ("r-assertive-sets" ,r-assertive-sets)
-       ("r-assertive-strings" ,r-assertive-strings)
-       ("r-assertive-types" ,r-assertive-types)
-       ("r-knitr" ,r-knitr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertive-base
+           r-assertive-code
+           r-assertive-data
+           r-assertive-data-uk
+           r-assertive-data-us
+           r-assertive-datetimes
+           r-assertive-files
+           r-assertive-matrices
+           r-assertive-models
+           r-assertive-numbers
+           r-assertive-properties
+           r-assertive-reflection
+           r-assertive-sets
+           r-assertive-strings
+           r-assertive-types
+           r-knitr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://bitbucket.org/richierocks/assertive")
     (synopsis "Readable check functions to ensure code integrity")
     (description
@@ -14486,7 +14103,7 @@ to throw errors if they aren't in the right form.")
          "1im5k8jbviwj2i42mq1kmjskh80isa7jr9w8i0fknidrzzy2h2zi"))))
     (properties `((upstream-name . "dotCall64")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://git.math.uzh.ch/reinhard.furrer/dotCall64")
     (synopsis "Enhanced foreign function interface supporting long vectors")
     (description
@@ -14509,10 +14126,9 @@ This makes it a convenient and fast interface to C/C++ and Fortran code.")
         (base32 "03c50wfyrzcmrcv9mkgj8dmdg2cwkh4p4ys8gaclr8w7ym45qav3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dotcall64" ,r-dotcall64)))
+     (list r-dotcall64))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://www.math.uzh.ch/pages/spam/")
     (synopsis "Sparse matrix algebra")
     (description
@@ -14540,11 +14156,9 @@ Differences with other sparse matrix packages are:
         (base32 "1hs4k5a9hh0r5fsrnpnvs6wvf78xpjzj8a2j6643dsz73a5q6ln6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-maps" ,r-maps)
-       ("r-spam" ,r-spam)
-       ("r-viridis" ,r-viridis)))
+     (list r-maps r-spam r-viridis))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.image.ucar.edu/fields")
     (synopsis "Tools for spatial data")
     (description
@@ -14569,8 +14183,7 @@ covariance functions for large data sets.")
      `((upstream-name . "SpatialExtremes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fields" ,r-fields)
-       ("r-maps" ,r-maps)))
+     (list r-fields r-maps))
     (home-page "http://spatialextremes.r-forge.r-project.org/")
     (synopsis "Modelling spatial extremes")
     (description
@@ -14595,12 +14208,12 @@ max-stable processes only), model checking and selection and prediction.")
          "0c8xn8ripzq270hy8d16fcnx02l02alddznd7fqwk3jyi6113h1y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-car" ,r-car)
-       ("r-gtools" ,r-gtools)
-       ("r-mass" ,r-mass)
-       ("r-multcomp" ,r-multcomp)
-       ("r-plotrix" ,r-plotrix)
-       ("r-scales" ,r-scales)))
+     (list r-car
+           r-gtools
+           r-mass
+           r-multcomp
+           r-plotrix
+           r-scales))
     (home-page "https://cran.r-project.org/web/packages/drc")
     (synopsis "Analysis of dose-response curves")
     (description
@@ -14641,7 +14254,7 @@ for association and heterogeneity.")
         (base32
          "1546jqhhw5h177ii8jkdikyd26rv6gwkav816np1zks4p7zgsljj"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/bootstrap")
     (synopsis "Functions for the book \"An Introduction to the Bootstrap\"")
     (description
@@ -14702,7 +14315,7 @@ discovery rates.")
         (base32
          "046w3xbr535c5jyd68adv42a7limxp1mv57b5w6w673w707lmw2p"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-corpcor" ,r-corpcor)))
+    (propagated-inputs (list r-corpcor))
     (home-page "http://strimmerlab.org/software/longitudinal/")
     (synopsis "Analysis of multiple time course data")
     (description
@@ -14726,9 +14339,7 @@ dynamical correlation and dynamical covariance.")
     (properties `((upstream-name . "GeneNet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-corpcor" ,r-corpcor)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-longitudinal" ,r-longitudinal)))
+     (list r-corpcor r-fdrtool r-longitudinal))
     (home-page "http://strimmerlab.org/software/genenet/")
     (synopsis "Modeling and inferring gene networks")
     (description
@@ -14751,9 +14362,9 @@ putative directions).")
         (base32
          "0qj37ljdva3v29s01dkrbg31mcfzy3bl145cp40d54v4h9xhcghc"))))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-refgenome" ,r-refgenome)))
+     (list r-refgenome))
     (home-page "https://cran.r-project.org/web/packages/rbamtools")
     (synopsis "Read and write BAM (binary alignment) files")
     (description
@@ -14774,7 +14385,7 @@ library.")
          "0l1pmfr9kmc90rl5s9b0141451rxrjmiiasp3lsvl2x3ps0smqaj"))))
     (properties `((upstream-name . "protViz")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/protViz/protViz/")
     (synopsis "Visualizing and analyzing mass spectrometry data in proteomics")
     (description
@@ -14797,9 +14408,9 @@ But it can also be used to do data analysis for small scale data sets.")
         (base32 "1xnx2zanw548prxsw2zw5cddkkg6kj97jgyzw67achq5mnsvfbg8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/cmprsk")
     (synopsis "Subdistribution analysis of competing risks")
     (description
@@ -14824,11 +14435,7 @@ JASA, 94:496-509.")
          "1hvrplmdpjjpjji663rw0vjbbrzj2nvr04d1nkc8bf46p4ixyxgy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-lattice" ,r-lattice)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-data-table r-lattice r-rcpp r-rcpparmadillo r-survival))
     (home-page "https://cran.r-project.org/web/packages/etm")
     (synopsis "Empirical transition matrix")
     (description
@@ -14851,18 +14458,18 @@ model with finite state space using the Aalen-Johansen estimator.")
     (properties `((upstream-name . "Epi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cmprsk" ,r-cmprsk)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-etm" ,r-etm)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-numderiv" ,r-numderiv)
-       ("r-plyr" ,r-plyr)
-       ("r-purrr" ,r-purrr)
-       ("r-survival" ,r-survival)
-       ("r-zoo" ,r-zoo)))
+     (list r-cmprsk
+           r-data-table
+           r-dplyr
+           r-etm
+           r-mass
+           r-matrix
+           r-mgcv
+           r-numderiv
+           r-plyr
+           r-purrr
+           r-survival
+           r-zoo))
     (home-page "https://BendixCarstensen.com/Epi/")
     (synopsis "Statistical analysis in epidemiology")
     (description
@@ -14888,7 +14495,7 @@ number of epidemiological data sets.")
         (base32
          "1zyrisy3c4cz896j1bjh61sf57wdl9p8ywdq268cl819szfq78mx"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ppls")
     (synopsis "Penalized partial least squares")
     (description
@@ -14910,11 +14517,7 @@ regression coefficients can be conducted via jackknifing.")
         (base32 "1sl457a1lndrx98y2j9a2smanawx2iqlhl82iand0g3p5xp8ch4j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-igraph r-mass r-matrix r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/huge")
     (synopsis "High-dimensional undirected graph estimation")
     (description
@@ -14936,11 +14539,7 @@ screening, graph estimation, and model selection techniques into a pipeline.")
          "0vgs6k92vdr0cmb8cwbv2ff6qavw30agskfd8bfh17hsskrisvx0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-epi" ,r-epi)
-       ("r-genenet" ,r-genenet)
-       ("r-glmnet" ,r-glmnet)
-       ("r-mass" ,r-mass)
-       ("r-ppls" ,r-ppls)))
+     (list r-epi r-genenet r-glmnet r-mass r-ppls))
     (home-page "https://cran.r-project.org/web/packages/parcor")
     (synopsis "Regularized estimation of partial correlation matrices")
     (description
@@ -14992,7 +14591,7 @@ by change of variable.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/listenv")
     (synopsis "Environments behaving (almost) as lists")
     (description
@@ -15015,7 +14614,7 @@ subsetting.")
          "1wrjiiif6rpc268zz79pvpw33si6n6ffgxdnxmmcracwhb5vqg90"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)))
+     (list r-codetools))
     (home-page "https://github.com/HenrikBengtsson/globals")
     (synopsis "Identify global objects in R expressions")
     (description
@@ -15072,12 +14671,9 @@ port-forwarding to your local computer.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-globals" ,r-globals)
-       ("r-listenv" ,r-listenv)
-       ("r-parallelly" ,r-parallelly)))
+     (list r-digest r-globals r-listenv r-parallelly))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/future")
     (synopsis "Unified parallel and distributed processing in R")
     (description
@@ -15111,10 +14707,9 @@ the local machine to, say, distributed processing on a remote compute cluster.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-future" ,r-future)
-       ("r-globals" ,r-globals)))
+     (list r-future r-globals))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/future.apply")
     (synopsis "Apply function to elements in parallel using futures")
     (description
@@ -15138,7 +14733,7 @@ machine or distributed on a compute cluster.")
          "07p2hjmpcwcsang8z9sjkpy94rydcin7m3hyvcgzgm5cd6w8c1p4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://github.com/erichson/rSVD")
     (synopsis "Randomized singular value decomposition")
     (description
@@ -15170,11 +14765,7 @@ functions are provided.")
          "00fk5fr5zsk2qxc1kfhmshhjxgnamm3401089sx8m2l529zd6r8j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-crayon" ,r-crayon)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)))
+     (list r-codetools r-crayon r-purrr r-rlang r-tibble))
     (home-page "https://github.com/r-lib/sloop")
     (synopsis "Helpers for object-oriented programming in R")
     (description
@@ -15195,7 +14786,7 @@ using @code{S3}.")
         (base32
          "1aa76ir1kp67hiz7dr60azyc71yzslshyc640fjh0fpw0sp5kwbc"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/capushe/index.html")
     (synopsis "Calibrating penalties using slope heuristics")
     (description
@@ -15218,9 +14809,7 @@ heuristics.")
     (properties `((upstream-name . "doRNG")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)
-       ("r-rngtools" ,r-rngtools)))
+     (list r-foreach r-iterators r-rngtools))
     (home-page "https://renozao.github.io/doRNG/")
     (synopsis "Generic reproducible parallel backend for foreach loops")
     (description
@@ -15245,8 +14834,8 @@ chosen parallel environment and associated foreach backend.")
          "1vc8gy4slsywcwxq532373i0dq73fhs5cac9mr6zz2pjaaxjghhq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-matrix))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/blockmodeling")
     (synopsis "Generalized and classical blockmodeling of valued networks")
     (description
@@ -15270,10 +14859,7 @@ algorithms) can be computed and partitioned matrices can be plotted.")
     (properties `((upstream-name . "UpSetR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-plyr" ,r-plyr)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-gridextra r-plyr r-scales))
     (home-page "https://github.com/hms-dbmi/UpSetR")
     (synopsis "Visualize intersecting sets")
     (description
@@ -15302,8 +14888,7 @@ several common set, element and attribute related tasks.")
     ;; non-interactively.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-shiny))
     (home-page "https://ebailey78.github.io/shinyBS/")
     (synopsis "Twitter Bootstrap components for Shiny")
     (description
@@ -15339,13 +14924,9 @@ several common set, element and attribute related tasks.")
                  (invoke "esbuild" source "--minify"
                          (string-append "--outfile=" target)))))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools r-htmlwidgets r-jsonlite r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("esbuild" ,esbuild)))
+     (list r-knitr esbuild))
     (home-page "https://github.com/yang-tang/shinyjqui")
     (synopsis "jQuery UI interactions and effects for Shiny")
     (description
@@ -15384,8 +14965,7 @@ identifying outliers.")
         (base32 "154glks7rsjkza0sfi1kj7wj727py9sl1ba6sswflwmwc9n226q6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "http://www.perossi.org/home/bsm-1")
     (synopsis "Bayesian inference for marketing/micro-econometrics")
     (description
@@ -15442,7 +15022,7 @@ tensors.")
          "12h2y46xcfldhjdmm960swgn9b23zvkj5vg2bi42s9qxwgi02d63"))))
     (properties `((upstream-name . "rARPACK")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rspectra" ,r-rspectra)))
+    (propagated-inputs (list r-rspectra))
     (home-page "https://github.com/yixuan/rARPACK")
     (synopsis "Solvers for large scale eigenvalue and SVD problems")
     (description
@@ -15466,12 +15046,9 @@ users of rARPACK are advised to switch to the RSpectra package.")
          "05pji62pzgfk9dyiybmr16q0h6mdzsmvyzxdni3hn0dvl4a7mr5m"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayesm" ,r-bayesm)
-       ("r-mass" ,r-mass)
-       ("r-robustbase" ,r-robustbase)
-       ("r-tensora" ,r-tensora)))
+     (list r-bayesm r-mass r-robustbase r-tensora))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://www.stat.boogaart.de/compositions")
     (synopsis "Compositional data analysis")
     (description
@@ -15493,8 +15070,7 @@ numbers (e.g. concentrations).")
          "0hiw5smk6kgk0gb9840kcqkhkybl7n30s77xhjc395x09izbgix1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantreg" ,r-quantreg)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-quantreg r-sparsem))
     (home-page "https://cran.r-project.org/web/packages/cobs")
     (synopsis "Constrained B-Splines (sparse matrix based)")
     (description
@@ -15516,8 +15092,7 @@ splines via linear programming and sparse matrices.")
     (properties `((upstream-name . "DrImpute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/ikwak2/DrImpute")
     (synopsis "Imputing dropout events in single-cell RNA-Seq data")
     (description
@@ -15539,7 +15114,7 @@ such software by imputing dropout events.")
         (base32 "0m41n7zf7m0mh1w9ql70wqnzsf2f013ql699im7zmp6fdggb8qxm"))))
     (properties `((upstream-name . "gamlss.dist")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "http://www.gamlss.org/")
     (synopsis "Distributions for Generalized Additive Models for location scale and shape")
     (description
@@ -15568,12 +15143,9 @@ transformation, respectively.")
          "1zzq356dvd8ciajy6r5n4ybgx9xk7ydwv25j86xlcsqznkxdkkf2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-digest r-htmltools r-jsonlite r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://deanattali.com/shinyjs")
     (synopsis "Improve the user experience of your Shiny apps")
     (description
@@ -15621,13 +15193,13 @@ to easily call your own custom JavaScript functions from R.")
                            (map car mapping)
                            (map cdr mapping)))))))))
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-miniui" ,r-miniui)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)))
+     (list r-ggplot2
+           r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-miniui
+           r-shiny
+           r-shinyjs))
     (native-inputs
      `(("esbuild" ,esbuild)
        ("js-jquery"
@@ -15669,16 +15241,16 @@ select colors to use in your R code.")
     (properties `((upstream-name . "ggExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colourpicker" ,r-colourpicker)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-miniui" ,r-miniui)
-       ("r-r6" ,r-r6)
-       ("r-scales" ,r-scales)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)))
+     (list r-colourpicker
+           r-ggplot2
+           r-gtable
+           r-miniui
+           r-r6
+           r-scales
+           r-shiny
+           r-shinyjs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/daattali/ggExtra")
     (synopsis "Marginal histograms for ggplot2 and other enhancements")
     (description
@@ -15700,7 +15272,7 @@ marginal histograms/boxplots/density plots to ggplot2 scatterplots.")
          "18ym2pdql5vzngc7q5gn66d153hrfrnd8ilv8yh6vd7j7sx7vjql"))))
     (properties `((upstream-name . "minpack.lm")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/minpack.lm")
     (synopsis "Levenberg-Marquardt Nonlinear Least-Squares algorithm")
     (description
@@ -15744,9 +15316,9 @@ them (Anscombe-Glynn, D'Agostino, Bonett-Seier).")
          "1wm83m3cqd6llxb9p2jwim0wb81v84pgdmgcznygzaaq6kbn3n84"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mclust" ,r-mclust)))
+     (list r-mclust))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/msir")
     (synopsis "Model-based sliced inverse regression")
     (description
@@ -15766,7 +15338,7 @@ mixture modeling of inverse regression.")
         (base32
          "05jzrjqxzbcf6z245hlk7sjxiszv9paadaaimvcx5y5qgi87vhq7"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://github.com/brentonk/pbivnorm")
     (synopsis "Vectorized bivariate normal CDF")
     (description
@@ -15787,10 +15359,7 @@ probabilities from a standard bivariate normal CDF.")
          "12hhbwxaiprs9bmclwhhdpv42h4mrl4gj92zq3wk8rb883mw816l"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-mnormt" ,r-mnormt)
-       ("r-numderiv" ,r-numderiv)
-       ("r-pbivnorm" ,r-pbivnorm)))
+     (list r-mass r-mnormt r-numderiv r-pbivnorm))
     (home-page "https://lavaan.ugent.be")
     (synopsis "Latent variable analysis")
     (description
@@ -15812,12 +15381,9 @@ latent growth curve models.")
          "1ddaqwx8i3ygwvxf11mc8xhgk4nkvnail99nr5szq8i168752zq2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-compquadform" ,r-compquadform)
-       ("r-lavaan" ,r-lavaan)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sandwich" ,r-sandwich)))
+     (list r-compquadform r-lavaan r-mvtnorm r-sandwich))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/nonnest2/")
     (synopsis "Tests of non-nested models")
     (description
@@ -15841,9 +15407,7 @@ obtain confidence intervals associated with AIC and BIC.")
          "1zcrwa93mc27qj3g4ayc2k895r6g8q0g6qb2azmvj7wqk750va7a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-survival" ,r-survival)))
+     (list r-rcpp r-rcpparmadillo r-survival))
     (home-page "https://cran.r-project.org/web/packages/penalized/")
     (synopsis "Penalized estimation in GLMs and in the Cox model")
     (description
@@ -15869,7 +15433,7 @@ parameters.")
          "0scyfjn4ilsvha3x41c3b8bcfi31hlhwm77wn2a8hj5dsvnnmzig"))))
     (properties `((upstream-name . "ZIM")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://github.com/biostatstudio/ZIM")
     (synopsis "Zero-inflated models (ZIM) for count time series with excess zeros")
     (description
@@ -15939,10 +15503,9 @@ graphs.")
     (properties `((upstream-name . "pbdZMQ")))
     (build-system r-build-system)
     (inputs
-     `(("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list zeromq zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pbdr.org/")
     (synopsis "R interface to ZeroMQ")
     (description
@@ -15966,10 +15529,7 @@ compatible with @code{rzmq} are also provided.")
          "0qimllv9pn8wsl550bjkp5dkknbmr69j85mrwfbbq75m2ga466sk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-pillar" ,r-pillar)))
+     (list r-base64enc r-htmltools r-jsonlite r-pillar))
     (home-page "https://cran.r-project.org/web/packages/repr/")
     (synopsis "Serializable representations")
     (description
@@ -15991,7 +15551,7 @@ several formats and MIME types.")
     (properties `((upstream-name . "IRdisplay")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-repr" ,r-repr)))
+     (list r-repr))
     (home-page "https://cran.r-project.org/web/packages/IRdisplay/")
     (synopsis "Jupyter display machinery")
     (description
@@ -16032,18 +15592,18 @@ running IRkernel session.")
                   (string-append "[\"" (which "R") "\",")))
                #t))))))
     (inputs
-     `(("jupyter" ,jupyter)))
-    (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-digest" ,r-digest)
-       ("r-evaluate" ,r-evaluate)
-       ("r-irdisplay" ,r-irdisplay)
-       ("r-jsonlite" ,r-jsonlite)
-       ;; sets R_LIBS_SITE, so R can actually find this package (IRkernel)
-       ("r-minimal" ,r-minimal)
-       ("r-pbdzmq" ,r-pbdzmq)
-       ("r-repr" ,r-repr)
-       ("r-uuid" ,r-uuid)))
+     (list jupyter))
+    (propagated-inputs
+     (list r-crayon
+           r-digest
+           r-evaluate
+           r-irdisplay
+           r-jsonlite
+           ;; sets R_LIBS_SITE, so R can actually find this package (IRkernel)
+           r-minimal
+           r-pbdzmq
+           r-repr
+           r-uuid))
     (home-page "https://cran.r-project.org/web/packages/IRkernel/")
     (synopsis "Native R kernel for Jupyter")
     (description
@@ -16065,8 +15625,7 @@ network.")
          "0s8kd8krqk4kwv2zqxpsfy3w8qdwf5naf4b5l383vidq9sil0qb2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdata" ,r-gdata)
-       ("r-mass" ,r-mass)))
+     (list r-gdata r-mass))
     (home-page "https://cran.r-project.org/web/packages/gmodels/")
     (synopsis "Various R programming tools for model fitting")
     (description
@@ -16086,8 +15645,7 @@ network.")
          "0lzf2jqm56i74wif6x5sw3j0w2qc4sni49zq2fgbl89b7lwkvchj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-matrix r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/apcluster/")
     (synopsis "Affinity propagation clustering")
     (description
@@ -16111,16 +15669,16 @@ plotting functions are available for analyzing clustering results.")
          "1lzdlw0mw06rymyjzwf4i8rx1z6zxpwxxqfsc9ggqlnhq6bfhy93"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-broom
+           r-dplyr
+           r-ggplot2
+           r-rcpp
+           r-readr
+           r-rlang
+           r-stringr
+           r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rnabioco/valr")
     (synopsis "Genome interval arithmetic in R")
     (description
@@ -16142,7 +15700,7 @@ R, enabling interactive analysis and visualization of genome-scale data.")
          "1fzpz8vhghw8ygwg6rsvfy3783pqk7ch029i5851lwypkplvz77y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-tibble" ,r-tibble)))
+     (list r-tibble))
     (home-page "https://github.com/r-lib/rematch2")
     (synopsis "Tidy output from regular expression matching")
     (description
@@ -16163,9 +15721,7 @@ return the match results in tidy data frames.")
          "19savjzj44b7ifdxcp02ynj22z4n4ikq2aipc74ljzy3yykmqmjn"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-nlme" ,r-nlme)
-       ("r-vegan" ,r-vegan)))
+     (list r-ape r-nlme r-vegan))
     (home-page "https://cran.r-project.org/web/packages/picante/")
     (synopsis "Integrating phylogenies and ecology")
     (description
@@ -16192,10 +15748,7 @@ al. (2010).")
          "176z2q69p24i29a8sh19xxn2zl3h1z2ixdssr5i6m4yvkvdrvv3b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-nnet" ,r-nnet)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate r-nnet r-purrr r-r6))
     (home-page "https://markusdumke.github.io/reinforcelearn")
     (synopsis "Reinforcement learning")
     (description
@@ -16218,16 +15771,16 @@ can be used with function approximation, eligibility traces (Singh & Sutton,
          "1y3ljidhqdakxlya2npj2w0az820g8kw6gl1cfm4f0cxvzgd1ly4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-knitr" ,r-knitr)
-       ("r-lattice" ,r-lattice)
-       ("r-plyr" ,r-plyr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2
+           r-gridextra
+           r-gtable
+           r-knitr
+           r-lattice
+           r-plyr
+           r-rlang
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/stefanedwards/lemon")
     (synopsis "Freshen up your ggplot2 plots")
     (description
@@ -16248,8 +15801,7 @@ extensions.")
         (base32 "1qiyfkpsbzjr9xsq5kqq6rlqpndngkn2irdfh3gyi45h6hn118j4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-qtl" ,r-qtl)))
+     (list r-ggplot2 r-qtl))
     (home-page "https://cran.r-project.org/web/packages/wgaim")
     (synopsis "Whole genome average interval mapping for QTL detection")
     (description
@@ -16270,16 +15822,16 @@ whole genome approach to detecting significant QTL in linkage maps.")
          "0zpqvyjgwyqawxm8qrhcv8zq2b3yxgcqkkc87br29yrl7sjb8h6j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-r-utils" ,r-r-utils)
-       ("r-testthat" ,r-testthat)
-       ("r-venndiagram" ,r-venndiagram)
-       ("r-yaml" ,r-yaml)
-       ("bedops" ,bedops)
-       ("bedtools" ,bedtools)
-       ("htslib" ,htslib))) ; for tabix
+     (list r-data-table
+           r-r-utils
+           r-testthat
+           r-venndiagram
+           r-yaml
+           bedops
+           bedtools
+           htslib)) ; for tabix
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://cran.r-project.org/web/packages/bedr")
     (synopsis "Genomic region processing")
     (description
@@ -16324,9 +15876,7 @@ customizable sets, and intervals.")
          "1qqy4df28wy4q0g572azrj171jlhvrnzbh7x0wr2g7v6gr20y0ns"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)
-       ("r-polynom" ,r-polynom)
-       ("r-sets" ,r-sets)))
+     (list r-gmp r-polynom r-sets))
     (home-page "https://cran.r-project.org/web/packages/partitions")
     (synopsis "Additive partitions of integers")
     (description
@@ -16372,9 +15922,7 @@ methods.")
          "1i7m4vfslsix98dwx4jlrsldm7fhhfp25gr7aapcxqxms7ryaby6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brobdingnag" ,r-brobdingnag)
-       ("r-partitions" ,r-partitions)
-       ("r-polynom" ,r-polynom)))
+     (list r-brobdingnag r-partitions r-polynom))
     (home-page "https://github.com/RobinHankin/untb.git")
     (synopsis "Ecological drift under the UNTB")
     (description
@@ -16415,8 +15963,7 @@ breakpoints in a genomic sequence alignment.")
     (properties `((upstream-name . "SNPmaxsel")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-combinat" ,r-combinat)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-combinat r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/SNPmaxsel/index.html")
     (synopsis "Maximally selected statistics for SNP data")
     (description
@@ -16438,8 +15985,7 @@ data.")
     (properties `((upstream-name . "ACSNMineR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)))
+     (list r-ggplot2 r-gridextra))
     (home-page "https://cran.r-project.org/web/packages/ACSNMineR")
     (synopsis "Gene enrichment analysis")
     (description
@@ -16464,10 +16010,9 @@ barplots or heatmaps.")
          "1xz9spln6s9mcwpgcv1m4jymn4gnl1bb6vh90bphqcn0vvlk8jsq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-segmented" ,r-segmented)))
+     (list r-ade4 r-segmented))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://seqinr.r-forge.r-project.org/")
     (synopsis "Biological sequences retrieval and analysis")
     (description
@@ -16489,11 +16034,11 @@ utilities for sequence data management under the ACNUC system.")
             "1ss0f15h4yqzk488ilsa5d2ibrj3wzwplx4160mn600i8ciy02xr"))))
     (build-system r-build-system)
     (inputs
-     `(("udunits" ,udunits)))
+     (list udunits))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/r-quantities/units/")
     (synopsis "Measurement Units for R Vectors")
     (description
@@ -16518,7 +16063,7 @@ classes.")
     (properties `((upstream-name . "udunits2")))
     (build-system r-build-system)
     (inputs
-     `(("udunits" ,udunits)))
+     (list udunits))
     (home-page "https://cran.r-project.org/package=udunits2")
     (synopsis "Udunits-2 bindings for R")
     (description
@@ -16539,12 +16084,9 @@ classes.")
     (properties `((upstream-name . "classInt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-e1071" ,r-e1071)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-class r-e1071 r-kernsmooth))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://github.com/r-spatial/classInt/")
     (synopsis "Choose univariate class intervals")
     (description
@@ -16566,8 +16108,7 @@ univariate class intervals for mapping or other graphics purposes.")
     (properties `((upstream-name . "spData")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-sp" ,r-sp)))
+     (list r-raster r-sp))
     (home-page "https://github.com/Nowosad/spData")
     (synopsis "Datasets for spatial analysis")
     (description
@@ -16617,7 +16158,7 @@ sampling.")
         (base32
          "1igq0l2knsbhizncgydcsidgkvvlwwlkrifbcdyhnzk0bhrdixkd"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/deldir")
     (synopsis "Delaunay triangulation and Dirichlet (Voronoi) tessellation")
     (description
@@ -16643,7 +16184,7 @@ tessellation.")
     (properties `((upstream-name . "wk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)))
+     (list r-cpp11))
     (home-page "https://paleolimbot.github.io/wk/")
     (synopsis "Lightweight well-known geometry parsing")
     (description
@@ -16669,12 +16210,11 @@ high-performance functions are provided here.")
     (properties `((upstream-name . "s2")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-wk" ,r-wk)))
+     (list r-rcpp r-wk))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://r-spatial.github.io/s2/")
     (synopsis "Spherical geometry operators using the S2 geometry library")
     (description
@@ -16699,21 +16239,16 @@ information about geometries.")
          "0dxln3ikqmwczz0ri63xwj05v09hkpljw2qvma6n03nzczyg2713"))))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list gdal geos proj sqlite zlib))
     (propagated-inputs
-     `(("r-classint" ,r-classint)
-       ("r-dbi" ,r-dbi)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-s2" ,r-s2)
-       ("r-units" ,r-units)))
+     (list r-classint
+           r-dbi
+           r-magrittr
+           r-rcpp
+           r-s2
+           r-units))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-spatial/sf/")
     (synopsis "Simple features for R")
     (description
@@ -16749,23 +16284,23 @@ datum transformations.")
                                         "inst/doc/nb_sf.Rmd")))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-coda" ,r-coda)
-       ("r-deldir" ,r-deldir)
-       ("r-e1071" ,r-e1071)
-       ("r-expm" ,r-expm)
-       ("r-gmodels" ,r-gmodels)
-       ("r-learnbayes" ,r-learnbayes)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-s2" ,r-s2)
-       ("r-sf" ,r-sf)
-       ("r-sp" ,r-sp)
-       ("r-spdata" ,r-spdata)
-       ("r-units" ,r-units)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-boot
+           r-coda
+           r-deldir
+           r-e1071
+           r-expm
+           r-gmodels
+           r-learnbayes
+           r-mass
+           r-matrix
+           r-nlme
+           r-s2
+           r-sf
+           r-sp
+           r-spdata
+           r-units))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/r-spatial/spdep/")
     (synopsis "Spatial dependence: weighting schemes, statistics and models")
     (description
@@ -16789,17 +16324,17 @@ spanning tree.")
          "1wjp31634n6z6wglf4z3ydrhhn5jmpwwckmp3n2b0v5f3p2fivp4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-ape" ,r-ape)
-       ("r-boot" ,r-boot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-reshape2" ,r-reshape2)
-       ("r-seqinr" ,r-seqinr)
-       ("r-shiny" ,r-shiny)
-       ("r-vegan" ,r-vegan)))
+     (list r-ade4
+           r-ape
+           r-boot
+           r-dplyr
+           r-ggplot2
+           r-igraph
+           r-mass
+           r-reshape2
+           r-seqinr
+           r-shiny
+           r-vegan))
     (home-page "https://github.com/thibautjombart/adegenet")
     (synopsis "Exploratory analysis of genetic and genomic data")
     (description
@@ -16826,8 +16361,7 @@ also provided to illustrate various methods.")
         (base32 "0ykx84p7c8cad5d1mj8cm1d5cz2paacdjx4ll4qzmq827lcyycz1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-adegenet" ,r-adegenet)
-       ("r-ape" ,r-ape)))
+     (list r-adegenet r-ape))
     (home-page "http://ape-package.ird.fr/pegas.html")
     (synopsis "Population and evolutionary genetics analysis system")
     (description
@@ -16852,10 +16386,7 @@ minimum spanning tree and network, and median-joining networks.")
          "0rdkhfgyr97r2d1kd9g8ipb2pn563qxm1y4m9z678q0kqan2ddl0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-adegenet" ,r-adegenet)
-       ("r-gtools" ,r-gtools)
-       ("r-pegas" ,r-pegas)))
+     (list r-ade4 r-adegenet r-gtools r-pegas))
     (home-page "https://cran.r-project.org/web/packages/rmetasim")
     (synopsis "Individual-based population genetic simulation environment")
     (description
@@ -16879,11 +16410,7 @@ genetics of complex population dynamics.")
          "0lljxvz7nc6y2z303icphar2niir0i407w5cyhy2pwspd9gwkwpy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-combinat" ,r-combinat)
-       ("r-gdata" ,r-gdata)
-       ("r-gtools" ,r-gtools)
-       ("r-mass" ,r-mass)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-combinat r-gdata r-gtools r-mass r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/genetics/")
     (synopsis "Population genetics")
     (description
@@ -16909,7 +16436,7 @@ and testing for linkage disequilibrium, ...")
          "16apsqvkah5l0d5qcwp3lq2jspkb6n62wzr0wskmj84jblx483vv"))))
     (properties `((upstream-name . "snp.plotter")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-genetics" ,r-genetics)))
+    (propagated-inputs (list r-genetics))
     (home-page "https://cran.r-project.org/web/packages/snp.plotter/")
     (synopsis "Plot p-values using single SNP and/or haplotype data")
     (description
@@ -16932,7 +16459,7 @@ either PDF/EPS files.")
        (sha256
         (base32 "0rhzf735hmbqfn2xbgcln4sqx7m9far72g5gq9mghgkw016kqglm"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/polspline/")
     (synopsis "Polynomial spline routines")
     (description
@@ -16953,22 +16480,22 @@ lspec, polyclass, and polymars.")
         (base32 "1di4xvsx0rwkr77nfqiysbg4qf699199xqil70i39d4zwfzqrm8h"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-digest" ,r-digest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)
-       ("r-htmltable" ,r-htmltable)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-multcomp" ,r-multcomp)
-       ("r-nlme" ,r-nlme)
-       ("r-polspline" ,r-polspline)
-       ("r-quantreg" ,r-quantreg)
-       ("r-rpart" ,r-rpart)
-       ("r-sparsem" ,r-sparsem)
-       ("r-survival" ,r-survival)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster
+           r-digest
+           r-ggplot2
+           r-hmisc
+           r-htmltable
+           r-htmltools
+           r-lattice
+           r-mass
+           r-multcomp
+           r-nlme
+           r-polspline
+           r-quantreg
+           r-rpart
+           r-sparsem
+           r-survival))
+    (native-inputs (list gfortran))
     (home-page "http://biostat.mc.vanderbilt.edu/rms")
     (synopsis "Regression modeling strategies")
     (description
@@ -17000,8 +16527,8 @@ generalized linear models, and quantile regression.")
          "0qvs3ld28djnjnggdhqjwq8sbv8zz322qahlvf7dnx35yqf6xkms"))))
     (properties `((upstream-name . "arsenal")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-knitr" ,r-knitr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-knitr))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mayoverse/arsenal")
     (synopsis "Functions for large-scale statistical summaries")
     (description
@@ -17040,10 +16567,9 @@ include
     (properties `((upstream-name . "haplo.stats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arsenal" ,r-arsenal)
-       ("r-rms" ,r-rms)))
+     (list r-arsenal r-rms))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; for vignettes
+     (list r-r-rsp)) ; for vignettes
     (home-page "https://www.mayo.edu/research/labs/statistical-genetics-genetic-epidemiology/software")
     (synopsis "Analysis of haplotypes when linkage phase is ambiguous")
     (description
@@ -17067,7 +16593,7 @@ examples in the vignette.")
         (base32
          "1sbzpi9z94f010lw2y1gmifjrvpmiqs4m26za7vr1xz72azrqvs9"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "http://famprevmed.ucsd.edu/faculty/cberry/bqtl/")
     (synopsis "Bayesian QTL mapping toolkit")
     (description
@@ -17110,11 +16636,7 @@ the same pedigree.")
          "0s6wlkggkm3qndwyvw72xv1n0mcjb7ss3ajbq2ll6rv30splq0db"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ibdreg" ,r-ibdreg)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-qtl" ,r-qtl)
-       ("r-wgaim" ,r-wgaim)))
+     (list r-ibdreg r-mgcv r-nlme r-qtl r-wgaim))
     (home-page "https://cran.r-project.org/web/packages/dlmap/")
     (synopsis "Detection localization mapping for QTL")
     (description
@@ -17183,8 +16705,7 @@ tests for extended marker haplotypes, as in Clayton, D. and Jones, H. (1999)
     (properties `((upstream-name . "SPARQL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-xml" ,r-xml)))
+     (list r-rcurl r-xml))
     (home-page "https://cran.r-project.org/web/packages/SPARQL")
     (synopsis "SPARQL client for R")
     (description "This package provides an interface to use SPARQL to pose
@@ -17205,14 +16726,14 @@ SELECT or UPDATE queries to an end-point.")
                 "1qqvvfbpbd6sin8vpvr3zzlhlyx1i6b98yp77xj5zl220nid5slb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)
-       ("pandoc" ,pandoc)))
+     (list r-htmltools
+           r-jquerylib
+           r-knitr
+           r-rmarkdown
+           r-tinytex
+           r-xfun
+           r-yaml
+           pandoc))
     ;; We cannot add knitr because this package depends on xfun, which is an
     ;; input to knitr.
     #;
@@ -17237,9 +16758,9 @@ authoring books and technical documents with R Markdown.")
          "1rqz0y4r94y3mwbb9kyz97cjqpnprka96qbncvbnbmgg2d630kij"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-getopt" ,r-getopt)))
+     (list r-getopt))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/trevorld/optparse")
     (synopsis "Command line option parser")
     (description
@@ -17282,12 +16803,9 @@ and a QP solver.")
          "1p4vlna185sa3b5xjbysiqxcj9aa5s7dmxy41hg79vlqdivf874r"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)
-       ("r-adegenet" ,r-adegenet)
-       ("r-gaston" ,r-gaston)
-       ("r-gtools" ,r-gtools)))
+     (list r-ade4 r-adegenet r-gaston r-gtools))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/hierfstat/")
     (synopsis "Estimation and tests of hierarchical F-statistics")
     (description
@@ -17333,8 +16851,7 @@ handle missing genotypes at some SNPs.")
          "11xis4vzn2ga8ml9xrgfgqzccvwbnabq35aidzdvpnvciybsanvz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-mass" ,r-mass)))
+     (list r-lpsolve r-mass))
     (home-page "https://cran.r-project.org/web/packages/sampling/")
     (synopsis "Survey sampling")
     (description
@@ -17427,7 +16944,7 @@ and accessing fields.")
     (properties `((upstream-name . "svMisc")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/SciViews/svMisc")
     (synopsis "Miscellaneous functions for SciViews")
     (description
@@ -17450,7 +16967,7 @@ path for temporary variables you do not want to @code{save()} or
          "13w4sb4pvgciwr8wsz785dafj2k2kpx7znz46r5d32wx88vkycp4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/xyz/")
     (synopsis "Algorithm for fast interaction search in high-dimensional data")
     (description
@@ -17517,8 +17034,7 @@ interaction search in high-dimensional data.")
          "0b9k2n9sk23bh45hjgnkxpjyvpdrz1hx7kmxvmb4nhlhm1wpsv9g"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafontdb" ,r-extrafontdb)
-       ("r-rttf2pt1" ,r-rttf2pt1)))
+     (list r-extrafontdb r-rttf2pt1))
     (home-page "https://github.com/wch/extrafont")
     (synopsis "Tools for using fonts in R")
     (description
@@ -17550,9 +17066,7 @@ The extrafont package makes both of these things easier.")
          "1z2y0ihn68ppay7xkglhw7djki5654g6z4bbpyy41if57z9q554f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafont" ,r-extrafont)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hmisc" ,r-hmisc)))
+     (list r-extrafont r-ggplot2 r-hmisc))
     (home-page "https://cran.r-project.org/web/packages/xkcd/")
     (synopsis "Plot ggplot2 graphics in the XKCD style")
     (description
@@ -17574,10 +17088,9 @@ the XKCD web comic.")
     (properties `((upstream-name . "babelgene")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-rlang" ,r-rlang)))
+     (list r-dplyr r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://igordot.github.io/babelgene/")
     (synopsis "Gene orthologs for model organisms in a Tidy data format")
@@ -17604,14 +17117,14 @@ compiled by the HGNC Comparison of Orthology Predictions (HCOP).")
          "103m52av68pkjfh8f81qh6j3cs1mj1lg831ciwybr34cax767jr1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-babelgene" ,r-babelgene)
-       ("r-dplyr" ,r-dplyr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)))
+     (list r-babelgene
+           r-dplyr
+           r-magrittr
+           r-rlang
+           r-tibble
+           r-tidyselect))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/igordot/msigdbr")
     (synopsis "MSigDB gene sets for multiple organisms")
     (description
@@ -17706,11 +17219,9 @@ package.")
          "12mk3fa8fdjxj7xxz21jkr7h91w5wdgwjqhszcz1qffwsgb773qp"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridgraphics" ,r-gridgraphics)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-ggplot2 r-gridgraphics r-yulab-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/GuangchuangYu/ggplotify")
     (synopsis "Convert plots to @code{grob} or @code{ggplot} object")
     (description
@@ -17734,7 +17245,7 @@ converting them to @code{ggplot} objects.")
         (base32
          "1hqyz57gph02c9fdc07lxz113bbklif3g18sw8jan6pakhhdc7dz"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/Ironholds/triebeard/")
     (synopsis "Radix trees in Rcpp")
     (description
@@ -17757,10 +17268,7 @@ packages with Rcpp.")
          "17znizh4yabh2zs9mzyr0sl6p0pw49961i61br7cl1b7v9sza18q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-farver" ,r-farver)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-farver r-magrittr r-rcpp r-rlang))
     (home-page "https://github.com/thomasp85/tweenr")
     (synopsis "Interpolate data for smooth animations")
     (description
@@ -17783,7 +17291,7 @@ color.")
         (base32
          "0jyk4maqiblvj095jd59dr76kbniyli3v3xvy0a72ljszq6vrnkl"))))
     (build-system r-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "http://www.angusj.com/delphi/clipper.php")
     (synopsis "Polygon clipping")
     (description
@@ -17809,8 +17317,7 @@ self-intersections from polygon data.")
          "04x3my655dd287cbsszbnf75q0swmjlxxrblcsay7a8n3df3a830"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-triebeard" ,r-triebeard)))
+     (list r-rcpp r-triebeard))
     (home-page "https://github.com/Ironholds/urltools/")
     (synopsis "Vectorized tools for URL handling and parsing")
     (description
@@ -17835,17 +17342,17 @@ sets of URLs.")
          "0bwzjbjl678xvc2ihm80dwn9pidwafqjdab3k299csys16s3na1a"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-mass" ,r-mass)
-       ("r-polyclip" ,r-polyclip)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-tweenr" ,r-tweenr)
-       ("r-withr" ,r-withr)))
+     (list r-ggplot2
+           r-gtable
+           r-mass
+           r-polyclip
+           r-rcpp
+           r-rcppeigen
+           r-rlang
+           r-scales
+           r-tidyselect
+           r-tweenr
+           r-withr))
     (home-page "https://ggforce.data-imaginist.com")
     (synopsis "Accelerating ggplot2")
     (description
@@ -17868,19 +17375,19 @@ that fills this gap.")
          "16japbndid34shqg8n0bmjrxn84xmhrylvz832zclcllm6i93fn1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-plyr" ,r-plyr)
-       ("r-progress" ,r-progress)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-urltools" ,r-urltools)
-       ("r-xml2" ,r-xml2)))
+     (list r-dplyr
+           r-httr
+           r-jsonlite
+           r-plyr
+           r-progress
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-urltools
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/europepmc/")
     (synopsis "R Interface to the Europe PubMed Central RESTful Web Service")
     (description
@@ -17908,23 +17415,23 @@ databases, including ENA, PDB or ChEMBL are also accessible.")
          "0m4n8iw2b9jk8hcy5blg5w59zsqcpsbv27wbw598dvljpafx8sp3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-graphlayouts" ,r-graphlayouts)
-       ("r-gtable" ,r-gtable)
-       ("r-igraph" ,r-igraph)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tidygraph" ,r-tidygraph)
-       ("r-viridis" ,r-viridis)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-digest
+           r-dplyr
+           r-ggforce
+           r-ggplot2
+           r-ggrepel
+           r-graphlayouts
+           r-gtable
+           r-igraph
+           r-mass
+           r-rcpp
+           r-rlang
+           r-scales
+           r-tidygraph
+           r-viridis
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ggraph/")
     (synopsis "Implementation of grammar of graphics for graphs and networks")
     (description
@@ -17949,10 +17456,7 @@ layer by layer.")
     (properties `((upstream-name . "gkmSVM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernlab" ,r-kernlab)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rocr" ,r-rocr)
-       ("r-seqinr" ,r-seqinr)))
+     (list r-kernlab r-rcpp r-rocr r-seqinr))
     (home-page "https://cran.r-project.org/web/packages/gkmSVM")
     (synopsis "Gapped-kmer support vector machine")
     (description
@@ -17975,7 +17479,7 @@ kernels, including: gkmSVM, kmer-SVM, mismatch kernel and wildcard kernel.")
     (properties `((upstream-name . "varSelRF")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-randomforest" ,r-randomforest)))
+     (list r-randomforest))
     (home-page "https://www.ligarto.org/rdiaz/software/software")
     (synopsis "Variable selection using random forests")
     (description
@@ -18001,9 +17505,8 @@ proteomics applications).")
          "0ycpgkk23y3zzkb42n2skcyl35ps1n7jmyzfj7pbxr3f6gr2grfh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-survival" ,r-survival)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-cluster r-survival))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/pamr/")
     (synopsis "Prediction Analysis for Microarrays")
     (description
@@ -18043,13 +17546,13 @@ discriminant analysis for the purpose of classifying high dimensional data.")
          "1qv512pd4x5vmx15y9nvqmabbbw14h75fmi1sjbcg5yl25z0cswy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-dplyr" ,r-dplyr)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)
-       ("r-shiny" ,r-shiny)))
+     (list r-assertthat
+           r-dplyr
+           r-htmltools
+           r-jsonlite
+           r-magrittr
+           r-rlang
+           r-shiny))
     (home-page "https://ggvis.rstudio.com/")
     (synopsis "Interactive grammar of graphics")
     (description
@@ -18072,10 +17575,9 @@ graphics using Vega.")
          "1h9f4ww9yc3nsvghgr2q7jjrlz29ibabxjbax1sk5wmqh2wy6pbx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-survival" ,r-survival)))
+     (list r-lattice r-survival))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/gbm-developers/gbm")
     (synopsis "Generalized boosted regression models")
     (description
@@ -18128,10 +17630,7 @@ and Learning to Rank measures (LambdaMart).")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)))
+     (list r-base64enc r-crosstalk r-htmlwidgets r-igraph))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-jquery"
@@ -18188,8 +17687,7 @@ repository.")
          "0wijw8v0wmbfrda5564cmnp788qmlkk21yn5cp5qk8aprm9l1fnk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kernsmooth" ,r-kernsmooth)
-       ("r-mass" ,r-mass)))
+     (list r-kernsmooth r-mass))
     (home-page "http://mpm.r-forge.r-project.org")
     (synopsis "Multivariate projection methods")
     (description
@@ -18211,8 +17709,7 @@ analysis.")
                 "0g2mcp55lvvpx4kd3mn225mpbxqcq73wy5qx8b4lyf04iybgysg2"))))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (home-page "https://www.rforge.net/png/")
     (synopsis "Read and write PNG images")
     (description
@@ -18235,8 +17732,7 @@ in-memory raw vectors.")
          "0hi9lz121ya1l2lbm7rqlxg6fs6bvxck396dngnidrhl5fvqb41b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-ggplot2 r-reshape2))
     (home-page "http://www.sthda.com/english/wiki/ggcorrplot")
     (synopsis "Visualization of a correlation matrix using ggplot2")
     (description
@@ -18260,9 +17756,8 @@ function for computing a matrix of correlation p-values.")
     (properties `((upstream-name . "ggfun")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-rlang" ,r-rlang)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-rlang))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/package=ggfun")
     (synopsis "Miscellaneous functions for ggplot2")
     (description
@@ -18285,14 +17780,14 @@ each of the legends).")
     (properties `((upstream-name . "gridtext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jpeg" ,r-jpeg)
-       ("r-markdown" ,r-markdown)
-       ("r-png" ,r-png)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-jpeg
+           r-markdown
+           r-png
+           r-rcpp
+           r-rcurl
+           r-rlang
+           r-stringr
+           r-xml2))
     (home-page "https://wilkelab.org/gridtext/")
     (synopsis "Improved text rendering support for Grid graphics")
     (description
@@ -18316,11 +17811,8 @@ wrap.")
     (properties `((upstream-name . "ggtext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridtext" ,r-gridtext)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gridtext r-rlang r-scales))
+    (native-inputs (list r-knitr))
     (home-page "https://wilkelab.org/ggtext/")
     (synopsis "Improved text rendering support for ggplot2")
     (description
@@ -18400,12 +17892,12 @@ etc.).  Text boxes with automatic word wrap are also supported.")
                              sources targets))))
              #t)))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)))
+     (list r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-rmarkdown
+           r-shiny))
     (native-inputs
      `(("uglifyjs" ,node-uglify-js)
        ("js-raphael"
@@ -18465,7 +17957,7 @@ of its components to the containing web page.")
     (properties `((upstream-name . "preseqR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-polynom" ,r-polynom)))
+     (list r-polynom))
     (home-page "https://cran.r-project.org/web/packages/preseqR/")
     (synopsis "Predicting species accumulation curves")
     (description
@@ -18533,7 +18025,7 @@ compatibility of dependent packages for some time.")
          "1axggnsc27zzgr7snf41j3zd1vp3nfpmq4zj4d01axc709dyg40q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://github.com/wch/downloader")
     (synopsis "Download files over HTTP and HTTPS")
     (description
@@ -18557,12 +18049,12 @@ external dependencies.  This package has is implemented purely in R.")
     (properties `((upstream-name . "aplot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggplotify" ,r-ggplotify)
-       ("r-magrittr" ,r-magrittr)
-       ("r-patchwork" ,r-patchwork)
-       ("r-yulab-utils" ,r-yulab-utils)))
+     (list r-ggfun
+           r-ggplot2
+           r-ggplotify
+           r-magrittr
+           r-patchwork
+           r-yulab-utils))
     (home-page "https://github.com/YuLab-SMU/aplot")
     (synopsis "Decorate a ggplot with associated information")
     (description
@@ -18587,7 +18079,7 @@ matched.")
     (properties `((upstream-name . "ggnewscale")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://cran.r-project.org/package=ggnewscale")
     (synopsis "Multiple fill and color scales in ggplot2")
     (description
@@ -18609,7 +18101,7 @@ matched.")
      `((upstream-name . "ggpointdensity")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)))
+     (list r-ggplot2))
     (home-page "https://github.com/LKremer/ggpointdensity")
     (synopsis "Cross between a 2D density plot and a scatter plot")
     (description
@@ -18633,19 +18125,17 @@ colored by the number of neighboring points.  This is useful to visualize the
     (properties `((upstream-name . "arrow")))
     (build-system r-build-system)
     (inputs
-     `(("apache-arrow" ,apache-arrow "lib")
-       ("zlib" ,zlib)))
+     (list `(,apache-arrow "lib") zlib))
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-bit64" ,r-bit64)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-assertthat
+           r-bit64
+           r-purrr
+           r-r6
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/apache/arrow/")
     (synopsis "R integration to Apache Arrow")
     (description
@@ -18669,9 +18159,9 @@ library.")
          "0m7bq8db3m5dhf01rw7xc7xy1ciq3m7dfgsl80p8cy4h8vqr3d06"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lazyeval" ,r-lazyeval)))
+     (list r-lazyeval))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/kevinushey/rex")
     (synopsis "Friendly regular expressions")
     (description
@@ -18695,10 +18185,9 @@ regular expressions from human readable expressions")
     (properties `((upstream-name . "mlapi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-r6" ,r-r6)))
+     (list r-matrix r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=mlapi")
     (synopsis "Abstract classes for building scikit-learn like API")
     (description
@@ -18722,7 +18211,7 @@ industry for machine learning tasks.")
     (properties `((upstream-name . "float")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/wrathematics/float")
     (synopsis "32-bit floats")
     (description
@@ -18749,13 +18238,13 @@ on, for a performance vs accuracy trade-off.")
     (properties `((upstream-name . "rsparse")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-float" ,r-float)
-       ("r-lgr" ,r-lgr)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rhpcblasctl" ,r-rhpcblasctl)))
+     (list r-data-table
+           r-float
+           r-lgr
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rhpcblasctl))
     (home-page "https://github.com/rexyai/rsparse")
     (synopsis "Statistical learning on sparse matrices")
     (description
@@ -18781,17 +18270,17 @@ Row} (CSR) format.")
     (properties `((upstream-name . "text2vec")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-lgr" ,r-lgr)
-       ("r-matrix" ,r-matrix)
-       ("r-mlapi" ,r-mlapi)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rsparse" ,r-rsparse)
-       ("r-stringi" ,r-stringi)))
+     (list r-data-table
+           r-digest
+           r-lgr
+           r-matrix
+           r-mlapi
+           r-r6
+           r-rcpp
+           r-rsparse
+           r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://text2vec.org")
     (synopsis "Text mining framework for R")
     (description
@@ -18817,11 +18306,7 @@ multicore machines.")
     (properties `((upstream-name . "MCMCpack")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-mcmc" ,r-mcmc)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-coda r-lattice r-mass r-mcmc r-quantreg))
     (home-page "https://cran.r-project.org/package=MCMCpack")
     (synopsis "Markov Chain Monte Carlo (MCMC) package")
     (description
@@ -18870,11 +18355,7 @@ provided.")
     (properties `((upstream-name . "cyclocomp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-remotes" ,r-remotes)
-       ("r-withr" ,r-withr)))
+     (list r-callr r-crayon r-desc r-remotes r-withr))
     (home-page "https://github.com/MangoTheCat/cyclocomp")
     (synopsis "Cyclomatic complexity of R code")
     (description
@@ -18898,18 +18379,18 @@ provides tools to compute this metric.")
     (properties `((upstream-name . "lintr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-crayon" ,r-crayon)
-       ("r-cyclocomp" ,r-cyclocomp)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-rex" ,r-rex)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-testthat" ,r-testthat)
-       ("r-xml2" ,r-xml2)
-       ("r-xmlparsedata" ,r-xmlparsedata)))
+     (list r-codetools
+           r-crayon
+           r-cyclocomp
+           r-digest
+           r-httr
+           r-jsonlite
+           r-knitr
+           r-rex
+           r-rstudioapi
+           r-testthat
+           r-xml2
+           r-xmlparsedata))
     (home-page "https://github.com/jimhester/lintr")
     (synopsis "Linter for R code")
     (description "This package checks adherence to a given style, syntax
@@ -18930,16 +18411,16 @@ code edited with @code{RStudio IDE}, @code{Emacs} and @code{Vim}.")
          "1p3m6i28nlxh6r609syn88cwlbdpl3dw44dy3gsijk2ibq20mfsx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-future
+           r-future-apply
+           r-ggplot2
+           r-gridextra
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-rcpp
+           r-rcpparmadillo
+           r-reshape2))
     (home-page "https://github.com/ChristophH/sctransform")
     (synopsis "Variance stabilizing transformations for Single Cell UMI Data")
     (description
@@ -18968,20 +18449,20 @@ batch correction, and data correction.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-cli" ,r-cli)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r-cache" ,r-r-cache)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-rprojroot" ,r-rprojroot)
-       ("r-tibble" ,r-tibble)
-       ("r-withr" ,r-withr)
-       ("r-xfun" ,r-xfun)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-backports
+           r-cli
+           r-glue
+           r-magrittr
+           r-purrr
+           r-r-cache
+           r-rematch2
+           r-rlang
+           r-rprojroot
+           r-tibble
+           r-withr
+           r-xfun))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/r-lib/styler")
     (synopsis "Non-invasive pretty printing of R code")
     (description
@@ -19041,7 +18522,7 @@ parallel versions of vectorized R functions of the @code{mc*apply} family.")
         (base32
          "0413j7gwr5yj14jamkizj55q7xii1a0kgazzj0ilqn2ascclz6k7"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-lme4" ,r-lme4)))
+    (propagated-inputs (list r-lme4))
     (home-page "https://github.com/vdorie/blme")
     (synopsis "Bayesian linear mixed-effects models")
     (description
@@ -19063,20 +18544,20 @@ extends the lme4 package.")
          "0d2xy77hkzhcnyz8zxcv98i80fx6ripjw4rvyx4ww1d0vjjgqf52"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-base64url" ,r-base64url)
-       ("r-brew" ,r-brew)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-fs" ,r-fs)
-       ("r-progress" ,r-progress)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-stringi" ,r-stringi)
-       ("r-withr" ,r-withr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-backports
+           r-base64url
+           r-brew
+           r-checkmate
+           r-data-table
+           r-digest
+           r-fs
+           r-progress
+           r-r6
+           r-rappdirs
+           r-stringi
+           r-withr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/mllg/batchtools")
     (synopsis "Tools for computation on batch systems")
     (description
@@ -19101,7 +18582,7 @@ experiments in a well-organized and reproducible way.")
         (base32
          "0apgpdnn74mqg2bnr8yjyxgyvdl411h0r2b1r2xd67k21pyxs8bd"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cluster" ,r-cluster)))
+    (propagated-inputs (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/clue/")
     (synopsis "Tools for analyzing cluster ensembles")
     (description "Cluster ensembles are collections of individual solutions to
@@ -19125,9 +18606,9 @@ consensus and secondary clusterings.")
         (base32
          "1hm89zi38ldgbskyx1cn7gm87yqy7zrxli8q05a36y1ndvazi3j4"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/coatless/sitmo/")
     (synopsis "Parallel pseudo random number generator header files")
     (description
@@ -19149,11 +18630,9 @@ dimensional low-discrepancy sequence.")
          "1fwsldqcri2lccna4icbmmlqic3w4xyjm7rn0xmikrsw4kzapvjb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sitmo" ,r-sitmo)))
+     (list r-bh r-rcpp r-sitmo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://www.daqana.org/dqrng")
     (synopsis "Fast pseudo random number generators")
     (description
@@ -19184,10 +18663,8 @@ engine (Salmon et al., 2011) as provided by the package @code{sitmo}.")
     (properties `((upstream-name . "ingredients")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-scales" ,r-scales)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gridextra r-scales))
+    (native-inputs (list r-knitr))
     (home-page "https://ModelOriented.github.io/ingredients/")
     (synopsis "Effects and importances of model ingredients")
     (description
@@ -19223,8 +18700,8 @@ feature effects.  Key functions are:
          "00jzrndb3ahsv6ihp2pvs732n9cc944m83vdinrl9v1pxd82prkh"))))
     (properties `((upstream-name . "iBreakDown")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-ggplot2))
+    (native-inputs (list r-knitr))
     (home-page "https://ModelOriented.github.io/iBreakDown/")
     (synopsis "Model agnostic instance level variable attributions")
     (description
@@ -19249,10 +18726,9 @@ classification and regression models.")
          "0mq94ah21p1glvsbvdmi2p7nlgz1bvq7w3rz2z3mdqq18kz6nkjw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-plyr" ,r-plyr)))
+     (list r-ggplot2 r-plyr))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ; vignette builder
+     (list r-r-rsp)) ; vignette builder
     (home-page "http://chris.brien.name")
     (synopsis "Functions useful in the design and ANOVA of experiments")
     (description
@@ -19289,9 +18765,7 @@ been used in the call to @code{aov}.")
     (properties `((upstream-name . "DALEX")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ibreakdown" ,r-ibreakdown)
-       ("r-ingredients" ,r-ingredients)))
+     (list r-ggplot2 r-ibreakdown r-ingredients))
     (home-page "https://pbiecek.github.io/DALEX/")
     (synopsis "Descriptive machine learning explanations")
     (description
@@ -19318,11 +18792,9 @@ and model output.")
     (properties `((upstream-name . "enrichR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-httr" ,r-httr)
-       ("r-rjson" ,r-rjson)))
+     (list r-ggplot2 r-httr r-rjson))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/enrichR/")
     (synopsis "R Interface to Enrichr database for analyzing gene sets")
     (description
@@ -19344,7 +18816,7 @@ annotated biological functions.")
          "1h59zlsyzbjylaziwavppl9bjmnba4iiq34772y3dys6fqclajnh"))))
     (properties `((upstream-name . "plot3D")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-misc3d" ,r-misc3d)))
+    (propagated-inputs (list r-misc3d))
     (home-page "https://cran.r-project.org/web/packages/plot3D")
     (synopsis "Plot multi-dimensional data")
     (description
@@ -19366,15 +18838,15 @@ includes data sets from oceanography.")
          "0qls8pyndrlwx75wzlc0xmk04qq263d7065r3d6kvay7haa4nm40"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-ggplot2
+           r-gridextra
+           r-scales
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/sinhrks/ggfortify")
     (synopsis "Data visualization tools for statistical analysis results")
     (description
@@ -19398,14 +18870,14 @@ results and plots in a unified style using the @code{ggplot2} package.")
     (properties `((upstream-name . "RefManageR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lubridate" ,r-lubridate)
-       ("r-plyr" ,r-plyr)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr
+           r-jsonlite
+           r-lubridate
+           r-plyr
+           r-stringr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/RefManageR/")
     (synopsis "Straightforward BibTeX and BibLaTeX bibliography management")
     (description
@@ -19433,15 +18905,15 @@ into R and converted to @code{BibEntry} objects.")
          "1qbarvafjb8jgkrnrhh6jw7mcglmjwf7dpdiibxf39jkmlhf7las"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-curl" ,r-curl)
-       ("r-httr" ,r-httr)
-       ("r-miniui" ,r-miniui)
-       ("r-refmanager" ,r-refmanager)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-yaml" ,r-yaml)))
+     (list r-assertthat
+           r-curl
+           r-httr
+           r-miniui
+           r-refmanager
+           r-rstudioapi
+           r-shiny
+           r-shinyjs
+           r-yaml))
     (home-page "https://github.com/crsh/citr")
     (synopsis "RStudio add-in to insert Markdown citations")
     (description
@@ -19463,11 +18935,9 @@ the current document.")
          "04xbgrrb3aq067hrivslq5f2rd1v95yfv7lkj596ijyqi6ibjl27"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)))
+     (list r-data-table r-jsonlite r-matrix))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/dmlc/xgboost")
     (synopsis "Extreme gradient boosting")
     (description
@@ -19494,12 +18964,9 @@ easily.")
          "191vpy84s0bar06y9z1qx43x2kc4qp7lmrcmd0cvz2pnzq722jab"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rspectra" ,r-rspectra)))
+     (list r-openssl r-rcpp r-reticulate r-rspectra))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tkonopka/umap")
     (synopsis "Uniform manifold approximation and projection")
     (description
@@ -19521,14 +18988,14 @@ in R, including a translation of the original algorithm into R.")
          "08vxh085wnrxgwy35ksb4cr7ccjvd98pyr2zlgarqryfgc1bdqbf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dqrng" ,r-dqrng)
-       ("r-fnn" ,r-fnn)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppannoy" ,r-rcppannoy)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-rspectra" ,r-rspectra)))
+     (list r-dqrng
+           r-fnn
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rcppannoy
+           r-rcppprogress
+           r-rspectra))
     (home-page "https://github.com/jlmelville/uwot")
     (synopsis "Uniform manifold approximation and projection")
     (description
@@ -19553,22 +19020,22 @@ LargeVis method of Tang et al. (2016) is also provided.")
     (properties `((upstream-name . "kableExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rvest" ,r-rvest)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-svglite" ,r-svglite)
-       ("r-viridislite" ,r-viridislite)
-       ("r-webshot" ,r-webshot)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-digest
+           r-glue
+           r-htmltools
+           r-knitr
+           r-magrittr
+           r-rmarkdown
+           r-rstudioapi
+           r-rvest
+           r-scales
+           r-stringr
+           r-svglite
+           r-viridislite
+           r-webshot
+           r-xml2))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://haozhu233.github.io/kableExtra/")
     (synopsis "Construct complex tables with pipe syntax")
     (description
@@ -19591,7 +19058,7 @@ customize styles using a readable syntax.")
        (sha256
         (base32 "02p3612rpydk195n2qr77lp1j2w8zsw1ckkk98c8angm4r5q8dsc"))))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://statweb.stanford.edu/~tibs/glasso/")
     (synopsis "Graphical Lasso: estimation of Gaussian graphical models")
     (description
@@ -19682,11 +19149,9 @@ computed using the L1 (Manhattan, taxicab) metric.")
     (properties `((upstream-name . "leiden")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-igraph r-matrix r-reticulate))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/TomKellyGenetics/leiden")
     (synopsis "R implementation of Leiden clustering algorithm")
     (description
@@ -19709,10 +19174,9 @@ guaranteeing well-connected communities.\" <arXiv:1810.08473>.")
          "10glgkf58lcykcwda1hj6xdps02m3i247qynk6s2jmwljagps3fg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)))
+     (list r-ggplot2 r-gtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/thomasp85/patchwork")
     (synopsis "Compose ggplot2 plots")
     (description
@@ -19755,26 +19219,26 @@ multiple plots.")
                     (find-files "." "\\.class$"))
              #t)))))
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dosnow" ,r-dosnow)
-       ("r-dplyr" ,r-dplyr)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-hmisc" ,r-hmisc)
-       ("r-ica" ,r-ica)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-mclust" ,r-mclust)
-       ("r-patchwork" ,r-patchwork)
-       ("r-plyr" ,r-plyr)
-       ("r-rann-l1" ,r-rann-l1)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-riverplot" ,r-riverplot)
-       ("r-rtsne" ,r-rtsne)
-       ("r-snow" ,r-snow)))
+     (list r-cowplot
+           r-dosnow
+           r-dplyr
+           r-fnn
+           r-foreach
+           r-ggplot2
+           r-ggrepel
+           r-hmisc
+           r-ica
+           r-irlba
+           r-matrix
+           r-mclust
+           r-patchwork
+           r-plyr
+           r-rann-l1
+           r-rcpp
+           r-rcpparmadillo
+           r-riverplot
+           r-rtsne
+           r-snow))
     (native-inputs
      `(("jdk" ,icedtea "jdk")
        ;; See https://github.com/MacoskoLab/liger/issues/96
@@ -19818,19 +19282,19 @@ dataset-specific factors.")
            #t))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cowplot" ,r-cowplot)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-irlba" ,r-irlba)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-cowplot
+           r-dplyr
+           r-ggplot2
+           r-irlba
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppprogress
+           r-rlang
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (home-page "https://github.com/immunogenomics/harmony")
     (synopsis "Integration of single cell sequencing data")
     (description
@@ -19853,15 +19317,15 @@ function and interfaces to external frameworks.")
     (properties `((upstream-name . "covr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rex" ,r-rex)
-       ("r-withr" ,r-withr)
-       ("r-yaml" ,r-yaml)))
+     (list r-crayon
+           r-digest
+           r-httr
+           r-jsonlite
+           r-rex
+           r-withr
+           r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/r-lib/covr")
     (synopsis "Test coverage for R packages")
     (description
@@ -19887,13 +19351,11 @@ both R code and compiled C/C++/FORTRAN code.")
     (properties `((upstream-name . "systemfonts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)))
+     (list r-cpp11))
     (inputs
-     `(("fontconfig" ,fontconfig)
-       ("zlib" ,zlib)))
+     (list fontconfig zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-lib/systemfonts")
     (synopsis "System native font finding")
     (description
@@ -19918,9 +19380,7 @@ be used further by e.g. graphic devices.")
     (properties `((upstream-name . "graphlayouts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-igraph r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/schochastics/graphlayouts")
     (synopsis "Additional layout algorithms for network visualizations")
     (description
@@ -19945,15 +19405,15 @@ emphasize hidden group structures in networks or focus on specific nodes.")
     (properties `((upstream-name . "terra")))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite) ; needed for proj
-       ("zlib" ,zlib)))
+     (list gdal
+           geos
+           proj
+           sqlite ; needed for proj
+           zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://rspatial.org/terra")
     (synopsis "Spatial data analysis")
     (description
@@ -19979,15 +19439,15 @@ files is supported.")
     (properties `((upstream-name . "tidygraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-igraph
+           r-magrittr
+           r-pillar
+           r-r6
+           r-rcpp
+           r-rlang
+           r-tibble
+           r-tidyr))
     (home-page "https://github.com/thomasp85/tidygraph")
     (synopsis "Tidy API for graph manipulation")
     (description
@@ -20017,9 +19477,7 @@ common graph algorithms.")
       (properties `((upstream-name . "SoupX")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-ggplot2" ,r-ggplot2)
-         ("r-matrix" ,r-matrix)
-         ("r-seurat" ,r-seurat)))
+       (list r-ggplot2 r-matrix r-seurat))
       (home-page "https://github.com/constantAmateur/SoupX")
       (synopsis "Single cell mRNA Soup eXterminator")
       (description
@@ -20041,11 +19499,9 @@ cell RNA-seq experiments.")
          "00764vv86r3bn4r85in4w637harffyw605fgq0dj6mrbrwcfb650"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-mass" ,r-mass)
-       ("r-rlang" ,r-rlang)))
+     (list r-dplyr r-mass r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))           ; needed for vignette
+     (list r-knitr))           ; needed for vignette
     (home-page "https://github.com/ropensci/assertr")
     (synopsis "Assertive programming for R analysis pipelines")
     (description
@@ -20069,11 +19525,9 @@ in pipelines.")
     (properties `((upstream-name . "parameters")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayestestr" ,r-bayestestr)
-       ("r-datawizard" ,r-datawizard)
-       ("r-insight" ,r-insight)))
+     (list r-bayestestr r-datawizard r-insight))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/parameters")
     (synopsis "Processing of model parameters")
     (description
@@ -20098,14 +19552,11 @@ effect size.")
     (properties `((upstream-name . "rgdal")))
     (build-system r-build-system)
     (inputs
-     `(("gdal" ,gdal)
-       ("proj" ,proj)
-       ("zlib" ,zlib)))
+     (list gdal proj zlib))
     (propagated-inputs
-     `(("r-sp" ,r-sp)))
+     (list r-sp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "http://rgdal.r-forge.r-project.org")
     (synopsis "Bindings for the Geospatial Data Abstraction Library")
     (description
@@ -20128,9 +19579,9 @@ PROJ.4 library.")
     (properties `((upstream-name . "insol")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)))
+     (list r-raster))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://meteoexploration.com/R/insol/index.html")
     (synopsis "Tools for calculating solar radiation")
     (description
@@ -20155,10 +19606,9 @@ atmospheric physics.")
     (properties `((upstream-name . "lifecycle")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)))
+     (list r-glue r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/r-lib/lifecycle")
     (synopsis "Manage the life cycle of your package functions")
     (description
@@ -20184,9 +19634,9 @@ signalled with increasing levels of non-invasive verbosity.")
          "1cciil1nzxd8gbj49w99jiv077lbpb59vx7bmb4p218aj2h5hqq4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/assertable/")
     (synopsis "Verbose assertions for tabular data (data.frames and data.tables)")
     (description "This package provides simple, flexible assertions on
@@ -20212,7 +19662,7 @@ data.table.")
         (base32 "1ka9g8zak8sg4y2xbz93dfrldznlk9qpd4pq9z21cdcdn3b8s4i2"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/quadprog")
     (synopsis "Functions to solve quadratic programming problems")
     (description
@@ -20233,7 +19683,7 @@ programming problems.")
     (properties `((upstream-name . "deSolve")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://desolve.r-forge.r-project.org/")
     (synopsis "Solvers for initial value problems of differential equations")
     (description "This package provides functions that solve initial value
@@ -20280,7 +19730,7 @@ porting.")
          "1yfbfjvpbhgky7vihw3f4jl41pxpqb39z4nc045d5z7z48bdl18d"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/subplex")
     (synopsis "Unconstrained optimization using the subplex algorithm")
     (description
@@ -20323,10 +19773,10 @@ as a boxplot function.")
          "1jvcmpzi9knhxq5jsbhg8slm8hnlx2y8smmwwrbnbyd0rmk5fhci"))))
     (properties `((upstream-name . "bio3d")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (inputs (list zlib))
+    (propagated-inputs (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://thegrantlab.org/bio3d/")
     (synopsis "Biological structure analysis")
     (description
@@ -20357,10 +19807,7 @@ structural data.")
     (properties `((upstream-name . "Bios2cor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bigmemory" ,r-bigmemory)
-       ("r-bio3d" ,r-bio3d)
-       ("r-circular" ,r-circular)
-       ("r-igraph" ,r-igraph)))
+     (list r-bigmemory r-bio3d r-circular r-igraph))
     (home-page "https://cran.r-project.org/web/packages/Bios2cor/")
     (synopsis "From biological sequences and simulations to correlation analysis")
     (description
@@ -20432,9 +19879,7 @@ tools for help in data interpretation.")
             (base32
              "0y7byf6kcinfz9ac59jxc4v6kppdazmnyqfav0dm4h550fzfqqlg"))))))
     (propagated-inputs
-     `(("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-igraph" ,r-igraph)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-htmlwidgets r-igraph r-magrittr))
     (home-page "https://cran.r-project.org/package=networkD3")
     (synopsis "D3 JavaScript network graphs from R")
     (description
@@ -20456,15 +19901,15 @@ graphs from R.")
     (properties `((upstream-name . "aaSEA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bios2cor" ,r-bios2cor)
-       ("r-dt" ,r-dt)
-       ("r-hmisc" ,r-hmisc)
-       ("r-magrittr" ,r-magrittr)
-       ("r-networkd3" ,r-networkd3)
-       ("r-plotly" ,r-plotly)
-       ("r-seqinr" ,r-seqinr)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)))
+     (list r-bios2cor
+           r-dt
+           r-hmisc
+           r-magrittr
+           r-networkd3
+           r-plotly
+           r-seqinr
+           r-shiny
+           r-shinydashboard))
     (home-page "https://cran.r-project.org/web/packages/aaSEA/")
     (synopsis "Amino acid substitution effect analyzer")
     (description
@@ -20488,8 +19933,7 @@ single, multiple and correlated amino acid substitutions in proteins.")
     (properties `((upstream-name . "ABACUS")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-shiny" ,r-shiny)))
+     (list r-ggplot2 r-shiny))
     (home-page "https://shiny.abdn.ac.uk/Stats/apps/")
     (synopsis "Apps-based activities for communicating and understanding statistics")
     (description
@@ -20534,8 +19978,7 @@ beta analysis to identify candidate genes containing multiple CpG sites.")
     (properties `((upstream-name . "abcADM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-bh r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/abcADM/")
     (synopsis "Fit accumulated damage models and estimate reliability using ABC")
     (description
@@ -20559,9 +20002,9 @@ long-term reliability under stochastic load profiles.")
     (properties `((upstream-name . "Rglpk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-slam" ,r-slam)))
+     (list r-slam))
     (inputs
-     `(("glpk" ,glpk)))
+     (list glpk))
     (home-page "https://r-forge.r-project.org/projects/rglp/")
     (synopsis "R interface to the GNU Linear Programming Kit")
     (description
@@ -20585,10 +20028,7 @@ integer linear programming} (MILP) and other related problems.")
     (properties `((upstream-name . "abcdeFBA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-corrplot" ,r-corrplot)
-       ("r-lattice" ,r-lattice)
-       ("r-rgl" ,r-rgl)
-       ("r-rglpk" ,r-rglpk)))
+     (list r-corrplot r-lattice r-rgl r-rglpk))
     (home-page "https://cran.r-project.org/web/packages/abcdeFBA/")
     (synopsis "A-Biologist-Can-Do-Everything of Flux Balance Analysis with this package")
     (description
@@ -20634,7 +20074,7 @@ overall risk.")
     (properties `((upstream-name . "abemus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)))
+     (list r-data-table))
     (home-page "https://cran.r-project.org/web/packages/abemus/")
     (synopsis "Adaptive base error model in ultra-deep sequencing data")
     (description
@@ -20684,8 +20124,7 @@ cell free DNA} (cfDNA).")
             (base32
              "0vh5n7hqqyx2pdvlqq6xadfqibcn78h5961rwhpf817kpxfzv8v7"))))))
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-shiny" ,r-shiny)))
+     (list r-jsonlite r-shiny))
     (home-page "https://github.com/carlganz/rintrojs")
     (synopsis "Wrapper for the Intro.js library")
     (description
@@ -20711,11 +20150,9 @@ server-side.")
     (properties `((upstream-name . "sysfonts")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list freetype libpng zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/yixuan/sysfonts")
     (synopsis "Loading fonts into R")
     (description
@@ -20737,7 +20174,7 @@ into R, in order to support other packages.")
     (properties `((upstream-name . "showtextdb")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sysfonts" ,r-sysfonts)))
+     (list r-sysfonts))
     (home-page "https://cran.r-project.org/web/packages/showtextdb/")
     (synopsis "Font files for the 'showtext' package")
     (description
@@ -20759,15 +20196,11 @@ package.")
     (properties `((upstream-name . "showtext")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list freetype libpng zlib))
     (propagated-inputs
-     `(("r-showtextdb" ,r-showtextdb)
-       ("r-sysfonts" ,r-sysfonts)))
+     (list r-showtextdb r-sysfonts))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/yixuan/showtext")
     (synopsis "Using fonts more easily in R graphs")
     (description
@@ -20793,12 +20226,9 @@ such as Ghostscript is needed to use this package.")
     (properties `((upstream-name . "emojifont")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-proto" ,r-proto)
-       ("r-showtext" ,r-showtext)
-       ("r-sysfonts" ,r-sysfonts)))
+     (list r-ggplot2 r-proto r-showtext r-sysfonts))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://guangchuangyu.github.io/emojifont")
     (synopsis "Emoji and Font Awesome in R graphics")
     (description
@@ -20820,13 +20250,13 @@ both base and ggplot2 graphics.")
     (properties `((upstream-name . "abstractr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colourpicker" ,r-colourpicker)
-       ("r-emojifont" ,r-emojifont)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-rintrojs" ,r-rintrojs)
-       ("r-shiny" ,r-shiny)
-       ("r-shinythemes" ,r-shinythemes)))
+     (list r-colourpicker
+           r-emojifont
+           r-ggplot2
+           r-gridextra
+           r-rintrojs
+           r-shiny
+           r-shinythemes))
     (home-page "https://matt-kumar.shinyapps.io/portfolio")
     (synopsis "R-Shiny application for creating visual abstracts")
     (description
@@ -20849,11 +20279,8 @@ included.")
     (properties `((upstream-name . "qgam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-doparallel" ,r-doparallel)
-       ("r-mgcv" ,r-mgcv)
-       ("r-plyr" ,r-plyr)
-       ("r-shiny" ,r-shiny)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-doparallel r-mgcv r-plyr r-shiny))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/qgam/")
     (synopsis "Smooth additive quantile regression models")
     (description
@@ -20882,14 +20309,14 @@ regression models.")
     (properties `((upstream-name . "abtest")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-plotrix" ,r-plotrix)
-       ("r-qgam" ,r-qgam)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sn" ,r-sn)
-       ("r-truncnorm" ,r-truncnorm)))
+     (list r-matrix
+           r-mvtnorm
+           r-plotrix
+           r-qgam
+           r-rcolorbrewer
+           r-rcpp
+           r-sn
+           r-truncnorm))
     (home-page "https://cran.r-project.org/web/packages/abtest/")
     (synopsis "Bayesian A/B testing")
     (description
@@ -20912,8 +20339,7 @@ elicitation options based on Kass and Vaidyanathan (1992)
     (properties `((upstream-name . "reldist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hmisc" ,r-hmisc)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-hmisc r-mgcv))
     (home-page "http://www.stat.ucla.edu/~handcock/RelDist")
     (synopsis "Relative distribution methods")
     (description
@@ -20940,8 +20366,7 @@ Social Sciences\" by Mark S. Handcock and Martina Morris, Springer-Verlag,
     (properties `((upstream-name . "accept")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-reldist" ,r-reldist)))
+     (list r-dplyr r-reldist))
     (home-page "https://cran.r-project.org/web/packages/accept/")
     (synopsis "Acute COPD Exacerbation Prediction Tool (ACCEPT)")
     (description
@@ -20965,10 +20390,7 @@ Adibi et al. (2019) @url{doi:10.1101/651901}.")
     (properties `((upstream-name . "SMPracticals")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipse" ,r-ellipse)
-       ("r-mass" ,r-mass)
-       ("r-nlme" ,r-nlme)
-       ("r-survival" ,r-survival)))
+     (list r-ellipse r-mass r-nlme r-survival))
     (home-page "http://statwww.epfl.ch/davison/SM/")
     (synopsis "Practicals for use with Davison (2003) Statistical Models")
     (description
@@ -21019,8 +20441,7 @@ experienced.")
     (properties `((upstream-name . "tcltk2")))
     (build-system r-build-system)
     (inputs
-     `(("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list tcl tk))
     (home-page "https://www.sciviews.org/SciViews-R")
     (synopsis "Tcl/Tk additions")
     (description
@@ -21042,9 +20463,7 @@ with style and various functions to supplement the tcltk package")
     (properties `((upstream-name . "accrual")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fgui" ,r-fgui)
-       ("r-smpracticals" ,r-smpracticals)
-       ("r-tcltk2" ,r-tcltk2)))
+     (list r-fgui r-smpracticals r-tcltk2))
     (home-page "https://cran.r-project.org/web/packages/accrual/")
     (synopsis "Bayesian accrual prediction")
     (description
@@ -21091,8 +20510,8 @@ data.")
          "1hq0zhhz9klmp4zcr1w8hyn7s1h9kfg57d2l2mfm7psx459j0krl"))))
     (properties `((upstream-name . "mda")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-class" ,r-class)))
-    (native-inputs `(("gfortran" ,gfortran)))
+    (propagated-inputs (list r-class))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/mda/")
     (synopsis "Mixture and flexible discriminant analysis")
     (description
@@ -21114,7 +20533,7 @@ data.")
     (properties `((upstream-name . "elasticnet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lars" ,r-lars)))
+     (list r-lars))
     (home-page "http://users.stat.umn.edu/~zouxx019/")
     (synopsis "Elastic-Net for sparse estimation and sparse PCA")
     (description
@@ -21137,9 +20556,7 @@ Components.  The Lasso solution paths can be computed by the same function.")
     (properties `((upstream-name . "sparseLDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-elasticnet" ,r-elasticnet)
-       ("r-mass" ,r-mass)
-       ("r-mda" ,r-mda)))
+     (list r-elasticnet r-mass r-mda))
     (home-page "https://www.imm.dtu.dk/~lkhc/")
     (synopsis "Sparse discriminant analysis")
     (description
@@ -21161,12 +20578,12 @@ and mixture of Gaussian models.")
     (properties `((upstream-name . "accSDA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-ggthemes" ,r-ggthemes)
-       ("r-gridextra" ,r-gridextra)
-       ("r-mass" ,r-mass)
-       ("r-rarpack" ,r-rarpack)
-       ("r-sparselda" ,r-sparselda)))
+     (list r-ggplot2
+           r-ggthemes
+           r-gridextra
+           r-mass
+           r-rarpack
+           r-sparselda))
     (home-page "https://github.com/gumeo/accSDA/wiki")
     (synopsis "Accelerated sparse discriminant analysis")
     (description
@@ -21194,7 +20611,7 @@ discriminant} (SZVD) analysis is also included in the package.")
     (properties `((upstream-name . "ace2fastq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)))
+     (list r-stringr))
     (home-page "https://github.com/c5sire/ace2fastq")
     (synopsis "ACE file to FASTQ converter")
     (description
@@ -21239,8 +20656,7 @@ on Linear Recurrences Modulo 2'', ACM Transactions on Mathematical Software.")
               "1nz6h0j5ywdh48m0swmhp34hbkycd7n13rclrxaw85qi9wc42597"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-knitr" ,r-knitr)
-      ("r-nnls" ,r-nnls)))
+    (list r-knitr r-nnls))
    (home-page "https://cran.r-project.org/web/packages/rNMF/")
    (synopsis "Robust nonnegative matrix factorization")
    (description
@@ -21266,9 +20682,9 @@ and prints vectorized images.")
     (properties `((upstream-name . "randtoolbox")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rngwell" ,r-rngwell)))
+     (list r-rngwell))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/randtoolbox/")
     (synopsis "Toolbox for pseudo and quasi random number generation")
     (description
@@ -21302,9 +20718,9 @@ See e.g. Gentle (2003) @url{doi:10.1007/b97336}.")
          "1l861h76q5w0nbnbybhgg7hiw7fks677jakyd49n1whwvd48sfz4"))))
     (properties `((upstream-name . "lhs")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/bertcarnell/lhs")
     (synopsis "Latin Hypercube Samples")
     (description
@@ -21326,11 +20742,7 @@ Latin Hypercube Samples.")
     (properties `((upstream-name . "acebayes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-compare" ,r-compare)
-       ("r-lhs" ,r-lhs)
-       ("r-randtoolbox" ,r-randtoolbox)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-compare r-lhs r-randtoolbox r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/acebayes/")
     (synopsis "Optimal Bayesian experimental design using the ACE algorithm")
     (description
@@ -21357,10 +20769,7 @@ to maximise an approximation to the expectation of the utility function.")
     (properties `((upstream-name . "ACEt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-mass" ,r-mass)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-bh r-mass r-rcpp r-rcpparmadillo))
     (home-page "https://cran.r-project.org/web/packages/ACEt/")
     (synopsis "Estimating dynamic heritability and twin model comparison")
     (description
@@ -21383,7 +20792,7 @@ to age using B-splines and P-splines.")
     (properties `((upstream-name . "acfMPeriod")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/acfMPeriod/")
     (synopsis "Estimation of the ACF from the M-periodogram")
     (description
@@ -21433,11 +20842,7 @@ models.")
     (properties `((upstream-name . "gamlss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gamlss-data" ,r-gamlss-data)
-       ("r-gamlss-dist" ,r-gamlss-dist)
-       ("r-mass" ,r-mass)
-       ("r-nlme" ,r-nlme)
-       ("r-survival" ,r-survival)))
+     (list r-gamlss-data r-gamlss-dist r-mass r-nlme r-survival))
     (home-page "http://www.gamlss.org/")
     (synopsis "Generalized additive models for location scale and shape")
     (description
@@ -21464,9 +20869,7 @@ explanatory variables.")
     (properties `((upstream-name . "acid")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gamlss" ,r-gamlss)
-       ("r-gamlss-dist" ,r-gamlss-dist)
-       ("r-hmisc" ,r-hmisc)))
+     (list r-gamlss r-gamlss-dist r-hmisc))
     (home-page "https://cran.r-project.org/web/packages/acid/")
     (synopsis "Analysing conditional income distributions")
     (description
@@ -21492,7 +20895,7 @@ analysis of income distributions at the disaggregated level.")
          "1wqzc35i1rshx0zlmas8y4qkkvy6h9r4i4apscjjv1xg2wjflzxa"))))
     (properties `((upstream-name . "acm4r")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (propagated-inputs (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/acm4r/")
     (synopsis "Align-and-count method comparisons of RFLP data")
     (description
@@ -21538,8 +20941,7 @@ the appropriate system call provided by the underlying operating system.")
     (build-system r-build-system)
     ;; These inputs are needed for vignettes
     (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-knitr r-rmarkdown))
     (home-page "https://github.com/andreyshabalin/filematrix")
     (synopsis "File-backed matrix class with convenient read and write access")
     (description
@@ -21566,7 +20968,7 @@ columns, ad allows for quick addition of extra columns to a filematrix.")
     (properties `((upstream-name . "ACMEeqtl")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-filematrix" ,r-filematrix)))
+     (list r-filematrix))
     (home-page "https://github.com/andreyshabalin/ACMEeqtl")
     (synopsis "Estimation of interpretable eQTL effect sizes")
     (description
@@ -21590,7 +20992,7 @@ p-values with well controlled Type-I error.")
          "000b2hqlhj93958nddw0fqb15ahigs08najv2miivym046x04mf7"))))
     (properties `((upstream-name . "acmeR")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-foreign" ,r-foreign)))
+    (propagated-inputs (list r-foreign))
     (home-page "https://cran.r-project.org/web/packages/acmeR/")
     (synopsis "ACME estimator of bird and bat mortality by wind turbines")
     (description
@@ -21618,9 +21020,7 @@ settings.")
     (properties `((upstream-name . "R.huge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.huge")
     (synopsis "Methods for accessing huge amounts of data")
     (description
@@ -21649,11 +21049,7 @@ the @code{aroma.affymetrix} package.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-cache" ,r-r-cache)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-cache r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.filesets")
     (synopsis "Easy handling of and access to files")
     (description
@@ -21681,10 +21077,7 @@ identify file sets and individual files.")
     (properties `((upstream-name . "R.devices")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-base64enc r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.devices")
     (synopsis "Unified handling of graphics devices")
     (description
@@ -21757,7 +21150,7 @@ provided as well.")
          "12nixpqrc5gp7p2clr7ia6jwb0jq2i3brlxiwlp00ixmnm5g1jyd"))))
     (properties `((upstream-name . "tuneR")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-signal" ,r-signal)))
+    (propagated-inputs (list r-signal))
     (home-page "https://cran.r-project.org/web/packages/tuneR/")
     (synopsis "Analysis of music and speech")
     (description
@@ -21782,9 +21175,9 @@ transcription, ...")
     (properties `((upstream-name . "seewave")))
     (build-system r-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (propagated-inputs
-     `(("r-tuner" ,r-tuner)))
+     (list r-tuner))
     (home-page "http://rug.mnhn.fr/seewave")
     (synopsis "Sound analysis and synthesis")
     (description
@@ -21811,9 +21204,7 @@ and 3D spectrograms and many other analyses.")
      `((upstream-name . "AcousticNDLCodeR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-seewave" ,r-seewave)
-       ("r-tuner" ,r-tuner)
-       ("r-zoo" ,r-zoo)))
+     (list r-seewave r-tuner r-zoo))
     (home-page "https://cran.r-project.org/web/packages/AcousticNDLCodeR/")
     (synopsis "Coding sound files for use with NDL")
     (description
@@ -21839,8 +21230,7 @@ unit.\" @url{doi:10.1371/journal.pone.0174623}")
     (properties `((upstream-name . "acp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantmod" ,r-quantmod)
-       ("r-tseries" ,r-tseries)))
+     (list r-quantmod r-tseries))
     (home-page "https://cran.r-project.org/web/packages/acp/")
     (synopsis "Autoregressive conditional Poisson")
     (description
@@ -21862,7 +21252,7 @@ model (ACP(p,q)) proposed by Heinen (2003).")
          "1h3a07czp0w3hrhjcg1fz721y8vsfclzqi3rq8qfzgpfb4h1f06r"))))
     (properties `((upstream-name . "ada")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rpart" ,r-rpart)))
+    (propagated-inputs (list r-rpart))
     (home-page "https://cran.r-project.org/web/packages/ada/")
     (synopsis "Stochastic boosting")
     (description
@@ -21907,10 +21297,7 @@ floating point chromosomes.")
     (properties `((upstream-name . "kernelFactory")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-auc" ,r-auc)
-       ("r-genalg" ,r-genalg)
-       ("r-kernlab" ,r-kernlab)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-auc r-genalg r-kernlab r-randomforest))
     (home-page "https://cran.r-project.org/web/packages/kernelFactory/")
     (synopsis "Ensemble of kernel machines")
     (description
@@ -21952,10 +21339,7 @@ classes into dummy/indicator variables.")
     (properties `((upstream-name . "aCRM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ada" ,r-ada)
-       ("r-dummies" ,r-dummies)
-       ("r-kernelfactory" ,r-kernelfactory)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-ada r-dummies r-kernelfactory r-randomforest))
     (home-page "https://cran.r-project.org/web/packages/aCRM/")
     (synopsis "Convenience functions for analytical customer relationship management")
     (description
@@ -21995,8 +21379,7 @@ and regression trees.")
     (properties `((upstream-name . "treeClust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-rpart" ,r-rpart)))
+     (list r-cluster r-rpart))
     (home-page "https://cran.r-project.org/web/packages/treeClust/")
     (synopsis "Cluster distances through trees")
     (description
@@ -22019,8 +21402,7 @@ clustering.")
     (properties `((upstream-name . "AcrossTic")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)
-       ("r-treeclust" ,r-treeclust)))
+     (list r-lpsolve r-treeclust))
     (home-page "https://cran.r-project.org/web/packages/AcrossTic/")
     (synopsis "Cost-minimal regular spanning subgraph with TreeClust")
     (description
@@ -22043,9 +21425,7 @@ distribution.")
     (properties `((upstream-name . "acrt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-sandwich" ,r-sandwich)))
+     (list r-rcpp r-rcppeigen r-sandwich))
     (home-page "https://cran.r-project.org/web/packages/acrt/")
     (synopsis "Autocorrelation robust testing")
     (description
@@ -22068,11 +21448,7 @@ errors.")
     (properties `((upstream-name . "acs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)
-       ("r-xml" ,r-xml)))
+     (list r-httr r-plyr r-rcpp r-stringr r-xml))
     (home-page "https://dusp.mit.edu/faculty/ezra-haber-glenn")
     (synopsis "Work with data from the US Census")
     (description
@@ -22128,8 +21504,7 @@ distribution of the halting states.")
     (properties `((upstream-name . "acss")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-acss-data" ,r-acss-data)
-       ("r-zoo" ,r-zoo)))
+     (list r-acss-data r-zoo))
     (home-page "http://complexitycalculator.com/methodology.html")
     (synopsis "Algorithmic complexity for short strings")
     (description
@@ -22157,7 +21532,7 @@ complexity are also provided: entropy and change complexity.")
     (properties `((upstream-name . "ACSWR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ACSWR/")
     (synopsis "Companion package for the book \"A Course in Statistics with R\"")
     (description
@@ -22178,7 +21553,7 @@ R\" (ISBN 978-1-119-15272-9.)")
          "0mlgk929gdismikwx4k2ndqq57nnqj7mlgvd3479b214hksgq036"))))
     (properties `((upstream-name . "alabama")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-numderiv" ,r-numderiv)))
+    (propagated-inputs (list r-numderiv))
     (home-page "https://cran.r-project.org/web/packages/alabama/")
     (synopsis "Constrained nonlinear optimization")
     (description
@@ -22202,18 +21577,18 @@ allowed.")
     (properties `((upstream-name . "GDINA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-alabama" ,r-alabama)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)
-       ("r-nloptr" ,r-nloptr)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsolnp" ,r-rsolnp)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)))
+     (list r-alabama
+           r-ggplot2
+           r-mass
+           r-nloptr
+           r-numderiv
+           r-rcpp
+           r-rcpparmadillo
+           r-rsolnp
+           r-shiny
+           r-shinydashboard))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/Wenchao-Ma/GDINA")
     (synopsis "Generalized DINA model framework")
     (description
@@ -22244,10 +21619,9 @@ be conducted.  A graphical user interface is also provided.")
     (properties `((upstream-name . "ACTCD")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gdina" ,r-gdina)
-       ("r-r-methodss3" ,r-r-methodss3)))
+     (list r-gdina r-r-methodss3))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ACTCD/")
     (synopsis "Asymptotic classification theory for cognitive diagnosis")
     (description
@@ -22295,11 +21669,7 @@ poverty measures.  It provides both empirical and theoretical Lorenz curves.")
     (properties `((upstream-name . "ActFrag")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-accelerometry" ,r-accelerometry)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ineq" ,r-ineq)
-       ("r-survival" ,r-survival)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-accelerometry r-dplyr r-ineq r-survival r-tidyr))
     (home-page "https://github.com/junruidi/ActFrag")
     (synopsis "Activity fragmentation metrics extraction")
     (description
@@ -22321,7 +21691,7 @@ actigraphy-measured activity counts data.")
          "1ay2a2agdmiz7zzvn26mli0x0iwk09g5pp4yy1r23knhkp1pn2lb"))))
     (properties `((upstream-name . "ash")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/ash/")
     (synopsis "David Scott's ASH routines")
     (description
@@ -22343,13 +21713,13 @@ R.")
     (properties `((upstream-name . "hdrcde")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ash" ,r-ash)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-ks" ,r-ks)
-       ("r-locfit" ,r-locfit)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-ash
+           r-ggplot2
+           r-kernsmooth
+           r-ks
+           r-locfit
+           r-rcolorbrewer))
+    (native-inputs (list gfortran))
     (home-page "http://pkg.robjhyndman.com/hdrcde")
     (synopsis "Highest density regions and conditional density estimation")
     (description
@@ -22372,12 +21742,12 @@ conditional on one covariate, and multimodal regression.")
     (properties `((upstream-name . "rainbow")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-colorspace" ,r-colorspace)
-       ("r-hdrcde" ,r-hdrcde)
-       ("r-ks" ,r-ks)
-       ("r-mass" ,r-mass)
-       ("r-pcapp" ,r-pcapp)))
+     (list r-cluster
+           r-colorspace
+           r-hdrcde
+           r-ks
+           r-mass
+           r-pcapp))
     (home-page "https://cran.r-project.org/web/packages/rainbow/")
     (synopsis "Bagplots, boxplots and rainbow plots for functional data")
     (description
@@ -22399,8 +21769,7 @@ functional outliers with bagplots, boxplots and rainbow plots.")
     (properties `((upstream-name . "fds")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rainbow" ,r-rainbow)
-       ("r-rcurl" ,r-rcurl)))
+     (list r-rainbow r-rcurl))
     (home-page "https://cran.r-project.org/web/packages/fds/")
     (synopsis "Functional data sets")
     (description "This package contains a list of functional time series,
@@ -22424,9 +21793,7 @@ variable observed over time.")
     (properties `((upstream-name . "fda")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-desolve" ,r-desolve)
-       ("r-fds" ,r-fds)
-       ("r-matrix" ,r-matrix)))
+     (list r-desolve r-fds r-matrix))
     (home-page "https://www.functionaldata.org")
     (synopsis "Functional data analysis")
     (description
@@ -22450,7 +21817,7 @@ examples.")
     (properties `((upstream-name . "Actigraphy")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fda" ,r-fda)))
+     (list r-fda))
     (home-page "https://cran.r-project.org/web/packages/Actigraphy/")
     (synopsis "Actigraphy data analysis")
     (description
@@ -22472,7 +21839,7 @@ of actigraphy data.")
     (properties `((upstream-name . "ActiveDriver")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ActiveDriver/")
     (synopsis "Tools for finding cancer driver proteins")
     (description
@@ -22501,11 +21868,7 @@ known drivers.")
      `((upstream-name . "activityCounts")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-seewave" ,r-seewave)
-       ("r-signal" ,r-signal)
-       ("r-tibble" ,r-tibble)))
+     (list r-lubridate r-magrittr r-seewave r-signal r-tibble))
     (home-page "https://github.com/walkabillylab/activityCounts")
     (synopsis "Generate ActiLife counts")
     (description
@@ -22532,11 +21895,9 @@ data for different accelerometer brands.")
     (properties `((upstream-name . "ActivityIndex")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-data-table r-matrixstats r-r-utils))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ActivityIndex/")
     (synopsis "Activity Index calculation using raw accelerometry data")
     (description
@@ -22559,12 +21920,12 @@ al. (2016) @url{doi:10.1371/journal.pone.0160644}.")
     (properties `((upstream-name . "activPAL")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-devtools" ,r-devtools)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-devtools
+           r-dplyr
+           r-ggplot2
+           r-lubridate
+           r-magrittr
+           r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/activPAL")
     (synopsis "Processing and chart generation from activPAL events files")
     (description
@@ -22591,7 +21952,7 @@ sets, such as sleep diaries and continuous glucose monitoring data.")
      `((upstream-name . "activpalProcessing")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-chron" ,r-chron)))
+     (list r-chron))
     (home-page "https://cran.r-project.org/web/packages/activpalProcessing/")
     (synopsis "Process activPAL events files")
     (description
@@ -22614,11 +21975,7 @@ behavior variables from activPAL events files.")
     (properties `((upstream-name . "actogrammr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-readr" ,r-readr)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr r-ggplot2 r-lubridate r-readr r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/actogrammr/")
     (synopsis "Read in activity data and plot actograms")
     (description
@@ -22665,7 +22022,7 @@ API; see the package vignette for details.")
          "015brjjgmkwmjajdjdw8gs02jrd96if425pk9a97d499hzsq3xds"))))
     (properties `((upstream-name . "actuar")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-expint" ,r-expint)))
+    (propagated-inputs (list r-expint))
     (home-page "https://gitlab.com/vigou3/actuar")
     (synopsis "Actuarial functions and heavy tailed distributions")
     (description
@@ -22714,13 +22071,9 @@ currently limited to 8 bit greyscale images and 24, 32 bit (A)RGB images.")
     (properties `((upstream-name . "readbitmap")))
     (build-system r-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)))
+     (list libjpeg-turbo libpng))
     (propagated-inputs
-     `(("r-bmp" ,r-bmp)
-       ("r-jpeg" ,r-jpeg)
-       ("r-png" ,r-png)
-       ("r-tiff" ,r-tiff)))
+     (list r-bmp r-jpeg r-png r-tiff))
     (home-page "https://github.com/jefferis/readbitmap")
     (synopsis "Unified interface to read bitmap images (BMP, JPEG, PNG, TIFF)")
     (description
@@ -22743,23 +22096,19 @@ number embedded in the file rather than the file extension.")
     (properties `((upstream-name . "imager")))
     (build-system r-build-system)
     (inputs
-     `(("fftw" ,fftw)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-downloader" ,r-downloader)
-       ("r-igraph" ,r-igraph)
-       ("r-jpeg" ,r-jpeg)
-       ("r-magrittr" ,r-magrittr)
-       ("r-png" ,r-png)
-       ("r-purrr" ,r-purrr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-readbitmap" ,r-readbitmap)
-       ("r-stringr" ,r-stringr)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list fftw libtiff libx11 zlib))
+    (propagated-inputs
+     (list r-downloader
+           r-igraph
+           r-jpeg
+           r-magrittr
+           r-png
+           r-purrr
+           r-rcpp
+           r-readbitmap
+           r-stringr))
+    (native-inputs
+     (list pkg-config r-knitr))
     (home-page "https://dahtah.github.io/imager/")
     (synopsis "Image processing library")
     (description
@@ -22785,9 +22134,7 @@ simple, modern C++ library for image processing.")
     (properties `((upstream-name . "AcuityView")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fftwtools" ,r-fftwtools)
-       ("r-imager" ,r-imager)
-       ("r-plotrix" ,r-plotrix)))
+     (list r-fftwtools r-imager r-plotrix))
     (home-page "https://cran.r-project.org/web/packages/AcuityView/")
     (synopsis "Display scenes as seen by an animal with less acute vision")
     (description
@@ -22808,19 +22155,19 @@ it may be seen by an animal with less acute vision.")
          "1g36m06hp2fxxwv155bwbqlf97xhcia1lmg3axg6d74kgpns8lg8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-e1071" ,r-e1071)
-       ("r-foreach" ,r-foreach)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-modelmetrics" ,r-modelmetrics)
-       ("r-nlme" ,r-nlme)
-       ("r-plyr" ,r-plyr)
-       ("r-proc" ,r-proc)
-       ("r-recipes" ,r-recipes)
-       ("r-reshape2" ,r-reshape2)
-       ("r-withr" ,r-withr)))
+     (list r-e1071
+           r-foreach
+           r-ggplot2
+           r-lattice
+           r-modelmetrics
+           r-nlme
+           r-plyr
+           r-proc
+           r-recipes
+           r-reshape2
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/topepo/caret")
     (synopsis "Classification and regression training")
     (description
@@ -22842,10 +22189,7 @@ classification and regression models.")
     (properties `((upstream-name . "adabag")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-caret" ,r-caret)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-rpart" ,r-rpart)))
+     (list r-caret r-doparallel r-foreach r-rpart))
     (home-page "https://cran.r-project.org/web/packages/adabag/")
     (synopsis "Multiclass AdaBoost.M1, SAMME and Bagging")
     (description
@@ -22870,7 +22214,7 @@ done.")
     (properties `((upstream-name . "adagio")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lpsolve" ,r-lpsolve)))
+     (list r-lpsolve))
     (home-page "https://cran.r-project.org/web/packages/adagio/")
     (synopsis "Discrete and global optimization routines")
     (description
@@ -22894,8 +22238,7 @@ functions.")
     (properties `((upstream-name . "univOutl")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-hmisc" ,r-hmisc)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-hmisc r-robustbase))
     (home-page "https://github.com/marcellodo/univOutl")
     (synopsis "Detection of univariate outliers")
     (description
@@ -22920,8 +22263,7 @@ used in outliers detection.")
     (properties `((upstream-name . "tolerance")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-rgl" ,r-rgl)))
+     (list r-mass r-rgl))
     (home-page "https://cran.r-project.org/web/packages/tolerance/")
     (synopsis "Statistical tolerance intervals and regions")
     (description
@@ -22972,9 +22314,7 @@ Johnson-Graybill, LBI, Tusell and modified Tukey non-additivity tests.")
     (properties `((upstream-name . "flexclust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-lattice" ,r-lattice)
-       ("r-modeltools" ,r-modeltools)))
+     (list r-class r-lattice r-modeltools))
     (home-page "https://cran.r-project.org/web/packages/flexclust/")
     (synopsis "Flexible cluster algorithms")
     (description
@@ -23001,13 +22341,13 @@ cluster stability.")
     (properties `((upstream-name . "biclust")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-additivitytests" ,r-additivitytests)
-       ("r-colorspace" ,r-colorspace)
-       ("r-flexclust" ,r-flexclust)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-additivitytests
+           r-colorspace
+           r-flexclust
+           r-ggplot2
+           r-lattice
+           r-mass
+           r-tidyr))
     (home-page "https://cran.r-project.org/web/packages/biclust/")
     (synopsis "BiCluster algorithms")
     (description
@@ -23032,9 +22372,7 @@ validation of bicluster solutions.")
     (properties `((upstream-name . "ICGE")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-fastcluster" ,r-fastcluster)
-       ("r-mass" ,r-mass)))
+     (list r-cluster r-fastcluster r-mass))
     (home-page "https://cran.r-project.org/web/packages/ICGE/")
     (synopsis "Cluster estimation and identification of atypical units")
     (description
@@ -23057,11 +22395,9 @@ on distances rather than on unit x variables.")
     (properties `((upstream-name . "depth")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-circular" ,r-circular)
-       ("r-rgl" ,r-rgl)))
+     (list r-abind r-circular r-rgl))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/depth/")
     (synopsis "Nonparametric depth functions for multivariate analysis")
     (description
@@ -23086,8 +22422,7 @@ spherical depths are supported.")
     (properties `((upstream-name . "archetypes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-modeltools" ,r-modeltools)
-       ("r-nnls" ,r-nnls)))
+     (list r-modeltools r-nnls))
     (home-page "https://cran.r-project.org/web/packages/archetypes")
     (synopsis "Archetypal analysis")
     (description
@@ -23110,10 +22445,7 @@ different conceptual parts of the algorithm.")
     (properties `((upstream-name . "shapes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-minpack-lm" ,r-minpack-lm)
-       ("r-rgl" ,r-rgl)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-mass r-minpack-lm r-rgl r-scatterplot3d))
     (home-page "http://www.maths.nottingham.ac.uk/~ild/shapes")
     (synopsis "Statistical shape analysis")
     (description
@@ -23139,17 +22471,17 @@ Edition), John Wiley and Sons.")
     (properties `((upstream-name . "Anthropometry")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-archetypes" ,r-archetypes)
-       ("r-biclust" ,r-biclust)
-       ("r-cluster" ,r-cluster)
-       ("r-depth" ,r-depth)
-       ("r-fnn" ,r-fnn)
-       ("r-icge" ,r-icge)
-       ("r-nnls" ,r-nnls)
-       ("r-rgl" ,r-rgl)
-       ("r-shapes" ,r-shapes)))
+     (list r-archetypes
+           r-biclust
+           r-cluster
+           r-depth
+           r-fnn
+           r-icge
+           r-nnls
+           r-rgl
+           r-shapes))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Anthropometry/")
     (synopsis "Statistical methods for anthropometric data")
     (description
@@ -23174,13 +22506,13 @@ statistical shape analysis and archetypal analysis.")
     (properties `((upstream-name . "adamethods")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-anthropometry" ,r-anthropometry)
-       ("r-archetypes" ,r-archetypes)
-       ("r-fnn" ,r-fnn)
-       ("r-foreach" ,r-foreach)
-       ("r-nnls" ,r-nnls)
-       ("r-tolerance" ,r-tolerance)
-       ("r-univoutl" ,r-univoutl)))
+     (list r-anthropometry
+           r-archetypes
+           r-fnn
+           r-foreach
+           r-nnls
+           r-tolerance
+           r-univoutl))
     (home-page "https://cran.r-project.org/web/packages/adamethods/")
     (synopsis "Archetypoid algorithms and anomaly detection")
     (description
@@ -23204,7 +22536,7 @@ these algorithms also detect anomalies (outliers).")
     (properties `((upstream-name . "IDPmisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/IDPmisc/")
     (synopsis "Functions for data analyses and visualization")
     (description
@@ -23233,9 +22565,9 @@ finding peaks in spectra, converting humidity measures.")
     (properties `((upstream-name . "qqman")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-calibrate" ,r-calibrate)))
+     (list r-calibrate))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/qqman/")
     (synopsis "Q-Q and Manhattan plots for GWAS data")
     (description
@@ -23258,10 +22590,7 @@ from PLINK results.")
      `((upstream-name . "ggplot.multistats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-hexbin" ,r-hexbin)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-hexbin r-rlang r-scales))
     (home-page "https://github.com/flying-sheep/ggplot.multistats")
     (synopsis "Multiple summary statistics for binned stats/geometries")
     (description
@@ -23285,9 +22614,7 @@ aesthetics.")
     (properties `((upstream-name . "knn.covertree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-matrix r-rcpp r-rcppeigen))
     (home-page "https://github.com/flying-sheep/knn.covertree")
     (synopsis "Accurate kNN Implementation with multiple distance measures")
     (description
@@ -23334,7 +22661,7 @@ generation for the Poisson binomial distribution.")
     (properties `((upstream-name . "diagram")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shape" ,r-shape)))
+     (list r-shape))
     (home-page "https://cran.r-project.org/web/packages/diagram/")
     (synopsis "Visualize simple graphs (networks) and plot flow diagrams")
     (description
@@ -23361,8 +22688,7 @@ Francesca Mazzia (2012).")
     (properties `((upstream-name . "LIM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-diagram" ,r-diagram)
-       ("r-limsolve" ,r-limsolve)))
+     (list r-diagram r-limsolve))
     (home-page "https://cran.r-project.org/web/packages/LIM/")
     (synopsis "Linear inverse model examples and solution methods")
     (description
@@ -23385,9 +22711,7 @@ problems (food web problems, linear programming problems).")
      `((upstream-name . "shinycssloaders")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-shiny" ,r-shiny)))
+     (list r-digest r-glue r-shiny))
     (home-page "https://github.com/andrewsali/shinycssloaders")
     (synopsis "Add CSS loading animations to Shiny outputs")
     (description
@@ -23411,11 +22735,9 @@ automatically show a loader when the output is (re)calculating.")
     (properties `((upstream-name . "rsvg")))
     (build-system r-build-system)
     (inputs
-     `(("librsvg" ,librsvg)
-       ("zlib" ,zlib)))
+     (list librsvg zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/jeroen/rsvg#readme")
     (synopsis "Render SVG images into PDF, PNG, PostScript, or Bitmap arrays")
     (description
@@ -23440,8 +22762,7 @@ PDF or PostScript.")
     (properties `((upstream-name . "influenceR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)))
+     (list r-igraph r-matrix))
     (home-page "https://github.com/rcc-uchicago/influenceR")
     (synopsis "Tools to quantify structural importance of nodes in a network")
     (description
@@ -23468,7 +22789,7 @@ OpenMP.")
     (properties `((upstream-name . "emplik")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quantreg" ,r-quantreg)))
+     (list r-quantreg))
     (home-page "https://www.ms.uky.edu/~mai/EmpLik.html")
     (synopsis "Empirical likelihood ratio for censored/truncated data")
     (description
@@ -23491,11 +22812,7 @@ does regression.")
     (properties `((upstream-name . "imputeYn")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-emplik" ,r-emplik)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-quadprog" ,r-quadprog)
-       ("r-survival" ,r-survival)))
+     (list r-boot r-emplik r-mvtnorm r-quadprog r-survival))
     (home-page "https://cran.r-project.org/web/packages/imputeYn/")
     (synopsis "Impute last largest censored observation under weighted least squares")
     (description
@@ -23518,10 +22835,7 @@ AFT models.")
     (properties `((upstream-name . "AdapEnetClass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glmnet" ,r-glmnet)
-       ("r-imputeyn" ,r-imputeyn)
-       ("r-lars" ,r-lars)
-       ("r-quadprog" ,r-quadprog)))
+     (list r-glmnet r-imputeyn r-lars r-quadprog))
     (home-page "https://cran.r-project.org/web/packages/AdapEnetClass/")
     (synopsis "Class of adaptive elastic net methods for censored data")
     (description
@@ -23541,7 +22855,7 @@ AFT models.")
          "1zg93p74icj4bhxnmnssj2xp6vw4yaksyavq03497v33xfpdxss7"))))
     (properties `((upstream-name . "flock")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://cran.r-project.org/web/packages/flock/")
     (synopsis "Process synchronization using file locks")
     (description
@@ -23564,16 +22878,16 @@ both exclusive and shared locking.")
     (properties `((upstream-name . "archivist")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-flock" ,r-flock)
-       ("r-httr" ,r-httr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rsqlite" ,r-rsqlite)))
+     (list r-dbi
+           r-digest
+           r-flock
+           r-httr
+           r-lubridate
+           r-magrittr
+           r-rcurl
+           r-rsqlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://pbiecek.github.io/archivist/")
     (synopsis "Tools for storing, restoring and searching for R objects")
     (description
@@ -23623,21 +22937,21 @@ versions of currently installed packages.")
     (properties `((upstream-name . "adapr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-archivist" ,r-archivist)
-       ("r-devtools" ,r-devtools)
-       ("r-digest" ,r-digest)
-       ("r-doparallel" ,r-doparallel)
-       ("r-gdata" ,r-gdata)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-git2r" ,r-git2r)
-       ("r-igraph" ,r-igraph)
-       ("r-knitr" ,r-knitr)
-       ("r-plotly" ,r-plotly)
-       ("r-plyr" ,r-plyr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-shiny" ,r-shiny)
-       ("r-shinydashboard" ,r-shinydashboard)
-       ("r-versions" ,r-versions)))
+     (list r-archivist
+           r-devtools
+           r-digest
+           r-doparallel
+           r-gdata
+           r-ggplot2
+           r-git2r
+           r-igraph
+           r-knitr
+           r-plotly
+           r-plyr
+           r-rmarkdown
+           r-shiny
+           r-shinydashboard
+           r-versions))
     (home-page "https://cran.r-project.org/web/packages/adapr/")
     (synopsis "Implementation of an accountable data analysis process")
     (description
@@ -23660,7 +22974,7 @@ histories of inputs and outputs.")
          "1jayjrsiib2ij4rxxj59g71r3xhzl5yqh0lhi8k6cfy03i7dkvis"))))
     (properties `((upstream-name . "AdapSamp")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-pracma" ,r-pracma)))
+    (propagated-inputs (list r-pracma))
     (home-page "https://cran.r-project.org/web/packages/AdapSamp/")
     (synopsis "Adaptive sampling algorithms")
     (description
@@ -23688,9 +23002,7 @@ above.")
     (properties `((upstream-name . "adaptalint")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-lintr" ,r-lintr)
-       ("r-purrr" ,r-purrr)))
+     (list r-dplyr r-lintr r-purrr))
     (home-page "https://cran.r-project.org/web/packages/adaptalint/")
     (synopsis "Check R code style")
     (description
@@ -23736,20 +23048,20 @@ Raftery, Appl.Statistics, 1989); it includes inference and basic methods.")
     (properties `((upstream-name . "forecast")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-fracdiff" ,r-fracdiff)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lmtest" ,r-lmtest)
-       ("r-magrittr" ,r-magrittr)
-       ("r-nnet" ,r-nnet)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-timedate" ,r-timedate)
-       ("r-tseries" ,r-tseries)
-       ("r-urca" ,r-urca)
-       ("r-zoo" ,r-zoo)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))           ; needed for vignettes
+     (list r-colorspace
+           r-fracdiff
+           r-ggplot2
+           r-lmtest
+           r-magrittr
+           r-nnet
+           r-rcpp
+           r-rcpparmadillo
+           r-timedate
+           r-tseries
+           r-urca
+           r-zoo))
+    (native-inputs
+     (list r-knitr))           ; needed for vignettes
     (home-page "https://pkg.robjhyndman.com/forecast/")
     (synopsis "Forecasting functions for time series and linear models")
     (description
@@ -23771,12 +23083,9 @@ space models and automatic ARIMA modelling.")
     (properties `((upstream-name . "formattable")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rmarkdown" ,r-rmarkdown)))
+     (list r-htmltools r-htmlwidgets r-lifecycle r-rmarkdown))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/renkun-ken/formattable")
     (synopsis "Print vectors and data frames with text fromatting")
     (description
@@ -23823,10 +23132,7 @@ programming} (OOP) using R Reference Class.")
     (properties `((upstream-name . "proxyC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-matrix r-rcpp r-rcpparmadillo r-rcppparallel))
     (home-page "https://cran.r-project.org/package=proxyC")
     (synopsis "Compute proximity in large sparse matrices")
     (description
@@ -23873,7 +23179,7 @@ character codes as well as the UN M.49 area codes.")
     (properties `((upstream-name . "stopwords")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-isocodes" ,r-isocodes)))
+     (list r-isocodes))
     (home-page "https://github.com/quanteda/stopwords")
     (synopsis "Multilingual stopword lists")
     (description
@@ -23895,8 +23201,7 @@ analysis and natural language processing.")
     (properties `((upstream-name . "spacyr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-data-table r-reticulate))
     (home-page "https://spacyr.quanteda.io")
     (synopsis "R wrapper for the spaCy NLP library")
     (description
@@ -23941,19 +23246,19 @@ Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish and Turkish.")
     (properties `((upstream-name . "quanteda")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastmatch" ,r-fastmatch)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-snowballc" ,r-snowballc)
-       ("r-stopwords" ,r-stopwords)
-       ("r-stringi" ,r-stringi)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
+     (list r-fastmatch
+           r-magrittr
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppparallel
+           r-snowballc
+           r-stopwords
+           r-stringi
+           r-xml2
+           r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://quanteda.io")
     (synopsis "Quantitative analysis of textual data")
     (description
@@ -23980,11 +23285,9 @@ machine learning, visually representing text and text analyses, and more.")
     (properties `((upstream-name . "topicmodels")))
     (build-system r-build-system)
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("r-modeltools" ,r-modeltools)
-       ("r-slam" ,r-slam)
-       ("r-tm" ,r-tm)))
+     (list r-modeltools r-slam r-tm))
     (home-page "https://cran.r-project.org/package=topicmodels")
     (synopsis "Topic models")
     (description
@@ -24008,17 +23311,17 @@ Gibbs sampling by Xuan-Hieu Phan and co-authors.")
     (properties `((upstream-name . "stm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-glmnet" ,r-glmnet)
-       ("r-lda" ,r-lda)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-quadprog" ,r-quadprog)
-       ("r-quanteda" ,r-quanteda)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-slam" ,r-slam)
-       ("r-stringr" ,r-stringr)))
+     (list r-data-table
+           r-glmnet
+           r-lda
+           r-matrix
+           r-matrixstats
+           r-quadprog
+           r-quanteda
+           r-rcpp
+           r-rcpparmadillo
+           r-slam
+           r-stringr))
     (home-page "http://www.structuraltopicmodel.com/")
     (synopsis "Estimation of the Structural Topic Model")
     (description
@@ -24042,8 +23345,7 @@ regressions.")
     (properties `((upstream-name . "polycor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-matrix r-mvtnorm))
     (home-page "https://r-forge.r-project.org/projects/polycor/")
     (synopsis "Polychoric and polyserial correlations")
     (description
@@ -24066,9 +23368,7 @@ errors; tetrachoric and biserial correlations are special cases.")
     (properties `((upstream-name . "msm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-expm" ,r-expm)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-survival" ,r-survival)))
+     (list r-expm r-mvtnorm r-survival))
     (home-page "https://github.com/chjackson/msm")
     (synopsis "Multi-state Markov and hidden Markov models in continuous time")
     (description
@@ -24094,9 +23394,7 @@ be constant or piecewise-constant in time.")
     (properties `((upstream-name . "ltm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-msm" ,r-msm)
-       ("r-polycor" ,r-polycor)))
+     (list r-mass r-msm r-polycor))
     (home-page "https://github.com/drizopoulos/ltm")
     (synopsis "Latent trait models under IRT")
     (description
@@ -24121,8 +23419,7 @@ Models.")
     (properties `((upstream-name . "mi")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-arm" ,r-arm)
-       ("r-matrix" ,r-matrix)))
+     (list r-arm r-matrix))
     (home-page "http://www.stat.columbia.edu/~gelman/")
     (synopsis "Missing data imputation and model checking")
     (description
@@ -24169,9 +23466,7 @@ actuarial models such as pension mathematics.")
     (properties `((upstream-name . "sem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-mass" ,r-mass)
-       ("r-mi" ,r-mi)))
+     (list r-boot r-mass r-mi))
     (home-page "https://cran.r-project.org/package=sem")
     (synopsis "Structural equation models")
     (description
@@ -24195,8 +23490,7 @@ least squares.")
     (properties `((upstream-name . "semTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lavaan" ,r-lavaan)
-       ("r-pbivnorm" ,r-pbivnorm)))
+     (list r-lavaan r-pbivnorm))
     (home-page "https://github.com/simsem/semTools/wiki")
     (synopsis "Useful tools for structural equation modeling")
     (description
@@ -24217,12 +23511,9 @@ least squares.")
     (properties `((upstream-name . "regsem")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lavaan" ,r-lavaan)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rsolnp" ,r-rsolnp)))
+     (list r-lavaan r-rcpp r-rcpparmadillo r-rsolnp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=regsem")
     (synopsis "Regularized structural equation modeling")
     (description
@@ -24246,13 +23537,11 @@ perform @dfn{exploratory mediation} (XMed).")
          "0srkyawyiykn3p5lw1z3zf18s4ax4iasv1ci3l1px40f9w36wm17"))))
     (properties `((upstream-name . "StanHeaders")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
+    (inputs (list pandoc))
     (propagated-inputs
-     `(("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-rcppeigen r-rcppparallel))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr))) ; for vignettes
+     (list gfortran r-knitr)) ; for vignettes
     (home-page "https://mc-stan.org/")
     (synopsis "C++ header files for Stan")
     (description
@@ -24288,12 +23577,9 @@ and analyze Stan models.")
     (properties `((upstream-name . "rpf")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lifecycle" ,r-lifecycle)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-lifecycle r-mvtnorm r-rcpp r-rcppeigen))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jpritikin/rpf")
     (synopsis "Response probability functions")
     (description
@@ -24318,17 +23604,17 @@ Complete access to optimized C functions is made available with
     (properties `((upstream-name . "OpenMx")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-digest" ,r-digest)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rpf" ,r-rpf)
-       ("r-stanheaders" ,r-stanheaders)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-bh
+           r-digest
+           r-lifecycle
+           r-mass
+           r-matrix
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-rpf
+           r-stanheaders))
+    (native-inputs (list gfortran))
     (home-page "http://openmx.ssri.psu.edu")
     (synopsis "Extended structural equation modelling")
     (description
@@ -24352,11 +23638,7 @@ estimate parameters given observed data.")
     (properties `((upstream-name . "kutils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreign" ,r-foreign)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-plyr" ,r-plyr)
-       ("r-runit" ,r-runit)
-       ("r-xtable" ,r-xtable)))
+     (list r-foreign r-openxlsx r-plyr r-runit r-xtable))
     (home-page "https://cran.r-project.org/package=kutils")
     (synopsis "Project management tools")
     (description
@@ -24382,10 +23664,7 @@ importation and recoding.")
     (properties `((upstream-name . "rockchalk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cardata" ,r-cardata)
-       ("r-kutils" ,r-kutils)
-       ("r-lme4" ,r-lme4)
-       ("r-mass" ,r-mass)))
+     (list r-cardata r-kutils r-lme4 r-mass))
     (home-page "https://cran.r-project.org/package=rockchalk")
     (synopsis "Regression estimation and presentation")
     (description
@@ -24432,7 +23711,7 @@ output in R.")
     (properties `((upstream-name . "BDgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)))
+     (list r-igraph))
     (home-page "https://www.uva.nl/profile/a.mohammadi")
     (synopsis "Bayesian structure learning in graphical models")
     (description
@@ -24456,9 +23735,7 @@ on a continuous-time birth-death process.")
     (properties `((upstream-name . "d3Network")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rjson" ,r-rjson)
-       ("r-whisker" ,r-whisker)))
+     (list r-plyr r-rjson r-whisker))
     (home-page "http://christophergandrud.github.io/d3Network/")
     (synopsis "Create D3 JavaScript network, tree, dendrogram, and Sankey graphs")
     (description
@@ -24480,24 +23757,24 @@ network, tree, dendrogram, and Sankey graphs from R using data frames.")
     (properties `((upstream-name . "qgraph")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-colorspace" ,r-colorspace)
-       ("r-corpcor" ,r-corpcor)
-       ("r-fdrtool" ,r-fdrtool)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glasso" ,r-glasso)
-       ("r-gtools" ,r-gtools)
-       ("r-hmisc" ,r-hmisc)
-       ("r-igraph" ,r-igraph)
-       ("r-jpeg" ,r-jpeg)
-       ("r-lavaan" ,r-lavaan)
-       ("r-matrix" ,r-matrix)
-       ("r-pbapply" ,r-pbapply)
-       ("r-plyr" ,r-plyr)
-       ("r-png" ,r-png)
-       ("r-psych" ,r-psych)
-       ("r-rcpp" ,r-rcpp)
-       ("r-reshape2" ,r-reshape2)))
+     (list r-abind
+           r-colorspace
+           r-corpcor
+           r-fdrtool
+           r-ggplot2
+           r-glasso
+           r-gtools
+           r-hmisc
+           r-igraph
+           r-jpeg
+           r-lavaan
+           r-matrix
+           r-pbapply
+           r-plyr
+           r-png
+           r-psych
+           r-rcpp
+           r-reshape2))
     (home-page "http://sachaepskamp.com/qgraph/")
     (synopsis "Weighted network visualization and analysis")
     (description
@@ -24522,18 +23799,18 @@ model estimation.  See Epskamp et al. (2012)
     (properties `((upstream-name . "semPlot")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-corpcor" ,r-corpcor)
-       ("r-igraph" ,r-igraph)
-       ("r-lavaan" ,r-lavaan)
-       ("r-lisreltor" ,r-lisreltor)
-       ("r-openmx" ,r-openmx)
-       ("r-plyr" ,r-plyr)
-       ("r-qgraph" ,r-qgraph)
-       ("r-regsem" ,r-regsem)
-       ("r-rockchalk" ,r-rockchalk)
-       ("r-sem" ,r-sem)
-       ("r-xml" ,r-xml)))
+     (list r-colorspace
+           r-corpcor
+           r-igraph
+           r-lavaan
+           r-lisreltor
+           r-openmx
+           r-plyr
+           r-qgraph
+           r-regsem
+           r-rockchalk
+           r-sem
+           r-xml))
     (home-page "https://github.com/SachaEpskamp/semPlot")
     (synopsis "Unified visualizations of structural equation models")
     (description
@@ -24561,10 +23838,7 @@ translated to input syntax for the R packages @code{sem} and @code{lavaan}.")
     (properties `((upstream-name . "CDM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)
-       ("r-polycor" ,r-polycor)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-mvtnorm r-polycor r-rcpp r-rcpparmadillo))
     (home-page
      "https://github.com/alexanderrobitzsch/CDM")
     (synopsis "Cognitive diagnosis modeling")
@@ -24595,9 +23869,7 @@ well as Ravand and Robitzsch (2015).")
     (properties `((upstream-name . "TAM")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cdm" ,r-cdm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-cdm r-rcpp r-rcpparmadillo))
     (home-page "http://www.edmeasurementsurveys.com/TAM/Tutorials/")
     (synopsis "Test analysis modules")
     (description
@@ -24624,12 +23896,8 @@ Latent regression models and plausible value imputation are also supported.")
     (properties `((upstream-name . "eRm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-psych" ,r-psych)))
-    (native-inputs `(("gfortran" ,gfortran)))
+     (list r-colorspace r-lattice r-mass r-matrix r-psych))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/package=eRm")
     (synopsis "Extended Rasch modeling")
     (description
@@ -24658,8 +23926,7 @@ elimination, and a simulation module for various binary data matrices.")
     (properties `((upstream-name . "irtoys")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ltm" ,r-ltm)
-       ("r-sm" ,r-sm)))
+     (list r-ltm r-sm))
     (home-page "https://cran.r-project.org/package=irtoys")
     (synopsis "Collection of functions related to Item Response Theory (IRT)")
     (description
@@ -24688,16 +23955,16 @@ Haberman's interaction model when all items are dichotomously scored.")
     (properties `((upstream-name . "iheatmapr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fastcluster" ,r-fastcluster)
-       ("r-ggdendro" ,r-ggdendro)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-scales" ,r-scales)))
+     (list r-fastcluster
+           r-ggdendro
+           r-htmlwidgets
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-rcolorbrewer
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/iheatmapr")
     (synopsis "Interactive, Complex Heatmaps")
     (description
@@ -24747,13 +24014,13 @@ and reproducible way.")
     (properties `((upstream-name . "rsconnect")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-packrat" ,r-packrat)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-yaml" ,r-yaml)))
+     (list r-curl
+           r-digest
+           r-jsonlite
+           r-openssl
+           r-packrat
+           r-rstudioapi
+           r-yaml))
     (home-page "https://github.com/rstudio/rsconnect")
     (synopsis "Deployment interface for R Markdown documents and Shiny applications")
     (description
@@ -24826,11 +24093,7 @@ documents, Shiny applications, Plumber APIs, plots, and static web content.")
             (base32
              "01mdnsaibm9jy2f1qpbn692hpv309lhj5si9nagib4dawmrkffij"))))))
     (propagated-inputs
-     `(("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-magrittr" ,r-magrittr)
-       ("r-xts" ,r-xts)
-       ("r-zoo" ,r-zoo)))
+     (list r-htmltools r-htmlwidgets r-magrittr r-xts r-zoo))
     (home-page "https://github.com/rstudio/dygraphs")
     (synopsis "Interface to Dygraphs interactive time series charting library")
     (description
@@ -24855,23 +24118,23 @@ series/point highlighting.")
     (properties `((upstream-name . "shinystan")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bayesplot" ,r-bayesplot)
-       ("r-colourpicker" ,r-colourpicker)
-       ("r-dt" ,r-dt)
-       ("r-dygraphs" ,r-dygraphs)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtools" ,r-gtools)
-       ("r-markdown" ,r-markdown)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rsconnect" ,r-rsconnect)
-       ("r-rstan" ,r-rstan)
-       ("r-shiny" ,r-shiny)
-       ("r-shinyjs" ,r-shinyjs)
-       ("r-shinythemes" ,r-shinythemes)
-       ("r-threejs" ,r-threejs)
-       ("r-xtable" ,r-xtable)
-       ("r-xts" ,r-xts)))
+     (list r-bayesplot
+           r-colourpicker
+           r-dt
+           r-dygraphs
+           r-ggplot2
+           r-gridextra
+           r-gtools
+           r-markdown
+           r-reshape2
+           r-rsconnect
+           r-rstan
+           r-shiny
+           r-shinyjs
+           r-shinythemes
+           r-threejs
+           r-xtable
+           r-xts))
     (home-page "https://mc-stan.org/")
     (synopsis "Interactive visual and numerical analysis for Bayesian models")
     (description
@@ -24896,13 +24159,11 @@ using the @code{rstan} and @code{rstanarm} packages).")
          "0b9x8rzj3dr4m7yjx476nn42z22xd1xnw85m9frfwxy5ivg1any9"))))
     (properties `((upstream-name . "rstantools")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
+    (inputs (list pandoc))
     (propagated-inputs
-     `(("r-desc" ,r-desc)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-desc r-rcpp r-rcppparallel))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/rstantools/")
     (synopsis "Tools for developing R packages interfacing with Stan")
     (description
@@ -24926,12 +24187,11 @@ recommendations for developers.")
     (properties `((upstream-name . "loo")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-matrixstats" ,r-matrixstats)))
+     (list r-checkmate r-matrixstats))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/loo/")
     (synopsis "Leave-One-Out cross-validation and WAIC for Bayesian models")
     (description
@@ -24967,26 +24227,23 @@ techniques to average Bayesian predictive distributions.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
-    (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
-       ("pandoc" ,pandoc)
-       ("r-knitr" ,r-knitr)))
-    (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-inline" ,r-inline)
-       ("r-loo" ,r-loo)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-stanheaders" ,r-stanheaders)
-       ("r-v8" ,r-v8)
-       ("r-withr" ,r-withr)))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
+    (native-inputs
+     (list tzdata-for-tests pandoc r-knitr))
+    (propagated-inputs
+     (list r-bh
+           r-ggplot2
+           r-gridextra
+           r-inline
+           r-loo
+           r-pkgbuild
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-stanheaders
+           r-v8
+           r-withr))
     (home-page "https://discourse.mc-stan.org/")
     (synopsis "R interface to Stan")
     (description
@@ -25015,25 +24272,25 @@ need to derive the partial derivatives.")
     (properties `((upstream-name . "rstanarm")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-bayesplot" ,r-bayesplot)
-       ("r-bh" ,r-bh)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-loo" ,r-loo)
-       ("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)
-       ("r-rstan" ,r-rstan)
-       ("r-rstantools" ,r-rstantools)
-       ("r-shinystan" ,r-shinystan)
-       ("r-stanheaders" ,r-stanheaders)
-       ("r-survival" ,r-survival)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-bayesplot
+           r-bh
+           r-ggplot2
+           r-lme4
+           r-loo
+           r-matrix
+           r-nlme
+           r-rcpp
+           r-rcppeigen
+           r-rcppparallel
+           r-rstan
+           r-rstantools
+           r-shinystan
+           r-stanheaders
+           r-survival))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://mc-stan.org/rstanarm/")
     (synopsis "Bayesian applied regression modeling via Stan")
     (description
@@ -25057,9 +24314,9 @@ a formula and @code{data.frame} plus some additional arguments for priors.")
     (properties `((upstream-name . "Kendall")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)))
+     (list r-boot))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/Kendall/")
     (synopsis "Kendall rank correlation and Mann-Kendall trend test")
     (description
@@ -25081,15 +24338,15 @@ trend test.")
     (properties `((upstream-name . "keyring")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)
-       ("r-assertthat" ,r-assertthat)
-       ("r-filelock" ,r-filelock)
-       ("r-openssl" ,r-openssl)
-       ("r-r6" ,r-r6)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-sodium" ,r-sodium)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list r-askpass
+           r-assertthat
+           r-filelock
+           r-openssl
+           r-r6
+           r-rappdirs
+           r-sodium
+           r-yaml))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/r-lib/keyring")
     (synopsis "Access the system credential store from R")
     (description
@@ -25114,7 +24371,7 @@ Additional storage back-ends can be added easily.")
     (properties `((upstream-name . "zyp")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-kendall" ,r-kendall)))
+     (list r-kendall))
     (home-page "https://cran.r-project.org/web/packages/zyp/")
     (synopsis "Zhang + Yue-Pilon Trends Package")
     (description
@@ -25138,10 +24395,7 @@ climate data.")
     (properties `((upstream-name . "Rlinsolve")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rdpack" ,r-rdpack)))
+     (list r-matrix r-rcpp r-rcpparmadillo r-rdpack))
     (home-page "https://cran.r-project.org/web/packages/Rlinsolve/")
     (synopsis "Iterative solvers for (sparse) linear system of equations")
     (description
@@ -25170,15 +24424,15 @@ linear systems can be manageable using the @code{Matrix} package along with
     (properties `((upstream-name . "ZVCV")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-bh" ,r-bh)
-       ("r-dplyr" ,r-dplyr)
-       ("r-glmnet" ,r-glmnet)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rlinsolve" ,r-rlinsolve)))
+     (list r-abind
+           r-bh
+           r-dplyr
+           r-glmnet
+           r-magrittr
+           r-mvtnorm
+           r-rcpp
+           r-rcpparmadillo
+           r-rlinsolve))
     (home-page "https://cran.r-project.org/web/packages/ZVCV/")
     (synopsis "Zero-Variance Control Variates")
     (description
@@ -25207,13 +24461,13 @@ the posterior distribution in Bayesian statistics are also supplied.")
     (properties `((upstream-name . "ztype")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rvest" ,r-rvest)
-       ("r-stringr" ,r-stringr)))
+     (list r-assertthat
+           r-dplyr
+           r-ggplot2
+           r-lubridate
+           r-magrittr
+           r-rvest
+           r-stringr))
     (home-page "https://cran.r-project.org/web/packages/ztype/")
     (synopsis "Run a Ztype game loaded with R functions")
     (description
@@ -25236,7 +24490,7 @@ opponents' vessels.")
     (properties `((upstream-name . "Zseq")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gmp" ,r-gmp)))
+     (list r-gmp))
     (home-page "https://cran.r-project.org/web/packages/Zseq/")
     (synopsis "Integer sequence generator")
     (description
@@ -25260,7 +24514,7 @@ Encyclopedia of Integer Sequences} (OEIS) in the function help page.")
     (properties `((upstream-name . "isoband")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/wilkelab/isoband")
     (synopsis "Generate isolines and isobands from regularly spaced elevation grids")
     (description
@@ -25283,7 +24537,7 @@ containing elevation data.")
     (properties `((upstream-name . "ppcor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/ppcor/")
     (synopsis "Partial and semi-partial correlation")
     (description
@@ -25305,16 +24559,16 @@ statistics and p-values of the correlation coefficients.")
     (properties `((upstream-name . "hrbrthemes")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-extrafont" ,r-extrafont)
-       ("r-gdtools" ,r-gdtools)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-scales" ,r-scales)))
+     (list r-extrafont
+           r-gdtools
+           r-ggplot2
+           r-htmltools
+           r-knitr
+           r-magrittr
+           r-rmarkdown
+           r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hrbrmstr/hrbrthemes/")
     (synopsis "Additional themes, theme components and utilities for @code{ggplot2}")
     (description
@@ -25336,7 +24590,7 @@ and an overall emphasis on typography.")
         "0zvjaf6cv0nrjb4l4llkr0mmgha7ig31p4ri2rlnqyjlxi5l8hyq"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/agrueneberg/crochet")
     (synopsis "Implementation Helper for Matrix-Like Types")
     (description
@@ -25398,10 +24652,9 @@ appropriate dog and cat images for many status codes.")
                 "0qknpw7zwwbzsbry94j8fn48mq7kq5rc5448g9hybbisain3wfvg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-stringr" ,r-stringr)
-       ("r-magrittr" ,r-magrittr)))
+     (list r-stringr r-magrittr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/stefano-meschiari/latex2exp/")
     (synopsis "Use LaTeX expressions in plots")
     (description "@code{latex2exp} parses and converts LaTeX math formulas to
@@ -25421,13 +24674,9 @@ rendered as text, axis labels, etc. throughout R's plotting system.")
                 "1zcbcxhw692s0y6izvwazyzhgx0iwsxsbcan2nk0mb7n11p7bypb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xml2" ,r-xml2)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-xml2 r-httr r-plyr r-stringr r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/oai/")
     (synopsis "General purpose OAI-PMH services client")
     (description "@code{oai} provides a general purpose client to work with
@@ -25471,7 +24720,7 @@ argon2 algorithm.")
     (properties `((upstream-name . "getPass")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rstudioapi" ,r-rstudioapi)))
+     (list r-rstudioapi))
     (home-page "https://github.com/wrathematics/getPass")
     (synopsis "Masked user input")
     (description
@@ -25495,10 +24744,7 @@ where tcltk is present are supported.")
     (properties `((upstream-name . "remoter")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-argon2" ,r-argon2)
-       ("r-getpass" ,r-getpass)
-       ("r-pbdzmq" ,r-pbdzmq)
-       ("r-png" ,r-png)))
+     (list r-argon2 r-getpass r-pbdzmq r-png))
     (home-page "https://github.com/RBigData/remoter")
     (synopsis "Control a remote R session from a local one")
     (description
@@ -25521,7 +24767,7 @@ client).")
     (properties `((upstream-name . "asd")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)))
+     (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/asd")
     (synopsis "Simulations for Adaptive Seamless Designs")
     (description
@@ -25544,8 +24790,7 @@ subpopulation type designs.")
     (properties `((upstream-name . "nbconvertR")))
     (build-system r-build-system)
     (inputs
-     `(("jupyter" ,python-nbconvert)
-       ("pandoc" ,pandoc)))
+     (list python-nbconvert pandoc))
     (home-page "https://cran.r-project.org/web/packages/nbconvertR/")
     (synopsis "Vignette engine wrapping Jupyter notebooks")
     (description
@@ -25570,14 +24815,14 @@ evaluated interactively.")
      `((upstream-name . "bridgesampling")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brobdingnag" ,r-brobdingnag)
-       ("r-coda" ,r-coda)
-       ("r-matrix" ,r-matrix)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)))
+     (list r-brobdingnag
+           r-coda
+           r-matrix
+           r-mvtnorm
+           r-scales
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/quentingronau/bridgesampling")
     (synopsis "Bridge sampling for marginal likelihoods and Bayes factors")
     (description
@@ -25601,7 +24846,7 @@ general, via different versions of bridge sampling.")
      `((upstream-name . "tea")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/tea/")
     (synopsis "Threshold estimation approaches")
     (description
@@ -25652,10 +24897,9 @@ is also implemented here.")
      `((upstream-name . "aws")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-awsmethods" ,r-awsmethods)
-       ("r-gsl" ,r-gsl)))
+     (list r-awsmethods r-gsl))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/aws/")
     (synopsis "Adaptive weights smoothing")
     (description
@@ -25681,15 +24925,15 @@ filter.")
      `((upstream-name . "sglOptim")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-doparallel" ,r-doparallel)
-       ("r-foreach" ,r-foreach)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppprogress" ,r-rcppprogress)))
+     (list r-bh
+           r-doparallel
+           r-foreach
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppprogress))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/nielsrhansen/sglOptim")
     (synopsis "Generic sparse group Lasso solver")
     (description
@@ -25717,7 +24961,7 @@ computing for cross validation and subsampling is supported through the
      `((upstream-name . "grouped")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "https://cran.r-project.org/web/packages/grouped/")
     (synopsis "Regression analysis of grouped and coarse data")
     (description
@@ -25740,8 +24984,7 @@ under the coarsened at random assumption.")
      `((upstream-name . "stam")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-np" ,r-np)
-       ("r-sp" ,r-sp)))
+     (list r-np r-sp))
     (home-page "https://cran.r-project.org/web/packages/stam")
     (synopsis "Spatio-temporal analysis and modelling")
     (description
@@ -25765,7 +25008,7 @@ Inferred Spatio-Temporal Modelling.")
      `((upstream-name . "dcv")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lmtest" ,r-lmtest)))
+     (list r-lmtest))
     (home-page "https://cran.r-project.org/web/packages/dcv/")
     (synopsis "Conventional cross-validation statistics for climate-growth model")
     (description
@@ -25790,7 +25033,7 @@ Mean Test, Durbin-Watson statistic etc.")
      `((upstream-name . "rcdd")))
     (build-system r-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "https://www.stat.umn.edu/geyer/rcdd/")
     (synopsis "Computational geometry")
     (description
@@ -25816,11 +25059,9 @@ infinite-precision rational arithmetic.")
      `((upstream-name . "Rxnat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-rcurl" ,r-rcurl)
-       ("r-tibble" ,r-tibble)))
+     (list r-httr r-rcurl r-tibble))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Rxnat/")
     (synopsis "Queries and extracts images from neuroimaging datasets")
     (description
@@ -25854,16 +25095,15 @@ download images.")
                  (("\\$\\(R_HOME\\)") out))
                (mkdir-p bin)))))))
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-mime" ,r-mime)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-r6" ,r-r6)
-       ("r-rcpp" ,r-rcpp)
-       ("r-uuid" ,r-uuid)))
+     (list r-checkmate
+           r-mime
+           r-jsonlite
+           r-knitr
+           r-r6
+           r-rcpp
+           r-uuid))
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list openssl zlib))
     (home-page "https://github.com/s-u/Rserve")
     (synopsis
      "Server providing access to R from many languages and systems")
@@ -25891,9 +25131,7 @@ included in this package as well.")
     (properties `((upstream-name . "gamm4")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)))
+     (list r-lme4 r-matrix r-mgcv))
     (home-page "https://cran.r-project.org/web/packages/gamm4/")
     (synopsis "Generalized additive mixed models using mgcv and lme4")
     (description
@@ -25915,8 +25153,8 @@ estimation.")
          "0hvrpfya767vp3anmb8ih516v4zz1sv4h193rn93kyjydf2lqf1r"))))
     (properties `((upstream-name . "optimx")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-numderiv" ,r-numderiv)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-numderiv))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/optimx/")
     (synopsis "Expanded replacement and extension of the optim function")
     (description
@@ -25944,21 +25182,21 @@ here.")
     (properties `((upstream-name . "projpred")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-gamm4" ,r-gamm4)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lme4" ,r-lme4)
-       ("r-loo" ,r-loo)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-optimx" ,r-optimx)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rngtools" ,r-rngtools)
-       ("r-rstantools" ,r-rstantools)
-       ("r-tidyverse" ,r-tidyverse)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-gamm4
+           r-ggplot2
+           r-lme4
+           r-loo
+           r-magrittr
+           r-mass
+           r-mgcv
+           r-optimx
+           r-rcpp
+           r-rcpparmadillo
+           r-rngtools
+           r-rstantools
+           r-tidyverse))
+    (native-inputs (list r-knitr))
     (home-page "https://mc-stan.org/projpred/")
     (synopsis "Projection predictive feature selection")
     (description
@@ -25984,16 +25222,16 @@ vignette for more information and examples.")
      `((upstream-name . "distributional")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-farver" ,r-farver)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-numderiv" ,r-numderiv)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-digest
+           r-ellipsis
+           r-farver
+           r-generics
+           r-ggplot2
+           r-lifecycle
+           r-numderiv
+           r-rlang
+           r-scales
+           r-vctrs))
     (home-page "https://pkg.mitchelloharawild.com/distributional/")
     (synopsis "Vectorized probability distributions")
     (description
@@ -26020,17 +25258,17 @@ including means, variances, intervals, and highest density regions.")
     (properties `((upstream-name . "posterior")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-checkmate" ,r-checkmate)
-       ("r-distributional" ,r-distributional)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-pillar" ,r-pillar)
-       ("r-rlang" ,r-rlang)
-       ("r-tensora" ,r-tensora)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-abind
+           r-checkmate
+           r-distributional
+           r-matrixstats
+           r-pillar
+           r-rlang
+           r-tensora
+           r-tibble
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://mc-stan.org/posterior/")
     (synopsis "Tools for working with posterior distributions")
     (description
@@ -26067,27 +25305,27 @@ inference diagnostics.
     (properties `((upstream-name . "brms")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-backports" ,r-backports)
-       ("r-bayesplot" ,r-bayesplot)
-       ("r-bridgesampling" ,r-bridgesampling)
-       ("r-coda" ,r-coda)
-       ("r-future" ,r-future)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-loo" ,r-loo)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nleqslv" ,r-nleqslv)
-       ("r-nlme" ,r-nlme)
-       ("r-posterior" ,r-posterior)
-       ("r-projpred" ,r-projpred)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rstan" ,r-rstan)
-       ("r-rstantools" ,r-rstantools)
-       ("r-shinystan" ,r-shinystan)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-abind
+           r-backports
+           r-bayesplot
+           r-bridgesampling
+           r-coda
+           r-future
+           r-ggplot2
+           r-glue
+           r-loo
+           r-matrix
+           r-matrixstats
+           r-mgcv
+           r-nleqslv
+           r-nlme
+           r-posterior
+           r-projpred
+           r-rcpp
+           r-rstan
+           r-rstantools
+           r-shinystan))
+    (native-inputs (list r-knitr))
     (home-page
      "https://github.com/paul-buerkner/brms")
     (synopsis
@@ -26121,14 +25359,14 @@ with posterior predictive checks and leave-one-out cross-validation.")
     (properties `((upstream-name . "mstate")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-lattice" ,r-lattice)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-survival" ,r-survival)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-data-table
+           r-lattice
+           r-rcolorbrewer
+           r-rlang
+           r-survival
+           r-viridislite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page
      "https://www.lumc.nl/org/bds/research/medische-statistiek/survival-analysis/")
     (synopsis
@@ -26153,13 +25391,9 @@ multi-state models.")
     (properties `((upstream-name . "scatterpie")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggforce" ,r-ggforce)
-       ("r-ggfun" ,r-ggfun)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-ggforce r-ggfun r-ggplot2 r-rlang r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/scatterpie/")
     (synopsis "Scatter pie plot")
     (description
@@ -26181,7 +25415,7 @@ pies on a map.")
     (properties `((upstream-name . "scrypt")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/rstudio/rscrypt")
     (synopsis "Key derivation functions for R based on Scrypt")
     (description
@@ -26205,7 +25439,7 @@ amounts of memory.")
          "0y2w4wb45kfnzrxcrdsiwgal9fsnlr3wad1sqdc70qv8gp921xbg"))))
     (properties `((upstream-name . "Boruta")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ranger" ,r-ranger)))
+    (propagated-inputs (list r-ranger))
     (home-page "https://gitlab.com/mbq/Boruta/")
     (synopsis "Wrapper algorithm for all relevant feature selection")
     (description
@@ -26228,9 +25462,9 @@ permuted copies (shadows).")
          "0415kh9k2qzdwi8zb32fh2icl5wf5335kyj11cyfdmfxji39zv2w"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-quadprog" ,r-quadprog)))
+     (list r-quadprog))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://directlabels.r-forge.r-project.org/")
     (synopsis "Direct labels for multicolor plots")
     (description
@@ -26273,7 +25507,7 @@ Try a demo of the LSD by running @code{demotour()}.")
         (base32 "1p4h5pirc0m5pzc18q0jk3mcmb5n48gdf9abz03vml3a209xxl2v"))))
     (properties `((upstream-name . "phylogram")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ape" ,r-ape)))
+    (propagated-inputs (list r-ape))
     (home-page "https://github.com/ropensci/phylogram/")
     (synopsis "Dendrograms for evolutionary analysis")
     (description
@@ -26299,9 +25533,7 @@ across a wide array of bioinformatic R packages.")
     (properties `((upstream-name . "kmer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)
-       ("r-phylogram" ,r-phylogram)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-openssl r-phylogram r-rcpp))
     (home-page "https://github.com/shaunpwilkinson/kmer/")
     (synopsis "Fast K-Mer counting and clustering for biological sequence analysis")
     (description
@@ -26324,12 +25556,9 @@ counting and recursive k-means partitioning.")
     (properties `((upstream-name . "hardhat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-glue r-rlang r-tibble r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/hardhat")
     (synopsis "Construct modeling packages")
     (description
@@ -26357,10 +25586,7 @@ input.")
     (properties `((upstream-name . "lightgbm")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-matrix" ,r-matrix)
-       ("r-r6" ,r-r6)))
+     (list r-data-table r-jsonlite r-matrix r-r6))
     (home-page "https://github.com/Microsoft/LightGBM")
     (synopsis "Light gradient boosting machine")
     (description
@@ -26394,16 +25620,16 @@ designed to be distributed and efficient with the following goals:
      `((upstream-name . "SHAPforxgboost")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmisc" ,r-bbmisc)
-       ("r-data-table" ,r-data-table)
-       ("r-ggextra" ,r-ggextra)
-       ("r-ggforce" ,r-ggforce)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-xgboost" ,r-xgboost)))
+     (list r-bbmisc
+           r-data-table
+           r-ggextra
+           r-ggforce
+           r-ggplot2
+           r-ggpubr
+           r-rcolorbrewer
+           r-xgboost))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/liuyanguu/SHAPforxgboost")
     (synopsis "SHAP Plots for XGBoost")
     (description
@@ -26428,8 +25654,7 @@ values.")
     (properties `((upstream-name . "RISmed")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-xml2" ,r-xml2)))
+     (list r-httr r-xml2))
     (home-page "https://cran.r-project.org/web/packages/RISmed")
     (synopsis "Download content from NCBI databases")
     (description
@@ -26454,9 +25679,8 @@ bibliographic data) and PubMed.")
     (properties `((upstream-name . "semver")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/johndharrison/semver")
     (synopsis "Parser for Semantic Versioning 2.0.0")
     (description
@@ -26480,14 +25704,14 @@ incremented as outlined at @url{http://semver.org}.")
     (properties `((upstream-name . "binman")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-rappdirs" ,r-rappdirs)
-        ("r-semver" ,r-semver)
-        ("r-xml2" ,r-xml2)
-        ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat
+            r-httr
+            r-jsonlite
+            r-rappdirs
+            r-semver
+            r-xml2
+            r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ropensci/binman")
     (synopsis "Binary download manager")
     (description
@@ -26511,12 +25735,8 @@ repositories to be added.")
     (properties `((upstream-name . "wdman")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-assertthat" ,r-assertthat)
-        ("r-binman" ,r-binman)
-        ("r-processx" ,r-processx)
-        ("r-semver" ,r-semver)
-        ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-assertthat r-binman r-processx r-semver r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://docs.ropensci.org/wdman/")
     (synopsis "Webdriver/Selenium binary manager")
     (description
@@ -26544,13 +25764,13 @@ and to manage processes involving them.")
     (properties `((upstream-name . "RSelenium")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-binman" ,r-binman)
-        ("r-catools" ,r-catools)
-        ("r-httr" ,r-httr)
-        ("r-openssl" ,r-openssl)
-        ("r-wdman" ,r-wdman)
-        ("r-xml" ,r-xml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-binman
+            r-catools
+            r-httr
+            r-openssl
+            r-wdman
+            r-xml))
+    (native-inputs (list r-knitr))
     (home-page "https://docs.ropensci.org/RSelenium/")
     (synopsis "R bindings for Selenium WebDriver")
     (description
@@ -26579,11 +25799,7 @@ you can automate browsers locally or remotely.")
     (properties `((upstream-name . "conquer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-caret" ,r-caret)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-caret r-matrix r-matrixstats r-rcpp r-rcpparmadillo))
     (home-page "https://github.com/XiaoouPan/conquer")
     (synopsis "Convolution-type smoothed quantile regression")
     (description
@@ -26607,14 +25823,14 @@ coefficients are constructed using multiplier bootstrap.")
     (properties `((upstream-name . "fastshap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-tibble" ,r-tibble)))
+     (list r-abind
+           r-ggplot2
+           r-gridextra
+           r-matrixstats
+           r-plyr
+           r-rcpp
+           r-rcpparmadillo
+           r-tibble))
     (home-page "https://github.com/bgreenwell/fastshap")
     (synopsis "Fast approximate Shapley values")
     (description
@@ -26682,17 +25898,17 @@ simple interface for all functions.")
     (properties `((upstream-name . "iml")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-formula" ,r-formula)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-keras" ,r-keras)
-       ("r-metrics" ,r-metrics)
-       ("r-prediction" ,r-prediction)
-       ("r-r6" ,r-r6)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-checkmate
+           r-data-table
+           r-formula
+           r-future
+           r-future-apply
+           r-ggplot2
+           r-keras
+           r-metrics
+           r-prediction
+           r-r6))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/christophM/iml")
     (synopsis "Interpretable machine learning")
     (description
@@ -26792,10 +26008,7 @@ which may also be useful for other purposes.")
      `((upstream-name . "spatstat.sparse")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-matrix" ,r-matrix)
-       ("r-spatstat-utils" ,r-spatstat-utils)
-       ("r-tensor" ,r-tensor)))
+     (list r-abind r-matrix r-spatstat-utils r-tensor))
     (home-page "http://spatstat.org/")
     (synopsis "Sparse three-dimensional arrays and linear algebra utilities")
     (description
@@ -26818,8 +26031,7 @@ matrix calculations that are common in statistics, such as quadratic forms.")
     (properties `((upstream-name . "spatstat.data")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-matrix r-spatstat-utils))
     (home-page "http://www.spatstat.org")
     (synopsis "Datasets for spatstat")
     (description
@@ -26841,10 +26053,7 @@ package.")
     (properties `((upstream-name . "spatstat.geom")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-deldir" ,r-deldir)
-       ("r-polyclip" ,r-polyclip)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-deldir r-polyclip r-spatstat-data r-spatstat-utils))
     (home-page "http://spatstat.org/")
     (synopsis "Geometrical functionality of the spatstat package")
     (description
@@ -26867,17 +26076,17 @@ for the geometry of linear networks.")
     (properties `((upstream-name . "spatstat.core")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-goftest" ,r-goftest)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-rpart" ,r-rpart)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-sparse" ,r-spatstat-sparse)
-       ("r-spatstat-utils" ,r-spatstat-utils)
-       ("r-tensor" ,r-tensor)))
+     (list r-abind
+           r-goftest
+           r-matrix
+           r-mgcv
+           r-nlme
+           r-rpart
+           r-spatstat-data
+           r-spatstat-geom
+           r-spatstat-sparse
+           r-spatstat-utils
+           r-tensor))
     (home-page "http://spatstat.org/")
     (synopsis "Core functionality of the spatstat package")
     (description
@@ -26900,12 +26109,12 @@ user-level code from spatstat, except for the code for linear networks.")
      `((upstream-name . "spatstat.linnet")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-sparse" ,r-spatstat-sparse)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-matrix
+           r-spatstat-core
+           r-spatstat-data
+           r-spatstat-geom
+           r-spatstat-sparse
+           r-spatstat-utils))
     (home-page "http://spatstat.org/")
     (synopsis "Linear networks functionality of the spatstat package")
     (description
@@ -26927,11 +26136,8 @@ for spatial data on a linear network.")
     (properties `((upstream-name . "spatstat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-spatstat-linnet" ,r-spatstat-linnet)
-       ("r-spatstat-utils" ,r-spatstat-utils)))
+     (list r-spatstat-core r-spatstat-data r-spatstat-geom
+           r-spatstat-linnet r-spatstat-utils))
     (home-page "http://www.spatstat.org")
     (synopsis "Spatial Point Pattern analysis, model-fitting, simulation, tests")
     (description
@@ -26959,12 +26165,10 @@ formal inference.")
          "14z94dpln4dvgrv2w7w9ik7h6rpvbf02qhq1hqzx8c2cndzxr21i"))))
     (properties `((upstream-name . "gaston")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppparallel" ,r-rcppparallel)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-rcpp r-rcppeigen r-rcppparallel))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gaston/")
     (synopsis "Genetic data handling (QC, GRM, LD, PCA) and linear mixed models")
     (description
@@ -26987,7 +26191,7 @@ for linear mixed models (AIREML).")
          "1nk47xkab7i17h7917l4cfyfvnxf782dfq67wwxa6n0r4jqqxzz9"))))
     (properties `((upstream-name . "cpp11")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/r-lib/cpp11")
     (synopsis "C++11 Interface for R's C Interface")
     (description
@@ -27011,9 +26215,8 @@ semantics and supports interaction with @code{ALTREP} vectors.")
     (properties `((upstream-name . "RcppZiggurat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppgsl" ,r-rcppgsl)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-rcpp r-rcppgsl))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/RcppZiggurat/")
     (synopsis "Rcpp integration of different \"Ziggurat\" normal RNG implementations")
     (description
@@ -27040,9 +26243,7 @@ aggregation for comparing different implementations in order to provide a
     (properties `((upstream-name . "Rfast")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)
-       ("r-rcppziggurat" ,r-rcppziggurat)))
+     (list r-rcpp r-rcpparmadillo r-rcppziggurat))
     (home-page "https://github.com/RfastOfficial/Rfast")
     (synopsis "Collection of efficient and fast R functions")
     (description
@@ -27066,7 +26267,7 @@ Poisson), are some of the many fast functions.")
               "05x9wgzsmx4vb12lmcspymgmpb2xw8bwryb8ysg7vzg2nkh0ma3g"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-randomforest",r-randomforest)))
+    (list r-randomforest))
    (home-page "https://r-forge.r-project.org/projects/rffc/")
    (synopsis "Random Forest Feature Contributions")
    (description "This package provides functions for extracting feature
@@ -27090,12 +26291,8 @@ model.")
     (properties `((upstream-name . "ClusterR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gmp" ,r-gmp)
-       ("r-gtools" ,r-gtools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-gmp r-gtools r-rcpp r-rcpparmadillo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mlampros/ClusterR")
     (synopsis "Clustering")
     (description
@@ -27136,11 +26333,8 @@ see
     (properties `((upstream-name . "Spectrum")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-clusterr" ,r-clusterr)
-       ("r-diptest" ,r-diptest)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rfast" ,r-rfast)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-clusterr r-diptest r-ggplot2 r-rfast))
+    (native-inputs (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/Spectrum/")
     (synopsis "Fast adaptive spectral clustering for single and multi-view data")
     (description
@@ -27169,9 +26363,7 @@ of K.")
     (properties `((upstream-name . "nabor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-bh r-rcpp r-rcppeigen))
     (home-page "https://cran.r-project.org/web/packages/nabor/")
     (synopsis "Wrapper for K nearest neighbour library for low dimensions")
     (description
@@ -27214,16 +26406,16 @@ not digit characters.")
                 "1ikqp29nncbw1xlwyb9dqqgcdk9q0bs3wxhnhnjpb11vcjv7cz2j"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-purrr
+           r-readr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://visdat.njtierney.com/")
     (synopsis "Preliminary Visualisation of Data")
     (description "This package provides procedures to create preliminary exploratory
@@ -27245,9 +26437,9 @@ using @code{ggplot2}.")
     (properties `((upstream-name . "muhaz")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/muhaz/")
     (synopsis "Hazard function estimation in survival analysis")
     (description
@@ -27270,27 +26462,27 @@ censored data.")
     (properties `((upstream-name . "flexsurv")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-desolve" ,r-desolve)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-mstate" ,r-mstate)
-       ("r-muhaz" ,r-muhaz)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-numderiv" ,r-numderiv)
-       ("r-purrr" ,r-purrr)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)
-       ("r-rstpm2" ,r-rstpm2)
-       ("r-survival" ,r-survival)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-desolve
+           r-dplyr
+           r-generics
+           r-magrittr
+           r-matrix
+           r-mstate
+           r-muhaz
+           r-mvtnorm
+           r-numderiv
+           r-purrr
+           r-quadprog
+           r-rcpp
+           r-rlang
+           r-rstpm2
+           r-survival
+           r-tibble
+           r-tidyr
+           r-tidyselect))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/chjackson/flexsurv-dev")
     (synopsis "Flexible parametric survival and multi-state models")
     (description
@@ -27316,10 +26508,9 @@ models.")
     (properties `((upstream-name . "TransPhylo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-ape r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/TransPhylo/")
     (synopsis "Inference of transmission tree from a dated phylogeny")
     (description
@@ -27343,7 +26534,7 @@ and @url{https://doi.org/10.1093/molbev/msw275,Didelot et al. (2017)}.")
     (properties `((upstream-name . "km.ci")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-survival" ,r-survival)))
+     (list r-survival))
     (home-page "https://cran.r-project.org/web/packages/km.ci/")
     (synopsis "Confidence intervals for the Kaplan-Meier estimator")
     (description
@@ -27388,17 +26579,17 @@ Springer.")
     (properties `((upstream-name . "survMisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-km-ci" ,r-km-ci)
-       ("r-kmsurv" ,r-kmsurv)
-       ("r-knitr" ,r-knitr)
-       ("r-survival" ,r-survival)
-       ("r-xtable" ,r-xtable)
-       ("r-zoo" ,r-zoo)))
+     (list r-data-table
+           r-ggplot2
+           r-gridextra
+           r-km-ci
+           r-kmsurv
+           r-knitr
+           r-survival
+           r-xtable
+           r-zoo))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/survMisc/")
     (synopsis "Miscellaneous functions for survival data")
     (description
@@ -27442,8 +26633,7 @@ implementation of the Shift-Algorithm by Streitberg & Roehmel.")
     (properties `((upstream-name . "maxstat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-exactranktests" ,r-exactranktests)
-       ("r-mvtnorm" ,r-mvtnorm)))
+     (list r-exactranktests r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/maxstat/")
     (synopsis "Maximally selected rank statistics")
     (description
@@ -27465,23 +26655,23 @@ p-value approximations.")
     (properties `((upstream-name . "survminer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggpubr" ,r-ggpubr)
-       ("r-ggtext" ,r-ggtext)
-       ("r-gridextra" ,r-gridextra)
-       ("r-magrittr" ,r-magrittr)
-       ("r-maxstat" ,r-maxstat)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-survival" ,r-survival)
-       ("r-survmisc" ,r-survmisc)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-broom
+           r-dplyr
+           r-ggplot2
+           r-ggpubr
+           r-ggtext
+           r-gridextra
+           r-magrittr
+           r-maxstat
+           r-purrr
+           r-rlang
+           r-scales
+           r-survival
+           r-survmisc
+           r-tibble
+           r-tidyr))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://rpkgs.datanovia.com/survminer/index.html")
     (synopsis "Drawing survival curves using ggplot2")
     (description
@@ -27506,8 +26696,7 @@ assumptions.")
     (properties `((upstream-name . "forge")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)))
+     (list r-magrittr r-rlang))
     (home-page "https://cran.r-project.org/web/packages/forge/")
     (synopsis "Cast values into shape")
     (description
@@ -27529,9 +26718,9 @@ coerce and verify the types and shapes of values for input checking.")
     (properties `((upstream-name . "config")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-yaml" ,r-yaml)))
+     (list r-yaml))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstudio/config")
     (synopsis "Manage environment specific configuration values")
     (description
@@ -27564,12 +26753,9 @@ value.")
                 (string-append prefix "-larmadillo")))
              #t)))))
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-mass r-matrix r-rcpp r-rcpparmadillo))
     (inputs
-     `(("armadillo" ,armadillo)))
+     (list armadillo))
     (home-page "https://cran.r-project.org/web/packages/AdaptiveSparsity")
     (synopsis "Adaptive sparsity models")
     (description
@@ -27592,9 +26778,7 @@ geometric models.")
     (properties `((upstream-name . "diffusionMap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-scatterplot3d" ,r-scatterplot3d)))
+     (list r-igraph r-matrix r-scatterplot3d))
     (home-page "https://www.r-project.org")
     (synopsis "Diffusion map")
     (description "This package implements the diffusion map method of data
@@ -27616,16 +26800,11 @@ model.")
          "01hvphaf5mx9xvwiazcw39kp6gc1lafqrbjwczy6f7hr145dn1pl"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
-     `(("gmp" ,gmp)
-       ("glpk" ,glpk)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list gmp glpk libxml2 zlib))
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-matrix" ,r-matrix)
-       ("r-pkgconfig" ,r-pkgconfig)))
+     (list r-magrittr r-matrix r-pkgconfig))
     (home-page "https://igraph.org")
     (synopsis "Network analysis and visualization")
     (description
@@ -27649,18 +26828,18 @@ more.")
     (properties `((upstream-name . "workflows")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-parsnip" ,r-parsnip)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cli
+           r-ellipsis
+           r-generics
+           r-glue
+           r-hardhat
+           r-lifecycle
+           r-parsnip
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/workflows")
     (synopsis "Modeling workflows")
     (description
@@ -27695,9 +26874,7 @@ workflow.  The advantages are:
     (properties `((upstream-name . "lobstr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rlang" ,r-rlang)))
+     (list r-crayon r-rcpp r-rlang))
     (home-page "https://github.com/r-lib/lobstr")
     (synopsis "Visualize R data structures with trees")
     (description
@@ -27722,8 +26899,7 @@ object sizes.")
     (properties `((upstream-name . "GPfit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-lhs" ,r-lhs)))
+     (list r-lattice r-lhs))
     (home-page "https://cran.r-project.org/web/packages/GPfit/")
     (synopsis "Gaussian Processes modeling")
     (description
@@ -27745,14 +26921,14 @@ object sizes.")
     (properties `((upstream-name . "yardstick")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-proc" ,r-proc)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-dplyr
+           r-generics
+           r-proc
+           r-rlang
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/yardstick")
     (synopsis "Tidy characterizations of model performance")
     (description
@@ -27774,7 +26950,7 @@ and regression metrics (e.g., RMSE).")
          "0s0acddc5h14245hi1faycxp0fyvw6nlgaz2df7da4fpyd2f638f"))))
     (properties `((upstream-name . "warp")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/DavisVaughan/warp")
     (synopsis "Group dates")
     (description
@@ -27800,12 +26976,8 @@ observations.")
     (properties `((upstream-name . "slider")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)
-       ("r-warp" ,r-warp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ellipsis r-glue r-rlang r-vctrs r-warp))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/DavisVaughan/slider")
     (synopsis "Sliding window functions")
     (description
@@ -27829,20 +27001,20 @@ sliding windows are to be created.")
     (properties `((upstream-name . "rsample")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-furrr" ,r-furrr)
-       ("r-generics" ,r-generics)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-slider" ,r-slider)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-ellipsis
+           r-furrr
+           r-generics
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-slider
+           r-tibble
+           r-tidyr
+           r-tidyselect
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://rsample.tidymodels.org")
     (synopsis "General resampling infrastructure")
     (description
@@ -27884,16 +27056,16 @@ Design} (SFD) and to test their quality.")
     (properties `((upstream-name . "dials")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dicedesign" ,r-dicedesign)
-       ("r-dplyr" ,r-dplyr)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-dicedesign
+           r-dplyr
+           r-glue
+           r-purrr
+           r-rlang
+           r-scales
+           r-tibble
+           r-vctrs
+           r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://dials.tidymodels.org/")
     (synopsis "Tools for creating tuning parameter values")
     (description
@@ -27916,27 +27088,27 @@ for creating, simulating, or validating values for such parameters.")
     (properties `((upstream-name . "tune")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-dials" ,r-dials)
-       ("r-dplyr" ,r-dplyr)
-       ("r-foreach" ,r-foreach)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-gpfit" ,r-gpfit)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-parsnip" ,r-parsnip)
-       ("r-purrr" ,r-purrr)
-       ("r-recipes" ,r-recipes)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)
-       ("r-workflows" ,r-workflows)
-       ("r-yardstick" ,r-yardstick)))
+     (list r-cli
+           r-dials
+           r-dplyr
+           r-foreach
+           r-generics
+           r-ggplot2
+           r-glue
+           r-gpfit
+           r-hardhat
+           r-lifecycle
+           r-parsnip
+           r-purrr
+           r-recipes
+           r-rlang
+           r-rsample
+           r-tibble
+           r-tidyr
+           r-vctrs
+           r-withr
+           r-workflows
+           r-yardstick))
     (home-page "https://github.com/tidymodels/tune")
     (synopsis "Tidy tuning tools")
     (description
@@ -27960,24 +27132,24 @@ methods, and post-processing steps.")
     (properties `((upstream-name . "workflowsets")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-dplyr" ,r-dplyr)
-       ("r-hardhat" ,r-hardhat)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tune" ,r-tune)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)
-       ("r-workflows" ,r-workflows)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-cli
+           r-dplyr
+           r-hardhat
+           r-generics
+           r-ggplot2
+           r-lifecycle
+           r-prettyunits
+           r-purrr
+           r-rlang
+           r-rsample
+           r-tibble
+           r-tidyr
+           r-tune
+           r-vctrs
+           r-withr
+           r-workflows))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/workflowsets")
     (synopsis "Create a collection of tidymodels workflows")
     (description
@@ -28002,20 +27174,20 @@ results.")
     (properties `((upstream-name . "tidyposterior")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-rstanarm" ,r-rstanarm)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tune" ,r-tune)
-       ("r-vctrs" ,r-vctrs)
-       ("r-workflowsets" ,r-workflowsets)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-ggplot2
+           r-purrr
+           r-rlang
+           r-rsample
+           r-rstanarm
+           r-tibble
+           r-tidyr
+           r-tune
+           r-vctrs
+           r-workflowsets))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://tidyposterior.tidymodels.org")
     (synopsis "Bayesian analysis to compare models using resampling statistics")
     (description
@@ -28040,16 +27212,16 @@ models without involving a test set.")
     (properties `((upstream-name . "tidypredict")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-knitr" ,r-knitr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-dplyr
+           r-generics
+           r-knitr
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://tidypredict.tidymodels.org")
     (synopsis "Run predictions inside the database")
     (description
@@ -28097,11 +27269,9 @@ and \"Persuasion\".")
     (properties `((upstream-name . "tokenizers")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-snowballc" ,r-snowballc)
-       ("r-stringi" ,r-stringi)))
+     (list r-rcpp r-snowballc r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://lincolnmullen.com/software/tokenizers/")
     (synopsis "Fast, consistent tokenization of natural language text")
     (description
@@ -28129,10 +27299,9 @@ consistent interface, and the package is built on the @code{stringi} and
     (properties `((upstream-name . "hunspell")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-digest r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/ropensci/hunspell#readme")
     (synopsis "High-performance stemmer, tokenizer, and spell checker")
     (description
@@ -28164,20 +27333,20 @@ vignettes in all common formats.")
     (properties `((upstream-name . "tidytext")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-hunspell" ,r-hunspell)
-       ("r-janeaustenr" ,r-janeaustenr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-matrix" ,r-matrix)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tokenizers" ,r-tokenizers)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-hunspell
+           r-janeaustenr
+           r-lifecycle
+           r-matrix
+           r-purrr
+           r-rlang
+           r-stringr
+           r-tibble
+           r-tokenizers
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://github.com/juliasilge/tidytext")
     (synopsis "Text mining using dplyr, ggplot2, and other Tidy tools")
     (description
@@ -28199,21 +27368,21 @@ analysis using @code{dplyr}, @code{ggplot2}, and other Tidy tools.")
     (properties `((upstream-name . "parsnip")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-globals" ,r-globals)
-       ("r-glue" ,r-glue)
-       ("r-hardhat" ,r-hardhat)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-prettyunits" ,r-prettyunits)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-dplyr
+           r-generics
+           r-globals
+           r-glue
+           r-hardhat
+           r-lifecycle
+           r-magrittr
+           r-prettyunits
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-vctrs))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://parsnip.tidymodels.org")
     (synopsis "Common API to modeling and analysis functions")
     (description
@@ -28236,19 +27405,19 @@ functions or computational engines (e.g. R, Spark, Stan, etc).")
     (properties `((upstream-name . "infer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-generics" ,r-generics)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-patchwork" ,r-patchwork)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)))
+     (list r-broom
+           r-dplyr
+           r-generics
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-patchwork
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidymodels/infer")
     (synopsis "Tidy statistical inference")
     (description
@@ -28290,8 +27459,7 @@ model-related packages.")
     (properties `((upstream-name . "conflicted")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-memoise" ,r-memoise)
-       ("r-rlang" ,r-rlang)))
+     (list r-memoise r-rlang))
     (home-page "https://github.com/r-lib/conflicted")
     (synopsis "Alternative conflict resolution strategy")
     (description
@@ -28317,31 +27485,29 @@ use.")
     (properties `((upstream-name . "tidymodels")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-cli" ,r-cli)
-       ("r-conflicted" ,r-conflicted)
-       ("r-dials" ,r-dials)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-hardhat" ,r-hardhat)
-       ("r-infer" ,r-infer)
-       ("r-modeldata" ,r-modeldata)
-       ("r-parsnip" ,r-parsnip)
-       ("r-purrr" ,r-purrr)
-       ("r-recipes" ,r-recipes)
-       ("r-rlang" ,r-rlang)
-       ("r-rsample" ,r-rsample)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-tune" ,r-tune)
-       ("r-workflows" ,r-workflows)
-       ("r-workflowsets" ,r-workflowsets)
-       ("r-yardstick" ,r-yardstick)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("pandoc" ,pandoc)))
+     (list r-broom
+           r-cli
+           r-conflicted
+           r-dials
+           r-dplyr
+           r-ggplot2
+           r-hardhat
+           r-infer
+           r-modeldata
+           r-parsnip
+           r-purrr
+           r-recipes
+           r-rlang
+           r-rsample
+           r-rstudioapi
+           r-tibble
+           r-tidyr
+           r-tune
+           r-workflows
+           r-workflowsets
+           r-yardstick))
+    (native-inputs
+     (list r-knitr r-rmarkdown pandoc))
     (home-page "https://github.com/tidymodels/tidymodels")
     (synopsis "Tidy collection for modeling and statistical analysis")
     (description
@@ -28364,7 +27530,7 @@ data structures of the tidyverse.")
     (properties `((upstream-name . "lsa")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-snowballc" ,r-snowballc)))
+     (list r-snowballc))
     (home-page "https://cran.r-project.org/package=lsa")
     (synopsis "Latent semantic analysis")
     (description
@@ -28417,8 +27583,7 @@ package also provides functions to visualize the observed data and the MLE.")
     (properties `((upstream-name . "metafor")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-nlme" ,r-nlme)))
+     (list r-matrix r-nlme))
     (home-page "https://cran.r-project.org/web/packages/metafor/")
     (synopsis "Meta-analysis package for R")
     (description
@@ -28454,11 +27619,7 @@ phylogenetic relatedness) can also be conducted.")
     (properties `((upstream-name . "altmeta")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-coda" ,r-coda)
-       ("r-lme4" ,r-lme4)
-       ("r-matrix" ,r-matrix)
-       ("r-metafor" ,r-metafor)
-       ("r-rjags" ,r-rjags)))
+     (list r-coda r-lme4 r-matrix r-metafor r-rjags))
     (home-page "https://cran.r-project.org/web/packages/altmeta/")
     (synopsis "Alternative meta-analysis methods")
     (description
@@ -28536,12 +27697,12 @@ genome scans.")
                (base32 "0ppc6dzlq77mppxc6bczai9gi40jrbxd1466y2cn2s8a4ah1jg9y"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-yaml" ,r-yaml)))
+     (list r-data-table
+           r-jsonlite
+           r-rcpp
+           r-rcppeigen
+           r-rsqlite
+           r-yaml))
     (home-page "https://kbroman.org/qtl2/")
     (synopsis "Quantitative Trait Locus Mapping in Experimental Crosses")
     (description
@@ -28564,7 +27725,7 @@ designs.  Broman et al. (2018) <doi:10.1534/genetics.118.301595>.")
          "097313x72jr2q6dp8ma33w8kyp3gfw71snf1qx2maxbwwnysk085"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://seqminer.genomic.codes")
     (synopsis "Read nucleotide sequence data (VCF, BCF, and METAL formats)")
     (description
@@ -28587,7 +27748,7 @@ data (variant call format, e.g. VCF or BCF) or meta-analysis results in R.")
     (properties `((upstream-name . "MALDIquant")))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/MALDIquant")
     (synopsis "Quantitative analysis of mass spectrometry data")
     (description
@@ -28615,8 +27776,7 @@ as allowing spectra with different resolutions.")
     (properties `((upstream-name . "scattermore")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-scales))
     (home-page "https://github.com/exaexa/scattermore")
     (synopsis "Scatterplots with more points")
     (description
@@ -28638,10 +27798,7 @@ data to rasters.  It speeds up plotting of data with millions of points.")
     (properties `((upstream-name . "SeuratObject")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rlang" ,r-rlang)))
+     (list r-matrix r-rcpp r-rcppeigen r-rlang))
     (home-page "https://satijalab.org/seurat")
     (synopsis "Data structures for single cell data")
     (description
@@ -28665,49 +27822,49 @@ other R users.")
     (properties `((upstream-name . "Seurat")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-cowplot" ,r-cowplot)
-       ("r-fitdistrplus" ,r-fitdistrplus)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-ggridges" ,r-ggridges)
-       ("r-httr" ,r-httr)
-       ("r-ica" ,r-ica)
-       ("r-igraph" ,r-igraph)
-       ("r-irlba" ,r-irlba)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-leiden" ,r-leiden)
-       ("r-lmtest" ,r-lmtest)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixstats" ,r-matrixstats)
-       ("r-miniui" ,r-miniui)
-       ("r-patchwork" ,r-patchwork)
-       ("r-pbapply" ,r-pbapply)
-       ("r-plotly" ,r-plotly)
-       ("r-png" ,r-png)
-       ("r-rann" ,r-rann)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppannoy" ,r-rcppannoy)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppprogress" ,r-rcppprogress)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-rocr" ,r-rocr)
-       ("r-rtsne" ,r-rtsne)
-       ("r-scales" ,r-scales)
-       ("r-scattermore" ,r-scattermore)
-       ("r-sctransform" ,r-sctransform)
-       ("r-seuratobject" ,r-seuratobject)
-       ("r-shiny" ,r-shiny)
-       ("r-spatstat-core" ,r-spatstat-core)
-       ("r-spatstat-geom" ,r-spatstat-geom)
-       ("r-tibble" ,r-tibble)
-       ("r-uwot" ,r-uwot)))
+     (list r-cluster
+           r-cowplot
+           r-fitdistrplus
+           r-future
+           r-future-apply
+           r-ggplot2
+           r-ggrepel
+           r-ggridges
+           r-httr
+           r-ica
+           r-igraph
+           r-irlba
+           r-jsonlite
+           r-kernsmooth
+           r-leiden
+           r-lmtest
+           r-mass
+           r-matrix
+           r-matrixstats
+           r-miniui
+           r-patchwork
+           r-pbapply
+           r-plotly
+           r-png
+           r-rann
+           r-rcolorbrewer
+           r-rcpp
+           r-rcppannoy
+           r-rcppeigen
+           r-rcppprogress
+           r-reticulate
+           r-rlang
+           r-rocr
+           r-rtsne
+           r-scales
+           r-scattermore
+           r-sctransform
+           r-seuratobject
+           r-shiny
+           r-spatstat-core
+           r-spatstat-geom
+           r-tibble
+           r-uwot))
     (home-page "http://www.satijalab.org/seurat")
     (synopsis "Seurat is an R toolkit for single cell genomics")
     (description
@@ -28737,18 +27894,18 @@ discovery of differentially expressed genes and markers.")
       (properties `((upstream-name . "SeuratDisk")))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-cli" ,r-cli)
-         ("r-crayon" ,r-crayon)
-         ("r-hdf5r" ,r-hdf5r)
-         ("r-matrix" ,r-matrix)
-         ("r-r6" ,r-r6)
-         ("r-rlang" ,r-rlang)
-         ("r-seurat" ,r-seurat)
-         ("r-seuratobject" ,r-seuratobject)
-         ("r-stringi" ,r-stringi)
-         ("r-withr" ,r-withr)))
+       (list r-cli
+             r-crayon
+             r-hdf5r
+             r-matrix
+             r-r6
+             r-rlang
+             r-seurat
+             r-seuratobject
+             r-stringi
+             r-withr))
       (native-inputs
-       `(("r-knitr" ,r-knitr)))
+       (list r-knitr))
       (home-page "https://github.com/mojaveazure/seurat-disk")
       (synopsis "Interfaces for HDF5-based single cell file formats")
       (description
@@ -28787,9 +27944,7 @@ goal of enhancing interoperability between Seurat and Scanpy.")
            (add-after 'unpack 'set-HOME
              (lambda _ (setenv "HOME" "/tmp"))))))
       (propagated-inputs
-       `(("r-cli" ,r-cli)
-         ("r-crayon" ,r-crayon)
-         ("r-rappdirs" ,r-rappdirs)))
+       (list r-cli r-crayon r-rappdirs))
       (home-page "https://github.com/satijalab/seurat-data")
       (synopsis "Install and manage Seurat datasets")
       (description
@@ -28813,14 +27968,14 @@ distributed as independent packages.")
          "1pg5lfc5m4ccphswbfbihj91ppmqhf4084kbjlmfsrqxylsyy8ch"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-igraph" ,r-igraph)
-       ("r-matrix" ,r-matrix)
-       ("r-quadprog" ,r-quadprog)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-ape
+           r-fastmatch
+           r-igraph
+           r-matrix
+           r-quadprog
+           r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/KlausVigo/phangorn")
     (synopsis "Phylogenetic analysis in R")
     (description
@@ -28842,13 +27997,10 @@ Maximum Parsimony, distance methods and Hadamard conjugation.")
           "0rzrk7xsn4gy271pbcw3azndhx0c06bmsgrg6libjmlfnmq6j8sc"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
-    (inputs `(("fftw" ,fftw) ("gsl" ,gsl)))
+     (list gfortran))
+    (inputs (list fftw gsl))
     (propagated-inputs
-     `(("r-ape" ,r-ape)
-       ("r-desolve" ,r-desolve)
-       ("r-rcpp" ,r-rcpp)
-       ("r-subplex" ,r-subplex)))
+     (list r-ape r-desolve r-rcpp r-subplex))
     (home-page "https://www.zoology.ubc.ca/prog/diversitree")
     (synopsis "Comparative 'phylogenetic' analyses of diversification")
     (description "This package contains a number of comparative \"phylogenetic\"
@@ -28874,9 +28026,9 @@ rate speciation and extinction.")
     (properties `((upstream-name . "calculus")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/eguidotti/calculus")
     (synopsis "High dimensional numerical and symbolic calculus")
     (description
@@ -28904,7 +28056,7 @@ parabolic or user defined by custom scale factors.")
     (properties `((upstream-name . "decon")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page
       "https://cran.r-project.org/web/packages/decon/")
     (synopsis "Deconvolution Estimation in Measurement Error Models")
@@ -28963,11 +28115,7 @@ kernel estimators.")
     (properties `((upstream-name . "lpme")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-decon" ,r-decon)
-        ("r-flexmix" ,r-flexmix)
-        ("r-locpol" ,r-locpol)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rcpparmadillo" ,r-rcpparmadillo)))
+      (list r-decon r-flexmix r-locpol r-rcpp r-rcpparmadillo))
     (home-page
       "https://cran.r-project.org/web/packages/lpme/")
     (synopsis "Nonparametric Estimation of Measurement Error Models")
@@ -28992,8 +28140,7 @@ also provided for each method.")
     (properties `((upstream-name . "aws.signature")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)))
+     (list r-base64enc r-digest))
     (home-page "https://github.com/cloudyr/aws.signature")
     (synopsis "Amazon Web Services Request Signatures")
     (description
@@ -29017,12 +28164,12 @@ use on EC2 instances, the package 'aws.ec2metadata' is suggested.")
     (properties `((upstream-name . "aws.s3")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-aws-signature" ,r-aws-signature)
-       ("r-base64enc" ,r-base64enc)
-       ("r-curl" ,r-curl)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-xml2" ,r-xml2)))
+     (list r-aws-signature
+           r-base64enc
+           r-curl
+           r-digest
+           r-httr
+           r-xml2))
     (home-page "https://github.com/cloudyr/aws.s3")
     (synopsis "AWS S3 Client Package")
     (description
@@ -29042,9 +28189,9 @@ Services (AWS) Simple Storage Service (S3) REST API.")
                 "18s92qyakhvp336kk2777ydypwfrfwfz6a1gqkq812zy3kcb4mcc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)))
+     (list r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://s-fleck.github.io/lgr/")
     (synopsis "Fully featured logging framework")
     (description "This package offers a flexible, feature-rich yet
@@ -29086,8 +28233,7 @@ well as email and push notifications.")
                 "1qlqfan5akz42zwkcz3ncln6rd9c302dy4cyp7nx0jcafr5i459f"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-prroc" ,r-prroc)))
+     (list r-checkmate r-prroc))
     (home-page "https://mlr3measures.mlr-org.com/")
     (synopsis "Performance measures for mlr3")
     (description "This package implements multiple performance measures for
@@ -29109,11 +28255,7 @@ are.")
                 "1ax1mvnm8xjcskq12x63jkal766v1zwilpgrkdv6yawd7yrww4q9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-r6" ,r-r6)))
+     (list r-backports r-checkmate r-data-table r-digest r-r6))
     (home-page "https://mlr3misc.mlr-org.com/")
     (synopsis "Helper functions for mlr3")
     (description "@code{mlr3misc} provides frequently used helper functions
@@ -29135,11 +28277,7 @@ package also supersedes the package @code{BBmisc}.")
                 "1difp0bzsfxcmbm1snahh3i6417k1a2w4mnjx65p20n2yiclmrgs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-r6" ,r-r6)))
+     (list r-backports r-checkmate r-data-table r-mlr3misc r-r6))
     (home-page "https://paradox.mlr-org.com/")
     (synopsis "Define and work with parameter spaces for complex algorithms")
     (description "With this package it is possible to define parameter spaces,
@@ -29160,20 +28298,20 @@ implemented as @code{R6} classes.")
                 "1729wbdp62cjjk775qxrahyskp191s9qqnmqbxncfjrpdxphxk34"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r6" ,r-r6)
-       ("r-backports" ,r-backports)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-future" ,r-future)
-       ("r-future-apply" ,r-future-apply)
-       ("r-lgr" ,r-lgr)
-       ("r-mlbench" ,r-mlbench)
-       ("r-mlr3measures" ,r-mlr3measures)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-palmerpenguins" ,r-palmerpenguins)
-       ("r-paradox" ,r-paradox)
-       ("r-parallelly" ,r-parallelly)
-       ("r-uuid" ,r-uuid)))
+     (list r-r6
+           r-backports
+           r-checkmate
+           r-data-table
+           r-future
+           r-future-apply
+           r-lgr
+           r-mlbench
+           r-mlr3measures
+           r-mlr3misc
+           r-palmerpenguins
+           r-paradox
+           r-parallelly
+           r-uuid))
     (home-page "https://mlr3.mlr-org.com/")
     (synopsis "Machine Learning in R - Next Generation")
     (description "@code{mlr3} enables efficient, object-oriented programming
@@ -29196,12 +28334,12 @@ computational operations, add-on packages provide additional functionality.")
                 "1yc3mrk1b9h1k342wnw7sm4zmcw7w31l5ybh558g88f5hmibdl98"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-mlr3" ,r-mlr3)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate
+           r-data-table
+           r-mlr3
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (home-page "https://mlr3learners.mlr-org.com/")
     (synopsis "Recommended Learners for @code{mlr3}")
     (description "@code{mlr3learners} extends @code{mlr3} and @code{mlr3proba}
@@ -29225,14 +28363,14 @@ vector machines, and gradient boosting.")
     (properties `((upstream-name . "bbotk")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-lgr" ,r-lgr)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+     (list r-checkmate
+           r-data-table
+           r-lgr
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://bbotk.mlr-org.com")
     (synopsis "Black-Box Optimization Toolkit")
     (description "This package provides a common framework for optimization of
@@ -29253,15 +28391,15 @@ annealing.")
                 "0i428kdbak81j1wlwmdf9y40hqi63azhyny802ms2z04wl8lwnvs"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbotk" ,r-bbotk)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-lgr" ,r-lgr)
-       ("r-mlr3" ,r-mlr3)
-       ("r-mlr3misc" ,r-mlr3misc)
-       ("r-paradox" ,r-paradox)
-       ("r-r6" ,r-r6)))
+     (list r-bbotk
+           r-checkmate
+           r-data-table
+           r-digest
+           r-lgr
+           r-mlr3
+           r-mlr3misc
+           r-paradox
+           r-r6))
     (home-page "https://mlr3tuning.mlr-org.com/")
     (synopsis "Tuning for @code{mlr3}")
     (description "@code{mlr3tuning} implements methods for hyperparameter
@@ -29333,8 +28471,7 @@ itself."))))
     (properties `((upstream-name . "fontquiver")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fontbitstreamvera" ,r-fontbitstreamvera)
-       ("r-fontliberation" ,r-fontliberation)))
+     (list r-fontbitstreamvera r-fontliberation))
     (home-page "https://cran.r-project.org/package=fontquiver")
     (synopsis "Set of installed fonts")
     (description
@@ -29375,7 +28512,7 @@ avoid system fonts to make sure your outputs are reproducible.")
                (copy-recursively (string-append harfbuzz "/include")
                                  "src/target/include")))))))
     (propagated-inputs
-     `(("r-fontquiver" ,r-fontquiver)))
+     (list r-fontquiver))
     ;; This may defeat the purpose of this package as our versions of freetype
     ;; and harfbuzz obviously differ from the tarballs offered by this
     ;; project.  On the other hand, Guix arguably does a better job at
@@ -29407,7 +28544,7 @@ avoid system fonts to make sure your outputs are reproducible.")
 		    "--without-fontconfig"
 		    "--without-glib")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://cran.r-project.org/package=freetypeharfbuzz")
     (synopsis "Deterministic computation of text box metrics")
     (description
@@ -29432,17 +28569,16 @@ unit tests of graphics).")
     (properties `((upstream-name . "vdiffr")))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-diffobj" ,r-diffobj)
-       ("r-glue" ,r-glue)
-       ("r-htmltools" ,r-htmltools)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-rlang" ,r-rlang)
-       ("r-testthat" ,r-testthat)
-       ("r-xml2" ,r-xml2)))
+     (list libpng zlib))
+    (propagated-inputs
+     (list r-cpp11
+           r-diffobj
+           r-glue
+           r-htmltools
+           r-lifecycle
+           r-rlang
+           r-testthat
+           r-xml2))
     (home-page "https://github.com/r-lib/vdiffr")
     (synopsis "Visual regression testing and graphical diffing")
     (description
@@ -29487,17 +28623,17 @@ chunks.")
     (properties `((upstream-name . "clustree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggraph" ,r-ggraph)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-igraph" ,r-igraph)
-       ("r-rlang" ,r-rlang)
-       ("r-tidygraph" ,r-tidygraph)
-       ("r-viridis" ,r-viridis)))
+     (list r-checkmate
+           r-dplyr
+           r-ggplot2
+           r-ggraph
+           r-ggrepel
+           r-igraph
+           r-rlang
+           r-tidygraph
+           r-viridis))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/lazappi/clustree")
     (synopsis "Visualize clusterings at different resolutions")
     (description
@@ -29522,16 +28658,11 @@ clusterings as resolution increases.")
     (properties `((upstream-name . "textshaping")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("harfbuzz" ,harfbuzz)
-       ("zlib" ,zlib)))
+     (list freetype fribidi harfbuzz zlib))
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-cpp11 r-systemfonts))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/r-lib/textshaping")
     (synopsis "Bindings to the HarfBuzz and Fribidi libraries for text shaping")
     (description
@@ -29555,16 +28686,11 @@ the font tool-set provided by the @code{systemfonts} package.")
     (properties `((upstream-name . "ragg")))
     (build-system r-build-system)
     (inputs
-     `(("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list freetype libjpeg-turbo libpng libtiff zlib))
     (propagated-inputs
-     `(("r-systemfonts" ,r-systemfonts)
-       ("r-textshaping" ,r-textshaping)))
+     (list r-systemfonts r-textshaping))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://ragg.r-lib.org")
     (synopsis "Graphic devices based on AGG")
     (description
@@ -29588,15 +28714,15 @@ AGG to use as alternative to the raster devices provided through the
     (properties `((upstream-name . "downlit")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brio" ,r-brio)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-evaluate" ,r-evaluate)
-       ("r-fansi" ,r-fansi)
-       ("r-memoise" ,r-memoise)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)
-       ("r-yaml" ,r-yaml)))
+     (list r-brio
+           r-desc
+           r-digest
+           r-evaluate
+           r-fansi
+           r-memoise
+           r-rlang
+           r-vctrs
+           r-yaml))
     (home-page "https://downlit.r-lib.org/")
     (synopsis "Syntax highlighting and automatic linking")
     (description
@@ -29620,30 +28746,30 @@ in output to the equivalent HTML.")
          "1k31biyvxkv3xjc1yy3nzb9wfza3vbx97fv17nly5a6vlv7zqbs4"))))
     (properties `((upstream-name . "pkgdown")))
     (build-system r-build-system)
-    (inputs `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-downlit" ,r-downlit)
-       ("r-fs" ,r-fs)
-       ("r-httr" ,r-httr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-memoise" ,r-memoise)
-       ("r-openssl" ,r-openssl)
-       ("r-purrr" ,r-purrr)
-       ("r-ragg" ,r-ragg)
-       ("r-rematch2" ,r-rematch2)
-       ("r-rlang" ,r-rlang)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-tibble" ,r-tibble)
-       ("r-whisker" ,r-whisker)
-       ("r-withr" ,r-withr)
-       ("r-xml2" ,r-xml2)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+    (inputs (list pandoc))
+    (propagated-inputs
+     (list r-callr
+           r-crayon
+           r-desc
+           r-digest
+           r-downlit
+           r-fs
+           r-httr
+           r-magrittr
+           r-memoise
+           r-openssl
+           r-purrr
+           r-ragg
+           r-rematch2
+           r-rlang
+           r-rmarkdown
+           r-tibble
+           r-whisker
+           r-withr
+           r-xml2
+           r-yaml))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://pkgdown.r-lib.org")
     (synopsis "Make static HTML documentation for an R package")
     (description
@@ -29667,7 +28793,7 @@ package online.")
     (properties `((upstream-name . "prereg")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-rmarkdown" ,r-rmarkdown)))
+      (list r-rmarkdown))
     (home-page "https://github.com/crsh/prereg")
     (synopsis
       "R Markdown Templates to preregister Scientific Studies")
@@ -29690,16 +28816,16 @@ preregistration documents for scientific studies in PDF format.")
     (properties `((upstream-name . "ez")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-car" ,r-car)
-        ("r-ggplot2" ,r-ggplot2)
-        ("r-lme4" ,r-lme4)
-        ("r-mass" ,r-mass)
-        ("r-matrix" ,r-matrix)
-        ("r-mgcv" ,r-mgcv)
-        ("r-plyr" ,r-plyr)
-        ("r-reshape2" ,r-reshape2)
-        ("r-scales" ,r-scales)
-        ("r-stringr" ,r-stringr)))
+      (list r-car
+            r-ggplot2
+            r-lme4
+            r-mass
+            r-matrix
+            r-mgcv
+            r-plyr
+            r-reshape2
+            r-scales
+            r-stringr))
     (home-page "https://github.com/mike-lawrence/ez")
     (synopsis "Easy Analysis and Visualization of Factorial Experiments")
     (description
@@ -29729,7 +28855,7 @@ visualized at any level of the experiment's design.")
             "1xa8q1way3gjadrjh3mv3xr4c6b4h16nd2c6lgl969difplpfz9p"))))
     (properties `((upstream-name . "qdapRegex")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-stringi" ,r-stringi)))
+    (propagated-inputs (list r-stringi))
     (home-page
       "https://trinker.github.com/qdapRegex/")
     (synopsis
@@ -29755,7 +28881,7 @@ percentages, citations, person tags, phone numbers, times, and zip codes.")
             "1mci6x65h94qiz9cwikx2inbrwkykv43zbs8abfbx416zrh2bbn9"))))
     (properties `((upstream-name . "mgsub")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=mgsub")
     (synopsis
@@ -29780,9 +28906,7 @@ in same length matches).")
     (properties `((upstream-name . "textshape")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-slam" ,r-slam)
-        ("r-stringi" ,r-stringi)))
+      (list r-data-table r-slam r-stringi))
     (home-page "https://github.com/trinker/textshape")
     (synopsis "Tools for Reshaping Text")
     (description
@@ -29803,14 +28927,14 @@ in same length matches).")
     (properties `((upstream-name . "syuzhet")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-dplyr" ,r-dplyr)
-        ("r-dtt" ,r-dtt)
-        ("r-nlp" ,r-nlp)
-        ("r-rlang" ,r-rlang)
-        ("r-textshape" ,r-textshape)
-        ("r-tidyr" ,r-tidyr)
-        ("r-zoo" ,r-zoo)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-dplyr
+            r-dtt
+            r-nlp
+            r-rlang
+            r-textshape
+            r-tidyr
+            r-zoo))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/mjockers/syuzhet")
     (synopsis
       "Extracts Sentiment and Sentiment-Derived Plot Arcs from Text")
@@ -29841,8 +28965,7 @@ normalization.")
     (properties `((upstream-name . "lexicon")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-syuzhet" ,r-syuzhet)))
+      (list r-data-table r-syuzhet))
     (home-page "https://github.com/trinker/lexicon")
     (synopsis "Lexicons for Text Analysis")
     (description
@@ -29863,7 +28986,7 @@ and word lists.")
             "1g3nmy5p8wj3ix1vp1qmkmy3dyqisrw0md8cjrx4klqkp0wqlms9"))))
     (properties `((upstream-name . "english")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=english")
     (synopsis "Translate Integers into English")
@@ -29887,14 +29010,14 @@ indefinite article choice, \"a\" or \"an\".")
     (properties `((upstream-name . "textclean")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-english" ,r-english)
-        ("r-glue" ,r-glue)
-        ("r-lexicon" ,r-lexicon)
-        ("r-mgsub" ,r-mgsub)
-        ("r-qdapregex" ,r-qdapregex)
-        ("r-stringi" ,r-stringi)
-        ("r-textshape" ,r-textshape)))
+      (list r-data-table
+            r-english
+            r-glue
+            r-lexicon
+            r-mgsub
+            r-qdapregex
+            r-stringi
+            r-textshape))
     (home-page
       "https://github.com/trinker/textclean")
     (synopsis "Text Cleaning Tools")
@@ -29922,9 +29045,7 @@ text but not always easily handled by analysis algorithms.  The
     (properties `((upstream-name . "striprtf")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-magrittr" ,r-magrittr)
-        ("r-rcpp" ,r-rcpp)
-        ("r-stringr" ,r-stringr)))
+      (list r-magrittr r-rcpp r-stringr))
     (home-page "https://github.com/kota7/striprtf")
     (synopsis "Extract Text from RTF File")
     (description
@@ -29959,11 +29080,9 @@ text but not always easily handled by analysis algorithms.  The
              (("PKG_LIBS = " all)
               (string-append all "-lgzstream ")))
              #t)))))
-    (inputs `(("zlib" ,zlib) ("gzstream" ,gzstream)))
+    (inputs (list zlib gzstream))
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-rcpp" ,r-rcpp)
-        ("r-tibble" ,r-tibble)))
+      (list r-data-table r-rcpp r-tibble))
     (home-page "https://gitlab.com/hrbrmstr/ndjson")
     (synopsis
       "Wicked-Fast @dfn{Streaming JSON} (ndjson) Reader")
@@ -29992,9 +29111,7 @@ structures from them.")
     (properties `((upstream-name . "streamR")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-ndjson" ,r-ndjson)
-        ("r-rcurl" ,r-rcurl)
-        ("r-rjson" ,r-rjson)))
+      (list r-ndjson r-rcurl r-rjson))
     (home-page
       "https://cran.r-project.org/package=streamR")
     (synopsis
@@ -30018,11 +29135,8 @@ user streams, and to parse the output into data frames.")
     (properties `((upstream-name . "readODS")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-cellranger" ,r-cellranger)
-        ("r-readr" ,r-readr)
-        ("r-stringi" ,r-stringi)
-        ("r-xml2" ,r-xml2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-cellranger r-readr r-stringi r-xml2))
+    (native-inputs (list r-knitr))
     (home-page
       "https://cran.r-project.org/package=readODS")
     (synopsis "Read and Write ODS Files")
@@ -30059,13 +29173,10 @@ Also support writing data frame into ODS file.")
              (setenv "EXTERNAL_QPDF" "1")
              #t)))))
     (inputs
-      `(("zlib" ,zlib)
-        ("qpdf" ,qpdf)))
+      (list zlib qpdf))
     (propagated-inputs
-      `(("r-askpass" ,r-askpass)
-        ("r-curl" ,r-curl)
-        ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list r-askpass r-curl r-rcpp))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/ropensci/qpdf")
     (synopsis
       "Split, Combine and Compress PDF Files")
@@ -30091,11 +29202,10 @@ data you need the @code{pdftools} package.")
     (properties `((upstream-name . "pdftools")))
     (build-system r-build-system)
     (inputs
-      `(("zlib" ,zlib)
-        ("poppler" ,poppler)))
+      (list zlib poppler))
     (propagated-inputs
-      `(("r-qpdf" ,r-qpdf) ("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list r-qpdf r-rcpp))
+    (native-inputs (list pkg-config))
     (home-page
       "https://docs.ropensci.org/pdftools/")
     (synopsis
@@ -30135,8 +29245,8 @@ further processing in R.")
              (("system.file\\(\"bin\", package = \"antiword\"\\)")
               (string-append "\"" (assoc-ref inputs "antiword") "/bin\"")))
              #t)))))
-    (inputs `(("antiword" ,antiword)))
-    (propagated-inputs `(("r-sys" ,r-sys)))
+    (inputs (list antiword))
+    (propagated-inputs (list r-sys))
     (home-page
       "https://github.com/ropensci/antiword#readme")
     (synopsis
@@ -30162,20 +29272,20 @@ latter.")
     (properties `((upstream-name . "readtext")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-antiword" ,r-antiword)
-        ("r-data-table" ,r-data-table)
-        ("r-digest" ,r-digest)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-pdftools" ,r-pdftools)
-        ("r-readods" ,r-readods)
-        ("r-readxl" ,r-readxl)
-        ("r-streamr" ,r-streamr)
-        ("r-stringi" ,r-stringi)
-        ("r-striprtf" ,r-striprtf)
-        ("r-tibble" ,r-tibble)
-        ("r-xml2" ,r-xml2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-antiword
+            r-data-table
+            r-digest
+            r-httr
+            r-jsonlite
+            r-pdftools
+            r-readods
+            r-readxl
+            r-streamr
+            r-stringi
+            r-striprtf
+            r-tibble
+            r-xml2))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/quanteda/readtext")
     (synopsis
@@ -30200,8 +29310,8 @@ and formatted text files with additional meta-data, such including @code{.csv},
             "05pv5c4k4njkr0xw6i6ksiy34hcyx2lbiqpv5gxw81yrkm0rxfyk"))))
     (properties `((upstream-name . "packcircles")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-rcpp))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/mbedward/packcircles")
     (synopsis "Circle Packing")
@@ -30225,15 +29335,10 @@ and formatted text files with additional meta-data, such including @code{.csv},
     (properties `((upstream-name . "lwgeom")))
     (build-system r-build-system)
     (inputs
-     `(("geos" ,geos)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list geos proj sqlite zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-sf" ,r-sf)
-       ("r-units" ,r-units)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list r-rcpp r-sf r-units))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/r-spatial/lwgeom/")
     (synopsis "Bindings to Selected 'liblwgeom' Functions for Simple Features")
     (description
@@ -30256,13 +29361,13 @@ light-weight geometry library used by @url{http://postgis.net/,PostGIS}.")
     (properties `((upstream-name . "stars")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-abind" ,r-abind)
-        ("r-classint" ,r-classint)
-        ("r-lwgeom" ,r-lwgeom)
-        ("r-rlang" ,r-rlang)
-        ("r-sf" ,r-sf)
-        ("r-units" ,r-units)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-abind
+            r-classint
+            r-lwgeom
+            r-rlang
+            r-sf
+            r-units))
+    (native-inputs (list r-knitr))
     (home-page "https://r-spatial.github.io/stars/")
     (synopsis
       "Spatiotemporal Arrays, Raster and Vector Data Cubes")
@@ -30286,15 +29391,15 @@ by @code{sf}, and @code{NetCDF} bindings by @code{ncmeta} and @code{RNetCDF}.")
     (properties `((upstream-name . "tmaptools")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-dichromat" ,r-dichromat)
-        ("r-lwgeom" ,r-lwgeom)
-        ("r-magrittr" ,r-magrittr)
-        ("r-rcolorbrewer" ,r-rcolorbrewer)
-        ("r-sf" ,r-sf)
-        ("r-stars" ,r-stars)
-        ("r-units" ,r-units)
-        ("r-viridislite" ,r-viridislite)
-        ("r-xml" ,r-xml)))
+      (list r-dichromat
+            r-lwgeom
+            r-magrittr
+            r-rcolorbrewer
+            r-sf
+            r-stars
+            r-units
+            r-viridislite
+            r-xml))
     (home-page
       "https://github.com/mtennekes/tmaptools")
     (synopsis "Thematic Map Tools")
@@ -30318,9 +29423,7 @@ supply the workflow to create thematic maps.  This package also facilitates
     (properties `((upstream-name . "rworldmap")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-fields" ,r-fields)
-        ("r-maptools" ,r-maptools)
-        ("r-sp" ,r-sp)))
+      (list r-fields r-maptools r-sp))
     (home-page
       "https://github.com/AndySouth/rworldmap/")
     (synopsis "Mapping Global Data")
@@ -30342,14 +29445,14 @@ supply the workflow to create thematic maps.  This package also facilitates
     (properties `((upstream-name . "rtweet")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-httpuv" ,r-httpuv)
-        ("r-httr" ,r-httr)
-        ("r-jsonlite" ,r-jsonlite)
-        ("r-magrittr" ,r-magrittr)
-        ("r-progress" ,r-progress)
-        ("r-rcpp" ,r-rcpp)
-        ("r-tibble" ,r-tibble)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-httpuv
+            r-httr
+            r-jsonlite
+            r-magrittr
+            r-progress
+            r-rcpp
+            r-tibble))
+    (native-inputs (list r-knitr))
     (home-page
       "https://docs.ropensci.org/rtweet/")
     (synopsis "Collecting Twitter Data")
@@ -30393,12 +29496,8 @@ Application Program Interfaces (API)}.")
     (properties `((upstream-name . "eyelinker")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-intervals" ,r-intervals)
-        ("r-readr" ,r-readr)
-        ("r-stringi" ,r-stringi)
-        ("r-stringr" ,r-stringr)
-        ("r-tibble" ,r-tibble)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-intervals r-readr r-stringi r-stringr r-tibble))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/a-hurst/eyelinker")
     (synopsis
@@ -30421,7 +29520,7 @@ Application Program Interfaces (API)}.")
             "0ab0wr8nbwn1w1j9hpwfz52lm1sw0qk93713y9k0hpm3pw9dq4jr"))))
     (properties `((upstream-name . "BTM")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "https://github.com/bnosac/BTM")
     (synopsis "Biterm Topic Models for Short Text")
     (description
@@ -30452,7 +29551,7 @@ BTM-WWW13.pdf}.")
          "0ijhmwclpg5czs2sl2vykcw8qj2pxy26xf6knh62rqq6p6sm43f4"))))
     (properties `((upstream-name . "Delaporte")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://github.com/aadler/Delaporte")
     (synopsis "Statistical functions for the Delaporte distribution")
     (description
@@ -30504,8 +29603,7 @@ package.")
     (properties `((upstream-name . "revgeo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcurl" ,r-rcurl)
-       ("r-rjsonio" ,r-rjsonio)))
+     (list r-rcurl r-rjsonio))
     (home-page "https://cran.r-project.org/package=revgeo")
     (synopsis "Reverse geocoding")
     (description
@@ -30528,11 +29626,7 @@ minimal hassle.")
     (properties `((upstream-name . "qpcR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-minpack-lm" ,r-minpack-lm)
-       ("r-rgl" ,r-rgl)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-mass r-matrix r-minpack-lm r-rgl r-robustbase))
     (home-page "https://cran.r-project.org/package=qpcR")
     (synopsis "Modelling and analysis of real-time PCR data")
     (description
@@ -30555,10 +29649,8 @@ quantitative real-time polymerase chain reaction (qPCR).")
     (properties `((upstream-name . "textplot")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-data-table" ,r-data-table)
-        ("r-lattice" ,r-lattice)
-        ("r-matrix" ,r-matrix)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-data-table r-lattice r-matrix))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/bnosac/textplot")
     (synopsis "Text Plots")
     (description
@@ -30648,8 +29740,8 @@ importance.")
             "1dhba0yfxjd5rlqsxp5a7s2hclfkla9wigsr39dlma67l6qjjmxn"))))
     (properties `((upstream-name . "elliptic")))
     (build-system r-build-system)
-    (inputs `(("pari-gp" ,pari-gp)))
-    (propagated-inputs `(("r-mass" ,r-mass)))
+    (inputs (list pari-gp))
+    (propagated-inputs (list r-mass))
     (home-page
       "https://github.com/RobinHankin/elliptic")
     (synopsis
@@ -30674,9 +29766,7 @@ complex functions.")
     (properties `((upstream-name . "hypergeo")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-contfrac" ,r-contfrac)
-        ("r-desolve" ,r-desolve)
-        ("r-elliptic" ,r-elliptic)))
+      (list r-contfrac r-desolve r-elliptic))
     (home-page
       "https://cran.r-project.org/web/packages/hypergeo/")
     (synopsis "The Gauss Hypergeometric Function")
@@ -30707,22 +29797,22 @@ complex functions.")
                 (string-append "'" (assoc-ref inputs "ffmpeg") "/bin/ffmpeg'"))))))))
     (inputs
       ;; For video output.
-      `(("ffmpeg" ,ffmpeg)))
-    (propagated-inputs
-      `(("r-ggplot2" ,r-ggplot2)
-        ("r-glue" ,r-glue)
-        ("r-plyr" ,r-plyr)
-        ("r-progress" ,r-progress)
-        ("r-rlang" ,r-rlang)
-        ("r-scales" ,r-scales)
-        ("r-stringi" ,r-stringi)
-        ("r-tweenr" ,r-tweenr)
-        ;; For GIF/SVG output. gifski is faster, but depends on Rust.
-        ("r-magick" ,r-magick)
-        ;; For HTML output.
-        ("r-base64enc" ,r-base64enc)
-        ("r-htmltools" ,r-htmltools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list ffmpeg))
+    (propagated-inputs
+      (list r-ggplot2
+            r-glue
+            r-plyr
+            r-progress
+            r-rlang
+            r-scales
+            r-stringi
+            r-tweenr
+            ;; For GIF/SVG output. gifski is faster, but depends on Rust.
+            r-magick
+            ;; For HTML output.
+            r-base64enc
+            r-htmltools))
+    (native-inputs (list r-knitr))
     (home-page "https://gganimate.com")
     (synopsis "Grammar of Animated Graphics")
     (description
@@ -30748,7 +29838,7 @@ in order to customise how it should change with time.")
             "1afmav7s29fb5cd920h6vrzg9cvc4jsidfalxpvhlh1b8mfr0df3"))))
     (properties `((upstream-name . "tzdb")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-cpp11" ,r-cpp11)))
+    (propagated-inputs (list r-cpp11))
     (home-page "https://github.com/r-lib/tzdb")
     (synopsis "Time Zone Database Information")
     (description
@@ -30777,21 +29867,21 @@ time zone manipulations.")
     (properties `((upstream-name . "vroom")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-bit64" ,r-bit64)
-        ("r-cli" ,r-cli)
-        ("r-cpp11" ,r-cpp11)
-        ("r-crayon" ,r-crayon)
-        ("r-glue" ,r-glue)
-        ("r-hms" ,r-hms)
-        ("r-lifecycle" ,r-lifecycle)
-        ("r-progress" ,r-progress)
-        ("r-rlang" ,r-rlang)
-        ("r-tibble" ,r-tibble)
-        ("r-tidyselect" ,r-tidyselect)
-        ("r-tzdb" ,r-tzdb)
-        ("r-vctrs" ,r-vctrs)
-        ("r-withr" ,r-withr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-bit64
+            r-cli
+            r-cpp11
+            r-crayon
+            r-glue
+            r-hms
+            r-lifecycle
+            r-progress
+            r-rlang
+            r-tibble
+            r-tidyselect
+            r-tzdb
+            r-vctrs
+            r-withr))
+    (native-inputs (list r-knitr))
     (home-page "https://vroom.r-lib.org")
     (synopsis
       "Read and Write Rectangular Text Data")
@@ -30815,9 +29905,7 @@ asynchronously from formatting.")
                 "1ijjhfy3v91fspid77rrkc5dkcb2lav37wc3f4k5lwrn24wzy5y8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-lattice" ,r-lattice)))
+     (list r-plyr r-rcpp r-lattice))
     (home-page "https://cran.r-project.org/web/packages/Rmisc/")
     (synopsis "Ryan Miscellaneous")
     (description "The Rmisc library contains functions for data analysis and
@@ -30837,8 +29925,7 @@ utility operations.")
     (properties `((upstream-name . "webutils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-curl r-jsonlite))
     (home-page "https://github.com/jeroen/webutils")
     (synopsis "Utility functions for developing web applications")
     (description
@@ -30861,13 +29948,11 @@ using either @code{httpuv} or @code{Rhttpd}.")
     (properties `((upstream-name . "protolite")))
     (build-system r-build-system)
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("r-jsonlite" ,r-jsonlite)
-       ("r-rcpp" ,r-rcpp)))
+     (list r-jsonlite r-rcpp))
     (native-inputs
-     `(("protobuf" ,protobuf)
-       ("pkg-config" ,pkg-config)))
+     (list protobuf pkg-config))
     (home-page "https://github.com/jeroen/protolite")
     (synopsis "Highly optimized protocol buffer serializers")
     (description
@@ -30894,24 +29979,24 @@ reading and writing arbitrary protocol-buffer data in R.")
     (properties `((upstream-name . "opencpu")))
     (build-system r-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
-    (propagated-inputs
-     `(("r-brew" ,r-brew)
-       ("r-curl" ,r-curl)
-       ("r-evaluate" ,r-evaluate)
-       ("r-httpuv" ,r-httpuv)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-mime" ,r-mime)
-       ("r-openssl" ,r-openssl)
-       ("r-protolite" ,r-protolite)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-remotes" ,r-remotes)
-       ("r-sys" ,r-sys)
-       ("r-webutils" ,r-webutils)
-       ("r-zip" ,r-zip)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list pandoc))
+    (propagated-inputs
+     (list r-brew
+           r-curl
+           r-evaluate
+           r-httpuv
+           r-jsonlite
+           r-knitr
+           r-mime
+           r-openssl
+           r-protolite
+           r-rappdirs
+           r-remotes
+           r-sys
+           r-webutils
+           r-zip))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://www.opencpu.org")
     (synopsis "API for embedded scientific computing")
     (description
@@ -30937,13 +30022,11 @@ Apache2.")
          "1gc1p9pgazhblk8jgykxxjpblylbaq5r9hdlw3ilz5g45yjjwcnc"))))
     (properties `((upstream-name . "exactextractr")))
     (build-system r-build-system)
-    (inputs `(("geos" ,geos)))
+    (inputs (list geos))
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sf" ,r-sf)))
+     (list r-raster r-rcpp r-sf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://isciences.gitlab.io/exactextractr/")
     (synopsis "Fast extraction from raster datasets using polygons")
     (description
@@ -30966,11 +30049,9 @@ the @code{raster} package that is suitable for extracting raster values using
     (properties `((upstream-name . "stringfish")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-rcppparallel" ,r-rcppparallel)))
+     (list r-rcpp r-rcppparallel))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/traversc/stringfish")
     (synopsis "Alternative string implementation")
     (description
@@ -31015,14 +30096,11 @@ package.")
          "077i181vh0izvsdy2d4366yir0ajg531g6d1s7ab044ssbphg38x"))))
     (properties `((upstream-name . "qs")))
     (build-system r-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (propagated-inputs
-     `(("r-rapiserialize" ,r-rapiserialize)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringfish" ,r-stringfish)))
+     (list r-rapiserialize r-rcpp r-stringfish))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/traversc/qs")
     (synopsis "Quick serialization of R objects")
     (description
@@ -31044,9 +30122,9 @@ object to and from disk.")
     (properties `((upstream-name . "rgeos")))
     (build-system r-build-system)
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (propagated-inputs
-     `(("r-sp" ,r-sp)))
+     (list r-sp))
     (home-page "https://cran.r-project.org/package=rgeos")
     (synopsis "Interface to Geometry Engine (GEOS)")
     (description
@@ -31068,17 +30146,17 @@ C API for topology operations on geometries.")
     (properties `((upstream-name . "tfruns")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-config" ,r-config)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-whisker" ,r-whisker)
-       ("r-yaml" ,r-yaml)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-base64enc
+           r-config
+           r-jsonlite
+           r-magrittr
+           r-reticulate
+           r-rlang
+           r-rstudioapi
+           r-tidyselect
+           r-whisker
+           r-yaml))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/rstudio/tfruns")
     (synopsis "Training run tools for TensorFlow")
     (description
@@ -31101,10 +30179,9 @@ runs.")
          "0fmaq1ggjyxgf2ss7qb8jk74sfwc3s1vc123pd5glclxcy1ib0j2"))))
     (properties `((upstream-name . "tfautograph")))
     (build-system r-build-system)
-    (inputs `(("tensorflow" ,tensorflow)))
+    (inputs (list tensorflow))
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-reticulate" ,r-reticulate)))
+     (list r-backports r-reticulate))
     (home-page "https://t-kalinowski.github.io/tfautograph/")
     (synopsis "Autograph R for Tensorflow")
     (description
@@ -31125,15 +30202,15 @@ Tensorflow graphs.")
          "0xgm8jb1hl8564vviqys3aqwzvfbh0d43m154cj07j9spdz306ng"))))
     (properties `((upstream-name . "tensorflow")))
     (build-system r-build-system)
-    (inputs `(("tensorflow" ,tensorflow)))
+    (inputs (list tensorflow))
     (propagated-inputs
-     `(("r-config" ,r-config)
-       ("r-processx" ,r-processx)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-tfautograph" ,r-tfautograph)
-       ("r-tfruns" ,r-tfruns)
-       ("r-yaml" ,r-yaml)))
+     (list r-config
+           r-processx
+           r-reticulate
+           r-rstudioapi
+           r-tfautograph
+           r-tfruns
+           r-yaml))
     (home-page "https://github.com/rstudio/tensorflow")
     (synopsis "R interface to TensorFlow")
     (description
@@ -31157,17 +30234,17 @@ between them.")
     (properties `((upstream-name . "keras")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-reticulate" ,r-reticulate)
-       ("r-rlang" ,r-rlang)
-       ("r-tensorflow" ,r-tensorflow)
-       ("r-tfruns" ,r-tfruns)
-       ("r-zeallot" ,r-zeallot)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ellipsis
+           r-generics
+           r-glue
+           r-magrittr
+           r-r6
+           r-reticulate
+           r-rlang
+           r-tensorflow
+           r-tfruns
+           r-zeallot))
+    (native-inputs (list r-knitr))
     (home-page "https://keras.rstudio.com")
     (synopsis "R Interface to 'Keras'")
     (description
@@ -31192,10 +30269,9 @@ and GPU devices.")
     (properties `((upstream-name . "zzlite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)))
+     (list r-httr r-jsonlite))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/package=zzlite")
     (synopsis "Wrapper for the Zamzar file conversion API")
     (description
@@ -31219,7 +30295,7 @@ files, images, movie formats, etc., etc.) through an R session.")
     (properties `((upstream-name . "zTree")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)))
+     (list r-plyr))
     (home-page "https://cran.r-project.org/package=zTree")
     (synopsis "Functions to import data from z-Tree into R")
     (description
@@ -31243,7 +30319,7 @@ carrying out economic experiments.")
      `((upstream-name . "DistributionUtils")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/package=DistributionUtils")
     (synopsis "Distribution utilities")
     (description
@@ -31269,13 +30345,10 @@ Bessel K function.")
     (properties `((upstream-name . "ztpln")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-distributionutils" ,r-distributionutils)
-       ("r-mixtools" ,r-mixtools)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)
-       ("r-rcppnumerical" ,r-rcppnumerical)))
+     (list r-distributionutils r-mixtools r-rcpp r-rcppeigen
+           r-rcppnumerical))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/mattocci27/ztpln")
     (synopsis "Zero-truncated Poisson lognormal distribution")
     (description
@@ -31298,9 +30371,9 @@ lognormal distribution and their mixture distribution.")
     (properties `((upstream-name . "zscorer")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-shiny" ,r-shiny)))
+     (list r-shiny))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/nutriverse/zscorer")
     (synopsis "Child Anthropometry z-Score Calculator")
     (description
@@ -31325,8 +30398,7 @@ Standards.")
     (properties `((upstream-name . "ZRA")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dygraphs" ,r-dygraphs)
-       ("r-forecast" ,r-forecast)))
+     (list r-dygraphs r-forecast))
     (home-page "https://cran.r-project.org/package=ZRA")
     (synopsis "Dynamic plots for time series forecasting")
     (description
@@ -31348,13 +30420,13 @@ with the dynamic plots from @code{dygraphs}.")
     (properties `((upstream-name . "rfigshare")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-httpuv" ,r-httpuv)
-       ("r-httr" ,r-httr)
-       ("r-plyr" ,r-plyr)
-       ("r-rjsonio" ,r-rjsonio)
-       ("r-xml" ,r-xml)
-       ("r-yaml" ,r-yaml)))
+     (list r-ggplot2
+           r-httpuv
+           r-httr
+           r-plyr
+           r-rjsonio
+           r-xml
+           r-yaml))
     (home-page "https://github.com/ropensci/rfigshare")
     (synopsis "R Interface to figshare")
     (description
@@ -31376,10 +30448,7 @@ to archive and assign DOIs to data, software, figures, and more.")
     (properties `((upstream-name . "dismo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-raster" ,r-raster)
-       ("r-rcpp" ,r-rcpp)
-       ("r-sp" ,r-sp)
-       ("r-terra" ,r-terra)))
+     (list r-raster r-rcpp r-sp r-terra))
     (home-page "https://rspatial.org/raster/sdm/")
     (synopsis "Species distribution modeling")
     (description
@@ -31402,19 +30471,19 @@ of known occurrences of a species.")
     (properties `((upstream-name . "zoon")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dismo" ,r-dismo)
-       ("r-plyr" ,r-plyr)
-       ("r-randomforest" ,r-randomforest)
-       ("r-raster" ,r-raster)
-       ("r-rcurl" ,r-rcurl)
-       ("r-rfigshare" ,r-rfigshare)
-       ("r-rgdal" ,r-rgdal)
-       ("r-roxygen2" ,r-roxygen2)
-       ("r-rworldmap" ,r-rworldmap)
-       ("r-sp" ,r-sp)
-       ("r-testthat" ,r-testthat)))
+     (list r-dismo
+           r-plyr
+           r-randomforest
+           r-raster
+           r-rcurl
+           r-rfigshare
+           r-rgdal
+           r-roxygen2
+           r-rworldmap
+           r-sp
+           r-testthat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/zoonproject/zoon")
     (synopsis "Reproducible, accessible and shareable species distribution modelling")
     (description
@@ -31437,11 +30506,7 @@ fully reproducible.")
     (properties `((upstream-name . "paws.common")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-digest" ,r-digest)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-xml2" ,r-xml2)))
+     (list r-base64enc r-digest r-httr r-jsonlite r-xml2))
     (home-page "https://cran.r-project.org/package=paws.common")
     (synopsis "Paws low-level Amazon Web Services API")
     (description
@@ -31467,7 +30532,7 @@ Service (S3).")
      `((upstream-name . "paws.customer.engagement")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services customer engagement services")
     (description
@@ -31491,7 +30556,7 @@ service, and more.")
      `((upstream-name . "paws.cost.management")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services cost management services")
     (description
@@ -31513,7 +30578,7 @@ more.")
     (properties `((upstream-name . "paws.developer.tools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services developer tools services")
     (description
@@ -31535,7 +30600,7 @@ deployment, and more.")
     (properties `((upstream-name . "paws.end.user.computing")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services end user computing services")
     (description
@@ -31559,7 +30624,7 @@ and more.")
      `((upstream-name . "paws.application.integration")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services application integration services")
     (description
@@ -31583,7 +30648,7 @@ Simple Notification Service (SNS) publish/subscribe messaging, and more.")
      `((upstream-name . "paws.security.identity")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services security, identity, and compliance services")
     (description
@@ -31608,7 +30673,7 @@ more.")
      `((upstream-name . "paws.analytics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services analytics services")
     (description
@@ -31632,7 +30697,7 @@ Elasticsearch search engine, and more.")
      `((upstream-name . "paws.machine.learning")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services machine learning services")
     (description
@@ -31656,7 +30721,7 @@ natural language processing, speech recognition, translation, and more.")
      `((upstream-name . "paws.management")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services management and governance services")
     (description
@@ -31680,7 +30745,7 @@ monitoring, Auto Scaling for automatically scaling resources, and more.")
      `((upstream-name . "paws.networking")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services networking and content delivery services")
     (description
@@ -31703,7 +30768,7 @@ CloudFront content delivery, load balancing, and more.")
     (properties `((upstream-name . "paws.database")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis
      "Amazon Web Services Database Services")
@@ -31727,7 +30792,7 @@ database, and more.")
     (properties `((upstream-name . "paws.storage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services storage services")
     (description
@@ -31749,7 +30814,7 @@ services, including Simple Storage Service (S3).")
     (properties `((upstream-name . "paws.compute")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-common" ,r-paws-common)))
+     (list r-paws-common))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services compute services")
     (description
@@ -31772,19 +30837,19 @@ functions-as-a-service, containers, batch processing, and more.")
     (properties `((upstream-name . "paws")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-paws-analytics" ,r-paws-analytics)
-       ("r-paws-application-integration" ,r-paws-application-integration)
-       ("r-paws-compute" ,r-paws-compute)
-       ("r-paws-cost-management" ,r-paws-cost-management)
-       ("r-paws-customer-engagement" ,r-paws-customer-engagement)
-       ("r-paws-database" ,r-paws-database)
-       ("r-paws-developer-tools" ,r-paws-developer-tools)
-       ("r-paws-end-user-computing" ,r-paws-end-user-computing)
-       ("r-paws-machine-learning" ,r-paws-machine-learning)
-       ("r-paws-management" ,r-paws-management)
-       ("r-paws-networking" ,r-paws-networking)
-       ("r-paws-security-identity" ,r-paws-security-identity)
-       ("r-paws-storage" ,r-paws-storage)))
+     (list r-paws-analytics
+           r-paws-application-integration
+           r-paws-compute
+           r-paws-cost-management
+           r-paws-customer-engagement
+           r-paws-database
+           r-paws-developer-tools
+           r-paws-end-user-computing
+           r-paws-machine-learning
+           r-paws-management
+           r-paws-networking
+           r-paws-security-identity
+           r-paws-storage))
     (home-page "https://github.com/paws-r/paws")
     (synopsis "Amazon Web Services software development kit")
     (description
@@ -31808,16 +30873,16 @@ DynamoDB NoSQL database, and Lambda functions-as-a-service.")
      `((upstream-name . "zoomGroupStats")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lubridate" ,r-lubridate)
-       ("r-magick" ,r-magick)
-       ("r-openxlsx" ,r-openxlsx)
-       ("r-paws" ,r-paws)
-       ("r-pbapply" ,r-pbapply)
-       ("r-stringr" ,r-stringr)
-       ("r-syuzhet" ,r-syuzhet)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-data-table
+           r-dplyr
+           r-lubridate
+           r-magick
+           r-openxlsx
+           r-paws
+           r-pbapply
+           r-stringr
+           r-syuzhet))
+    (native-inputs (list r-knitr))
     (home-page "http://zoomgroupstats.org")
     (synopsis "Analyze text, audio, and video from Zoom meetings")
     (description
@@ -31862,10 +30927,9 @@ zoom/navigate any plot when called with any active plot.")
     (properties `((upstream-name . "zoolog")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rdpack" ,r-rdpack)
-       ("r-stringi" ,r-stringi)))
+     (list r-rdpack r-stringi))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://josempozo.github.io/zoolog/")
     (synopsis "Zooarchaeological analysis with log-ratios")
     (description
@@ -31917,12 +30981,12 @@ large datasets.")
     (properties `((upstream-name . "mlearning")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-e1071" ,r-e1071)
-       ("r-ipred" ,r-ipred)
-       ("r-mass" ,r-mass)
-       ("r-nnet" ,r-nnet)
-       ("r-randomforest" ,r-randomforest)))
+     (list r-class
+           r-e1071
+           r-ipred
+           r-mass
+           r-nnet
+           r-randomforest))
     (home-page "http://www.sciviews.org/zooimage")
     (synopsis "Machine learning algorithms with unified interface")
     (description
@@ -31944,18 +31008,18 @@ algorithms.  Confusion matrices are provided too.")
     (properties `((upstream-name . "zooimage")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-dt" ,r-dt)
-       ("r-filehash" ,r-filehash)
-       ("r-jpeg" ,r-jpeg)
-       ("r-mass" ,r-mass)
-       ("r-mda" ,r-mda)
-       ("r-mlearning" ,r-mlearning)
-       ("r-png" ,r-png)
-       ("r-shiny" ,r-shiny)
-       ("r-svdialogs" ,r-svdialogs)
-       ("r-svmisc" ,r-svmisc)
-       ("r-tiff" ,r-tiff)))
+     (list r-digest
+           r-dt
+           r-filehash
+           r-jpeg
+           r-mass
+           r-mda
+           r-mlearning
+           r-png
+           r-shiny
+           r-svdialogs
+           r-svmisc
+           r-tiff))
     (home-page "http://www.sciviews.org/zooimage")
     (synopsis "Analysis of numerical plankton images")
     (description
@@ -31979,8 +31043,8 @@ size spectra or biomasses, etc.).")
          "0grc378xppv0303sf4flfqz5002vq5a23nzbq4bsff41rww7dihc"))))
     (properties `((upstream-name . "zooaRch")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-ggplot2" ,r-ggplot2)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (propagated-inputs (list r-ggplot2))
+    (native-inputs (list r-knitr))
     (home-page
      "https://cran.r-project.org/package=zooaRch")
     (synopsis
@@ -32007,10 +31071,9 @@ and analyze zooarchaeological data.")
     (properties `((upstream-name . "zonebuilder")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-sf" ,r-sf)))
+     (list r-rcolorbrewer r-sf))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/zonebuilders/zonebuilder")
     (synopsis "Create and explore geographic zoning systems")
     (description
@@ -32035,12 +31098,8 @@ concentric rings and radial lines emanating from a central point.")
     (properties `((upstream-name . "zonator")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-raster" ,r-raster)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-reshape2" ,r-reshape2)
-       ("r-rgdal" ,r-rgdal)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-ggplot2 r-raster r-rcolorbrewer r-reshape2 r-rgdal))
+    (native-inputs (list r-knitr))
     (home-page "https://cbig.github.io/zonator/")
     (synopsis "Utilities for Zonation spatial conservation prioritization")
     (description
@@ -32085,13 +31144,13 @@ convert dates to MMWR day, week, and year and the reverse.")
     (properties `((upstream-name . "crul")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-httpcode" ,r-httpcode)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)
-       ("r-urltools" ,r-urltools)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-curl
+           r-httpcode
+           r-jsonlite
+           r-mime
+           r-r6
+           r-urltools))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ropensci/crul")
     (synopsis "HTTP client")
     (description
@@ -32114,15 +31173,15 @@ inspiration from Ruby's @code{faraday} gem.")
     (properties `((upstream-name . "gistr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-crul" ,r-crul)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-magrittr" ,r-magrittr)
-       ("r-rmarkdown" ,r-rmarkdown)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-assertthat
+           r-crul
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-knitr
+           r-magrittr
+           r-rmarkdown))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ropensci/gistr")
     (synopsis "Work with Gists in browser")
     (description
@@ -32168,16 +31227,16 @@ authenticated.")
                            (map car mapping)
                            (map cdr mapping)))))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-gistr" ,r-gistr)
-       ("r-hexbin" ,r-hexbin)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-magrittr" ,r-magrittr)
-       ("r-maps" ,r-maps)
-       ("r-pryr" ,r-pryr)
-       ("r-scales" ,r-scales)))
+     (list r-digest
+           r-gistr
+           r-hexbin
+           r-htmlwidgets
+           r-jsonlite
+           r-lazyeval
+           r-magrittr
+           r-maps
+           r-pryr
+           r-scales))
     ;; Version 0.12.15 is mentioned in lib/htmlwidgets/rbokeh.yaml.
     (native-inputs
      `(("esbuild" ,esbuild)
@@ -32218,11 +31277,9 @@ backed by the @url{https://bokeh.pydata.org/, Bokeh visualization library}.")
     (properties `((upstream-name . "fauxpas")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-httpcode" ,r-httpcode)
-       ("r-r6" ,r-r6)
-       ("r-whisker" ,r-whisker)))
+     (list r-httpcode r-r6 r-whisker))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://docs.ropensci.org/fauxpas")
     (synopsis "HTTP error helpers")
     (description
@@ -32248,14 +31305,14 @@ configuration of status code, short description, and verbose message.")
     (properties `((upstream-name . "webmockr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crul" ,r-crul)
-       ("r-curl" ,r-curl)
-       ("r-fauxpas" ,r-fauxpas)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-r6" ,r-r6)
-       ("r-urltools" ,r-urltools)))
+     (list r-base64enc
+           r-crul
+           r-curl
+           r-fauxpas
+           r-jsonlite
+           r-magrittr
+           r-r6
+           r-urltools))
     (home-page "https://github.com/ropensci/webmockr")
     (synopsis "Stubbing and setting expectations on HTTP Requests")
     (description
@@ -32280,9 +31337,9 @@ tests or outside of a testing context.")
     (properties `((upstream-name . "mockery")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-testthat" ,r-testthat)))
+     (list r-testthat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jfiksel/mockery")
     (synopsis "Mocking library for R")
     (description
@@ -32308,17 +31365,17 @@ present in the @code{testthat} package.")
     (properties `((upstream-name . "zoltr")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64url" ,r-base64url)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mmwrweek" ,r-mmwrweek)
-       ("r-mockery" ,r-mockery)
-       ("r-readr" ,r-readr)
-       ("r-rlang" ,r-rlang)
-       ("r-webmockr" ,r-webmockr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-base64url
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-magrittr
+           r-mmwrweek
+           r-mockery
+           r-readr
+           r-rlang
+           r-webmockr))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/reichlab/zoltr")
     (synopsis "Interface to the Zoltar forecast repository API")
     (description
@@ -32345,10 +31402,7 @@ deleting and uploading forecast data, and downloading scores.")
     (properties `((upstream-name . "zoib")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-coda" ,r-coda)
-       ("r-formula" ,r-formula)
-       ("r-rjags" ,r-rjags)))
+     (list r-abind r-coda r-formula r-rjags))
     (home-page "https://www.r-project.org")
     (synopsis "Bayesian inference for beta regression")
     (description
@@ -32369,7 +31423,7 @@ Monte Carlo approach implemented in JAGS.")
         (base32 "08kym5i5fvbf5xhh9qdszp4jdgyc7j7zpnwzy68wabqz73aff6sg"))))
     (properties `((upstream-name . "logger")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page "https://daroczig.github.io/logger/")
     (synopsis "Lightweight and flexible logging utility")
     (description
@@ -32391,11 +31445,8 @@ formatting and delivering log messages with low overhead.")
     (properties `((upstream-name . "fasterize")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-raster" ,r-raster)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rcpparmadillo" ,r-rcpparmadillo)
-        ("r-sp" ,r-sp)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-raster r-rcpp r-rcpparmadillo r-sp))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/ecohealthalliance/fasterize")
     (synopsis "Fast Polygon to Raster Conversion")
     (description
@@ -32419,20 +31470,19 @@ options for aggregating multi-layer rasters.")
     (properties `((upstream-name . "BIEN")))
     (build-system r-build-system)
     (native-inputs
-      `(("r-knitr" ,r-knitr)
-        ("r-testthat" ,r-testthat)))
-    (propagated-inputs
-      `(("r-ape" ,r-ape)
-        ("r-dbi" ,r-dbi)
-        ("r-doparallel" ,r-doparallel)
-        ("r-fasterize" ,r-fasterize)
-        ("r-foreach" ,r-foreach)
-        ("r-raster" ,r-raster)
-        ("r-rgdal" ,r-rgdal)
-        ("r-rgeos" ,r-rgeos)
-        ("r-rpostgresql" ,r-rpostgresql)
-        ("r-sf" ,r-sf)
-        ("r-sp" ,r-sp)))
+      (list r-knitr r-testthat))
+    (propagated-inputs
+      (list r-ape
+            r-dbi
+            r-doparallel
+            r-fasterize
+            r-foreach
+            r-raster
+            r-rgdal
+            r-rgeos
+            r-rpostgresql
+            r-sf
+            r-sp))
     (home-page "https://cran.r-project.org/package=BIEN")
     (synopsis "Tools for accessing the BIEN database")
     (description
@@ -32457,13 +31507,9 @@ constructing and executing optimized SQL queries.")
     (properties `((upstream-name . "ggh4x")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ggplot2 r-gtable r-rlang r-scales r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/teunbrand/ggh4x")
     (synopsis "Extension for ggplot2")
     (description "This package is a @code{ggplot2} extension.  It provides some
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index d50056e948..065ff6c8e8 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,7 +97,7 @@ shapes, lines and text to buffers.")
        #:cargo-development-inputs
        (("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.4))))
     (inputs
-     `(("wayland" ,wayland)))))
+     (list wayland))))
 
 (define-public rust-ansi-colours-1
   (package
@@ -137,7 +138,7 @@ approximated by values supported by the terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ansi_term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ljmkbilxgmhavxvxqa7qvm6f3fjggi7q2l3a72q9x0cxjvrnanm"))))
@@ -166,7 +167,7 @@ text or blue underlined text, on ANSI terminals.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ansi_term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16wpvrghvd0353584i1idnsgm0r3vchg8fyrm0x8ayv1rgvbljgf"))))
@@ -210,11 +211,9 @@ text or blue underlined text, on ANSI terminals.")
         (("rust-bindgen" ,rust-bindgen-0.54)
          ("rust-metadeps" ,rust-metadeps-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libaom" ,libaom)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list libaom clang llvm))
     (home-page "https://github.com/rust-av/aom-rs")
     (synopsis "FFI bindings to aom")
     (description "This package provides FFI bindings to aom.")
@@ -240,11 +239,9 @@ text or blue underlined text, on ANSI terminals.")
        (("rust-bindgen" ,rust-bindgen-0.53)
         ("rust-metadeps" ,rust-metadeps-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libaom" ,libaom)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))))
+     (list libaom clang llvm))))
 
 (define-public rust-ascii-canvas-2
   (package
@@ -592,11 +589,9 @@ and iOS.")
        (("rust-bindgen" ,rust-bindgen-0.54)
         ("rust-metadeps" ,rust-metadeps-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dav1d" ,dav1d)
-       ("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list dav1d clang llvm))
     (home-page "https://github.com/rust-av/dav1d-rs")
     (synopsis "FFI bindings to dav1d")
     (description "This package provides FFI bindings to dav1d.")
@@ -983,8 +978,7 @@ EUI-64, also known as MAC-48 media access control addresses.")
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-winit" ,rust-winit-0.24))))
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-egl" ,rust-wayland-egl-0.28)))
+     (list rust-wayland-client-0.28 rust-wayland-egl-0.28))
     (home-page "https://github.com/tomaka/glutin")
     (synopsis "Cross-platform OpenGL context provider")
     (description "This package provides an OpenGL context provider.")
@@ -1995,7 +1989,7 @@ interactive applications.")
        #:cargo-development-inputs
        (("rust-avif-parse" ,rust-avif-parse-0.13))))
     (native-inputs
-     `(("nasm" ,nasm)))                 ;for building rav1e
+     (list nasm))                 ;for building rav1e
     (home-page "https://lib.rs/ravif")
     (synopsis "Library for encoding images in AVIF format")
     (description "This package is a rav1e-based pure Rust library for encoding
@@ -2055,7 +2049,7 @@ images in AVIF format.")
      (origin
        (method url-fetch)
        (uri (crate-uri "rgb" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1lrv3x5h1lvdzg1qqr8aiysz978m35zpjdkyicnvkarnh8zkqzr8"))))
@@ -2212,7 +2206,7 @@ applications.")
        #:cargo-development-inputs
        (("rust-andrew" ,rust-andrew-0.2))))
     (inputs
-     `(("wayland" ,wayland)))))
+     (list wayland))))
 
 (define-public rust-tiff-0.6
   (package
@@ -2326,14 +2320,14 @@ applications.")
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-downcast-rs" ,rust-downcast-rs-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-nix" ,rust-nix-0.18)
-       ("rust-scoped-tls" ,rust-scoped-tls-1)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-bitflags-1
+           rust-downcast-rs-1
+           rust-libc-0.2
+           rust-nix-0.18
+           rust-scoped-tls-1
+           rust-wayland-commons-0.28
+           rust-wayland-scanner-0.28
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis
      "Rust bindings to the standard C implementation of the wayland protocol")
@@ -2420,10 +2414,8 @@ the wayland protocol, client side.")
         ("rust-once-cell" ,rust-once-cell-1)
         ("rust-smallvec" ,rust-smallvec-1))))
     (inputs
-     `(("rust-nix" ,rust-nix-0.18)
-       ("rust-once-cell" ,rust-once-cell-1)
-       ("rust-smallvec" ,rust-smallvec-1)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-nix-0.18 rust-once-cell-1 rust-smallvec-1
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Types and structures used by wayland-client and wayland-server")
     (description
@@ -2488,9 +2480,7 @@ and wayland-server.")
        (("rust-nix" ,rust-nix-0.18)
         ("rust-xcursor" ,rust-xcursor-0.3))))
     (inputs
-     `(("rust-nix" ,rust-nix-0.18)
-       ("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-xcursor" ,rust-xcursor-0.3)))
+     (list rust-nix-0.18 rust-wayland-client-0.28 rust-xcursor-0.3))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Bindings to libwayland-cursor")
     (description
@@ -2512,11 +2502,10 @@ properly display animated cursors.")
         (base32 "1xd7iap0x4sidmy9dv02cdnxjhnbk9li7r7f39x9cg0i8xs50ly6"))))
     (build-system cargo-build-system)
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-wayland-client-0.28 rust-wayland-sys-0.28))
     ;; For the PKG_CONFIG_PATH environment variable.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Bindings to libwayland-egl")
     (description
@@ -2542,11 +2531,9 @@ initializing an OpenGL or Vulkan context.")
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-wayland-client" ,rust-wayland-client-0.28)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-server" ,rust-wayland-server-0.28)))
+     (list rust-bitflags-1 rust-wayland-client-0.28
+           rust-wayland-commons-0.28 rust-wayland-scanner-0.28
+           rust-wayland-server-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Generated API for the officials Wayland protocol extensions")
     (description
@@ -2614,9 +2601,7 @@ extensions.")
         (base32 "0g8ky63qk27in7zajycj3fyydsxlj19hanfcvr8d7z5kcxbvl43h"))))
     (build-system cargo-build-system)
     (inputs
-     `(("rust-proc-macro2" ,rust-proc-macro2-1)
-       ("rust-quote" ,rust-quote-1)
-       ("rust-xml-rs" ,rust-xml-rs-0.8)))
+     (list rust-proc-macro2-1 rust-quote-1 rust-xml-rs-0.8))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "Generate Rust APIs from XML Wayland protocol files")
     (description
@@ -2684,16 +2669,16 @@ wayland-client crate for usable bindings.")
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-scoped-tls" ,rust-scoped-tls-1))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-downcast-rs" ,rust-downcast-rs-1)
-       ("rust-lazy-static" ,rust-lazy-static-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-nix" ,rust-nix-0.18)
-       ("rust-parking-lot" ,rust-parking-lot-0.11)
-       ("rust-scoped-tls" ,rust-scoped-tls-1)
-       ("rust-wayland-commons" ,rust-wayland-commons-0.28)
-       ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
-       ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
+     (list rust-bitflags-1
+           rust-downcast-rs-1
+           rust-lazy-static-1
+           rust-libc-0.2
+           rust-nix-0.18
+           rust-parking-lot-0.11
+           rust-scoped-tls-1
+           rust-wayland-commons-0.28
+           rust-wayland-scanner-0.28
+           rust-wayland-sys-0.28))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis
      "Bindings to the standard C implementation of the wayland protocol")
@@ -2784,12 +2769,10 @@ the wayland protocol, server side.")
                   (string-append libwayland "/lib/" shared-lib)))
                #t))))))
     (inputs
-     `(("rust-dlib" ,rust-dlib-0.4)
-       ("rust-lazy-static" ,rust-lazy-static-1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-pkg-config" ,rust-pkg-config-0.3)))
+     (list rust-dlib-0.4 rust-lazy-static-1 rust-libc-0.2
+           rust-pkg-config-0.3))
     (propagated-inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (home-page "https://github.com/smithay/wayland-rs")
     (synopsis "FFI bindings to the various @file{libwayland-*.so} libraries")
     (description
@@ -2879,7 +2862,7 @@ crate @code{rust-wayland-client} for usable bindings.")
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-x11-dl" ,rust-x11-dl-2))))
     (inputs
-     `(("rust-wayland-client" ,rust-wayland-client-0.28)))
+     (list rust-wayland-client-0.28))
     (home-page "https://github.com/rust-windowing/winit")
     (synopsis "Window creation library")
     (description
@@ -3071,7 +3054,7 @@ the platform-specific getters provided by winit, or another library.")
      `(#:tests? #f  ; Tests require display server.
        #:cargo-inputs (("rust-xcb" ,rust-xcb-0.9))))
     (native-inputs
-     `(("python" ,python)))))
+     (list python))))
 
 (define-public rust-x11-dl-2
   (package
diff --git a/gnu/packages/crates-gtk.scm b/gnu/packages/crates-gtk.scm
index 0d72fbf321..b22905629f 100644
--- a/gnu/packages/crates-gtk.scm
+++ b/gnu/packages/crates-gtk.scm
@@ -55,8 +55,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)))
+     (list atk glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libatk-1")
     (description "FFI bindings to libatk-1")
@@ -86,8 +85,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)))
+     (list atk glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the ATK library")
     (description "Rust bindings for the ATK library")
@@ -119,7 +117,7 @@
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the Cairo library")
     (description "Rust bindings for the Cairo library")
@@ -198,7 +196,7 @@
         ("rust-winapi" ,rust-winapi-0.3)
         ("rust-x11" ,rust-x11-2))))
     (inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libcairo")
     (description "This package provides FFI bindings to libcairo.")
@@ -255,11 +253,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
+     (list cairo gdk-pixbuf glib gtk+ pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the GDK 3 library")
     (description "This package provides Rust bindings for the GDK 3 library.")
@@ -321,7 +315,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)))
+     (list gdk-pixbuf))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the GdkPixbuf library")
     (description "Rust bindings for the GdkPixbuf library")
@@ -405,7 +399,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)))
+     (list gdk-pixbuf))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgdk_pixbuf-2.0")
     (description "This package provides FFI bindings to @code{libgdk_pixbuf-2.0}.")
@@ -463,11 +457,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("pango" ,pango)))
+     (list cairo gdk-pixbuf gtk+ glib pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgdk-3")
     (description "FFI bindings to libgdk-3")
@@ -533,7 +523,7 @@
        (("rust-gir-format-check" ,rust-gir-format-check-0.1)
         ("rust-serial-test" ,rust-serial-test-0.4))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the Gio library")
     (description "Rust bindings for the Gio library")
@@ -621,7 +611,7 @@
         ("rust-system-deps" ,rust-system-deps-1)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgio-2.0")
     (description "This package provides FFI bindings to libgio-2.0.")
@@ -697,7 +687,7 @@
         ("rust-libc" ,rust-libc-0.2)
         ("rust-once-cell" ,rust-once-cell-1))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the GLib library")
     (description "Rust bindings for the GLib library")
@@ -807,7 +797,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libglib-2.0")
     (description "This package provides FFI bindings to libglib-2.0.")
@@ -858,7 +848,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgobject-2.0")
     (description "This package provides FFI bindings to libgobject-2.0.")
@@ -925,11 +915,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
+     (list atk cairo glib gtk+ pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the GTK+ 3 library")
     (description "This package provides Rust bindings for the GTK+ 3 library.")
@@ -985,7 +971,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgtk-3")
     (description "This package provides FFI bindings to libgtk-3.")
@@ -1017,7 +1003,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the Pango library")
     (description "Rust bindings for the Pango library")
@@ -1097,7 +1083,7 @@
         ("rust-libc" ,rust-libc-0.2)
         ("rust-system-deps" ,rust-system-deps-1))))
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libpango-1.0")
     (description "This package provides FFI bindings to @code{libpango-1.0}.")
@@ -1156,7 +1142,7 @@
        #:cargo-development-inputs
        (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gtk-rs.org/")
     (synopsis "Rust bindings for the PangoCairo library")
     (description
@@ -1218,7 +1204,7 @@
        (("rust-shell-words" ,rust-shell-words-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gtk-rs.org/")
     (synopsis "FFI bindings to libgtk-3")
     (description "This package provides FFI bindings to libgtk-3.")
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index e95995a781..28bc88c887 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2020 André Batista <nandre@riseup.net>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
@@ -21,6 +22,7 @@
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Jacob Hrbek <kreyren@rixotstudio.cz>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1031,8 +1033,7 @@ deadlock, like the standard Barrier).")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-tokio" ,rust-tokio-1.8))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("openssl" ,openssl)))
+    (native-inputs (list pkg-config openssl))
     (home-page "https://github.com/brave/adblock-rust/")
     (synopsis "Adblock Plus syntax filter parsing and matching")
     (description "This package provides native Rust module for Adblock Plus
@@ -1195,7 +1196,7 @@ checksum, used in the zlib compression format.")
         (method url-fetch)
         (uri (crate-uri "adler32" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0bgks405vz823bphgwhj4l9h6vpfh900s0phfk4qqijyh9xhfysn"))))
@@ -2026,7 +2027,7 @@ escape codes.")
       (origin
         (method url-fetch)
         (uri (crate-uri "antidote" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19g2sw2qa2ibnh4x7j1snk46593jgx6y7rnvva496ynq61af5z9l"))))
@@ -2770,10 +2771,9 @@ a re-write of the official Arrow crate using transmute-free operations.")
         ("rust-tokio" ,rust-tokio-1)
         ("rust-url" ,rust-url-2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("openssl" ,openssl)))
+     (list libxml2 openssl))
     (home-page "https://gitlab.com/news-flash/article_scraper")
     (synopsis "Scrap article contents from the web")
     (description "This package provides a crate to scrap article contents from
@@ -4134,7 +4134,7 @@ methods.")
      (origin
        (method url-fetch)
        (uri (crate-uri "atty" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1s7yslcs6a28c5vz7jwj63lkfgyx8mx99fdirlhi9lbhhzhrpcyr"))))
@@ -4201,7 +4201,7 @@ methods.")
       (origin
         (method url-fetch)
         (uri (crate-uri "autocfg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1chwgimpx5z7xbag7krr9d8asxfqbh683qhgl9kn3hxk2l0djj8x"))))
@@ -4532,7 +4532,7 @@ trace (backtrace) at runtime in a Rust program.")
       (origin
         (method url-fetch)
         (uri (crate-uri "backtrace-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16a3igz22q9lnnjjr77f4k8ci48v8zdwrs67khx3h7wx3jzfpyqq"))))
@@ -4753,7 +4753,7 @@ c6e7d37.  However, this package works only up to 128 bytes.")
       (origin
         (method url-fetch)
         (uri (crate-uri "base-x" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1hfy0wv7j5ynd73yk1vyr32pqa77rp15lkrc54f8ky9c6hcbc80v"))))
@@ -4835,7 +4835,7 @@ Cow.")
       (origin
         (method url-fetch)
         (uri (crate-uri "bencher" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1x8p2xblgqssay8cdykp5pkfc0np0jk5bs5cx4f5av097aav9zbx"))))
@@ -5082,7 +5082,7 @@ bindings to C and C++ libraries.")
         (base32
          "0hxlvy9q9984rr3rqaxwmgxjrd9wh11mcc161hv3shz6b7jkrcbm"))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
@@ -5151,7 +5151,7 @@ bindings to C and C++ libraries.")
         ("rust-diff" ,rust-diff-0.1)
         ("rust-shlex" ,rust-shlex-0.1))))
     (inputs
-     `(("clang" ,clang)))))
+     (list clang))))
 
 (define-public rust-bindgen-0.53
   (package
@@ -5788,7 +5788,7 @@ types.")
       (origin
         (method url-fetch)
         (uri (crate-uri "bitflags" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg"))))
@@ -6135,7 +6135,7 @@ BLAKE2bp hash functions.")
       (origin
         (method url-fetch)
         (uri (crate-uri "blas-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0h14zjycwc76v15h8qll9z1xiryvmpvsb5gam97pqpdjrrwv5c8k"))))
@@ -8102,7 +8102,7 @@ messages.")
         (base32 "17p0y0yk68pzsnpmaklhiqrrlrrv0ld8nhbg4qflmgibshi8b69p"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("capnproto" ,capnproto)))
+     (list capnproto))
     (arguments
      `(#:cargo-inputs
        (("rust-capnp" ,rust-capnp-0.13)
@@ -8239,7 +8239,6 @@ capabilities.")
      `(;; The test suite is disabled as the internal 'cargo-test-macro' and
        ;; 'cargo-test-support' crates are not included in the release.
        #:tests? #f
-       #:rust ,rust-1.52        ;transitively inherited from rust-sized-chunks
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-atty" ,rust-atty-0.2)
@@ -8299,12 +8298,9 @@ capabilities.")
         ("rust-walkdir" ,rust-walkdir-2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libssh2 openssl zlib))
     (home-page "https://crates.io")
     (synopsis "Package manager for Rust")
     (description "Cargo, a package manager for Rust.  This package provides
@@ -8425,7 +8421,7 @@ supported by Cargo.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cargon" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1cszlab7jk736p0lb50ag4l9nv72m7j41bwrmygl0lr4iz0350w2"))))
@@ -8500,7 +8496,7 @@ box''.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cblas-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rgsn3klhhh09d8qf3b87zl4rwk93l2g0qzh9hhb0lff5kcfrzmn"))))
@@ -8522,7 +8518,7 @@ box''.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cc" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0j7d7h4n81z5f22l3v8ggjvvw8m64636nlaqax4x1y44da1rc12c"))))
@@ -8582,7 +8578,7 @@ that need to represent UTF-16 data as 8-bit characters.")
        #:cargo-development-inputs
        (("rust-clang-sys" ,rust-clang-sys-0.28))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/jethrogb/rust-cexpr")
     (synopsis "C expression parser and evaluator")
     (description
@@ -8684,7 +8680,7 @@ chain, the first matching branch is the item that gets emitted.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cfg-if" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7"))))
@@ -9050,7 +9046,7 @@ transfer coding.")
          "0695kfrqx7n091fzm6msbqg2q2kyhka64q08lm63f3l9d964i8cx"))))
     (build-system cargo-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:cargo-inputs
        (("rust-glob" ,rust-glob-0.3)
@@ -9143,7 +9139,7 @@ traits.")
       (origin
         (method url-fetch)
         (uri (crate-uri "clang-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1r50dwy5hj5gq07dn0qf8222d07qv0970ymx0j8n9779yayc3w3f"))))
@@ -9294,7 +9290,7 @@ Command Line Argument Parser.")
      (origin
        (method url-fetch)
        (uri (crate-uri "clap" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "00i065a58987k1sbzqmlz721rw521zcg08jmsh40gi3khp3qmr9p"))))
@@ -9350,7 +9346,7 @@ Command Line Argument Parser.")
       (origin
         (method url-fetch)
         (uri (crate-uri "clicolors-control" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "07klix8nbpwk0cg1k4h0kkiijm1jxvrzndqdkr7dqr6xvkjjw24h"))))
@@ -9490,7 +9486,7 @@ or to a file as well.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cloudabi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rv4yf5jlldfkynzrw687s00f4x12ypw7axv71vawhy6h4i52i23"))))
@@ -9514,7 +9510,7 @@ contains all syscalls and related types.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cloudabi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kxcg83jlihy0phnd2g8c2c303px3l2p3pkjz357ll6llnd5pz6x"))))
@@ -9584,7 +9580,7 @@ Cipher-based Message Authentication Code (CMAC).")
       (origin
         (method url-fetch)
         (uri (crate-uri "cmake" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fv346ipxmvff6qrnh78rild0s8k72ilfjkdsrk869562y62cmhf"))))
@@ -10140,7 +10136,7 @@ idiomatic wrappers for Mac OS X's CommonCrypto library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "compiler_builtins" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1rhj6ccmfkh9gcxnxgjq4fg257yi4f9325nfzsphbmxwkrg06sq3"))))
@@ -10572,7 +10568,7 @@ generation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "constant_time_eq" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1g3vp04qzmk6cpzrd19yci6a95m7ap6wy7wkwgiy2pjklklrfl14"))))
@@ -11059,7 +11055,7 @@ intrinsics.")
      (origin
        (method url-fetch)
        (uri (crate-uri "core-foundation-sys" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0fzsw1j9g1x598yhwklg59l15hwzc0pyvs01w9fg2kin4598mjp7"))))))
@@ -11286,7 +11282,7 @@ to @code{is_x86_feature_detected}.")
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
-     `(("gperftools" ,gperftools)))
+     (list gperftools))
     (home-page "https://github.com/AtheMathmo/cpuprofiler")
     (synopsis "Bindings to Google's cpu profiler")
     (description "This package provides bindings to Google's cpu profiler.")
@@ -11348,10 +11344,7 @@ to @code{is_x86_feature_detected}.")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-url" ,rust-url-2))))
     (native-inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("pkg-config" ,pkg-config)
-       ("zlib" ,zlib)))
+     (list curl openssl pkg-config zlib))
     (home-page "https://github.com/rust-lang/cargo")
     (synopsis "Helpers for interacting with @url{crates.io}")
     (description "This package provides helpers for interacting with
@@ -12500,7 +12493,7 @@ algorithms.")
         ("rust-openssl" ,rust-openssl-0.10)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/malept/crypto-hash")
     (synopsis "Wrapper for OS-level cryptographic hash functions")
     (description "This package provides a wrapper for OS-level cryptographic
@@ -12969,12 +12962,9 @@ use with bindgen.")
         ("rust-mio" ,rust-mio-0.6)
         ("rust-mio-extras" ,rust-mio-extras-2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("nghttp2" ,nghttp2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl nghttp2 openssl zlib))
     (home-page "https://github.com/alexcrichton/curl-rust")
     (synopsis "Rust bindings to libcurl for making HTTP requests")
     (description
@@ -13012,12 +13002,9 @@ requests")
        #:cargo-development-inputs
        (("rust-cfg-if" ,rust-cfg-if-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("nghttp2" ,nghttp2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl nghttp2 openssl zlib))
     (home-page "https://github.com/alexcrichton/curl-rust")
     (synopsis "Native bindings to the libcurl library")
     (description
@@ -13094,7 +13081,6 @@ attributes.")
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Cannot compile cxx-test-suite.
-       #:rust ,rust-1.48    ; or newer
        #:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-cxxbridge-flags" ,rust-cxxbridge-flags-1)
@@ -13154,8 +13140,7 @@ attributes.")
           "0shmkgv3cnh06ws1p555znj1hh23phynaz73rgnz95gradsdwnwg"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-lazy-static" ,rust-lazy-static-1)
@@ -13215,8 +13200,7 @@ crate into a Cargo build.")
           "08v366jxd2vc8jc2cbvrga0866pwfcaq6hl8yylfx0vhs2n53j53"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cc" ,rust-cc-1)
         ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
@@ -13321,8 +13305,7 @@ crate (implementation detail).")
           "0gkwvihw74dh8p3fz3552wnxanrpwmwfy38ylz2z8knjq0y8y4v3"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.48    ; or newer
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-clang-ast" ,rust-clang-ast-0.1)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-memmap" ,rust-memmap-0.7)
@@ -13667,7 +13650,7 @@ for Rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "data-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "027rcrwdschrkdr2n9d24gnh03vl41qmvhjqn9vn6z1njy2n0flr"))))
@@ -13787,9 +13770,9 @@ sizes.  Big-endian order is used.  WARNING: Block must be aligned!")
        #:cargo-development-inputs
        (("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "Rust bindings to D-Bus")
     (description "This package provides Rust bindings to D-Bus.")
@@ -13832,9 +13815,9 @@ sizes.  Big-endian order is used.  WARNING: Block must be aligned!")
     (arguments
      `(#:cargo-inputs (("rust-dbus" ,rust-dbus-0.9))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "Framework for writing D-Bus method handlers (legacy)")
     (description
@@ -14020,7 +14003,7 @@ written in rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "defmac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "14cqfvc0f1pkd6gdhjxa2wv3iibqprc0n203ims8lvg96752ynfm"))))
@@ -14040,7 +14023,7 @@ written in rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "defmac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "17giv0n0n1r64z0dahfvkjy3ys517jxyhs8sd9lmgvcljpjyryxa"))))))
@@ -14714,7 +14697,7 @@ example.")
          "0hpmwrc0zx3zvpgwp9zrm6wj8d8i8q8990grlrnfzlivbi6zqyq4"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.1)
@@ -14955,8 +14938,7 @@ diff.")
         (base32 "0lsn5h1mfa8x7bfg9yqgr52p7drigpwgm5q8qh4r07dmfd5g43rw"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; fix for E0658
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-diffus-derive" ,rust-diffus-derive-0.10)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
@@ -15210,8 +15192,7 @@ standard locations of directories for config, cache and other data.")
        (("rust-cfg-if" ,rust-cfg-if-0.1)
         ("rust-dirs-sys" ,rust-dirs-sys-0.3))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-dirs-sys" ,rust-dirs-sys-0.3)))))
+     (list rust-cfg-if-0.1 rust-dirs-sys-0.3))))
 
 (define-public rust-dirs-1
   (package
@@ -15222,7 +15203,7 @@ standard locations of directories for config, cache and other data.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dirs" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "009rrhzj9pxyncmm2vhlj70npg0cgggv2hjbbkiwdl9vccq8kmrz"))))
@@ -15301,10 +15282,8 @@ other data.")
         ("rust-redox-users" ,rust-redox-users-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-libc" ,rust-libc-0.2)
-       ("rust-redox-users" ,rust-redox-users-0.3)
-       ("rust-winapi" ,rust-winapi-0.3)))
+     (list rust-cfg-if-0.1 rust-libc-0.2 rust-redox-users-0.3
+           rust-winapi-0.3))
     (home-page "https://github.com/soc/dirs-sys-rs")
     (synopsis
      "System-level helper functions for the dirs and directories crates")
@@ -15342,7 +15321,7 @@ and @code{directories} crates.")
       (origin
         (method url-fetch)
         (uri (crate-uri "discard" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h67ni5bxvg95s91wgicily4ix7lcw7cq0a5gy9njrybaibhyb91"))))
@@ -15429,7 +15408,7 @@ Google's diff-match-patch.")
      `(#:cargo-inputs
        (("rust-libloading" ,rust-libloading-0.6))))
     (inputs
-     `(("rust-libloading" ,rust-libloading-0.6)))
+     (list rust-libloading-0.6))
     (home-page "https://github.com/vberger/dlib")
     (synopsis "Helper macros for manually loading optional system libraries")
     (description
@@ -15495,7 +15474,7 @@ not support network, only raw protocol parser.")
       (origin
         (method url-fetch)
         (uri (crate-uri "doc-comment" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "15rsqxgarfpb1yim9sbp9yfgj7p2dq6v51c6bq1a62paii9ylgcj"))))
@@ -15824,7 +15803,7 @@ Rust.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0phbm7i0dpn44gzi07683zxaicjap5064w62pidci4fhhciv8mza"))))
@@ -15846,7 +15825,7 @@ floating-point primitives to an @code{io::Write}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "dtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0g96cap6si1g6wi62hsdk2fnj3sf5vd4i97zj6163j8hhnsl3n0d"))))))
@@ -16295,7 +16274,7 @@ signing, and verification in pure Rust.")
         ("rust-failure-derive" ,rust-failure-derive-0.1)
         ("rust-lazy-static" ,rust-lazy-static-1))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/ubolonton/emacs-module-rs")
     (synopsis "Library for creating Emacs's dynamic modules")
     (description
@@ -16345,7 +16324,7 @@ Emacs' support for dynamic modules.")
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.48))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/ubolonton/emacs-module-rs")
     (synopsis "Raw FFI for emacs-module")
     (description "This module provides a high-level binding to emacs-module:
@@ -17529,9 +17508,9 @@ blocking data structures.")
        (("rust-cmake" ,rust-cmake-0.1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (home-page "http://www.libexpat.org/")
     (synopsis "XML parser library written in C")
     (description "XML parser library written in C")
@@ -17724,7 +17703,7 @@ fallible format macro.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fallible-iterator" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"))))
@@ -17883,9 +17862,9 @@ floats.")
        (("rust-bio" ,rust-bio-0.33)
         ("rust-parasailors" ,rust-parasailors-0.3))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://github.com/aseyboldt/fastq-rs")
     (synopsis "Parser for fastq files")
     (description "This package provides a parser for fastq files.")
@@ -18064,9 +18043,9 @@ Atom, RSS 2.0, RSS 1.0, RSS 0.x and JSON Feed")
         ("rust-rand" ,rust-rand-0.8)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://gitlab.com/news-flash/feedbin_api")
     (synopsis  "Rust implementation of the Feedbin REST API")
     (description
@@ -18103,9 +18082,9 @@ Atom, RSS 2.0, RSS 1.0, RSS 0.x and JSON Feed")
        (("rust-dotenv" ,rust-dotenv-0.15)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://gitlab.com/news-flash/feedly_api")
     (synopsis "Rust implementation of the feedly REST API")
     (description
@@ -18257,9 +18236,9 @@ Atom, RSS 2.0, RSS 1.0, RSS 0.x and JSON Feed")
        (("rust-dotenv" ,rust-dotenv-0.15)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://gitlab.com/news-flash/fever_api")
     (synopsis "Rust implementation of the Fever API")
     (description
@@ -18299,7 +18278,7 @@ sparse files.")
       (origin
         (method url-fetch)
         (uri (crate-uri "filetime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1s71cb7hzkk4ahc5j53w8933gnxv2giyj7v0za5hbbk37ahwyd0x"))))
@@ -18332,7 +18311,7 @@ representation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "findshlibs" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n2vagn0q5yim32hxkwi1cjgp3yn1dm45p7z8nw6lapywihhs9mi"))))
@@ -18390,7 +18369,7 @@ cross platform API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fixedbitset" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kg03p777wc0dajd9pvlcnsyrwa8dhqwf0sd9r4dw0p82rs39arp"))))
@@ -18410,7 +18389,7 @@ cross platform API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fixedbitset" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0czam11mi80dbyhf4rd4lz0ihcf7vkfchrdcrn45wbs0h40dxm46"))))))
@@ -18790,7 +18769,7 @@ crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "fnv" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ww56bi1r5b8id3ns9j3qxbi7w5h005rzhiryy0zi9h97raqbb9g"))))
@@ -18956,7 +18935,7 @@ implementation that is more efficient for smaller hash keys.")
       (origin
         (method url-fetch)
         (uri (crate-uri "foreign-types-shared" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kanxlif1vp0ffh2r9l610jqbkmb3183yqykxq1z5w1vay2rn7y6"))))))
@@ -19103,8 +19082,7 @@ values to other threads.")
        #:cargo-development-inputs
        (("rust-unicode-normalization" ,rust-unicode-normalization-0.1))))
     (inputs
-     `(("freetype" ,freetype)
-       ("zlib" ,zlib)))))
+     (list freetype zlib))))
 
 (define-public rust-freetype-sys-0.13
   (package
@@ -19150,8 +19128,7 @@ values to other threads.")
         ("rust-libz-sys" ,rust-libz-sys-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
-     `(("freetype" ,freetype)
-       ("zlib" ,zlib)))))
+     (list freetype zlib))))
 
 (define-public rust-fs2-0.4
   (package
@@ -19186,7 +19163,7 @@ duplication.")
      (origin
        (method url-fetch)
        (uri (crate-uri "fs_extra" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "151k6dr35mhq5d8pc8krhw55ajhkyiv0pm14s7zzlc5bc9fp28i0"))))
     (build-system cargo-build-system)
@@ -19354,7 +19331,7 @@ strings (> 1 billion is possible).")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-cprng" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fnkqrbz7ixxzsb04bsz9p0zzazanma8znfdqjvh39n14vapfvx0"))))
@@ -19375,7 +19352,7 @@ pseudorandom number generator")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-zircon" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10jxc5ks1x06gpd0xg51kcjrxr35nj6qhx2zlc5n7bmskv3675rf"))))
@@ -19398,7 +19375,7 @@ pseudorandom number generator")
       (origin
         (method url-fetch)
         (uri (crate-uri "fuchsia-zircon-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19zp2085qsyq2bh1gvcxq1lb8w6v6jj9kbdkhpdjrl95fypakjix"))))
@@ -19497,7 +19474,7 @@ zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vq3cw37knnd0afw3rcjzh71i2l01v5m4ysinrrqdvnn2ql0z60v"))))
@@ -19620,7 +19597,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-core-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "02n66jkjhpy210dv24pz0j30lvyin5kzlrb50p1j7x8yzdin4nxk"))))
@@ -19641,7 +19618,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-cpupool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1r32456gpblzfvnkf60545v8acqk7gh5zhyhi1jn669k9gicv45b"))))
@@ -19775,7 +19752,7 @@ for the @code{futures-rs} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-io-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1npb04xbn2gw5rjllz88cb88fql44xxfkgcidjjj26fva3j4m4gl"))))
@@ -19981,7 +19958,7 @@ the @code{futures-rs} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "futures-sink-preview" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1v7y5qvgvl0d6hd9s4k7bd5qrj2gdlrs5yfl22v5pxv9dgpliwc6"))))
@@ -20720,7 +20697,7 @@ platforms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "getopts" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1mgb3qvivi26gs6ihqqhh8iyhp3vgxri6vwyrwg28w0xqzavznql"))))
@@ -21227,7 +21204,7 @@ dirty state into your program.")
 (define-public rust-git2-0.13
   (package
     (name "rust-git2")
-    (version "0.13.20")
+    (version "0.13.24")
     (source
      (origin
        (method url-fetch)
@@ -21236,7 +21213,7 @@ dirty state into your program.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1fkc2gzcnl4ci3rja9mc5jl2ygl3fkc1fgym3rcwby216ac1x0yr"))))
+         "07rlxwvl5iyyqwh0mci5v27lbicf9qiqm60maw1srz7i51x00pl4"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -21255,10 +21232,7 @@ dirty state into your program.")
      `(("pkg-config" ,pkg-config)
        ("git" ,git-minimal)))           ;for a single test
     (inputs
-     `(("libgit2" ,libgit2)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 libssh2 openssl zlib))
     (home-page "https://github.com/rust-lang/git2-rs")
     (synopsis "Rust bindings to libgit2")
     (description
@@ -21564,7 +21538,7 @@ OpenGL's old and error-prone API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "glob" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0x25wfr7vg3mzxc9x05dcphvd3nwlcmbnxrvwcvrrdwplcrrk4cv"))))
@@ -21590,7 +21564,7 @@ shell style patterns.")
       (origin
         (method url-fetch)
         (uri (crate-uri "glob" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ysvi72slkw784fcsymgj4308c3y03gwjjzqxp80xdjnkbh8vqcb"))))))
@@ -21892,8 +21866,7 @@ the regex engine it uses pluggable.")
        (("rust-grep-matcher" ,rust-grep-matcher-0.1)
         ("rust-pcre2" ,rust-pcre2-0.2))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page
      "https://github.com/BurntSushi/ripgrep")
     (synopsis "Use PCRE2 with the grep crate")
@@ -22696,7 +22669,7 @@ that don't require dynamic memory allocation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "heapsize" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0q94q9ppqjgrw71swiyia4hgby2cz6dldp7ij57nkvhd6zmfcy8n"))))
@@ -22721,7 +22694,7 @@ heap.")
       (origin
         (method url-fetch)
         (uri (crate-uri "heapsize" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0dmwc37vgsdjzk10443dj4f23439i9gch28jcwzmry3chrwx8v2m"))))
@@ -22738,7 +22711,7 @@ heap.")
       (origin
         (method url-fetch)
         (uri (crate-uri "heapsize_plugin" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1i72isf699q9jl167g2kg4xd6h3cd05rc79zaph58aqjy0g0m9y9"))))
@@ -22761,7 +22734,7 @@ total runtime size of an object on the heap")
       (origin
         (method url-fetch)
         (uri (crate-uri "heck" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1b56s2c1ymdd0qmy31bw0ndhm31hcdamnhg3npp7ssrmc1ag9jw7"))))
@@ -22835,7 +22808,7 @@ hexadecimal representation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "hex" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xsdcjiik5j750j67zk42qdnmm4ahirk3gmkmcqgq7qls2jjcl40"))))))
@@ -22849,7 +22822,7 @@ hexadecimal representation.")
      (origin
        (method url-fetch)
        (uri (crate-uri "hex" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1ajkw40qzn2ygnqjj9w584f6l31wi318258n84pn2hax8la2i8nn"))))))
 
@@ -23197,7 +23170,7 @@ Hash-based Message Authentication Code algorithm} for SHA1.")
       (origin
         (method url-fetch)
         (uri (crate-uri "hostname" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0kprf862qaa7lwdms6aw7f3275h0j2rwhs9nz5784pm8hdmb9ki1"))))
@@ -24042,9 +24015,9 @@ with hyper.")
         (base32
          "1vcfyz7dxavf4brns15afmj5fxz88lbn05rrpbfqsnybdp2sqyfr"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:cargo-inputs
        (("rust-bytes" ,rust-bytes-0.5)
@@ -24942,7 +24915,7 @@ immutable interval tree.")
       (origin
         (method url-fetch)
         (uri (crate-uri "iovec" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ph73qygwx8i0mblrf110cj59l00gkmsgrpzz1rm85syz5pymcxj"))))
@@ -25054,11 +25027,9 @@ enum like Option/Result.")
         ("rust-test-case" ,rust-test-case-1)
         ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl openssl zlib))
     (home-page "https://github.com/sagebind/isahc")
     (synopsis "Practical HTTP client")
     (description
@@ -25393,7 +25364,7 @@ and functions.")
       (origin
         (method url-fetch)
         (uri (crate-uri "itoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13nxqrfnh83a7x5rw4wq2ilp8nxvwy74dxzysdg59dbxqk0agdxq"))))
@@ -25429,7 +25400,7 @@ primitives to an @code{io::Write}.")
      (origin
        (method url-fetch)
        (uri (crate-uri "itoa" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "18g7p2hrb3dk84z3frfgmszfc9hjb4ps9vp99qlb1kmf9gm8hc5f"))))))
@@ -25488,7 +25459,7 @@ primitives to an @code{io::Write}.")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))
+     (list jemalloc))
     (home-page "https://github.com/gnzlbg/jemallocator")
     (synopsis "Rust FFI bindings to jemalloc")
     (description "This package provides Rust FFI bindings to jemalloc.")
@@ -25568,7 +25539,7 @@ primitives to an @code{io::Write}.")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))))
+     (list jemalloc))))
 
 (define-public rust-jetscii-0.5
   (package
@@ -25583,8 +25554,7 @@ primitives to an @code{io::Write}.")
         (base32 "1x4z5ixlxv1wa70d3d6ad3n8qxz6z00i13zwnv219v45qcwybbnb"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; fix for E0658
-       #:cargo-development-inputs
+     `(#:cargo-development-inputs
        (("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-memmap" ,rust-memmap-0.7)
         ("rust-proptest" ,rust-proptest-1)
@@ -25848,7 +25818,7 @@ wasm-bindgen crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "json" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1rg9jxf6bpbwis3ixd5ak8rp37him7n4z8awz4ssrxl6hyplbhlj"))))
@@ -25984,7 +25954,7 @@ debugging.")
       (origin
         (method url-fetch)
         (uri (crate-uri "kernel32-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1389av0601a9yz8dvx5zha9vmkd6ik7ax0idpb032d28555n41vm"))))
@@ -26051,7 +26021,7 @@ kernel32.")
       (origin
         (method url-fetch)
         (uri (crate-uri "language-tags" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16hrjdpa827carq5x4b8zhas24d8kg4s16m6nmmn1kb7cr5qh7d9"))))
@@ -26277,7 +26247,7 @@ generated by LALRPOP.")
       (origin
         (method url-fetch)
         (uri (crate-uri "lazy_static" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2"))))
@@ -26287,7 +26257,7 @@ generated by LALRPOP.")
        #:cargo-development-inputs
        (("rust-doc-comment" ,rust-doc-comment-0.3))))
     (inputs
-     `(("rust-spin" ,rust-spin-0.5)))
+     (list rust-spin-0.5))
     (home-page  "https://github.com/rust-lang-nursery/lazy-static.rs")
     (synopsis "Macro for declaring lazily evaluated statics in Rust")
     (description
@@ -26699,9 +26669,9 @@ macros on libc without stdlib.")
      `(#:cargo-inputs
        (("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (home-page "https://github.com/diwic/dbus-rs")
     (synopsis "FFI bindings to libdbus")
     (description "This package provides FFI bindings to libdbus.")
@@ -26805,7 +26775,7 @@ algorithm and related formats (ZLIB, GZIP).")
 (define-public rust-libgit2-sys-0.12
   (package
     (name "rust-libgit2-sys")
-    (version "0.12.21+1.1.0")
+    (version "0.12.25+1.3.0")
     (source
      (origin
        (method url-fetch)
@@ -26814,7 +26784,7 @@ algorithm and related formats (ZLIB, GZIP).")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "09b85x3gpvq0d7v1mhg4f3w1b3skzlpbikrx9j2rwarbsyn1n9w6"))))
+         "1axsdyb2i67pn85vh8sb2z037n88fiiwqghkzsr1jrcdy2g1cs4g"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -26825,11 +26795,9 @@ algorithm and related formats (ZLIB, GZIP).")
         ("rust-openssl-sys" ,rust-openssl-sys-0.9)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 openssl zlib))
     (home-page "https://github.com/rust-lang/git2-rs")
     (synopsis "Native bindings to the libgit2 library")
     (description
@@ -26930,8 +26898,7 @@ loading utilities.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-static-assertions" ,rust-static-assertions-1))))
     (inputs
-     `(("rust-cfg-if" ,rust-cfg-if-1)
-       ("rust-winapi" ,rust-winapi-0.3)))))
+     (list rust-cfg-if-1 rust-winapi-0.3))))
 
 (define-public rust-libloading-0.5
   (package
@@ -26941,7 +26908,7 @@ loading utilities.")
       (origin
         (method url-fetch)
         (uri (crate-uri "libloading" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0lyply8rcqc8agajzxs7bq6ivba9dnn1i68kgb9z2flnfjh13cgj"))))
@@ -27080,8 +27047,7 @@ allocator.")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
-     `(("nghttp2" ,nghttp2 "lib")
-       ("pkg-config" ,pkg-config)))
+     (list `(,nghttp2 "lib") pkg-config))
     (home-page "https://github.com/alexcrichton/nghttp2-rs")
     (synopsis "FFI bindings for libnghttp2 (nghttp2)")
     (description
@@ -27128,11 +27094,9 @@ allocator.")
         ("rust-tempdir" ,rust-tempdir-0.3)
         ("rust-toml" ,rust-toml-0.4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("nettle" ,nettle)
-       ("openssl" ,openssl)))
+     (list clang nettle openssl))
     (home-page "https://pijul.org/")
     (synopsis "Library component of the pijul version control system")
     (description
@@ -27181,9 +27145,9 @@ file.
          (add-before 'check 'set-HOME
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://github.com/jnqnfe/pulse-binding-rust")
     (synopsis "Binding for the PulseAudio libpulse library")
     (description
@@ -27213,9 +27177,9 @@ library.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://github.com/jnqnfe/pulse-binding-rust")
     (synopsis "FFI bindings for the PulseAudio")
     (description
@@ -27236,7 +27200,7 @@ library.")
         (base32 "17gqc2mwih81j3ds479gl5zmsxqzzrcrj3yyv62vh34bgy8n82r9"))))
     (build-system cargo-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -27263,7 +27227,7 @@ library.")
        (sha256
         (base32 "1g9gbjjpm9phhs991abkzmacszibp94m5nrh331ycd99y9ci1lv4"))))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -27323,7 +27287,7 @@ library.")
         (base32 "104n0s4f46zprppjq6y82y0wjh1r2cgwzw26w914yj30rizy1cbj"))))
     (build-system cargo-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:cargo-inputs
        ;; build dependencies
@@ -27354,9 +27318,9 @@ library.")
        (("rust-criterion" ,rust-criterion-0.3)
         ("rust-rayon" ,rust-rayon-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (home-page "https://github.com/KWARC/rust-libxml")
     (synopsis "Rust wrapper for libxml2")
     (description "This package provides a Rust wrapper for libxml2, the XML
@@ -27404,8 +27368,7 @@ C parser and toolkit developed for the GNOME project.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zlib" ,zlib)))
+     (list pkg-config zlib))
     (home-page "https://github.com/rust-lang/libz-sys")
     (synopsis "Bindings to the system libz library")
     (description
@@ -27633,11 +27596,9 @@ punctuation.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libssh2 openssl zlib))
     (home-page "https://github.com/alexcrichton/ssh2-rs")
     (synopsis "Native bindings to the libssh2 library")
     (description
@@ -27669,9 +27630,9 @@ punctuation.")
        (("rust-rand" ,rust-rand-0.4)
         ("rust-tempdir" ,rust-tempdir-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/lmdb-rs")
     (synopsis "Safe Rust bindings for LMDB")
     (description "This package provides idiomatic and safe APIs for interacting
@@ -27705,9 +27666,9 @@ with lmdb.")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/lmdb-rs")
     (synopsis "Rust bindings for liblmdb")
     (description "This package provides rust bindings for liblmdb.")
@@ -27847,7 +27808,7 @@ by inspecting the system for user preference.")
       (origin
         (method url-fetch)
         (uri (crate-uri "lock_api" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0b24q9mh258xa52ap636q1sxz0j5vrnp0hwbbh7ddjka3wwz3sv2"))))
@@ -27864,7 +27825,7 @@ by inspecting the system for user preference.")
      (origin
        (method url-fetch)
        (uri (crate-uri "log" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "04175hv0v62shd82qydq58a48k3bjijmk54v38zgqlbxqkkbpfai"))))
     (build-system cargo-build-system)
@@ -28139,10 +28100,10 @@ image together with its neighboring pixels.")
         ("rust-flate2" ,rust-flate2-1)
         ("rust-image" ,rust-image-0.20)
         ("rust-itoa" ,rust-itoa-0.4)
-        ("rust-linked-hash-map" ,rust-linked-hash-map-0.4)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
         ("rust-log" ,rust-log-0.4)
         ("rust-lzw" ,rust-lzw-0.10)
-        ("rust-nom" ,rust-nom-5)
+        ("rust-nom" ,rust-nom-6)
         ("rust-pom" ,rust-pom-3)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-time" ,rust-time-0.2))))
@@ -28387,8 +28348,7 @@ server (LSP).")
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xz" ,xz)))
+     (list pkg-config xz))
     (home-page "https://github.com/alexcrichton/xz2-rs")
     (synopsis "Bindings to liblzma for lzma and xz stream encoding/decoding")
     (description
@@ -28652,7 +28612,7 @@ platform-independently.")
       (origin
         (method url-fetch)
         (uri (crate-uri "maplit" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "07b5kjnhrrmfhgqm9wprjw8adx6i225lqp49gasgqg74lahnabiy"))))
@@ -28800,7 +28760,7 @@ statement, the first matching branch is the item that gets emitted.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matches" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "020axl4q7rk9vz90phs7f8jas4imxal9y9kxl4z4v7a6719mrz3z"))))
@@ -28966,7 +28926,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matrixmultiply" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13s7nfd3dfcsrixld2lk8c563ih5xzczl2w36hprfc016rkfrxyl"))))
@@ -28986,7 +28946,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "matrixmultiply" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00p0fpjhm45qdzi37mgv7ggsy8b9gqvq4999yrbgyn1dxkf6gbfw"))))
@@ -29074,7 +29034,7 @@ parallelize and optimize.")
      (origin
        (method url-fetch)
        (uri (crate-uri "md5" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0wcps37hrhz59fkhf8di1ppdnqld6l1w5sdy7jp7p51z0i4c8329"))))
     (build-system cargo-build-system)
@@ -29094,7 +29054,7 @@ parallelize and optimize.")
       (origin
         (method url-fetch)
         (uri (crate-uri "md5" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "17b2xm4h4cvxsdjsf3kdrzqv2za60kak961xzi5kmw6g6djcssvy"))))))
@@ -29260,7 +29220,7 @@ for searching bytes.")
       (origin
         (method url-fetch)
         (uri (crate-uri "memmap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ns7kkd1h4pijdkwfvw4qlbbmqmlmzwlq3g2676dcl5vwyazv1b5"))))
@@ -29289,7 +29249,7 @@ file IO.")
       (origin
         (method url-fetch)
         (uri (crate-uri "memmap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1zy6s0ni0lx9rjzq3gq2zz9r8zgjmbp02332g3gsj4fyhv4s5zz2"))))))
@@ -29819,9 +29779,9 @@ migration mechanism.")
        #:cargo-development-inputs
        (("rust-tempdir" ,rust-tempdir-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (home-page "https://diesel.rs")
     (synopsis "Code generation macros for Diesel's embedded migrations")
     (description "This package provides code generation macros for Diesel's
@@ -29858,7 +29818,7 @@ drop-in allocator.")
       (origin
         (method url-fetch)
         (uri (crate-uri "mime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13dcm9lh01hdwfjcg74ppljyjfj1c6w3a3cwkhxf0w8wa37cfq1a"))))
@@ -29964,9 +29924,9 @@ file's MIME type by its extension.")
        (("rust-dotenv" ,rust-dotenv-0.15)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://gitlab.com/news-flash/miniflux_api")
     (synopsis "Rust implementation of the Miniflux REST API")
     (description
@@ -30028,7 +29988,7 @@ streaming API for miniz_oxide.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miniz_oxide" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "198n4hfpq0qcxf275l6fpzh7b9cl7ck2xs6pjgpds74bazv9yrxa"))))
@@ -30088,7 +30048,7 @@ drop-in replacement for miniz.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miniz-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00l2r4anm8g35x0js2zfdnwfbrih9m43vphdpb77c5ga3kjkm7hy"))))
@@ -30354,7 +30314,7 @@ possible over the OS abstractions.")
      (origin
        (method url-fetch)
        (uri (crate-uri "miow" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "15sqdhh29dqgw5xh59clwv6scbsbvdkbmdc16hbfvyq7b2sw2css"))))
     (build-system cargo-build-system)
@@ -30381,7 +30341,7 @@ IOCP and Async I/O abstractions.")
       (origin
         (method url-fetch)
         (uri (crate-uri "miow" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06g9b8sqlh5gxakwqq4rrib07afwanfnxgxajrldwcgk3hxjy7wc"))))
@@ -30548,7 +30508,7 @@ checking.")
       (origin
         (method url-fetch)
         (uri (crate-uri "modifier" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0n3fmgli1nsskl0whrfzm1gk0rmwwl6pw1q4nb9sqqmn5h8wkxa1"))))
@@ -30604,10 +30564,9 @@ checking.")
        (("rust-dbus" ,rust-dbus-0.6)
         ("rust-glib" ,rust-glib-0.10))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (home-page "https://gitlab.gnome.org/World/Rust/mpris-player")
     (synopsis "Library for creating MPRIS2 media players over D-Bus")
     (description "This package provides a library for creating MPRIS2 media
@@ -30827,7 +30786,7 @@ library.")
        (("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("mariadb" ,mariadb "lib")))
+     (list `(,mariadb "lib")))
     (home-page "https://github.com/sgrif/mysqlclient-sys")
     (synopsis "Auto-generated rust bindings for libmysqlclient")
     (description "This package provides auto-generated rust bindings for
@@ -31254,9 +31213,9 @@ IO of Windows's named pipes.")
          "0cjirf6n4i2lw65iaww8d4hahv3cbfm5ka9hlansvnbfgzwadzq9"))))
     (build-system cargo-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.55)
@@ -31301,9 +31260,9 @@ IO of Windows's named pipes.")
        (("rust-hex" ,rust-hex-0.4)
         ("rust-test-cert-gen" ,rust-test-cert-gen-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/sfackler/rust-native-tls")
     (synopsis "Wrapper over a platform's native TLS implementation")
     (description
@@ -31663,7 +31622,7 @@ in Rust that can compile to WebAssembly.")
       (origin
         (method url-fetch)
         (uri (crate-uri "net2" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "126g3fgfxp06zimc1l9iyxnn9cif1hjsg7sd81nlls5nnyghsma2"))))
@@ -31696,11 +31655,9 @@ types as proposed in RFC 1158.")
        (patches (search-patches "rust-nettle-disable-vendor.patch"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("gmp" ,gmp)
-       ("nettle" ,nettle)))
+     (list clang gmp nettle))
     (arguments
      `(#:skip-build? #t ;; provides nothing, has no tests
        #:cargo-inputs
@@ -31745,10 +31702,9 @@ cryptographic library.")
        (patches (search-patches "rust-nettle-sys-disable-vendor.patch"))))
     (build-system cargo-build-system)
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)))
+     (list clang pkg-config))
     (inputs
-     `(("nettle" ,nettle)))
+     (list nettle))
     (arguments
      `(#:cargo-inputs
        (("rust-bindgen" ,rust-bindgen-0.51)
@@ -31798,8 +31754,7 @@ release (fork of debug_unreachable)")
         (base32 "0r3hz725kblxr6mhl8rkf2bffzmyya0ib3xr3jk5zm8x2jlpvlq6"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; some inputs fail with E0658
-       #:tests? #f ; FIXME: "error reading DNS system conf" from reqwest
+     `(#:tests? #f ; FIXME: "error reading DNS system conf" from reqwest
        #:cargo-inputs
        (("rust-article-scraper" ,rust-article-scraper-1)
         ("rust-async-trait" ,rust-async-trait-0.1)
@@ -31844,11 +31799,9 @@ release (fork of debug_unreachable)")
        (("rust-tempfile" ,rust-tempfile-3)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)))
+     (list libxml2 openssl sqlite))
     (home-page "https://gitlab.com/news-flash/news_flash")
     (synopsis "Base library for NewsFlash")
     (description "This package provides the base library for the NewsFlash
@@ -31881,9 +31834,9 @@ feed reader.")
        (("rust-dotenv" ,rust-dotenv-0.15)
         ("rust-tokio" ,rust-tokio-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://gitlab.com/news-flash/newsblur_api/")
     (synopsis "Rust implementation of the NewsBlur API")
     (description
@@ -32217,10 +32170,7 @@ while still providing platform specific APIs.")
         ("rust-sysctl" ,rust-sysctl-0.1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("rust-bitflags" ,rust-bitflags-1)
-       ("rust-cc" ,rust-cc-1)
-       ("rust-cfg-if" ,rust-cfg-if-0.1)
-       ("rust-libc" ,rust-libc-0.2)))))
+     (list rust-bitflags-1 rust-cc-1 rust-cfg-if-0.1 rust-libc-0.2))))
 
 (define-public rust-nix-0.17
   (package
@@ -32392,7 +32342,7 @@ without the @code{std}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "nodrop" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1fz1v9r8ijacf0hlq0pdv5l9mz8vgqg1snmhvpjmi9aci1b4mvvj"))))
@@ -32415,7 +32365,7 @@ without the @code{std}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "nodrop-union" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h59pph19rxanyqcaid8pg73s7wmzdx3zhjv5snlim5qx606zxkc"))))
@@ -32463,7 +32413,7 @@ implementation (which is unstable / requires nightly).")
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
              #t)))))
     (native-inputs
-     `(("jemalloc" ,jemalloc)))
+     (list jemalloc))
     (home-page "https://github.com/Geal/nom")
     (synopsis
      "Byte-oriented, zero-copy, parser combinators library")
@@ -32863,10 +32813,9 @@ varying noise for textural use and graphical display.")
              (substitute* "Cargo.toml"
                (("version = \"0.3.2\"") "version = \"0.5.0\"")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("notmuch" ,notmuch)))
+     (list openssl notmuch))
     (home-page "https://github.com/vhdirk/notmuch-rs")
     (synopsis "Rust interface and bindings for Notmuch")
     (description
@@ -33647,7 +33596,7 @@ mathematics.")
       (origin
         (method url-fetch)
         (uri (crate-uri "num-traits" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj"))))
@@ -33684,7 +33633,7 @@ giga, kibi.")
       (origin
         (method url-fetch)
         (uri (crate-uri "numtoa" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vs9rhggqbql1p26x8nkha1j06wawwgb2jp5fs88b5gi7prvvy5q"))))
@@ -33708,8 +33657,6 @@ giga, kibi.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0y5azgk8ds43m1sd5pc4hhakxzxkfcfscl24y8gsbvwdznxjqavv"))))
-    (arguments
-     `(#:rust ,rust-1.52)) ; fix for E0658
     (build-system cargo-build-system)
     (home-page "https://github.com/CasualX/obfstr")
     (synopsis "Compile time string constant obfuscation for Rust")
@@ -34400,7 +34347,7 @@ the default program configured on the system.")
       (origin
         (method url-fetch)
         (uri (crate-uri "openssl-probe" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1pijrdifgsdwd45b08c2g0dsmnhz7c3kmagb70839ngrd7d29bvp"))))
@@ -34435,9 +34382,9 @@ system for OpenSSL.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/sfackler/rust-openssl")
     (synopsis "FFI bindings to OpenSSL")
     (description
@@ -34521,8 +34468,7 @@ system for OpenSSL.")
         (base32 "0zr7f101inkz3rknl0r3q0qkklfxhqrji7yxmqixajfn3m5mbjfa"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; fix for E0658
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-regex" ,rust-regex-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-strong-xml" ,rust-strong-xml-0.6)
@@ -34806,7 +34752,7 @@ platform-native strings.")
       (origin
         (method url-fetch)
         (uri (crate-uri "owning_ref" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kjj9m28wjv452jw49p1mp3d8ql058x78v4bz00avr7rvsnmpxbg"))))
@@ -35047,9 +34993,9 @@ normally prevent moving a type that has been borrowed from.")
        #:cargo-inputs
        (("rust-libc" ,rust-libc-0.2))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://github.com/anp/parasailors")
     (synopsis "Bindings to the parasail pairwise genetic sequence alignment library")
     (description
@@ -35081,9 +35027,9 @@ sequence alignment library.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-parasail-sys" ,rust-parasail-sys-0.2))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://github.com/anp/parasailors")
     (synopsis "SIMD accelerated pairwise genetic sequence alignment")
     (description "This package provides SIMD accelerated pairwise genetic
@@ -35150,7 +35096,7 @@ sequence alignment tools.")
       (origin
         (method url-fetch)
         (uri (crate-uri "parity-wasm" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "03qycy21avz4970zc7aj8rj5h4wvi4qsrc90a6hpws1a56mglf8y"))))
@@ -35930,7 +35876,7 @@ in pure Rust.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
-    (inputs `(("libpcap" ,libpcap)))
+    (inputs (list libpcap))
     (home-page "https://github.com/jmmk/rustcap")
     (synopsis "Low-level bindings to libpcap")
     (description "This package provides low-level Rust bindings to the libpcap
@@ -35958,8 +35904,7 @@ library.")
         ("rust-pcre2-sys" ,rust-pcre2-sys-0.2)
         ("rust-thread-local" ,rust-thread-local-1))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page "https://github.com/BurntSushi/rust-pcre2")
     (synopsis "High level wrapper library for PCRE2")
     (description
@@ -35989,8 +35934,7 @@ library.")
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-cc" ,rust-cc-1))))
     (native-inputs
-     `(("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list pcre2 pkg-config))
     (home-page
      "https://github.com/BurntSushi/rust-pcre2")
     (synopsis "Low level bindings to PCRE2")
@@ -36096,7 +36040,7 @@ pdqsort.")
       (origin
         (method url-fetch)
         (uri (crate-uri "peeking_take_while" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16bhqr6rdyrp12zv381cxaaqqd0pwysvm1q8h2ygihvypvfprc8r"))))
@@ -36212,7 +36156,7 @@ runtime support for rust-peg grammars.  To use rust-peg, see the peg crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "percent-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0bp3zrsk3kr47fbpipyczidbbx4g54lzxdm77ni1i3qws10mdzfl"))))
@@ -36232,7 +36176,7 @@ runtime support for rust-peg grammars.  To use rust-peg, see the peg crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "percent-encoding" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0cgq08v1fvr6bs5fvy390cz830lq4fak8havdasdacxcw790s09i"))))))
@@ -36318,7 +36262,7 @@ perf_event_open system call, with associated types and constants.")
       (origin
         (method url-fetch)
         (uri (crate-uri "permutohedron" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0b1pzh48j86v46wxngch6k1kx9cdw3jr3lwa86gd6jd4bmxzz1xn"))))
@@ -36767,7 +36711,7 @@ function data structures.")
       (origin
         (method url-fetch)
         (uri (crate-uri "pico-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1q5pg0ms6szz6b5h26h4k40zb76zbwwjgyigac4wly9qngdj4yl5"))))
@@ -36955,7 +36899,7 @@ written with declarative macros.")
       (origin
         (method url-fetch)
         (uri (crate-uri "pkg-config" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0k4860955riciibxr8bhnklp79jydp4xfylwdn5v9kj96hxlac9q"))))
@@ -36973,7 +36917,7 @@ written with declarative macros.")
                                "/bin/pkg-config\"")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/rust-lang/pkg-config-rs")
     (synopsis "Library to run the pkg-config system tool")
     (description
@@ -37014,7 +36958,7 @@ network packet formats.")
       (origin
         (method url-fetch)
         (uri (crate-uri "plain" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19n1xbxb4wa7w891268bzf6cbwq4qvdb86bik1z129qb0xnnnndl"))))
@@ -37120,7 +37064,7 @@ both WASM and native applications")
       (origin
         (method url-fetch)
         (uri (crate-uri "plugin" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1q7nghkpvxxr168y2jnzh3w7qc9vfrby9n7ygy3xpj0bj71hsshs"))))
@@ -37192,7 +37136,7 @@ both WASM and native applications")
       (origin
         (method url-fetch)
         (uri (crate-uri "pocket-resources" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n2i5vmi8fdbw89wm5nz1ws1z9f1qax911p6ksg4scmdg23z6df1"))))
@@ -37910,8 +37854,7 @@ UDP.")
           "1hnid1d78zrr8ph12lpvp5b2cpx2fsqqgqs2yn1q23c6g7jix1y7"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:tests? #f          ; tests require postgres server.
+     `(#:tests? #f          ; tests require postgres server.
        #:cargo-inputs
        (("rust-bytes" ,rust-bytes-1)
         ("rust-fallible-iterator" ,rust-fallible-iterator-0.2)
@@ -38117,7 +38060,7 @@ and Postgres values.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ppv-lite86" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1shj4q7jwj0azssr8cg51dk3kh7d4lg9rmbbz1kbqk971vc5wyi3"))))
@@ -38147,7 +38090,7 @@ for x86.")
        (("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (home-page "https://crates.io/crates/pq-sys")
     (synopsis "Auto-generated rust bindings for libpq")
     (description "This package provides auto-generated rust bindings for
@@ -38789,7 +38732,7 @@ in your code.")
       (origin
         (method url-fetch)
         (uri (crate-uri "proc-macro2" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0f3h0zl5w5090ajmmvpmhkpr4iwqnn5rip3afacabhc657vwmn7h"))))
@@ -38801,7 +38744,7 @@ in your code.")
        #:cargo-development-inputs
        (("rust-quote" ,rust-quote-1))))
     (inputs
-     `(("rust-unicode-xid" ,rust-unicode-xid-0.2)))
+     (list rust-unicode-xid-0.2))
     (home-page "https://github.com/alexcrichton/proc-macro2")
     (synopsis "Stable implementation of the upcoming new `proc_macro` API")
     (description "This package provides a stable implementation of the upcoming new
@@ -39674,7 +39617,7 @@ implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "quick-error" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "18z6r2rcjvvf8cn92xjhm2qc3jpd1ljvcbf12zv0k9p565gmb4x9"))))
@@ -39695,7 +39638,7 @@ to write.")
       (origin
         (method url-fetch)
         (uri (crate-uri "quick-error" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51"))))))
@@ -40037,7 +39980,7 @@ integers, floats, tuples, booleans, lists, strings, options and results.")
       (origin
         (method url-fetch)
         (uri (crate-uri "quote" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19rjmfqzk26rxbgxy5j2ckqc2v12sw2xw8l4gi8bzpn2bmsbkl63"))))
@@ -40305,7 +40248,7 @@ useful types and distributions, and some randomness-related algorithms.")
      (origin
        (method url-fetch)
        (uri (crate-uri "rand" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "00sdaimkbz491qgi6qxkv582yivl32m2jd401kzbn94vsiwicsva"))))
@@ -40332,7 +40275,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1jl4449jcl4wgmzld6ffwqj5gwxrp8zvx8w573g1z368qg6xlwbd"))))
@@ -40414,7 +40357,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0v679h38pjjqj5h4md7v2slsvj6686qgcn7p9fbw3h43iwnk1b34"))))
@@ -40474,7 +40417,7 @@ useful types and distributions, and some randomness-related algorithms.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_chacha" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1vxwyzs4fy1ffjc8l00fsyygpiss135irjf7nyxgq2v0lqf3lvam"))))
@@ -40536,7 +40479,7 @@ tools for implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1p09ynysrq1vcdlmcqnapq4qakl2yd1ng3kxh3qscpx09k2a6cww"))))
@@ -40554,7 +40497,7 @@ tools for implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jzdgszfa4bliigiy4hi66k7fs3gfwi2qxn8vik84ph77fwdwvvs"))))
@@ -40696,7 +40639,7 @@ generator that uses the HC-128 algorithm.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_hc" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0g31sqwpmsirdlwr0svnacr4dbqyz339im4ssl9738cjgfpjjcfa"))))
@@ -40713,7 +40656,7 @@ generator that uses the HC-128 algorithm.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_hc" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1i0vl8q5ddvvy0x8hf1zxny393miyzxkwqnw31ifg6p0gdy6fh3v"))))
@@ -40782,7 +40725,7 @@ Add, and Count\" which are the principal bitwise operations employed.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_isaac" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "027flpjr4znx2csxk7gxb7vrf9c7y5mydmvg5az2afgisp4rgnfy"))))
@@ -40802,7 +40745,7 @@ Add, and Count\" which are the principal bitwise operations employed.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_jitter" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "16z387y46bfz3csc42zxbjq89vcr1axqacncvv8qhyy93p4xarhi"))))
@@ -40853,7 +40796,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_os" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wahppm0s64gkr2vmhcgwc0lij37in1lgfxg5rbgqlz0l5vgcxbv"))))
@@ -40877,7 +40820,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_pcg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1w47awndfhgcc31zbji66pwndqmc6lsyairqi9b17f82f19riqbx"))))
@@ -40904,7 +40847,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_pcg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ab4h6s6x3py833jk61lwadq83qd1c8bih2hgi6yps9rnv0x1aqn"))))
@@ -40932,7 +40875,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_pcg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0i0bdla18a8x4jn1w0fxsbs3jg7ajllz6azmch1zw33r06dv1ydb"))))
@@ -41000,7 +40943,7 @@ generator based on timing jitter.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rand_xorshift" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0p2x8nr00hricpi2m6ca5vysiha7ybnghz79yqhhx6sl4gkfkxyb"))))
@@ -41262,7 +41205,7 @@ libcore.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rawpointer" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1qy1qvj17yh957vhffnq6agq0brvylw27xgks171qrah75wmg8v0"))))
@@ -41284,7 +41227,7 @@ and @code{ptrdistance}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rawpointer" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06ghpm9y7gacks78s3maakha07kbnwrxif5q37r2l7z1sali3b7b"))))))
@@ -41455,7 +41398,7 @@ reference counting.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rdrand" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1cjq0kwx1bk7jx3kzyciiish5gqsj7620dm43dc52sr8fzmm9037"))))
@@ -41569,7 +41512,7 @@ owned memory.")
       (origin
         (method url-fetch)
         (uri (crate-uri "redox_syscall" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kh59fpwy33w9nwd5iyc283yglq8pf2s41hnhvl48iax9mz0zk21"))))
@@ -41583,7 +41526,7 @@ owned memory.")
       (origin
         (method url-fetch)
         (uri (crate-uri "redox-termios" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xhgvdh62mymgdl3jqrngl8hr4i8xwpnbsxnldq0l47993z1r2by"))))
@@ -42240,9 +42183,9 @@ uses finite automata and guarantees linear time matching on all inputs.")
         ("rust-tokio" ,rust-tokio-0.2)
         ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-reqwest-0.9
   (package
@@ -42328,7 +42271,7 @@ uses finite automata and guarantees linear time matching on all inputs.")
       (origin
         (method url-fetch)
         (uri (crate-uri "resolv-conf" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jlzifww1h7j23jnjj49xz8q0fpd9rqpd0ks8c4y651vgw9lx0qi"))))
@@ -42538,9 +42481,9 @@ Rust Language Server.")
        (("rust-byteorder" ,rust-byteorder-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (home-page "https://github.com/mozilla/rkv")
     (synopsis "Typed key-value storage")
     (description "This package provides a typed key-value storage solution.")
@@ -43325,7 +43268,7 @@ please consider using @code{async-std} or @code{tokio}.")
              (setenv "RUSTC_BOOTSTRAP" "1")
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))))
+     (list pkg-config))))
 
 (define-public rust-rusqlite-0.19
   (package
@@ -43363,7 +43306,7 @@ please consider using @code{async-std} or @code{tokio}.")
         ("rust-unicase" ,rust-unicase-2)
         ("rust-uuid" ,rust-uuid-0.7))))
     (inputs
-     `(("sqlite" ,sqlite)))))
+     (list sqlite))))
 
 (define-public rust-rust-argon2-0.7
   (package
@@ -43472,8 +43415,7 @@ password hashing function.")
           "10k58hf367626d4akl7ifyk5qwqphfs5x6z1yay22pkyc6w7q4h1"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:tests? #f          ; not all test files included.
+     `(#:tests? #f          ; not all test files included.
        #:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-1)
         ("rust-arrayvec" ,rust-arrayvec-0.5)
@@ -44139,7 +44081,7 @@ It is automatically published using the compiler repository at
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-demangle" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10qp42sl1wrdbgbbh8rnay2grm976z7hqgz32c4y09l1c071qsac"))))
@@ -44260,7 +44202,7 @@ forth, as well as the ability to create custom thread-pools with ThreadPool.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-serialize" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1nkg3vasg7nk80ffkazizgiyv3hb1l9g3d8h17cajbkx538jiwfw"))))
@@ -44307,7 +44249,7 @@ decoding.")
       (origin
         (method url-fetch)
         (uri (crate-uri "rustc-std-workspace-core" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1309xhwyai9xpz128xrfjqkmnkvgjwddznmj7brbd8i8f58zamhr"))))
@@ -45215,7 +45157,7 @@ deserialization framework.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ryu" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0xlx9ybzncrb7d6r9533g8ydlg6mr252pfzl4g9cqaqkpvk24mjk"))))
@@ -45463,7 +45405,7 @@ computation (experimental)")
       (origin
         (method url-fetch)
         (uri (crate-uri "safemem" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wp0d2b2284lw11xhybhaszsczpbq1jbdklkxgifldcknmy3nw7g"))))
@@ -45498,7 +45440,7 @@ computation (experimental)")
       (origin
         (method url-fetch)
         (uri (crate-uri "same-file" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k"))))
@@ -45610,7 +45552,7 @@ motivation for writing this library.
       (origin
         (method url-fetch)
         (uri (crate-uri "schannel" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "08d0p5iy574vdrax4l3laazic0crj7rp7vp3if5rrfkcdfq51xc7"))))
@@ -45656,7 +45598,7 @@ server functionality.")
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped_threadpool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1a26d3lk40s9mrf4imhbik7caahmw2jryhhb6vqv6fplbbgzal8x"))))
@@ -45685,7 +45627,7 @@ non-'static references in parallel.")
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped-tls" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1hj8lifzvivdb1z02lfnzkshpvk85nkgzxsy2hc0zky9wf894spa"))))
@@ -45708,7 +45650,7 @@ library's old @code{scoped_thread_local!} macro for providing scoped access to
       (origin
         (method url-fetch)
         (uri (crate-uri "scoped-tls" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0a2bn9d2mb07c6l16sadijy4p540g498zddfxyiq4rsqpwrglbrk"))))))
@@ -45721,7 +45663,7 @@ library's old @code{scoped_thread_local!} macro for providing scoped access to
       (origin
         (method url-fetch)
         (uri (crate-uri "scopeguard" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1kbqm85v43rq92vx7hfiay6pmcga03vrjbbfwqpyj3pwsg3b16nj"))))
@@ -45746,7 +45688,7 @@ with one of the implemented strategies.")
         (method url-fetch)
         (uri (crate-uri "scopeguard" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "09sy9wbqp409pkwmqni40qmwa99ldqpl48pp95m1xw8sc19qy9cl"))))))
@@ -46108,7 +46050,7 @@ statistical guarantees.")
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2))))
-    (inputs `(("libseccomp" ,libseccomp)))
+    (inputs (list libseccomp))
     (home-page "https://github.com/polachok/seccomp-sys")
     (synopsis "Low-level bindings to libseccomp")
     (description "This package provides low-level bindings to libseccomp.")
@@ -46313,7 +46255,7 @@ macOS and iOS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "security-framework-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "15gqhhi206lzynd0pcbswxhvqc4p9bmpl2h9qnwfnpb16zy96573"))))
@@ -46583,7 +46525,7 @@ Semantic Versioning.")
       (origin
         (method url-fetch)
         (uri (crate-uri "semver-parser" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1ahqhvgpzhcsd28id7xnrjv4419i9yyalhm7d7zi430qx0hi2vml"))))))
@@ -46597,7 +46539,7 @@ Semantic Versioning.")
       (origin
         (method url-fetch)
         (uri (crate-uri "semver-parser" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "18vhypw6zgccnrlm5ps1pwa0khz7ry927iznpr88b87cagr1v2iq"))))))
@@ -46654,7 +46596,7 @@ thread.  If any of these constraints is violated, a panic occurs.")
         ("rust-rand" ,rust-rand-0.7)
         ("rust-rand-isaac" ,rust-rand-isaac-0.2))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/markschl/seq_io")
     (synopsis "Fast FASTA, FASTQ and FASTX parsing")
     (description "This library provides readers for the the following sequence
@@ -46729,10 +46671,9 @@ fragment of code.")
        #:cargo-development-inputs
        (("rust-rpassword" ,rust-rpassword-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("nettle" ,nettle)))
+     (list clang nettle))
     (home-page "https://sequoia-pgp.org/")
     (synopsis "OpenPGP data types and associated machinery")
     (description
@@ -47193,7 +47134,7 @@ TOML/JSON/MessagePack strings and serializable values.")
       (origin
         (method url-fetch)
         (uri (crate-uri "serde-derive" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ccg4m7ww6mfs5vjdbdifri2kf1wyd4difjnqnraph2gssaw54ck"))))
@@ -47915,7 +47856,7 @@ functionality and without weak references.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-servo-fontconfig-sys" ,rust-servo-fontconfig-sys-4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)))))
 
@@ -47969,7 +47910,7 @@ functionality and without weak references.")
         ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)))))
 
@@ -47995,9 +47936,9 @@ functionality and without weak references.")
        (("rust-cmake" ,rust-cmake-0.1)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://www.freetype.org/")
     (synopsis "Rust wrapper around freetype")
     (description
@@ -48582,7 +48523,7 @@ some context).")
      (origin
        (method url-fetch)
        (uri (crate-uri "shlex" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0gf773p2snqpw69rzh8s1wdlq8dc8c1ypmiv516il1fdyb46i9a2"))))
     (build-system cargo-build-system)
@@ -48601,7 +48542,7 @@ words, like Python's shlex.")
       (origin
         (method url-fetch)
         (uri (crate-uri "shlex" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lmv6san7g8dv6jdfp14m7bdczq9ss7j7bgsfqyqjc3jnjfippvz"))))
@@ -49132,8 +49073,7 @@ variants in pure Rust.")
          "07ix5fsdnpf2xsb0k5rbiwlmsicm2237fcx7blirp9p7pljr5mhn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;requires the "if in const fn" feature
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-1)
         ("rust-array-ops" ,rust-array-ops-0.1)
         ("rust-bitmaps" ,rust-bitmaps-2)
@@ -49205,7 +49145,7 @@ designed for @code{immutable.rs}.")
       (origin
         (method url-fetch)
         (uri (crate-uri "slab" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1y59xsa27jk84sxzswjk60xcjf8b4fm5960jwpznrrcmasyva4f1"))))
@@ -49830,8 +49770,7 @@ escaped text to recover the original string.")
         (base32 "1v4f132rk9wxiw8hb3kgnixirzr8kbfhg2lgsf4b85vbg02a0jfn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; fix for E0658
-       #:cargo-inputs (("rust-serde" ,rust-serde-1))))
+     `(#:cargo-inputs (("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/emilk/snake_case")
     (synopsis "String-like type that only contains non-empty snake_case")
     (description
@@ -49880,8 +49819,7 @@ algorithm.  Includes streaming compression and decompression.")
           "18ny6m1gnf6cwp5ax0b5hr36w6yg16z7faj76b31aq2jghhgqgcy"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46    ; or later
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/rust-lang/socket2")
@@ -49901,7 +49839,7 @@ maximal amount of configuration possible intended.")
      (origin
        (method url-fetch)
        (uri (crate-uri "socket2" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0vldz14mxqxnjqb6an2pj7mgclv7nrk45cpscwq7g3fj2c0mfbhj"))))
     (arguments
@@ -49948,7 +49886,7 @@ maximal amount of configuration possible intended.")
       (origin
         (method url-fetch)
         (uri (crate-uri "sourcefile" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lwa6973zs4bgj29my7agfjgk4nw9hp6j7dfnr13nid85fw7rxsb"))))
@@ -50066,7 +50004,7 @@ track of where each new file and line starts.")
       (origin
         (method url-fetch)
         (uri (crate-uri "spin" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0b84m6dbzrwf2kxylnw82d3dr8w06av7rfkr8s85fb5f43rwyqvf"))))
@@ -50348,7 +50286,7 @@ to the same address.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stacker" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "12igajfgqz96c7vcwi91xdfsphawik6g36ndlglqih0a7bqw8vyr"))))
@@ -50471,7 +50409,7 @@ management.")
       (origin
         (method url-fetch)
         (uri (crate-uri "static-assertions" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"))))
@@ -50492,7 +50430,7 @@ are met.")
       (origin
         (method url-fetch)
         (uri (crate-uri "static-assertions" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lw33i89888yb3x29c6dv4mrkg3534n0rlg3r7qzh4p58xmv6gkz"))))))
@@ -50811,7 +50749,7 @@ you to define custom reference types outside of the @code{stdweb} library.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stdweb-internal-runtime" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h0nkppb4r8dbrbms2hw9n5xdcs392m0r5hj3b6lsx3h6fx02dr1"))))
@@ -50831,7 +50769,7 @@ crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "stdweb-internal-test-macro" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0wx3jlm98qrg1pdw149fprzs9x3x3igqkm5ll23jv2v62yddfrjf"))))
@@ -50973,7 +50911,7 @@ iterated over only by reference rather than by value.")
       (origin
         (method url-fetch)
         (uri (crate-uri "streaming-stats" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0iz5dlq51w5hxjrv6a4hpf8rrj91kgvy0s9mhj0j12il9v771mmh"))))
@@ -51248,8 +51186,7 @@ file.")
         (base32 "1gxy34j42x5a572cfkkhmxamrm764pswj5r3wcwi0bwfc4xgn68x"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52 ; fix for E0658
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-jetscii" ,rust-jetscii-0.5)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
@@ -51319,7 +51256,7 @@ and Jaro-Winkler.")
      (origin
        (method url-fetch)
        (uri (crate-uri "strsim" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0k497pv882qn3q977ckznm13vxx927g8s1swvcv68j3c1pccwik4"))))))
@@ -51333,7 +51270,7 @@ and Jaro-Winkler.")
       (origin
         (method url-fetch)
         (uri (crate-uri "strsim" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0sjsm7hrvjdifz661pjxq5w4hf190hx53fra8dfvamacvff139cf"))))))
@@ -52341,7 +52278,7 @@ a syntax tree of Rust source code.")
       (origin
         (method url-fetch)
         (uri (crate-uri "synstructure_test_traits" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1b3fs2b9kc1gy9dilaxqjbdl4z0mlrbbxjzkprdx953rif1c3q66"))))
@@ -52612,7 +52549,7 @@ no_std compatible by default, only relying on alloc.")
         ("rust-seccomp-sys" ,rust-seccomp-sys-0.1)
         ("rust-strum" ,rust-strum-0.19)
         ("rust-strum-macros" ,rust-strum-macros-0.19))))
-    (inputs `(("libseccomp" ,libseccomp)))
+    (inputs (list libseccomp))
     (home-page "https://github.com/kpcyrd/syscallz-rs")
     (synopsis "Simple seccomp library for rust")
     (description "Simple seccomp library for rust")
@@ -52925,7 +52862,7 @@ without a mutable reference.")
       (origin
         (method url-fetch)
         (uri (crate-uri "tar" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1lr6v3cpkfxd2lk5ll2jd8wr1xdskwj35smnh5sfb8xvzzxnn6dk"))))
@@ -53516,9 +53453,9 @@ streams.")
         ("rust-tectonic-cfg-support" ,rust-tectonic-cfg-support-0.1)
         ("rust-tectonic-dep-support" ,rust-tectonic-dep-support-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://tectonic-typesetting.github.io/")
     (synopsis "Xdvipdfmx's PDF, XDV, and image I/O APIs in C, as a Rust crate")
     (description
@@ -53629,7 +53566,7 @@ a C API.")
       (origin
         (method url-fetch)
         (uri (crate-uri "tempdir" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1n5n86zxpgd85y0mswrp5cfdisizq2rv3la906g6ipyc03xvbwhm"))))
@@ -53654,7 +53591,7 @@ deleting all contents when it's dropped.")
      (origin
        (method url-fetch)
        (uri (crate-uri "tempfile" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "08pbf3c1i42382dc44dil5bgiawcsi0qk6zdibw10f69rxiwdhfs"))))
     (build-system cargo-build-system)
@@ -53835,7 +53772,7 @@ template language.")
       (origin
         (method url-fetch)
         (uri (crate-uri "term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1wbh8ngqkqr3f6wz902yplf60bd5yapnckvrkgmzp5nffi7n8qzs"))))
@@ -53853,7 +53790,7 @@ template language.")
       (origin
         (method url-fetch)
         (uri (crate-uri "term" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32 "109jmzddq1kz6wm2ndgddy7yrlqcw2i36ygxl0fcymc0sda7w1zj"))))
     (arguments
@@ -53958,7 +53895,7 @@ library.")
      (origin
        (method url-fetch)
        (uri (crate-uri "termcolor" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1x65i1ny4m6z1by62ra6wdcrd557p2ysm866x0pg60zby2cxizid"))))
     (build-system cargo-build-system)
@@ -54067,7 +54004,7 @@ writing colored text to a terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "termion" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "01f9787d5nx445bqbj644v38bn0hl2swwjy9baz0dnbqi6fyqb62"))))
@@ -54093,7 +54030,7 @@ writing colored text to a terminal.")
       (origin
         (method url-fetch)
         (uri (crate-uri "termios" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "09any1p4jp4bphvb5ikagnvwjc3xn2djchy96nkpa782xb2j1dkj"))))
@@ -54396,7 +54333,7 @@ handle Unicode characters correctly.")
       (origin
         (method url-fetch)
         (uri (crate-uri "thread-id" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1h90v19fjz3x9b25ywh68z5yf2zsmm6h5zb4rl302ckbsp4z9yy7"))))
@@ -54441,7 +54378,7 @@ different for every thread.")
      (origin
        (method url-fetch)
        (uri (crate-uri "thread_local" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1gccp3grndpi6dyhzylz4hkqnkzc1xyri98n0xwwhnn90i7d4640"))))
     (build-system cargo-build-system)
@@ -54465,7 +54402,7 @@ different for every thread.")
       (origin
         (method url-fetch)
         (uri (crate-uri "thread_local" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06rzik99p8c5js8238yhc8rk6np543ylb1dy9nrw5v80j0r3xdf6"))))
@@ -54543,7 +54480,7 @@ contention between workers when delivering jobs.")
       (origin
         (method url-fetch)
         (uri (crate-uri "threadpool" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0rd89n1q7vy47w4c32cnynibffv9kj3jy3dwr0536n9lbw5ckw72"))))
@@ -54604,9 +54541,9 @@ fixed set of worker threads.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://nest.pijul.com/pijul_org/thrussh")
     (synopsis "Straightforward bindings to libsodium")
     (description
@@ -54769,7 +54706,7 @@ interoperable with the standard library, and is mostly compatible with
       (origin
         (method url-fetch)
         (uri (crate-uri "time" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0f14wrgxj7ya2v4msg5mni7046bsm2angm7cn3pd3yv04gpm12na"))))
@@ -55661,7 +55598,7 @@ futures efficiently")
       (origin
         (method url-fetch)
         (uri (crate-uri "tokio-mock-task" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1y7q83qfk9ljjfvs82b453pmz9x1v3d6kr4x55j8mal01s6790dw"))))
@@ -55859,9 +55796,9 @@ OpenSSL.")
        (("rust-futures" ,rust-futures-0.3)
         ("rust-tokio" ,rust-tokio-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-tokio-openssl-0.3
   (package
@@ -55899,8 +55836,7 @@ OpenSSL.")
           "12rb390i3af7zb0z2idhaf6l2m6snypwdiwjw84rmyz4qy1i6ard"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46
-       #:tests? #f                      ;require postgresql
+     `(#:tests? #f                      ;require postgresql
        #:cargo-inputs
        (("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-byteorder" ,rust-byteorder-1)
@@ -56624,9 +56560,9 @@ pool.")
         ("rust-tokio-util" ,rust-tokio-util-0.3)
         ("rust-winapi" ,rust-winapi-0.3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://tokio.rs")
     (synopsis "TLS/SSL streams for Tokio")
     (description "An implementation of TLS/SSL streams for Tokio giving an
@@ -56890,7 +56826,7 @@ stream-based WebSocket implementation.")
       (origin
         (method url-fetch)
         (uri (crate-uri "toml" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1apcmjrrjw429pjw7mqlmdwwd67g8305vwqy4kw3swr612bl44d3"))))
@@ -57133,7 +57069,7 @@ automatically instrumenting functions.")
      (origin
        (method url-fetch)
        (uri (crate-uri "tracing-core" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0pvbgv301vw6dq4krc14yqbyyixb42lcs4s57xw05llkgy9f63gm"))))
     (build-system cargo-build-system)
@@ -57454,7 +57390,7 @@ be used directly.  See @code{rust-trackable} for more information.")
       (origin
         (method url-fetch)
         (uri (crate-uri "traitobject" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0yb0n8822mr59j200fyr2fxgzzgqljyxflx9y8bdy3rlaqngilgg"))))
@@ -57766,9 +57702,9 @@ extension for the Trust-DNS client to use native-tls for TLS.")
         ("rust-tokio-tls" ,rust-tokio-tls-0.3)
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.19))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-native-tls-0.18
   (package
@@ -57866,9 +57802,9 @@ extension for the Trust-DNS client to use tokio-openssl for TLS.")
        (("rust-openssl" ,rust-openssl-0.10)
         ("rust-tokio" ,rust-tokio-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-openssl-0.18
   (package
@@ -58296,9 +58232,9 @@ the Trust-DNS client to use rustls for TLS.")
        #:cargo-development-inputs
        (("rust-openssl" ,rust-openssl-0.10))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))))
+     (list openssl))))
 
 (define-public rust-trust-dns-rustls-0.18
   (package
@@ -58341,9 +58277,9 @@ the Trust-DNS client to use rustls for TLS.")
         (base32
          "0vbh2y7w2s5gcw33fn4hb5f927kgjm6603vw63slg9riikmsiq43"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:cargo-test-flags
        '("--release" "--" "--skip=tests::test_tls_client_stream_ipv4")
@@ -58367,7 +58303,7 @@ the Trust-DNS client to use rustls for TLS.")
      (origin
        (method url-fetch)
        (uri (crate-uri "try_from" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "12wdd4ja7047sd3rx70hv2056hyc8gcdllcx3a41g1rnw64kng98"))))
@@ -58389,7 +58325,7 @@ the Trust-DNS client to use rustls for TLS.")
       (origin
         (method url-fetch)
         (uri (crate-uri "try-lock" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "10p36rx6pqi9d0zr876xa8vksx2m66ha45myakl50rn08dxyn176"))))
@@ -58691,7 +58627,7 @@ strings.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typeable" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "11w8dywgnm32hb291izjvh4zjd037ccnkk77ahk63l913zwzc40l"))))
@@ -58776,7 +58712,7 @@ deserialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typemap" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1xm1gbvz9qisj1l6d36hrl9pw8imr8ngs6qyanjnsad3h0yfcfv5"))))
@@ -58798,7 +58734,7 @@ deserialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "typenum" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0cvbksljz61ian21fnn0h51kphl0pwpzb932bv4s0rwy1wh8lg1p"))))
@@ -58846,7 +58782,7 @@ Unicode character database.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ucd-trie" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1hh6kyzh5xygwy96wfmsf8v8czlzhps2lgbcyhj1xzy1w1xys04g"))))
@@ -58869,7 +58805,7 @@ Unicode character database.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ucd-util" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13ng291mkc9b132jjf4laj76f5nqm5qd2447rm8bry3wxbdc5kaw"))))
@@ -59352,7 +59288,7 @@ boundaries according to Unicode Standard Annex #29 rules.")
         (method url-fetch)
         (uri (crate-uri "unicode-xid" version))
         (file-name
-          (string-append name "-" version ".crate"))
+          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0r6mknipyy9vpz8mwmxvkx65ff2ha1n2pxqjj6f46lcn8yrhpzpp"))))
@@ -59372,7 +59308,7 @@ or XID_Continue properties according to Unicode Standard Annex #31.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unicode-xid" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw"))))))
@@ -59483,7 +59419,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unreachable" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0mps2il4xy2mjqc3appas27hhn2xmvixc3bzzhfrjj74gy3i0a1q"))))
@@ -59506,7 +59442,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "unsafe-any" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0zwwphsqkw5qaiqmjwngnfpv9ym85qcsyj7adip9qplzjzbn00zk"))))
@@ -59548,7 +59484,7 @@ whitespace from a string.")
       (origin
         (method url-fetch)
         (uri (crate-uri "untrusted" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0jkbqaj9d3v5a91pp3wp9mffvng1nhycx6sh4qkdd9qyr62ccmm1"))))
@@ -60103,7 +60039,7 @@ a part of rav1e.")
       (origin
         (method url-fetch)
         (uri (crate-uri "vcpkg" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1yvrd2b97j4hv5bfhcj3al0dpkbzkdsr6dclxqz3zqm50rhwl2xh"))))
@@ -60147,7 +60083,7 @@ a part of rav1e.")
       (origin
         (method url-fetch)
         (uri (crate-uri "vec_map" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1481w9g1dw9rxp3l6snkdqihzyrd2f8vispzqmwjwsdyhw8xzggi"))))
@@ -60220,7 +60156,7 @@ designed for reexporting.")
       (origin
         (method url-fetch)
         (uri (crate-uri "version_check" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32 "1vbaqdf802qinsq8q20w8w0qn2pv0rkq5p73ijcblrwxcvjp5adm"))))
     (build-system cargo-build-system)
@@ -60244,7 +60180,7 @@ If that fails, no determination is made, and calls return None.")
       (origin
         (method url-fetch)
         (uri (crate-uri "version_check" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1pf91pvj8n6akh7w6j5ypka6aqz08b3qpzgs0ak2kjf4frkiljwi"))))))
@@ -60365,7 +60301,7 @@ version numbers.")
       (origin
         (method url-fetch)
         (uri (crate-uri "void" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0zc8f0ksxvmhvgx4fdg0zyn6vdnbxd2xv9hfx4nhzg6kbs4f80ka"))))
@@ -60745,7 +60681,7 @@ result.")
        (method url-fetch)
        (uri (crate-uri "wasi" version))
        (file-name
-        (string-append name "-" version ".crate"))
+        (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "1ir3pd4phdfml0cbziw9bqp7mnk0vfp9biy8bh25lln6raml4m7x"))))
@@ -60969,7 +60905,7 @@ attribute that is not in the shared backend crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "wasm-bindgen-shared" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0n3ir6gq27np22l6m96y342a6fphk1pkbzbfqx6g364kgzfi2y3y"))))
@@ -61115,7 +61051,7 @@ attribute that is not in the shared backend crate.")
       (origin
         (method url-fetch)
         (uri (crate-uri "wasm-bindgen-test-macro" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "19bvmw8mqlwh6wkbzgs3cnlkywrv8q2kkqggz6y0p158930xm287"))))
@@ -61752,7 +61688,7 @@ terms of allowing LLVM's auto-vectorizer to do its job.")
       (origin
         (method url-fetch)
         (uri (crate-uri "widestring" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "13565qy4jhpg4x0xw8mwxzzsh0p8c93p5208lh6kpwp0q01y6qx7"))))
@@ -61799,7 +61735,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"))))
@@ -61810,8 +61746,8 @@ command-line, uniformly on all platforms")
        (("winapi-i686-pc-windows-gnu" ,rust-winapi-i686-pc-windows-gnu-0.4)
         ("winapi-x86-64-pc-windows-gnu" ,rust-winapi-x86-64-pc-windows-gnu-0.4))))
     (inputs
-     `(("rust-winapi-i686-pc-windows-gnu" ,rust-winapi-i686-pc-windows-gnu-0.4)
-       ("rust-winapi-x86-64-pc-windows-gnu" ,rust-winapi-x86-64-pc-windows-gnu-0.4)))
+     (list rust-winapi-i686-pc-windows-gnu-0.4
+           rust-winapi-x86-64-pc-windows-gnu-0.4))
     (home-page "https://github.com/retep998/winapi-rs")
     (synopsis "Raw FFI bindings for all of Windows API")
     (description
@@ -61828,7 +61764,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0yh816lh6lf56dpsgxy189c2ai1z3j8mw9si6izqb6wsjkbcjz8n"))))
@@ -61842,7 +61778,7 @@ command-line, uniformly on all platforms")
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi-build" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "1g4rqsgjky0a7530qajn2bbfcrl2v0zb39idgdws9b1l7gp5wc9d"))))
@@ -61886,7 +61822,7 @@ i686-pc-windows-gnu target.  Please don't use this crate directly, depend on
       (origin
         (method url-fetch)
         (uri (crate-uri "winapi-util" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0y71bp7f6d536czj40dhqk0d55wfbbwqfp2ymqf1an5ibgl6rv3h"))))
@@ -61955,7 +61891,7 @@ x86_64-pc-windows-gnu target.  Please don't use this crate directly, depend on
       (origin
         (method url-fetch)
         (uri (crate-uri "wincolor" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "017x33ljndwc76cp5z9llgndn0nh7v8jcjaykbizkawmwy9n3pyp"))))
@@ -62153,7 +62089,7 @@ trust these primitives.")
       (origin
         (method url-fetch)
         (uri (crate-uri "winutil" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0vkyl3fbbf05n5ph5yz8sfaccrk9x3qsr25560w6w68ldf5i7bvx"))))
@@ -62224,7 +62160,7 @@ serialization.")
       (origin
         (method url-fetch)
         (uri (crate-uri "ws2_32-sys" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0ppscg5qfqaw0gzwv2a4nhn5bn01ff9iwn6ysqnzm4n8s3myz76m"))))
@@ -62327,7 +62263,7 @@ languages.")
       (origin
         (method url-fetch)
         (uri (crate-uri "xattr" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
           "0k556fb6f5jc907975j9c8iynl2fqz3rf0w6fiig83i4yi0kfk14"))))
@@ -62368,12 +62304,9 @@ extended attributes.")
         ("rust-log" ,rust-log-0.4)
         ("rust-x11" ,rust-x11-2))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("xcb-proto" ,xcb-proto)))
+     (list libx11 libxcb xcb-proto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "https://github.com/rtbo/rust-xcb")
     (synopsis "Rust bindings and wrappers for XCB")
     (description
@@ -62410,7 +62343,7 @@ extended attributes.")
      (origin
        (method url-fetch)
        (uri (crate-uri "xdg" version))
-       (file-name (string-append name "-" version ".crate"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0mws8a0fr3cqk5nh7aq9lmkmhzghvasqy4mhw6nnza06l4d6i2fh"))))
     (build-system cargo-build-system)
@@ -62648,8 +62581,7 @@ parser.")
         ("rust-rand" ,rust-rand-0.5)
         ("rust-tokio-core" ,rust-tokio-core-0.1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xz" ,xz)))
+     (list pkg-config xz))
     (home-page "https://github.com/alexcrichton/xz2-rs")
     (synopsis "Rust bindings to liblzma")
     (description "This package provides Rust bindings to liblzma providing
@@ -63321,8 +63253,7 @@ file into an in-memory tree structure.")
          "0gsgcs1nn38r40973l6zr1v4d85f4s9qyl32n5f20jphf5z9ba1w"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;for rust-sized-chunks
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-0.4)
         ("rust-bitmaps" ,rust-bitmaps-2)
         ("rust-proptest" ,rust-proptest-0.9)
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 180594509b..78cbf871ac 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
@@ -153,12 +153,6 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
                                "--disable-decimal-float" ;would need libc
                                "--disable-libcilkrts"
 
-                              ,@(if (string-prefix? "powerpc64le-" target)
-                                   ;; On POWER9 (little endian) glibc needs
-                                   ;; the 128-bit long double type.
-                                   '("--with-long-double-128")
-                                   '())
-
                                ;; When target is any OS other than 'none' these
                                ;; libraries will fail if there is no libc
                                ;; present. See
@@ -243,6 +237,9 @@ target that libc."
         (append
          (origin-patches (package-source xgcc))
          (append (cond
+                  ((version>=? (package-version xgcc) "10.0")
+                   (search-patches "gcc-10-cross-environment-variables.patch"
+                                   "gcc-cross-gxx-include-dir.patch"))
                   ((version>=? (package-version xgcc) "8.0")
                    (search-patches "gcc-8-cross-environment-variables.patch"))
                   ((version>=? (package-version xgcc) "6.0")
@@ -341,15 +338,18 @@ target that libc."
            `(#:implicit-cross-inputs? #f
              ,@(package-arguments linux-headers))
          ((#:phases phases)
-          `(alist-replace
-            'build
-            (lambda _
-              (setenv "ARCH" ,(system->linux-architecture target))
-              (format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
-
-              (invoke "make" ,(system->defconfig target))
-              (invoke "make" "mrproper" "headers_check"))
-            ,phases))))
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda _
+                 (setenv "ARCH" ,(system->linux-architecture target))
+                 (format #t "`ARCH' set to `~a' (cross compiling)~%"
+                         (getenv "ARCH"))
+
+                 (invoke "make" ,(system->defconfig target))
+                 (invoke "make" "mrproper"
+                         ,@(if (version>=? (package-version linux-headers) "5.3")
+                               '("headers")
+                               '("headers_check")))))))))
       (native-inputs `(("cross-gcc" ,xgcc)
                        ("cross-binutils" ,xbinutils)
                        ,@(package-native-inputs linux-headers)))))
@@ -505,7 +505,7 @@ and the cross tool chain."
                ,@(package-arguments libc))
            ((#:configure-flags flags)
             `(cons ,(string-append "--host=" target)
-                   ,(if (hurd-triplet? target)
+                   ,(if (target-hurd? target)
                         `(cons "--disable-werror" ,flags)
                         flags)))
            ((#:phases phases)
@@ -519,7 +519,7 @@ and the cross tool chain."
                      (setenv "CROSS_LIBRARY_PATH"
                              (string-append kernel "/lib")) ; for Hurd's libihash
                      #t)))
-               ,@(if (hurd-triplet? target)
+               ,@(if (target-hurd? target)
                      '((add-after 'install 'augment-libc.so
                          (lambda* (#:key outputs #:allow-other-keys)
                            (let* ((out (assoc-ref outputs "out")))
@@ -527,35 +527,16 @@ and the cross tool chain."
                                (("/[^ ]+/lib/libc.so.0.3")
                                 (string-append out "/lib/libc.so.0.3"
                                                " libmachuser.so libhurduser.so"))))
-                           #t))
-                       ;; TODO: move to glibc in the next rebuild cycle
-                       (add-after 'unpack 'patch-libc/hurd
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (for-each
-                            (lambda (name)
-                              (let ((patch (assoc-ref inputs name)))
-                                (invoke "patch" "-p1" "--force" "-i" patch)))
-                            '("hurd-mach-print.patch"
-                              "hurd-gettyent.patch")))))
+                           #t)))
                      '())))))
 
         ;; Shadow the native "kernel-headers" because glibc's recipe expects the
         ;; "kernel-headers" input to point to the right thing.
         (propagated-inputs `(("kernel-headers" ,xheaders)))
 
-        ;; FIXME: 'static-bash' should really be an input, not a native input, but
-        ;; to do that will require building an intermediate cross libc.
-        (inputs (if (hurd-triplet? target)
-                    `(;; TODO: move to glibc in the next rebuild cycle
-                      ("hurd-mach-print.patch"
-                       ,(search-patch "glibc-hurd-mach-print.patch"))
-                      ("hurd-gettyent.patch"
-                       ,(search-patch "glibc-hurd-gettyent.patch")))
-                    '()))
-
         (native-inputs `(("cross-gcc" ,xgcc)
                          ("cross-binutils" ,xbinutils)
-                         ,@(if (hurd-triplet? target)
+                         ,@(if (target-hurd? target)
                                `(("cross-mig"
                                   ,@(assoc-ref (package-native-inputs xheaders)
                                                "cross-mig")))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index b6f2010a80..ba10a6c732 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -86,6 +86,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
@@ -230,9 +231,9 @@ communication, encryption, decryption, signatures, etc.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libbsd" ,libbsd)))
+     (list libbsd))
     (synopsis "Create and verify cryptographic signatures")
     (description "The signify utility creates and verifies cryptographic
 signatures using the elliptic curve Ed25519.  This is a Linux port of the
@@ -291,7 +292,7 @@ OpenBSD tool of the same name.")
     (arguments
      '(#:import-path "github.com/jedisct1/go-minisign"))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (home-page "https://github.com/jedisct1/go-minisign")
     (synopsis "Minisign verification library for Golang")
     (description "A Golang library to verify Minisign signatures.")
@@ -326,10 +327,7 @@ OpenBSD tool of the same name.")
        ("googletest-source" ,(package-source googletest))
        ("perl" ,perl)))
     (inputs
-     `(("attr" ,attr)
-       ("fuse" ,fuse)
-       ("openssl" ,openssl)
-       ("tinyxml2" ,tinyxml2)))
+     (list attr fuse openssl tinyxml2))
     (arguments
      `(#:configure-flags (list "-DUSE_INTERNAL_TINYXML=OFF")
        #:phases
@@ -396,7 +394,7 @@ the wrong hands.")
                           "SHAREDIR=/share/keyutils")
        #:test-target "test"))
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     (home-page "https://people.redhat.com/dhowells/keyutils/")
     (synopsis "Linux key management utilities")
     (description
@@ -439,9 +437,9 @@ secure operations. ")
                (install-file "ssss.1.html" docdir)
                #t))))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (native-inputs
-     `(("xmltoman" ,xmltoman)))
+     (list xmltoman))
     (home-page "http://point-at-infinity.org/ssss/")
     (synopsis "Shamir's secret sharing scheme implementation")
     (description "@command{ssss-split} and @command{ssss-combine} are utilities that split
@@ -462,7 +460,7 @@ total number of shares generated.")
                (base32
                 "136nfnpaz29hngwwnzrmc858gpnvnb977gf4ldbpapw1h1k3r8mk"))))
     (build-system gnu-build-system)
-    (native-inputs `(("sudo" ,sudo)))   ;presence needed for 'check' phase
+    (native-inputs (list sudo))   ;presence needed for 'check' phase
     (inputs
      `(("zsh" ,zsh)
        ("gnupg" ,gnupg)
@@ -555,7 +553,7 @@ user's graphical desktop.")
               (install-file "FORMAT" doc)
               #t))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://www.tarsnap.com/scrypt.html")
     (synopsis "Memory-hard encryption tool based on scrypt")
     (description "This package provides a simple password-based encryption
@@ -613,8 +611,7 @@ attacks than alternative functions such as @code{PBKDF2} or @code{bcrypt}.")
          "0yxqqcqvj51fn7b7j5xqhz65v74arzgainn66c6k7inijbmr1xws"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-module-build perl-test-nowarnings))
     (home-page "https://metacpan.org/release/Math-Random-ISAAC-XS")
     (synopsis "C implementation of the ISAAC PRNG algorithm")
     (description "ISAAC (Indirection, Shift, Accumulate, Add, and Count) is a
@@ -640,9 +637,9 @@ This package implements the same interface as @code{Math::Random::ISAAC}.")
          "0z1b3xbb3xz71h25fg6jgsccra7migq7s0vawx2rfzi0pwpz0wr7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-test-nowarnings))
     (propagated-inputs
-     `(("perl-math-random-isaac-xs" ,perl-math-random-isaac-xs)))
+     (list perl-math-random-isaac-xs))
     (home-page "https://metacpan.org/release/Math-Random-ISAAC")
     (synopsis "Perl interface to the ISAAC PRNG algorithm")
     (description "ISAAC (Indirection, Shift, Accumulate, Add, and Count) is a
@@ -668,16 +665,15 @@ generator.")
         (base32 "1rpdds3sy5l1fhngnkrsgwsmwd54wpicx3i9ds69blcskwkcwkpc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build-tiny perl-test-fatal))
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-module-find" ,perl-module-find)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-type-tiny" ,perl-type-tiny)))
+     (list perl-capture-tiny
+           perl-module-find
+           perl-module-runtime
+           perl-moo
+           perl-namespace-clean
+           perl-sub-exporter
+           perl-type-tiny))
     (home-page "https://metacpan.org/release/Crypt-Random-Source")
     (synopsis "Get weak or strong random data from pluggable sources")
     (description "This module provides implementations for a number of
@@ -698,15 +694,11 @@ byte-oriented sources of random data.")
          "0dgbf4ncll4kmgkyb9fsaxn0vf2smc9dmwqzgh3259zc2zla995z"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)
-       ("perl-test-sharedfork" ,perl-test-sharedfork)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-list-moreutils perl-test-leaktrace perl-test-sharedfork
+           perl-test-warn))
     (inputs
-     `(("perl-crypt-random-source" ,perl-crypt-random-source)
-       ("perl-math-random-isaac" ,perl-math-random-isaac)
-       ("perl-math-random-isaac-xs" ,perl-math-random-isaac-xs)
-       ("perl-moo" ,perl-moo)))
+     (list perl-crypt-random-source perl-math-random-isaac
+           perl-math-random-isaac-xs perl-moo))
     (home-page "https://metacpan.org/release/Math-Random-Secure")
     (synopsis "Cryptographically secure replacement for rand()")
     (description "This module is intended to provide a
@@ -795,7 +787,7 @@ data on your platform, so the seed itself will be as random as possible.
                      "Cflags: -I${includedir}\n"))
                    #t))))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://cryptopp.com/")
     (synopsis "C++ class library of cryptographic schemes")
     (description "Crypto++ is a C++ class library of cryptographic schemes.")
@@ -878,7 +870,7 @@ SHA-1, SHA-2, and SHA-3, yet is at least as secure as SHA-3.")
 (define-public rhash
   (package
     (name "rhash")
-    (version "1.3.9")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
@@ -887,40 +879,40 @@ SHA-1, SHA-2, and SHA-3, yet is at least as secure as SHA-3.")
        (file-name (string-append "rhash-" version ".tar.gz"))
        (sha256
         (base32
-         "1xn9fqa6rlnhsbgami45g82dlw9i1skg2sri3ydiinwak5ph1ca2"))))
+         "0qpc1fq7gdxxl11zya1gqhl9628jjk3x60q9sna43w0yz7sh03b0"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list (string-append "--prefix=" (assoc-ref %outputs "out"))
-             ,@(let ((target (%current-target-system)))
-                 (if target
-                     `((string-append "--target=" ,target)
-                       (string-append "--cc="
-                                      (assoc-ref %build-inputs "cross-gcc")
-                                      "/bin/" ,target "-gcc"))
-                     '())))
-       #:make-flags
-       ;; The binaries in /bin need some help finding librhash.so.0.
-       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
-       #:test-target "test"             ; ‘make check’ just checks the sources
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           ;; ./configure is not GNU autotools' and doesn't gracefully handle
-           ;; unrecognized options, so we must call it manually.
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (apply invoke "./configure" configure-flags)))
-         (add-before 'check 'patch-/bin/sh
-           (lambda _
-             (substitute* "Makefile"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-after 'install 'install-library-extras
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke
-                    "make" "-C" "librhash"
-                    "install-lib-headers" "install-so-link"
-                    make-flags))))))
+     (list #:configure-flags
+           #~(list (string-append "--prefix=" #$output)
+                   #$@(let ((target (%current-target-system)))
+                        (if target
+                            #~((string-append "--target=" #$target)
+                               (string-append "--cc="
+                                              (assoc-ref %build-inputs "cross-gcc")
+                                              "/bin/" #$target "-gcc"))
+                            #~())))
+           #:make-flags
+           ;; The binaries in /bin need some help finding librhash.so.0.
+           #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+           #:test-target "test"         ; ‘make check’ just checks the sources
+           #:phases
+           #~(modify-phases %standard-phases
+              (delete 'configure)
+              (add-before 'build 'configure
+                ;; ./configure is not GNU autotools' and doesn't gracefully handle
+                ;; unrecognized options, so we must call it manually.
+                (lambda* (#:key configure-flags #:allow-other-keys)
+                  (apply invoke "./configure" configure-flags)))
+              (add-before 'check 'patch-/bin/sh
+                (lambda _
+                  (substitute* "Makefile"
+                    (("/bin/sh") (which "sh")))))
+              (add-after 'install 'install-library-extras
+                (lambda* (#:key make-flags #:allow-other-keys)
+                  (apply invoke
+                         "make" "-C" "librhash"
+                         "install-lib-headers" "install-so-link"
+                         make-flags))))))
     (home-page "https://sourceforge.net/projects/rhash/")
     (synopsis "Utility for computing hash sums")
     (description "RHash is a console utility for calculation and verification
@@ -973,9 +965,7 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
      `(("python" ,python-wrapper)
        ("python-docutils" ,python-docutils)))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list sqlite bzip2 zlib))
     (synopsis "Cryptographic library in C++11")
     (description "Botan is a cryptography library, written in C++11, offering
 the tools necessary to implement a range of practical systems, such as TLS/DTLS,
@@ -1031,11 +1021,9 @@ security.")
                (string-append "--with-openssl="
                               (assoc-ref %build-inputs "openssl")))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (home-page "https://github.com/vstakhov/asignify")
       (synopsis "Cryptographic authentication and encryption tool and library")
       (description "Asignify offers public cryptographic signatures and
@@ -1103,9 +1091,7 @@ trivial to build for local use.  Portability is emphasized over performance.")
                              "--enable-module-ecdh"
                              "--enable-shared")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       ;; WARNING: This package might need additional configure flags to run properly.
       ;; See https://github.com/archlinux/svntogit-community/blob/packages/libsecp256k1/trunk/PKGBUILD.
       (synopsis "C library for EC operations on curve secp256k1")
@@ -1143,9 +1129,7 @@ Features:
         (base32 "1rnif3iny6pz1r3g69bagzr342mm3x0v66b60csnmm1rg44bd5v1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      '(#:configure-flags '("--enable-module-recovery"
                            "--enable-experimental"
@@ -1193,10 +1177,9 @@ Features:
                 "0npgr6y85gzwksy8jkwa4yzvqwjprwnplx3yiw3ayk4f0ldlhaxa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("nettle" ,nettle)
-       ("libxml2" ,libxml2)))
+     (list nettle libxml2))
     (home-page "http://stoken.sf.net")
     (synopsis "Software Token for cryptographic authentication")
     (description
@@ -1243,8 +1226,7 @@ utility/testing functions.")
                (mkdir-p man1)
                #t))))))
     (inputs
-     `(("libsodium" ,libsodium)
-       ("openssl" ,openssl)))
+     (list libsodium openssl))
     (synopsis "High-performance command-line tool for stream encryption")
     (description "Hpenc is a command-line tool for performing authenticated
 encryption (AES-GCM and ChaCha20-Poly1305) of streaming data.  It does not
@@ -1271,9 +1253,9 @@ quickly by using all your CPU cores and hardware acceleration.")
      ; No test suite
      `(#:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://jedisct1.github.io/minisign")
     (synopsis "Tool to sign files and verify signatures")
     (description
@@ -1339,14 +1321,11 @@ API.")
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
-    (inputs `(("libolm" ,libolm)))
+    (inputs (list libolm))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-future" ,python-future)))
+     (list python-cffi python-future))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-aspectlib" ,python-aspectlib)))
+     (list python-pytest python-pytest-benchmark python-aspectlib))
     (synopsis "Python bindings for libolm")
     (description "The libolm library implements the Double Ratchet
 cryptographic ratchet.  It is written in C and C++11, and exposed as a C
@@ -1386,7 +1365,7 @@ API.  This package contains its Python bindings.")))
                  (install-file "README.md" docdir)
                  #t))))))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (synopsis "Tool for hash length extension attacks")
       (description "@command{hash_extender} is a utility for performing hash
 length extension attacks supporting MD4, MD5, RIPEMD-160, SHA-0, SHA-1,
@@ -1419,9 +1398,9 @@ SHA-256, SHA-512, and WHIRLPOOL hashes.")
                (install-file "mkp224o" bindir)
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (synopsis "Tor hidden service v3 name generator")
     (description "@code{mkp224o} generates valid ed25519 (hidden service
 version 3) onion addresses.  It allows one to produce customized vanity .onion
@@ -1443,8 +1422,7 @@ addresses using a brute-force method.")
         (base32 "0bpz1hazbhfb6pqi68x55kq6a31bgh6vwij836slmi4jqiwvnh5a"))
        (file-name (git-file-name name version))))
     (inputs
-     `(("git" ,git)
-       ("openssl" ,openssl)))
+     (list git openssl))
     (build-system copy-build-system)
     (arguments
      `(#:install-plan
@@ -1523,11 +1501,7 @@ non-encrypted files.")
      `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("boost" ,boost)
-       ("curl" ,curl)
-       ("fuse" ,fuse)
-       ("range-v3" ,range-v3)
-       ("spdlog" ,spdlog)))
+     (list boost curl fuse range-v3 spdlog))
     (home-page "https://www.cryfs.org/")
     (synopsis "Encrypted FUSE filesystem for the cloud")
     (description "CryFS encrypts your files, so you can safely store them anywhere.
diff --git a/gnu/packages/cryptsetup.scm b/gnu/packages/cryptsetup.scm
index 49b82090f0..c8853dca30 100644
--- a/gnu/packages/cryptsetup.scm
+++ b/gnu/packages/cryptsetup.scm
@@ -55,14 +55,14 @@
        ;; GRUB 2.06 supports LUKS2, but does it reliably support all set-ups…?
        "--with-default-luks-format=LUKS1")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("argon2" ,argon2)
-      ("json-c" ,json-c)
-      ("libgcrypt" ,libgcrypt)
-      ("lvm2" ,lvm2)                    ; device-mapper
-      ("popt" ,popt)
-      ("util-linux" ,util-linux "lib"))) ;libuuid
+    (list argon2
+          json-c
+          libgcrypt
+          lvm2 ; device-mapper
+          popt
+          `(,util-linux "lib"))) ;libuuid
    (synopsis "Set up transparent encryption of block devices using dm-crypt")
    (description
     "Cryptsetup is a utility used to conveniently set up disk encryption based
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index b2fe3e05c1..6342f85404 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -1,12 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -83,9 +84,7 @@
                               (assoc-ref %outputs "out")
                               "/lib/cups"))))
       (inputs
-       `(("ghostscript" ,ghostscript)
-         ("cups" ,cups)
-         ("zlib" ,zlib)))
+       (list ghostscript cups zlib))
       (home-page "https://github.com/pdewacht/brlaser")
       (synopsis "Brother laser printer driver")
       (description "Brlaser is a CUPS driver for Brother laser printers.  This
@@ -128,7 +127,7 @@ driver is known to work with these printers:
 (define-public cups-filters
   (package
     (name "cups-filters")
-    (version "1.27.4")
+    (version "1.28.9")
     (source(origin
               (method url-fetch)
               (uri
@@ -136,7 +135,7 @@ driver is known to work with these printers:
                               "cups-filters-" version ".tar.xz"))
               (sha256
                (base32
-                "110b1xhb5vfpcx0zq9kkas7pj281skx5dpnnr22idx509jfdzj8b"))
+                "1bk0x1rrb8wqbhh5c979ppgy6s2kqss8mjdlahgcjvd79wm3fs9g"))
               (modules '((guix build utils)))
               (snippet
                ;; install backends, banners and filters to cups-filters output
@@ -196,29 +195,31 @@ driver is known to work with these printers:
                         #t)))
                   (add-after 'install 'wrap-filters
                     (lambda* (#:key inputs outputs #:allow-other-keys)
-                      ;; Some filters expect to find 'gs' in $PATH.  We cannot
-                      ;; just hard-code its absolute file name in the source
+                      ;; Some filters expect to find things in $PATH.  We cannot
+                      ;; just hard-code all absolute file names in the source
                       ;; because foomatic-rip, for example, has tests like
                       ;; 'startswith(cmd, "gs")'.
                       (let ((out         (assoc-ref outputs "out"))
-                            (ghostscript (assoc-ref inputs "ghostscript")))
+                            (ghostscript (assoc-ref inputs "ghostscript"))
+                            (grep        (assoc-ref inputs "grep")))
                         (for-each (lambda (file)
                                     (wrap-program file
                                       `("PATH" ":" prefix
-                                        (,(string-append ghostscript
-                                                         "/bin")))))
+                                        (,(string-append ghostscript "/bin:"
+                                                         grep "/bin")))))
                                   (find-files (string-append
                                                out "/lib/cups/filter")))
                         #t))))))
     (native-inputs
-     `(("glib" ,glib "bin") ; for gdbus-codegen
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for gdbus-codegen
+           pkg-config))
     (inputs
      `(("avahi"        ,avahi)
        ("fontconfig"   ,fontconfig)
        ("freetype"     ,freetype)
-       ("font-dejavu"  ,font-dejavu) ; also needed by test suite
+       ("font-dejavu"  ,font-dejavu)    ; also needed by test suite
        ("ghostscript"  ,ghostscript/cups)
+       ("grep"         ,grep)
        ("ijs"          ,ijs)
        ("dbus"         ,dbus)
        ("lcms"         ,lcms)
@@ -251,16 +252,20 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
 (define-public cups-minimal
   (package
     (name "cups-minimal")
-    (version "2.3.3")
-    (replacement cups-minimal/fixed)
+    (version "2.3.3op2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/apple/cups/releases/download/v"
-                           version "/cups-" version "-source.tar.gz"))
+       (method git-fetch)
+       ;; Version maintained by the OpenPrinting organization, NOT a fork.  The
+       ;; CUPS author tracks the current Apple CUPS sources and includes common
+       ;; changes and bug fixes for GNU/Linux.  See its README and for example
+       ;; <https://github.com/apple/cups/issues/5917#issuecomment-819465891>.
+       (uri (git-reference
+             (url "https://github.com/OpenPrinting/cups")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1vpk0b2vq830f8fvf9z8qjsm5k141i7pi8djbinpnr78pi4dj7r6"))))
+        (base32 "126d6kd3pkhmsvbcflkcpk3y30iqlkdqyvrk9aqq88vbxzjd5ia6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -273,6 +278,31 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'never-cupsAdminGetServerSettings
+           ;; Instead of querying the daemon directly, this part of CUPS assumes
+           ;; that (1) it has access to a cupsd.conf under CUPS_SERVERROOT, and
+           ;; (2) the file's contents apply to the running daemon.  (1) is false
+           ;; at least on Guix Systems resulting in extremely long delays when
+           ;; loading the Web interface's /admin page.  (2) isn't valid anywhere
+           ;; because it ignores, e.g., -c FILE.
+           ;; Upstream considers this code on ‘life support’ so just neuter it.
+	   (lambda _
+	     (substitute* "cgi-bin/admin.c"
+	       (("!cupsAdminGetServerSettings" match)
+		(string-append "0 && " match)))))
+         (add-after 'unpack 'remove-Web-UI-server-settings
+           ;; The /admin page's server configuration form is questionable for
+           ;; the same reason as cupsAdminGetServerSettings, and won't work at
+           ;; all on Guix Systems.  Remove it entirely.
+           (lambda _
+             ;; SUBSTITUTE* and a patch both have (dis)advantages.  This is
+             ;; shorter & should ensure that no translation is forgotten.
+             (substitute* (find-files "templates" "^admin\\.tmpl$")
+               ((" class=\"halves\"") "")
+               (("<FORM.* ACTION=\"/jobs.*</FORM>" match)
+                (string-append match "</P>{BROKEN? "))
+               (("</FORM>}" match)
+                (string-append match "}")))))
          (add-before 'configure 'patch-makedefs
            (lambda _
              (substitute* "Makedefs.in"
@@ -295,11 +325,10 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
                 "#elif defined(HAVE_AVAHI)"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib"  ,zlib)
-       ("gnutls" ,gnutls)))
-    (home-page "https://www.cups.org")
+     (list zlib gnutls))
+    (home-page "https://openprinting.github.io/")
     (synopsis "The Common Unix Printing System")
     (description
      "CUPS is a printing system that uses the Internet Printing Protocol
@@ -313,148 +342,128 @@ device-specific programs to convert and print many types of files.")
     ;; CUPS is Apache 2.0 with exceptions, see the NOTICE file.
     (license license:asl2.0)))
 
-(define cups-minimal/fixed
-  (package-with-extra-patches
-   cups-minimal
-   (search-patches "cups-CVE-2020-10001.patch")))
-
 (define-public cups
   (package/inherit cups-minimal
     (name "cups")
     (arguments
-     `(;; Three tests fail:
-       ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
-       ;;   Get-Jobs Operation"
-       ;; * test of number of error/warning messages, probably related to a
-       ;;   missing font.
-       #:tests? #f
-       #:configure-flags
-       '("--disable-launchd"
-         "--disable-systemd")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-makedefs
-           (lambda _
-             (substitute* "Makedefs.in"
-               (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-before 'check 'patch-tests
-           (lambda _
-             (let ((filters (assoc-ref %build-inputs "cups-filters"))
-                   (catpath (string-append
-                             (assoc-ref %build-inputs "coreutils") "/bin/"))
-                   (testdir (string-append (getcwd) "/tmp/")))
-               (mkdir testdir)
-               (substitute* "test/run-stp-tests.sh"
-                 ((" *BASE=/tmp/") (string-append "BASE=" testdir))
-
-                 ;; allow installation of filters from output dir and from
-                 ;; cups-filters
-                 (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
-                  (string-append
-                   "for dir in "
-                   (assoc-ref %outputs "out") "/lib/cups/filter "
-                   filters "/lib/cups/filter"))
-
-                 ;; check for charsets in cups-filters output
-                 (("/usr/share/cups/charsets")
-                  (string-append filters "/share/cups/charsets"))
-
-                 ;; install additional required filters
-                 (("instfilter texttopdf texttopdf pdf")
-                  (string-append
-                   "instfilter texttopdf texttopdf pdf;"
-                   "instfilter imagetoraster imagetoraster raster;"
-                   "instfilter gstoraster gstoraster raster;"
-                   "instfilter urftopdf urftopdf pdf;"
-                   "instfilter rastertopdf rastertopdf pdf;"
-                   "instfilter pstopdf pstopdf pdf"))
-
-                 ;; specify location of lpstat binary
-                 (("description=\"`lpstat -l")
-                  "description=\"`../systemv/lpstat -l")
-
-                 ;; patch shebangs of embedded scripts
-                 (("#!/bin/sh") (string-append "#!" (which "sh")))
-
-                 ;; also link mime definitions from cups-filters
-                 ;; to enable the additional filters for the test suite
-                 (("ln -s \\$root/conf/mime\\.types")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
-                   "ln -s $root/conf/mime.types"))
-                 (("ln -s \\$root/conf/mime\\.convs")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
-                   "ln -s $root/conf/mime.convs")))
-
-               ;; fix search path for "cat"
-               (substitute* "cups/testfile.c"
-                 (("cupsFileFind\\(\"cat\", \"/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
-                 (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\"")))
-               #t)))
-         ;; Make the compressed manpages writable so that the
-         ;; reset-gzip-timestamps phase does not error out.
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz"))
-               #t)))
-         (add-after 'install 'install-cups-filters-symlinks
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (cups-filters (assoc-ref inputs "cups-filters")))
-               ;; charsets
-               (symlink
-                (string-append cups-filters "/share/cups/charsets")
-                (string-append out "/share/charsets"))
-
-               ;; mime types, driver file, ppds
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out f)))
-                '("/share/cups/mime/cupsfilters.types"
-                  "/share/cups/mime/cupsfilters.convs"
-                  "/share/cups/drv/cupsfilters.drv"
-                  "/share/ppd"))
-
-               ;; filters
-               (for-each
-                (lambda (f)
-                  (symlink f
-                           (string-append out "/lib/cups/filter" (basename f))))
-                (find-files (string-append cups-filters "/lib/cups/filter")))
-
-               ;; backends
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out "/lib/cups/backend/"
-                                          (basename f))))
-                '("/lib/cups/backend/parallel"
-                  "/lib/cups/backend/serial"))
-
-               ;; banners
-               (let ((banners "/share/cups/banners"))
-                 (delete-file-recursively (string-append out banners))
-                 (symlink (string-append cups-filters banners)
-                          (string-append out banners)))
-
-               ;; assorted data
-               (let ((data "/share/cups/data"))
-                 (delete-file-recursively (string-append out data))
-                 (symlink (string-append cups-filters data)
-                          (string-append out data)))
-
-               #t))))))
+     (substitute-keyword-arguments (package-arguments cups-minimal)
+       ((#:tests? _ #t)
+        ;; Three tests fail:
+        ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
+        ;;   Get-Jobs Operation"
+        ;; * test of number of error/warning messages, probably related to a
+        ;;   missing font.
+        #f)
+       ((#:configure-flags _ '())
+        `(list "--disable-launchd"
+               "--disable-systemd"))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'patch-tests
+             (lambda _
+               (let ((filters (assoc-ref %build-inputs "cups-filters"))
+                     (catpath (string-append
+                               (assoc-ref %build-inputs "coreutils") "/bin/"))
+                     (testdir (string-append (getcwd) "/tmp/")))
+                 (mkdir testdir)
+                 (substitute* "test/run-stp-tests.sh"
+                   ((" *BASE=/tmp/") (string-append "BASE=" testdir))
+
+                   ;; Allow installation of filters from the output directory
+                   ;; and from cups-filters.
+                   (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
+                    (string-append
+                     "for dir in "
+                     (assoc-ref %outputs "out") "/lib/cups/filter "
+                     filters "/lib/cups/filter"))
+
+                   ;; Check for charsets in the default cups-filters output.
+                   (("/usr/share/cups/charsets")
+                    (string-append filters "/share/cups/charsets"))
+
+                   ;; Install additional required filters.
+                   (("instfilter texttopdf texttopdf pdf")
+                    (string-append
+                     "instfilter texttopdf texttopdf pdf;"
+                     "instfilter imagetoraster imagetoraster raster;"
+                     "instfilter gstoraster gstoraster raster;"
+                     "instfilter urftopdf urftopdf pdf;"
+                     "instfilter rastertopdf rastertopdf pdf;"
+                     "instfilter pstopdf pstopdf pdf"))
+
+                   ;; Specify the location of the lpstat binary.
+                   (("description=\"`lpstat -l")
+                    "description=\"`../systemv/lpstat -l")
+
+                   ;; Patch the shebangs of embedded scripts.
+                   (("#!/bin/sh") (string-append "#!" (which "sh")))
+
+                   ;; Also link MIME definitions from cups-filters
+                   ;; to enable the additional filters for the test suite.
+                   (("ln -s \\$root/conf/mime\\.types")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
+                     "ln -s $root/conf/mime.types"))
+                   (("ln -s \\$root/conf/mime\\.convs")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
+                     "ln -s $root/conf/mime.convs")))
+
+                 ;; Fix the search path for the "cat" command.
+                 (substitute* "cups/testfile.c"
+                   (("cupsFileFind\\(\"cat\", \"/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
+                   (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))))))
+           (add-after 'install 'install-cups-filters-symlinks
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (cups-filters (assoc-ref inputs "cups-filters")))
+                 ;; Charsets.
+                 (symlink
+                  (string-append cups-filters "/share/cups/charsets")
+                  (string-append out "/share/charsets"))
+
+                 ;; MIME types, driver files, and PPDs.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out f)))
+                  '("/share/cups/mime/cupsfilters.types"
+                    "/share/cups/mime/cupsfilters.convs"
+                    "/share/cups/drv/cupsfilters.drv"
+                    "/share/ppd"))
+
+                 ;; Filters.
+                 (for-each
+                  (lambda (f)
+                    (symlink f
+                             (string-append out "/lib/cups/filter"
+                                            (basename f))))
+                  (find-files (string-append cups-filters "/lib/cups/filter")))
+
+                 ;; Backends.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out "/lib/cups/backend/"
+                                            (basename f))))
+                  '("/lib/cups/backend/parallel"
+                    "/lib/cups/backend/serial"))
+
+                 ;; Banners.
+                 (let ((banners "/share/cups/banners"))
+                   (delete-file-recursively (string-append out banners))
+                   (symlink (string-append cups-filters banners)
+                            (string-append out banners)))
+
+                 ;; Assorted data.
+                 (let ((data "/share/cups/data"))
+                   (delete-file-recursively (string-append out data))
+                   (symlink (string-append cups-filters data)
+                            (string-append out data))))))))))
     (inputs
      `(("avahi" ,avahi)
        ("gnutls" ,gnutls)
@@ -474,11 +483,7 @@ device-specific programs to convert and print many types of files.")
                 "0a52jw6rm7lr5nbyksiia0rn7sasyb5cjqcb95z1wxm2yprgi6lm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib)
-       ("polkit" ,polkit)
-       ("cups" ,cups)))
+     (list intltool pkg-config glib polkit cups))
     (home-page "https://www.freedesktop.org/wiki/Software/cups-pk-helper/")
     (synopsis "PolicyKit helper to configure CUPS with fine-grained privileges")
     (description
@@ -592,8 +597,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                  ;; FIXME Use beginning-of-word in regexp.
                  (("[[:blank:]]plugin\\.py[[:blank:]]") " ")
                  (("/usr/include/libusb-1.0")
-                  (string-append (assoc-ref inputs "libusb")
-                                 "/include/libusb-1.0"))
+                  (search-input-directory inputs "/include/libusb-1.0"))
                  (("hplip_statedir =.*$")
                   ;; Don't bail out while trying to create
                   ;; /var/lib/hplip.  We can safely change its value
@@ -644,7 +648,7 @@ should only be used as part of the Guix cups-pk-helper service.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (python (assoc-ref inputs "python")))
+                    (site (python:site-packages inputs outputs)))
                (with-directory-excursion bin
                  (for-each (lambda (file)
                              (let ((target (readlink file)))
@@ -653,14 +657,11 @@ should only be used as part of the Guix cups-pk-helper service.")
                                  (lambda _
                                    (format #t
                                            "#!~a~@
-                                           export PYTHONPATH=\"~a:~a\"~@
+                                           export GUIX_PYTHONPATH=\"~a:~a\"~@
                                            exec -a \"$0\" \"~a/~a\" \"$@\"~%"
                                            (which "bash")
-                                           (string-append
-                                            out "/lib/python"
-                                            (python:python-version python)
-                                            "/site-packages")
-                                           (getenv "PYTHONPATH")
+                                           site
+                                           (getenv "GUIX_PYTHONPATH")
                                            bin target)))
                                (chmod file #o755)))
                   (find-files "." (lambda (file stat)
@@ -684,8 +685,7 @@ should only be used as part of the Guix cups-pk-helper service.")
        ("sane-backends" ,sane-backends-minimal)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))))
+     (list perl pkg-config))))
 
 (define-public hplip-minimal
   (package/inherit hplip
@@ -727,11 +727,9 @@ should only be used as part of the Guix cups-pk-helper service.")
     (home-page
      "https://wiki.linuxfoundation.org/openprinting/database/foomatic")
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("a2ps" ,a2ps)))
+     (list dbus a2ps))
     (arguments
      '( ;; Specify the installation directories.
        #:configure-flags (list (string-append "ac_cv_path_CUPS_BACKENDS="
@@ -746,7 +744,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                                (string-append "ac_cv_path_PPR_LIB="
                                               (assoc-ref %outputs "out")
                                               "/lib/ppr/lib")
-
+                               "CFLAGS=-fcommon"
                                ;; For some reason these are misdiagnosed.
                                "ac_cv_func_malloc_0_nonnull=yes"
                                "ac_cv_func_realloc_0_nonnull=yes")
@@ -845,13 +843,9 @@ printer/driver specific, but spooler-independent PPD file.")
        #:tests? #f                                ;no tests
        #:make-flags '("CC=gcc")))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("sed" ,sed)
-       ("ghostscript" ,ghostscript)
-       ("foomatic-filters" ,foomatic-filters)))   ;for 'foomatic-rip'
+     (list coreutils sed ghostscript foomatic-filters))   ;for 'foomatic-rip'
     (native-inputs
-     `(("bc" ,bc)
-       ("groff" ,groff)))
+     (list bc groff))
     ;; The domain has expired and no one has meaningfully taken up the torch.
     (home-page (string-append "https://web.archive.org/web/20210129024712/"
                               "http://foo2zjs.rkkda.com/"))
@@ -915,8 +909,7 @@ HP@tie{}LaserJet, and possibly other printers.  See @file{README} for details.")
                  (for-each (cut invoke "gzip" "-9" <>)
                            (find-files "share/cups" "\\.ppd$")))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("cups" ,cups-minimal)))
     (synopsis "ESC/P-R printer driver")
@@ -1016,7 +1009,7 @@ obtained and installed separately.")
      '(;; Tests require CUPS to be running
        #:tests? #f))
     (inputs
-     `(("cups" ,cups)))
+     (list cups))
     (home-page "https://github.com/zdohnal/pycups")
     (synopsis "Python bindings for libcups")
     (description
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index c61a56256c..9a9d788ceb 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Dale Mellor <guix-devel-0brg6b@rdmp.org>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
@@ -45,7 +46,6 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages openldap)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -57,29 +57,25 @@
 (define-public curl
   (package
    (name "curl")
-   (replacement curl-7.77.0)
-   (version "7.74.0")
+   (version "7.79.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://curl.haxx.se/download/curl-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "12w7gskrglg6qrmp822j37fmbr0icrcxv7rib1fy5xiw80n5z7cr"))
+               "129n9hi7rbg3s112chyadhp4y27ppb5i65n12wm77aw2255zf1h6"))
              (patches (search-patches "curl-use-ssl-cert-env.patch"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
-   (inputs `(("gnutls" ,gnutls)
-             ("libidn" ,libidn)
-             ("openldap" ,openldap)
-             ("mit-krb5" ,mit-krb5)
-             ("nghttp2" ,nghttp2 "lib")
-             ("zlib" ,zlib)))
+   (inputs (list gnutls libidn mit-krb5
+                 `(,nghttp2 "lib") zlib))
    (native-inputs
-     `(("perl" ,perl)
+     `(("nghttp2" ,nghttp2)
+       ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+       ("python" ,python-minimal-wrapper)))
    (native-search-paths
     ;; These variables are introduced by curl-use-ssl-cert-env.patch.
     (list (search-path-specification
@@ -112,8 +108,7 @@
             ;; Do not save the configure options to avoid unnecessary references.
             (substitute* "curl-config.in"
               (("@CONFIGURE_OPTIONS@")
-               "\"not available\""))
-            #t))
+               "\"not available\""))))
         (add-after
          'install 'move-man3-pages
          (lambda* (#:key outputs #:allow-other-keys)
@@ -122,18 +117,17 @@
                  (doc (assoc-ref outputs "doc")))
              (mkdir-p (string-append doc "/share/man"))
              (rename-file (string-append out "/share/man/man3")
-                          (string-append doc "/share/man/man3"))
-             #t)))
-        (replace
-         'check
-         (lambda _
-           (substitute* "tests/runtests.pl"
-             (("/bin/sh") (which "sh")))
+                          (string-append doc "/share/man/man3")))))
+        (replace 'check
+          (lambda* (#:key tests? #:allow-other-keys)
+            (substitute* "tests/runtests.pl"
+              (("/bin/sh") (which "sh")))
 
-           ;; The top-level "make check" does "make -C tests quiet-test", which
-           ;; is too quiet.  Use the "test" target instead, which is more
-           ;; verbose.
-           (invoke "make" "-C" "tests" "test"))))))
+            (when tests?
+              ;; The top-level "make check" does "make -C tests quiet-test", which
+              ;; is too quiet.  Use the "test" target instead, which is more
+              ;; verbose.
+              (invoke "make" "-C" "tests" "test")))))))
    (synopsis "Command line tool for transferring data with URL syntax")
    (description
     "curl is a command line tool for transferring data with URL syntax,
@@ -147,14 +141,8 @@ tunneling, and so on.")
                                   "See COPYING in the distribution."))
    (home-page "https://curl.haxx.se/")))
 
-;; This package exists mainly to bootstrap CMake.  It must not depend on
-;; anything that uses cmake-build-system.
 (define-public curl-minimal
-  (hidden-package
-   (package/inherit
-    curl
-    (name "curl-minimal")
-    (inputs (alist-delete "openldap" (package-inputs curl))))))
+  (deprecated-package "curl-minimal" curl))
 
 (define-public curl-ssh
   (package/inherit curl
@@ -167,21 +155,6 @@ tunneling, and so on.")
        ,@(package-inputs curl)))
     (properties `((hidden? . #t)))))
 
-(define-public curl-7.77.0
-  (package
-    (inherit curl)
-    (version "7.77.0")
-    (source
-     (origin
-       (inherit (package-source curl))
-       (uri (string-append "https://curl.haxx.se/download/curl-"
-                           version ".tar.xz"))
-       (patches (search-patches "curl-7.76-use-ssl-cert-env.patch"
-                                "curl-7.77-tls-priority-string.patch"))
-       (sha256
-        (base32
-         "0jsrc97vbghvljic997r9nypc9qqddcil2lzvv032br8ahn5hr0g"))))))
-
 (define-public kurly
   (package
     (name "kurly")
@@ -214,9 +187,8 @@ tunneling, and so on.")
                             (string-append man "/kurly.1")))
                #t))))))
     (inputs
-     `(("go-github-com-alsm-ioprogress" ,go-github-com-alsm-ioprogress)
-       ("go-github-com-aki237-nscjar" ,go-github-com-aki237-nscjar)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
+     (list go-github-com-alsm-ioprogress go-github-com-aki237-nscjar
+           go-github-com-urfave-cli))
     (synopsis "Command-line HTTP client")
     (description "kurly is an alternative to the @code{curl} program written in
 Go.  kurly is designed to operate in a similar manner to curl, with select
@@ -287,10 +259,9 @@ not offer a replacement for libcurl.")
               ;; The build system does not actually compile the Scheme module.
               ;; So we can compile it and put it in the right place in one go.
               (invoke "guild" "compile" curl.scm "-o" curl.go)))))))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (native-inputs (list pkg-config))
    (inputs
-    `(("curl" ,curl)
-      ("guile" ,guile-3.0)))
+    (list curl guile-3.0))
    (home-page "http://www.lonelycactus.com/guile-curl.html")
    (synopsis "Curl bindings for Guile")
    (description "@code{guile-curl} is a project that has procedures that allow
@@ -303,8 +274,7 @@ FTP servers.  It is based on the curl library.")
     (inherit guile-curl)
     (name "guile2.2-curl")
     (inputs
-     `(("curl" ,curl)
-       ("guile" ,guile-2.2)))))
+     (list curl guile-2.2))))
 
 (define-public curlpp
   (package
@@ -325,7 +295,7 @@ FTP servers.  It is based on the curl library.")
      '(#:tests? #f))
     ;; The installed version needs the header files from the C library.
     (propagated-inputs
-     `(("curl" ,curl)))
+     (list curl))
     (synopsis "C++ wrapper around libcURL")
     (description
      "This package provides a free and easy-to-use client-side C++ URL
@@ -356,7 +326,7 @@ more!")
      '(#:install-plan
        '(("./h2c" "bin/"))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://curl.se/h2c/")
     (synopsis "Convert HTTP headers to a curl command line")
     (description
diff --git a/gnu/packages/cvassistant.scm b/gnu/packages/cvassistant.scm
index e7ad411b6f..9af5c7976f 100644
--- a/gnu/packages/cvassistant.scm
+++ b/gnu/packages/cvassistant.scm
@@ -69,9 +69,7 @@
          (replace 'configure
            (lambda _ (invoke "qmake"))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("quazip" ,quazip-0)
-       ("zlib" ,zlib)))
+     (list qtbase-5 quazip-0 zlib))
     (home-page "https://cvassistant.sourceforge.io/")
     (synopsis "Job application organizer")
     (description "Whether you're looking for a job or trying to help
diff --git a/gnu/packages/cybersecurity.scm b/gnu/packages/cybersecurity.scm
index e4614e908e..c61342c0ba 100644
--- a/gnu/packages/cybersecurity.scm
+++ b/gnu/packages/cybersecurity.scm
@@ -44,7 +44,7 @@
         (base32 "08ms7x4af07970ij9899l75sghnxsa7xyx73gkn6gv0l05p1hqfw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-capstone" ,python-capstone)))
+     (list python-capstone))
     (home-page "http://shell-storm.org/project/ROPgadget/")
     (synopsis "Semiautomatic return oriented programming")
     (description
@@ -68,23 +68,22 @@ chains of gadgets to execute system calls.")
     (arguments
      '(#:tests? #f))                 ;XXX: needs a specific version of unicorn
     (propagated-inputs
-     `(("capstone" ,capstone)
-       ("python-dateutil" ,python-dateutil)
-       ("python-intervaltree" ,python-intervaltree)
-       ("python-mako" ,python-mako)
-       ("python-packaging" ,python-packaging)
-       ("python-paramiko" ,python-paramiko)
-       ("python-psutil" ,python-psutil)
-       ("python-pyelftools" ,python-pyelftools)
-       ("python-pygments" ,python-pygments)
-       ("python-pyserial" ,python-pyserial)
-       ("python-pysocks" ,python-pysocks)
-       ("python-requests" ,python-requests)
-       ("ropgadget" ,ropgadget)
-       ("python-six" ,python-six)
-       ("python-sortedcontainers"
-        ,python-sortedcontainers)
-       ("unicorn" ,unicorn)))
+     (list capstone
+           python-dateutil
+           python-intervaltree
+           python-mako
+           python-packaging
+           python-paramiko
+           python-psutil
+           python-pyelftools
+           python-pygments
+           python-pyserial
+           python-pysocks
+           python-requests
+           ropgadget
+           python-six
+           python-sortedcontainers
+           unicorn))
     (home-page "https://github.com/Gallopsled/pwntools")
     (synopsis
      "Capture-the-flag (CTF) framework and exploit development library")
diff --git a/gnu/packages/cyrus-sasl.scm b/gnu/packages/cyrus-sasl.scm
index 43c2099968..2cd18f3e5e 100644
--- a/gnu/packages/cyrus-sasl.scm
+++ b/gnu/packages/cyrus-sasl.scm
@@ -48,14 +48,11 @@
                                      "cyrus-sasl-CVE-2019-19906.patch"))))
    (build-system gnu-build-system)
    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
-   (inputs `(("gdbm" ,gdbm)
-             ("openssl" ,openssl)))
+     (list autoconf automake libtool))
+   (inputs (list gdbm openssl))
    (propagated-inputs
-    `(;; cyrus-sasl.pc refers to -lkrb5, so propagate it.
-      ("mit-krb5" ,mit-krb5)))
+    (list ;; cyrus-sasl.pc refers to -lkrb5, so propagate it.
+          mit-krb5))
    (arguments
     '(#:configure-flags (list (string-append "--with-plugindir="
                                              (assoc-ref %outputs "out")
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 7cff0f99c5..00e26e4839 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -185,24 +185,24 @@
                                "4store-fix-buildsystem.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python-2)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("pcre" ,pcre "bin")                       ;for 'pcre-config'
-       ("pkg-config" ,pkg-config)))
+     (list perl
+           python-2
+           autoconf
+           automake
+           gettext-minimal
+           libtool
+           `(,pcre "bin") ;for 'pcre-config'
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("rasqal" ,rasqal)
-       ("libxml2" ,libxml2)
-       ("raptor2" ,raptor2)
-       ("readline" ,readline)
-       ("avahi" ,avahi)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)
-       ("util-linux" ,util-linux "lib")))
+     (list glib
+           rasqal
+           libxml2
+           raptor2
+           readline
+           avahi
+           cyrus-sasl
+           openssl
+           `(,util-linux "lib")))
     ;; http://www.4store.org has been down for a while now.
     (home-page "https://github.com/4store/4store")
     (synopsis "Clustered RDF storage and query engine")
@@ -243,12 +243,10 @@ either single machines or networked clusters.")
              #t)))
        #:test-target "test"))
     (inputs
-     `(("postgresql" ,postgresql)
-       ("util-linux" ,util-linux)))
+     (list postgresql util-linux))
     (native-inputs
      ;; For tests.
-     `(("ruby" ,ruby)
-       ("which" ,which)))
+     (list ruby which))
     (home-page "https://eradman.com/ephemeralpg/")
     (synopsis "Run temporary PostgreSQL databases")
     (description
@@ -274,11 +272,8 @@ garbage-collected after a configurable number of seconds (the default is
     (arguments
      '(#:tests? #f)) ;; No testsuite.
     (propagated-inputs
-     `(("ruby-httpclient" ,ruby-httpclient)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-progress_bar" ,ruby-progress_bar)
-       ("ruby-rubyzip" ,ruby-rubyzip)
-       ("ruby-thor" ,ruby-thor)))
+     (list ruby-httpclient ruby-multi-json ruby-progress_bar ruby-rubyzip
+           ruby-thor))
     (synopsis "Utility for dumping and restoring ElasticSearch indexes")
     (description
      "This package provides a utility for dumping the contents of an
@@ -424,12 +419,12 @@ ElasticSearch server")
                                  "lib/firebird/plugins/udr"))
                  #t)))))))
     (inputs
-     `(("boost" ,boost)
-       ("editline" ,editline)
-       ("icu4c" ,icu4c-67)
-       ("libtommath" ,libtommath)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list boost
+           editline
+           icu4c-67
+           libtommath
+           ncurses
+           zlib))
     (home-page "https://www.firebirdsql.org")
     (synopsis "Relational database with many ANSI SQL standard features")
     (description
@@ -481,7 +476,7 @@ database later.")
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON" "-DLEVELDB_BUILD_TESTS=ON")))
     (inputs
-     `(("snappy" ,snappy)))
+     (list snappy))
     (home-page "https://github.com/google/leveldb")
     (synopsis "Fast key-value storage library")
     (description
@@ -502,8 +497,7 @@ mapping from string keys to string values.")
         (base32 "0ii3z2mhjrimc6mv5z5x6bwp1s2bbzppja4m3pnmd5zgh9gs74gj"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (home-page "https://memcached.org/")
     (synopsis "In-memory caching service")
     (description "Memcached is an in-memory key-value store.  It has a small
@@ -530,17 +524,16 @@ applications.")
                (search-patches "libmemcached-build-with-gcc7.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("memcached" ,memcached)
-       ("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("python-sphinx" ,python-sphinx))) ;to build the HTML doc.
+     (list memcached
+           libtool
+           autoconf
+           automake
+           bison
+           flex
+           perl
+           python-sphinx)) ;to build the HTML doc.
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (outputs '("out" "doc"))
     (arguments
      '(#:tests? #f                      ;many tests fail and use too much time
@@ -600,12 +593,9 @@ the API, and provides features such as:
            (lambda _
              (invoke "memcached" "-d"))))))
     (native-inputs
-     `(("memcached" ,memcached)
-       ("python-nose" ,python-nose)))
+     (list memcached python-nose))
     (inputs
-     `(("libmemcached" ,libmemcached)
-       ("zlib" ,zlib)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libmemcached zlib cyrus-sasl))
     (home-page "http://sendapatch.se/projects/pylibmc/")
     (synopsis "Python client for memcached")
     (description
@@ -614,9 +604,6 @@ around TangentOrg’s libmemcached library, and can be used as a drop-in
 replacement for the code@{python-memcached} library.")
     (license license:bsd-3)))
 
-(define-public python2-pylibmc
-  (package-with-python2 python-pylibmc))
-
 (define-public litecli
  (package
   (name "litecli")
@@ -629,15 +616,14 @@ replacement for the code@{python-memcached} library.")
       (base32 "1yb706mgzizzijm1k0fbny98jf58qh5q6f2870rbplxlfla4w9sd"))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-cli-helpers" ,python-cli-helpers)
-     ("python-click" ,python-click)
-     ("python-configobj" ,python-configobj)
-     ("python-prompt-toolkit" ,python-prompt-toolkit)
-     ("python-pygments" ,python-pygments)
-     ("python-sqlparse" ,python-sqlparse)))
+   (list python-cli-helpers
+         python-click
+         python-configobj
+         python-prompt-toolkit
+         python-pygments
+         python-sqlparse))
   (native-inputs
-   `(("python-mock" ,python-mock)
-     ("python-pytest" ,python-pytest)))
+   (list python-mock python-pytest))
   (home-page "https://litecli.com")
   (synopsis "CLI for SQLite databases")
   (description
@@ -659,16 +645,16 @@ auto-completion and syntax highlighting.")
     (arguments
      `(#:tests? #f))                    ; tests expect a running MySQL
     (propagated-inputs
-      `(("python-cli-helpers" ,python-cli-helpers)
-        ("python-click" ,python-click)
-        ("python-configobj" ,python-configobj)
-        ("python-cryptography" ,python-cryptography)
-        ("python-prompt-toolkit" ,python-prompt-toolkit)
-        ("python-pyaes" ,python-pyaes)
-        ("python-pygments" ,python-pygments)
-        ("python-pymysql" ,python-pymysql)
-        ("python-pyperclip" ,python-pyperclip)
-        ("python-sqlparse" ,python-sqlparse)))
+      (list python-cli-helpers
+            python-click
+            python-configobj
+            python-cryptography
+            python-prompt-toolkit
+            python-pyaes
+            python-pygments
+            python-pymysql
+            python-pyperclip
+            python-sqlparse))
     (home-page "https://www.mycli.net")
     (synopsis
       "Terminal Client for MySQL with AutoCompletion and Syntax Highlighting")
@@ -753,22 +739,20 @@ auto-completion and syntax highlighting.")
                             ,(string-append sed "/bin"))))
                        #t))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list bison perl pkg-config))
     (inputs
-     `(("boost" ,boost-for-mysql)
-       ("coreutils" ,coreutils)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("libaio" ,libaio)
-       ("libtirpc" ,libtirpc)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("procps" ,procps)
-       ("rpcsvc-proto" ,rpcsvc-proto) ; rpcgen
-       ("sed" ,sed)
-       ("zlib" ,zlib)))
+     (list boost-for-mysql
+           coreutils
+           gawk
+           grep
+           libaio
+           libtirpc
+           ncurses
+           openssl
+           procps
+           rpcsvc-proto ; rpcgen
+           sed
+           zlib))
     (home-page "https://www.mysql.com/")
     (synopsis "Fast, easy to use, and popular database")
     (description
@@ -780,7 +764,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.5.8")
+    (version "10.5.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.com/MariaDB"
@@ -788,7 +772,7 @@ Language.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1s3vfm73911cddjhgpcbkya6nz7ag2zygg56qqzwscn5ybv28j7b"))
+                "1gg4h9ahmk78cx01zyw0fqr6hhd78fsyhs0s34p3gi9hkak1qkxb"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -807,9 +791,7 @@ Language.")
                               (unless (string-suffix? "CMakeLists.txt" file)
                                 (delete-file file)))
                             (append (find-files "extra/wolfssl")
-                                    (find-files "zlib")))
-                  #t))))
-    (replacement mariadb/fixed)
+                                    (find-files "zlib")))))))
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -864,6 +846,10 @@ Language.")
                         "/share/mysql/support-files")
          "-DINSTALL_MYSQLSHAREDIR=share/mysql"
          "-DINSTALL_SHAREDIR=share")
+       ;; The test suite has spurious failures (mostly timeouts) if run in
+       ;; parallel on various machines.  Only enable parallel tests on
+       ;; architectures which are likely to not have this issue.
+       #:parallel-tests? ,(target-x86-64?)
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'adjust-output-references
@@ -891,37 +877,32 @@ Language.")
                 "${INSTALL_INCLUDEDIR}"))
              (substitute* "cmake/mariadb_connector_c.cmake"
                (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_BINDIR\\}")
-                "${INSTALL_BINDIR}"))
-             #t))
+                "${INSTALL_BINDIR}"))))
          (add-after 'unpack 'adjust-tests
            (lambda _
              (let ((disabled-tests
                     '(;; These fail because root@hostname == root@localhost in
                       ;; the build environment, causing a user count mismatch.
                       ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
-                      "funcs_1.is_columns_mysql"
-                      "main.join_cache"
                       "main.explain_non_select"
-                      "main.stat_tables"
-                      "main.stat_tables_innodb"
                       "main.upgrade_MDEV-19650"
                       "roles.acl_statistics"
 
+                      ;; Probably same as above, test failure reported upstream:
+                      ;; <https://jira.mariadb.org/browse/MDEV-26320>.
+                      "main.selectivity_no_engine"
+
                       ;; FIXME: This test checks various table encodings and
                       ;; fails because Guix defaults to UTF8 instead of the
                       ;; upstream default latin1_swedish_ci.  It's not easily
                       ;; substitutable because several encodings are tested.
-                      "main.sp2"
+                      "main.system_mysql_db"
 
                       ;; XXX: This test occasionally fails on i686-linux:
                       ;; <https://jira.mariadb.org/browse/MDEV-24458>
                       ,@(if (string-prefix? "i686" (%current-system))
                             '("main.myisampack")
-                            '())
-
-                      ;; This file contains a time bomb which makes it fail after
-                      ;; 2030-12-31.  See <https://bugs.gnu.org/34351> for details.
-                      "main.mysqldump"))
+                            '())))
 
                    ;; This file contains a list of known-flaky tests for this
                    ;; release.  Append our own items.
@@ -945,8 +926,7 @@ Language.")
 
                (substitute* "mysql-test/mysql-test-run.pl"
                  (("/bin/ls") (which "ls"))
-                 (("/bin/sh") (which "sh")))
-               #t)))
+                 (("/bin/sh") (which "sh"))))))
          (add-before 'configure 'disable-plugins
            (lambda _
              (let ((disable-plugin (lambda (name)
@@ -957,24 +937,25 @@ Language.")
                                          (format port "\n")))))
                    (disabled-plugins '(;; XXX: Causes a test failure.
                                        "disks")))
-               (for-each disable-plugin disabled-plugins)
-               #t)))
+               (for-each disable-plugin disabled-plugins))))
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key (tests? #t) parallel-tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "mysql-test"
                    (invoke "./mtr" "--verbose"
                            "--retry=3"
+                           "--suite=main"
                            "--testcase-timeout=40"
                            "--suite-timeout=600"
-                           "--parallel" (number->string (parallel-job-count))
+                           "--parallel" (number->string (if parallel-tests?
+                                                          (parallel-job-count)
+                                                          1))
                            ;; Skip the replication tests: they are very I/O
                            ;; intensive and frequently causes indeterministic
                            ;; failures even on powerful hardware.
                            "--skip-rpl"
                            "--skip-test-list=unstable-tests"))
-                 (format #t "test suite not run~%"))
-             #t))
+                 (format #t "test suite not run~%"))))
          (add-after
           'install 'post-install
           (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -1019,12 +1000,9 @@ Language.")
               (substitute* (list (string-append dev "/bin/mysql_config")
                                  (string-append dev "/lib/pkgconfig/mariadb.pc"))
                 (("-lssl -lcrypto" all)
-                 (string-append "-L" openssl "/lib " all)))
-
-              #t))))))
+                 (string-append "-L" openssl "/lib " all)))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)))
+     (list bison perl))
     (inputs
      `(("jemalloc" ,jemalloc)
        ("libaio" ,libaio)
@@ -1045,13 +1023,6 @@ Language.")
 as a drop-in replacement of MySQL.")
     (license license:gpl2)))
 
-(define mariadb/fixed
-  (package
-    (inherit mariadb)
-    (source (origin
-              (inherit (package-source mariadb))
-              (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
-
 (define-public mariadb-connector-c
   (package
     (name "mariadb-connector-c")
@@ -1067,7 +1038,7 @@ as a drop-in replacement of MySQL.")
        (sha256
         (base32 "0xb8fiissblxb319y5ifqqp86zblwis789ipb753pcb4zpnsaw82"))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no tests
@@ -1092,9 +1063,7 @@ developed in C/C++ to MariaDB and MySQL databases.")
                (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
     (build-system cmake-build-system)
     (inputs
-     `(("check" ,check)
-       ("boost" ,boost)
-       ("openssl" ,openssl)))
+     (list check boost openssl))
     (home-page "https://github.com/codership/galera/")
     (synopsis "Extension to the MariaDB database server")
     (description
@@ -1106,15 +1075,14 @@ and high-availability (HA).")
 (define-public postgresql-13
   (package
     (name "postgresql")
-    (replacement postgresql-13.3)
-    (version "13.1")
+    (version "13.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "07z6zwr58dckaa97yl9ml240z83d1lhgaxw9aq49i8lsp21mqd0j"))
+                "1kf0gcsrl5n25rjlvkh87aywmn28kbwvakm5c7j1qpr4j01y34za"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1133,6 +1101,12 @@ and high-availability (HA).")
                                       "src/bin/psql/command.c")
                          (("/bin/sh") (which "sh")))
                        #t))
+         (add-before 'configure 'set-socket-dir
+           (lambda _
+             (substitute* '("src/include/pg_config_manual.h")
+               (("DEFAULT_PGSOCKET_DIR[^\n]*")
+                "DEFAULT_PGSOCKET_DIR \"/var/run/postgresql\""))
+             #t))
          (add-after 'build 'build-contrib
            (lambda _
              (invoke "make" "-C" "contrib")))
@@ -1155,20 +1129,6 @@ TIMESTAMP.  It also supports storage of binary large objects, including
 pictures, sounds, or video.")
     (license (license:x11-style "file://COPYRIGHT"))))
 
-(define-public postgresql-13.3
-  (package
-    (inherit postgresql-13)
-    (name "postgresql")
-    (version "13.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ftp.postgresql.org/pub/source/v"
-                                  version "/postgresql-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "18dliq7h2l8irffhyyhdmfwx3si515q6gds3cxdjb9n7m17lbn9w"))
-              (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))))
-
 (define-public postgresql-11
   (package
     (inherit postgresql-13)
@@ -1250,8 +1210,7 @@ pictures, sounds, or video.")
                (install-file "build/bin/pgloader"  bin))
              #t)))))
     (native-inputs
-     `(("buildapp" ,buildapp)
-       ("sbcl" ,sbcl)))
+     (list buildapp sbcl))
     (inputs
      `(("alexandria" ,sbcl-alexandria)
        ("cl-abnf" ,sbcl-cl-abnf)
@@ -1303,9 +1262,9 @@ CSV, DB3, iXF, SQLite, MS-SQL or MySQL to PostgreSQL.")
         (base32 "1ry8lxgdc1p3k7gbw20r405jqi5lvhi5wk83kxdbiv8xv3f5kh6q"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (arguments
      `(#:tests? #f))                    ; tests expect a running MySQL
     (home-page "https://github.com/PyMySQL/PyMySQL/")
@@ -1406,7 +1365,7 @@ including field and record folding.")))
 (define-public rocksdb
   (package
     (name "rocksdb")
-    (version "6.11.4")
+    (version "6.25.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1415,35 +1374,37 @@ including field and record folding.")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0n19p9cd13jg0lnibrzwkxs4xlrhyj3knypkd2ic41arbds0bdnl"))
+                "14150kd7hk8jjwpm28bf3a0agrhyapbq9lgnl00l385vfb73wnzl"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; TODO: unbundle gtest.
                   (delete-file "build_tools/gnu_parallel")
                   (substitute* "Makefile"
-                    (("build_tools/gnu_parallel") "parallel"))
-                  #t))))
+                    (("build_tools/gnu_parallel") "parallel"))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc" "V=1"
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           ;; Ceph requires that RTTI is enabled.
                           "USE_RTTI=1"
-                          "date=1970-01-01" ; build reproducibly
-                          (string-append "INSTALL_PATH="
-                                         (assoc-ref %outputs "out"))
+                          ;; Don't pass '-march=native' to the compiler.
+                          "PORTABLE=1"
+                          ;; Use a deterministic date stamp.
+                          "build_date=1970-01-01"
 
                           ;; Running the full test suite takes hours and require
                           ;; a lot of disk space.  Instead we only run a subset
-                          ;; (see .travis.yml and Makefile).
-                          "ROCKSDBTESTS_END=db_tailing_iter_test")
+                          ;; that exercises platform-specific functionality.
+                          "ROCKSDBTESTS_PLATFORM_DEPENDENT=only")
        #:test-target "check_some"
        ;; Many tests fail on 32-bit platforms. There are multiple reports about
        ;; this upstream, but it's not going to be supported any time soon.
-       #:tests? (let ((system ,(or (%current-target-system)
-                                   (%current-system))))
-                  (or (string-prefix? "x86_64-linux" system)
-                      (string-prefix? "aarch64-linux" system)))
+       #:tests? ,(if (%current-target-system)
+                     #f
+                     (let ((system (%current-system)))
+                       (or (string-prefix? "x86_64-linux" system)
+                           (string-prefix? "aarch64-linux" system))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-Makefile
@@ -1451,9 +1412,8 @@ including field and record folding.")))
              (substitute* "Makefile"
                ;; Don't depend on the static library when installing.
                (("install: install-static")
-                "install: install-shared")
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
-             #t))
+                "install:")
+               (("#!/bin/sh") (string-append "#!" (which "sh"))))))
          (delete 'configure)
          ;; The default target is only needed for tests and built on demand.
          (delete 'build)
@@ -1466,41 +1426,35 @@ including field and record folding.")))
              (let ((test-dir (string-append (getcwd) "/../test")))
                (mkdir test-dir)
                (setenv "TEST_TMPDIR" (canonicalize-path test-dir)))))
-         (add-before 'check 'disable-optimizations
-           (lambda _
-             ;; Prevent the build from passing '-march=native' to the compiler.
-             (setenv "PORTABLE" "1")
-             #t))
          (add-before 'check 'disable-failing-tests
            (lambda _
              (substitute* "Makefile"
                ;; These tests reliably fail due to "Too many open files".
                (("^[[:blank:]]+env_test[[:blank:]]+\\\\") "\\")
-               (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))
-             #t))
-         (add-after 'check 'build
+               (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))))
+         (add-after 'check 'clean
+           (lambda _
+             ;; Otherwise stale objects from the tests would interfere.
+             (invoke "make" "clean")))
+         (add-after 'clean 'build
            ;; The default build target is a debug build for tests. The
            ;; install target depends on the "shared_lib" release target
            ;; so we build it here for clarity.
            (lambda* (#:key (make-flags '()) parallel-build? #:allow-other-keys)
-               (apply invoke "make" "shared_lib"
-                      `(,@(if parallel-build?
-                              `("-j" ,(number->string (parallel-job-count)))
-                              '())
-                        ,@make-flags)))))))
+             (apply invoke "make" "shared_lib"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (native-inputs
-     `(("parallel" ,parallel)
-       ("perl" ,perl)
-       ("procps" ,procps)
-       ("python" ,python-2)
-       ("which" ,which)))
+     (list parallel perl procps python which))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("gflags" ,gflags)
-       ("jemalloc" ,jemalloc)
-       ("lz4" ,lz4)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)))
+     (list bzip2
+           gflags
+           jemalloc
+           lz4
+           snappy
+           zlib))
     (home-page "https://rocksdb.org/")
     (synopsis "Persistent key-value store for fast storage")
     (description
@@ -1529,13 +1483,9 @@ data in a single database.  RocksDB is partially based on @code{LevelDB}.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list curl glib libxml2 ncurses readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:make-flags '("CC=gcc")
        #:phases
@@ -1609,20 +1559,20 @@ for example from a shell script.")
                                     path)))))
              #t)))))
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-io-pager" ,perl-io-pager)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-dir" ,perl-test-dir)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-file" ,perl-test-file)
-       ("perl-test-file-contents" ,perl-test-file-contents)
-       ("perl-test-mockmodule" ,perl-test-mockmodule)
-       ("perl-test-mockobject" ,perl-test-mockobject)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-capture-tiny
+           perl-io-pager
+           perl-module-build
+           perl-module-runtime
+           perl-path-class
+           perl-test-deep
+           perl-test-dir
+           perl-test-exception
+           perl-test-file
+           perl-test-file-contents
+           perl-test-mockmodule
+           perl-test-mockobject
+           perl-test-nowarnings
+           perl-test-warn))
     (inputs
      `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
        ("perl-clone" ,perl-clone)
@@ -1681,10 +1631,8 @@ which uses SQL to describe changes.")
                   "0x3wy40r93p0jv3nbwj9a77wa4ff697d13r0wffmm7q9h3mzsww8"))))
       (build-system python-build-system)
       (inputs
-       `(("python-cryptography" ,python-cryptography)
-         ("python-psycopg2" ,python-psycopg2)
-         ("python-pymysql" ,python-pymysql)
-         ("python-sqlalchemy" ,python-sqlalchemy)))
+       (list python-cryptography python-psycopg2 python-pymysql
+             python-sqlalchemy))
       (home-page "https://github.com/coffeeandscripts/sqlcrush")
       (synopsis "Text console-based database viewer and editor")
       (description
@@ -1717,12 +1665,12 @@ changes.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (native-inputs
-     `(;; TODO: Build the documentation.
-       ;; ("docbook-xsl" ,docbook-xsl)
-       ;; ("libxml2" ,libxml2)
-       ;; ("libxslt" ,libxslt)
-       ("python" ,python)                         ;for the Waf build system
-       ("which" ,which)))
+     (list ;; TODO: Build the documentation.
+           ;; ("docbook-xsl" ,docbook-xsl)
+           ;; ("libxml2" ,libxml2)
+           ;; ("libxslt" ,libxslt)
+           python ;for the Waf build system
+           which))
     (home-page "https://tdb.samba.org/")
     (synopsis "Trivial database")
     (description
@@ -1763,35 +1711,35 @@ extremely small.")
         (base32 "1rh7idjjbibc1zmiaaarask434lh0lx7f2xyfwmy37k9fa0xcpmh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-file-temp" ,perl-file-temp)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-dbd-sqlite
+           perl-file-temp
+           perl-module-install
+           perl-package-stash
+           perl-test-deep
+           perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-config-any" ,perl-config-any)
-       ("perl-context-preserve" ,perl-context-preserve)
-       ("perl-data-dumper-concise" ,perl-data-dumper-concise)
-       ("perl-data-page" ,perl-data-page)
-       ("perl-dbi" ,perl-dbi)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-module-find" ,perl-module-find)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-sql-abstract-classic" ,perl-sql-abstract-classic)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-text-balanced" ,perl-text-balanced)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-class-inspector
+           perl-config-any
+           perl-context-preserve
+           perl-data-dumper-concise
+           perl-data-page
+           perl-dbi
+           perl-devel-globaldestruction
+           perl-hash-merge
+           perl-module-find
+           perl-moo
+           perl-mro-compat
+           perl-namespace-clean
+           perl-path-class
+           perl-scalar-list-utils
+           perl-scope-guard
+           perl-sql-abstract-classic
+           perl-sub-name
+           perl-text-balanced
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/DBIx-Class")
     (synopsis "Extensible and flexible object <-> relational mapper")
     (description "An SQL to OO mapper with an object API inspired by
@@ -1818,12 +1766,9 @@ single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
          "09b2jahn2x12qm4f7qm1jzsxbz7qn1czp6a3fnl5l2i3l4r5421p"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cache-cache" ,perl-cache-cache)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-cache-cache perl-dbd-sqlite perl-module-install))
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)
-       ("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-carp-clan perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-Cursor-Cached")
     (synopsis "Cursor with built-in caching support")
     (description "DBIx::Class::Cursor::Cached provides a cursor class with
@@ -1844,9 +1789,9 @@ built-in caching support.")
          "1w47rh2241iy5x3a9bqsyd5kdp9sk43dksr99frzv4qn4jsazfn6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-IntrospectableM2M")
     (synopsis "Introspect many-to-many relationships")
     (description "Because the many-to-many relationships are not real
@@ -1871,40 +1816,40 @@ introspected and examined.")
          "0r57fv71ypxafb85cpxph1hdqii7ipjwvc19yb6fpkvq2ggcssg8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-dbix-class-introspectablem2m" ,perl-dbix-class-introspectablem2m)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
-       ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-config-any
+           perl-config-general
+           perl-dbd-sqlite
+           perl-dbix-class-introspectablem2m
+           perl-module-install
+           perl-moose
+           perl-moosex-markasmethods
+           perl-moosex-nonmoose
+           perl-namespace-autoclean
+           perl-test-deep
+           perl-test-differences
+           perl-test-exception
+           perl-test-pod
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-unload" ,perl-class-unload)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-carp-clan" ,perl-carp-clan)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-dbix-class" ,perl-dbix-class)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
-       ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
-       ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-string-camelcase" ,perl-string-camelcase)
-       ("perl-string-toidentifier-en" ,perl-string-toidentifier-en)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-unload
+           perl-class-inspector
+           perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-carp-clan
+           perl-data-dump
+           perl-dbix-class
+           perl-hash-merge
+           perl-list-moreutils
+           perl-lingua-en-inflect-phrase
+           perl-lingua-en-inflect-number
+           perl-lingua-en-tagger
+           perl-namespace-clean
+           perl-mro-compat
+           perl-scope-guard
+           perl-string-camelcase
+           perl-string-toidentifier-en
+           perl-sub-name
+           perl-try-tiny))
     (arguments `(#:tests? #f))          ;TODO: t/20invocations.t fails
     (home-page "https://metacpan.org/release/DBIx-Class-Schema-Loader")
     (synopsis "Create a DBIx::Class::Schema based on a database")
@@ -1927,10 +1872,9 @@ columns, primary keys, unique constraints and relationships.")
          "0kcfqq7g3832wiix0sbyvlc885qghjrp2ah3akn7h2lnb22fjwy9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbi" ,perl-dbi)))
+     (list perl-dbi))
     (propagated-inputs
-     `(("perl-dbi" ,perl-dbi)
-       ("postgresql" ,postgresql)))
+     (list perl-dbi postgresql))
     (home-page "https://metacpan.org/release/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
     (description "This package provides a PostgreSQL driver for the Perl5
@@ -1988,8 +1932,8 @@ columns, primary keys, unique constraints and relationships.")
                (base32
                 "1zljln5nh61gj3k22a1fv2vhx5l83waizmarwkh77hk6kzzmvrw9"))))
     (build-system perl-build-system)
-    (inputs `(("sqlite" ,sqlite)))
-    (propagated-inputs `(("perl-dbi" ,perl-dbi)))
+    (inputs (list sqlite))
+    (propagated-inputs (list perl-dbi))
     (synopsis "SQlite interface for Perl")
     (description "DBD::SQLite is a Perl DBI driver for SQLite, that includes
 the entire thing in the distribution.  So in order to get a fast transaction
@@ -2034,15 +1978,10 @@ libmysqlclient.  It will fill an array with long options, ready to be parsed by
         (base32 "0jhw91b23wc9bkfwcgvka4x5ddxk58m9bcp5ay7a3vx77nla09p9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-module-install perl-test-deep perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-hash-merge" ,perl-hash-merge)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-text-balanced" ,perl-text-balanced)))
+     (list perl-hash-merge perl-moo perl-mro-compat perl-text-balanced))
     (home-page "https://metacpan.org/release/SQL-Abstract")
     (synopsis "Generate SQL from Perl data structures")
     (description "This module was inspired by the excellent DBIx::Abstract.
@@ -2066,12 +2005,9 @@ time your data changes.")
         (base32 "0a7g13hs3kdxrjn43sfli09mgsi9d6w0dfw6hlk268av17yisgaf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-deep perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-mro-compat" ,perl-mro-compat)
-       ("perl-sql-abstract" ,perl-sql-abstract)))
+     (list perl-mro-compat perl-sql-abstract))
     (home-page "https://metacpan.org/release/SQL-Abstract-Classic")
     (synopsis "Generate SQL from Perl data structures")
     (description
@@ -2102,14 +2038,10 @@ your data changes, as this module figures it out.")
         (base32 "0ppkx46nydzlnsxf9a8pkyb74wggfrdiiwafab143lrarlh88x0s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-script" ,perl-test-script)))
+     (list perl-test-differences perl-test-exception perl-test-script))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-sql-tokenizer" ,perl-sql-tokenizer)))
+     (list perl-class-accessor perl-list-moreutils perl-regexp-common
+           perl-sql-tokenizer))
     (home-page "https://metacpan.org/release/SQL-SplitStatement")
     (synopsis "Split SQL code into atomic statements")
     (description "This module tries to split any SQL code, even including
@@ -2179,7 +2111,7 @@ Driver.")
              "-DBUILD_SHARED_LIBS=ON")
        #:tests? #false))
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (home-page "https://nanodbc.io/")
     (synopsis "C++ wrapper for the native C ODBC API")
     (description "The goal for nanodbc is to make developers happy by providing
@@ -2267,8 +2199,8 @@ similar to BerkeleyDB, LevelDB, etc.")
                '(begin (delete-file-recursively "deps/jemalloc")))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("procps" ,procps)               ; for tests
-       ("tcl" ,tcl)))                   ; for tests
+     (list procps ; for tests
+           tcl))                   ; for tests
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2339,7 +2271,7 @@ one-to-one, while still providing an idiomatic interface.")
         "--disable-opt" ;"-march=native". XXX this also turns off -O0.
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://fallabs.com/kyotocabinet/")
     (synopsis
      "Kyoto Cabinet is a modern implementation of the DBM database")
@@ -2368,7 +2300,7 @@ database and supports many programming languages.  It is a NoSQL database.")
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://fallabs.com/tokyocabinet/")
     (synopsis "Tokyo Cabinet is a modern implementation of the DBM database")
     (description
@@ -2404,9 +2336,7 @@ organized in hash table, B+ tree, or fixed-length array.")
                (("test/fops") ""))
              #t)))))
     (inputs
-     `(("lz4" ,lz4)
-       ("zlib" ,zlib)
-       ("snappy" ,snappy)))
+     (list lz4 zlib snappy))
     (home-page "http://source.wiredtiger.com/")
     (synopsis "NoSQL data engine")
     (description
@@ -2453,14 +2383,11 @@ trees (LSM), for sustained throughput under random insert workloads.")
                             (assoc-ref %build-inputs "wiredtiger")))
        #:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("wiredtiger" ,wiredtiger-3)
-       ("guile" ,guile-2.2)))
+     (list wiredtiger-3 guile-2.2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "WiredTiger bindings for GNU Guile")
     (description
      "This package provides Guile bindings to the WiredTiger ``NoSQL''
@@ -2480,8 +2407,8 @@ database.")
       (sha256
         (base32 "1ab6rm2b8lz0g3gc8k9y79gkgajyby0zpybkdg9mk4g35y9bmyfd"))))
   (build-system perl-build-system)
-  (inputs `(("bdb" ,bdb)))
-  (native-inputs `(("perl-test-pod" ,perl-test-pod)))
+  (inputs (list bdb))
+  (native-inputs (list perl-test-pod))
   (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -2572,7 +2499,7 @@ virtual address space — not physical RAM.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (build-system gnu-build-system)
-    (inputs `(("lmdb" ,lmdb)))
+    (inputs (list lmdb))
     (home-page "https://github.com/hoytech/lmdbxx")
     (synopsis "C++11 wrapper for the LMDB embedded B+ tree database library")
     (description "@code{lmdbxx} is a comprehensive @code{C++} wrapper for the
@@ -2596,7 +2523,7 @@ semantics.")
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))
-    (inputs `(("postgresql" ,postgresql)))
+    (inputs (list postgresql))
     (arguments
      `(#:tests? #f   ; # FAIL:  1
        #:phases
@@ -2629,9 +2556,9 @@ on another machine, accessed via TCP/IP.")
     (arguments
      `(#:tests? #f))                    ; fails to import test data
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/coleifer/peewee/")
     (synopsis "Small object-relational mapping utility")
     (description
@@ -2645,51 +2572,145 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
 (define-public python2-peewee
   (package-with-python2 python-peewee))
 
+(define-public python-pypika-tortoise
+  (package
+    (name "python-pypika-tortoise")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pypika-tortoise" version))
+       (sha256
+        (base32 "0g4z0lz739nk04b405ynqpd3y1z5nfyxjz9hqgxcw3jydsjx0cb8"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/tortoise/pypika-tortoise")
+    (synopsis "Pypika fork for tortoise-orm")
+    (description "Pypika-tortoise is a fork of pypika which has been
+streamlined for its use in the context of tortoise-orm.  It removes support
+for many database kinds that tortoise-orm doesn't need, for example.")
+    (license license:asl2.0)))
+
+(define-public python-sphinxcontrib-asyncio
+  (package
+    (name "python-sphinxcontrib-asyncio")
+    (version "0.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "sphinxcontrib-asyncio" version))
+        (sha256
+          (base32 "0bkj010ygsr7m769llf2aq4bbjfhdwqrrabi98j8gpvyzvh2dzcr"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
+    (propagated-inputs (list python-sphinx))
+    (home-page "https://github.com/aio-libs/sphinxcontrib-asyncio")
+    (synopsis "Sphinx extension to support coroutines in markup")
+    (description "This package is a Sphinx extension providing additional
+coroutine-specific markup.")
+    (license license:asl2.0)))
+
+(define-public python-asyncpg
+  (package
+    (name "python-asyncpg")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "asyncpg" version))
+       (sha256
+        (base32 "1in0q6iffpl8ag6ady4bvwnn40igh10cpp4xgm426j1lqdis0byx"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-typing-extensions))
+    (native-inputs
+     (list postgresql
+           python-cython
+           python-flake8
+           python-pycodestyle
+           python-pytest
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-sphinxcontrib-asyncio
+           python-uvloop))
+    (home-page "https://github.com/MagicStack/asyncpg")
+    (synopsis "Fast PostgreSQL database client library for Python")
+    (description "@code{asyncpg} is a database interface library designed
+specifically for PostgreSQL and Python/asyncio.  @code{asyncpg} is an
+efficient, clean implementation of PostgreSQL server binary protocol for use
+with Python's asyncio framework.")
+    (license license:asl2.0)))
+
+(define-public python-asyncmy
+  (package
+    (name "python-asyncmy")
+    (version "0.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "asyncmy" version))
+        (sha256
+          (base32 "19p81jd4w7m7v2x1jdrwibp67wzqx1a7rdw5n4qqmch3iffp97vn"))))
+    (build-system python-build-system)
+    (native-inputs (list python-cython))
+    (home-page "https://github.com/long2ice/asyncmy")
+    (synopsis "Fast MySQL driver for Python")
+    (description "@code{asyncmy} is a fast @code{asyncio} MySQL driver, which
+reuses most of @code{pymysql} and @code{aiomysql} but rewrites the core
+protocol with Cython for performance.")
+    (license license:asl2.0)))
+
+(define-public python-aiomysql
+  (package
+    (name "python-aiomysql")
+    (version "0.0.21")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "aiomysql" version))
+        (sha256
+          (base32 "0b442d0jb82z3lk19ylmm64ix88ppz7gay08bxld538ivg06j5c1"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))           ;test suite requires docker
+    (propagated-inputs (list python-pymysql))
+    (home-page "https://github.com/aio-libs/aiomysql")
+    (synopsis "MySQL driver for Python")
+    (description "@code{aiomysql} is a driver for accessing a MySQL database
+from the @code{asyncio} Python framework.  It depends on and reuses most parts
+of PyMySQL.  @code{aiomysql} tries to preserve the same API as the
+@code{aiopg} library.")
+    (license license:expat)))
+
 (define-public python-tortoise-orm
   (package
     (name "python-tortoise-orm")
-    (version "0.16.21")
+    (version "0.17.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tortoise-orm" version))
        (sha256
-        (base32
-         "1dallk0q8q4v37klm0v3rppf2w8sjkqmypc1w8r9rraqxg1ylacp"))))
+        (base32 "1gzgiypln7lck3p95vk3i8rdx1bjbmmlcpb8xpba8cjdjvlj0l0z"))))
     (build-system python-build-system)
-    (arguments
-     `(#:tests? #f ; Pypi does not have tests and Git snapshot depends on
-                   ; poetry.
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'relax-version-requirements
-                    (lambda _
-                      (substitute* "setup.py"
-                        (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
-                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite")
-                        (("pytz>=2020\\.4,<2021\\.0") "pytz")
-                        ;; Not required, since ciso8601 is used.
-                        (("'iso8601>=0\\.1\\.13,<0\\.2\\.0',") ""))
-                      #t)))))
-    (native-inputs
-     `(("python-asynctest" ,python-asynctest)
-       ("python-nose2" ,python-nose2)))
+    ;; The test suite relies on asynctest, which is abandoned and doesn't
+    ;; support Python >= 3.8.
+    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-aiosqlite" ,python-aiosqlite)
-       ("python-pypika" ,python-pypika)
-       ("python-ciso8601" ,python-ciso8601)
-       ("python-pytz" ,python-pytz)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
-    (home-page
-     "https://github.com/tortoise/tortoise-orm")
-    (synopsis
-     "Easy async ORM for python, built with relations in mind")
-    (description
-     "Tortoise ORM is an easy-to-use asyncio ORM (Object Relational Mapper)
-inspired by Django.  Tortoise ORM was build with relations in mind and
-admiration for the excellent and popular Django ORM.  It’s engraved in its
-design that you are working not with just tables, you work with relational
-data.")
+     (list python-aiomysql
+           python-aiosqlite
+           python-asyncmy
+           python-asyncpg
+           python-ciso8601
+           python-iso8601
+           python-pypika-tortoise
+           python-pytz
+           python-rapidjson
+           python-uvloop))
+    (home-page "https://github.com/tortoise/tortoise-orm")
+    (synopsis "Asynchronous Object Relational Mapper (ORM) for Python")
+    (description "Tortoise ORM is an easy-to-use asyncio ORM (Object
+Relational Mapper) inspired by Django.  Tortoise ORM was built with relations
+in mind and admiration for the excellent and popular Django ORM.  It's
+engraved in its design that you are working not with just tables, you work
+with relational data.")
     (license license:asl2.0)))
 
 (define-public sqlcipher
@@ -2709,7 +2730,7 @@ data.")
      `(("libcrypto" ,openssl)
        ("libtcl8.6" ,tcl))) ; required for running the tests
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (arguments
      '(#:configure-flags
        '("--enable-tempstore=yes"
@@ -2756,7 +2777,7 @@ development.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(;; No unit tests exist.
        #:tests? #f))
@@ -2782,7 +2803,7 @@ for ODBC.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(#:tests? #f))                    ; no unit tests exist
     (home-page "https://github.com/mkleehammer/pyodbc")
@@ -2810,14 +2831,14 @@ for ODBC.")
          "0gwcpp9y09xhs21g7my2fs8ncb8i6ahlyixcx8jd3q97jbzj441l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("txt2man" ,txt2man)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           txt2man
+           which))
     (home-page "http://mdbtools.sourceforge.net/")
     (synopsis "Read Microsoft Access databases")
     (description "MDB Tools is a set of tools and applications to read the
@@ -2849,7 +2870,7 @@ etc., and an SQL engine for performing simple SQL queries.")
                   #t))))
     (build-system python-build-system)
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2889,19 +2910,19 @@ Memory-Mapped Database} (LMDB), a high-performance key-value store.")
     ;; does not contain setup.py.  How to test?
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-backpack" ,python-backpack)
-       ("python-blinker" ,python-blinker)
-       ("python-cleo" ,python-cleo)
-       ("python-faker" ,python-faker)
-       ("python-inflection" ,python-inflection)
-       ("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-pendulum" ,python-pendulum)
-       ("python-pyaml" ,python-pyaml)
-       ("python-pygments" ,python-pygments)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-backpack
+           python-blinker
+           python-cleo
+           python-faker
+           python-inflection
+           python-lazy-object-proxy
+           python-pendulum
+           python-pyaml
+           python-pygments
+           python-pyyaml
+           python-simplejson
+           python-six
+           python-wrapt))
     (home-page "https://orator-orm.com/")
     (synopsis "ActiveRecord ORM for Python")
     (description
@@ -2940,10 +2961,7 @@ implementation for Python.")
                          '("libvirtuoso-t.a"
                            "libvirtuoso-t.la"))))))))
     (inputs
-     `(("openssl" ,openssl)
-       ("net-tools" ,net-tools)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list openssl net-tools readline zlib))
     (home-page "http://vos.openlinksw.com/owiki/wiki/VOS/")
     (synopsis "Multi-model database system")
     (description "Virtuoso is a scalable cross-platform server that combines
@@ -2966,11 +2984,10 @@ and web services platform functionality.")
          "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ;; Not listed in setup.py, but used in ccmlib/node.py for full
-       ;; functionality
-       ("python-psutil" ,python-psutil)
-       ("python-six" ,python-six)))
+     (list python-pyyaml
+           ;; Not listed in setup.py, but used in ccmlib/node.py for full
+           ;; functionality
+           python-psutil python-six))
     (home-page "https://github.com/pcmanus/ccm")
     (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
 localhost")
@@ -2995,7 +3012,7 @@ on localhost.")
         "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
     (build-system python-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:python ,python-2 ; incompatible with Python 3
        #:tests? #f)) ; no test target
@@ -3018,11 +3035,10 @@ Database API 2.0T.")
        (base32 "031jbd0svrvwr3n52iibp9mkwsj9wicnck45yd26da5kmsfkas6p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython) ; for C extensions
-       ("python-pytest" ,python-pytest)
-       ("python-mock"   ,python-mock))) ; for tests
+     (list python-cython ; for C extensions
+           python-pytest python-mock)) ; for tests
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)))
+     (list python-greenlet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3068,8 +3084,7 @@ simple and Pythonic domain language.")
          "1bppjmv7v7m0q8gwg791pgxbx4ay7mna0zq204pn9vw28kfxcrf6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy" ,python-mypy)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-mypy python-typing-extensions))
     (home-page "https://github.com/dropbox/sqlalchemy-stubs")
     (synopsis "SQLAlchemy stubs and mypy plugin")
     (description "This package contains type stubs and a mypy plugin to
@@ -3097,14 +3112,10 @@ framework.")
        ;;     (lambda _
        ;;       (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-flexmock" ,python-flexmock)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil python-flexmock python-psycopg2 python-pytest
+           python-pytz))
     (home-page "https://github.com/kvesteri/sqlalchemy-utils")
     (synopsis "Various utility functions for SQLAlchemy")
     (description
@@ -3150,11 +3161,9 @@ doctest_optionflags=IGNORE_EXCEPTION_DETAIL
                       (invoke "pytest" "-vv" "--doctest-modules"
                               "alchemy_mock/"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (synopsis "Mock helpers for SQLAlchemy")
     (description
      "This package provides mock helpers for SQLAlchemy that makes it easy
@@ -3168,13 +3177,13 @@ this library provides functions to facilitate such comparisons.")
 (define-public python-alembic
   (package
     (name "python-alembic")
-    (version "1.7.1")
+    (version "1.7.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "alembic" version))
        (sha256
-        (base32 "1ys0a44gh544xpbzz6r5xvz3msim74f9qklyfnw0bhn9vk9n9adf"))))
+        (base32 "0lxi2g2025lz5k7k5dd5fc1lfijqi2yw6qqyjzp073z6laa8cckw"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -3182,14 +3191,9 @@ this library provides functions to facilitate such comparisons.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-mock python-pytest-cov))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-importlib-resources" ,python-importlib-resources) ;Python < 3.9
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-mako" ,python-mako)
-       ("python-editor" ,python-editor)))
+     (list python-dateutil python-sqlalchemy python-mako python-editor))
     (home-page "https://bitbucket.org/zzzeek/alembic")
     (synopsis "Database migration tool for SQLAlchemy")
     (description
@@ -3214,7 +3218,7 @@ SQLAlchemy Database Toolkit for Python.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/vivainio/pickleshare")
     (synopsis "Tiny key value database with concurrency support")
     (description
@@ -3232,13 +3236,14 @@ PickleShare.")
   (let ((pickleshare (package-with-python2
                       (strip-python2-variant python-pickleshare))))
     (package (inherit pickleshare)
-      (propagated-inputs `(("python2-pathlib2" ,python2-pathlib2)
-                           ,@(package-propagated-inputs pickleshare))))))
+      (propagated-inputs (modify-inputs (package-propagated-inputs
+                                                        pickleshare)
+                           (prepend python2-pathlib2))))))
 
 (define-public python-apsw
   (package
     (name "python-apsw")
-    (version "3.31.1-r1")
+    (version "3.36.0-r1")
     (source
       (origin
         (method url-fetch)
@@ -3246,12 +3251,12 @@ PickleShare.")
                             "/download/" version "/apsw-" version ".zip"))
         (sha256
           (base32
-           "1gap5lr6c7bp134nzvfwr693i6d0fqyaysg3ms2cayjldv616yfx"))))
+           "0w8q73147hv77dlpqrx6h1gx03acc8xqhvdpfp6vkffdm0wmqd8p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3301,9 +3306,9 @@ translate the complete SQLite API into Python.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (native-inputs
-     `(("python-aiounittest" ,python-aiounittest)))
+     (list python-aiounittest))
     (home-page "https://github.com/jreese/aiosqlite")
     (synopsis
      "Asyncio bridge for sqlite3")
@@ -3371,7 +3376,7 @@ designed to be easy and intuitive to use.")
      ;; and a running postgresql database management service.
      `(#:tests? #f)) ; TODO re-enable after providing a test-db.
     (inputs
-     `(("postgresql" ,postgresql))) ; libpq
+     (list postgresql)) ; libpq
     (home-page "http://initd.org/psycopg/")
     (synopsis "Python PostgreSQL adapter")
     (description
@@ -3403,10 +3408,10 @@ designed to be easy and intuitive to use.")
                             (invoke "pytest" "-vv"))
                           (format #t "test suite not run~%")))))))
     (propagated-inputs
-      `(("python-sqlalchemy" ,python-sqlalchemy)))
+      (list python-sqlalchemy))
     (native-inputs
      ;; For tests.
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "https://bitbucket.org/estin/sadisplay")
     (synopsis "SQLAlchemy schema displayer")
     (description "This package provides a program to build Entity
@@ -3414,9 +3419,6 @@ Relationship diagrams from a SQLAlchemy model (or directly from the
 database).")
     (license license:bsd-3)))
 
-(define-public python2-sadisplay
-  (package-with-python2 python-sadisplay))
-
 (define-public yoyo-migrations
   (package
     (name "yoyo-migrations")
@@ -3438,8 +3440,7 @@ database).")
      ;; fails to connect to it.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-sqlparse" ,python-sqlparse)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-sqlparse python-tabulate))
     (home-page "https://ollycope.com/software/yoyo/latest/")
     (synopsis "Database migrations with SQL")
     (description
@@ -3500,20 +3501,20 @@ parsing code in hiredis.  It primarily speeds up parsing of multi bulk replies."
 (define-public python-fakeredis
   (package
     (name "python-fakeredis")
-    (version "1.2.1")
+    (version "1.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fakeredis" version))
        (sha256
         (base32
-         "1s12mn4q4hz7402139khn9fx56kibj7nn0d6w81hn0zs07b90wpc"))))
+         "0wacd3f558vzsrpdvgvdwy9pp6crxf8hxblz30zbsv1k63j15gf9"))))
     (build-system python-build-system)
     (arguments
      ;; no tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-packaging python-redis python-sortedcontainers))
     (home-page "https://github.com/jamesls/fakeredis")
     (synopsis "Fake implementation of redis API for testing purposes")
     (description
@@ -3526,9 +3527,6 @@ talk to an external server such as redis.  This module can be used as a
 reasonable substitute.")
     (license license:bsd-3)))
 
-(define-public python2-fakeredis
-  (package-with-python2 python-fakeredis))
-
 (define-public python-redis
   (package
     (name "python-redis")
@@ -3583,12 +3581,9 @@ reasonable substitute.")
                                                       (getenv "PATH")))
                         (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("redis" ,redis)))
+     (list python-mock python-pytest redis))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-redis" ,python-redis)))
+     (list python-click python-redis))
     (home-page "https://python-rq.org/")
     (synopsis "Simple job queues for Python")
     (description
@@ -3624,11 +3619,9 @@ is designed to have a low barrier to entry.")
                          (which "env")))
                       (invoke "./run_tests.py"))))))
     (native-inputs
-     `(("redis" ,redis)
-       ("which" ,which)))
+     (list redis which))
     (propagated-inputs
-     `(("python-croniter" ,python-croniter)
-       ("python-rq" ,python-rq)))
+     (list python-croniter python-rq))
     (synopsis "Job scheduling capabilities for RQ (Redis Queue)")
     (description
      "This package provides job scheduling capabilities to @code{python-rq}
@@ -3691,7 +3684,7 @@ is designed to have a low barrier to entry.")
                            (string-append output sitedir))
                          (list python out))))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/andialbrecht/sqlparse")
     (synopsis "Non-validating SQL parser")
     (description "Sqlparse is a non-validating SQL parser for Python.  It
@@ -3715,9 +3708,6 @@ provides support for parsing, splitting and formatting SQL statements.")
 transforms idiomatic python function calls to well-formed SQL queries.")
     (license license:bsd-3)))
 
-(define-public python2-sql
-  (package-with-python2 python-sql))
-
 (define-public python-pypika
   (package
     (name "python-pypika")
@@ -3733,7 +3723,7 @@ transforms idiomatic python function calls to well-formed SQL queries.")
                "001pg36sw9a36zdd1kccbymcxndphjcjbbrsy6ri7ng8h4dgz549"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-parameterized" ,python-parameterized)))
+     (list python-parameterized))
     (home-page "https://github.com/kayak/pypika")
     (synopsis "SQL query builder API for Python")
     (description
@@ -3856,13 +3846,10 @@ the SQL language using a syntax that reflects the resulting query.")
        ("xsimd" ,xsimd)))
     ;; These are all listed under Requires.private in arrow.pc
     (propagated-inputs
-     `(("apache-thrift" ,apache-thrift "lib")
-       ("lz4" ,lz4)
-       ("utf8proc" ,utf8proc)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list `(,apache-thrift "lib") lz4 utf8proc zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (outputs '("out" "lib" "include"))
     (home-page "https://arrow.apache.org/")
     (synopsis "Columnar in-memory analytics")
@@ -3943,7 +3930,7 @@ other traditional Python scientific computing packages.")
                 "0ngmlvi320c5gsxab0s7qgq0ck4jdlcwvb6lbjhnfprafdp56vvx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (home-page "https://github.com/crate/crate-python")
     (synopsis "CrateDB Python client")
     (description
@@ -3987,10 +3974,8 @@ simultaneous database connections by using this framework.")
                 "0m680h8cc4428xin4p733azysamzgzcmv4psjvraykrsaz6ymlj3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(;; For tests.
-       ("inetutils" ,inetutils)
-       ("glibc-locales" ,glibc-locales)
-       ("mariadb" ,mariadb)))
+     (list ;; For tests.
+           inetutils glibc-locales mariadb))
     (inputs
      `(("libdbi" ,libdbi)
        ("mariadb:dev" ,mariadb "dev")
@@ -4118,7 +4103,7 @@ connecting to MS SQL and Sybase servers over TCP/IP.")
     ;; have a setup.py file (only pyproject).
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (home-page "https://github.com/msiemens/tinydb")
     (synopsis "TinyDB is a lightweight document oriented database")
     (description
diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm
index d0f4bdfbc0..51a35e0a1d 100644
--- a/gnu/packages/datamash.scm
+++ b/gnu/packages/datamash.scm
@@ -39,8 +39,8 @@
        (base32
         "1cxdlhgz3wzjqlq8bgwad93fgqymk2abbldfzw1ffnhcp4mmjjjp"))))
     (native-inputs
-     `(("which" ,which)                 ;for tests
-       ("perl" ,perl)))                 ;for help2man
+     (list which ;for tests
+           perl))                 ;for help2man
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/datamash/")
     (synopsis "Scriptable statistics and data calculation")
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index 577e7b1430..2b00137a3e 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -25,7 +25,6 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
   #:use-module (gnu packages perl)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -73,9 +72,7 @@ and heaps.")
         (base32 "1pk6wmi28pa8srb4szybrwfn71jldb61c5vgxsiayxcyg1ya4qqh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/s-yata/marisa-trie")
     (synopsis "Trie data structure C++ library")
     (description "@acronym{MARISA, Matching Algorithm with Recursively
@@ -150,7 +147,7 @@ in between these sequences may be different in both content and length.")
                 "085s437nig6bdiv9im4k4qwqbrbnc4qw9flqi16jlb493az0vcnb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ; for tests
+     (list perl))                 ; for tests
     (home-page "https://liburcu.org/")
     (synopsis "User-space RCU data synchronisation library")
     (description "liburcu is a user-space @dfn{Read-Copy-Update} (RCU) data
@@ -175,7 +172,7 @@ queues, stacks, and doubly-linked lists.")
         (base32 "0k80bjbb6ss5wpmfmfji6xbyjm990hg9kcshwwnhdnh73vxkcd1m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:make-flags
        (list "CC=gcc")
@@ -270,7 +267,7 @@ to the structure and choosing one or more fields to act as the key.")
                           out ,version)))
               #t))))))
     (native-inputs
-     `(("libdivsufsort" ,libdivsufsort)))
+     (list libdivsufsort))
     (home-page "https://github.com/simongog/sdsl-lite")
     (synopsis "Succinct data structure library")
     (description "The Succinct Data Structure Library (SDSL) is a powerful and
@@ -296,8 +293,6 @@ equivalent succinct data structure are (most of the time) identical.")
                (base32
                 "061mkg6hc9x89zya3bw18ymxlzd8fbhjipxpva8x01lh2vp1d4f0"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (synopsis "Typed link list for C")
     (description
      "@code{tllist} is a @dfn{typed linked list} C header file only library
@@ -349,7 +344,7 @@ bytes of memory space, where n is the length of the string.")
                 "1li70vwsksva9c4yly90hjafgqfixi1g6d52qq9p6r60vqc4pkjj"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("boost" ,boost)))  ; needed for tests
+     (list boost))  ; needed for tests
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm
index 712149f173..8738eb36f2 100644
--- a/gnu/packages/dav.scm
+++ b/gnu/packages/dav.scm
@@ -53,17 +53,15 @@
         (base32 "1xlsvrmx6jhi71j6j8z9sli5vwxasivzjyqf8zq8r0l5p7350clf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-waitress" ,python-waitress)))
+     (list python-pytest
+           python-pytest-cov
+           python-pytest-flake8
+           python-pytest-isort
+           python-pytest-runner
+           python-waitress))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-passlib" ,python-passlib)
-       ("python-vobject" ,python-vobject)))
+     (list python-dateutil python-defusedxml python-passlib
+           python-vobject))
     (synopsis "Basic CalDAV and CardDAV server")
     (description "Radicale is a CalDAV and CardDAV server for UNIX-like
 platforms.  Calendars and address books are available for both local and remote
@@ -88,12 +86,12 @@ clients.")
         (base32 "13ikmcja9p42azb5ccqj2bw98zybna6zlflj10hqy0kvbib70l94"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-dulwich" ,python-dulwich)
-       ("python-icalendar" ,python-icalendar)
-       ("python-jinja2" ,python-jinja2)
-       ("python-multidict" ,python-multidict)))
+     (list python-aiohttp
+           python-defusedxml
+           python-dulwich
+           python-icalendar
+           python-jinja2
+           python-multidict))
     (home-page "https://www.xandikos.org/")
     (synopsis "Lightweight CalDAV/CardDAV server")
     (description
@@ -153,24 +151,22 @@ efficient syncing
                 "/share/man/man1"))
             #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ;; Required for testing
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-localserver" ,python-pytest-localserver)
-       ("python-pytest-subtesthack" ,python-pytest-subtesthack)
-       ("python-urllib3" ,python-urllib3)
-       ("python-wsgi-intercept" ,python-wsgi-intercept)
-       ("radicale" ,radicale)))
+     (list python-setuptools-scm
+           python-sphinx
+           ;; Required for testing
+           python-hypothesis
+           python-pytest
+           python-pytest-localserver
+           python-pytest-subtesthack
+           python-urllib3
+           python-wsgi-intercept
+           radicale))
     (inputs
-     `(;; XXX https://github.com/mitsuhiko/click/issues/200
-       ("python-click" ,python-click-5)))
+     (list ;; XXX https://github.com/mitsuhiko/click/issues/200
+           python-click-5))
     (propagated-inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-click-log" ,python-click-log)
-       ("python-click-threading" ,python-click-threading)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-atomicwrites python-click-log python-click-threading
+           python-requests-toolbelt))
     (synopsis "Synchronize calendars and contacts")
     (description "Vdirsyncer synchronizes your calendars and addressbooks
 between two storage locations.  The most popular purpose is to
diff --git a/gnu/packages/dbm.scm b/gnu/packages/dbm.scm
index fcef907b27..8b6804aa92 100644
--- a/gnu/packages/dbm.scm
+++ b/gnu/packages/dbm.scm
@@ -1,10 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,11 +25,13 @@
 
 (define-module (gnu packages dbm)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (ice-9 match))
 
 ;;; Commentary:
 ;;;
@@ -46,7 +50,8 @@
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))))
+               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))
+             (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"                             ; programs, libraries, headers
                "doc"))                           ; 94 MiB of HTML docs
@@ -55,6 +60,19 @@
        #:disallowed-references ("doc")
        #:phases
        (modify-phases %standard-phases
+         ;; The configure script is too old to recognise aarch64 and
+         ;; powerpc64le as valid architectures.  The trick below works
+         ;; for "--build", but not for "--host", so update config.sub.
+         ,@(if (and (%current-target-system)
+                    (or (target-ppc64le? (%current-target-system))
+                        (target-aarch64? (%current-target-system))))
+               `((add-after 'unpack 'update-config.sub
+                   (lambda* (#:key native-inputs #:allow-other-keys)
+                     (delete-file "dist/config.sub")
+                     (symlink
+                      (search-input-file native-inputs "/bin/config.sub")
+                      "dist/config.sub"))))
+               '())
          (replace 'configure
            (lambda* (#:key target outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -70,15 +88,17 @@
                        (string-append "CONFIG_SHELL=" (which "bash"))
                        (string-append "SHELL=" (which "bash"))
 
-                       ;; Bdb doesn't recognize aarch64 as an architecture.
-                       ,@(if (string=? "aarch64-linux" (%current-system))
-                             '("--build=aarch64-unknown-linux-gnu")
-                             '())
-
-                       ;; Bdb doesn't recognize powerpc64le as an architecture.
-                       ,@(if (string=? "powerpc64le-linux" (%current-system))
-                             '("--build=powerpc64le-unknown-linux-gnu")
-                             '())
+                       ;; Bdb's config script doesn't recognize very many
+                       ;; architectures, and is a dependant on the 'config'
+                       ;; package, so we manually define the build target.
+                       ,@(match (%current-system)
+                           ("aarch64-linux"
+                            '("--build=aarch64-unknown-linux-gnu"))
+                           ("powerpc64le-linux"
+                            '("--build=powerpc64le-unknown-linux-gnu"))
+                           ("riscv64-linux"
+                            '("--build=riscv64-unknown-linux-gnu"))
+                           (_ '()))
 
                        ,@(if (%current-target-system)         ; cross building
                              '((string-append "--host=" target))
@@ -95,6 +115,12 @@
                        ;; of db_cxx.h into C++ files works; it leads to
                        ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
                        "--enable-cxx")))))))
+    (native-inputs
+     (if (and (%current-target-system)
+              (or (target-ppc64le? (%current-target-system))
+                  (target-aarch64? (%current-target-system))))
+         `(("config" ,config)) ; for config.sub
+         '()))
     (synopsis "Berkeley database")
     (description
      "Berkeley DB is an embeddable database allowing developers the choice of
@@ -114,7 +140,9 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))))))
+                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))
+              (patch-flags '("-p0"))
+              (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))))
 
 (define-public bdb-6
   (package (inherit bdb-4.8)
@@ -136,14 +164,14 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
 (define-public gdbm
   (package
     (name "gdbm")
-    (version "1.18.1")
+    (version "1.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gdbm/gdbm-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p4ibds6z3ccy65lkmd6lm7js0kwifvl53r0fd759fjxgr917rl6"))))
+                "14m22j0zndd42yc0ps0bcnnjj2iq7agnp66sl882lj5k91bc1sis"))))
     (arguments `(#:configure-flags '("--enable-libgdbm-compat"
                                      "--disable-static")))
     (build-system gnu-build-system)
diff --git a/gnu/packages/dc.scm b/gnu/packages/dc.scm
index f22ac93723..41620ea6cf 100644
--- a/gnu/packages/dc.scm
+++ b/gnu/packages/dc.scm
@@ -43,14 +43,14 @@
         (base32 "1bdgqd07f026qk6vpbxqsin536znd33931m3b4z44prlm9wd6pyi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("ncurses" ,ncurses)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list bzip2
+           glib
+           gnutls
+           ncurses
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dev.yorhel.nl/ncdc")
     (synopsis
      "Lightweight direct connect client with a friendly ncurses interface")
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index be2f8cc62b..b01ef87945 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -71,8 +71,7 @@
                          (find-files "trusted.gpg" "\\.gpg$")))
              #t)))))
     (native-inputs
-     `(("gnupg" ,gnupg)
-       ("jetring" ,jetring)))
+     (list gnupg jetring))
     (home-page "https://packages.qa.debian.org/d/debian-archive-keyring.html")
     (synopsis "GnuPG archive keys of the Debian archive")
     (description
@@ -136,7 +135,7 @@ contains the archive keys used for that.")
                          (find-files "trusted.gpg" "\\.gpg$")))
              #t)))))
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (home-page "https://tracker.debian.org/pkg/debian-ports-archive-keyring")
     (synopsis "GnuPG archive keys of the Debian ports archive")
     (description
@@ -177,8 +176,7 @@ contains the archive keys used for that.")
                                (find-files "." "ubuntu-[am].*\\.gpg$")))
                    #t)))
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)))
+     (list tar gzip))
     (home-page "https://launchpad.net/ubuntu/+source/ubuntu-keyring")
     (synopsis "GnuPG keys of the Ubuntu archive")
     (description
@@ -259,7 +257,7 @@ contains the archive keys used for that.")
        ("gnupg" ,gnupg)
        ("wget" ,wget)))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://tracker.debian.org/pkg/debootstrap")
     (synopsis "Bootstrap a basic Debian system")
     (description "Debootstrap is used to create a Debian base system from
@@ -283,10 +281,7 @@ unpacking them into a directory which can eventually be chrooted into.")
                 "1sbdjcb44g2s1zxjf9kxrp9drf9mmh6b49a9z3k428gmc6zsci4r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("po4a" ,po4a)))
+     (list autoconf automake gettext-minimal po4a))
     (home-page "https://packages.debian.org/unstable/debianutils")
     (synopsis "Miscellaneous shell utilities")
     (description
@@ -328,8 +323,7 @@ debian/copyright for more information.")))))
                             "PREFIX=/")
          #:phases (modify-phases %standard-phases (delete 'configure))))
       (inputs
-       `(("wget" ,wget)
-         ("perl" ,perl)))
+       (list wget perl))
       (home-page "http://apt-mirror.github.io/")
       (synopsis "Script for mirroring a Debian repository")
       (description
@@ -379,12 +373,12 @@ other apt sources typically provided by open source developers.")
        ("pkg-config" ,pkg-config)
        ("perl-io-string" ,perl-io-string)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("libmd" ,libmd)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           libmd
+           ncurses
+           perl
+           xz
+           zlib))
     (home-page "https://wiki.debian.org/Teams/Dpkg")
     (synopsis "Debian package management system")
     (description "This package provides the low-level infrastructure for
@@ -429,15 +423,14 @@ handling the installation and removal of Debian software packages.")
                           (string-append zsh "_reprepro"))
                #t))))))
     (inputs
-     `(("bdb" ,bdb)
-       ("bzip2" ,bzip2)
-       ("gpgme" ,gpgme)
-       ("libarchive" ,libarchive)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bdb
+           bzip2
+           gpgme
+           libarchive
+           xz
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://salsa.debian.org/brlink/reprepro")
     (synopsis "Debian package repository producer")
     (description "Reprepro is a tool to manage a repository of Debian packages
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index c95cd036e8..81e27b1ddf 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -83,7 +84,7 @@
         "184wh35pf2ddx97319s6sgkzpz48xxkbwzcjpycv009bm53lh61q"))))
     (build-system gnu-build-system)
     (inputs                             ;Installed programs are perl scripts
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -126,7 +127,7 @@ program to exhibit a bug.")
       (sha256
        (base32 "0qx0zq8jxzx2as2zf0740g7kvgq163ayn3041di4vwk77490y76v"))))
     (build-system gnu-build-system)
-    (native-inputs `(("flex" ,flex)))
+    (native-inputs (list flex))
     (inputs
      `(("astyle"          ,astyle)
        ("llvm"            ,llvm)
@@ -188,9 +189,7 @@ tools that process C/C++ code.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-flake8" ,python-pytest-flake8)))
+     (list flex python-pytest python-pytest-flake8))
     (inputs
      `(("bash" ,bash-minimal)           ; For wrap-program
        ("clang" ,clang)
@@ -213,7 +212,7 @@ tools that process C/C++ code.")
          (add-after 'install 'wrap
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH")))
+                   (python-path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/cvise")
                  `("PYTHONPATH" ":" prefix (,python-path)))
                #t))))))
@@ -251,7 +250,7 @@ tool.")
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs
-       `(("qemu" ,qemu-for-american-fuzzy-lop)))
+       (list qemu-for-american-fuzzy-lop))
       (arguments
        `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                             (string-append "DOC_PATH=$(PREFIX)/share/doc/"
@@ -469,9 +468,7 @@ server and embedded PowerPC, and S390 guests.")
            "0k55cy7x0hlc6rgpascl6ibhcfxaash3p9r9r8kwvbm3zag1rmac"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("go" ,go)))
+       (list autoconf automake go))
       (inputs
        `(("make-source" ,(package-source gnu-make))))
       (arguments
@@ -560,30 +557,28 @@ input.  Zzuf's behaviour is deterministic, making it easy to reproduce bugs.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "gui/GameConqueror.py"
                (("/usr/bin/env python")
-                (string-append (assoc-ref %build-inputs
-                                          "python-wrapper") "/bin/python")))
-             #t))
+                (search-input-file inputs "/bin/python")))))
          (add-after 'install 'wrap-gameconqueror
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/gameconqueror/GameConqueror.py")
                  `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH"             ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
              #t)))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("python-wrapper" ,python-wrapper)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("intltool" ,intltool)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list libtool
+           python-wrapper
+           gobject-introspection
+           gtk+
+           intltool
+           automake
+           autoconf))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://github.com/scanmem/scanmem")
     (synopsis "Memory scanner")
     (description "Scanmem is a debugging utility designed to isolate the
@@ -613,8 +608,8 @@ the position of the variable and allows you to modify its value.")
                 "0xlx2485y0israv2pfghmv74lxcv9i5y65agy69mif76yc4vfvif"))
               (patches (search-patches "remake-impure-dirs.patch"))))
     (inputs
-     `(("readline" ,readline)
-       ,@(package-inputs gnu-make)))
+     (modify-inputs (package-inputs gnu-make)
+       (prepend readline)))
     (home-page "http://bashdb.sourceforge.net/remake/")
     (description "Remake is an enhanced version of GNU Make that adds improved
 error reporting, better tracing, profiling, and a debugger.")
@@ -666,14 +661,9 @@ error reporting, better tracing, profiling, and a debugger.")
                       (setenv "HOME" (getcwd))
                       #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("ninja" ,ninja)
-       ("which" ,which)))
+     (list pkg-config ninja which))
     (inputs
-     `(("gdb" ,gdb)
-       ("capnproto" ,capnproto)
-       ("python" ,python)
-       ("python-pexpect" ,python-pexpect)))
+     (list gdb capnproto python python-pexpect))
     (home-page "https://rr-project.org/")
     (synopsis "Record and reply debugging framework")
     (description
@@ -742,8 +732,7 @@ program to produce symbolic backtraces.")
                       (let* ((out (assoc-ref outputs "out")))
                         (install-file "libleak.so" (string-append out "/lib"))
                         #t))))))
-    (inputs `(("libbacktrace" ,libbacktrace)
-              ("libwuya" ,libwuya)))
+    (inputs (list libbacktrace libwuya))
     (home-page "https://github.com/WuBingzheng/libleak")
     (synopsis "Memory leaks detection tool")
     (description "The libleak tool detects memory leaks by hooking memory
@@ -782,8 +771,7 @@ use than similar tools like @command{mtrace}.")
                "INSTALL=install"
                (string-append "PREFIX=" %output))))
       (inputs
-       `(("libusb-compat" ,libusb-compat)
-         ("readline" ,readline)))
+       (list libusb-compat readline))
       (synopsis "Debugging tool for MSP430 MCUs")
       (description "MspDebug supports FET430UIF, eZ430, RF2500 and Olimex
 MSP430-JTAG-TINY programmers, as well as many other compatible
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
index 0dee89dfc1..08be5a8afd 100644
--- a/gnu/packages/dejagnu.scm
+++ b/gnu/packages/dejagnu.scm
@@ -38,7 +38,7 @@
        (base32
         "0qfj2wd4qk1yn9yzam6g8nmyxfazcc0knjyyibycb2ainkhp21hd"))))
     (build-system gnu-build-system)
-    (inputs `(("expect" ,expect)))
+    (inputs (list expect))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/dhall.scm b/gnu/packages/dhall.scm
index d9ec1fbade..b406d89eb5 100644
--- a/gnu/packages/dhall.scm
+++ b/gnu/packages/dhall.scm
@@ -40,63 +40,63 @@
         (base32 "1by2d84fbckspczddl4npfsf89q6nprmbg0i5g8yr1psp0fpl4ab"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-atomic-write" ,ghc-atomic-write-0.2.0.7)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cborg" ,ghc-cborg)
-       ("ghc-cborg-json" ,ghc-cborg-json)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-data-fix" ,ghc-data-fix)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-dotgen" ,ghc-dotgen)
-       ("ghc-either" ,ghc-either)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-half" ,ghc-half)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens-family-core" ,ghc-lens-family-core)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-prettyprinter" ,ghc-prettyprinter)
-       ("ghc-prettyprinter-ansi-terminal" ,ghc-prettyprinter-ansi-terminal)
-       ("ghc-pretty-simple" ,ghc-pretty-simple)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-pretty-simple" ,ghc-pretty-simple)
-       ("ghc-repline" ,ghc-repline)
-       ("ghc-serialise" ,ghc-serialise)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-text-manipulate" ,ghc-text-manipulate)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uri-encode" ,ghc-uri-encode)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-atomic-write-0.2.0.7
+           ghc-case-insensitive
+           ghc-cborg
+           ghc-cborg-json
+           ghc-contravariant
+           ghc-data-fix
+           ghc-diff
+           ghc-dotgen
+           ghc-either
+           ghc-exceptions
+           ghc-half
+           ghc-hashable
+           ghc-lens-family-core
+           ghc-megaparsec
+           ghc-memory
+           ghc-mmorph
+           ghc-network-uri
+           ghc-optparse-applicative
+           ghc-parsers
+           ghc-parser-combinators
+           ghc-prettyprinter
+           ghc-prettyprinter-ansi-terminal
+           ghc-pretty-simple
+           ghc-profunctors
+           ghc-pretty-simple
+           ghc-repline
+           ghc-serialise
+           ghc-scientific
+           ghc-text-manipulate
+           ghc-th-lift-instances
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-uri-encode
+           ghc-vector
+           ghc-cryptonite
+           ghc-http-types
+           ghc-http-client
+           ghc-http-client-tls))
     (native-inputs
-     `(("ghc-foldl" ,ghc-foldl)
-       ("ghc-generic-random" ,ghc-generic-random-1.3.0.1)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-special-values" ,ghc-special-values)
-       ("ghc-spoon" ,ghc-spoon)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-silver" ,ghc-tasty-silver)
-       ("ghc-turtle" ,ghc-turtle)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-foldl
+           ghc-generic-random-1.3.0.1
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-semigroups
+           ghc-special-values
+           ghc-spoon
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-silver
+           ghc-turtle
+           ghc-mockery
+           ghc-doctest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/dico.scm b/gnu/packages/dico.scm
index fb97ee3d85..c7c1963726 100644
--- a/gnu/packages/dico.scm
+++ b/gnu/packages/dico.scm
@@ -65,7 +65,7 @@
                     (lambda _
                       ;; Test '71: append + dooffs + env' fails if $V is not 2.
                       (invoke "make" "check" "V=2"))))))
-    (native-inputs `(("groff" ,groff)))
+    (native-inputs (list groff))
     (inputs
      `(("m4" ,m4)                                 ;used at run time
        ("pcre" ,pcre)
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index b63bbf9245..f9d6e57877 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2017, 2018, 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -100,9 +100,7 @@
                              "vera.texi" "--force" "--html" "-o"
                              (string-append html "/vera.html"))))
       #:modules ((guix build utils))))
-    (native-inputs `(("texinfo" ,texinfo)
-                     ("tar" ,tar)
-                     ("gzip" ,gzip)))
+    (native-inputs (list texinfo tar gzip))
     (home-page "https://savannah.gnu.org/projects/vera/")
     (synopsis "List of acronyms")
     (description
@@ -167,7 +165,7 @@ work, such as sentence length and other readability measures.")
                (base32
                 "0chjqs3z9zs1w3l7b5lsaj682rgnkf9kibcbzhggqqcn1pbvl5sq"))))
     (build-system gnu-build-system)
-    (inputs `(("tk" ,tk)))
+    (inputs (list tk))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -178,8 +176,7 @@ work, such as sentence length and other readability measures.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bindir (string-append
                             (assoc-ref %outputs "out") "/bin"))
-                   (wish (string-append (assoc-ref inputs "tk")
-                          "/bin/wish8.6"))
+                   (wish (search-input-file inputs "/bin/wish8.6"))
                    (sharedir (string-append
                               (assoc-ref %outputs "out")
                               "/share/applications"))
@@ -291,9 +288,7 @@ and a Python library.")
                   (guix build utils))
        #:test-target "test"))
     (inputs
-     `(("curl" ,curl)
-       ("fribidi" ,fribidi)
-       ("rlwrap" ,rlwrap)))
+     (list curl fribidi rlwrap))
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("util-linux" ,util-linux)))     ; hexdump, for the test
@@ -330,12 +325,9 @@ translation engines from your terminal.")
            (lambda _
              (invoke "autoreconf" "-vfi"))))))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://wiki.apertium.org/wiki/Lttoolbox")
     (synopsis "Lexical processing toolbox")
     (description "Lttoolbox is a toolbox for lexical processing, morphological
@@ -361,10 +353,7 @@ word (e.g. cats) into its lemma \"cat\" and the grammatical information
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("lttoolbox" ,lttoolbox)
-       ("pcre" ,pcre)))
+     (list libxml2 libxslt lttoolbox pcre))
     (native-inputs
      `(("apertium-get"
         ,(origin
@@ -436,10 +425,7 @@ intelligible and easily correctable.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list glib ncurses readline zlib))
     (home-page "https://dushistov.github.io/sdcv/")
     (synopsis "Console version of StarDict")
     (description "sdcv is simple text-based utility for work with dictionaries
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index bd35b5aec5..696270d506 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
@@ -88,11 +88,12 @@
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  ;; This test is broken because our `file` package has a
-                  ;; bug in berkeley-db file type detection.
-                  (add-after 'unpack 'remove-berkeley-test
+                  ;; These tests are broken because our `file` package has a
+                  ;; bug in berkeley-db and wasm file type detection.
+                  (add-after 'unpack 'remove-broken-file-type-detection-test
                     (lambda _
-                      (delete-file "tests/comparators/test_berkeley_db.py")))
+                      (delete-file "tests/comparators/test_berkeley_db.py")
+                      (delete-file "tests/comparators/test_wasm.py")))
                   (add-after 'unpack 'embed-tool-references
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "diffoscope/comparators/utils/compare.py"
@@ -139,14 +140,14 @@
                       (let* ((out (assoc-ref outputs "out"))
                              (man (string-append out "/share/man/man1")))
                         (install-file "doc/diffoscope.1" man)))))))
-    (inputs `(("rpm" ,rpm)              ;for rpm-python
-              ("python-debian" ,python-debian)
-              ("python-libarchive-c" ,python-libarchive-c)
-              ("python-magic" ,python-magic)
-              ("python-tlsh" ,python-tlsh)
-              ("acl" ,acl)              ;for getfacl
-              ("colordiff" ,colordiff)
-              ("xxd" ,xxd)))
+    (inputs (list rpm ;for rpm-python
+                  python-debian
+                  python-libarchive-c
+                  python-magic
+                  python-tlsh
+                  acl ;for getfacl
+                  colordiff
+                  xxd))
     (native-inputs `(("help2man" ,help2man)
                      ;; Below are modules used for tests.
                      ("binwalk" ,binwalk)
@@ -242,10 +243,7 @@ install.")
         (base32
          "19lwsxq53isgfkvlxvxqqmbjfcim3lhcxwk7m9ddfjiynhq74949"))))
     (inputs
-     `(("python-debian" ,python-debian)
-       ("python-distro" ,python-distro)
-       ("python-libarchive-c" ,python-libarchive-c)
-       ("python-rstr" ,python-rstr)))
+     (list python-debian python-distro python-libarchive-c python-rstr))
     (native-inputs
      `(("diffoscope" ,diffoscope)
        ("help2man" ,help2man)
@@ -323,10 +321,9 @@ them in detail for later analysis.")
                           (string-append share "/doc/" ,name "-" ,version)))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("python-docutils" ,python-docutils)))
+     (list gzip python-docutils))
     (build-system python-build-system)
     (home-page "https://try.diffoscope.org")
     (synopsis "Client for remote diffoscope service")
diff --git a/gnu/packages/direct-connect.scm b/gnu/packages/direct-connect.scm
index b2e9776f94..87bf0a7c8a 100644
--- a/gnu/packages/direct-connect.scm
+++ b/gnu/packages/direct-connect.scm
@@ -50,16 +50,14 @@
        #:scons-flags (list (string-append "PREFIX=" %output))
        #:tests? #f)) ; no tests
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("gtk+" ,gtk+-2)
-       ("libglade" ,libglade)
-       ("libnotify" ,libnotify)
-       ("openssl" ,openssl)))
+     (list boost
+           bzip2
+           gtk+-2
+           libglade
+           libnotify
+           openssl))
     (native-inputs
-     `(("bazaar" ,bazaar)
-       ("gettext-minimal" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list bazaar gettext-minimal pkg-config))
     (home-page "https://launchpad.net/linuxdcpp/")
     (synopsis "Direct Connect client")
     (description "LinuxDC++ is a Direct Connect (DC) client.  Direct Connect
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index c457bfd1bf..d74d941ee0 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -141,7 +141,7 @@
                                  "/share/man/man8"))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
        `(("util-linux:lib" ,util-linux "lib"))) ; libblkid
       (home-page "https://bcache.evilpiepirate.org")
@@ -209,15 +209,14 @@ and write-back caching.")
                (("`which udevil 2>/dev/null`") "/run/setuid-programs/udevil"))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("cifs-utils" ,cifs-utils)
-       ("curlftpfs" ,curlftpfs)
-       ("eudev" ,eudev)
-       ("fakeroot" ,fakeroot)
-       ("glib" ,glib)
-       ("sshfs" ,sshfs)))
+     (list cifs-utils
+           curlftpfs
+           eudev
+           fakeroot
+           glib
+           sshfs))
     (synopsis "Device and file system manager")
     (description "udevil is a command line program that mounts and unmounts
 removable devices without a password, shows device info, and monitors device
@@ -249,9 +248,8 @@ tmpfs/ramfs filesystems.")
                (("/usr/bin/python") (which "python")))
              #t)))))
     (inputs
-     `(("lvm2" ,lvm2)
-       ("readline" ,readline)
-       ("util-linux" ,util-linux "lib")))
+     (list lvm2 readline
+           `(,util-linux "lib")))
     (native-inputs
      `(("gettext" ,gettext-minimal)
 
@@ -335,8 +333,7 @@ tables, and it understands a variety of different formats.")
                (substitute* "autogen.sh"
                  (("\\./configure") "")))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (home-page "https://github.com/baruch/gpart")
       (synopsis "Guess and recover PC-style partition tables")
       (description
@@ -424,7 +421,7 @@ scheme.")
      `(#:configure-flags (list (string-append "CXX=" ,(cxx-for-target)))))
     (home-page "https://www.gnu.org/software/ddrescue/ddrescue.html")
     (synopsis "Data recovery utility")
-    (native-inputs `(("lzip" ,lzip)))
+    (native-inputs (list lzip))
     (description
      "GNU ddrescue is a fully automated data recovery tool.  It copies data
 from one file to another, working to rescue data in case of read errors.  The
@@ -448,13 +445,12 @@ to recover data more efficiently by only reading the necessary blocks.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-compat-symlinks")
-       #:make-flags (list (string-append "PREFIX=" %output)
-                          "CC=gcc")))
+       #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                          (string-append "CC=" ,(cc-for-target)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ;; For tests.
-       ("xxd" ,xxd)))
+     (list autoconf automake
+           ;; For tests.
+           xxd))
     (home-page "https://github.com/dosfstools/dosfstools")
     (synopsis "Utilities for making and checking MS-DOS FAT file systems")
     (description
@@ -489,7 +485,7 @@ which respectively make and check MS-DOS FAT file systems.")
              ;; Add fsck.vfat symlink to match the Linux driver name.
              (symlink exe "fsck.vfat")
              #t)))))
-    (inputs `(("dosfstools" ,dosfstools/static)))
+    (inputs (list dosfstools/static))
     (home-page (package-home-page dosfstools))
     (synopsis "Statically linked fsck.fat from dosfstools")
     (description "This package provides a statically-linked @command{fsck.fat}
@@ -570,17 +566,13 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
       ;; as '/dev/disk/by-id'
      `(#:tests? #f))
     (inputs
-     `(("util-linux" ,util-linux "lib")
-       ("parted" ,parted)
-       ("glib" ,glib)
-       ("gtkmm" ,gtkmm)
-       ("libxml2" ,libxml2)))
+     (list `(,util-linux "lib") parted glib gtkmm-3 libxml2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("lvm2" ,lvm2) ; for tests
-       ("yelp-tools" ,yelp-tools)
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           itstool
+           lvm2 ; for tests
+           yelp-tools
+           pkg-config))
     (home-page "https://gparted.org/")
     (synopsis "Partition editor to graphically manage disk partitions")
     (description "GParted is a GNOME partition editor for creating,
@@ -638,8 +630,7 @@ systems.  Output format is completely customizable.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "install-extra" make-flags))))))
     (inputs
-     `(("eudev" ,eudev)
-       ("parted" ,parted)))
+     (list eudev parted))
     (home-page "http://oss.digirati.com.br/f3/")
     (synopsis "Test real capacity of flash memory cards and such.")
     (description "F3 (Fight Flash Fraud or Fight Fake Flash) tests the full
@@ -675,12 +666,11 @@ a card with a smaller capacity than stated.")
              (invoke "python" "-m" "unittest" "discover" "-v")
              #t)))))
     (native-inputs
-     `(("e2fsprogs" ,e2fsprogs)
-       ("pkg-config" ,pkg-config)))
+     (list e2fsprogs pkg-config))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (inputs
-     `(("parted" ,parted)))
+     (list parted))
     (home-page "https://github.com/dcantrell/pyparted")
     (synopsis "Parted bindings for Python")
     (description "This package provides @code{parted} bindings for Python.")
@@ -701,10 +691,9 @@ a card with a smaller capacity than stated.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("sqlite" ,sqlite)))
+     (list glib sqlite))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:phases
@@ -744,12 +733,11 @@ Duperemove can also take input from the @command{fdupes} program.")
                 "0lfjrpv3z4h0knd3v94fijrw2zjba51mrp3mjqx2c98wr428l26f"))))
     (build-system python-build-system)
     (inputs
-     `(("w3m" ,w3m)))
+     (list w3m))
     (native-inputs
-     `(("which" ,which)
-
-       ;; For tests.
-       ("python-pytest" ,python-pytest)))
+     (list which
+           ;; For tests.
+           python-pytest))
     (arguments
      '( ;; The 'test' target runs developer tools like pylint, which fail.
        #:test-target "test_pytest"
@@ -791,9 +779,7 @@ automatically finding out which program to use for what file type.")
                 "16rhfz6sjwxlmss1plb2wv2i3jq6wza02rmz1d2jrlnsq67p98vc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("python" ,python-3)))           ; used to generate the Python bindings
+     (list pkg-config swig python-3))           ; used to generate the Python bindings
     (inputs
      `(("cryptsetup" ,cryptsetup)
        ("nss" ,nss)
@@ -834,23 +820,20 @@ passphrases.")
                 "1vi61bm9wyawklswh9mj9zdp28ar7r97qckwnhgiyila73fb3jx2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("bash-completion" ,bash-completion)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libtool" ,libtool)
-       ("libxml2" ,libxml2)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)
-       ;; Required for offline docbook generation.
-       ("which" ,which)))
+     (list asciidoc
+           automake
+           autoconf
+           bash-completion
+           docbook-xsl
+           libtool
+           libxml2
+           pkg-config
+           xmlto
+           ;; Required for offline docbook generation.
+           which))
     (inputs
-     `(("eudev" ,eudev)
-       ("json-c" ,json-c)
-       ("keyutils" ,keyutils)
-       ("kmod" ,kmod)
-       ("util-linux" ,util-linux "lib")))
+     (list eudev json-c keyutils kmod
+           `(,util-linux "lib")))
     (arguments
      `(#:configure-flags
        (list "--disable-asciidoctor"    ; use docbook-xsl instead
@@ -890,8 +873,8 @@ libnvdimm (non-volatile memory device) sub-system in the Linux kernel.")
                (base32
                 "1n7vsqvh7y6yvil682q129d21yhb0cmvd5fvsbkza7ypd78inhlk"))))
     (build-system gnu-build-system)
-    (inputs `(("lvm2" ,lvm2)))
-    (native-inputs `(("which" ,which)))
+    (inputs (list lvm2))
+    (native-inputs (list which))
     (arguments
      `(#:tests? #f                      ; No tests.
        ;; Prevent a race condition where some target would attempt to link
@@ -947,23 +930,22 @@ to create devices with respective mappings for the ATARAID sets discovered.")
        ("python" ,python-wrapper)
        ("util-linux" ,util-linux)))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("cryptsetup" ,cryptsetup)
-       ("dosfstools" ,dosfstools)
-       ("dmraid" ,dmraid)
-       ("eudev" ,eudev)
-       ("glib" ,glib)
-       ("kmod" ,kmod)
-       ("libbytesize" ,libbytesize)
-       ("libyaml" ,libyaml)
-       ("lvm2" ,lvm2)
-       ("mdadm" ,mdadm)
-       ("ndctl" ,ndctl)
-       ("nss" ,nss)
-       ("parted" ,parted)
-       ("volume-key" ,volume-key)
-       ;; ("xfsprogs" ,xfsprogs) ; TODO: Package?
-       ))
+     (list btrfs-progs
+           cryptsetup
+           dosfstools
+           dmraid
+           eudev
+           glib
+           kmod
+           libbytesize
+           libyaml
+           lvm2
+           mdadm
+           ndctl
+           nss
+           parted
+           volume-key
+           xfsprogs))
     (home-page "https://github.com/storaged-project/libblockdev")
     (synopsis "Library for manipulating block devices")
     (description
@@ -1126,8 +1108,7 @@ since they are better handled by external tools.")
                    (("~/.config/xfe") xfe)))
                #t))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
      `(("bash" ,bash)
        ("coreutils" ,coreutils)
@@ -1205,15 +1186,12 @@ that support this feature).")
                 "0w5hws12l167mbr4n6a6fl0mhf8mci61fsn55lh2cxz33f7q8n2x"))))
     (build-system gnu-build-system)
     (inputs
-     `(;; memkind patched jemalloc to add je_arenalookupx,
-       ;; je_check_reallocatex--i.e. they forked jemalloc.
-       ;("jemalloc" ,jemalloc)
-       ("ndctl" ,ndctl)
-       ("numactl" ,numactl)))
+     (list ;; memkind patched jemalloc to add je_arenalookupx,
+           ;; je_check_reallocatex--i.e. they forked jemalloc.
+           ;("jemalloc" ,jemalloc)
+           ndctl numactl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:configure-flags
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
@@ -1297,10 +1275,9 @@ inspecting MMC storage devices from userspace.")
              (invoke "nosetests" "-v"
                      "--exclude" "test_bmap_helpers"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/intel/bmap-tools")
     (synopsis "Create block map for a file or copy a file using block map")
     (description "Bmaptool is a tool for creating the block map (bmap) for a
@@ -1341,15 +1318,9 @@ reliably with @code{bmaptool} than with traditional tools, like @code{dd} or
                     (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (copy-recursively "examples" (string-append doc "/examples"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("pango" ,pango)
-       ("tokyocabinet" ,tokyocabinet)
-       ("ncurses" ,ncurses)))
+     (list cairo pango tokyocabinet ncurses))
     (home-page "http://duc.zevv.nl")
     (synopsis "Library and suite of tools for inspecting disk usage")
     (description "Duc maintains a database of accumulated sizes of
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index ef5d14352e..86415bc0cf 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,6 +38,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
@@ -72,47 +74,43 @@
                 "0hcdysw8ibr66vk8i7v56l0v5ijvhlq67v4460mc2xf2910g2m72"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("elogind" ,elogind)
-       ("glib" ,glib)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("linux-pam" ,linux-pam)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-
-       ;; Some user-defined themes use QtQuick components internally.  Adding
-       ;; QtQuick & co. here; they end up in QML2_IMPORT_PATH thanks to
-       ;; 'wrap-qt-program'.
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-
-       ("shadow" ,shadow)
-       ("wayland" ,wayland)))
+     (list elogind
+           glib
+           libxcb
+           libxkbcommon
+           linux-pam
+           qtbase-5
+           qtdeclarative
+           ;; Some user-defined themes use QtQuick components internally.  Adding
+           ;; QtQuick & co. here; they end up in QML2_IMPORT_PATH thanks to
+           ;; 'wrap-qt-program'.
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           shadow
+           wayland))
     (arguments
      `(#:configure-flags
-       (list
-        ;; This option currently does nothing, but will presumably be enabled
-        ;; if/when <https://github.com/sddm/sddm/pull/616> is merged.
-        "-DENABLE_WAYLAND=ON"
-        "-DENABLE_PAM=ON"
-        ;; Both flags are required for elogind support.
-        "-DNO_SYSTEMD=ON" "-DUSE_ELOGIND=ON"
-        "-DCONFIG_FILE=/etc/sddm.conf"
-        ;; Set path to /etc/login.defs.
-        ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
-        (string-append "-DLOGIN_DEFS_PATH="
-                       (assoc-ref %build-inputs "shadow")
-                       "/etc/login.defs")
-        (string-append "-DQT_IMPORTS_DIR="
-                       (assoc-ref %outputs "out") "/lib/qt5/qml")
-        (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
-                       (assoc-ref %outputs "out") "/etc"))
+       ,#~(list
+            ;; This option currently does nothing, but will presumably be enabled
+            ;; if/when <https://github.com/sddm/sddm/pull/616> is merged.
+            "-DENABLE_WAYLAND=ON"
+            "-DENABLE_PAM=ON"
+            ;; Both flags are required for elogind support.
+            "-DNO_SYSTEMD=ON" "-DUSE_ELOGIND=ON"
+            "-DCONFIG_FILE=/etc/sddm.conf"
+            ;; Set path to /etc/login.defs.
+            ;; An alternative would be to use -DUID_MIN and -DUID_MAX.
+            (string-append "-DLOGIN_DEFS_PATH="
+                           #$(this-package-input "shadow")
+                           "/etc/login.defs")
+            (string-append "-DQT_IMPORTS_DIR="
+                           #$output "/lib/qt5/qml")
+            (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+                           #$output "/etc"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'embed-loginctl-reference
@@ -224,7 +222,7 @@ easy to use, login interface with a modern yet classy touch.")
            ;; Run test-suite under a dbus session.
            (lambda* (#:key inputs #:allow-other-keys)
              (wrap-program "tests/src/test-python-greeter"
-               `("PYTHONPATH"      ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH"      ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
 
              ;; Avoid printing locale warnings, which trip up the text
@@ -232,11 +230,11 @@ easy to use, login interface with a modern yet classy touch.")
              (unsetenv "LC_ALL")
              #t)))))
     (inputs
-     `(("audit" ,audit)
-       ("linux-pam" ,linux-pam)
-       ("shadow" ,shadow)                         ;for sbin/nologin
-       ("libgcrypt" ,libgcrypt)
-       ("libxcb" ,libxcb)))
+     (list audit
+           linux-pam
+           shadow ;for sbin/nologin
+           libgcrypt
+           libxcb))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
@@ -249,9 +247,7 @@ easy to use, login interface with a modern yet classy touch.")
        ("python-pygobject" ,python2-pygobject)))
     ;; Required by liblightdm-gobject-1.pc.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxklavier" ,libxklavier)))
+     (list glib libx11 libxklavier))
     (home-page "https://www.freedesktop.org/wiki/Software/LightDM/")
     (synopsis "Lightweight display manager")
     (description "The Light Display Manager (LightDM) is a cross-desktop
@@ -303,10 +299,7 @@ display manager which supports different greeters.")
                  `("GIO_EXTRA_MODULES" ":" prefix (,gtk))))
              #t)))))
     (native-inputs
-     `(("exo" ,exo)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("xfce4-dev-tools" ,xfce4-dev-tools)))
+     (list exo intltool pkg-config xfce4-dev-tools))
     (inputs
      `(("bash" ,bash-minimal) ; for wrap-program
        ("lightdm" ,lightdm)
@@ -351,7 +344,7 @@ GTK+, lets you select a desktop session and log in to it.")
 	      ("libxmu" ,libxmu)
 	      ("xauth" ,xauth)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/distributed.scm b/gnu/packages/distributed.scm
index 868fc589a6..182be4aaf7 100644
--- a/gnu/packages/distributed.scm
+++ b/gnu/packages/distributed.scm
@@ -58,20 +58,17 @@
                 "1p8y3mnf5yfhavhqxwf9v68prg1601h8q1pllm5z89zh661di3mj"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-server")))
-    (inputs `(("openssl" ,openssl)
-              ("curl" ,curl)
-              ("wxwidgets" ,wxwidgets)
-              ("gtk+" ,gtk+)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("libnotify" ,libnotify)
-              ("sqlite" ,sqlite)
-              ("python" ,python)
-              ("python-pyserial" ,python-pyserial)))
+    (inputs (list openssl
+                  curl
+                  wxwidgets
+                  gtk+
+                  gdk-pixbuf
+                  libnotify
+                  sqlite
+                  python
+                  python-pyserial))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Help cutting-edge science research using your computer")
     (description "BOINC is a platform for high-throughput computing on a large
 scale (thousands or millions of computers).  It can be used for volunteer
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 706debfad2..3aeba5b4a3 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -65,8 +66,7 @@
              ;; The test-suite tests timezone-dependent functions, thus tzdata
              ;; needs to be available.
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
 
              ;; Disable test for incorrect timezone: it only raises the
              ;; expected error when /usr/share/zoneinfo exists, even though
@@ -76,24 +76,13 @@
              (substitute* "tests/settings_tests/tests.py"
                ((".*def test_incorrect_timezone.*" all)
                 (string-append "    @unittest.skipIf(True, 'Disabled by Guix')\n"
-                               all)))
-
-             ;; Preserve the PYTHONPATH created by Guix when running the tests.
-             (substitute* "tests/admin_scripts/tests.py"
-               (("python_path = \\[")
-                (string-append "python_path = ['"
-                               (string-join
-                                (string-split (getenv "PYTHONPATH") #\:)
-                                "','")
-                               "', ")))
-
-             #t))
+                               all)))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "tests"
-                   (setenv "PYTHONPATH"
-                           (string-append "..:" (getenv "PYTHONPATH")))
+                   ;; Tests expect PYTHONPATH to contain the root directory.
+                   (setenv "PYTHONPATH" "..")
                    (invoke "python" "runtests.py"
                            ;; By default tests run in parallel, which may cause
                            ;; various race conditions.  Run sequentially for
@@ -108,29 +97,27 @@
          (delete 'wrap))))
     ;; TODO: Install extras/django_bash_completion.
     (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
-       ;; Remaining packages are test requirements taken from
-       ;; tests/requirements/py3.txt
-       ("python-docutils" ,python-docutils)
-       ;; optional for tests: ("python-geoip2" ,python-geoip2)
-       ;; optional for tests: ("python-memcached" ,python-memcached)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pyyaml" ,python-pyyaml)
-       ;; optional for tests: ("python-selenium" ,python-selenium)
-       ("python-tblib" ,python-tblib)))
+     (list tzdata-for-tests
+           ;; Remaining packages are test requirements taken from
+           ;; tests/requirements/py3.txt
+           python-docutils
+           ;; optional for tests: ("python-geoip2" ,python-geoip2)
+           ;; optional for tests: ("python-memcached" ,python-memcached)
+           python-numpy
+           python-pillow
+           python-pyyaml
+           ;; optional for tests: ("python-selenium" ,python-selenium)
+           python-tblib))
     (propagated-inputs
-     `(("python-asgiref" ,python-asgiref)
-       ("python-pytz" ,python-pytz)
-       ("python-sqlparse" ,python-sqlparse)
-
-       ;; Optional dependencies.
-       ("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-bcrypt" ,python-bcrypt)
-
-       ;; This input is not strictly required, but in practice many Django
-       ;; libraries need it for test suites and similar.
-       ("python-jinja2" ,python-jinja2)))
+     (list python-asgiref
+           python-pytz
+           python-sqlparse
+           ;; Optional dependencies.
+           python-argon2-cffi
+           python-bcrypt
+           ;; This input is not strictly required, but in practice many Django
+           ;; libraries need it for test suites and similar.
+           python-jinja2))
     (home-page "https://www.djangoproject.com/")
     (synopsis "High-level Python Web framework")
     (description
@@ -152,9 +139,9 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
                (base32
                 "171ll8m1wp684z1r0lz93l377jc6jyq63q5p7sqx8iqk6ypmxrmi"))))
     (native-inputs
-     `(;; 2.2 requires Selenium for the test suite.
-       ("python-selenium" ,python-selenium)
-       ,@(package-native-inputs python-django)))))
+     (modify-inputs (package-native-inputs python-django)
+       (prepend ;; 2.2 requires Selenium for the test suite.
+                python-selenium)))))
 
 (define-public python-django-extensions
   (package
@@ -175,19 +162,16 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
     (arguments
      '(#:tests? #f)) ;XXX: requires a Postgres or MySQL database
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-vobject" ,python-vobject)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-dateutil" ,python-dateutil)))
+     (list python-six python-vobject python-werkzeug python-dateutil
+           python-django))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)
-       ("python-factory-boy" ,python-factory-boy)
-       ("python-tox" ,python-tox)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-django" ,python-pytest-django)
-       ("python-shortuuid" , python-shortuuid)))
+     (list python-mock
+           python-factory-boy
+           python-tox
+           python-pytest
+           python-pytest-cov
+           python-pytest-django
+           python-shortuuid))
     (home-page
      "https://github.com/django-extensions/django-extensions")
     (synopsis "Custom management extensions for Django")
@@ -216,16 +200,12 @@ commands, additional database fields and admin extensions.")
                (add-installed-pythonpath inputs outputs)
                (setenv "PYTHONPATH"
                        (string-append ".:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "invoke" "test")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-invoke" ,python-invoke)
-       ("python-pytest-django" ,python-pytest-django)
-       ("which" ,which)))
+     (list python-coverage python-invoke python-pytest-django which))
     (propagated-inputs
-     `(("python-django" ,python-django)
-       ("python-stdnum" ,python-stdnum)))
+     (list python-django python-stdnum))
     (home-page "https://django-localflavor.readthedocs.io/en/latest/")
     (synopsis "Country-specific Django helpers")
     (description "Django-LocalFlavor is a collection of assorted pieces of code
@@ -262,10 +242,9 @@ that are useful for particular countries or cultures.")
                     (lambda _
                       (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-django python-six))
     (synopsis "Easy-to-use math field/widget captcha for Django forms")
     (description
      "A multi-value-field that presents a human answerable question,
@@ -287,6 +266,8 @@ with arguments to the field constructor.")
     (build-system python-build-system)
     ;; FIXME: How to make the test templates available to Django?
     (arguments '(#:tests? #f))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/divio/django-classy-tags")
     (synopsis "Class based template tags for Django")
     (description
@@ -315,11 +296,9 @@ when coding custom template tags.")
            (lambda _
              (invoke "python3" "-m" "django" "test" "--settings=tests.settings"))))))
     (propagated-inputs
-     `(("python-isort" ,python-isort)))
+     (list python-django python-isort))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (home-page
      "https://github.com/jazzband/django-taggit")
     (synopsis
@@ -340,10 +319,8 @@ when coding custom template tags.")
         (base32
          "14gzp5cv24z0qhxb7f7k7v9jgzpaj4n8yhjq83ynpx8183fs1rz4"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-django python-pillow))
     (home-page "https://github.com/SmileyChris/easy-thumbnails")
     (synopsis "Easy thumbnails for Django")
     (description
@@ -373,31 +350,25 @@ size and quality.")
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (if tests?
-                 (begin
-                   (add-installed-pythonpath inputs outputs)
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" ;for pytest_django_test
-                                          (getenv "PYTHONPATH")))
-                   (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
-                   (setenv "DJANGO_SETTINGS_MODULE"
-                           "pytest_django_test.settings_sqlite_file")
-                   (invoke "pytest" "-vv" "-k"
-                           ;; FIXME: these tests fail to locate Django templates ...
-                           (string-append "not test_django_not_loaded_without_settings"
-                                          " and not test_settings"
-                                          ;; ... and this does not discover
-                                          ;; 'pytest_django_test'.
-                                          " and not test_urls_cache_is_cleared")))
-                 (format #t "test suite not run~%"))
-             #t)))))
+               (begin
+                 (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
+                 (setenv "DJANGO_SETTINGS_MODULE"
+                         "pytest_django_test.settings_sqlite_file")
+                 (invoke "python" "-m" "pytest" "-vv" "-k"
+                         ;; FIXME: these tests fail to locate Django templates ...
+                         (string-append "not test_django_not_loaded_without_settings"
+                                        " and not test_settings"
+                                        ;; ... and this does not discover
+                                        ;; 'pytest_django_test'.
+                                        " and not test_urls_cache_is_cleared")))
+               (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ;; For tests.
-       ("python-pytest-xdist" ,python-pytest-xdist-next)))
+     (list python-django python-setuptools-scm
+           ;; For tests.
+           python-pytest-xdist-next))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest-6)))
-    (home-page "https://pytest-django.readthedocs.io/")
+     (list python-pytest))
+    (home-page "https://pytest-django.readthedocs.org/")
     (synopsis "Django plugin for py.test")
     (description "Pytest-django is a plugin for py.test that provides a set of
 useful tools for testing Django applications and projects.")
@@ -406,14 +377,14 @@ useful tools for testing Django applications and projects.")
 (define-public python-django-haystack
   (package
     (name "python-django-haystack")
-    (version "2.8.1")
+    (version "3.1.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "django-haystack" version))
         (sha256
          (base32
-          "1302fqsrx8w474xk5cmnmg3hjqfprlxnjg9qlg86arsr4v4vqm4b"))))
+          "10kaa5641cakpra2x3jqgys085gdkjcyns26plfyrmfpjmmpa1bd"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -421,27 +392,28 @@ useful tools for testing Django applications and projects.")
          (add-after 'unpack 'loosen-verion-restrictions
            (lambda _
              (substitute* "setup.py"
-               (("geopy.*") "geopy',\n"))
-             #t))
+               (("geopy.*") "geopy\",\n"))))
          (add-before 'check 'set-gdal-lib-path
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "GDAL_LIBRARY_PATH"
                      (string-append (assoc-ref inputs "gdal")
-                                    "/lib"))
-             #t)))
+                                    "/lib"))))
+         ;; Importing this module requires setting up a Django project.
+         (delete 'sanity-check))
        #:tests? #f)) ; OSError: libgdal.so.27: cannot open shared object file
+    (propagated-inputs
+     (list python-django))
     (native-inputs
-     `(("gdal" ,gdal)
-       ("python-coverage" ,python-coverage)
-       ("python-django" ,python-django)
-       ("python-dateutil" ,python-dateutil)
-       ("python-geopy" ,python-geopy)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-requests" ,python-requests)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pysolr" ,python-pysolr)
-       ("python-whoosh" ,python-whoosh)))
+     (list gdal
+           python-coverage
+           python-dateutil
+           python-geopy
+           python-mock
+           python-nose
+           python-requests
+           python-setuptools-scm
+           python-pysolr
+           python-whoosh))
     (home-page "http://haystacksearch.org/")
     (synopsis "Pluggable search for Django")
     (description "Haystack provides modular search for Django.  It features a
@@ -468,10 +440,8 @@ your code.")
            (lambda _
              (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-django-crispy-forms" ,python-django-crispy-forms)
-       ("python-mock" ,python-mock)))
+     (list python-django python-djangorestframework
+           python-django-crispy-forms python-mock))
     (home-page "https://django-filter.readthedocs.io/en/latest/")
     (synopsis "Reusable Django application to filter querysets dynamically")
     (description
@@ -502,12 +472,11 @@ them do this.")
              (invoke "django-admin" "test" "allauth.tests"
                      "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-openid" ,python-openid)
-       ("python-requests" ,python-requests)
-       ("python-requests-oauthlib" ,python-requests-oauthlib)))
+     (list python-openid python-requests python-requests-oauthlib))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
+    (inputs
+     (list python-django))
     (home-page "https://github.com/pennersr/django-allauth")
     (synopsis "Set of Django applications addressing authentication")
     (description
@@ -532,11 +501,9 @@ account authentication.")
          "1m1j2sx7q0blma0miswj3c8hrfi5q4y5cq2b816v8gagy89xgc57"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sqlparse" ,python-sqlparse)))
+     (list python-sqlparse python-django))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-django-jinja" ,python-django-jinja)
-       ("python-html5lib" ,python-html5lib)))
+     (list python-django-jinja python-html5lib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -565,10 +532,8 @@ request and response as a toolbar on the rendered page.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;XXX: 'make check' does "echo TODO"
     (propagated-inputs
-     `(("python-django-debug-toolbar" ,python-django-debug-toolbar)
-       ("python-jsonplus" ,python-jsonplus)
-       ("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-django python-django-debug-toolbar python-jsonplus
+           python-six python-sqlalchemy))
     (synopsis "Django Debug Toolbar panel for SQLAlchemy")
     (description
      "This package completely mimics the default Django Debug Toolbar SQL
@@ -592,7 +557,7 @@ queries done via the Django ORM, SQLAlchemy generated queries are displayed.")
      '(;; TODO: The django project for the tests is missing from the release.
        #:tests? #f))
     (inputs
-     `(("python-django" ,python-django)))
+     (list python-django))
     (home-page "https://github.com/twaddington/django-gravatar")
     (synopsis "Gravatar support for Django, improved version")
     (description
@@ -612,10 +577,9 @@ templatetags and a full test suite.")
                 "0fc6i77faxxv1gjlp06lv3kw64b5bhdiypaygfxh5djddgk83fwa"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-webassets" ,python-webassets)))
+     (list python-django python-webassets))
     (home-page "https://github.com/miracle2k/django-assets")
     (synopsis "Asset management for Django")
     (description
@@ -627,7 +591,7 @@ merging, minifying and compiling CSS and Javascript files.")
 (define-public python-django-jinja
   (package
     (name "python-django-jinja")
-    (version "2.6.0")
+    (version "2.9.1")
     (source
      (origin
        (method git-fetch)
@@ -637,12 +601,10 @@ merging, minifying and compiling CSS and Javascript files.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "06ldbkfkm6sc0p9sqpjph06gxrqpj78ih3dc2yik2fcba2y5mak1"))))
+         "0p9pkn6jjzagpnvcrl9c2vjqamkms7ymvyhhmaqqqhrlv89qnzp7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-pytz" ,python-pytz)
-       ("python-django-pipeline" ,python-django-pipeline)))
+     (list python-django python-jinja2 python-pytz python-django-pipeline))
     (arguments
      '(;; TODO Tests currently fail due to issues with the configuration for
        ;; django-pipeline
@@ -709,7 +671,7 @@ conn_max_age argument to easily enable Django’s connection pool.")
                     (lambda _
                       (invoke "python" "-m" "django" "test" "-v2"
                               "--settings=tests.settings"))))))
-    (native-inputs
+    (propagated-inputs
      ;; XXX: Picklefield has not been updated in 10+ years and fails tests
      ;; with Django 3.2.
      `(("python-django@2.2" ,python-django-2.2)))
@@ -731,6 +693,8 @@ conn_max_age argument to easily enable Django’s connection pool.")
     (arguments
      ;; XXX: Tests require a Postgres database.
      `(#:tests? #f))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/aykut/django-bulk-update")
     (synopsis "Simple bulk update over Django ORM or with helper function")
     (description
@@ -741,27 +705,25 @@ project aims to bulk update given objects using one query over Django ORM.")
 (define-public python-django-contact-form
   (package
     (name "python-django-contact-form")
-    (version "1.8.1")
+    (version "1.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-contact-form" version))
               (sha256
                (base32
-                "1zv7bcjfrg32gcsq3bclkld79l6mcy2wcvlj81h7q2ppv1wm8vqs"))))
+                "1my9hkrylckp5vfqg9b0kncrdlxjnwxll56sdciqn4v19i4wbq1y"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append "./build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "coverage" "run" "--source" "contact_form"
                      "runtests.py"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-django" ,python-django)))
+     (list python-coverage))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/ubernostrum/django-contact-form")
     (synopsis "Contact form for Django")
     (description
@@ -780,10 +742,8 @@ for Django sites.")
                (base32
                 "0ccdiv784a5vnpfal36km4dyg12340rwhpr0riyy0k89wfnjn8yi"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-django python-six))
     (home-page "https://github.com/django/django-contrib-comments")
     (synopsis "Comments framework")
     (description
@@ -815,20 +775,13 @@ entries, photos, book chapters, or anything else.")
                 (which "env")))))
          (replace 'check
            (lambda*(#:key tests? #:allow-other-keys)
-             (or
-              (not tests?)
-              (begin
-                (setenv "PYTHONPATH"
-                        (string-append (getcwd) ":"
-                                       (getenv "PYTHONPATH")))
-                (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
-                (invoke "django-admin" "test" "tests"))))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+             (when tests?
+               (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
+               (invoke "django-admin" "test" "tests"
+                       "--pythonpath=.")))))))
     (propagated-inputs
-     `(("python-css-html-js-minify" ,python-css-html-js-minify)
-       ("python-slimit" ,python-slimit)
-       ("python-jsmin" ,python-jsmin)))
+     (list python-css-html-js-minify python-django python-slimit
+           python-jsmin))
     (home-page
      "https://github.com/jazzband/django-pipeline")
     (synopsis "Asset packaging library for Django")
@@ -858,14 +811,10 @@ support, and optional data-URI image and font embedding.")
              (with-directory-excursion "tests"
                (invoke "python" "runtests.py")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-fakeredis" ,python-fakeredis)
-       ("python-hiredis" ,python-hiredis)
-       ("python-mock" ,python-mock)
-       ("python-msgpack" ,python-msgpack)
-       ("redis" ,redis)))
+     (list python-fakeredis python-hiredis python-mock python-msgpack
+           redis))
     (propagated-inputs
-     `(("python-redis" ,python-redis)))
+     (list python-django python-redis))
     (home-page "https://github.com/niwibe/django-redis")
     (synopsis "Full featured redis cache backend for Django")
     (description
@@ -893,13 +842,9 @@ support, and optional data-URI image and font embedding.")
                      "--settings=django_rq.tests.settings"
                      "--pythonpath=."))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-django-redis" ,python-django-redis)
-       ("python-mock" ,python-mock)
-       ("python-rq-scheduler" ,python-rq-scheduler)
-       ("redis" ,redis)))
+     (list python-django-redis python-mock python-rq-scheduler redis))
     (propagated-inputs
-     `(("python-rq" ,python-rq)))
+     (list python-django python-rq))
     (home-page "https://github.com/ui/django-rq")
     (synopsis "Django integration with RQ")
     (description
@@ -921,12 +866,9 @@ settings.py and easily use them in your project.")
     (build-system python-build-system)
     ;; FIXME: Tests require disque, Redis, MongoDB, Docker.
     (arguments '(#:tests? #f))
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-arrow" ,python-arrow)
-       ("python-blessed" ,python-blessed)
-       ("python-django-picklefield" ,python-django-picklefield)))
+     (list python-arrow python-blessed python-django
+           python-django-picklefield))
     (home-page "https://django-q.readthedocs.io/")
     (synopsis "Multiprocessing distributed task queue for Django")
     (description
@@ -949,12 +891,11 @@ using Python multiprocessing.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append "./test_project:"
-                                                          "./build/lib:.:"
-                                                          (getenv "PYTHONPATH")))
-                      (invoke "django-admin.py" "test" "--settings=settings"))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+                      (invoke "django-admin"
+                              "test" "--settings=test_project.settings"
+                              "--pythonpath=."))))))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/jazzband/django-sortedm2m")
     (synopsis "Drop-in replacement for django's own ManyToManyField")
     (description
@@ -978,12 +919,10 @@ the order of added relations.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append ".:"
-                                                          (getenv "PYTHONPATH")))
                       (setenv "DJANGO_SETTINGS_MODULE" "tests.test_settings")
-                      (invoke "django-admin.py" "test" "-v2"))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
+                      (invoke "django-admin" "test" "--pythonpath=."))))))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://github.com/django-compressor/django-appconf")
     (synopsis "Handle configuration defaults of packaged Django apps")
     (description
@@ -1013,17 +952,14 @@ name is purely coincidental.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./tests/test_project:./build/lib:"
-                                             (getenv "PYTHONPATH")))
+                      (setenv "PYTHONPATH" "./tests/test_project")
                       (setenv "DJANGO_SETTINGS_MODULE" "project.settings")
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-django" ,python-pytest-django)))
+     (list python-pytest python-pytest-django))
     (propagated-inputs
-     `(("django-appconf" ,python-django-appconf)))
+     `(("python-django" ,python-django)
+       ("django-appconf" ,python-django-appconf)))
     (synopsis "Generate JavaScript catalog to static files")
     (description
       "A Django app that provides helper for generating JavaScript catalog to
@@ -1050,7 +986,7 @@ static files.")
              (setenv "DJANGO_SETTINGS_MODULE" "tagging.tests.settings")
              (invoke "django-admin" "test" "--pythonpath=."))))))
     (inputs
-     `(("python-django" ,python-django)))
+     (list python-django))
     (home-page "https://github.com/Fantomas42/django-tagging")
     (synopsis "Generic tagging application for Django")
     (description "This package provides a generic tagging application for
@@ -1088,9 +1024,9 @@ Django projects, which allows association of a number of tags with any
                  (invoke "python" "runtests.py" "--nolint")
                  (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-django" ,python-pytest-django)))
+     (list python-pytest python-pytest-django))
+    (propagated-inputs
+     (list python-django))
     (home-page "https://www.django-rest-framework.org")
     (synopsis "Toolkit for building Web APIs with Django")
     (description
@@ -1111,11 +1047,8 @@ provides features like a Web-browsable API and authentication policies.")
           "0vrkli625b5s1wldri3dyrfvqbxg7zxy2pg0rpjixw3b1ndz0ag8"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not included with release.
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-django-classy-tags" ,python-django-classy-tags)
-       ("python-six" ,python-six)))
+     (list python-django python-django-classy-tags python-six))
     (home-page "https://github.com/divio/django-sekizai")
     (synopsis "Template blocks for Django projects")
     (description "Sekizai means blocks in Japanese, and that is what this app
@@ -1143,8 +1076,8 @@ a single block.")
     (arguments
      '(;; No included tests
        #:tests? #f))
-    (native-inputs
-     `(("python-django" ,python-django)))
+    (propagated-inputs
+     (list python-django))
     (home-page
      "http://github.com/maraujop/django-crispy-forms")
     (synopsis "Tool to control Django forms without custom templates")
@@ -1179,15 +1112,10 @@ forms using your favorite CSS framework, without writing template code.")
        ;; https://github.com/django-compressor/django-compressor/issues/998
        #:tests? #f))
     (propagated-inputs
-     `(("python-django-appconf" ,python-django-appconf)
-       ("python-rcssmin" ,python-rcssmin)
-       ("python-rjsmin" ,python-rjsmin)))
+     (list python-django-appconf python-rcssmin python-rjsmin))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-brotli" ,python-brotli)
-       ("python-csscompressor" ,python-csscompressor)
-       ("python-django-sekizai" ,python-django-sekizai)
-       ("python-mock" ,python-mock)))
+     (list python-beautifulsoup4 python-brotli python-csscompressor
+           python-django-sekizai python-mock))
     (home-page "https://django-compressor.readthedocs.io/en/latest/")
     (synopsis
      "Compress linked and inline JavaScript or CSS into single cached files")
@@ -1218,8 +1146,9 @@ template tag.")
                     (lambda _
                       (invoke "python" "runtests.py"))))))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list python-mock))
+    (propagated-inputs
+     (list python-django))
     (synopsis "Django test helpers to manage file storage side effects")
     (description
      "This project provides tools to help reduce the side effects of using
@@ -1250,11 +1179,9 @@ FileFields during tests.")
                         (invoke "python" "-m" "django" "test"
                                 "--settings" "tests.settings")))))))
     (native-inputs
-     `(("openldap" ,openldap)
-       ("python-django" ,python-django)
-       ("python-mock" ,python-mock)))
+     (list openldap python-mock))
     (propagated-inputs
-     `(("python-ldap" ,python-ldap)))
+     (list python-django python-ldap))
     (home-page "https://github.com/django-auth-ldap/django-auth-ldap")
     (synopsis "Django LDAP authentication backend")
     (description
@@ -1272,13 +1199,13 @@ FileFields during tests.")
                (base32
                 "06041a8icazzp73kg93c7k1ska12wvkq7fpcad0l0sm1qnxx5yx7"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))          ;no tests
-    (native-inputs
-     `(("python-django" ,python-django)))
+    (arguments
+     '(#:tests? #f                      ;no tests
+       #:phases (modify-phases %standard-phases
+                  ;; Importing this module requires a Django project.
+                  (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-elasticsearch" ,python-elasticsearch)
-       ("python-six" ,python-six)))
+     (list python-certifi python-django python-elasticsearch python-six))
     (home-page "https://github.com/cipriantarta/django-logging")
     (synopsis "Log requests/responses in various formats")
     (description
@@ -1299,11 +1226,8 @@ to ElasticSearch.")
                 "0jwlbyaxk91fq69g2y0zpfjgmjgh6l0lqm5mhys7m5968lkihvgp"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))      ;XXX: Requires a running PostgreSQL server
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-netaddr" ,python-netaddr)
-       ("python-six" ,python-six)))
+     (list python-django python-netaddr python-psycopg2 python-six))
     (home-page "https://github.com/jimfunk/django-postgresql-netfields")
     (synopsis "PostgreSQL netfields implementation for Django")
     (description
@@ -1327,30 +1251,23 @@ to ElasticSearch.")
     (arguments
      '(#:tests? #f            ;FIXME: Django raises "Apps aren't loaded yet"!?
        #:phases (modify-phases %standard-phases
-                  (add-before 'check 'loosen-requirements
+                  (add-after 'unpack 'loosen-requirements
                     (lambda _
                       ;; Do not depend on compatibility package for old
                       ;; Python versions.
                       (substitute* "requirements.txt"
-                        (("enum-compat") ""))
-                      #t))
+                        (("enum-compat") ""))))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
                           (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:.:"
-                                                   (getenv "PYTHONPATH")))
                             (setenv "DJANGO_SETTINGS_MODULE"
                                     "test_project.settings")
                             (invoke "pytest" "-vv" "--doctest-modules"
                                     "tests/" "url_filter/"))
                           (format #t "test suite not run~%")))))))
-    (native-inputs
-     `(("python-django" ,python-django)))
     (propagated-inputs
-     `(("python-cached-property" ,python-cached-property)
-       ("python-six" ,python-six)))
+     (list python-cached-property python-django python-six))
     (synopsis "Filter data via human-friendly URLs")
     (description
      "The main goal of Django URL Filter is to provide an easy URL interface
@@ -1374,9 +1291,7 @@ Django's filtering system in ORM).")
         (base32 "131m545khn8l20j4x2bvlvz36dlbnhj9pc98i2dw72s3bw8pgws0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-defusedxml" ,python-defusedxml)
-       ("python-django" ,python-django)
-       ("python-pillow" ,python-pillow)))
+     (list python-defusedxml python-django python-pillow))
     (home-page "https://github.com/artrey/django-svg-image-form-field")
     (synopsis "Form field to validate SVG and other images")
     (description "This form field allows users to provide SVG images for
diff --git a/gnu/packages/djvu.scm b/gnu/packages/djvu.scm
index 39c2b20d7e..07c77f318e 100644
--- a/gnu/packages/djvu.scm
+++ b/gnu/packages/djvu.scm
@@ -71,13 +71,9 @@
     (build-system gnu-build-system)
     (native-inputs
      ;; The 3.5.28 release tarball isn't bootstrapped.
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -109,17 +105,9 @@ utilities.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list autoconf automake libtool pkg-config qttools))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("glib" ,glib)
-       ("libxt" ,libxt)
-       ("libtiff" ,libtiff)
-       ("qtbase" ,qtbase-5)))
+     (list djvulibre glib libxt libtiff qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -182,7 +170,10 @@ a continuous layout.")
              (substitute* "tests/test-xmp-broken.py"
                ;; Error message changed in recent versions of XML parser
                (("XML parsing failure")
-                "Error in XMLValidator")))))))
+                "Error in XMLValidator"))))
+         (add-before 'check 'set-home-for-tests
+           (lambda _
+             (setenv "HOME" "/tmp"))))))
     (synopsis "PDF to DjVu converter")
     (description
      "@code{pdf2djvu} creates DjVu files from PDF files.
@@ -210,12 +201,12 @@ It is able to extract:
         (base32 "0v2ax30m7j1yi4m02nzn9rc4sn4vzqh5vywdh96r64j4pwvn5s5g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("gawk" ,gawk)
-       ("ghostscript" ,ghostscript)
-       ("grep" ,grep)
-       ("ncurses" ,ncurses)
-       ("which" ,which)))
+     (list djvulibre
+           gawk
+           ghostscript
+           grep
+           ncurses
+           which))
     (arguments
      `(#:tests? #f ; No test suite
        #:phases
@@ -274,9 +265,7 @@ It is able to extract:
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (arguments
      '(#:configure-flags '("--disable-static")
        #:parallel-build? #f
@@ -315,10 +304,8 @@ and white.")
         (base32 "0z403cklvxzz0qaczgv83ax0nknrd9h8micp04j9kjfdxk2sgval"))))
     (build-system python-build-system)
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("python2-djvulibre" ,python2-djvulibre)
-       ("python2-subprocess32" ,python2-subprocess32)
-       ("python2-wxpython" ,python2-wxpython)))
+     (list djvulibre python2-djvulibre python2-subprocess32
+           python2-wxpython))
     (arguments
      `(#:python ,python-2
        #:phases
@@ -357,7 +344,7 @@ It is able to:
         (base32 "0xyrnk8d2khi7q1zr28gjkjq6frz4mkb5jdl8821yzf12k7c8pbv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python2-nose" ,python2-nose)))
+     (list python2-nose))
     (inputs
      `(("djvulibre" ,djvulibre)
        ("minidjvu" ,minidjvu)
@@ -424,9 +411,7 @@ and background layers of images, which can then be encoded into a DjVu file.")
         (base32 "09w9rqr7z2jd5kwp178zz2yrsc82mxs7gksipg92znxzgzhmw2ng"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libxml2" ,libxml2)
-       ("python2-nose" ,python2-nose)
-       ("python2-pillow" ,python2-pillow)))
+     (list libxml2 python2-nose python2-pillow))
     (inputs
      `(("djvulibre" ,djvulibre)
        ("ocrad" ,ocrad)
diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm
index 88a0887a0a..403fcbbd6b 100644
--- a/gnu/packages/dlang.scm
+++ b/gnu/packages/dlang.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,8 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
+  #:use-module ((guix build utils) #:hide (delete which))
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
@@ -37,11 +40,13 @@
   #:use-module (gnu packages gdb)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages textutils)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (srfi srfi-1))
 
 (define-public rdmd
   (package
@@ -70,7 +75,7 @@
             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
               (install-file "rdmd" bin)))))))
     (native-inputs
-     `(("ldc" ,ldc)))
+     (list ldc))
     (home-page "https://github.com/D-Programming-Language/tools/")
     (synopsis "Specialized equivalent to 'make' for the D language")
     (description
@@ -81,233 +86,338 @@ minimize the amount of work necessary.  Unlike make, rdmd tracks dependencies
 and freshness without requiring additional information from the user.")
     (license license:boost1.0)))
 
-(define-public ldc-bootstrap
-    (package
-      (name "ldc")
-      (version "0.17.6")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/ldc-developers/ldc")
-               (commit (string-append "v" version))))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
-      (build-system cmake-build-system)
-      (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
-      (properties
-       ;; Some of the tests take a very long time on ARMv7.  See
-       ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
-       `((max-silent-time . ,(* 3600 3))))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'unpack-submodule-sources
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((unpack (lambda (input target)
-                               (let ((source (assoc-ref inputs input)))
-                                 ;; Git checkouts are directories as long as
-                                 ;; there are no patches; tarballs otherwise.
-                                 (if (file-is-directory? source)
-                                     (copy-recursively source target)
-                                     (with-directory-excursion target
-                                       (invoke "tar" "xvf" source
-                                               "--strip-components=1")))))))
-                 (unpack "phobos-src" "runtime/phobos")
-                 (unpack "druntime-src" "runtime/druntime")
-                 (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")
-                 #t)))
-           (add-after 'unpack-submodule-sources 'patch-phobos
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "runtime/phobos/std/process.d"
-                 (("/bin/sh") (which "sh"))
-                 (("echo") (which "echo")))
-               (substitute* "runtime/phobos/std/datetime.d"
-                 (("/usr/share/zoneinfo/")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
-                 (("tzName == \"[+]VERSION\"")
-                  "(tzName == \"+VERSION\" || std.algorithm.endsWith(tzName, \"/leapseconds\"))"))
-               (substitute* "tests/d2/dmd-testsuite/Makefile"
-                 (("/bin/bash") (which "bash")))
-               ;; the following two tests fail on i686
-               (for-each delete-file '("tests/ir/attributes.d" "tests/ir/align.d")))))))
-      (inputs
-       `(("libconfig" ,libconfig)
-         ("libedit" ,libedit)
-         ("tzdata" ,tzdata)
-         ("zlib" ,zlib)))
-      (native-inputs
-       `(("llvm" ,llvm-6)
-         ("clang" ,clang-6)
-         ("python-lit" ,python-lit)
-         ("python-wrapper" ,python-wrapper)
-         ("unzip" ,unzip)
-         ("phobos-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/phobos")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "phobos" version))
-             (sha256
-              (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))
-             (patches (search-patches "ldc-bootstrap-disable-tests.patch"))))
-         ("druntime-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/druntime")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "druntime" version))
-             (sha256
-              (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
-         ("dmd-testsuite-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/dmd-testsuite")
-                   (commit (string-append "ldc-v" version))))
-             (file-name (git-file-name "dmd-testsuite" version))
-             (sha256
-              (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
-      (home-page "http://wiki.dlang.org/LDC")
-      (synopsis "LLVM-based compiler for the D programming language")
-      (description
-       "LDC is an LLVM compiler for the D programming language.  It is based on
+;;; The 0.17.6 version is the last release to support being bootstrapped
+;;; without a D compiler (requiring only a C++ compiler).
+;;; TODO: Bootstrap ldc from GDC (the D frontend for GCC).
+(define ldc-bootstrap-0.17
+  (package
+    (name "ldc")
+    (version "0.17.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ldc-developers/ldc")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
+    (build-system cmake-build-system)
+    (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
+    (properties
+     ;; Some of the tests take a very long time on ARMv7.  See
+     ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
+     `((max-silent-time . ,(* 3600 3))))
+    (arguments
+     `(#:tests? #f               ;requires obsolete python-lit test dependency
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-submodule-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((unpack (lambda (input target)
+                             (let ((source (assoc-ref inputs input)))
+                               ;; Git checkouts are directories as long as
+                               ;; there are no patches; tarballs otherwise.
+                               (if (file-is-directory? source)
+                                   (copy-recursively source target)
+                                   (with-directory-excursion target
+                                     (invoke "tar" "xvf" source
+                                             "--strip-components=1")))))))
+               (unpack "phobos-src" "runtime/phobos")
+               (unpack "druntime-src" "runtime/druntime")
+               (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite"))))
+         (add-after 'unpack-submodule-sources 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "runtime/phobos/std/process.d"
+               (("/bin/sh") (which "sh"))
+               (("echo") (which "echo")))
+             (substitute* "runtime/phobos/std/datetime.d"
+               (("/usr/share/zoneinfo/")
+                (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
+               (("tzName == \"[+]VERSION\"")
+                "(tzName == \"+VERSION\" || \
+std.algorithm.endsWith(tzName, \"/leapseconds\"))")))))))
+    (inputs
+     `(("libconfig" ,libconfig)
+       ("libedit" ,libedit)
+       ("tzdata" ,tzdata)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("llvm" ,llvm-6)
+       ("python-wrapper" ,python-wrapper)
+       ("unzip" ,unzip)
+       ("phobos-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/phobos")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "phobos" version))
+           (sha256
+            (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))))
+       ("druntime-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/druntime")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "druntime" version))
+           (sha256
+            (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
+       ("dmd-testsuite-src"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/ldc-developers/dmd-testsuite")
+                 (commit (string-append "ldc-v" version))))
+           (file-name (git-file-name "dmd-testsuite" version))
+           (sha256
+            (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
+    (home-page "http://wiki.dlang.org/LDC")
+    (synopsis "LLVM-based compiler for the D programming language")
+    (description
+     "LDC is an LLVM compiler for the D programming language.  It is based on
 the latest DMD compiler that was written in C and is used for
 bootstrapping more recent compilers written in D.")
-      ;; Most of the code is released under BSD-3, except for code originally
-      ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
-      ;; which is released under the "Boost Software License version 1.0".
-      (license (list license:bsd-3
-                     license:gpl2+
-                     license:boost1.0))))
+    ;; Most of the code is released under BSD-3, except for code originally
+    ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
+    ;; which is released under the "Boost Software License version 1.0".
+    (license (list license:bsd-3
+                   license:gpl2+
+                   license:boost1.0))))
 
-(define-public ldc
-  ;; Phobos, druntime and dmd-testsuite library dependencies do
-  ;; not always have a newer release than the compiler, hence we
-  ;; retain this variable.
-  (let ((older-version "1.10.0")) ;; retain this because sometimes the libs are older
-    (package
-      (inherit ldc-bootstrap)
-      (name "ldc")
-      (version "1.10.0")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/ldc-developers/ldc")
-               (commit (string-append "v" version))))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0qcb2rn01wql7y8qp31blbv3hwmnh3zjgzi2n7k168cxr6rrdhlp"))))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'unpack-submodule-sources
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((unpack (lambda (input target)
-                               (let ((source (assoc-ref inputs input)))
-                                 ;; Git checkouts are directories as long as
-                                 ;; there are no patches; tarballs otherwise.
-                                 (if (file-is-directory? source)
-                                     (copy-recursively source target)
-                                     (with-directory-excursion target
-                                       (invoke "tar" "xvf" source
-                                               "--strip-components=1")))))))
-                 (unpack "phobos-src" "runtime/phobos")
-                 (unpack "druntime-src" "runtime/druntime")
-                 (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")
-                 #t)))
-           (add-after 'unpack-submodule-sources 'patch-phobos
+;;; This is the last version that supports being built with 32 bit machines
+;;; from 0.17.
+(define ldc-bootstrap-1.12
+  (package
+    (inherit ldc-bootstrap-0.17)
+    (version "1.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       ;; The official release include the matching source code releases of
+       ;; phobos, druntime and dmd-testsuite.
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1fdma1w8j37wkr0pqdar11slkk36qymamxnk6d9k8ybhjmxaaawm"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ldc-bootstrap-0.17)
+       ((#:build-type _ #f) "Release")
+       ((#:configure-flags _ #f)
+        `(list "-GNinja"))
+       ((#:make-flags _ #f)             ;used as build targets
+        `(list "all"))
+       ((#:tests? _) #f)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'unpack-submodule-sources)
+           (replace 'patch-paths
              (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* '("runtime/phobos/std/process.d"
-                              "tests/linking/linker_switches.d")
+               (substitute* '("runtime/phobos/std/process.d")
                  (("/bin/sh") (which "sh"))
-                 (("echo") (which "echo")))
+                 (("echo") (which "echo")))))
+           (replace 'build
+             ;; Building with Make would result in "make: *** [Makefile:166:
+             ;; all] Error 2".
+             (lambda* (#:key make-flags parallel-tests? #:allow-other-keys)
+               (let ((job-count (number->string (or (and parallel-tests?
+                                                         (parallel-job-count))
+                                                    1))))
+                 (apply invoke "cmake" "--build" "." "-j" job-count
+                        "--target" make-flags))))
+           (replace 'install
+             (lambda _
+               (invoke "cmake" "--install" ".")))))))
+    (native-inputs
+     ;; Importing (gnu packages commencement) would introduce a cycle.
+     `(("ld-gold-wrapper" ,(module-ref (resolve-interface
+                                        '(gnu packages commencement))
+                                       'ld-gold-wrapper))
+       ("llvm" ,llvm-6)
+       ("ldc" ,ldc-bootstrap-0.17)
+       ("ninja" ,ninja)
+       ("python-wrapper" ,python-wrapper)
+       ("unzip" ,unzip)))))
+
+;;; For 32 bits systems, 1.12 cannot build 1.27 directly, so we need another
+;;; hop.
+(define ldc-bootstrap-1.24
+  (package
+    (inherit ldc-bootstrap-1.12)
+    (version "1.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"))))
+    (native-inputs
+     (fold alist-replace
+           (package-native-inputs ldc-bootstrap-1.12)
+           '("ldc" "llvm")
+           `((,ldc-bootstrap-1.12) (,llvm-11))))))
+
+(define ldc-bootstrap-1.27
+  (package
+    (inherit ldc-bootstrap-1.24)
+    (version "1.27.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1775001ba6n8w46ln530kb5r66vs935ingnppgddq8wqnc0gbj4k"))))
+    (native-inputs
+     (fold alist-replace
+           (package-native-inputs ldc-bootstrap-1.24)
+           '("ldc" "llvm")
+           `((,ldc-bootstrap-1.24) (,llvm-11))))))
+
+(define-public ldc
+  (package
+    (inherit ldc-bootstrap-1.27)
+    (arguments
+     (substitute-keyword-arguments (package-arguments ldc-bootstrap-1.27)
+       ((#:make-flags _ #f)
+        '(list "all"
+               ;; Also build the test runner binaries.
+               "ldc2-unittest" "all-test-runners"))
+       ((#:configure-flags flags)
+        `(,@flags "-DBUILD_SHARED_LIBS=ON"
+                  "-DLDC_LINK_MANUALLY=OFF"))
+       ((#:tests? _) #t)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-compiler-rt-library-discovery
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((clang-runtime (assoc-ref inputs "clang-runtime"))
+                     (system ,(or (%current-target-system)
+                                  (%current-system))))
+                 (define (gnu-triplet->clang-arch system)
+                   (letrec-syntax
+                       ((matches (syntax-rules (=>)
+                                   ((_ (system-prefix => target) rest ...)
+                                    (if (string-prefix? system-prefix system)
+                                        target
+                                        (matches rest ...)))
+                                   ((_)
+                                    (error "Clang target for system is unknown"
+                                           system)))))
+                     (matches ("x86_64"      => "x86_64")
+                              ("i686"        => "i386")
+                              ("armhf"       => "armhf"))))
+                 ;; Coax LLVM into agreeing with Clang about system target
+                 ;; naming.
+                 (substitute* "driver/linker-gcc.cpp"
+                   (("triple.getArchName\\(\\)")
+                    (format #f "~s" (gnu-triplet->clang-arch system))))
+                 ;; Augment the configuration of the ldc2 binaries so they can
+                 ;; find the compiler-rt libraries they need to be linked with
+                 ;; for the tests.
+                 (substitute* (find-files "." "^ldc2.*\\.conf\\.in$")
+                   ((".*lib-dirs = \\[\n" all)
+                    (string-append all
+                                   "        \"" clang-runtime
+                                   "/lib/linux\",\n"))))))
+           (add-after 'unpack 'patch-paths-in-tests
+             (lambda _
                (substitute* "tests/d2/dmd-testsuite/Makefile"
                  (("/bin/bash") (which "bash")))
-               ;; disable unittests in the following files. We are discussing with
-               ;; upstream
+               (substitute* "tests/linking/linker_switches.d"
+                 (("echo") (which "echo")))
+               (substitute* "tests/d2/dmd-testsuite/dshell/test6952.d"
+                 (("/usr/bin/env bash")
+                  (which "bash")))))
+           (add-after 'unpack 'disable-problematic-tests
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Disable unittests in the following files.
                (substitute* '("runtime/phobos/std/net/curl.d"
                               "runtime/phobos/std/datetime/systime.d"
-                              "runtime/phobos/std/datetime/timezone.d"
-                              )
+                              "runtime/phobos/std/datetime/timezone.d")
                  (("version(unittest)") "version(skipunittest)")
                  ((" unittest") " version(skipunittest) unittest"))
-               ;; the following tests require a more recent LLVM
-               (delete-file "tests/compilable/ctfe_math.d")
-               (delete-file "tests/debuginfo/nested_gdb.d")
-               (delete-file "tests/debuginfo/classtypes_gdb.d")
-               ;; for the following tests ptrace fails with EPERM
-               ;; (see <https://issues.guix.gnu.org/48541>):
-               (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14225.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14276.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14313.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb14330.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb1.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb4149.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb4181.d")
-               (delete-file "tests/d2/dmd-testsuite/runnable/gdb15729.sh")
-               ;; the following tests plugins we don't have.
+               ;; The following tests plugins we don't have.
                (delete-file "tests/plugins/addFuncEntryCall/testPlugin.d")
-               ;; the following tests requires AVX instruction set in the CPU.
-               (substitute* "tests/d2/dmd-testsuite/runnable/test_cdvecfill.d"
+               ;; The following tests requires AVX instruction set in the CPU.
+               (substitute* "tests/d2/dmd-testsuite/runnable/cdvecfill.sh"
                  (("^// DISABLED: ") "^// DISABLED: linux64 "))
-               #t))
+               ;; This unit test requires networking, fails with
+               ;; "core.exception.RangeError@std/socket.d(778): Range
+               ;; violation".
+               (substitute* "runtime/phobos/std/socket.d"
+                 (("assert\\(ih.addrList\\[0\\] == 0x7F_00_00_01\\);.*")
+                  ""))
+               ;; The GDB tests suite fails; there are a few bug reports about
+               ;; it upstream.
+               (for-each delete-file (find-files "tests" "gdb.*\\.(d|sh)$"))
+               (delete-file "tests/d2/dmd-testsuite/runnable/debug_info.d")
+               (delete-file "tests/d2/dmd-testsuite/runnable/b18504.d")
+               (substitute* "runtime/druntime/test/exceptions/Makefile"
+                 ((".*TESTS\\+=rt_trap_exceptions_drt_gdb.*")
+                  ""))
+               ;; The following tests fail on the supported 32 bit systems,
+               ;; which are not tested upstream.
+               (with-directory-excursion "tests"
+                 (let ((system ,(or (%current-target-system)
+                                    (%current-system))))
+                   (when (or (string-prefix? "armhf" system )
+                             (string-prefix? "i686" system ))
+                     (for-each delete-file
+                               '("PGO/profile_rt_calls.d"
+                                 "codegen/mangling.d"
+                                 "debuginfo/print_gdb.d"
+                                 "dynamiccompile/bind.d"
+                                 "dynamiccompile/bind_bool.d"
+                                 "dynamiccompile/bind_func_opt.d"
+                                 "dynamiccompile/bind_nested_opt.d"
+                                 "dynamiccompile/bind_opt.d"
+                                 "dynamiccompile/compiler_context.d"
+                                 "dynamiccompile/compiler_context_parallel.d"
+                                 "instrument/xray_check_pipeline.d"
+                                 "instrument/xray_link.d"
+                                 "instrument/xray_simple_execution.d"
+                                 "sanitizers/msan_noerror.d"
+                                 "sanitizers/msan_uninitialized.d"
+                                 "d2/dmd-testsuite/runnable_cxx/cppa.d")))))))
+           (add-before 'configure 'set-cc-and-cxx-to-use-clang
+             ;; The tests require to be built with Clang; build everything
+             ;; with it, for simplicity.
+             (lambda _
+               (setenv "CC" (which "clang"))
+               (setenv "CXX" (which "clang++"))))
            (replace 'check
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               ;; some tests call into gdb binary which needs SHELL and CC set
-               (setenv "SHELL" (which "sh"))
-               (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-               (invoke "make" "test" "-j" (number->string (parallel-job-count))))))))
-      (native-inputs
-       `(("llvm" ,llvm-6)
-         ("clang" ,clang-6)
-         ("ldc" ,ldc-bootstrap)
-         ("python-lit" ,python-lit)
-         ("python-wrapper" ,python-wrapper)
-         ("unzip" ,unzip)
-         ("gdb" ,gdb)
-         ("phobos-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/phobos")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "phobos" older-version))
-             (sha256
-              (base32 "1gmlwnjdcf6s5aahadxsif9l5nyaj0rrn379g6fmhcvdk64kf509"))
-             ;; This patch deactivates some tests that depend on network access
-             ;; to pass.  It also deactivates some tests that have some reliance
-             ;; on timezone.
-             ;;
-             ;; For the network tests, there's an effort to get a version flag
-             ;; added to deactivate these tests for distribution packagers
-             ;; that is being pursued at
-             ;; <https://forum.dlang.org/post/zmdbdgnzrxyvtpqafvyg@forum.dlang.org>.
-             ;; It also deactivates a test that requires /root
-             (patches (search-patches "ldc-disable-phobos-tests.patch"))))
-         ("druntime-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/druntime")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "druntime" older-version))
-             (sha256
-              (base32 "0a3yyjcnpvm5fbdczf76fx08kl154w17w06hlxf0j3p1p4jc85aj"))))
-         ("dmd-testsuite-src"
-          ,(origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/ldc-developers/dmd-testsuite")
-                   (commit (string-append "ldc-v" older-version))))
-             (file-name (git-file-name "dmd-testsuite" older-version))
-             (sha256
-              (base32 "0mm3rliki1nqiqfaha7ssvm156aa398vpvf4v6895m7nn1mz7rss")))))))))
+             (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+               (when tests?
+                 (let ((job-count (number->string
+                                   (or (and parallel-tests?
+                                            (parallel-job-count))
+                                       1))))
+                   ;; The test targets are tested separately to provide
+                   ;; finer-grained diagnostics (see:
+                   ;; https://raw.githubusercontent.com/ldc-developers/
+                   ;; ldc/master/.azure-pipelines/3-posix-test.yml)
+                   (display "running the ldc2 unit tests...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "ldc2-unittest")
+                   (display "running the lit test suite...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "lit-tests")
+                   (display "running the dmd test suite...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-R" "dmd-testsuite")
+                   (display "running the defaultlib unit tests and druntime \
+integration tests...\n")
+                   (invoke "ctest" "--output-on-failure" "-j" job-count
+                           "-E" "dmd-testsuite|lit-tests|ldc2-unittest")))))))))
+    (native-inputs
+     (append (delete "llvm"
+                     (alist-replace "ldc" (list ldc-bootstrap-1.27)
+                                    (package-native-inputs ldc-bootstrap-1.27)))
+         `(("clang" ,clang-11)          ;propagates llvm and clang-runtime
+           ("python-lit" ,python-lit))))))
 
 (define-public dub
   (package
@@ -338,9 +448,9 @@ bootstrapping more recent compilers written in D.")
                (install-file "bin/dub" bin)
                #t))))))
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (native-inputs
-     `(("ldc" ,ldc)))
+     (list ldc))
     (home-page "https://code.dlang.org/getting_started")
     (synopsis "Package and build manager for D projects")
     (description
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index c4c4bd2b3a..dae3b27ee2 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -127,10 +127,7 @@
                       ":"))))
                #t)))))
       (inputs
-       `(("bash-minimal" ,bash-minimal)
-         ("curl" ,curl)
-         ("grep" ,grep)
-         ("json.sh" ,json.sh)))
+       (list bash-minimal curl grep json.sh))
       (synopsis
         "CLI to edit Cloudflare DNS records")
       (description
@@ -213,9 +210,7 @@ protocol.")
        ("python" ,python-wrapper)
        ("swig" ,swig)))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("nss-certs" ,nss-certs)
-       ("openssl" ,openssl)))
+     (list libpcap nss-certs openssl))
     (synopsis "DNS library that facilitates DNS tool programming")
     (description "LDNS aims to simplify DNS programming, it supports recent
 RFCs like the DNSSEC documents, and allows developers to easily create
@@ -342,9 +337,9 @@ prompt the user with the option to go with insecure DNS only.")
                 "027b0ycw8h8yvvkq46vnr7dv8iqn5srm4kr7hm7sq110kvy2rm98"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (arguments
      `(#:phases
        (modify-phases %standard-phases (delete 'configure))
@@ -388,16 +383,15 @@ and BOOTP/TFTP for network booting of diskless machines.")
     (outputs `("out" "utils"))
     (inputs
      ;; It would be nice to add GeoIP and gssapi once there are packages.
-     `(("libcap" ,libcap)
-       ("libuv" ,libuv)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("p11-kit" ,p11-kit)
-       ("python" ,python)
-       ("python-ply" ,python-ply)))
+     (list libcap
+           libuv
+           libxml2
+           openssl
+           p11-kit
+           python
+           python-ply))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-pkcs11="
@@ -490,13 +484,9 @@ Dynamic DNS update utility
              ;; The system version is still favored and referenced.
              (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list pkg-config automake autoconf libtool))
     (inputs
-     `(("libltdl" ,libltdl)
-       ("libsodium" ,libsodium)))
+     (list libltdl libsodium))
     (home-page "https://www.dnscrypt.org/")
     (synopsis "Securely send DNS requests to a remote server")
     (description
@@ -535,10 +525,9 @@ servers is included, and an up-to-date version is available at
            (lambda _
              (invoke "make" "configure"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("libevent" ,libevent)
-       ("libsodium" ,libsodium)))
+     (list libevent libsodium))
     (home-page "https://github.com/Cofyc/dnscrypt-wrapper")
     (synopsis "Server-side dnscrypt proxy")
     (description
@@ -575,10 +564,7 @@ the two.")
                              (string-append out "/share/man/man3"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://www.opensmtpd.org")
     (synopsis "Asynchronous resolver library by the OpenBSD project")
     (description
@@ -640,8 +626,7 @@ asynchronous fashion.")
                   (string-append doc "/examples/" file-name)))))))
        #:tests? #f))                    ; no tests
     (inputs
-     `(("libevent" ,libevent)
-       ("openssl" ,openssl)))
+     (list libevent openssl))
     (home-page "https://www.nlnetlabs.nl/projects/nsd/about/")
     (synopsis "Authoritative DNS name server")
     (description "@dfn{NSD}, short for Name Server Daemon, is an authoritative
@@ -692,7 +677,7 @@ to result in system-wide compromise.")
                (install-file "rbldnsd" sbin)
                (install-file "rbldnsd.8" man8)))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
      ;; For running the test suite.  Python 3 is not yet supported by a release:
      ;; see <https://github.com/spamhaus/rbldnsd/issues/16>.
@@ -728,15 +713,14 @@ BIND and djbdns---whilst using relatively little memory.")
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (native-inputs
-     `(("flex" ,flex)
-       ("swig" ,swig)))
+     (list flex swig))
     (inputs
-     `(("expat" ,expat)
-       ("libevent" ,libevent)
-       ("nghttp2" ,nghttp2 "lib")
-       ("protobuf" ,protobuf)
-       ("python-wrapper" ,python-wrapper)
-       ("openssl" ,openssl)))
+     (list expat
+           libevent
+           `(,nghttp2 "lib")
+           protobuf
+           python-wrapper
+           openssl))
     (arguments
      `(#:configure-flags
        (list "--disable-static" ; save space and non-determinism in libunbound.a
@@ -889,9 +873,9 @@ served by AS112.  Stub and forward zones are supported.")
           (base32 "1mwy6sfnlaslx26f3kpj9alh8i8y8bf1nbnsdd5j04hjsbavd07p")))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1018,13 +1002,13 @@ Extensions} (DNSSEC).")
                (rename-file (string-append out   "/share/man/man1")
                             (string-append tools "/share/man/man1"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("ragel" ,ragel)
-       ("texinfo" ,texinfo)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python-sphinx
+           ragel
+           texinfo))
     (inputs
      `(("fstrm" ,fstrm)
        ("gnutls" ,gnutls)
@@ -1115,14 +1099,14 @@ synthesis, and on-the-fly re-configuration.")
                  `("LUA_CPATH" ";" prefix ,(map lua-cpath lua-*)))
                #t))))))
     (native-inputs
-     `(("cmocka" ,cmocka)               ; for unit tests
-       ("doxygen" ,doxygen)
-       ("protobuf-c" ,protobuf-c)
-       ("pkg-config" ,pkg-config)
-       ("python-breathe" ,python-breathe)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("texinfo" ,texinfo)))
+     (list cmocka ; for unit tests
+           doxygen
+           protobuf-c
+           pkg-config
+           python-breathe
+           python-sphinx
+           python-sphinx-rtd-theme
+           texinfo))
     (inputs
      `(("fstrm" ,fstrm)
        ("gnutls" ,gnutls)
@@ -1159,14 +1143,13 @@ LuaJIT, both a resolver library and a daemon.")
         (base32 "0hf377g4j9r9sac75xp17nk2h58mazswz4vkg4g2gl2yyhvzq91w"))))
     (build-system trivial-build-system) ; no Makefile.PL
     (native-inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
+     (list bash perl))
     (inputs
-     `(("inetutils" ,inetutils)         ; logger
-       ("net-tools" ,net-tools)
-       ("perl-data-validate-ip" ,perl-data-validate-ip)
-       ("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list inetutils ; logger
+           net-tools
+           perl-data-validate-ip
+           perl-digest-sha1
+           perl-io-socket-ssl))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -1264,12 +1247,9 @@ attempts the update when it has changed.")
      (arguments
       '(#:configure-flags '("--disable-static"))) ;no need for libhsk.a
      (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("libtool" ,libtool)))
+      (list autoconf automake libtool))
      (inputs
-      `(("unbound" ,unbound)
-        ("libuv" ,libuv)))
+      (list unbound libuv))
      (home-page "https://www.handshake.org/")
      (synopsis "Resolver daemon for the Handshake naming protocol")
      (description
@@ -1417,7 +1397,21 @@ and TCP-capable recursive DNS server for finding domains on the internet.")
        #:configure-flags
        (list (string-append "--sysconfdir=/etc"))
        #:make-flags
-       (list (string-append "SYSCONFDIR=/" (assoc-ref %outputs "out") "/etc"))))
+       (list (string-append "SYSCONFDIR=/" (assoc-ref %outputs "out") "/etc"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (coreutils (assoc-ref inputs "coreutils-minimal")))
+               (substitute* (string-append out "/sbin/resolvconf")
+                 (("RESOLVCONF=\"\\$0\"")
+                  (format #f "\
+RESOLVCONF=\"$0\"
+PATH=~a/bin:$PATH"
+                          coreutils)))))))))
+    (inputs
+     (list coreutils-minimal))
     (home-page "https://roy.marples.name/projects/openresolv/")
     (synopsis "Resolvconf POSIX compliant implementation, a middleman for resolv.conf")
     (description "openresolv is an implementation of @command{resolvconf}, the
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index ae5bc5d895..cb1a0d4d5e 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -1,11 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Andrew Whatson <whatson@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -34,11 +35,13 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module ((guix build utils) #:select (alist-replace))
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python))
@@ -75,7 +78,7 @@
                 (string-append
                  "uri=\"file://" dtd "/")))
              #t)))))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://docbook.org")
     (synopsis "DocBook XML DTDs for document authoring")
     (description
@@ -175,15 +178,17 @@ by no means limited to these applications.)  This package provides XML DTDs.")
 (define-public docbook-xsl
   (package
     (name "docbook-xsl")
-    (version "1.79.1")
+    (version "1.79.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/docbook/docbook-xsl/"
-                                  version "/docbook-xsl-" version ".tar.bz2"))
-              (patches (search-patches "docbook-xsl-nonrecursive-string-subst.patch"))
+              (uri (string-append "https://github.com/docbook/xslt10-stylesheets"
+                                  "/releases/download/release%2F" version
+                                  "/docbook-xsl-" version ".tar.bz2"))
+              (patches (search-patches "docbook-xsl-support-old-url.patch"
+                                       "docbook-xsl-nonrecursive-string-subst.patch"))
               (sha256
                (base32
-                "0s59lihif2fr7rznckxr2kfyrvkirv76r1zvidp9b5mj28p4apvj"))
+                "0wd33z41kdsybyx3ay21w6bdlmgpd9kyn3mr5y520lsf8km28r9i"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -191,9 +196,12 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                   #t))))
     (build-system trivial-build-system)
     (arguments
-     `(#:builder (let ((name-version (string-append ,name "-" ,version)))
+     `(#:builder (begin
                    (use-modules (guix build utils))
 
+                   (define name-version
+                     (string-append ,name "-" ,version))
+
                    (let* ((bzip2  (assoc-ref %build-inputs "bzip2"))
                           (xz     (assoc-ref %build-inputs "xz"))
                           (tar    (assoc-ref %build-inputs "tar"))
@@ -213,15 +221,69 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                                        name-version "/")))
                      #t))
        #:modules ((guix build utils))))
-    (native-inputs `(("bzip2" ,bzip2)
-                     ("xz" ,xz)         ;needed for repacked tarballs
-                     ("tar" ,tar)))
+    (native-inputs (list bzip2 xz ;needed for repacked tarballs
+                         tar))
     (home-page "https://docbook.org")
     (synopsis "DocBook XSL style sheets for document authoring")
     (description
      "This package provides XSL style sheets for DocBook.")
     (license (license:x11-style "" "See 'COPYING' file."))))
 
+(define-public docbook-xsl-ns
+  (package
+    (name "docbook-xsl-ns")
+    (version "1.79.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/docbook/"
+                                  name "/" version "/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "170ggf5dgjar65kkn5n33kvjr3pdinpj66nnxfx8b2avw0k91jin"))))
+    (build-system copy-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; XXX: The copy-build-system doesn't seem to allow installing to a
+         ;; different output.
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (xml (string-append out "/xml/xsl/" ,name "-" ,version))
+                    (doc (string-append (assoc-ref %outputs "doc")
+                                        "/share/doc/" ,name "-" ,version))
+                    (select-rx (make-regexp
+                                "(\\.xml$|\\.xsl$|\\.dtd$|\\.ent$)")))
+               ;; Install catalog.
+               (install-file "catalog.xml" xml)
+               (install-file "VERSION.xsl" xml)
+               (substitute* (string-append xml "/catalog.xml")
+                 (("rewritePrefix=\"./")
+                  (string-append "rewritePrefix=\"file://" xml "/")))
+               ;; Install style sheets.
+               (for-each (lambda (dir)
+                           (for-each (lambda (f)
+                                       (install-file
+                                        f (string-append xml "/" (dirname f))))
+                                     (find-files dir select-rx)))
+                         '("assembly" "common" "eclipse" "epub" "epub3" "fo"
+                           "highlighting" "html" "htmlhelp" "javahelp" "lib"
+                           "manpages" "params" "profiling" "roundtrip"
+                           "template" "website"
+                           "xhtml" "xhtml-1_1" "xhtml5"))
+               ;; Install documentation.
+               (install-file "NEWS" doc)
+               (install-file "RELEASE-NOTES.html" doc)
+               (copy-recursively "slides" doc)
+               (copy-recursively "webhelp" doc)))))))
+    (home-page "https://docbook.org")
+    (synopsis "DocBook XSL namespaced style sheets for document authoring")
+    (description "This package provides the @emph{namespaced} XSL style sheets
+for DocBook.")
+    (license (license:x11-style "" "See 'COPYING' file."))))
+
 (define-public docbook-dsssl
   (package
     (name "docbook-dsssl")
@@ -254,10 +316,9 @@ by no means limited to these applications.)  This package provides XML DTDs.")
            ;; The doc output contains 1.4 MiB of HTML documentation.
            (symlink docbook-dsssl-doc doc)))))
     (inputs
-     `(("docbook-dsssl-doc" ,docbook-dsssl-doc)))
+     (list docbook-dsssl-doc))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("tar" ,tar)))
+     (list bzip2 tar))
     (home-page "https://docbook.org/")
     (synopsis "DSSSL style sheets for DocBook")
     (description "This package provides DSSSL style sheets for DocBook.")
@@ -335,9 +396,9 @@ by no means limited to these applications.)  This package provides XML DTDs.")
              (("(.*ISO 8879.*)\"iso-(.*)\\.gml\"" _ head name)
               (string-append head "\"" iso-entities-dir "/ISO" name "\"")))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("iso-8879-entities" ,iso-8879-entities)))
+     (list iso-8879-entities))
     (home-page "https://docbook.org")
     (synopsis "DocBook SGML style sheets for document authoring")
     (description "This package provides SGML style sheets for DocBook.")
@@ -399,42 +460,38 @@ the in DocBook SGML DTDs.")
     (build-system python-build-system)
     ;; TODO: Add xfig/transfig for fig2dev utility
     (inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-anysize
                                         texlive-latex-appendix
+                                        texlive-latex-bookmark
                                         texlive-latex-changebar
                                         texlive-latex-colortbl
-                                        texlive-latex-eepic
-                                        texlive-latex-eso-pic
                                         texlive-latex-fancybox
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
                                         texlive-latex-float
                                         texlive-latex-footmisc
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-jknapltx
                                         texlive-latex-listings
                                         texlive-latex-multirow
-                                        texlive-latex-oberdiek
                                         texlive-latex-overpic
                                         texlive-latex-pdfpages
+                                        texlive-latex-refcount
                                         texlive-latex-subfigure
                                         texlive-latex-titlesec
-                                        texlive-latex-url
-                                        texlive-latex-wasysym
+                                        texlive-wasysym
 
-                                        texlive-fonts-ec
                                         texlive-fonts-rsfs
-                                        texlive-fonts-stmaryrd
+                                        texlive-stmaryrd
 
-                                        texlive-generic-ifxetex)))
+                                        texlive-generic-iftex)))
        ("imagemagick" ,imagemagick)     ;for convert
        ("inkscape" ,inkscape)           ;for svg conversion
        ("docbook" ,docbook-xml)
        ("libxslt" ,libxslt)))           ;for xsltproc
     (arguments
-     `(#:python ,python-2               ;'print' syntax
-       ;; Using setuptools causes an invalid "package_base" path in
+     `(;; Using setuptools causes an invalid "package_base" path in
        ;; out/bin/.dblatex-real due to a missing leading '/'.  This is caused
        ;; by dblatex's setup.py stripping the root path when creating the
        ;; script.  (dblatex's setup.py still uses distutils and thus has to
@@ -478,6 +535,91 @@ DB2LaTeX.")
      (inputs (alist-replace "imagemagick" `(,imagemagick/stable)
                             (package-inputs dblatex))))))
 
+(define-public docbook-utils
+  (package
+    (name "docbook-utils")
+    (version "0.6.14")
+    (source (origin
+              (method url-fetch)
+              ;; The original sources are not accessible anymore.
+              (uri (string-append "http://deb.debian.org/debian/pool/main/"
+                                  "d/docbook-utils/docbook-utils_"
+                                  version ".orig.tar.gz"))
+              (sha256
+               (base32
+                "1scj5vgw1xz872pq54a89blcxqqm11p90yzv8a9mqq57x27apyj8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-build-system
+                    (lambda _
+                      (substitute* (find-files "." "\\.in$")
+                        ;; Do not hard-code SGML_CATALOG_FILES.
+                        ((".*SGML_CATALOG_FILES=/etc/sgml/catalog.*") "")
+                        ;; Use OpenSP and OpenJade.
+                        (("\\bjade\\b")
+                         "openjade")
+                        (("\\bnsgmls\\b")
+                         "onsgmls"))
+                      #t))
+                  (add-after 'unpack 'patch-jw.in
+                    ;; Do not override the SGML_CATALOG_FILES environment
+                    ;; variable.
+                    (lambda _
+                      (substitute* "bin/jw.in"
+                        ((".*SGML_CATALOG_FILES=`find.*")
+                         "")
+                        (("SGML_CATALOG_FILES=`echo.*")
+                         ":\n")
+                        (("SGML_CATALOG_FILES=\"\"")
+                         ":")
+                        (("\\bwhich\\b")
+                         "command -v"))
+                      #t))
+                  (add-after 'unpack 'patch-txt-backend
+                    (lambda _
+                      ;; Locate lynx, links or w3m from the PATH, not from
+                      ;; /usr/bin.
+                      (substitute* "backends/txt"
+                        (("CONVERT=/usr/bin/")
+                         "CONVERT=")
+                        (("\\[ -x /usr/bin/([^ ]+) \\]" dummy command)
+                         (string-append "command -v " command " > /dev/null")))
+                      #t)))))
+    ;; Propagated for convenience.  All these tools are used at run time to
+    ;; provide the complete functionality of the docbook-utils commands.
+    (propagated-inputs
+     (list texlive-jadetex
+           docbook-sgml-3.1
+           docbook-dsssl
+           openjade
+           opensp
+           lynx
+           perl-sgmls))
+    (home-page "https://packages.debian.org/sid/docbook-utils")
+    (synopsis "DocBook converter to other formats")
+    (description "The docbook-utils package is a collection of utilities
+intended to ease the use of SGML and XML.
+@table @command
+@item jw
+Convert a SGML DocBook file to other formats such as Hyper Text Markup
+Language (HTML), Rich Text Format (RTF), PostScript (PS), man, Portable
+Document Format (PDF), TeX, Texinfo or plain text (txt).  It can be used
+more conveniently via the following wrappers:
+@itemx docbook2dvi Convert a SGML DocBook file to the DVI format.
+@itemx docbook2html Convert a SGML DocBook file to an HTML document.
+@itemx docbook2man Convert a SGML DocBook file a man page.
+@itemx docbook2pdf Convert a SGML DocBook file to a PDF document.
+@itemx docbook2ps Convert a SGML DocBook file to a PS document.
+@itemx docbook2rtf Convert a SGML DocBook file to a RTF document.
+@itemx docbook2tex Convert a SGML DocBook file to a TeX document.
+@itemx docbook2texi Convert a SGML DocBook file to a Texinfo document.
+@itemx docbook2txt Convert a SGML DocBook file to a plain text document.
+@item sgmldiff
+Detect the differences in markup between two SGML files.
+@end table")
+    (license license:gpl2+)))
+
 (define-public docbook2x
   (package
     (name "docbook2x")
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 8bac1b89ce..cdf62f5e9a 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -57,25 +57,22 @@
 (define-public python-docker
   (package
     (name "python-docker")
-    (version "3.7.3")
+    (version "5.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "docker" version))
        (sha256
         (base32
-         "0qmrcvpaz37p85hfddsd4yc8hgqlkzs4cz09q9wmy0pz5pwajqm0"))))
+         "1yr7w8vmdis01myx26pqx7wcyz2cy1mfs421alppq3lpc9ms45nr"))))
     (build-system python-build-system)
     ;; TODO: Tests require a running Docker daemon.
     (arguments '(#:tests? #f))
     (inputs
-     `(("python-requests" ,python-requests-2.20)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3-1.24)))
+     (list python-requests python-six python-urllib3))
     (propagated-inputs
-     `(("python-docker-pycreds" ,python-docker-pycreds)
-       ("python-paramiko" ,python-paramiko)    ;adds SSH support
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-docker-pycreds python-paramiko ;adds SSH support
+           python-websocket-client))
     (home-page "https://github.com/docker/docker-py/")
     (synopsis "Python client for Docker")
     (description "Docker-Py is a Python client for the Docker container
@@ -95,7 +92,7 @@ management tool.")
          "1kjn64wx23jmr8dcc6g7bwlmrhfmxr77gh6iphqsl39sayfxdab9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/d11wtq/dockerpty")
     (synopsis "Python library to use the pseudo-TTY of a Docker container")
     (description "Docker PTY provides the functionality needed to operate the
@@ -106,29 +103,30 @@ client.")
 (define-public docker-compose
   (package
     (name "docker-compose")
-    (version "1.25.4")
+    (version "1.29.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "docker-compose" version))
        (sha256
         (base32
-         "1ww8ckpj3n5jdg63qvmiqx3gk0fsrnynnnqj17fppymbwjzf5fps"))))
+         "1dq9kfak61xx7chjrzmkvbw9mvj9008k7g8q7mwi4x133p9dk32c"))))
     (build-system python-build-system)
     ;; TODO: Tests require running Docker daemon.
     (arguments '(#:tests? #f))
     (inputs
-     `(("python-cached-property"
-        ,python-cached-property)
-       ("python-docker" ,python-docker)
-       ("python-dockerpty" ,python-dockerpty)
-       ("python-docopt" ,python-docopt)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-texttable" ,python-texttable)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-cached-property
+           python-distro
+           python-docker
+           python-dockerpty
+           python-docopt
+           python-dotenv
+           python-jsonschema
+           python-pyyaml
+           python-requests
+           python-six
+           python-texttable
+           python-websocket-client))
     (home-page "https://www.docker.com/")
     (synopsis "Multi-container orchestration for Docker")
     (description "Docker Compose is a tool for defining and running
@@ -160,11 +158,9 @@ created and all the services are started as specified in the configuration.")
                (("2.4.1") ,(package-version python-flake8)))
              #t)))))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-flake8 python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/shin-/dockerpy-creds")
     (synopsis
      "Python bindings for the Docker credentials store API")
@@ -232,14 +228,9 @@ Python without keeping their credentials in a Docker configuration file.")
                    (apply invoke "make" (string-append "DESTDIR=" out) "install"
                           ',make-flags)))))))))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("libseccomp" ,libseccomp)
-       ("pigz" ,pigz)
-       ("runc" ,runc)
-       ("util-linux" ,util-linux)))
+     (list btrfs-progs libseccomp pigz runc util-linux))
     (native-inputs
-     `(("go" ,go)
-       ("pkg-config" ,pkg-config)))
+     (list go pkg-config))
     (synopsis "Docker container runtime")
     (description "This package provides the container daemon for Docker.
 It includes image transfer and storage, container execution and supervision,
@@ -593,10 +584,8 @@ built-in registry server of Docker.")
        ("xfsprogs" ,xfsprogs)
        ("xz" ,xz)))
     (native-inputs
-     `(("eudev" ,eudev)      ; TODO: Should be propagated by lvm2 (.pc -> .pc)
-       ("go" ,go)
-       ("gotestsum" ,gotestsum)
-       ("pkg-config" ,pkg-config)))
+     (list eudev ; TODO: Should be propagated by lvm2 (.pc -> .pc)
+           go gotestsum pkg-config))
     (synopsis "Docker container component library, and daemon")
     (description "This package provides a framework to assemble specialized
 container systems.  It includes components for orchestration, image
@@ -667,9 +656,7 @@ provisioning etc.")
                (install-file "build/docker" out-bin)
                #t))))))
     (native-inputs
-     `(("go" ,go)
-       ("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
+     (list go libltdl pkg-config))
     (synopsis "Command line interface to Docker")
     (description "This package provides a command line interface to Docker.")
     (home-page "https://www.docker.com/")
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index 19190f4480..6a0d8e8f2e 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -93,7 +93,7 @@
                 (assoc-ref outputs "out")))
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "LaTeX documents to HTML")
     (description "LaTeX2HTML is a utility that converts LaTeX documents to web
 pages in HTML.")
@@ -160,13 +160,9 @@ release/xsl/current")
                                          "/xml/dtd/docbook/docbookx.dtd")))
                        #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)))
+     (list autoconf))
     (inputs
-     `(("python" ,python)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list python docbook-xml docbook-xsl libxml2 libxslt))
     (home-page "https://asciidoc.org/")
     (synopsis "Text-based document generation system")
     (description
@@ -185,8 +181,8 @@ markup) can be customized and extended by the user.")
 (define-public doxygen
   (package
     (name "doxygen")
-    (version "1.8.17")
-    (home-page "http://www.doxygen.nl/")
+    (version "1.9.1")
+    (home-page "https://www.doxygen.nl/")
     (source (origin
              (method url-fetch)
              (uri (list (string-append home-page "files/doxygen-"
@@ -196,15 +192,11 @@ markup) can be customized and extended by the user.")
                                        ".src.tar.gz")))
              (sha256
               (base32
-               "16dmv0gm1x8rvbm82fmjvi213q8fxqxinm75pcf595flya59ific"))
-             (patches (search-patches "doxygen-test.patch"
-                                      "doxygen-1.8.17-runtests.patch"))))
+               "1lcif1qi20gf04qyjrx7x367669g17vz2ilgi4cmamp1whdsxbk7"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("libxml2" ,libxml2)             ;provides xmllint for the tests
-       ("python" ,python)))             ;for creating the documentation
+     (list bison flex libxml2 ;provides xmllint for the tests
+           python))             ;for creating the documentation
     (inputs
      `(("bash" ,bash-minimal)))
     (arguments
@@ -218,6 +210,12 @@ markup) can be customized and extended by the user.")
              '())
        #:test-target "tests"
        #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-bibtex-test
+                    (lambda _
+                      ;; Disable test that requires bibtex to avoid a
+                      ;; circular dependency.
+                      (for-each delete-file-recursively
+                                '("testing/012" "testing/012_cite.dox"))))
                   (add-before 'configure 'patch-sh
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (substitute* "src/portable.cpp"
@@ -248,8 +246,7 @@ and to some extent D.")
                                        "doc++-segfault-fix.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("gettext" ,gettext-minimal)))
+     (list flex gettext-minimal))
     (home-page "http://docpp.sourceforge.net/")
     (synopsis "Documentation system for C, C++, IDL, and Java")
     (description
@@ -277,13 +274,11 @@ or Java class files.")
                             (assoc-ref %build-inputs "docbook-xml")
                             "/xml/dtd/docbook/catalog.xml"))))
     (inputs
-     `(("perl" ,perl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ;; The configure script checks for either version 4.2 or 4.1.2.
-       ("docbook-xml" ,docbook-xml-4.2)))
+     (list perl libxml2 libxslt
+           ;; The configure script checks for either version 4.2 or 4.1.2.
+           docbook-xml-4.2))
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (home-page "http://scrollkeeper.sourceforge.net/")
     (synopsis "Open Documentation Cataloging Project")
     (description "ScrollKeeper is a cataloging system for documentation on open
@@ -325,8 +320,7 @@ local system.")
                    `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                  #t))))))
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list extra-cmake-modules pkg-config))
       (inputs
        `(("libarchive" ,libarchive)
          ("sqlite" ,sqlite)
diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm
index 250840415e..998470e411 100644
--- a/gnu/packages/dunst.scm
+++ b/gnu/packages/dunst.scm
@@ -63,22 +63,21 @@
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ; for pod2man
-       ("which" ,which)))
+     (list pkg-config perl ; for pod2man
+           which))
     (inputs
-     `(("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)   ; for svg support
-       ("glib" ,glib)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("libnotify" ,libnotify)         ; for dunstify
-       ("libx11" ,libx11)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("wayland" ,wayland)))           ; for wayland support
+     (list dbus
+           librsvg ; for svg support
+           glib
+           cairo
+           pango
+           libnotify ; for dunstify
+           libx11
+           libxscrnsaver
+           libxinerama
+           libxrandr
+           libxdg-basedir
+           wayland))           ; for wayland support
     (home-page "https://dunst-project.org/")
     (synopsis "Customizable and lightweight notification daemon")
     (description
diff --git a/gnu/packages/dvtm.scm b/gnu/packages/dvtm.scm
index 8515c5d06b..8c39bb7c03 100644
--- a/gnu/packages/dvtm.scm
+++ b/gnu/packages/dvtm.scm
@@ -41,7 +41,7 @@
       #:phases (modify-phases %standard-phases
                  (delete 'configure)
                  (delete 'check))))  ; no test suite
-   (inputs `(("ncurses" ,ncurses)))
+   (inputs (list ncurses))
    (synopsis "Tiling window management for the console")
    (description "dvtm brings the concept of tiling window management,
 popularized by X11-window managers like dwm, to the console.  As a console
diff --git a/gnu/packages/easyrpg.scm b/gnu/packages/easyrpg.scm
index 2350efdb79..e4a1e2fb42 100644
--- a/gnu/packages/easyrpg.scm
+++ b/gnu/packages/easyrpg.scm
@@ -51,11 +51,10 @@
                 "0n2k4brd264jg9p6918x7dnb2iimpzjh8q3v1fws58450xbgnkqc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; Required by 'liblcf.pc'.
-     `(("expat" ,expat)
-       ("icu" ,icu4c)))
+     (list expat icu4c))
     (home-page "https://easyrpg.org/")
     (synopsis "Library to handle RPG Maker 2000 and 2003 game data")
     (description
@@ -91,23 +90,23 @@ It can read and write LCF and XML files.")
        (list (string-append "--with-bash-completion-dir="
                             %output "/etc/bash_completion.d/"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("liblcf" ,liblcf)
-       ("libpng" ,libpng)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("libxmp" ,libxmp)
-       ("mpg123" ,mpg123)
-       ("opusfile" ,opusfile)
-       ("pixman" ,pixman)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2" ,sdl2)
-       ("speexdsp" ,speexdsp)
-       ("wildmidi" ,wildmidi)
-       ("zlib" ,zlib)))
+     (list freetype
+           harfbuzz
+           liblcf
+           libpng
+           libsndfile
+           libvorbis
+           libxmp
+           mpg123
+           opusfile
+           pixman
+           sdl2-mixer
+           sdl2
+           speexdsp
+           wildmidi
+           zlib))
     (home-page "https://easyrpg.org/")
     (synopsis "Play RPG Maker 2000 and 2003 games")
     (description
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index b2bf4e6dfb..393b439b5c 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -110,7 +110,7 @@
          "0wpn9ijlsmrpyiwg3drmgz4dms1i1i347adgqw37bkrh3vn6yq16"))))
     (build-system python-build-system)
     (inputs
-     `(("chmlib" ,chmlib)))
+     (list chmlib))
     (home-page "https://github.com/dottedmag/pychm")
     (synopsis "Handle CHM files")
     (description "This package provides a Python module for interacting
@@ -150,11 +150,11 @@ with Microsoft Compiled HTML (CHM) files")
                                  "calibre-remove-test-unrar.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qtbase" ,qtbase-5) ; for qmake
-       ("python-flake8" ,python-flake8)
-       ("python-pyqt-builder" ,python-pyqt-builder)
-       ("xdg-utils" ,xdg-utils)))
+     (list pkg-config
+           qtbase-5 ; for qmake
+           python-flake8
+           python-pyqt-builder
+           xdg-utils))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("font-liberation" ,font-liberation)
@@ -329,7 +329,7 @@ sip-include-dirs = [\"" pyqt "/share/sip" "\"]")))
                   ;; rather than create ..calibre-real-real-s.  For more
                   ;; information see: https://issues.guix.gnu.org/43249.
                   (find-files "." (lambda (file stat)
-                                    (not (wrapper? file)))))))
+                                    (not (wrapped-program? file)))))))
              #t)))))
     (home-page "https://calibre-ebook.com/")
     (synopsis "E-book library management software")
@@ -368,10 +368,9 @@ e-books for convenient reading.")
      `(#:tests? #f)) ; No 'test' target
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libzip" ,libzip)
-       ("libxml2" ,libxml2)))
+     (list libzip libxml2))
     (home-page "http://ebook-tools.sourceforge.net")
     (synopsis "Tools and library for dealing with various ebook file formats")
     (description "This package provides command-line tools and a library for
@@ -408,7 +407,7 @@ accessing and converting various ebook file formats.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke (cons "qmake" make-flags)))))))
     (native-inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://alpinekobox.ddns.net/InkBox/inkbox/")
     (synopsis "EBook reader")
     (description "This package provides InkBox eBook reader.")
@@ -552,12 +551,12 @@ following formats:
                     (libmagic-path     (string-append
                                         (assoc-ref %build-inputs "file")
                                         "/lib"))
-                    (python-path     (getenv "PYTHONPATH")))
+                    (python-path     (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/cozy")
                  `("LD_LIBRARY_PATH" ":" prefix (,libmagic-path))
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path ,pylib)))))))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path ,pylib)))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
@@ -567,26 +566,26 @@ following formats:
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("file" ,file)
-       ("granite" ,granite)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gst-libav" ,gst-libav)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)
-       ("gtk+" ,gtk+)
-       ("libdazzle" ,libdazzle)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("python-distro" ,python-distro)
-       ("python-gst" ,python-gst)
-       ("python-mutagen" ,python-mutagen)
-       ("python-packaging" ,python-packaging)
-       ("python-peewee" ,python-peewee)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)))
+     (list file
+           granite
+           gsettings-desktop-schemas
+           gst-libav
+           gst-plugins-bad
+           gst-plugins-good
+           gst-plugins-ugly
+           gtk+
+           libdazzle
+           libgee
+           libhandy
+           python-distro
+           python-gst
+           python-mutagen
+           python-packaging
+           python-peewee
+           python-pycairo
+           python-pygobject
+           python-pytz
+           python-requests))
     (home-page "https://cozy.geigi.de/")
     (synopsis "Modern audiobook player using GTK+")
     (description
@@ -625,10 +624,9 @@ Some of the current features:
                 "0b12ym7cn65wy268kbksyhakicwb053c8xfn76q2dawrvbras9dj"))))
     (build-system gnu-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("chmlib" ,chmlib)))
+     (list wxwidgets chmlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/rzvncj/xCHM")
     (synopsis "CHM file viewer")
     (description "xCHM is a graphical CHM file viewer.  It is a frontend to
@@ -650,12 +648,9 @@ the CHM library CHMLIB.")
                 "0yps72cm609xn2k7alflkdhp9kgr1w7zzyxjygz0n1kqrdcplihh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)))
+     (list zlib libxml2))
     (home-page "https://github.com/bfabiszewski/libmobi/")
     (synopsis "C library for handling MOBI formats")
     (description "Libmobi is a C library for handling MOBI ebook
diff --git a/gnu/packages/ed.scm b/gnu/packages/ed.scm
index da4c3ddf04..a42ba40102 100644
--- a/gnu/packages/ed.scm
+++ b/gnu/packages/ed.scm
@@ -28,16 +28,16 @@
 (define-public ed
   (package
     (name "ed")
-    (version "1.16")
+    (version "1.17")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/ed/ed-"
                                  version ".tar.lz"))
              (sha256
               (base32
-               "0b4b1lwizvng9bvpcjnmpj2i80xz9xw2w8nfff27b2h4mca7mh6g"))))
+               "0m2yrkfjjraakxr98nsiakqrn351h99n706x9asgmdi57j43kpki"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
+    (native-inputs (list lzip))
     (arguments
      '(#:configure-flags '("CC=gcc")
        #:phases
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index b864ac6c76..b0b079a1cd 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -101,10 +101,9 @@
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl-mixer")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
      `(("gtk+" ,gtk+-2)
        ("librsvg" ,librsvg)
@@ -157,8 +156,7 @@ of categories with some of the activities available in that category.
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              ;; The test suite wants to write to /homeless-shelter
              (setenv "HOME" (getcwd))
@@ -243,8 +241,7 @@ Currently available boards include:
                  (with-directory-excursion bin
                    (rename-file "v1" "gotypist"))))))))
       (native-inputs
-       `(("go-github-com-gizak-termui" ,go-github-com-gizak-termui)
-         ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-gizak-termui go-github-com-stretchr-testify))
       (home-page "https://github.com/KappaDistributive/gotypist")
       (synopsis "Simple typing trainer for text terminals")
       (description
@@ -299,8 +296,7 @@ frequently used words in American English.")
                ;; Recreate Makefile
                (invoke "qmake")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)))
+     (list qtbase-5 qtmultimedia))
     (home-page "https://www.tipp10.com/")
     (synopsis "Touch typing tutor")
     (description "Tipp10 is a touch typing tutor.  The ingenious thing about
@@ -339,17 +335,16 @@ easy.")
            ;; Replace the sole minified file in the package.
            (with-directory-excursion (string-append share "/src")
              (delete-file "FileSaver.min.js")
-             (symlink (string-append (assoc-ref %build-inputs "js-filesaver")
-                                     "/share/javascript/FileSaver.min.js")
+             (symlink (search-input-file %build-inputs
+                                         "/share/javascript/FileSaver.min.js")
                       "FileSaver.min.js"))
            ;; Create a "snap" executable.
            (let* ((bin (string-append out "/bin"))
                   (script (string-append bin "/snap"))
                   (snap (string-append share "/snap.html"))
-                  (bash (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/sh"))
-                  (xdg-open (string-append (assoc-ref %build-inputs "xdg-utils")
-                                           "/bin/xdg-open")))
+                  (bash (search-input-file %build-inputs "/bin/sh"))
+                  (xdg-open (search-input-file %build-inputs
+                                               "/bin/xdg-open")))
              (mkdir-p bin)
              (call-with-output-file script
                (lambda (port)
@@ -431,9 +426,9 @@ to open the application in a web browser, for offline usage.")
                            out)))
                #t))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (synopsis "School tools for physically disabled children")
     (description "ToutEnClic is intended to facilitate the schooling
 of physically disabled children in ordinary schools.  It is both
@@ -498,8 +493,7 @@ specialized device.")
                #t)))
          (add-after 'install 'create-executable
            (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let* ((python (string-append (assoc-ref inputs "python")
-                                           "/bin/python"))
+             (let* ((python (search-input-file inputs "/bin/python"))
                     (out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
                     (executable (string-append bin "/childsplay")))
@@ -567,8 +561,7 @@ letters of the alphabet, spelling, eye-hand coordination, etc.")
            #t))))
     (build-system python-build-system)
     (inputs
-     `(("python2-pygame" ,python2-pygame)
-       ("python2-pygtk" ,python2-pygtk)))
+     (list python2-pygame python2-pygtk))
     (arguments
      `(#:tests? #f                      ;no test
        #:python ,python-2
@@ -592,10 +585,9 @@ letters of the alphabet, spelling, eye-hand coordination, etc.")
                ;; Install the launcher.
                (let* ((bin (string-append out "/bin"))
                       (script (string-append bin "/omnitux"))
-                      (bash (string-append (assoc-ref %build-inputs "bash")
-                                           "/bin/bash"))
-                      (python (string-append (assoc-ref %build-inputs "python")
-                                             "/bin/python2")))
+                      (bash (search-input-file %build-inputs "/bin/bash"))
+                      (python (search-input-file %build-inputs
+                                                 "/bin/python2")))
                  (mkdir-p bin)
                  (with-output-to-file script
                    (lambda ()
@@ -677,7 +669,7 @@ Portuguese, Spanish and Italian.")
          (replace 'configure
            (lambda _ (invoke "qmake" "fet.pro"))))))
     (inputs
-     `(("qtbase" ,qtbase)))
+     (list qtbase))
     (home-page "https://www.lalescu.ro/liviu/fet/")
     (synopsis "Timetabling software")
     (description
@@ -703,14 +695,9 @@ hours.")
          (base32 "0z6c3lqikk50mkz3ipm93l48qj7b98lxyip8y6ndg9y9k0z0n878"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("curl" ,curl)
-       ("gtk+" ,gtk+)
-       ("gtkdatabox" ,gtkdatabox)
-       ("pango" ,pango)))
+     (list cairo curl gtk+ gtkdatabox pango))
     (home-page "https://klavaro.sourceforge.io/en/index.html")
     (synopsis "Touch typing tutor")
     (description
@@ -731,32 +718,30 @@ language and very flexible regarding to new or unknown keyboard layouts.")
          (base32 "10lm2p8w26c9n6lhvw3301myfss0dq7hl7rawzb3hsy1lqvmvdib"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("kqtquickcharts" ,kqtquickcharts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxcb" ,libxcb)
-       ("libxkbfile" ,libxkbfile)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdeclarative
+           ki18n
+           kiconthemes
+           kitemviews
+           kqtquickcharts
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxcb
+           libxkbfile
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols2
+           qtx11extras
+           qtxmlpatterns))
     (home-page "https://edu.kde.org/ktouch/")
     (synopsis "Touch typing tutor")
     (description
@@ -786,11 +771,10 @@ adjust the level of difficulty.")
           (base32 "0dz63m9p4ggzw0yb309qmgnl664qb5q268vaa3i9v0i8qsl66d78"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("gettext" ,gettext-minimal)   ; for msgfmt
-         ("pkg-config" ,pkg-config)))
+       (list gettext-minimal ; for msgfmt
+             pkg-config))
       (inputs
-       `(("libxml2" ,libxml2)
-         ("gtk+" ,gtk+)))
+       (list libxml2 gtk+))
       (home-page "https://kanatest.sourceforge.io/")
       (synopsis "Hiragana and Katakana simple flashcard tool")
       (description "Kanatest is a Japanese kana (Hiragana and Katakana) simple
@@ -854,8 +838,8 @@ stored and user can review his performance in any time.")
                                     (string-prefix? "python-" label)))
                                  inputs)))
                    (qtwebengineprocess
-                    (string-append (assoc-ref inputs "qtwebengine")
-                                   "/lib/qt5/libexec/QtWebEngineProcess")))
+                    (search-input-file inputs
+                                       "lib/qt5/libexec/QtWebEngineProcess")))
                ;; The program fails to find the QtWebEngineProcess program, so
                ;; we set QTWEBENGINEPROCESS_PATH to help it.  PYTHONPATH is
                ;; wrapped to avoid declaring Python libraries as propagated
@@ -867,11 +851,11 @@ stored and user can review his performance in any time.")
                              `("PATH" prefix (,(string-append
                                                 (assoc-ref inputs "mpv")
                                                 "/bin")))
-                             `("PYTHONPATH" = ,site-packages)))
+                             `("GUIX_PYTHONPATH" = ,site-packages)))
                          (find-files bin ".")))
              #t)))))
     (native-inputs
-     `(("xdg-utils" ,xdg-utils)))
+     (list xdg-utils))
     (inputs
      `(("lame" ,lame)
        ("mpv" ,mpv)
@@ -925,8 +909,13 @@ endless.  For example:
        (file-name (git-file-name name version))
        (sha256
         (base32 "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp"))
-       (patches
-        (search-patches "t4k-common-libpng16.patch"))))
+       (patches (search-patches "t4k-common-libpng16.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           (substitute* "src/t4k_common.h"
+             (("char wrapped_lines") "extern char wrapped_lines"))
+           #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;FIXME: cannot find how to run tests
@@ -934,9 +923,10 @@ endless.  For example:
        (modify-phases %standard-phases
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CPATH" (string-append (assoc-ref inputs "sdl")
-                                            "/include/SDL:"
-                                            (or (getenv "CPATH") "")))))
+             (setenv "CPATH"
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") "")))))
          (add-after 'unpack 'fix-andika-font-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/t4k_sdl.c"
@@ -945,7 +935,7 @@ endless.  For example:
                                "/share/fonts/truetype")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("font-andika" ,font-sil-andika)
        ("libpng" ,libpng)
@@ -975,6 +965,9 @@ TuxMath and TuxType.")
        ;; Unbundle fonts.
        (snippet
         `(begin
+           ;; Remove duplicate definition.
+           (substitute* "src/menu_lan.c"
+             (("lan_player_type.*MAX_CLIENTS\\];") ""))
            (for-each delete-file (find-files "data/fonts" "\\.ttf$"))
            #t))))
     (build-system gnu-build-system)
@@ -985,10 +978,10 @@ TuxMath and TuxType.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":"
+                      (or (getenv "CPATH") "")))))
          (add-after 'install 'install-desktop-file
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1000,7 +993,7 @@ TuxMath and TuxType.")
                                      "tuxmath\\.(png|ico|svg)$"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("librsvg" ,librsvg)
        ("libxml2" ,libxml2)
@@ -1034,9 +1027,9 @@ floating through space.")
          "0psbdzirazfnn02hp3gsx7xxss9f1brv4ywp6a15ihvggjki1rxb"))))
     (build-system gnu-build-system)
     (native-inputs ; Required for building docs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "C library for accessing Japanese CD-ROM books")
     (description "The EB library is a library for accessing CD-ROM
 books, which are a common way to distribute electronic dictionaries in
@@ -1063,16 +1056,16 @@ formats.")
     (arguments
      '(#:tests? #f)) ; no test target
     (native-inputs
-     `(("qttools", qttools)))
+     (list qttools))
     (inputs
-     `(("libeb" ,libeb)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("zlib" ,zlib)))
+     (list libeb
+           qtbase-5
+           qtmultimedia
+           qtquickcontrols2
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           zlib))
     (synopsis "EPWING dictionary reader")
     (description "qolibri is a dictionary viewer for the EPWING dictionary
 format.  Most monolingual Japanese dictionaries can only be found in the
@@ -1096,16 +1089,14 @@ EPWING format.")
     (arguments
      `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes")))
     (native-inputs
-     `(("flex" ,flex)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list flex intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libglade" ,libglade)
-       ("ncurses" ,ncurses)
-       ("pango" ,pango)
-       ("readline" ,readline)))
+     (list glib
+           gtk+
+           libglade
+           ncurses
+           pango
+           readline))
     (home-page "https://www.gnu.org/software/mdk/manual/")
     (synopsis "Virtual development environment for Knuth's MIX")
     (description
diff --git a/gnu/packages/efi.scm b/gnu/packages/efi.scm
index 8bbd873435..4625538d26 100644
--- a/gnu/packages/efi.scm
+++ b/gnu/packages/efi.scm
@@ -143,12 +143,12 @@ information.")
              (setenv "CC" "gcc")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bash" ,bash)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux))) ; getopt
+     (list autoconf
+           automake
+           bash
+           help2man
+           pkg-config
+           util-linux)) ; getopt
     (inputs
      `(("gnu-efi" ,gnu-efi)
        ("libuuid" ,util-linux "lib")
@@ -202,13 +202,9 @@ information.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("perl" ,perl)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("sbsigntools" ,sbsigntools)))
+     (list help2man perl perl-file-slurp sbsigntools))
     (inputs
-     `(("gnu-efi" ,gnu-efi)
-       ("openssl" ,openssl)))
+     (list gnu-efi openssl))
     (synopsis "EFI tools (key management, variable management)")
     (description "This package provides EFI tools for EFI key management
 and EFI variable management.")
@@ -257,7 +253,7 @@ and EFI variable management.")
                                           "/libexec"))
              #t)))))
     (inputs
-     `(("gnu-efi" ,gnu-efi)))
+     (list gnu-efi))
     (synopsis "Minimal Linux loader for UEFI")
     (description "This package provides a minimal Linux loader as an UEFI
 program.")
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index 0e985c9750..3f4409764f 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -94,14 +94,10 @@ to take care of the OS-specific details when writing software that uses serial p
                                               "/share/doc/libsigrokdecode"))
              #t)))))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)))
+     (list check-0.14 doxygen graphviz pkg-config))
     ;; libsigrokdecode.pc lists "python" in Requires.private, and "glib" in Requires.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("python" ,python)))
+     (list glib python))
     (build-system gnu-build-system)
     (home-page "https://www.sigrok.org/wiki/Libsigrokdecode")
     (synopsis "Library providing (streaming) protocol decoding functionality")
@@ -192,23 +188,19 @@ as simple logic analyzer and/or oscilloscope hardware.")
                 (find-files input-dir ".")))
              #t)))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("sigrok-firmware-fx2lafw" ,sigrok-firmware-fx2lafw)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen graphviz sigrok-firmware-fx2lafw pkg-config))
     (inputs
-     `(("python" ,python)
-       ("zlib" ,zlib)))
+     (list python zlib))
     ;; libsigrokcxx.pc lists "glibmm" in Requires
     ;; libsigrok.pc lists "libserialport", "libusb", "libftdi" and "libzip" in
     ;; Requires.private and "glib" in Requires
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("libserialport" ,libserialport)
-       ("libusb" ,libusb)
-       ("libftdi" ,libftdi)
-       ("libzip" ,libzip)))
+     (list glib
+           glibmm
+           libserialport
+           libusb
+           libftdi
+           libzip))
     (build-system gnu-build-system)
     (home-page "https://www.sigrok.org/wiki/Libsigrok")
     (synopsis "Library which provides the basic hardware access drivers for logic
@@ -231,11 +223,9 @@ format support.")
                (base32
                 "1f0a2k8qdcin0pqiqq5ni4khzsnv61l21v1dfdjzayw96qzl9l3i"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libsigrok" ,libsigrok)
-       ("libsigrokdecode" ,libsigrokdecode)))
+     (list glib libsigrok libsigrokdecode))
     (build-system gnu-build-system)
     (home-page "https://sigrok.org/wiki/Sigrok-cli")
     (synopsis "Command-line frontend for sigrok")
@@ -269,16 +259,15 @@ format support.")
                  (rmdir "doc"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("boost" ,boost)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("libsigrok" ,libsigrok)
-       ("libsigrokdecode" ,libsigrokdecode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list boost
+           glib
+           glibmm
+           libsigrok
+           libsigrokdecode
+           qtbase-5
+           qtsvg))
     (home-page "https://www.sigrok.org/wiki/PulseView")
     (synopsis "Qt based logic analyzer, oscilloscope and MSO GUI for sigrok")
     (description "PulseView is a Qt based logic analyzer, oscilloscope and MSO GUI
@@ -319,14 +308,9 @@ individual low-level driver modules.")
                 "0a5ycfc1qdmibvagc82r2mhv2i99m6pndy5i6ixas3j2297g6pgq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("comedilib" ,comedilib)
-       ("fftw" ,fftw)
-       ("gtk+" ,gtk+)
-       ("gtkdatabox" ,gtkdatabox)))
+     (list alsa-lib comedilib fftw gtk+ gtkdatabox))
     (synopsis "Digital oscilloscope")
     (description "Xoscope is a digital oscilloscope that can acquire signals
 from ALSA, ESD, and COMEDI sources.  This package currently does not include
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index aab912648b..d4f75c9726 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020 Mark Wielaard <mark@klomp.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
@@ -47,14 +49,14 @@
 (define-public elfutils
   (package
     (name "elfutils")
-    (version "0.182")
+    (version "0.183")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://sourceware.org/elfutils/ftp/"
                                   version "/elfutils-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n48dcadjy0wiilddzav2zaxdi30qkkfp160gw5mycyz9s8hdi7c"))
+                "1igjfia9x8h6fmh9nbl8mpz0i24my5iixrji99qmi79hilh7qqy3"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))
     (build-system gnu-build-system)
 
@@ -70,6 +72,7 @@
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
                                               "/lib")
+                               "--disable-static"
                                ;; TODO: Enable the debuginfo server.  It
                                ;; increases the closure size significantly
                                ;; and presents bootstrapping problems, so
@@ -97,8 +100,8 @@
                (("run-backtrace-native.sh") ""))
              #t)))))
 
-    (native-inputs `(("m4" ,m4)))
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list m4))
+    (inputs (list zlib))
     (home-page "https://sourceware.org/elfutils/")
     (synopsis "Collection of utilities and libraries to handle ELF files and
 DWARF data")
@@ -172,8 +175,8 @@ object or archive file), @command{eu-strip} (for discarding symbols),
        ("python-sphinx" ,python-sphinx)
        ("python" ,python)))             ;for tests
     (propagated-inputs
-     `(("elfutils" ,elfutils)           ;libabigail.la says -lelf
-       ("libxml2" ,libxml2)))           ;in Requires.private of libabigail.pc
+     (list elfutils ;libabigail.la says -lelf
+           libxml2))           ;in Requires.private of libabigail.pc
     (synopsis "Analyze application binary interfaces (ABIs)")
     (description
      "@dfn{ABIGAIL} stands for the Application Binary Interface Generic
@@ -204,22 +207,32 @@ static analysis of the ELF binaries at hand.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; This old `configure' script doesn't support
-             ;; variables passed as arguments.
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "CONFIG_SHELL" (which "bash"))
-               (invoke "./configure"
-                       (string-append "--prefix=" out)
-                       ,@(if (string=? "powerpc64le-linux"
-                                       (%current-system))
-                             '("--host=powerpc64le-unknown-linux-gnu")
-                             '())
-                       ,@(if (string=? "aarch64-linux"
-                                       (%current-system))
-                             '("--host=aarch64-unknown-linux-gnu")
-                             '()))))))))
+         ;; This old 'configure' script doesn't support cross-compilation
+         ;; well.  I.e., it fails to find the cross-compiler.  Also,
+         ;; the old `configure' script doesn't support variables passed as
+         ;; arguments.  A third problem is that config.sub is too old to
+         ;; recognise aarch64 and powerpc64le.
+         ;;
+         ;; Solve this by regenerating the configure script and letting
+         ;; autoreconf update 'config.sub'.  While 'config.sub' is updated
+         ;; anyway, update 'config.guess' as well.
+         (add-before 'bootstrap 'delete-configure
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (delete-file "configure")
+             (delete-file "config.sub")
+             (delete-file "config.guess")
+             (for-each (lambda (file)
+                         (install-file
+                          (string-append
+                           (assoc-ref (or native-inputs inputs) "automake")
+                           "/share/automake-"
+                           ,(version-major+minor (package-version automake))
+                           "/" file) "."))
+                       '("config.sub" "config.guess")))))))
+    (native-inputs
+     (list autoconf
+           ;; For up-to-date 'config.guess' and 'config.sub'
+           automake))
     (home-page (string-append "https://web.archive.org/web/20181111033959/"
                               "http://www.mr511.de/software/english.html"))
     (synopsis "ELF object file access library")
diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm
index 6ccac68e70..87177acce0 100644
--- a/gnu/packages/elixir.scm
+++ b/gnu/packages/elixir.scm
@@ -98,8 +98,7 @@
              (setenv "HOME" "/tmp")))
          (delete 'configure))))
     (inputs
-     `(("erlang" ,erlang)
-       ("git" ,git)))
+     (list erlang git))
     (home-page "https://elixir-lang.org/")
     (synopsis "Elixir programming language")
     (description "Elixir is a dynamic, functional language used to build
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
index 338008185d..ca7c61041b 100644
--- a/gnu/packages/elm.scm
+++ b/gnu/packages/elm.scm
@@ -58,27 +58,26 @@
                (("(ansi-terminal|containers|network|http-client|language-glsl)\\s+[^,]+" all dep)
                 dep)))))))
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-language-glsl" ,ghc-language-glsl)
-       ("ghc-logict" ,ghc-logict)
-       ("ghc-network" ,ghc-network)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-snap-core" ,ghc-snap-core)
-       ("ghc-snap-server" ,ghc-snap-server)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zip-archive" ,ghc-zip-archive)))
+     (list ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-edit-distance
+           ghc-file-embed
+           ghc-http
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-language-glsl
+           ghc-logict
+           ghc-network
+           ghc-raw-strings-qq
+           ghc-scientific
+           ghc-sha
+           ghc-snap-core
+           ghc-snap-server
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-zip-archive))
     (home-page "https://elm-lang.org")
     (synopsis "Programming language for Web applications")
     (description
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index b98365d70b..6c00de8ce5 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -263,7 +263,7 @@
                (invoke "makeinfo" "--no-split"
                        "-o" "geiser.info" "geiser.texi")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Collection of Emacs modes for Scheme hacking")
     (description
@@ -308,7 +308,7 @@ e.g. emacs-geiser-guile for Guile.")
                 (string-append
                  "(eval-after-load 'geiser-impl '" all ")"))))))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
      `(("geiser" ,emacs-geiser)))
     (home-page "https://nongnu.org/geiser/")
@@ -335,8 +335,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("geiser" ,emacs-geiser)
-         ("auto-complete" ,emacs-auto-complete)))
+       (list emacs-geiser emacs-auto-complete))
       (synopsis "Auto-complete backend for geiser")
       (description
        "This package provides an auto-complete source for Scheme projects
@@ -402,7 +401,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
                  "(eval-after-load 'geiser-impl '" all ")")))
              #t)))))
     (inputs
-     `(("racket" ,racket)))
+     (list racket))
     (propagated-inputs
      `(("geiser" ,emacs-geiser)))
     (home-page "https://nongnu.org/geiser/")
@@ -446,9 +445,9 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
                 (string-append
                  "(eval-after-load 'geiser-impl '" all ")"))))))))
     (inputs
-     `(("chez-scheme" ,chez-scheme)))
+     (list chez-scheme))
     (propagated-inputs
-     `(("emacs-geiser" ,emacs-geiser)))
+     (list emacs-geiser))
     (home-page "https://nongnu.org/geiser/")
     (synopsis "Support for Chez Scheme in Geiser")
     (description
@@ -534,8 +533,7 @@ system.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "hypb.el"
                (("/bin/domainname")
-                (string-append (assoc-ref inputs "inetutils")
-                               "/bin/dnsdomainname")))
+                (search-input-file inputs "bin/dnsdomainname")))
              (substitute* "hyperbole.el"
                (("\\(hyperb:check-dir-user\\)") ""))))
          (add-after 'install 'install-images
@@ -547,7 +545,7 @@ system.")
                             (string-append out "/share/info/im")))
                          (find-files "man/im" "\\.png$"))))))))
     (inputs
-     `(("inetutils" ,inetutils)))
+     (list inetutils))
     (home-page "https://www.gnu.org/software/hyperbole/")
     (synopsis "The Everyday Hypertextual Information Manager")
     (description
@@ -578,7 +576,7 @@ buffers, directory trees, or the web.")
                   "04zps0d4s99f5a8ahrpyf8b6qw0c1y7rd1bsaq9nc6m4qblsvwc8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-with-editor" ,emacs-with-editor)))
+       (list emacs-with-editor))
       (home-page "https://github.com/jojojames/hg-histedit")
       (synopsis "Emacs interface to @command{hg histedit}")
       (description "This package provides an Emacs interface to
@@ -641,7 +639,7 @@ when typing parentheses directly or commenting out code line by line.")
        (sha256
         (base32 "1x3zkbjsi04v5ny3yxqrb75vcacrj9kxmpm9mvkp0n07j5g34f68"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-xref" ,emacs-xref)))
+    (propagated-inputs (list emacs-xref))
     (home-page "http://elpa.gnu.org/packages/project.html")
     (synopsis "Operations on the current project")
     (description
@@ -693,9 +691,9 @@ configuration files, such as @file{.gitattributes}, @file{.gitignore}, and
              (invoke "makeinfo" "--no-split"
                      "-o" "with-editor.info" "with-editor.texi"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)))
+     (list emacs-async))
     (home-page "https://github.com/magit/with-editor")
     (synopsis "Emacs library for using Emacsclient as EDITOR")
     (description
@@ -744,14 +742,12 @@ on stdout instead of using a socket as the Emacsclient does.")
                  (make-file-writable "libgit.el")
                  (emacs-substitute-variables "libgit.el"
                    ("libgit--module-file"
-                    (string-append (emacs:elpa-directory out) "/libegit2.so")))
-                 #t)))
+                    (string-append (emacs:elpa-directory out) "/libegit2.so"))))))
            (add-before 'install 'prepare-for-install
              (lambda _
-               (let ((s (string-append "../" ,name "-" ,version "-checkout")))
+               (let ((s "../source"))
                  (copy-file "libegit2.so" (string-append s "/libegit2.so"))
-                 (chdir s)
-                 #t)))
+                 (chdir s))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((install (assoc-ref emacs:%standard-phases 'install)))
@@ -773,7 +769,7 @@ on stdout instead of using a socket as the Emacsclient does.")
          ("emacs" ,emacs-no-x)
          ("git" ,git-minimal)))
       (inputs
-       `(("libgit2" ,libgit2)))
+       (list libgit2))
       (home-page "https://github.com/magit/libegit2")
       (synopsis "Emacs bindings for libgit2")
       (description "This is an experimental module written in C providing
@@ -842,15 +838,11 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
            (lambda _
              (chdir "lisp"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (inputs
-     `(("git" ,git)
-       ("perl" ,perl)))
+     (list git perl))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-libgit" ,emacs-libgit)
-       ("emacs-transient" ,emacs-transient)
-       ("emacs-with-editor" ,emacs-with-editor)))
+     (list emacs-dash emacs-libgit emacs-transient emacs-with-editor))
     (home-page "https://magit.vc/")
     (synopsis "Emacs interface for the Git version control system")
     (description
@@ -875,10 +867,8 @@ rebasing, and other common Git operations.")
                (base32
                 "1v1y4fir1plz4kj0cvkcd29wibli4dw7vp4fmbxq4df76d8iy8yd"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("dash" ,emacs-dash)
-                         ("with-editor" ,emacs-with-editor)
-                         ("magit" ,emacs-magit)
-                         ("transient" ,emacs-transient)))
+    (propagated-inputs (list emacs-dash emacs-with-editor emacs-magit
+                             emacs-transient))
     (home-page "https://github.com/magit/magit-svn")
     (synopsis "Git-SVN extension to Magit")
     (description
@@ -907,9 +897,9 @@ support for Git-SVN.")
            (lambda _
              (invoke "make" "info"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/magit/magit-popup")
     (synopsis "Define prefix-infix-suffix command combos")
     (description
@@ -934,8 +924,7 @@ process, passing on the arguments as command line arguments.")
         (base32 "1amr2c08mq1nnn6k66mgz4rzyni4np7gxm96g4qyla2cbfbachgk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("magit" ,emacs-magit)
-       ("transient" ,emacs-transient)))
+     (list emacs-magit emacs-transient))
     (home-page "https://github.com/magit/magit-annex/")
     (synopsis "Git-annex support for Magit")
     (description
@@ -957,7 +946,7 @@ process, passing on the arguments as command line arguments.")
         (base32 "1bzxxs8mxaihpjkbxgynhsi39lbbnij28grdc3sk9sq09j9752vw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/tarsius/minions")
     (synopsis "Minor-mode menu for the mode line")
     (description
@@ -1032,8 +1021,7 @@ then only the color of the mode line changes when a window becomes in-/active.")
                    (("\"wal\"") (string-append "\"" python-pywal "/bin/wal\""))))
                #t)))))
       (inputs
-       `(("python" ,python)
-         ("python-pywal" ,python-pywal)))
+       (list python python-pywal))
       (home-page "https://github.com/jcaw/theme-magic")
       (synopsis "Generate and apply color palettes based on your Emacs theme")
       (description
@@ -1080,7 +1068,7 @@ color scheme used by Visual Studio Code.")
           (base32 "1b858049n6nw4qf60fmszjrhl80x7ssh32f7glj722kwy7404kdh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-autothemer" ,emacs-autothemer)))
+       (list emacs-autothemer))
       (home-page "https://github.com/mtreca/emacs-theme-sorcery")
       (synopsis "Dark and low-contrast Emacs theme")
       (description "Sorcery is a dark and low-contrast Emacs theme inspired by
@@ -1206,7 +1194,7 @@ automatically opened with this mode.")
         (base32 "0rh2k93c3a0vl073a3s3a3h6gkw454v1lyd7y8l3pd24vw9hc628"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("ghq" ,ghq)))
+     (list ghq))
     (home-page "https://github.com/rcoedo/emacs-ghq")
     (synopsis "Emacs interface for @code{ghq} tool")
     (description
@@ -1235,7 +1223,7 @@ organizing remote Go repository clones.")
            (lambda _
              (invoke "make" "info"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
      `(("dash" ,emacs-dash)
        ("emacs-let-alist" ,emacs-let-alist)
@@ -1269,8 +1257,7 @@ handful of functions that are not resource-specific.")
       (arguments
         '(#:include (cons "^dict/" %default-include)))
       (propagated-inputs
-       `(("emacs-f" ,emacs-f)
-         ("emacs-mmt" ,emacs-mmt)))
+       (list emacs-f emacs-mmt))
       (home-page "https://github.com/mrkkrp/typit")
       (synopsis "Typing game for Emacs with two difficulties")
       (description "Emacs Typit is a typing game for Emacs.  Words that are
@@ -1329,18 +1316,14 @@ for editing Racket's Scribble documentation syntax in Emacs.")
          (add-after 'unpack 'expand-load-path
            (assoc-ref emacs:%standard-phases 'expand-load-path)))))
     (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("texinfo" ,texinfo)
-      ("perl" ,perl)
-      ("emacs-minimal" ,emacs-minimal)))
-    (propagated-inputs
-     `(("emacs-bui" ,emacs-bui)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)
-       ("gnupg" ,gnupg)
-       ("shroud" ,shroud)))
+    (list autoconf automake texinfo perl emacs-minimal))
+    (propagated-inputs
+     (list emacs-bui
+           emacs-dash
+           emacs-f
+           emacs-s
+           gnupg
+           shroud))
     (home-page "https://www.nongnu.org/emacs-shroud")
     (synopsis "Emacs interface to the Shroud password manager")
     (description
@@ -1367,8 +1350,7 @@ from within Emacs.")
           (base32 "19hgvsrqch2vp49ag6m76bi5qxd20v95z0ib838rib9as15b17wq"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-flycheck" ,emacs-flycheck)))
+       (list emacs-company emacs-flycheck))
       (home-page "https://github.com/ethereum/emacs-solidity")
       (synopsis "Major mode for writing Solidity code")
       (description
@@ -1394,11 +1376,7 @@ a constant work in progress as the language itself also progresses.")
            "0jvb2ci0h0lj368qhbff3pzkxj3nhlligpbkjzi525k9rkjgm7l8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-org" ,emacs-org)
-         ("emacs-s" ,emacs-s)
-         ("emacs-hydra" ,emacs-hydra)
-         ("emacs-use-package" ,emacs-use-package)))
+       (list emacs-dash emacs-org emacs-s emacs-hydra emacs-use-package))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1428,7 +1406,7 @@ replacement.")
        (sha256
         (base32 "0zxbacqzr84krmhqpvzndnvlcjh1gs1x20ys0dykgd7chyhci5j5"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("emacs-el-search" ,emacs-el-search)
@@ -1456,7 +1434,7 @@ replacement.")
                  ((f1 f2 ...) (dirname f1))
                  (_ "")))
 
-             (let ((sh (string-append (assoc-ref inputs "bash") "/bin/sh")))
+             (let ((sh (search-input-file inputs "/bin/sh")))
                (define emacs-prefix? (cut string-prefix? "emacs-" <>))
 
                (setenv "SHELL" "sh")
@@ -1525,13 +1503,13 @@ programs.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-haskell-mode" ,emacs-haskell-mode)
-         ("emacs-s" ,emacs-s)
-         ("emacs-company" ,emacs-company)
-         ("emacs-lcr" ,emacs-lcr)))
+       (list emacs-dash
+             emacs-f
+             emacs-flycheck
+             emacs-haskell-mode
+             emacs-s
+             emacs-company
+             emacs-lcr))
       (home-page "https://github.com/jyp/dante")
       (synopsis "Minor mode for interactive Haskell")
       (description
@@ -1557,9 +1535,9 @@ supports type hints, definition-jumping, completion, and more.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (native-inputs
-       `(("emacs-shut-up" ,emacs-shut-up)))
+       (list emacs-shut-up))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1600,7 +1578,7 @@ provides an optional IDE-like error list.")
        (sha256
         (base32 "1m59ahd5gjlfwf328labwdlpcxh8ywywkwgfrlsy5jyxfc9ss4nv"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-flycheck" ,emacs-flycheck)))
+    (propagated-inputs (list emacs-flycheck))
     (home-page "https://github.com/purcell/flymake-flycheck")
     (synopsis "Use Flycheck checkers as Flymake backends")
     (description
@@ -1682,7 +1660,7 @@ boilerplate code from defining new Flymake backend functions.")
                        ,(string-append (assoc-ref inputs "shellcheck")
                                        "/bin/shellcheck")))))))))
       (inputs
-       `(("shellcheck" ,shellcheck)))
+       (list shellcheck))
       (home-page "https://github.com/federicotdn/flymake-shellcheck")
       (synopsis "Flymake backend for Bash/Sh powered by ShellCheck")
       (description
@@ -1857,7 +1835,7 @@ and reused.")
         (base32 "1jx17g8a6pxkw4zlx3fwhqgxfzcf3019k8fklykamfrkharzsc2l"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-powerline" ,emacs-powerline)))
+     (list emacs-powerline))
     (home-page "https://github.com/AnthonyDiGirolamo/airline-themes")
     (synopsis "Vim-airline themes for Emacs Powerline")
     (description
@@ -1938,9 +1916,7 @@ optional minor mode which can apply this command automatically on save.")
       (native-inputs
        `(("ert-runner" ,emacs-ert-runner)))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-f emacs-s))
       (home-page "https://github.com/emacsattic/relative-buffers")
       (synopsis "Minor mode to rename buffers by project structure")
       (description
@@ -1962,7 +1938,7 @@ project root.")
        (sha256
         (base32 "14z3i01pq5ljhjf5yfcjw7hxljcrwjnizkrdc1qyh9b6h3ic1bbi"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-xr" ,emacs-xr)))
+    (propagated-inputs (list emacs-xr))
     (home-page "https://github.com/mattiase/relint")
     (synopsis "Elisp regexp mistake finder")
     (description
@@ -2022,8 +1998,7 @@ or unexpected behavior inside an elisp configuration file (typically
     (native-inputs `(("autoconf" ,autoconf)
                      ("texinfo" ,texinfo)
                      ("emacs" ,emacs-minimal)))
-    (inputs `(("w3m" ,w3m)
-              ("imagemagick" ,imagemagick)))
+    (inputs (list w3m imagemagick))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   ((guix build emacs-build-system) #:prefix emacs:)
@@ -2101,7 +2076,7 @@ or unexpected behavior inside an elisp configuration file (typically
               (sha256
                (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff"))))
     (build-system emacs-build-system)
-    (inputs `(("wget" ,wget)))
+    (inputs (list wget))
     (native-inputs `(("emacs" ,emacs-minimal)))
     (arguments
      `(#:tests? #f  ; no check target
@@ -2273,7 +2248,7 @@ light user interface.")
          "0q80f0plch6k4lhs8c9qm3mfycfbp3kn5sjrk9zxgxwnn901y9mp"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emms" ,emacs-emms)))
+     (list emacs-emms))
     (home-page "https://github.com/momomo5717/emms-mode-line-cycle")
     (synopsis "Display the EMMS mode line as a ticker")
     (description
@@ -2302,7 +2277,7 @@ within a specified width.  It is useful for displaying long track titles.")
          "147dz79vg4ym5wg3d544bw2khdb2j3hr73rw4qfm64wf0q2dj0vk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)))
+     (list emacs-avy))
     (home-page "https://github.com/abo-abo/ace-link")
     (synopsis "Quickly follow links in Emacs")
     (description
@@ -2328,7 +2303,7 @@ letter to each link using avy.")
        (sha256
         (base32 "1rhdvrj2rjbvl7vkb0wcp6krqxcaigl7jk9z8yvhx6s4cm2qli6q"))))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)))
+     (list emacs-f))
     (build-system emacs-build-system)
     (home-page "https://github.com/ncaq/auto-sudoedit")
     (synopsis "Automatically re-open read-only files with sudo")
@@ -2403,7 +2378,7 @@ mode, Rmail, Gnus, MH-E, and VM).  BBDB is fully customizable.")
        (sha256
         (base32 "0bki658mvlchqf3prkzxz4217a95cxm58c1qmf84yp2n8h6gd0d8"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-ivy" ,emacs-ivy)))
+    (propagated-inputs (list emacs-ivy))
     (home-page "https://github.com/redguardtoo/counsel-bbdb")
     (synopsis "Ivy interface for BBDB")
     (description "This Ivy extension enables the use of @code{ivy-mode} to input
@@ -2431,10 +2406,9 @@ you can press @samp{C-M-n} to input multiple email addresses.")
         (base32 "1dq04p6ms0zx4awlypp4crkz7dzal4xg8ac7p8fqacz196rczssp"))))
     (build-system emacs-build-system)
     (inputs
-     `(("bluez" ,bluez)
-       ("dbus" ,dbus)))
+     (list bluez dbus))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://gitlab.com/rstocker/emacs-bluetooth")
     (synopsis "Manage Bluetooth devices using Emacs")
     (description
@@ -2533,7 +2507,7 @@ web browsers, but follows the flow and keybindings of Isearch.")
           (base32 "1wggg8jlzg9rph4jhxp6yiri178rnasbv38838i973kjgqjxrl76"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-reformatter" ,emacs-reformatter)))
+       (list emacs-reformatter))
       (home-page "https://github.com/psibi/dhall-mode")
       (synopsis "Major mode for working with Dhall configuration language")
       (description
@@ -2568,7 +2542,7 @@ configuration language. It features:
            "0kwaia6i0asr7yqcw1anzq6lf93357cc1fphkvp0llbmxizmkzb3"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-avy" ,emacs-avy)))
+       (list emacs-avy))
       (home-page "https://github.com/noctuid/link-hint.el")
       (synopsis "Vimperator-style link-hinting in Emacs")
       (description "This package provides commands for visiting and acting on
@@ -2603,8 +2577,7 @@ links.")
                (install-file "docs/_build/texinfo/agel.info" info)
                #t))))))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list python-sphinx texinfo))
     (propagated-inputs
      `(("dash" ,emacs-dash)
        ("s" ,emacs-s)
@@ -2666,7 +2639,7 @@ as a library for other Emacs packages.")
            (lambda* (#:key inputs #:allow-other-keys)
              (emacs-substitute-variables "preview.el"
                ("preview-gs-command"
-                (string-append (assoc-ref inputs "ghostscript") "/bin/gs")))
+                (search-input-file inputs "/bin/gs")))
              (substitute* "preview.el"
                (("\"dvipng ")
                 (string-append "\"" (assoc-ref inputs "texlive")
@@ -2689,10 +2662,10 @@ as a library for other Emacs packages.")
                                (string-append etc-dir "/refcards")))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
      `(("ghostscript" ,ghostscript)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched)))))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts)))))
     (home-page "https://www.gnu.org/software/auctex/")
     (synopsis "Integrated environment for TeX")
     (description
@@ -2717,7 +2690,7 @@ or XEmacs.")
          "0cd2pqh6k32sjidkcd8682y4l6mx52xw4a05f38kk8nsrk28m74k"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/sebastiansturm/autothemer")
     (synopsis "Conveniently create Emacs themes")
     (description
@@ -2796,7 +2769,7 @@ the ability to jump forward and backward to the next bookmark.")
          "0r42cagvmvvib76kd15nd9ix55ys6i549vxnls4z16s864695zpa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-howm" ,emacs-howm)))
+     (list emacs-howm))
     (home-page "https://github.com/kiwanami/emacs-calfw/")
     (synopsis "Calendar framework for Emacs")
     (description
@@ -2886,10 +2859,7 @@ Lock key.")
                                   (find-files "." "\\.md$")))))
              #t)))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-spark" ,emacs-spark)
-       ("emacs-ts" ,emacs-ts)))
+     (list emacs-dash emacs-s emacs-spark emacs-ts))
     (home-page "https://github.com/contrapunctus-1/chronometrist")
     (synopsis "Time tracker for Emacs")
     (description "Chronometrist is a time tracker in Emacs, largely modelled
@@ -2923,12 +2893,12 @@ Its features are:
     (arguments
      `(#:emacs ,emacs))                 ;need libxml support
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-parsebib" ,emacs-parsebib)
-       ("emacs-queue" ,emacs-queue)
-       ("emacs-s" ,emacs-s)
-       ("emacs-string-inflection" ,emacs-string-inflection)))
+     (list emacs-dash
+           emacs-f
+           emacs-parsebib
+           emacs-queue
+           emacs-s
+           emacs-string-inflection))
     (home-page "https://github.com/andras-simonyi/citeproc-el")
     (synopsis "Citation Style Language (CSL) processor for Emacs")
     (description
@@ -2985,7 +2955,7 @@ overlay below or above the point.  Corfu can be considered the minimalistic
                (substitute* "direnv.el"
                  (("\"direnv\"") direnv-bin))))))))
     (inputs
-     `(("direnv" ,direnv)))
+     (list direnv))
     (propagated-inputs
      `(("dash" ,emacs-dash)
        ("with-editor" ,emacs-with-editor)))
@@ -3060,7 +3030,7 @@ into mode hooks and is intended to be used that way.")
          "0p79x9g94jynl83ndvqp9349vhgkzxzhnc517r8hn44iqxqf6ghg"))))
     (build-system emacs-build-system)
     (inputs
-     `(("global" ,global)))
+     (list global))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3069,8 +3039,7 @@ into mode hooks and is intended to be used that way.")
              (chmod "ggtags.el" #o644)
              (emacs-substitute-variables "ggtags.el"
                ("ggtags-executable-directory"
-                (string-append (assoc-ref inputs "global") "/bin")))
-             #t)))))
+                (dirname (search-input-file inputs "bin/global")))))))))
     (home-page "https://github.com/leoliu/ggtags")
     (synopsis "Frontend to the GNU Global source code tagging system")
     (description "@code{ggtags} provides a frontend to the GNU Global source
@@ -3176,7 +3145,7 @@ directly inside Emacs.  It requires a Google Map Static API key to function.")
              (with-directory-excursion "texinfo"
                (substitute* "Makefile"
                  (("\\/usr\\/bin\\/gzip")
-                  (string-append (assoc-ref inputs "gzip") "/bin/gzip")))
+                  (search-input-file inputs "/bin/gzip")))
                (invoke "make"
                        "clean"
                        "info"
@@ -3190,10 +3159,9 @@ directly inside Emacs.  It requires a Google Map Static API key to function.")
                (install-file "texinfo/graphviz-dot-mode.info.gz" info)
                #t))))))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("texinfo" ,texinfo)))
+     (list gzip texinfo))
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "http://ppareit.github.com/graphviz-dot-mode")
     (synopsis "Major mode for editing Graphviz DOT files")
     (description
@@ -3302,8 +3270,7 @@ filters, new key bindings and faces.  It can be enabled by
        (sha256
         (base32 "0z2qk1v4qkvcwl27ycqfb8vyszq5v6b8ci29b4la00yaki16p04i"))))
     (build-system emacs-build-system)
-    (inputs `(("djview" ,djview)
-              ("djvulibre" ,djvulibre)))
+    (inputs (list djview djvulibre))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3347,8 +3314,7 @@ DjVuLibre, see @url{http://djvu.sourceforge.net/}.")
           (base32
            "0p0izjrgbayx5ybk1n6db5hbrjv9d4kpn57w4iyxdm3h96sp9cmr"))))
       (propagated-inputs
-       `(("emacs-djvu" ,emacs-djvu)
-         ("emacs-tablist" ,emacs-tablist)))
+       (list emacs-djvu emacs-tablist))
       (build-system emacs-build-system)
       (home-page "https://github.com/dalanicolai/djvu3")
       (synopsis "Extend djvu.el to display annotations and more")
@@ -3458,11 +3424,7 @@ during idle time, while Emacs is doing nothing else.")
          ("pkg-config" ,pkg-config)
          ("emacs" ,emacs-minimal)))
       (inputs
-       `(("poppler" ,poppler)
-         ("cairo" ,cairo)
-         ("glib" ,glib)
-         ("libpng" ,libpng)
-         ("zlib" ,zlib)))
+       (list poppler cairo glib libpng zlib))
       (propagated-inputs
        `(("tablist" ,emacs-tablist)))
       (home-page "https://github.com/politza/pdf-tools")
@@ -3533,7 +3495,7 @@ restore the saved place.")
                 "0sszdl4kvqbihdh8d7mybpp0d8yw2p3gyiipjcxz9xhvvmw3ww4x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://notabug.org/alezost/emacs-bui")
     (synopsis "Buffer interface library for Emacs")
     (description
@@ -3617,8 +3579,7 @@ management tasks from Emacs.  To begin with, run @code{M-x guix-about} or
                 "0i0bwbav5861j2y15j9nd5m9rdqg9q97zgcbld8pivr9nyxy63lz"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("bui" ,emacs-bui)
-       ("magit-popup" ,emacs-magit-popup)))
+     (list emacs-bui emacs-magit-popup))
     (home-page "https://notabug.org/alezost/emacs-build-farm")
     (synopsis "Emacs interface for Hydra and Cuirass build farms")
     (description
@@ -3643,7 +3604,7 @@ evaluations.  The entry point is @code{M-x build-farm} command.")
         (base32 "0vkl470vvmxap8ca773a0jvjvalmvdbbax3qvgjdclp54ml75al4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
+     (list emacs-undercover))
     (home-page "https://github.com/Emacs-D-Mode-Maintainers/Emacs-D-Mode")
     (synopsis "Emacs major mode for editing D code")
     (description "This package provides an Emacs major mode for highlighting
@@ -3694,9 +3655,7 @@ running Extempore process, and more.")
           (base32 "0nk6jdy1y5mc3ryd0smiqghrk6iv34d5grc7f7migmshlbq0np92"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-expand-region"    ,emacs-expand-region)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)
-         ("emacs-ryo-modal"        ,emacs-ryo-modal)))
+       (list emacs-expand-region emacs-multiple-cursors emacs-ryo-modal))
       (home-page "https://github.com/jmorag/kakoune.el")
       (synopsis "Emacs simple simulation, but not emulation, of Kakoune")
       (description "This package provides many, but not all of the editing
@@ -3864,7 +3823,7 @@ in the center.")
         (base32 "1khkwrrbwaimspc013n4k9mpv8g302r0zkrsqnza2x1d3qznn08y"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-queue" ,emacs-queue)))
+     (list emacs-queue))
     (home-page "https://www.dr-qubit.org/undo-tree.html")
     (synopsis "Treat undo history as a tree")
     (description
@@ -3995,7 +3954,7 @@ strings.")
           (base32 "0m90ddwm8j0y6d1ppqhd2gil1107k202blw6mzm5bdambn4nfqkf"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-markdown-mode" ,emacs-markdown-mode)))
+       (list emacs-markdown-mode))
       (home-page "https://github.com/vermiculus/sx.el")
       (synopsis "Emacs StackExchange client")
       (description
@@ -4019,7 +3978,7 @@ Stack Overflow, Super User, and other StackExchange sites.")
          "0na465f27p6n64sf0pj0aqdi384m1wy3hxcc2d6a67hs39rkyvi9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-parent-mode" ,emacs-parent-mode)))
+     (list emacs-parent-mode))
     (home-page "https://github.com/xFA25E/skempo")
     (synopsis "Enhancements for skeleton/tempo + abbrev")
     (description
@@ -4112,8 +4071,7 @@ Emacs.")
                 "1a47xk3yp1rp17fqg7ldl3d3fb888h0fz3sysqfdz1bfdgs8a9bk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/rejeep/f.el")
     (synopsis "Emacs API for working with files and directories")
     (description "This package provides an Emacs library for working with
@@ -4211,8 +4169,7 @@ display and behaviour is easily customisable.")
           (base32 "1y77gjl0yznamdj0f55d418zb75k22izisjg7ikvrfsl2yfqf3pm"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-git-gutter" ,emacs-git-gutter)
-         ("emacs-fringe-helper" ,emacs-fringe-helper)))
+       (list emacs-git-gutter emacs-fringe-helper))
       (home-page "https://github.com/emacsorphanage/git-gutter-fringe")
       (synopsis "See and manage hunks of text in a version control system")
       (description
@@ -4283,7 +4240,7 @@ saving won't move point back to the beginning of the buffer.")
          "1pz4l1xnq6s67w5yq9107vm8dg7rqf8n9dmbn90jys97c722g70n"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-transient" ,emacs-transient)))
+     (list emacs-transient))
     (home-page "https://gitlab.com/pidu/git-timemachine")
     (synopsis "Step through historic versions of Git-controlled files")
     (description "This package enables you to step through historic versions
@@ -4308,8 +4265,7 @@ of files under Git version control from within Emacs.")
      '(#:include (cons "^snippets\\/minitest-mode\\/" %default-include)
        #:exclude (delete "^[^/]*tests?\\.el$" %default-exclude)))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-dash emacs-f))
     (home-page "https://github.com/arthurnn/minitest-emacs")
     (synopsis "Emacs minitest mode")
     (description
@@ -4382,12 +4338,12 @@ Expectations, but it can be used in other contexts.")
     (arguments
      `(#:include (cons* "^feature/" "^reporters/" "^templates/" %default-include)))
     (propagated-inputs
-     `(("emacs-ansi" ,emacs-ansi)
-       ("emacs-commander" ,emacs-commander)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-espuds" ,emacs-espuds)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-ansi
+           emacs-commander
+           emacs-dash
+           emacs-espuds
+           emacs-f
+           emacs-s))
     (home-page "https://github.com/ecukes/ecukes")
     (synopsis "Cucumber for Emacs")
     (description
@@ -4411,9 +4367,7 @@ intended to be.")
         (base32 "16r4j27j9yfdiy841w9q5ykkc6n3wrm7hvfacagb32mydk821ijg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-s emacs-dash emacs-f))
     (home-page "https://github.com/ecukes/espuds")
     (synopsis "Common step definitions for Ecukes")
     (description "Espuds is a collection of the most commonly used step
@@ -4462,9 +4416,7 @@ port of @code{cl-spark} to Emacs Lisp.")
     (propagated-inputs
      ;; The version of org in Emacs 24.5 is not sufficient, and causes tables
      ;; to be rendered incorrectly
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-org" ,emacs-org)
-       ("emacs-spark" ,emacs-spark)))
+     (list emacs-dash emacs-org emacs-spark))
     (home-page "https://github.com/dakrone/es-mode")
     (synopsis "Major mode for editing Elasticsearch queries")
     (description "@code{es-mode} includes highlighting, completion and
@@ -4649,7 +4601,7 @@ result.")
            (lambda _
              (delete-file "projectile-ripgrep.el"))))))
     (propagated-inputs
-     `(("ripgrep" ,ripgrep)))
+     (list ripgrep))
     (home-page "https://github.com/nlamirault/ripgrep.el")
     (synopsis "Search using ripgrep from inside Emacs")
     (description "@code{ripgrep} is an Emacs search package based on the
@@ -4681,10 +4633,7 @@ result.")
                (emacs-substitute-sexps file
                  ("(defcustom rg-executable" "rg"))))))))
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-transient" ,emacs-transient)
-       ("emacs-wgrep" ,emacs-wgrep)
-       ("ripgrep" ,ripgrep)))
+     (list emacs-s emacs-transient emacs-wgrep ripgrep))
     (home-page "https://rgel.readthedocs.io/en/latest/")
     (synopsis "Search tool based on @code{ripgrep}")
     (description
@@ -4797,8 +4746,7 @@ Emacs shell script.")
         (base32 "0qmvyy3xg5qi7ws8zcs934d6afsappr1a6pgfp796xpa9vdr4y6j"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-dash emacs-shut-up))
     (home-page "https://github.com/sviridov/undercover.el")
     (synopsis "Test coverage library for Emacs Lisp")
     (description
@@ -4888,8 +4836,7 @@ serve files and directory listings.")
         (base32 "1ha7jl7776pk1bki5zj2q0jy66450mn8xr3aqjc0m9kj3gc9qxgw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-simple-httpd" ,emacs-simple-httpd)
-       ("emacs-js2-mode" ,emacs-js2-mode)))
+     (list emacs-simple-httpd emacs-js2-mode))
     (arguments '(#:include '("\\.el$" "\\.js$" "\\.html$")))
     (home-page "https://github.com/skeeto/skewer-mode")
     (synopsis "Live web development in Emacs")
@@ -4916,7 +4863,7 @@ in Lisp modes.")
                   "0bny40hv9a024n01clxns351cs4j4ifhgcc7m4743xncqf612p7g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/Fuco1/litable/")
       (synopsis "Dynamic evaluation replacement with Emacs")
       (description "This package provides dynamic evaluation in Emacs.")
@@ -4960,7 +4907,7 @@ Emacs can load Org files as Lisp source files directly.")
           (base32 "0z6y5f1rj28lbr30m6g4a9l6ahs66whi8861g4cx9xzhs84nwv5g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-s" ,emacs-s)))
+       (list emacs-s))
       (home-page "https://github.com/sulami/literate-calc-mode.el")
       (synopsis "Literate programming for Emacs Calc")
       (description
@@ -4987,8 +4934,7 @@ other markup language major modes.")
         (base32 "0r814qcrhvx4qlx4sdzwdmrhiryslqclx0bnpp0qcrbx6g8qfl25"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-f emacs-s))
     (synopsis "Platform-specific paths for config, cache, and other data")
     (description
      "This package provides platform-specific paths for reading and writing
@@ -5090,7 +5036,7 @@ boxes, and more.")
                 "1qc92xvgxmnwjixk8bxwbc1l1jj0qk9dg73jyaip6lk4g0wjk6xf"))))
     (build-system emacs-build-system)
     (inputs
-     `(("pdf2svg" ,pdf2svg)))
+     (list pdf2svg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5168,7 +5114,7 @@ displays the priority part of a heading as your preferred string value.")
         (base32 "0ra4sfy48p8pm1c7h8wlmbl68r4s0f4qc49xapvs550pm4mf3hiq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)))
+     (list emacs-org))
     (home-page "https://github.com/io12/org-fragtog")
     (synopsis "Toggle Org mode LaTeX fragments preview at cursor")
     (description
@@ -5214,7 +5160,7 @@ blocks with @code{org-babel} in @code{org-mode}.")
          (sha256
           (base32 "0s3931w9ab3yfml2pmq71rw21yf6hpg7m3vihxyy3vs6zli1cvmq"))))
       (propagated-inputs
-       `(("emacs-restclient" ,emacs-restclient)))
+       (list emacs-restclient))
       (build-system emacs-build-system)
       (home-page "https://github.com/alf/ob-restclient.el")
       (synopsis "Org-babel functionality for @code{restclient-mode}")
@@ -5237,7 +5183,7 @@ blocks with @code{org-babel} in @code{org-mode}.")
          (sha256
           (base32 "117zzkryznznk6h4i1jqzdn888nl019xrgxm2gza0lndx8dxsg2c"))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (build-system emacs-build-system)
       (home-page "https://github.com/alphapapa/org-now")
       (synopsis "Show current Org tasks in a sidebar")
@@ -5287,7 +5233,7 @@ mode-line.")
     (arguments
      '(#:include (cons "^lib\\/" %default-include)))
     (propagated-inputs
-     `(("emacs-inf-ruby" ,emacs-inf-ruby)))
+     (list emacs-inf-ruby))
     (home-page "https://github.com/dgutov/robe")
     (synopsis "Ruby code assistance tool for Emacs")
     (description
@@ -5334,7 +5280,7 @@ keywords and smart indentation.")
         (base32 "0rgv4y9aa5cc2ddz3y5z8d22xmr8kf5c60h0r3g8h91jmcw3rb4z"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (arguments
      `(#:include (cons* "^roguel-ike/" "^roguel-ike-lib/" %default-include)
        #:phases
@@ -5424,7 +5370,7 @@ configuration.")
         (base32 "1h5w5lrgrmhpaqwppg5msylh7z78mvwy9mm8xiiv8w4wxvncxxl2"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-rich-minority" ,emacs-rich-minority)))
+     (list emacs-rich-minority))
     (home-page "https://github.com/Malabarba/smart-mode-line")
     (synopsis "Color-coded smart mode-line")
     (description
@@ -5589,7 +5535,7 @@ package namespace prefix is ​​hidden by a colon.")
        (sha256
         (base32 "1k2zinchs0jjllp8zkpggckyy63dkyi5yig3p46vh4w45jdzysk5"))))
     (inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/cofi/evil-leader")
     (synopsis "Implement <leader> feature from Vim")
@@ -5613,8 +5559,7 @@ an easy way to bind keys under a configurable prefix key.")
                 "1wrx8ihimn1sx3vzzfppcwv0yfh3x95jrkxqvzj0ykckipm3zk0b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-auctex" ,emacs-auctex)))
+     (list emacs-evil emacs-auctex))
     (home-page "https://github.com/iyefrat/evil-tex")
     (synopsis "Evil oriented additions for editing LaTeX")
     (description "This package is a toolbox for LaTeX editing with Evil.  It
@@ -5641,8 +5586,7 @@ movements, and keymaps for quickly entering environments or
           (base32
            "031p5i3274dazp7rz6m5y38shfgszm1clmkcf58qfqlvy978ammc"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)
-                           ("emacs-names" ,emacs-names)))
+      (propagated-inputs (list emacs-evil emacs-names))
       (home-page "https://github.com/laishulu/evil-textobj-syntax/")
       (synopsis "Text objects based on syntax highlighting")
       (description
@@ -5669,7 +5613,7 @@ boundaries defined by syntax highlighting.")
            "14qldlisbmxzammr500gyha2hiv2xgyzfc6mysqii06kbcqn1ik1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-flycheck" ,emacs-flycheck)))
+       (list emacs-flycheck))
       (home-page "https://github.com/lbolla/emacs-flycheck-flow")
       (synopsis "Flow support for @code{flycheck-mode}")
       (description
@@ -5700,8 +5644,7 @@ for Flow files.")
          (add-after 'unpack 'specify-python-location
            ;; Hard-code python3 executable location in the library.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((python3 (string-append (assoc-ref inputs "python")
-                                           "/bin/python3")))
+             (let ((python3 (search-input-file inputs "/bin/python3")))
                (substitute* '("flycheck-grammalecte.el" "grammalecte.el")
                  (("\"python3") (string-append "\"" python3)))
                (substitute* '("conjugueur.py" "flycheck_grammalecte.py")
@@ -5712,10 +5655,11 @@ for Flow files.")
              (make-file-writable "grammalecte.el")
              (emacs-substitute-variables "grammalecte.el"
                ("grammalecte-python-package-directory"
-                (string-append (assoc-ref inputs "grammalecte")
-                               "/lib/python"
-                               ,(version-major+minor (package-version python))
-                               "/site-packages/grammalecte")))))
+                (search-input-directory
+                 inputs
+                 (string-append "lib/python"
+                                ,(version-major+minor (package-version python))
+                                "/site-packages/grammalecte"))))))
          (add-after 'unpack 'do-not-phone-home
            ;; Do not check for Grammalecte updates, ever.
            (lambda _
@@ -5723,10 +5667,9 @@ for Flow files.")
              (emacs-substitute-variables "grammalecte.el"
                ("grammalecte-check-upstream-version-delay" 0)))))))
     (inputs
-     `(("grammalecte" ,grammalecte)
-       ("python" ,python)))
+     (list grammalecte python))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-flycheck))
     (home-page "https://git.umaneti.net/flycheck-grammalecte/")
     (synopsis "Integrate Grammalecte with Flycheck")
     (description
@@ -5751,9 +5694,7 @@ repetitions for example).")
        (sha256
         (base32 "0cs5r0ik6a3bl1k3imjl0r8y1i69kx9x9m9cgxj470qk34brwyj5"))))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-geiser" ,emacs-geiser)
-       ("emacs-geiser-guile" ,emacs-geiser-guile)))
+     (list emacs-flycheck emacs-geiser emacs-geiser-guile))
     (build-system emacs-build-system)
     (home-page "https://github.com/flatwhatson/flycheck-guile")
     (synopsis "GNU Guile support for Flycheck")
@@ -5775,7 +5716,7 @@ compile}.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "1djrj3is0dzrl2703bw7bclf33dp4xqmy144q7xj5pvpb9v3kf50"))))
-    (inputs `(("ledger" ,ledger)))
+    (inputs (list ledger))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5787,7 +5728,7 @@ compile}.")
                  (("\"ledger\"") (string-append "\"" ledger "\""))))
              #t)))))
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-flycheck))
     (build-system emacs-build-system)
     (home-page "https://github.com/purcell/flycheck-ledger")
     (synopsis "Ledger support for Flycheck")
@@ -5812,9 +5753,7 @@ errors.")
        (sha256
         (base32 "1fh6j5w2387nh2fwwjphkhq17cgj5m2q5k0fhidvgc2w65lzbr1r"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-let-alist" ,emacs-let-alist)))
+     (list emacs-dash emacs-flycheck emacs-let-alist))
     (build-system emacs-build-system)
     (home-page "https://github.com/flycheck/flycheck-rust")
     (synopsis "Rust/Cargo support for Flycheck")
@@ -5839,8 +5778,7 @@ the current Cargo project.")
          "00py39n1383761wq6wp194pvyk94ydqdbxj9kl64g9jnipkp7849"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-package-lint" ,emacs-package-lint)))
+     (list emacs-flycheck emacs-package-lint))
     (home-page "https://github.com/purcell/flycheck-package")
     (synopsis "Flycheck checker for elisp package metadata")
     (description
@@ -5890,9 +5828,7 @@ respective @code{*Help*} buffers.")
          "1fbcxwfvm33xcdj3cs26d9i1zyrryyjjkv7sc3mfxd45nq8d3ivj"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-dash emacs-f emacs-yaml-mode))
     (home-page "https://github.com/meqif/docker-compose-mode/")
     (synopsis "Major mode for editing @file{docker-compose} files")
     (description
@@ -5977,7 +5913,7 @@ Gnus, e.g., for applying patches received by email.")
         (base32 "1hncxbg5lvywzkwvdmzvrz71midy4samjq2vvxxhz90z1y5l8l29"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
+     (list emacs-undercover))
     (arguments
      `(#:emacs ,emacs
        #:phases
@@ -6034,7 +5970,7 @@ minibuffer to enable editing the minibuffer input in another buffer with
                 "1a10fc2jk37ni5sjjvf87s5nyaz2a6h2mlj5dxh4dhv5sd3bb85p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)))
+     (list emacs-f))
     (home-page "http://www.gregsexton.org")
     (synopsis "Org-Babel functions for IPython evaluation")
     (description "This package adds support to Org-Babel for evaluating Python
@@ -6056,8 +5992,7 @@ source code using IPython.")
         (base32 "10x4hxrjm4pr6vg42a961h9ilqzyd0l0fv7fsbq9clxi439f1nd6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-async emacs-dash))
     (home-page "https://github.com/astahlman/ob-async")
     (synopsis "Asynchronous src_block execution for org-babel")
     (description "@code{ob-async} enables asynchronous execution of org-babel
@@ -6078,7 +6013,7 @@ src blocks.")
     (build-system emacs-build-system)
     (arguments '(#:include '("\\.el$" "\\.wsdl$" "\\.info$")))
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)))
+     (list emacs-async))
     (home-page "https://elpa.gnu.org/packages/debbugs.html")
     (synopsis "Access the Debbugs bug tracker in Emacs")
     (description
@@ -6171,7 +6106,7 @@ for asynchronous tasks.")
                 "1wsk5isza8xqr84w6haal95ssifz6j2lrr5phbsdc90jb9hicbff"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)))
+     (list emacs-deferred))
     (synopsis "Emacs client for Jenkins")
     (description
      "Butler provides an interface to connect to Jenkins continuous
@@ -6214,12 +6149,9 @@ build jobs.")
                (copy-file "emacs-zmq.so"
                           (string-append libdir "/emacs-zmq.so"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://github.com/nnicandro/emacs-zmq")
     (synopsis "Emacs bindings to ØMQ")
     (description "This package provides Emacs bindings to ØMQ.")
@@ -6289,9 +6221,7 @@ These are distributed in separate files and can be used individually.")
           (base32 "13fgmdy51gqdwijqfvb784pirx4lgva0y7ysi0c3fcx8f82cdj59"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-frame-local" ,emacs-frame-local)))
+       (list emacs-company emacs-dash emacs-frame-local))
       (home-page "https://github.com/sebastiencs/company-box")
       (synopsis "Company front-end with icons")
       (description
@@ -6319,8 +6249,7 @@ This package is not compatible with a TTY.")
                 "05ays6xkqbxcfplvx7wfc2slflmwc3aw7vkixvabk0ilvisndvgm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-company emacs-posframe))
     (home-page "https://github.com/tumashu/company-posframe")
     (synopsis "Use a posframe for @code{emacs-company}'s candidate menu")
     (description
@@ -6368,7 +6297,7 @@ described on the homepage.")
   (package (inherit emacs-irony-mode)
     (name "emacs-irony-mode-server")
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6396,8 +6325,7 @@ described on the homepage.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-irony-mode" ,emacs-irony-mode)))
+     (list emacs-company emacs-irony-mode))
     (synopsis "C++ completion backend for Company using Irony mode")
     (description "This backend for Company allows for C++ code completion
 with Irony mode using Clang tooling.")
@@ -6418,9 +6346,7 @@ with Irony mode using Clang tooling.")
                (base32 "0qa5a8wzvzxwqql92ibc9s43k8sj3vwn7skz9hfr8av0skkhx996"))))
     (build-system emacs-build-system)
     (inputs
-     `(("irony-mode" ,emacs-irony-mode)
-       ("flycheck-mode" ,emacs-flycheck)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-irony-mode emacs-flycheck emacs-company))
     (synopsis "Live syntax checking frontend for Flycheck using irony-mode")
     (description "This package provides a frontend for Flycheck that lets
 irony-mode do the syntax checking.")
@@ -6442,7 +6368,7 @@ irony-mode do the syntax checking.")
         (base32 "1l5qpr66v1l12fb50yh73grb2rr85xxmbj19mm33b5rdrq2bqmmd"))))
     (build-system emacs-build-system)
     (inputs
-     `(("irony-mode" ,emacs-irony-mode)))
+     (list emacs-irony-mode))
     (synopsis "Eldoc integration for irony-mode")
     (description "Irony-eldoc is an eldoc extension that shows documentation
 for the current function or variable in the minibuffer.")
@@ -6464,8 +6390,7 @@ for the current function or variable in the minibuffer.")
         (base32 "08ccsfvwdpzpj0gai3xrdb2bv1nl6myjkxsc5774pbvlq9nkfdvr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-pos-tip" ,emacs-pos-tip)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-pos-tip emacs-company))
     (home-page "https://github.com/expez/company-quickhelp")
     (synopsis "Popup documentation for completion candidates")
     (description "@code{company-quickhelp} shows documentation for the
@@ -6507,10 +6432,7 @@ completion candidate when using the Company text completion framework.")
        (sha256
         (base32 "0dxi4h8xqq5647k7h89s4pi8nwyj3brlhsckrv3p3b1g4dr6mk3b"))))
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-company-math" ,emacs-company-math)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-yasnippet" ,emacs-yasnippet)))
+     (list emacs-company emacs-company-math emacs-dash emacs-yasnippet))
     (build-system emacs-build-system)
     (home-page "https://github.com/cpitclaudel/company-coq")
     (synopsis "Emacs extensions for Proof General's Coq mode")
@@ -6544,8 +6466,7 @@ features:
         (base32 "1y1fw926insgdl7ib9ynxjrxf3p6wfjkfxvf5vgdca7267cvcll1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-math-symbol-lists" ,emacs-math-symbol-lists)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-math-symbol-lists emacs-company))
     (home-page "https://github.com/vspinu/company-math")
     (synopsis "Completion backends for math symbols and @code{LaTeX} tags")
     (description
@@ -6614,7 +6535,7 @@ completion candidates vertically.")
           (base32 "14f15qzfmwdslml4rv37zb5d1lsjf0jibriz636hb7q7knx1n4sg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-parent-mode" ,emacs-parent-mode)))
+       (list emacs-parent-mode))
       (home-page "https://gitlab.com/jjzmajic/handle")
       (synopsis "Handle generic functions across related major modes")
       (description "This package provides generic functions that specialize on
@@ -6683,8 +6604,7 @@ provide an incremental search that moves all fake cursors in sync.")
           (base32 "0wr86ad0yl52im6b9z0b9pzmhcn39qg5m9878yfv1nbxliw40lcd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-phi-search" ,emacs-phi-search)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-phi-search emacs-multiple-cursors))
       (home-page "https://github.com/knu/phi-search-mc.el")
       (synopsis "Extend @code{phi-search} with additional
 @code{multiple-cursors} functionality")
@@ -6733,7 +6653,7 @@ simultaneous cursors.")
           (base32 "065l04ylplng1vgykkbn2vnkcs3sn1k2cikx1ha2q8wmgx6bkvai"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/magnars/multifiles.el")
       (synopsis "Edit multiple files in a single Emacs buffer")
       (description
@@ -6758,7 +6678,7 @@ one Emacs buffer.")
           (base32 "16y48qrd20m20vypvys5jp4v4gc1qrqlkm75s1pk1r68i9zrw481"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-multiple-cursors))
       (home-page "https://github.com/knu/mc-extras.el")
       (synopsis "Extra functions for manipulating multiple cursors")
       (description
@@ -6806,13 +6726,9 @@ on context.")
                 "1hy1x2w0yp5brm7714d1hziz3rpkywb5jp3yj78ibmi9ifny9vri"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-company" ,emacs-company)
-       ("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-dash emacs-lsp-mode emacs-company emacs-s emacs-dash))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -6938,7 +6854,7 @@ to a key in your preferred mode.")
                #t))
            (replace 'install (assoc-ref cmake:%standard-phases 'install)))))
       (inputs
-       `(("supercollider" ,supercollider)))
+       (list supercollider))
       (native-inputs
        `(("cmake" ,cmake-minimal)))
       (home-page "https://github.com/supercollider/scel")
@@ -6964,9 +6880,7 @@ SuperCollider is a platform for audio synthesis and algorithmic composition.")
                   "10qn7frn5wcmrlci3v6iliqzj7r9dls87h9zp3xkgrgn4bqprfp8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-auctex" ,emacs-auctex)
-         ("emacs-company" ,emacs-company)))
+       (list emacs-yasnippet emacs-auctex emacs-company))
       (home-page "https://github.com/alexeyr/company-auctex/")
       (synopsis "Completion for @code{AUCTeX}")
       (description
@@ -6996,7 +6910,7 @@ for @code{AUCTeX}.")
         (base32
          "0dqidg2bd66pawqfarvwca93w5gqf9mikn1k2a2rmd9ymfjpziq1"))))
     (build-system emacs-build-system)
-    (inputs `(("mit-scheme" ,mit-scheme)))
+    (inputs (list mit-scheme))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7052,8 +6966,7 @@ constants and units into an Emacs buffer.")
         (base32 "0kq40g46s8kgiafrhdq99h79rz9h5fvgz59k7ralmf86bl4sdmdb"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/magnars/tagedit")
     (synopsis "Some paredit-like features for html-mode")
     (description
@@ -7076,7 +6989,7 @@ in @code{html-mode}.")
         (base32 "1a25ixb7q4svqabxnhwkk43v47mbsh13qwm7qlazkd3zkr8j3cli"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      `(#:include '("\\.el$" "\\.lisp$" "\\.asd$" "contrib")
        #:exclude '("^slime-tests.el" "^contrib/test/"
@@ -7164,9 +7077,7 @@ and popup menus.")
          "1cmzc0fa3jj7ajxbqhbsc8jx47k6g223sfd42c4lrqdnmh95760m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-reformatter" ,emacs-reformatter)
-       ("python-black-macchiato" ,python-black-macchiato)))
+     (list emacs-dash emacs-reformatter python-black-macchiato))
     (arguments `(#:tests? #f))
     (home-page "https://github.com/wbolster/emacs-python-black")
     (synopsis "Reformat Python code via @code{python-black}")
@@ -7193,7 +7104,7 @@ buffers, respectively.")
     (arguments
      `(#:tests? #f))     ;tests fail with "emacs: standard input is not a tty"
     (propagated-inputs
-     `(("python-isort" ,python-isort)))
+     (list python-isort))
     (home-page "https://github.com/paetzke/py-isort.el")
     (synopsis "Sort the imports in Python buffers")
     (description
@@ -7216,7 +7127,7 @@ using @code{python-isort}.")
         (base32 "0q6bib9nr6xiq6npzbngyfcjk87yyvwzq1zirr3z1h5wadm34lsk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)))
+     (list emacs-deferred))
     (home-page "https://github.com/tkf/emacs-python-environment")
     (synopsis "Provides a @code{virtualenv} API in Emacs Lisp")
     (description
@@ -7238,11 +7149,9 @@ using @code{python-isort}.")
                 "1bckxppfzd5gwn0aw4h86igb7igal9axqncq7j8zmflg7zppncf1"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-mocker" ,emacs-mocker)))
+     (list emacs-mocker))
     (propagated-inputs
-     `(("emacs-auto-complete" ,emacs-auto-complete)
-       ("emacs-python-environment" ,emacs-python-environment)
-       ("emacs-epc" ,emacs-epc)))
+     (list emacs-auto-complete emacs-python-environment emacs-epc))
     (home-page "https://github.com/tkf/emacs-jedi")
     (synopsis "Provides Python completion in Emacs")
     (description
@@ -7265,8 +7174,7 @@ the locations of docstrings, arguments, and functions.")
                 "1ihqapp4dv92794rsgyq0rmhwika60cmradqd4bn9b72ss6plxs1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-jedi" ,emacs-jedi)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-jedi emacs-company))
     (home-page "https://github.com/syohex/emacs-company-jedi")
     (synopsis "Provides Python completion in @code{company-mode}")
     (description
@@ -7323,7 +7231,7 @@ linting of manifests and integration with Puppet Debugger.")
                (invoke "makeinfo" "--no-split"
                        "-o" "purescript-mode.info" "purescript-mode.texi"))))))
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (home-page "https://github.com/purescript-emacs/purescript-mode")
       (synopsis "Emacs major mode and related tools for Purescript")
       (description "This package provides an Emacs major mode for writing Purescript.")
@@ -7392,7 +7300,7 @@ sgml/html integration, and indentation (working with sgml).")
                   "1gf45xwjzdm8i4q6c6khk4dbg1mmp2r0awz2sjr4dcr2dbd1n7mg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)))
+       (list emacs-company))
       (arguments
        `(#:include (cons "^tools\\/" %default-include)))
       (home-page "https://github.com/iquiw/company-cabal/")
@@ -7533,8 +7441,7 @@ when the cursor enters a fragment and disappear when it leaves.")
         (base32 "13y302lyscdqrba1sfx60yf5ji2xi7fbsvjsjbw7hiz63kg6rccy"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-persist" ,emacs-persist)))
+     (list emacs-org emacs-persist))
     (home-page "https://gitlab.com/phillord/org-drill")
     (synopsis "Flash card memorization system using Org mode")
     (description
@@ -7562,8 +7469,7 @@ cards created in Org mode.")
           (base32 "1if610hq5j8rbjh1caw5bwbgnsn231awwxqbpwvrh966kdxzl4qf"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-request" ,emacs-request)))
+       (list emacs-dash emacs-request))
       (home-page "https://github.com/louietan/anki-editor")
       (synopsis "Minor mode for making Anki cards with Org mode")
       (description
@@ -7611,7 +7517,7 @@ email.")
           (base32 "15gd5zbxvdallyra9lmpb9i1r2mmwz0j0i0ra7j9imnbfiz3ln9r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-htmlize" ,emacs-htmlize)))
+       (list emacs-htmlize))
       (home-page "https://github.com/jeremy-compostella/org-msg")
       (synopsis "Mix Org mode and Message mode to compose emails")
       (description
@@ -7635,7 +7541,7 @@ emails in a Outlook HTML friendly style.")
         (base32 "12inin2p6pm6vbv3yc06fx343dsp0vp07fjb35w088akhikmqh2a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)))
+     (list emacs-org))
     (home-page "https://github.com/integral-dw/org-superstar-mode")
     (synopsis "Prettify headings and plain lists in Org mode")
     (description "This package prettifies headings and plain lists in
@@ -7686,7 +7592,7 @@ Features degrade gracefully when viewed from terminal.")
                (substitute* "org-pandoc-import.el"
                  (("\"pandoc\"") (string-append "\"" pandoc "/bin/pandoc\"")))))))))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (home-page "https://github.com/tecosaur/org-pandoc-import/")
     (synopsis "Read and edit non-Org file types in Org")
     (description
@@ -7716,7 +7622,7 @@ save, it exports back to the original non-Org file.")
           (base32 "0nbprh2nhnmb7ngp9ndr6zr37ashcsvpi5slv7a37x1dl7j6w1k4"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-alert" ,emacs-alert)))
+       (list emacs-alert))
       (arguments
        `(#:include (cons "^resources\\/" %default-include)
          #:tests? #t
@@ -7767,11 +7673,8 @@ started with 20 minutes.  All values are customizable.")
         (base32 "1r8kp954ciin4j7j7j8ihdkryf5x09s3ryl7bi9h2j6xqc1ij4wq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-org-super-agenda" ,emacs-org-super-agenda)
-       ("emacs-org" ,emacs-org)
-       ("emacs-org-ql" ,emacs-org-ql)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-org-super-agenda emacs-org emacs-org-ql
+           emacs-s))
     (home-page "https://github.com/alphapapa/org-sidebar")
     (synopsis "Helpful sidebar for Org buffers")
     (description "This package provides a sidebar for Org buffers.  At the
@@ -7798,12 +7701,12 @@ overview of tasks in a subtree.")
          "18y5zdjc7zh4jlwz6k1nl13i721rknqm0vp4mxfnmq0sc5a0qva0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-deferred" ,emacs-deferred)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-request" ,emacs-request)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash
+           emacs-deferred
+           emacs-f
+           emacs-helm
+           emacs-request
+           emacs-s))
     (home-page "https://org-trello.github.io")
     (synopsis "Emacs minor mode for interacting with Trello")
     (description "This package provides an Emacs minor mode to extend
@@ -7828,7 +7731,7 @@ organizer.")
           (base32 "0x94gy1bgfd1f3p9w2bfrqj11bwy9ql0cpi1gw6srpj7kykx0lml"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)))
+       (list emacs-org))
       (home-page "https://github.com/mtekman/org-tanglesync.el")
       (synopsis "Sync Org source blocks with tangled external files")
       (description "This package automatically pulls changes from source code
@@ -7852,8 +7755,7 @@ to their corresponding tangled blocks.")
                   "0zs9cblnbkxa0dxw4lyllmybqizxcdx96gv8jlhx20nrjpi78piw"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-company emacs-dash))
       (home-page "https://github.com/aaronjensen/company-flow/")
       (synopsis "Flow backend for @code{company-mode}")
       (description
@@ -7961,7 +7863,7 @@ variants.")
         (base32 "15ql8xcixgm7mbs7rsbybwszanqibq057j5b5ds89a31dw7zxf1g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/bbatsov/solarized-emacs")
     (synopsis "Port of the Solarized theme for Emacs")
     (description
@@ -8031,7 +7933,7 @@ dark background.")
                 "00qq92gp1g55pzm97rh7k0dgxy44pxziridl8kqm4rbpi31r7k9p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-autothemer" ,emacs-autothemer)))
+     (list emacs-autothemer))
     (home-page "https://github.com/greduan/emacs-theme-gruvbox")
     (synopsis "Gruvbox is a retro groove color scheme ported from Vim")
     (description
@@ -8085,7 +7987,7 @@ orange and red as accent colors.")
           (base32 "0zcnbxvlwi4d6vzsm3ag7z74qphdigmx303gppb9d614jnsfsdg2"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ox-hugo" ,emacs-ox-hugo)))
+       (list emacs-ox-hugo))
       (home-page "https://titan-c.gitlab.io/org-cv/")
       (synopsis "Collection of export backends for Org to generate a CV")
       (description
@@ -8165,7 +8067,7 @@ the game of chess.")
           (base32 "19x653lzc1dxil4ix257hciidbdmbhaxhs6qhlkwi9ygjrlrgvnk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-request" ,emacs-request)))
+       (list emacs-request))
       (home-page "https://github.com/emacsorphanage/4clojure/")
       (synopsis "Open and evaluate 4clojure questions in Emacs")
       (description "Emacs 4clojure interacts with
@@ -8255,8 +8157,7 @@ them easier to distinguish from other, less important buffers.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-avy" ,emacs-avy)
-         ("emacs-consult" ,emacs-consult)))
+       (list emacs-avy emacs-consult))
       (home-page "https://github.com/oantolin/embark")
       (synopsis "Emacs mini-buffer actions rooted in keymaps")
       (description
@@ -8291,9 +8192,7 @@ include installing, removing or visiting the homepage.")
         (base32 "0d6kbczkamhhcmc8bf01q6k1x0g7dwjihwllzsldgga3dclyh4ks"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-selectrum" ,emacs-selectrum)))
+     (list emacs-company emacs-ivy emacs-selectrum))
     (home-page "https://github.com/raxod502/prescient.el/")
     (synopsis "Emacs library for sorting and filtering candidates")
     (description
@@ -8351,7 +8250,7 @@ interface.")
                            (string-append (assoc-ref outputs "out")
                                           "/share/info")))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/oantolin/orderless")
     (synopsis "Emacs completion style that matches multiple regexps in any order")
     (description "This package provides an orderless completion style that
@@ -8376,8 +8275,7 @@ style, or as multiple word prefixes.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-selectrum" ,emacs-selectrum)))
+     (list emacs-flycheck emacs-selectrum))
     (home-page "https://github.com/minad/consult")
     (synopsis "Consulting completing-read")
     (description "This package provides various handy commands based on the
@@ -8400,8 +8298,7 @@ list of candidates.")
         (base32 "07qbm5p4cfrrwyp8a5sw0wkdhnqbappz4xjlnjil2krhj9g39q78"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-consult" ,emacs-consult)
-       ("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-consult emacs-notmuch))
     (home-page "https://codeberg.org/jao/consult-notmuch")
     (synopsis "Search and preview Notmuch emails using Consult")
     (description
@@ -8450,8 +8347,7 @@ placed at the margin of the minibuffer for your completion candidates.")
         (base32 "0zij2f2rjjym98w68jkp10n1ckpfprlkk217c3fg16hz5nq4vnm6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)))
+     (list emacs-dash emacs-markdown-mode))
     (home-page "https://github.com/Fuco1/smartparens")
     (synopsis "Paredit-like insertion, wrapping and navigation with user
 defined pairs")
@@ -8621,7 +8517,7 @@ can be saved to and restored from a file.")
           (base32 "09s07mvg5bz3dm9sxgn40c7z6d6ry1sdjzsxwgmy825f3xm66avs"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://depp.brause.cc/eyebrowse/")
     (synopsis "Simple-minded way to manage window configs in Emacs")
     (description
@@ -8745,12 +8641,9 @@ after buffer changes.")
              #t)))
        #:include (cons* ".*\\.el$" %default-include)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("emacs-test-simple" ,emacs-test-simple)))
+     (list autoconf automake emacs-test-simple))
     (propagated-inputs
-     `(("emacs-load-relative" ,emacs-load-relative)
-       ("emacs-loc-changes" ,emacs-loc-changes)))
+     (list emacs-load-relative emacs-loc-changes))
     (home-page "https://github.com/realgud/realgud/")
     (synopsis
      "Modular front-end for interacting with external debuggers")
@@ -8808,7 +8701,7 @@ a source code input file.")
       (arguments
        `(#:tests? #f))                  ; requires network access.
       (propagated-inputs
-       `(("emacs-deferred" ,emacs-deferred)))
+       (list emacs-deferred))
       (home-page "https://github.com/tkf/emacs-request")
       (synopsis "Package for speaking HTTP in Emacs Lisp")
       (description "This package provides a HTTP request library with multiple
@@ -8886,9 +8779,7 @@ automatically.")
          "08a15knkdq35pzjq82imff016fbfdib5q4glg2xmdy2b5fnk7jqa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-hydra emacs-s))
     (arguments
      `(#:exclude (cons "^major-mode-hydra\\.el" %default-exclude)))
     (home-page "https://github.com/jerrypnz/major-mode-hydra.el")
@@ -8926,8 +8817,7 @@ by side to an Org buffer with your notes relevant to the current page.")
     (inherit emacs-pretty-hydra)
     (name "emacs-major-mode-hydra")
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-pretty-hydra" ,emacs-pretty-hydra)))
+     (list emacs-dash emacs-pretty-hydra))
     (arguments
      `(#:exclude (cons "^pretty-hydra\\.el" %default-exclude)))
     (synopsis "Create nice-looking hydras")
@@ -8947,7 +8837,7 @@ hydras with one column per group of heads.")))
         (base32 "0qpza1c45mr8fcpnm32cck4v22fnzz1yb7kww05rzgq1k9iivx5v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-hydra" ,emacs-hydra)))
+     (list emacs-hydra))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Incremental vertical completion for Emacs")
     (description
@@ -8972,7 +8862,7 @@ expression.")
         (base32 "094zfapfn1l8wjf3djkipk0d9nks0g77sbk107pfsbr3skkzh031"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-swiper" ,emacs-swiper)))
+     (list emacs-swiper))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Various completion functions using Ivy")
     (description
@@ -9004,7 +8894,7 @@ The following completions are currently available:
         (base32 "197pq2cvvskib87aky907wv2am55vilr7y5dabmmm07a8vr9py0v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)))
+     (list emacs-ivy))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Isearch with an overview")
     (description
@@ -9034,7 +8924,7 @@ matched.")
            "0d71nm9d9ajp5i6dnl8h1hw9jqp8gd1ajgninb1h13i80rplzl9k"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/alexmurray/ivy-xref")
       (synopsis "Ivy interface for @code{xref}")
       (description "This package provides an Ivy interface for selecting from
@@ -9059,9 +8949,7 @@ matched.")
            "18crb4zh2pjf0cmv3b913m9vfng27girjwfqc3mk7vqd1r5a49yk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-password-store" ,emacs-password-store)
-         ("password-store" ,password-store)))
+       (list emacs-ivy emacs-password-store password-store))
       (home-page "https://github.com/ecraven/ivy-pass")
       (synopsis "Ivy interface for password store (pass)")
       (description "This package provides an Ivy interface for working with
@@ -9086,9 +8974,7 @@ the password store @code{pass}.")
            "1wfg6mmd5gl1qgvayyzpxlkh9s7jgn20y8l1vh1zbj1czvv51xp8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-ivy emacs-yasnippet emacs-dash))
       (home-page "https://github.com/mkcms/ivy-yasnippet")
       (synopsis "Preview @code{yasnippets} with @code{ivy}")
       (description "This package allows you to select @code{yasnippet}
@@ -9118,7 +9004,7 @@ use it, call @code{M-x ivy-yasnippet} (but make sure you have enabled
           (base32 "1dv6vr7fv32v5m04zdy02sdajpvrnpc4i3pbh2dwfv73ff8d8yxm"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/Yevgnen/ivy-rich")
       (synopsis "More friendly interface for @code{ivy}")
       (description
@@ -9176,7 +9062,7 @@ windows.")
          "0f3r40d5yxp2pm2j0nn86s29nqj8py0jxjbj50v4ci3hsd92d8jl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)))
+     (list emacs-avy))
     (home-page "https://github.com/abo-abo/ace-window")
     (synopsis "Quickly switch windows in Emacs")
     (description
@@ -9228,8 +9114,7 @@ possible, and falls back to moving the left or top border otherwise.")
          "1cw513mh3gyl21qpmgwqjgpi8kwddmd4n69l4ax5a5pv3vvwrcx9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-let-alist" ,emacs-let-alist)
-       ("emacs-imenu-list" ,emacs-imenu-list)))
+     (list emacs-let-alist emacs-imenu-list))
     (arguments
      '(#:include
        '("^[^/]+.el$"
@@ -9326,15 +9211,10 @@ navigate code in a tree-like fashion.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ace-window" ,emacs-ace-window)
-         ("emacs-hydra" ,emacs-hydra)
-         ("emacs-iedit" ,emacs-iedit)
-         ("emacs-swiper" ,emacs-swiper)
-         ("emacs-zoutline" ,emacs-zoutline)))
+       (list emacs-ace-window emacs-hydra emacs-iedit emacs-swiper
+             emacs-zoutline))
       (native-inputs
-       `(("which" ,which)
-         ("emacs-clojure-mode" ,emacs-clojure-mode)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list which emacs-clojure-mode emacs-undercover))
       (arguments
        `(#:include (cons* "^lispy-clojure\\.clj$"
                           "^lispy-python\\.py$"
@@ -9386,8 +9266,7 @@ S-expression.")
                   "10k3hxxpx2v2k4dyad7j1bzmr1q7rzvv4y6c67pa9zcqyaw8m91v"))
                 (file-name (git-file-name name version))))
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-lispy" ,emacs-lispy)))
+       (list emacs-evil emacs-lispy))
       (build-system emacs-build-system)
       (synopsis "Minor mode for integrating Evil with lispy")
       (description
@@ -9415,8 +9294,7 @@ state and will work even without lispy being enabled.")
            "0xj1r7cn1rivaxhvawvmgx9fg3xilpfw4lkf2x2aqplr4s85ijas"))
          (file-name (git-file-name name version))))
       (propagated-inputs
-       `(("emacs-zoutline" ,emacs-zoutline)
-         ("emacs-lispy" ,emacs-lispy)))
+       (list emacs-zoutline emacs-lispy))
       (build-system emacs-build-system)
       (home-page "https://github.com/abo-abo/lpy")
       (synopsis "Modal editing for Python")
@@ -9442,10 +9320,7 @@ allowing unprefixed keys to insert their respective characters as expected.")
         (base32 "1ikl29rygr1habcsglz07m4ihd4ivi732kkzg8q676ihf367wa9i"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-paredit" ,emacs-paredit)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-buttercup emacs-dash emacs-paredit emacs-s))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup")))
@@ -9479,7 +9354,7 @@ It is recommended to use @code{clojure-mode} with Paredit or Smartparens.")
       (arguments
        `(#:include (cons* "^.*\\/" %default-include)))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/mpenet/clojure-snippets")
       (synopsis "Yasnippets for Clojure")
       (description
@@ -9550,8 +9425,7 @@ The purpose of this library is to wrap all the quirks and hassle of
         (base32 "10rz0qm8a4bl0m86kx19zq8lri047p4sxqyny08bgm9pbam0wvwn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-swiper" ,emacs-swiper)
-       ("jq" ,jq)))
+     (list emacs-swiper jq))
     (synopsis "Live preview @code{jq} queries using counsel")
     (description
      "This Emacs package provides the ability to live preview @code{jq}
@@ -9583,15 +9457,11 @@ queries using counsel.")
                (make-file-writable "counsel-notmuch.el")
                (emacs-substitute-variables "counsel-notmuch.el"
                  ("counsel-notmuch-path"
-                  (string-append (assoc-ref inputs "notmuch")
-                                 "/bin/notmuch")))
-               #t)))))
+                  (search-input-file inputs "/bin/notmuch"))))))))
       (inputs
-       `(("emacs-counsel" ,emacs-counsel)
-         ("notmuch" ,notmuch)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-counsel notmuch emacs-s))
       (propagated-inputs
-       `(("emacs-notmuch" ,emacs-notmuch)))
+       (list emacs-notmuch))
       (home-page "https://github.com/fuxialexander/counsel-notmuch")
       (synopsis "Search emails in Notmuch asynchronously with Ivy")
       (description
@@ -9615,8 +9485,7 @@ asynchronously, with Counsel and Ivy.  Simply call
         (base32 "1vp39r5njfzchkqv9g0w77whazp070anh9gmbkp3z4n3xxbik27f"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)
-       ("emacs-projectile" ,emacs-projectile)))
+     (list emacs-counsel emacs-projectile))
     (home-page "https://github.com/ericdanan/counsel-projectile")
     (synopsis "Enhance Projectile with Ivy")
     (description
@@ -9706,7 +9575,7 @@ languages.")
        (sha256
         (base32 "0nk12dcppdyhav6m6yf7abpywyd7amxd4237zsfd32w4zxsx39k1"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-epl" ,emacs-epl)))
+    (propagated-inputs (list emacs-epl))
     (home-page "https://github.com/lunaryorn/pkg-info.el")
     (synopsis "Information about Emacs packages")
     (description
@@ -9746,7 +9615,7 @@ ongoing operations.")
         (base32 "0hqp8r24wvzrkl630wbm0lynrcrnawv2yn2a3xgwqwwhwgva35rn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://github.com/ljos/sparql-mode")
     (synopsis "SPARQL mode for Emacs")
     (description
@@ -9886,15 +9755,12 @@ mode with the package emacs-julia-mode.")
     (arguments
      `(#:include (cons "^JuliaSnail\\.jl" %default-include)))
     (inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-spinner" ,emacs-spinner)
-       ("emacs-xref" ,emacs-xref)))
-    (propagated-inputs
-     `(("libvterm" ,libvterm)
-       ("emacs-julia-mode" ,emacs-julia-mode) ;required by parser
-       ("emacs-parsec" ,emacs-parsec)         ;required by parser
-       ("emacs-vterm" ,emacs-vterm)))
+     (list emacs-dash emacs-s emacs-spinner emacs-xref))
+    (propagated-inputs
+     (list libvterm
+           emacs-julia-mode ;required by parser
+           emacs-parsec ;required by parser
+           emacs-vterm))
     (home-page "https://github.com/gcv/julia-snail")
     (synopsis "Development environment and REPL interaction package for Julia")
     (description "This package provides a development environment and REPL
@@ -9965,9 +9831,9 @@ strings, and code folding.")
                 "0a5mmg3cmdi73giblp07ksl06xzl9nb2m3f96ny4r3rv0ar3v1bx"))))
     (build-system emacs-build-system)
     (inputs
-     `(("node" ,node)))
+     (list node))
     (native-inputs
-     `(("emacs-ert-expectations" ,emacs-ert-expectations)))
+     (list emacs-ert-expectations))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -10047,10 +9913,7 @@ indentation and filling of comments and C preprocessor fontification.")
                 "1fj2fghiycnzds2zxfxgj1d9mdzsvs9rvl9bwy2f1vwawqk1m48w"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-typescript-mode" ,emacs-typescript-mode)))
+     (list emacs-dash emacs-s emacs-flycheck emacs-typescript-mode))
     (home-page "https://github.com/ananthakumaran/tide")
     (synopsis "Typescript IDE for Emacs")
     (description
@@ -10111,8 +9974,7 @@ in Emacs.")
           (base32 "1z1sjn6dcqv8mmkh6nfcwhnql2z6xr9yx3hs77bfxj79pf3c466p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-markdown-mode" ,emacs-markdown-mode)))
+       (list emacs-evil emacs-markdown-mode))
       (home-page "https://github.com/Somelauw/evil-markdown/")
       (synopsis "Evil keybindings for @code{markdown-mode}")
       (description
@@ -10154,8 +10016,7 @@ like @code{org-edit-src-code} but for arbitrary regions.")
                 "1wy2kpli90z7p4dqr4b7f1fv99g6lfxi1kzy2bfl0p8qi40rpmyv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-pkg-info" ,emacs-pkg-info)))
+     (list emacs-dash emacs-pkg-info))
     (home-page "https://github.com/bbatsov/projectile")
     (synopsis "Manage and navigate projects in Emacs easily")
     (description
@@ -10183,12 +10044,9 @@ If you want to mark a folder manually as a project just create an empty
                   "12bdgykfh4mwsqdazxjdvha62h3q3v33159ypy91f6x59y01fi0n"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-s emacs-f emacs-dash emacs-let-alist))
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (arguments
        `(#:include (cons "^project-skeletons\\/" %default-include)
          ;; XXX: one failing test involving initializing a git repo
@@ -10259,10 +10117,7 @@ and RSS, with a user interface inspired by notmuch.")
           (base32 "0a2ibka82xq1dhy2z7rd2y9zhcj8rna8357881yz49wf55ccgm53"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-elfeed" ,emacs-elfeed)
-         ("emacs-org" ,emacs-org)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-elfeed emacs-org emacs-dash emacs-s))
       (native-inputs
        `(("ert-runner" ,emacs-ert-runner)
          ("emacs-xtest" ,emacs-xtest)))
@@ -10300,7 +10155,7 @@ much easier.")
         (base32 "07r1qlldgd0kfikd0y737y5n42ab3nkw2s5jx7frimj41yandbdp"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elfeed" ,emacs-elfeed)))
+     (list emacs-elfeed))
     (home-page "https://github.com/fasheng/elfeed-protocol")
     (synopsis "Fever/NewsBlur/ownCloud/tt-RSS protocols for Elfeed")
     (description
@@ -10324,7 +10179,7 @@ with Elfeed.")
         (base32 "10wsjq2zd6kz9182gnkjzlzywx16j29dgm1gzwynr79xmvgs4r2b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elfeed" ,emacs-elfeed)))
+     (list emacs-elfeed))
     (home-page "https://github.com/sp1ff/elfeed-score")
     (synopsis "Gnus-style scoring for Elfeed")
     (description
@@ -10410,8 +10265,7 @@ suggestion is taken.")
                 "0ysxblc90kjcz84siprnyxwh94scflivqbxylzkvjm7hbx93rsh1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-xterm-color" ,emacs-xterm-color)))
+     (list emacs-f emacs-xterm-color))
     (home-page "https://github.com/dieggsy/eterm-256color")
     (synopsis
      "Customizable 256 colors for Emacs @code{term} and @code{ansi-term}")
@@ -10439,7 +10293,7 @@ customizable 256 color support to @code{term} and @code{ansi-term}.")
     (native-inputs
      `(("ert-runner" ,emacs-ert-runner)))
     (propagated-inputs
-     `(("emacs-el-x" ,emacs-el-x)))
+     (list emacs-el-x))
     (home-page "https://github.com/sigma/mocker.el")
     (synopsis "Mocking framework for Emacs Lisp")
     (description "Mocker.el is a framework for writing tests in Emacs Lisp.
@@ -10571,86 +10425,94 @@ indentation guides in Emacs:
       (license license:gpl2+))))
 
 (define-public emacs-elpy
-  (package
-    (name "emacs-elpy")
-    (version "1.35.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/jorgenschaefer/elpy")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "07rdb9w3bxzfr07224awa541xdy116hyc2b3bpl3fc3ikddmbydk"))))
-    (build-system emacs-build-system)
-    (arguments
-     `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-ffip-project-search-call
-           (lambda _
-             ;; Since version 6.0.0 of find-file-in-project,
-             ;; ffip-project-search doesn't accept a third argument anymore
-             ;; (see: https://github.com/jorgenschaefer/elpy/issues/1889).
-             (substitute* "elpy.el"
-               (("\\((ffip-project-search nil nil) project-root\\)" _ signature)
-                (format #f "(let ((ffip-project-root project-root)) (~a))"
-                        signature)))))
-         ;; The default environment of the RPC uses Virtualenv to install
-         ;; Python dependencies from PyPI.  We don't want/need this in Guix.
-         (add-before 'check 'do-not-use-virtualenv
-           (lambda _
-             (setenv "ELPY_TEST_DONT_USE_VIRTUALENV" "1")
-             (substitute* "elpy-rpc.el"
-               (("defcustom elpy-rpc-virtualenv-path 'default")
-                "defcustom elpy-rpc-virtualenv-path 'system"))))
-         (add-before 'check 'build-doc
-           (lambda _
-             (with-directory-excursion "docs"
-               (invoke "make" "info" "man"))
-             ;; Move .info file at the root so that it can installed by the
-             ;; 'move-doc phase.
-             (rename-file "docs/_build/texinfo/Elpy.info" "Elpy.info")))
-         (add-after 'build-doc 'install-manpage
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (man1 (string-append out "/share/man/man1")))
-               (mkdir-p man1)
-               (copy-file "docs/_build/man/elpy.1"
-                          (string-append man1 "/elpy.1"))))))
-       #:tests? #t
-       #:test-command '("ert-runner")))
-    (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-find-file-in-project" ,emacs-find-file-in-project)
-       ("emacs-highlight-indentation" ,emacs-highlight-indentation)
-       ("emacs-yasnippet" ,emacs-yasnippet)
-       ("pyvenv" ,emacs-pyvenv)
-       ("s" ,emacs-s)
-       ;; The following are recommended Python dependencies that make Elpy
-       ;; much more useful.  Installing these avoids Elpy prompting to install them
-       ;; from PyPI using pip.
-       ("python-autopep8" ,python-autopep8)
-       ("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-jedi" ,python-jedi)
-       ("python-rope" ,python-rope)
-       ("python-yapf" ,python-yapf)))
-    (native-inputs
-     `(("ert-runner" ,emacs-ert-runner)
-       ("emacs-f" ,emacs-f)
-       ("python" ,python-wrapper)
-       ;; For documentation.
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
-    (home-page "https://github.com/jorgenschaefer/elpy")
-    (synopsis "Python development environment for Emacs")
-    (description "Elpy brings powerful Python editing to Emacs.  It combines
+  ;; Use the latest commit, as it contains unreleased fixes for Python 3.9 and
+  ;; Jedi 0.18.
+  (let ((commit "8d0de310d41ebf06b22321a8534546447456870c")
+        (revision "0"))
+    (package
+      (name "emacs-elpy")
+      (version (git-version "1.35.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jorgenschaefer/elpy")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0hg6yk0wkfh2rwcc4h0bb6m2p3dg62ja22mjpa94khq52lv1piwf"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'disable-broken-tests
+             ;; Some tests are known to have problems with Python 3.9; disable
+             ;; them (see:
+             ;; https://github.com/jorgenschaefer/elpy/issues/1856).
+             ;; Aggressively remove the modules where failing tests were
+             ;; discovered, as they are similar and fail in a nondeterministic
+             ;; way.
+             (lambda _
+               (with-directory-excursion "test"
+                 (for-each delete-file
+                           (append (find-files "." "elpy-refactor")
+                                   (find-files "." "elpy-multiedit")
+                                   (find-files "." "elpy-pdb")
+                                   (find-files "." "elpy-promise"))))))
+           ;; The default environment of the RPC uses Virtualenv to install
+           ;; Python dependencies from PyPI.  We don't want/need this in Guix.
+           (add-before 'check 'do-not-use-virtualenv
+             (lambda _
+               (setenv "ELPY_TEST_DONT_USE_VIRTUALENV" "1")
+               (substitute* "elpy-rpc.el"
+                 (("defcustom elpy-rpc-virtualenv-path 'default")
+                  "defcustom elpy-rpc-virtualenv-path 'system"))))
+           (add-before 'check 'build-doc
+             (lambda _
+               (with-directory-excursion "docs"
+                 (invoke "make" "info" "man"))
+               ;; Move .info file at the root so that it can installed by the
+               ;; 'move-doc phase.
+               (rename-file "docs/_build/texinfo/Elpy.info" "Elpy.info")))
+           (add-after 'build-doc 'install-manpage
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out  (assoc-ref outputs "out"))
+                      (man1 (string-append out "/share/man/man1")))
+                 (mkdir-p man1)
+                 (copy-file "docs/_build/man/elpy.1"
+                            (string-append man1 "/elpy.1"))))))
+         #:tests? #t
+         #:test-command '("ert-runner")))
+      (propagated-inputs
+       `(("emacs-company" ,emacs-company)
+         ("emacs-find-file-in-project" ,emacs-find-file-in-project)
+         ("emacs-highlight-indentation" ,emacs-highlight-indentation)
+         ("emacs-yasnippet" ,emacs-yasnippet)
+         ("pyvenv" ,emacs-pyvenv)
+         ("s" ,emacs-s)
+         ;; The following are recommended Python dependencies that make Elpy
+         ;; much more useful.  Installing these avoids Elpy prompting to install them
+         ;; from PyPI using pip.
+         ("python-autopep8" ,python-autopep8)
+         ("python-black" ,python-black)
+         ("python-flake8" ,python-flake8)
+         ("python-jedi" ,python-jedi)
+         ("python-yapf" ,python-yapf)))
+      (native-inputs
+       `(("ert-runner" ,emacs-ert-runner)
+         ("emacs-f" ,emacs-f)
+         ("python" ,python-wrapper)
+         ;; For documentation.
+         ("python-sphinx" ,python-sphinx)
+         ("texinfo" ,texinfo)))
+      (home-page "https://github.com/jorgenschaefer/elpy")
+      (synopsis "Python development environment for Emacs")
+      (description "Elpy brings powerful Python editing to Emacs.  It combines
 and configures a number of other packages written in Emacs Lisp as well as
 Python, together offering features such as navigation, documentation,
 completion, interactive development and more.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-rainbow-delimiters
   (package
@@ -10810,7 +10672,7 @@ window edge.")
          "0y4jcja9kml1lq88r8b9myk39dgaggh7q7f3a43sj828hvzlccb7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-visual-fill-column" ,emacs-visual-fill-column)))
+     (list emacs-visual-fill-column))
     (home-page "https://github.com/joostkremers/writeroom-mode")
     (synopsis "Distraction-free writing for Emacs")
     (description
@@ -10843,8 +10705,7 @@ restrict the text width to 80 characters.")
                     (lambda _ (setenv "HOME" (getcwd)))))))
     (native-inputs
      ;; For tests.
-     `(("aspell" ,aspell)
-       ("aspell-dict-en" ,aspell-dict-en)))
+     (list aspell aspell-dict-en))
     (home-page "https://github.com/redguardtoo/wucuo")
     (synopsis "Fast spell checker for camel case code or plain text")
     (description
@@ -10868,7 +10729,7 @@ a file, or a complete directory.")
                 "1wn94nkfv6qyyj6clvms7m7ncqf09bgszv67may530y75kylivav"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous")
     (synopsis "Replacement for completing-read using ido")
     (description
@@ -10893,7 +10754,7 @@ Emacs completion function instead.")
                 "08iwvqknicqlffda7ixwgzw7q9g2g4j4nsxdw6544r85vaysi4cc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ido-completing-read+" ,emacs-ido-completing-read+)))
+     (list emacs-ido-completing-read+))
     (home-page "https://github.com/DarwinAwardWinner/ido-ubiquitous")
     (synopsis "Use ido (nearly) everywhere")
     (description
@@ -10961,7 +10822,7 @@ behavior very similar to that of Python mode.")
                 "16fb4r3vq8xkzl911v7gaky95w1agfxjlpaxpjmidwx48rbcar59"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-yaml-mode))
     (home-page "https://gitlab.com/joewreschnig/gitlab-ci-mode/")
     (synopsis "Emacs mode for editing GitLab CI files")
     (description
@@ -10986,8 +10847,7 @@ via @code{gitlab-ci-lint}.")
                 "1c5js19zyb1z61hapvbfcl5jhrjqij46cxldgqij6al0scw44dga"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-helm" ,emacs-helm)))
+     (list emacs-dash emacs-helm))
     (home-page "https://gitlab.com/sasanidas/gitlab-snip-helm/")
     (synopsis "GitLab snippet API interaction for Emacs")
     (description "This package provides GitLab snippet API interaction for
@@ -11077,8 +10937,7 @@ ack, ag, helm and pt.")
         (base32 "1xkxlbjpqhfhakmfi664cq7i5968941vpngq94napmhbgqydp4qn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-async emacs-popup))
     (home-page "https://emacs-helm.github.io/helm/")
     (synopsis
      "Incremental completion and selection narrowing framework for Emacs")
@@ -11105,7 +10964,7 @@ stuff in Emacs (like buffers, files, etc).")
           (base32 "0kcjhwwi492n9m2w894hvdavfvhj45zygy7bwvx103wvpay5h6h6"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (home-page "https://github.com/emacs-helm/helm-org")
       (synopsis "Helm interface to the Silver Searcher")
       (description
@@ -11128,7 +10987,7 @@ as well as features for editing search results.")
         (base32 "1qjay0fvryxa8n1ws6r1by512p2fylb2nj7ycm1497fcalb0d706"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/emacsorphanage/helm-swoop")
     (synopsis "Filter and jump to lines in an Emacs buffer using Helm")
     (description
@@ -11151,7 +11010,7 @@ for search-based navigation of buffers.")
         (base32 "0ml9yp3qaiwn7iixyxvsj3fxn7gw913qxisr47df57q4ka912law"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/syohex/emacs-helm-ag")
     (synopsis "Helm interface to the Silver Searcher")
     (description
@@ -11174,8 +11033,7 @@ as well as features for editing search results.")
         (base32 "05gpg90gg03yalmv9fw1y9k21i2l617iipvs0p9n80aln8nrzs8g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-projectile" ,emacs-projectile)))
+     (list emacs-helm emacs-projectile))
     (home-page "https://github.com/bbatsov/helm-projectile")
     (synopsis "Helm integration for Projectile")
     (description
@@ -11200,8 +11058,7 @@ as well as features for editing search results.")
            "1lkdvmjn3alhqxq2i64sdr977sbw3g0b2670d9bwyzi67qh0jxrv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-async emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/emacs-taskrunner")
       (synopsis "Retrieve tasks from various build systems and task-runners")
       (description "This package parses Makefiles and build-system files for
@@ -11226,9 +11083,7 @@ multiple project types.")
            "1wf4s4k0ap21f7g5w6128an8nsvbja7f5n889vcml5b6gjz058db"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-taskrunner" ,emacs-taskrunner)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-ivy emacs-taskrunner emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/ivy-taskrunner")
       (synopsis "Retrieve build-system tasks using Ivy")
       (description "This package provides an Ivy interface for selecting
@@ -11253,9 +11108,7 @@ Makefile targets.")
            "182lmr858fx6rdhp1fy7kv8dvrhzcnxzwfck1q22s6xs8x85d5q7"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-taskrunner" ,emacs-taskrunner)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-helm emacs-taskrunner emacs-projectile))
       (home-page "https://github.com/emacs-taskrunner/helm-taskrunner")
       (synopsis "Retrieve build-system tasks using Helm")
       (description "This package provides a Helm interface for selecting
@@ -11280,8 +11133,7 @@ Makefile targets.")
            "1y2v77mmd1bfkkz51cnk1l0dg3lvvxc39wlamnm7wjns66dbvlam"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-projectile" ,emacs-projectile)))
+       (list emacs-helm emacs-projectile))
       (home-page "https://github.com/abo-abo/helm-make")
       (synopsis "Select a Makefile target with helm")
       (description "@code{helm-make} or @code{helm-make-projectile} will give
@@ -11307,12 +11159,12 @@ target will call @code{compile} on it.")
      '(#:exclude                        ;don't exclude 'cider-test.el'
        '("^\\.dir-locals\\.el$" "^test/")))
     (propagated-inputs
-     `(("emacs-clojure-mode" ,emacs-clojure-mode)
-       ("emacs-parseedn" ,emacs-parseedn)
-       ("emacs-pkg-info" ,emacs-pkg-info)
-       ("emacs-queue" ,emacs-queue)
-       ("emacs-sesman" ,emacs-sesman)
-       ("emacs-spinner" ,emacs-spinner)))
+     (list emacs-clojure-mode
+           emacs-parseedn
+           emacs-pkg-info
+           emacs-queue
+           emacs-sesman
+           emacs-spinner))
     (home-page "https://cider.mx/")
     (synopsis "Clojure development environment for Emacs")
     (description
@@ -11349,7 +11201,7 @@ CIDER).")
            "1ws2a9azmdkkg47xnd4jggna45nf0bh54gyp0799b44c4bgjp029"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (arguments
        `(#:include (cons* "^contrib\\/" "^lib\\/" "^slynk\\/" %default-include)
          #:phases
@@ -11428,7 +11280,7 @@ xref, etc.) are still available, but with better integration.")
            "1vfqmvayf35g6y3ljsm3rlzv5jm50qikhh4lv2zkkswj6gkkb1cv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11461,8 +11313,7 @@ sly-quickload command that prompts the user for a package to install. ")
            "09x8l37wwqw74xc2frwzbfdb1if8rb3szg5akdk3v2qhik4sm3dd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)
-         ("emacs-popup" ,emacs-popup)))
+       (list emacs-sly emacs-popup))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)))
       (synopsis "ASDF contrib for SLY")
@@ -11490,7 +11341,7 @@ additional support for working with ASDF projects.")
            "16asd119rzqrlclps2q6yrkis8jy5an5xgzzqvb7jdyq39zxg54q"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases (modify-phases %standard-phases
@@ -11522,8 +11373,7 @@ file.")
            "1nxf28gn4f3n0wnv7nb5sgl36fz175y470zs9hig4kq8cp0yal0r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)
-         ("emacs-macrostep" ,emacs-macrostep)))
+       (list emacs-sly emacs-macrostep))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11560,9 +11410,9 @@ inside the source file.")
              #t))))
       (build-system emacs-build-system)
       (inputs
-       `(("cl-agnostic-lizard" ,cl-agnostic-lizard)))
+       (list cl-agnostic-lizard))
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11616,7 +11466,7 @@ Common Lisp, realized as an extension to SLY.")
            "1216idyp034nkqddhw4p53jkhhdxa6xnjjmsvijpf4rxqnfqvapg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-sly" ,emacs-sly)))
+       (list emacs-sly))
       (arguments
        '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
          #:phases
@@ -11649,8 +11499,7 @@ using package inferred style.")
      `(#:tests? #t
        #:test-command '("buttercup" "-l" "lua-mode.el")))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("lua" ,lua)))
+     (list emacs-buttercup lua))
     (synopsis "Major mode for lua")
     (description
      "This Emacs package provides a mode for @uref{https://www.lua.org/,
@@ -11682,7 +11531,7 @@ Lua programming language}.")
                                           "/share/info"))
              #t)))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://devmanual.gentoo.org")
     (synopsis "Major modes for Gentoo package files")
     (description
@@ -11718,7 +11567,7 @@ news items, openrc and runscripts.")
                  (invoke "makeinfo" "--no-split"
                          "-o" "evil.info" "evil.texi")))))))
     (build-system emacs-build-system)
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (home-page "https://github.com/emacs-evil/evil")
     (synopsis "Extensible Vi layer for Emacs")
     (description
@@ -11742,8 +11591,7 @@ extensions.")
                 "0ssb3n1i67b6zp2j8djaalkr33x4c7zalw6vl6p5kqxkh8vy8cdf"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-annalist" ,emacs-annalist)))
+     (list emacs-evil emacs-annalist))
     (arguments
      `(#:include (cons* "^modes\\/" %default-include)))
     (home-page "https://github.com/emacs-evil/evil-collection")
@@ -11771,7 +11619,7 @@ Emacs that Evil does not cover properly by default, such as @code{help-mode},
           (base32 "1p3vjrij63v9nrcyj3b5jsqzv9y7dgv9i1inx1q7x3s90vndavac"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (home-page "https://github.com/edkolev/evil-goggles")
       (synopsis "Displays visual hints when editing with evil")
       (description "Creates a visual pulse to indicate the region that is
@@ -11823,7 +11671,7 @@ used for reverse direction.")
           (base32
            "16zixhxxcb83m82f2cfiardfn99j3w41v6vh1qk6j9pplrlfw70v"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/janpath/evil-numbers")
       (synopsis "Increment and decrement numeric literals")
       (description
@@ -11849,7 +11697,7 @@ end of a line and increment or decrement it.")
            "0bqzch14whlmrcasakah3psrzswvkzd7mmi8hx5s64kfp29wbdhi"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -11876,8 +11724,7 @@ a popup window for previewing candidates.")
           (base32 "0b08y4spapl4g2292j3l4cr84gjlvm3rpma3gqld4yb1sxd7v78p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-paredit" ,emacs-paredit)))
+       (list emacs-evil emacs-paredit))
       (home-page "https://github.com/roman/evil-paredit")
       (synopsis "Evil extension to integrate nicely with Paredit")
       (description
@@ -11904,7 +11751,7 @@ you break the parity of parenthesis.")
           (base32
            "0k35glgsirc3cph8v5hhjrqfh4ndwh8a28qbr03y3jl8s453xcj7"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/wcsmith/evil-args")
       (synopsis "Motions and text objects for delimited arguments in Evil")
       (description
@@ -11927,7 +11774,7 @@ arguments, such as arguments separated by commas and semicolons.")
        (sha256
         (base32 "0s8lmmm25qabicwaj9jybpbd8mkc62yl7jnhk1lpablydjkv3w2i"))))
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/syl20bnr/evil-escape")
     (synopsis "Escape from insert state and everything else in Emacs")
@@ -11954,8 +11801,8 @@ state and everything else in Emacs.")
           (base32
            "0bjpn4yqig17ddym6wqq5fm1b294q74hzcbj9a6gs97fqiwf88xa"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
-      (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+      (propagated-inputs (list emacs-evil))
+      (native-inputs (list emacs-ert-runner))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -11991,7 +11838,7 @@ for exchanging text.")
           (base32
            "14rpn76qrf287s3y2agmddcxi27r226i53ixjvd694ss039g0r11"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/Dewdrops/evil-ReplaceWithRegister")
       (synopsis "Quickly replace text with the contents of a register")
       (description
@@ -12017,7 +11864,7 @@ contents of a register.")
           (base32
            "1g6r1ydscwjvmhh1zg4q3nap4avk8lb9msdqrh7dff6pla0r2qs6"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/TheBB/evil-indent-plus")
       (synopsis "Text objects based on indentation")
       (description
@@ -12044,7 +11891,7 @@ surrounding lines.")
           (base32
            "074zpm6mmr1wfl6d5xdf8jk1fs4ccpbzf4ahhkwga9g71xiplszv"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/wbolster/evil-text-object-python")
       (synopsis "Text objects for Python")
       (description
@@ -12068,7 +11915,7 @@ surrounding lines.")
           (base32
            "1a162hynp0jcsn50c1w5a02mrw9w3q05c7lkqzqd25px3d0p772q"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -12096,7 +11943,7 @@ aligning text objects based on separators.")
           (base32
            "0872ix682hkdz0k8pn6sb54rqkx00rz5fxpd5j2snx406yagpaxz"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (arguments
        `(#:tests? #t
          #:test-command '("make" "test")))
@@ -12123,7 +11970,7 @@ pasting into and from @code{tmux} paste buffers.")
         (base32
          "1qrlg4cxlsd4cf1z8j2662pfb9p6pnqpsyb74flja9cqv6g5ylp8"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+    (propagated-inputs (list emacs-evil))
     (home-page "https://github.com/redguardtoo/evil-nerd-commenter")
     (synopsis "Comment and uncomment lines efficiently")
     (description
@@ -12146,7 +11993,7 @@ pasting into and from @code{tmux} paste buffers.")
         (base32
          "1gfyrq7xfzmzh3x8k5f08n027dlbwi0pkkxf9c39fkxp4jngibsz"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+    (propagated-inputs (list emacs-evil))
     (home-page "https://github.com/troyp/evil-visual-replace")
     (synopsis "Replacement commands for @code{evil-mode} visual blocks")
     (description
@@ -12172,7 +12019,7 @@ pasting into and from @code{tmux} paste buffers.")
           (base32
            "0mkbzw12fav945icibc2293m5haxqr3hzkyli2cf4ssk6yvn0x4c"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page "https://github.com/bling/evil-visualstar")
       (synopsis "Instantly search using the visual selection")
       (description
@@ -12340,7 +12187,7 @@ passive voice.")
                  (("/bin/sh" sh)
                   (string-append (assoc-ref inputs "bash") sh)))))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
     (description "Org is an Emacs mode for keeping notes, maintaining TODO
@@ -12566,9 +12413,7 @@ known loosely as deftheme.  Many mode-specific customizations are included.")
         (base32 "1vql8m4nj0brmv58b6lkbhykik8n6j4i7d3nylcls78y7ihc2cz8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-flycheck emacs-s))
     (home-page "https://github.com/bradyt/dart-mode")
     (synopsis "Emacs mode for the Dart programming language")
     (description
@@ -12665,7 +12510,7 @@ package provides the Emacs theme.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (home-page "https://github.com/auto-complete/auto-complete")
     (synopsis "Intelligent auto-completion extension for Emacs")
     (description
@@ -12782,8 +12627,7 @@ please.")
           (base32 "10w1ldgijdhfsrazp0y3bm76jv5wvdn94k1yp0pmc2m1896b58ak"))))
       (build-system emacs-build-system)
       (inputs
-       `(("emacs-stream" ,emacs-stream)
-         ("emacs-cl-print" ,emacs-cl-print)))
+       (list emacs-stream emacs-cl-print))
       (home-page "https://github.com/emacsmirror/el-search")
       (synopsis "Expression based interactive search for emacs-lisp-mode")
       (description "This package provides expression based interactive search
@@ -12804,9 +12648,9 @@ procedures for emacs-lisp-mode.")
        (sha256
         (base32 "0can9v336lgnq0q2ha3js0565jzp3dlwwqxhcbx5swk5kp148f07"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-dash" ,emacs-dash)))
+    (propagated-inputs (list emacs-dash))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -12931,8 +12775,7 @@ notifications.")
         (base32 "0lc0p5cl4hfrzw1z2ghb11k1lvljn5m08jw5fmgwgxv667kwh49r"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-gntp" ,emacs-gntp)
-       ("emacs-log4e" ,emacs-log4e)))
+     (list emacs-gntp emacs-log4e))
     (home-page "https://github.com/jwiegley/alert")
     (synopsis "Growl-style notification system for Emacs")
     (description
@@ -12978,10 +12821,7 @@ a (typically) noncontiguous set of text.")
         (base32 "1nvsfbfsma59ilf7c3vjngnmx3aapwvvvaafdy5szm5r6lkicqvg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-alert" ,emacs-alert)
-       ("emacs-s" ,emacs-s)
-       ("emacs-ht" ,emacs-ht)
-       ("mu" ,mu)))
+     (list emacs-alert emacs-s emacs-ht mu))
     (home-page "https://github.com/iqbalansari/mu4e-alert")
     (synopsis "Desktop notification for mu4e")
     (description
@@ -13008,7 +12848,7 @@ mode-line.")
            "00y9nap61q1z2cdql4k9g7fgi2gdgd9iy5s5lzrd9a4agbx6r7sv"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page "https://gitlab.com/wavexx/mu4e-jump-to-list.el")
       (synopsis "Select and view mailing lists in mu4e")
       (description
@@ -13035,7 +12875,7 @@ automatically discovered and presented in recency order.")
                   "10lzf3b70pk6rzdrgx0ww0gc94v0ydh9zj1gbsa20xw27ds7hmfn"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page "https://github.com/seanfarley/mu4e-patch")
       (synopsis "Colorize patch-like emails in mu4e")
       (description
@@ -13114,7 +12954,7 @@ type an abbreviation and automatically expand it into function templates.")
     (arguments
      `(#:include (cons* "^snippets\\/" %default-include)))
     (propagated-inputs
-     `(("emacs-yasnippet" ,emacs-yasnippet)))
+     (list emacs-yasnippet))
     (home-page "https://github.com/AndreaCrotti/yasnippet-snippets")
     (synopsis "Collection of YASnippet snippets for many languages")
     (description "This package provides an extensive collection of YASnippet
@@ -13144,7 +12984,7 @@ automatically made available to YASnippet.")
       (arguments
        `(#:include (cons* "^.*\\/" %default-include)))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/hlissner/doom-snippets")
       (synopsis "Doom Emacs' snippet library")
       (description
@@ -13170,8 +13010,7 @@ exposes a small API to assist in writing your own snippets.")
                   "1cbafjqlzxbg19xfdqsinsh7afq58gkf44rsg1qxfgm8g6zhr7f8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-helm emacs-yasnippet))
       (home-page "https://github.com/emacs-jp/helm-c-yasnippet")
       (synopsis "Helm integration for Yasnippet")
       (description "This Emacs library provides Helm interface for
@@ -13193,9 +13032,9 @@ Yasnippet.")
                 "13a8jpj4wwm0yjv8hnsizgjf8wi3r2ap87lyvw7g4c7snp2dydwa"))))
     (build-system emacs-build-system)
     (inputs
-     `(("recutils" ,recutils)))
+     (list recutils))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -13232,11 +13071,7 @@ above over the network.")
          "0pm6va26kadjvbai4qsnjc2bk379w2nk6h3b5f0c2yv3q5na0p49"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-org" ,emacs-org)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-helm emacs-org emacs-s))
     (home-page "https://github.com/alphapapa/helm-org-rifle")
     (synopsis "Rifle through Org files")
     (description "This package searches both headings and contents of entries
@@ -13490,8 +13325,7 @@ highlights quasi-quoted expressions.")
                     (bin (string-append out "/bin"))
                     (lisp (string-append out "/share/emacs/site-lisp/emacspeak"))
                     (info (string-append out "/share/info"))
-                    (emacs (string-append (assoc-ref inputs "emacs")
-                                          "/bin/emacs")))
+                    (emacs (search-input-file inputs "/bin/emacs")))
                ;; According to etc/install.org, the Emacspeak directory should
                ;; be copied to its installation destination.
                (for-each
@@ -13606,9 +13440,9 @@ abbreviation of the mode line displays (lighters) of minor modes.")
                 "088kl3bml0rs5bkfymgzr15ram9qvy66h1kaisrbkynh0yxvf8g9"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
-     `(("emacs-diminish" ,emacs-diminish)))
+     (list emacs-diminish))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch"
@@ -13724,7 +13558,7 @@ source file, @file{jl-encrypt.el}.")
      "https://informationelle-selbstbestimmung-im-internet.de/Emacs.html")
     (synopsis "Improved S/MIME support for Gnus in Emacs")
     (propagated-inputs
-     `(("emacs-default-encrypt" ,emacs-default-encrypt)))
+     (list emacs-default-encrypt))
     (description
      ;; TRANSLATORS: ExtendSMIME, DefaultEncrypt, and emacs-default-encrypt
      ;; should not be translated.  The name "emacs-default-encrypt" refers to
@@ -13802,7 +13636,7 @@ conversion for Emacs Lisp.")
         (base32 "1jj9vmhc4s3ych08bjm1c2xwi81z1p20rj7bvxrgvb5aga2ghi9d"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-auctex" ,emacs-auctex)))
+     (list emacs-auctex))
     (home-page "https://github.com/cdominik/cdlatex")
     (synopsis "Fast Emacs input methods for LaTeX environments and
 math")
@@ -13848,11 +13682,8 @@ configuration of Chinese fonts.")
         (base32 "18il2licf8pgfcrpx2bk55gpf8f537kb9cxqz83jldkhiyry74il"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-expand-region" ,emacs-expand-region)
-       ("emacs-multiple-cursors" ,emacs-multiple-cursors)
-       ("emacs-powerline" ,emacs-powerline)
-       ("emacs-spaceline" ,emacs-spaceline)))
+     (list emacs-dash emacs-expand-region emacs-multiple-cursors
+           emacs-powerline emacs-spaceline))
     (home-page "https://github.com/jyp/boon")
     (synopsis "Ergonomic command mode for Emacs")
     (description "Boon is a complete package for modal editing with a focus on
@@ -13887,7 +13718,7 @@ reached with the right hand.")
           (lambda _
             (invoke "make" "info"))))))
    (native-inputs
-    `(("texinfo" ,texinfo)))
+    (list texinfo))
    (home-page "http://cc-mode.sourceforge.net/")
    (synopsis "Framework for creating major modes for C-style languages")
    (description
@@ -13984,7 +13815,7 @@ in Emacs.")
          (add-after 'unpack 'enter-source-directory
            (lambda _
              (chdir "lisp"))))))
-    (propagated-inputs `(("emacs-projectile" ,emacs-projectile)))
+    (propagated-inputs (list emacs-projectile))
     (home-page "https://github.com/ejmr/php-mode")
     (synopsis "Major mode for editing PHP code")
     (description
@@ -14055,11 +13886,8 @@ containing words from the Rime project.")
         (base32 "1dj46yprbl3l6n83aj0hsnd0rwjcp4ypyg2nhwig39wxirwlf9an"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-pyim-basedict" ,emacs-pyim-basedict)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-posframe" ,emacs-posframe)
-       ("emacs-xr" ,emacs-xr)))
+     (list emacs-async emacs-pyim-basedict emacs-popup emacs-posframe
+           emacs-xr))
     (home-page "https://github.com/tumashu/pyim")
     (synopsis "Chinese input method")
     (description
@@ -14188,9 +14016,7 @@ publishing them to various output formats such as HTML, LaTeX, or PDF.")
         (base32 "1n2ymd92qpvsby6ms0l3kjhdzzc47rri2aiscc6bs07hm4mjpr9q"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-ht emacs-s))
     (home-page "https://github.com/Wilfred/mustache.el")
     (synopsis "Mustache templating library for Emacs")
     (description "Mustache templating library for Emacs, mustache is
@@ -14215,11 +14041,8 @@ and lambdas.")
         (base32 "0wsvfn409a2ivbich8b8zqza78sprirg4bl7igx536ydqclmi0n7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-el2org" ,emacs-el2org)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-mustache" ,emacs-mustache)
-       ("emacs-simple-httpd" ,emacs-simple-httpd)))
+     (list emacs-dash emacs-el2org emacs-ht emacs-mustache
+           emacs-simple-httpd))
     (home-page "https://github.com/tumashu/org2web")
     (synopsis "Static site generator based on org-mode ")
     (description "Org2web is a static site generator based on org-mode,
@@ -14256,7 +14079,7 @@ which code derived from Kelvin H's org-page.")
                      (string-append "EMACS_BIN="
                                     (assoc-ref inputs "emacs")
                                     "/bin/emacs -Q")))))))
-    (native-inputs `(("xcb-proto" ,xcb-proto)))
+    (native-inputs (list xcb-proto))
     (home-page "https://github.com/ch11ng/xelb")
     (synopsis "X protocol Emacs Lisp binding")
     (description "@code{emacs-xelb} is a pure Emacs Lisp implementation of the
@@ -14279,10 +14102,9 @@ It should enable you to implement low-level X11 applications.")
         (base32 "03pg0r8a5vb1wc5grmjgzql74p47fniv47x39gdll5s3cq0haf6q"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-xelb" ,emacs-xelb)))
+     (list emacs-xelb))
     (inputs
-     `(("xhost" ,xhost)
-       ("dbus" ,dbus)))
+     (list xhost dbus))
     ;; The following functions and variables needed by emacs-exwm are
     ;; not included in emacs-minimal:
     ;; scroll-bar-mode, fringe-mode
@@ -14312,10 +14134,10 @@ It should enable you to implement low-level X11 applications.")
                    (format #t "#!~a ~@
                      ~a +SI:localuser:$USER ~@
                      exec ~a --exit-with-session ~a \"$@\" --eval '~s' ~%"
-                           (string-append (assoc-ref inputs "bash") "/bin/sh")
-                           (string-append (assoc-ref inputs "xhost") "/bin/xhost")
-                           (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch")
-                           (string-append (assoc-ref inputs "emacs") "/bin/emacs")
+                           (search-input-file inputs "/bin/sh")
+                           (search-input-file inputs "/bin/xhost")
+                           (search-input-file inputs "/bin/dbus-launch")
+                           (search-input-file inputs "/bin/emacs")
                            '(cond
                              ((file-exists-p "~/.exwm")
                               (load-file "~/.exwm"))
@@ -14347,7 +14169,7 @@ of XELB.")
     (name "emacs-exwm-no-x-toolkit")
     (synopsis "Emacs X window manager (without an X toolkit)")
     (propagated-inputs
-     `(("emacs-xelb-no-x-toolkit" ,emacs-xelb-no-x-toolkit)))
+     (list emacs-xelb-no-x-toolkit))
     (arguments
      (substitute-keyword-arguments (package-arguments emacs-exwm)
        ((#:emacs emacs) `,emacs-no-x-toolkit)))))
@@ -14391,13 +14213,9 @@ other operations.")
          "0h248mma7kky30jr9bbhmp95wchl2cx5p6kh0gxmzpbc247dn2cc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)
-       ("emacs-exwm" ,emacs-exwm)
-       ("emacs-switch-window" ,emacs-switch-window)
-       ("emacs-use-package" ,emacs-use-package)))
+     (list emacs-counsel emacs-exwm emacs-switch-window emacs-use-package))
     (inputs
-     `(("xhost" ,xhost)
-       ("dbus" ,dbus)))
+     (list xhost dbus))
     ;; Need emacs instead of emacs-minimal,
     ;; for emacs's bin path will be inserted into bin/exwm-x file.
     (arguments
@@ -14428,10 +14246,10 @@ other operations.")
                    (format #t "#!~a ~@
                      ~a +SI:localuser:$USER ~@
                      exec ~a --exit-with-session ~a \"$@\" --eval '~s' ~%"
-                           (string-append (assoc-ref inputs "bash") "/bin/sh")
-                           (string-append (assoc-ref inputs "xhost") "/bin/xhost")
-                           (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch")
-                           (string-append (assoc-ref inputs "emacs") "/bin/emacs")
+                           (search-input-file inputs "/bin/sh")
+                           (search-input-file inputs "/bin/xhost")
+                           (search-input-file inputs "/bin/dbus-launch")
+                           (search-input-file inputs "/bin/emacs")
                            '(require 'exwmx-loader))))
                (chmod exwm-executable #o555)
                #t))))))
@@ -14462,8 +14280,7 @@ on mouse-control.")
                          "defvar gnugo-xpms #'gnugo-imgen-create-xpms"))
                       #t)))))
     (propagated-inputs
-     `(("emacs-ascii-art-to-unicode" ,emacs-ascii-art-to-unicode)
-       ("emacs-xpm" ,emacs-xpm)))
+     (list emacs-ascii-art-to-unicode emacs-xpm))
     (home-page "https://elpa.gnu.org/packages/gnugo.html")
     (synopsis "Emacs major mode for playing GNU Go")
     (description "This package provides an Emacs based interface for GNU Go.
@@ -14547,7 +14364,7 @@ pressed simultaneously or a single key quickly pressed twice.")
         (base32 "1gfgmr4909m36gknprcam6q4rkcqfbi6w43ky7x6jnlmgb6mxggg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "test")))
@@ -14572,7 +14389,7 @@ addition of surrounding pairs, such as parentheses and quotes, in evil mode.")
         (base32 "1l8zi9wlg1f7ffm8gh92qwk3q7h6cdl8b8zkd9hcda53mq6klpjr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (home-page "https://github.com/linktohack/evil-commentary")
     (synopsis "Comment out code in evil mode")
     (description "@code{emacs-evil-commentary} adds keybindings to easily
@@ -14599,8 +14416,7 @@ lines, and @code{gc} to comment out the target of a motion.")
           (base32 "051v8dmji90chwbsyqsqry7h35mksal2j6rgw1kpmjsni86d79y1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/rejeep/ansi.el")
       (synopsis "Convert strings to ANSI")
       (description "@code{emacs-ansi} defines functions that turns simple
@@ -14626,9 +14442,7 @@ as bold, underscore or italic.")
         (base32 "1j6hhyzww7wfwk6bllbb5mk4hw4qs8hsgfbfdifsam9c6i4spm45"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-s))
     (home-page "https://github.com/rejeep/commander.el")
     (synopsis "Emacs command line parser")
     (description "@code{emacs-commander} provides command line parsing for
@@ -14648,9 +14462,7 @@ Emacs.")
         (base32 "1zvs144hxq2mmq1h0ynx9hy7yyccb46f3pjg9mgq8v9cw5y678vk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-eldoc" ,emacs-eldoc)
-       ("emacs-jsonrpc" ,emacs-jsonrpc)
-       ("emacs-project" ,emacs-project)))
+     (list emacs-eldoc emacs-jsonrpc emacs-project))
     (home-page "https://github.com/joaotavora/eglot")
     (synopsis "Client for Language Server Protocol (LSP) servers")
     (description
@@ -14702,12 +14514,12 @@ variable instead, to remind you of that variable's meaning.")
 	 "08gygn9fjank5gpi4v6ynrkn0jbknxbwsn7md4p9ndygdbmnkf98"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-ansi" ,emacs-ansi)
-       ("emacs-commander" ,emacs-commander)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-ansi
+           emacs-commander
+           emacs-dash
+           emacs-f
+           emacs-s
+           emacs-shut-up))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -14794,7 +14606,7 @@ running a customisable handler command (@code{ignore} by default). ")
        (patches (search-patches "emacs-json-reformat-fix-tests.patch"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-undercover" ,emacs-undercover)))
+     (list emacs-undercover))
     (native-inputs
      `(("emacs-dash" ,emacs-dash)
        ("emacs-shut-up" ,emacs-shut-up)
@@ -14859,8 +14671,7 @@ a @url{http://json.org/, JSON} file.")
         (base32 "0r0k56q58kb133l9x9nbisz9p2kbphfgw1l4g2xp0pjqsc9wvq8z"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-json-reformat" ,emacs-json-reformat)
-       ("emacs-json-snatcher" ,emacs-json-snatcher)))
+     (list emacs-json-reformat emacs-json-snatcher))
     (home-page "https://github.com/joshwnj/json-mode")
     (synopsis "Major mode for editing JSON files")
     (description "@code{json-mode} extends the builtin js-mode syntax
@@ -14904,7 +14715,7 @@ JSON objects.")
          "14nxfa91yg2243v4d5kvynp2645x3811ispmhmpgil3x9qbl9jg9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/tminor/jsonnet-mode")
     (synopsis "Major mode for editing jsonnet files")
     (description "This package provides syntax highlighting, indenting,
@@ -14930,8 +14741,7 @@ formatting, and utility methods for jsonnet files.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-jq-mode" ,emacs-jq-mode)))
+       (list emacs-helm emacs-jq-mode))
       (home-page "https://github.com/pashky/restclient.el")
       (synopsis "Explore and test HTTP REST webservices")
       (description
@@ -15015,7 +14825,7 @@ whitespace in the buffer was initially clean.")
                     (string-append imagemagick "/bin/mogrify"))))
                #t)))))
       (inputs
-       `(("imagemagick" ,imagemagick)))
+       (list imagemagick))
       (home-page "https://github.com/nicferrier/eimp")
       (synopsis "Interactive image manipulation utility for Emacs")
       (description "@code{emacs-eimp} allows interactive image manipulation
@@ -15040,10 +14850,7 @@ the actual transformations.")
                   "12m81a9kjhs4cyq3lym0vp5nx6z3sfnypyzrnia76x6rjvixjf6y"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-eimp" ,emacs-eimp)
-         ("emacs-f" ,emacs-f)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-eimp emacs-f emacs-s))
       (home-page "https://github.com/Fuco1/dired-hacks")
       (synopsis
        "Collection of useful dired additions")
@@ -15083,7 +14890,7 @@ additions:
         (base32 "090dqaqyjmkzrz4szjpk1iip0bdvb0frp4l79393f8ki8w7c16c1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dired-subtree" ,emacs-dired-hacks)))
+     (list emacs-dired-hacks))
     (synopsis "Sidebar for Emacs using Dired")
     (description
      "This package provides a sidebar for Emacs similar to @code{NeoTree}
@@ -15135,7 +14942,7 @@ settings).")
         (base32 "1rp37rhkj8jm07dwr74vc68dhrbvyvrxjdavpb0h073ps9vl9dsc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-which-key" ,emacs-which-key)))
+     (list emacs-which-key))
     (home-page "https://gitlab.com/jjzmajic/hercules.el")
     (synopsis "Call a chain of related commands without repeated prefix keys")
     (description
@@ -15213,8 +15020,7 @@ when browsing files with Dired.")
         (base32 "1w0lyz71dq8x28ira4hig1b70bqn1dr53w3k5dgch9szcf6xa86y"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-auctex" ,emacs-auctex)
-       ("emacs-org" ,emacs-org)))
+     (list emacs-auctex emacs-org))
     (home-page "https://github.com/et2010/org-edit-latex")
     (synopsis "Edit a LaTeX fragment just like editing a source block")
     (description
@@ -15259,7 +15065,7 @@ multiplexer.")
          (sha256
           (base32 "05kgxrps1s20im5hhq799nrs3615bvssm4r0ysgmwm203mmzsjgj"))))
       (build-system emacs-build-system)
-      (inputs `(("curl" ,curl)))
+      (inputs (list curl))
       (home-page "https://github.com/alphapapa/plz.el")
       (synopsis "HTTP library for Emacs")
       (description
@@ -15287,8 +15093,7 @@ library.")
       (arguments
        `(#:emacs ,emacs))               ;need libxml support
       (inputs
-       `(("emacs-plz" ,emacs-plz)
-         ("emacs-ts" ,emacs-ts)))
+       (list emacs-plz emacs-ts))
       (home-page "https://github.com/alphapapa/ement.el")
       (synopsis "Matrix client for Emacs")
       (description "Ement.el is a Matrix client for Emacs.")
@@ -15332,7 +15137,7 @@ editing RPM spec files.")
         (base32 "0mc55icihxqpf8b05990q1lc2nj2792wcgyr73xsiqx0963sjaj8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/jyp/lcr")
     (synopsis "Lightweight coroutines in Emacs Lisp")
     (description "This package provides macros that can translate code into
@@ -15355,10 +15160,7 @@ functions written in continuation-passing style.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-flycheck emacs-s))
     (home-page "https://github.com/jyp/attrap")
     (synopsis "Fix coding error at point")
     (description "This package provides a command to fix the Flycheck error
@@ -15380,7 +15182,7 @@ at point.")
         (base32 "04fnby2nblk8l70gv09asxkmnn53fh1pdfs77ix44npp99fyw8ix"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-popup" ,emacs-popup)))
+     (list emacs-popup))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch" "-l" "test/test.el"
@@ -15499,7 +15301,7 @@ buffer's environment.")
          "0nqqx4qlw75lmbn0v927sg3xyjkk86ihw1q3rdbbn59va41grds4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-inheritenv" ,emacs-inheritenv)))
+     (list emacs-inheritenv))
     (home-page "https://github.com/purcell/envrc")
     (synopsis "Support for Direnv which operates buffer-locally")
     (description
@@ -15562,7 +15364,7 @@ key.  Optionally, a mouse pop-up can be added by binding
            "1v8av6jza1j00ln75zjwaca0vmmv0fhhhi94p84rlfzgzykyb9g1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-prop-menu" ,emacs-prop-menu)))
+       (list emacs-prop-menu))
       (home-page
        "https://github.com/idris-hackers/idris-mode")
       (synopsis "Major mode for editing Idris code")
@@ -15586,8 +15388,7 @@ the latest versions of Idris 1.")
         (base32 "0bx4ns0jb0sqrjk1nsspvl3mhz3n12925azf7brlwb1vcgnji09v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-f emacs-s))
     (native-inputs
      `(("ert-runner" ,emacs-ert-runner)))
     (arguments
@@ -15644,7 +15445,7 @@ an elisp expression.")
          "00pc6lh35gj8vzcsn17fyazb9jsc4m6nr7cvb32w02isadv8qd3m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-magit" ,emacs-magit)))
+     (list emacs-magit))
     (home-page "https://github.com/alphapapa/taxy.el")
     (synopsis "Programmable taxonomical grouping for arbitrary objects")
     (description
@@ -15671,7 +15472,7 @@ groups.")
     (arguments
      `(#:include (cons "^data/" %default-include)))
     (propagated-inputs
-     `(("emacs-ht" ,emacs-ht)))
+     (list emacs-ht))
     (home-page "https://github.com/iqbalansari/emacs-emojify")
     (synopsis "Display emojis in Emacs")
     (description "This package displays emojis in Emacs similar to how Github,
@@ -15700,7 +15501,7 @@ well as Github-style emojis like @code{:smile:}.  It provides a minor mode
       (arguments
        `(#:include (cons "^recipes/" %default-include)))
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)))
+       (list emacs-ivy))
       (home-page "https://github.com/abo-abo/make-it-so")
       (synopsis "Transform files with Makefile recipes")
       (description "This package provides an interface for selecting from
@@ -15770,10 +15571,7 @@ included by default, and more can be readily added.")
          "0ylsn36zmrn8mds2z74vbyv7sd4699a4wicg4shrf2gd5bbsi72g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)
-       ("emacs-esxml" ,emacs-esxml)
-       ("emacs-s" ,emacs-s)
-       ("emacs-unidecode" ,emacs-unidecode)))
+     (list emacs-deferred emacs-esxml emacs-s emacs-unidecode))
     (home-page "https://gitlab.com/fvdbeek/emacs-pubmed")
     (synopsis "Interface to PubMed")
     (description "This package provides an Emacs interface to the PubMed
@@ -15891,11 +15689,11 @@ part, which includes creating tokens.")
                            (kill-sexp))
                    (basic-save-buffer))))))))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)))
+       (list emacs-buttercup))
       ;; In order to securely connect to an IRC server using TLS, Circe requires
       ;; the GnuTLS binary.
       (propagated-inputs
-       `(("gnutls" ,gnutls)))
+       (list gnutls))
       (home-page "https://github.com/jorgenschaefer/circe")
       (synopsis "Client for IRC in Emacs")
       (description "Circe is a Client for IRC in Emacs.  It integrates well with
@@ -15943,13 +15741,13 @@ through them using @key{C-c C-SPC}.")
            (add-before 'build 'set-HOME
              (lambda _ (setenv "HOME" "/tmp") #t)))))
       (propagated-inputs
-       `(("emacs-alert" ,emacs-alert)
-         ("emacs-emojify" ,emacs-emojify)
-         ("emacs-helm" ,emacs-helm)
-         ("emacs-request" ,emacs-request)
-         ("emacs-websocket" ,emacs-websocket)
-         ("emacs-oauth2" ,emacs-oauth2)
-         ("emacs-circe" ,emacs-circe)))
+       (list emacs-alert
+             emacs-emojify
+             emacs-helm
+             emacs-request
+             emacs-websocket
+             emacs-oauth2
+             emacs-circe))
       (home-page "https://github.com/yuya373/emacs-slack")
       (synopsis "Slack client for Emacs")
       (description "This package provides an Emacs client for the Slack
@@ -15978,7 +15776,7 @@ messaging service.")
            ;; HOME needs to exist for source compilation.
            (add-before 'build 'set-HOME
              (lambda _ (setenv "HOME" "/tmp") #t)))))
-      (propagated-inputs `(("emacs-slack" ,emacs-slack)))
+      (propagated-inputs (list emacs-slack))
       (home-page "https://github.com/yuya373/helm-slack")
       (synopsis "Helm extension for emacs-slack")
       (description "This package provides an helm extension for emacs-slack
@@ -15999,7 +15797,7 @@ Slack client.")
       (file-name (git-file-name name version))
       (sha256
        (base32 "11j2k3irixp47r2iglxdmjphahqhgnxg98n2xwagwzyq99lsamj4"))))
-   (inputs `(("bash" ,bash)))
+   (inputs (list bash))
    (build-system emacs-build-system)
    (arguments
     `(#:phases
@@ -16128,10 +15926,8 @@ literate programming tools for exporting, weaving and tangling.")
         (base32 "0f0yq6gmkp194nxk90ipprglf1xkmxrgz1rkgrhfslvxq4q2l81h"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ansible-doc" ,emacs-ansible-doc)
-       ("emacs-jinja2-mode" ,emacs-jinja2-mode)
-       ("emacs-polymode" ,emacs-polymode)
-       ("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-ansible-doc emacs-jinja2-mode emacs-polymode
+           emacs-yaml-mode))
     (properties '((upstream-name . "poly-ansible")))
     (home-page "https://gitlab.com/mavit/poly-ansible/")
     (synopsis "Polymode for Ansible - Jinja2 in YAML")
@@ -16155,8 +15951,7 @@ literate programming tools for exporting, weaving and tangling.")
         (base32 "1q4qq0ql08hxkdrd2aal03560k612my7bvnfpfij3g432hn0p7v6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-polymode" ,emacs-polymode)))
+     (list emacs-markdown-mode emacs-polymode))
     (properties '((upstream-name . "poly-markdown")))
     (synopsis "Polymode for Markdown mode")
     (description
@@ -16179,7 +15974,7 @@ files using the major mode corresponding to each block.")
         (base32 "1jl5h4nf10xd2gdlsxi6h2n3z5zh26ffcixn68xfp5q4zl34zk8p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-polymode" ,emacs-polymode)))
+     (list emacs-polymode))
     (home-page "https://github.com/polymode/poly-noweb")
     (synopsis "Polymode for noweb")
     (description
@@ -16226,7 +16021,7 @@ Microsoft PowerShell files.")
         (base32 "1srnwcsn2bh8gqzxixkhffk7gbnk66kd4dgvxbnps5nxqc6v0qhc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-polymode" ,emacs-polymode)))
+     (list emacs-polymode))
     (properties '((upstream-name . "poly-org")))
     (home-page "https://github.com/polymode/poly-org")
     (synopsis "Polymode definitions for Org mode buffers")
@@ -16251,8 +16046,7 @@ languages while remaining inside the primary Org buffer.")
         (base32 "1xif339wsc79hsab3l1nnwvy20jg7s1r4akfj4qqi6qxizfhmb52"))))
     (build-system copy-build-system)
     (inputs
-     `(("bash" ,bash)
-       ("emacs" ,emacs)))
+     (list bash emacs))
     (arguments
      `(#:install-plan
        '(("eless" "bin/")
@@ -16296,7 +16090,7 @@ Features:
         (base32 "0cxv1bmbnir59k778dip5mkjyqhbh10pk9b4ayvwpgiz25dlp4ss"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (home-page "https://github.com/redguardtoo/evil-matchit")
     (synopsis "Vim matchit ported into Emacs")
     (description
@@ -16319,8 +16113,7 @@ evil mode using @kbd{%}.  It is a port of @code{matchit} for Vim.")
         (base32 "1di4qz5fbrlwbg16c2j0m7y8zqfxw027qd7zqmc3rwk9znbhg7wl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-smartparens" ,emacs-smartparens)))
+     (list emacs-evil emacs-smartparens))
     (home-page "https://github.com/expez/evil-smartparens")
     (synopsis "Emacs Evil integration for Smartparens")
     (description "@code{emacs-evil-smartparens} is an Emacs minor mode which
@@ -16343,7 +16136,7 @@ emulates Vim features and provides Vim-like key bindings.")
         (base32 "1ja9ggj70wf0nmma4xnc1zdzg2crq9h1cv3cj7cgwjmllflgkfq7"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch"
@@ -16399,13 +16192,9 @@ supports multiple backends such as @code{vlc}, @code{mpg123},
      `(#:tests? #t
        #:test-command '("ert-runner")))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)
-       ("emacs-shut-up" ,emacs-shut-up)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-ert-runner emacs-undercover emacs-shut-up emacs-f))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/Groovy-Emacs-Modes/groovy-emacs-modes")
     (synopsis "Groovy related modes for Emacs")
     (description "This package provides @code{groovy-mode} for syntax
@@ -16429,7 +16218,7 @@ Grails project navigation with the grails mode.")
                  (base32
                   "0w38g88yykslg71xr99ff4vx1ffgy90b7xqvvdflr189gwk3avx1"))))
       (propagated-inputs
-       `(("emacs-groovy-modes" ,emacs-groovy-modes)))
+       (list emacs-groovy-modes))
       (build-system emacs-build-system)
       (home-page "https://github.com/john2x/jenkinsfile-mode/")
       (synopsis "Emacs major-mode for editing Jenkinsfile")
@@ -16456,7 +16245,7 @@ from @code{groovy-mode} for editing Jenkins declarative pipeline files.")
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner" "-L" "." "-L" "test")))
-      (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+      (native-inputs (list emacs-ert-runner))
       (home-page "https://github.com/Emacs-Kotlin-Mode-Maintainers/kotlin-mode")
       (synopsis "Major major-mode for editing Kotlin files")
       (description
@@ -16502,7 +16291,7 @@ from @code{groovy-mode} for editing Jenkins declarative pipeline files.")
         (base32 "0yiwq2gc4gdgfhaagpawhb7yrzc4fsnyb10w5d0q4whv64cj8555"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -16569,7 +16358,7 @@ Lisp.")
        ;; Byte-compiling the others Elisp files leads to build errors anyway.
        #:include (list "esxml.el" "esxml-query.el")))
     (propagated-inputs
-     `(("emacs-kv" ,emacs-kv)))
+     (list emacs-kv))
     (home-page "https://github.com/tali713/esxml/")
     (synopsis "SXML for EmacsLisp")
     (description "This is XML/XHTML done with S-Expressions in EmacsLisp.
@@ -16605,10 +16394,9 @@ the format.")
                 (string-append "\"" (which "unzip") "\"")))
              #t)))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-esxml" ,emacs-esxml)))
+     (list emacs-dash emacs-esxml))
     (inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://depp.brause.cc/nov.el/")
     (synopsis "Major mode for reading EPUBs in Emacs")
     (description "@code{nov.el} provides a major mode for reading EPUB
@@ -16645,8 +16433,7 @@ Features:
         (base32 "0lkisi1s7sn12nx8zh58qmsxwnk1rjwryj18wcbr148xqz3swg57"))))
     (build-system trivial-build-system)
     (inputs
-     `(("bash" ,bash)
-       ("perl" ,perl)))
+     (list bash perl))
     (arguments
      `(#:modules
        ((guix build utils))
@@ -16659,7 +16446,7 @@ Features:
          ;; Patch shebangs.
          (substitute* "epipe"
            (("/usr/bin/env bash")
-            (string-append (assoc-ref %build-inputs "bash") "/bin/bash")))
+            (search-input-file %build-inputs "/bin/bash")))
          (patch-shebang "epipe.pl"
                         (list (string-append (assoc-ref %build-inputs "perl")
                                              "/bin")))
@@ -16689,11 +16476,11 @@ the pipeline, featuring the support for running @code{emacsclient}.")
         (base32 "1sr007wsl2y6wqpzkmv3inbpwhvgdcb2nmqzgfg7w1awapi2r13p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company) ;optional
-       ("emacs-markdown-mode" ,emacs-markdown-mode) ;optional
-       ("emacs-simple-httpd" ,emacs-simple-httpd)
-       ("emacs-websocket" ,emacs-websocket)
-       ("emacs-zmq" ,emacs-zmq)))
+     (list emacs-company ;optional
+           emacs-markdown-mode ;optional
+           emacs-simple-httpd
+           emacs-websocket
+           emacs-zmq))
     (home-page "https://github.com/nnicandro/emacs-jupyter")
     (synopsis "Emacs interface to communicate with Jupyter kernels")
     (description "This package provides an Emacs interface to communicate with
@@ -16739,7 +16526,7 @@ highlighting and indentation support.")
         (base32 "05hn8kskx9lcgn7bzgam99c629zlryir2pickwrqndacjrqpdykx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-hcl-mode" ,emacs-hcl-mode)))
+     (list emacs-hcl-mode))
     (home-page "https://github.com/syohex/emacs-terraform-mode")
     (synopsis "Major mode for Terraform")
     (description
@@ -16787,8 +16574,7 @@ the same values you get in a terminal.")
         (base32 "06iw11z61fd0g4w3562k3smcmzaq3nivvvc6gzm8y8k5pcrqzdff"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-avy" ,emacs-avy)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-avy emacs-posframe))
     (home-page "https://github.com/clemera/frog-menu")
     (synopsis "Quickly pick items from ad hoc menus")
     (description
@@ -16814,9 +16600,7 @@ on which user-defined dispatch actions can act.")
            "1z00by8hiss1r2lwmzrl8pnz6jykia2849dqqm4l3z5rf6lwvc0f"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-frog-menu" ,emacs-frog-menu)
-         ("emacs-avy" ,emacs-avy)))
+       (list emacs-dash emacs-frog-menu emacs-avy))
       (home-page "https://github.com/waymondo/frog-jump-buffer")
       (synopsis "Jump to any Emacs buffer with minimal keystrokes")
       (description
@@ -16929,7 +16713,7 @@ used with SGML-like languages: XML, HTML, XHTML, XSL, etc.")
            "1s3b9bridl78hh1mxmdk9nqlmqhibbaxk0a1cixmsf23s06w8w6l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-undo-tree" ,emacs-undo-tree)))
+       (list emacs-undo-tree))
       (home-page "https://ergoemacs.github.io/")
       (synopsis "Emacs mode based on common modern interface and ergonomics")
       (description
@@ -16968,10 +16752,8 @@ close, copy, cut, paste, undo, redo.")
                (delete-file-recursively "src")
                (delete-file-recursively "tests"))))))
       (propagated-inputs
-       `(("emacs-auth-source-pass" ,emacs-auth-source-pass)
-         ("emacs-s" ,emacs-s)
-         ("emacs-with-editor" ,emacs-with-editor)
-         ("password-store" ,password-store)))
+       (list emacs-auth-source-pass emacs-s emacs-with-editor
+             password-store))
       (home-page "https://git.zx2c4.com/password-store/tree/contrib/emacs")
       (synopsis "Password store (pass) support for Emacs")
       (description
@@ -16994,8 +16776,7 @@ standard Unix password manager\").")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-password-store" ,emacs-password-store)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-password-store emacs-s))
     (home-page "https://github.com/volrath/password-store-otp.el")
     (synopsis
      "Interact with the @code{pass-otp} extension for @code{pass} from Emacs")
@@ -17048,8 +16829,7 @@ needed.")
         (base32 "0jc8j421mlflspg24jvrqc2n3y5n3cpk3hjy560il8g36xi1049p"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-password-store" ,emacs-password-store)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-password-store emacs-f))
     (home-page "https://github.com/NicolasPetton/pass")
     (synopsis "Major mode for @file{password-store.el}")
     (description "This is a major mode for managing password-store (pass)
@@ -17077,11 +16857,8 @@ and can be consulted and modified.")
           (base32 "0r0fymyai30jimm34z1cmav4wgij8ci6s1d9y7qigygfbbfrdsmj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-let-alist" ,emacs-let-alist)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-company emacs-dash emacs-flycheck emacs-let-alist
+             emacs-s))
       (home-page "https://github.com/purescript-emacs/psc-ide-emacs")
       (synopsis "Emacs integration for PureScript's psc-ide tool")
       (description
@@ -17114,8 +16891,7 @@ protocol for PureScript programming language.  It features:
         (base32 "0lw7fg4gqwj30r0l6k2ni36sxqkf65zf0d0z3rxnpwbxlf8dlkrr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-anzu" ,emacs-anzu)))
+     (list emacs-evil emacs-anzu))
     (home-page "https://github.com/syohex/emacs-evil-anzu")
     (synopsis "Anzu for evil-mode")
     (description "@code{anzu} provides a minor mode that displays the current
@@ -17224,8 +17000,7 @@ object has been freed.")
        ("mariadb-dev" ,mariadb "dev")
        ("postgresql" ,postgresql)))
     (propagated-inputs
-     `(("emacs-finalize" ,emacs-finalize)
-       ("emacs-pg" ,emacs-pg)))
+     (list emacs-finalize emacs-pg))
     (home-page "https://github.com/skeeto/emacsql")
     (synopsis "Emacs high-level SQL database front-end")
     (description "Any readable Lisp value can be stored as a value in EmacSQL,
@@ -17251,9 +17026,9 @@ object @code{nil} corresponds 1:1 with @code{NULL} in the database.")
     (native-inputs
      `(("ert-runner" ,emacs-ert-runner)))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (propagated-inputs
-     `(("emacs-emacsql" ,emacs-emacsql)))
+     (list emacs-emacsql))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "-Q" "--batch" "-L" "."
@@ -17289,7 +17064,7 @@ official @command{sqlite3} executable to access SQL database.")
          "1xa9rzyfm6bfskm2mfckd7jwmjwcraky7vsp7yyrnrqfksrl5na8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-emacsql" ,emacs-emacsql)))
+     (list emacs-emacsql))
     (home-page "https://github.com/emacscollective/closql")
     (synopsis "Store EIEIO objects using EmacSQL")
     (description
@@ -17316,8 +17091,7 @@ add any additional instance slots.")
          "0z9sz9ydfjzhawh4qip41h3vid1lslaf0h14hkjz9kx8fkrzib8a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-closql" ,emacs-closql)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-closql emacs-dash))
     (home-page "https://emacsmirror.net")
     (synopsis "Browse the Emacsmirror package database")
     (description "This package provides access to a local copy of the
@@ -17472,7 +17246,7 @@ text-mode (i.e. Org-mode).")
                 "1lh9f5dgdbwfyzxk6nsg1xwdjs8gc6p9mbyyhp6f8fnk3h0y88cg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-outorg" ,emacs-outorg)))
+     (list emacs-outorg))
     (home-page "https://github.com/alphapapa/outshine")
     (synopsis "Emacs outline with outshine")
     (description "Outshine attempts to bring the look and feel of
@@ -17500,8 +17274,7 @@ outline-mode), so there is no such thing like an outshine mode, only
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-a" ,emacs-a)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-a emacs-dash))
       (home-page "https://github.com/alphapapa/frecency.el")
       (synopsis "Sort items by frequency and recency of access")
       (description "This package provides a way of sorting items via
@@ -17525,11 +17298,7 @@ a heuristic based on frequency and recency.")
           (base32 "1y11rlnhi36lzhc1cagninv6hlcwbvj88xfr0g0xzpbzy7hys021"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-frecency" ,emacs-frecency)
-         ("emacs-helm" ,emacs-helm)
-         ("emacs-org" ,emacs-org)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-frecency emacs-helm emacs-org emacs-s))
       (home-page "https://github.com/alphapapa/org-recent-headings")
       (synopsis "Navigate to recently used Org headings and lists")
       (description
@@ -17572,11 +17341,7 @@ as well as functions for navigating between these headings.")
      `(("emacs-f" ,emacs-f)
        ("getopt" ,util-linux)))
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-ts" ,emacs-ts)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-org emacs-dash emacs-ts emacs-ht emacs-s))
     (home-page "https://github.com/alphapapa/org-super-agenda")
     (synopsis "Supercharged Org agenda")
     (description "This package allows items in the Org agenda to be grouped
@@ -17623,9 +17388,7 @@ work Nicolas Rougier.")
                 "180ji6nnj6qj0rs1rdp1zlcrfsqf7ikb44ym8icbp5d6al2s4hnr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-org emacs-dash emacs-s))
     (home-page "https://github.com/alphapapa/org-make-toc")
     (synopsis "Maintain a table of contents for an Org file")
     (description "This package facilitates the creation and maintenance of
@@ -17647,8 +17410,7 @@ tables of contents.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (arguments
      ;; XXX: Three tests are failing because of a timezone-related issue
      ;; with how they're written.  On my machine, all the failing test
@@ -17759,7 +17521,7 @@ according to a parsing expression grammar.")
                  (("export ELDEV_EMACS.*" all)
                   (string-append "export ELDEV_LOCAL=" site-lisp "\n" all)))))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))           ;for tests
+     (list texinfo))           ;for tests
     (home-page "https://github.com/doublep/eldev/")
     (synopsis "Emacs-based build tool for Elisp")
     (description "Eldev (Elisp Development Tool) is an Emacs-based build tool,
@@ -17791,10 +17553,9 @@ parallel to Gradle — its configuration is a program on its own.")
      `(#:tests? #f
        #:test-command '("buttercup" "-L" ".")))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-buttercup emacs-undercover))
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/with-simulated-input")
     (synopsis "Non-interactive testing Emacs library")
     (description "This package provides an Emacs Lisp macro,
@@ -17820,20 +17581,19 @@ interactive commands and functions, such as @code{completing-read}.")
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ov" ,emacs-ov)
-       ("emacs-peg" ,emacs-peg)
-       ("emacs-org-super-agenda" ,emacs-org-super-agenda)
-       ("emacs-ts" ,emacs-ts)
-       ("emacs-org" ,emacs-org)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-helm-org" ,emacs-helm-org)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-s
+           emacs-f
+           emacs-ov
+           emacs-peg
+           emacs-org-super-agenda
+           emacs-ts
+           emacs-org
+           emacs-helm
+           emacs-helm-org
+           emacs-dash
+           emacs-transient))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-with-simulated-input" ,emacs-with-simulated-input)))
+     (list emacs-buttercup emacs-with-simulated-input))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")
@@ -17891,8 +17651,7 @@ Chinese to English.")
                   "1my0c6xmkh37lwi6l472lz9d86lf20h6xcllzlxm1lxa24rhva6v"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-org emacs-dash))
       (home-page "https://github.com/alphapapa/org-auto-expand")
       (synopsis "Automatically expand certain Org headings")
       (description "This package allows a customizable set of headings in Org
@@ -17934,9 +17693,7 @@ files to be expanded upon opening them.")
         (base32 "0al846i1dn5wrx3r0ak63m80g9j9xk2q5cpcpk63lq0l0gfdff2m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-biblio" ,emacs-biblio)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-parsebib" ,emacs-parsebib)))
+     (list emacs-biblio emacs-ivy emacs-parsebib))
     (home-page "https://joostkremers.github.io/ebib/")
     (synopsis "BibTeX database manager for Emacs")
     (description
@@ -17966,8 +17723,7 @@ with (La)TeX mode, Org mode and other Emacs editing modes.")
         (base32 "1gxjind6r235az59dr8liv03d8994mqb8a7m28j3c12q7p70aziz"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-let-alist" ,emacs-let-alist)))
+     (list emacs-dash emacs-let-alist))
     (home-page "https://github.com/cpitclaudel/biblio.el")
     (synopsis "Browse and import bibliographic references")
     (description "This package provides an extensible Emacs package for
@@ -17993,10 +17749,7 @@ automatically fetched from well-curated sources, and formatted as BibTeX.")
         (base32 "15jhpl2j4rm97cvvqzlfzxarvxvcsg64raz068psrsd2y7y2zh4c"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-auctex" ,emacs-auctex)
-       ("emacs-org" ,emacs-org)
-       ("emacs-parsebib" ,emacs-parsebib)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-auctex emacs-org emacs-parsebib emacs-s))
     (home-page "https://github.com/bdarcus/citar")
     (synopsis "Emacs package to quickly find and act on bibliographic entries")
     (description
@@ -18030,13 +17783,13 @@ citations.")
           (base32 "1d3mc17ga09m41i06khghlvixr6gsiacifnhdbrfnp0w5592aprk"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-parsebib" ,emacs-parsebib)
-         ("emacs-s" ,emacs-s)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-biblio" ,emacs-biblio)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-helm
+             emacs-parsebib
+             emacs-s
+             emacs-dash
+             emacs-f
+             emacs-biblio
+             emacs-ivy))
       (home-page "https://github.com/tmalsburg/helm-bibtex")
       (synopsis "Bibliography manager based on Helm")
       (description "This package provides bibliography manager for Emacs,
@@ -18086,7 +17839,7 @@ arXiv, Google Scholar, Library of Congress, etc.
                (emacs-substitute-sexps file
                  ("(defcustom ewmctrl-wmctrl-path" (which "wmctrl")))))))))
     (inputs
-     `(("wmctrl" ,wmctrl)))
+     (list wmctrl))
     (home-page "https://github.com/flexibeast/ewmctrl")
     (synopsis "Emacs interface to @code{wmctrl}")
     (description "@code{ewmctrl} provides an Emacs interface to
@@ -18138,7 +17891,7 @@ and @code{erc-send-modify-hook} to download and show images.")
         (base32 "1kc1jzk10nfd2v20g8dwnb6a944afrwdwnkzl06w4ba8k4yim7gi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/syohex/emacs-helm-gtags")
     (synopsis "Emacs Helm interface to GNU Global")
     (description
@@ -18276,7 +18029,7 @@ orient yourself in the code, and tell which statements are at a given level.")
         (base32 "1kykbb1sil5cycfa5aj8dhsxc5yrx1641i2np5kwdjid6ahdlz5r"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -18324,11 +18077,8 @@ navigate and display hierarchy structures.")
                (base32
                 "1n6g6k4adzkkn1g7z4j27s35xy12c1fg2r08gv345ddr3wplq4ri"))))
     (propagated-inputs
-     `(("emacs-hierarchy" ,emacs-hierarchy)
-       ("emacs-request" ,emacs-request)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-tree-mode" ,emacs-tree-mode)))
+     (list emacs-hierarchy emacs-request emacs-dash emacs-s
+           emacs-tree-mode))
     (build-system emacs-build-system)
     (home-page "https://github.com/ahungry/md4rd")
     (synopsis "Emacs Mode for Reddit")
@@ -18363,7 +18113,7 @@ navigate and display hierarchy structures.")
                             ("pulseaudio-control-pactl-path"
                              (string-append pulseaudio "/bin/pactl")))
                           #t))))))
-      (inputs `(("pulseaudio" ,pulseaudio)))
+      (inputs (list pulseaudio))
       (home-page "https://github.com/flexibeast/pulseaudio-control")
       (synopsis "Control @code{pulseaudio} from Emacs")
       (description
@@ -18387,7 +18137,7 @@ navigate and display hierarchy structures.")
     (arguments
      `(#:include (cons "^[^/]*\\.extmap$" %default-include)))
     (inputs
-     `(("emacs-extmap" ,emacs-extmap)))
+     (list emacs-extmap))
     (home-page "https://github.com/doublep/datetime/")
     (synopsis "Library to work with dates in Emacs")
     (description "Parsing, formatting, matching and recoding
@@ -18411,7 +18161,7 @@ timestamps and date-time format strings library for Emacs.")
          (sha256
           (base32 "08sj43py6aid4vpqgsm0v5n94mcmcil0047qjk033492glz6q55c"))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (build-system emacs-build-system)
       (home-page "https://github.com/theodorewiles/org-mind-map")
       (synopsis "Create Graphviz directed graphs from Org files")
@@ -18478,8 +18228,7 @@ the tailed file.  It works locally or on remote files using Tramp.")
         (base32 "1gs95xnmnn8aa4794k7h8mw1sz1nfdh9v0caqj6yvnsdnwy74n5x"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -18505,15 +18254,14 @@ continue.")
         (base32 "0w7k91xf69zc0zkjrw8h8sjdjf9xq9qs5zhvajhd718lzf93564b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-list-utils" ,emacs-list-utils)
-       ("emacs-loop" ,emacs-loop)
-       ("emacs-s" ,emacs-s)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-dash
+           emacs-f
+           emacs-list-utils
+           emacs-loop
+           emacs-s
+           emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")
@@ -18604,7 +18352,7 @@ mode.")
            ;; Elisp directory is not in root of the source.
            (lambda _
              (chdir "servers"))))))
-    (propagated-inputs `(("emacs-ert-async" ,emacs-ert-async)))
+    (propagated-inputs (list emacs-ert-async))
     (home-page "https://github.com/stsquad/emacs_chrome")
     (synopsis "Server that responds to edit requests from Chromium")
     (description
@@ -18677,11 +18425,9 @@ macro takes a first argument (whose value must be an alist) and a body.")
            "01khb3xyj0ylwib6ryzzvqmkh5wvzxiq2n3l0s3h9zv7wx849bzv"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-noflet" ,emacs-noflet)
-         ("emacs-undercover" ,emacs-undercover)
-         ("emacs-buttercup" ,emacs-buttercup)))
+       (list emacs-noflet emacs-undercover emacs-buttercup))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -18907,10 +18653,7 @@ until the top-level form is no longer a macro call.")
            "0ny2dcc7c585p7v3j6q0rpkbj1qmf2ismy8a5020jpr585xvz0hh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)
-         ("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)
-         ("emacs-lua-mode" ,emacs-lua-mode)))
+       (list emacs-company emacs-s emacs-f emacs-lua-mode))
       (arguments
        `(#:include (cons* "^lua\\/" %default-include)))
       (home-page "https://github.com/ptrv/company-lua")
@@ -18935,7 +18678,7 @@ until the top-level form is no longer a macro call.")
     ;; TODO: Run tests.
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-undercover" ,emacs-undercover))) ; For tests.
+     (list emacs-undercover)) ; For tests.
     (home-page "https://github.com/DamienCassou/beginend")
     (synopsis "Redefine @code{M-<} and @code{M->} for Emacs modes")
     (description "@code{beginend} redefines @code{M-<} and @code{M->}
@@ -18983,7 +18726,7 @@ within Emacs.")
          "18cqxnwzzbkcj9jcaw89b210432yzhrl1dwsv48p0jbhfnr17k41"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-projectile" ,emacs-projectile)))
+     (list emacs-projectile))
     (home-page "https://github.com/purcell/ibuffer-projectile")
     (synopsis "Group ibuffer's list by projectile root")
     (description "Adds functionality to Emacs @code{ibuffer} for
@@ -19027,10 +18770,7 @@ by the status of listed files.")
        (sha256
         (base32 "0iwk4fmw8hq3ry4ky1zc7lgl4cpbnrjyk74c2xzddfspi3ks41fd"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-reformatter" ,emacs-reformatter)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-reformatter emacs-s))
     (build-system emacs-build-system)
     (home-page "https://github.com/jcollard/elm-mode")
     (synopsis "Emacs major mode for editing Elm source code")
@@ -19067,7 +18807,7 @@ working with common core and third-party Elm tools.  Its features are:
          "1srx5f0s9x7zan7ayqd6scxfhcvr3nkd4yzs96hphd87rb18apzk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/istib/helm-mode-manager/")
     (synopsis "Switch and toggle Emacs major and minor modes using Helm")
     (description "This package provides a Helm interface for toggling Emacs
@@ -19098,8 +18838,7 @@ documentation.")
         (base32 "0gihxlmfminadaqdr8d2zccd7wwygl3m0gfzxsk5izi7f8hl4w7f"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/hylang/hy-mode")
     (synopsis "Major mode for Hylang")
     (description "This package provides a major mode for Hylang.")
@@ -19153,7 +18892,7 @@ CSS, JavaScript, JSON.")
                     `(expand-file-name "~/.bash_history"))))
                #t)))))
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (home-page "https://github.com/yuutayamada/helm-shell-history")
       (synopsis "Find shell history with Emacs Helm")
       (description "This package provides an Emacs Helm interface to search
@@ -19176,7 +18915,7 @@ throw a shell history.")
          "1wlqyl03hhnflbyay3qlvdzqzvv5rbybcjpfddggda7ias9h0pr4"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-makey" ,emacs-makey)))
+     (list emacs-makey))
     (home-page "https://framagit.org/steckerhalter/discover-my-major/")
     (synopsis "Discover key bindings for the current Emacs major mode")
     (description "This package discovers key bindings and
@@ -19198,16 +18937,16 @@ their meaning for the current Emacs major-mode.")
         (base32 "0xd1qp8dfy8n8b2n3rsdzm8vrfl7dii142kw330s8jp3pavww1f6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-helm" ,emacs-helm)
-       ("emacs-helm-bibtex" ,emacs-helm-bibtex)
-       ("emacs-htmlize" ,emacs-htmlize)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-key-chord" ,emacs-key-chord)
-       ("emacs-pdf-tools" ,emacs-pdf-tools)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash
+           emacs-f
+           emacs-helm
+           emacs-helm-bibtex
+           emacs-htmlize
+           emacs-hydra
+           emacs-ivy
+           emacs-key-chord
+           emacs-pdf-tools
+           emacs-s))
     (home-page "https://github.com/jkitchin/org-ref")
     (synopsis "Citations, cross-references and bibliographies in Org mode")
     (description
@@ -19268,8 +19007,7 @@ powerful Org contents.")
         (base32 "0j7394zcbzqfk33g2xdyb3fmw3brxy8v66vvf1j9nqlskfddh7bn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-htmlize" ,emacs-htmlize)
-       ("emacs-org" ,emacs-org)))
+     (list emacs-htmlize emacs-org))
     (home-page "https://gitlab.com/oer/org-re-reveal")
     (synopsis "Build HTML presentations with reveal.js from Org source files")
     (description "This project started as fork of org-reveal.  It provides an
@@ -19417,8 +19155,7 @@ regions which @code{hideshow} can hide.")
            "0jj5spk14hgb7zb1cd2n8whcw4k1kd5zb6llwj96v178yaws7l8k"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-outshine" ,emacs-outshine)
-         ("emacs-outorg" ,emacs-outorg)))
+       (list emacs-outshine emacs-outorg))
       (home-page "https://github.com/alphapapa/navi")
       (synopsis "Emacs major-mode for easy buffer-navigation")
       (description
@@ -19464,14 +19201,9 @@ downloading manager for Emacs.")
         (base32 "0gdjxykqkal2x765mi51m99i5ql23i1fy909wy4mzj5ajhjfgqcc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elisp-refs" ,emacs-elisp-refs)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-elisp-refs emacs-dash emacs-s emacs-f emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -19512,8 +19244,7 @@ and doesn't require memorisation of commands.
        (sha256
         (base32 "1cchmr25z5zj7rgb2fyxkaq8kpw7i5yg1pvn42dvm09c2wrfbj46"))))
     (propagated-inputs
-     `(("emacs-datetime" ,emacs-datetime)
-       ("emacs-extmap" ,emacs-extmap)))
+     (list emacs-datetime emacs-extmap))
     (build-system emacs-build-system)
     (home-page "https://github.com/doublep/logview/")
     (synopsis "Emacs mode for viewing log files")
@@ -19537,15 +19268,14 @@ and doesn't require memorisation of commands.
          "01v8plska5d3g19sb1m4ph1i3ayprfzk8mi6mpabjy6zad397xjl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-loop" ,emacs-loop)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-f" ,emacs-f)
-       ("emacs-spinner" ,emacs-spinner)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-loop
+           emacs-dash
+           emacs-s
+           emacs-f
+           emacs-spinner
+           emacs-shut-up))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -19590,7 +19320,7 @@ time is being spent during Emacs startup in order to optimize startup time.")
         (base32 "1q4kcr2ha2kir7pj0cshmgllgq51543syxkkk5jk3ksfiaba4crj"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-magit" ,emacs-magit)))
+     (list emacs-magit))
     (home-page "https://github.com/terranpro/magit-gerrit")
     (synopsis "Magit extension for Gerrit")
     (description "This Magit extension provides integration with Gerrit,
@@ -19613,7 +19343,7 @@ Emacs.")
         (base32
          "07r5x256k1fjjxs1yfg41kc94nwvnjlk2vvknkra3j8v9p0j88m7"))))
     (propagated-inputs
-     `(("magit" ,emacs-magit)))
+     (list emacs-magit))
     (build-system emacs-build-system)
     (home-page "https://github.com/danielma/magit-org-todos.el")
     (synopsis "Get todo.org into Emacs Magit status")
@@ -19663,7 +19393,7 @@ Magit.")
         (base32 "1qg48zbjdjqimw4516ymrsilz41zkib9321q0caf9474s9xyp2bi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/cosmicexplorer/f3")
     (synopsis "Fantastic File Finder for Emacs")
     (description
@@ -19730,9 +19460,7 @@ Magit.")
            "0qfzsq8jh05w4zkr0cvq3i1hdn97bq344vcqjg46sib26x3wpz6r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-ht" ,emacs-ht)))
+       (list emacs-dash emacs-s emacs-ht))
       (home-page "https://github.com/nashamri/academic-phrases")
       (synopsis "Bypass that mental block when writing your papers")
       (description
@@ -19767,7 +19495,7 @@ browse the phrases by the paper section and fill-in the blanks if required.")
        '(#:tests? #t
          #:test-command '("make" "test")))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/abo-abo/auto-yasnippet/")
       (synopsis "Quickly create disposable yasnippets")
       (description "This package provides a hybrid of keyboard macros and
@@ -19792,7 +19520,7 @@ yasnippet fields and mirrors to be.")
         (base32 "1r07mpyr7rhd7bkg778hx6vbhb4n9ixgzkpszhgks7ri6ia38pj8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-parent-mode" ,emacs-parent-mode)))
+     (list emacs-parent-mode))
     (home-page "https://github.com/Fanael/highlight-numbers")
     (synopsis "Highlight numbers in source code")
     (description "@code{highlight-numbers-mode} provides a minor mode for
@@ -19959,9 +19687,7 @@ perform regression test for packages that provide font-lock rules.")
       (arguments
        `(#:include '("\\.el$" "\\.rkt$")))
       (propagated-inputs
-       `(("emacs-faceup" ,emacs-faceup)
-         ("emacs-pos-tip" ,emacs-pos-tip)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-faceup emacs-pos-tip emacs-s))
       (home-page "https://www.racket-mode.com/")
       (synopsis "Major mode for the Racket language")
       (description "@code{racket-mode} provides:
@@ -19991,7 +19717,7 @@ perform regression test for packages that provide font-lock rules.")
            "00q7l4a3c0ay6g5ff9bfa2qgkiswsyh4s6pqnpg0zpzhvv5710f5"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/mkcms/grep-context")
       (synopsis "Increase context in compilation and grep buffers")
       (description
@@ -20015,7 +19741,7 @@ compilation/grep buffers.  Works with @code{wgrep}, @code{ack}, @code{ag},
         (base32
          "08mjsi2f9s29fkk35cj1rrparjnkm836qmbfdwdz7y51f9varjbs"))))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacs-helm/helm-firefox")
     (synopsis "Display firefox bookmarks with Emacs Helm interface")
@@ -20099,9 +19825,7 @@ macros, faces and variables.  To enable call @code{highlight-defined-mode}. ")
        (sha256
         (base32 "0v97ncb0w1slb0x8861l3yr1kqz6fgw1fwl1z9lz6hh8p2ih34sk"))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-rainbow-delimiters" ,emacs-rainbow-delimiters)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-dash emacs-rainbow-delimiters emacs-company))
     (build-system emacs-build-system)
     (home-page "https://github.com/DogLooksGood/parinfer-mode/")
     (synopsis "Lisp structure editing mode")
@@ -20124,7 +19848,7 @@ keep Parens and Indentation inline with one another.")
                (base32
                 "0hpq1h0p69c9k6hkd2mjpprx213sc5475q7pr2zpmwrjdzgcv70z"))))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacs-helm/helm-eww/")
     (synopsis "Helm interface to EWW")
@@ -20298,7 +20022,7 @@ Emacs minor mode to escape sequences in code.")
         (base32 "1qv4cqjy2s2d2bysbq10vq1axpbd8qc3jn1s1r81lxqkcja8zasa"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-page-break-lines" ,emacs-page-break-lines)))
+     (list emacs-page-break-lines))
     (arguments
      '(#:include '("\\.el$" "\\.txt$" "\\.png$")
        #:phases
@@ -20332,8 +20056,7 @@ sections for bookmarks, projectil projects, org-agenda and more. ")
         (base32 "05dnnc4ms5c9yp9h65k2gbkg3pw9k38nx5wzlwdlfr4shqmw54w0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-slime" ,emacs-slime)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-slime emacs-company))
     (home-page "https://company-mode.github.io")
     (synopsis "SLIME completion backend for @code{company-mode}")
     (description
@@ -20425,8 +20148,7 @@ scroll up to read the function name and then scroll down to original position.")
         (base32 "0gpib57f7xza04g3iyihw5v15hb7pncqsmvyggib902yvcxlkvqf"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("git" ,git)))
+     (list emacs-buttercup git))
     (arguments
      `(#:tests? #t
        #:test-command '("buttercup" "-L" ".")))
@@ -20477,9 +20199,7 @@ on drag distance.")
         (base32 "0yp0hlrgcr6yy1xkjvfckys2k24x9xg7y6336ma61bdwn5lpv0x0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-know-your-http-well" ,emacs-know-your-http-well)
-       ("emacs-restclient" ,emacs-restclient)))
+     (list emacs-company emacs-know-your-http-well emacs-restclient))
     (home-page "https://github.com/iquiw/company-restclient")
     (synopsis "Company-mode completion back-end for restclient-mode")
     (description "@code{company-mode} back-end for
@@ -20519,7 +20239,7 @@ It provides auto-completion for HTTP methods and headers in
                  ((";;; Code:") ";;; Code:\n(require 'dash)"))
                #t)))))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/nicferrier/emacs-noflet")
       (synopsis "Locally override functions")
       (description "@code{emacs-noflet} lets you locally override functions,
@@ -20558,8 +20278,7 @@ through the symbol: @command{this-fn}.")
        ("emacs-undercover" ,emacs-undercover)
        ("ert-runner" ,emacs-ert-runner)))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-f emacs-popup))
     (home-page "https://github.com/jacktasia/dumb-jump")
     (synopsis "Jump to definition for multiple languages without configuration")
     (description "Dumb Jump is an Emacs \"jump to definition\" package with
@@ -20723,7 +20442,7 @@ matching regexps.")
         (base32
          "0l2nnlr3b6df1xn0qjf5d5ryy1wcs1jczyfy795vsasd5gm3g0xh"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-company" ,emacs-company)))
+    (propagated-inputs (list emacs-company))
     (home-page "https://github.com/dieggsy/esh-autosuggest")
     (synopsis "Fish-like autosuggestions in Eshell")
     (description
@@ -20782,7 +20501,7 @@ be changed by customizing the appropriate variables.")
        ;; Tests require to have two specific calendars on a test server.
        `(#:exclude '("^org-caldav-testsuite\\.el")))
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)))
+       (list emacs-org))
       (home-page "https://github.com/dengste/org-caldav")
       (synopsis "Sync Org files with external calendars via the CalDAV protocol")
       (description
@@ -20805,8 +20524,7 @@ calendar.")
         (base32 "1zr67h0w49rsi84mgf6jdili28h8782q6vjl8za0iq1hcx9zqxyf"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-deferred" ,emacs-deferred)
-       ("emacs-request" ,emacs-request)))
+     (list emacs-deferred emacs-request))
     (home-page "https://github.com/egh/zotxt-emacs")
     (synopsis "Integrate Emacs with Zotero")
     (description "This package provides two integration features between Emacs
@@ -20829,10 +20547,9 @@ Org-mode file, and citations of Zotero items in Pandoc Markdown files.")
         (base32 "08ycwss58zh2zikk79jfj074q78yjcd7vbjgv5ssqvws09x5rgfq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)
-       ("emacs-iedit" ,emacs-iedit)))
+     (list emacs-evil emacs-iedit))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -20870,9 +20587,9 @@ defaults.")
           (base32 "0p83p90faq1p02lmsfs7zrnky3cyzgy8z4m83a81r9kakjzhkrnb"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (native-inputs
-       `(("emacs-espuds" ,emacs-espuds)))
+       (list emacs-espuds))
       (home-page "https://github.com/gabesoft/evil-mc")
       (synopsis "Interactive search compatible with @code{multiple-cursors}")
       (description "This package can be used with @code{multiple-cursors} to
@@ -20895,7 +20612,7 @@ provide an incremental search that moves all fake cursors in sync.")
           (base32
            "1fxxfkinb0gq4p5b686r7z4jrkv98zfgh5z889zkjacncv8ibswn"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+      (propagated-inputs (list emacs-evil))
       (home-page
        "https://github.com/Somelauw/evil-org-mode")
       (synopsis "Evil keybindings for Org mode")
@@ -20929,7 +20646,7 @@ Org-mode.  It features:
          "1wi70r56pd5z0x4dp4m58p9asq03j74kdm4fi9vai83vsl2z9amq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-xml-rpc" ,emacs-xml-rpc)))
+     (list emacs-xml-rpc))
     (synopsis "Manipulate pastes from the Debian Pastezone")
     (description "Debpaste is an Emacs interface for the Debian Pastezone,
 allowing you to receive, post, and delete pastes.  It communicates with the
@@ -20995,7 +20712,7 @@ cohesion with the Emacs Way.")
         (base32
          "17lqip1i1rrsvxzz4bx9rqf1fvwd3hriwg3sj6qxmfc8pylnp37q"))))
     (build-system emacs-build-system)
-    (inputs `(("fish" ,fish)))
+    (inputs (list fish))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -21046,9 +20763,7 @@ try completing.  See @code{fish-completion-fallback-on-bash-p}.")
          "1yf6yipvhhna29mzaan5vb3d5qvbrkp2awr5diyf381mvxgk8akh"))))
     (build-system emacs-build-system)
     (inputs
-     `(("scrot" ,scrot)
-       ("imagemagick" ,imagemagick)
-       ("gifsicle" ,gifsicle)))
+     (list scrot imagemagick gifsicle))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -21118,10 +20833,9 @@ on-line service.")
          "1ci37w6ahnqrfpb284gjvxmimlf61sdxb9k192yy9q983cksv2hx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-company" ,emacs-company)))
+     (list emacs-helm emacs-company))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)))
+     (list emacs-ert-runner))
     (arguments
      `(#:tests? #t
        #:test-command '("ert-runner")))
@@ -21148,7 +20862,7 @@ framework.")
           (base32
            "1n89p56qwa243w1c85i5awnaf7piwjsvfi7nmnsrwm33hix5dknk"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-helm" ,emacs-helm)))
+      (propagated-inputs (list emacs-helm))
       (home-page "https://github.com/emacs-helm/helm-descbinds")
       (synopsis "Convenient @code{describe-bindings} with Helm")
       (description
@@ -21177,8 +20891,7 @@ you searched for and execute it, or view its documentation.")
            "0r1ai6xhzayyik30w2sx9n62bxxwm12vfmjspv0daqif9az8y3vg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-emms" ,emacs-emms)))
+       (list emacs-helm emacs-emms))
       (home-page
        "https://github.com/emacs-helm/helm-emms")
       (synopsis "Emms for Helm")
@@ -21201,8 +20914,7 @@ from @code{emms-source-file-default-directory}.")
         (base32 "0g4k01ps14bp2az8v6dcag9llg045k2b4kdis81xx4lvw76znr9v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-exwm" ,emacs-exwm)))
+     (list emacs-helm emacs-exwm))
     (home-page
      "https://github.com/emacs-helm/helm-exwm")
     (synopsis "Helm for EXWM buffers")
@@ -21230,9 +20942,7 @@ See @code{helm-exwm-switch-browser} for an example.")
            "1a2yfxhz04klwhcandqvfzysxp6b7bxyxx1xk1x3kds5hif5fkl4"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-helm" ,emacs-helm)))
+       (list emacs-dash emacs-flycheck emacs-helm))
       (home-page "https://github.com/yasuyk/helm-flycheck")
       (synopsis "Show Flycheck errors with Helm")
       (description
@@ -21253,7 +20963,7 @@ See @code{helm-exwm-switch-browser} for an example.")
        (sha256
         (base32 "1bqk0z6zd3aza7ibb8h0ghya5kid4m6z01gs7jf4sr6p49rzp7hd"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-helm" ,emacs-helm)))
+    (propagated-inputs (list emacs-helm))
     (home-page "https://github.com/emacs-helm/helm-ls-git")
     (synopsis "Helm interface for listing the files in a Git repository")
     (description
@@ -21290,8 +21000,7 @@ projects unrelated to current-buffer.
           (base32 "1lh0ahxdc5b2z18m9p30gwg8sbg33sjwkjr38p7h5xsm5fm7i0fz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("mu" ,mu)))
+       (list emacs-helm mu))
       (home-page
        "https://github.com/emacs-helm/helm-mu")
       (synopsis
@@ -21320,8 +21029,7 @@ e.g: @code{from:Peter to:Anne flag:attach search term}.")
          "19w24isddzamkikq17vbv3y7ha22i7wc09d2nqw1j0qwhrrfkng9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-password-store" ,emacs-password-store)))
+     (list emacs-helm emacs-password-store))
     (home-page "https://github.com/emacs-helm/helm-pass")
     (synopsis "Helm interface to pass, the standard Unix password manager")
     (description
@@ -21351,7 +21059,7 @@ provided by other Emacs packages dealing with pass:
           (base32
            "0v66wk9nh0raih4jhrzmmyi5lbysjnmbv791vm2230ffi2hmwxnd"))))
       (build-system emacs-build-system)
-      (inputs `(("imagemagick" ,imagemagick)))
+      (inputs (list imagemagick))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -21446,7 +21154,7 @@ package recipes.")
         (base32 "0wrqmpfcqp87dr5blpskf9kvm9slvffldqfxx77n15gcw516zzc8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-packed" ,emacs-packed)))
+     (list emacs-packed))
     (home-page "https://gitlab.com/lilyp/emacs-dpd")
     (synopsis "Deliver packages to package.el")
     (description
@@ -21508,7 +21216,7 @@ feeding them to package.el library.")
            "080s96jkcw2p288sp1vgds91rgl693iz6hi2dv56p2ih0nnivwlg"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("mu" ,mu)))
+       (list mu))
       (home-page
        "https://gitlab.com/Ambrevar/mu4e-conversation")
       (synopsis
@@ -21539,7 +21247,7 @@ maps the thread tree.")
            "1lf30q6r8nz5cjzclbb9bbymsk2y75nskvb55hnjdv93gr3j0sik"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("gnupg" ,gnupg)))
+       (list gnupg))
       (home-page "https://elpa.gnu.org/packages/pinentry.html")
       (synopsis "GnuPG Pinentry server implementation")
       (description
@@ -21616,12 +21324,9 @@ them in your web browser.")
            "0injfpxzgfhmqalba845j5l5cdcxxqz43knhxwinf36g52nfabl0"))))
       (build-system emacs-build-system)
       (inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-ghub" ,emacs-ghub)))
+       (list emacs-dash emacs-s emacs-ghub))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list emacs-buttercup emacs-undercover))
       (arguments
        `(#:tests? #t
          #:test-command '("buttercup" "-L" "test/github-review-test.el")))
@@ -21648,11 +21353,9 @@ accept and reject GitHub pull requests.")
           (base32
            "1vjhrq02l8gvdn2haygzq7277hnhjchs9xrfpcnh76gqip200gx4"))))
       (build-system emacs-build-system)
-      (inputs `(("ripgrep" ,ripgrep)))
+      (inputs (list ripgrep))
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-spinner" ,emacs-spinner)))
+       (list emacs-dash emacs-s emacs-spinner))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -21712,8 +21415,7 @@ text in neighboring sections.")
          "1c3gay9fkikg7h46djw1nf86fzckmv7w1zbz5fbar20klcr12pbm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-hydra" ,emacs-hydra)))
+     (list emacs-dash emacs-hydra))
     (home-page "https://github.com/joostkremers/pandoc-mode")
     (synopsis "Minor mode for interacting with Pandoc")
     (description "This package provides a Hydra menu for interacting with the
@@ -21738,8 +21440,7 @@ Pandoc, the document-conversion tool.")
            "1c71w9s34n0i7mm4njchxn6s3ri1y6mh3akgbg4nq41d42h8iap3"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("apply-refact" ,apply-refact)
-         ("hlint" ,hlint)))
+       (list apply-refact hlint))
       (home-page "https://github.com/mpickering/hlint-refactor-mode")
       (synopsis "Emacs bindings for @code{hlint}'s @code{--refactor} option")
       (description "This package applies refactoring suggestions from
@@ -21764,9 +21465,7 @@ Pandoc, the document-conversion tool.")
            "0l4bhyr9d8ljz1f0cfg1s2cjcmh6fiwbk5mdlvc7rrwz5hxc21is"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("ccls" ,ccls)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-lsp-mode" ,emacs-lsp-mode)))
+       (list ccls emacs-dash emacs-lsp-mode))
       (home-page "https://github.com/MaskRay/emacs-ccls")
       (synopsis "Emacs support for the @code{ccls} language server")
       (description "This package extends @code{lsp-mode} to work with @code{C}
@@ -21912,7 +21611,7 @@ and 'text viewing modes' respectively.")
                         "-l" "adoc-mode-test.el"
                         "-f" "ert-run-tests-batch-and-exit")))
     (propagated-inputs
-     `(("emacs-markup-faces" ,emacs-markup-faces)))
+     (list emacs-markup-faces))
     (home-page "https://github.com/sensorflo/adoc-mode/wiki")
     (synopsis "AsciiDoc mode for Emacs")
     (description "This package provides an Emacs major mode for editing AsciiDoc
@@ -21954,14 +21653,9 @@ files.  It focuses on highlighting the document to improve readability.")
                ((" \\[`str`\\]") " str"))
              #t)))))
     (native-inputs
-     `(("emacs-ert-runner" ,emacs-ert-runner)
-       ("emacs-undercover" ,emacs-undercover)))
+     (list emacs-ert-runner emacs-undercover))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-pos-tip" ,emacs-pos-tip)
-       ("emacs-rust-mode" ,emacs-rust-mode)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-f emacs-pos-tip emacs-rust-mode emacs-s))
     (build-system emacs-build-system)
     (home-page "https://github.com/racer-rust/emacs-racer")
     (synopsis "Racer support for Emacs")
@@ -22011,16 +21705,16 @@ source code.")
         (base32 "0i72r0kb6f96py3vbprcingik9sy5bndnd19hb9x3yzv1f7r0zfp"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-project" ,emacs-project)
-       ("emacs-rust-mode" ,emacs-rust-mode)
-       ("emacs-s" ,emacs-s)
-       ("emacs-spinner" ,emacs-spinner)
-       ("emacs-xterm-color" ,emacs-xterm-color)))
+     (list emacs-dash
+           emacs-f
+           emacs-flycheck
+           emacs-lsp-mode
+           emacs-markdown-mode
+           emacs-project
+           emacs-rust-mode
+           emacs-s
+           emacs-spinner
+           emacs-xterm-color))
     (arguments
      ;; Tests require rust, cargo, rustfmt, and various crates to be
      ;; vendored.
@@ -22091,9 +21785,7 @@ text-tree applications inside GNU Emacs.  It consists of 2 subprojects:
            "06a1gbrq3qcfsn0kyv4i24x1xxfrrwqa3kgfj4xa4va88q2vqyb5"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-helm" ,emacs-helm)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-helm emacs-s))
       (home-page "https://github.com/tmalsburg/helm-org-contacts")
       (synopsis "Helm source for org-contacts")
       (description "This Helm source can be used to search contacts stored in
@@ -22142,8 +21834,7 @@ buffer displays recursive dir sizes.")
                 "19za6i96xrmczdh928n5ixd7j7pvy175sz1msaiwvdjwysjr8k51"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (home-page "https://github.com/stsquad/dired-rsync/")
     (synopsis "Support for rsync from Emacs dired buffers")
     (description "This package adds a single command @code{dired-rsync} which
@@ -22205,13 +21896,13 @@ buffers – other modes on the TODO list).
          "12ay02vk6bk77k33mhlqi41m03a77y80b15rj1dbh1n6jfrjwkfy"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-async" ,emacs-async)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-hl-todo" ,emacs-hl-todo)
-       ("magit" ,emacs-magit)
-       ("emacs-pcre2el" ,emacs-pcre2el)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-async
+           emacs-dash
+           emacs-f
+           emacs-hl-todo
+           emacs-magit
+           emacs-pcre2el
+           emacs-s))
     (home-page "https://github.com/alphapapa/magit-todos")
     (synopsis "Show source files' TODOs (and FIXMEs, etc) in Magit status buffer")
     (description "This package displays keyword entries from source code
@@ -22288,7 +21979,7 @@ News homepage.")
            "0zkl9jkjbx0lmp9ylv4rqg1zwqibk053s4rp7s1h0i18nzk7vn8j"))))
       (build-system emacs-build-system)
       (inputs
-       `(("youtube-dl" ,youtube-dl)))
+       (list youtube-dl))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -22326,7 +22017,7 @@ can be queued at any time.")
         (base32 "010arhvibyw50lqhsr8bm0vj3pzry1h1vgcvxnmyryirk3dv40jl"))))
     (build-system emacs-build-system)
     (inputs
-     `(("youtube-dl" ,youtube-dl)))
+     (list youtube-dl))
     (propagated-inputs
      `(("async" ,emacs-async)
        ("transient" ,emacs-transient)))
@@ -22378,7 +22069,7 @@ depending on the downloaded URL.")
                  (substitute* "ytel.el"
                    (("\"curl\"") (string-append "\"" curl "/bin/curl\"")))))))))
       (inputs
-       `(("curl" ,curl)))
+       (list curl))
       (home-page "https://github.com/grastello/ytel")
       (synopsis "Youtube front-end for Emacs")
       (description
@@ -22406,7 +22097,7 @@ as playing them in some video player, or downloading them.")
           (base32 "0nhgzfzq1bgpbdbljx5z2hzr8ia7ybsyvvr66yj4klz0zj97rghj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ytel" ,emacs-ytel)))
+       (list emacs-ytel))
       (home-page "https://github.com/xFA25E/ytel-show")
       (synopsis "Browse YouTube in Emacs")
       (description
@@ -22430,12 +22121,9 @@ and comments.")
          "0v4qad54r0z7dr7kg5lpfdsazi44qvrbybx9aciyl4w9grfajphb"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-esxml" ,emacs-esxml)
-       ("emacs-request" ,emacs-request)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-esxml emacs-request emacs-s))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -22474,7 +22162,7 @@ inserts it as an Org entry instead of displaying it in a new buffer.")
            "09wmhpym516b81dfq8smdmysh1fn610dzlyvyl2rkx8600f0fizd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-eimp" ,emacs-eimp)))
+       (list emacs-eimp))
       (home-page "https://github.com/walseb/blimp")
       (synopsis "Emacs wrapper around all Imagemagick commands")
       (description "Blimp (Bustling Image Manipulation Package) is a complete
@@ -22499,7 +22187,7 @@ execute its commands and resize images.")
          "14dd6p89pmpf1w3nx4f9mzm4sn2b64nicws436ck7pmp223pwciv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("wordnet" ,wordnet)))
+     (list wordnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -22598,7 +22286,7 @@ scaling of and anti aliasing of the icons.")
                   "1ai655f10iayb4vw0ass2j3x83f4vsv90326mnywkzfl3sxd432z"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-xterm-color" ,emacs-xterm-color)))
+       (list emacs-xterm-color))
       (home-page "https://github.com/bcbcarl/emacs-wttrin")
       (synopsis "Frontend for weather web service @url{wttr.in}")
       (description "This package provides local weather information from
@@ -22668,9 +22356,7 @@ themes comes with the package.")
          "1q8r95zfrh0vxna5ml2pq9b9f66clfqcl4d2qy2aizkvzyxg6skl"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("powerline" ,emacs-powerline)
-       ("s" ,emacs-s)))
+     (list emacs-dash emacs-powerline emacs-s))
     (home-page "https://github.com/TheBB/spaceline")
     (synopsis "Powerline theme from Spacemacs")
     (description "Spaceline provides Spacemacs' mode-line theme.
@@ -22759,8 +22445,7 @@ correctly.")
                 "0mrpjhpijdrq353fnfvdj9l9xfsz390qlcvifcair9732ma7i8l0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-slime" ,emacs-slime)))
+     (list emacs-helm emacs-slime))
     (home-page "https://github.com/emacs-helm/helm-slime")
     (synopsis "Helm for SLIME, the Superior Lisp Interaction Mode for Emacs")
     (description "Helm-SLIME defines a few new commands:
@@ -22788,8 +22473,7 @@ correctly.")
                 "06x8wyx1r0s7askkvlbklgz1cszv34qsvv3gryndw350smk1v8kx"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-sly" ,emacs-sly)))
+     (list emacs-helm emacs-sly))
     (home-page "https://github.com/emacs-helm/helm-sly")
     (synopsis "Helm for SLY, a Common Lisp interaction mode for Emacs")
     (description "Helm-SLY defines a few new commands:
@@ -22878,18 +22562,18 @@ Emacs.")
                   "1scfv1502yg7x4bsl253cpr6plml1j4d437vci2ggs764sh3rcqq"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("a" ,emacs-a)
-         ("anaphora" ,emacs-anaphora)
-         ("dash" ,emacs-dash)
-         ("esxml" ,emacs-esxml)
-         ("f" ,emacs-f)
-         ("frame-purpose" ,emacs-frame-purpose)
-         ("ht" ,emacs-ht)
-         ("ov" ,emacs-ov)
-         ("rainbow-identifiers" ,emacs-rainbow-identifiers)
-         ("request" ,emacs-request)
-         ("s" ,emacs-s)
-         ("tracking" ,emacs-tracking)))
+       (list emacs-a
+             emacs-anaphora
+             emacs-dash
+             emacs-esxml
+             emacs-f
+             emacs-frame-purpose
+             emacs-ht
+             emacs-ov
+             emacs-rainbow-identifiers
+             emacs-request
+             emacs-s
+             emacs-tracking))
       (home-page "https://github.com/jgkamat/matrix-client-el")
       (synopsis "Matrix client for Emacs")
       (description "@code{matrix-client} is a simple chat UI to Matrix.org
@@ -22979,7 +22663,7 @@ functions to ensure they are called with the right arguments during testing.")
                 "03c223nczpbdkjmq69panhbsq2a0zj20w329jgj4c0zsj8m1a32a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ansi" ,emacs-ansi)))
+     (list emacs-ansi))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "--batch" "--quick"
@@ -23008,8 +22692,7 @@ functions to ensure they are called with the right arguments during testing.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("wordnet" ,wordnet)
-         ("emacs-adaptive-wrap" ,emacs-adaptive-wrap)))
+       (list wordnet emacs-adaptive-wrap))
       (synopsis "Major mode for WordNet")
       (description "This Emacs package provides an interface for
 @code{wordnet}.  Features include completion, if the query is not found
@@ -23059,7 +22742,7 @@ not have any relation with variables defined by @code{defvar},
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (synopsis "Purpose-specific frames for Emacs")
     (description "@code{frame-purpose} makes it easy to open purpose-specific
 frames that only show certain buffers, e.g. by buffers’ major mode, their
@@ -23119,9 +22802,7 @@ other frame parameters.")
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-lispy" ,emacs-lispy)
-       ("emacs-evil" ,emacs-evil)))
+     (list emacs-buttercup emacs-lispy emacs-evil))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -23155,10 +22836,7 @@ advice to be recorded and displayed.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-evil" ,emacs-evil)
-         ("emacs-which-key" ,emacs-which-key)
-         ("emacs-use-package" ,emacs-use-package)))
+       (list emacs-buttercup emacs-evil emacs-which-key emacs-use-package))
       (arguments
        `(#:tests? #t
          #:test-command '("buttercup" "-L" "test/test-general.el")))
@@ -23195,7 +22873,7 @@ leader key in vim), and much more.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-request" ,emacs-request)))
+       (list emacs-request))
       (synopsis "Simplified and community-driven man pages for Emacs")
       (description "@code{emacs-tldr} allows the user to access tldr pages
 from within emacs.  The @code{tldr} pages are a community effort to simplify
@@ -23238,7 +22916,7 @@ or a window into some windows according to a layout recipe.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-window-layout" ,emacs-window-layout)))
+       (list emacs-window-layout))
       (synopsis "Equilibrium Emacs Window Manager")
       (description "E2WM is a window manager for Emacs.  It enables to
 customize the place of pop-up window, how the windows are split, how the
@@ -23285,8 +22963,7 @@ programs can use this table component for the application UI.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-names" ,emacs-names)
-         ("emacs-ctable" ,emacs-ctable)))
+       (list emacs-names emacs-ctable))
       (synopsis "Solve and submit LeetCode problems from within Emacs")
       (description "This package provides an Emacs interface to LeetCode
 allowing users to log in and solve problems of their choice using Emacs.")
@@ -23309,8 +22986,7 @@ allowing users to log in and solve problems of their choice using Emacs.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-deferred" ,emacs-deferred)
-         ("emacs-ctable" ,emacs-ctable)))
+       (list emacs-deferred emacs-ctable))
       (synopsis "RPC stack for Emacs Lisp")
       (description "This program is an asynchronous RPC stack for Emacs.
 Using this RPC stack, Emacs can communicate with the peer process
@@ -23335,15 +23011,14 @@ asynchronous communications, the RPC response is fairly good.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (inputs
-       `(("perl" ,perl)
-         ("perl-rpc-epc-service" ,perl-rpc-epc-service)
-         ("perl-dbi" ,perl-dbi)
-         ;; TODO: Adding support for perl-dbd-mysql and others would
-         ;; dramatically increase the closure size.  Make several packages?
-         ("perl-dbd-sqlite" ,perl-dbd-sqlite)))
+       (list perl
+             perl-rpc-epc-service
+             perl-dbi
+             ;; TODO: Adding support for perl-dbd-mysql and others would
+             ;; dramatically increase the closure size.  Make several packages?
+             perl-dbd-sqlite))
       (propagated-inputs
-       `(("emacs-e2wm" ,emacs-e2wm)
-         ("emacs-epc" ,emacs-epc)))
+       (list emacs-e2wm emacs-epc))
       (arguments
        `(#:include '("\\.el$" "\\.pl$")
          #:phases
@@ -23385,7 +23060,7 @@ DBI, and provides DB-accessing API and the simple management UI.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-edbi" ,emacs-edbi)))
+       (list emacs-edbi))
       (synopsis "Open SQLite files in Emacs")
       (description "This package is a convenience wrapper for @command{edbi}
 to open SQLite databases.")
@@ -23433,9 +23108,7 @@ chevron marks.")
         (base32 "1bqlhkxg0faddhvxx909dq46dxdxk4mdyhdpww92dmzgxdpq38sx"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-json-mode" ,emacs-json-mode)
-       ("emacs-mmm-mode" ,emacs-mmm-mode)))
+     (list emacs-company emacs-json-mode emacs-mmm-mode))
     (home-page "https://github.com/NixOS/nix-mode")
     (synopsis "Emacs major mode for editing Nix expressions")
     (description "@code{nixos-mode} provides an Emacs major mode for editing
@@ -23481,7 +23154,7 @@ music.")
          "0pyyvbzskr44dxbmlp3y0r6s459fd51cvwjmnjaqxfxflr5v891g"))))
     (build-system emacs-build-system)
     (inputs
-     `(("emacs-libmpdel" ,emacs-libmpdel)))
+     (list emacs-libmpdel))
     (home-page "https://gitea.petton.fr/mpdel/mpdel")
     (synopsis "Emacs user interface for Music Player Daemon (MPD)")
     (description
@@ -23571,7 +23244,7 @@ display a terminal in an Emacs buffer.")
          (sha256
           (base32 "0r9n23wg9cfy10h5f9zqr8jpkvw34f9rylri3nxq870awjab7rqi"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-vterm" ,emacs-vterm)))
+      (propagated-inputs (list emacs-vterm))
       (home-page "https://github.com/jixiuf/vterm-toggle")
       (synopsis "Toggle between a vterm buffer and other buffers")
       (description
@@ -23597,7 +23270,7 @@ a vterm buffer and back again.")
           (base32
            "1ja06pv007cmzjjgka95jlg31k7d29jrih1yxyblsxv85s9sg21q"))))
       (build-system emacs-build-system)
-      (propagated-inputs `(("emacs-s" ,emacs-s)))
+      (propagated-inputs (list emacs-s))
       (home-page "https://github.com/jorenvo/simple-mpc")
       (synopsis "Simple Emacs frontend to mpc")
       (description "This package provides an Emacs major mode which acts as a
@@ -23643,7 +23316,7 @@ indentation and a command to plot the file.")
                   "03gsyn95dlmsn15bl353bphi3qy7ccn5bss3f7n97kf38bllh0yf"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-faceup" ,emacs-faceup)))
+       (list emacs-faceup))
       (arguments
        `(#:include (cons "^admin\\/" %default-include)))
       (home-page "https://github.com/Lindydancer/cmake-font-lock")
@@ -23689,11 +23362,9 @@ convenient to edit foreign files.")
                 "0jgiawdnzjlrpx2j1y6djwbqncdpmyfd31q1qf1890049y8ppxnb"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("emacs-el-mock" ,emacs-el-mock)
-       ("ert-runner" ,emacs-ert-runner)))
+     (list emacs-el-mock emacs-ert-runner))
     (propagated-inputs
-     `(("emacs-f" ,emacs-f)
-       ("magit" ,emacs-magit)))
+     (list emacs-f emacs-magit))
     (home-page "https://github.com/canatella/repo-el")
     (synopsis "Emacs interface for the Google Repo tool")
     (description "This package provides integration of the Google Repo tool
@@ -23780,7 +23451,7 @@ file for Google C and C++ style.")
                   "1jdkgvd5xy9hl5q611jwah2n05abjp7qcy9sj4k1z11x0ii62b6p"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-paredit" ,emacs-paredit)))
+       (list emacs-paredit))
       (home-page "http://www.foldr.org/~michaelw/emacs/redshank/")
       (synopsis "Common Lisp Editing Extensions (for Emacs)")
       (description "Redshank is a collection of code-wrangling Emacs macros
@@ -23827,8 +23498,7 @@ recursively.  The results are cached for speed.")
                 "0mbcr98xq3zim01dk1fbyc1vajnjwx90k62mygv343rhrd05v44m"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-magit" ,emacs-magit)))
+     (list emacs-dash emacs-magit))
     (synopsis "Support for Org links to Magit buffers")
     (description "This package defines several Org link types, which can be
 used to link to certain Magit buffers.  Use the command
@@ -23852,7 +23522,7 @@ Later you can insert it into an Org buffer using the command
         (base32 "0h1cxqqf0hixh25j679r57bq9dv0b20icf268wbnsim5xp88ngf8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/DarwinAwardWinner/amx")
     (synopsis "Alternative M-x interface for Emacs")
     (description "Amx is an alternative interface for M-x in Emacs.  It
@@ -23941,15 +23611,15 @@ constant expressions.")
        (sha256
         (base32 "0s57dq04d97dvrbxzicyk5z9f1mn8gf9w4nbgrxd9dnjqz335173"))))
     (inputs
-     `(("emacs-undercover" ,emacs-undercover)))
-    (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-docker-tramp" ,emacs-docker-tramp)
-       ("emacs-json-mode" ,emacs-json-mode)
-       ("emacs-magit-popup" ,emacs-magit-popup)
-       ("emacs-s" ,emacs-s)
-       ("emacs-tablist" ,emacs-tablist)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-undercover))
+    (propagated-inputs
+     (list emacs-dash
+           emacs-docker-tramp
+           emacs-json-mode
+           emacs-magit-popup
+           emacs-s
+           emacs-tablist
+           emacs-transient))
     (arguments `(#:tests? #false))      ;no tests
     (build-system emacs-build-system)
     (home-page "https://github.com/Silex/docker.el")
@@ -23973,7 +23643,7 @@ constant expressions.")
          "09pd8mfa45fy95mdg52fsafj3d1d5l52rskmw6q5np59dyzwch1b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "https://github.com/spotify/dockerfile-mode")
     (synopsis "Major mode for editing Dockerfile")
     (description
@@ -24007,12 +23677,12 @@ the standard @code{Dockerfile} file format.")
                          (install-file f "."))
                        (find-files "clients/" "\\.el$")))))))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-spinner" ,emacs-spinner)))
+     (list emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-hydra
+           emacs-markdown-mode
+           emacs-spinner))
     (home-page "https://emacs-lsp.github.io/lsp-mode/")
     (synopsis "Emacs client and library for the Language Server Protocol")
     (description
@@ -24037,8 +23707,7 @@ Projectile.")
         (base32 "05ivqa5900139jzjhwc3nggwznhm8564dz4ydcxym2ddd63571k0"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-treemacs" ,emacs-treemacs)))
+     (list emacs-lsp-mode emacs-treemacs))
     (home-page "https://github.com/emacs-lsp/lsp-treemacs")
     (synopsis "Integration between LSP mode and treemacs")
     (description
@@ -24061,10 +23730,7 @@ and implementation of treeview controls using treemacs as a tree renderer.")
         (base32 "1zczmcv8562lachkvcwy6njn7zkgny08iznpmrx821wr8mh52wnn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-bui" ,emacs-bui)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-posframe" ,emacs-posframe)
-       ("emacs-lsp-treemacs" ,emacs-lsp-treemacs)))
+     (list emacs-bui emacs-lsp-mode emacs-posframe emacs-lsp-treemacs))
     (home-page "https://emacs-lsp.github.io/dap-mode")
     (synopsis "Emacs client/library for Debug Adapter Protocol ")
     (description
@@ -24110,18 +23776,17 @@ processes for Emacs")
         (base32 "01qrprxfwmdzak77k2qa9fc2kb4hxddbvj30avqglj9sjaid9wmq"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ace-window" ,emacs-ace-window)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-hydra" ,emacs-hydra)
-       ("emacs-pfuture" ,emacs-pfuture)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-ace-window
+           emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-hydra
+           emacs-pfuture
+           emacs-s))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)
-       ("emacs-el-mock" ,emacs-el-mock)))
+     (list emacs-buttercup emacs-el-mock))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "-C" "../.." "test")
@@ -24150,7 +23815,7 @@ processes for Emacs")
                (chmod "src/elisp/treemacs-customization.el" #o644)
                (emacs-substitute-variables "src/elisp/treemacs-customization.el"
                  ("treemacs-python-executable"
-                  (string-append (assoc-ref inputs "python") "/bin/python3")))
+                  (search-input-file inputs "/bin/python3")))
                (chmod "src/elisp/treemacs-async.el" #o644)
                (substitute* "src/elisp/treemacs-async.el"
                  (("src/scripts") (string-append "share/" ,name "/scripts"))))))
@@ -24238,7 +23903,7 @@ utilities.")
                (install-file "libyaml-core.so"
                              (string-append (assoc-ref outputs "out") "/lib"))
                #t)))))
-      (native-inputs `(("libyaml" ,libyaml)))
+      (native-inputs (list libyaml))
       (home-page "https://github.com/syohex/emacs-libyaml")
       (synopsis "Libyaml bindings for Emacs")
       (description
@@ -24261,14 +23926,14 @@ files in Elisp.")
                 "1h0hqgjpk5mbylma1fkva0vx45achf0k7ab2c5y8a2449niww90h"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dap-mode" ,emacs-dap-mode)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)
-       ("emacs-ht" ,emacs-ht)
-       ("emacs-request" ,emacs-request)
-       ("emacs-treemacs" ,emacs-treemacs)))
+     (list emacs-dap-mode
+           emacs-lsp-mode
+           emacs-markdown-mode
+           emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-request
+           emacs-treemacs))
     (home-page "https://github.com/emacs-lsp/lsp-java/")
     (synopsis "Java support for lsp-mode")
     (description "Emacs Java IDE using Eclipse JDT Language Server.")
@@ -24289,10 +23954,7 @@ files in Elisp.")
                 "00yirx6qzlb8fv8rd53zaw93nw72z3br40rb16scdqj1v20qsp47"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-flycheck" ,emacs-flycheck)))
+     (list emacs-dash emacs-lsp-mode emacs-markdown-mode emacs-flycheck))
     (home-page "https://github.com/emacs-lsp/lsp-ui")
     (synopsis "User interface extensions for @code{lsp-mode}")
     (description
@@ -24317,7 +23979,7 @@ and code peeking.")
                   "0rbizis73n1w5ig07fj1han74chbc1zpbp5bn37rj0gz608aqka8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-lsp-mode" ,emacs-lsp-mode)))
+       (list emacs-lsp-mode))
       (home-page "https://github.com/phenix3443/lsp-lua-emmy/")
       (synopsis "Lua support in @code{lsp-mode} client for Emacs")
       (description "This package provides a Lua language support in
@@ -24339,9 +24001,7 @@ and code peeking.")
         (base32 "0nb9ypa8hyx7i38rbywh8hn2i5f9l2l567hvdr9767fk279yr97n"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)))
+     (list emacs-dash emacs-ivy emacs-lsp-mode))
     (home-page "https://github.com/emacs-lsp/lsp-ivy")
     (synopsis "Provide LSP-enhanced completion for symbols")
     (description
@@ -24364,9 +24024,7 @@ workspaces with a LSP-compliant server running.")
                 "1vq3qpqm3ndqyvf5bk8qhqcr60x9ykc0ipk2a43rr3yjm4z1b6s9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-lsp-mode" ,emacs-lsp-mode)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-helm emacs-lsp-mode emacs-dash))
     (home-page "https://github.com/emacs-lsp/helm-lsp")
     (synopsis "Provide LSP-enhanced completion for symbols")
     (description
@@ -24390,8 +24048,7 @@ workspaces with a LSP-compliant server running.")
                 "1k038dbdpaa411gl4071x19fklhnizhr346plxw23lsnxir9dhqc"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-helm emacs-notmuch))
     (synopsis "Search emails with Emacs Notmuch and Helm")
     (description
      "This package can be used to search emails in Emacs, searching result
@@ -24414,7 +24071,7 @@ real search.")
         (base32 "1fqnx6hhg0cqj82yjpl7llg6vvppc3y8q9k6g67mqr7z3712bw0x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-notmuch" ,emacs-notmuch)))
+     (list emacs-notmuch))
     (home-page "https://git.sr.ht/~tarsius/notmuch-maildir")
     (synopsis "Visualize maildirs as a tree")
     (description
@@ -24438,8 +24095,7 @@ buffer''.")
                 "1x4wnsshf9h10mp51x92vs5rxw5had4gmw6zz4f53czx1ymcv16a"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)))
+     (list emacs-s emacs-dash))
     (synopsis "Convert keyboard macros to Emacs Lisp")
     (description
      "This package displays keyboard macros or latest interactive commands
@@ -24474,7 +24130,7 @@ as Emacs Lisp.")
            (lambda _
              (chdir "lisp"))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (propagated-inputs
      `(("dash" ,emacs-dash)))
     (home-page "https://magit.vc/manual/transient")
@@ -24501,7 +24157,7 @@ commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
          (base32 "15zm5azgl8gyd91i40a00ih4s2iwg1r8007n2gcfnmi6m4b7s0ak"))))
      (build-system emacs-build-system)
      (native-inputs
-      `(("texinfo" ,texinfo)))
+      (list texinfo))
      (propagated-inputs
       `(("emacs-closql" ,emacs-closql)
         ("emacs-dash" ,emacs-dash)
@@ -24546,8 +24202,7 @@ comfort of Magit and the rest of Emacs.")
                  (base32
                   "1lfnh1glg6al677m7ci0x8g5wjdhjxlfl3nv1f1ppsw4dpnwsj9b"))))
       (propagated-inputs
-       `(("emacs-hydra" ,emacs-hydra)
-         ("emacs-transient" ,emacs-transient)))
+       (list emacs-hydra emacs-transient))
       (build-system emacs-build-system)
       (home-page "https://github.com/jojojames/matcha/")
       (synopsis "Collection of hydras with a generic interface to launch them")
@@ -24649,8 +24304,7 @@ unescaping of quotes.")
           (base32 "1kjms9d2c98ffd1qxs879qhg0n4jzic0r5kni9y4gz3v09ww8zms"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-flycheck emacs-let-alist))
       (home-page "https://github.com/bsermons/flycheck-elm")
       (synopsis "Flycheck support for the Elm language")
       (description "Flycheck Elm adds Flycheck support for Elm language.")
@@ -24674,10 +24328,7 @@ unescaping of quotes.")
            "10pgsbagq6qj4mshq5sypv0q0khck92b30sc793b4g1pfpsxvgjn"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-haskell-mode" ,emacs-haskell-mode)
-         ("emacs-let-alist" ,emacs-let-alist)))
+       (list emacs-dash emacs-flycheck emacs-haskell-mode emacs-let-alist))
       (arguments
        `(#:include '("\\.el$" "\\.hs$")))
       (home-page "https://github.com/flycheck/flycheck-haskell")
@@ -24704,14 +24355,10 @@ buffers.")
            "08b25y3raz0p98zxk9xdd8nj9shqd6mzrqhbq1gg4cwsmi7h7ly1"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-js2-mode" ,emacs-js2-mode)
-         ("emacs-yasnippet" ,emacs-yasnippet)
-         ("emacs-multiple-cursors" ,emacs-multiple-cursors)))
+       (list emacs-dash emacs-s emacs-js2-mode emacs-yasnippet
+             emacs-multiple-cursors))
       (native-inputs
-       `(("emacs-buttercup" ,emacs-buttercup)
-         ("emacs-espuds" ,emacs-espuds)))
+       (list emacs-buttercup emacs-espuds))
       (home-page "https://github.com/magnars/js2-refactor.el")
       (synopsis "JavaScript refactoring in Emacs")
       (description "This package provides various refactoring functions for
@@ -24807,8 +24454,7 @@ parent directory using @code{Eshell}.")
           (base32 "0fn8c4hqblfjvcpg68kj2dmdjqsdnxddqbzgvakl43zckjg8pi01"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-helm emacs-ivy))
       (home-page "https://github.com/jwiegley/springboard")
       (synopsis "Change the Emacs default directory quickly")
       (description
@@ -24835,10 +24481,9 @@ done using Helm, Ido or Ivy.")
            "1z7xkbrqznk6ni687qqknp8labcyhl8y6576hjfri89fn21385y9"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)
-         ("emacs-undercover" ,emacs-undercover)))
+       (list emacs-ert-runner emacs-undercover))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")))
@@ -24866,7 +24511,7 @@ Lisp functions that call themselves in tail position.")
           (base32 "11xfr71y78idcn461p4pz7b0k01nhz15cyl97bjqq6ii5xhbhvdx"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://gitlab.com/emacsomancer/equake/")
       (synopsis "Drop-down console for @code{Eshell} and terminal emulators")
       (description "This package provides a Quake-style drop-down console
@@ -24890,7 +24535,7 @@ compatible with Emacs' shell modes.")
           (base32 "197xrwph1llrzjgkhlvagiwdgfp68pb45w5afg89ndahpqc2725s"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-hydra" ,emacs-hydra)))
+       (list emacs-hydra))
       (arguments
        `(#:tests? #t
          #:test-command '("emacs" "-Q" "-batch" "-L" "."
@@ -24924,9 +24569,7 @@ output.")
            "16cjmrzflf2i1w01973sl944xrfanakba8sb4dpwi79d92xp03xy"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-vdiff" ,emacs-vdiff)
-         ("emacs-magit" ,emacs-magit)
-         ("emacs-transient" ,emacs-transient)))
+       (list emacs-vdiff emacs-magit emacs-transient))
       (home-page "https://github.com/justbur/emacs-vdiff-magit/")
       (synopsis "Frontend for diffing based on vimdiff")
       (description "This package permits comparisons of two or three buffers
@@ -24952,7 +24595,7 @@ based on diff output.")
            "0zhyhz4lhx0d8wwh1xxxf7ck4s621fk9757ql2ypxbr4iqh7sjlp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-all-the-icons" ,emacs-all-the-icons)))
+       (list emacs-all-the-icons))
       (home-page "https://github.com/jtbm37/all-the-icons-dired/")
       (synopsis "Show icons for each file in @code{dired-mode}")
       (description "This package allows icons from @file{all-the-icons.el} to
@@ -24978,7 +24621,7 @@ be used in @code{dired-mode}.")
            "031cb8fvv5n30djr9lpl6vz3rl15zykfvjlgkjc8l33a3l5mw8j0"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-exwm" ,emacs-exwm)))
+       (list emacs-exwm))
       (home-page "https://github.com/agzam/exwm-edit/")
       (synopsis "Open temp buffers for editing text from EXWM buffers")
       (description "This package facilitates editing text from EXWM buffers by
@@ -25024,12 +24667,9 @@ invoked.")
            "02kysq57kqzg0zkhaf302ada9cp9spgp71z8vbdq4c7dl6x75h4g"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)
-         ("emacs-f" ,emacs-f)))
+       (list emacs-dash emacs-s emacs-f))
       (native-inputs
-       `(("emacs-el-mock" ,emacs-el-mock)
-         ("emacs-ert-async" ,emacs-ert-async)))
+       (list emacs-el-mock emacs-ert-async))
       (home-page "https://github.com/rejeep/prodigy.el")
       (synopsis "Manage external services from within Emacs")
       (description "This package provides a GUI for defining and monitoring services.")
@@ -25069,9 +24709,7 @@ url-encoded parameters, as well as web sockets.")
          "0a0qskhy6jil583hq3mgbzdsi3m1schzyzrd46yfxdsvqiczg170"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-markdown-mode" ,emacs-markdown-mode)
-       ("emacs-websocket" ,emacs-websocket)
-       ("emacs-web-server" ,emacs-web-server)))
+     (list emacs-markdown-mode emacs-websocket emacs-web-server))
     (arguments '(#:include '("\\.el$" "\\.html$")))
     (home-page "https://github.com/ancane/markdown-preview-mode")
     (synopsis "Preview Markdown files")
@@ -25165,7 +24803,7 @@ definition-jumping and type-checking on demand.")
          "08b4hdgq4hc1yfd9pvyir2j3cqqdqa3j5svgaba97x5fzhsz7y8i"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-js2-mode" ,emacs-js2-mode)))
+     (list emacs-js2-mode))
     (arguments
      `(#:tests? #t
        #:test-command '("make" "test")))
@@ -25194,8 +24832,7 @@ support JSX syntax.")
            "0ha1qsz2p36pqa0sa2sp83lspbgx5lr7930qxnwd585liajzdd9x"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/gregsexton/origami.el")
       (synopsis "Flexible text-folding")
       (description "This package provides a minor mode for collapsing and
@@ -25241,7 +24878,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
         (base32 "1zmx7vfi02c8k9wnbsmka5yx3ci8fv9wl8r0cc28jn40vgrivn8c"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)))
+     (list emacs-counsel))
     (arguments
      `(#:tests? #f                      ;require internet access
        #:test-command '("make test")))
@@ -25266,8 +24903,7 @@ and searching through @code{Ctags} files.")
                  (base32
                   "0npd8glzk5z4n7y9mzbsbzi0cf3by19fqcki052jr3dga363lds7"))))
       (propagated-inputs
-       `(("emacs-f" ,emacs-f)
-         ("emacs-ivy" ,emacs-ivy)))
+       (list emacs-f emacs-ivy))
       (build-system emacs-build-system)
       (home-page "https://github.com/wpcarro/ivy-clipmenu.el")
       (synopsis "Ivy integration with clipmenu")
@@ -25290,8 +24926,7 @@ and searching through @code{Ctags} files.")
                  (base32 "0cg4y7hy7xbq4vrbdicfzgvyaf3cjbx2zkqd4yl0y2garz71j99l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-org" ,emacs-org)
-         ("emacs-async" ,emacs-async)))
+       (list emacs-org emacs-async))
       (home-page "https://github.com/abo-abo/org-download")
       (synopsis "Facilitate moving images")
       (description "This package provides utilities for managing image files
@@ -25316,9 +24951,7 @@ copied into @code{org-mode} buffers.")
           (base32 "1a8ygrcag8i9hdpy2vsn0sh8lwhl9b56rv91j3rddy1jv5qx1ipb"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-org" ,emacs-org)
-         ("emacs-s" ,emacs-s)))
+       (list emacs-dash emacs-org emacs-s))
       (home-page "https://github.com/chrisbarrett/org-drill-table")
       (synopsis "Generate Org drill cards using Org mode tables")
       (description
@@ -25345,10 +24978,9 @@ current tree.")
            "0n6d3mm43gj16v8kjjradcfik93wb89dsqnfcbskb28bvcamafid"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)))
+       (list emacs-async))
       (native-inputs
-       `(("emacs-undercover" ,emacs-undercover)
-         ("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-undercover emacs-ert-runner))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")
@@ -25392,8 +25024,7 @@ current tree.")
            "0r192vzry1212ihabg9pgw9xar8zdgnbgy0vsgvfm8s5wj6ny7jp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-dash-docs" ,emacs-dash-docs)))
+       (list emacs-helm emacs-dash-docs))
       (home-page "https://github.com/areina/helm-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses Helm to install and navigate through
@@ -25417,8 +25048,7 @@ Dash docsets.")
           (base32 "1fn38vbz46ijarjvhgw7iy7dj9s2a2miy95fyy9f8b5sj8nrdfvz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-counsel" ,emacs-counsel)
-         ("emacs-dash-docs" ,emacs-dash-docs)))
+       (list emacs-counsel emacs-dash-docs))
       (home-page "https://github.com/dash-docs-el/counsel-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses @code{ivy-mode} to install and navigate
@@ -25506,11 +25136,9 @@ all of your projects, then override or add variables on a per-project basis.")
                  ("calibredb-fetch-metadata-program"
                   (string-append calibre "/bin/fetch-ebook-metadata")))))))))
     (inputs
-     `(("calibre" ,calibre)))
+     (list calibre))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-dash emacs-s emacs-transient))
     (home-page "https://github.com/chenyanming/calibredb.el")
     (synopsis "Yet another calibre client for Emacs")
     (description "This package integrates calibre into Emacs.
@@ -25607,7 +25235,7 @@ well as an option for visually flashing evaluated s-expressions.")
         (base32 "18qlwyjqxap2qfbz14ma6yqp4p3v4q2y8idc355s4szjdd2as2lr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-counsel" ,emacs-counsel)))
+     (list emacs-counsel))
     (home-page "https://github.com/masasam/emacs-counsel-tramp")
     (synopsis "Ivy interface for TRAMP")
     (description
@@ -25641,7 +25269,7 @@ well as an option for visually flashing evaluated s-expressions.")
                  ("tramp-encoding-shell" (string-append sh "/bin/sh"))))
              #t)))))
     (inputs
-     `(("bash" ,bash)))
+     (list bash))
     (home-page "https://savannah.gnu.org/projects/tramp")
     (synopsis "Remote file editing package for Emacs")
     (description
@@ -25690,7 +25318,7 @@ with passwords for paths matching regexps.")
          "0n1vlzvq5mv7z1yffjjqm9ixd3r0cljr60kg55l9pj9kp72a4iv8"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)))
+     (list emacs-ivy))
     (home-page "https://github.com/redguardtoo/eacl")
     (synopsis "Auto-complete lines by using @code{grep} on a project")
     (description "This package provides auto-completion commands for single
@@ -25793,7 +25421,7 @@ C-f} to advance by #xa4 characters.
            "148a5xsnbsiddhf9cl7yxdk41lrv38h0pip91kcflw9d7l0dp7pr"))))
       (build-system emacs-build-system)
       (inputs
-       `(("helm" ,emacs-helm)))
+       (list emacs-helm))
       (synopsis "Search suggestions and article extracts from Wikipedia for Emacs")
       (description
        "This package provides an Emacs Helm interface for search suggestions
@@ -25910,9 +25538,7 @@ context, carry out the appropriate action.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)
-         ("emacs-paredit" ,emacs-paredit)
-         ("emacs-smartparens" ,emacs-smartparens)))
+       (list emacs-evil emacs-paredit emacs-smartparens))
       (home-page "https://github.com/luxbock/evil-cleverparens")
       (synopsis "Emacs modal editing optimized for editing Lisp")
       (description "@code{evil-cleverparens} remaps Evil keybindings to allow
@@ -25972,7 +25598,7 @@ advice system without dropping support for Emacs<24.4.")
        (sha256
         (base32 "1cakq2ykraci7d1gl8rnpv4f2f5ffyaidhqb1282g7i72adwmb98"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-ntlm" ,emacs-ntlm)))
+    (propagated-inputs (list emacs-ntlm))
     (home-page "https://elpa.gnu.org/packages/url-http-ntlm.html")
     (synopsis "NTLM authentication for the url library")
     (description "This package provides a NTLM handler for the URL package.")
@@ -26027,10 +25653,7 @@ programming in Emacs Lisp easy and fun.")
         (base32 "1g0wc2kp15ra323b4rxvdh58q9c4h7m20grw6a0cs53m7l9xi62f"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-fsm" ,emacs-fsm)
-       ("emacs-nadvice" ,emacs-nadvice)
-       ("emacs-soap-client" ,emacs-soap-client)
-       ("emacs-url-http-ntlm" ,emacs-url-http-ntlm)))
+     (list emacs-fsm emacs-nadvice emacs-soap-client emacs-url-http-ntlm))
     (home-page "https://elpa.gnu.org/packages/excorporate.html")
     (synopsis "Exchange integration")
     (description "This package provides Exchange integration for Emacs.")
@@ -26053,7 +25676,7 @@ programming in Emacs Lisp easy and fun.")
                   "12p9lfxscs182vbd4dy0m5gacs3d4kyprbz5yndpwvl8g2qsqplz"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       (list emacs-evil))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -26087,7 +25710,7 @@ commands in @code{evil-mode}.")
         (base32
          "1na44rbc03sr5b4z9pvnps6n4nmrqcz58nywix9825l74a419ijx"))))
     (propagated-inputs
-     `(("emacs-evil" ,emacs-evil)))
+     (list emacs-evil))
     (build-system emacs-build-system)
     (home-page "https://github.com/keith/evil-tmux-navigator")
     (synopsis
@@ -26155,7 +25778,7 @@ text-property translator.")
         (base32
          "1vwfpdi7hfkxx4vi0cwg7rvqby3i0mymzdkyzrqzv30dazmcjpag"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-org" ,emacs-org)))
+    (propagated-inputs (list emacs-org))
     (home-page "https://github.com/weirdNox/org-noter")
     (synopsis "Synchronized, Org-mode, document annotator")
     (description
@@ -26204,7 +25827,7 @@ acting like notes that are made @emph{in} the document.")
           (base32 "043dqd8i8h6hbcg11rzprxin2yq5lb902zlrb7mxah44vyp8wrdi"))))
       (build-system emacs-build-system)
       (inputs
-       `(("zsh" ,zsh)))
+       (list zsh))
       (home-page "https://github.com/manateelazycat/multi-term")
       (synopsis "Manage multiple terminal buffers in Emacs")
       (description
@@ -26236,7 +25859,7 @@ it forcibly
         (base32 "0fzqm5gpadqzsl71r1bq72ki8dw8125v4nmhdd3b4rz9jy1rqm2g"))))
     (build-system emacs-build-system)
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -26270,8 +25893,7 @@ connections using TLS encryption.")
          "1r5s4mvwlxsb9ylr6dkfxpm1l0pbqkmn5gwjdcfk762cnxlam8cm"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-flycheck" ,emacs-flycheck)
-       ("emacs-all-the-icons" ,emacs-all-the-icons)))
+     (list emacs-flycheck emacs-all-the-icons))
     (home-page
      "https://gitlab.petton.fr/nico/zerodark-theme")
     (synopsis
@@ -26418,10 +26040,9 @@ format.")
                 "0iibxplgdp34bpq1yll2gmqjd8d8lnqn4mqjvx6cdf0y438yr4jz"))))
     (build-system emacs-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-ht" ,emacs-ht)))
+     (list emacs-dash emacs-ht))
     (home-page "https://github.com/kawabata/ox-pandoc")
     (synopsis "Org exporter for Pandoc")
     (description "@code{ox-pandoc} is an exporter for converting Org-mode
@@ -26519,11 +26140,7 @@ Lisp's (relatively new) EIEIO object oriented libraries.")
                 "1yky7vlv91501xb43xk19rr8mxlvrsxhawsc98jivf64nad5dqay"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-list-utils" ,emacs-list-utils)
-       ("emacs-iedit" ,emacs-iedit)))
+     (list emacs-dash emacs-s emacs-popup emacs-list-utils emacs-iedit))
     (home-page "https://github.com/Wilfred/emacs-refactor/")
     (synopsis "Language-specific refactoring in Emacs")
     (description "Emacs Refactor (EMR) is a framework for providing
@@ -26549,9 +26166,7 @@ a variety of languages, including elisp itself.")
     (arguments
      `(#:exclude '("flyspell-correct-avy-menu\\.el")))
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)
-       ("emacs-ivy" ,emacs-ivy)
-       ("emacs-popup" ,emacs-popup)))
+     (list emacs-helm emacs-ivy emacs-popup))
     (home-page "https://github.com/d12frosted/flyspell-correct")
     (synopsis "Correcting words with flyspell via custom interfaces")
     (description
@@ -26579,8 +26194,7 @@ Helm and Ivy.")
            "1sqsm5sv311xfdk4f4rsnvprdf2v2vm7l1b3vqi7pc0g8adlnw1d"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emms" ,emacs-emms)
-         ("emacs-org" ,emacs-org)))
+       (list emacs-emms emacs-org))
       (home-page "https://gitlab.com/jagrg/org-emms")
       (synopsis "Play multimedia files from org-mode")
       (description
@@ -26605,10 +26219,7 @@ contains a track position, playback will start at the specified position.")
        "1hsfkkm3ykdf7n8a6k0mpzilhjpy7vllwrl2s4rfb9mhnaq5yb8y"))))
    (build-system emacs-build-system)
    (propagated-inputs
-    `(("emacs-request" ,emacs-request)
-      ("emacs-s" ,emacs-s)
-      ("emacs-dash" ,emacs-dash)
-      ("emacs-org" ,emacs-org)))
+    (list emacs-request emacs-s emacs-dash emacs-org))
    (home-page "https://github.com/ahungry/org-jira")
    (synopsis "Syncing between Jira and Org-mode")
    (description
@@ -26704,7 +26315,7 @@ keybindings for skipping from host section to host section.")
                 "1i3zmsn0w2k7p2hlzssibckm32kf05l56mkhg96x4sf06g3pwq1d"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("dash" ,emacs-dash)))
+     (list emacs-dash))
     (home-page "https://github.com/magit/ssh-agency")
     (synopsis "Manage @code{ssh-agent} from Emacs")
     (description
@@ -26811,7 +26422,7 @@ contrast and few colors.")
                  (base32 "128hdmf0jkzr12fv2r6z349qiwba6q97hsb6b1n2qlhi0v5v3mfh"))))
       (build-system emacs-build-system)
       (native-inputs
-       `(("emacs-ert-runner" ,emacs-ert-runner)))
+       (list emacs-ert-runner))
       (arguments
        `(#:tests? #t
          #:test-command '("ert-runner")
@@ -26927,7 +26538,7 @@ and it should work well with 256 color terminals.")
         (base32 "0f2a360h8bizvqk6bmgxm59g8n7id5rzwlbv6d383h15w298mcga"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-pkg-info" ,emacs-pkg-info)))
+     (list emacs-pkg-info))
     (home-page
      "https://github.com/elixir-editors/emacs-elixir")
     (synopsis "Major mode for editing Elixir files")
@@ -27106,7 +26717,7 @@ such as:
                   (string-append "\"" (which "cpplint") "\"")))
                #t)))))
       (inputs
-       `(("cpplint" ,cpplint)))
+       (list cpplint))
       (propagated-inputs
        `(("flycheck-mode" ,emacs-flycheck)))
       (synopsis "Google C++ checker for Flycheck")
@@ -27132,8 +26743,7 @@ Google guidelines.")
         (base32 "1j2vfngq3512naaayv9kx0d1q2zg1xgs69l8afc7swg72h0l0imw"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("helm" ,emacs-helm)
-       ("fish-completion" ,emacs-fish-completion)))
+     (list emacs-helm emacs-fish-completion))
     (synopsis "Helm interface for Emacs fish-completion")
     (description "Helm Fish Completion is a Helm interface for Emacs
 fish-completion.  It can be used in both Eshell and M-x shell.")
@@ -27155,7 +26765,7 @@ fish-completion.  It can be used in both Eshell and M-x shell.")
         (base32 "0n8qa549c5syvgqw1h2zrakjjbygddpxzaifaq5irscgdcajrads"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("helm" ,emacs-helm)))
+     (list emacs-helm))
     (synopsis "Helm action to switch directory in Emacs REPLs")
     (description "Helm \"Switch-to-REPL\" offers the
 @code{helm-switch-to-repl} action, a generalized and extensible version of
@@ -27205,11 +26815,9 @@ other @code{helm-type-file} sources such as @code{helm-locate}.")
              (lambda _ (chdir ".."))))
          #:test-target "test"))
       (inputs
-       `(("tdlib" ,tdlib)
-         ("libappindicator" ,libappindicator)))
+       (list tdlib libappindicator))
       (native-inputs
-       `(("python" ,python)
-         ("pkg-config" ,pkg-config)))
+       (list python pkg-config))
       (home-page "https://zevlg.github.io/telega.el/")
       (synopsis "Server process of Telega")
       (description "Telega-server is helper program to interact with Telegram
@@ -27232,14 +26840,14 @@ service, and connect it with Emacs via inter-process communication.")
          (add-after 'unpack 'patch-sources
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Hard-code paths to `ffplay` and `ffmpeg`.
-             (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
-                    (ffmpeg-bin (string-append ffmpeg "/bin/ffmpeg"))
-                    (ffplay-bin (string-append ffmpeg "/bin/ffplay")))
+             (let* ((ffplay-bin (search-input-file inputs "/bin/ffplay"))
+                    (ffmpeg-bin (search-input-file inputs "/bin/ffmpeg")))
                (substitute* '("telega-ffplay.el" "telega-vvnote.el")
                  (("(shell-command-to-string\|concat) \"(ffmpeg\|ffprobe)"
                    all func cmd)
-                  (string-append func " \"" (assoc-ref inputs "ffmpeg")
-                                 "/bin/" cmd))
+                  (string-append func " \""
+                                 (search-input-file
+                                  inputs (string-append "/bin/" cmd))))
                  (("\\(executable-find \"ffplay\"\\)")
                   (string-append "(and (file-executable-p \"" ffplay-bin "\")"
                                  "\"" ffplay-bin "\")"))
@@ -27250,20 +26858,17 @@ service, and connect it with Emacs via inter-process communication.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "telega-customize.el"
                (("@TELEGA_SERVER_BIN@")
-                (string-append (assoc-ref inputs "emacs-telega-server")
-                               "/bin/telega-server")))
+                (search-input-file inputs "/bin/telega-server")))
              (substitute* "telega-util.el"
                (("@TELEGA_SHARE@")
                 (string-append (elpa-directory (assoc-ref outputs "out"))
                                "/etc"))))))))
     (inputs
-     `(("emacs-telega-server" ,emacs-telega-server)
-       ("ffmpeg" ,ffmpeg)))
+     (list emacs-telega-server ffmpeg))
     (native-inputs '())
     (propagated-inputs
-     `(("emacs-visual-fill-column" ,emacs-visual-fill-column)
-       ("emacs-company" ,emacs-company)
-       ("emacs-rainbow-identifiers" ,emacs-rainbow-identifiers)))
+     (list emacs-visual-fill-column emacs-company
+           emacs-rainbow-identifiers))
     (synopsis "GNU Emacs client for the Telegram messenger")
     (description "Telega is a full-featured, unofficial GNU Emacs-based client
 for the Telegram messaging platform.")))
@@ -27283,11 +26888,8 @@ for the Telegram messaging platform.")))
     (inputs '())
     (native-inputs '())
     (propagated-inputs
-     `(("emacs-alert" ,emacs-alert)
-       ("emacs-all-the-icons" ,emacs-all-the-icons)
-       ("emacs-dashboard" ,emacs-dashboard)
-       ("emacs-telega" ,emacs-telega)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-alert emacs-all-the-icons emacs-dashboard emacs-telega
+           emacs-transient))
     (synopsis "Contributed packages to Telega")
     (description "Telega-contrib is a collection of third-party
 contributed packages to Telega.")))
@@ -27308,11 +26910,9 @@ contributed packages to Telega.")))
     (build-system emacs-build-system)
     (arguments
      `(#:test-command '("ert-runner")))
-    (native-inputs `(("emacs-ert-runner" ,emacs-ert-runner)))
+    (native-inputs (list emacs-ert-runner))
     (propagated-inputs
-     `(("emacs-all-the-icons" ,emacs-all-the-icons)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-shrink-path" ,emacs-shrink-path)))
+     (list emacs-all-the-icons emacs-dash emacs-shrink-path))
     (synopsis "Fancy and fast mode-line inspired by minimalism design")
     (description "Doom modeline is a complete modeline for GNU Emacs inspired
 by the Doom theme collection.  This modeline features support for mode-specific
@@ -27377,8 +26977,7 @@ replicate some of the features of the Doom modeline package.")
         (base32 "0y0sdjixaxvywrlp2sw51wnczhk51q1svl5aghbk9rkxpwv9ys9v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-dash emacs-s))
     (home-page "https://github.com/davidshepherd7/frames-only-mode")
     (synopsis "Use frames instead of Emacs windows")
     (description
@@ -27426,9 +27025,7 @@ with a preconfigured set of keys.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
+     (list emacs-s emacs-dash emacs-f))
     (home-page "https://gitlab.com/bennya/shrink-path.el")
     (synopsis "Fish-style path truncation in emacs-lisp")
     (description "This package provides utility functions that allow for
@@ -27498,7 +27095,7 @@ buffer-exposing commands.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (home-page "https://github.com/4DA/eshell-toggle")
       (synopsis "Show and hide an @code{eshell} instance")
       (description "This package toggles an @code{eshell} instance for the
@@ -27521,7 +27118,7 @@ current buffer.")
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-fullframe" ,emacs-fullframe)))
+     (list emacs-fullframe))
     (home-page "https://git.sr.ht/~tomterl/repl-toggle")
     (synopsis "Switch to and from current major mode's REPL")
     (description "This package provides a function to switch to and from a
@@ -27551,19 +27148,15 @@ REPL appropriate to the current major mode.")
              (make-file-writable "rime.el")
              (emacs-substitute-variables "rime.el"
                ("rime-share-data-dir"
-                (string-append (assoc-ref inputs "rime-data")
-                               "/share/rime-data")))
-             #t))
+                (search-input-directory inputs
+                                        "share/rime-data")))))
          (add-before 'install 'build-emacs-module
            (lambda _
              (invoke "make" "lib"))))))
     (inputs
-     `(("librime" ,librime)
-       ("rime-data" ,rime-data)))
+     (list librime rime-data))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-popup" ,emacs-popup)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-dash emacs-popup emacs-posframe))
     (home-page "https://github.com/DogLooksGood/emacs-rime")
     (synopsis "Rime input method in Emacs")
     (description
@@ -27611,8 +27204,7 @@ display of major and minor modes in the mode line.")
            "1np1f51hc3phkl5w02a9a79gl38ra2d535i784fn4pqaasvm0rq8"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-ivy" ,emacs-ivy)
-         ("emacs-dash" ,emacs-dash)))
+       (list emacs-ivy emacs-dash))
       (synopsis "Browse anything in Org mode")
       (description "This package allows Org items to be accessed via the Ivy
 interface.")
@@ -27632,8 +27224,7 @@ interface.")
         (base32 "0b498qzaydjrhplx4d7zcrs883dlrhfiz812sv4m3pmhfwifcchh"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-posframe" ,emacs-posframe)))
+     (list emacs-ivy emacs-posframe))
     (home-page "https://github.com/tumashu/ivy-posframe")
     (synopsis "Pop a posframe (a child frame) to show Ivy candidates")
     (description
@@ -27702,9 +27293,7 @@ can specify how popup-displaying functions occupy the screen.")
           (base32 "0i1ylvw7p46pkf3yyyzcdmdhsspzymnnnvx8s0i7vynngr5x0vzh"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-popup" ,emacs-popup)
-         ("emacs-pos-tip" ,emacs-pos-tip)
-         ("emacs-showtip" ,emacs-showtip)))
+       (list emacs-popup emacs-pos-tip emacs-showtip))
       (home-page "https://www.emacswiki.org/emacs/download/sdcv.el")
       (synopsis "Emacs interface for @code{sdcv}")
       (description
@@ -27730,8 +27319,7 @@ translation using a tooltip or in a dedicated buffer.")
            "0dkfd3lap2v7b4nckzv8v7hczmzwzhbl75haqkra107ln91ldbwc"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-lacarte" ,emacs-lacarte)))
+       (list emacs-helm emacs-lacarte))
       (synopsis "Helm interface to @code{lacarte.el}")
       (description "This package provides a Helm interface to
 @code{lacarte.el}, a package that displays mode-specific commands as menu
@@ -27757,7 +27345,7 @@ items.")
            "0x7d51a6ljl014zy7mi27vzcqqbcwg9z4drq29fr2ajk82mqhlgd"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (synopsis "Help functions for Eshell")
       (description "This package provides a @code{run-help} function inspired
 by @code{zsh} as well as @code{eldoc} support.")
@@ -27805,7 +27393,7 @@ within @code{isearch-mode}.")
            "1limw82zd8jz3mhh9rqlmhj4cjhfgybs9argfjid1an3vpyhc85i"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (synopsis "Mount/unmount volumes in Linux via Helm")
       (description "This package provides a Helm interface to run operations
 on removable volumes in Linux.")
@@ -27830,7 +27418,7 @@ on removable volumes in Linux.")
            "15frl618393bc891d0yi3mdxzvbq790a86vfvp3dyd5riz4ddg95"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)))
+       (list emacs-async))
       (synopsis "Persistent save of @code{elisp} objects.")
       (description "This package provides minor modes for saving Emacs session
 data, including buffers, window configuration, variables, and more.")
@@ -27852,8 +27440,7 @@ data, including buffers, window configuration, variables, and more.")
         (base32 "1xp2d42yvqkimb7a15bv89bj0124lljw9cb36g49m13d7ny4fafn"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-a" ,emacs-a)
-       ("emacs-parseclj" ,emacs-parseclj)))
+     (list emacs-a emacs-parseclj))
     (home-page "https://cider.mx")
     (synopsis "EDN parser for Emacs Lisp")
     (description
@@ -27875,7 +27462,7 @@ It uses parseclj's shift-reduce parser internally.")
        (sha256
         (base32 "0n0m3xc2dawgdhb68zznpsbzbbvf9fwgf9v8pzzwa2jncgi1yhh0"))))
     (build-system emacs-build-system)
-    (propagated-inputs `(("emacs-a" ,emacs-a)))
+    (propagated-inputs (list emacs-a))
     (home-page "https://cider.mx")
     (synopsis "Clojure parser for Emacs Lisp")
     (description
@@ -27923,8 +27510,7 @@ or simply disable the mode-line in buffers where it is not very useful.")
                   "0vfn4smqba1vsshz48ggkj8gs94la0sxb1sq4shrb41qj2x3dci7"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-cider" ,emacs-cider)))
+       (list emacs-helm emacs-cider))
       (synopsis "Helm interface to Clojure's CIDER")
       (description "Helm-CIDER adds Helm interfaces to
 @command{cider-apropos}, @command{cider-apropos-documentation},
@@ -27953,7 +27539,7 @@ It also provides original Helm commands: @command{helm-cider-spec},
                   "1xp2hjhn52k6l1g6ypva6dsklpawni7gvjafbz6404f9dyxflh7l"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-peg" ,emacs-peg)))
+       (list emacs-peg))
       (synopsis "Read and write EDN from Elisp")
       (description "This is an Emacs Lisp library for reading and writing the
 data format @code{edn}.  See @url{https://github.com/edn-format/edn}.")
@@ -27976,8 +27562,7 @@ data format @code{edn}.  See @url{https://github.com/edn-format/edn}.")
                   "015b8zxh91ljhqvn6z43gy08di54xcw9skw0i7frj3d7gk984qhl"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)
-         ("emacs-edn" ,emacs-edn)))
+       (list emacs-helm emacs-edn))
       (synopsis "Search help on clojuredocs.org with Helm")
       (description "This package provides a Helm interface to lookup Clojure
 documentation on @url{https://clojuredocs.org} with Helm.
@@ -28008,7 +27593,7 @@ pattern guessed from thing under current cursor position.
          "01lh1df0bnas1p7xlqc4i1jd67f8lxgq0q2zsvx10z8828i76j3v"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (synopsis "Convenient related-buffer selection for Emacs Helm")
     (description "Helm Selector is a collection of Helm helper functions for
 convenient buffer selection.
@@ -28040,9 +27625,9 @@ used for the creation of a new buffer of mode X.")
            "0msj7nbsb363pxamxi7n2z08cp5jizkpjbwia8f5a161wjglrihs"))))
       (build-system emacs-build-system)
       (inputs
-       `(("wordnet" ,wordnet)))
+       (list wordnet))
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       (list emacs-helm))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -28079,7 +27664,7 @@ Wordnet.")
         (base32 "0v0wm1x11r1h9p139c5rl0r4s5q6092bmwrsnr2140ddbq34mnvy"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm" ,emacs-helm)))
+     (list emacs-helm))
     (home-page "https://github.com/brotzeit/helm-xref")
     (synopsis "Helm interface for @code{xref}")
     (description "This package provides a Helm interface for selecting
@@ -28105,7 +27690,7 @@ Wordnet.")
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)))
+       (list emacs-dash))
       (synopsis "Major mode for editing Mercury files")
       (description
        "Major mode for editing Mercury files.  This is a rewrite of the original
@@ -28171,7 +27756,7 @@ window.")
         (base32 "146qpiigz12zp1823ggxfrx090g0mxs7gz1ba7sa0iq6ibgzwwm9"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://elpa.gnu.org/packages/company-ebdb.html")
     (synopsis "Company completion backend for EBDB in Message mode")
     (description "@code{company-ebdb} provides Company mode integration for
@@ -28285,7 +27870,7 @@ the current buffer.")
         (base32 "11zpqwh1mlfifbgnvhc63bvnhg340jgxssm3m43hr1sxsyb52lh6"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-switch-buffer-functions" ,emacs-switch-buffer-functions)))
+     (list emacs-switch-buffer-functions))
     (home-page "https://gitlab.com/jgkamat/erc-scrolltoplace")
     (synopsis "ERC module to replace scrolltobottom while using keep-place")
     (description "@code{erc-scrolltoplace} is an ERC module to try
@@ -28432,7 +28017,7 @@ fontifications.")
           (base32 "08zb7vc3v3wdxkzgi902vlc5ybfvm8fxrvm5drnwfsjj9873pbcb"))))
       (build-system emacs-build-system)
       (inputs
-       `(("sqlite" ,sqlite)))
+       (list sqlite))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -28512,7 +28097,7 @@ variables.")
         (base32 "1rhf2hr345953mkn52i58aiq8j16ps2ckapd5f7jxmhkcpzxxfhk"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)))
+     (list emacs-company))
     (home-page "https://github.com/dunn/company-emoji/")
     (synopsis "Company completion back-end for emoji")
     (description
@@ -28545,11 +28130,9 @@ emoji.")
              (make-file-writable "exiftool.el")
              (emacs-substitute-variables "exiftool.el"
                ("exiftool-executable"
-                (string-append (assoc-ref inputs "perl-image-exiftool")
-                               "/bin/exiftool")))
-             #t)))))
+                (search-input-file inputs "/bin/exiftool"))))))))
     (inputs
-     `(("perl-image-exiftool" ,perl-image-exiftool)))
+     (list perl-image-exiftool))
     (home-page "https://git.systemreboot.net/exiftool.el/about/")
     (synopsis "Elisp wrapper around ExifTool")
     (description "@code{emacs-exiftool} is an Elisp wrapper around ExifTool.
@@ -28695,8 +28278,7 @@ a @samp{date} keywords, and optionally, a @samp{filetags} keyword.")
                (substitute* "Makefile"
                  (("/bin/rm") (which "rm"))))))))
       (native-inputs
-       `(("emacs-minimal" ,emacs-minimal)
-         ("ruby" ,ruby)))
+       (list emacs-minimal ruby))
       (home-page "https://github.com/skk-dev/ddskk")
       (synopsis "Simple Kana to Kanji conversion program")
       (description
@@ -28709,7 +28291,7 @@ conversion program}, a Japanese input method on Emacs.")
     (inherit emacs-ddskk)
     (name "emacs-ddskk-nicola")
     (propagated-inputs
-     `(("emacs-ddskk" ,emacs-ddskk)))
+     (list emacs-ddskk))
     (arguments
      `(#:make-flags
        (let ((out (assoc-ref %outputs "out")))
@@ -28788,7 +28370,7 @@ conventions.")
                  (copy-recursively "snippets/haskell-mode" snippets)
                  #t))))))
       (propagated-inputs
-       `(("emacs-yasnippet" ,emacs-yasnippet)))
+       (list emacs-yasnippet))
       (home-page "https://github.com/haskell/haskell-snippets")
       (synopsis "Official collection of YASnippet Haskell snippets for Emacs")
       (description "Haskell-Snippets is a collection of YASnippet Haskell
@@ -28841,16 +28423,16 @@ snippets for Emacs.")
                  (install-file "org-roam.info"
                                (string-append out "/share/info")))))))))
        (inputs
-        `(("graphviz" ,graphviz)))
+        (list graphviz))
        (native-inputs
-        `(("texinfo" ,texinfo)))
+        (list texinfo))
        (propagated-inputs
-        `(("emacs-dash" ,emacs-dash)
-          ("emacs-emacsql-sqlite3" ,emacs-emacsql-sqlite3)
-          ("emacs-f" ,emacs-f)
-          ("emacs-magit" ,emacs-magit)
-          ("emacs-org" ,emacs-org)
-          ("emacs-s" ,emacs-s)))
+        (list emacs-dash
+              emacs-emacsql-sqlite3
+              emacs-f
+              emacs-magit
+              emacs-org
+              emacs-s))
        (home-page "https://github.com/org-roam/org-roam/")
        (synopsis "Non-hierarchical note-taking with Org mode")
        (description "Emacs Org Roam is a solution for taking non-hierarchical
@@ -28875,9 +28457,7 @@ personal wiki.")
         (base32 "1d09y923d9n5v7m201myba85m4064s2hdy3pgzssy70mjncg3m1g"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-helm-bibtex" ,emacs-helm-bibtex)
-       ("emacs-org-ref" ,emacs-org-ref)
-       ("emacs-org-roam" ,emacs-org-roam)))
+     (list emacs-helm-bibtex emacs-org-ref emacs-org-roam))
     (home-page "https://github.com/org-roam/org-roam-bibtex")
     (synopsis "Connector between Org Roam, BibTeX-completion, and Org Ref")
     (description
@@ -28901,10 +28481,9 @@ opening Org Ref's @code{cite:} links.")
                (base32
                 "0z2frp5mn3lp2xskwanw2rncrwa50x3aphy87vfxmhx4fqlqrzy8"))))
     (inputs
-     `(("emacs-cort" ,emacs-cort)
-       ("emacs-with-simulated-input" ,emacs-with-simulated-input)))
+     (list emacs-cort emacs-with-simulated-input))
     (propagated-inputs
-     `(("emacs-mustache" ,emacs-mustache)))
+     (list emacs-mustache))
     (arguments
      ;; FIXME: Tests fail with "Wrong type argument: sequencep, :equal".  It
      ;; seems to be an issue with Cort library.
@@ -29034,9 +28613,9 @@ restore that occurrence of the placeholder and move to the next.")
                          (basic-save-buffer)))
                #t))))))
     (inputs
-     `(("plantuml" ,plantuml)))
+     (list plantuml))
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
+     (list emacs-dash))
     (build-system emacs-build-system)
     (home-page "https://github.com/skuro/plantuml-mode")
     (synopsis "Major mode for editing PlantUML sources")
@@ -29060,7 +28639,7 @@ or region and use of locally installed binaries.")
                 "02q531c9wvdwflhggflnci4a36h2bb90bq25bbhw6i2lvrd9sk55"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (arguments
      `(#:tests? #t
        #:test-command '("emacs" "-Q" "-batch" "-L" "."
@@ -29173,7 +28752,7 @@ you use some other configuration.")
           (base32 "0yv38bqdp6b614lbj4v408vv5mlic3vs1v7266xrfxm1cm903apj"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-transient" ,emacs-transient)))
+       (list emacs-transient))
       (home-page "https://github.com/TatriX/tshell")
       (synopsis "Experimental buffer-oriented Emacs shell")
       (description
@@ -29228,9 +28807,7 @@ arbitrary Emacs Lisp objects.")
                        '("csound-font-lock.el"))
              #t)))))
     (inputs
-     `(("emacs-highlight" ,emacs-highlight)
-       ("emacs-multi" ,emacs-multi)
-       ("emacs-shut-up" ,emacs-shut-up)))
+     (list emacs-highlight emacs-multi emacs-shut-up))
     (home-page "https://github.com/hlolli/csound-mode")
     (synopsis "Emacs major mode for coding in CSound")
     (description "Provides both a basic major mode for editing
@@ -29314,7 +28891,7 @@ picked up when copy-pasting text from buffer to buffer.")
                (copy-recursively "assets" assets)
                #t))))))
     (propagated-inputs
-     `(("emacs-xmlgen" ,emacs-xmlgen)))
+     (list emacs-xmlgen))
     (home-page "https://sr.ht/~brettgilio/org-webring")
     (synopsis "Generate webrings for Org-based sites / blogs")
     (description "Org-webring is an alternative implementation of a
@@ -29363,7 +28940,7 @@ in other major modes.  Links can be opened and edited like in Org mode.")
            "1nvwbwl26z03963g9c82b3ggm39r95z1vp7c9qsa9mjm46dyq27w"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-htmlize" ,emacs-htmlize)))
+       (list emacs-htmlize))
       (home-page "https://git.sr.ht/~technomancy/scpaste")
       (synopsis "Emacs-based static HTML pastebin")
       (description "This library will place an HTML copy of a
@@ -29389,8 +28966,7 @@ publicly-accessible HTTP server.")
          "118cgw5lsffqdqz95mnkw36mmnsbg9m52r2np4m7v14mjjwr9fby"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-s" ,emacs-s)))
+     (list emacs-company emacs-s))
     (home-page "https://github.com/TheBB/company-reftex")
     (synopsis "RefTeX backends for company-mode")
     (description "This package provides company-mode backends for completing
@@ -29415,7 +28991,7 @@ included with Emacs.")
                   "13kdwi4d1pvba6wv9yn1s0dl4cnq61zwf3j647d1s5ybqlrw5f4r"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-company" ,emacs-company)))
+       (list emacs-company))
       (home-page "https://github.com/xenodium/company-org-block")
       (synopsis "Emacs @code{company-complete} for Org blocks")
       (description
@@ -29441,8 +29017,7 @@ included with Emacs.")
           (base32 "1qi092mw2n08v6yr0j6hlpx0pnlcnhxjqbsrlw9pn4yin6zk91yp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("dash" ,emacs-dash)
-         ("s" ,emacs-s)))
+       (list emacs-dash emacs-s))
       (home-page "https://github.com/plexus/html-to-hiccup")
       (synopsis "Turn HTML into Hiccup syntax")
       (description
@@ -29524,8 +29099,7 @@ faithfully.  See @url{https://github.com/then/promise}.
         (base32 "0aav9qdswnw7ynqlzn0sm34as5fj2d85syxgg8zjabzp6646ay29"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("promise" ,emacs-promise)
-       ("iter2" ,emacs-iter2)))
+     (list emacs-promise emacs-iter2))
     (home-page "https://github.com/chuntaro/emacs-async-await")
     (synopsis "Async/Await for Emacs")
     (description "This is a simple implementation of Async/Await inspired by
@@ -29549,8 +29123,7 @@ the TypeScript implementation.")
           (base32 "02a4j0yy7330kfr3rd3k2agdj01ii6989nki598anbamq6xvj5ql"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("async-await" ,emacs-async-await)
-         ("request" ,emacs-request)))
+       (list emacs-async-await emacs-request))
       (home-page "https://github.com/4hiziri/rocket-chat")
       (synopsis "Emacs Rocket.chat client")
       (description "This package provides an Emacs client for the Rocket.chat
@@ -29708,7 +29281,7 @@ commands, in particular @code{find-definition}.")
         (base32 "1vaikknjzmhpszyi4yxjjkp1ihgmhpbnbx1s5pjy4mnhl1ibi33b"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-map" ,emacs-map)))
+     (list emacs-map))
     (home-page "https://github.com/alphapapa/burly.el")
     (synopsis "Save and restore frame/window configurations with buffers")
     (description "This package provides tools to save and restore frame and
@@ -29756,8 +29329,7 @@ rules about where space should be left to separate words and parentheses.")
         (base32 "0b9hf20iah3ym2d4kz67k0kb48dq0442zxw4zmc03zg3sxfdxh0x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-transient" ,emacs-transient)))
+     (list emacs-dash emacs-transient))
     (home-page "https://github.com/MaximeWack/seriesTracker")
     (synopsis "Keep track of the TV shows you watch from Emacs")
     (description
@@ -29798,9 +29370,9 @@ released, and track their progress in watching a series.")
                                 "tests/integration/test-webpaste-providers.el")
                (("describe") "xdescribe")))))))
     (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
+     (list emacs-buttercup))
     (propagated-inputs
-     `(("emacs-request" ,emacs-request)))
+     (list emacs-request))
     (home-page "https://github.com/etu/webpaste.el")
     (synopsis "Paste to pastebin-like services")
     (description "This mode pastes whole buffers or parts of buffers
@@ -29833,10 +29405,7 @@ and preferred services can easily be configured.")
          '("emacs" "--no-init-file" "--batch"
            "--eval=(require 'ecukes)" "--eval=(ecukes)")))
       (native-inputs
-       `(("emacs-ecukes" ,emacs-ecukes)
-         ("emacs-espuds" ,emacs-espuds)
-         ("emacs-undercover" ,emacs-undercover)
-         ("openjdk" ,openjdk9)))
+       (list emacs-ecukes emacs-espuds emacs-undercover openjdk9))
       (propagated-inputs
        `(("emacs-origami" ,emacs-origami-el)
          ("emacs-s" ,emacs-s)))
@@ -29860,8 +29429,7 @@ and preferred services can easily be configured.")
         (base32 "1q5caxm4rnh4jy5n88dhkdbx1afsshmfki5dl8xsqbdb3y0zq7yi"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-avy" ,emacs-avy)))
+     (list emacs-ivy emacs-avy))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Avy integration for Ivy")
     (description
@@ -29894,7 +29462,7 @@ and preferred services can easily be configured.")
                            (rename-file f (basename f)))
                          el-files)))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/minad/vertico")
     (synopsis "Vertical interactive completion")
     (description
@@ -29941,8 +29509,7 @@ files, providing syntax highlighting and indentation rules.")
         (base32 "06rln9bnq5hli5rqlm47fb68b8llpqrmzwqqv4rn7mx3854i9a5x"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)
-       ("emacs-hydra" ,emacs-hydra)))
+     (list emacs-ivy emacs-hydra))
     (home-page "https://github.com/abo-abo/swiper")
     (synopsis "Additional key bindings for Ivy")
     (description
@@ -29967,7 +29534,7 @@ shorter than usual, using mostly unprefixed keys.")
          "0507acyr9h4646scx316niq27vir6hl2gsgz7wdbiw0cb2drfkd1"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-yaml-mode" ,emacs-yaml-mode)))
+     (list emacs-yaml-mode))
     (home-page "https://github.com/tom-tan/cwl-mode")
     (synopsis "Emacs mode for @acronym{CWL, Common Workflow Language} files")
     (description "This package provides a major mode for editing
@@ -30030,7 +29597,7 @@ to the @url{https://multitran.com} online dictionary.")
         (base32 "0ky167xh1hrmqsldybzjhyqjizgjzs1grn5mf8sm2j9qwcvjw2zv"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-s" ,emacs-s)))
+     (list emacs-s))
     (home-page "http://www.github.com/brunchboy/kibit-helper")
     (synopsis "Use the Kibit Leiningen plugin from Emacs")
     (description
@@ -30129,8 +29696,7 @@ Unlike Emacs' generic ASM mode, it understands NASM-specific syntax.")
                   "1q30cbqq0h1gfwlcbnx9s930li7w7a0y8sx2ivbvvyyc2j5gsk4j"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-async" ,emacs-async)
-         ("ht" ,emacs-ht)))
+       (list emacs-async emacs-ht))
       (synopsis "Testeable Emacs Lisp API that wraps around GNU Global")
       (description "This package provides a testeable Emacs Lisp API that
 wraps GNU Global calls and integration to editor using this API with
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 03f8c25d67..12046f0d39 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -73,6 +73,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix utils)
+  #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
 (define-public emacs
@@ -287,8 +288,9 @@
        ;; must also provide zlib as an input.
        ("libpng" ,libpng)
        ("zlib" ,zlib)
-
-       ("librsvg" ,librsvg)
+       ("librsvg" ,@(if (target-x86-64?)
+                         (list librsvg-bootstrap)
+                         (list librsvg-2.40)))
        ("libxpm" ,libxpm)
        ("libxml2" ,libxml2)
        ("libice" ,libice)
@@ -344,8 +346,8 @@ languages.")
           (base32
            "0igjm9kwiswn2dpiy2k9xikbdfc7njs07ry48fqz70anljj8y7y3"))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ,@(package-native-inputs emacs))))))
+       (modify-inputs (package-native-inputs emacs)
+         (prepend autoconf))))))
 
 (define-public emacs-next-pgtk
   (let ((commit "ae18c8ec4f0ef37c8c9cda473770ff47e41291e2")
@@ -369,10 +371,9 @@ languages.")
          ((#:configure-flags flags ''())
           `(cons* "--with-pgtk" "--with-xwidgets" ,flags))))
       (propagated-inputs
-       `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-         ("glib-networking" ,glib-networking)))
+       (list gsettings-desktop-schemas glib-networking))
       (inputs
-       `(("webkitgtk" ,webkitgtk)
+       `(("webkitgtk" ,webkitgtk-with-libsoup2)
          ,@(package-inputs emacs-next)))
       (home-page "https://github.com/masm11/emacs")
       (synopsis "Emacs text editor with @code{pgtk} and @code{xwidgets} support")
@@ -418,7 +419,7 @@ editor (with xwidgets support)")
            (delete 'restore-emacs-pdmp)
            (delete 'strip-double-wrap)))))
     (inputs
-     `(("webkitgtk" ,webkitgtk)
+     `(("webkitgtk" ,webkitgtk-with-libsoup2)
        ("libxcomposite" ,libxcomposite)
        ,@(package-inputs emacs)))))
 
@@ -563,12 +564,12 @@ This package contains the library database.")
          "0jp61y09xqj10mclpip48qlfhniw8gwy8b28cbzxy8hq8pkwmfkq"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fribidi" ,fribidi)
-       ("gd" ,gd)
-       ("libotf" ,libotf)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("m17n-db" ,m17n-db)))
+     (list fribidi
+           gd
+           libotf
+           libxft
+           libxml2
+           m17n-db))
     (arguments
      `(#:parallel-build? #f))
     ;; With `guix lint' the home-page URI returns a small page saying
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 4315cc0618..1c8b76c11d 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -295,9 +295,9 @@ usable on embedded products.")
            (origin-patches (package-source gcc-7))
            (search-patches "gcc-7-cross-environment-variables.patch")))))
       (native-inputs
-       `(("flex" ,flex)
-         ("isl" ,isl-0.18)
-         ,@(alist-delete "isl" (package-native-inputs xgcc))))
+       (modify-inputs (package-native-inputs xgcc)
+         (delete "isl")
+         (prepend flex isl-0.18)))
       (arguments
        (substitute-keyword-arguments (package-arguments xgcc)
          ((#:phases phases)
@@ -517,12 +517,9 @@ languages are C and C++.")
                 "0ndyfh51hiqyv2yscpj6qd091w7myxxjid3a6rx8f6k233vy826q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://repo.or.cz/w/libjaylink.git")
     (synopsis "Library to interface Segger J-Link devices")
     (description "libjaylink is a shared library written in C to access
@@ -560,7 +557,7 @@ SEGGER J-Link and compatible devices.")
          )))
     (native-inputs
      ;; For tests.
-     `(("inetutils" ,inetutils)))       ; for hostname
+     (list inetutils))       ; for hostname
     (home-page "http://jim.tcl.tk/index.html")
     (synopsis "Small footprint Tcl implementation")
     (description "Jim is a small footprint implementation of the Tcl programming
@@ -585,18 +582,14 @@ language.")
                   "1q536cp80v2bcy6xwk08f1r2ljyw13jchx3a1z7d3ni3vqql7rc6"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("which" ,base:which)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf
+             automake
+             libtool
+             base:which
+             pkg-config
+             texinfo))
       (inputs
-       `(("hidapi" ,hidapi)
-         ("jimtcl" ,jimtcl)
-         ("libftdi" ,libftdi)
-         ("libjaylink" ,libjaylink)
-         ("libusb-compat" ,libusb-compat)))
+       (list hidapi jimtcl libftdi libjaylink libusb-compat))
       (arguments
        '(#:configure-flags
          (append (list "LIBS=-lutil"
@@ -699,8 +692,8 @@ with a layered architecture of JTAG interface and TAP support.")
                   (origin-patches (package-source gcc-6))
                   (search-patches "gcc-cross-environment-variables.patch")))))
       (native-inputs
-       `(("flex" ,flex)
-         ,@(package-native-inputs xgcc)))
+       (modify-inputs (package-native-inputs xgcc)
+         (prepend flex)))
       ;; All headers and cross libraries of the propeller toolchain are
       ;; installed under the "propeller-elf" prefix.
       (native-search-paths
@@ -808,9 +801,7 @@ with a layered architecture of JTAG interface and TAP support.")
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "install-includes" make-flags))))))
       (native-inputs
-       `(("propeller-gcc" ,propeller-gcc)
-         ("propeller-binutils" ,propeller-binutils)
-         ("perl" ,perl)))
+       (list propeller-gcc propeller-binutils perl))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "C library for the Parallax Propeller")
       (description "This is a C library for the Parallax Propeller
@@ -902,8 +893,7 @@ code.")
              (lambda _ (chdir "loader") #t))
            (delete 'configure))))
       (native-inputs
-       `(("openspin" ,openspin)
-         ("propeller-toolchain" ,propeller-toolchain)))
+       (list openspin propeller-toolchain))
       (home-page "https://github.com/parallaxinc/propgcc")
       (synopsis "Loader for Parallax Propeller micro-controllers")
       (description "This package provides the tool @code{propeller-load} to
@@ -948,9 +938,7 @@ upload binaries to a Parallax Propeller micro-controller.")
                          '("testlex" "spin2cpp" "fastspin")))
              #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("propeller-load" ,propeller-load)
-       ("propeller-toolchain" ,propeller-toolchain)))
+     (list bison propeller-load propeller-toolchain))
     (home-page "https://github.com/totalspectrum/spin2cpp")
     (synopsis "Convert Spin code to C, C++, or PASM code")
     (description "This is a set of tools for converting the Spin language for
@@ -1090,8 +1078,8 @@ the Raspberry Pi chip.")
                  (search-patches "gcc-6-fix-buffer-size.patch"
                                  "gcc-6-fix-isl-includes.patch"))))
       (native-inputs
-        `(("flex" ,flex)
-          ,@(package-native-inputs xgcc)))
+        (modify-inputs (package-native-inputs xgcc)
+          (prepend flex)))
       (synopsis "GCC for VC4")
       (description "This package provides @code{gcc} for VideoCore IV,
 the Raspberry Pi chip."))))
@@ -1112,12 +1100,9 @@ the Raspberry Pi chip."))))
             "1rypfb96k2szqgygp3jnwg2zq9kwmfz0460dsahn3r2vkzml8wn7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libftdi" ,libftdi)
-       ("python" ,python)))
+     (list libftdi python))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("which" ,base:which)))
+     (list pkg-config swig base:which))
     (arguments
      `(#:tests? #f ; No tests exist.
        #:parallel-build? #f  ; Would be buggy.
@@ -1257,7 +1242,7 @@ SPI, I2C, JTAG.")
              #t))
          (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "Freecalypso host tools")
     (description "This package provides some tools for debugging FreeCalypso phones and the FreeCalypso FCDEV3B dev board.
 
@@ -1370,12 +1355,10 @@ these identified regions.
                 "1d10qxyghz66zp7iqpm8q8rfv9jz9n609gxmfcav1lssmf1dlyk3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyserial" ,python-pyserial)
-       ("python-pyusb" ,python-pyusb)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-pyserial python-pyusb python-tqdm))
     (native-inputs
      ;; For tests.
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/grigorig/stcgal")
     (synopsis "Programmer for STC 8051-compatible microcontrollers")
     (description "stcgal is a command-line flash-programming tool for STC
@@ -1408,7 +1391,7 @@ STC89, STC90, STC10, STC11, STC12, STC15 and STC8 series.")
          (list (string-append "-DSTLINK_UDEV_RULES_DIR=" udev-rules)
                (string-append "-DSTLINK_MODPROBED_DIR=" modprobe)))))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (synopsis "Programmer for STM32 Discovery boards")
     (description "This package provides a firmware programmer for the STM32
 Discovery boards.  It supports two versions of the chip: ST-LINK/V1 (on
@@ -1433,10 +1416,8 @@ raw USB commands.")
         (base32
          "0ql6ij1hrj2ir5wkxm96zgig5qwvfwa75w77wh2y13w6b9cqcr4b"))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-configobj" ,python-configobj)
-       ("python-pykwalify" ,python-pykwalify)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-colorama python-configobj python-pykwalify
+           python-pyyaml))
     (build-system python-build-system)
     (home-page "https://github.com/zephyrproject-rtos/west")
     (synopsis "Zephyr RTOS Project meta-tool")
@@ -1476,7 +1457,7 @@ debugging them, and more.")
                                  config-destination)
                #t))))))
     (inputs
-     `(("mosquitto" ,mosquitto)))
+     (list mosquitto))
     (native-inputs
      `(("automake" ,automake)
        ("autoconf" ,autoconf)
@@ -1528,8 +1509,7 @@ handling communication with eBUS devices connected to a 2-wire bus system
               (string-append (assoc-ref outputs "out") "/share/man"))
              #t)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://mazsola.iit.uni-miskolc.hu/ucsim/")
     (synopsis "Simulators for various microcontroller families")
     (description "μCsim is a collection of software simulators for
@@ -1619,8 +1599,7 @@ families, plus many of their variants.")
                     (("from IPython.*") ""))))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-prettytable" ,python-prettytable)))
+     (list python-cryptography python-prettytable))
     (home-page "https://github.com/PSPReverse/psptool")
     (synopsis "Tool for dealing with AMD binary blobs")
     (description "PSPTool is a tool for dealing with AMD binary blobs")
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index d2964be25d..21a7773bb2 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2021 Felipe Balbi <balbi@kernel.org>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -122,20 +123,20 @@
     (arguments
      `(#:configure-flags '("--disable-pdf-docs")))
     (native-inputs
-     `(("bison" ,bison)
-       ("dos2unix" ,dos2unix)
-       ("flex" ,flex)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list bison
+           dos2unix
+           flex
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glew" ,glew)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("xa" ,xa)))
+     (list alsa-lib
+           glew
+           glib
+           gtk+
+           pulseaudio
+           sdl
+           sdl-image
+           xa))
     (home-page "https://vice-emu.sourceforge.io/")
     (synopsis "The versatile Commodore emulator")
     (description
@@ -186,7 +187,10 @@ SuperCPU.")
          (add-after 'unpack 'fix-source
            (lambda _
              (substitute* (find-files "." ".*\\.[ch]")
-               (("\"zlib/zlib.h\"") "<zlib.h>"))))
+               (("\"zlib/zlib.h\"") "<zlib.h>"))
+             (substitute* "Makefile"
+               (("CFLAGS:=-std=gnu99" all)
+                (string-append all " -fcommon")))))
          (delete 'configure)
          (replace 'install
            (lambda* args
@@ -199,12 +203,9 @@ SuperCPU.")
                       ("shaders" "share/blastem/shaders"))
                     args))))))
     (inputs
-     `(("glew" ,glew)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list glew mesa sdl2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.retrodev.com/blastem/")
     (synopsis "Genesis/Mega Drive emulator")
     (description "Blastem is an emulator for the Sega Genesis/Mega Drive
@@ -232,14 +233,9 @@ console.")
      `(#:configure-flags '("--enable-wifi"
                            "--enable-openal")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("zlib" ,zlib)
-       ("sdl" ,sdl)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("glu" ,glu)))
+     (list zlib sdl glib gtk+-2 glu))
     (home-page "http://desmume.org/")
     (synopsis "Nintendo DS emulator")
     (description
@@ -286,11 +282,10 @@ console.")
            (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((fontfile
-                      (string-append (assoc-ref inputs "font-wqy-microhei")
-                                     "/share/fonts/truetype/wqy-microhei.ttc"))
+                      (search-input-file inputs
+                                         "/share/fonts/truetype/wqy-microhei.ttc"))
                      (libvulkan
-                      (string-append (assoc-ref inputs "vulkan-loader")
-                                     "/lib/libvulkan.so")))
+                      (search-input-file inputs "/lib/libvulkan.so")))
                  (chdir "docs")
                  (invoke "bash" "-c" "g++ -O2 $(freetype-config \
 --cflags --libs) gc-font-tool.cpp -o gc-font-tool")
@@ -320,39 +315,39 @@ console.")
        `(("pkg-config" ,pkg-config)
          ("gettext" ,gettext-minimal)))
       (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("ao" ,ao)
-         ("bluez" ,bluez)
-         ("curl" ,curl)
-         ("eudev" ,eudev)
-         ("ffmpeg" ,ffmpeg)
-         ("font-wqy-microhei" ,font-wqy-microhei)
-         ("freetype" ,freetype)
-         ("glew" ,glew)
-         ("glib" ,glib)
-         ("glu" ,glu)
-         ("gtk+" ,gtk+-2)
-         ("hidapi" ,hidapi)
-         ("libevdev" ,libevdev)
-         ("libpng" ,libpng)
-         ("libusb" ,libusb)
-         ("libx11" ,libx11)
-         ("libxi" ,libxi)
-         ("libxrandr" ,libxrandr)
-         ("lzo" ,lzo)
-         ("mbedtls-apache" ,mbedtls-apache)
-         ("mesa" ,mesa)
-         ("miniupnpc" ,miniupnpc)
-         ("openal" ,openal)
-         ("pugixml" ,pugixml)
-         ("pulseaudio" ,pulseaudio)
-         ("qtbase" ,qtbase-5)
-         ("sdl2" ,sdl2)
-         ("sfml" ,sfml)
-         ("soil" ,soil)
-         ("soundtouch" ,soundtouch)
-         ("vulkan-loader" ,vulkan-loader)
-         ("zlib" ,zlib)))
+       (list alsa-lib
+             ao
+             bluez
+             curl
+             eudev
+             ffmpeg
+             font-wqy-microhei
+             freetype
+             glew
+             glib
+             glu
+             gtk+-2
+             hidapi
+             libevdev
+             libpng
+             libusb
+             libx11
+             libxi
+             libxrandr
+             lzo
+             mbedtls-apache
+             mesa
+             miniupnpc
+             openal
+             pugixml
+             pulseaudio
+             qtbase-5
+             sdl2
+             sfml
+             soil
+             soundtouch
+             vulkan-loader
+             zlib))
       (home-page "https://dolphin-emu.org/")
       (synopsis "Nintendo Wii and GameCube emulator")
       (description
@@ -378,15 +373,14 @@ turbo speed, networked multiplayer, and graphical enhancements.")
                 "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("sdl" ,sdl)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)
-       ("alsa-lib" ,alsa-lib)
-       ("glu" ,glu)
-       ("mesa" ,mesa)))
+     (list sdl
+           libpng
+           zlib
+           alsa-lib
+           glu
+           mesa))
     (home-page "https://www.dosbox.com")
     (synopsis "X86 emulator with CGA/EGA/VGA/etc. graphics and sound")
     (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox
@@ -412,12 +406,12 @@ older games.")
         (base32 "07jwmmm1bhfxavlhl854cj8l5iy5hqx5hpwkkjbcwqg7yh9jfs2x"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55 #:configure-flags
+     `(#:configure-flags
        ;; These both try to git clone subprojects.
        (list "-Dunit_tests=disabled"     ; gtest
              "-Duse_mt32emu=false")))    ; mt32emu
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("fluidsynth" ,fluidsynth)
@@ -503,8 +497,7 @@ emulate a serial nullmodem over TCP/IP.")
                #t))))
        #:tests? #f))    ; test suite wants mips toolchain
     (inputs
-     `(("elfutils" ,elfutils)
-       ("qtbase" ,qtbase-5)))
+     (list elfutils qtbase-5))
     (home-page "https://github.com/cvut/QtMips")
     (synopsis "MIPS CPU emulator")
     (description "This package contains a MIPS CPU emulator.  The simulator
@@ -563,7 +556,7 @@ and a game metadata scraper.")
         (base32 "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("ao" ,ao)
@@ -605,8 +598,7 @@ and a game metadata scraper.")
                       (bin (string-append out "/bin"))
                       (higan (string-append bin "/higan"))
                       (higan-original (string-append higan "-original"))
-                      (bash (string-append (assoc-ref inputs "bash")
-                                           "/bin/bash"))
+                      (bash (search-input-file inputs "/bin/bash"))
                       (coreutils (assoc-ref inputs "coreutils"))
                       (mkdir (string-append coreutils "/bin/mkdir"))
                       (cp (string-append coreutils "/bin/cp"))
@@ -666,7 +658,7 @@ V2.")
         ;; "--with-external-mpcdec"
         "--with-external-lzo")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("flac" ,flac)
@@ -739,22 +731,21 @@ The following systems are supported:
        (list "-DUSE_LZMA=OFF"           ;do not use bundled LZMA
              "-DUSE_LIBZIP=OFF")))      ;use "zlib" instead
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libedit" ,libedit)
-       ("libelf" ,libelf)
-       ("libepoxy" ,libepoxy)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("minizip" ,minizip)
-       ("ncurses" ,ncurses)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("sdl2" ,sdl2)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list ffmpeg
+           libedit
+           libelf
+           libepoxy
+           libpng
+           mesa
+           minizip
+           ncurses
+           qtbase-5
+           qtmultimedia
+           sdl2
+           sqlite
+           zlib))
     (home-page "https://mgba.io")
     (synopsis "Game Boy Advance emulator")
     (description
@@ -781,10 +772,9 @@ and Game Boy Color games.")
         (base32 "1r391jdh0gjnx8bwmr63dcdmq58lpm162mng2ncrx53ydbb13xxf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("rgbds" ,rgbds)
-       ("pkg-config" ,pkg-config)))
+     (list rgbds pkg-config))
     (inputs
-     `(("sdl2" ,sdl2)))
+     (list sdl2))
     (arguments
      `(#:tests? #f                      ; There are no tests
        #:make-flags `(,(string-append "CC=" ,(cc-for-target))
@@ -827,26 +817,26 @@ from an emulator---from save states to scaling filters.")
         (base32 "116fndl6652zrp1r6ag4xv3dzp1x52mlvadj8xwflq07fd5rhri1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list freetype
+           glu
+           libpng
+           mesa
+           sdl2
+           zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
+         (replace 'configure
+           (lambda _
+             (substitute* "projects/unix/Makefile"
+               (("\\$\\(CFLAGS\\)")
+                "$(CFLAGS) -fcommon"))))
          ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'chdir-to-project-directory
-          (lambda _
-            (chdir "projects/unix")
-            #t)))
+         (add-before 'build 'chdir-to-project-directory
+           (lambda _ (chdir "projects/unix"))))
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list "all" (string-append "PREFIX=" out)))
        ;; There are no tests.
@@ -876,11 +866,9 @@ core library.")
         (base32 "0z19amfg9vr2pqjjri1ipc7hs681fzjcnb0f9y7bjhp5n8d7p6bb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -922,10 +910,9 @@ SDL audio plugin.")
         (base32 "1dyazfbdjycdfslq8jixqiqhziw0rlkvach2r9dz91229jmkyc9c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -967,7 +954,7 @@ SDL input plugin.")
         (base32 "0pi31qzjjp7aypdvvnz6ms18g09c4gqzxi6328zj8sji94b75gf0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
+     (list mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1009,7 +996,7 @@ high-level emulation (HLE) RSP processor plugin.")
         (base32 "0nfyjns9k8xbg3aqs7593nfaxvlj72h3l8h467442xlk8ajfcylx"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
+     (list mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1051,11 +1038,9 @@ Z64 RSP processor plugin.")
         (base32 "1v9fqwpb6pawr8z5cm2ki7bqkks4iyr5c4jy4v5khj6h8zcv55gc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)))
+     (list mesa mupen64plus-core))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1097,12 +1082,9 @@ Arachnoid video plugin.")
         (base32 "0qn5za7g7796kh2ag3xpmhbqg0yf71g9liz6ks0rha8pz73lgs01"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list mesa mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1151,15 +1133,14 @@ Glide64 video plugin.")
         (base32 "08pm28a36dpr0cvr8pzw0n5ksdazp7jqvlmqfy2lwb4dm0cwhkqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list boost
+           libpng
+           mesa
+           mupen64plus-core
+           sdl2
+           zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1201,13 +1182,9 @@ Glide64MK2 video plugin.")
         (base32 "0rpmbcq67gsj5h5jjis146378qc1mskskvx20y1ikx59yhbamh13"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list libpng mesa mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1250,12 +1227,9 @@ Rice Video plugin.")
        (patches (search-patches "mupen64plus-video-z64-glew-correct-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("glew" ,glew)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
+     (list glew mupen64plus-core sdl2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1305,10 +1279,9 @@ Z64 video plugin.")
        (patches (search-patches "mupen64plus-ui-console-notice.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("sdl2" ,sdl2)))
+     (list sdl2))
     ;; Mupen64Plus supports a single data directory and a single plugin
     ;; directory in its configuration, yet we need data and plugin files from
     ;; a variety of packages.  The best way to deal with this is to install
@@ -1318,13 +1291,13 @@ Z64 video plugin.")
     ;; mupen64plus-ui-console-notice also gives users instructions on what
     ;; they need to do in order to point the configuration to their profile.
     (propagated-inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl)
-       ("mupen64plus-input-sdl" ,mupen64plus-input-sdl)
-       ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle)
-       ("mupen64plus-video-glide64" ,mupen64plus-video-glide64)
-       ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2)
-       ("mupen64plus-video-rice" ,mupen64plus-video-rice)))
+     (list mupen64plus-core
+           mupen64plus-audio-sdl
+           mupen64plus-input-sdl
+           mupen64plus-rsp-hle
+           mupen64plus-video-glide64
+           mupen64plus-video-glide64mk2
+           mupen64plus-video-rice))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1369,10 +1342,7 @@ towards a working Mupen64Plus for casual users.")
         (base32 "1g19gz33jav00rwzkpcnynf5ps41vl64a9qx0xjd6lva4bgn8s57"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf autoconf-archive automake pkg-config))
     (inputs
      `(("fltk" ,fltk)
        ("fontconfig", fontconfig)
@@ -1503,9 +1473,7 @@ as RetroArch.")
        ("wayland" ,wayland)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)
-       ("which" ,which)))
+     (list pkg-config wayland-protocols which))
     (native-search-paths
      (list (search-path-specification
             (variable "LIBRETRO_DIRECTORY")
@@ -1550,8 +1518,7 @@ multi-system game/emulator system.")
                (setenv "CONFIG_SHELL" bash)
                (apply invoke "./configure" flags)))))))
     (native-inputs
-     `(("nasm" ,nasm)
-       ("pkg-config" ,pkg-config)))
+     (list nasm pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("faad2" ,faad2)
@@ -1604,15 +1571,14 @@ play them on systems for which they were never designed!")
              (chdir (string-append "libticables2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autogen" ,autogen)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autogen
+           automake
+           gnu-gettext
+           libtool
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libusb" ,libusb)))
+     (list glib libusb))
     (synopsis "Link cable library for TI calculators")
     (description
      "This package contains libticables, a library for operations on
@@ -1647,12 +1613,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libticonv-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Character conversion library for TI calculators")
     (description
      "This package contains libticonv, a library to support working with
@@ -1685,15 +1648,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libtifiles2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gnu-gettext libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libarchive" ,libarchive)
-       ("libticonv" ,libticonv)))
+     (list glib libarchive libticonv))
     (synopsis "File functions library for TI calculators")
     (description
      "This package contains libticonv, a library to support working with
@@ -1726,17 +1683,9 @@ This is a part of the TiLP project.")
              (chdir (string-append "libticalcs2-" ,version))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gnu-gettext libtool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libarchive" ,libarchive)
-       ("libticables2" ,libticables2)
-       ("libticonv" ,libticonv)
-       ("libtifiles2" ,libtifiles2)))
+     (list glib libarchive libticables2 libticonv libtifiles2))
     (synopsis "Support library for TI calculators")
     (description
      "This project aims to develop a multi-platform linking program for use
@@ -1980,7 +1929,7 @@ functions.  The source code to MAME serves as this documentation.")
                (install-file "../source/data/tile/TILE.TXT" tile))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("mame" ,mame)
        ("gtk" ,gtk+)
@@ -2027,8 +1976,7 @@ emulator.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "cmake/FindCdio.cmake"
                  (("/usr/include/cdio")
-                  (string-append (assoc-ref inputs "libcdio") "/include/cdio")))
-               #t))
+                  (search-input-directory inputs "/include/cdio")))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
@@ -2039,17 +1987,16 @@ emulator.")
                                     "/share/glib-2.0/schemas"))))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("intltool" ,intltool)
-         ("glib" ,glib "bin")))
+       (list pkg-config intltool
+             `(,glib "bin")))
       (inputs
-       `(("libcdio" ,libcdio)
-         ("sdl2" ,sdl2)
-         ("gtk+" ,gtk+)
-         ("ffmpeg" ,ffmpeg)
-         ("libxv" ,libxv)
-         ("libarchive" ,libarchive)
-         ("pulseaudio" ,pulseaudio)))
+       (list libcdio
+             sdl2
+             gtk+
+             ffmpeg
+             libxv
+             libarchive
+             pulseaudio))
       (home-page "https://archive.codeplex.com/?p=pcsxr")
       (synopsis "PlayStation emulator")
       (description
@@ -2081,8 +2028,7 @@ improvements.")
                (("GTK_CFLAGS=\"\\$GTK_CFLAGS .*\"") ""))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("nasm" ,nasm)))
+     (list pkg-config nasm))
     (inputs
      `(("sdl" ,sdl)
        ("gtk" ,gtk+-2)))
@@ -2119,7 +2065,7 @@ from various forks of Gens, and improved platform portability.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("ao" ,ao)
@@ -2171,17 +2117,6 @@ performance, features, and ease of use.")
                     (guix build utils))
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'install-bindings-to-python-output
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; python-build-system will build the bindings and install them to
-               ;; the "out" output, so change the build-internal names of the
-               ;; outputs.
-               ;;
-               ;; TODO: remove this once #40469 lands, through the core-updates
-               ;; holding zone, on master.
-               (set-car! (assoc "out" outputs) "lib")
-               (set-car! (assoc "python" outputs) "out")
-               #t))
            (add-before 'build 'build-library
              (lambda* (#:key inputs #:allow-other-keys)
                (invoke "make"
@@ -2194,7 +2129,7 @@ performance, features, and ease of use.")
                        "UNICORN_STATIC=no"
                        (string-append
                         "PREFIX="
-                        (assoc-ref outputs "lib")))))
+                        (assoc-ref outputs "out")))))
            (add-before 'build 'prepare-bindings
              (lambda* (#:key outputs #:allow-other-keys)
                (chdir "bindings/python")
@@ -2207,7 +2142,7 @@ performance, features, and ease of use.")
                  (("_path_list = \\[.*")
                   (string-append
                    "_path_list = [\""
-                   (assoc-ref outputs "lib")
+                   (assoc-ref outputs "out")
                    ;; eat the rest of the list
                    "/lib\"] + 0*[")))
                #t))
@@ -2228,10 +2163,10 @@ performance, features, and ease of use.")
                (let* ((python-samples (find-files "." "sample_.*"))
                       (c-samples (find-files "../../samples" ".*\\.c"))
                       (python-docdir
-                        (string-append (assoc-ref outputs "out")
+                        (string-append (assoc-ref outputs "python")
                                        "/share/doc/unicorn/samples"))
                       (c-docdir
-                        (string-append (assoc-ref outputs "lib")
+                        (string-append (assoc-ref outputs "out")
                                        "/share/doc/unicorn/samples")))
                  (for-each (cut install-file <> c-docdir) c-samples)
                  (for-each (cut install-file <> python-docdir) python-samples)
@@ -2348,8 +2283,7 @@ elseif(FALSE)"))
                (("unknown") ,version))))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("python" ,python)))
+       (list pkg-config python))
       (inputs
        `(("cityhash" ,cityhash)
          ;; ppsspp doesn't yet build with ffmpeg 4.4 (see:
@@ -2499,8 +2433,7 @@ system.")
                (install-file "exobasic" out-bin))
              #t)))))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (synopsis "Compressor for use on Commodore home computers")
     (description "This program compresses files in a way that tries to be as
 efficient as possible but still allows them to be decompressed in environments
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index f32e59ef54..4b31c3131b 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -58,16 +58,16 @@
         (base32 "0wbb6dwmzlsyy224y0liis0azgzwbjdvcyzc31pw1aw6vbp36na6"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch" ,catch-framework2)
-       ("git" ,git-minimal)
-       ("perl" ,perl)
-       ;;FIX-ME: Building with ronn fails.
-       ;;("ronn" ,ronn)
-       ("pkg-config" ,pkg-config)))
+     (list catch-framework2
+           git-minimal
+           perl
+           ;;FIX-ME: Building with ronn fails.
+           ;;("ronn" ,ronn)
+           pkg-config))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (propagated-inputs
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (synopsis "Fast and safe spellchecking C++ library")
     (description "Nuspell is a fast and safe spelling checker software
 program.  It is designed for languages with rich morphology and complex word
@@ -94,11 +94,10 @@ dictionaries.")
                            ;; Tests require a relocatable build.
                            "--enable-relocatable")))
     (inputs
-     `(("aspell" ,aspell)
-       ("hunspell" ,hunspell)))
+     (list aspell hunspell))
     (propagated-inputs
      ;; Required by enchant.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)
@@ -157,7 +156,7 @@ working\".")
                                "    yield \"" (assoc-ref inputs "enchant")
                                "/lib/libenchant-2.so\""))))))))
     (inputs
-     `(("enchant" ,enchant)))
+     (list enchant))
     (home-page "https://github.com/pyenchant/pyenchant")
     (synopsis "Spellchecking library for Python")
     (description "PyEnchant is a spellchecking library for Python, based on the
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index dc119f5d63..edc0f51d8d 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
@@ -191,14 +191,9 @@
                (copy-recursively "unix/resources" share))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("muparser" ,muparser)
-       ("freetype" ,freetype)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list boost muparser freetype qtbase-5 qtsvg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (home-page "https://librecad.org/")
     (synopsis "Computer-aided design (CAD) application")
     (description
@@ -209,7 +204,7 @@ plans and designs.")
 (define-public geda-gaf
   (package
     (name "geda-gaf")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -218,7 +213,7 @@ plans and designs.")
                     version "/geda-gaf-" version ".tar.gz"))
               (sha256
                (base32
-                "06ivgarvwbzjz2wigxzzkm8iszldi2p6x3a6jnlczjyrz4csddsy"))))
+                "19688b0671imy2i3jphcnq1120b8ymhr4wz2psiqylr82ljanqp8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -253,9 +248,7 @@ plans and designs.")
        ("pcb" ,pcb)
        ("python" ,python-2))) ; for xorn
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("perl" ,perl))) ; for tests
+     (list groff pkg-config desktop-file-utils perl)) ; for tests
     (home-page "http://geda-project.org/")
     (synopsis "Schematic capture, netlister, symbols, symbol checker, and utils")
     (description
@@ -316,7 +309,8 @@ utilities.")
                (string-append "--with-pcb-datadir=" pcb "/share")
                (string-append "--with-pcb-lib-path="
                               pcb "/share/pcb/pcblib-newlib:"
-                              pcb "/share/pcb/newlib")))
+                              pcb "/share/pcb/newlib")
+               "CFLAGS=-fcommon"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-dynamic-link
@@ -328,12 +322,10 @@ utilities.")
              (substitute* '("libleptongui/scheme/schematic/ffi/gtk.scm.in"
                             "utils/attrib/lepton-attrib.scm")
                (("@LIBGTK@")
-                (string-append (assoc-ref inputs "gtk")
-                               "/lib/libgtk-3.so")))
+                (search-input-file inputs "/lib/libgtk-3.so")))
              (substitute* '("libleptongui/scheme/schematic/ffi/gobject.scm.in")
                (("@LIBGOBJECT@")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libgobject-2.0.so")))
+                (search-input-file inputs "/lib/libgobject-2.0.so")))
              (substitute* "liblepton/scheme/lepton/ffi.scm.in"
                (("@LIBLEPTON@")
                 (string-append (assoc-ref outputs "out")
@@ -344,8 +336,7 @@ utilities.")
                                "/lib/libleptonattrib.so")))
              (substitute* "liblepton/scheme/lepton/log.scm.in"
                (("@LIBGLIB@")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libglib-2.0.so")))
+                (search-input-file inputs "/lib/libglib-2.0.so")))
 
              ;; For finding libraries when running tests before installation.
              (setenv "LIBLEPTONGUI"
@@ -430,7 +421,8 @@ features.")))
              ;; fix of the mesa package we wrap the pcb executable such that
              ;; Mesa can find libudev.so.0 through LD_LIBRARY_PATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (string-append (assoc-ref inputs "udev") "/lib")))
+                    (path (dirname
+                           (search-input-file inputs "/lib/libudev.so"))))
                (wrap-program (string-append out "/bin/pcb")
                  `("LD_LIBRARY_PATH" ":" prefix (,path))))
              #t))
@@ -519,7 +511,7 @@ featuring various improvements and bug fixes.")))
      ;; FIXME: with texlive-tiny citation references are rendered as question
      ;; marks.  During the build warnings like these are printed:
      ;; LaTeX Warning: Citation `nabors91' on page 2 undefined on input line 3.
-     `(("texlive" ,(texlive-union (list texlive-fonts-amsfonts)))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts)))
        ("ghostscript" ,ghostscript)))
     (arguments
      `(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
@@ -735,6 +727,8 @@ ready for production.")
                (base32
                 "1d2k43k7i4yvbpi4sw1263a8d0q98z2n7aqhmpinpkih8a681vn5"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-fcommon")))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils)
@@ -823,13 +817,9 @@ fonts to gEDA.")
                (substitute* "CMakeLists.txt" (("-march=native") ""))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("boost" ,boost)
-         ("libpng" ,libpng)
-         ("qtbase" ,qtbase-5)
-         ("eigen" ,eigen)
-         ("guile" ,guile-3.0)))
+       (list boost libpng qtbase-5 eigen guile-3.0))
       (home-page "https://libfive.com")
       (synopsis "Tool for programmatic computer-aided design")
       (description
@@ -876,12 +866,9 @@ language.")
                                  "/lib/libfive-guile")))
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("mesa" ,mesa)
-         ("guile" ,guile-3.0)))
+       (list mesa guile-3.0))
       (propagated-inputs
        `(("libfive" ,libfive)
          ("guile-opengl" ,guile3.0-opengl)))
@@ -924,6 +911,16 @@ Emacs).")
                 (string-append "NGSPICE_DLL_FILE=\""
                                (assoc-ref inputs "libngspice")
                                "/lib/libngspice.so\"")))))
+         (add-after 'unpack 'fix-python-detection
+           (lambda _
+             (substitute* "CMakeModules/FindPythonLibs.cmake"
+               (("_PYTHON3_VERSIONS 3\\.8 3\\.7")
+                "_PYTHON3_VERSIONS 3.9 3.8 3.7"))))
+         (add-after 'unpack 'add-missing-include
+           (lambda _
+             (substitute* "common/lib_tree_model.cpp"
+               (("#include <eda_pattern_match.h>" all)
+                (string-append "#include <algorithm>\n" all)))))
          (add-after 'install 'install-translations
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (copy-recursively (assoc-ref inputs "kicad-i18n")
@@ -941,9 +938,9 @@ Emacs).")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -1147,6 +1144,8 @@ worksheet templates.")))
                (base32
                 "13qj7n9826qc9shkkgd1p6vcpj78v4h9d67wbg45prg7rbnzkzds"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-fcommon")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gtk" ,gtk+-2)
@@ -1181,14 +1180,14 @@ the 'showing the effect of'-style of operation.")
            (when tests?
              (invoke "./valeronoi-tests")))))))
   (inputs
-   `(("boost" ,boost)
-     ("cgal" ,cgal)
-     ("gmp" ,gmp)
-     ("libxkbcommon" ,libxkbcommon)
-     ("mpfr" ,mpfr)
-     ("openssl" ,openssl)
-     ("qtbase" ,qtbase-5)
-     ("qtsvg" ,qtsvg)))
+   (list boost
+         cgal
+         gmp
+         libxkbcommon
+         mpfr
+         openssl
+         qtbase-5
+         qtsvg))
   (home-page "https://github.com/ccoors/Valeronoi")
   (synopsis "WiFi mapping companion application for Valetudo")
   (description
@@ -1233,9 +1232,9 @@ WiFi signal strength maps.  It visualizes them using a Voronoi diagram.")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -1274,7 +1273,7 @@ use on a given system.")
        ("python" ,python-wrapper)
        ("python-libxml2" ,python-libxml2)))
     (inputs
-     `(("pcre2" ,pcre2)))
+     (list pcre2))
     (home-page "https://www.gnu.org/software/libredwg/")
     (synopsis "C library to handle DWG (CAD-related) files")
     (description
@@ -1319,7 +1318,7 @@ replacement for the OpenDWG libraries.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://salsa.debian.org/minicom-team/minicom")
     (synopsis "Serial terminal emulator")
     (description "@code{minicom} is a serial terminal emulator.")
@@ -1382,7 +1381,7 @@ send break and throttle transmission speed.")
     (native-inputs
      `(("fortran" ,gfortran)))
     (inputs
-     `(("lapack" ,lapack)))
+     (list lapack))
     (home-page "https://github.com/stevengj/harminv")
     (synopsis "Harmonic inversion solver")
     (description
@@ -1411,7 +1410,7 @@ determines the frequencies, decay constants, amplitudes, and phases of those sin
     (native-inputs
      `(("fortran" ,gfortran)))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (home-page "http://ab-initio.mit.edu/wiki/index.php/Libctl")
     (synopsis "Flexible control files implementation for scientific simulations")
     (description
@@ -1516,13 +1515,13 @@ developed at MIT to model electromagnetic systems.")
                 "0i37c9k6q1iglmzp9736rrgsnx7sw8xn3djqbbjw29zsyl3pf62c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list autoconf
+           automake
+           bison
+           flex
+           libtool
+           perl
+           perl-xml-libxml))
     (home-page "https://github.com/Qucs/ADMS")
     (synopsis "Automatic device model synthesizer")
     (description
@@ -1575,7 +1574,7 @@ bindings for Python, Java, OCaml and more.")
     (inherit capstone)
     (name "python-capstone")
     (propagated-inputs
-     `(("capstone" ,capstone)))
+     (list capstone))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1611,9 +1610,7 @@ bindings for Python, Java, OCaml and more.")
     (arguments
      `(#:tests? #f))                    ;XXX: require python-reedsolo
     (propagated-inputs
-     `(("python-ecdsa" ,python-ecdsa)
-       ("python-pyaes" ,python-pyaes)
-       ("python-pyserial" ,python-pyserial)))
+     (list python-ecdsa python-pyaes python-pyserial))
     (home-page "https://github.com/espressif/esptool")
     (synopsis "Bootloader utility for Espressif ESP8266 & ESP32 chips")
     (description
@@ -1654,15 +1651,12 @@ bootloader in Espressif ESP8266 & ESP32 series chips.")
        (list "CC=gcc")))
     ;; TODO: Add gmp and libzip and make the build system actually find them.
     (inputs
-     `(("capstone" ,capstone)
-       ("libuv" ,libuv)
-       ("openssl" ,openssl)
-       ("zip" ,zip)))
+     (list capstone libuv openssl zip))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In the Libs: section of r_hash.pc.
-     `(("xxhash" ,xxhash)))
+     (list xxhash))
     (home-page "https://radare.org/")
     (synopsis "Reverse engineering framework")
     (description
@@ -1721,7 +1715,7 @@ it suitable for security research and analysis.")
     (native-inputs
      `(("mpi" ,openmpi)))
     (inputs
-     `(("coreutils-minimal" ,coreutils-minimal)))
+     (list coreutils-minimal))
     (home-page "http://asco.sourceforge.net/")
     (synopsis "SPICE circuit optimizer")
     (description
@@ -1777,8 +1771,7 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
              ;; https://bugs.archlinux.org/task/70563 for reference.
              "--with-readline=no")))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
      `(("libxaw" ,libxaw)
        ("mpi" ,openmpi)))
@@ -1812,8 +1805,7 @@ an embedded event driven algorithm.")
            (delete 'delete-program-manuals)
            (delete 'delete-script-files)))))
     (inputs
-     `(("libngspice" ,libngspice)
-       ("readline" ,readline)))))
+     (list libngspice readline))))
 
 (define trilinos-serial-xyce
   ;; Note: This is a Trilinos containing only the packages Xyce needs, so we
@@ -1990,19 +1982,14 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "freehdl/freehdl-config"
                (("pkg-config")
-                (string-append (assoc-ref inputs "pkg-config")
-                               "/bin/pkg-config"))
+                (search-input-file inputs "/bin/pkg-config"))
                (("cat")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cat")))
-             #t))
+                (search-input-file inputs "/bin/cat")))))
          (add-after 'patch-pkg-config 'setenv
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CXX" (string-append (assoc-ref inputs "gcc")
-                                          "/bin/g++"))
-             (setenv "SYSTEM_LIBTOOL" (string-append (assoc-ref inputs "libtool")
-                                                     "/bin/libtool"))
-             #t))
+             (setenv "CXX" (search-input-file inputs "/bin/g++"))
+             (setenv "SYSTEM_LIBTOOL"
+                     (search-input-file inputs "/bin/libtool"))))
          (add-after 'setenv 'patch-gvhdl
            (lambda _
              (substitute* "v2cc/gvhdl.in"
@@ -2013,7 +2000,7 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "freehdl/freehdl-gennodes.in"
                (("guile")
-                (string-append (assoc-ref inputs "guile") "/bin/guile"))
+                (search-input-file inputs "/bin/guile"))
                (("\\(debug") ";(debug")
                (("\\(@ ") "(apply-emit")
                (("\\(@@ ") "(apply-mini-format"))
@@ -2049,12 +2036,12 @@ parallel computing platforms.  It also supports serial execution.")
                  `("PKG_CONFIG_PATH" ":" prefix (,(string-append out "/lib/pkgconfig")))))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("gcc-toolchain" ,gcc-toolchain)
-       ("guile" ,guile-2.2)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list coreutils
+           gcc-toolchain
+           guile-2.2
+           perl
+           pkg-config
+           libtool))
     (native-inputs
      `(("pkg-config-native" ,pkg-config)
        ("libtool-native" ,libtool)))
@@ -2079,12 +2066,10 @@ parallel computing platforms.  It also supports serial execution.")
         (base32 "0smp1p7wnrj0vh4rmz1cr2krfawc2lzx0pbzmgyay7xdp6jxympr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtsvg zlib))
     (native-inputs
-     `(("qttools" ,qttools)             ; for lrelease
-       ("unzip" ,unzip)))
+     (list qttools ; for lrelease
+           unzip))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2092,8 +2077,7 @@ parallel computing platforms.  It also supports serial execution.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (mkdir-p "build")
              (chdir "build")
-             (let ((lrelease (string-append (assoc-ref inputs "qttools")
-                                            "/bin/lrelease"))
+             (let ((lrelease (search-input-file inputs "/bin/lrelease"))
                    (out (assoc-ref outputs "out")))
                (invoke "qmake"
                        (string-append "QMAKE_LRELEASE=" lrelease)
@@ -2154,7 +2138,7 @@ printers.")
          "16m09xa685qhj5fqq3bcgakrwnb74xhf5f7rpqkkf9fg8plzbb1g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2239,14 +2223,14 @@ simulation.")
                        (string-append "PREFIX=" out)
                        "./src/Cutter.pro")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("openssl" ,openssl)
-       ;; Depends on radare2 4.5.1 officially, builds and works fine with
-       ;; radare2 5.0.0 but fails to build with radare2 5.1.1.
-       ("radare2" ,radare2-for-cutter)))
+     (list qtbase-5
+           qtsvg
+           openssl
+           ;; Depends on radare2 4.5.1 officially, builds and works fine with
+           ;; radare2 5.0.0 but fails to build with radare2 5.1.1.
+           radare2-for-cutter))
     (home-page "https://github.com/radareorg/cutter")
     (synopsis "GUI for radare2 reverse engineering framework")
     (description "Cutter is a GUI for radare2 reverse engineering framework.
@@ -2276,8 +2260,7 @@ engineers for reverse engineers.")
                                "-DUSE_INCLUDED_GTEST=0"
                                "-DUSE_INCLUDED_SSL=0")))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (inputs
      `(("libuuid" ,util-linux "lib")
        ("libzip" ,libzip)
@@ -2405,88 +2388,93 @@ comments.")))
     (name "freecad")
     (version "0.19.2")
     (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/FreeCAD/FreeCAD")
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-          (base32 "0fhjv0x3dix1c7jml91yx63z9xifjlbhjbcdb73lw80smpxrq7mm"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FreeCAD/FreeCAD")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0fhjv0x3dix1c7jml91yx63z9xifjlbhjbcdb73lw80smpxrq7mm"))
+       (patches (search-patches "freecad-vtk9.patch"
+                                "freecad-boost-serialization.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("qttools" ,qttools)
-       ("pkg-config" ,pkg-config)
-       ("python-pyside-2-tools" ,python-pyside-2-tools)
-       ("swig" ,swig)))
+     (list doxygen
+           graphviz
+           qttools
+           pkg-config
+           python-pyside-2-tools
+           swig))
     (inputs
-     `(("boost" ,boost)
-       ("coin3D" ,coin3D)
-       ("double-conversion" ,double-conversion)
-       ("eigen" ,eigen)
-       ("freetype" ,freetype)
-       ("gl2ps" ,gl2ps)
-       ("glew" ,glew)
-       ("hdf5" ,hdf5-1.10)
-       ("jsoncpp" ,jsoncpp)
-       ("libarea" ,libarea)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libmedfile" ,libmedfile)
-       ("libspnav" ,libspnav)
-       ("libtheora" ,libtheora)
-       ("libtiff" ,libtiff)
-       ("libxi" ,libxi)
-       ("libxml++" ,libxml++)
-       ("libxmu" ,libxmu)
-       ("lz4" ,lz4)
-       ("netcdf" ,netcdf)
-       ("opencascade-occt" ,opencascade-occt)
-       ("openmpi" ,openmpi)
-       ("proj" ,proj)
-       ("python-gitpython" ,python-gitpython)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pivy" ,python-pivy)
-       ("python-pyside-2" ,python-pyside-2)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-shiboken-2" ,python-shiboken-2)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("sqlite" ,sqlite)
-       ("tbb" ,tbb)
-       ("vtk" ,vtk-8)
-       ("xerces-c" ,xerces-c)
-       ("zlib" ,zlib)))
+     (list boost
+           coin3D
+           double-conversion
+           eigen
+           freetype
+           gl2ps
+           glew
+           hdf5-1.10
+           jsoncpp
+           libarea
+           libjpeg-turbo
+           libmedfile
+           libspnav
+           libtheora
+           libtiff
+           libxi
+           libxml++
+           libxmu
+           lz4
+           netcdf
+           opencascade-occt
+           openmpi
+           proj
+           python-gitpython
+           python-matplotlib
+           python-pivy
+           python-pyside-2
+           python-pyyaml
+           python-shiboken-2
+           python-wrapper
+           qtbase-5
+           qtsvg
+           qtwebkit
+           qtx11extras
+           qtxmlpatterns
+           sqlite
+           tbb
+           vtk
+           xerces-c
+           zlib))
     (arguments
      `(#:tests? #f          ; Project has no tests
        #:configure-flags
-       (list
-        "-DBUILD_QT5=ON"
-        "-DBUILD_FLAT_MESH:BOOL=ON"
-        (string-append "-DCMAKE_INSTALL_LIBDIR=" (assoc-ref %outputs "out") "/lib")
-        (string-append "-DPYSIDE2UICBINARY="
-                       (assoc-ref %build-inputs "python-pyside-2-tools")
-                       "/bin/uic")
-        (string-append "-DPYSIDE2RCCBINARY="
-                       (assoc-ref %build-inputs "python-pyside-2-tools")
-                       "/bin/rcc")
-        "-DPYSIDE_LIBRARY=PySide2::pyside2"
-        (string-append
-         "-DPYSIDE_INCLUDE_DIR="
-         (assoc-ref %build-inputs "python-pyside-2") "/include;"
-         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2;"
-         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtCore;"
-         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtWidgets;"
-         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtGui;")
-        "-DSHIBOKEN_LIBRARY=Shiboken2::libshiboken"
-        (string-append "-DSHIBOKEN_INCLUDE_DIR="
-                       (assoc-ref %build-inputs "python-shiboken-2")
-                       "/include/shiboken2"))
+       ,#~(list
+           "-DBUILD_QT5=ON"
+           "-DBUILD_FLAT_MESH:BOOL=ON"
+           "-DBUILD_ENABLE_CXX_STD:STRING=C++17"
+           (string-append "-DCMAKE_INSTALL_LIBDIR=" #$output "/lib")
+           (string-append "-DPYSIDE2UICBINARY="
+                          #$(this-package-native-input
+                             "python-pyside-2-tools")
+                          "/bin/uic")
+           (string-append "-DPYSIDE2RCCBINARY="
+                          #$(this-package-native-input
+                             "python-pyside-2-tools")
+                          "/bin/rcc")
+           "-DPYSIDE_LIBRARY=PySide2::pyside2"
+           (string-append
+            "-DPYSIDE_INCLUDE_DIR="
+            #$(this-package-input "python-pyside-2") "/include;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtCore;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtWidgets;"
+            #$(this-package-input "python-pyside-2") "/include/PySide2/QtGui;")
+           "-DSHIBOKEN_LIBRARY=Shiboken2::libshiboken"
+           (string-append "-DSHIBOKEN_INCLUDE_DIR="
+                          #$(this-package-input "python-shiboken-2")
+                          "/include/shiboken2"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'restore-pythonpath
@@ -2497,8 +2485,8 @@ comments.")))
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/FreeCAD")
-                 (list "PYTHONPATH"
-                       'prefix (list (getenv "PYTHONPATH"))))))))))
+                 (list "GUIX_PYTHONPATH"
+                       'prefix (list (getenv "GUIX_PYTHONPATH"))))))))))
     (home-page "https://www.freecadweb.org/")
     (synopsis "Your Own 3D Parametric Modeler")
     (description
@@ -2529,7 +2517,7 @@ customization.")
         (base32
          "017h9p0x533fm4gn6pwc8kmp72rvqmcn6vznx72nkkl2b05yjx54"))))
     (build-system cmake-build-system)
-    (inputs `(("hdf5" ,hdf5-1.10)))
+    (inputs (list hdf5-1.10))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2575,8 +2563,7 @@ interpolation toolkit.")
          (sha256
           (base32 "0pvqz6cabxqdz5y26wnj6alkn8v5d7gkx0d3h8xmg4lvy9r3kh3g"))))
       (build-system gnu-build-system)
-      (inputs `(("boost" ,boost)
-                ("python-wrapper" ,python-wrapper)))
+      (inputs (list boost python-wrapper))
       (native-inputs
        `(("cmake" ,cmake-minimal)))
       (arguments
@@ -2618,7 +2605,7 @@ operations.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (arguments `(#:tests? #f))
     (home-page "http://spacenav.sourceforge.net/")
     (synopsis
@@ -2656,7 +2643,7 @@ official SDK.")
           (base32 "01wb70m48xh5gwhv60a5brv4sxl0i0rh038w32cgnlxn5x86s9f1"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
        `(("mesa" ,mesa)
          ("glu" ,glu)
@@ -2709,7 +2696,7 @@ accessible through a simple API")
         (base32 "1qr9arfdkjf7q11xhvxwzmhxqz3nhcjkyb8zzfjpz9jm54q0rc7m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://code.google.com/archive/p/lib3ds")
     (synopsis "3DS format file toolkit")
     (description "Lib3ds is a toolkit for handling the 3DS format for 3D
@@ -2732,22 +2719,22 @@ export filters.")
                (base32 "1cgx24wxh2ah5pff51rcrk6x8qcdjpkxcdak7s4cfzmxvjlshydd"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("mesa" ,mesa)
-       ("glu" ,glu)
-       ("glew" ,glew)
-       ("muparser" ,muparser)
-       ("gmp" ,gmp)
-       ("eigen" ,eigen)
-       ("libfreenect" ,libfreenect)
-       ("lib3ds" ,lib3ds)
-       ("openctm" ,openctm)
-       ;; FIXME: Compilation fails with system qhull:
-       ;; https://github.com/cnr-isti-vclab/meshlab/issues/678
-       ;; ("qhull" ,qhull)
-       ))
+     (list qtbase-5
+           qtscript
+           qtxmlpatterns
+           mesa
+           glu
+           glew
+           muparser
+           gmp
+           eigen
+           libfreenect
+           lib3ds
+           openctm
+           ;; FIXME: Compilation fails with system qhull:
+           ;; https://github.com/cnr-isti-vclab/meshlab/issues/678
+           ;; ("qhull" ,qhull)
+           ))
     (arguments
      `(#:tests? #f                                ; Has no tests
        #:phases
@@ -2828,18 +2815,9 @@ GUI.")
                   (delete-file "libpoke/pvm-vm2.c")))))
     (build-system gnu-build-system)
     ;; The GUI, which we elide, requires tcl and tk.
-    (native-inputs `(;; Requires bison 3.6+ but we currently only have 3.5.
-                     ;; Bison 3.6 will be available in the next core update.
-                     ("bison-3.6" ,bison-3.6)
-                     ("dejagnu" ,dejagnu)
-                     ("flex" ,flex)
-                     ("libtool" ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list bison dejagnu flex libtool pkg-config))
     ;; FIXME: Enable NBD support by adding `libnbd' (currently unpackaged).
-    (inputs `(("json-c" ,json-c)
-              ("libgc" ,libgc)
-              ("readline" ,readline)
-              ("libtextstyle" ,libtextstyle)))
+    (inputs (list json-c libgc readline libtextstyle))
     (arguments
      ;; To build the GUI, add the `--enable-gui' configure flag.
      ;; To enable the "hyperlink server", add the `--enable-hserver' flag.
@@ -2869,17 +2847,14 @@ data structures and to operate on them.")
          "0nzglcyh6ban27cc73j4l7w7r9k38qivq0jz8iwnci02pfalw4ry"))))
      (build-system gnu-build-system)
      (inputs
-      `(("boost" ,boost)
-        ("geos" ,geos)
-        ("gerbv" ,gerbv)
-        ("glibmm" ,glibmm)
-        ("gtkmm" ,gtkmm-2)
-        ("librsvg" ,librsvg)))
+      (list boost
+            geos
+            gerbv
+            glibmm
+            gtkmm-2
+            librsvg))
      (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("libtool" ,libtool)
-        ("pkg-config" ,pkg-config)))
+      (list autoconf automake libtool pkg-config))
      (home-page "https://github.com/pcb2gcode/pcb2gcode")
      (synopsis "Generate G-code for milling PCBs")
      (description "pcb2gcode is a command-line program for isolation routing
@@ -2906,10 +2881,9 @@ dynamic calibration of the milling depth.")
          (sha256
           (base32 "17sw78xp5wjzv25adpbq3khl8fi0avj7bgpi57q3jnvl3c68xy5z"))))
       (native-inputs
-       `(("perl" ,perl)
-         ("pkg-config" ,pkg-config)))
+       (list perl pkg-config))
       (inputs
-       `(("capstone" ,capstone)))
+       (list capstone))
       (build-system cmake-build-system)
       (arguments
        `(#:build-type "Release"
@@ -3114,7 +3088,7 @@ visualization, matrix manipulation.")
          ;; Use wxWidgets 3.0.x.x to prevent GUI crashes when adding support enforcers.
          "-DSLIC3R_WX_STABLE=1")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("boost" ,boost)
        ("cereal" ,cereal)
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 5e34303f14..3b28559c1b 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -50,6 +50,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
@@ -91,7 +92,11 @@
        ("ibus" ,ibus)
        ("mesa" ,mesa)
        ("libraw" ,libraw)
-       ("librsvg" ,librsvg)
+       ;; Only enable the optional SVG support on x86_64, as this is the only
+       ;; architecture where librsvg can be built.
+       ,@(if (target-x86-64?)
+             `(("librsvg" ,librsvg))
+             '())
        ("libspectre" ,libspectre)
        ("libtiff" ,libtiff)
        ("libxau" ,libxau)
@@ -127,6 +132,7 @@
        ("libjpeg" ,libjpeg-turbo)
        ("libsndfile" ,libsndfile)
        ("libpng" ,libpng)
+       ("libunwind" ,libunwind)
        ("libx11" ,libx11)
        ("libxkbcommon" ,libxkbcommon)
        ("luajit" ,luajit)
@@ -136,20 +142,23 @@
        ("wayland" ,wayland)
        ("zlib" ,zlib)))
     (arguments
-     `(#:configure-flags '("-Dembedded-lz4=false"
-                           "-Dbuild-examples=false"
-                           "-Decore-imf-loaders-disabler=scim"
-                           "-Dglib=true"
-                           "-Dmount-path=/run/setuid-programs/mount"
-                           "-Dunmount-path=/run/setuid-programs/umount"
-                           ;(string-append "-Ddictionaries-hyphen-dir="
-                           ;               (assoc-ref %build-inputs "hyphen")
-                           ;               "/share/hyphen")
-                           "-Dnetwork-backend=connman"
-                           ;; for wayland
-                           "-Dwl=true"
-                           "-Ddrm=true")
-       #:tests? #f ; Many tests fail due to timeouts and network requests.
+     `(#:configure-flags
+       `("-Dembedded-lz4=false"
+         "-Dbuild-examples=false"
+         "-Decore-imf-loaders-disabler=scim"
+         "-Dglib=true"
+         "-Dmount-path=/run/setuid-programs/mount"
+         "-Dunmount-path=/run/setuid-programs/umount"
+         "-Dnetwork-backend=connman"
+         ;; Add 'rsvg' to the default list (json and avif) of disabled loaders
+         ;; unless librsvg is available.
+         ,,@(if (target-x86-64?)
+                '()
+                (list "-Devas-loaders-disabler=json,avif,rsvg"))
+         ;; For Wayland.
+         "-Dwl=true"
+         "-Ddrm=true")
+       #:tests? #f     ; Many tests fail due to timeouts and network requests.
        #:phases
        (modify-phases %standard-phases
          ;; If we don't hardcode the location of libcurl.so and others then we
@@ -245,7 +254,7 @@ removable devices or support for multimedia.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org/about-terminology")
     (synopsis "Powerful terminal emulator based on EFL")
     (description
@@ -276,9 +285,9 @@ contents and more.")
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org/about-rage")
     (synopsis "Video and audio player based on EFL")
     (description
@@ -360,6 +369,7 @@ Libraries with some extra bells and whistles.")
        ("bluez" ,bluez)
        ("dbus" ,dbus)
        ("freetype" ,freetype)
+       ("libdrm" ,libdrm)
        ("libxcb" ,libxcb)
        ("libxext" ,libxext)
        ("linux-pam" ,linux-pam)
@@ -369,12 +379,9 @@ Libraries with some extra bells and whistles.")
        ("xkeyboard-config" ,xkeyboard-config)
        ("xorg-server-xwayland" ,xorg-server-xwayland)))
     (propagated-inputs
-     `(("efl" ,efl)
-       ("libxkbcommon" ,libxkbcommon)
-       ("wayland-protocols" ,wayland-protocols)
-
-       ;; Default font that applications such as IceCat require.
-       ("font-dejavu" ,font-dejavu)))
+     (list efl libxkbcommon wayland-protocols
+           ;; Default font that applications such as IceCat require.
+           font-dejavu))
     (home-page "https://www.enlightenment.org/about-enlightenment")
     (synopsis "Lightweight desktop environment")
     (description
@@ -431,11 +438,9 @@ embedded systems.")
             (delete-file "tests/ecore/test_11_con.py")
             #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (inputs
-     `(("efl" ,efl)
-       ("python-dbus" ,python-dbus)))
+     (list efl python-dbus))
     (home-page "https://www.enlightenment.org/")
     (synopsis "Python bindings for EFL")
     (description
@@ -476,8 +481,7 @@ Libraries stack (eo, evas, ecore, edje, emotion, ethumb and elementary).")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("clang" ,clang)
-       ("efl" ,efl)))
+     (list clang efl))
     (home-page "https://www.enlightenment.org/about-edi")
     (synopsis "Development environment for Enlightenment")
     (description "EDI is a development environment designed for and built using
@@ -509,9 +513,7 @@ and in creating applications based on the Enlightenment Foundation Library suite
                        (("'/usr/")"'"))
              #t)))))
     (propagated-inputs
-     `(("python2-efl" ,python2-efl)
-       ("python2-pypdf2" ,python2-pypdf2)
-       ("python2-pyxdg" ,python2-pyxdg)))
+     (list python2-efl python2-pypdf2 python2-pyxdg))
     (synopsis "Simple PDF viewer")
     (description
      "Simple PDF viewer based on the Enlightenment Foundation Libraries.")
@@ -537,10 +539,9 @@ and in creating applications based on the Enlightenment Foundation Library suite
            ;; FATAL: Cannot create run dir '/homeless-shelter/.run' - errno=2
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)))
+     (list check pkg-config))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://smhouston.us/projects/ephoto/")
     (synopsis "EFL image viewer/editor/manipulator/slideshow creator")
     (description "Ephoto is an image viewer and editor written using the
@@ -588,7 +589,7 @@ directories.
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("efl" ,efl)))
+     (list efl))
     (home-page "https://www.enlightenment.org")
     (synopsis "EFL process viewer")
     (description
@@ -622,13 +623,9 @@ directories.
                   (string-append "join(\"" out "/share/epour\"")))
                #t))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distutils-extra" ,python-distutils-extra)))
+     (list intltool python-distutils-extra))
     (inputs
-     `(("libtorrent-rasterbar" ,libtorrent-rasterbar)
-       ("python-dbus" ,python-dbus)
-       ("python-efl" ,python-efl)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list libtorrent-rasterbar python-dbus python-efl python-pyxdg))
     (home-page "https://www.enlightenment.org")
     (synopsis "EFL Bittorrent client")
     (description "Epour is a BitTorrent client based on the @dfn{Enlightenment
diff --git a/gnu/packages/entr.scm b/gnu/packages/entr.scm
index 5ca40690dd..29fd5b7db6 100644
--- a/gnu/packages/entr.scm
+++ b/gnu/packages/entr.scm
@@ -59,16 +59,14 @@
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "entr.c"
                (("/bin/sh" command)
-                (string-append (assoc-ref inputs "bash") command))
+                (search-input-file inputs command))
                (("/bin/cat" command)
-                (string-append (assoc-ref inputs "coreutils") command))
+                (search-input-file inputs command))
                (("/usr(/bin/clear)" _ command)
-                (string-append (assoc-ref inputs "ncurses") command)))
+                (search-input-file inputs command)))
              #t)))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("ncurses" ,ncurses)))
+     (list bash coreutils ncurses))
     (home-page "http://entrproject.org/")
     (synopsis "Run arbitrary commands when files change")
     (description
diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
index 32bc12ebb8..1974fef9a9 100644
--- a/gnu/packages/erlang.scm
+++ b/gnu/packages/erlang.scm
@@ -69,9 +69,7 @@
             (base32
              "1c9ccp93pmm54mmvpiyrmj8v00pq11a60c4xv220k97i965zkwsg"))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("wxwidgets" ,wxwidgets)))
+     (list ncurses openssl wxwidgets))
     (propagated-inputs
      `(("fontconfig" ,fontconfig)
        ("glu" ,glu)
diff --git a/gnu/packages/esolangs.scm b/gnu/packages/esolangs.scm
index 753221a5f1..c37df58fe8 100644
--- a/gnu/packages/esolangs.scm
+++ b/gnu/packages/esolangs.scm
@@ -52,7 +52,7 @@
       ;; The tests are not designed to be run and evaluated automatically.
      '(#:tests? #f))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/VorpalBlade/cfunge")
     (synopsis "Fast conforming Befunge93/98/109 interpreter in C")
     (description "@command{cfunge} is a fast conforming Befunge93/98/109 interpreter
@@ -75,9 +75,9 @@ identified by unique ID codes).")
         (base32 "0syw60b93iajgh91ffchirwwhm2kix2753ibx845kyrhzggmdh2l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("python-2" ,python-2)))         ; for the tests
+     (list python-2))         ; for the tests
     (synopsis "LOLCODE interpreter written in C")
     (description
      "@code{lci} is a LOLCODE interpreter written in C and is designed to be
@@ -122,8 +122,7 @@ whenever possible to the extent that the above points are not compromized.
          (add-before 'install 'build
            (assoc-ref gnu:%standard-phases 'build)))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://shakespearelang.sourceforge.net/")
     (synopsis "Write programs like Shakespearean plays")
     (description "Shakespeare is a programming language with the design goal
diff --git a/gnu/packages/fabric-management.scm b/gnu/packages/fabric-management.scm
index 08cf85cd00..982a4bfa75 100644
--- a/gnu/packages/fabric-management.scm
+++ b/gnu/packages/fabric-management.scm
@@ -56,15 +56,14 @@
         (base32 "19scwwpwqhqsyq4hbr5cflcmypss828lalxxd36yby7mbimca38y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-
-       ;; The 3.3.21 'release' tarball isn't properly bootstrapped.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list bison
+           flex
+           ;; The 3.3.21 'release' tarball isn't properly bootstrapped.
+           autoconf
+           automake
+           libtool))
     (inputs
-     `(("rdma-core" ,rdma-core)))
+     (list rdma-core))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -103,17 +102,11 @@ running the opensm daemon.")
         (base32 "1ns9sjwvxnklhi47d6k5x8kxdk1n7f5362y45xwxqmr7gwfvpmwa"))))
     (build-system gnu-build-system)
     (inputs
-     `(("rdma-core" ,rdma-core)
-       ("opensm" ,opensm)
-       ("glib" ,glib)))
+     (list rdma-core opensm glib))
     (outputs '("out" "lib"))
     (native-inputs
      ;; FIXME: needs rst2man for man pages
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (arguments
      '(#:configure-flags
        (list (string-append "CPPFLAGS=-I" (assoc-ref %build-inputs "opensm")
@@ -159,14 +152,14 @@ interface to this library is not guaranteed to be stable.")
        (sha256
         (base32 "00x7v6cf8l5y6g9xwh1sg738ch42fhv19msx0h0090nhr0bv98v7"))))
     (build-system gnu-build-system)
-    (inputs `(("graphviz" ,graphviz)
-              ("tcl" ,tcl)
-              ("tk" ,tk)
-              ("infiniband-diags" ,infiniband-diags)
-              ("rdma-core" ,rdma-core)
-              ("opensm" ,opensm)
-              ("perl" ,perl)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list graphviz
+                  tcl
+                  tk
+                  infiniband-diags
+                  rdma-core
+                  opensm
+                  perl))
+    (native-inputs (list swig))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-osm="  (assoc-ref %build-inputs "opensm"))
@@ -219,13 +212,9 @@ testing InfiniBand networks.")
        ;; Be verbose so that compiler flags are displayed.
        #:make-flags '("V=1")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("numactl" ,numactl)
-       ("rdma-core" ,rdma-core)))
+     (list numactl rdma-core))
     (synopsis "Optimized communication layer for message passing in HPC")
     (description
      "Unified Communication X (UCX) provides an optimized communication layer
diff --git a/gnu/packages/fcitx.scm b/gnu/packages/fcitx.scm
index c602789b45..53680058c0 100644
--- a/gnu/packages/fcitx.scm
+++ b/gnu/packages/fcitx.scm
@@ -81,14 +81,13 @@
                  "/lib/qt5/plugins")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("fcitx" ,fcitx)
        ("libintl" ,intltool)
        ("libxkbcommon" ,libxkbcommon)))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Fcitx Qt5 Input Context")
     (description "This package provides a Qt5 frontend for fcitx.")
     (home-page "https://github.com/fcitx/fcitx-qt5/")
@@ -139,11 +138,7 @@
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("sqlite" ,sqlite)
-       ("tinyxml" ,tinyxml)))
+     (list glib gtk+ libx11 sqlite tinyxml))
     (synopsis "Intelligent Predictive Text Entry System")
     (description "Presage generates predictions by modelling natural language as
 a combination of redundant information sources.  It computes probabilities for
diff --git a/gnu/packages/fcitx5.scm b/gnu/packages/fcitx5.scm
index 0c4980aba2..d7d0c5874b 100644
--- a/gnu/packages/fcitx5.scm
+++ b/gnu/packages/fcitx5.scm
@@ -69,13 +69,9 @@
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("uthash" ,uthash)
-       ("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list uthash libxcb xcb-util xcb-util-keysyms))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (home-page "https://github.com/fcitx/xcb-imdkit")
     (synopsis "Input method development support for XCB")
     (description "Xcb-imdkit is an implementation of xim protocol in XCB,
@@ -133,9 +129,8 @@ client.")
        ("xcb-util-wm" ,xcb-util-wm)
        ("xkeyboard-config" ,xkeyboard-config)))
     (native-inputs
-     `(("gcc" ,gcc-9)                   ; for #include <charconv>
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list gcc-9 ; for #include <charconv>
+           extra-cmake-modules pkg-config))
     (native-search-paths
      (list (search-path-specification
             (variable "FCITX_ADDON_DIRS")
@@ -159,12 +154,9 @@ client.")
         (base32 "0f3raxzkq0nwdfpc9hxvg65vga09gznjjgy9dr6jlkamzx8zlyw9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("fcitx5" ,fcitx5)
-       ("lua" ,lua)
-       ("gettext" ,gettext-minimal)
-       ("libpthread-stubs" ,libpthread-stubs)))
+     (list fcitx5 lua gettext-minimal libpthread-stubs))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (home-page "https://github.com/fcitx/fcitx5-lua")
     (synopsis "Lua support for Fcitx 5")
     (description "Fcitx5-lua allows writing Fcitx5 extension in Lua.")
@@ -183,12 +175,10 @@ client.")
         (base32 "06smx1kqq3qh0xra8070cjfhw79hcm0vksrswk05wq6jyhvrk5sd"))))
     (build-system cmake-build-system)
     (inputs
-     `(("fcitx5" ,fcitx5)
-       ("boost" ,boost)))
+     (list fcitx5 boost))
     (native-inputs
-     `(("gcc" ,gcc-9)                  ;for #include <filesystem> and ld support
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("python" ,python)))             ;needed to run test
+     (list gcc-9 ;for #include <filesystem> and ld support
+           extra-cmake-modules python))             ;needed to run test
     (home-page "https://github.com/fcitx/libime")
     (synopsis "Library for implementing generic input methods")
     (description "Libime is a library for implementing various input method
@@ -238,9 +228,8 @@ editors.")
        ("libx11" ,libx11)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")))           ;for glib-genmarshal
+     (list extra-cmake-modules pkg-config
+           `(,glib "bin")))           ;for glib-genmarshal
     ;; TODO: Add "lib" output to reduce the closure size of "gtk2".
     (outputs '("out" "gtk2"))
     (home-page "https://github.com/fcitx/fcitx5-gtk")
@@ -274,7 +263,7 @@ for GTK+2/GTK+3 application.")
        ("qtbase" ,qtbase-5)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (home-page "https://github.com/fcitx/fcitx5-qt")
     (synopsis "Qt library and IM module for Fcitx 5")
     (description "Fcitx5-qt provides Qt library for development and IM module
@@ -321,8 +310,7 @@ for Qt based application.")
        ("fcitx5-qt" ,fcitx5-qt)
        ("qtwebkit" ,qtwebkit)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (outputs '("out" "gui"))
     (home-page "https://github.com/fcitx/fcitx5-chinese-addons")
     (synopsis "Chinese related addons for Fcitx 5")
@@ -375,9 +363,7 @@ including input methods previous bundled inside Fcitx 4:
        ("gettext" ,gettext-minimal)
        ("iso-codes" ,iso-codes)))
     (native-inputs
-     `(("gcc" ,gcc-9)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list gcc-9 extra-cmake-modules pkg-config))
     (home-page "https://github.com/fcitx/fcitx5-configtool")
     (synopsis "Graphical configuration tool for Fcitx 5")
     (description "Fcitx5-configtool is a graphical configuration tool
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 7cba71f6a4..696391256d 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -133,21 +133,18 @@
                (("ln -fs lookup_yp.so" match)
                 (string-append "# " match))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)
-       ("rpcsvc-proto" ,rpcsvc-proto)))
+     (list bison flex pkg-config rpcsvc-proto))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("e2fsprogs" ,e2fsprogs)         ; for e[234]fsck
-       ("libtirpc" ,libtirpc)
-       ("libxml2" ,libxml2)             ; needed for LDAP, SASL
-       ("mit-krb5" ,mit-krb5)           ; needed for LDAP, SASL
-       ("nfs-utils" ,nfs-utils)         ; for mount.nfs
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)             ; needed for SASL
-       ("sssd" ,sssd)
-       ("util-linux" ,util-linux)))     ; for mount, umount
+     (list cyrus-sasl
+           e2fsprogs ; for e[234]fsck
+           libtirpc
+           libxml2 ; needed for LDAP, SASL
+           mit-krb5 ; needed for LDAP, SASL
+           nfs-utils ; for mount.nfs
+           openldap
+           openssl ; needed for SASL
+           sssd
+           util-linux))     ; for mount, umount
     ;; XXX A directory index is the closest thing this has to a home page.
     (home-page "https://www.kernel.org/pub/linux/daemons/autofs/")
     (synopsis "Kernel-based automounter for Linux")
@@ -184,9 +181,9 @@ large and/or frequently changing (network) environment.")
        ;; ("ruby" ,ruby)
        ;; ("valgrind" ,valgrind)
        ;; ("which" ,which)
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://bindfs.org")
     (synopsis "Bind mount a directory and alter permission bits")
     (description
@@ -292,11 +289,10 @@ unmaintained---to use the @code{inotify} API instead of the deprecated
                       (string-append "pkgsysconfdir=" out "/etc")
                       make-flags)))))))
     (inputs
-     `(("neon" ,neon)
-
-       ;; Neon requires but doesn't propagate zlib, nor would we want that.
-       ;; XZ as well, but that's already present in the build environment.
-       ("zlib" ,zlib)))
+     (list neon
+           ;; Neon requires but doesn't propagate zlib, nor would we want that.
+           ;; XZ as well, but that's already present in the build environment.
+           zlib))
     (home-page "https://savannah.nongnu.org/projects/davfs2")
     (synopsis "Mount remote WebDAV resources in the local file system")
     (description
@@ -356,19 +352,17 @@ ones.")
         (base32 "1ry2sdkfbg4bwcldk42g1i3wa3z4pr9yh9dil6ilhwcvhqiw41zc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("e2fsprogs" ,e2fsprogs)
-       ("libgcrypt" ,libgcrypt)
-       ("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("util-linux" ,util-linux "lib")
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd:lib" ,zstd "lib")))
+     (list bzip2
+           e2fsprogs
+           libgcrypt
+           lz4
+           lzo
+           `(,util-linux "lib")
+           xz
+           zlib
+           `(,zstd "lib")))
     (synopsis "File system back-up, deployment, and migration tool")
     (description
      "FSArchiver saves the contents of a file system to a compressed archive
@@ -399,11 +393,9 @@ is corrupted you'll lose the affected file(s) but not the whole back-up.")
          "04slwhr6ap9xcc27wphk22ad8yn79ngyy5z10lxams3k5liahvc2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)
-       ("libgphoto2" ,libgphoto2)))
+     (list fuse glib libgphoto2))
     (synopsis "Virtual file system for libgphoto2 using FUSE")
     (description "GPhotoFS is a FUSE file system module to mount your camera as
 a file system on Linux.  This allow using your camera with any tool able to read
@@ -457,15 +449,13 @@ from a mounted file system.")
                                          "util-linux"))))))))))
          #:tests? #f))                  ; XXX 6 valgrind tests fail
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-
-         ;; For tests.
-         ("python-pytest" ,python-pytest)
-         ("valgrind" ,valgrind)
-
-         ;; For generating documentation with rst2man.
-         ("python" ,python)
-         ("python-docutils" ,python-docutils)))
+       (list pkg-config
+             ;; For tests.
+             python-pytest
+             valgrind
+             ;; For generating documentation with rst2man.
+             python
+             python-docutils))
       (inputs
        `(("eudev" ,eudev)
          ("keyutils" ,keyutils)
@@ -574,10 +564,7 @@ from the bcachefs-tools package.  It is meant to be used in initrds.")
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/exfatprogs/exfatprogs")
     (synopsis "Tools to create, check, and repair exFAT file systems")
     (description
@@ -601,14 +588,9 @@ Extensible File Allocation Table} file systems.  Included are
          "1h8ggvhw30n2r6w11n1s458ypggdqx6ldwd61ma4yd7binrlpjq1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("docbook-xml" ,docbook-xml)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc docbook-xml libxml2 libxslt pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("gnutls" ,gnutls)))
+     (list fuse gnutls))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -661,7 +643,7 @@ single file can be mounted.")
                                 "jfsutils-include-systypes.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (home-page "http://jfs.sourceforge.net/home.html")
     (synopsis "Utilities for managing JFS file systems")
     (description
@@ -737,10 +719,9 @@ from the jfsutils package.  It is meant to be used in initrds.")
          "1pnrj0h8sgqwgsc18vz3fkqsp6vhigdbi75vdj0si1r6wgslnr7z"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("attr" ,attr)))
+     (list fuse attr))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure))  ; no configure script
@@ -845,11 +826,9 @@ All of this is accomplished without a centralized metadata server.")
               (("4426192") "12814800"))
              #t)))))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("fuse" ,fuse)))
+     (list curl glib fuse))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://curlftpfs.sourceforge.net/")
     (synopsis "Mount remote file systems over FTP")
     (description
@@ -879,7 +858,8 @@ All of this is accomplished without a centralized metadata server.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (list "eatmydata.in" "eatmydata.sh.in")
                (("basename|readlink|uname" command)
-                (string-append (assoc-ref inputs "coreutils") "/bin/" command)))))
+                (search-input-file inputs
+                                   (string-append "bin/" command))))))
          (add-before 'patch-file-names 'tighten-symlink-mode
            ;; When the ‘eatmydata’ helper detects that it's a symlink, it will
            ;; transparently invoke the command of the same name.  However, it's
@@ -914,7 +894,7 @@ All of this is accomplished without a centralized metadata server.")
        ("strace" ,strace)
        ("which" ,which)))
     (inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (home-page "https://www.flamingspork.com/projects/libeatmydata/")
     (synopsis "Transparently ignore calls to synchronize data safely to disk")
     (description
@@ -955,10 +935,7 @@ A simple @command{eatmydata} script is included that does this for you.")
     (build-system gnu-build-system)
     (home-page "https://github.com/sahlberg/libnfs")
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Client library for accessing NFS shares")
     (description "LIBNFS is a client library for accessing NFS shares over a
 network.  LIBNFS offers three different APIs, for different use :
@@ -1013,9 +990,7 @@ network.  LIBNFS offers three different APIs, for different use :
                  (install-file "../source/README.md" doc)
                  #t))))))
       (inputs
-       `(("bzip2" ,bzip2)
-         ("fuse" ,fuse)
-         ("zlib" ,zlib)))
+       (list bzip2 fuse zlib))
       (synopsis "Read-only FUSE driver for the APFS file system")
       (description "APFS-FUSE is a read-only FUSE driver for the @dfn{Apple File
 System} (APFS).  It is currently in an experimental state — it may not be able
@@ -1057,11 +1032,9 @@ APFS.")
                                              (assoc-ref inputs "bash")
                                              match))
                              (("/bin/(rm|true)" match)
-                              (string-append (assoc-ref inputs "coreutils")
-                                             match))
+                              (search-input-file inputs match))
                              (("/usr(/bin/time)" _ match)
-                              (string-append (assoc-ref inputs "time")
-                                             match))))
+                              (search-input-file inputs match))))
                          (append (find-files "common" ".*")
                                  (find-files "tests" ".*")
                                  (find-files "tools" ".*")
@@ -1108,8 +1081,7 @@ APFS.")
                  (with-output-to-file helper
                    (lambda _
                      (format #t "#!~a --no-auto-compile\n!#\n"
-                             (string-append (assoc-ref inputs "guile")
-                                            "/bin/guile"))
+                             (search-input-file inputs "/bin/guile"))
                      (write
                       `(begin
                          (define (try proc dir)
@@ -1150,9 +1122,7 @@ xfstest's \"~a\" command (with any OPTIONs) as documented below.\n\n"
                              status))))))
                  (chmod helper #o755)))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (inputs
        `(("acl" ,acl)
          ("attr" ,attr)
@@ -1303,9 +1273,7 @@ with the included @command{xfstests-check} helper.")
                              (string-append out
                                             "/share/bash-completion/completions"))))))))
     (native-inputs
-     `(("attr" ,attr)
-       ("kmod" ,kmod)
-       ("pkg-config" ,pkg-config)))
+     (list attr kmod pkg-config))
     (inputs
      `(("eudev" ,eudev)
        ("kmod-runtime" ,kmod)
@@ -1346,7 +1314,7 @@ community.")
      ;; Note: if you are inheriting from the above zfs package in order
      ;; to provide a specific stable kernel version, you should also
      ;; inherit this package and replace the sole input below.
-     `(("zfs" ,zfs)))
+     (list zfs))
     (arguments
      `(#:tests? #f ; No tests
        #:phases
@@ -1436,15 +1404,15 @@ On Guix System, you will need to invoke the included shell scripts as
              (substitute* '("libfuse/lib/mount_util.c"
                             "libfuse/util/mount_util.c")
                (("/bin/(u?)mount" _ maybe-u)
-                (string-append (assoc-ref inputs "util-linux")
-                               "/bin/" maybe-u "mount")))
+                (search-input-file inputs
+                                   (string-append "bin/" maybe-u
+                                                  "mount"))))
              (substitute* '("libfuse/util/mount.mergerfs.c")
                (("/bin/sh" command)
                 (string-append (assoc-ref inputs "bash-minimal") command))))))))
     ;; Mergerfs bundles a heavily modified copy of fuse.
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("util-linux" ,util-linux)))
+     (list bash-minimal util-linux))
     (home-page "https://github.com/trapexit/mergerfs")
     (synopsis "Featureful union file system")
     (description "mergerfs is a union file system geared towards simplifying
@@ -1473,9 +1441,7 @@ is similar to mhddfs, unionfs, and aufs.")
           (base32 "15pgym6c4viy57ccgp28dnqwh12f3gr02axg86y578aqa2yaa0ad"))))
       (build-system copy-build-system)
       (inputs
-       `(("python" ,python)
-         ("python-xattr" ,python-xattr)
-         ("rsync" ,rsync)))
+       (list python python-xattr rsync))
       (arguments
        '(#:install-plan
          '(("src/" "bin/"))
@@ -1490,10 +1456,9 @@ is similar to mhddfs, unionfs, and aufs.")
                   (string-append "'" (assoc-ref inputs "coreutils") "/bin/rm'")))
                (substitute* "src/mergerfs.mktrash"
                  (("xattr")
-                  (string-append (assoc-ref inputs "python-xattr") "/bin/xattr"))
+                  (search-input-file inputs "/bin/xattr"))
                  (("mkdir")
-                  (string-append (assoc-ref inputs "coreutils") "/bin/mkdir")))
-               #t)))))
+                  (search-input-file inputs "/bin/mkdir"))))))))
       (synopsis "Tools to help manage data in a mergerfs pool")
       (description "mergerfs-tools is a suite of programs that can audit
 permissions and ownership of files and directories on a mergerfs volume,
@@ -1517,12 +1482,9 @@ compatible directories.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; Tests require a network connection.
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-stone" ,python-stone)))
+     (list python-requests python-six python-stone))
     (home-page "https://www.dropbox.com/developers")
     (synopsis "Official Dropbox API Client")
     (description "This package provides a Python SDK for integrating with the
@@ -1549,13 +1511,13 @@ Dropbox API v2.")
     (arguments
      '(#:tests? #f)) ; tests requires safefs
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-block-tracing" ,python-block-tracing)
-       ("python-dropbox" ,python-dropbox)
-       ("python-keyring" ,python-keyring)
-       ("python-keyrings.alt" ,python-keyrings.alt)
-       ("python-privy" ,python-privy)
-       ("python-userspacefs" ,python-userspacefs)))
+     (list python-appdirs
+           python-block-tracing
+           python-dropbox
+           python-keyring
+           python-keyrings.alt
+           python-privy
+           python-userspacefs))
   (home-page "https://thelig.ht/code/dbxfs/")
   (synopsis "User-space file system for Dropbox")
   (description
@@ -1581,7 +1543,7 @@ local file system using FUSE.")
     (arguments
      `(#:import-path "github.com/hanwen/go-fuse"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://github.com/hanwen/go-fuse")
     (synopsis "FUSE bindings for Go")
     (description
@@ -1622,10 +1584,9 @@ local file system using FUSE.")
                  (for-each (cut install-file <> (string-append doc "/examples"))
                            (find-files "." "^config\\."))))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("fuse" ,fuse)
-         ("pcre" ,pcre)))
+       (list fuse pcre))
       (home-page "https://github.com/sloonz/rewritefs")
       (synopsis "FUSE file system that changes particular file names")
       (description
@@ -1666,8 +1627,7 @@ the XDG directory specification from @file{~/.@var{name}} to
                (rename-file (string-append out "/bin/TMSU")
                             (string-append out "/bin/tmsu"))))))))
     (inputs
-     `(("go-github-com-mattn-go-sqlite3" ,go-github-com-mattn-go-sqlite3)
-       ("go-github-com-hanwen-fuse" ,go-github-com-hanwen-fuse)))
+     (list go-github-com-mattn-go-sqlite3 go-github-com-hanwen-fuse))
     (home-page "https://github.com/oniony/TMSU")
     (synopsis "Tag files and access them through a virtual file system")
     (description
@@ -1699,10 +1659,7 @@ set up.")
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc/" ,name "-" ,version))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool pkg-config))
     (home-page "https://github.com/pali/udftools")
     (synopsis "Tools to manage UDF file systems and DVD/CD-R(W) drives")
     (description "@code{udftools} is a set of programs for reading
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index f811ba77c7..1c330e5434 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -3,6 +3,8 @@
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,14 +31,14 @@
 (define-public file
   (package
     (name "file")
-    (version "5.38")
+    (version "5.39")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0d7s376b4xqymnrsjxi3nsv3f5v89pzfspzml2pcajdk5by2yg2r"))))
+                "1lgs2w2sgamzf27kz5h7pajz7v62554q21fbs11n4mfrfrm2hpgh"))))
    (build-system gnu-build-system)
 
    ;; When cross-compiling, this package depends upon a native install of
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 2f7f3741e0..8d802d9511 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2021 ZmnSCPxj jxPCSnmZ <ZmnSCPxj@protonmail.com>
 ;;; Copyright © 2021 François J <francois-oss@avalenn.eu>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,6 +57,7 @@
   #:use-module (guix build-system go)
   #:use-module (guix build-system qt)
   #:use-module (guix deprecation)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages aidc)
@@ -130,20 +132,20 @@
                 "17nvir1yc6mf4wr1fn4xsabw49cd5p9vig8wj77vv4anzi8zfij1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)               ; for the tests
-       ("util-linux" ,util-linux)       ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-4.8)                 ; 4.8 required for compatibility
-       ("boost" ,boost)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list bdb-4.8 ; 4.8 required for compatibility
+           boost
+           libevent
+           miniupnpc
+           openssl
+           qtbase-5))
     (arguments
      `(#:configure-flags
        (list
@@ -228,32 +230,32 @@ line client and a client based on Qt.")
          "07fcfkmv4cy92njnf2qc7jh0naz96q962hxldcd7hk4k7ddv0mss"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-decimal" ,ghc-decimal)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hledger-lib" ,ghc-hledger-lib)
-       ("ghc-lucid" ,ghc-lucid)
-       ("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-timeit" ,ghc-timeit)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-split" ,ghc-split)
-       ("ghc-tabular" ,ghc-tabular)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-wizards" ,ghc-wizards)))
+     (list ghc-ansi-terminal
+           ghc-base-compat-batteries
+           ghc-cmdargs
+           ghc-data-default
+           ghc-decimal
+           ghc-diff
+           ghc-hashable
+           ghc-hledger-lib
+           ghc-lucid
+           ghc-math-functions
+           ghc-megaparsec
+           ghc-old-time
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-aeson
+           ghc-extra
+           ghc-tasty
+           ghc-timeit
+           ghc-shakespeare
+           ghc-split
+           ghc-tabular
+           ghc-temporary
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-utility-ht
+           ghc-wizards))
     (home-page "https://hledger.org")
     (synopsis "Command-line interface for the hledger accounting system")
     (description
@@ -281,12 +283,9 @@ Accounting.")
                 "14qhv79a2waqzmf6l571wklgwq8j1pkmjvzkj5vhh44nia8hfdh7"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libofx" ,libofx)
-       ("libsoup" ,libsoup)))
+     (list gtk+ libofx libsoup))
     (home-page "http://homebank.free.fr/")
     (synopsis "Graphical personal accounting application")
     (description "HomeBank allows you to manage your personal accounts at
@@ -307,7 +306,14 @@ and dynamically with report tools based on filtering and graphical charts.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0x6jxwss3wwzbzlwmnwb8yzjk8f9wfawif4f1b74z2qg6hc4r7f6"))))
+        (base32 "0x6jxwss3wwzbzlwmnwb8yzjk8f9wfawif4f1b74z2qg6hc4r7f6"))
+       (snippet '(begin
+                   ;; Remove test that fails due to difference in
+                   ;; reported error message (missing leading "./" in the
+                   ;; file name); started some time after Guix commit
+                   ;; 727f05e1e285aa52f5a19ec923fdc2259859b4b1
+                   (delete-file "test/regress/BF3C1F82-2.test")
+                   #true))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules (,@%cmake-build-system-modules
@@ -346,24 +352,22 @@ and dynamically with report tools based on filtering and graphical charts.")
            ;; One test fails if it can't set the timezone.
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))
              ;; Skip failing test BaselineTest_cmd-org.
              ;; This is a known upstream issue. See
              ;; https://github.com/ledger/ledger/issues/550
              (setenv "ARGS" "-E BaselineTest_cmd-org")
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("libedit" ,libedit)
-       ("mpfr" ,mpfr)
-       ("python" ,python)
-       ("utfcpp" ,utfcpp)))
+     (list boost
+           gmp
+           libedit
+           mpfr
+           python
+           utfcpp))
     (native-inputs
-     `(("groff" ,groff)
-       ("texinfo" ,texinfo)
-       ("tzdata" ,tzdata-for-tests)))
+     (list groff texinfo tzdata-for-tests))
     (home-page "https://ledger-cli.org/")
     (synopsis "Command-line double-entry accounting program")
     (description
@@ -429,9 +433,9 @@ in ability, and easy to use.")
              (with-directory-excursion "../source/test"
                (invoke "make" "test-batch")))))))
     (inputs
-     `(("ledger" ,ledger)))
+     (list ledger))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://ledger-cli.org/")
     (synopsis "Command-line double-entry accounting program")
     (description
@@ -487,7 +491,7 @@ This package provides the Emacs mode.")
                                 "for search ")))
               #t)))))
     (inputs
-     `(("icecat" ,icecat)))
+     (list icecat))
     (home-page "https://stesie.github.io/geierlein/")
     (synopsis "Free Elster client, for sending Germany VAT declarations")
     (description
@@ -521,22 +525,22 @@ do so.")
            #t))))
     (build-system python-build-system)
     (inputs
-     `(("python-pyqt" ,python-pyqt)
-       ("python-qrcode" ,python-qrcode)
-       ("python-protobuf" ,python-protobuf)
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-aiohttp-socks" ,python-aiohttp-socks)
-       ("python-aiorpcx" ,python-aiorpcx-0.18)
-       ("python-certifi" ,python-certifi)
-       ("python-bitstring" ,python-bitstring)
-       ("python-attrs" ,python-attrs)
-       ("python-cryptography" ,python-cryptography)
-       ("python-qdarkstyle" ,python-qdarkstyle)
-       ("python-dnspython" ,python-dnspython)
-       ("python-hidapi" ,python-hidapi)
-       ("python-ledgerblue" ,python-ledgerblue)
-       ("python-btchip-python" ,python-btchip-python)
-       ("libsecp256k1" ,libsecp256k1)))
+     (list python-pyqt
+           python-qrcode
+           python-protobuf
+           python-aiohttp
+           python-aiohttp-socks
+           python-aiorpcx-0.18
+           python-certifi
+           python-bitstring
+           python-attrs
+           python-cryptography
+           python-qdarkstyle
+           python-dnspython
+           python-hidapi
+           python-ledgerblue
+           python-btchip-python
+           libsecp256k1))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -551,6 +555,14 @@ do so.")
                  (("sys\\.prefix")
                   (format #f "\"~a\"" out)))
                #t)))
+         (add-after 'unpack 'relax-dnspython-version-requirement
+           ;; The version requirement for dnspython>=2.0,<2.1 makes the
+           ;; sanity-check phase fail, but the application seems to be working
+           ;; fine with dnspython 2.1 (the version we have currently).
+           (lambda _
+             (substitute* "contrib/requirements/requirements.txt"
+               (("dnspython>=.*")
+                "dnspython"))))
          (add-after 'unpack 'use-libsecp256k1-input
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "electrum/ecc_fast.py"
@@ -597,6 +609,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
        ("python-pyaes" ,python-pyaes)
        ("python-pyqt" ,python-pyqt)
        ("python-pysocks" ,python-pysocks)
+       ("python-qdarkstyle" ,python-qdarkstyle)
        ("python-qrcode" ,python-qrcode)
        ("python-requests" ,python-requests)
        ("python-stem" ,python-stem)
@@ -623,6 +636,11 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
                 (string-append "library_paths = ('"
                                (assoc-ref inputs "libsecp256k1")
                                "/lib/libsecp256k1.so.0'")))))
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "contrib/requirements/requirements.txt"
+               (("qdarkstyle==2\\.6\\.8")
+                "qdarkstyle"))))
          (add-after 'install 'wrap-qt
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -663,33 +681,38 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
             delete-file-recursively
             '("external/miniupnp" "external/rapidjson"
               "external/unbound"))
+           ;; TODO: Remove the following when upgrading to a newer tagged
+           ;; version as it will already contain the fix for Boost 1.76.
+           (substitute* "contrib/epee/include/storages/portable_storage.h"
+             (("#include \"int-util.h\"" all)
+              (string-append all "\n#include <boost/mpl/contains.hpp>")))
            #t))
        (sha256
         (base32 "1spsf7m3x4psp9s7mivr6x4886jnbq4i8ll2dl8bv5bsdhcd3pjm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)
-       ("protobuf" ,protobuf)
-       ("python" ,python)
-       ("qttools" ,qttools)))
+     (list doxygen
+           graphviz
+           pkg-config
+           protobuf
+           python
+           qttools))
     (inputs
-     `(("boost" ,boost)
-       ("cppzmq" ,cppzmq)
-       ("expat" ,expat)
-       ("hidapi" ,hidapi)
-       ("libsodium" ,libsodium)
-       ("libunwind" ,libunwind)
-       ("libusb" ,libusb)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("rapidjson" ,rapidjson)
-       ("readline" ,readline)
-       ("unbound" ,unbound)
-       ("xz" ,xz)
-       ("zeromq" ,zeromq)))
+     (list boost
+           cppzmq
+           expat
+           hidapi
+           libsodium
+           libunwind
+           libusb
+           miniupnpc
+           openssl
+           protobuf
+           rapidjson
+           readline
+           unbound
+           xz
+           zeromq))
     (arguments
      `(#:out-of-source? #t
        #:configure-flags
@@ -792,10 +815,10 @@ the Monero command line client and daemon.")
     (arguments
      `(#:tests? #f ; No tests
        #:configure-flags
-       (list "-DARCH=default"
-             "-DENABLE_PASS_STRENGTH_METER=ON"
-             (string-append "-DReadline_ROOT_DIR="
-                            (assoc-ref %build-inputs "readline")))
+       ,#~(list "-DARCH=default"
+                "-DENABLE_PASS_STRENGTH_METER=ON"
+                (string-append "-DReadline_ROOT_DIR="
+                               #$(this-package-input "readline")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'extract-monero-sources
@@ -803,9 +826,8 @@ the Monero command line client and daemon.")
            ;; to build the GUI.
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "monero")
-             (invoke "tar" "-xv" "--strip-components=1"
-                     "-C" "monero"
-                     "-f" (assoc-ref inputs "monero-source"))))
+             (copy-recursively (assoc-ref inputs "monero-source")
+                               "monero")))
          (add-after 'extract-monero-sources 'fix-build
            (lambda _
              (substitute* "src/version.js.in"
@@ -825,8 +847,7 @@ the Monero command line client and daemon.")
            ;; The monerod program must be available so that monero-wallet-gui
            ;; can start a Monero daemon if necessary.
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (symlink (string-append (assoc-ref inputs "monero")
-                                     "/bin/monerod")
+             (symlink (search-input-file inputs "/bin/monerod")
                       (string-append (assoc-ref outputs "out")
                                      "/bin/monerod")))))))
     (home-page "https://web.getmonero.org/")
@@ -869,21 +890,19 @@ the Monero GUI client.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-configargparse" ,python-configargparse)
-       ("python-daemon" ,python-daemon)
-       ("python-docutils" ,python-docutils)
-       ("python-ecdsa" ,python-ecdsa)
-       ("python-hidapi" ,python-hidapi)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-pymsgbox" ,python-pymsgbox)
-       ("python-pynacl" ,python-pynacl)
-       ("python-semver" ,python-semver)
-       ("python-unidecode" ,python-unidecode)
-       ("python-wheel" ,python-wheel)))
+     (list python-configargparse
+           python-daemon
+           python-docutils
+           python-ecdsa
+           python-hidapi
+           python-mnemonic
+           python-pymsgbox
+           python-pynacl
+           python-semver
+           python-unidecode
+           python-wheel))
     (native-inputs
-     `(("gnupg" ,gnupg)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list gnupg python-mock python-pytest))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Use hardware wallets as SSH and GPG agent")
     (description
@@ -930,7 +949,7 @@ settings.")
           (base32 "1xi5qvj2rvi5almf9c89rl7hz1z4ms04d53pg818i4vpkmivavvw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pbkdf2" ,python-pbkdf2)))
+     (list python-pbkdf2))
     (home-page "https://github.com/trezor/python-mnemonic")
     (synopsis "Implementation of Bitcoin BIP-0039")
     (description "@code{mnemonic} is a library that provides an implementation
@@ -953,12 +972,12 @@ of Bitcoin BIP-0039.")
             "010mghaqh1cmz3a0ifc3f40mmyplilwlw7kpha2mzyrrff46p9gb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ecpy" ,python-ecpy)
-       ("python-future" ,python-future)
-       ("python-hidapi" ,python-hidapi)
-       ("python-pillow" ,python-pillow)
-       ("python-protobuf" ,python-protobuf)
-       ("python-pycrypto" ,python-pycrypto)))
+     (list python-ecpy
+           python-future
+           python-hidapi
+           python-pillow
+           python-protobuf
+           python-pycrypto))
     (home-page "https://github.com/LedgerHQ/blue-loader-python")
     (synopsis "Python library to communicate with Ledger Blue/Nano S")
     (description "@code{ledgerblue} is a Python library to communicate with
@@ -983,8 +1002,7 @@ Ledger Blue/Nano S.")
     (arguments
      `(#:tests? #f)) ; those require PyQt4
     (propagated-inputs
-      `(("python-ecdsa" ,python-ecdsa)
-        ("python-hidapi" ,python-hidapi)))
+      (list python-ecdsa python-hidapi))
     (home-page "https://github.com/LedgerHQ/btchip-python")
     (synopsis "Python library to communicate with Ledger Nano dongle")
     (description
@@ -1025,22 +1043,22 @@ Nano dongle.")
            (delete-file-recursively "./python")))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-click" ,python-click)
-       ("python-construct" ,python-construct)
-       ("python-ecdsa" ,python-ecdsa)
-       ("python-libusb1" ,python-libusb1)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-requests" ,python-requests)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-attrs
+           python-click
+           python-construct
+           python-ecdsa
+           python-libusb1
+           python-mnemonic
+           python-requests
+           python-typing-extensions))
     (native-inputs
      ;; For tests.
-     `(("protobuf" ,protobuf)
-       ("python-black" ,python-black)
-       ("python-protobuf" ,python-protobuf)
-       ("python-isort" ,python-isort)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pytest" ,python-pytest)))
+     (list protobuf
+           python-black
+           python-protobuf
+           python-isort
+           python-pyqt
+           python-pytest))
     (home-page "https://github.com/trezor/python-trezor")
     (synopsis "Python library for communicating with TREZOR Hardware Wallet")
     (description "@code{trezor} is a Python library for communicating with
@@ -1068,11 +1086,8 @@ TREZOR Hardware Wallet.")
              (add-installed-pythonpath inputs outputs)
              (apply invoke "python" (find-files "tests/unit" "\\.py$")))))))
     (propagated-inputs
-     `(("python-ecdsa" ,python-ecdsa)
-       ("python-hidapi" ,python-hidapi)
-       ("python-libusb1" ,python-libusb1)
-       ("python-mnemonic" ,python-mnemonic)
-       ("python-protobuf" ,python-protobuf)))
+     (list python-ecdsa python-hidapi python-libusb1 python-mnemonic
+           python-protobuf))
     (home-page "https://github.com/keepkey/python-keepkey")
     (synopsis "Python library for communicating with KeepKey Hardware Wallet")
     (description "@code{keepkey} is a Python library for communicating with
@@ -1095,8 +1110,7 @@ the KeepKey Hardware Wallet.")
          "03zj602m2rln9yvr08dswy56vzkbldp8b074ixwzz525dafblr92"))))
     (build-system python-build-system)
     (inputs
-     `(("python-ledgerblue" ,python-ledgerblue)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-ledgerblue python-trezor-agent))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Ledger as hardware SSH/GPG agent")
     (description "This package allows using Ledger as hardware SSH/GPG agent.")
@@ -1158,10 +1172,9 @@ the KeepKey Hardware Wallet.")
                              (string-append out "/bin"))))))))
     (build-system python-build-system)
     (inputs
-     `(("python-trezor" ,python-trezor)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-trezor python-trezor-agent))
     (native-inputs
-     `(("python-attrs" ,python-attrs)))
+     (list python-attrs))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Using Trezor as hardware SSH/GPG agent")
     (description "This package allows using Trezor as a hardware SSH/GPG
@@ -1181,8 +1194,7 @@ agent.")
             "03779gvlx70i0nnry98i4pl1d92604ix5x6jgdfkrdgzqbh5vj27"))))
     (build-system python-build-system)
     (inputs
-     `(("python-keepkey" ,python-keepkey)
-       ("python-trezor-agent" ,python-trezor-agent)))
+     (list python-keepkey python-trezor-agent))
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "KeepKey as hardware SSH/GPG agent")
     (description "This package allows using KeepKey as a hardware SSH/GPG
@@ -1206,7 +1218,7 @@ agent.")
                     (lambda _
                       (invoke "nosetests"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://arthurdejong.org/python-stdnum/")
     (synopsis "Python module to handle standardized number and code formats")
     (description
@@ -1316,14 +1328,12 @@ Its features are:
     (arguments
      `(#:configure-flags (list "--without-ofx")))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-compile-schemas
-       ("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list `(,glib "bin") ; glib-compile-schemas
+           pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgsf" ,libgsf)))
+     (list gtk+ libgsf))
     (synopsis "Personal accounting application")
     (description "Grisbi is a personal accounting application written by
 French developers that is designed to follow French accounting rules.
@@ -1402,22 +1412,22 @@ Trezor wallet.")
                 "1amzwy3gpl8ai90dsy7g0z51qq8vxfzbf642wn4bfynb8jmw3kx5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)               ; for the tests
-       ("util-linux" ,util-linux)       ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-5.3)
-       ("boost" ,boost)
-       ("jemalloc" ,jemalloc)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list bdb-5.3
+           boost
+           jemalloc
+           libevent
+           miniupnpc
+           openssl
+           protobuf
+           qrencode
+           qtbase-5
+           zeromq
+           zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1475,12 +1485,12 @@ a client based on Qt.  This is a fork of Bitcoin Core.")
                             (assoc-ref %build-inputs "opensp")
                             "/include/OpenSP"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gengetopt" ,gengetopt)
-       ("help2man" ,help2man)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           gengetopt
+           help2man
+           libtool
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("libxml++-2" ,libxml++-2)
@@ -1513,24 +1523,24 @@ following three utilities are included with the library:
         (base32 "1cmrvh7azz0g89rsx6i8apd1li6r1lb3jrmbbf8fic1918lwv62m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python) ; for the tests
-       ("util-linux" ,util-linux) ; provides the hexdump command for tests
-       ("qttools" ,qttools)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python ; for the tests
+           util-linux ; provides the hexdump command for tests
+           qttools))
     (inputs
-     `(("bdb" ,bdb-4.8)
-       ("boost" ,boost)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("zeromq" ,zeromq)
-       ("zlib" ,zlib)))
+     (list bdb-4.8
+           boost
+           libevent
+           miniupnpc
+           openssl
+           protobuf
+           qrencode
+           qtbase-5
+           zeromq
+           zlib))
     (arguments
      `(#:configure-flags
        (list
@@ -1606,12 +1616,9 @@ a Qt GUI.")
               (string-append "PREFIX=" %output)
               "features="))))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("python" ,python)
-       ("qtbase" ,qtbase-5)
-       ("rocksdb" ,rocksdb)
-       ("zlib" ,zlib)))
+     (list python qtbase-5 rocksdb zlib))
     (home-page "https://gitlab.com/FloweeTheHub/fulcrum/")
     (synopsis "Fast and nimble SPV server for Bitcoin Cash")
     (description
@@ -1669,16 +1676,14 @@ like Flowee the Hub, which Fulcrum connects to over RPC.")
             (lambda _
               (invoke "make" "check" "-C" "testing"))))))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("libevent" ,libevent)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gmp
+           libevent
+           miniupnpc
+           openssl
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("util-linux" ,util-linux)))       ; provides the hexdump command for tests
+     (list pkg-config qttools util-linux))       ; provides the hexdump command for tests
     (home-page "https://flowee.org")
     (synopsis "Flowee infrastructure tools and services")
     (description
@@ -1712,16 +1717,16 @@ that allows you to run services and through them access the Bitcoin Cash network
                (("'google-api-python-client',") ""))
              #t)))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-bottle" ,python-bottle)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-ply" ,python-ply)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4
+           python-bottle
+           python-chardet
+           python-dateutil
+           python-lxml
+           python-magic
+           python-ply
+           python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://furius.ca/beancount")
     (synopsis "Command-line double-entry accounting tool")
     (description
@@ -1773,41 +1778,41 @@ generate a variety of reports from them, and provides a web interface.")
        #:cabal-revision
        ("1" "1hnw10ibhbafbsfj5lzlxwjg4cjnqr5bb51n6mqbi30qqabgq78x")))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-clientsession" ,ghc-clientsession)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-decimal" ,ghc-decimal)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-hjsmin" ,ghc-hjsmin)
-       ("ghc-hledger-lib" ,ghc-hledger-lib)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-network" ,ghc-network)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-wai-cors" ,ghc-wai-cors)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-handler-launch" ,ghc-wai-handler-launch)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-yesod-core" ,ghc-yesod-core)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-yesod" ,ghc-yesod)
-       ("ghc-yesod-static" ,ghc-yesod-static)
-       ("ghc-yesod-test" ,ghc-yesod-test)
-       ("hledger" ,hledger)))
+     (list ghc-aeson
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-case-insensitive
+           ghc-clientsession
+           ghc-cmdargs
+           ghc-conduit-extra
+           ghc-conduit
+           ghc-data-default
+           ghc-decimal
+           ghc-extra
+           ghc-hjsmin
+           ghc-hledger-lib
+           ghc-hspec
+           ghc-http-client
+           ghc-http-conduit
+           ghc-http-types
+           ghc-megaparsec
+           ghc-network
+           ghc-shakespeare
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-wai-cors
+           ghc-wai-extra
+           ghc-wai
+           ghc-wai-handler-launch
+           ghc-warp
+           ghc-yaml
+           ghc-yesod-core
+           ghc-yesod-form
+           ghc-yesod
+           ghc-yesod-static
+           ghc-yesod-test
+           hledger))
     (home-page "https://hledger.org")
     (synopsis "Web-based user interface for the hledger accounting system")
     (description "This package provides a simple Web-based User
@@ -1830,14 +1835,10 @@ editing on the Web.")
         (base32 "1zd0pfiphnijh1l94swb3mjrpmjsn37z11mklamd7zw6h2d4zh4d"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gsl" ,gsl)
-       ("gtk3" ,gtk+)
-       ("ncurses" ,ncurses)))
+     (list gsl gtk+ ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-epsf
-                                        texlive-tex-texinfo)))))
+     (list pkg-config texinfo
+           (texlive-updmap.cfg (list texlive-epsf texlive-tex-texinfo))))
     (home-page "https://anthonybradford.github.io/optionmatrix/")
     (synopsis "Financial derivative calculator")
     (description
@@ -1859,13 +1860,11 @@ interactive controls.  This package provides a GTK+ graphical user interface
         (base32 "17sf222mq2vx924f15qlz5czkkq5vsnsjy9ibwkrk8lalr6g5lkl"))))
     (build-system python-build-system)
     (inputs
-     `(("ta-lib" ,ta-lib)))
+     (list ta-lib))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-pandas" ,python-pandas)))
+     (list python-cython python-nose python-pandas))
     (home-page "https://github.com/mrjbq7/ta-lib")
     (synopsis "Python wrapper for TA-Lib")
     (description
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 3ce4b0306e..1dc64a5341 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -126,8 +126,7 @@ Linux-libre.")
            "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("flex" ,flex)
-         ("bison" ,bison)))
+       (list flex bison))
       (arguments
        `(#:modules ((srfi srfi-1)
                     (guix build gnu-build-system)
@@ -181,7 +180,7 @@ driver.")
          "1p60gdi7w88s7qw82d3g9v7mk887mhvidf4l5q5hh09j10h37q4x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("b43-tools" ,b43-tools)))
+     (list b43-tools))
     (arguments
      `(#:make-flags (list (string-append "PREFIX="
                                          (assoc-ref %outputs "out")
@@ -211,12 +210,9 @@ by the b43-open driver of Linux-libre.")
                (base32
                 "1h4c4ndcnh88jn65h1kycxkjrydwwwh3irkxvpaxb6ry4wpc45r0"))))
     (build-system meson-build-system)
-    (native-inputs `(("curl" ,curl)
-                     ("glib" ,glib "bin")
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("libgpiod" ,libgpiod)
-              ("libgudev" ,libgudev)
-              ("libusb" ,libusb)))
+    (native-inputs (list curl
+                         `(,glib "bin") pkg-config))
+    (inputs (list libgpiod libgudev libusb))
     (synopsis "Manager daemon for the Quectel EG25 mobile broadband modem")
     (description
      "This package provides a manager daemon for the Quectel EG25 mobile
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index c5f1abccbf..764fc9b422 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2016, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
@@ -67,11 +67,8 @@
                (base32
                 "0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71"))))
     (build-system gnu-build-system)
-    (inputs `(("dmidecode" ,dmidecode)
-              ("pciutils" ,pciutils)
-              ("libusb" ,libusb)
-              ("libftdi" ,libftdi)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list dmidecode pciutils libusb libftdi))
+    (native-inputs (list pkg-config))
     (arguments
      '(#:make-flags
        (list "CC=gcc"
@@ -86,9 +83,15 @@
              (substitute* "dmi.c"
                (("\"dmidecode\"")
                 (format #f "~S"
-                        (string-append (assoc-ref inputs "dmidecode")
-                                       "/sbin/dmidecode"))))
-             #t)))))
+                        (search-input-file inputs "/sbin/dmidecode"))))))
+         (add-before 'build 'patch-type-error
+           (lambda _
+             ;; See https://github.com/flashrom/flashrom/pull/133
+             (substitute* "libflashrom.c"
+               (("supported_boards\\[i\\].working = binfo\\[i\\].working")
+                "supported_boards[i].working = (enum flashrom_test_state)binfo[i].working")
+               (("supported_chipsets\\[i\\].status = chipset\\[i\\].status")
+                "supported_chipsets[i].status = (enum flashrom_test_state)chipset[i].status")))))))
     (home-page "https://flashrom.org/")
     (synopsis "Identify, read, write, erase, and verify ROM/flash chips")
     (description
@@ -116,7 +119,7 @@ programmer devices.")
     (inputs
      ;; Building with libusb-compat will succeed but the result will be broken.
      ;; See <https://github.com/pali/0xFFFF/issues/3>.
-     `(("libusb" ,libusb-0.1)))
+     (list libusb-0.1))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -149,12 +152,9 @@ brick your device.")
        (base32 "15m1w1qad3dj7r8n5ng1qqcaiyx1gyd6hnc3p2apgjllccdp77qg"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libelf" ,libelf)
-       ("libusb" ,libusb-compat)
-       ("libftdi" ,libftdi)))
+     (list libelf libusb-compat libftdi))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "https://www.nongnu.org/avrdude/")
     (synopsis "AVR downloader and uploader")
     (description
@@ -178,9 +178,9 @@ programming} technique.")
       (patches (search-patches "dfu-programmer-fix-libusb.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://dfu-programmer.github.io/")
     (synopsis "Device firmware update programmer for Atmel chips")
     (description
@@ -203,9 +203,9 @@ ISP.")
                 "17piiyp08pccqmbhnswv957lkypmmm92kps79hypxvw23ai3pddl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Host side of the USB Device Firmware Upgrade (DFU) protocol")
     (description
      "The DFU (Universal Serial Bus Device Firmware Upgrade) protocol is
@@ -257,7 +257,7 @@ firmware from it.")
                  (install-file "teensy_loader_cli" bin)
                  #t))))))
       (inputs
-       `(("libusb-compat" ,libusb-compat)))
+       (list libusb-compat))
       (synopsis "Command line firmware uploader for Teensy development boards")
       (description
        "The Teensy loader program communicates with your Teensy board when the
@@ -292,9 +292,9 @@ non-root users.")
          #:make-flags (list (string-append "PREFIX=" %output))
          #:tests? #f)) ; no tests
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (home-page "https://github.com/linux-rockchip/rkflashtool")
       (synopsis "Tools for flashing Rockchip devices")
       (description "Allows flashing of Rockchip based embedded linux devices.
@@ -338,9 +338,7 @@ RK3036, RK3066, RK312X, RK3168, RK3188, RK3288, RK3368.")
                (install-file "libpit/libpit.a" lib)
                #t))))))
     (inputs
-     `(("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list libusb qtbase-5 zlib))
     (home-page "https://glassechidna.com.au/heimdall/")
     (synopsis "Flash firmware onto Samsung mobile devices")
     (description "@command{heimdall} is a tool suite used to flash firmware (aka
@@ -398,8 +396,7 @@ dump Intel Firmware Descriptor data of an image file.")
                 "0nw555i0fm5kljha9h47bk70ykbwv8ddfk6qhz6kfqb79vzhy4h2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("pciutils" ,pciutils)
-       ("zlib" ,zlib)))
+     (list pciutils zlib))
     (arguments
      `(#:make-flags
        (list "CC=gcc"
@@ -481,7 +478,7 @@ ME as far as possible (it only edits ME firmware image files).")
              (install-file "UEFITool" (string-append (assoc-ref outputs "out")
                                                      "/bin")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://github.com/LongSoft/UEFITool/")
     (synopsis "UEFI image editor")
     (description "@code{uefitool} is a graphical image file editor for
@@ -507,15 +504,14 @@ Unifinished Extensible Firmware Interface (UEFI) images.")
                             (assoc-ref %build-inputs "bash")
                             "/bin/bash"))))
     (inputs
-     `(("boost" ,boost)
-       ("libgcrypt" ,libgcrypt)))
+     (list boost libgcrypt))
     (native-inputs
-     `(("bison" ,bison)
-       ("diffutils" ,diffutils)
-       ("ghostscript" ,ghostscript)
-       ("groff" ,groff)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list bison
+           diffutils
+           ghostscript
+           groff
+           libtool
+           which))
     (home-page "http://srecord.sourceforge.net/")
     (synopsis "Tools for EPROM files")
     (description "The SRecord package is a collection of powerful tools for
@@ -562,13 +558,9 @@ formats, and can perform many different manipulations.")
                  (cut dump-port pipe <>))))))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)
-       ("libzip" ,libzip)
-       ("openssl" ,openssl)))
+     (list libusb bzip2 zlib libzip openssl))
     (home-page "https://github.com/NXPmicro/mfgtools")
     (synopsis "Freescale/NXP I.MX chip image deploy tools")
     (description "@code{uuu} is a command line tool, evolved out of MFGTools.
diff --git a/gnu/packages/flex.scm b/gnu/packages/flex.scm
index 9e52f3bb38..7972675971 100644
--- a/gnu/packages/flex.scm
+++ b/gnu/packages/flex.scm
@@ -55,9 +55,8 @@
        `(("bison" ,bison-for-tests))))
     ;; m4 is not present in PATH when cross-building
     (native-inputs
-     `(("help2man" ,help2man)
-       ("m4" ,m4)))
-    (propagated-inputs `(("m4" ,m4)))
+     (list help2man m4))
+    (propagated-inputs (list m4))
     (home-page "https://github.com/westes/flex")
     (synopsis "Fast lexical analyser generator")
     (description
diff --git a/gnu/packages/fltk.scm b/gnu/packages/fltk.scm
index fbdc47e506..dee77d6aa4 100644
--- a/gnu/packages/fltk.scm
+++ b/gnu/packages/fltk.scm
@@ -54,7 +54,7 @@
        (base32 "1arp1niiz3qxm8iacpmilwpc5rinsm6hsk4a6fsxfywvkvppbb4s"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
     `(("libjpeg" ,libjpeg-turbo)
       ("libpng" ,libpng)
@@ -135,11 +135,9 @@ UI builder called FLUID that can be used to create applications in minutes.")
     ;; ntk.pc lists "x11" and "xft" in Requires.private, and "cairo" in
     ;; Requires.
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("libxft" ,libxft)
-       ("libx11" ,libx11)))
+     (list cairo libxft libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://non.tuxfamily.org/ntk/")
     (synopsis "Fork of FLTK with graphics rendering via Cairo")
     (description "The Non Tool Kit (NTK) is a fork of the Fast Light ToolKit
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 0e5904b2f0..b4384c327e 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -320,7 +320,7 @@ The Lato 2.010 family supports more than 100 Latin-based languages, over
                                    (find-files "." "")))))))
        #:test-target "tests"))
     ;; FreeFont anno 2012 requires a FontForge built with Python 2.
-    (native-inputs `(("fontforge" ,fontforge-20190801)))
+    (native-inputs (list fontforge-20190801))
     (home-page "https://www.gnu.org/software/freefont/")
     (synopsis "Unicode-encoded outline fonts")
     (description
@@ -393,7 +393,7 @@ and Bitstream Vera Sans Mono).
                          (find-files "." "\\.sfd$"))
                #t))))))
     (native-inputs
-     `(("fontforge" ,fontforge)))
+     (list fontforge))
     (home-page "http://www.linuxlibertine.org/")
     (synopsis "Serif and sans serif typefaces")
     (description "The Linux Libertine fonts is a set of typefaces containing
@@ -473,11 +473,7 @@ The unified Libertinus family consists of:
                (apply invoke "make" "install-otb" (string-append "prefix=" otb)
                       make-flags)))))))
     (native-inputs
-     `(("bdftopcf" ,bdftopcf)
-       ("font-util" ,font-util)
-       ("mkfontdir" ,mkfontdir)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list bdftopcf font-util mkfontdir pkg-config python))
     (home-page "http://terminus-font.sourceforge.net/")
     (synopsis "Simple bitmap programming font")
     (description "Terminus Font is a clean, fixed-width bitmap font, designed
@@ -784,7 +780,7 @@ for use at smaller text sizes")))
               (install-file "doc/unifont.info.gz"
                             (string-append bin "/share/info"))))))))
     (inputs
-     `(("perl" ,perl))) ; for utilities
+     (list perl)) ; for utilities
     (synopsis
      "Large bitmap font covering Unicode's Basic Multilingual Plane")
     (description
@@ -1464,7 +1460,7 @@ programming.  Iosevka is completely generated from its source code.")
                       (mkdir "source")
                       (chdir "source")
                       (invoke "7z" "x" source))))))
-    (native-inputs `(("p7zip" ,p7zip)))
+    (native-inputs (list p7zip))
     (home-page "https://github.com/be5invis/Sarasa-Gothic")
     (license license:silofl1.1)
     (synopsis "Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック / 사라사 고딕")
@@ -1580,7 +1576,7 @@ resolutions.")
          (base32
           "11ml7v4iyf3hr0fbnkwz8afb8vi58wbcfnmn4gyvrwh9jk5pybdr"))))
     (build-system font-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://opendyslexic.org/")
     (synopsis "Font for dyslexics and high readability")
     (description "OpenDyslexic is a font designed to help readability for some
@@ -1608,7 +1604,7 @@ emphasis while still being readable.")
          "0wvvg5vnc950h8v23wfgjyi7rv89mgm5hqq6viqv0bxcc3azglxb"))))
     (build-system font-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://openmoji.org")
     (synopsis "Font for rendering emoji characters")
     (description
@@ -1677,7 +1673,7 @@ ExtraLight, Light, Book, Medium, Semibold, Bold & ExtraBold")
                          (find-files "." "^Nachlieli.*\\.sfd$"))
                #t))))))
     (native-inputs
-     `(("fontforge" ,fontforge)))
+     (list fontforge))
     (home-page "http://culmus.sourceforge.net/")
     (synopsis "TrueType Hebrew Fonts for X11")
     (description "14 Hebrew trivial families.  Contain ASCII glyphs from various
@@ -1980,7 +1976,7 @@ in small sizes, the text looks crisper.")
                       (mkdir "source")
                       (chdir "source")
                       (invoke "tar" "xzf" source))))))
-    (native-inputs `(("tar" ,tar)))
+    (native-inputs (list tar))
     (home-page "https://github.com/cormullion/juliamono")
     (synopsis "Monospaced font for programming")
     (description
@@ -2223,12 +2219,12 @@ suitable for a wide range of uses.")
            (lambda _
              (invoke "python3" "build.py" "fonts"))))))
     (native-inputs
-     `(("fontforge" ,fontforge)
-       ("python" ,python)
-       ("python-crayons" ,python-crayons)
-       ("python-fonttools" ,python-fonttools)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)))
+     (list fontforge
+           python
+           python-crayons
+           python-fonttools
+           python-numpy
+           python-pillow))
     (home-page "https://github.com/slavfox/Cozette")
     (synopsis "Bitmap programming font")
     (description "Cozette is a 6x13px (bounding box) bitmap font based on Dina
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 2b98c6427b..7d95d419cb 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -8,10 +8,13 @@
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,10 +35,10 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages datastructures)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages freedesktop)
@@ -59,6 +62,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages tex)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -88,12 +92,11 @@
     ;; depend on it.
     `(#:configure-flags (list "--enable-freetype-config")))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (propagated-inputs
     ;; These are all in the Requires.private field of freetype2.pc.
     ;; XXX: add harfbuzz.
-    `(("libpng" ,libpng)
-      ("zlib" ,zlib)))
+    (list libpng zlib))
    (synopsis "Font rendering library")
    (description
     "Freetype is a library that can be used by applications to access the
@@ -118,12 +121,9 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
          "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list flex bison pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)))
+     (list freetype harfbuzz))
     (arguments
      `(#:configure-flags '("--disable-static"
                            "--with-qt=no"))) ;no gui
@@ -151,7 +151,7 @@ scripts.")
          "1i97gkqa6jfzlslsngqf556kx60knlgf7yc9pzsq2pizc6f0d4zl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:make-flags '(,(string-append "CC=" (cc-for-target)))
        #:tests? #f                      ;no tests
@@ -254,7 +254,7 @@ TTF (TrueType/OpenType Font) files.")
                       (invoke "make" "-j"
                               (number->string (parallel-job-count))
                               "all" "CC=gcc"))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (synopsis "Convert TrueType fonts to Postscript Type 1")
     (description
      "TTF2PT1 provides tools to convert most TrueType fonts (or other formats
@@ -307,9 +307,9 @@ work with most software requiring Type 1 fonts.")
                 "BUILD_SHARED_LIBS"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("brotli" ,brotli)))
+     (list brotli))
     (synopsis "Libraries and tools for WOFF2 font format")
     (description "WOFF2 provides libraries and tools to handle the Web Open
 Font Format (WOFF).")
@@ -317,55 +317,61 @@ Font Format (WOFF).")
     (license license:expat)))
 
 (define-public fontconfig
-  (package
-   (name "fontconfig")
-   (version "2.13.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append
-                   "https://www.freedesktop.org/software/fontconfig/release/fontconfig-"
-                   version ".tar.bz2"))
-            (patches (search-patches "fontconfig-hurd-path-max.patch"))
-            (sha256 (base32
-                     "0hb700a68kk0ip51wdlnjjc682kvlrmb6q920mzajykdk0mdsmgn"))))
-   (build-system gnu-build-system)
-   ;; In Requires or Requires.private of fontconfig.pc.
-   (propagated-inputs `(("expat" ,expat)
-                        ("freetype" ,freetype)
-                        ("libuuid" ,util-linux "lib")))
-   (inputs
-    ;; We use to use 'gs-fonts' but they are not recognized by newer versions
-    ;; of Pango, causing many applications to fail to find fonts otherwise.
-    `(("font-dejavu" ,font-dejavu)))
-   (native-inputs
-    `(("gperf" ,gperf)
-      ("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-cache-dir=/var/cache/fontconfig"
-            ;; register the default fonts
-            (string-append "--with-default-fonts="
-                           (assoc-ref %build-inputs "font-dejavu")
-                           "/share/fonts")
-
-            ;; Register fonts from user and system profiles.
-            (string-append "--with-add-fonts="
-                           "~/.guix-profile/share/fonts,"
-                           "/run/current-system/profile/share/fonts")
-
-            ;; python is not actually needed
-            "PYTHON=false")
-      #:phases
-      (modify-phases %standard-phases
-        (replace 'install
-                 (lambda _
-                   ;; Don't try to create /var/cache/fontconfig.
-                   (invoke "make" "install"
-                           "fc_cachedir=$(TMPDIR)"
-                           "RUN_FC_CACHE_TEST=false"))))))
-   (synopsis "Library for configuring and customizing font access")
-   (description
-    "Fontconfig can discover new fonts when installed automatically;
+  (hidden-package
+   (package
+     (name "fontconfig-minimal")
+     (version "2.13.94")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append
+                     "https://www.freedesktop.org/software/"
+                     "fontconfig/release/fontconfig-" version ".tar.xz"))
+               (sha256 (base32
+                        "0g004r0bkkqz00mpm3svnnxn7d83158q0yb9ggxryizxfg5m5w55"))
+               (patches (search-patches "fontconfig-cache-ignore-mtime.patch"))))
+     (build-system gnu-build-system)
+     ;; In Requires or Requires.private of fontconfig.pc.
+     (propagated-inputs `(("expat" ,expat)
+                          ("freetype" ,freetype)
+                          ("libuuid" ,util-linux "lib")))
+     (inputs
+      ;; We use to use 'font-ghostscript' but they are not recognized by newer
+      ;; versions of Pango, causing many applications to fail to find fonts
+      ;; otherwise.
+      (list font-dejavu))
+     (native-inputs
+      `(("gperf" ,gperf)
+        ("pkg-config" ,pkg-config)
+        ("python" ,python-minimal)))    ;to avoid a cycle through tk
+     (arguments
+      `(#:configure-flags
+        (list "--disable-docs"
+              "--with-cache-dir=/var/cache/fontconfig"
+              ;; register the default fonts
+              (string-append "--with-default-fonts="
+                             (assoc-ref %build-inputs "font-dejavu")
+                             "/share/fonts"))
+        #:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'skip-problematic-tests
+            (lambda _
+              ;; SOURCE_DATE_EPOCH doesn't make sense when ignoring mtime
+              (unsetenv "SOURCE_DATE_EPOCH")
+
+              (substitute* "test/run-test.sh"
+                ;; The crbug1004254 test attempts to fetch fonts from the
+                ;; network.
+                (("\\[ -x \"\\$BUILDTESTDIR\"/test-crbug1004254 \\]")
+                 "false"))))
+          (replace 'install
+            (lambda _
+              ;; Don't try to create /var/cache/fontconfig.
+              (invoke "make" "install"
+                      "fc_cachedir=$(TMPDIR)"
+                      "RUN_FC_CACHE_TEST=false"))))))
+     (synopsis "Library for configuring and customizing font access")
+     (description
+      "Fontconfig can discover new fonts when installed automatically;
 perform font name substitution, so that appropriate alternative fonts can
 be selected if fonts are missing;
 identify the set of fonts required to completely cover a set of languages;
@@ -373,10 +379,56 @@ have GUI configuration tools built as it uses an XML-based configuration file;
 efficiently and quickly find needed fonts among the set of installed fonts;
 be used in concert with the X Render Extension and FreeType to implement
 high quality, anti-aliased and subpixel rendered text on a display.")
-   ; The exact license is more X11-style than BSD-style.
-   (license (license:non-copyleft "file://COPYING"
-                       "See COPYING in the distribution."))
-   (home-page "https://www.freedesktop.org/wiki/Software/fontconfig")))
+                                        ; The exact license is more X11-style than BSD-style.
+     (license (license:non-copyleft "file://COPYING"
+                                    "See COPYING in the distribution."))
+     (native-search-paths
+      ;; Since version 2.13.94, fontconfig knows to find fonts from
+      ;; XDG_DATA_DIRS.
+      (list (search-path-specification
+             (variable "XDG_DATA_DIRS")
+             (files '("share")))))
+     (home-page "https://www.freedesktop.org/wiki/Software/fontconfig"))))
+
+;;; The documentation of fontconfig is built in a separate package, as it
+;;; causes a dramatic increase in the size of the closure of fontconfig.  This
+;;; is intentionally named 'fontconfig', as it's intended as the user-facing
+;;; fontconfig package.
+(define-public fontconfig-with-documentation
+  (package
+    (inherit fontconfig)
+    (name "fontconfig")
+    (outputs (cons "doc" (package-outputs fontconfig)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments fontconfig)
+       ((#:configure-flags configure-flags)
+        `(delete "--disable-docs" ,configure-flags))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'no-pdf-doc
+             (lambda _
+               ;; Don't build documentation as PDF.
+               (substitute* "doc/Makefile.in"
+                 (("^PDF_FILES = .*")
+                  "PDF_FILES =\n"))))
+           (add-after 'install 'move-man-sections
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Move share/man/man{3,5} to the "doc" output.  Leave "man1" in
+               ;; "out" for convenience.
+               (let ((out (assoc-ref outputs "out"))
+                     (doc (assoc-ref outputs "doc")))
+                 (for-each (lambda (section)
+                             (let ((source (string-append out "/share/man/"
+                                                          section))
+                                   (target (string-append doc "/share/man/"
+                                                          section)))
+                               (copy-recursively source target)
+                               (delete-file-recursively source)))
+                           '("man3" "man5")))))))))
+    (native-inputs
+     (append (package-native-inputs fontconfig)
+             `(("docbook-utils" ,docbook-utils))))
+    (properties (alist-delete 'hidden? (package-properties fontconfig)))))
 
 (define-public t1lib
   (package
@@ -421,22 +473,21 @@ X11-system or any other graphical user interface.")
 (define-public teckit
   (package
     (name "teckit")
-    (version "2.5.9")                   ;signed by key 0xC9183BEA0288CDEE
+    (version "2.5.10")                  ; signed by key 0xC9183BEA0288CDEE
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/silnrsi/teckit/releases/"
                            "download/v" version "/teckit-" version ".tar.gz"))
        (sha256
-        (base32 "0gbxyip4wdibirdg2pvzayzyy927vxyd6dfyfiflx8zg88qzn8v8"))))
+        (base32 "12qnf8nhxyr4d5pc01s3vc6h726506957an4vvmmfz633cqi5796"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-     `(("zlib" ,zlib)
-       ("expat" ,expat)))
+     (list zlib expat))
     (native-inputs
-     `(("perl" ,perl)))                 ;for the tests
+     (list perl))                 ;for the tests
     (synopsis "Toolkit for encoding conversions")
     (description
      "TECkit is a low-level toolkit intended to be used by other applications
@@ -472,22 +523,10 @@ applications should be.")
         (base32
          "01jzhwnj1c3d68dmw15jdxly0hwkmd8ja4kw755rbkykn1ly2qyx"))))
    (build-system cmake-build-system)
-   (arguments
-    `(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'adjust-test-PYTHONPATH
-                   (lambda _
-                     ;; Tell the build system not to override PYTHONPATH
-                     ;; while running the Python tests.
-                     (substitute* "Graphite.cmake"
-                       (("ENVIRONMENT PYTHONPATH=")
-                        (string-append "ENVIRONMENT PYTHONPATH="
-                                       (getenv "PYTHONPATH") ":")))
-                     #t)))))
    (native-inputs
-    `(("python" ,python)
-      ("python-fonttools" ,python-fonttools)))
+    (list python python-fonttools))
    (inputs
-    `(("freetype" ,freetype)))
+    (list freetype))
    (synopsis "Reimplementation of the SIL Graphite text processing engine")
    (description
     "Graphite2 is a reimplementation of the SIL Graphite text processing
@@ -510,8 +549,8 @@ and returns a sequence of positioned glyphids from the font.")
        (base32
         "1k3sxgjqq0jnpk9xxys05q32sl5hbf1lbk1gmfxcrmpdgnhli0my"))))
     (build-system gnu-build-system)
-    (native-inputs `(("ghostscript" ,ghostscript))) ;for tests
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list ghostscript)) ;for tests
+    (inputs (list zlib))
     (arguments
      `(#:configure-flags
       `("--with-libpotrace"))) ; install library and headers
@@ -539,9 +578,9 @@ resolution.")
                (base32 "0sq6g3xaxw388akws6qrllp3kp2sxgk2dv4j79k6mm52rnihrnv8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://www.nongnu.org/m17n/")
     (synopsis "Library for handling OpenType Font")
     (description "This library can read Open Type Layout Tables from an OTF
@@ -601,17 +640,17 @@ definitions.")
 (define-public fontforge
   (package
    (name "fontforge")
-   (version "20200314")
+   (version "20201107")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "https://github.com/fontforge/fontforge/releases/download/"
                   version "/fontforge-" version ".tar.xz"))
             (sha256
-             (base32 "0qf88wd6riycq56d24brybyc93ns74s0nyyavm43zp2kfcihn6fd"))))
+             (base32 "0y3c8x1i6yf6ak9m5dhr1nldgfmg7zhnwdfd57ffs698c27vmg38"))))
    (build-system cmake-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs `(("cairo"           ,cairo)
              ("fontconfig"      ,fontconfig) ;dlopen'd
              ("freetype"        ,freetype)
@@ -651,7 +690,8 @@ definitions.")
         (add-after 'install 'set-library-path
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out"))
-                  (potrace (string-append (assoc-ref inputs "potrace") "/bin")))
+                  (potrace (dirname
+                            (search-input-file inputs "bin/potrace"))))
               (wrap-program (string-append out "/bin/fontforge")
                 ;; Fontforge dynamically opens libraries.
                 `("LD_LIBRARY_PATH" ":" prefix
@@ -711,11 +751,9 @@ generate bitmaps.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-fonttools" ,python2-fonttools)))
+     (list python2-fonttools))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (home-page "https://github.com/unified-font-object/ufoLib")
     (synopsis "Low-level UFO reader and writer")
     (description
@@ -738,12 +776,9 @@ files.  UFO is a file format that stores fonts source files.")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (propagated-inputs
-     `(("python2-fonttools" ,python2-fonttools)
-       ("python2-ufolib" ,python2-ufolib)))
+     (list python2-fonttools python2-ufolib))
     (home-page "https://pypi.org/project/defcon/")
     (synopsis "Flexible objects for representing @acronym{UFO, unified font object} data")
     (description
@@ -774,12 +809,12 @@ implements UFO3 as described by the UFO font format.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-booleanoperations" ,python2-booleanoperations)
-       ("python2-defcon" ,python2-defcon)
-       ("python2-fonttools" ,python2-fonttools)
-       ("python2-pillow" ,python2-pillow)
-       ("python2-pyclipper" ,python2-pyclipper)
-       ("python2-ufolib" ,python2-ufolib)))
+     (list python2-booleanoperations
+           python2-defcon
+           python2-fonttools
+           python2-pillow
+           python2-pyclipper
+           python2-ufolib))
     (home-page "https://github.com/googlei18n/nototools")
     (synopsis "Noto fonts support tools and scripts")
     (description
@@ -810,20 +845,16 @@ maintain the Noto Fonts project.")
                (base32
                 "0jh05wzrif7z1xf9jzs8bgf49lpj5zs55agj414bmmwdddk7my7j"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (native-inputs
-     `(("check" ,check)
-       ("gcc" ,gcc-10)    ;TODO: Remove when the default compiler is > GCC 7.
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list check gcc-10 ;TODO: Remove when the default compiler is > GCC 7.
+           pkg-config scdoc))
     (propagated-inputs
-     `(;; Required by fcft.pc.
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("pixman" ,pixman)
-       ("tllist" ,tllist)))
+     (list ;; Required by fcft.pc.
+           fontconfig
+           freetype
+           harfbuzz
+           pixman
+           tllist))
     (synopsis "Font loading and glyph rasterization library")
     (description
      "@code{fcft} is a small font loading and glyph rasterization library
@@ -868,7 +899,7 @@ generated list of fallback fonts are checked.")
       ("glib" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
       ("pkg-config" ,pkg-config)
-      ("vala" ,vala-0.50)
+      ("vala" ,vala)
       ("yelp-tools" ,yelp-tools)))
    (inputs
     `(("fonconfig" ,fontconfig)
@@ -964,13 +995,9 @@ Unicode Charts.  It was developed for use with DejaVu Fonts project.")
         (base32 "1shcs5l27l7380dvacvhl8wrdq3lix0wnhzvfdh7vx2pkzjs3zk6"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list gtk-doc/stable pkg-config python-wrapper))
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("harfbuzz" ,harfbuzz)))
+     (list freetype fribidi harfbuzz))
     (home-page "https://github.com/HOST-Oman/libraqm")
     (synopsis "Library for complex text layout")
     (description
@@ -1002,8 +1029,7 @@ can support most writing systems covered by Unicode.")
        ;; FIXME: texlive-kpathsea doesn't come with the library and headers
        (list "--without-kpathsea")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://lcdf.org/type/")
     (synopsis "Multiple font manipulation tools")
     (description "LCDF Typetools comprises several programs for manipulating
diff --git a/gnu/packages/forth.scm b/gnu/packages/forth.scm
index 4dcea19f4e..8cb6ac8391 100644
--- a/gnu/packages/forth.scm
+++ b/gnu/packages/forth.scm
@@ -49,7 +49,7 @@
                (install-file "gforth.el" emacs-sitedir)
                #t))))))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (synopsis "Forth interpreter")
     (description
      "Gforth is a fast and portable implementation of the ANSI Forth language.
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 661ba41793..13970e949a 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -74,9 +74,9 @@
                 "1syygi1x40rdryih3galr4q8yg1w5bvdzl75hd27v1xq0l5bz3d0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:tests? #f ; no check target
        #:phases
@@ -108,9 +108,7 @@ formal verification.")
                 "1vv88ckvfwq7mrysyjnilsrcrzm9d173kp9w5ivwh6rdw7klbgc6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("ghostscript" ,ghostscript)))   ; ps2pdf
+     (list flex bison ghostscript))   ; ps2pdf
     (home-page "http://iverilog.icarus.com/")
     (synopsis "FPGA Verilog simulation and synthesis tool")
     (description "Icarus Verilog is a Verilog simulation and synthesis tool.
@@ -201,23 +199,23 @@ For synthesis, the compiler generates netlists in the desired format.")
                                                                 iverilog "\"")))
                      #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("gawk" , gawk) ; for the tests and "make" progress pretty-printing
-       ("tcl" ,tcl) ; tclsh for the tests
-       ("iverilog" ,iverilog))) ; for the tests
+     (list pkg-config
+           python
+           bison
+           flex
+           gawk ; for the tests and "make" progress pretty-printing
+           tcl ; tclsh for the tests
+           iverilog)) ; for the tests
     (inputs
-     `(("tcl" ,tcl)
-       ("readline" ,readline)
-       ("libffi" ,libffi)
-       ("graphviz" ,graphviz)
-       ("psmisc" ,psmisc)
-       ("xdot" ,xdot)
-       ("abc" ,abc)))
+     (list tcl
+           readline
+           libffi
+           graphviz
+           psmisc
+           xdot
+           abc))
     (propagated-inputs
-     `(("z3" ,z3))) ; should be in path for yosys-smtbmc
+     (list z3)) ; should be in path for yosys-smtbmc
     (home-page "http://www.clifford.at/yosys/")
     (synopsis "FPGA Verilog RTL synthesizer")
     (description "Yosys synthesizes Verilog-2005.")
@@ -258,7 +256,7 @@ For synthesis, the compiler generates netlists in the desired format.")
               #t))
           (delete 'configure))))
     (inputs
-     `(("libftdi" ,libftdi)))
+     (list libftdi))
     (native-inputs
      `(("python-3" ,python)
        ("pkg-config" ,pkg-config)))
@@ -285,12 +283,12 @@ Includes the actual FTDI connector.")
            (base32
             "1fmxsywgs45g88ra7ips5s2niiiwrkyxdcy742ws18dfk2y4vi9c"))))
       (inputs
-       `(("boost" ,boost)
-         ("eigen" ,eigen)
-         ("icestorm" ,icestorm)
-         ("python" ,python)
-         ("qtbase" ,qtbase-5)
-         ("yosys" ,yosys)))
+       (list boost
+             eigen
+             icestorm
+             python
+             qtbase-5
+             yosys))
       (build-system cmake-build-system)
       (arguments
        `(#:configure-flags `("-DARCH=ice40"
@@ -335,7 +333,7 @@ FOSS FPGA place and route tool.")
              (("#!/usr/bin/python") "#!/usr/bin/python2"))
            #t)))))
     (inputs
-     `(("icestorm" ,icestorm)))
+     (list icestorm))
     (native-inputs
      `(("git" ,git)  ; for determining its own version string
        ("yosys" ,yosys) ; for tests
@@ -362,8 +360,7 @@ FOSS FPGA place and route tool.")
         (base32 "15n2gv2hd7h23cci95ij7yr71fkxppb209sfdsmmngh3fik09rpn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list gperf pkg-config))
     (inputs
      `(("tcl" ,tcl)
        ("tk" ,tk)
@@ -400,7 +397,7 @@ simulator trace files (@dfn{FST}).")
         (base32 "1kq11if64zj84gv4w1q7l16fp17xjxl2wv5hc9dibr1z3m1gy67l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)))
+     (list python-colorama))
     (home-page "https://m-labs.hk/gateware/migen/")
     (synopsis "Python toolbox for building complex digital hardware")
     (description
@@ -452,16 +449,16 @@ a hardware description and verification language. ")
            (lambda _
              (delete-file "autogen.sh"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("flex" ,flex)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("check" ,check))) ; for the tests
+     (list automake
+           autoconf
+           flex
+           gnu-gettext
+           libtool
+           pkg-config
+           which
+           check)) ; for the tests
     (inputs
-     `(("llvm" ,llvm-9)))
+     (list llvm-9))
     (synopsis "VHDL compiler and simulator")
     (description "This package provides a VHDL compiler and simulator.")
     (home-page "https://github.com/nickg/nvc")
@@ -479,7 +476,7 @@ a hardware description and verification language. ")
              "systemc/systemc-" version ".tar.gz"))
        (sha256
         (base32 "0gvv3xmhiwx1izmzy06yslzqzh6ygrgmw53xqfmyvbz5a6ivk0ap"))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-debug")))
     (home-page "https://accellera.org/community/systemc")
@@ -518,8 +515,7 @@ using different abstraction levels.")
        ("gettext" ,gettext-minimal)
        ("python" ,python)))
     (inputs
-     `(("perl" ,perl)
-       ("systemc" ,systemc)))
+     (list perl systemc))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index bf4bce553b..0e403ec871 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2017 Andy Wingo <wingo@pobox.com>
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -23,8 +23,11 @@
 ;;; Copyright © 2020 Anders Thuné <asse.97@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Robby Zambito <contact@robbyzambito.me>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,6 +49,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -60,6 +64,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -99,6 +104,7 @@
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rdesktop)
+  #:use-module (gnu packages rsync)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
@@ -185,13 +191,9 @@
        ("python" ,python-wrapper)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("libsoup" ,libsoup)
-       ("libstemmer" ,libstemmer)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)
-       ("lmdb" ,lmdb)))
+     (list libsoup-minimal-2 libstemmer libxml2 libyaml lmdb))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Tools and libraries to work with AppStream metadata")
     (description "AppStream is a cross-distribution effort for enhancing the way
 we interact with the software repositories provided by distributions by
@@ -221,12 +223,13 @@ application-centers for distributions.")
        (sha256
         (base32 "1sd8syldyq6bphfdm129s3gq554vfv7vh1vcwzk48gjryf101awk"))
        (patches
-        (search-patches "farstream-make.patch"))))
+        (search-patches
+         "farstream-gupnp.patch"        ;for test 'transmitter/rawudp'
+         "farstream-make.patch"))))
     (build-system glib-or-gtk-build-system)
     (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f ; https://gitlab.freedesktop.org/farstream/farstream/-/issues/18
-       #:configure-flags
+     `(#:configure-flags
        (list
         "--enable-gtk-doc"
         "--enable-glib-asserts"
@@ -242,6 +245,15 @@ application-centers for distributions.")
               (assoc-ref %build-inputs "common")
               "common")
              #t))
+         (add-after 'unpack 'disable-timeout-tests
+           (lambda _
+             (substitute* "tests/check/Makefile.am"
+               ;; This test timeouts despite changing
+               ;; the value of 'CK_DEFAULT_TIMEOUT' to 600,
+               ;; as per %common-gstreamer-phases.
+               ;; Reported to upstream:
+               ;; https://gitlab.freedesktop.org/farstream/farstream/-/issues/20
+               (("[ \t]*transmitter/nice.*$") ""))))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "docs"
@@ -275,15 +287,9 @@ application-centers for distributions.")
        ("python" ,python-wrapper)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gupnp-igd" ,gupnp-igd)
-       ("libnice" ,libnice)))
+     (list glib gtk+ gupnp-igd libnice))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)))
+     (list gstreamer gst-plugins-bad gst-plugins-base gst-plugins-good))
     (synopsis "The Farstream VVoIP framework")
     (description "Farstream is a collection of GStreamer modules and libraries
 for videoconferencing.")
@@ -322,8 +328,7 @@ for videoconferencing.")
        ("pkg-config" ,pkg-config)
        ("gtk-doc" ,gtk-doc/stable)))
     (inputs
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (synopsis "Glib testing library")
     (description "Libglib-testing is a test library providing test harnesses and
 mock classes which complement the classes provided by GLib.  It is intended to
@@ -347,7 +352,8 @@ tests.")
         (base32 "0vnf0pk516fwwh41v96c29l2i7h1pnwhivlkbf53kkx1q35g7lb3"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          ;; AppInfo not available inside build environment.
@@ -368,15 +374,15 @@ tests.")
        ("libxml2" ,libxml2)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("appstream-glib" ,appstream-glib)
-       ("dbus" ,dbus)
-       ("flatpak" ,flatpak)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libostree" ,libostree)
-       ("linux-pam" ,linux-pam)
-       ("polkit" ,polkit)))
+     (list accountsservice
+           appstream-glib
+           dbus
+           flatpak
+           glib
+           gtk+
+           libostree
+           linux-pam
+           polkit))
     (synopsis "Parental controls support")
     (description "MalContent implements parental controls support which can
 be used by applications to filter or limit the access of child accounts to
@@ -402,11 +408,7 @@ inappropriate content.")
              "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("docbook-xsl" ,docbook-xsl)
-       ("docbook-xml" ,docbook-xml-4.1.2)
-       ("libxslt" ,libxslt)
-       ("w3m" ,w3m)
-       ("xmlto" ,xmlto)))
+     (list docbook-xsl docbook-xml-4.1.2 libxslt w3m xmlto))
     (inputs
      `(("awk" ,gawk)
        ("coreutils" ,coreutils)
@@ -478,14 +480,14 @@ freedesktop.org project.")
   ;; Updating this will rebuild over 700 packages through libinput-minimal.
   (package
     (name "libinput")
-    (version "1.16.4")
+    (version "1.19.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://freedesktop.org/software/libinput/"
                                   "libinput-" version ".tar.xz"))
               (sha256
                (base32
-                "0acywdjppj5i591l879bnqa9cs4vgdwnhilwk550x5x8sl33m4k5"))))
+                "10xqk05mkvsyxfxpn3vwkwb7j22d38wlbg1l1k37f6pfyc59zhqg"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=false")
@@ -495,15 +497,14 @@ freedesktop.org project.")
        ;; Meson target anyway.
        #:build-type "release"))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)))
+     (list check pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libevdev" ,libevdev)
-       ("libwacom" ,libwacom)
-       ("mtdev" ,mtdev)))
+     (list cairo
+           glib
+           gtk+
+           libevdev
+           libwacom
+           mtdev))
     (propagated-inputs
      `(;; libinput.h requires <libudev.h>, so propagate it.
        ("udev" ,eudev)))
@@ -553,9 +554,7 @@ other applications that need to directly deal with input devices.")
                (("^.*\\./configure.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/devnev/libxdg-basedir")
     (synopsis "Implementation of the XDG Base Directory specification")
     (description
@@ -566,7 +565,7 @@ the freedesktop.org XDG Base Directory specification.")
 (define-public elogind
   (package
     (name "elogind")
-    (version "243.7")
+    (version "246.10")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -575,47 +574,57 @@ the freedesktop.org XDG Base Directory specification.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ccj3cbs9nsfg497wg195in1a7b9csm1jdm7z6q7vvx1ynpjxlxz"))))
+                "16045bhpwjq2nqgswln67ipg1zrz2djxlgkfngqng3jqpwagmnzq"))
+              (patches (search-patches
+                        "elogind-revert-polkit-detection.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
-       (let* ((out (assoc-ref %outputs "out"))
-              (sysconf (string-append out "/etc"))
-              (libexec (string-append out "/libexec/elogind"))
-              (dbuspolicy (string-append out "/etc/dbus-1/system.d"))
-              (shadow (assoc-ref %build-inputs "shadow"))
-              (shepherd (assoc-ref %build-inputs "shepherd"))
-              (halt-path (string-append shepherd "/sbin/halt"))
-              (kexec-path "")           ;not available in Guix yet
-              (nologin-path (string-append shadow "/sbin/nologin"))
-              (poweroff-path (string-append shepherd "/sbin/shutdown"))
-              (reboot-path (string-append shepherd "/sbin/reboot")))
-         (list
-          (string-append "-Drootprefix=" out)
-          (string-append "-Dsysconfdir=" sysconf)
-          (string-append "-Drootlibexecdir=" libexec)
-          (string-append "-Ddbuspolicydir=" dbuspolicy)
-          (string-append "-Dc_link_args=-Wl,-rpath=" libexec)
-          (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec)
-          (string-append "-Dhalt-path=" halt-path)
-          (string-append "-Dkexec-path=" kexec-path)
-          (string-append "-Dpoweroff-path=" poweroff-path)
-          (string-append "-Dreboot-path=" reboot-path)
-          (string-append "-Dnologin-path=" nologin-path)
-          "-Dcgroup-controller=elogind"
-          "-Dman=true"
-          ;; Disable some tests.
-          "-Dslow-tests=false"))
+       ,#~(let* ((out #$output)
+                 (sysconf (string-append out "/etc"))
+                 (libexec (string-append out "/libexec/elogind"))
+                 (dbuspolicy (string-append out "/etc/dbus-1/system.d"))
+                 (kexec-tools #$(this-package-input "kexec-tools"))
+                 (shadow #$(this-package-input "shadow"))
+                 (shepherd #$(this-package-input "shepherd"))
+                 (halt-path (string-append shepherd "/sbin/halt"))
+                 (kexec-path (string-append kexec-tools "/sbin/kexec"))
+                 (nologin-path (string-append shadow "/sbin/nologin"))
+                 (poweroff-path (string-append shepherd "/sbin/shutdown"))
+                 (reboot-path (string-append shepherd "/sbin/reboot")))
+            (list
+             (string-append "-Drootprefix=" out)
+             (string-append "-Dsysconfdir=" sysconf)
+             (string-append "-Drootlibexecdir=" libexec)
+             (string-append "-Ddbuspolicydir=" dbuspolicy)
+             (string-append "-Dc_link_args=-Wl,-rpath=" libexec)
+             (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec)
+             (string-append "-Dhalt-path=" halt-path)
+             (string-append "-Dkexec-path=" kexec-path)
+             (string-append "-Dpoweroff-path=" poweroff-path)
+             (string-append "-Dreboot-path=" reboot-path)
+             (string-append "-Dnologin-path=" nologin-path)
+             "-Dcgroup-controller=elogind"
+             "-Dman=true"
+             ;; Disable some tests.
+             "-Dslow-tests=false"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-pkttyagent-path
            (lambda _
              (substitute* "meson.build"
                (("join_paths\\(bindir, 'pkttyagent'\\)")
-                "'\"/run/current-system/profile/bin/pkttyagent\"'"))
-             #t))
+                "'\"/run/current-system/profile/bin/pkttyagent\"'"))))
          (add-after 'unpack 'adjust-tests
            (lambda _
+             ;; Skip the following test, which depends on users such as 'root'
+             ;; existing in the build environment.
+             (invoke "sed" "/src\\/test\\/test-user-util.c/,+2s/^/#/g"
+                     "-i" "src/test/meson.build")
+             ;; FIXME: This one times out for unknown reasons.
+             (invoke "sed"
+                     "/src\\/libelogind\\/sd-event\\/test-event.c/,+2s/^/#/g"
+                     "-i" "src/test/meson.build")
              ;; This test tries to copy some bytes from /usr/lib/os-release,
              ;; which does not exist in the build container.  Choose something
              ;; more likely to be available.
@@ -651,14 +660,12 @@ the freedesktop.org XDG Base Directory specification.")
              ;; logind system so that it can flicker the monitor, etc.
              ;; Just skip it until a more narrow selection can be made.
              (substitute* "src/libelogind/sd-login/test-login.c"
-               (("r = sd_pid_get_slice.*")
-                "return 77;"))
-             #t))
+               (("test_login\\(\\);")
+                "return 77;"))))
          (add-after 'unpack 'change-pid-file-path
            (lambda _
              (substitute* "src/login/elogind.c"
-               (("\"/run/elogind.pid\"") "\"/run/systemd/elogind.pid\""))
-             #t)))))
+               (("\"/run/elogind.pid\"") "\"/run/systemd/elogind.pid\"")))))))
     (native-inputs
      `(("docbook-xml" ,docbook-xml)
        ("docbook-xml-4.2" ,docbook-xml-4.2)
@@ -671,14 +678,15 @@ the freedesktop.org XDG Base Directory specification.")
        ("python" ,python)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("libcap" ,libcap)
-       ("shadow" ,shadow)                    ;for 'nologin'
-       ("shepherd" ,shepherd)                ;for 'halt' and 'reboot', invoked
-                                             ;when pressing the power button
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("acl" ,acl)))           ;to add individual users to ACLs on /dev nodes
+     (list kexec-tools
+           linux-pam
+           libcap
+           shadow ;for 'nologin'
+           shepherd ;for 'halt' and 'reboot', invoked
+           ;when pressing the power button
+           dbus
+           eudev
+           acl))           ;to add individual users to ACLs on /dev nodes
     (home-page "https://github.com/elogind/elogind")
     (synopsis "User, seat, and session management service")
     (description "Elogind is the systemd project's \"logind\" service,
@@ -819,7 +827,8 @@ of a the system to know what users are logged in, and where.")
                                       (install-file map data))
                                     (find-files ".." "^(kbd-model-map|language-fallback-map)$"))
                           #t)))))))
-    (native-inputs (package-native-inputs elogind))
+    (native-inputs `(,@(package-native-inputs elogind)
+                     ("rsync" ,rsync)))
     (inputs `(("libmount" ,util-linux "lib")
               ("xkeyboard-config" ,xkeyboard-config)
               ("kbd" ,kbd)
@@ -850,10 +859,9 @@ with localed.  This package is extracted from the broader systemd package.")
     (arguments
      `(#:configure-flags '("-Dlogind=enabled")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
-    (inputs
-     `(("elogind" ,elogind)))
+     (list pkg-config scdoc))
+    (propagated-inputs
+     (list elogind))
     (home-page "https://sr.ht/~kennylevinsen/seatd")
     (synopsis "Seat management daemon and library")
     (description
@@ -889,11 +897,9 @@ allows applications to use whatever seat management is available.")
        ("python" ,python-wrapper)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("glib" ,glib)
-       ("bash-completion" ,bash-completion)
-       ("polkit" ,polkit)))
+     (list glib bash-completion polkit))
     (propagated-inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (home-page "https://www.freedesktop.org/software/PackageKit/")
     (synopsis "API for package management, through D-Bus")
     (description
@@ -939,9 +945,7 @@ manager for the current system.")
              (invoke "nosetests" "-v"))))))
     (native-inputs
      ;; For tests.
-     `(("shared-mime-info" ,shared-mime-info)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("python-nose" ,python-nose)))
+     (list shared-mime-info hicolor-icon-theme python-nose))
     (home-page "https://www.freedesktop.org/wiki/Software/pyxdg")
     (synopsis "Implementations of freedesktop.org standards in Python")
     (description
@@ -955,43 +959,71 @@ Python.")
 (define-public wayland
   (package
     (name "wayland")
-    (version "1.18.0")
+    (version "1.19.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://wayland.freedesktop.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0k995rn96xkplrapz5k648j651wc43kq817xk1x8280h16gsfxa6"))))
-    (build-system gnu-build-system)
+                "05bd2vphyx8qwa1mhsj1zdaiv4m4v94wrlssrn0lad8d601dkk5s"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:parallel-tests? #f))
+     `(#:parallel-tests? #f
+        #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (with-directory-excursion "doc"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                  (string-append (assoc-ref (or native-inputs inputs)
+                                            "docbook-xml")
+                                 "/xml/dtd/docbook/"))
+                 (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                  (string-append (assoc-ref (or native-inputs inputs)
+                                            "docbook-xml-4.2")
+                                 "/xml/dtd/docbook/"))))))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)
        ("xmlto" ,xmlto)
-       ("xsltproc" ,libxslt)))
+       ("xsltproc" ,libxslt)
+       ,@(if (%current-target-system)
+             `(("pkg-config-for-build" ,pkg-config-for-build)
+               ("wayland" ,this-package)) ; for wayland-scanner
+             '())))
     (inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("expat" ,expat)
-       ("libffi" ,libffi)
-       ("libxml2" ,libxml2))) ; for XML_CATALOG_FILES
+     (list expat libxml2))           ; for XML_CATALOG_FILES
+    (propagated-inputs
+     (list libffi))
     (home-page "https://wayland.freedesktop.org/")
-    (synopsis "Display server protocol")
-    (description
-     "Wayland is a protocol for a compositor to talk to its clients as well as
-a C library implementation of that protocol.  The compositor can be a standalone
-display server running on Linux kernel modesetting and evdev input devices, an X
-application, or a wayland client itself.  The clients can be traditional
-applications, X servers (rootless or fullscreen) or other display servers.")
-    (license license:x11)))
+    (synopsis "Core Wayland window system code and protocol")
+    (description "Wayland is a project to define a protocol for a compositor to
+talk to its clients as well as a library implementation of the protocol.  The
+compositor can be a standalone display server running on Linux kernel
+modesetting and evdev input devices, an X application, or a wayland client
+itself.  The clients can be traditional applications, X servers (rootless or
+fullscreen) or other display servers.")
+    (license license:expat)))
 
 (define-public wayland-protocols
   (package
     (name "wayland-protocols")
-    (version "1.20")
+    (version "1.23")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -999,14 +1031,17 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                     "wayland-protocols-" version ".tar.xz"))
               (sha256
                (base32
-                "1rsdgvkkvxs3cjhpl6agvbkm53vm7k8rg127j9y2vn33m2hvg0lp"))))
-    (build-system gnu-build-system)
+                "0xizccackgwszjhlq7jjiv2z2gwppljx0w32ga91bxlnby8z22kc"))))
+    (build-system meson-build-system)
     (inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Wayland protocols")
-    (description "This package contains XML definitions of the Wayland protocols.")
+    (description "Wayland-Protocols contains Wayland protocols that add
+functionality not available in the Wayland core protocol.  Such protocols either
+add completely new functionality, or extend the functionality of some other
+protocol either in Wayland core, or some other protocol in wayland-protocols.")
     (home-page "https://wayland.freedesktop.org")
     (license license:expat)))
 
@@ -1026,13 +1061,12 @@ applications, X servers (rootless or fullscreen) or other display servers.")
     (arguments
      `(#:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("mesa" ,mesa)
-       ("pugixml" ,pugixml)))
+     (list mesa pugixml))
     (propagated-inputs
-     `(;; In Requires of the .pc files.
-       ("wayland" ,wayland)))
+     (list ;; In Requires of the .pc files.
+           wayland))
     (synopsis "Wayland C++ bindings")
     (description
      "This package provides C++ bindings for the Wayland display protocol.")
@@ -1052,9 +1086,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                 "1zlql0xgiqc3pvgbpnnvj4xvpd91pwva8qf83xfb23if377ddxaw"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("mscgen" ,mscgen)
-       ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server)))
+     (list mscgen pkg-config xorg-server))
     (inputs
      `(("cairo" ,cairo-xcb)
        ("colord" ,colord)
@@ -1085,9 +1117,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
        ("wayland-protocols" ,wayland-protocols)
        ("xorg-server-xwayland" ,xorg-server-xwayland)))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("pixman" ,pixman)
-       ("wayland" ,wayland)))
+     (list libxkbcommon pixman wayland))
     (arguments
      `(#:configure-flags
        (list
@@ -1127,8 +1157,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://wayland.freedesktop.org")
@@ -1164,12 +1193,9 @@ multiplexer to the KMS/DRM Linux kernel devices.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list libxkbcommon wayland wayland-protocols))
     (home-page "https://git.sr.ht/~sircmpwn/wev")
     (synopsis "Wayland event viewer")
     (description "Wev is a tool that opens a window, printing all events
@@ -1205,10 +1231,9 @@ XEv.")
                                          "/lib/libexempi.a"))
              #t)))))
     (native-inputs
-     `(("boost" ,boost))) ; tests
+     (list boost)) ; tests
     (inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (home-page "https://libopenraw.freedesktop.org/exempi/")
     (synopsis "XMP metadata handling library")
     (description "Exempi is an implementation of the Extensible Metadata
@@ -1229,9 +1254,9 @@ formats.")
                 "138gvgdwk6h4ljrjsr09pxk1nrki4b155hqdzyr8mlk3bwsfmw31"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("udev" ,eudev)))
+     (list eudev))
     (home-page "http://0pointer.de/blog/projects/being-smart.html")
     (synopsis "ATA S.M.A.R.T. reading and parsing library")
     (description
@@ -1263,15 +1288,15 @@ Analysis and Reporting Technology) functionality.")
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by udisks2.pc
+     (list glib)) ; required by udisks2.pc
     (inputs
-     `(("acl" ,acl)
-       ("cryptsetup" ,cryptsetup)
-       ("libatasmart" ,libatasmart)
-       ("libblockdev" ,libblockdev)
-       ("libgudev" ,libgudev)
-       ("polkit" ,polkit)
-       ("util-linux" ,util-linux)))
+     (list acl
+           cryptsetup
+           libatasmart
+           libblockdev
+           libgudev
+           polkit
+           util-linux))
     (outputs '("out"
                "doc"))                            ;5 MiB of gtk-doc HTML
     (arguments
@@ -1341,57 +1366,60 @@ message bus.")
 (define-public accountsservice
   (package
     (name "accountsservice")
-    (version "0.6.50")
+    (version "0.6.55")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.freedesktop.org/software/"
-                           "accountsservice/accountsservice-" version ".tar.xz"))
+                           "accountsservice/accountsservice-"
+                           version ".tar.xz"))
        (sha256
-        (base32 "0jn7vg1z4vxnna0hl33hbcb4bb3zpilxc2vyclh24vx4vvsjhn83"))))
-    (build-system gnu-build-system)
+        (base32 "16wwd633jak9ajyr1f1h047rmd09fhf3kzjz6g5xjsz0lwcj8azz"))))
+    (build-system meson-build-system)
     (arguments
-     '(#:tests? #f ; XXX: tests require DocBook 4.1.2
+     `(#:meson ,meson-0.59 ;see https://github.com/mesonbuild/meson/issues/6470
+       #:tests? #f ; XXX: tests require DocBook 4.1.2
        #:configure-flags
        '("--localstatedir=/var"
-         "--disable-systemd"
-         "--enable-elogind")
+         "-Dsystemdsystemunitdir=/tmp/empty"
+         "-Dsystemd=false"
+         "-Delogind=true")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/cat
            (lambda _
              (substitute* "src/user.c"
-               (("/bin/cat") (which "cat")))
-             #t))
+               (("/bin/cat") (which "cat")))))
          (add-before
           'configure 'pre-configure
           (lambda* (#:key inputs #:allow-other-keys)
-            ;; Don't try to create /var/lib/AccountsService.
-            (substitute* "src/Makefile.in"
-              (("\\$\\(MKDIR_P\\).*/lib/AccountsService.*") "true"))
+            (substitute* "meson_post_install.py"
+              (("in dst_dirs") "in []"))
             (let ((shadow (assoc-ref inputs "shadow")))
               (substitute* '("src/user.c" "src/daemon.c")
-                (("/usr/sbin/usermod") (string-append shadow "/sbin/usermod"))
-                (("/usr/sbin/useradd") (string-append shadow "/sbin/useradd"))
-                (("/usr/sbin/userdel") (string-append shadow "/sbin/userdel"))
-                (("/usr/bin/passwd")   (string-append shadow "/bin/passwd"))
-                (("/usr/bin/chage")    (string-append shadow "/bin/chage"))))
-            #t)))))
+                (("/usr/sbin/usermod")
+                 (string-append shadow "/sbin/usermod"))
+                (("/usr/sbin/useradd")
+                 (string-append shadow "/sbin/useradd"))
+                (("/usr/sbin/userdel")
+                 (string-append shadow "/sbin/userdel"))
+                (("/usr/bin/passwd")
+                 (string-append shadow "/bin/passwd"))
+                (("/usr/bin/chage")
+                 (string-append shadow "/bin/chage")))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("elogind" ,elogind)
-       ("polkit" ,polkit)
-       ("shadow" ,shadow)))
+     (list dbus elogind polkit shadow))
     (home-page "https://www.freedesktop.org/wiki/Software/AccountsService/")
     (synopsis "D-Bus interface for user account query and manipulation")
     (description
-     "The AccountService project provides a set of D-Bus interfaces for querying
-and manipulating user account information and an implementation of these
-interfaces, based on the useradd, usermod and userdel commands.")
+     "The AccountService project provides a set of D-Bus interfaces for
+querying and manipulating user account information and an implementation of
+these interfaces, based on the useradd, usermod and userdel commands.")
     (license license:gpl3+)))
 
 (define-public libmbim
@@ -1408,13 +1436,12 @@ interfaces, based on the useradd, usermod and userdel commands.")
                 "16q550sy84izi5ic3sbbhjnnka2fwhj8vvdrirpn9xspbsgbc3sm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config python-wrapper))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by mbim-glib.pc
+     (list glib)) ; required by mbim-glib.pc
     (inputs
-     `(("libgudev" ,libgudev)))
+     (list libgudev))
     (synopsis "Library to communicate with MBIM-powered modems")
     (home-page "https://www.freedesktop.org/wiki/Software/libmbim/")
     (description
@@ -1439,13 +1466,12 @@ which speak the Mobile Interface Broadband Model (MBIM) protocol.")
                 "0zshxqbm9ldybgrzh7pjmwmfjvvvfd0xh8qhgl8xiqdb9ply73r0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgudev" ,libgudev)))
+     (list libgudev))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config python-wrapper))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by qmi-glib.pc
+     (list glib)) ; required by qmi-glib.pc
     (synopsis "Library to communicate with QMI-powered modems")
     (home-page "https://www.freedesktop.org/wiki/Software/libqmi/")
     (description
@@ -1481,12 +1507,9 @@ which speak the Qualcomm MSM Interface (QMI) protocol.")
        ;; For testing.
        ("dbus" ,dbus)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by mm-glib.pc
+     (list glib)) ; required by mm-glib.pc
     (inputs
-     `(("libgudev" ,libgudev)
-       ("libmbim" ,libmbim)
-       ("libqmi" ,libqmi)
-       ("polkit" ,polkit)))
+     (list libgudev libmbim libqmi polkit))
     (synopsis "Mobile broadband modems manager")
     (home-page "https://www.freedesktop.org/wiki/Software/ModemManager/")
     (description
@@ -1526,9 +1549,7 @@ modems and setup connections with them.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; telepathy-logger-0.2.pc refers to all these.
-     `(("libxml2" ,libxml2)
-       ("sqlite" ,sqlite)
-       ("telepathy-glib" ,telepathy-glib)))
+     (list libxml2 sqlite telepathy-glib))
     (synopsis "Telepathy logger library")
     (home-page "https://telepathy.freedesktop.org/")
     (description
@@ -1552,16 +1573,11 @@ different sorts of messages in different formats.")
         (base32 "1pfw4g2cicw3ykxhsy743r0fc1yqbdrqxh2c5ha6am19dajcr95l"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("xsltproc" ,libxslt)
-       ("python" ,python-2)
-       ("python-dbus" ,python2-dbus)))
+     (list libxslt python-2 python2-dbus))
     (propagated-inputs
-     `(("telepathy-glib" ,telepathy-glib)))
+     (list telepathy-glib))
     (home-page "https://telepathy.freedesktop.org/")
     (synopsis "Telepathy IRC connection manager")
     (description
@@ -1584,16 +1600,12 @@ messaging clients such as Empathy, GNOME Shell or KDE Telepathy.")
         (base32 "00xxv38cfdirnfvgyd56m60j0nkmsv5fz6p2ydyzsychicxl6ssc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-compile-schemas, etc.
+           pkg-config))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk-doc" ,gtk-doc)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("python" ,python-2)
-       ("xsltproc" ,libxslt)))
+     (list dconf gtk-doc libgnome-keyring python-2 libxslt))
     (propagated-inputs
-     `(("telepathy-glib" ,telepathy-glib)))
+     (list telepathy-glib))
     (home-page "https://telepathy.freedesktop.org/wiki/Components/Mission_Control/")
     (synopsis "Telepathy real-time communication framework management daemon")
     (description
@@ -1616,14 +1628,10 @@ share connections to real-time communication services without conflicting.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f)) ; require the colord system service
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gobject-introspection intltool pkg-config vala))
     (propagated-inputs
      ;; colord-gtk.pc refers to all these.
-     `(("colord" ,colord)
-       ("gtk+" ,gtk+)))
+     (list colord gtk+))
     (synopsis "GTK integration for libcolord")
     (home-page "https://www.freedesktop.org/software/colord/")
     (description
@@ -1657,13 +1665,12 @@ wish to perform colour calibration.")
        ("gtk-doc" ,gtk-doc/stable)             ; for 88 KiB of API documentation
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gusb" ,gusb)
-       ("nss" ,nss)                     ; for the URU4x00 driver
-
-       ;; Replacing this with cairo works but just results in a reference
-       ;; (only) to pixman in the end.
-       ("pixman" ,pixman)))
+     (list glib
+           gusb
+           nss ; for the URU4x00 driver
+           ;; Replacing this with cairo works but just results in a reference
+           ;; (only) to pixman in the end.
+           pixman))
     (home-page "https://fprint.freedesktop.org/")
     (synopsis "Library to access fingerprint readers")
     (description
@@ -1747,17 +1754,16 @@ software.")
        ;;("python-pygobject" ,python-pygobject)
        ;;("python-pypamtest" ,python-pypamtest)
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("elogind" ,elogind)
-       ("libfprint" ,libfprint)
-       ("linux-pam" ,linux-pam)
-       ("polkit" ,polkit)
-
-       ;; XXX These are in libfprint's Requires.private.  Meson refuses to grant
-       ;; the ‘libfprint-2’ dependency if they are not provided here.
-       ("gusb" ,gusb)
-       ("nss" ,nss)
-       ("pixman" ,pixman)))
+     (list dbus-glib
+           elogind
+           libfprint
+           linux-pam
+           polkit
+           ;; XXX These are in libfprint's Requires.private.  Meson refuses to grant
+           ;; the ‘libfprint-2’ dependency if they are not provided here.
+           gusb
+           nss
+           pixman))
     (home-page "https://fprint.freedesktop.org/")
     (synopsis "D-Bus daemon that exposes fingerprint reader functionality")
     (description
@@ -1781,11 +1787,9 @@ to applications simultaneously competing for fingerprint readers.")
                 "02bkfi6fyk4c0gh2avd897882ww5zl7qg7bzzf28qb57kvkvsvdj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://www.freedesktop.org/wiki/Software/desktop-file-utils/")
     (synopsis "Utilities for working with desktop entries")
     (description
@@ -1860,13 +1864,10 @@ manually by a user.")
          "1qq5ag9zffx8zc5i9b4z03ar80pqj4drgk3vjdlyfapjwb9zqrf0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("xdg-user-dirs" ,xdg-user-dirs)))
+     (list perl-module-build perl-file-which perl-test-pod
+           perl-test-pod-coverage xdg-user-dirs))
     (propagated-inputs
-     `(("perl-ipc-system-simple" ,perl-ipc-system-simple)))
+     (list perl-ipc-system-simple))
     (home-page "https://metacpan.org/release/File-BaseDir")
     (synopsis "Use the Freedesktop.org base directory specification")
     (description
@@ -1890,11 +1891,9 @@ application data and cache data.")
          "1f1maqix2kbfg2rf008m7mqnvv6nvcf9y6pcgdv2kxp2vbih370n"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-file-basedir" ,perl-file-basedir)
-       ("perl-uri" ,perl-uri)))
+     (list perl-file-basedir perl-uri))
     (home-page "https://metacpan.org/release/File-DesktopEntry")
     (synopsis "Handle @file{.desktop} files")
     (description
@@ -1919,8 +1918,7 @@ applications define in those files.")
     ;; If the tests are fixed, add perl-test-pod, perl-test-pod-coverage, and
     ;; perl-test-tiny as native-inputs.
     (propagated-inputs
-     `(("shared-mime-info" ,shared-mime-info)
-       ("perl-file-desktopentry" ,perl-file-desktopentry)))
+     (list shared-mime-info perl-file-desktopentry))
     (arguments
      ;; Some tests fail due to requiring the mimetype of perl files to be
      ;; text/plain when they are actually application/x-perl.
@@ -1989,7 +1987,7 @@ encoding names are iconv-compatible.")
           "1bqfz85cd51sw0bvhvdq9ikccxi2ld7g5jpni4jkq1a5clrvca64"))))
   (build-system python-build-system)
   (inputs
-   `(("uchardet" ,uchardet)))
+   (list uchardet))
   (home-page "https://github.com/PyYoshi/cChardet")
   (synopsis "High-performance character encoding detection for Python")
   (description "cChardet is a character encoding detector, written in
@@ -2013,17 +2011,10 @@ Python, that binds to the C library @code{uchardet} to increase performance.")
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("libappindicator" ,libappindicator)
-       ("libnotify" ,libnotify)
-       ("udisks" ,udisks)))
+     (list gobject-introspection gtk+ libappindicator libnotify udisks))
     (propagated-inputs
-     `(("python-docopt" ,python-docopt)
-       ("python-pygobject" ,python-pygobject)
-       ("python-keyutils" ,python-keyutils)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-docopt python-pygobject python-keyutils python-pyxdg
+           python-pyyaml))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2105,11 +2096,7 @@ Its features include:
                      (string-append (assoc-ref inputs "docbook-xml")
                                     "/xml/dtd/docbook/catalog.xml")))))))
     (inputs
-     `(("glib" ,glib)
-       ("pango" ,pango)
-       ("libdrm" ,libdrm)
-       ("libpng" ,libpng)
-       ("eudev" ,eudev)))
+     (list glib pango libdrm libpng eudev))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
@@ -2146,8 +2133,7 @@ useful with system integration.")
        ("pkg-config" ,pkg-config)
        ("xvfb" ,xorg-server-for-tests)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)))
+     (list gtk+ glib))
     (arguments
      `(#:make-flags '("CFLAGS=-Wno-error")
        #:phases
@@ -2181,6 +2167,13 @@ useful with system integration.")
              "https://launchpad.net/libappindicator/"
              (version-major+minor version) "/" version
              "/+download/libappindicator-" version ".tar.gz"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Fix 'multiple definitions' error from GCC 10
+           (substitute* "bindings/python/appindicatormodule.c"
+             (("^#include <pygobject.h>" all)
+              (string-append "#define NO_IMPORT_PYGOBJECT\n" all)))))
        (sha256
         (base32
          "17xlqd60v0zllrxp8bgq3k5a1jkj0svkqn8rzllcyjh8k0gpr46m"))))
@@ -2200,8 +2193,7 @@ useful with system integration.")
        ;; ("mono" ,mono) ; requires non-packaged gapi
        ("vala" ,vala)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libdbusmenu" ,libdbusmenu)))
+     (list gtk+ libdbusmenu))
     (arguments
      ;; FIXME: do not hardcode gtk version
      `(#:configure-flags '("--with-gtk=3")
@@ -2242,43 +2234,45 @@ fallback to generic Systray support if none of those are available.")
 
 (define-public libportal
   (package
-   (name "libportal")
-   (version "0.4")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "https://github.com/flatpak/libportal/releases/download/"
-                                version "/libportal-" version ".tar.xz"))
-            (sha256
-             (base32
-              "0a7gmhyf0b58xy335jyf524g1fyc2id4r88anhvg47430w4zbm9w"))))
-   (build-system meson-build-system)
-   (arguments
-    `(#:phases
-      (modify-phases %standard-phases
-                     (add-after 'install 'move-doc
-                                (lambda* (#:key outputs #:allow-other-keys)
-                                         (let ((out (assoc-ref outputs "out"))
-                                               (doc (assoc-ref outputs "doc"))
-                                               (html "/share/gtk-doc"))
-                                           (copy-recursively (string-append out html)
-                                                             (string-append doc html))
-                                           (delete-file-recursively (string-append out html))
-                                           #t))))))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("docbook-xsl" ,docbook-xsl)
-      ("docbook-xml" ,docbook-xml)
-      ("libxml2" ,libxml2)
-      ("glib:bin" ,glib "bin")))
-   (propagated-inputs
-    `(("glib" ,glib)))
-   (outputs '("out" "doc"))
-   (home-page "https://github.com/flatpak/libportal")
-   (synopsis "Flatpak portal library")
-   (description
-    "libportal provides GIO-style async APIs for most Flatpak portals.")
-   (license license:lgpl2.1+)))
+    (name "libportal")
+    (version "0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/flatpak/libportal")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jh6wd96y4i218zbmmqw12zir8p88nm8dlsa3yx3lsqxd5c1krky"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (doc (assoc-ref outputs "doc"))
+                   (html "/share/gtk-doc"))
+               (copy-recursively (string-append out html)
+                                 (string-append doc html))
+               (delete-file-recursively (string-append out html))
+               #t))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("gtk-doc" ,gtk-doc/stable)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml)
+       ("libxml2" ,libxml2)
+       ("glib:bin" ,glib "bin")))
+    (propagated-inputs
+     (list glib))
+    (outputs '("out" "doc"))
+    (home-page "https://github.com/flatpak/libportal")
+    (synopsis "Flatpak portal library")
+    (description
+     "libportal provides GIO-style async APIs for most Flatpak portals.")
+    (license license:lgpl2.1+)))
 
 (define-public xdg-desktop-portal
   (package
@@ -2376,6 +2370,7 @@ and others.")
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
+       ("libxml2" ,libxml2)
        ("glib:bin" ,glib "bin")
        ("which" ,which)
        ("gettext" ,gettext-minimal)))
@@ -2386,7 +2381,7 @@ and others.")
        ("gnome-desktop" ,gnome-desktop)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
     (propagated-inputs
-     `(("xdg-desktop-portal" ,xdg-desktop-portal)))
+     (list xdg-desktop-portal))
     (home-page "https://github.com/flatpak/xdg-desktop-portal-gtk")
     (synopsis "GTK implementation of xdg-desktop-portal")
     (description
@@ -2415,8 +2410,7 @@ interfaces.")
        '("-Dsystemd=disabled"
          "-Dsd-bus-provider=libelogind")))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)))
+     (list cmake pkg-config))
     (inputs
      `(("elogind" ,elogind)
        ("iniparser" ,iniparser)
@@ -2448,10 +2442,9 @@ compositors.")
         (base32 "1v08dv3dfz420v51ahz7qgv3429073kmgrf8f66s4c3jlpch2pa1"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ;; For tests
-       ("python" ,python)))
+     (list pkg-config scdoc
+           ;; For tests
+           python))
     (home-page "https://gitlab.freedesktop.org/mstoeckl/waypipe")
     (synopsis "Proxy for Wayland protocol applications")
     (description
diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm
index acd527fcee..75019dbdcc 100644
--- a/gnu/packages/freeipmi.scm
+++ b/gnu/packages/freeipmi.scm
@@ -40,7 +40,7 @@
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (home-page "https://www.gnu.org/software/freeipmi/")
     (synopsis "Platform management, including sensor and power monitoring")
     (description
diff --git a/gnu/packages/fribidi.scm b/gnu/packages/fribidi.scm
index e213192aa6..1a371f2111 100644
--- a/gnu/packages/fribidi.scm
+++ b/gnu/packages/fribidi.scm
@@ -90,7 +90,7 @@ or right-to-left ordering as necessary.")
              #t)))
        #:tests? #f)) ; no tests
     (inputs
-     `(("fribidi" ,fribidi)))
+     (list fribidi))
     (home-page "https://tracker.debian.org/pkg/bidiv")
     (synopsis "BiDi viewer - command-line tool displaying logical Hebrew/Arabic")
     (description "bidiv is a simple utility for converting logical-Hebrew input
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 17ad139162..ee28d85602 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,11 +66,9 @@
                 "03b7y0h3mf4jfq5y8zw6hv9v44z3n6i8hc1iswax96y3z7sc85y5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zlib" ,zlib)
-       ("readline" ,readline)
-       ("gnutls" ,gnutls)))
+     (list zlib readline gnutls))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -132,10 +131,11 @@ reliability in mind.")
                     (let ((out (assoc-ref outputs "out")))
                       (setenv "CONFIG_SHELL" (which "sh"))
                       (setenv "SHELL" (which "sh"))
+                      (setenv "CFLAGS" "-fcommon")
                       (invoke "./configure"
                               (string-append "--prefix=" out))))))
        #:tests? #f)) ;there are no tests
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://www.ncftp.com/ncftp/")
     (synopsis "Command-line File Transfer Protocol (FTP) client")
     (description
@@ -161,9 +161,7 @@ FTP browser, as well as non-interactive commands such as @code{ncftpput} and
             "1ir761hjncr1bamaqcw9j7x57xi3s9jax3223bxwbq30a0vsw1pd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)))
+     (list automake autoconf gettext-minimal))
     (home-page "http://weex.sourceforge.net/")
     (synopsis "Non-interactive client for FTP synchronization")
     (description
@@ -194,8 +192,7 @@ as required.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("nettle" ,nettle)))
+     (list gnutls nettle))
     (home-page "https://lib.filezilla-project.org")
     (synopsis "Cross-platform C++ library used by Filezilla client")
     (description
@@ -238,15 +235,15 @@ output.
        ("pkg-config" ,pkg-config)
        ("xdg-utils" ,xdg-utils)))
     (inputs
-     `(("dbus" ,dbus)
-       ("gnutls" ,gnutls)
-       ("gtk+" ,gtk+)
-       ("libfilezilla" ,libfilezilla)
-       ("libidn" ,libidn)
-       ("nettle" ,nettle)
-       ("pugixml" ,pugixml)
-       ("sqlite" ,sqlite)
-       ("wxwidgets" ,wxwidgets)))
+     (list dbus
+           gnutls
+           gtk+
+           libfilezilla
+           libidn
+           nettle
+           pugixml
+           sqlite
+           wxwidgets))
     (home-page "https://filezilla-project.org")
     (synopsis "Full-featured graphical FTP/FTPS/SFTP client")
     (description
@@ -297,9 +294,7 @@ directory comparison and more.")
                (("/usr") (assoc-ref outputs "out")))))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libcap" ,libcap)
-       ("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)))
+     (list libcap linux-pam openssl))
     (synopsis "Small FTP server with a focus on security")
     (description
      "The Very Secure File Transfer Protocol Daemon or @command{vsftpd} is a
diff --git a/gnu/packages/fvwm.scm b/gnu/packages/fvwm.scm
index 6509fb38a5..db4cde0eb1 100644
--- a/gnu/packages/fvwm.scm
+++ b/gnu/packages/fvwm.scm
@@ -65,16 +65,16 @@
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("fribidi" ,fribidi)
-       ("libpng" ,libpng)
-       ("librsvg" ,librsvg)
-       ("libxcursor" ,libxcursor)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxpm" ,libxpm)
-       ("libxt" ,libxt)
-       ("readline" ,readline)))
+     (list fribidi
+           libpng
+           librsvg
+           libxcursor
+           libxext
+           libxft
+           libxinerama
+           libxpm
+           libxt
+           readline))
     (synopsis "Virtual window manager for X11")
     (description
      "FVWM is an extremely powerful ICCCM-compliant multiple virtual desktop
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index ed733e317f..19d5e71506 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Tomáš Čech <sleep_walker@suse.cz>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2018 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -165,9 +165,7 @@
                 "# ADD_TEST(Test_BulletInverseForward"))
              #t)))))
     (inputs
-     `(("glu" ,glu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list glu libx11 mesa))
     (home-page "https://pybullet.org/wordpress/")
     (synopsis "3D physics engine library")
     (description
@@ -189,11 +187,9 @@ is used in some video games and movies.")
        (base32 "0psb2za6ldrlak7s8pjvli98ij5yiwjx8j1ms2v7rj9yadx0xv8h"))))
    (build-system gnu-build-system)
    (inputs
-    `(("libpng" ,libpng)))
+    (list libpng))
    (native-inputs
-    `(("asciidoc" ,asciidoc)
-      ("pkg-config" ,pkg-config)
-      ("zstd" ,zstd)))
+    (list asciidoc pkg-config zstd))
    (home-page "https://github.com/Doom-Utils/deutex")
    (synopsis "WAD file composer for Doom and related games")
    (description
@@ -245,9 +241,7 @@ DeuTex has functions such as merging wads, etc.")
                            (find-files "." "\\.1"))))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list boost libpng zlib))
     (synopsis "GRF development tools")
     (description
      "The @dfn{Graphics Resource File} (GRF) development tools are a set of
@@ -312,13 +306,13 @@ PCM data.")
                         (("-Werror") ""))
                       #t)))))
     (native-inputs `(("pkgconfig" ,pkg-config)))
-    (inputs `(("bdb" ,bdb)
-              ("glib" ,glib)
-              ("guile" ,guile-3.0)
-              ("libmicrohttpd" ,libmicrohttpd)
-              ("ncurses" ,ncurses)
-              ("sdl" ,sdl)
-              ("zlib" ,zlib)))
+    (inputs (list bdb
+                  glib
+                  guile-3.0
+                  libmicrohttpd
+                  ncurses
+                  sdl
+                  zlib))
     (home-page "https://www.nongnu.org/gzochi/")
     (synopsis "Scalable middleware for multiplayer games")
     (description
@@ -347,8 +341,7 @@ provide connectivity for client applications written in any language.")
     (arguments
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)
-       ("python-ply" ,python-ply)))
+     (list python-pillow python-ply))
     (home-page "https://github.com/OpenTTD/nml")
     (synopsis "NML compiler")
     (description
@@ -370,8 +363,7 @@ files) into @file{.grf} and/or @file{.nfo} files.")
          "0s5d5qzlzfmqb10iyrqi62n36ll94d99xjaznp5ca6dz1b91qkvr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygame" ,python-pygame)
-       ("python-uniseg" ,python-uniseg)))
+     (list python-pygame python-uniseg))
     (home-page "https://python-sge.github.io/")
     (synopsis "2D game engine for Python")
     (description
@@ -396,7 +388,7 @@ possible, and it also makes the SGE easy to learn.")
          "073q0prg1nzlkga2b45vhscz374206qh4x68ccg00mxxwagn64z0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "http://python-tmx.nongnu.org")
     (synopsis "Python library for the @code{Tiled} TMX format")
     (description
@@ -414,8 +406,8 @@ levels.")
     (package
       (inherit python2-tmx)
       (propagated-inputs
-       `(("python2-pathlib" ,python2-pathlib)
-         ,@(package-propagated-inputs python2-tmx))))))
+       (modify-inputs (package-propagated-inputs python2-tmx)
+         (prepend python2-pathlib))))))
 
 (define-public python-xsge
   (package
@@ -442,9 +434,9 @@ levels.")
                      "--root=/"))))
        #:tests? #f)) ; no check target
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-sge" ,python-sge)))
+     (list python-sge))
     (home-page "https://python-sge.github.io/")
     (synopsis "Extensions for the SGE Game Engine")
     (description
@@ -504,9 +496,7 @@ support.")
        ("sfml" ,sfml)
        ("wxwidgets" ,wxwidgets-3.1)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("zip" ,zip)))
+     (list pkg-config which zip))
     (home-page "https://slade.mancubus.net")
     (synopsis "Doom game data editor")
     (description "SLADE3 is a modern editor for Doom-engine based games and
@@ -530,12 +520,9 @@ formats such as PNG.")
                 "1ifxh3sv6gz32gahgi7ba0ivcw5mfgwnrw6iycpav150w9xla43i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtdeclarative qtsvg zlib))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -665,7 +652,7 @@ experimental.")
              "-DSFML_OS_PKGCONFIG_DIR=lib/pkgconfig")
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("mesa" ,mesa)
        ("glew" ,glew)
@@ -679,10 +666,7 @@ experimental.")
        ("stb-image-write" ,stb-image-write)))
     (propagated-inputs
      ;; In Requires.private of pkg-config files.
-     `(("flac" ,flac)
-       ("freetype" ,freetype)
-       ("libvorbis" ,libvorbis)
-       ("openal" ,openal)))
+     (list flac freetype libvorbis openal))
     (home-page "https://www.sfml-dev.org")
     (synopsis "Simple and Fast Multimedia Library")
     (description
@@ -716,11 +700,9 @@ of five modules: system, window, graphics, audio and network.")
                         #t))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)))
+     (list pkg-config desktop-file-utils))
     (inputs
-     `(("sdl" ,sdl)
-       ("gtk+" ,gtk+)))
+     (list sdl gtk+))
     (synopsis "Simple sound effect generator")
     (description "Sfxr is a tool for quickly generating simple sound effects.
 Originally created for use in video game prototypes, it can generate random
@@ -783,9 +765,9 @@ garbage collection and can be extended with plugins.")
                         (("CMAKE_COMPILER_IS_GNUCC") "FALSE"))
                       #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://icculus.org/physfs")
     (synopsis "File system abstraction library")
     (description
@@ -812,19 +794,19 @@ archive on a per-file basis.")
                "0m8lvlabmcchskx4qpzkdlsm44360f3j0q3vvvj2388cfnvhv7v4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("devil" ,devil)
-       ("freetype" ,freetype)
-       ("libmodplug" ,libmodplug)
-       ("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("luajit" ,luajit)
-       ("mesa" ,mesa)
-       ("mpg123" ,mpg123)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list devil
+           freetype
+           libmodplug
+           libtheora
+           libvorbis
+           luajit
+           mesa
+           mpg123
+           openal
+           sdl2
+           zlib))
     (synopsis "2D game framework for Lua")
     (description "LÖVE is a framework for making 2D games in the Lua
 programming language.")
@@ -858,7 +840,7 @@ programming language.")
              (substitute* "CMakeLists.txt"
                (("DESTINATION .") "DESTINATION lib/love")))))))
     (inputs
-     `(("luajit" ,luajit)))
+     (list luajit))
     (synopsis "Lightweight immediate mode GUI for LÖVE games")
     (description "LÖVE is a Lua framework for making 2D games.  Nuklear
 is a minimal state immediate mode graphical user interface toolkit.  This
@@ -891,11 +873,7 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.")
                (("ADDON_LINKAGE STATIC")
                 "ADDON_LINKAGE SHARED")))))))
     (inputs
-     `(("glu" ,glu)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("mesa" ,mesa)
-       ("zlib" ,zlib)))
+     (list glu libpng libvorbis mesa zlib))
     (synopsis "Game programming library")
     (description "Allegro is a library mainly aimed at video game and
 multimedia programming.  It handles common, low-level tasks such as creating
@@ -936,7 +914,7 @@ etc.")
        ("physfs" ,physfs)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Game programming library")
     (description "Allegro is a library mainly aimed at video game and
 multimedia programming.  It handles common, low-level tasks such as creating
@@ -997,7 +975,7 @@ etc.")
                             (assoc-ref %build-inputs "freetype")
                             "/include/freetype2"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     ;; TODO: Use a patched Allegro 4 that supports window resizing.  This
     ;; patched version is bundled with Aseprite, but the patches should be
     ;; extracted and applied on top of a standalone Allegro 4 package.
@@ -1089,7 +1067,7 @@ LibreSprite is a fork of the latest GPLv2 commit of Aseprite.")
                 "0bw0papyqjg22z6irf36gs54y8236wa37b6gyn2h1spy65n76lqp"))))
     (build-system gnu-build-system)
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://qqwing.com/")
     (synopsis "Sudoku puzzle solver and generator")
     (description
@@ -1119,11 +1097,8 @@ It offers the following features:
                (base32
                 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("fontconfig" ,fontconfig)
-              ("freeglute" ,freeglut)
-              ("fribidi" ,fribidi)
-              ("glew" ,glew)))
+    (native-inputs (list pkg-config))
+    (inputs (list fontconfig freeglut fribidi glew))
     (home-page "http://quesoglc.sourceforge.net")
     (synopsis "Implementation of the OpenGL Character Renderer (GLC)")
     (description
@@ -1277,10 +1252,9 @@ to create fully featured games and multimedia programs in the python language.")
                                       "/lib -Wl,--enable-new-dtags -lSDL2"))
                #t)))))
       (inputs
-       `(("sdl-union"
-          ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+       (list (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (home-page "https://www.renpy.org/")
       (synopsis "Reimplementation of the Pygame API using SDL2")
       (description "Pygame_SDL2 reimplements the Pygame API using SDL2,
@@ -1328,15 +1302,12 @@ developed mainly for Ren'py.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "module/setup.py"
                (("/usr/include/fribidi")
-                (string-append (assoc-ref inputs "fribidi")
-                               "/include/fribidi")))
-             #t))
+                (search-input-directory inputs "include/fribidi")))))
          (add-after 'set-paths 'set-build-vars
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (setenv "RENPY_CYTHON"
-                     (string-append (assoc-ref (or native-inputs inputs)
-                                               "python2-cython")
-                                    "/bin/cython"))
+                     (search-input-file (or native-inputs inputs)
+                                        "/bin/cython"))
              (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":"))
              #t))
          (replace 'build
@@ -1368,20 +1339,18 @@ developed mainly for Ren'py.")
                (delete-file-recursively (string-append out site "/renpy/common")))
              #t)))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("sdl-union"
-        ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
-       ("xdg-utils" ,xdg-utils)))
+     (list ffmpeg
+           freetype
+           fribidi
+           glew
+           libpng
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           xdg-utils))
     (propagated-inputs
      `(("python2-future" ,python2-future)
        ("python2-pygame" ,python2-pygame-sdl2)))
     (native-inputs
-     `(("gcc" ,gcc-8) ; for const variables as initializer elements
-       ("python2-cython" ,python2-cython)))
+     (list python2-cython))
     (home-page "https://www.renpy.org/")
     (synopsis "Ren'py python module")
     (description "This package contains the shared libraries and Python modules
@@ -1580,7 +1549,7 @@ if __name__ == \"__main__\":
                                          (assoc-ref inputs "python"))
                                         "/site-packages")))
                (wrap-program (string-append out "/bin/renpy")
-                 `("PYTHONPATH" =
+                 `("GUIX_PYTHONPATH" =
                    (,@(delete-duplicates
                        (map
                         (lambda (store-path)
@@ -1599,7 +1568,7 @@ if __name__ == \"__main__\":
        ("xdg-utils" ,xdg-utils)))
     (propagated-inputs '())
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (outputs
      (list "out" "tutorial" "the-question"))
     (home-page "https://www.renpy.org/")
@@ -1654,7 +1623,7 @@ games.")
      `(("gifsicle" ,gifsicle)
        ("sdl2" ,(sdl-union (list sdl2 sdl2-image)))))
     (native-inputs
-     `(("gcc" ,gcc-10)))                  ; for std::filesystem
+     (list gcc-10))                  ; for std::filesystem
     (home-page "https://github.com/kitao/pyxel")
     (synopsis "Retro game engine for Python")
     (description "Pyxel is a game engine inspired by retro gaming consoles.
@@ -1671,6 +1640,7 @@ also comes with a built-in image and sound editor.")
               (method url-fetch)
               ;; XXX: There is no URL that contains the version. :(
               (uri "http://pulkomandy.tk/projects/GrafX2/downloads/21")
+              (file-name (string-append "grafx2-" version ".tgz"))
               (sha256
                (base32
                 "0svsy6rqmdj11b400c242i2ixihyz0hds0dgicqz6g6dcgmcl62q"))))
@@ -1687,16 +1657,16 @@ also comes with a built-in image and sound editor.")
        ;; SDL header files are referenced without the preceeding "SDL/".
        (list (string-append "CFLAGS=-I"
                             (assoc-ref %build-inputs "sdl-union")
-                            "/include/SDL")
+                            "/include/SDL"
+                            " -fcommon")
              (string-append "prefix="
                             (assoc-ref %outputs "out")))
        #:tests? #f)) ; no check target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("lua" ,lua-5.1)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-ttf)))))
+     (list libpng lua-5.1
+           (sdl-union (list sdl sdl-image sdl-ttf))))
     (synopsis "Bitmap paint program")
     (description "GrafX2 is a bitmap paint program inspired by the Amiga
 programs Deluxe Paint and Brilliance.  Specializing in 256-color drawing, it
@@ -1723,7 +1693,7 @@ painted with a mouse.")
     (arguments
      `(#:tests? #f))                    ; no test suite
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "Object Oriented Input System")
     (description
      "Cross Platform Object Oriented Input Lib System is a cross platform,
@@ -1760,16 +1730,14 @@ robust and compatible with many systems and operating systems.")
              "-DMYGUI_BUILD_DEMOS=FALSE"
              "-DMYGUI_BUILD_TOOLS=FALSE")))
     (native-inputs
-     `(("boost" ,boost)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list boost doxygen pkg-config))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("freetype" ,freetype)
-       ("graphviz" ,graphviz)
-       ("libx11" ,libx11)
-       ("ogre" ,ogre)
-       ("ois" ,ois)))
+     (list font-dejavu
+           freetype
+           graphviz
+           libx11
+           ogre
+           ois))
     (synopsis "Fast, flexible and simple GUI")
     (description
      "MyGUI is a library for creating Graphical User Interfaces (GUIs) for games
@@ -1795,10 +1763,9 @@ of use.")
                       "-DMYGUI_BUILD_DEMOS=FALSE"
                       "-DMYGUI_BUILD_TOOLS=FALSE")))))
     (inputs
-     `(("mesa" ,mesa)
-       ("glu" ,glu)
-       ,@(fold alist-delete (package-inputs mygui)
-               '("ogre"))))
+     (modify-inputs (package-inputs mygui)
+       (delete "ogre")
+       (prepend mesa glu)))
     (synopsis "Fast, flexible and simple GUI (OpenGL backend)")))
 
 (define-public openmw
@@ -1821,9 +1788,7 @@ of use.")
        #:configure-flags
        (list "-DDESIRED_QT_VERSION=5")))
     (native-inputs
-     `(("boost" ,boost)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list boost doxygen pkg-config))
     (inputs
      `(("bullet" ,bullet)
        ("ffmpeg" ,ffmpeg)
@@ -1983,7 +1948,7 @@ games.")
                            ,(string-append icons "/scalable/apps/godot.svg"))))
              #t)))))
     (outputs '("out" "headless"))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("alsa-lib" ,alsa-lib)
               ("bullet" ,bullet)
               ("freetype" ,freetype)
@@ -2037,11 +2002,10 @@ scripted in a Python-like language.")
        ;; Only tests are compiled, and they need assertions to work correctly.
        #:build-type "Debug"))
     (native-inputs
-     `(;; for testing
-       ("googletest" ,googletest)
-       ;; for documentation
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)))
+     (list ;; for testing
+           googletest
+           ;; for documentation
+           doxygen graphviz))
     (synopsis "Entity component system")
     (description "EnTT is a header-only library, containing (among other things)
 @itemize
@@ -2097,8 +2061,7 @@ scripted in a Python-like language.")
               ("libpng" ,libpng)
               ("fltk" ,fltk)
               ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("xdg-utils" ,xdg-utils)))
+    (native-inputs (list pkg-config xdg-utils))
     (synopsis "Doom map editor")
     (description "Eureka is a map editor for the classic DOOM games, and a few
 related games such as Heretic and Hexen.  It comes with a 3d preview mode and
@@ -2124,16 +2087,14 @@ a 2D editor view.")
      `(("guile-opengl" ,guile3.0-opengl)
        ("guile-sdl2" ,guile-sdl2)))
     (inputs
-     `(("freetype" ,freetype)
-       ("guile" ,guile-3.0-latest)
-       ("libvorbis" ,libvorbis)
-       ("mpg123" ,mpg123)
-       ("openal" ,openal)
-       ("readline" ,readline)))
+     (list freetype
+           guile-3.0-latest
+           libvorbis
+           mpg123
+           openal
+           readline))
     (native-inputs
-     `(("guile" ,guile-3.0-latest)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list guile-3.0-latest pkg-config texinfo))
     (home-page "https://dthompson.us/projects/chickadee.html")
     (synopsis "Game development toolkit for Guile Scheme with SDL2 and OpenGL")
     (description "Chickadee is a game development toolkit for Guile Scheme
@@ -2185,12 +2146,8 @@ that parenthetically inclined game developers need to make 2D (and eventually
 
             i*86)"))
                #t)))))
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)))
+    (inputs (list openssl zlib))
+    (native-inputs (list pkg-config autoconf automake libtool))
     (synopsis "Programming language to create games")
     (description "Bennu Game Development, also known as bennudg, is a
 programming language tailored at game development.  It is the successor of
@@ -2212,11 +2169,7 @@ Fenix.")
                  (("extern fixed fmul\\( int x, int y \\);") "")
                  (("extern fixed fdiv\\( int x, int y \\);") "")))
              (chdir "modules"))))))
-    (inputs `(("zlib" ,zlib)
-              ("libpng" ,libpng)
-              ("openssl" ,openssl)
-              ("sdl-mixer" ,sdl-mixer)
-              ("bennu-game-development" ,bennu-game-development)))
+    (inputs (list zlib libpng openssl sdl-mixer bennu-game-development))
     (synopsis "Modules for the Bennu Game Development programming language")
     (description "This package contains a collection of modules for the Bennu
 Game Development programming language, from CD handling through SDL to
@@ -2237,11 +2190,9 @@ joystick support.")))
                                        "plib-CVE-2012-4552.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mesa" ,mesa)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)))
+     (list mesa libxi libxmu))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://plib.sourceforge.net/")
     (synopsis "Suite of portable game libraries")
     (description "PLIB is a set of libraries that will permit programmers to
@@ -2282,8 +2233,8 @@ of the others")
          ("freetype" ,freetype)
          ("libogg" ,libogg)))
       (native-inputs
-       `(("which" ,which)               ; Else SDL_version.h won't be found.
-         ("pkg-config" ,pkg-config)))
+       (list which ; Else SDL_version.h won't be found.
+             pkg-config))
       (arguments
        '(#:tests? #f                    ; No tests.
          #:make-flags '("CC=gcc"
@@ -2414,7 +2365,7 @@ specific knowledge of the hardware they are targeting.")
                                       sdl-union)))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
     (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
@@ -2462,7 +2413,7 @@ double-buffering.")
                (install-file "bin/Release/FNA.dll" (string-append out "/lib"))
                #t))))))
     (native-inputs
-     `(("mono" ,mono)))
+     (list mono))
     (inputs `(("sdl2-cs-src" ,(package-source sdl2-cs))
               ("mojoshader-src" ,(package-source mojoshader-cs))
               ("faudio-src" ,(package-source faudio))
@@ -2495,7 +2446,7 @@ focuses solely on developing a fully accurate XNA4 runtime for the desktop.")
                            "-DBUILD_TESTING=ON"
                            "-DENABLE_DOUBLE_PRECISION=ON")))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/danfis/libccd")
     (synopsis "Library for collision detection between two convex shapes")
     (description "@code{libccd} is library for a collision detection
@@ -2532,9 +2483,7 @@ a.k.a. XenoCollide) as described in Game Programming Gems 7.")
                (("configure_file\\(libccd/.*") ""))
              #t)))))
     (inputs
-     `(("glu" ,glu)
-       ("libccd" ,libccd)
-       ("mesa" ,mesa)))
+     (list glu libccd mesa))
     (home-page "https://www.ode.org/")
     (synopsis "High performance library for simulating rigid body dynamics")
     (description "ODE is a high performance library for simulating
@@ -2566,9 +2515,7 @@ computer games, 3D authoring tools and simulation tools.")
        #:configure-flags '("-DBUILD_STATIC=OFF"
                            "-DBUILD_DEMOS=OFF")))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("libxmu" ,libxmu)
-       ("libxrandr" ,libxrandr)))
+     (list freeglut libxmu libxrandr))
     (home-page "https://chipmunk-physics.net/")
     (synopsis "Fast and lightweight 2D game physics library")
     (description "Chipmunk is a simple, lightweight, fast and portable 2D
@@ -2599,7 +2546,7 @@ rigid body physics library written in C.")
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON"
                            "-DBOX2D_BUILD_TESTBED=OFF")))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://box2d.org/")
     (synopsis "2D physics engine for games")
     (description "Box2D is a 2D rigid body simulation library for games.
@@ -2660,18 +2607,15 @@ physics engine is just a system for procedural animation.")
              (patch-shebang "get_version.py")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("python" ,python)
-       ("pkg-config" ,pkg-config)
-       ("stb-sprintf" ,stb-sprintf)
-       ("stb-truetype" ,stb-truetype)))
+     (list autoconf
+           automake
+           libtool
+           python
+           pkg-config
+           stb-sprintf
+           stb-truetype))
     (inputs
-     `(("lodepng" ,lodepng)
-       ("sdl2" ,sdl2)
-       ("utf8proc" ,utf8proc)
-       ("zlib" ,zlib)))
+     (list lodepng sdl2 utf8proc zlib))
     (home-page "https://github.com/libtcod/libtcod")
     (synopsis "Library specifically designed for writing roguelikes")
     (description
@@ -2756,7 +2700,7 @@ utilities frequently used in roguelikes.")
          ("uuid.h" ,util-linux "lib")
          ("zlib" ,zlib)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/Warsow/qfusion")
       (supported-systems '("i686-linux" "x86_64-linux"))
       (synopsis "Warsow's fork of qfusion, the id Tech 2 derived game engine")
@@ -2847,10 +2791,9 @@ support.")
            (add-before 'build 'fix-env
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl2-union")
-                                      "/include/SDL2:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "include/SDL2")
+                        ":" (or (getenv "CPATH") "")))))
            (add-after 'install 'really-install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 4d8e0752c5..1c3cea8828 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
-;;; Copyright © 2014, 2015, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2014, 2015, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
@@ -42,7 +42,7 @@
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019, 2020 Jesse Gibbons <jgibbons2357+guix@gmail.com>
 ;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
-;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2019 Pkill -9 <pkill9@runbox.com>
@@ -178,6 +178,7 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
@@ -271,8 +272,7 @@
                     (#f "Side-scrolling game")))))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("libxi" ,libxi)
        ("libxmu" ,libxmu)
@@ -415,14 +415,14 @@ The game includes a built-in editor so you can design and share your own maps.")
                 "18gn4sg4j5sw38ngb90sl50raliplrsgjcvy8fjwry733k0cgdjr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("freeglut" ,freeglut)
-       ("libpng" ,libpng)
-       ("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libxml2
+           sdl
+           sdl-image
+           freeglut
+           libpng
+           libjpeg-turbo))
     (home-page "http://www.armagetronad.org")
     (synopsis "Tron clone in 3D")
     (description "Armagetron Advanced is a multiplayer game in 3d that
@@ -473,13 +473,13 @@ physics settings to tweak as well.")
                               (string-append icons "/astromenace.png")))))
              #t)))))
     (inputs
-     `(("freealut" ,freealut)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)))
+     (list freealut
+           freetype
+           glu
+           libogg
+           libvorbis
+           openal
+           sdl2))
     (home-page "https://www.viewizard.com/")
     (synopsis "3D space shooter with spaceship upgrade possibilities")
     (description
@@ -544,10 +544,9 @@ regret their insolence.")
                              (string-append out "/share/man/man6"))
                #t))))))
     (native-inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)))
+     (list hicolor-icon-theme))
     (inputs
-     `(("boost" ,boost)
-       ("ncurses" ,ncurses)))
+     (list boost ncurses))
     (home-page "https://fph.altervista.org/prog/bastet.html")
     (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
     (description
@@ -574,7 +573,7 @@ canyons and wait for the long I-shaped block to clear four rows at a time.")
          "0b4pddqz6is1771qmvcj8qqlr4in2djdbkk13agvp9yhfah2v8x7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f                      ;no tests
        #:make-flags '("CC=gcc")
@@ -711,8 +710,7 @@ possible, while battling many vicious aliens.")
          "bsd-games-add-wrapper.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (inputs
      `(("curses" ,ncurses)
        ("pager" ,less)
@@ -727,8 +725,7 @@ possible, while battling many vicious aliens.")
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/bsd-games-" ,version))
                     (man (string-append out "/share/man"))
-                    (word-list (string-append (assoc-ref inputs "miscfiles")
-                                              "/share/web2"))
+                    (word-list (search-input-file inputs "/share/web2"))
                     (static-data (string-append out "/share/games/bsd-games"))
                     ;; Not a "./" because of substitute* in 'patch-install
                     ;; below.  The .// allow us not to mess with the games'
@@ -852,14 +849,14 @@ Quizzes: arithmetic and quiz.")
                          '("48" "256")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("curl" ,curl)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list c-ares
+           curl
+           glew
+           glu
+           sdl2
+           zlib))
     (home-page "https://www.bzflag.org/")
     (synopsis "3D first person tank battle game")
     (description
@@ -935,14 +932,14 @@ high a score as possible.")
        ("pkg-config" ,pkg-config)
        ("astyle" ,astyle)))
     (inputs
-     `(("freetype" ,freetype)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-ttf" ,sdl2-ttf)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list freetype
+           libogg
+           libvorbis
+           ncurses
+           sdl2
+           sdl2-image
+           sdl2-ttf
+           sdl2-mixer))
     (home-page "https://cataclysmdda.org/")
     (synopsis "Survival horror roguelike video game")
     (description
@@ -983,17 +980,16 @@ want what you have.")
                              "-DWITH_ORACLE=1"
                              "-DTEST=1")))
       (native-inputs
-       `(("googletest" ,googletest)
-         ("pkg-config" ,pkg-config)))
+       (list googletest pkg-config))
       (inputs
-       `(("protobuf" ,protobuf)
-         ("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)
-         ("qttools" ,qttools)
-         ("qtwebsockets" ,qtwebsockets)
-         ("xz" ,xz)
-         ("zlib" ,zlib)))
+       (list protobuf
+             qtbase-5
+             qtmultimedia
+             qtsvg
+             qttools
+             qtwebsockets
+             xz
+             zlib))
       (home-page "https://cockatrice.github.io")
       (synopsis "Tabletop card game simulator")
       (description "Cockatrice is a program for playing tabletop card games
@@ -1039,14 +1035,14 @@ allows users to brew while offline.")
        #:tests? #f)) ; TODO need busted package to run tests
     ;; Omit Lua-Socket dependency to disable automatic updates.
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("fluid-3" ,fluid-3)
-       ("freetype" ,freetype)
-       ("lua" ,lua)
-       ("lua-filesystem" ,lua-filesystem)
-       ("lua-lpeg" ,lua-lpeg)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list ffmpeg
+           fluid-3
+           freetype
+           lua
+           lua-filesystem
+           lua-lpeg
+           sdl2
+           sdl2-mixer))
     (home-page "https://corsixth.com")
     (synopsis "Implementation of the @i{Theme Hospital} game engine")
     (description
@@ -1088,7 +1084,7 @@ more.  This package does @emph{not} provide the game assets.")
                                     "/bin/cowsay")
                      "We're done!"))))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page (string-append "https://web.archive.org/web/20071026043648/"
                               "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
     (synopsis "Speaking cow text filter")
@@ -1154,7 +1150,7 @@ characters and lines resulting in a rainbow effect.")
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; no tests provided
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("sdl" ,(sdl-union (list sdl2
                                        sdl2-image
                                        sdl2-mixer)))
@@ -1236,10 +1232,9 @@ should be placed in @file{~/.local/share/falltergeist}.")
              ;; Set correct environment for SDL.
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl")
-                                      "/include/SDL:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "include/SDL")
+                        ":" (or (getenv "CPATH") "")))))
            (add-before 'build 'fix-settings-directory
              ;; Hide foobillardplus settings directory in $HOME.
              (lambda _
@@ -1265,9 +1260,7 @@ should be placed in @file{~/.local/share/falltergeist}.")
                             "foobillardplus"))
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
        `(("font-dejavu" ,font-dejavu)
          ("freetype" ,freetype)
@@ -1332,10 +1325,7 @@ The game features:
                   (string-append "IWAD=" wad-dir "/freedoom2.wad")))
                #t))))))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("deutex" ,deutex)
-       ("python" ,python)
-       ("python-pillow" ,python-pillow)))
+     (list asciidoc deutex python python-pillow))
     (home-page "https://freedoom.github.io/")
     (synopsis "Free content game based on the Doom engine")
     (native-search-paths
@@ -1379,7 +1369,7 @@ effects and music to make a completely free game.")
        ;;   SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glu" ,glu)
        ("libjpeg" ,libjpeg-turbo)
@@ -1465,7 +1455,7 @@ real-time combat.")
                          '("Help" "Patterns" "Rules" "Scripts")))
              #t)))))
     (native-inputs
-     `(("lua" ,lua)))
+     (list lua))
     (inputs
      `(("glu" ,glu)
        ("mesa" ,mesa)
@@ -1526,10 +1516,9 @@ automata.  The following features are available:
                     (string-append out "/etc/modules-load.d"))
                    (("/usr/bin")
                     (string-append out "/bin")))))))))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (native-inputs (list pkg-config))
       (inputs
-       `(("eudev" ,eudev)
-         ("libevdev" ,libevdev)))
+       (list eudev libevdev))
       (home-page "https://github.com/DanielOgorchock/joycond")
       (synopsis "Joy-Con controller daemon")
       (description "This package provides a userspace daemon for the Nintendo
@@ -1558,9 +1547,7 @@ Joy-Con controllers.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list libpng sdl2 sdl2-mixer))
     (home-page "https://github.com/bvschaik/julius")
     (synopsis "Re-implementation of Caesar III game engine")
     (description
@@ -1626,7 +1613,7 @@ game Caesar III.  Gameplay enhancements include:
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("curl" ,curl)
        ("libarchive" ,libarchive)
@@ -1675,8 +1662,7 @@ shadow mimic them to reach blocks you couldn't reach alone.")
              ;; Look for xdg-open in the store.
              (substitute* "src/core/web.c"
                (("/usr(/bin/xdg-open)" _ bin)
-                (string-append (assoc-ref inputs "xdg-utils") bin)))
-             #t))
+                (search-input-file inputs bin)))))
          (add-after 'unpack 'unbundle-fonts
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Replace bundled Roboto fonts with links to the store.
@@ -1691,10 +1677,7 @@ shadow mimic them to reach blocks you couldn't reach alone.")
                   '("Roboto-Black.ttf" "Roboto-Bold.ttf" "Roboto-Medium.ttf")))
                #t))))))
     (inputs
-     `(("allegro" ,allegro)
-       ("font-google-roboto" ,font-google-roboto)
-       ("surgescript" ,surgescript)
-       ("xdg-utils" ,xdg-utils)))
+     (list allegro font-google-roboto surgescript xdg-utils))
     (home-page "https://opensurge2d.org")
     (synopsis "2D retro side-scrolling game")
     (description "@code{Open Surge} is a 2D retro side-scrolling platformer
@@ -1740,7 +1723,7 @@ built-in level editor.")
        ("fontconfig" ,fontconfig)
        ("curl" ,curl)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.knightsgame.org.uk/")
     (synopsis "Multiplayer dungeon game involving knights and quests")
     (description "Knights is a multiplayer game involving several knights who
@@ -1770,7 +1753,8 @@ destroying an ancient book using a special wand.")
                 "0s5fg4z5in1h39fcr69j1qc5ynmg7a8mfprk3mc3c0csq3snfwz2"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -1780,11 +1764,7 @@ destroying an ancient book using a special wand.")
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("libgee" ,libgee)
-       ("libgnome-games-support" ,libgnome-games-support)))
+     (list gtk+ clutter clutter-gtk libgee libgnome-games-support))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
@@ -1824,8 +1804,7 @@ in one tile.")
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)))
+     (list gtk+ librsvg))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
@@ -1853,18 +1832,17 @@ such as chess or stockfish.")
         (base32
          "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
     (build-system gnu-build-system)
-    (inputs `(;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
-              ;; 'pango_coverage_get_type'.  Try removing this for versions > 1.06.002.
-              ("pango" ,pango-1.42)
-
-              ("glib" ,glib)
-              ("readline" ,readline)
-              ("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("gtkglext" ,gtkglext)
-              ("sqlite" ,sqlite)
-              ("libcanberra" ,libcanberra)))
+    (inputs (list ;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
+                  ;; 'pango_coverage_get_type'.  Try removing this for versions > 1.06.002.
+                  pango-1.42
+                  glib
+                  readline
+                  gtk+-2
+                  mesa
+                  glu
+                  gtkglext
+                  sqlite
+                  libcanberra))
     (native-inputs `(("python-2" ,python-2)
                      ("pkg-config" ,pkg-config)))
     (arguments
@@ -1926,12 +1904,12 @@ also features an attractive, 3D representation of the playing board.")
                         (("gtk-update-icon-cache")
                          "true"))
                       #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libx11" ,libx11)
-              ("guile" ,guile-2.0)
-              ("gtkglext" ,gtkglext)))
+    (inputs (list gtk+-2
+                  mesa
+                  glu
+                  libx11
+                  guile-2.0
+                  gtkglext))
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("pkg-config" ,pkg-config)))
     (home-page "https://www.gnu.org/software/gnubik/")
@@ -1982,12 +1960,11 @@ Chess).  It is similar to standard chess but this variant is far more complicate
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
-     `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
+     (list (sdl-union (list sdl sdl-mixer))))
     (home-page "http://lgames.sourceforge.net/LTris/")
     (synopsis "Tetris clone based on the SDL library")
     (description
@@ -2016,11 +1993,9 @@ watch your CPU playing while enjoying a cup of tea!")
         (sha256
           (base32 "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng"))))
     (native-inputs
-      `(("bison" ,bison)
-        ("flex" ,flex)))
+      (list bison flex))
     (inputs
-      `(("ncurses" ,ncurses)
-        ("less" ,less)))
+      (list ncurses less))
     (build-system gnu-build-system)
     (arguments
       '(#:make-flags
@@ -2156,9 +2131,7 @@ role, and your gender.")
                 (string-append assignment "$(docdir)\n")))
              #t)))))
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)))
+     (list libpng mesa sdl))
     (home-page "http://pipewalker.sourceforge.net/")
     (synopsis "Logical tile puzzle")
     (description
@@ -2196,19 +2169,18 @@ Every puzzle has a complete solution, although there may be more than one.")
         (add-after 'set-paths 'set-sdl'paths
           (lambda* (#:key inputs #:allow-other-keys)
             (setenv "CPATH"
-                    (string-append (assoc-ref inputs "sdl-union")
-                                   "/include/SDL:"
-                                   (or (getenv "CPATH") "")))
-            #t)))))
+                    (string-append
+                     (search-input-directory inputs "/include/SDL")
+                     ":" (or (getenv "CPATH") ""))))))))
    (inputs
-    `(("fluidsynth" ,fluidsynth)
-      ("glu" ,glu)
-      ("libmad" ,libmad)
-      ("libpng" ,libpng)
-      ("libvorbis" ,libvorbis)
-      ("pcre" ,pcre)
-      ("portmidi" ,portmidi)
-      ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
+    (list fluidsynth
+          glu
+          libmad
+          libpng
+          libvorbis
+          pcre
+          portmidi
+          (sdl-union (list sdl sdl-image sdl-mixer sdl-net))))
    (home-page "http://prboom-plus.sourceforge.net/")
    (synopsis "Version of the classic 3D shoot'em'up game Doom")
    (description
@@ -2256,11 +2228,9 @@ Every puzzle has a complete solution, although there may be more than one.")
                  (copy-recursively "data" data)
                  #t))))))
       (native-inputs
-       `(("unzip" ,unzip)))
+       (list unzip))
       (inputs
-       `(("python-sge" ,python-sge)
-         ("python-six" ,python-six)
-         ("python-xsge" ,python-xsge)))
+       (list python-sge python-six python-xsge))
       (home-page "https://retux-game.github.io/")
       (synopsis "Action platformer game")
       (description
@@ -2360,18 +2330,17 @@ utilizing the art assets from the @code{SuperTux} project.")
                  (lambda (p)
                    (format p "\
 #!~a
-export PYTHONPATH=~a/LIB:~a
+export GUIX_PYTHONPATH=~a/LIB:~a
 exec -a \"~a\" ~a \"$@\"\n"
-                           (which "bash") data (getenv "PYTHONPATH")
+                           (which "bash") data (getenv "GUIX_PYTHONPATH")
                            (which "python3")
                            (string-append lib "/main.py"))))
                (chmod roguebox-adventures #o555))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("python-pygame" ,python-pygame)
-       ("python-tmx" ,python-tmx)))
+     (list python-pygame python-tmx))
     (home-page "https://rogueboxadventures.tuxfamily.org")
     (synopsis "A classical roguelike/sandbox game")
     (description
@@ -2436,9 +2405,9 @@ can be explored and changed freely.")
                    (lambda (p)
                      (format p
                              "#!~a~@
-                              export PYTHONPATH=~a:~a~@
+                              export GUIX_PYTHONPATH=~a:~a~@
                               exec -a \"~a\" ~a \"$@\"~%"
-                             (which "bash") data (getenv "PYTHONPATH")
+                             (which "bash") data (getenv "GUIX_PYTHONPATH")
                              (which "python3")
                              (string-append data "/run_game.py"))))
                  (chmod executable #o555))
@@ -2469,8 +2438,8 @@ can be explored and changed freely.")
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (data (string-append out "/share/seahorse-adventures"))
-                    (vera (string-append (assoc-ref inputs "font-bitstream-vera")
-                                         "/share/fonts/truetype/Vera.ttf")))
+                    (vera (search-input-file
+                           inputs "/share/fonts/truetype/Vera.ttf")))
                (let ((themes-dir (string-append data "/data/themes/")))
                  (for-each
                   (lambda (theme)
@@ -2483,8 +2452,7 @@ can be explored and changed freely.")
                  (("f_scale = 0.35") "f_scale = 0.47")))
              #t)))))
     (inputs
-     `(("font-bitstream-vera" ,font-bitstream-vera)
-       ("python-pygame" ,python-pygame)))
+     (list font-bitstream-vera python-pygame))
     (home-page "http://www.imitationpickles.org/barbie/")
     (synopsis "Help Barbie the seahorse float on bubbles to the moon")
     (description
@@ -2534,8 +2502,7 @@ and defeat them with your bubbles!")
              (setenv "XDG_RUNTIME_DIR" (getcwd))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("glm" ,glm)
        ("libmodplug" ,libmodplug)
@@ -2574,8 +2541,8 @@ in mind.")
     (arguments
      `(#:tests? #false))                ; no test suite
     (inputs
-     `(("solarus" ,solarus)
-       ,@(package-inputs solarus)))
+     (modify-inputs (package-inputs solarus)
+       (prepend solarus)))
     (synopsis "Create and modify quests for the Solarus engine")
     (description
      "Solarus Quest Editor is a graphical user interface to create and
@@ -2651,7 +2618,7 @@ runnable=true
     (native-inputs
      `(("godot-headless" ,godot "headless")))
     (inputs
-     `(("godot" ,godot)))
+     (list godot))
     (home-page "https://notapixel.itch.io/superstarfighter")
     (synopsis "Fast-paced local multiplayer arcade game")
     (description "In SuperStarfighter, up to four local players compete in a
@@ -2835,7 +2802,7 @@ equipped with spoken co-driver notes and co-driver icons.")
                                       (string-append out "/share/man/man6"))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
@@ -3006,8 +2973,7 @@ properly.")
         "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxaw" ,libxaw)
-       ("libxt" ,libxt)))
+     (list libxaw libxt))
     (home-page "https://www.gnu.org/software/gnushogi/")
     (synopsis "User interface for gnushogi")
     (description  "A graphical user interface for the package @code{gnushogi}.")
@@ -3041,9 +3007,9 @@ properly.")
                   (add-after 'set-paths 'set-sdl-paths
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "CPATH"
-                              (string-append (assoc-ref inputs "sdl-union")
-                                             "/include/SDL:"
-                                             (or (getenv "CPATH") "")))))
+                              (string-append
+                               (search-input-directory inputs "include/SDL2")
+                               ":" (or (getenv "CPATH") "")))))
                   (add-after 'patch-source-shebangs 'patch-makefile
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Replace /usr with package output directory.
@@ -3059,8 +3025,8 @@ properly.")
                   ;; No configure script.
                   (delete 'configure))
        #:tests? #f)) ;; No check target.
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
+    (native-inputs (list pkg-config))
+    (inputs (list (sdl-union (list sdl2 sdl2-image sdl2-mixer))))
     (home-page "https://github.com/nevat/abbayedesmorts-gpl")
     (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
     (description "L'Abbaye des Morts is a 2D platform game set in 13th century
@@ -3105,9 +3071,8 @@ that beneath its ruins lay buried an ancient evil.")
      `(#:tests? #f                      ; no check target
        #:configure-flags (list (string-append "--bindir=" %output "/bin"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
-    (inputs `(("ncurses" ,ncurses)))
+     (list autoconf automake))
+    (inputs (list ncurses))
     (home-page "https://rephial.org/")
     (synopsis "Dungeon exploration roguelike")
     (description "Angband is a Classic dungeon exploration roguelike.  Explore
@@ -3141,15 +3106,14 @@ fight Morgoth, the Lord of Darkness.")
               "#include <iostream>\n#include <functional>"))
            #t))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scons-python2" ,scons-python2)))
-    (inputs `(("sdl" ,sdl)
-              ("sdl-image" ,sdl-image)
-              ("sdl-mixer" ,sdl-mixer)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libpng" ,libpng)
-              ("boost" ,boost)))
+    (native-inputs (list pkg-config scons-python2))
+    (inputs (list sdl
+                  sdl-image
+                  sdl-mixer
+                  mesa
+                  glu
+                  libpng
+                  boost))
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" %output))
        #:tests? #f                      ; no check target
@@ -3208,24 +3172,21 @@ a C library, so they can easily be integrated into other programs.")
              "-Dr_gles30=true"
              "-Dshader_transpiler=true")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-docutils" ,python-docutils)
-       ("python-pygments" ,python-pygments)))
-    (inputs
-     `(("cglm" ,cglm)
-       ("freetype" ,freetype)
-       ("libpng" ,libpng)
-       ("libwebp" ,libwebp)
-       ("libzip" ,libzip)
-       ("mesa" ,mesa)
-       ("openssl" ,openssl)
-       ("opusfile" ,opusfile)
-       ("sdl2" ,sdl2)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("shaderc" ,shaderc)
-       ("spirv-cross" ,spirv-cross)
-       ("zlib" ,zlib)))
+     (list pkg-config python python-docutils python-pygments))
+    (inputs
+     (list cglm
+           freetype
+           libpng
+           libwebp
+           libzip
+           mesa
+           openssl
+           opusfile
+           sdl2
+           sdl2-mixer
+           shaderc
+           spirv-cross
+           zlib))
     (home-page "https://taisei-project.org/")
     (synopsis "Shoot'em up fangame and libre clone of Touhou Project")
     (description
@@ -3257,8 +3218,7 @@ is very small), and shoot at the adversaries that keep appear on the screen.")
          "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3270,7 +3230,7 @@ is very small), and shoot at the adversaries that keep appear on the screen.")
                (setenv "CONFIG_SHELL" (which "bash"))
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://www.asty.org/cmatrix")
     (synopsis "Simulate the display from \"The Matrix\"")
     (description "CMatrix simulates the display from \"The Matrix\" and is
@@ -3410,10 +3370,9 @@ To that extent, it also includes a front-end for managing all of your D-Mods.")
                 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("wxwidgets" ,wxwidgets)))
+     (list bzip2 wxwidgets))
     (properties '((ftp-directory . "/freedink")
                   (upstream-name . "dfarc")))
     (home-page "https://www.gnu.org/software/freedink/")
@@ -3464,14 +3423,16 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
          "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          ;; Fixes https://issues.guix.gnu.org/47195.
          (add-after 'unpack 'patch-aplay-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "xboard.conf"
                (("aplay -q")
-                (string-append (assoc-ref inputs "alsa-utils") "/bin/aplay -q")))))
+                (string-append (search-input-file inputs "/bin/aplay")
+                               " -q")))))
          ;; Fixes https://issues.guix.gnu.org/45236.
          (add-after 'unpack 'patch-default-engine
            (lambda* (#:key inputs #:allow-other-keys)
@@ -3481,13 +3442,9 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
                                (assoc-ref inputs "chess")
                                "/bin/gnuchessx"))))))))
     (inputs
-     `(("alsa-utils" ,alsa-utils)
-       ("chess" ,chess)
-       ("gtk+" ,gtk+-2)
-       ("librsvg" ,librsvg)))
+     (list alsa-utils chess gtk+-2 librsvg))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)))
+     (list texinfo pkg-config))
     (home-page "https://www.gnu.org/software/xboard/")
     (synopsis "Graphical user interface for chess programs")
     (description "GNU XBoard is a graphical board for all varieties of chess,
@@ -3521,8 +3478,7 @@ Portable Game Notation.")
                             (find-files "." "configure$|\\.c$"))
                   #t))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
-              ("perl" ,perl)))
+    (inputs (list ncurses perl))
     (home-page "https://www.gnu.org/software/gtypist/")
     (synopsis "Typing tutor")
     (description
@@ -3571,6 +3527,10 @@ are primarily in English, however some in other languages are provided.")
              ;; The actual source is buried a few directories deep.
              (chdir "source/Irrlicht/")
              #t))
+         (add-after 'chdir-to-source 'remove-<sys/sysctl.h>
+           (lambda _
+             (substitute* "COSOperator.cpp"
+               (("#include <sys/sysctl.h>") ""))))
          (add-after 'chdir-to-source 'fix-build-env
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -3641,10 +3601,7 @@ for common mesh file formats, and collision detection.")
                                 "/share/games/marsshooter/\";")))
               #t)))))
       (inputs
-       `(("mesa" ,mesa)
-         ("fribidi" ,fribidi)
-         ("taglib" ,taglib)
-         ("sfml" ,sfml)))
+       (list mesa fribidi taglib sfml))
       (home-page "http://mars-game.sourceforge.net/")
       (synopsis "2D space shooter")
       (description
@@ -3747,9 +3704,7 @@ reference interpreter, using the Glk API.")
                 "0wxs9vz5x9y8chghd8vp7vfk089lfb0qnzggi17zrqkrngs5zgi9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("mesa" ,mesa)))
+     (list sdl2 sdl2-image mesa))
     (arguments
      '(#:tests? #f))                    ; No included tests
     (home-page "https://fifengine.github.io/fifechan/")
@@ -3776,9 +3731,12 @@ Widgets, and allows users to create more.")
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f            ; TODO The test running fails to run some tests.
-       #:modules ((srfi srfi-1)
-                  (guix build cmake-build-system)
-                  (guix build utils))
+       #:imported-modules ,(cons '(guix build python-build-system)
+                                 %cmake-build-system-modules)
+       #:modules ((guix build cmake-build-system)
+                  ((guix build python-build-system) #:select (guix-pythonpath))
+                  (guix build utils)
+                  (srfi srfi-1))
        #:configure-flags
        (list
         (string-append "-DOPENALSOFT_INCLUDE_DIR="
@@ -3805,49 +3763,34 @@ Widgets, and allows users to create more.")
          (delete 'check)
          (add-after 'install 'check
            (lambda* (#:key inputs outputs tests? #:allow-other-keys)
-             (define python-version
-               (let* ((version     (last (string-split
-                                          (assoc-ref inputs "python")
-                                          #\-)))
-                      (components  (string-split version #\.))
-                      (major+minor (take components 2)))
-                 (string-join major+minor ".")))
-
              (when tests?
-               ;; Set PYTHONPATH so that python finds the installed modules.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH") ":"
-                                      (assoc-ref outputs "out")
-                                      "/lib/python"
-                                      python-version
-                                      "/site-packages"))
+               (add-installed-pythonpath inputs outputs)
                ;; The tests require an X server.
                (system "Xvfb :1 &")
                (setenv "DISPLAY" ":1")
                (setenv "XDG_RUNTIME_DIR" "/tmp")
                ;; Run tests
                (chdir ,(string-append "../" name "-" version))
-               (invoke "python3" "run_tests.py" "-a"))
-             #t)))))
-    (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-ttf" ,sdl2-ttf)
-       ("tinyxml" ,tinyxml)
-       ("openal" ,openal)
-       ("libogg" ,libogg)
-       ("glew" ,glew)
-       ("libvorbis" ,libvorbis)
-       ("boost" ,boost)
-       ("fifechan" ,fifechan)
-       ("swig" ,swig)
-       ("python" ,python)))
+               (invoke "python3" "run_tests.py" "-a")))))))
+    (inputs
+     (list sdl2
+           sdl2-image
+           sdl2-ttf
+           tinyxml
+           openal
+           libogg
+           glew
+           libvorbis
+           boost
+           fifechan
+           swig
+           python))
     (native-inputs
      `(("python" ,python)
        ("swig" ,swig)
        ("xvfb" ,xorg-server)))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://www.fifengine.net/")
     (synopsis "FIFE is a multi-platform isometric game engine written in C++")
     (description
@@ -3874,7 +3817,7 @@ games using Python as well as C++.")
              (ncurses (assoc-ref %build-inputs "ncurses")))
          (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("freetype" ,freetype)
        ("libjpeg" ,libjpeg-turbo)
@@ -3903,7 +3846,10 @@ either by Infocom or created using the Inform compiler.")
               (base32
                "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
+    (inputs
+     (list readline))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (synopsis "Play the game of Go")
     (description
      "GNU Go is a program that plays the game of Go, in which players
@@ -3930,10 +3876,9 @@ Protocol).")
                 "0hc3qd9hv3h9qm53yxgc7iy1v1wyajwxyvil4vqvzf9ascz9dnlj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("sfml" ,sfml)))
+     (list glu sfml))
     (synopsis "High-speed arctic racing game based on Tux Racer")
     ;; Snarfed straight from Debian.
     (description "Extreme Tux Racer, or etracer as it is called for short, is
@@ -4007,7 +3952,7 @@ This game is based on the GPL version of the famous game TuxRacer.")
        ("libjpeg" ,libjpeg-turbo)
        ("openssl" ,openssl)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://supertuxkart.net/Main_Page")
     (synopsis "3D kart racing game")
     (description "SuperTuxKart is a 3D kart racing game, with a focus on
@@ -4076,14 +4021,13 @@ also available.")
        ("python-pillow" ,python-pillow)
        ("python-pyyaml" ,python-pyyaml)))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distro" ,python-distro)
-
-       ;; Required for tests
-       ("python-greenlet" ,python-greenlet)
-       ("python-polib" ,python-polib)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list intltool
+           python-distro
+           ;; Required for tests
+           python-greenlet
+           python-polib
+           python-pytest
+           python-pytest-mock))
     (home-page "https://unknown-horizons.org/")
     (synopsis "Isometric realtime strategy, economy and city building simulation")
     (description
@@ -4135,11 +4079,7 @@ trade and diplomacy.")
                            Categories=Game;ArcadeGame~%"
                            out)))))))))
     (inputs
-     `(("glu" ,glu)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list glu mesa sdl sdl-image sdl-mixer))
     (home-page "http://gnujump.es.gnu.org/")
     (synopsis
      "Game of jumping to the next floor, trying not to fall")
@@ -4170,13 +4110,13 @@ falling, themeable graphics and sounds, and replays.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("boost" ,boost)
-       ("dbus" ,dbus)
-       ("fribidi" ,fribidi)
-       ("libvorbis" ,libvorbis)
-       ("openssl" ,openssl)
-       ("pango" ,pango)
-       ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+     (list boost
+           dbus
+           fribidi
+           libvorbis
+           openssl
+           pango
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))
     (home-page "https://www.wesnoth.org/")
     (synopsis "Turn-based strategy game")
     (description
@@ -4195,10 +4135,7 @@ next campaign.")
     (inherit wesnoth)
     (name "wesnoth-server")
     (inputs
-     `(("boost" ,boost)
-       ("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("sdl2" ,sdl2)))
+     (list boost icu4c openssl sdl2))
     (arguments
      `(#:configure-flags '("-DENABLE_GAME=OFF")
        ,@(package-arguments wesnoth)))
@@ -4219,13 +4156,12 @@ Battle for Wesnoth}.")))
                 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
-       ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
-       ("gtk+" ,gtk+)))
+     (list gstreamer
+           gst-plugins-base ; playbin plugin
+           gst-plugins-good ; for wav playback
+           gtk+))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -4271,13 +4207,10 @@ on the screen and keyboard to display letters.")
                             (assoc-ref %build-inputs "sdl-union")
                             "/include/SDL"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("curl" ,curl)
-       ("libxml2" ,libxml2)
-       ("mesa" ,mesa)
-       ("sdl-union" ,(sdl-union))))
+     (list glu curl libxml2 mesa
+           (sdl-union)))
     (home-page "https://manaplus.org")
     (synopsis "Client for 'The Mana World' and similar games")
     (description
@@ -4407,8 +4340,8 @@ OpenGFX provides you with...
     (arguments
      `(#:make-flags
        (list (string-append "DIR_NAME=opensfx")
-             (string-append "TAR=" (assoc-ref %build-inputs "tar")
-                            "/bin/tar"))
+             (string-append "TAR="
+                            (search-input-file %build-inputs "/bin/tar")))
        ;; The check phase only verifies md5sums, see openttd-opengfx.
        #:tests? #f
        #:phases
@@ -4459,8 +4392,8 @@ the original Transport Tycoon Deluxe.")
     (arguments
      `(#:make-flags
        (list (string-append "DIR_NAME=openmsx")
-             (string-append "TAR=" (assoc-ref %build-inputs "tar")
-                            "/bin/tar"))
+             (string-append "TAR="
+                            (search-input-file %build-inputs "/bin/tar")))
        ;; The check phase only verifies md5sums, see openttd-opengfx.
        #:tests? #f
        #:phases
@@ -4497,8 +4430,8 @@ Transport Tycoon Deluxe.")
                                   (assoc-ref outputs "out")))
               (list "opengfx" "openmsx" "opensfx")))))))
     (inputs
-     `(("timidity++" ,timidity++)
-       ,@(package-inputs openttd-engine)))
+     (modify-inputs (package-inputs openttd-engine)
+       (prepend timidity++)))
     (native-inputs
      `(("opengfx" ,openttd-opengfx)
        ("openmsx" ,openttd-openmsx)
@@ -4533,7 +4466,7 @@ Transport Tycoon Deluxe.")
                (openrct2-title-sequences (string-append out
                                          "/share/openrct2/title-sequences"))
                (source (assoc-ref %build-inputs "source"))
-               (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+               (unzip (search-input-file %build-inputs "/bin/unzip")))
           (copy-file source (string-append ,name "-" ,version ".zip"))
           (invoke unzip (string-append ,name "-" ,version ".zip"))
           (delete-file (string-append ,name "-" ,version ".zip"))
@@ -4573,7 +4506,7 @@ Transport Tycoon Deluxe.")
                (openrct2-objects (string-append out
                                          "/share/openrct2/objects"))
                (source (assoc-ref %build-inputs "source"))
-               (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+               (unzip (search-input-file %build-inputs "/bin/unzip")))
           (copy-file source (string-append ,name "-" ,version ".zip"))
           (invoke unzip (string-append ,name "-" ,version ".zip"))
           (delete-file (string-append ,name "-" ,version ".zip"))
@@ -4644,7 +4577,7 @@ Transport Tycoon Deluxe.")
               ("speexdsp" ,speexdsp)
               ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/OpenRCT2/OpenRCT2")
     (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
     (description "OpenRCT2 is a free software re-implementation of
@@ -4673,17 +4606,14 @@ images, etc.)")
              (patches (search-patches "pinball-system-ltdl.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (inputs
-     `(("glu" ,glu)
-       ("libltdl" ,libltdl)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("sdl-image" ,sdl-image)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list glu
+           libltdl
+           mesa
+           sdl
+           sdl-image
+           sdl-mixer))
     (arguments
      '(#:configure-flags
        ;; Configure tries to use pkg-config, but falls short, so:
@@ -4730,14 +4660,8 @@ are only two levels to play with, but they are very addictive.")
                (("\"beep\"")
                 (string-append "\"" (assoc-ref inputs "beep") "/bin/beep\"")))
              #t)))))
-    (inputs `(("avahi" ,avahi)
-              ("beep" ,beep)
-              ("gtk+" ,gtk+)
-              ("librsvg" ,librsvg)))
-    (native-inputs `(("intltool" ,intltool)
-                     ("itstool" ,itstool)
-                     ("libxml2" ,libxml2)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list avahi beep gtk+ librsvg))
+    (native-inputs (list intltool itstool libxml2 pkg-config))
     (synopsis "Board game inspired by The Settlers of Catan")
     (description "Pioneers is an emulation of the board game The Settlers of
 Catan.  It can be played on a local network, on the internet, and with AI
@@ -4763,7 +4687,7 @@ players.")
        ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
        ("zlib" ,zlib)))
     (native-inputs
-     `(("font-dejavu" ,font-dejavu)))
+     (list font-dejavu))
     (arguments
      `(#:tests? #f ; no check target
        #:phases
@@ -4771,8 +4695,8 @@ players.")
           (replace 'configure
           (lambda* (#:key outputs inputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out"))
-                  (dejavu (string-append (assoc-ref inputs "font-dejavu")
-                                         "/share/fonts/truetype/DejaVuSans.ttf")))
+                  (dejavu (search-input-file
+                           inputs "/share/fonts/truetype/DejaVuSans.ttf")))
               (substitute* "Makefile"
                 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
               ;; The patch above registers a free font for use by the binary,
@@ -4806,7 +4730,7 @@ is attributed to Albert Einstein.")
                (base32
                 "1wkl6j91pp40aps2hhnsv0bndgq49smfffws4hqcn7847bpnwwm6"))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (build-system gnu-build-system)
     (home-page "https://www.hoopajoo.net/projects/powwow.html")
     (synopsis "MUD and telnet client")
@@ -4864,10 +4788,9 @@ http://lavachat.symlynx.com/unix/")
            (add-after 'set-paths 'set-sdl-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "sdl-union")
-                                      "/include/SDL2:"
-                                      (or (getenv "CPATH") "")))
-               #t))
+                       (string-append
+                        (search-input-directory inputs "/include/SDL2")
+                        ":" (or (getenv "CPATH") "")))))
            (add-after 'install 'copy-data
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -4912,14 +4835,10 @@ exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
                    (chmod "redeclipse_server_linux" #o555)))
                #t)))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("curl" ,curl)
-         ("freetype" ,freetype)
-         ("glu" ,glu)
-         ("sdl-union" ,(sdl-union (list sdl2
-                                        sdl2-image
-                                        sdl2-mixer)))))
+       (list curl freetype glu
+             (sdl-union (list sdl2 sdl2-image sdl2-mixer))))
       (home-page "https://redeclipse.net/")
       (synopsis "Arena shooter derived from the Cube 2 engine")
       (description
@@ -5020,15 +4939,10 @@ capture it and get out alive?")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imagemagick" ,imagemagick)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux)
-       ("sox" ,sox)))
+     (list imagemagick pkg-config util-linux sox))
     (inputs
-     `(("boost" ,boost)
-       ("libconfig" ,libconfig)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
-       ("zlib" ,zlib)))
+     (list boost libconfig
+           (sdl-union (list sdl sdl-image sdl-mixer)) zlib))
     (home-page "https://gitlab.com/lierolibre/lierolibre")
     (synopsis "Old-school earthworm action game")
     (description
@@ -5105,7 +5019,7 @@ fullscreen, use F5 or Alt+Enter.")
            (lambda _
              (invoke "./configure" "--prefix" (assoc-ref %outputs "out")))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
      `(("python" ,python-wrapper)
        ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf sdl-net)))))
@@ -5319,13 +5233,9 @@ of war.  Widelands also offers an Artificial Intelligence to challenge you.")
                 "0ips79j3sdy8wa64jqka0skbbqkzqiln9bbiiilh4z717q7vz9r5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("pango" ,pango)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2-ttf" ,sdl2-ttf)))
+     (list pango sdl2 sdl2-image sdl2-mixer sdl2-ttf))
     (home-page "https://pr-starfighter.github.io/")
     (synopsis "2D scrolling shooter game")
     (description
@@ -5354,11 +5264,9 @@ in strikes against the evil corporation.")
                (base32
                 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("gettext" ,gettext-minimal)
-              ("glu" ,glu)
-              ("quesoglc" ,quesoglc)
-              ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
+    (native-inputs (list pkg-config))
+    (inputs (list gettext-minimal glu quesoglc
+                  (sdl-union (list sdl sdl-image sdl-mixer))))
     (home-page "http://chromium-bsu.sourceforge.net/")
     (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
     (description
@@ -5396,8 +5304,7 @@ safety of the Chromium vessel.")
        (patches (search-patches "tuxpaint-stamps-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list gperf pkg-config))
     (inputs
      `(("cairo" ,cairo)
        ("fribidi" ,fribidi)
@@ -5468,8 +5375,7 @@ your child be creative.")
          "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("tar" ,tar)
-       ("gzip" ,gzip)))
+     (list tar gzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -5507,12 +5413,12 @@ with the \"Stamp\" tool within Tux Paint.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("fltk" ,fltk)
-       ("libpaper" ,libpaper)
-       ;; TODO: Should the following be propagated by fltk?
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("mesa" ,mesa)))
+     (list fltk
+           libpaper
+           ;; TODO: Should the following be propagated by fltk?
+           libx11
+           libxft
+           mesa))
     (arguments
      `(#:make-flags `("VER_DATE=2018-09-01"
                       "CONFDIR=/etc/tuxpaint" ;don't write to store
@@ -5571,21 +5477,21 @@ with the \"Stamp\" tool within Tux Paint.")
                  (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
             #t)))))
    (build-system cmake-build-system)
-   (inputs `(("sdl2" ,sdl2)
-             ("sdl2-image" ,sdl2-image)
-             ("sdl2-mixer" ,sdl2-mixer)
-             ("openal" ,openal)
-             ("mesa" ,mesa)
-             ("glew" ,glew)
-             ("libvorbis" ,libvorbis)
-             ("libogg" ,libogg)
-             ("physfs" ,physfs)
-             ("curl" ,curl)
-             ("boost" ,boost)
-             ("freetype" ,freetype)
-             ("squirrel" ,squirrel)))
+   (inputs (list sdl2
+                 sdl2-image
+                 sdl2-mixer
+                 openal
+                 mesa
+                 glew
+                 libvorbis
+                 libogg
+                 physfs
+                 curl
+                 boost
+                 freetype
+                 squirrel))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "2D platformer game")
    (description "SuperTux is a classic 2D jump'n run sidescroller game in
 a style similar to the original Super Mario games.")
@@ -5605,10 +5511,7 @@ a style similar to the original Super Mario games.")
        (sha256
         (base32 "1xdim1ckq1kgjyxmghcnvnahq1llv2y70gz3yyvzbli63vpqk4mk"))))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("pcre" ,pcre)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list gnutls pcre readline zlib))
     (arguments
      '(#:tests? #f                      ; no test suite
        #:phases
@@ -5698,7 +5601,7 @@ programmers may also add their own favorite language.")
                (copy-recursively "data" (string-append share "/bambam/data")))
              #t)))))
     (inputs
-     `(("python-pygame" ,python-pygame)))
+     (list python-pygame))
     (home-page "https://github.com/porridge/bambam")
     (synopsis "Keyboard mashing and doodling game for babies")
     (description "Bambam is a simple baby keyboard (and gamepad) masher
@@ -5729,14 +5632,10 @@ colors, pictures, and sounds.")
                 (script (string-append out "/bin/" ,name))
                 (data   (string-append out "/share/" ,name))
                 (source (assoc-ref %build-inputs "source"))
-                (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip"))
-                (patch  (string-append (assoc-ref %build-inputs "patch")
-                                       "/bin/patch"))
-                (bash   (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash"))
-                (love   (string-append (assoc-ref %build-inputs "love")
-                                       "/bin/love")))
+                (unzip  (search-input-file %build-inputs "/bin/unzip"))
+                (patch  (search-input-file %build-inputs "/bin/patch"))
+                (bash   (search-input-file %build-inputs "/bin/bash"))
+                (love   (search-input-file %build-inputs "/bin/love")))
 
            (mkdir-p (dirname script))
            (with-output-to-file script
@@ -5762,8 +5661,7 @@ colors, pictures, and sounds.")
        ("patch" ,patch)
        ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
     (inputs
-     `(("bash" ,bash)
-       ("love" ,love)))
+     (list bash love))
     (home-page "https://tangramgames.dk/games/mrrescue")
     (synopsis "Arcade-style fire fighting game")
     (description
@@ -5842,7 +5740,7 @@ throwing people around in pseudo-randomly generated buildings.")
              (let* ((data (assoc-ref inputs "hyperrogue-data"))
                     (out (assoc-ref outputs "out"))
                     (sounds (string-append out "/share/hyperrogue/sounds"))
-                    (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
+                    (unzip (search-input-file inputs "/bin/unzip")))
                ;; Extract media license information into sounds directory.
                (invoke unzip "-j" data
                        (string-append
@@ -5869,13 +5767,8 @@ throwing people around in pseudo-randomly generated buildings.")
              "11yhbia45f1w9z0j67h9nynwjqmvakr9l6rnrmdrdkzin6lvzzj4"))))
        ("unzip" ,unzip)))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("sdl-union" ,(sdl-union (list sdl
-                                      sdl-gfx
-                                      sdl-mixer
-                                      sdl-ttf)))))
+     (list font-dejavu glew libpng
+           (sdl-union (list sdl sdl-gfx sdl-mixer sdl-ttf))))
     (home-page "https://www.roguetemple.com/z/hyper/")
     (synopsis "Non-euclidean graphical rogue-like game")
     (description
@@ -5922,8 +5815,8 @@ symbols, it still needs graphics to render the non-euclidean world.")
                             (assoc-ref %build-inputs "sdl-union")
                             "/include/SDL"))))
     (inputs
-     `(("glu" ,glu)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image)))))
+     (list glu
+           (sdl-union (list sdl sdl-image))))
     (synopsis "Shooter with space station destruction")
     (description
      "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
@@ -5949,13 +5842,9 @@ for Un*x systems with X11.")
       (base32 "0ngcj59ak71i6m8yvbr0g3aryzpw1scalpdzgfqsq4mf9p3y2r1f"))))
    (build-system gnu-build-system)
    (inputs
-    `(("curl" ,curl)
-      ("cyrus-sasl" ,cyrus-sasl)
-      ("gtk+" ,gtk+)
-      ("sdl-mixer" ,sdl-mixer)
-      ("zlib" ,zlib)))
+    (list curl cyrus-sasl gtk+ sdl-mixer zlib))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "http://www.freeciv.org/")
    (synopsis "Turn-based empire building strategy game")
    (description "Freeciv is a turn-based empire building strategy game
@@ -5987,7 +5876,7 @@ into the Space Age.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/bartobri/no-more-secrets")
     (synopsis "Recreation of data decryption effect in \"Sneakers\"")
     (description
@@ -6054,11 +5943,12 @@ starting a decryption sequence to reveal the original plaintext characters.")
        ("sdl2" ,sdl2)
        ("wxwidgets" ,wxwidgets)))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (arguments
      `(#:configure-flags
-       (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
+       (list "-DCMAKE_CXX_FLAGS=-fcommon"
+             "-DCMAKE_C_FLAGS=-fcommon"
+             (string-append "-DCUSTOM_DATA_INSTALL_PATH="
                             (assoc-ref %build-inputs "megaglest-data")
                             "/share/megaglest")
              "-DBUILD_MEGAGLEST_TESTS=ON")
@@ -6116,13 +6006,13 @@ Magic, Egypt, Indians, Norsemen, Persian or Romans.")
                                  line)))
                #t)))))
       (inputs
-       `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
-         ("openal" ,openal)
-         ("libvorbis" ,libvorbis)
-         ("libogg" ,libogg)
-         ("mesa" ,mesa)
-         ("libpng" ,libpng)
-         ("zlib" ,zlib)))
+       (list (sdl-union (list sdl sdl-mixer))
+             openal
+             libvorbis
+             libogg
+             mesa
+             libpng
+             zlib))
       (home-page "https://github.com/freegish/freegish")
       (synopsis "Side-scrolling physics platformer with a ball of tar")
       (description "In FreeGish you control Gish, a ball of tar who lives
@@ -6156,13 +6046,9 @@ emerges from a sewer hole and pulls her below ground.")
                             (assoc-ref %outputs "out")
                             "/share/cdogs-sdl/"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list gtk+ mesa sdl2 sdl2-image sdl2-mixer))
     (home-page "https://cxong.github.io/cdogs-sdl/")
     (synopsis "Classic overhead run-and-gun game")
     (description "C-Dogs SDL is a classic overhead run-and-gun game,
@@ -6208,11 +6094,10 @@ over 100 user-created campaigns.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (setenv "CPLUS_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL:"
-                                    (assoc-ref inputs "python")
-                                    "/include/python2.7:"
-                                    (or (getenv "CPLUS_INCLUDE_PATH") "")))
+                     (string-append
+                      (search-input-directory inputs "include/SDL") ":"
+                      (search-input-directory inputs "include/python2.7")
+                      ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))
              (substitute* "src/main/main.cpp"
                (("#include <SDL.h>" line)
                 (string-append line "
@@ -6263,7 +6148,7 @@ over 100 user-created campaigns.")
                                       sdl-image)))
        ("python" ,python-2)))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page "http://kiki.sourceforge.net/")
     (synopsis "3D puzzle game")
     (description "Kiki the nano bot is a 3D puzzle game.  It is basically a
@@ -6324,18 +6209,18 @@ small robot living in the nano world, repair its maker.")
                       "datasrc/fonts/DejaVuSans.ttf")
              #t)))))
     (inputs
-     `(("freetype" ,freetype)
-       ("font-dejavu" ,font-dejavu)
-       ("glu" ,glu)
-       ("json-parser" ,json-parser)
-       ("mesa" ,mesa)
-       ("pnglite" ,pnglite)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("wavpack" ,wavpack)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list freetype
+           font-dejavu
+           glu
+           json-parser
+           mesa
+           pnglite
+           sdl2
+           sdl2-image
+           sdl2-mixer
+           wavpack
+           openssl
+           zlib))
     (native-inputs
      `(("googletest" ,googletest)
        ("python" ,python-wrapper)
@@ -6395,13 +6280,11 @@ The Flag.  You can even design your own maps!")
                 (string-append "#include \"SDL/SDL_" header ".h\"")))
              #t)))))
     (inputs
-     `(("xerces-c" ,xerces-c)
-       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
-       ("curl" ,curl)
-       ("enet" ,enet)))
+     (list xerces-c
+           (sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)) curl
+           enet))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("imagemagick" ,imagemagick)))
+     (list pkg-config imagemagick))
     (home-page "https://www.nongnu.org/enigma")
     (synopsis "Puzzle game with a dexterity component")
     (description "Enigma is a puzzle game with 550 unique levels.  The object
@@ -6435,7 +6318,7 @@ with the mouse isn’t always trivial.")
        ("fontconfig" ,fontconfig)
        ("libxft" ,libxft)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://level7.org.uk/chroma/")
     (synopsis "Abstract puzzle game")
     (description "Chroma is an abstract puzzle game. A variety of colourful
@@ -6488,13 +6371,8 @@ becoming difficult enough to tax even the brightest of minds.")
                        "--strip-components=1"
                        "-C" data)))))))
     (inputs
-     `(("sdl-union" ,(sdl-union (list sdl
-                                      sdl-mixer
-                                      sdl-image
-                                      sdl-ttf)))
-       ("fribidi" ,fribidi)
-       ("libx11" ,libx11)
-       ("lua" ,lua-5.1)))
+     (list (sdl-union (list sdl sdl-mixer sdl-image sdl-ttf)) fribidi
+           libx11 lua-5.1))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("fillets-ng-data"
@@ -6642,7 +6520,7 @@ monsters in a quest to find the mystifyingly fabulous Orb of Zot.")
        ;; no test target
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("sdl2" ,sdl2)
        ("glu" ,glu)
@@ -6677,9 +6555,7 @@ fight against their plot and save his fellow rabbits from slavery.")
        (sha256
         (base32 "1c9zrddmjxvvacismld6fbwbw9vrdbq6g6d3424p8w5p6xg5wlwy"))))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("unzip" ,unzip)
-                     ("xz" ,xz)))
+    (native-inputs (list tar unzip xz))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -6687,9 +6563,8 @@ fight against their plot and save his fellow rabbits from slavery.")
          (use-modules (guix build utils))
          (let ((out (assoc-ref %outputs "out"))
                (source (assoc-ref %build-inputs "source"))
-               (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
-               (unzip (string-append (assoc-ref %build-inputs "unzip")
-                                     "/bin/unzip"))
+               (tar (search-input-file %build-inputs "/bin/tar"))
+               (unzip (search-input-file %build-inputs "/bin/unzip"))
                (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
            (setenv "PATH" xz-path)
            (mkdir out)
@@ -6729,24 +6604,24 @@ fight against their plot and save his fellow rabbits from slavery.")
     ;; A snippet here would cause a build failure because of timestamps
     ;; reset.  See https://bugs.gnu.org/26734.
     (inputs
-     `(("0ad-data" ,0ad-data)
-       ("curl" ,curl)
-       ("enet" ,enet)
-       ("fmt" ,fmt)
-       ("gloox" ,gloox)
-       ("icu4c" ,icu4c-68)
-       ("libidn" ,libidn)
-       ("libpng" ,libpng)
-       ("libsodium" ,libsodium)
-       ("libvorbis" ,libvorbis)
-       ("libxcursor" ,libxcursor)
-       ("libxml2" ,libxml2)
-       ("miniupnpc" ,miniupnpc)
-       ("mozjs" ,mozjs-78)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("wxwidgets" ,wxwidgets)
-       ("zlib" ,zlib)))
+     (list #{0ad-data}#
+           curl
+           enet
+           fmt
+           gloox
+           icu4c-68
+           libidn
+           libpng
+           libsodium
+           libvorbis
+           libxcursor
+           libxml2
+           miniupnpc
+           mozjs-78
+           openal
+           sdl2
+           wxwidgets
+           zlib))
     (native-inputs
      `(("boost" ,boost)
        ("cmake" ,cmake-minimal)
@@ -6927,7 +6802,7 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
              (("#include <GL/glext.h>") ""))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
        ("glu" ,glu)
@@ -6951,9 +6826,9 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
                   (add-after 'set-paths 'set-sdl-paths
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "CPATH"
-                              (string-append (assoc-ref inputs "sdl-union")
-                                             "/include/SDL2:"
-                                             (or (getenv "CPATH") "")))))
+                              (string-append
+                               (search-input-directory inputs "/include/SDL2")
+                               ":" (or (getenv "CPATH") "")))))
                   (delete 'check)
                   ;; premake doesn't provide install target
                   (replace 'install
@@ -7053,12 +6928,12 @@ Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
                            (string-append out "/bin")))
                         #t))))))
     (build-system gnu-build-system)
-    (inputs `(("libmikmod" ,libmikmod)
-              ("libvorbis" ,libvorbis)
-              ("flac" ,flac)
-              ("mesa" ,mesa)
-              ("mpg123" ,mpg123)
-              ("sdl2" ,sdl2)))
+    (inputs (list libmikmod
+                  libvorbis
+                  flac
+                  mesa
+                  mpg123
+                  sdl2))
     (synopsis "First person shooter engine for Quake 1")
     (description "Quakespasm is a modern engine for id software's Quake 1.
 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
@@ -7115,9 +6990,8 @@ some graphical niceities, and numerous bug-fixes and other improvements.")
                         #t))))
        ,@(strip-keyword-arguments '(#:make-flags #:phases)
                                   (package-arguments quakespasm))))
-    (inputs `(("vulkan-headers" ,vulkan-headers)
-              ("vulkan-loader" ,vulkan-loader)
-              ,@(package-inputs quakespasm)))
+    (inputs (modify-inputs (package-inputs quakespasm)
+              (prepend vulkan-headers vulkan-loader)))
     (description "vkquake is a modern engine for id software's Quake 1.
 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
 some graphical niceities, and numerous bug-fixes and other improvements.")
@@ -7174,14 +7048,14 @@ some graphical niceities, and numerous bug-fixes and other improvements.")
                (symlink (string-append out "/lib/yamagi-quake2/q2ded")
                         (string-append out "/bin/yamagi-q2ded"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl-minimal)
-       ("libvorbis" ,libvorbis)
-       ("mesa" ,mesa)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list curl
+           libvorbis
+           mesa
+           openal
+           sdl2
+           zlib))
     (synopsis "First person shooter engine based on quake2")
     (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
 The main focus is an unchanged single player experience like back in 1997,
@@ -7211,12 +7085,9 @@ making Yamagi Quake II one of the most solid Quake II implementations available.
         (base32 "12v00z3p0ymi8f3w4b4bgl4c76irawn3kmd147r0ap6s9ssx2q6m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://jubalh.github.io/nudoku/")
     (synopsis "Sudoku for your terminal")
     (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
@@ -7259,8 +7130,7 @@ making Yamagi Quake II one of the most solid Quake II implementations available.
        ;; with multiple "QPainter:: ... Painter not active" warnings.
        #:tests? #f))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("gettext-minimal" ,gettext-minimal)
@@ -7290,7 +7160,7 @@ elements to achieve a simple goal in the most complex way possible.")
                 "1hj99jxb9n3r0bkq87p1c24862xa1xyzjyfdyyx88ckszxb05qf3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("assimp" ,assimp)
        ("curl" ,curl)
@@ -7504,8 +7374,7 @@ You can save humanity and get programming skills!")
               ("sdl2" ,sdl2)
               ("timidity++" ,timidity++)
               ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("unzip" ,unzip)))
+    (native-inputs (list pkg-config unzip))
     (synopsis "Modern Doom 2 source port")
     (description "GZdoom is a port of the Doom 2 game engine, with a modern
 renderer.  It improves modding support with ZDoom's advanced mapping features
@@ -7536,7 +7405,7 @@ Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
     (build-system cmake-build-system)
     (arguments `(#:tests? #f))          ; no tests
     (native-inputs
-     `(("deutex" ,deutex)))
+     (list deutex))
     (inputs
      `(("sdl" ,sdl2)
        ("sdl-mixer" ,sdl2-mixer)
@@ -7566,11 +7435,11 @@ online.")
                (base32
                 "1iy8rx7kjvi1zjiw4zh77szzmd1sgpqajvbhprh1sj93fhbxcdfl"))))
     (build-system gnu-build-system)
-    (inputs `(("sdl2-net" ,sdl2-net)
-              ("sdl2-mixer" , sdl2-mixer)
-              ("sdl2" ,sdl2)))
+    (arguments
+     `(#:configure-flags (list "CFLAGS=-fcommon")))
+    (inputs (list sdl2-net sdl2-mixer sdl2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Doom source port preserving the look, feel, and bugs of vanilla
 Doom")
     (description
@@ -7605,7 +7474,8 @@ affect gameplay).")
       `(("automake" ,automake)
         ("autoreconf" ,autoconf))))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (replace 'bootstrap
            ;; The bundled autogen.sh script unconditionally runs ./configure.
@@ -7653,16 +7523,16 @@ original.")
        ("cmake-rules" ,shlomif-cmake-modules)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("cmocka" ,cmocka)
-       ("perl-env-path" ,perl-env-path)
-       ("perl-inline" ,perl-inline)
-       ("perl-inline-c" ,perl-inline-c)
-       ("perl-string-shellquote" ,perl-string-shellquote)
-       ("perl-test-trailingspace" ,perl-test-trailingspace)
-       ("perl-file-find-object-rule" ,perl-file-find-object-rule)
-       ("perl-text-glob" ,perl-text-glob)
-       ("perl-number-compare" ,perl-number-compare)
-       ("perl-moo" ,perl-moo)))
+     (list cmocka
+           perl-env-path
+           perl-inline
+           perl-inline-c
+           perl-string-shellquote
+           perl-test-trailingspace
+           perl-file-find-object-rule
+           perl-text-glob
+           perl-number-compare
+           perl-moo))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7731,7 +7601,7 @@ original.")
                             (string-append bin "/fortune"))
                (rmdir games)
                #t))))))
-    (inputs `(("recode" ,recode)))
+    (inputs (list recode))
     (native-inputs
      `(("perl" ,perl)
        ;; The following is only needed for tests.
@@ -7772,7 +7642,7 @@ quotation from a collection of quotes.")
          (let* ((out (assoc-ref %outputs "out"))
                 (xonotic (string-append out "/share/xonotic"))
                 (source (assoc-ref %build-inputs "source"))
-                (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+                (unzip (search-input-file %build-inputs "/bin/unzip")))
            (copy-file source (string-append ,name "-" ,version ".zip"))
            (invoke unzip (string-append ,name "-" ,version ".zip"))
            (mkdir-p out)
@@ -7973,12 +7843,12 @@ quotation from a collection of quotes.")
        ("libpng" ,libpng)
        ("hicolor-icon-theme" ,hicolor-icon-theme)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("gmp" ,gmp)))
+     (list unzip
+           autoconf
+           automake
+           pkg-config
+           libtool
+           gmp))
     (home-page "https://xonotic.org")
     (synopsis "Fast-paced first-person shooter game")
     (description
@@ -8027,11 +7897,7 @@ open-source FPS of its kind.")
                (mkdir-p man)
                (install-file "doc/frotz.6" man)
                #t))))))
-    (inputs `(("libmodplug" ,libmodplug)
-              ("libsamplerate" ,libsamplerate)
-              ("libsndfile" ,libsndfile)
-              ("libvorbis" ,libvorbis)
-              ("ncurses" ,ncurses)))
+    (inputs (list libmodplug libsamplerate libsndfile libvorbis ncurses))
     (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
     (description "Frotz is an interpreter for Infocom games and other Z-machine
 games in the text adventure/interactive fiction genre.  This version of Frotz
@@ -8058,8 +7924,7 @@ ncurses for text display.")
     (arguments
      ;; XXX: Do not add debugging symbols, which cause the build to fail.
      `(#:configure-flags (list "--buildtype=release")
-       #:tests? #f            ;sole test fails with a missing "/dev/dri" error
-       #:meson ,meson-0.55))
+       #:tests? #f))          ;sole test fails with a missing "/dev/dri" error
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -8186,18 +8051,16 @@ to play games on webpages.  It can also be made into a chat bot.")
                  (install-file "doc/sfrotz.6" man)
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("which" ,which)
-         ("perl" ,perl)))
-      (inputs `(("sdl2" ,sdl2)
-                ("sdl2-mixer" ,sdl2-mixer)
-                ("libmodplug" ,libmodplug)
-                ("libsamplerate" ,libsamplerate)
-                ("libsndfile" ,libsndfile)
-                ("libvorbis" ,libvorbis)
-                ("ncurses" ,ncurses)
-                ("freetype" ,freetype)
-                ("libjpeg-turbo" ,libjpeg-turbo)))
+       (list pkg-config which perl))
+      (inputs (list sdl2
+                    sdl2-mixer
+                    libmodplug
+                    libsamplerate
+                    libsndfile
+                    libvorbis
+                    ncurses
+                    freetype
+                    libjpeg-turbo))
       (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
       (description "Frotz is an interpreter for Infocom games and other Z-machine
 games in the text adventure/interactive fiction genre.  This version of Frotz
@@ -8276,11 +8139,8 @@ when packaged in Blorb container files or optionally from individual files.")
                            (find-files "bin" ".")))
                #t)))))
       (native-inputs
-       `(("perl-alien-sdl" ,perl-alien-sdl)
-         ("perl-capture-tiny" ,perl-capture-tiny)
-         ("perl-locale-maketext-lexicon" ,perl-locale-maketext-lexicon)
-         ("perl-module-build" ,perl-module-build)
-         ("pkg-config" ,pkg-config)))
+       (list perl-alien-sdl perl-capture-tiny perl-locale-maketext-lexicon
+             perl-module-build pkg-config))
       (inputs
        `(("glib" ,glib)
          ("perl-compress-bzip2" ,perl-compress-bzip2)
@@ -8320,13 +8180,10 @@ their own levels.")
                 "1b3bcdkk5xd5asq797cch9id8692grsjxrc1ss87vv11m1ck4rb3"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-compile-resources
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list `(,glib "bin") ; for glib-compile-resources
+           gobject-introspection pkg-config vala))
     (inputs
-     `(("libevdev" ,libevdev)
-       ("libgudev" ,libgudev)))
+     (list libevdev libgudev))
     (home-page "https://wiki.gnome.org/Apps/Games")
     (synopsis "Game controller library")
     (description "Libmanette is a small GObject library giving you simple
@@ -8367,13 +8224,13 @@ GameController.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("gsound" ,gsound)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmanette" ,libmanette)
-       ("librsvg" ,librsvg)))
+     (list clutter
+           clutter-gtk
+           gsound
+           gtk+
+           libcanberra
+           libmanette
+           librsvg))
     (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
     (synopsis "GNOME version of Tetris")
     (description "Quadrapassel comes from the classic falling-block game,
@@ -8547,8 +8404,7 @@ civilized than your own.")
                  (symlink "../stepmania/Docs" "doc/stepmania"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+     (list pkg-config yasm))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ;; Per upstream, StepMania is only guaranteed to work with a very
@@ -8606,13 +8462,9 @@ to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
            ;; `make test' doesn't actually build the test executable
            (lambda _ (invoke "make" "zerotokei"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("ffmpeg" ,ffmpeg)
-       ("pango" ,pango)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)))
+     (list cairo ffmpeg pango sdl2 sdl2-image))
     (home-page "https://github.com/fmang/oshu/")
     (synopsis "Rhythm game in which you click on circles")
     (description "@i{oshu!} is a minimalist variant of the @i{osu!} rhythm game,
@@ -8652,10 +8504,9 @@ download and unpack them separately.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") "")))))
          (add-after 'unpack 'fix-compilation-errors
            (lambda _
              (substitute* "mrt/base_file.h"
@@ -8696,8 +8547,7 @@ download and unpack them separately.")
                                 sdl-ttf)))
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
+     (list pkg-config zip))
     (home-page "http://btanks.sourceforge.net")
     (synopsis "Multiplayer tank battle game")
     (description "Battle Tanks (also known as \"btanks\") is a funny battle
@@ -8761,7 +8611,7 @@ the ground, the set ends and all balls are served again.")
     (arguments
      `(#:python ,python-2))
     (inputs
-     `(("python-pygame" ,python2-pygame)))
+     (list python2-pygame))
     (home-page "https://github.com/ryanakca/slingshot")
     (synopsis "Simple 2D shooting strategy game set in space")
     (description "Slingshot is a two-dimensional strategy game where two
@@ -8786,7 +8636,8 @@ affected by the gravity of the planets.")
          "1nfkhcm0l89jyw8yr65na97g4l385zhjf7whkyg47c3v5sdqq2g7"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-install-directories
            (lambda* (#:key outputs #:allow-other-keys)
@@ -8802,10 +8653,9 @@ affected by the gravity of the planets.")
          (add-after 'set-paths 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "sdl")
-                                    "/include/SDL:"
-                                    (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "/include/SDL")
+                      ":" (or (getenv "CPATH") ""))))))))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freeglut" ,freeglut)
@@ -8873,20 +8723,20 @@ game field is extended to 4D space, which has to filled up by the gamer with
                (rename-file (string-append out "/bin/arx-install-data")
                             (string-append installer "/bin/arx-install-data"))))))))
     (inputs
-     `(("sdl2" ,sdl2)
-       ("libepoxy" ,libepoxy)
-       ("glew" ,glew)
-       ("openal" ,openal)
-       ("zlib" ,zlib)
-       ("boost" ,boost)
-       ("glm" ,glm)
-       ("freetype" ,freetype)
-       ;; The following are only needed by the arx-install-data script.
-       ("p7zip" ,p7zip) ; Install-helper uses it to extract ISO and .cab archives.
-       ("zenity" ,zenity)           ; GUI for install-helper.
-       ("wget" ,wget)     ; Used by the install-helper to download the patch.
-       ;; The install-helper needs it to extract the patch.
-       ("innoextract" ,innoextract)))
+     (list sdl2
+           libepoxy
+           glew
+           openal
+           zlib
+           boost
+           glm
+           freetype
+           ;; The following are only needed by the arx-install-data script.
+           p7zip ; Install-helper uses it to extract ISO and .cab archives.
+           zenity ; GUI for install-helper.
+           wget ; Used by the install-helper to download the patch.
+           ;; The install-helper needs it to extract the patch.
+           innoextract))
     (home-page "https://arx-libertatis.org/")
     (synopsis "Port of Arx Fatalis, a first-person role-playing game")
     (description "Arx Libertatis is a cross-platform port of Arx Fatalis, a 2002
@@ -8921,10 +8771,9 @@ where the player draws runes in real time to effect the desired spell.")
                    (add-before 'build 'fix-env
                      (lambda* (#:key inputs #:allow-other-keys)
                        (setenv "CPATH"
-                               (string-append (assoc-ref inputs "sdl2-union")
-                                              "/include/SDL2:"
-                                              (or (getenv "CPATH") "")))
-                       #t)))))
+                               (string-append
+                                (search-input-directory inputs "/include/SDL2")
+                                ":" (or (getenv "CPATH") ""))))))))
     (inputs
      `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
        ("zlib" ,zlib)))
@@ -9115,10 +8964,8 @@ action RPGs.")
            ;; parameters.
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bash (string-append (assoc-ref inputs "bash")
-                                         "/bin/bash"))
-                    (flare (string-append (assoc-ref inputs "flare-engine")
-                                          "/bin/flare"))
+                    (bash (search-input-file inputs "/bin/bash"))
+                    (flare (search-input-file inputs "/bin/flare"))
                     (script (string-append out "/bin/flare-game")))
                (mkdir-p (dirname script))
                (call-with-output-file script
@@ -9132,7 +8979,7 @@ exec ~a --data-path=~a/share/flare --mods=empyrean_campaign~%"
                (chmod script #o755))
              #t)))))
     (inputs
-     `(("flare-engine" ,flare-engine)))
+     (list flare-engine))
     (home-page "http://www.flarerpg.org/")
     (synopsis "Fantasy action RPG using the FLARE engine")
     (description "Flare is a single-player 2D action RPG with
@@ -9181,7 +9028,7 @@ fast-paced action and a dark fantasy style.")
                 (string-append "// " all)))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))
        ("zlib" ,zlib)))
@@ -9244,11 +9091,9 @@ Orcus Dome from evil.")
                  (install-file "MarbleMarcher" bin))
                #t)))))
       (inputs
-       `(("eigen" ,eigen)
-         ("mesa" ,mesa)
-         ("sfml" ,sfml)))
+       (list eigen mesa sfml))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://codeparade.itch.io/marblemarcher")
       (synopsis "Guide a marble across fractal landscapes")
       (description "Marble Marcher is a video game that uses a fractal physics
@@ -9364,23 +9209,23 @@ and also provides the base for the FlightGear Flight Simulator.")
                          "--strip-components=1")))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("freeglut" ,freeglut)
-       ("freetype" ,freetype)
-       ("glew" ,glew)
-       ("libpng" ,libpng)
-       ("openal" ,openal)
-       ("openscenegraph" ,openscenegraph)
-       ("plib" ,plib)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("simgear" ,simgear)
-       ("speexdsp" ,speexdsp)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list boost
+           dbus
+           eudev
+           freeglut
+           freetype
+           glew
+           libpng
+           openal
+           openscenegraph
+           plib
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           simgear
+           speexdsp
+           sqlite
+           zlib))
     (native-inputs
      `(("cppunit" ,cppunit)
        ("pkg-config" ,pkg-config)
@@ -9425,7 +9270,14 @@ simulator.")
        #:tests? #f                      ;no test
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)            ;no configure script
+         ;; There is no configure script
+         (replace 'configure
+           (lambda _
+             (substitute* "Makefile"
+               (("-funroll-loops")
+                "-funroll-loops -fcommon")
+               (("SDL_CFLAGS =")
+                "SDL_CFLAGS = -fcommon"))))
          (add-after 'unpack 'fix-sdl-path
            ;; XXX: For some reason, `sdl2-config' reports stand-alone SDL
            ;; directory, not SDL-union provided as an input to the package.
@@ -9433,8 +9285,7 @@ simulator.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makefile"
                (("sdl2-config" command)
-                (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
-             #t)))))
+                (string-append command " --prefix=" (assoc-ref inputs "sdl")))))))))
     (inputs
      `(("bzip2" ,bzip2)
        ("sdl" ,(sdl-union (list sdl2 sdl2-mixer sdl2-net)))
@@ -9506,10 +9357,7 @@ play with up to four players simultaneously.  It has network support.")
        ("sdl" ,(sdl-union
                 (list sdl2 sdl2-mixer sdl2-net sdl2-ttf sdl2-image)))))
     (native-inputs
-     `(("clang" ,clang)
-       ("ghc" ,ghc)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list clang ghc pkg-config qttools))
     (home-page "https://hedgewars.org/")
     (synopsis "Turn-based artillery game featuring fighting hedgehogs")
     (description
@@ -9544,7 +9392,7 @@ and bring the war to your enemy.")
     (arguments
      '(#:import-path "github.com/anaseto/gruid"))
     (propagated-inputs
-     `(("go-golang-org-x-image" ,go-golang-org-x-image)))
+     (list go-golang-org-x-image))
     (home-page "https://github.com/anaseto/gruid")
     (synopsis "Cross-platform grid-based UI and game framework")
     (description "The gruid module provides packages for easily building
@@ -9635,8 +9483,7 @@ on items and player adaptability for character progression.")
                 (share (string-append out "/share/drascula"))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
            ;; Install data.
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip"))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip"))
                  (doc (string-append out "/share/doc/" ,name "-" ,version)))
              (for-each
               (lambda (input)
@@ -9662,8 +9509,7 @@ on items and player adaptability for character progression.")
            ;; Create standalone executable.
            (let* ((bin (string-append out "/bin"))
                   (executable (string-append bin "/drascula"))
-                  (bash (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash")))
+                  (bash (search-input-file %build-inputs "/bin/bash")))
              (mkdir-p bin)
              (with-output-to-file executable
                (lambda ()
@@ -9690,8 +9536,7 @@ on items and player adaptability for character progression.")
                           ("it" "Gioco classico di avventura punta e clicca 2D"))))
            #t))))
     (native-inputs
-     `(("bash" ,bash)
-       ("unzip" ,unzip)))
+     (list bash unzip))
     (inputs
      `(("scummvm" ,scummvm)
        ("drascula-int"
@@ -9753,8 +9598,7 @@ the World and demonstrating that he is even more evil than his brother Vlad.")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/" ,name "-" ,version)))
              (for-each (lambda (f) (install-file f doc))
@@ -9791,10 +9635,9 @@ the World and demonstrating that he is even more evil than his brother Vlad.")
                        executable scummvm)))
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org")
     (synopsis "2D point and click fantasy adventure game")
     (description
@@ -9860,8 +9703,7 @@ Skorl.  Maybe it would be an idea to try and escape...")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/" ,name "-" ,version)))
              (install-file "readme.txt" doc))
@@ -9893,10 +9735,9 @@ Skorl.  Maybe it would be an idea to try and escape...")
                        executable scummvm))))
          #t)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org/")
     (synopsis "Classic 2D point and click adventure game")
     (description "Flight of the Amazon Queen is a 2D point-and-click
@@ -9959,8 +9800,7 @@ women and 6-foot-tall pygmies.")
                 (bin (string-append out "/bin"))
                 (executable (string-append bin "/" ,name))
                 (scummvm (assoc-ref %build-inputs "scummvm")))
-           (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                       "/bin/unzip")))
+           (let ((unzip (search-input-file %build-inputs "/bin/unzip")))
              (invoke unzip "-j" (assoc-ref %build-inputs "source")))
            (let ((doc (string-append share "/doc/bass-" ,version)))
              (install-file "readme.txt" doc))
@@ -9994,10 +9834,9 @@ angesiedelt in einer düsteren, postapokalyptischen Vision der Zukunft~@
                        executable scummvm)))
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("bash" ,bash)
-       ("scummvm" ,scummvm)))
+     (list bash scummvm))
     (home-page "https://www.scummvm.org/")
     (synopsis "Classic 2D point and click science-fiction adventure game")
     (description
@@ -10036,13 +9875,9 @@ and to seek vengeance for the killing of his tribe.")
          "07gi3lsmbzzsjambgixj6xy79lh22km84z7bnzgwzxdy806lyvwb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("vte" ,vte/gtk+-2)
-       ("readline" ,readline)
-       ("guile" ,guile-1.8)))
+     (list glib gtk+-2 vte/gtk+-2 readline guile-1.8))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:make-flags
        (list
@@ -10219,14 +10054,14 @@ remake of that series or any other game.")
      (patches (search-patches "leela-zero-gtest.patch"))))
    (build-system cmake-build-system)
    (native-inputs
-    `(("googletest" ,googletest)))
+    (list googletest))
    (inputs
-    `(("boost" ,boost)
-      ("opencl-icd-loader" ,opencl-icd-loader)
-      ("openblas" ,openblas)
-      ("opencl-headers" ,opencl-headers)
-      ("qtbase" ,qtbase-5)
-      ("zlib" ,zlib)))
+    (list boost
+          opencl-icd-loader
+          openblas
+          opencl-headers
+          qtbase-5
+          zlib))
    (arguments
     '(#:configure-flags '("-DUSE_BLAS=YES")
       #:phases (modify-phases %standard-phases
@@ -10266,11 +10101,9 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
               "1gdlfqcqkqv7vph3qwq78d0qz6dhmdsranxq9bmixiisbzkqby31"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("qtbase" ,qtbase-5)
-      ("qtmultimedia" ,qtmultimedia)
-      ("qtsvg" ,qtsvg)))
+    (list qtbase-5 qtmultimedia qtsvg))
    (arguments
     '(#:phases
       (modify-phases %standard-phases
@@ -10283,6 +10116,11 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
               (("qtchooser -run-tool=(.*) -qt=qt5" _ command)
                command))
             #t))
+        (add-after 'unpack 'fix-header
+          (lambda _
+            (substitute* "src/bitarray.h"
+              (("#include <cstring>" all)
+               (string-append all "\n#include <stdexcept>")))))
         (add-after 'unpack 'fix-paths
           (lambda _
             (substitute* '("src/pics/Makefile.in"
@@ -10345,25 +10183,23 @@ can be downloaded from @url{https://zero.sjeng.org/best-network}.")
        (base32 "0mlv9qllg70p26dbrcsr820c70d3ib88hapc1z6wgjhdpmc12ni1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("perl" ,perl)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("python" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools perl))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           python-wrapper
+           qtbase-5
+           qtmultimedia
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Stamp drawing toy")
     (description "KTuberling is a drawing toy intended for small children and
@@ -10396,21 +10232,20 @@ This package is part of the KDE games module.")
        (base32 "1dfq9m4njh0czz8zws46rkz6xq2n6xra5w223m3s2f5civiw5msz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcoreaddons
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           kio
+           knewstuff
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Number logic game")
     (description "Picmi is a number logic game in which cells in a grid have
@@ -10433,22 +10268,21 @@ This package is part of the KDE games module.")
         (base32 "1lpp6pzr5dgd4si4a8c7hcvgxgqy0bgyhkx9m6jqb0zhll6dxj10"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("ktextwidgets" ,ktextwidgets)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           ktextwidgets
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Miniature golf game")
     (description "Kolf is a miniature golf game for one to ten players.  The
@@ -10481,18 +10315,18 @@ This package is part of the KDE games module.")
        (base32 "10ljzbf7qki5flydankrbksaihhkqpfyljb8c71fbwqwmkr7rgfq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ;("kconfig" ,kconfig)
-       ("kcodecs" ,kcodecs)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kcompletion
+           ;("kconfig" ,kconfig)
+           kcodecs
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kwidgetsaddons
+           qtbase-5
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Shared library for kmahjongg and kshisen")
     (description "Shared library and common files for kmahjongg, kshisen and
@@ -10512,21 +10346,20 @@ other Mah Jongg like games.")
        (base32 "1fcj4jb2zzbaxp7cp04w36y0c7lh77yzin66fmvrcxkl11xi2wwd"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("knewstuff" ,knewstuff)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("libkmahjongg" ,libkmahjongg)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           knewstuff
+           kxmlgui
+           libkdegames
+           libkmahjongg
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Tile laying patience")
     (description "In KMahjongg the tiles are scrambled and staked on top of
@@ -10552,23 +10385,23 @@ This package is part of the KDE games module.")
        (base32 "1hrwr0f1kidivsp8lnwdbqz3xxagjvjwh72r3gma8smfilybygfb"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;("perl" ,perl)
-       ;("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("libkmahjongg" ,libkmahjongg)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules
+           ;("perl" ,perl)
+           ;("pkg-config" ,pkg-config)
+           kdoctools))
+    (inputs
+     (list kauth
+           kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           libkmahjongg
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Shisen-Sho solitaire game")
     (description "KShisen is a solitaire-like game played using the standard
@@ -10593,27 +10426,37 @@ This package is part of the KDE games module.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'install 'wrap
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/mjresource.py"
+               (("'share', 'kmahjongglib'" all)
+                (string-append "'" (assoc-ref inputs "libkmahjongg")
+                               "/share', 'kmahjongglib'")))))
+         (add-after 'qt-wrap 'wrap
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/kajongg")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
-               #t))))))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;("perl" ,perl)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("libkmahjongg" ,libkmahjongg)
-       ("python" ,python)
-       ("python-twisted" ,python-twisted)
-       ("python-pyqt" ,python-pyqt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("GUIX_PYTHONPATH" ":" prefix
+                               (,(getenv "GUIX_PYTHONPATH")))))
+                         (list (string-append out "/bin/kajongg")
+                               (string-append out "/bin/kajonggserver")))))))))
+    (native-inputs
+     (list extra-cmake-modules
+           ;("perl" ,perl)
+           kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           libkmahjongg
+           python
+           python-twisted
+           python-pyqt
+           python-zope-interface
+           qtbase-5
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Classical Mah Jongg game for 4 players")
     (description "Kajongg is the ancient Chinese board game for 4 players.
@@ -10642,21 +10485,20 @@ This package is part of the KDE games module.")
        (base32 "0kqj2cx0ny3qq65c6w5fpnzmrwl9irg8slzvpd3anck5cnvma3j4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Breakout like game")
     (description "KBreakout is similar to the classics breakout and xboing,
@@ -10680,22 +10522,21 @@ This package is part of the KDE games module.")
        (base32 "0hqjwh3jq2npqwkvh67fyn2xnq8swiasdw5jz8f0ikl0k28id775"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Classical mine sweeper game")
     (description "KMines is a classic Minesweeper game.  The idea is to
@@ -10718,22 +10559,21 @@ This package is part of the KDE games module.")
        (base32 "0lnwj06vv4qx05hr8pzysnvrxh8y04asajrph0rsj37v8hs9g5lh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Simple turn-based strategy game")
     (description "Konquest is the KDE version of Gnu-Lactic Konquest.  Players
@@ -10758,22 +10598,21 @@ This package is part of the KDE games module.")
        (base32 "0ymy0z1qlw3n653xs3dsa1xm78q4xaj09dnnci4km77rzis26vb6"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Jezzball arcade game")
     (description "KBounce is a single player arcade game with the elements of
@@ -10797,22 +10636,21 @@ This package is part of the KDE games module.")
        (base32 "09yfm9mzbamp294cvc5finq6ilxvxr68i0dnb0m72pa4sfzmij32"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Single player falling blocks puzzle game")
     (description "KBlocks is the classic Tetris-like falling blocks game.
@@ -10838,25 +10676,24 @@ This package is part of the KDE games module.")
        (base32 "0pj6ry7ak1rnpb93mqypaxrcbmrhwg9ir6zhb3ybzfkfcrh67g12"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("glu" ,glu)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           glu
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Sudoku puzzle game and solver")
     (description "KSudoku is a Sudoku game and solver, supporting a range of
@@ -10899,20 +10736,19 @@ This package is part of the KDE games module.")
        (base32 "0y8lnwawrkl4ixn7v4dg48k2zpr083krv7dv4d94b2dpkh7xfvih"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Place 5 equal pieces together, but wait, there are 3 new ones")
     (description "KLines is a simple but highly addictive one player game.
@@ -10943,20 +10779,19 @@ This package is part of the KDE games module.")
        (base32 "17ra5d3r9ajy2inj17gwd5xphzhvbzx5kpvdwyj6msx4dd9wxgfi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Action and puzzle solving game")
     (description "KGoldrunner is an action game where the hero runs through a
@@ -10984,23 +10819,22 @@ This package is part of the KDE games module.")
        (base32 "1iyxrx3422asa58kh0siwvi1svds5kccrym6gdfpdhlmhmciqlzi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           knotifications
+           knotifyconfig
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Three-in-a-row game")
     (description "KDiamond is a three-in-a-row game like Bejeweled.  It
@@ -11023,21 +10857,20 @@ This package is part of the KDE games module.")
        (base32 "0plx3lv35fc8q9svbyl71mms3ji6zn58j306bvm1f8kkgg0x395b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdnssd
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Place 4 pieces in a row")
     (description "KFourInLine is a board game for two players based on the
@@ -11062,22 +10895,21 @@ This package is part of the KDE games module.")
        (base32 "0la5w44b0gl72g3wfp0pw8gwnm287lh7nd9k5ikpszw5nn49db0h"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Find atoms in a grid by shooting electrons")
     (description "KBlackbox is a game of hide and seek played on a grid of
@@ -11103,22 +10935,21 @@ This package is part of the KDE games module.")
        (base32 "060kj06vpigdy570izsjfgnmqqrpmb8bkr9arqc109hg3avl5wjz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Turn the board pieces to get all computers connected")
     (description "KNetWalk is a small game where you have to build up a
@@ -11145,19 +10976,18 @@ This package is part of the KDE games module.")
         (base32 "1fjcwm591jgx3bgqpi0j5fnb2l2r2h3r6lav3vhaxz4rkf56pg2a"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletiom" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Arcade bombing game")
     (description "Bomber is a single player arcade game.
@@ -11187,23 +11017,22 @@ This package is part of the KDE games module.")
        (base32 "1fyh7zyacb3pnlfd29jw2jmyl8a7sjw354pi234nd5x5999xw5z6"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("knewstuff" ,knewstuff)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           knewstuff
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Bomberman clone")
     (description "Granatier is a clone of the classic Bomberman game,
@@ -11225,23 +11054,22 @@ This package is part of the KDE games module.")
         (base32 "10y7nm0x6zcc0gh3am69bbxyyb8azbbfyrdqsa023ggr7n04cn21"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kwallet" ,kwallet)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("phonon" ,phonon)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcrash
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kwallet
+           kxmlgui
+           libkdegames
+           phonon
+           qca
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           zlib))
     (home-page "https://games.kde.org/")
     (synopsis "Computerized version of the well known strategy board game
 'Risk'")
@@ -11281,29 +11109,28 @@ This package is part of the KDE games module.")
         (base32 "0xxz9g4zxljlg20g88a5lkbwzzm9yg4vxnrfigk8m018cz0nqd5b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kcrash
+           ki18n
+           ki18n
+           kio
+           kitemviews
+           knotifications
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg
+           shared-mime-info))
     (home-page "https://games.kde.org/")
     (synopsis "Jigsaw puzzle game")
     (description "Palapeli is a jigsaw puzzle game.  Unlike other games in
@@ -11329,21 +11156,20 @@ This package is part of the KDE games module.")
         (base32 "0milc8fl1rj4yrwdvm60ampd47dyiys1xvqi5f0g7y6mgymgyk4x"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Yahtzee dice game")
     (description "Kiriki is an addictive and fun dice game, designed to be
@@ -11368,23 +11194,22 @@ This package is part of the KDE games module.")
         (base32 "088752yzmfsnppd27p8hld4x5s7sw5fagm08024l5ra1mlicdfz9"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           knewstuff
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Go board game")
     (description "Kigo is an open-source implementation of the popular Go
@@ -11415,22 +11240,21 @@ This package is part of the KDE games module.")
         (base32 "0h3mypwd67sss08j5vvrih5f5ss85m9kax6412y40xmsm51lz2pq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("glu" ,glu)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list glu
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Game based on Rubik's Cube")
     (description "Kubrick is a game based on the Rubik's Cube puzzle.
@@ -11457,21 +11281,20 @@ This package is part of the KDE games module.")
         (base32 "1wg9zxp64kwjxqs4qw0h7j8yhgffbmvh8j9d4dgmz45dscngnjli"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Lieutnant Skat card game")
     (description "Lieutnant Skat (from German \"Offiziersskat\") is a fun and
@@ -11496,21 +11319,20 @@ This package is part of the KDE games module.")
        (base32 "14x3v6li4r3gzzwfd6ar9saq2rhc7yxs0sp9ygalzq8vq4d7i1kh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Pac-Man clone")
     (description "Kapman is a clone of the well known game Pac-Man.
@@ -11536,21 +11358,20 @@ This package is part of the KDE games module.")
         (base32 "1aixh6ygif2cm1a5g32sl5y6b5x68139pzihaxq4334c6avamdai"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Two player game with shooting spaceships flying around a sun")
     (description "KSpaceduel is a space battle game for one or two players,
@@ -11572,19 +11393,18 @@ This package is part of the KDE games module.")
         (base32 "18qbac366m0xma3ary11q9zxz0wgnysppcl7kpypl6ic3nf61wqz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Classic pen and paper game: five in a line")
     (description "Bovo is a Gomoku (from Japanese 五目並べ - lit.  \"five
@@ -11609,21 +11429,20 @@ This package is part of the KDE games module.")
         (base32 "1296gww42nwnai7y6m2qpjqpyc30p7z9chfv5rv0n48jvdhva88y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Port of the classic BSD console game robots")
     (description "Killbots is a simple game of evading killer robots.
@@ -11651,22 +11470,21 @@ This package is part of the KDE games module.")
        (base32 "0mp6g258n3xzvgf23jnhkw10xgwqwqdzqfdc6r9jq6a6m8v77swz"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Snake race played against the computer")
     (description "KSnakeDuel is a fast action game where you steer a snake
@@ -11690,20 +11508,19 @@ This package is part of the KDE games module.")
        (base32 "180ybafizpwjsg80npy0l9142cjsnlyxwv9dz3bq6r8v4smn2g6b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Simple ball dodging game")
     (description "In Kollision you use mouse to control a small blue ball in a
@@ -11728,23 +11545,22 @@ This package is part of the KDE games module.")
        (base32 "03rqf4avn61b0v340ymmzgp7s0axygjgxq1nlp5aaqbx70zcb4lq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kauth
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdnssd
+           ki18n
+           ktextwidgets
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Battleship board game with built-in game server")
     (description "KBattleship is a Battle Ship game for KDE.
@@ -11769,23 +11585,22 @@ This package is part of the KDE games module.")
        (base32 "0d3y072q61xcik9lf0pz0c9njvarwlvf6hqv5fp5jyqaf2902pmi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdeclarative
+           ki18n
+           kiconthemes
+           kio
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Old reversi board game, also known as othello")
     (description "KReversi is a simple one player strategy game played
@@ -11812,21 +11627,20 @@ This package is part of the KDE games module.")
        (base32 "0chd30byl2kww1k699vkygrxq2wdyvi84m2bimk23q96fl8h831y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative))
     (home-page "https://games.kde.org/")
     (synopsis "Dots and Boxes game")
     (description "KSquares is an implementation of the popular paper based
@@ -11849,22 +11663,21 @@ This package is part of the KDE games module.")
        (base32 "1mk73il4jh15z5pm3fp65hsyvmrga11c3h7w96yamy2n2bbniapq"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdegames" ,libkdegames)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list extra-cmake-modules kdoctools))
+    (inputs
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           libkdegames
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Simple tactical game for number-crunchers")
     (description "KJumpingcube is a simple tactical game for one or two
@@ -11981,12 +11794,9 @@ the more difficult challenges.")
         (base32 "1z4pwpqyvxhlda99h6arh2rjk90fbms9q29fqizjblrdn01dlxn1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libpng" ,libpng)
-       ("gstreamer" ,gstreamer)))
+     (list gtk+-2 libpng gstreamer))
     (arguments
      `(#:tests? #f
        #:phases
@@ -12023,13 +11833,9 @@ and chess engines.")
         (base32 "01fjchil2h6ry2ywr0dwjw2g7zd29580cr4c74d5z74h999lp6nh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtspeech" ,qtspeech)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtmultimedia qtspeech qtsvg zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -12038,8 +11844,7 @@ and chess engines.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "chessx.pro"
                (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
-                (string-append (assoc-ref inputs "qttools") "/bin/lrelease")))
-             #t))
+                (search-input-file inputs "/bin/lrelease")))))
          (add-after 'fix-paths 'make-qt-deterministic
            (lambda _
              (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
@@ -12137,9 +11942,7 @@ ChessX.")
         (base32 "0139wxyrir10cbkvkjn548xgmp84wax8mfwk80yxbxlcdamrg257"))))
     (build-system gnu-build-system)
     (inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("sdl" ,sdl)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list hicolor-icon-theme sdl sdl-mixer))
     (arguments
      `(#:configure-flags
        (list
@@ -12169,9 +11972,9 @@ get high scores.")
         (base32 "1xb4immzmd419aa08lgkzf7ibxa6ax238zb2l5iw9nkgvzlh1v6l"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("flatzebra" ,flatzebra)))
+     (list flatzebra))
     (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
     (synopsis "Avoid evil foodstuffs and make burgers")
     (description
@@ -12197,13 +12000,9 @@ protect you.")
         (base32 "1y7v0jhp3apb619p7asikqr1dnwb2yxbh40wbx1ppmr5f03mq9ph"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("enet" ,enet)
-       ("openal" ,openal)
-       ("sdl2" ,sdl2)))
+     (list curl enet openal sdl2))
     (home-page "https://7kfans.com/")
     (synopsis "Seven Kingdoms Ancient Adversaries: real-time strategy game")
     (description
@@ -12375,8 +12174,7 @@ game.")  ;thanks to Debian for description
                (("/opt/gsasl")
                 (assoc-ref inputs "gsasl"))
                (("\\$\\$\\{PREFIX\\}/include/libircclient")
-                (string-append (assoc-ref inputs "libircclient")
-                               "/include/libircclient"))
+                (search-input-directory inputs "/include/libircclient"))
                (("LIB_DIRS =")
                 (string-append "LIB_DIRS = "
                                (assoc-ref inputs "boost") "/lib")))
@@ -12433,7 +12231,7 @@ computer opponents or against real players online.")
          (add-after 'unpack 'fix-install ; set install directory
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "Makefile" (("/usr") (assoc-ref outputs "out"))) #t)))))
-    (inputs `(("sdl" ,sdl)))
+    (inputs (list sdl))
     (home-page "https://mdsteele.games/azimuth/")
     (synopsis "Metroidvania game with vector graphics")
     (description
@@ -12454,9 +12252,7 @@ inside the Zenith Colony.")
         (base32 "0qlvkiaglqq0izfph3l04mp4rqqqm9ks6rcsrmzrggw9x706z2iv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 libxt xorgproto))
     (home-page "http://cgoban1.sourceforge.net/")
     (synopsis "Go client for X11")
     (description "Provides a large set of Go-related services for X11:
@@ -12515,7 +12311,7 @@ such as GnuGo.
     (inputs
      `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
     (native-inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "http://hcsoftware.sourceforge.net/passage/")
     (synopsis "Memento mori game")
     (description
@@ -12543,7 +12339,7 @@ there's no right way to interpret it.")
                   "09sb9sg44fvkgfdyycrm1ndpx7cnkrglxhci41y8f3gpagnvi7jk"))))
       (build-system gnu-build-system)
       (inputs
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (arguments
        '(#:tests? #f ;no tests
          #:make-flags
@@ -12580,7 +12376,7 @@ game FPS.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://a-nikolaev.github.io/curseofwar/")
     (synopsis "Fast-paced action strategy game")
     (description "Curse of War is a fast-paced action strategy game originally
@@ -12610,9 +12406,9 @@ available.")
        `(#:tests? #f                              ; no tests
          #:build-type "Release"))
       (native-inputs
-       `(("gcc" ,gcc-11)))                    ; need C++20-compatible compiler
+       (list gcc-11))                    ; need C++20-compatible compiler
       (inputs
-       `(("sfml" ,sfml)))
+       (list sfml))
       (home-page "https://github.com/sandsmark/Schiffbruch/")
       (synopsis "Pixelart survival game")
       (description
@@ -12671,7 +12467,7 @@ get attention, so you get found.")
                (copy-recursively "data" (string-append bin "/data"))
                (copy-recursively "doc" opt)
                (copy-recursively "mods" opt)))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("sdl" ,(sdl-union (list sdl2
                                        sdl2-image
                                        sdl2-mixer)))))
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index d8494e9c1c..cb79e32a7a 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -30,13 +30,13 @@
 (define-public gawk
   (package
    (name "gawk")
-   (version "5.0.1")
+   (version "5.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gawk/gawk-" version
                                 ".tar.xz"))
             (sha256
-             (base32 "15570p7g2x54asvr2fsc56sxzmm08fbk4mzpcs5n92fp9vq8cklf"))))
+             (base32 "1gc2cccqy1x1bf6rhwlmd8q7dz7gnam6nwgl38bxapv6qm5flpyg"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases (modify-phases %standard-phases
@@ -55,9 +55,7 @@
                              '((substitute* "extension/Makefile.in"
                                  (("^.*: check-for-shared-lib-support" match)
                                   (string-append "### " match))))
-                             '())
-
-                       #t)))
+                             '()))))
 
                  (add-before 'check 'adjust-test-infrastructure
                    (lambda _
@@ -66,18 +64,26 @@
                      (substitute* "test/Makefile"
                        (("\\| more") ""))
 
+                     ;; Silence a warning from bash about not being able
+                     ;; to change to an ISO-8859-1 locale.  The test itself
+                     ;; works fine, but newer versions of bash give a
+                     ;; locale warning which mangles the test output.
+                     (substitute* "test/localenl.sh"
+                       (("for LC_ALL in")
+                        "for LC in")
+                       (("export LC_ALL\n")
+                        "export LC_ALL=$LC 2>/dev/null\n"))
+
                      ;; Adjust the shebang in that file since it is then diff'd
                      ;; against the actual test output.
                      (substitute* "test/watchpoint1.ok"
                        (("#! /usr/bin/gawk")
-                        (string-append "#!" (which "gawk"))))
-                     #t)))))
-
-   (inputs `(("libsigsegv" ,libsigsegv)
+                        (string-append "#!" (which "gawk")))))))))
 
-             ,@(if (%current-target-system)
-                   `(("bash" ,bash))
-                   '())))
+   (inputs (list libsigsegv
+                 ;; Use the full-fledged Bash package, otherwise the test suite
+                 ;; sometimes fail non-deterministically.
+                 bash))
 
    (home-page "https://www.gnu.org/software/gawk/")
    (synopsis "Text scanning and processing language")
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index e7807a4797..f526680f56 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
@@ -47,6 +47,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 regex))
@@ -80,6 +81,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          ;; Cilk has been removed from GCC 8 anyway.
          '("--disable-libcilkrts"))
 
+        ;; glibc needs the 128-bit long double type on these architectures.
+        ((or (string-prefix? "powerpc64le-" target)
+             (string-prefix? "powerpc-" target))
+         '("--with-long-double-128"))
+
         (else
          ;; TODO: Add `arm.*-gnueabi', etc.
          '())))
@@ -165,16 +171,12 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   "lib"                    ;libgcc_s, libgomp, etc. (15+ MiB)
                   "debug"))                ;debug symbols of run-time libraries
 
-       (inputs `(("gmp" ,gmp)
-                 ("mpfr" ,mpfr)
-                 ("mpc" ,mpc)
-                 ("libelf" ,libelf)
-                 ("zlib" ,zlib)))
+       (inputs (list gmp mpfr mpc libelf zlib))
 
        ;; GCC < 5 is one of the few packages that doesn't ship .info files.
        ;; Newer texinfos fail to build the manual, so we use an older one.
-       (native-inputs `(("perl" ,perl)   ;for manpages
-                        ("texinfo" ,texinfo-5)))
+       (native-inputs (list perl ;for manpages
+                            texinfo-5))
 
        (arguments
         `(#:out-of-source? #t
@@ -275,13 +277,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 ~a"
                                libc line))))
 
-                  ;; TODO: Make this unconditional in core-updates.
-                  ,@(if (target-powerpc?)
-                      `((when (file-exists? "gcc/config/rs6000")
-                          ;; Force powerpc libdir to be /lib and not /lib64
-                          (substitute* (find-files "gcc/config/rs6000")
-                            (("/lib64") "/lib"))))
-                      `())
+                  (when (file-exists? "gcc/config/rs6000")
+                    ;; Force powerpc libdir to be /lib and not /lib64
+                    (substitute* (find-files "gcc/config/rs6000")
+                      (("/lib64") "/lib")))
 
                   ;; Don't retain a dependency on the build-time sed.
                   (substitute* "fixincludes/fixincl.x"
@@ -330,8 +329,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   ;; but there's nothing useful to look for here.)
                   (substitute* "gcc/config.in"
                     (("PREFIX_INCLUDE_DIR")
-                     "PREFIX_INCLUDE_DIR_isnt_necessary_here"))
-                  #t)))
+                     "PREFIX_INCLUDE_DIR_isnt_necessary_here")))))
 
             (add-after 'configure 'post-configure
               (lambda _
@@ -339,8 +337,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                 ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
                 (substitute* "Makefile"
                   (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
-                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))
-                #t)))))
+                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))))))
 
        (native-search-paths
         ;; Use the language-specific variables rather than 'CPATH' because they
@@ -388,20 +385,17 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k"
+                   "pa" "sh" "tilepro" "xtensa")))))
     (supported-systems %supported-systems)
     (inputs
-     `(("isl" ,isl-0.11)
-       ("cloog" ,cloog)
-       ,@(package-inputs gcc-4.7)))))
+     (modify-inputs (package-inputs gcc-4.7)
+       (prepend isl-0.11 cloog)))))
 
 (define-public gcc-4.9
   (package (inherit gcc-4.8)
@@ -424,18 +418,16 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
+                   "pa" "sh" "tilepro" "xtensa")))))
     ;; Override inherited texinfo-5 with latest version.
-    (native-inputs `(("perl" ,perl)   ;for manpages
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list perl ;for manpages
+                         texinfo))
     (arguments
      (if (%current-target-system)
          (package-arguments gcc-4.8)
@@ -460,8 +452,18 @@ Go.  It also includes runtime support libraries for these languages.")
                                           ":"))
                      (format #t
                              "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
-                             (getenv "CPLUS_INCLUDE_PATH"))
-                     #t))))))))))
+                             (getenv "CPLUS_INCLUDE_PATH"))))))))))))
+
+(define gcc-canadian-cross-objdump-snippet
+  ;; Fix 'libcc1/configure' error when cross-compiling GCC.  Without that,
+  ;; 'libcc1/configure' wrongfully determines that '-rdynamic' support is
+  ;; missing because $gcc_cv_objdump is empty:
+  ;;
+  ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
+  ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
+  #~(substitute* "libcc1/configure"
+      (("\\$gcc_cv_objdump -T")
+       "$OBJDUMP_FOR_TARGET -T")))
 
 (define-public gcc-5
   ;; Note: GCC >= 5 ships with .info files but 'make install' fails to install
@@ -483,25 +485,15 @@ Go.  It also includes runtime support libraries for these languages.")
                                        "gcc-5-source-date-epoch-2.patch"
                                        "gcc-6-libsanitizer-mode-size.patch"
                                        "gcc-fix-texi2pod.patch"
-                                       "gcc-5-hurd.patch"))
+                                       "gcc-5-hurd.patch"
+                                       ;; See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86162
+                                       "gcc-5-fix-powerpc64le-build.patch"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Fix 'libcc1/configure' error when cross-compiling GCC.
-               ;; Without that, 'libcc1/configure' wrongfully determines that
-               ;; '-rdynamic' support is missing because $gcc_cv_objdump is
-               ;; empty:
-               ;;
-               ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
-               ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
-               '(begin
-                  (substitute* "libcc1/configure"
-                    (("\\$gcc_cv_objdump -T")
-                     "$OBJDUMP_FOR_TARGET -T"))
-                  #t))))
+              (snippet gcc-canadian-cross-objdump-snippet)))
     (inputs
-     `(;; GCC5 needs <isl/band.h> which is removed in later versions.
-       ("isl" ,isl-0.18)
-       ,@(package-inputs gcc-4.7)))))
+     (modify-inputs (package-inputs gcc-4.7)
+       (prepend ;; GCC5 needs <isl/band.h> which is removed in later versions.
+                isl-0.18)))))
 
 (define-public gcc-6
   (package
@@ -565,7 +557,9 @@ It also includes runtime support libraries for these languages.")))
                 "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"))
               (patches (search-patches "gcc-8-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
-                                       "gcc-8-sort-libtool-find-output.patch"))))))
+                                       "gcc-8-sort-libtool-find-output.patch"))
+              (modules '((guix build utils)))
+              (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-9
   (package
@@ -580,7 +574,9 @@ It also includes runtime support libraries for these languages.")))
               "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-9-asan-fix-limits-include.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-10
   (package
@@ -594,7 +590,9 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-11
   (package
@@ -608,11 +606,13 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 ;; Note: When changing the default gcc version, update
 ;;       the gcc-toolchain-* definitions.
-(define-public gcc gcc-7)
+(define-public gcc gcc-10)
 
 (define-public (make-libstdc++ gcc)
   "Return a libstdc++ package based on GCC.  The primary use case is when
@@ -623,25 +623,16 @@ using compilers other than GCC."
     (arguments
      `(#:out-of-source? #t
        #:phases
-       ;; TODO: Use the target-powerpc arm for everyone.
-        ,(if (target-powerpc?)
-           `(modify-phases %standard-phases
-              ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
-              (add-before 'chdir 'fix-rs6000-libdir
-                (lambda _
-                  (when (file-exists? "gcc/config/rs6000")
-                    (substitute* (find-files "gcc/config/rs6000")
-                      (("/lib64") "/lib")))
-                  #t))
-              (add-before 'configure 'chdir
-                (lambda _
-                  (chdir "libstdc++-v3")
-                  #t)))
-           `(alist-cons-before 'configure 'chdir
-              (lambda _
-                (chdir "libstdc++-v3")
-                #t)
-              %standard-phases))
+       (modify-phases %standard-phases
+         ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
+         (add-before 'chdir 'fix-rs6000-libdir
+           (lambda _
+             (when (file-exists? "gcc/config/rs6000")
+               (substitute* (find-files "gcc/config/rs6000")
+                 (("/lib64") "/lib")))))
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "libstdc++-v3"))))
 
        #:configure-flags `("--disable-libstdcxx-pch"
                            ,(string-append "--with-gxx-include-dir="
@@ -692,16 +683,14 @@ using compilers other than GCC."
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
            (lambda _
-             (chdir "libiberty")
-             #t))
+             (chdir "libiberty")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out     (assoc-ref outputs "out"))
                     (lib     (string-append out "/lib/"))
                     (include (string-append out "/include/")))
                (install-file "libiberty.a" lib)
-               (install-file "../include/libiberty.h" include))
-             #t)))))
+               (install-file "../include/libiberty.h" include)))))))
     (inputs '())
     (outputs '("out"))
     (native-inputs '())
@@ -741,10 +730,10 @@ as the 'native-search-paths' field."
         `(modify-phases ,phases
            (add-after 'install 'remove-broken-or-conflicting-files
              (lambda* (#:key outputs #:allow-other-keys)
-               (for-each delete-file
-                         (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))))
+               (for-each
+                delete-file
+                (find-files (string-append (assoc-ref outputs "out") "/bin")
+                            ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
 
 (define* (custom-gcc-gccgo gcc name languages
                            #:optional
@@ -796,12 +785,13 @@ as the 'native-search-paths' field."
 
 (define-public gfortran
   (hidden-package
-   (custom-gcc (package
-                 (inherit gcc)
-                 ;; XXX: Remove LIBSTDC++-HEADERS from the inputs just to
-                 ;; avoid a rebuild of all the GFORTRAN dependents.
-                 ;; TODO: Remove this hack on the next rebuild cycle.
-                 (inputs (alist-delete "libstdc++" (package-inputs gcc))))
+   (custom-gcc gcc
+               "gfortran" '("fortran")
+               %generic-search-paths)))
+
+(define-public gfortran-7
+  (hidden-package
+   (custom-gcc gcc-7
                "gfortran" '("fortran")
                %generic-search-paths)))
 
@@ -839,8 +829,7 @@ as the 'native-search-paths' field."
              (lambda* (#:key outputs #:allow-other-keys)
                (for-each delete-file
                          (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))
+                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))))))))
     (synopsis "GCC library generating machine code on-the-fly at runtime")
     (description
      "This package is part of the GNU Compiler Collection and provides an
@@ -946,7 +935,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc" '("objc")
               %objc-search-paths))
 
-(define-public gcc-objc gcc-objc-7)
+(define-public gcc-objc gcc-objc-10)
 
 (define %objc++-search-paths
   (list (search-path-specification
@@ -988,7 +977,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc++" '("obj-c++")
               %objc++-search-paths))
 
-(define-public gcc-objc++ gcc-objc++-7)
+(define-public gcc-objc++ gcc-objc++-10)
 
 (define (make-libstdc++-doc gcc)
   "Return a package with the libstdc++ documentation for GCC."
@@ -998,13 +987,13 @@ provides the GNU compiler for the Go programming language."))
     (version (package-version gcc))
     (synopsis "GNU libstdc++ documentation")
     (outputs '("out"))
-    (native-inputs `(("doxygen" ,doxygen)
-                     ("texinfo" ,texinfo)
-                     ("libxml2" ,libxml2)
-                     ("libxslt" ,libxslt)
-                     ("docbook-xml" ,docbook-xml)
-                     ("docbook-xsl" ,docbook-xsl)
-                     ("graphviz" ,graphviz))) ;for 'dot', invoked by 'doxygen'
+    (native-inputs (list doxygen
+                         texinfo
+                         libxml2
+                         libxslt
+                         docbook-xml
+                         docbook-xsl
+                         graphviz)) ;for 'dot', invoked by 'doxygen'
     (inputs '())
     (propagated-inputs '())
     (arguments
@@ -1013,8 +1002,7 @@ provides the GNU compiler for the Go programming language."))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir
                               (lambda _
-                                (chdir "libstdc++-v3")
-                                #t))
+                                (chdir "libstdc++-v3")))
                   (add-before 'configure 'set-xsl-directory
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (let ((docbook (assoc-ref inputs "docbook-xsl")))
@@ -1023,8 +1011,7 @@ provides the GNU compiler for the Go programming language."))
                                     (("@XSL_STYLE_DIR@")
                                      (string-append
                                       docbook "/xml/xsl/"
-                                      (strip-store-file-name docbook))))
-                                  #t)))
+                                      (strip-store-file-name docbook)))))))
                   (replace 'build
                            (lambda _
                              ;; XXX: There's also a 'doc-info' target, but it
@@ -1051,7 +1038,7 @@ provides the GNU compiler for the Go programming language."))
 (define-public isl
   (package
     (name "isl")
-    (version "0.22.1")
+    (version "0.23")
     (source (origin
              (method url-fetch)
              (uri (list (string-append
@@ -1062,7 +1049,7 @@ provides the GNU compiler for the Go programming language."))
                                        name "-" version ".tar.bz2")))
              (sha256
               (base32
-               "1kf54jib0nind1pvakblnfhimmwzm0y1llz8470ag0di5vwqwrhs"))))
+               "0k91zck10zxs9sk3yrbb92y1j3w981w3fbwkfwd7kl779b0j52f5"))))
     (build-system gnu-build-system)
     (outputs '("out" "static"))
     (arguments
@@ -1081,9 +1068,8 @@ provides the GNU compiler for the Go programming language."))
                         ;; libtool looks for it in the usual locations.
                         (substitute* (string-append out "/lib/libisl.la")
                           (("^old_library=.*")
-                           "old_library=''\n"))
-                        #t))))))
-    (inputs `(("gmp" ,gmp)))
+                           "old_library=''\n"))))))))
+    (inputs (list gmp))
     (home-page "http://isl.gforge.inria.fr/")
     (synopsis
      "Manipulating sets and relations of integer points \
@@ -1149,8 +1135,7 @@ dependence analysis and bounds on piecewise step-polynomials.")
         "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
       (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
-    (inputs `(("gmp" ,gmp)
-              ("isl" ,isl-0.11)))
+    (inputs (list gmp isl-0.11))
     (arguments '(#:configure-flags '("--with-isl=system")))
     (home-page "http://www.cloog.org/")
     (synopsis "Library to generate code for scanning Z-polyhedra")
@@ -1180,7 +1165,7 @@ effective code.")
                (base32
                 "1sfsj9256w18qzylgag2h5h377aq8in8929svblfnj9svfriqcys"))))
     (build-system gnu-build-system)
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (delete 'configure)
@@ -1208,8 +1193,7 @@ effective code.")
                                            (copy-file file
                                                       (string-append html "/"
                                                                      file)))
-                                         (find-files "." "\\.html$"))
-                               #t))))))
+                                         (find-files "." "\\.html$"))))))))
     (synopsis "Reference manual for the C programming language")
     (description
      "This is a reference manual for the C programming language, as
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 2923358d8f..9e422dbe97 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -42,7 +42,7 @@
     ;; Note: With libgd.org now pointing to github.com, genuine old
     ;; tarballs are no longer available.  Notably, versions 2.0.x are
     ;; missing.
-    (version "2.3.0")
+    (version "2.3.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -50,9 +50,14 @@
                    version "/libgd-" version ".tar.xz"))
              (sha256
               (base32
-               "0n5czhxzinvjvmhkf5l9fwjdx5ip69k5k7pj6zwb6zs1k9dibngc"))
-             (patches (search-patches "gd-fix-tests-on-i686.patch"
-                                      "gd-brect-bounds.patch"))))
+               "1yypywkh8vphcy4qqpf51kxpb0a3r7rjqk3fc61rpn70hiq092j7"))
+             (patches
+              (search-patches "gd-fix-tests-on-i686.patch"
+                              "gd-brect-bounds.patch"
+                              ;; Drop when
+                              ;; https://github.com/libgd/libgd/issues/691
+                              ;; is solved.
+                              "gd-Revert-fix-303-gdlib.pc.patch"))))
     (build-system gnu-build-system)
     (arguments
       ;; As recommended by github.com/libgd/libgd/issues/278 to fix rounding
@@ -61,17 +66,16 @@
        #:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         ;; This test is known to fail on i686-linux:
+         ;; This test is known to fail on most architectures:
          ;; https://github.com/libgd/libgd/issues/359
          ;; TODO Replace this substitution with an upstream bug fix.
          (add-after 'unpack 'disable-failing-test
            (lambda _
              (substitute* "tests/gdimagegrayscale/basic.c"
                (("return gdNumFailures\\(\\)")
-                 "return 0"))
-             #t)))))
+                 "return 0")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -111,7 +115,7 @@ most common applications of GD involve website development.")
        ("libjpeg" ,libjpeg-turbo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-pkgconfig))
     (arguments
      `(#:make-maker-flags
        (list (string-append "--lib_jpeg_path="
@@ -141,10 +145,9 @@ you can create PNG images on the fly or modify existing files.")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-gd" ,perl-gd)
-       ("perl-image-magick" ,perl-image-magick)))
+     (list perl-gd perl-image-magick))
     (home-page "https://metacpan.org/release/GD-SecurityImage")
     (synopsis "Security image generator")
     (description "This module provides a basic interface to create
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 8c28f82992..aa9e479e46 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -4,7 +4,8 @@
 ;;; Copyright © 2015, 2016, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
 
 (define-module (gnu packages gdb)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages readline)
@@ -34,65 +36,74 @@
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages pkg-config)
+  #:use-module (guix download)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix packages)
-  #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (srfi srfi-1))
 
-(define-public gdb-10
+(define-public gdb-11
   (package
     (name "gdb")
-    (version "10.2")
+    (version "11.1")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnu/gdb/gdb-"
-                                 version ".tar.xz"))
-             (sha256
-              (base32
-               "0aag1c0fw875pvhjg1qp7x8pf6gf92bjv5gcic5716scacyj58da"))))
-
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gdb/gdb-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "151z6d0265hv9cgx9zqqa4bd6vbp20hrljhd6bxl7lr0gd0crkyc"))))
     (build-system gnu-build-system)
+    (outputs '("out" "debug"))
     (arguments
-     `(#:tests? #f ; FIXME "make check" fails on single-processor systems.
-
+     `(#:tests? #f                      ;FIXME: 217 unexpected failures
        #:out-of-source? #t
-
        #:modules ((srfi srfi-1)
                   ,@%gnu-build-system-modules)
-
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'configure 'post-configure
-                   (lambda _
-                     (for-each patch-makefile-SHELL
-                               (find-files "." "Makefile\\.in"))
-                     #t))
-                  (add-after
-                   'install 'remove-libs-already-in-binutils
-                   (lambda* (#:key native-inputs inputs outputs
-                             #:allow-other-keys)
-                     ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
-                     ;; However, this leads to collisions when both are
-                     ;; installed, and really is none of its business,
-                     ;; conceptually.  So remove them.
-                     (let* ((binutils (or (assoc-ref inputs "binutils")
-                                          (assoc-ref native-inputs "binutils")))
-                            (out      (assoc-ref outputs "out"))
-                            (files1   (with-directory-excursion binutils
-                                        (append (find-files "lib")
-                                                (find-files "include"))))
-                            (files2   (with-directory-excursion out
-                                        (append (find-files "lib")
-                                                (find-files "include"))))
-                            (common   (lset-intersection string=?
-                                                         files1 files2)))
-                       (with-directory-excursion out
-                         (for-each delete-file common)
-                         #t)))))))
+                  (add-after 'unpack 'patch-paths
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((sh (string-append (assoc-ref inputs "bash")
+                                               "/bin/sh")))
+                        (substitute* '("gdb/ser-pipe.c"
+                                       "gdbsupport/pathstuff.cc")
+                          (("\"/bin/sh\"")
+                           (format #f "~s" sh))))))
+                  ,@(if (hurd-target?)
+                        '((add-after 'unpack 'patch-gdb/hurd
+                            (lambda* (#:key inputs #:allow-other-keys)
+                              (let ((patch (assoc-ref inputs "hurd-build.patch")))
+                                (invoke "patch" "-p1" "--force" "-i" patch)))))
+                        '())
+                  (add-after 'configure 'post-configure
+                    (lambda _
+                      (for-each patch-makefile-SHELL
+                                (find-files "." "Makefile\\.in"))))
+                  (add-after 'install 'remove-libs-already-in-binutils
+                    (lambda* (#:key native-inputs inputs outputs
+                              #:allow-other-keys)
+                      ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
+                      ;; However, this leads to collisions when both are
+                      ;; installed, and really is none of its business,
+                      ;; conceptually.  So remove them.
+                      (let* ((binutils (or (assoc-ref inputs "binutils")
+                                           (assoc-ref native-inputs "binutils")))
+                             (out      (assoc-ref outputs "out"))
+                             (files1   (with-directory-excursion binutils
+                                         (append (find-files "lib")
+                                             (find-files "include"))))
+                             (files2   (with-directory-excursion out
+                                         (append (find-files "lib")
+                                             (find-files "include"))))
+                             (common   (lset-intersection string=?
+                                                          files1 files2)))
+                        (with-directory-excursion out
+                          (for-each delete-file common))))))))
     (inputs
-     `(("expat" ,expat)
+     `(("bash" ,bash)
+       ("expat" ,expat)
        ("mpfr" ,mpfr)
        ("gmp" ,gmp)
        ("readline" ,readline)
@@ -106,18 +117,28 @@
        ("libxml2" ,libxml2)
 
        ;; The Hurd needs -lshouldbeinlibc.
-       ,@(if (hurd-target?) `(("hurd" ,hurd)) '())))
+       ,@(if (hurd-target?)
+             `(("hurd" ,hurd)
+               ("hurd-build.patch"
+                ,(search-patch "gdb-fix-gnu-nat-build.patch")))
+             '())))
     (native-inputs
-      `(("texinfo" ,texinfo)
-        ("dejagnu" ,dejagnu)
-        ("pkg-config" ,pkg-config)
-        ,@(if (hurd-target?)
-              ;; When cross-compiling from x86_64-linux, make sure to use a
-              ;; 32-bit MiG because we assume target i586-pc-gnu.
-              `(("mig" ,(if (%current-target-system)
-                            mig/32-bit
-                            mig)))
-              '())))
+     `(("texinfo" ,texinfo)
+       ("dejagnu" ,dejagnu)
+       ("pkg-config" ,pkg-config)
+       ,@(if (hurd-target?)
+             ;; When cross-compiling from x86_64-linux, make sure to use a
+             ;; 32-bit MiG because we assume target i586-pc-gnu.
+             `(("mig" ,(if (%current-target-system)
+                           mig/32-bit
+                           mig)))
+             '())))
+    ;; TODO: Add support for the GDB_DEBUG_FILE_DIRECTORY environment
+    ;; variable in GDB itself instead of relying on some glue code in
+    ;; the Guix-provided .gdbinit file.
+    (native-search-paths (list (search-path-specification
+                                (variable "GDB_DEBUG_FILE_DIRECTORY")
+                                (files '("lib/debug")))))
     (home-page "https://www.gnu.org/software/gdb/")
     (synopsis "The GNU debugger")
     (description
@@ -128,31 +149,13 @@ the program is running to try to fix bugs.  It can be used to debug programs
 written in C, C++, Ada, Objective-C, Pascal and more.")
     (license gpl3+)))
 
-;; This version of GDB is required by some of the Rust compilers, see
-;; <https://bugs.gnu.org/37810>.
-(define-public gdb-8.2
-  (package
-    (inherit gdb-10)
-    (version "8.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/gdb/gdb-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "00i27xqawjv282a07i73lp1l02n0a3ywzhykma75qg500wll6sha"))))
-    (inputs
-     (alist-replace "guile" (list guile-2.0)
-                    (package-inputs gdb-10)))))
-
 (define-public gdb
   ;; This is the fixed version that packages depend on.  Update it rarely
   ;; enough to avoid massive rebuilds.
-  gdb-10)
+  gdb-11)
 
 (define-public gdb-minimal
-  (package/inherit
-   gdb
-   (name "gdb-minimal")
-   (inputs (fold alist-delete (package-inputs gdb)
-                 '("libxml2" "ncurses" "python-wrapper" "source-highlight")))))
+  (package/inherit gdb
+    (name "gdb-minimal")
+    (inputs (fold alist-delete (package-inputs gdb)
+                  '("libxml2" "ncurses" "python-wrapper" "source-highlight")))))
diff --git a/gnu/packages/genealogy.scm b/gnu/packages/genealogy.scm
index 6e506f5d64..b8bd4339b9 100644
--- a/gnu/packages/genealogy.scm
+++ b/gnu/packages/genealogy.scm
@@ -54,26 +54,26 @@
      `(("gettext" ,gettext-minimal)
        ("intltool" ,intltool)))
     (inputs
-     `(("cairo" ,cairo)
-       ("font-gnu-freefont" ,font-gnu-freefont)
-       ("geocode-glib" ,geocode-glib)
-       ("gexiv2" ,gexiv2)
-       ("ghostscript" ,ghostscript)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("graphviz" ,graphviz)
-       ("librsvg" ,librsvg)
-       ("osm-gps-map" ,osm-gps-map)
-       ("pango" ,pango)
-       ("python-bsddb3" ,python-bsddb3)
-       ("python-pillow" ,python-pillow)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyicu" ,python-pyicu)
-       ("rcs" ,rcs)
-       ("sqlite" ,sqlite)
-       ("xdg-utils" ,xdg-utils)))
+     (list cairo
+           font-gnu-freefont
+           geocode-glib
+           gexiv2
+           ghostscript
+           gobject-introspection
+           gtk+
+           gtkspell3
+           graphviz
+           librsvg
+           osm-gps-map
+           pango
+           python-bsddb3
+           python-pillow
+           python-pycairo
+           python-pygobject
+           python-pyicu
+           rcs
+           sqlite
+           xdg-utils))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
diff --git a/gnu/packages/genimage.scm b/gnu/packages/genimage.scm
index f5574b04ee..eb50141374 100644
--- a/gnu/packages/genimage.scm
+++ b/gnu/packages/genimage.scm
@@ -41,96 +41,98 @@
   #:use-module (gnu packages virtualization))
 
 (define-public genimage
-  (package
-    (name "genimage")
-    (version "14")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/pengutronix/genimage")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1l45djpbaffhyw0allq3mgzwrdilk05iyj0nvp8l3s47vnp5bnbs"))
-              (patches
-               (search-patches "genimage-mke2fs-test.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules
-       ((ice-9 match)
-        ,@%gnu-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'guixify
-           (lambda* (#:key inputs #:allow-other-keys)
-             (map (match-lambda
-                    ((input directory regexp)
-                     (substitute* "config.c"
-                       (((format #f "\\.def = \"(~a)\"" regexp) _ command)
-                        (format #f ".def = \"~a/~a/~a\""
-                                (assoc-ref inputs input) directory command)))))
-                  '(("cpio"           "bin"  "cpio")
-                    ("coreutils"      "bin"  "dd")
-                    ("e2fsprogs"      "sbin" "debugfs|e2fsck|mke2fs|tune2fs")
-                    ("genext2fs"      "bin"  "genext2fs")
-                    ("cdrkit-libre"   "bin"  "genisoimage")
-                    ("mtools"         "bin"  "mcopy|mmd")
-                    ;; mkcramfs is obsolete.
-                    ("dosfstools"     "sbin" "mkdosfs")
-                    ("mtd-utils"      "sbin" "mkfs.(jffs2|ubifs)|ubinize")
-                    ("squashfs-tools" "bin"  "mksquashfs")
-                    ("qemu"           "bin"  "qemu-img")
-                    ("tar"            "bin"  "tar")
-                    ("u-boot-tools"   "bin"  "mkimage")))
-             (substitute* "util.c"
-               (("\"/bin/sh\"")
-                (string-append "\"" (assoc-ref inputs "bash") "/bin/sh\"")))))
-         (add-before 'check 'fix-failing-tests
-           (lambda _
-             ;; We don't have /etc/passwd so uid 0 is not known as "root".
-             ;; Thus patch it out.
-             (substitute* '("test/ext2test.dump"
-                            "test/ext3test.dump"
-                            "test/ext4test.dump"
-                            "test/ext2test-percent.dump"
-                            "test/mke2fs.dump")
-               (("root") "unknown"))))
-         (add-before 'check 'setenv-check
-           (lambda _
-             ;; Our container doesn't provide access to /etc/mtab
-             (setenv "EXT2FS_NO_MTAB_OK" "1")
-             ;; Make test reproducible
-             (setenv "GENIMAGE_MKFJFFS2" "mkfs.jffs2 -U")
-             (setenv "GENIMAGE_MKE2FS" "mke2fs -E no_copy_xattrs")))
-         (replace 'check
-           (lambda _
-             (invoke "make" "TEST_LOG_COMPILER=" "check"))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ;;; Note: cramfs is obsolete.
-       ("dtc" ,dtc) ; for the tests
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux))) ; for the tests
-    (inputs
-     `(("bash" ,bash)
-       ("cdrkit-libre" ,cdrkit-libre)
-       ("cpio" ,cpio)
-       ;; Note: invoked by final executable.
-       ("coreutils" ,coreutils) ; chmod, dd
-       ("dosfstools" ,dosfstools)
-       ("e2fsprogs" ,e2fsprogs)
-       ("genext2fs" ,genext2fs)
-       ("libconfuse" ,libconfuse)
-       ("mtd-utils" ,mtd-utils)
-       ("mtools" ,mtools)
-       ("qemu" ,qemu-minimal)
-       ("squashfs-tools" ,squashfs-tools)
-       ("tar" ,tar)
-       ("u-boot-tools" ,u-boot-tools)))
-    (synopsis "Create Flash images according to specification")
-    (description "@command{genimage} creates Flash images according to a
+  (let ((commit "11bb04455eaf5434f0723c91a2224918ebd0a196")
+        (revision "1"))
+    (package
+      (name "genimage")
+      (version (git-version "14" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pengutronix/genimage")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1dq3lk0awk12v2aidry35gvrci5a3nr6rzcq0j9hyyf0w1z1rn0l"))
+                (patches
+                 (search-patches "genimage-mke2fs-test.patch"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:modules
+         ((ice-9 match)
+          ,@%gnu-build-system-modules)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'guixify
+             (lambda* (#:key inputs #:allow-other-keys)
+               (map (match-lambda
+                      ((input directory regexp)
+                       (substitute* "config.c"
+                         (((format #f "\\.def = \"(~a)\"" regexp) _ command)
+                          (format #f ".def = \"~a/~a/~a\""
+                                  (assoc-ref inputs input) directory command)))))
+                    '(("cpio"           "bin"  "cpio")
+                      ("coreutils"      "bin"  "dd")
+                      ("e2fsprogs"      "sbin" "debugfs|e2fsck|mke2fs|tune2fs")
+                      ("genext2fs"      "bin"  "genext2fs")
+                      ("cdrkit-libre"   "bin"  "genisoimage")
+                      ("mtools"         "bin"  "mcopy|mmd")
+                      ;; mkcramfs is obsolete.
+                      ("dosfstools"     "sbin" "mkdosfs")
+                      ("mtd-utils"      "sbin" "mkfs.(jffs2|ubifs)|ubinize")
+                      ("squashfs-tools" "bin"  "mksquashfs")
+                      ("qemu"           "bin"  "qemu-img")
+                      ("tar"            "bin"  "tar")
+                      ("u-boot-tools"   "bin"  "mkimage")))
+               (substitute* "util.c"
+                 (("\"/bin/sh\"")
+                  (string-append "\"" (assoc-ref inputs "bash") "/bin/sh\"")))))
+           (add-before 'check 'fix-failing-tests
+             (lambda _
+               ;; We don't have /etc/passwd so uid 0 is not known as "root".
+               ;; Thus patch it out.
+               (substitute* '("test/ext2test.0.dump"
+                              "test/ext3test.0.dump"
+                              "test/ext4test.0.dump"
+                              "test/ext2test-percent.0.dump"
+                              "test/mke2fs.0.dump")
+                 (("root") "unknown"))))
+           (add-before 'check 'setenv-check
+             (lambda _
+               ;; Our container doesn't provide access to /etc/mtab
+               (setenv "EXT2FS_NO_MTAB_OK" "1")
+               ;; Make test reproducible
+               (setenv "GENIMAGE_MKFJFFS2" "mkfs.jffs2 -U")
+               (setenv "GENIMAGE_MKE2FS" "mke2fs -E no_copy_xattrs")))
+           (replace 'check
+             (lambda _
+               (invoke "make" "TEST_LOG_COMPILER=" "check"))))))
+      (native-inputs
+       (list autoconf
+             automake
+             ;;; Note: cramfs is obsolete.
+             dtc ; for the tests
+             pkg-config
+             util-linux)) ; for the tests
+      (inputs
+       `(("bash" ,bash)
+         ("cdrkit-libre" ,cdrkit-libre)
+         ("cpio" ,cpio)
+         ;; Note: invoked by final executable.
+         ("coreutils" ,coreutils) ; chmod, dd
+         ("dosfstools" ,dosfstools)
+         ("e2fsprogs" ,e2fsprogs)
+         ("genext2fs" ,genext2fs)
+         ("libconfuse" ,libconfuse)
+         ("mtd-utils" ,mtd-utils)
+         ("mtools" ,mtools)
+         ("qemu" ,qemu-minimal)
+         ("squashfs-tools" ,squashfs-tools)
+         ("tar" ,tar)
+         ("u-boot-tools" ,u-boot-tools)))
+      (synopsis "Create Flash images according to specification")
+      (description "@command{genimage} creates Flash images according to a
 specification file.")
-    (home-page "https://github.com/pengutronix/genimage")
-    (license license:gpl2)))
+      (home-page "https://github.com/pengutronix/genimage")
+      (license license:gpl2))))
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 927ddb167d..5fb0f633a3 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -59,6 +59,7 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -165,10 +166,9 @@
        ("seed" ,seed)
        ("vala" ,vala)))
     (inputs
-     `(("expat" ,expat)
-       ("glib" ,glib)))
+     (list expat glib))
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (synopsis "Map-rendering for OpenSteetMap")
     (description "Memphis is a map-rendering application and a library for
 OpenStreetMap written in C using eXpat, Cairo and GLib.")
@@ -198,7 +198,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                         (("/bin/sh") (which "sh")))
                       #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://geos.osgeo.org/")
     (synopsis "Geometry Engine for Geographic Information Systems")
     (description
@@ -215,41 +215,32 @@ topology functions.")
 (define-public gnome-maps
   (package
     (name "gnome-maps")
-    (version "3.38.5")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1llgzm2ni3iy31dznqkc81vadv0fpqgpz2l9zzrj5jshvyq0akgh"))))
+                "037xmkmcmcw87vb1c1s3y225m8757k331cvk1m8cshf6mx61p0l1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'patch-dbus-service
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "data/org.gnome.Maps.service.in"
                (("@pkgdatadir@/org.gnome.Maps")
-                (string-append  (assoc-ref outputs "out") "/bin/gnome-maps")))
-             #t))
-         (add-after 'unpack 'fix-broken-tests
-           (lambda _
-             ;; For some reason setting LC_ALL=C and LANG=C as done in the
-             ;; build system does not prevent these gratuitous commas from
-             ;; being inserted.
-             (substitute* "tests/utilsTest.js"
-               (("1001 m") "1,001 m")
-               (("1000 ft") "1,000 ft")
-               (("5282 ft") "5,282 ft"))))
+                (string-append  (assoc-ref outputs "out")
+                                "/bin/gnome-maps")))))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -287,11 +278,12 @@ topology functions.")
        ("folks" ,folks)
        ("libchamplain" ,libchamplain)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libgweather" ,libgweather)
        ("libxml2" ,libxml2)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib-networking" ,glib-networking)
        ("geoclue" ,geoclue)
        ("geocode-glib" ,geocode-glib)
@@ -302,7 +294,7 @@ topology functions.")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
        ("rest" ,rest)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Graphical map viewer and wayfinding program")
     (description "GNOME Maps is a graphical map viewer.  It uses map data from
 the OpenStreetMap project.  It can provide directions for walking, bicycling,
@@ -334,12 +326,10 @@ and driving.")
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libtiff zlib))
     (propagated-inputs
-     `(;; libgeotiff headers include proj headers, so ensure those are available.
-       ("proj" ,proj)))
+     (list ;; libgeotiff headers include proj headers, so ensure those are available.
+           proj))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -374,27 +364,27 @@ writing GeoTIFF information tags.")
          "1x24gqp4hsq97c31ncwxblab0x0863q8v1z42jil7lvsq3glqa7p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("curl" ,curl)
-       ("freetype" ,freetype)
-       ("freexl" ,freexl)
-       ("giflib" ,giflib)
-       ("libgeotiff" ,libgeotiff)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("librttopo" ,librttopo)
-       ("libspatialite" ,libspatialite)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("minizip" ,minizip)
-       ("openjpeg" ,openjpeg)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zstd" ,zstd "lib")))
+     (list cairo
+           curl
+           freetype
+           freexl
+           giflib
+           libgeotiff
+           libjpeg-turbo
+           libpng
+           librttopo
+           libspatialite
+           libtiff
+           libwebp
+           libxml2
+           lz4
+           minizip
+           openjpeg
+           proj
+           sqlite
+           `(,zstd "lib")))
     (synopsis "Library to work with huge raster coverages using a SpatiaLite")
     (description
      "librasterlite2 is a library that stores and retrieves huge raster
@@ -451,12 +441,9 @@ coverages using a SpatiaLite DBMS.")
                              (string-append "LIBTOOLIZE=" libtoolize "\n"))))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (synopsis "Library to handle SQL/MM topologies")
     (description
      "The RT Topology Library exposes an API to create and manage standard
@@ -478,28 +465,26 @@ coverages using a SpatiaLite DBMS.")
          "164y82rw2lrp5glfc0rkn7n6xvx5dvlgmh7bb7815067251wkjzf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freexl" ,freexl)
-       ("geos" ,geos)
-       ("librttopo" ,librttopo)
-       ("libxml2" ,libxml2)
-       ("minizip" ,minizip)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)))
+     (list freexl
+           geos
+           librttopo
+           libxml2
+           minizip
+           proj
+           sqlite))
     (arguments
      `(#:configure-flags
        '("--enable-rttopo=yes")
        #:phases
        (modify-phases %standard-phases
-         ;; 3 tests are failing, ignore them:
+         ;; 1 test is failing, ignore it:
          (add-after 'unpack 'ignore-broken-tests
            (lambda _
              (substitute* '("test/Makefile.in")
-               (("\tcheck_sql_stmt.* (check_sql_.*)" all tiny) (string-append "\t" tiny))
-               (("(\tch.*) check_v.*ble2.*$" all vt1) (string-append vt1 " \\\n"))
-               (("\tch.* (check_v.*ble4.*)$" all vt4) (string-append "\t" vt4)))
-             #t)))))
+               (("check_wms\\$\\(EXEEXT\\) check_drop_rename\\$\\(EXEEXT\\) ")
+                "check_wms$(EXEEXT) ")))))))
     (synopsis "Extend SQLite to support Spatial SQL capabilities")
     (description
      "SpatiaLite is a library intended to extend the SQLite core to support
@@ -531,13 +516,9 @@ fully fledged Spatial SQL capabilities.")
     (arguments
      `(#:configure-flags '("-DUSE_EXTERNAL_GTEST=ON")))
     (inputs
-     `(("curl" ,curl)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("sqlite" ,sqlite)))
+     (list curl libjpeg-turbo libtiff sqlite))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://proj.org/")
     (synopsis "Coordinate transformation software")
     (description
@@ -588,7 +569,7 @@ lets developers use the functionality of Proj in their own software.")
                (("\tPROJ_LIB.*" all) (string-append  "#" all)))
              #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://proj.org/")
     (synopsis "Cartographic Projections Library")
     (description
@@ -627,15 +608,12 @@ projections.")
                  (("(internal_datadir = ).*$" all var)
                   (string-append var "Path(\"" proj "/share/proj\")\n")))))))))
     (inputs
-      `(("proj" ,proj)))
+      (list proj))
     (propagated-inputs
-      `(("python-certifi" ,python-certifi)))
+      (list python-certifi))
     (native-inputs
-      `(("python-cython" ,python-cython)
-        ("python-numpy" ,python-numpy)
-        ("python-pandas" ,python-pandas)
-        ("python-pytest" ,python-pytest)
-        ("python-xarray" ,python-xarray)))
+      (list python-cython python-numpy python-pandas python-pytest
+            python-xarray))
     (home-page "https://github.com/pyproj4/pyproj")
     (synopsis
       "Python interface to PROJ")
@@ -670,23 +648,23 @@ projections and coordinate transformations library.")
              (when tests?
                (invoke "pytest" "-m" "not network and not wheel")))))))
     (inputs
-      `(("gdal" ,gdal)))
+      (list gdal))
     (propagated-inputs
-      `(("python-attrs" ,python-attrs)
-        ("python-certifi" ,python-certifi)
-        ("python-click" ,python-click)
-        ("python-click-plugins" ,python-click-plugins)
-        ("python-cligj" ,python-cligj)
-        ("python-munch" ,python-munch)
-        ("python-setuptools" ,python-setuptools)
-        ("python-six" ,python-six)
-        ("python-pytz" ,python-pytz)))
+      (list python-attrs
+            python-certifi
+            python-click
+            python-click-plugins
+            python-cligj
+            python-munch
+            python-setuptools
+            python-six
+            python-pytz))
     (native-inputs
-      `(("gdal" ,gdal) ; for gdal-config
-        ("python-boto3" ,python-boto3)
-        ("python-cython" ,python-cython)
-        ("python-pytest" ,python-pytest)
-        ("python-pytest-cov" ,python-pytest-cov)))
+      (list gdal ; for gdal-config
+            python-boto3
+            python-cython
+            python-pytest
+            python-pytest-cov))
     (home-page "https://github.com/Toblerity/Fiona")
     (synopsis
       "Fiona reads and writes spatial data files")
@@ -726,12 +704,9 @@ pyproj, Rtree, and Shapely.")
                        ; Disable tests that require internet access.
                        "-m" "not web")))))))
     (propagated-inputs
-      `(("python-fiona" ,python-fiona)
-        ("python-pandas" ,python-pandas)
-        ("python-pyproj" ,python-pyproj)
-        ("python-shapely" ,python-shapely)))
+      (list python-fiona python-pandas python-pyproj python-shapely))
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "http://geopandas.org")
     (synopsis "Geographic pandas extensions")
     (description "The goal of GeoPandas is to make working with
@@ -756,21 +731,21 @@ require a spatial database such as PostGIS.")
          "06frcikaj2mgz3abfk5h0z4j3hbksi0zikwjngbjv4p5f3pwxf8q"))))
     (build-system scons-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("cairo" ,cairo)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("icu4c" ,icu4c)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("libxml2" ,libxml2)
-       ("proj.4" ,proj.4)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list boost
+           cairo
+           freetype
+           harfbuzz
+           icu4c
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           libxml2
+           proj.4
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:scons ,scons-python2
        #:scons-flags
@@ -811,28 +786,28 @@ development.")
         (base32 "0cyv4cycl073p9lnnnglcb72qn71g8h9g5zn4gzw7swcy5nxjj5s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("giflib" ,giflib)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("librasterlite2" ,librasterlite2)
-       ("librttopo" ,librttopo)
-       ("libspatialite" ,libspatialite)
-       ("libwebp" ,libwebp)
-       ("libxlsxwriter" ,libxlsxwriter)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("minizip" ,minizip)
-       ("openjpeg" ,openjpeg)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("virtualpg" ,virtualpg)
-       ("wxwidgets" ,wxwidgets)
-       ("zstd" ,zstd "lib")))
+     (list curl
+           freexl
+           geos
+           giflib
+           libjpeg-turbo
+           librasterlite2
+           librttopo
+           libspatialite
+           libwebp
+           libxlsxwriter
+           libxml2
+           lz4
+           minizip
+           openjpeg
+           postgresql
+           proj
+           sqlite
+           virtualpg
+           wxwidgets
+           `(,zstd "lib")))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-gui
@@ -904,24 +879,24 @@ development.")
              (substitute* "frmts/mrf/mrf_band.cpp"
                (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
     (inputs
-     `(("expat" ,expat)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("giflib" ,giflib)
-       ("json-c" ,json-c)
-       ("libgeotiff" ,libgeotiff)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("netcdf" ,netcdf)
-       ("pcre" ,pcre)
-       ("postgresql" ,postgresql) ; libpq
-       ("proj" ,proj)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list expat
+           freexl
+           geos
+           giflib
+           json-c
+           libgeotiff
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           netcdf
+           pcre
+           postgresql ; libpq
+           proj
+           sqlite
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gdal.org/")
     (synopsis "Raster and vector geospatial data format library")
     (description "GDAL is a translator library for raster and vector geospatial
@@ -964,9 +939,9 @@ utilities for data translation and processing.")
              #t)))))
     (native-inputs '())
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (inputs
-     `(("gdal" ,gdal)))
+     (list gdal))
     (synopsis "GDAL (Geospatial Data Abstraction Library) python bindings")))
 
 (define-public python-pyshp
@@ -992,8 +967,7 @@ utilities for data translation and processing.")
                ;; This is the only test file.
                (invoke "python" "-m" "pytest" "test_shapefile.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/GeospatialPython/pyshp")
     (synopsis "Read/write support for ESRI Shapefile format")
     (description
@@ -1025,19 +999,16 @@ utilities for data translation and processing.")
                        ;; This one too but it's not marked as such.
                        "-k" "not test_gridliner_labels_bbox_style")))))))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pykdtree" ,python-pykdtree)
-       ("python-pyshp" ,python-pyshp)
-       ("python-scipy" ,python-scipy)
-       ("python-shapely" ,python-shapely)))
+     (list python-matplotlib
+           python-numpy
+           python-pykdtree
+           python-pyshp
+           python-scipy
+           python-shapely))
     (inputs
-     `(("geos" ,geos)
-       ("proj" ,proj)))
+     (list geos proj))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-flufl-lock python-pytest))
     (home-page "https://scitools.org.uk/cartopy/docs/latest/")
     (synopsis "Cartographic library for visualisation")
     (description
@@ -1094,8 +1065,7 @@ Shapely capabilities
        ("protobuf-c" ,protobuf-c)
        ("proj" ,proj)))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (home-page "https://postgis.net")
     (synopsis "Spatial database extender for PostgreSQL")
     (description "PostGIS is a spatial database extender for PostgreSQL
@@ -1178,8 +1148,7 @@ delivered to any client.")
                (("0.0.0-dev") ,version))
              #t)))))
     (inputs
-     `(("geos" ,geos)
-       ("leveldb" ,leveldb)))
+     (list geos leveldb))
     (home-page "https://imposm.org/")
     (synopsis "OpenStreetMap importer for PostGIS")
     (description "Imposm is an importer for OpenStreetMap data.  It reads PBF
@@ -1207,18 +1176,18 @@ to create databases that are optimized for rendering/tile/map-services.")
         (base32 "0xw71lrw4q4sdm51rl0zg87ywxfkxbw9h52zqim0z0xl5qh5q8xf"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("gdal" ,gdal)
-       ("geos" ,geos)
-       ("proj" ,proj)
-       ("protozero" ,protozero)
-       ("sparsehash" ,sparsehash)
-       ("utfcpp" ,utfcpp)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           expat
+           gdal
+           geos
+           proj
+           protozero
+           sparsehash
+           utfcpp
+           zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://osmcode.org/libosmium/")
     (synopsis "C++ library for working with OpenStreetMap data")
     (description "Libosmium is a fast and flexible C++ library for working with
@@ -1255,18 +1224,17 @@ OpenStreetMap data.")
                             (assoc-ref %build-inputs "protozero")
                             "/include"))))
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("libosmium" ,libosmium)
-       ("lua" ,lua)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("protozero" ,protozero)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           expat
+           libosmium
+           lua
+           postgresql
+           proj
+           protozero
+           zlib))
     (native-inputs
-     `(("python" ,python)
-       ("python-psycopg2" ,python-psycopg2)))
+     (list python python-psycopg2))
     (home-page "https://github.com/openstreetmap/osm2pgsql")
     (synopsis "OSM data importer to postgresql")
     (description "Osm2pgsql is a tool for loading OpenStreetMap data into a
@@ -1296,9 +1264,7 @@ map, geocoding with Nominatim, or general analysis.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (inputs
-     `(("perl" ,perl)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list perl sqlite zlib))
     (home-page "https://github.com/mapbox/tippecanoe")
     (synopsis "Vector tile server for maps")
     (description "Tippecanoe creates scale-independent view of data, so that
@@ -1322,10 +1288,9 @@ dropping features at lower levels.")
          "1m8d3r1q1v05pkr8k9czrmb4xjszw6hvgsf3kn9pf0v14gpn4r8f"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://gitlab.com/osm-c-tools/osmctools")
     (synopsis "Tools to convert, filter and update OpenStreetMap data files")
     (description "This project contains a few tools which are used in the
@@ -1348,15 +1313,9 @@ OpenStreetMap data files.")
          "11imsf4cz1dpxdjh178k2s29axmq86rkfg1pqmn7incyxmjzhbwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gnome-common gtk-doc/stable pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)))
+     (list cairo glib gobject-introspection gtk+ libsoup-minimal-2))
     (home-page "https://nzjrs.github.io/osm-gps-map/")
     (synopsis "GTK+ widget for displaying OpenStreetMap tiles")
     (description
@@ -1376,6 +1335,7 @@ map display.  Downloads map data from a number of websites, including
                      (url "https://github.com/opengribs/XyGrib")
                      (commit (string-append "v" version))))
               (file-name (git-file-name name version))
+              (patches (search-patches "xygrib-fix-finding-data.patch"))
               (sha256
                (base32
                 "0xzsm8pr0zjk3f8j880fg5n82jyxn8xf1330qmmq1fqv7rsrg9ia"))
@@ -1390,18 +1350,15 @@ map display.  Downloads map data from a number of websites, including
                   #t))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags (list "-DGNU_PACKAGE=ON")
+
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-directories
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((jpeg (assoc-ref inputs "openjpeg"))
                    (font (assoc-ref inputs "font-liberation")))
                (substitute* "CMakeLists.txt"
-                 ;; Find libjpeg.
-                 (("/usr") jpeg)
-                 ;; Fix install locations.
-                 (("set\\(PREFIX_BIN.*") "set(PREFIX_BIN \"bin\")\n")
-                 (("set\\(PREFIX_PKGDATA.*") "set(PREFIX_PKGDATA \"share/${PROJECT_NAME}\")\n")
                  ;; Skip looking for the static library.
                  (("\"libnova.a\"") ""))
                ;; Don't use the bundled font-liberation.
@@ -1410,20 +1367,23 @@ map display.  Downloads map data from a number of websites, including
                   (string-append "\"" font "/share/fonts/truetype/\"")))
                (substitute* "src/util/Util.h"
                  (("pathData\\(\\)\\+\"data/fonts/\"")
-                  (string-append "\"" font "/share/fonts/\""))))
-             #t)))
+                  (string-append "\"" font "/share/fonts/\"")))))))
        #:tests? #f)) ; no tests
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("font-liberation" ,font-liberation)
-       ("libnova" ,libnova)
-       ("libpng" ,libpng)
-       ("openjpeg" ,openjpeg)
-       ("proj" ,proj)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list bzip2
+           font-liberation
+           libnova
+           libpng
+           openjpeg
+           proj
+           qtbase-5
+           zlib))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
     (synopsis "Weather Forecast Visualization")
     (description
      "XyGrib is a Grib file reader and visualizes meteorological data providing
@@ -1496,11 +1456,9 @@ persisted.
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-wheel" ,python-wheel)))
+     (list python-numpy python-pytest python-wheel))
     (inputs
-     `(("libspatialindex" ,libspatialindex)))
+     (list libspatialindex))
     (home-page "https://github.com/Toblerity/rtree")
     (synopsis "R-Tree spatial index for Python GIS")
     (description
@@ -1521,7 +1479,7 @@ persisted.
                 "0sy6r5fkbb9bclw0is6gwnbzz627m7pjfnsqydxz58pbndakkhrv"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:build-target "pack"
        #:tests? #f; No tests
@@ -1577,11 +1535,9 @@ an independent project by the JOSM team.")
                        file))
              #t)))))
     (inputs
-     `(("java-jetbrains-annotations" ,java-jetbrains-annotations)))
+     (list java-jetbrains-annotations))
     (native-inputs
-     `(("javacc" ,javacc)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list javacc java-junit java-hamcrest-core))
     (home-page "https://github.com/simonpoole/OpeningHoursParser")
     (synopsis "Java parser for the OpenStreetMap opening hour format")
     (description "This is a very simplistic parser for string values according
@@ -1609,19 +1565,19 @@ to the OSM opening hours specification.")
                 #t))))
     (build-system ant-build-system)
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (inputs
-     `(("java-commons-jcs" ,java-commons-jcs)
-       ("java-commons-compress" ,java-commons-compress)
-       ("java-jmapviewer" ,java-jmapviewer)
-       ("java-jsonp-api" ,java-jsonp-api)
-       ("java-jsonp-impl" ,java-jsonp-impl); runtime dependency
-       ("java-jsr305" ,java-jsr305)
-       ("java-metadata-extractor" ,java-metadata-extractor)
-       ("java-opening-hours-parser" ,java-opening-hours-parser)
-       ("java-openjfx-media" ,java-openjfx-media)
-       ("java-signpost-core" ,java-signpost-core)
-       ("java-svg-salamander" ,java-svg-salamander)))
+     (list java-commons-jcs
+           java-commons-compress
+           java-jmapviewer
+           java-jsonp-api
+           java-jsonp-impl ; runtime dependency
+           java-jsr305
+           java-metadata-extractor
+           java-opening-hours-parser
+           java-openjfx-media
+           java-signpost-core
+           java-svg-salamander))
     (arguments
      `(#:tests? #f
        #:jar-name "josm.jar"
@@ -1760,7 +1716,7 @@ ways, and relations) and their metadata tags.")
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target)))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://maxmind.github.io/libmaxminddb/")
     (synopsis "C library for the MaxMind DB file format")
     (description "The libmaxminddb library provides a C library for reading
@@ -1785,7 +1741,7 @@ associated with an address.")
     (arguments
      `(#:tests? #f)) ;; Tests require a copy of the maxmind database
     (inputs
-     `(("libmaxminddb" ,libmaxminddb)))
+     (list libmaxminddb))
     (home-page "https://www.maxmind.com/")
     (synopsis "Reader for the MaxMind DB format")
     (description "MaxMind DB is a binary file format that stores data indexed
@@ -1808,8 +1764,7 @@ MaxMind DB files.")
     (arguments
      `(#:tests? #f)) ;; Tests require a copy of the maxmind database
     (inputs
-     `(("python-maxminddb" ,python-maxminddb)
-       ("python-requests" ,python-requests)))
+     (list python-maxminddb python-requests))
     (home-page "https://www.maxmind.com/")
     (synopsis "MaxMind GeoIP2 API")
     (description "Provides an API for the GeoIP2 web services and databases.
@@ -1829,11 +1784,9 @@ The API also works with MaxMind’s free GeoLite2 databases.")
       (base32 "1xa7l2bjn832nk6bc7b481nv8hd2gj41jwhg0d2qy10lqdvjpn5b"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("perl" ,perl)))
+    (list perl))
    (inputs
-    `(("bzip2" ,bzip2)
-      ("xz" ,xz)
-      ("zlib" ,zlib)))
+    (list bzip2 xz zlib))
    (arguments
     `(#:test-target "test"
       #:phases
@@ -1873,21 +1826,20 @@ using the dataset of topographical information collected by
         (base32 "1l1j2axf94pdqwirwwhwy3y6k8v1aix78ifqbv6j8sv131h2j7y7"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("gdal" ,gdal)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("proj" ,proj)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtlocation" ,qtlocation)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("quazip" ,quazip-0)
-       ("routino" ,routino)
-       ("sqlite" ,sqlite)                      ; See wrap phase
-       ("zlib" ,zlib)))
+     (list gdal
+           libjpeg-turbo
+           proj
+           qtbase-5
+           qtdeclarative
+           qtlocation
+           qtwebchannel
+           qtwebengine
+           quazip-0
+           routino
+           sqlite ; See wrap phase
+           zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -1904,22 +1856,7 @@ using the dataset of topographical information collected by
              ;; of QMapShack, but they are not applied by default, for
              ;; some reason...
              (invoke "patch" "-p1" "-i" "FindPROJ4.patch")
-             (invoke "patch" "-p1" "-i" "FindQuaZip5.patch")
-             #t))
-         (add-after 'install 'wrap
-           ;; The program fails to find the QtWebEngineProcess program,
-           ;; so we set QTWEBENGINEPROCESS_PATH to help it.
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
-                   (qtwebengineprocess (string-append
-                                        (assoc-ref inputs "qtwebengine")
-                                        "/lib/qt5/libexec/QtWebEngineProcess")))
-               (for-each (lambda (program)
-                           (wrap-program program
-                             `("QTWEBENGINEPROCESS_PATH" =
-                               (,qtwebengineprocess))))
-                         (find-files bin ".*")))
-             #t)))))
+             (invoke "patch" "-p1" "-i" "FindQuaZip5.patch"))))))
     (synopsis "GPS mapping application")
     (description
      "QMapShack can be used to plan your next outdoor trip or to visualize and
@@ -1941,8 +1878,7 @@ QLandkarte GT application.")
         (base32 "0igif2bxf4dr82glxz9gyx5mmni0r2dsnx9p9k6pxv3c4lfhaz6v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (synopsis "Data extractor for OpenStreetMap files")
     (description
      "ReadOSM is a library to extract valid data from within an OpenStreetMap
@@ -1967,9 +1903,7 @@ input file (in @code{.osm} or @code{.osm.pbf} format).")
         (base32 "1lzch0jf6yqhw391phhafzw4ghmiz98zkf698h4fmq109fa2vhqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "http://shapelib.maptools.org/")
     (synopsis "Provides C library to write and update ESRI Shapefiles")
     (description
@@ -1991,18 +1925,18 @@ associated attribute file (@file{.dbf}).")
         (base32 "070p6pg541wvwb28wkn7k0z1qdyirik2qc2jpj4pf0vzx02w414n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("expat" ,expat)
-       ("freexl" ,freexl)
-       ("geos" ,geos)
-       ("librttopo" ,librttopo)
-       ("libspatialite" ,libspatialite)
-       ("libxml2" ,libxml2)
-       ("minizip" ,minizip)
-       ("proj" ,proj)
-       ("readosm" ,readosm)
-       ("sqlite" ,sqlite)))
+     (list expat
+           freexl
+           geos
+           librttopo
+           libspatialite
+           libxml2
+           minizip
+           proj
+           readosm
+           sqlite))
     (synopsis "Collection of command line tools for SpatiaLite")
     (description
      "@code{spatialite-tools} is a collection of Command Line Interface (CLI)
@@ -2023,8 +1957,7 @@ tools supporting SpatiaLite.")
         (base32 "12z0l7368r4116ljzg7nljy5hf425r11vxc540w79wlzikmynamy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("postgresql" ,postgresql)
-       ("sqlite" ,sqlite)))
+     (list postgresql sqlite))
     (synopsis "Allow SQLite/SpatiaLite to access PostgreSQL/PostGIS tables")
     (description
      "VirtualPG is a dynamic extension for the SQLite DBMS.  It implements
@@ -2039,7 +1972,7 @@ exchanged form one Spatial DBMS and the other.")
 (define-public opencpn
   (package
     (name "opencpn")
-    (version "5.0.0")
+    (version "5.2.4")
     (source
      (origin
        (method git-fetch)
@@ -2048,45 +1981,49 @@ exchanged form one Spatial DBMS and the other.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xv3h6svw9aay5ixpql231md3pf00qxvhg62z88daraf18hlkfja"))))
+        (base32 "0ffx0lmz1mp5433zqyxigy4qqav32xprpagd66krvihkyvqp2y6y"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("cairo" ,cairo)
-       ("curl" ,curl)
-       ("glu" ,glu)
-       ("gtk+" ,gtk+)
-       ("libarchive" ,libarchive)
-       ("libelf" ,libelf)
-       ("libexif" ,libexif)
-       ("libsndfile" ,libsndfile)
-       ("lz4" ,lz4)
-       ("mesa" ,mesa)
-       ("pango" ,pango)
-       ("portaudio" ,portaudio)
-       ("sqlite" ,sqlite)
-       ("tinyxml" ,tinyxml)
-       ("wxsvg" ,wxsvg)
-       ("wxwidgets" ,wxwidgets)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           cairo
+           curl
+           glu
+           gtk+
+           libarchive
+           libelf
+           libexif
+           libsndfile
+           lz4
+           mesa
+           pango
+           portaudio
+           sqlite
+           tinyxml
+           wxsvg
+           wxwidgets
+           xz
+           zlib))
     (arguments
-     `(#:configure-flags '("-DENABLE_PORTAUDIO=ON"
-                           "-DENABLE_SNDFILE=ON"
-                           "-DBUNDLE_TCDATA=ON"
-                           "-DBUNDLE_GSHHS=CRUDE")
+     `(#:configure-flags '("-DOCPN_USE_BUNDLED_LIBS=OFF"
+                           "-DOCPN_ENABLE_PORTAUDIO=ON"
+                           "-DOCPN_ENABLE_SNDFILE=ON"
+                           "-DOCPN_BUNDLE_TCDATA=ON"
+                           "-DOCPN_BUNDLE_GSHHS=ON")
        #:tests? #f ; No tests defined
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-build
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "CMakeLists.txt"
-               (("set\\(wxWidgets_CONFIG_OPTIONS.*--toolkit=gtk3" all)
-                (string-append all " --libs all")))
-             #t)))))
+               (("wx-32.c; cc")
+                 "wx-32.c; gcc")
+               (("\"/bin/sh\" \"-c\"")
+                (string-append "\"" (which "bash") "\" \"-c\""))
+               (("include\\(TargetSetup\\)")
+                "set(PKG_TARGET \"guix\")\nset(PKG_TARGET_VERSION 1)")))))))
     (synopsis "Chart plotter and marine GPS navigation software")
     (description
      "OpenCPN is a chart plotter and marine navigation software designed to be
@@ -2163,8 +2100,7 @@ track your position right from your laptop.")
          (modify-phases %standard-phases
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((shell (string-append (assoc-ref inputs "bash")
-                                           "/bin/bash")))
+               (let ((shell (search-input-file inputs "/bin/bash")))
                  (setenv "SHELL" shell)
                  (setenv "CONFIG_SHELL" shell)
                  (setenv "LDFLAGS" (string-append "-Wl,-rpath -Wl,"
@@ -2240,24 +2176,23 @@ visualization.")
         (base32 "1n051yxxkylly0k9rlkx2ih3j2lf9d4csg00sm7161r7nhjvggd1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (inputs
-     `(("curl" ,curl)
-       ("fftw" ,fftw)
-       ("gdal" ,gdal)
-       ("hdf5" ,hdf5)
-       ("jasper" ,jasper)
-       ("libharu" ,libharu)
-       ("libtiff" ,libtiff)
-       ("opencv" ,opencv)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("python" ,python)
-       ("qhull" ,qhull)
-       ("unixodbc" ,unixodbc)
-       ("vigra" ,vigra)
-       ("wxwidgets" ,wxwidgets)))
+     (list curl
+           fftw
+           gdal
+           hdf5
+           jasper
+           libharu
+           libtiff
+           opencv
+           postgresql
+           proj
+           python
+           qhull
+           unixodbc
+           vigra
+           wxwidgets))
     (arguments
      '(#:configure-flags '("--enable-python")))
     (synopsis "System for Automated Geoscientific Analyses")
@@ -2337,8 +2272,7 @@ growing set of geoscientific methods.")
          (replace 'check
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" "/tmp")
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              (setenv "TRAVIS" "true")
              (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
@@ -2360,6 +2294,7 @@ growing set of geoscientific methods.")
                              "PyCoreAdittions"
                              "PyQgsAnnotation"
                              "PyQgsAppStartup"
+                             "PyQgsAuthBasicMethod"
                              "PyQgsAuthenticationSystem"
                              "PyQgsAuxiliaryStorage"
                              "PyQgsDBManagerGpkg"
@@ -2464,62 +2399,62 @@ growing set of geoscientific methods.")
                  `("GISBASE" = (,grass))))
              #t)))))
     (inputs
-     `(("exiv2" ,exiv2)
-       ("expat" ,expat)
-       ("gdal" ,gdal)
-       ("geos" ,geos)
-       ("gpsbabel" ,gpsbabel)
-       ("grass" ,grass)
-       ("gsl" ,gsl)
-       ("hdf5" ,hdf5)
-       ("libspatialindex" ,libspatialindex)
-       ("libspatialite" ,libspatialite)
-       ("libxml2" ,libxml2)
-       ("libzip" ,libzip)
-       ("netcdf" ,netcdf)
-       ("postgresql" ,postgresql)
-       ("proj" ,proj)
-       ("protobuf" ,protobuf)
-       ("python" ,python)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-future" ,python-future)
-       ("python-gdal" ,python-gdal)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-owslib" ,python-owslib)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-pygments" ,python-pygments)
-       ("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
-       ("python-pytz" ,python-pytz)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-sip" ,python-sip)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3)
-       ("qca" ,qca)
-       ("qscintilla" ,qscintilla)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtkeychain" ,qtkeychain)
-       ("qtlocation" ,qtlocation)
-       ("qtserialport" ,qtserialport)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qwt" ,qwt)
-       ;;("saga" ,saga)
-       ("sqlite" ,sqlite)))
+     (list exiv2
+           expat
+           gdal
+           geos
+           gpsbabel
+           grass
+           gsl
+           hdf5
+           libspatialindex
+           libspatialite
+           libxml2
+           libzip
+           netcdf
+           postgresql
+           proj
+           protobuf
+           python
+           python-chardet
+           python-dateutil
+           python-future
+           python-gdal
+           python-jinja2
+           python-numpy
+           python-owslib
+           python-psycopg2
+           python-pygments
+           python-pyqt+qscintilla
+           python-pytz
+           python-pyyaml
+           python-requests
+           python-sip
+           python-six
+           python-urllib3
+           qca
+           qscintilla
+           qtbase-5
+           qtdeclarative
+           qtkeychain
+           qtlocation
+           qtserialport
+           qtsvg
+           qtwebkit
+           qwt
+           ;;("saga" ,saga)
+           sqlite))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("perl-yaml-tiny" ,perl-yaml-tiny)
-       ("pkg-config" ,pkg-config)
-       ("python-mock" ,python-mock)
-       ("python-nose2" ,python-nose2)
-       ("qttools" ,qttools)
-       ("shellcheck" ,shellcheck)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list bison
+           flex
+           perl
+           perl-yaml-tiny
+           pkg-config
+           python-mock
+           python-nose2
+           qttools
+           shellcheck
+           xorg-server-for-tests))
     (home-page "https://qgis.org")
     (synopsis "Geographical information system")
     (description "QGIS is an easy to use Geographical Information
@@ -2596,16 +2531,16 @@ architecture.")
           "0fx0cv0kgbvynpmjgsvq2fpsyngd5idiscdn8pd5201f1ngii3mq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-geographiclib" ,python-geographiclib)))
+     (list python-geographiclib))
     (native-inputs
-     `(("python-async-generator" ,python-async-generator)
-       ("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-readme-renderer" ,python-readme-renderer)
-       ("python-pytz" ,python-pytz)))
+     (list python-async-generator
+           python-coverage
+           python-flake8
+           python-isort
+           python-pytest
+           python-pytest-aiohttp
+           python-readme-renderer
+           python-pytz))
     (home-page "https://github.com/geopy/geopy")
     (synopsis "Geocoding library for Python")
     (description "@code{geopy} is a Python client for several popular geocoding
@@ -2614,46 +2549,6 @@ coordinates of addresses, cities, countries, and landmarks across the globe
 using third-party geocoders and other data sources.")
     (license license:expat)))
 
-(define-public marble-qt
-  (let ((release "17.08")
-        (commit "fc7166eeef784732033c999ba605364f9c82d21c")
-        (revision "1"))
-    (package
-      (name "marble-qt")
-      (version (git-version release revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://invent.kde.org/education/marble.git/")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0m0sf3sddaib7vc5lhbmh7ziw07p1hahg02f65sgfylyl5f5kj92"))
-         (patches (search-patches
-                   "marble-qt-add-qt-headers.patch"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:tests? #f ; libmarblewidget-qt5.so.28 not found
-         #:configure-flags
-         '("-DCMAKE_BUILD_TYPE=Release"
-           "-DWITH_KF5=FALSE")))
-      (native-inputs
-       `(("qttools" ,qttools)))
-      (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtsvg" ,qtsvg)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtwebkit" ,qtwebkit)
-         ("qtlocation" ,qtlocation)))
-      (home-page "https://marble.kde.org/")
-      (synopsis "Virtual globe and world atlas")
-      (description "Marble is similar to a desktop globe.  At closer scale it
-becomes a world atlas, while OpenStreetMap takes the user to street level.  It
-supports searching for places of interest, viewing Wikipedia articles,
-creating routes by drag and drop and more.")
-      (license license:gpl3))))
-
 (define-public gplates
   (package
     (name "gplates")
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index 82604ee9be..e20d4d1427 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -52,25 +52,24 @@
 (define-public gettext-minimal
   (package
     (name "gettext-minimal")
-    (version "0.20.1")
+    (version "0.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gettext/gettext-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0p3zwkk27wm2m2ccfqm57nj7vqkmfpn7ja1nf65zmhz8qqs5chb6"))))
+                "04kbg1sx0ncfrsbr85ggjslqkzzb243fcw9nyh3rrv1a22ihszf7"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ;9 MiB of HTML
     (inputs
-     `(("libunistring" ,libunistring)
-       ("libxml2" ,libxml2)
-
-       ;; TODO: ncurses is only needed for the 'libtextstyle' library.
-       ;; The next version of gettext can use a separate libtextstyle,
-       ;; but for now we include it here in 'gettext-minimal'.
-       ("ncurses" ,ncurses)))
+     (list libunistring
+           libxml2
+           ;; TODO: ncurses is only needed for the 'libtextstyle' library.
+           ;; The next version of gettext can use a separate libtextstyle,
+           ;; but for now we include it here in 'gettext-minimal'.
+           ncurses))
     (arguments
      `(#:configure-flags '("--with-included-libunistring=no"
                            "--with-included-libxml=no")
@@ -199,22 +198,21 @@ color, font attributes (weight, posture), or underlining.")
         (base32 "0kgbm0af7jwpfspa2xxiy9nc2l1r2s1rhbhz4r229zcqv49ak6sq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-bump2version" ,python-bump2version)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-implicit-str-concat" ,python-flake8-implicit-str-concat)
-       ("python-flake8-print" ,python-flake8-print)
-       ("python-isort" ,python-isort)
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-argparse" ,python-sphinx-argparse)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-twine" ,python-twine)
-       ("python-yamllint" ,python-yamllint)))
+     (list python-bump2version
+           python-flake8
+           python-flake8-implicit-str-concat
+           python-flake8-print
+           python-isort
+           python-pre-commit
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           python-sphinx-argparse
+           python-sphinx-rtd-theme
+           python-twine
+           python-yamllint))
     (propagated-inputs
-     `(("python-polib" ,python-polib)
-       ("python-pymd4c" ,python-pymd4c)))
+     (list python-polib python-pymd4c))
     (home-page "https://github.com/mondeja/mdpo")
     (synopsis "Markdown file translation utilities using pofiles")
     (description
@@ -238,12 +236,14 @@ from Markdown files.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-programs
-          (lambda* (#:key outputs #:allow-other-keys)
+          (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Make sure all executables in "bin" find the Perl modules
-            ;; provided by this package at runtime.
+            ;; required by this package at runtime.
             (let* ((out  (assoc-ref outputs "out"))
                    (bin  (string-append out "/bin/"))
-                   (path (string-append out "/lib/perl5/site_perl")))
+                   (Pod::Parser (assoc-ref inputs "perl-pod-parser"))
+                   (path (string-append out "/lib/perl5/site_perl:"
+                                        Pod::Parser "/lib/perl5/site_perl")))
               (for-each (lambda (file)
                           (wrap-program file
                             `("PERL5LIB" ":" prefix (,path))))
@@ -263,6 +263,13 @@ from Markdown files.")
                 (string-append (assoc-ref inputs "docbook-xml")
                                "/xml/dtd/docbook/")))
              #t))
+         (add-before 'build 'do-not-override-PERL5LIB
+           (lambda _
+             ;; Don't hard-code PERL5LIB to include just the build directory
+             ;; so that the build script finds modules from inputs.
+             (substitute* "Po4aBuilder.pm"
+               (("PERL5LIB=lib") ""))
+             (setenv "PERL5LIB" (string-append (getenv "PERL5LIB") ":lib"))))
          (add-before 'check 'disable-failing-tests
            (lambda _
              ;; FIXME: these tests require SGMLS.pm.
@@ -286,6 +293,8 @@ from Markdown files.")
        ("perl-test-pod" ,perl-test-pod)
        ("perl-yaml-tiny" ,perl-yaml-tiny)
        ("texlive" ,texlive-tiny)))
+    (inputs
+     (list perl-pod-parser))
     (home-page "https://po4a.org/")
     (synopsis "Scripts to ease maintenance of translations")
     (description
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 03a516dc52..ca522e52ab 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -4,11 +4,12 @@
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2013, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,15 +49,14 @@
 (define-public lcms
   (package
    (name "lcms")
-   (version "2.9")
+   (version "2.12")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://sourceforge/lcms/lcms/" version
                                 "/lcms2-" version ".tar.gz"))
 
-            (patches (search-patches "lcms-CVE-2018-16435.patch"))
             (sha256 (base32
-                     "083xisy6z01zhm7p7rgk4bx9d6zlr8l20qkfv1g29ylnhgwzvij8"))))
+                     "1x8hzq8kw16lgjxmqpnqah1p3hrqqhjpcl1ymiah8434x22kjrhq"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags '("--disable-static")))
@@ -69,7 +69,7 @@
 focus on accuracy and performance.  It uses the International Color
 Consortium standard (ICC), approved as ISO 15076-1.")
    (license license:x11)
-   (home-page "http://www.littlecms.com/")
+   (home-page "https://www.littlecms.com/")
    (properties '((cpe-name . "little_cms_color_engine")))))
 
 (define-public libpaper
@@ -88,7 +88,7 @@ Consortium standard (ICC), approved as ISO 15076-1.")
                      "0zhcx67afb6b5r936w5jmaydj3ks8zh83n9rm5sv3m3k8q8jib1q"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("automake" ,automake))) ; For up to date 'config.guess' and 'config.sub'.
+    (list automake)) ; For up to date 'config.guess' and 'config.sub'.
    (arguments
     `(#:configure-flags '("--disable-static")
       #:phases
@@ -124,7 +124,7 @@ paper size.")
             (sha256 (base32
                      "1r4ab1fvgganm02kmm70b2r1azwzbav2am41gbigpa2bb1wynlrq"))))
    (build-system gnu-build-system)
-   (inputs `(("perl" ,perl)))
+   (inputs (list perl))
    (arguments
     `(#:tests? #f ; none provided
       #:phases
@@ -159,7 +159,7 @@ printing, and psresize, for adjusting page sizes.")
 (define-public ghostscript
   (package
     (name "ghostscript")
-    (version "9.52")
+    (version "9.54.0")
     (source
       (origin
         (method url-fetch)
@@ -169,10 +169,8 @@ printing, and psresize, for adjusting page sizes.")
                             "/ghostscript-" version ".tar.xz"))
         (sha256
          (base32
-          "0z1w42y2jmcpl2m1l3z0sfii6zmvzcwcgzn6bydklia6ig7jli2p"))
-        (patches (search-patches "ghostscript-freetype-compat.patch"
-                                 "ghostscript-CVE-2020-15900.patch"
-                                 "ghostscript-no-header-creationdate.patch"
+          "0fvfvv6di5s6j4sy4gaw65klm23dby39bkdjxxq4w3v0vqyb9dy2"))
+        (patches (search-patches "ghostscript-no-header-creationdate.patch"
                                  "ghostscript-no-header-id.patch"
                                  "ghostscript-no-header-uuid.patch"))
         (modules '((guix build utils)))
@@ -206,7 +204,7 @@ printing, and psresize, for adjusting page sizes.")
              "--enable-dynamic"
              "--disable-compile-inits"
              (string-append "--with-fontpath="
-                            (assoc-ref %build-inputs "gs-fonts")
+                            (assoc-ref %build-inputs "font-ghostscript")
                             "/share/fonts/type1/ghostscript")
 
              ,@(if (%current-target-system)
@@ -268,7 +266,7 @@ printing, and psresize, for adjusting page sizes.")
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)       ;needed for freetype
-       ("python" ,python-wrapper)
+       ("python" ,python-minimal-wrapper)
        ("tcl" ,tcl)
 
        ;; When cross-compiling, some of the natively-built tools require all
@@ -280,7 +278,7 @@ printing, and psresize, for adjusting page sizes.")
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
-       ("gs-fonts" ,gs-fonts)
+       ("font-ghostscript" ,font-ghostscript)
        ("jbig2dec" ,jbig2dec)
        ("libjpeg" ,libjpeg-turbo)
        ("libpaper" ,libpaper)
@@ -316,9 +314,7 @@ output file formats and printers.")
    (source (package-source ghostscript))
    (build-system gnu-build-system)
    (native-inputs
-    `(("libtool"    ,libtool)
-      ("automake"   ,automake)
-      ("autoconf"   ,autoconf)))
+    (list libtool automake autoconf))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -345,9 +341,9 @@ architecture.")
    (license license:expat)
    (home-page (package-home-page ghostscript))))
 
-(define-public gs-fonts
+(define-public font-ghostscript
   (package
-   (name "gs-fonts")
+   (name "font-ghostscript")
    (version "8.11")
    (source (origin
             (method url-fetch)
@@ -386,19 +382,23 @@ Ghostscript.  It currently includes the 35 standard PostScript fonts.")
    (license license:gpl2)
    (home-page "https://sourceforge.net/projects/gs-fonts/")))
 
+(define-public gs-fonts
+  (deprecated-package "gs-fonts" font-ghostscript))
+
 (define-public libspectre
   (package
    (name "libspectre")
-   (version "0.2.8")
+   (version "0.2.9")
    (source (origin
             (method url-fetch)
-            (uri (string-append "https://libspectre.freedesktop.org/releases/libspectre-"
-                                version ".tar.gz"))
-            (sha256 (base32
-                     "1a67iglsc3r05mzngyg9kb1gy8whq4fgsnyjwi7bqfw2i7rnl9b5"))))
+            (uri (string-append "https://libspectre.freedesktop.org/releases"
+                                "/libspectre-" version ".tar.gz"))
+            (sha256
+             (base32
+              "1vgvxp77d5d9chhx4i9cv9hifw4x10jgw6aw8l2v90dgnm99rbj9"))))
    (build-system gnu-build-system)
-   (inputs `(("ghostscript" ,ghostscript)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ghostscript))
+   (native-inputs (list pkg-config))
    (synopsis "Postscript rendering library")
    (description
     "libspectre is a small library for rendering Postscript documents.
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 11ec47b7e5..f1f8529580 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -122,15 +122,15 @@
                 (string-append doc "/share/doc/poly2tri-c"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           doxygen
+           libtool
+           pkg-config
+           unzip
+           which))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "2D constrained Delaunay triangulation library")
     (description "Poly2Tri-C is a library for generating, refining and rendering
 2-Dimensional Constrained Delaunay Triangulations.")
@@ -156,7 +156,7 @@
     (arguments
      `(#:glib-or-gtk? #t))   ; To wrap binaries and/or compile schemas
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      `(("alsa" ,alsa-lib)
        ("cairo" ,cairo)
@@ -190,14 +190,14 @@ of a larger interface.")
                 "0fbh2ss1dy3sba4xjmfm4vxxjmx9a6rzgba9ycjygchbm957y3ag"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55))
+     `(#:configure-flags
+       (list "-Denable-gir=false"
+             "-Dwith-docs=false")))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gobject-introspection pkg-config vala))
     (propagated-inputs
      ;; Propagated to satisfy ‘babl.pc’.
-     `(("lcms" ,lcms)))
+     (list lcms))
     (home-page "https://gegl.org/babl/")
     (synopsis "Image pixel format conversion library")
     (description
@@ -230,7 +230,8 @@ provided, as well as a framework to add new color models and data types.")
                 "18cg566lplw7y7dn5v05pal24vxbfiic6097a40gnxdgkxmkr3k6"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
+     `(#:configure-flags
+       (list "-Dintrospection=false")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'extend-test-time-outs
@@ -247,9 +248,7 @@ provided, as well as a framework to add new color models and data types.")
                 (string-append match "0"))))))))
     ;; These are propagated to satisfy 'gegl-0.4.pc'.
     (propagated-inputs
-     `(("babl" ,babl)
-       ("glib" ,glib)
-       ("json-glib" ,json-glib)))
+     (list babl glib json-glib))
     (inputs
      ;; All inputs except libjpeg and libpng are optional.
      `(("cairo" ,cairo)
@@ -270,11 +269,11 @@ provided, as well as a framework to add new color models and data types.")
        ("poppler" ,poppler)
        ("sdl2" ,sdl2)))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for gtester
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list `(,glib "bin") ; for gtester
+           gobject-introspection
+           intltool
+           pkg-config
+           vala))
     (home-page "https://gegl.org")
     (synopsis "Graph based image processing framework")
     (description "GEGL (Generic Graphics Library) provides infrastructure to
@@ -322,7 +321,7 @@ buffers.")
            ;; Install 'sitecustomize.py' into gimp's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
@@ -393,8 +392,8 @@ that is extensible via a plugin system.")
          (replace 'configure
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir-p "tmppkgconfig")
-             (copy-file (string-append (assoc-ref inputs "gegl")
-                                       "/lib/pkgconfig/gegl-0.4.pc")
+             (copy-file (search-input-file inputs
+                                           "/lib/pkgconfig/gegl-0.4.pc")
                         "tmppkgconfig/gegl-0.3.pc")
              (setenv "PKG_CONFIG_PATH"
                      (string-append "tmppkgconfig:"
@@ -414,17 +413,17 @@ that is extensible via a plugin system.")
                (mkdir-p target))
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("gimp" ,gimp)
-       ;; needed by gimp-2.0.pc
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gegl" ,gegl)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ;; needed by gimpui-2.0.pc
-       ("gtk+" ,gtk+-2)))
+     (list fftw
+           gimp
+           ;; needed by gimp-2.0.pc
+           gdk-pixbuf
+           gegl
+           cairo
+           glib
+           ;; needed by gimpui-2.0.pc
+           gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.lprp.fr/gimp_plugin_en/#fourier")
     (synopsis "GIMP plug-in to edit image in fourier space")
     (description
@@ -448,14 +447,12 @@ inverse fourier transform.")
                 "0priwpmc7dizccqvn21ig6d649bprl3xl1hmjj7nddznjgr585vl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     ;; As needed by 'libmypaint.pc'.
     (propagated-inputs
-     `(("json-c" ,json-c)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list json-c gobject-introspection))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Artistic brushes library")
     (description "Libmypaint, also called \"brushlib\", is a library for making
 brushstrokes which is used by MyPaint and GIMP.")
@@ -477,8 +474,7 @@ brushstrokes which is used by MyPaint and GIMP.")
         (base32 "0kcqz13vzpy24dhmrx9hbs6s7hqb8y305vciznm15h277sabpmw9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Default brushes for MyPaint")
     (description "This package provides the default set of brushes for
 MyPaint.")
@@ -554,12 +550,12 @@ MyPaint.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gimp" ,gimp)
-       ("gdk-pixbuf" ,gdk-pixbuf)                 ; needed by gimp-2.0.pc
-       ("cairo" ,cairo)
-       ("gegl" ,gegl)
-       ("gtk+" ,gtk+-2)                           ; needed by gimpui-2.0.pc
-       ("glib" ,glib)))
+     (list gimp
+           gdk-pixbuf ; needed by gimp-2.0.pc
+           cairo
+           gegl
+           gtk+-2 ; needed by gimpui-2.0.pc
+           glib))
     (home-page "https://github.com/bootchk/resynthesizer")
     (synopsis "GIMP plugins for texture synthesis")
     (description
@@ -632,7 +628,7 @@ transferring the style of an image.")
            ;; Install 'sitecustomize.py' into glimpse's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
diff --git a/gnu/packages/gkrellm.scm b/gnu/packages/gkrellm.scm
index 153e27c7f0..1f9e74e7b4 100644
--- a/gnu/packages/gkrellm.scm
+++ b/gnu/packages/gkrellm.scm
@@ -46,7 +46,7 @@
        ("libice" ,libice)
        ("libsm" ,libsm)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f                      ; there is no check target
        #:phases
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index a417e363bb..411ffeccef 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -12,8 +12,10 @@
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -81,7 +83,7 @@
                 "1xqhk9bn10nbvffw3r4p4rjslwz1l7gaycc0x2pqkr2irp7q9x7n"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("mesa" ,mesa))) ; according to glu.pc
+     (list mesa)) ; according to glu.pc
     (home-page "http://www.opengl.org/archives/resources/faq/technical/glu.htm")
     (synopsis "Mesa OpenGL Utility library")
     (description
@@ -106,6 +108,7 @@ as ASCII text.")
               (uri (string-append
                     "mirror://sourceforge/freeglut/freeglut/"
                     version "/freeglut-" version ".tar.gz"))
+              (patches (search-patches "freeglut-gcc-compat.patch"))
               (sha256
                (base32
                 "0s6sk49q8ijgbsrrryb7dzqx2fa744jhx1wck5cz5jia2010w06l"))))
@@ -113,14 +116,10 @@ as ASCII text.")
     (arguments
      '(#:tests? #f                      ;no test target
        #:configure-flags '("-DFREEGLUT_BUILD_STATIC_LIBS=OFF")))
-    (inputs `(("libx11" ,libx11)
-              ("libxi" ,libxi)
-              ("libxrandr" ,libxrandr)
-              ("libxxf86vm" ,libxxf86vm)))
+    (inputs (list libx11 libxi libxrandr libxxf86vm))
     (propagated-inputs
      ;; Headers from Mesa and GLU are needed.
-     `(("glu" ,glu)
-       ("mesa" ,mesa)))
+     (list glu mesa))
     (home-page "http://freeglut.sourceforge.net/")
     (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
     (description
@@ -171,15 +170,10 @@ the X-Consortium license.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     ;; The pkg-config file lists "freetype2" as Requires.private.
-    (propagated-inputs `(("freetype" ,freetype)))
-    (inputs `(("libx11" ,libx11)
-              ("mesa" ,mesa)
-              ("glu" ,glu)))
+    (propagated-inputs (list freetype))
+    (inputs (list libx11 mesa glu))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config autoconf automake libtool))
     (synopsis "Font rendering library for OpenGL applications")
     (description
      "FTGL is a font rendering library for OpenGL applications.  Supported
@@ -202,11 +196,9 @@ Polygon meshes, and Extruded polygon meshes.")
         (base32 "1fg323fk7wlv2xh6lw66wswgcv6qi8aaadk7c28h2f2lj1s7njnf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("mesa-headers" ,mesa-headers)))
+     (list mesa-headers))
     (home-page "https://github.com/divVerent/s2tc")
     (synopsis "S3 Texture Compression implementation")
     (description
@@ -235,7 +227,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "20.2.4")
+    (version "21.2.5")
     (source
       (origin
         (method url-fetch)
@@ -247,30 +239,29 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "14m09bk7akj0k02lg8fhvvzbdsashlbdsgl2cw7wbqfj2mhdqwh5"))
+          "1fxcdf4qs4vmyjcns7jv62w4jy3gr383ar5b7mr77nb0nxgmhjcf"))
         (patches
          (search-patches "mesa-skip-tests.patch"))))
     (build-system meson-build-system)
     (propagated-inputs
-      `(;; The following are in the Requires.private field of gl.pc.
-        ("libdrm" ,libdrm)
-        ("libvdpau" ,libvdpau)
-        ("libx11" ,libx11)
-        ("libxdamage" ,libxdamage)
-        ("libxfixes" ,libxfixes)
-        ("libxshmfence" ,libxshmfence)
-        ("libxxf86vm" ,libxxf86vm)
-        ("xorgproto" ,xorgproto)))
+      (list ;; The following are in the Requires.private field of gl.pc.
+            libdrm
+            libvdpau
+            libx11
+            libxdamage
+            libxfixes
+            libxshmfence
+            libxxf86vm
+            xorgproto))
     (inputs
       `(("expat" ,expat)
         ("libelf" ,elfutils)  ;required for r600 when using llvm
         ("libva" ,(force libva-without-mesa))
         ("libxml2" ,libxml2)
-        ;; TODO: Add 'libxml2-python' for OpenGL ES 1.1 and 2.0 support
         ("libxrandr" ,libxrandr)
         ("libxvmc" ,libxvmc)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              ;; Note: update the 'clang' input of mesa-opencl when bumping this.
              `(("llvm" ,llvm-11)))
             (_
@@ -282,12 +273,13 @@ also known as DXTn or DXTC) for Mesa.")
         ("flex" ,flex)
         ("gettext" ,gettext-minimal)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              `(("glslang" ,glslang)))
             (_
              `()))
         ("pkg-config" ,pkg-config)
         ("python" ,python-wrapper)
+        ("python-libxml2", python-libxml2) ;for OpenGL ES 1.1 and 2.0 support
         ("python-mako" ,python-mako)
         ("which" ,(@ (gnu packages base) which))))
     (outputs '("out" "bin"))
@@ -297,37 +289,39 @@ also known as DXTn or DXTC) for Mesa.")
              ((or "armhf-linux" "aarch64-linux")
               ;; TODO: Fix svga driver for non-Intel architectures.
               '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl"))
-             ("powerpc64le-linux"
+             ((or "powerpc64le-linux" "powerpc-linux")
               '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl"))
              (_
               '("-Dgallium-drivers=iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl")))
          ;; Enable various optional features.  TODO: opencl requires libclc,
          ;; omx requires libomxil-bellagio
-         "-Dplatforms=x11,drm,surfaceless,wayland"
+         "-Dplatforms=x11,wayland"
          "-Dglx=dri"        ;Thread Local Storage, improves performance
          ;; "-Dopencl=true"
          ;; "-Domx=true"
-         "-Dosmesa=gallium"
-         "-Dgallium-xa=true"
+         "-Dosmesa=true"
+         "-Dgallium-xa=enabled"
 
          ;; features required by wayland
-         "-Dgles2=true"
-         "-Dgbm=true"
-         "-Dshared-glapi=true"
+         "-Dgles2=enabled"
+         "-Dgbm=enabled"
+         "-Dshared-glapi=enabled"
 
          ;; Explicitly enable Vulkan on some architectures.
          ,@(match (%current-system)
              ((or "i686-linux" "x86_64-linux")
               '("-Dvulkan-drivers=intel,amd"))
-             ("powerpc64le-linux"
-              '("-Dvulkan-drivers=amd"))
+             ((or "powerpc64le-linux" "powerpc-linux")
+              '("-Dvulkan-drivers=amd,swrast"))
+             ("aarch64-linux"
+              '("-Dvulkan-drivers=freedreno,amd,broadcom,swrast"))
              (_
               '("-Dvulkan-drivers=auto")))
 
          ;; Enable the Vulkan overlay layer on architectures using llvm.
          ,@(match (%current-system)
-             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
-              '("-Dvulkan-overlay-layer=true"))
+             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
+              '("-Dvulkan-layers=device-select,overlay"))
              (_
               '()))
 
@@ -339,10 +333,10 @@ also known as DXTn or DXTC) for Mesa.")
          ,@(match (%current-system)
              ((or "x86_64-linux" "i686-linux")
               '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
-                "-Dllvm=true"))         ; default is x86/x86_64 only
-             ("powerpc64le-linux"
+                "-Dllvm=enabled"))      ; default is x86/x86_64 only
+             ((or "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
               '("-Ddri-drivers=nouveau,r200,r100"
-                "-Dllvm=true"))
+                "-Dllvm=enabled"))
              (_
               '("-Ddri-drivers=nouveau,r200,r100"))))
 
@@ -356,25 +350,41 @@ also known as DXTn or DXTC) for Mesa.")
                   (guix build meson-build-system))
        #:phases
        (modify-phases %standard-phases
-         ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
-                                                 (%current-system)))
-               ;; Disable some of the llvmpipe tests.
-               `((add-after 'unpack 'disable-failing-test
-                   (lambda _
-                     (substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
-                       (("0\\.5, ") ""))
-                     #t)))
-               '())
-         ,@(if (string-prefix? "i686" (or (%current-target-system)
-                                          (%current-system)))
-               ;; Disable new test from Mesa 19 that fails on i686.  Upstream
-               ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
-               `((add-after 'unpack 'disable-failing-test
-                   (lambda _
-                     (substitute* "src/util/tests/format/meson.build"
-                       (("'u_format_test',") ""))
-                     #t)))
-               '())
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ,@(match (%current-system)
+                 ("powerpc64le-linux"
+                  ;; Disable some of the llvmpipe tests.
+                  `((substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
+                      (("0\\.5, ") ""))))
+                 ("powerpc-linux"
+                  ;; There are some tests which fail specifically on powerpc.
+                  `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet!
+                                   "src/gallium/drivers/llvmpipe/meson.build"
+                                   ;; This is probably a big-endian test failure.
+                                   "src/gallium/targets/osmesa/meson.build")
+                      (("if with_tests") "if not with_tests"))
+                    (substitute* "src/util/tests/format/meson.build"
+                      ;; This is definately an endian-ness test failure.
+                      (("'u_format_test', ") ""))
+                    ;; It is only this portion of the test which fails.
+                    (substitute* "src/mesa/main/tests/meson.build"
+                      ((".*mesa_formats.*") ""))
+                    ;; This test times out and receives SIGTERM.
+                    (substitute* "src/amd/common/meson.build"
+                      (("and not with_platform_windows") "and with_platform_windows"))))
+                 ("i686-linux"
+                  ;; Disable new test from Mesa 19 that fails on i686.  Upstream
+                  ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
+                  `((substitute* "src/util/tests/format/meson.build"
+                      (("'u_format_test',") ""))))
+                 ("aarch64-linux"
+                  ;; The ir3_disasm test segfaults.
+                  ;; The simplest way to skip it is to run a different test instead.
+                  `((substitute* "src/freedreno/ir3/meson.build"
+                      (("disasm\\.c'") "delay.c',\n    link_args: ld_args_build_id"))))
+                 (_
+                  '((display "No tests to disable on this architecture.\n"))))))
          (add-before 'configure 'fix-dlopen-libnames
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -392,28 +402,18 @@ also known as DXTn or DXTC) for Mesa.")
                  ;; it's never installed since Mesa removed its
                  ;; egl_gallium support.
                  (("\"gbm_dri\\.so")
-                  (string-append "\"" out "/lib/dri/gbm_dri.so")))
-               #t)))
+                  (string-append "\"" out "/lib/dri/gbm_dri.so"))))))
          (add-after 'install 'split-outputs
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (bin (assoc-ref outputs "bin")))
-               ,@(match (%current-system)
-                   ((or "i686-linux" "x86_64-linux" "powerpc64le-linux")
-                    ;; Install the Vulkan overlay control script to a separate
-                    ;; output to prevent a reference on Python, saving ~70 MiB
-                    ;; on the closure size.
-                    '((copy-recursively (string-append out "/bin")
-                                        (string-append bin "/bin"))
-                      (delete-file-recursively (string-append out "/bin"))))
-                   (_
-                    ;; XXX: On architectures without the Vulkan overlay layer
-                    ;; just create an empty file because outputs can not be
-                    ;; added conditionally.
-                    '((mkdir-p (string-append bin "/bin"))
-                      (call-with-output-file (string-append bin "/bin/.empty")
-                        (const #t)))))
-               #t)))
+               ;; Not all architectures have the Vulkan overlay control script.
+               (mkdir-p (string-append out "/bin"))
+               (call-with-output-file (string-append out "/bin/.empty")
+                 (const #t))
+               (copy-recursively (string-append out "/bin")
+                                 (string-append bin "/bin"))
+               (delete-file-recursively (string-append out "/bin")))))
          (add-after 'install 'symlinks-instead-of-hard-links
            (lambda* (#:key outputs #:allow-other-keys)
              ;; All the drivers and gallium targets create hard links upon
@@ -447,8 +447,7 @@ also known as DXTn or DXTC) for Mesa.")
                                                        file)
                                               (symlink reference file)))
                                         others))))
-                         (delete-duplicates inodes))
-               #t))))))
+                         (delete-duplicates inodes))))))))
     (home-page "https://mesa3d.org/")
     (synopsis "OpenGL and Vulkan implementations")
     (description "Mesa is a free implementation of the OpenGL and Vulkan
@@ -460,6 +459,10 @@ from software emulation to complete hardware acceleration for modern GPUs.")
 (define-public mesa-opencl
   (package/inherit mesa
     (name "mesa-opencl")
+    (source (origin
+              (inherit (package-source mesa))
+              (patches (cons (search-patch "mesa-opencl-all-targets.patch")
+                             (origin-patches (package-source mesa))))))
     (arguments
      (substitute-keyword-arguments (package-arguments mesa)
        ((#:configure-flags flags)
@@ -538,7 +541,7 @@ from software emulation to complete hardware acceleration for modern GPUs.")
        ("glut" ,freeglut)
        ("glew" ,glew)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -588,13 +591,10 @@ glxgears, glxheads, and glxinfo.")
                                          (assoc-ref %outputs "out")))
        #:tests? #f))                              ;no 'check' target
     (inputs
-     `(("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list libxi libxmu libx11 mesa))
 
     ;; <GL/glew.h> includes <GL/glu.h>.
-    (propagated-inputs `(("glu" ,glu)))
+    (propagated-inputs (list glu))
 
     (home-page "http://glew.sourceforge.net/")
     (synopsis "OpenGL extension loading library for C and C++")
@@ -617,11 +617,8 @@ extension functionality is exposed in a single header file.")
               (base32
                "13qfx4xh8baryxqrv986l848ygd0piqwm6s2s90pxk9c0m9vklim"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("freeglut" ,freeglut)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2 mesa glu freeglut))
     (arguments
      '(#:phases (modify-phases %standard-phases
                  (add-after 'configure 'patch-makefile
@@ -671,15 +668,12 @@ OpenGL graphics API.")
                   "_guile_versions_to_search=\"3.0 "))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("mesa" ,mesa)
-       ("glu" ,glu)
-       ("freeglut" ,freeglut)))))
+     (list guile-3.0 mesa glu freeglut))))
 
 (define-public libepoxy
   (package
     (name "libepoxy")
-    (version "1.5.4")
+    (version "1.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -687,7 +681,7 @@ OpenGL graphics API.")
                     version "/libepoxy-" version ".tar.xz"))
               (sha256
                (base32
-                "1ll9fach4v30dsyd47s5ial4gaiwihzr2afb77vxxzzy3mlcrlhb"))))
+                "0mh5bdgqfd8m4wj6jlvn4ac94sgfa8r6ish75ciwrhdw47dn65i6"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -705,10 +699,10 @@ OpenGL graphics API.")
                #t))))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
-    (inputs
-     `(("mesa" ,mesa)))
+     (list pkg-config python))
+    (propagated-inputs
+     ;; epoxy.pc: 'Requires.private: gl egl'
+     (list mesa))
     (home-page "https://github.com/anholt/libepoxy/")
     (synopsis "A library for handling OpenGL function pointer management")
     (description
@@ -742,11 +736,9 @@ OpenGL graphics API.")
                         (("if with_glx")
                          "if false")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 libxext xorgproto))
     (synopsis "Vendor-neutral OpenGL dispatch library")
     (description
      "libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL
@@ -793,9 +785,9 @@ Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.")
                           ;; Remove these flags from 'install' commands.
                           (("-o root -g root") ""))))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("mesa" ,mesa)))
+     (list mesa))
     (home-page "https://www.lonesock.net/soil.html")
     (synopsis "OpenGL texture loading library")
     (description
@@ -820,18 +812,16 @@ OpenGL.")
      '(#:tests? #f ; no test target
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("unzip" ,unzip)))
+     (list doxygen unzip))
     (propagated-inputs
-     `(("mesa" ,mesa)                             ;included in public headers
-
-       ;; These are in 'Requires.private' of 'glfw3.pc'.
-       ("libx11" ,libx11)
-       ("libxrandr" ,libxrandr)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("libxcursor" ,libxcursor)
-       ("libxxf86vm" ,libxxf86vm)))
+     (list mesa ;included in public headers
+           ;; These are in 'Requires.private' of 'glfw3.pc'.
+           libx11
+           libxrandr
+           libxi
+           libxinerama
+           libxcursor
+           libxxf86vm))
     (home-page "https://www.glfw.org")
     (synopsis "OpenGL application development library")
     (description
@@ -859,7 +849,7 @@ and surfaces, receiving input and events.")
       (build-system cmake-build-system)
       (arguments `(#:tests? #f))        ; no tests included
       (inputs
-       `(("mesa" ,mesa)))
+       (list mesa))
       ;; Extempore refuses to build on architectures other than x86_64
       (supported-systems '("x86_64-linux"))
       (home-page "https://github.com/extemporelang/nanovg")
@@ -884,9 +874,7 @@ and visualizations.")
         (base32 "1sgzv547h7hrskb9qd0x5yp45kmhvibjwj2mfswv95lg070h074d"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("zlib" ,zlib)))
+     (list libpng mesa zlib))
     (arguments
      `(#:tests? #f))                    ; no tests
     (home-page "http://www.geuz.org/gl2ps/")
@@ -922,12 +910,8 @@ mixed vector/bitmap output.")
                                          (assoc-ref %outputs "out") "/lib")
                           "-DVGL_USESSL=1"))) ; use OpenSSL
     (build-system cmake-build-system)
-    (inputs `(("glu" ,glu)
-              ("libjpeg-turbo" ,libjpeg-turbo)
-              ("libxtst" ,libxtst)
-              ("mesa" ,mesa)
-              ("openssl" ,openssl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list glu libjpeg-turbo libxtst mesa openssl))
+    (native-inputs (list pkg-config))
     (home-page "https://www.virtualgl.org")
     (synopsis "Redirects 3D commands from an OpenGL application onto a 3D
 graphics card")
@@ -1044,7 +1028,7 @@ the glProgramViewportFlip before it was replaced with glProgramViewportInfo.")
                  (install-file "csharp/bin/MojoShader-CS.dll" (string-append out "/lib"))
                  #t))))))
       (native-inputs
-       `(("mono" ,mono)))
+       (list mono))
       (home-page "https://github.com/FNA-XNA/MojoShader")
       (synopsis "C# wrapper for MojoShader")
       (description
@@ -1094,17 +1078,17 @@ is written in a way that can be used for any general C# application.")
                  (("libGLESv2.so") (string-append mesa "/lib/libGLESv2.so")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("libdrm" ,libdrm)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list eudev
+           libdrm
+           libjpeg-turbo
+           libpng
+           libx11
+           libxcb
+           mesa
+           wayland
+           wayland-protocols))
     (home-page "https://github.com/glmark2/glmark2")
     (synopsis "OpenGL 2.0 and OpenGL ES 2.0 benchmark")
     (description
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 8ed1e3a944..a18bffac55 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2021 Mark H Weaver <mhw@netris.org>
@@ -11,9 +11,12 @@
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,19 +37,24 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages nettle)
@@ -58,7 +66,6 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages selinux)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -71,6 +78,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-26)
   #:use-module ((srfi srfi-1) #:hide (zip))
 
   ;; Export variables up-front to allow circular dependency with the 'xorg'
@@ -90,7 +99,7 @@
 (define dbus
   (package
     (name "dbus")
-    (version "1.12.16")
+    (version "1.12.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -98,9 +107,8 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "107ckxaff1cv4q6kmfdi2fb1nlsv03312a7kf6lb4biglhpjv8jl"))
-              (patches (search-patches "dbus-CVE-2020-12049.patch"
-                                       "dbus-helper-search-path.patch"))))
+                "1zp5gpx61v1cpqf2zwb1cidhp9xylvw49d3zydkxqk6b1qa20xpp"))
+              (patches (search-patches "dbus-helper-search-path.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -133,20 +141,20 @@
                             "sysconfdir=/tmp/dummy"
                             "install"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; Dependencies to generate the doc.
-       ("docbook-xml" ,docbook-xml-4.4)
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("xmlto" ,xmlto)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("libxslt" ,libxslt)
-       ("yelp-tools" ,yelp-tools)))
+     (list pkg-config
+           ;; Dependencies to generate the doc.
+           docbook-xml-4.4
+           docbook-xsl
+           doxygen
+           xmlto
+           libxml2 ;for XML_CATALOG_FILES
+           libxslt
+           yelp-tools))
     (inputs
-     `(("expat" ,expat)
-       ;; Add a dependency on libx11 so that 'dbus-launch' has support for
-       ;; '--autolaunch'.
-       ("libx11" ,libx11)))
+     (list expat
+           ;; Add a dependency on libx11 so that 'dbus-launch' has support for
+           ;; '--autolaunch'.
+           libx11))
     (outputs '("out" "doc"))            ;22 MiB of HTML doc
     (home-page "https://www.freedesktop.org/wiki/Software/dbus/")
     (synopsis "Message bus for inter-process communication (IPC)")
@@ -170,254 +178,175 @@ shared NFS home directories.")
 
 (define glib
   (package
-   (name "glib")
-   (version "2.62.6")
-   (replacement glib/fixed)
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/"
-                                name "/" (string-take version 4) "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "174bsmbmcvaw69ff9g60q5sx0fn23rkhqcwqz17h5s7sprps4kqh"))
-            (patches (search-patches "glib-appinfo-watch.patch"
-                                     "glib-tests-timer.patch"))
-            (modules '((guix build utils)))
-            (snippet
-             '(begin
-                (substitute* "tests/spawn-test.c"
-                  (("/bin/sh") "sh"))
-                #t))))
-   (build-system meson-build-system)
-   (outputs '("out"           ; everything
-              "bin"))         ; glib-mkenums, gtester, etc.; depends on Python
-   (propagated-inputs
-    `(("pcre" ,pcre)  ; in the Requires.private field of glib-2.0.pc
-      ("libffi" ,libffi) ; in the Requires.private field of gobject-2.0.pc
-      ;; These are in the Requires.private field of gio-2.0.pc
-      ("util-linux" ,util-linux "lib")  ;for libmount
-      ("libselinux" ,libselinux)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("m4" ,m4) ; for installing m4 macros
-      ("dbus" ,dbus)                              ; for GDBus tests
-      ("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)
-      ("perl" ,perl)                              ; needed by GIO tests
-      ("tzdata" ,tzdata-for-tests)))                  ; for tests/gdatetime.c
-   (arguments
-    `(#:disallowed-references (,tzdata-for-tests)
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'patch-dbus-launch-path
-          (lambda* (#:key inputs #:allow-other-keys)
-            (let ((dbus (assoc-ref inputs "dbus")))
-              (substitute* "gio/gdbusaddress.c"
-                (("command_line = g_strdup_printf \\(\"dbus-launch")
-                 (string-append "command_line = g_strdup_printf (\""
-                                dbus "/bin/dbus-launch")))
-              #t)))
-        (add-after 'unpack 'patch-gio-launch-desktop
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              ;; See also <https://gitlab.gnome.org/GNOME/glib/issues/1633>
-              ;; for another future fix.
-              (substitute* "gio/gdesktopappinfo.c"
-               (("gio-launch-desktop")
-                (string-append out "/libexec/gio-launch-desktop")))
-              #t)))
-        ;; TODO: Remove the conditional in the next core-updates cycle.
-        ;; Needed to build glib on slower ARM nodes.
-        ,@(if (string-prefix? "arm" (%current-system))
-              `((add-after 'unpack 'increase-test-timeout
-                  (lambda _
-                    (substitute* "meson.build"
-                      (("test_timeout = 60")
-                       "test_timeout = 120")
-                      (("test_timeout_slow = 120")
-                       "test_timeout_slow = 180")))))
-              '())
-        (add-before 'build 'pre-build
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; For tests/gdatetime.c.
-            (setenv "TZDIR"
-                    (string-append (assoc-ref inputs "tzdata")
-                                   "/share/zoneinfo"))
-
-            ;; Some tests want write access there.
-            (setenv "HOME" (getcwd))
-            (setenv "XDG_CACHE_HOME" (getcwd))
-            #t))
-        (add-after 'unpack 'disable-failing-tests
-          (lambda _
-            (let ((disable
-                   (lambda (test-file test-paths)
-                     (define pattern+procs
-                       (map (lambda (test-path)
-                              (cons
-                               ;; XXX: only works for single line statements.
-                               (format #f "g_test_add_func.*\"~a\".*" test-path)
-                               (const "")))
-                            test-paths))
-                     (substitute test-file pattern+procs)))
-                  (failing-tests
-                   '(("glib/tests/thread.c"
-                      (;; prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64
-                       ;; as found on hydra.gnu.org, and strace(1) doesn't
-                       ;; recognize it.
-                       "/thread/thread4"))
-
-                     ;; This tries to find programs in FHS directories.
-                     ("glib/tests/utils.c"
-                      ("/utils/find-program"))
-
-                     ;; This fails because "glib/tests/echo-script" cannot be
-                     ;; found.
-                     ("glib/tests/spawn-singlethread.c"
-                      ("/gthread/spawn-script"))
-
-                     ("glib/tests/timer.c"
-                      (;; fails if compiler optimizations are enabled, which they
-                       ;; are by default.
-                       "/timer/stop"))
-
-                     ("gio/tests/gapplication.c"
-                      (;; XXX: proven to be unreliable.  See:
-                       ;;  <https://bugs.debian.org/756273>
-                       ;;  <http://bugs.gnu.org/18445>
-                       "/gapplication/quit"
-
-                       ;; XXX: fails randomly for unknown reason. See:
-                       ;;  <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00215.html>
-                       "/gapplication/local-actions"))
-
-                     ("gio/tests/contenttype.c"
-                      (;; XXX: requires shared-mime-info.
-                       "/contenttype/guess"
-                       "/contenttype/guess_svg_from_data"
-                       "/contenttype/subtype"
-                       "/contenttype/list"
-                       "/contenttype/icon"
-                       "/contenttype/symbolic-icon"
-                       "/contenttype/tree"))
-
-                     ("gio/tests/appinfo.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/appinfo/associations"))
-
-                     ("gio/tests/desktop-app-info.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/desktop-app-info/delete"
-                       "/desktop-app-info/default"
-                       "/desktop-app-info/fallback"
-                       "/desktop-app-info/lastused"
-                       "/desktop-app-info/search"))
-
-                     ("gio/tests/gdbus-peer.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/codegen-peer-to-peer"))
-
-                     ("gio/tests/gdbus-address-get-session.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/x11-autolaunch"))
-
-                     ("gio/tests/gsocketclient-slow.c"
-                      (;; These tests tries to resolve "localhost", and fails.
-                       "/socket-client/happy-eyeballs/slow"
-                       "/socket-client/happy-eyeballs/cancellation/delayed"))
-
-                     )))
-              (for-each (lambda (x) (apply disable x)) failing-tests)
-              #t)))
-        (replace 'check
-          (lambda _
-            (setenv "MESON_TESTTHREADS"
-                    (number->string (parallel-job-count)))
-            ;; Do not run tests marked as "flaky".
-            (invoke "meson" "test" "--no-suite" "flaky")))
-        ;; TODO: meson does not permit the bindir to be outside of prefix.
-        ;; See https://github.com/mesonbuild/meson/issues/2561
-        ;; We can remove this once meson is patched.
-        (add-after 'install 'move-executables
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p bin)
-              (rename-file (string-append out "/bin")
-                           (string-append bin "/bin"))
-              ;; This one is an implementation detail of glib.
-              ;; It is wrong that that's in "/bin" in the first place,
-              ;; but that's what upstream is doing right now.
-              ;; See <https://gitlab.gnome.org/GNOME/glib/issues/1633>.
-              (mkdir (string-append out "/libexec"))
-              (rename-file (string-append bin "/bin/gio-launch-desktop")
-                           (string-append out "/libexec/gio-launch-desktop"))
-              ;; Do not refer to "bindir", which points to "${prefix}/bin".
-              ;; We don't patch "bindir" to point to "$bin/bin", because that
-              ;; would create a reference cycle between the "out" and "bin"
-              ;; outputs.
-              (substitute* (list (string-append out "/lib/pkgconfig/gio-2.0.pc")
-                                 (string-append out "/lib/pkgconfig/glib-2.0.pc"))
-                (("bindir=\\$\\{prefix\\}/bin") "")
-                (("=\\$\\{bindir\\}/") "="))
-              #t))))))
-      ;; TODO: see above for explanation.
-      ;; #:configure-flags (list (string-append "--bindir="
-      ;;                                        (assoc-ref %outputs "bin")
-      ;;                                        "/bin"))
-
-   (native-search-paths
-    ;; This variable is not really "owned" by GLib, but several related
-    ;; packages refer to it: gobject-introspection's tools use it as a search
-    ;; path for .gir files, and it's also a search path for schemas produced
-    ;; by 'glib-compile-schemas'.
-    (list (search-path-specification
-           (variable "XDG_DATA_DIRS")
-           (files '("share")))
-          ;; To load extra gio modules from glib-networking, etc.
-          (search-path-specification
-           (variable "GIO_EXTRA_MODULES")
-           (files '("lib/gio/modules")))))
-   (search-paths native-search-paths)
-   (properties '((hidden? . #t)))
-
-   (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
-   (description
-    "GLib provides data structure handling for C, portability wrappers,
-and interfaces for such runtime functionality as an event loop, threads,
-dynamic loading, and an object system.")
-   (home-page "https://developer.gnome.org/glib/")
-   (license license:lgpl2.1+)))
+    (name "glib")
+    (version "2.70.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/"
+                       name "/" (string-take version 4) "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0hh7hk02fkm1bn48k4z8f3kgv9qbni5z22gizd567fn527w7s390"))
+       (patches
+        (search-patches "glib-appinfo-watch.patch"
+                        "glib-skip-failing-test.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "tests/spawn-test.c"
+             (("/bin/sh") "sh"))))))
+    (build-system meson-build-system)
+    (outputs '("out"                    ;libraries, locales, etc
+               "static"                 ;static libraries
+               "bin"                    ;executables; depends on Python
+               "debug"))
+    (arguments
+     `(#:disallowed-references
+       (,tzdata-for-tests
+        ;; Verify glib-mkenums, gtester, ... use the cross-compiled
+        ;; python.
+        ,@(if (%current-target-system)
+              (map (cut gexp-input <> #:native? #t)
+                   `(,(this-package-native-input "python")
+                     ,(this-package-native-input "python-wrapper")))
+              '()))
+       #:configure-flags (list "--default-library=both"
+                               "-Dman=false"
+                               "-Dselinux=disabled"
+                               (string-append "--bindir="
+                                              (assoc-ref %outputs "bin")
+                                              "/bin"))
+       #:phases
+       (modify-phases %standard-phases
+         ;; Needed to pass the test phase on slower ARM and i686 machines.
+         (add-after 'unpack 'increase-test-timeout
+           (lambda _
+             (substitute* "meson.build"
+               (("(test_timeout.*) = ([[:digit:]]+)" all first second)
+                (string-append first " = " second "0")))))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "gio/tests/meson.build"
+               ((".*'testfilemonitor'.*") ;marked as flaky
+                ""))
+             (with-directory-excursion "glib/tests"
+               (substitute* '("unix.c" "utils.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
+             (with-directory-excursion "gio/tests"
+               (substitute* '("contenttype.c" "gdbus-address-get-session.c"
+                              "gdbus-peer.c" "appinfo.c" "desktop-app-info.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
 
-(define glib/fixed
-  (package
-    (inherit glib)
-    (source (origin
-              (inherit (package-source glib))
-              (patches
-               (append (search-patches "glib-CVE-2021-27218.patch"
-                                       "glib-CVE-2021-27219-01.patch"
-                                       "glib-CVE-2021-27219-02.patch"
-                                       "glib-CVE-2021-27219-03.patch"
-                                       "glib-CVE-2021-27219-04.patch"
-                                       "glib-CVE-2021-27219-05.patch"
-                                       "glib-CVE-2021-27219-06.patch"
-                                       "glib-CVE-2021-27219-07.patch"
-                                       "glib-CVE-2021-27219-08.patch"
-                                       "glib-CVE-2021-27219-09.patch"
-                                       "glib-CVE-2021-27219-10.patch"
-                                       "glib-CVE-2021-27219-11.patch"
-                                       "glib-CVE-2021-27219-12.patch"
-                                       "glib-CVE-2021-27219-13.patch"
-                                       "glib-CVE-2021-27219-14.patch"
-                                       "glib-CVE-2021-27219-15.patch"
-                                       "glib-CVE-2021-27219-16.patch"
-                                       "glib-CVE-2021-27219-17.patch"
-                                       "glib-CVE-2021-27219-18.patch"
-                                       "glib-CVE-2021-28153.patch")
-                       (origin-patches (package-source glib))))))))
+             ,@(if (target-x86-32?)
+                   ;; Comment out parts of timer.c that fail on i686 due to
+                   ;; excess precision when building with GCC 10:
+                   ;; <https://gitlab.gnome.org/GNOME/glib/-/issues/820>.
+                   '((substitute* "glib/tests/timer.c"
+                       (("^  g_assert_cmpuint \\(micros.*" all)
+                        (string-append "//" all "\n"))
+                       (("^  g_assert_cmpfloat \\(elapsed, ==.*" all)
+                        (string-append "//" all "\n"))))
+                   '())))
+         ;; Python references are not being patched in patch-phase of build,
+         ;; despite using python-wrapper as input. So we patch them manually.
+         ;;
+         ;; These python scripts are both used during build and installed,
+         ;; so at first, use a python from 'native-inputs', not 'inputs'. When
+         ;; cross-compiling, the 'patch-shebangs' phase will replace
+         ;; the native python with a python from 'inputs'.
+         (add-after 'unpack 'patch-python-references
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (substitute* '("gio/gdbus-2.0/codegen/gdbus-codegen.in"
+                            "glib/gtester-report.in"
+                            "gobject/glib-genmarshal.in"
+                            "gobject/glib-mkenums.in")
+               (("@PYTHON@")
+                (search-input-file (or native-inputs inputs)
+                                   (string-append
+                                    "/bin/python"
+                                    ,(version-major+minor
+                                      (package-version python))))))))
+         (add-before 'check 'pre-check
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             ;; For tests/gdatetime.c.
+             (setenv "TZDIR"
+                     (search-input-directory (or native-inputs inputs)
+                                             "share/zoneinfo"))
+             ;; Some tests want write access there.
+             (setenv "HOME" (getcwd))
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (add-after 'install 'move-static-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (static (assoc-ref outputs "static")))
+               (mkdir-p (string-append static "/lib"))
+               (for-each (lambda (a)
+                           (rename-file a (string-append static "/lib/"
+                                                         (basename a))))
+                         (find-files out "\\.a$")))))
+         (add-after 'install 'patch-pkg-config-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Do not refer to "bindir", which points to "${prefix}/bin".
+               ;; We don't patch "bindir" to point to "$bin/bin", because that
+               ;; would create a reference cycle between the "out" and "bin"
+               ;; outputs.
+               (substitute*
+                   (list
+                    (string-append out "/lib/pkgconfig/gio-2.0.pc")
+                    (string-append out "/lib/pkgconfig/glib-2.0.pc"))
+                 (("^bindir=.*")
+                  "")
+                 (("=\\$\\{bindir\\}/")
+                  "="))))))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("m4" ,m4)                       ; for installing m4 macros
+       ("perl" ,perl)                   ; needed by GIO tests
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)               ; For 'patch-python-references
+       ("python-wrapper" ,python-wrapper)
+       ("tzdata" ,tzdata-for-tests)))   ; for tests/gdatetime.c
+    (inputs
+     (list bash-completion
+           ;; "python", "python-wrapper" and "bash-minimal"
+           ;; are for the 'patch-shebangs' phase, to make
+           ;; sure the installed scripts end up with a correct shebang
+           ;; when cross-compiling.
+           python
+           python-wrapper
+           bash-minimal
+           dbus
+           libelf))
+    (propagated-inputs
+     (list libffi ; in the Requires.private field of gobject-2.0.pc
+           pcre ; in the Requires.private field of glib-2.0.pc
+           `(,util-linux "lib") ;for libmount
+           zlib))         ; in the Requires.private field of glib-2.0.pc
+    (native-search-paths
+     ;; This variable is not really "owned" by GLib, but several related
+     ;; packages refer to it: gobject-introspection's tools use it as a search
+     ;; path for .gir files, and it's also a search path for schemas produced
+     ;; by 'glib-compile-schemas'.
+     (list
+      (search-path-specification
+       (variable "XDG_DATA_DIRS")
+       (files '("share")))
+      ;; To load extra gio modules from glib-networking, etc.
+      (search-path-specification
+       (variable "GIO_EXTRA_MODULES")
+       (files '("lib/gio/modules")))))
+    (search-paths native-search-paths)
+    (synopsis "Low-level core library for GNOME projects")
+    (description "GLib provides the core application building blocks for
+libraries and applications written in C.  It provides the core object system
+used in GNOME, the main loop implementation, and a large set of utility
+functions for strings and common data structures.")
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (license license:lgpl2.1+)
+    (properties '((hidden? . #t)))))
 
 (define-public glib-with-documentation
   ;; glib's doc must be built in a separate package since it requires gtk-doc,
@@ -426,95 +355,151 @@ dynamic loading, and an object system.")
     (properties (alist-delete 'hidden? (package-properties glib)))
     (outputs (cons "doc" (package-outputs glib))) ; 20 MiB of GTK-Doc reference
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)             ; for the doc
-       ("docbook-xml" ,docbook-xml)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gtk-doc" ,gtk-doc)
        ("libxml2" ,libxml2)
+       ("xsltproc" ,libxslt)
        ,@(package-native-inputs glib)))
     (arguments
      (substitute-keyword-arguments (package-arguments glib)
        ((#:configure-flags flags ''())
-        `(cons "-Dgtk_doc=true" ,flags))
+        `(cons "-Dgtk_doc=true"
+               (delete "-Dman=false" ,flags)))
        ((#:phases phases)
         `(modify-phases ,phases
+           (add-after 'unpack 'patch-docbook-xml
+             (lambda* (#:key inputs #:allow-other-keys)
+               (with-directory-excursion "docs"
+                 (substitute* (find-files "." "\\.xml$")
+                   (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.5")
+                                   "/xml/dtd/docbook/"))
+                   (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.2")
+                                   "/xml/dtd/docbook/"))))))
            (add-after 'install 'move-doc
              (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out"))
-                     (doc (assoc-ref outputs "doc"))
-                     (html (string-append "/share/gtk-doc")))
-                 (copy-recursively (string-append out html)
-                                   (string-append doc html))
-                 (delete-file-recursively (string-append out html))
-                 #t)))))))))
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (assoc-ref outputs "doc"))
+                      (html (string-append "/share/gtk-doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (rename-file
+                  (string-append out html)
+                  (string-append doc html)))))))))))
 
-;;; TODO: Merge into glib as a 'static' output on core-updates.
-(define-public glib-static
-  (hidden-package
-   (package
-     (inherit glib)
-     (name "glib-static")
-     (outputs '("out"))
-     (arguments
-      (substitute-keyword-arguments (package-arguments glib)
-        ((#:configure-flags flags ''())
-         `(cons* "--default-library=static"
-                 "-Dselinux=disabled"
-                 "-Dman=false"
-                 "-Dgtk_doc=false"
-                 "-Dinternal_pcre=false"
-                 ,flags))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (delete 'move-executables)
-            (replace 'install
-              ;; Only install the static libraries.
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (lib (string-append out "/lib")))
-                  (for-each (lambda (f)
-                              (install-file f lib))
-                            (find-files "." "\\.a$"))))))))))))
+(define (python-extension-suffix python triplet)
+  "Determine the suffix for C extensions for PYTHON when compiled
+for TRIPLET."
+  ;; python uses strings like 'x86_64-linux-gnu' instead of
+  ;; 'x86_64-unknown-linux-gnu'.
+  (define normalised-system
+    (string-replace-substring triplet "-unknown-" "-"))
+  (define major.minor (version-major+minor (package-version python)))
+  (define majorminor (string-delete #\. major.minor))
+  (string-append
+    ;; If guix' python package used "--with-pydebug", a #\d would
+    ;; need to be added, likewise "--with-pymalloc" and "--with-wide-unicode"
+    ;; would require a #\m and #\u, see cpython's configure.ac.
+    ".cpython-" majorminor "-" normalised-system
+    (if (target-mingw? triplet)
+        ".dll"
+        ".so")))
+
+(define (correct-library-name-phase python name)
+  "Return a G-exp evaluating to a phase renaming the python extension NAME
+from what Meson thinks its name should be to what python expects its name
+to be.  NAME must not include the platform-specific suffix.  This can only
+be used when cross-compiling."
+  #~(lambda _
+      (define name #$name)
+      (define native-suffix
+        #$(python-extension-suffix python
+                                   (nix-system->gnu-triplet (%current-system))))
+      (define target-suffix
+        #$(python-extension-suffix python (%current-target-system)))
+      (define native-name
+        (string-append name native-suffix))
+      (define target-name
+        (string-append name target-suffix))
+      (rename-file native-name target-name)))
 
 (define gobject-introspection
   (package
     (name "gobject-introspection")
-    (version "1.62.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://gnome/sources/"
-                       "gobject-introspection/" (version-major+minor version)
-                       "/gobject-introspection-" version ".tar.xz"))
-       (sha256
-        (base32 "18lhglg9v6y83lhqzyifc1z0wrlawzrhzzxx0a3h1g7xaz97xvmi"))
-       (patches
-        (search-patches
-         "gobject-introspection-cc.patch"
-         "gobject-introspection-girepository.patch"
-         "gobject-introspection-absolute-shlib-path.patch"))))
+    (version "1.66.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnome/sources/"
+                   "gobject-introspection/" (version-major+minor version)
+                   "/gobject-introspection-" version ".tar.xz"))
+             (sha256
+              (base32 "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x"))
+             (patches (search-patches
+                       "gobject-introspection-cc.patch"
+                       "gobject-introspection-girepository.patch"
+                       "gobject-introspection-absolute-shlib-path.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
+     `(,@(if (%current-target-system)
+             `(#:configure-flags
+               '("-Dgi_cross_use_prebuilt_gi=true"
+                 ;; Building introspection data requires running binaries
+                 ;; for ‘host’ on ‘build’, so don't do that.
+                 ;;
+                 ;; TODO: it would be nice to have introspection data anyways
+                 ;; as discussed here: https://issues.guix.gnu.org/50201#60.
+                 "-Dbuild_introspection_data=false"))
+             '())
+       #:phases
+       ,#~
        (modify-phases %standard-phases
+         #$@(if (%current-target-system)
+                ;; 'typelibs' is undefined.
+                `((add-after 'unpack 'set-typelibs
+                    (lambda _
+                      (substitute* "meson.build"
+                        (("\\bsources: typelibs\\b")
+                         "sources: []")))))
+                '())
          (add-after 'unpack 'do-not-use-/usr/bin/env
            (lambda _
              (substitute* "tools/g-ir-tool-template.in"
                (("#!@PYTHON_CMD@")
                 (string-append "#!" (which "python3"))))
-             #t)))))
+             #t))
+         #$@(if (%current-target-system)
+               ;; Meson gives python extensions an incorrect name, see
+               ;; <https://github.com/mesonbuild/meson/issues/7049>.
+                #~((add-after 'install 'rename-library
+                     #$(correct-library-name-phase
+                         (this-package-input "python")
+                         #~(string-append #$output
+                                          "/lib/gobject-introspection/giscanner"
+                                          "/_giscanner"))))
+                #~()))))
     (native-inputs
      `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ;; TODO(core-updates): Unconditionally place "flex" and "bison"
+       ;; in 'native-inputs'.
+       ,@(if (%current-target-system)
+             `(("bison" ,bison)
+               ("flex" ,flex))
+             '())))
     (inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("glib" ,glib)
-       ("python" ,python-wrapper)
+     `(,@(if (%current-target-system)
+             `(("python" ,python))
+             `(("bison" ,bison)
+               ("flex" ,flex)
+               ("python" ,python-wrapper)))
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(;; In practice, GIR users will need libffi when using
-       ;; gobject-introspection.
-       ("libffi" ,libffi)))
+     (list glib
+           ;; In practice, GIR users will need libffi when using
+           ;; gobject-introspection.
+           libffi))
     (native-search-paths
      (list
       (search-path-specification
@@ -550,7 +535,7 @@ provide bindings to call into the C library.")
                "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("file" ,file)))
+     (list file))
     (propagated-inputs
      `(;; Propagate gettext because users expect it to be there, and so does
        ;; the `intltool-update' script.
@@ -598,9 +583,7 @@ The intltool collection can be used to do these things:
                "1acjgf8zlyk7qckdk19iqaca4jcmywd7vxjbcs1mm6kaf8icqcv2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("python-libxml2" ,python-libxml2)
-       ("python" ,python)))
+     (list libxml2 python-libxml2 python))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -609,7 +592,7 @@ The intltool collection can be used to do these things:
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/itstool")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "http://www.itstool.org")
     (synopsis "Tool to translate XML documents with PO files")
@@ -646,14 +629,22 @@ translated.")
               (base32
                "09g8swvc95bk1z6j8sw463p2v0dqmgm2zjfndf7i8sbcyq67dr3w"))))
     (build-system gnu-build-system)
+    (arguments
+     (if (%current-target-system)
+         `(#:configure-flags
+           ;; Run a native 'dbus-binding-tool' instead of a cross-compiled
+           ;; 'dbus-binding-tool' when cross-compiling.
+           ,#~(list
+               (string-append
+                "--with-dbus-binding-tool="
+                #+(file-append this-package "/bin/dbus-binding-tool"))))
+         '()))
     (propagated-inputs ; according to dbus-glib-1.pc
-     `(("dbus" ,dbus)
-       ("glib" ,glib)))
+     (list dbus glib))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (home-page "https://dbus.freedesktop.org/doc/dbus-glib/")
     (synopsis "D-Bus GLib bindings")
     (description
@@ -664,66 +655,151 @@ by GDBus included in Glib.")
 (define libsigc++
   (package
     (name "libsigc++")
-    (version "2.10.3")
+    (version "3.0.6")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/libsigc++/"
-                                 (version-major+minor version) "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "11j7j1jv4z58d9s7jvl42fnqa1dzl4idgil9r45cjv1w673dys0b"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("m4" ,m4)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/libsigc++/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1kn57b039lg20182lnchl1ys27vf34brn43f895cal8nc7sdq3mp"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     (list boost))
     (home-page "https://libsigcplusplus.github.io/libsigcplusplus/")
     (synopsis "Type-safe callback system for standard C++")
     (description
      "Libsigc++ implements a type-safe callback system for standard C++.  It
-allows you to define signals and to connect those signals to any callback
-function, either global or a member function, regardless of whether it is
-static or virtual.
+     allows you to define signals and to connect those signals to any callback
+     function, either global or a member function, regardless of whether it is
+     static or virtual.
 
-It also contains adaptor classes for connection of dissimilar callbacks and
-has an ease of use unmatched by other C++ callback libraries.")
-    (license license:lgpl2.1+)))
+     It also contains adaptor classes for connection of dissimilar callbacks and
+     has an ease of use unmatched by other C++ callback libraries.")
+    (license license:lgpl3+)))
+
+ (define-public libsigc++-2
+   (package
+    (inherit libsigc++)
+    (name "libsigc++")
+    (version "2.9.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/libsigc++/"
+                       (version-major+minor version)
+                       "/libsigc++-" version ".tar.xz"))
+       (sha256
+        (base32 "0zq963d0sss82q62fdfjs7l9iwbdch51albck18cb631ml0v7y8b"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))))
 
 (define glibmm
   (package
     (name "glibmm")
-    (version "2.62.0")
+    (version "2.68.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/glibmm/"
-                                 (version-major+minor version)
-                                 "/glibmm-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1ziwx6r7k7wbvg4qq1rgrv8zninapgrmhn1hs6926a3krh9ryr9n"))))
-    (build-system gnu-build-system)
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/glibmm/"
+                                  (version-major+minor version)
+                                  "/glibmm-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0xgkyhb2876mcyyib5rk3ya9aingyj68h02nl22yvkhx35rqbwy1"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'pre-build
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; This test uses /etc/fstab as an example file to read
-             ;; from; choose a better example.
-             (substitute* "tests/giomm_simple/main.cc"
-               (("/etc/fstab")
-                (string-append (getcwd)
-                               "/tests/giomm_simple/main.cc")))
-
-             ;; This test does a DNS lookup, and then expects to be able
-             ;; to open a TLS session; just skip it.
-             (substitute* "tests/giomm_tls_client/main.cc"
-               (("Gio::init.*$")
-                "return 77;\n"))
-             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")))
+             (substitute* "tests/meson.build"
+               ;; This test uses /etc/fstab as an example file to read
+               ;; from; disable it.
+               (("[ \t]*.*giomm_simple.*$") "")
+               ;; This test does a DNS lookup, and then expects to be able
+               ;; to open a TLS session; just skip it.
+               (("[ \t]*.*giomm_tls_client.*$") ""))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("glib:bin" ,glib "bin")
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("libsigc++" ,libsigc++)
-       ("glib" ,glib)))
+     (list libsigc++ glib))
     (home-page "https://gtkmm.org/")
     (synopsis "C++ interface to the GLib library")
     (description
@@ -735,7 +811,7 @@ useful for C++.")
    (package
     (inherit glibmm)
     (name "glibmm")
-    (version "2.64.2")
+    (version "2.64.5")
     (source
      (origin
        (method url-fetch)
@@ -744,10 +820,10 @@ useful for C++.")
                        (version-major+minor version)
                        "/glibmm-" version ".tar.xz"))
        (sha256
-        (base32 "1v6lp23fr2qh4zshcnm28sn29j3nzgsvcqj2nhmrnvamipjq4lm7"))))
+        (base32 "11m37sbx0i18cl17d0fkq0bik4bbzlb5n8kcl651jhci5ipci3sh"))))
      (propagated-inputs
-      `(("libsigc++" ,libsigc++)
-        ("glib" ,glib)))))
+      (modify-inputs (package-propagated-inputs glibmm)
+        (prepend libsigc++-2)))))
 
 (define-public python2-pygobject-2
   (package
@@ -777,7 +853,7 @@ useful for C++.")
        ("python2-pycairo" ,python2-pycairo)
        ("gobject-introspection" ,gobject-introspection)))
     (propagated-inputs
-     `(("libffi" ,libffi)))             ;mentioned in pygobject-2.0.pc
+     (list libffi))             ;mentioned in pygobject-2.0.pc
     (arguments
      `(#:tests? #f                      ;segfaults during tests
        #:configure-flags '("LIBS=-lcairo-gobject")))
@@ -790,7 +866,7 @@ useful for C++.")
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-    (version "3.34.0")
+    (version "3.40.1")
     (source
      (origin
        (method url-fetch)
@@ -799,7 +875,7 @@ useful for C++.")
                            "/pygobject-" version ".tar.xz"))
        (sha256
         (base32
-         "06i7ynnbvgpz0gw09zsjbvhgcp5qz4yzdifw27qjwdazg2mckql7"))
+         "0d80g5kgf2i9cginyhalvb7ibfk9g30yilqzmcsw6h6byj8xbih0"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -811,18 +887,24 @@ useful for C++.")
                        '("test_atoms.py" "test_overrides_gtk.py"))
              #t)))))
     (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; The default 90 seconds can be too low on slower machines.
+               (invoke "meson" "test" "--timeout-multiplier" "5")))))))
     (native-inputs
      `(("glib-bin" ,glib "bin")
        ("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+       ("python-pytest" ,python-pytest)
+       ("python-wrapper" ,python-wrapper))) ; For patching shebangs
     (inputs
-     `(("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list python python-pycairo gobject-introspection))
     (propagated-inputs
      ;; pygobject-3.0.pc refers to all these.
-     `(("glib" ,glib)
-       ("libffi" ,libffi)))
+     (list glib libffi))
     ;; For finding typelib files, since gobject-introscpetion isn't propagated.
     (native-search-paths (package-native-search-paths gobject-introspection))
     (home-page "https://live.gnome.org/PyGObject")
@@ -875,10 +957,9 @@ useful for C++.")
                 "1q5075d6v2g5sm675hyzrcpxsrh09z83crfci8b0wl3jwmnz0frg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://metacpan.org/release/Glib")
     (synopsis "Perl wrappers for the GLib utility and Object libraries")
     (description "This module provides perl access to GLib and GLib's GObject
@@ -901,12 +982,9 @@ up the Gnome environment, and are used in many unrelated projects.")
         (base32 "0mxg6pz8qfyipw0ypr54alij0c4adzg94f62702b2a6hkp5jhij6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("perl-cairo-gobject" ,perl-cairo-gobject)
-       ("perl-glib" ,perl-glib)))
+     (list gobject-introspection perl-cairo-gobject perl-glib))
     (home-page "https://metacpan.org/dist/Glib-Object-Introspection")
     (synopsis "Dynamically create Perl language bindings")
     (description "Glib::Object::Introspection uses the gobject-introspection and
@@ -971,9 +1049,7 @@ libraries.  Examples include gtk+, webkit, libsoup and many more.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; There are all in the Requires.private field of telepathy-glib.pc.
-     `(("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)))
+     (list dbus dbus-glib glib))
     (home-page "https://telepathy.freedesktop.org/wiki/")
     (synopsis "GLib Real-time communications framework over D-Bus")
     (description "Telepathy is a flexible, modular communications framework
@@ -1002,13 +1078,11 @@ This package provides the library for GLib applications.")
                 "0qafmy2i6dzx4n1dqp6pygyy6gjljnb7hwjcj2z11c1wgclsq4dw"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("dbus" ,dbus)))                      ;mentioned in the pkg-config file
+     (list dbus))                      ;mentioned in the pkg-config file
     (inputs
-     `(("efl" ,efl)
-       ("expat" ,expat)
-       ("glib" ,glib)))
+     (list efl expat glib libunwind))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(;; The 'configure' machinery fails to detect that it needs -lpthread.
        #:configure-flags (list "LDFLAGS=-lpthread")
@@ -1043,14 +1117,13 @@ programming language.  It also provides the @command{dbusxx-xml2cpp} and
      `(#:configure-flags '("-DENABLE_TESTS=ON"
                            "-DENABLE_TOOLS=ON"
                            "-DENABLE_GLIBMM=ON")))
-    (inputs `(("dbus" ,dbus)
-              ("libsigc++" ,libsigc++)
-              ("glibmm" ,glibmm)
-              ("python" ,python)
-              ("popt" ,popt)
-              ("expat" ,expat)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("m4" ,m4)))
+    (inputs (list dbus
+                  libsigc++
+                  glibmm
+                  python
+                  popt
+                  expat))
+    (native-inputs (list pkg-config m4))
     (synopsis "C++ wrapper for dbus")
     (description "Dbus-cxx is a C++ wrapper for dbus.\n
 It exposes the C API to allow direct manipulation and
@@ -1094,7 +1167,7 @@ Some codes examples can be find at:
        ("gtk+" ,gtk+)
        ("json-glib" ,json-glib)
        ("libarchive" ,libarchive)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (arguments
      `(#:configure-flags
        (list "-Ddep11=false"
@@ -1133,13 +1206,11 @@ metadata.")
          "1g0w8i5scmh7kfy9mmvv8q326627qf38z26mvczmn8x1yjgar8g7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list pkg-config perl-test-pod perl-test-pod-coverage))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (propagated-inputs
-     `(("perl-xml-twig" ,perl-xml-twig)))
+     (list perl-xml-twig))
     (home-page "https://metacpan.org/release/Net-DBus")
     (synopsis "Extension for the DBus bindings")
     (description "@code{Net::DBus} provides a Perl XS API to the DBus
@@ -1161,9 +1232,9 @@ of the DBus APIs, not concerning itself yet with the GLib or QT wrappers.")
          "1z4mbv8z0rad604xahijpg5szzi8qak07hbahh230z4jf96fkxvj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)))
+     (list dbus-glib))
     (home-page "https://metacpan.org/release/Net-DBus-GLib")
     (synopsis "Perl extension for the DBus GLib bindings")
     (description "This package provides an extension to the @code{Net::DBus}
@@ -1224,18 +1295,16 @@ simple methods via GObject-Introspection.")
                 "03sj1h0c2l08xa8phw013fnxr4fgav7l2mkjhzf9xk3dykwxcj8p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("dbus" ,dbus)
-
-       ;; These are required to build the manual.
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("xsltproc" ,libxslt)))
+     (list pkg-config
+           ;; For tests.
+           dbus
+           ;; These are required to build the manual.
+           docbook-xml-4.3
+           docbook-xsl
+           libxml2
+           libxslt))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://github.com/flatpak/xdg-dbus-proxy")
     (synopsis "D-Bus connection proxy")
     (description
@@ -1273,9 +1342,7 @@ to the host system, optionally with filters applied.")
                (("/bin/true") (which "true")))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("dbus-glib" ,dbus-glib)))
+     (list gtk+ glib dbus-glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("intltool" ,intltool)
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index d409d15c7a..afe9a96b91 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020 Ellis Kenyo <me@elken.dev>
 ;;; Copyright © 2020 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
 ;;;
@@ -78,11 +79,10 @@
                (("^\"\\$srcdir/configure\".*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     ;; When Arc is missing an icon, it looks in the Moka icon theme for it.
     (propagated-inputs
-     `(("moka-icon-theme" ,moka-icon-theme)))
+     (list moka-icon-theme))
     (synopsis "Arc icon theme")
     (description "The Arc icon theme provides a set of icons matching the
 style of the Arc GTK theme.  Icons missing from the Arc theme are provided by
@@ -145,8 +145,7 @@ the Obsidian icon theme.")
              (substitute* "meson.build"
                (("meson.add_install_script.*") "")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (synopsis "Faba icon theme")
     (description
      "Faba is a minimal icon set used as a basis for other themes such as
@@ -172,7 +171,7 @@ Moka")
     (propagated-inputs
      ;; Moka is based on Faba by using it as a fallback icon set instead of
      ;; bundling it, so we need to add it as a propagated input.
-     `(("faba-icon-theme" ,faba-icon-theme)))
+     (list faba-icon-theme))
     (synopsis "Moka icon theme")
     (description "Moka is a stylized desktop icon set, designed to be clear,
 simple and consistent.")
@@ -331,7 +330,7 @@ behavior, system tray and input source indicator for IBus.")
         (base32 "1dli9xb545n3xlj6q4wl0y5gzkm903zs47p8fiq71pdvbr6v38rj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")))
+     (list `(,glib "bin")))
     (arguments
      `(#:tests? #f                      ;no test defined in the project
        #:phases
@@ -386,7 +385,7 @@ easier to keep track of applications running in the background.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Transforms GNOME's dash into a dock")
     (description "This extension moves the dash out of the
 overview, transforming it into a dock for easier application launching and
@@ -471,7 +470,6 @@ faster window switching.")
        ("nautilus" ,nautilus)
        ("openssh" ,openssh)
        ("openssl" ,openssl)
-       ("python-nautilus" ,python-nautilus)
        ("python-pygobject" ,python-pygobject)
        ("upower" ,upower)))
     (native-inputs
@@ -521,10 +519,9 @@ control.")
                  (copy-recursively dir (string-append out pre dir))
                  #t))))))
       (native-inputs
-       `(("glib" ,glib "bin")
-         ("intltool" ,intltool)))
+       (list `(,glib "bin") intltool))
       (propagated-inputs
-       `(("glib" ,glib)))
+       (list glib))
       (synopsis "Hide app icon from GNOME's panel")
       (description "This extension hides the icon and/or title of the
 currently focused application in the top panel of the GNOME shell.")
@@ -563,11 +560,10 @@ currently focused application in the top panel of the GNOME shell.")
          (delete 'bootstrap)
          (delete 'configure))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib" ,glib "bin")))
+     (list glib
+           `(,glib "bin")))
     (synopsis "Icon taskbar for GNOME Shell")
     (description "This extension moves the dash into the gnome main
 panel so that the application launchers and system tray are combined
@@ -638,7 +634,7 @@ notebooks and tiling window managers.")
 (define-public arc-theme
   (package
     (name "arc-theme")
-    (version "20201013")
+    (version "20210412")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -647,30 +643,25 @@ notebooks and tiling window managers.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1x2l1mwjx68dwf3jb1i90c1q8nqsl1wf2zggcn8im6590k5yv39s"))))
-    (build-system gnu-build-system)
+                "0zs44dagp6baiyszlr1kj5ncap43fg32dv07rl46nxbds2p65lh4"))))
+    (build-system meson-build-system)
     (arguments
      '(#:configure-flags
-       (list "--disable-cinnamon")
+       '("-Dthemes=gnome-shell,gtk2,gtk3,metacity,plank,unity,xfwm")
        #:phases
        (modify-phases %standard-phases
-         ;; autogen.sh calls configure at the end of the script.
-         (replace 'bootstrap
-           (lambda _ (invoke "autoreconf" "-vfi")))
          (add-before 'build 'set-home   ;placate Inkscape
            (lambda _
              (setenv "HOME" (getcwd))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-compile-resources
-       ("gnome-shell" ,gnome-shell)
-       ("gtk+" ,gtk+)
-       ("inkscape" ,inkscape)
-       ("optipng" ,optipng)
-       ("pkg-config" ,pkg-config)
-       ("sassc" ,sassc/libsass-3.5)))
+     (list `(,glib "bin") ; for glib-compile-resources
+           gnome-shell
+           gtk+
+           inkscape
+           optipng
+           pkg-config
+           sassc/libsass-3.5))
     (synopsis "A flat GTK+ theme with transparent elements")
     (description "Arc is a flat theme with transparent elements for GTK 3, GTK
 2, and GNOME Shell which supports GTK 3 and GTK 2 based desktop environments
@@ -695,12 +686,12 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.")
                 "154qawiga792iimkpk3a6q8f4gm4r158wmsagkbqqbhj33kxgxhg"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("glib:bin" ,glib "bin")         ; for "glib-compile-resources"
-       ("librsvg" ,librsvg)
-       ("pkg-config" ,pkg-config)
-       ("ruby-sass" ,ruby-sass)
-       ("sassc" ,sassc)))
+     (list gtk+
+           `(,glib "bin") ; for "glib-compile-resources"
+           librsvg
+           pkg-config
+           ruby-sass
+           sassc))
     (home-page "https://shimmerproject.org/")
     (synopsis "Grey GTK+ theme based on Bluebird")
     (description "Greybird is a grey derivative of the Bluebird theme by the
@@ -742,10 +733,9 @@ Shimmer Project.  It supports GNOME, Unity, and Xfce.")
            (invoke "./install.sh" "-d" themesdir)
            #t))))
     (inputs
-     `(("gtk-engines" ,gtk-engines)))
+     (list gtk-engines))
     (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)))
+     (list bash coreutils))
     (synopsis "Flat design theme for GTK 3, GTK 2 and GNOME-Shell")
     (description "Matcha is a flat Design theme for GTK 3, GTK 2 and
 Gnome-Shell which supports GTK 3 and GTK 2 based desktop environments
@@ -770,8 +760,7 @@ like Gnome, Unity, Budgie, Pantheon, XFCE, Mate and others.")
             "0qaxxafsn5zd2ysgr0jyv5j73360mfdmxyd55askswlsfphssn74"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("sassc" ,sassc)))
+     (list gtk+ sassc))
     (home-page "https://github.com/nana-4/materia-theme")
     (synopsis "Material Design theme for a wide range of environments")
     (description "Materia is a Material Design theme for GNOME/GTK based
@@ -864,11 +853,10 @@ dark elements.  It supports GNOME, Unity, Xfce, and Openbox.")
              (apply invoke "./install.sh" configure-flags)
              #t)))))
     (inputs
-     `(("gtk-engines" ,gtk-engines)))
+     (list gtk-engines))
     (native-inputs
-     `(;("coreutils" ,coreutils)
-       ("gtk+" ,gtk+)
-       ("sassc" ,sassc)))
+     (list ;("coreutils" ,coreutils)
+           gtk+ sassc))
     (home-page "https://github.com/vinceliuice/Orchis-theme")
     (synopsis "Material Design theme for a wide range of environments")
     (description "Orchis is a Material Design them for GNOME/GTK based
@@ -917,8 +905,8 @@ variants.")
        ("json-glib" ,json-glib)
        ("vala" ,vala)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config
+           `(,glib "bin"))) ; for 'glib-compile-resources'
     (home-page "https://github.com/bitstower/markets")
     (synopsis "Stock, currency and cryptocurrency tracker")
     (description
@@ -932,7 +920,7 @@ track stocks, currencies and cryptocurrencies.")
     ;; Note to maintainer: VLS must be built with a Vala toolchain the same
     ;; version or newer. Therefore when you update this package you may need
     ;; to update Vala too.
-    (version "0.48.1")
+    (version "0.48.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -940,17 +928,13 @@ track stocks, currencies and cryptocurrencies.")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "12k095052jkvbiyz8gzkj6w7r7p16d5m18fyikl48yvh5nln8fw0"))))
+               (base32 "1gnvc91gdp3wj9r3r3xxfr09f9lw39cfypn2q5f0443dhhmp059j"))))
     (build-system meson-build-system)
     (arguments '(#:glib-or-gtk? #t))
     (inputs
-     `(("glib" ,glib)
-       ("json-glib" ,json-glib)
-       ("jsonrpc-glib" ,jsonrpc-glib)
-       ("libgee" ,libgee)
-       ("vala" ,vala-0.50)))
+     (list glib json-glib jsonrpc-glib libgee vala))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/benwaffle/vala-language-server")
     (synopsis "Language server for Vala")
     (description "The Vala language server is an implementation of the Vala
@@ -1014,10 +998,9 @@ palette.")
        #:make-flags
        (list (string-append "CC=" ,(cc-for-target)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list pkg-config vala))
     (home-page "https://github.com/Sweets/tiramisu")
     (synopsis "Desktop notifications, the UNIX way")
     (description "tiramisu is a notification daemon based on dunst that outputs
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 49a67e4e13..5f46eb4d63 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -39,7 +39,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2019 Jonathan Frederickson <jonathan@terracrypt.net>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
 ;;; Copyright © 2019, 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -60,6 +60,10 @@
 ;;; Copyright © 2020, 2021 Sébastien Lerique <sl@eauchat.org>
 ;;; Copyright © 2021 Trevor Hass <thass@okstate.edu>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -106,6 +110,7 @@
   #:use-module (gnu packages djvu)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages docker)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages flex)
@@ -136,6 +141,7 @@
   #:use-module (gnu packages inkscape)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages language)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libunistring)
@@ -143,8 +149,11 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lirc)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mail)
+  #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages music)
@@ -162,7 +171,6 @@
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
-  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages popt)
@@ -248,6 +256,11 @@
                   (string-append (assoc-ref inputs "docbook-xml-4.1.2")
                                  "/xml/dtd/docbook/"))))
              #t))
+         (add-before 'check 'set-home
+           (lambda _
+             ;; A test using GIO expects ~/.config/glib-2.0/settings to be
+             ;; writable.
+             (setenv "HOME" (getcwd))))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -266,11 +279,7 @@
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gssdp" ,gssdp)
-       ("gupnp" ,gupnp)
-       ("libsoup" ,libsoup)))
+     (list glib glib-networking gssdp gupnp libsoup))
     (synopsis "UPnP IGD for GNOME")
     (description "GUPnP-IGD is a library to handle UPnP IGD port mapping.")
     (home-page "https://gitlab.gnome.org/GNOME/gupnp-igd")
@@ -306,26 +315,26 @@
                  (("(\")(growisofs)" _ prefix command)
                   (string-append prefix dvd+rw-tools "/bin/" command)))))))))
     (propagated-inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("glib" ,glib "bin")                       ; glib-compile-schemas, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("dvd+rw-tools" ,dvd+rw-tools)
-       ("glib" ,glib)
-       ("gnome-doc-utils" ,gnome-doc-utils)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libice" ,libice)
-       ("libnotify" ,libnotify)
-       ("libsm" ,libsm)
-       ("libxml2" ,libxml2)
-       ("totem-pl-parser" ,totem-pl-parser)))
+     (list hicolor-icon-theme))
+    (native-inputs
+     (list intltool
+           itstool
+           `(,glib "bin") ; glib-compile-schemas, etc.
+           gobject-introspection
+           pkg-config))
+    (inputs
+     (list dvd+rw-tools
+           glib
+           gnome-doc-utils
+           gstreamer
+           gst-plugins-base
+           gtk+
+           libcanberra
+           libice
+           libnotify
+           libsm
+           libxml2
+           totem-pl-parser))
     (home-page "https://wiki.gnome.org/Apps/Brasero")
     (synopsis "CD/DVD burning tool for Gnome")
     (description "Brasero is an application to burn CD/DVD for the Gnome
@@ -333,46 +342,32 @@ Desktop.  It is designed to be as simple as possible and has some unique
 features to enable users to create their discs easily and quickly.")
     (license license:gpl2+)))
 
-(define-public libcloudproviders
+;;; Minimal variant, used to break a cycle with Inkscape.
+(define-public libcloudproviders-minimal
   (package
-    (name "libcloudproviders")
+    (name "libcloudproviders-minimal")
     (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri
-        (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
-                       name "-" version ".tar.xz"))
+        (string-append "mirror://gnome/sources/libcloudproviders/"
+                       (version-major+minor version)
+                       "/libcloudproviders-" version ".tar.xz"))
        (sha256
         (base32 "0aars24myf6n8b8hm1n12hsgcm54097kpbpm4ba31zp1l4y22qs7"))))
     (build-system meson-build-system)
-    (outputs '("out" "doc"))
     (arguments
-     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
-       #:configure-flags
-       (list
-        "-Denable-gtk-doc=true")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'move-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share"))
-               (rename-file
-                (string-append out "/share/gtk-doc")
-                (string-append doc "/share/gtk-doc"))
-               #t))))))
+     `(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:configure-flags (list "-Dintrospection=false"
+                               "-Denable-gtk-doc=false"
+                               "-Dvapigen=false")))
     (native-inputs
      `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)))
+     (list glib glib-networking))
     (synopsis "Cloudproviders Integration API")
     (description "Libcloudproviders is a DBus API that allows cloud storage sync
 clients to expose their services.  Clients such as file managers and desktop
@@ -381,6 +376,31 @@ services.")
     (home-page "https://csorianognome.wordpress.com/2015/07/07/cloud-providers/")
     (license license:lgpl3+)))
 
+(define-public libcloudproviders
+  (package/inherit libcloudproviders-minimal
+    (name "libcloudproviders")
+    (version "0.3.1")
+    (outputs (cons "doc" (package-outputs libcloudproviders-minimal)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libcloudproviders-minimal)
+       ((#:configure-flags _)
+        '(list "-Denable-gtk-doc=true")) ;false by default
+       ((#:phases phases '%standard-phases)
+        `(modify-phases %standard-phases
+           (add-after 'install 'move-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (assoc-ref outputs "doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (rename-file
+                  (string-append out "/share/gtk-doc")
+                  (string-append doc "/share/gtk-doc")))))))))
+    (native-inputs
+     (append
+         `(("gobject-introspection" ,gobject-introspection)
+           ("gtk-doc" ,gtk-doc/stable))
+         (package-native-inputs libcloudproviders-minimal)))))
+
 (define-public libgrss
   (package
     (name "libgrss")
@@ -416,14 +436,10 @@ services.")
                                  "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list docbook-xml-4.1.2 gobject-introspection gtk-doc/stable
+           pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list glib libsoup libxml2))
     (synopsis "Glib library for feeds")
     (description "LibGRSS is a Glib abstraction to handle feeds in RSS, Atom,
 and other formats.")
@@ -577,23 +593,20 @@ in JavaScript.")
                                  "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("check" ,check)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("gobject-introspection" ,gobject-introspection)
-       ("pedansee" ,pedansee)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list check
+           docbook-xml-4.3
+           gobject-introspection
+           pedansee
+           pkg-config
+           vala))
     (inputs
      `(("avahi" ,avahi)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gee" ,libgee)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gstreamer" ,gstreamer)
-       ("libsoup" ,libsoup)))
+     (list glib glib-networking gstreamer libsoup-minimal-2))
     (synopsis "Media management library")
     (description "Libdmapsharing is a library which allows programs to access,
 share and control the playback of media content using DMAP (DAAP, DPAP & DACP).
@@ -624,11 +637,9 @@ It is written in C using GObject and libsoup.")
                        (assoc-ref %outputs "doc")
                        "/share/gtk-doc/html"))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection gtk-doc/stable pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "GLib Testing Framework")
     (description "GTX is a small collection of convenience functions intended to
 enhance the GLib testing framework.  With specific emphasis on easing the pain
@@ -705,7 +716,7 @@ of writing test cases for asynchronous interactions.")
     (inputs
      `(("icu" ,icu4c)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Model to synchronize multiple instances over DBus")
     (description "Dee is a library that uses DBus to provide objects allowing
 you to create Model-View-Controller type programs across DBus.  It also consists
@@ -786,7 +797,7 @@ of known objects without needing a central registrar.")
        ("python-rdflib" ,python-rdflib)
        ("xapian-config" ,xapian)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Desktop Activity Logging")
     (description "Zeitgeist is a service which logs the users’s activities and
 events, anywhere from files opened to websites visited and conversations.  It
@@ -862,20 +873,21 @@ tomorrow, the rest of the week and for special occasions.")
 (define-public gnome-photos
   (package
     (name "gnome-photos")
-    (version "3.34.2")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "06ml5sf8xhpan410msqz085hmfc7082d368pb82yq646y9pcfn9w"))))
+         "1bzi79plw6ji6qlckhxnwfnswy6jpnhzmmyanml2i2xg73hp6bg0"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:configure-flags
        (list "-Ddogtail=false"     ; Not available
              ;; Required for RUNPATH validation.
@@ -888,8 +900,8 @@ tomorrow, the rest of the week and for special occasions.")
              (let*
                  ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/gnome-photos")
-                 `("GRL_PLUGIN_PATH" = (,(getenv "GRL_PLUGIN_PATH")))))
-             #t)))))
+                 `("GRL_PLUGIN_PATH" =
+                   (,(getenv "GRL_PLUGIN_PATH"))))))))))
     (native-inputs
      `(("dbus" ,dbus)
        ("desktop-file-utils" ,desktop-file-utils)
@@ -904,7 +916,7 @@ tomorrow, the rest of the week and for special occasions.")
     (inputs
      `(("babl" ,babl)
        ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gegl" ,gegl)
        ("geocode-glib" ,geocode-glib)
        ("gexiv2" ,gexiv2)
@@ -916,6 +928,7 @@ tomorrow, the rest of the week and for special occasions.")
        ("libdazzle" ,libdazzle)
        ("libgdata" ,libgdata)
        ("libgfbgraph" ,gfbgraph)
+       ("libhandy" ,libhandy)
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("librest" ,rest)
@@ -932,20 +945,21 @@ cloud integration is offered through GNOME Online Accounts.")
 (define-public gnome-music
   (package
     (name "gnome-music")
-    (version "3.34.5")
+    (version "40.1.1")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1r5sfw5cbd6qqh27lzhblazir0bfi3k7nqppw66qw990isqm5psy"))))
+         "0lcdal4qdhclr8961p57xf010y92l6wwmkw86lyi9wy224z6gjr0"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-gnome-music
@@ -957,11 +971,14 @@ cloud integration is offered through GNOME Online Accounts.")
                                           (package-version python))
                                         "/site-packages")))
                (wrap-program (string-append out "/bin/gnome-music")
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
-                 `("GST_PLUGIN_SYSTEM_PATH" = (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                 `("GRL_PLUGIN_PATH" = (,(getenv "GRL_PLUGIN_PATH")))
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))))
-             #t)))))
+                 `("GI_TYPELIB_PATH" =
+                   (,(getenv "GI_TYPELIB_PATH")))
+                 `("GST_PLUGIN_SYSTEM_PATH" =
+                   (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
+                 `("GRL_PLUGIN_PATH" =
+                   (,(getenv "GRL_PLUGIN_PATH")))
+                 `("GUIX_PYTHONPATH" =
+                   (,(getenv "GUIX_PYTHONPATH") ,pylib)))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
@@ -975,11 +992,13 @@ cloud integration is offered through GNOME Online Accounts.")
        ("grilo" ,grilo)
        ("grilo-plugins" ,grilo-plugins)
        ("gst-plugins-base" ,gst-plugins-base)
+       ("gst-plugins-good" ,gst-plugins-good)
        ("gstreamer" ,gstreamer)
        ("gvfs" ,gvfs)
+       ("json-glib" ,json-glib)
        ("libdazzle" ,libdazzle)
        ("libmediaart" ,libmediaart)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("pycairo" ,python-pycairo)
        ("pygobject" ,python-pygobject)
        ("tracker" ,tracker)
@@ -1019,7 +1038,7 @@ between different kinds of computer systems.")
 (define-public tepl
   (package
     (name "tepl")
-    (version "4.4.0")
+    (version "6.00.0")
     (source
      (origin
        (method url-fetch)
@@ -1029,26 +1048,42 @@ between different kinds of computer systems.")
                        name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0mm2z849hnni7597an05mrv0dckrxjngpf2xfa0g5s17i8x6gxp6"))))
-    (build-system glib-or-gtk-build-system)
+         "0qvs7s86gqyyrzi0r5fbrj8zczlgv8xhdjswgbgc1afwjnl9fqx8"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:tests? #f))                    ; FIX-ME: Requires gvfs
+     `(#:glib-or-gtk? #t
+       #:tests? #f))                    ; FIX-ME: Requires gvfs
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") gobject-introspection pkg-config))
     (inputs
-     `(("amtk" ,amtk)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libxml2" ,libxml2)
-       ("uchardet" ,uchardet)))
+     (list amtk
+           glib
+           gtk+
+           gtksourceview
+           libxml2
+           uchardet))
     (synopsis "Text editor product line")
     (description "Tepl is a library that eases the development of
 GtkSourceView-based text editors and IDEs.")
     (home-page "https://wiki.gnome.org/Projects/Tepl")
     (license license:lgpl2.1+)))
 
+(define-public tepl-5
+  (package
+    (inherit tepl)
+    (name "tepl")
+    (version "5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version) "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0118j64s4fb350phbgda2rk6sv19rfgglxc7nf248llzc1klj9xi"))))))
+
 (define-public krb5-auth-dialog
   (package
     (name "krb5-auth-dialog")
@@ -1065,17 +1100,9 @@ GtkSourceView-based text editors and IDEs.")
          "1w91gsvmifqhiam3xqf88i5rk2w6qadjalmbvvamjdc37j0vdc6x"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("libxml2" ,libxml2)
-       ("pkg-config" ,pkg-config)
-       ("python-wrapper" ,python-wrapper)))
+     (list intltool itstool libxml2 pkg-config python-wrapper))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)
-       ("mit-krb5" ,mit-krb5)
-       ("network-manager" ,network-manager)))
+     (list glib gtk+ libnotify mit-krb5 network-manager))
     (synopsis "Popup dialogs for Kerberos 5")
     (description "krb5-auth-dialog is a simple dialog that monitors Kerberos
 tickets, and pops up a dialog when they are about to expire.")
@@ -1098,12 +1125,9 @@ tickets, and pops up a dialog when they are about to expire.")
          "1rgchqi4j2ll7d6a7lgy7id0w9rrkwkgic1096fbm2zx6n7pc4yx"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("x11" ,libx11)))
+     (list glib gtk+ libx11))
     (synopsis "Notification Daemon for GNOME Desktop")
     (description "Notification-Daemon is the server implementation of the
 freedesktop.org desktop notification specification.")
@@ -1124,28 +1148,22 @@ freedesktop.org desktop notification specification.")
                 "1x8yvjy0yg17qyhmqws8xh2k8dvzrhpwqz7j1cfwzalrb1i9c5g8"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "util/mm-common-prepare.in"
-              (("ln") (string-append (assoc-ref inputs "coreutils")
-                                     "/bin/ln"))
-              (("cp") (string-append (assoc-ref inputs "coreutils")
-                                     "/bin/cp"))
-              (("sed") (string-append (assoc-ref inputs "sed")
-                                      "/bin/sed"))
-              (("cat") (string-append (assoc-ref inputs "coreutils")
-                                      "/bin/cat")))
-             #t)))))
+               (("ln") (search-input-file inputs "/bin/ln"))
+               (("cp") (search-input-file inputs "/bin/cp"))
+               (("sed") (search-input-file inputs "/bin/sed"))
+               (("cat") (search-input-file inputs "/bin/cat"))))))))
     (native-inputs
      `(("coreutils" ,coreutils)
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
        ("sed" ,sed)))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Module of GNOME C++ bindings")
     (description "The mm-common module provides the build infrastructure
 and utilities shared among the GNOME C++ binding libraries.  Release
@@ -1191,9 +1209,7 @@ Library reference documentation.")
       ("gtk-doc" ,gtk-doc/stable)
       ("pkg-config" ,pkg-config)))
    (inputs
-    `(("avahi" ,avahi)
-      ("libgudev" ,libgudev)
-      ("libsoup" ,libsoup)))
+    (list avahi libgudev libsoup))
    (synopsis "WebDav server implementation using libsoup")
    (description "PhoDav was initially developed as a file-sharing mechanism for Spice,
 but it is generic enough to be reused in other projects,
@@ -1204,7 +1220,7 @@ in particular in the GNOME desktop.")
 (define-public gnome-color-manager
   (package
    (name "gnome-color-manager")
-   (version "3.32.0")
+   (version "3.36.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1212,7 +1228,7 @@ in particular in the GNOME desktop.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1vpxa2zjz3lkq9ldjg0fl65db9s6b4kcs8nyaqfz3jygma7ifg3w"))))
+              "0fxdng74d8hwhfx1nwl1i4jx9h9f6c2hkyc12f01kqbjcimrxnwx"))))
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
@@ -1234,19 +1250,19 @@ in particular in the GNOME desktop.")
       ("pkg-config" ,pkg-config)
       ("xorg-server" ,xorg-server-for-tests)))
    (inputs
-    `(("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("appstream-glib" ,appstream-glib)
-      ("colord-gtk" ,colord-gtk)
-      ("exiv2" ,exiv2)
-      ("gnome-desktop" ,gnome-desktop)
-      ("libcanberra" ,libcanberra)
-      ("libexif" ,libexif)
-      ("libtiff" ,libtiff)
-      ("libxrandr" ,libxrandr)
-      ("libxtst" ,libxtst)
-      ("libxxf86vm" ,libxxf86vm)
-      ("vte" ,vte)
-      ("xorgproto" ,xorgproto)))
+    (list adwaita-icon-theme
+          appstream-glib
+          colord-gtk
+          exiv2
+          gnome-desktop
+          libcanberra
+          libexif
+          libtiff
+          libxrandr
+          libxtst
+          libxxf86vm
+          vte
+          xorgproto))
    (synopsis "Color profile manager for the GNOME desktop")
    (description "GNOME Color Manager is a session framework that makes
 it easy to manage, install and generate color profiles
@@ -1265,13 +1281,30 @@ in the GNOME desktop.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1n2jz9i8a42zwxx5h8j2gdy6q1vyydh4vl00r0al7w8jzdh24p44"))))
+                "1n2jz9i8a42zwxx5h8j2gdy6q1vyydh4vl00r0al7w8jzdh24p44"))
+              (patches
+               (search-patches
+                "gnome-online-miners-tracker-3.patch"))))
     (build-system glib-or-gtk-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-configure
+           (lambda _
+             (substitute* "configure.ac"
+               (("AX_CHECK_ENABLE_DEBUG.*")
+                ""))))
+         (add-after 'fix-configure 'autoreconf
+           (lambda _
+             (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk+:bin" ,gtk+ "bin")
+       ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("gnome-online-accounts" ,gnome-online-accounts)
@@ -1310,8 +1343,10 @@ It has miners for Facebook, Flickr, Google, ownCloud and SkyDrive.")
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
-    `(("gtk+" ,gtk+)
-      ("libsoup" ,libsoup)))
+    (list gtk+))
+   (propagated-inputs
+    ;; The .pc file "Requires" libsoup-2.4.
+    `(("libsoup" ,libsoup-minimal-2)))
    (synopsis "GObject-based API over @acronym{SSDP, Simple Service Discovery
 Protocol} for GNOME")
    (description "This package provides a library to handle resource discovery
@@ -1333,6 +1368,13 @@ a debugging tool, @command{gssdp-device-sniffer}.")
              (base32
               "1ld7mrpdv9cszmfzh7i19qx4li25j3fr7x1jp38l8phzlmz3187p"))))
    (build-system meson-build-system)
+   (arguments
+    `(#:phases
+      (modify-phases %standard-phases
+        (add-before 'check 'pre-check
+          (lambda _
+            ;; Tests require a writable HOME.
+            (setenv "HOME" (getcwd)))))))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
@@ -1341,12 +1383,10 @@ a debugging tool, @command{gssdp-device-sniffer}.")
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
-    `(("gssdp" ,gssdp)
-      ("gtk+" ,gtk+)
-      ("libsoup" ,libsoup)))
+    (list gssdp gtk+ libsoup))
    (propagated-inputs
-    `(;; For ‘org.gnome.system.proxy’.
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+    (list ;; For ‘org.gnome.system.proxy’.
+          gsettings-desktop-schemas))
    (synopsis "PnP API for GNOME")
    (description "This package provides GUPnP, an object-oriented framework
 for creating UPnP devices and control points, written in C using
@@ -1368,19 +1408,17 @@ for creating UPnP devices and control points, written in C using
               "0spzd2saax7w776p5laixdam6d7smyynr9qszhbmq7f14y13cghj"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("libxml" ,libxml2)
-      ("pkg-config" ,pkg-config)
-      ("vala" ,vala)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gtk-doc/stable
+          libxml2
+          pkg-config
+          vala))
    (inputs
-    `(("gstreamer" ,gstreamer)
-      ("gupnp" ,gupnp)))
+    (list gstreamer gupnp))
    (propagated-inputs
-    `(("gst-plugins-base" ,gst-plugins-base)
-      ("gst-plugins-good" ,gst-plugins-good)))
+    (list gst-plugins-base gst-plugins-good))
    (synopsis "GUPnP DLNA for GNOME")
    (description "This package provides a small utility library to
 support DLNA-related tasks such as media profile guessing, transcoding to a
@@ -1402,15 +1440,15 @@ given profile, etc.  DLNA is a subset of UPnP A/V.")
               "1p3grslwqm9bc8rmpn4l48d7v9s84nina4r9xbd932dbj8acz7b8"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("libxml" ,libxml2)
-      ("pkg-config" ,pkg-config)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gtk-doc/stable
+          libxml2
+          pkg-config
+          vala))
    (inputs
-    `(("gtk+" ,gtk+)
-      ("gupnp" ,gupnp)))
+    (list gtk+ gupnp))
    (synopsis "GUPnP A/V for GNOME")
    (description "This package provides a small library for handling
 and implementation of UPnP A/V profiles.")
@@ -1430,17 +1468,11 @@ and implementation of UPnP A/V profiles.")
                (base32
                 "1mlw1qgj8nkd9ll6b6h54r1gfdy3zp8a8xqz7qfyfaj85jjgbph7"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-next))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+:doc" ,gtk+ "doc")
-       ("vala" ,vala)))
+     (list gdk-pixbuf gettext-minimal gobject-introspection
+           `(,gtk+ "doc") vala))
     (synopsis "Media art library for the GNOME desktop")
     (description
      "The libmediaart library is the foundation for media art caching,
@@ -1451,18 +1483,19 @@ extraction, and lookup for applications on the desktop.")
 (define-public gnome-initial-setup
   (package
    (name "gnome-initial-setup")
-   (version "3.32.1")
+   (version "40.4")
    (source (origin
             (method url-fetch)
            (uri (string-append "mirror://gnome/sources/gnome-initial-setup/"
-                                (version-major+minor version)
+                                (version-major version)
                                 "/gnome-initial-setup-" version ".tar.xz"))
             (sha256
              (base32
-              "1gwhp7dalyc8zsb2pa66cmpdrj2d6drbq5p331sq6zp8ds10k9ry"))))
+              "06q3p4f8g9zr7a4mw3qr556mi0dg9qzrj8n46ybdz93fxs26aaj1"))))
    (build-system meson-build-system)
    (arguments
-    '(#:configure-flags '(;; Enable camera support for user selfie.
+    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+      #:configure-flags '(;; Enable camera support for user selfie.
                           "-Dcheese=auto"
                           "-Dsystemd=false")
       #:phases (modify-phases %standard-phases
@@ -1485,10 +1518,10 @@ extraction, and lookup for applications on the desktop.")
    (inputs
     `(("accountsservice" ,accountsservice)
       ;("adwaita-icon-theme" ,adwaita-icon-theme)
+      ("elogind" ,elogind)
       ("gdm" ,gdm)
       ("geoclue" ,geoclue)
       ("gnome-desktop" ,gnome-desktop)
-      ("gnome-getting-started-docs" ,gnome-getting-started-docs)
       ("gnome-online-accounts" ,gnome-online-accounts)
       ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
       ("gstreamer" ,gstreamer)
@@ -1504,7 +1537,7 @@ extraction, and lookup for applications on the desktop.")
       ("pwquality" ,libpwquality)
       ("rest" ,rest)
       ("upower" ,upower)
-      ("webkitgtk" ,webkitgtk)
+      ("webkitgtk" ,webkitgtk-with-libsoup2)
       ("libgnomekbd" ,libgnomekbd)))
    (synopsis "Initial setup wizard for GNOME desktop")
    (description "This package provides a set-up wizard when a
@@ -1516,7 +1549,7 @@ tour of all gnome components and allows the user to set them up.")
 (define-public gnome-user-share
   (package
    (name "gnome-user-share")
-   (version "3.33.1")
+   (version "3.34.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1524,12 +1557,13 @@ tour of all gnome components and allows the user to set them up.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0lf790pyamdyj7180ils8vizjl8brxcg7jsm1iavfp9ay4wa8mz7"))))
+              "04r9ck9v4i0d31grbli1d4slw2d6dcsfkpaybkwbzi7wnj72l30x"))))
    (build-system meson-build-system)
    (arguments
-    `(#:glib-or-gtk? #t
+    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+      #:glib-or-gtk? #t
       #:configure-flags
-       `("-Dsystemd=false"
+       `("-Dsystemduserunitdir=/tmp/empty"
          ;; Enable nautilus extension for file sharing.
          "-Dnautilus_extension=true")))
    (native-inputs
@@ -1540,12 +1574,12 @@ tour of all gnome components and allows the user to set them up.")
       ("pkg-config" ,pkg-config)
       ("yelp-tools" ,yelp-tools)))
    (inputs
-    `(("glib" ,glib)
-      ("gnome-bluetooth" ,gnome-bluetooth)
-      ("gtk+" ,gtk+)
-      ("libcanberra" ,libcanberra)
-      ("libnotify" ,libnotify)
-      ("nautilus" ,nautilus)))      ; For nautilus extension.
+    (list glib
+          gnome-bluetooth
+          gtk+
+          libcanberra
+          libnotify
+          nautilus))      ; For nautilus extension.
    (synopsis "File sharing for GNOME desktop")
    (description "GNOME User Share is a small package that binds together
 various free software projects to bring easy to use user-level file
@@ -1556,7 +1590,7 @@ sharing to the masses.")
 (define-public sushi
   (package
     (name "sushi")
-    (version "3.32.1")
+    (version "3.38.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1564,7 +1598,7 @@ sharing to the masses.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "02idvqjk76lii9xyg3b1yz4rw721709bdm5j8ikjym6amcghl0aj"))))
+                "1sc8i0vrw6bn43rklnwp2fl1gq0r0xfd3bszcqxd0a2mh46d3rpk"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -1574,11 +1608,11 @@ sharing to the masses.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/sushi")))
-               ;; Put existing typelibs before sushi's deps, so as to correctly
-               ;; infer gdk-pixbuf
+               ;; Put existing typelibs before sushi's deps, so as to
+               ;; correctly infer gdk-pixbuf.
                (wrap-program prog
-                 `("GI_TYPELIB_PATH" suffix (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
+                 `("GI_TYPELIB_PATH" suffix
+                   (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gettext" ,gettext-minimal)
@@ -1594,23 +1628,23 @@ sharing to the masses.")
        ("gjs" ,gjs)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gstreamer" ,gstreamer)
-       ("gtksourceview" ,gtksourceview-3)
+       ("gtksourceview" ,gtksourceview)
        ("harfbuzz" ,harfbuzz)
        ("libepoxy" ,libepoxy)
        ("libmusicbrainz" ,libmusicbrainz)
        ("libxml2" ,libxml2)
        ("neon" ,neon)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "File previewer for the GNOME desktop")
-    (description "Sushi is a DBus-activated service that allows applications to
-preview files on the GNOME desktop.")
+    (description "Sushi is a DBus-activated service that allows applications
+to preview files on the GNOME desktop.")
     (home-page "https://gitlab.gnome.org/GNOME/sushi")
     (license license:gpl2+)))
 
 (define-public rygel
   (package
     (name "rygel")
-    (version "0.38.3")
+    (version "0.40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1618,29 +1652,40 @@ preview files on the GNOME desktop.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "003xficqb08r1dgid20i7cn889lbfwrglpx78rjd5nkvgxbimhh8"))))
-    (build-system gnu-build-system)
+                "0bd3d2swa8lq47b9r04x8xwdr9nhjnrwqi6scygd134wb5vxfh22"))))
+    (build-system meson-build-system)
+    (arguments
+     ;; Disable the tracker plugin.
+     '(#:configure-flags
+       (list "-Dplugins=external,gst-launch,lms,media-export,
+mpris,playbin,ruih,tracker3")))
     (native-inputs
      `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+       ("vala" ,vala)
+       ("docbook-xml" ,docbook-xml)
+       ("dockbook-xsl" ,docbook-xsl)
+       ("xsltproc" ,libxslt)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gssdp" ,gssdp)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gtk+" ,gtk+)
-       ("gupnp" ,gupnp)
-       ("gupnp-av" ,gupnp-av)
-       ("gupnp-dlna" ,gupnp-dlna)
-       ("libgee" ,libgee)
-       ("libmediaart" ,libmediaart)
-       ("libsoup" ,libsoup)
-       ("libxslt" ,libxslt)
-       ("libunistring" ,libunistring)
-       ("tracker" ,tracker)))
+     (list gdk-pixbuf
+           gssdp
+           gstreamer
+           gst-plugins-base
+           gst-editing-services
+           gtk+
+           gupnp
+           gupnp-av
+           gupnp-dlna
+           json-glib
+           libgee
+           libmediaart
+           libsoup
+           libxslt
+           libunistring
+           tracker))
     (synopsis "Share audio, video, and pictures with other devices")
     (description
      "Rygel is a home media solution (@dfn{UPnP AV MediaServer and
@@ -1690,11 +1735,8 @@ client devices can handle.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("gcr" ,gcr)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("mobile-broadband-provider-info" ,mobile-broadband-provider-info)
-       ("network-manager" ,network-manager)))
+     (list gcr gtk+ iso-codes mobile-broadband-provider-info
+           network-manager))
     (synopsis "Network Manager's applet library")
     (description "Libnma is an applet library for Network Manager.  It was
 initially part of network-manager-applet and has now become a separate
@@ -1707,7 +1749,7 @@ project.")
 (define-public gnome-menus
   (package
     (name "gnome-menus")
-    (version "3.32.0")
+    (version "3.36.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-menus/"
@@ -1715,12 +1757,10 @@ project.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0x2blzqrapmbsbfzxjcdcpa3vkw9hq5k96h9kvjmy9kl415wcl68"))))
+                "07xvaf8s0fiv0035nk8zpzymn5www76w2a1vflrgqmp9plw8yd6r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib" ,glib)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal glib pkg-config))
     (synopsis "Menu support for GNOME desktop")
     (description "GNOME Menus contains the libgnome-menu library, the layout
 configuration files for the GNOME menu, as well as a simple menu editor.")
@@ -1730,14 +1770,14 @@ configuration files for the GNOME menu, as well as a simple menu editor.")
 (define-public deja-dup
   (package
     (name "deja-dup")
-    (version "40.6")
+    (version "42.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
                                   version "/deja-dup-" version ".tar.bz2"))
               (sha256
                (base32
-                "0lwazh6crby5wpy9fg6zvwy4plqbhs2f98bm5lbizjdlbh88n5q0"))))
+                "0d1jnlxpk52x56aqxz1g2xb4y4sm24h08p2di8mc1k8n8b52rpi4"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -1790,7 +1830,8 @@ configuration files for the GNOME menu, as well as a simple menu editor.")
        ("libgpg-error" ,libgpg-error)
        ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
+       ("libhandy" ,libhandy)
        ("packagekit" ,packagekit)
        ("python" ,python)
        ("python-pygobject" ,python-pygobject)))
@@ -1825,21 +1866,17 @@ either on a local, or remote machine via a number of methods.")
         (base32 "0f7l2pkyh3r1qk4hhavl7387l3bq5my3snpdppiavcpnji28dpa5"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("gcc" ,gcc-8) ;required for -Wcast-function-type
-       ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("googletest" ,googletest)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("gconf" ,gconf)
-       ("gnome-vfs" ,gnome-vfs)
-       ("gtk+" ,gtk+-2)
-       ("libxml2" ,libxml2)))
+     (list desktop-file-utils
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           googletest
+           intltool
+           itstool
+           libtool
+           pkg-config))
+    (inputs
+     (list gconf gnome-vfs gtk+-2 libxml2))
     (home-page "https://gcmd.github.io/")
     (synopsis "Two-pane graphical file manager for the GNOME desktop")
     (description
@@ -1852,21 +1889,18 @@ and running smart commands.")
 (define-public gnome-user-docs
   (package
    (name "gnome-user-docs")
-   (version "3.32.3")
+   (version "40.5")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "mirror://gnome/sources/gnome-user-docs/"
-                          (version-major+minor version)
+                          (version-major version)
                           "/gnome-user-docs-" version ".tar.xz"))
       (sha256
-       (base32 "0dvsl0ldg8rf7yq0r4dv1pn41s7gjgcqp7agkbflkbmhrl6vbhig"))))
+       (base32 "0p6ysdqlfc7vvzsrcanl9bhsc7666sv42xxzpbgsf5j55z3yrkpr"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("itstool" ,itstool)
-      ("pkg-config" ,pkg-config)
-      ("xmllint" ,libxml2)))
+    (list gettext-minimal itstool pkg-config libxml2))
    (synopsis "User documentation for the GNOME desktop")
    (description
     "The GNOME User Documentation explains how to use the GNOME desktop and its
@@ -1875,34 +1909,6 @@ and system administrators.")
    (home-page "https://live.gnome.org/DocumentationProject")
    (license license:cc-by3.0)))
 
-(define-public gnome-getting-started-docs
-  (package
-   (name "gnome-getting-started-docs")
-   (version "3.32.2")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnome/sources/gnome-getting-started-docs/"
-                          (version-major+minor version)
-                          "/gnome-getting-started-docs-" version ".tar.xz"))
-      (sha256
-       (base32 "1v4k465mlzrhgcdddzs6bmm0yliyrfx6jg3gh0s17a08i0w5rbwq"))))
-   (build-system gnu-build-system)
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("itstool" ,itstool)
-      ("pkg-config" ,pkg-config)
-      ("xmllint" ,libxml2)))
-   (synopsis "Help to get new users started with the GNOME desktop")
-   (description
-    "The GNOME Getting Started Documentation contains GNOME's intuitive
-\"Getting Started\" tour, with video guides, that can be viewed with Yelp.
-
-It is normally used together with @command{gnome-initial-setup}, but is also
-useful as a tutorial and users' guide for new or less experienced users.")
-   (home-page "https://live.gnome.org/DocumentationProject")
-   (license license:cc-by-sa3.0)))
-
 (define-public dia
   ;; This version from GNOME's repository includes fixes for compiling with
   ;; recent versions of the build tools.  The latest activity on the
@@ -1924,20 +1930,17 @@ useful as a tutorial and users' guide for new or less experienced users.")
                   "04r8dspa6nmicrifhi3sh46hqvyy88hzq37xx99q3q1mwsrpmwy8"))))
       (build-system meson-build-system)
       (inputs
-       `(("graphene" ,graphene)
-         ("gtk+" ,gtk+-2)
-         ("libxml2" ,libxml2)
-         ("libxslt" ,libxslt)
-         ("poppler" ,poppler)
-         ;; Without Python 2, build fails: plug-ins/python/meson.build:4:0:
-         ;; ERROR: Unknown method "dependency" in object.
-         ("python-2" ,python-2)))
+       (list graphene
+             gtk+-2
+             libxml2
+             libxslt
+             poppler
+             ;; Without Python 2, build fails: plug-ins/python/meson.build:4:0:
+             ;; ERROR: Unknown method "dependency" in object.
+             python-2))
       (native-inputs
-       `(("appstream-glib" ,appstream-glib)
-         ("docbook-xsl" ,docbook-xsl)
-         ("glib" ,glib "bin")
-         ("intltool" ,intltool)
-         ("pkg-config" ,pkg-config)))
+       (list appstream-glib docbook-xsl
+             `(,glib "bin") intltool pkg-config))
       (home-page "https://wiki.gnome.org/Apps/Dia")
       (synopsis "Diagram creation for GNOME")
       (description "Dia can be used to draw different types of diagrams, and
@@ -1946,12 +1949,10 @@ relationship modeling, and network diagrams.  The program supports various file
 formats like PNG, SVG, PDF and EPS.")
       (license license:gpl2+))))
 
-;; This is the unstable release, but it is required for the current stable
-;; release of gvfs (1.38.1).
 (define-public libgdata
   (package
     (name "libgdata")
-    (version "0.17.9")
+    (version "0.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1959,34 +1960,30 @@ formats like PNG, SVG, PDF and EPS.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0fj54yqxdapdppisqm1xcyrpgcichdmipq0a0spzz6009ikzgi45"))))
-    (build-system gnu-build-system)
+                "1iq4d1qy0vkmy29xvr13dgz4pxvn5v3yi2swryld0ajinvp951fx"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-failing-tests
+         (add-before 'check 'set-home-for-tests
            (lambda _
-             ;; The PicasaWeb API tests fail with gnome-online-accounts@3.24.2.
-             ;; They have been removed in libgdata 0.17.6, so just do the same.
-             (substitute* "gdata/tests/Makefile"
-               (("picasaweb\\$\\(EXEEXT\\) ") ""))
-             #t)))))
+             (setenv "HOME" "/tmp"))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("uhttpmock" ,uhttpmock)))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("glib-networking" ,glib-networking)))
+     (list cyrus-sasl glib-networking vala))
     (propagated-inputs
      `(("gcr" ,gcr)
        ("glib" ,glib)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
        ("json-glib" ,json-glib)
        ("liboauth" ,liboauth)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)))
     (home-page "https://wiki.gnome.org/Projects/libgdata")
     (synopsis "Library for accessing online service APIs")
@@ -2010,18 +2007,12 @@ access the common Google services, and has full asynchronous support.")
                 "07156nj7yrp3h9zyzx6mjwxwmfijialb4gi5d6dwyp53arr8c9vd"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libjpeg" ,libjpeg-turbo)
-       ("lcms" ,lcms)
-       ("libtiff" ,libtiff)))
+     (list gtk+ libjpeg-turbo lcms libtiff))
     (propagated-inputs
      ;; In Requires of libgxps.pc.
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("libarchive" ,libarchive)))
+     (list cairo glib libarchive))
     (home-page "https://wiki.gnome.org/Projects/libgxps")
     (synopsis "GObject-based library for handling and rendering XPS documents")
     (description
@@ -2033,19 +2024,20 @@ to other formats.")
 (define-public gnome-characters
   (package
     (name "gnome-characters")
-    (version "3.30.0")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/"
-                           "gnome-characters/" (version-major+minor version)
+                           "gnome-characters/" (version-major version)
                            "/gnome-characters-" version ".tar.xz"))
        (sha256
         (base32
-         "08cwz39iwgsyyb2wqhb8vfbmh1cwfkgfiy7adp08w7rwqi99x3dp"))))
+         "0z2xa4w921bzpzj6gv88pvbrijcnnwni6jxynwz0ybaravyzaqha"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:phases (modify-phases %standard-phases
                   (add-after 'install 'wrap
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -2054,8 +2046,7 @@ to other formats.")
                       (wrap-program (string-append (assoc-ref outputs "out")
                                                    "/bin/gnome-characters")
                         `("GI_TYPELIB_PATH" ":" prefix
-                          (,(getenv "GI_TYPELIB_PATH"))))
-                      #t)))))
+                          (,(getenv "GI_TYPELIB_PATH")))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -2063,10 +2054,7 @@ to other formats.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-minimal)))
     (inputs
-     `(("gjs" ,gjs)
-       ("gtk+" ,gtk+)
-       ("libunistring" ,libunistring)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list gjs gtk+ libhandy libunistring gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/CharacterMap")
     (synopsis "Find and insert unusual characters")
     (description "Characters is a simple utility application to find
@@ -2099,18 +2087,18 @@ commonly used macros.")
 (define-public gnome-contacts
   (package
     (name "gnome-contacts")
-    (version "3.34")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-contacts/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "04igc9xvyc4kb5xf5g2missnvyvj9zv5cqxf5k4z7hb0sv42wq4r"))))
+                "0w2g5xhw65adzvwzakrj5kaim4sw1w7s8qqwm3nm6inq50znzpn9"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dcheese=false")
+     `(#:configure-flags '("-Dcheese=disabled")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'generate-vapis
@@ -2121,16 +2109,16 @@ commonly used macros.")
 
              (invoke "vapigen" "--directory=vapi" "--pkg=gio-2.0"
                      "--library=goa-1.0"
-                     (string-append goa "/share/gir-1.0/Goa-1.0.gir"))
-             #t))
+                     (string-append goa "/share/gir-1.0/Goa-1.0.gir"))))
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
+     `(("docbook-xml" ,docbook-xml-4.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("docbook-xml" ,docbook-xml)
@@ -2143,12 +2131,12 @@ commonly used macros.")
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libxslt" ,libxslt)
        ("telepathy-glib" ,telepathy-glib)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("folks" ,folks)
-       ("telepathy-mission-control" ,telepathy-mission-control)))
+     (list folks telepathy-mission-control))
     (synopsis "GNOME's integrated address book")
     (description
      "GNOME Contacts organizes your contact information from online and
@@ -2159,16 +2147,16 @@ offline sources, providing a centralized place for managing your contacts.")
 (define-public gnome-desktop
   (package
     (name "gnome-desktop")
-    (version "3.34.2")
+    (version "40.4")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnome/sources/" name "/"
-                          (version-major+minor version)  "/"
+                          (version-major version)  "/"
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "1v983xirwp1y6ggz97bh742ak6gff0hxb359dgn37nikjxhvm0a0"))))
+        "1vs5knn2yj6a449p9bn5w5407i1yvxfxg8xv844qgl70hpsrdbl8"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -2198,10 +2186,11 @@ offline sources, providing a centralized place for managing your contacts.")
              ;; Tests require a running X server and locales.
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
+             (setenv "XDG_CACHE_HOME" "/tmp/xdg-cache")
+             (setenv "XDG_CONFIG_HOME" "/tmp")
              (setenv "GUIX_LOCPATH"
-                     (string-append (assoc-ref inputs "glibc-locales")
-                                    "/lib/locale"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "lib/locale")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen
        ("glibc-locales" ,glibc-locales) ; for tests
@@ -2213,19 +2202,19 @@ offline sources, providing a centralized place for managing your contacts.")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; Required by gnome-desktop-3.0.pc.
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("libseccomp" ,libseccomp)
-       ("libx11" ,libx11)
-       ("xkeyboard-config" ,xkeyboard-config)))
-    (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("bubblewrap" ,bubblewrap)
-       ("libxext" ,libxext)
-       ("libxkbfile" ,libxkbfile)
-       ("libxrandr" ,libxrandr)))
+     (list gsettings-desktop-schemas
+           gtk+
+           iso-codes
+           libseccomp
+           libx11
+           xkeyboard-config))
+    (inputs
+     (list gdk-pixbuf
+           glib
+           bubblewrap
+           libxext
+           libxkbfile
+           libxrandr))
     (home-page "https://www.gnome.org/")
     (synopsis
      "Libgnome-desktop, gnome-about, and desktop-wide documents")
@@ -2254,13 +2243,13 @@ The gnome-about program helps find which version of GNOME is installed.")
         "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("docbook-xml" ,docbook-xml-4.4)
-       ("python2-libxml2" ,python2-libxml2)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("python-2" ,python-2)))
+     (list intltool
+           docbook-xml-4.4
+           python2-libxml2
+           libxml2
+           libxslt
+           pkg-config
+           python-2))
     (home-page "https://wiki.gnome.org/GnomeDocUtils")
     (synopsis
      "Documentation utilities for the Gnome project")
@@ -2273,18 +2262,19 @@ and keep up to date translations of documentation.")
 (define-public gnome-disk-utility
   (package
     (name "gnome-disk-utility")
-    (version "3.34.0")
+    (version "40.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1mb7q90lnlp97dhxhnadhjagcfd12dfqzp0vj9h6b1r61pzhy97y"))))
+                "1rr1ypb89p51b6428yqvczmpmylwjfnhnkgx78hzm3vxm3m15lff"))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags '("-Dlogind=libelogind")
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:configure-flags '("-Dlogind=libelogind")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -2302,17 +2292,18 @@ and keep up to date translations of documentation.")
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)))
     (inputs
-     `(("elogind" ,elogind)
-       ("glib" ,glib)
-       ("appstream-glib" ,appstream-glib)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libdvdread" ,libdvdread)
-       ("libnotify" ,libnotify)
-       ("libpwquality" ,libpwquality)
-       ("libsecret" ,libsecret)
-       ("udisks" ,udisks)))
+     (list elogind
+           glib
+           appstream-glib
+           gnome-settings-daemon
+           gtk+
+           libcanberra
+           libdvdread
+           libhandy
+           libnotify
+           libpwquality
+           libsecret
+           udisks))
     (home-page "https://git.gnome.org/browse/gnome-disk-utility")
     (synopsis "Disk management utility for GNOME")
     (description "Disk management utility for GNOME.")
@@ -2321,18 +2312,19 @@ and keep up to date translations of documentation.")
 (define-public gnome-font-viewer
   (package
     (name "gnome-font-viewer")
-    (version "3.30.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-font-viewer/"
-                                  (version-major+minor version)
+                                  (version-major version)
                                   "/gnome-font-viewer-" version ".tar.xz"))
               (sha256
                (base32
-                "1wwnx2zrlbd2d6np7m9s78alx6j6ranrnh1g2z6zrv9qcj8rpzz5"))))
+                "0hpyi0sz3gcqqs9lkwyk8b6hr39m3n27432x98kxr436jj37dk6j"))))
     (build-system meson-build-system)
     (arguments
-     '(#:phases
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-post-install-script
            (lambda _
@@ -2354,9 +2346,7 @@ and keep up to date translations of documentation.")
        ("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gtk+" ,gtk+)))
+     (list glib gnome-desktop gtk+ libhandy libxml2))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-font-viewer")
     (synopsis "GNOME Fonts")
     (description "Application to show you the fonts installed on your computer
@@ -2367,7 +2357,7 @@ the font would look under various sizes.")
 (define-public gcr
   (package
     (name "gcr")
-    (version "3.34.0")
+    (version "3.41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -2375,8 +2365,8 @@ the font would look under various sizes.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0925snsixzkwh49xiayqmj6fcrmklqk8kyy0jkv7m64h9abm1pr9"))))
-    (build-system gnu-build-system)
+                "00fsf82ycac8qi0kkiq759p6jrn63pyz4ksn4wnq7m4ax94zq289"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2384,23 +2374,38 @@ the font would look under various sizes.")
          ;; build environment.
          (add-after 'unpack 'disable-failing-tests
            (lambda _
-             (substitute* "Makefile.in"
-               (("[[:blank:]]+test-system-prompt\\$\\(EXEEXT\\)")
+             (substitute* "gcr/meson.build"
+               (("[[:blank:]]+'system-prompt',")
                 ""))
              #t))
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))
+             #t))
+         (add-after 'unpack 'fix-systemd-detection
+           (lambda _
+             (substitute* "gcr/gcr-ssh-agent-service.c"
+               (("#ifdef WITH_SYSTEMD")
+                "#if (WITH_SYSTEMD)"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Some tests expect to write to $HOME.
              (setenv "HOME" "/tmp")
              #t)))))
     (inputs
-     `(("dbus" ,dbus)
-       ("gnupg" ,gnupg)                ;called as a child process during tests
-       ("libgcrypt" ,libgcrypt)))
+     (list dbus gnupg ;called as a child process during tests
+           libgcrypt libsecret))
     (native-inputs
      `(("python" ,python-wrapper)       ;for tests
+       ("openssh" ,openssh)             ;for tests
        ("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("gtk-doc" ,gtk-doc)
        ("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("libxml2" ,libxml2)
@@ -2408,9 +2413,7 @@ the font would look under various sizes.")
        ("xsltproc" ,libxslt)))
     ;; mentioned in gck.pc, gcr.pc and gcr-ui.pc
     (propagated-inputs
-     `(("p11-kit" ,p11-kit)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list p11-kit glib gtk+))
     (home-page "https://www.gnome.org")
     (synopsis "Libraries for displaying certificates and accessing key stores")
     (description
@@ -2437,20 +2440,20 @@ GNOME Desktop.")
                 "154qcr0x6f68f4q526y87imv0rscmp34n47nk1pp82rsq52h2zna"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("which" ,which)))
-    (inputs
-     `(("libxml2" ,libxml2)))
+     (list autoconf
+           automake
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gnome-common
+           gtk-doc/stable
+           intltool
+           pkg-config
+           libtool
+           which))
+    (inputs
+     (list libxml2))
     (propagated-inputs
      ;; The gdl-3.0.pc file 'Requires' GTK+.
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://gitlab.gnome.org/GNOME/gdl/")
     (synopsis "GNOME docking library")
     (description "This library provides docking features for gtk+.")
@@ -2489,15 +2492,13 @@ GNOME Desktop.")
                "10vpjhgbjm7z2djy04qakd02qlzpd02xnbfjhk2aqwjzn3xpihf4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("dbus" ,dbus)))
+     (list libgcrypt dbus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") intltool))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://www.gnome.org")
     (synopsis "Accessing passwords from the GNOME keyring")
     (description
@@ -2509,15 +2510,15 @@ GNOME Desktop.")
 (define-public gnome-keyring
   (package
     (name "gnome-keyring")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
+                                 (version-major version)  "/"
                                  name "-" version ".tar.xz"))
              (sha256
               (base32
-               "0hqrsh5g9q9lm190f0m85q4nki8k4ng7wphl6qbccdry59aakkg9"))))
+               "0cdrlcw814zayhvlaxqs1sm9bqlfijlp22dzzd0g5zg2isq4vlm3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;48 of 603 tests fail because /var/lib/dbus/machine-id does
@@ -2554,11 +2555,7 @@ GNOME Desktop.")
              (invoke "aclocal")
              (invoke "automake" "-ac"))))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("linux-pam" ,linux-pam)
-       ("openssh" ,openssh)
-       ("dbus" ,dbus)
-       ("gcr" ,gcr)))
+     (list libgcrypt linux-pam openssh dbus gcr))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")
@@ -2568,10 +2565,10 @@ GNOME Desktop.")
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libxslt" ,libxslt) ;for documentation
-       ("docbook-xml" ,docbook-xml-4.2)
+       ("docbook-xml" ,docbook-xml-4.3)
        ("docbook-xsl" ,docbook-xsl)))
     (propagated-inputs
-     `(("gcr" ,gcr)))
+     (list gcr))
     (home-page "https://www.gnome.org")
     (synopsis "Daemon to store passwords and encryption keys")
     (description
@@ -2587,55 +2584,60 @@ forgotten when the session ends.")
 (define-public evince
   (package
     (name "evince")
-    (version "3.36.5")
+    (version "40.2")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/evince/"
-                                 (version-major+minor version) "/"
-                                 "evince-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0z79jl0j9xq9wgwkfr0d1w1qrdy4447y8shs407n5srr0vixc3bg"))))
-    (build-system glib-or-gtk-build-system)
+              (method url-fetch)
+              (uri "mirror://gnome/sources/evince/40/evince-40.2.tar.xz")
+              (sha256
+               (base32
+                "0xrwls1bhvny8vvd7mfjy9p26zjch0pd6x6j9jn9g2ka6xwyrxqg"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("--disable-nautilus" "--enable-introspection")
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
+       #:build-type "release"
+       #:configure-flags
+       '("-Dnautilus=false"
+         "-Dintrospection=true"
+         ;; XXX: Generating the documentation fails because the
+         ;; libevdocument.devhelp document cannot be created. This seems to be
+         ;; caused by a problem during the XSL transformation.
+         "-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'install 'skip-gtk-update-icon-cache
+         (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
-             (substitute* "data/Makefile"
+             (substitute* "meson_post_install.py"
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("libarchive" ,libarchive)
-       ("libgxps" ,libgxps)
-       ("libspectre" ,libspectre)
-       ("djvulibre" ,djvulibre)
-       ("ghostscript" ,ghostscript)
-       ("poppler" ,poppler)
-       ("libtiff" ,libtiff)
-       ("texlive-libkpathsea" ,texlive-libkpathsea) ; for DVI support
-       ("gnome-desktop" ,gnome-desktop)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("atk" ,atk)
-       ("pango" ,pango)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("libsm" ,libsm)
-       ("libice" ,libice)
-       ("shared-mime-info" ,shared-mime-info)
-       ("dconf" ,dconf)
-       ("libcanberra" ,libcanberra)
-       ("libsecret" ,libsecret)
-
-       ;; For tests.
-       ("dogtail" ,python2-dogtail)))
+     (list libarchive
+           libgxps
+           libspectre
+           djvulibre
+           ghostscript
+           poppler
+           libtiff
+           texlive-libkpathsea ; for DVI support
+           gnome-desktop
+           gsettings-desktop-schemas
+           gspell
+           libgnome-keyring
+           adwaita-icon-theme
+           gdk-pixbuf
+           atk
+           pango
+           gtk+
+           glib
+           libxml2
+           libsm
+           libice
+           shared-mime-info
+           dconf
+           libcanberra
+           libsecret
+           libhandy))
     (native-inputs
      `(("itstool" ,itstool)
        ("intltool" ,intltool)
@@ -2655,16 +2657,16 @@ on the GNOME Desktop with a single simple application.")
 (define-public gsettings-desktop-schemas
   (package
     (name "gsettings-desktop-schemas")
-    (version "3.34.0")
+    (version "41.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnome/sources/" name "/"
-                          (version-major+minor version)  "/"
-                          name "-" version ".tar.xz"))
-      (sha256
-       (base32
-        "1bayr76aylawf2fhyjhv9zgk4kpv7ivrrmd80khb0h3h1wk092r8"))))
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1v9jagk679m01nji0acirynxinziv036618c7xc49l4nwmr9ja3p"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -2673,27 +2675,23 @@ on the GNOME Desktop with a single simple application.")
                       (let ((theme (assoc-ref inputs "gnome-backgrounds")))
                         (substitute* (find-files "schemas"
                                                  "\\.gschema\\.xml\\.in$")
-                          ;; Provide the correct file name of the default GNOME
-                          ;; background, 'adwaita-timed.xml'.
+                          ;; Provide the correct file name of the default
+                          ;; GNOME background, 'adwaita-timed.xml'.
                           (("@datadir@/backgrounds/gnome")
                            (string-append theme "/share/backgrounds/gnome"))
                           ;; Do not reference fonts, that may not exist.
-                          (("'Source Code Pro 10'") "'Monospace 11'"))
-                        #t))))))
+                          (("'Source Code Pro 10'") "'Monospace 11'"))))))))
     (inputs
-     `(("glib" ,glib)
-       ("gnome-backgrounds" ,gnome-backgrounds)))
+     (list glib gnome-backgrounds))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")                       ; glib-compile-schemas, etc.
+     `(("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")             ; glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (home-page "https://launchpad.net/gsettings-desktop-schemas")
-    (synopsis
-     "GNOME settings for various desktop components")
-    (description
-     "Gsettings-desktop-schemas contains a collection of GSettings schemas
-for settings shared by various components of the GNOME desktop.")
+    (synopsis "GNOME settings for various desktop components")
+    (description "Gsettings-desktop-schemas contains a collection of GSettings
+schemas for settings shared by various components of the GNOME desktop.")
     (license license:lgpl2.1+)))
 
 (define-public python-liblarch
@@ -2720,11 +2718,11 @@ for settings shared by various components of the GNOME desktop.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://wiki.gnome.org/Projects/liblarch")
     (synopsis "Library to easily handle complex data structures")
     (description
@@ -2765,7 +2763,7 @@ and how they are displayed (View).")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -2776,16 +2774,16 @@ and how they are displayed (View).")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)
-       ("python-dbus" ,python-dbus)
-       ("python-liblarch" ,python-liblarch)
-       ("python-lxml" ,python-lxml)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           pango
+           python-dbus
+           python-liblarch
+           python-lxml
+           python-pycairo
+           python-pygobject
+           python-pyxdg))
     (home-page "https://wiki.gnome.org/Apps/GTG")
     (synopsis "Personal organizer for the GNOME desktop")
     (description
@@ -2811,8 +2809,7 @@ know, from small tasks to large projects.")
         "1mc3v28fdfqanx3lqx233vcr4glb4c2376k0kx2v91a4vxwqcdxi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl perl-xml-simple))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2855,9 +2852,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
               (true      (string-append coreutils "/bin/true")))
          (list (string-append "GTK_UPDATE_ICON_CACHE=" true)))))
     (native-inputs
-     `(("icon-naming-utils" ,icon-naming-utils)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list icon-naming-utils intltool pkg-config))
     (home-page "https://wiki.gnome.org/Personalization")
     (synopsis "GNOME icon theme")
     (description "Icons for the GNOME desktop.")
@@ -2865,19 +2860,23 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
 
 ;; gnome-icon-theme was renamed to adwaita-icon-theme after version 3.12.0.
 (define-public adwaita-icon-theme
-  (package (inherit gnome-icon-theme)
+  (package/inherit gnome-icon-theme
     (name "adwaita-icon-theme")
-    (version "3.34.3")
+    (version "40.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "025rj1fskw1y448hiar4a9icyzpyr242nlh9xhsmyp8jb71dihp7"))))
+                "1xpqa1rgmixlp953938d08xvf7kv36h747ysial8g65dsrp46v0b"))))
     (native-inputs
-     `(("gtk-encode-symbolic-svg" ,gtk+ "bin")))))
+     ;; The following requires the SVG pixbuf loader, provided by librsvg,
+     ;; available on x86_64 only.
+     `(,@(if (target-64bit?)
+             `(("gtk-encode-symbolic-svg" ,gtk+ "bin"))
+             '())))))
 
 (define-public tango-icon-theme
   (package
@@ -2892,10 +2891,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
                 "034r9s944b4yikyfgn602yv7s54wdzlq0qfvqh52b9x6kbx08h79"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("icon-naming-utils" ,icon-naming-utils)
-       ("intltool" ,intltool)
-       ("imagemagick" ,imagemagick)
-       ("pkg-config" ,pkg-config)))
+     (list icon-naming-utils intltool imagemagick pkg-config))
     (home-page "http://tango-project.org/")
     (synopsis "Tango icon theme")
     (description "This is an icon theme that follows the Tango visual
@@ -2920,8 +2916,7 @@ guidelines.")
      ;; The build system appears not to be parallel-safe.
      '(#:parallel-build? #f))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)))
+     (list glib libxml2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("itstool" ,itstool)
@@ -2988,29 +2983,29 @@ database is translated at Transifex.")
                        "scp-dbus-service"))))
              #t)))))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gobject-introspection" ,gobject-introspection)
-       ("python" ,python)
-       ("cups" ,cups)
-       ("gtk+" ,gtk+)
-       ("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycups" ,python-pycups)
-       ("python-requests" ,python-requests)
-       ("python-pycairo" ,python-pycairo)
-       ("libnotify" ,libnotify)
-       ("packagekit" ,packagekit)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("glib" ,glib)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("xmlto" ,xmlto)
-       ("docbook-xml" ,docbook-xml-4.1.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)))
+     (list gsettings-desktop-schemas
+           gobject-introspection
+           python
+           cups
+           gtk+
+           python-dbus
+           python-pygobject
+           python-pycups
+           python-requests
+           python-pycairo
+           libnotify
+           packagekit))
+    (native-inputs
+     (list pkg-config
+           desktop-file-utils
+           glib
+           autoconf
+           automake
+           intltool
+           xmlto
+           docbook-xml-4.1.2
+           docbook-xsl
+           libxml2))
     (home-page "https://github.com/zdohnal/system-config-printer")
     (synopsis "CUPS administration tool")
     (description
@@ -3070,12 +3065,10 @@ configuring CUPS.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (propagated-inputs
-     `(;; In Requires of libnotify.pc.
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
+     (list ;; In Requires of libnotify.pc.
+           gdk-pixbuf glib))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libpng" ,libpng)))
+     (list gtk+ libpng))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib" ,glib "bin")
@@ -3098,7 +3091,7 @@ some form of information without getting in the user's way.")
 (define-public libpeas
   (package
     (name "libpeas")
-    (version "1.28.0")
+    (version "1.30.0")
     (source
      (origin
       (method url-fetch)
@@ -3107,7 +3100,7 @@ some form of information without getting in the user's way.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "05cb7drn6arc4gi02wgsvzibigi2riz5gnfnmlb0zmbfnj9ikna2"))))
+        "18xrk1c1ixlhkmykcfiafrl2am470ws687xqvjlq40zwkcp5dx8b"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -3117,14 +3110,13 @@ some form of information without getting in the user's way.")
              (let ((xorg-server (assoc-ref inputs "xorg-server"))
                    (disp ":1"))
                (setenv "DISPLAY" disp)
+               (setenv "XDG_CACHE_HOME" "/tmp/xdg-cache")
+               (setenv "XDG_CONFIG_HOME" "/tmp")
                ;; Tests require a running X server.
                (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glade" ,glade3)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ glade3 python python-pygobject))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
@@ -3133,7 +3125,7 @@ some form of information without getting in the user's way.")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; The .pc file "Requires" gobject-introspection.
-     `(("gobject-introspection" ,gobject-introspection)))
+     (list gobject-introspection))
     (home-page "https://wiki.gnome.org/Libpeas")
     (synopsis "GObject plugin system")
     (description
@@ -3167,14 +3159,10 @@ API.")
              (substitute* "gdk/gdkglshapes.c"
                ((" index") " triangle_index"))
              #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("mesa" ,mesa)
-              ("glu" ,glu)
-              ("libx11" ,libx11)
-              ("libxt" ,libxt)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")))
-    (propagated-inputs `(("pangox-compat" ,pangox-compat)))
+    (inputs (list gtk+-2 mesa glu libx11 libxt))
+    (native-inputs (list pkg-config
+                         `(,glib "bin")))
+    (propagated-inputs (list pangox-compat))
     (home-page "https://projects.gnome.org/gtkglext")
     (synopsis "OpenGL extension to GTK+")
     (description "GtkGLExt is an OpenGL extension to GTK+.  It provides
@@ -3185,7 +3173,7 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
 (define-public glade3
   (package
     (name "glade")
-    (version "3.36.0")
+    (version "3.38.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3193,30 +3181,49 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "023gx8rj51njn8fsb6ma5kz1irjpxi4js0n8rwy22inc4ysldd8r"))))
-    (build-system glib-or-gtk-build-system)
+                "1dxsiz9ahqkxg2a1dw9sbd8jg59y5pdz4c1gvnbmql48gmj8gz4q"))
+              (patches (search-patches
+                        "glade-gls-set-script-name.patch"
+                        "glade-test-widget-null-icon.patch"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:phases
+     `(#:meson ,meson-0.59
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))))
+
+         ,@(if (this-package-native-input "gjs")
+               '()
+               '((add-after 'unpack 'skip-gjs-test
+                   (lambda _
+                     ;; When the optional dependency on GJS is missing, skip
+                     ;; the GJS plugin tests.
+                     (substitute* "tests/modules.c"
+                       (("g_test_add.*JavaScript.*" all)
+                        (string-append "// " all "\n")))
+                     (delete-file "tests/catalogs/gjsplugin.xml")))))
+
          (add-before 'configure 'fix-docbook
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "man/Makefile.in"
-               (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
+             (substitute* "man/meson.build"
+               (("http://docbook.sourceforge.net/release/xsl/\
+current/manpages/docbook.xsl")
                 (string-append (assoc-ref inputs "docbook-xsl")
                                "/xml/xsl/docbook-xsl-"
                                ,(package-version docbook-xsl)
-                               "/manpages/docbook.xsl")))
-             #t))
+                               "/manpages/docbook.xsl")))))
          (add-before 'check 'pre-check
            (lambda _
              (setenv "HOME" "/tmp")
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))))
+             (setenv "DISPLAY" ":1"))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libxml2))
     (native-inputs
      `(("hicolor-icon-theme" ,hicolor-icon-theme)
        ("intltool" ,intltool)
@@ -3224,7 +3231,16 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
        ("libxslt" ,libxslt) ;for xsltproc
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)
-       ("python" ,python-2)
+       ("glib:bin" ,glib "bin")
+       ("python-pygobject" ,python-pygobject)
+       ("gobject-introspection" ,gobject-introspection)
+
+       ;; GJS depends on Rust, which is x86_64-only so far, so remove the GJS
+       ;; dependency on other platforms (FIXME).
+       ,@(if (target-x86-64?)
+             `(("gjs" ,gjs))
+             '())
+
        ("pkg-config" ,pkg-config)
        ("xorg-server" ,xorg-server-for-tests)))
     (home-page "https://glade.gnome.org")
@@ -3255,11 +3271,9 @@ the GNOME desktop environment.")
                 "1m110rbj5d2raxcdp4iz0qp172284945awrsbdlq99ksmqsc4zkn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list glib libxml2 zlib))
     (home-page "https://github.com/GNOME/libcroco")
     (synopsis "CSS2 parsing and manipulation library")
     (description
@@ -3283,104 +3297,67 @@ XML/CSS rendering engine.")
               (sha256
                (base32
                 "0kbpp9ksl7977xiga37sk1gdw1r039v6zviqznl7alvvg39yp26i"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--disable-static")))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-
-       ;; For tests.
-       ("perl" ,perl)
-       ("perl-xml-parser" ,perl-xml-parser)))
-    (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)))
-    (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)))
-    (home-page "https://www.gnome.org/projects/libgsf")
-    (synopsis "GNOME's Structured File Library")
-    (description
-     "Libgsf aims to provide an efficient extensible I/O abstraction for
-dealing with different structured file formats.")
-
-    ;; LGPLv2.1-only.
-    (license license:lgpl2.1)))
-
-(define-public librsvg
-  (package
-    (name "librsvg")
-    (version "2.40.21")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version)  "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1fljkag2gr7c4k5mn798lgf9903xslz8h51bgvl89nnay42qjqpp"))))
-    (build-system gnu-build-system)
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "bin" "doc"))
     (arguments
      `(#:configure-flags
-       (list "--disable-static"
-             "--enable-vala") ; needed for e.g. gnome-mines
+       (list
+        "--disable-static"
+        "--enable-introspection"
+        (string-append "--with-gir-dir="
+                       (assoc-ref %outputs "out")
+                       "/share/gir-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-typelib-dir="
+                       (assoc-ref %outputs "out")
+                       "/lib/girepository-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html")
+        "--with-zlib"
+        "--with-bz2")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
+         (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "gdk-pixbuf-loader/Makefile.in"
-               ;; By default the gdk-pixbuf loader is installed under
-               ;; gdk-pixbuf's prefix.  Work around that.
-               (("gdk_pixbuf_moduledir = .*$")
-                (string-append "gdk_pixbuf_moduledir = "
-                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
-                                "loaders\n"))
-               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
-               (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
-         (add-before 'check 'remove-failing-tests
-           (lambda _
-             (with-directory-excursion "tests/fixtures/reftests"
-               (for-each delete-file
-                         '(;; This test fails on i686:
-                           "svg1.1/masking-path-04-b.svg"
-                           ;; This test fails on armhf:
-                           "svg1.1/masking-mask-01-b.svg"
-                           ;; This test fails on aarch64:
-                           "bugs/777834-empty-text-children.svg")))
+             (with-directory-excursion "doc"
+               (substitute* "gsf-docs.xml"
+                 (("http://www.oasis-open.org/docbook/xml/4.5/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-    (inputs
-     `(;; XXX: 1.44 causes some test failures, so we stick with 1.42 for
-       ;; this ancient version of librsvg.
-       ("pango" ,pango-1.42)
-       ("libcroco" ,libcroco)
-       ("bzip2" ,bzip2)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)))
+     `(("docbook-xml" ,docbook-xml)
+       ("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
+       ("perl" ,perl)
+       ("perl-xml-parser" ,perl-xml-parser)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     (list bzip2 gdk-pixbuf zlib))
     (propagated-inputs
-     ;; librsvg-2.0.pc refers to all of that.
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
-    (home-page "https://wiki.gnome.org/LibRsvg")
-    (synopsis "Render SVG files using Cairo")
-    (description
-     "Librsvg is a C library to render SVG files using the Cairo 2D graphics
-library.")
-    (license license:lgpl2.0+)))
+     (list glib libxml2))
+    (synopsis "G Structured File Library")
+    (description "Libgsf aims to provide an efficient extensible I/O abstraction
+for dealing with different structured file formats.")
+    (home-page "https://gitlab.gnome.org/GNOME/libgsf")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Others
+      license:lgpl2.0+))))
 
-(define-public librsvg-next
+(define-public librsvg
   (package
     (name "librsvg")
-    (version "2.50.3")
+    (version "2.50.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/librsvg/"
@@ -3388,13 +3365,12 @@ library.")
                                   "librsvg-" version ".tar.xz"))
               (sha256
                (base32
-                "0n79i4wj9hm0d3bbn4xvknq5ylhqs16pvhaqr1rxspx9wfc8lad4"))
+                "1g3f8byg5w08fx1bka12mmpl59v6a4q2p827w6m2la6mijq63yzz"))
               (modules '((guix build utils)))
               (snippet
-               '(begin (delete-file-recursively "vendor")
-                       #t))))
+               '(begin (delete-file-recursively "vendor")))))
     (build-system cargo-build-system)
-    (outputs '("out" "doc"))
+    (outputs '("out" "doc" "debug"))
     (arguments
      `(#:install-source? #f
        #:modules
@@ -3456,8 +3432,7 @@ library.")
                (substitute* "rsvg-docs.xml"
                  (("http://www.oasis-open.org/docbook/xml/4.3/")
                   (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'prepare-for-build
            (lambda _
              ;; In lieu of #:make-flags
@@ -3465,39 +3440,37 @@ library.")
              ;; Something about the build environment resists building
              ;; successfully with the '--locked' flag.
              (substitute* '("Makefile.am" "Makefile.in")
-               (("--locked") ""))
-             #t))
+               (("--locked") ""))))
          (add-before 'configure 'pre-configure
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "gdk-pixbuf-loader/Makefile.in"
                ;; By default the gdk-pixbuf loader is installed under
                ;; gdk-pixbuf's prefix.  Work around that.
                (("gdk_pixbuf_moduledir = .*$")
                 (string-append "gdk_pixbuf_moduledir = "
-                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
-                               "loaders\n"))
-               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
-               (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
+                               "$(prefix)/"
+                               ,(dirname %gdk-pixbuf-loaders-cache-file) "/"
+                               "loaders\n")))
+             (substitute* "configure"
+               (("gdk_pixbuf_cache_file=.*")
+                (string-append "gdk_pixbuf_cache_file="
+                               (assoc-ref outputs "out") "/"
+                               ,%gdk-pixbuf-loaders-cache-file "\n")))))
          (add-after 'configure 'gnu-configure
-           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
-             ((assoc-ref gnu:%standard-phases 'configure)
-              #:native-inputs native-inputs
-              #:inputs inputs
-              #:outputs outputs
-              #:configure-flags
-              (list "--disable-static"
-                    "--enable-vala"
-               (string-append "--with-html-dir="
-                              (assoc-ref %outputs "doc")
-                              "/share/gtk-doc/html")))))
+           (lambda* (#:key outputs #:allow-other-keys #:rest args)
+             (apply (assoc-ref gnu:%standard-phases 'configure)
+                    #:configure-flags
+                    (list "--disable-static"
+                          "--enable-vala"
+                          (string-append "--with-html-dir="
+                                         (assoc-ref outputs "doc")
+                                         "/share/gtk-doc/html"))
+                    args)))
          (add-after 'configure 'dont-vendor-self
            (lambda* (#:key vendor-dir #:allow-other-keys)
              ;; Don't keep the whole tarball in the vendor directory
              (delete-file-recursively
-              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))
-             #t))
+              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
          (replace 'build
            (assoc-ref gnu:%standard-phases 'build))
          (add-before 'check 'ignore-failing-tests
@@ -3523,8 +3496,7 @@ library.")
                (("fn multiple_input_files_not_allowed_for_png_output" all)
                 (string-append "#[ignore] " all))
                (("fn stylesheet_option_error" all)
-                (string-append "#[ignore] " all)))
-             #t))
+                (string-append "#[ignore] " all)))))
          (replace 'check
            (lambda* args
              ((assoc-ref gnu:%standard-phases 'check)
@@ -3532,26 +3504,24 @@ library.")
          (replace 'install
            (assoc-ref gnu:%standard-phases 'install)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.3)
-       ("glib" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("ruby" ,ruby)
-       ("vala" ,vala)))
-    (inputs
-     `(("bzip2" ,bzip2)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("libcroco" ,libcroco)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)
-       ("pango" ,pango)))
+     (list docbook-xml-4.3
+           `(,glib "bin")
+           gobject-introspection
+           pkg-config
+           python-wrapper
+           ruby
+           vala))
+    (inputs
+     (list bzip2
+           fontconfig
+           freetype
+           harfbuzz
+           libcroco
+           libgsf
+           libxml2
+           pango))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
+     (list cairo gdk-pixbuf glib))
     (synopsis "SVG rendering library")
     (description "Librsvg is a library to render SVG images to Cairo surfaces.
 GNOME uses this to render SVG icons.  Outside of GNOME, other desktop
@@ -3560,6 +3530,104 @@ diagrams.")
     (home-page "https://wiki.gnome.org/LibRsvg")
     (license license:lgpl2.1+)))
 
+;; This copy of librsvg uses the bundled rust libraries. It is useful for
+;; packages which have too many dependencies to be rebuilt as frequently
+;; as the rust inputs are updated.
+;; TODO: Remove this package and use packaged rust libraries!
+(define-public librsvg-bootstrap
+  (package
+    (inherit librsvg)
+    (name "librsvg")
+    (version "2.50.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/librsvg/"
+                                  (version-major+minor version)  "/"
+                                  "librsvg-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1g3f8byg5w08fx1bka12mmpl59v6a4q2p827w6m2la6mijq63yzz"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file (find-files "vendor" "\\.a$"))))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments librsvg)
+       ((#:vendor-dir _ "vendor") "vendor")
+       ((#:cargo-inputs _) '())
+       ((#:cargo-development-inputs _) '())))
+    (properties '((hidden? . #t)))))
+
+(define-public librsvg-2.40
+  ;; This is the last version implemented in C.
+  (package
+    (inherit librsvg)
+    (version "2.40.21")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/librsvg/"
+                                  (version-major+minor version)
+                                  "/librsvg-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1fljkag2gr7c4k5mn798lgf9903xslz8h51bgvl89nnay42qjqpp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'pre-configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gdk-pixbuf-loader/Makefile.in"
+               ;; By default the gdk-pixbuf loader is installed under
+               ;; gdk-pixbuf's prefix.  Work around that.
+               (("gdk_pixbuf_moduledir = .*$")
+                (string-append "gdk_pixbuf_moduledir = "
+                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
+                                "loaders\n"))
+               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
+               (("gdk_pixbuf_cache_file = .*$")
+                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
+             #t))
+         (add-before 'check 'remove-failing-tests
+           (lambda _
+             (with-directory-excursion "tests/fixtures/reftests"
+               (for-each delete-file
+                         '(;; This test fails on i686:
+                           "svg1.1/masking-path-04-b.svg"
+                           ;; This test fails on armhf:
+                           "svg1.1/masking-mask-01-b.svg"
+                           ;; This test fails on aarch64:
+                           "bugs/777834-empty-text-children.svg"
+
+                           ;; These two tests fail due to slightly different
+                           ;; text rendering (different kerning or similar),
+                           ;; nothing alarming.
+                           "bugs/340047.svg"
+                           "bugs/749415.svg"))))))))
+    (native-inputs
+     (list pkg-config
+           `(,glib "bin") ; glib-mkenums, etc.
+           gobject-introspection)) ; g-ir-compiler, etc.
+    (inputs
+     (list pango libcroco bzip2 libgsf libxml2))
+    (propagated-inputs
+     ;; librsvg-2.0.pc refers to all of that.
+     (list cairo gdk-pixbuf glib))
+    (synopsis "Render SVG files using Cairo (ancient C version)")
+    (properties '((hidden? . #t)))))
+
+(define* (librsvg-for-system #:optional
+                             (system (or (%current-target-system)
+                                         (%current-system))))
+  ;; Since librsvg 2.50 depends on Rust, and Rust is only correctly supported
+  ;; on x86_64 so far, use the ancient C version on other platforms (FIXME).
+  (if (string-prefix? "x86_64-" system)
+      librsvg
+      librsvg-2.40))
+
+(export librsvg-for-system)
+
 (define-public libidl
   (package
     (name "libidl")
@@ -3573,11 +3641,9 @@ diagrams.")
                (base32
                 "08129my8s9fbrk0vqvnmx6ph4nid744g5vbwphzkaik51664vln5"))))
     (build-system gnu-build-system)
-    (inputs `(("glib" ,glib)))
+    (inputs (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list pkg-config flex bison))
     (home-page "http://freecode.com/projects/libidl")
     (synopsis "Create trees of CORBA Interface Definition Language files")
     (description  "Libidl is a library for creating trees of CORBA Interface
@@ -3617,15 +3683,22 @@ functionality was designed to be as reusable and portable as possible.")
        ;; ... which they then completly ignore !!
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-parallel-build
+           ;; Parallel build fails because of a failed dependency,
+           ;; https://bugzilla.gnome.org/show_bug.cgi?id=732274
+           (lambda _
+             (substitute* "src/services/name/Makefile.am"
+               (("orbit_name_server_2_DEPENDENCIES = \\$(DEPS) CosNaming.h")
+                "orbit_name_server_2_DEPENDENCIES = \
+$(DEPS) CosNaming.h libname-server-2.a"))))
          (add-before 'configure 'ignore-deprecations
            (lambda _
              (substitute* "linc2/src/Makefile.in"
-               (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))
-             #t)))))
-    (inputs `(("glib" ,glib)
-              ("libidl" ,libidl)))
+               (("-DG_DISABLE_DEPRECATED")
+                "-DGLIB_DISABLE_DEPRECATION_WARNINGS")))))))
+    (inputs (list glib libidl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://projects.gnome.org/orbit2/")
     (synopsis "CORBA 2.4-compliant Object Request Broker")
     (description  "ORBit2 is a CORBA 2.4-compliant Object Request Broker (orb)
@@ -3670,18 +3743,16 @@ featuring mature C, C++ and Python bindings.")
        ;; at <https://forums.gentoo.org/viewtopic-t-223376-start-550.html>.
        ;; Thus, disable parallel builds.
        #:parallel-build? #f))
-    (inputs `(("popt" ,popt)
-              ("libxml2" ,libxml2)))
+    (inputs (list popt libxml2))
     ;; The following are Required by the .pc file
     (propagated-inputs
-     `(("glib" ,glib)
-       ("orbit2" ,orbit2)))
+     (list glib orbit2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list intltool
+           pkg-config
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           flex
+           bison))
     (home-page "https://developer.gnome.org/libbonobo/")
     (synopsis "Framework for creating reusable components for use in GNOME applications")
     (description "Bonobo is a framework for creating reusable components for
@@ -3706,14 +3777,13 @@ use in GNOME applications, built on top of CORBA.")
               (sha256
                (base32 "0k3q9nh53yhc9qxf1zaicz4sk8p3kzq4ndjdsgpaa2db0ccbj4hr"))))
     (build-system gnu-build-system)
-    (inputs `(("dbus-glib" ,dbus-glib)
-              ("libxml2" ,libxml2)))
-    (propagated-inputs `(("glib" ,glib) ; referred to in the .pc file
-                         ("orbit2" ,orbit2)))
+    (inputs (list dbus-glib libxml2))
+    (propagated-inputs (list glib ; referred to in the .pc file
+                             orbit2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://projects.gnome.org/gconf/")
     (synopsis "Store application preferences")
     (description "Gconf is a system for storing application preferences.  It
@@ -3736,8 +3806,7 @@ is intended for user preferences; not arbitrary data storage.")
                 "1mvg8glb2a40yilmyabmb7fkbzlqd3i3d31kbkabqnq86xdnn69p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("intltool" ,intltool)))
+     (list perl intltool))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'configure 'use-our-intltool
@@ -3784,15 +3853,10 @@ designed to be accessed through the MIME functions in GnomeVFS.")
              (substitute* "test/test-async-cancel.c"
                (("EXIT_FAILURE") "77"))
              #t)))))
-    (inputs `(("libxml2" ,libxml2)
-              ("dbus-glib" ,dbus-glib)
-              ("gconf" ,gconf)
-              ("gnome-mime-data" ,gnome-mime-data)
-              ("zlib" ,zlib)))
+    (inputs (list libxml2 dbus-glib gconf gnome-mime-data zlib))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     (home-page "https://developer.gnome.org/gnome-vfs/")
     (synopsis "Access files and folders in GNOME applications")
     (description
@@ -3825,21 +3889,16 @@ to access local and remote files with a single consistent API.")
              (substitute* "libgnome/Makefile.in"
                (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))
              #t)))))
-    (inputs `(("libxml2" ,libxml2)))
+    (inputs (list libxml2))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     ;; The following are listed as Required in the .pc file
     ;; (except for libcanberra -- which seems to be oversight on the part
     ;; of the upstream developers -- anything that links against libgnome,
     ;; must also link against libcanberra
     (propagated-inputs
-     `(("libcanberra" ,libcanberra)
-       ("libbonobo" ,libbonobo)
-       ("gconf" ,gconf)
-       ("gnome-vfs" ,gnome-vfs)
-       ("popt" ,popt)))                       ;gnome-program.h includes popt.h
+     (list libcanberra libbonobo gconf gnome-vfs popt))                       ;gnome-program.h includes popt.h
     (home-page "https://developer.gnome.org/libgnome/")
     (synopsis "Useful routines for building applications")
     (description  "The libgnome library provides a number of useful routines
@@ -3863,7 +3922,7 @@ files and URIs, and displaying help.")
                 "1yknfkyzgz9s616is0l9gp5aray0f2ry4dw533jgzj8gq5s1xhgx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://people.gnome.org/~mathieu/libart")
     (synopsis "2D drawing library")
     (description  "Libart is a 2D drawing library intended as a
@@ -3886,12 +3945,11 @@ high-quality vector-based 2D library with antialiasing and alpha composition.")
                 "1nhnq4lfkk8ljkdafscwaggx0h95mq0rxnd7zgqyq0xb6kkqbjm8"))))
     (build-system gnu-build-system)
     ;; Mentioned as Required in the .pc file
-    (propagated-inputs `(("libart-lgpl" ,libart-lgpl)
-                         ("gtk+" ,gtk+-2)))
+    (propagated-inputs (list libart-lgpl gtk+-2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://developer.gnome.org/libgnomecanvas/")
     (synopsis "Flexible widget for creating interactive structured graphics")
     (description  "The GnomeCanvas widget provides a flexible widget for
@@ -3911,10 +3969,9 @@ creating interactive structured graphics.")
                (base32
                 "0679hcnpam2gkag2i63sm0wdm35gwvzafnz1354mg6j5gzwpfrcr"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("libgnomecanvas" ,libgnomecanvas)))
+    (propagated-inputs (list libgnomecanvas))
     (native-inputs
-     `(("gtkmm-2" ,gtkmm-2)
-       ("pkg-config" ,pkg-config)))
+     (list gtkmm-2 pkg-config))
     (home-page "https://gtkmm.org")
     (synopsis "C++ bindings to the GNOME Canvas library")
     (description "C++ bindings to the GNOME Canvas library.")
@@ -3935,19 +3992,12 @@ creating interactive structured graphics.")
                 "03rwbli76crkjl6gp422wrc9lqpl174k56cp9i96b7l8jlj2yddf"))))
     (build-system gnu-build-system)
     ;; Mentioned as Required in the .pc file
-    (propagated-inputs `(("libbonoboui" ,libbonoboui)
-                         ("libgnome" ,libgnome)
-                         ("libgnomecanvas" ,libgnomecanvas)
-                         ("libgnome-keyring" ,libgnome-keyring)))
-    (inputs `(("libjpeg" ,libjpeg-turbo)
-              ("popt" ,popt)
-              ("libbonobo" ,libbonobo)
-              ("libxml2" ,libxml2)
-              ("libglade" ,libglade)))
-    (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-mkenums, etc.
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+    (propagated-inputs (list libbonoboui libgnome libgnomecanvas
+                             libgnome-keyring))
+    (inputs (list libjpeg-turbo popt libbonobo libxml2 libglade))
+    (native-inputs
+     (list `(,glib "bin") ; for glib-mkenums, etc.
+           intltool pkg-config))
     (home-page "https://developer.gnome.org/libgnomeui/")
     (synopsis "Additional widgets for applications")
     (description "The libgnomeui library provides additional widgets for
@@ -3969,12 +4019,11 @@ ported to GTK+.")
                 "1v2x2s04jry4gpabws92i0wq2ghd47yr5n9nhgnkd7c38xv1wdk4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python))) ;; needed for the optional libglade-convert program
+     (list python)) ;; needed for the optional libglade-convert program
     (propagated-inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxml2" ,libxml2))) ; required by libglade-2.0.pc
+     (list gtk+-2 libxml2)) ; required by libglade-2.0.pc
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://developer.gnome.org/libglade")
     (synopsis "Load glade interfaces and access the glade built widgets")
     (description "Libglade is a library that provides interfaces for loading
@@ -4009,18 +4058,14 @@ widgets built in the loading process.")
                ;; Therefore we must do it.
                (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
     ;; Mentioned as Required by the .pc file
-    (propagated-inputs `(("libxml2" ,libxml2)))
+    (propagated-inputs (list libxml2))
     (inputs
-     `(("popt" ,popt)
-       ("pangox-compat" ,pangox-compat)
-       ("libgnome" ,libgnome)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libglade" ,libglade)))
+     (list popt pangox-compat libgnome libgnomecanvas libglade))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("intltool" ,intltool)
-       ("xorg-server" ,xorg-server-for-tests) ; For running the tests
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           intltool
+           xorg-server-for-tests ; For running the tests
+           pkg-config))
     (home-page "https://developer.gnome.org/libbonoboui/")
     (synopsis "Some user interface controls using Bonobo")
     (description  "The Bonobo UI library provides a number of user interface
@@ -4041,14 +4086,12 @@ controls using the Bonobo component framework.")
                 "1jp3p1lnwnwi6fxl2rz3166cmwzwy9vqz896anpwc3wdy9f875cm"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin") ; for glib-mkenums
-       ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") ; for glib-mkenums
+           gobject-introspection ; for g-ir-scanner
+           intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libxres" ,libxres)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+ libxres startup-notification))
     (home-page "https://developer.gnome.org/libwnck/")
     (synopsis "Window Navigator Construction Kit")
     (description
@@ -4073,12 +4116,9 @@ Hints specification (EWMH).")
                 "15713yl0f8f3p99jzqqfmbicrdswd3vwpx7r3bkf1bgh6d9lvs4b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)
-       ("libxres" ,libxres)
-       ("startup-notification" ,startup-notification)))))
+     (list gtk+-2 libxres startup-notification))))
 
 (define-public goffice
   (package
@@ -4099,15 +4139,10 @@ Hints specification (EWMH).")
                                               (assoc-ref %outputs "doc")
                                               "/share/gtk-doc/html"))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgsf" ,libgsf)
-       ("librsvg" ,librsvg)
-       ("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libgsf librsvg libxslt libxml2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") pkg-config))
     (home-page "https://developer.gnome.org/goffice/")
     (synopsis "Document-centric objects and utilities")
     (description "A GLib/GTK+ set of document-centric objects and utilities.")
@@ -4139,7 +4174,7 @@ Hints specification (EWMH).")
        ,@(package-arguments goffice)))
     (propagated-inputs
      ;; libgoffice-0.8.pc mentions libgsf-1
-     `(("libgsf" ,libgsf)))
+     (list libgsf))
     (inputs
      `(("gtk" ,gtk+-2)
        ,@(alist-delete "gtk" (package-inputs goffice))))))
@@ -4176,16 +4211,16 @@ Hints specification (EWMH).")
                                (assoc-ref outputs "out")
                                "/goffice/plugins"))))))))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("goffice" ,goffice)
-       ("libgsf" ,libgsf)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("zlib" ,zlib)))
+     (list glib
+           gtk+
+           goffice
+           libgsf
+           librsvg
+           libxml2
+           libxslt
+           python
+           python-pygobject
+           zlib))
     (native-inputs
      `(("bison" ,bison)
        ("docbook-xml" ,docbook-xml)
@@ -4233,7 +4268,7 @@ engineering.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -4243,12 +4278,12 @@ engineering.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           pango
+           python-pycairo
+           python-pygobject))
     (home-page "https://maoschanz.github.io/drawing/")
     (synopsis "Basic image editor for GNOME")
     (description
@@ -4294,15 +4329,15 @@ engineering.")
 (define-public seahorse
   (package
     (name "seahorse")
-    (version "3.36.2")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/" name "-"
+                           (version-major version) "/" name "-"
                            version ".tar.xz"))
        (sha256
-        (base32 "16wmxxppgcgfj8zkagcny5af1c81x32ysm9d6j9f2k7bmik21ss5"))))
+        (base32 "1x99i7kdvd8hbxcs5rfrq7nw6r9bfzaw263zaigjjj04h6gc1vp6"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -4313,7 +4348,11 @@ engineering.")
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
                (("gtk-update-icon-cache") "true"))
-             #t)))))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a writable HOME.
+             (setenv "HOME" (getcwd)))))))
     (inputs
      `(("gtk+" ,gtk+)
        ("gcr" ,gcr)
@@ -4322,10 +4361,10 @@ engineering.")
        ("openldap" ,openldap)
        ("openssh" ,openssh)
        ("avahi" ,avahi)
-       ("libhandy" ,libhandy-0.0)
+       ("libhandy" ,libhandy)
        ("libpwquality" ,libpwquality)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -4343,52 +4382,61 @@ passwords in the GNOME keyring.")
 (define-public vala
   (package
     (name "vala")
-    (version "0.46.5")
+    (version "0.54.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
+              (uri (string-append "mirror://gnome/sources/vala/"
                                   (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+                                  "vala-" version ".tar.xz"))
               (sha256
                (base32
-                "07fv895sp9wq74b20qig7hic0r4ynrr5pfaqba02r44xb794fy0s"))))
-    (build-system gnu-build-system)
+                "048k5c6c6y7jyb961krnrb7m0kghr0yrkpnfx3j5ckbx652yfkc8"))))
+    (build-system glib-or-gtk-build-system)
     (arguments
-     '(#:phases
+     '(#:configure-flags '("--enable-coverage")
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "doc/manual"
+               (substitute* '("manual.xml" "version.xml.in")
+                 (("http://www.oasis-open.org/docbook/xml/4.4/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
          (add-before 'check 'pre-check
-                     (lambda _
-                       (setenv "CC" "gcc")
-                       (substitute* "valadoc/tests/testrunner.sh"
-                         (("export PKG_CONFIG_PATH=" m)
-                          (string-append m "$PKG_CONFIG_PATH:")))
-                       ;; For missing '/etc/machine-id'.
-                       (setenv "DBUS_FATAL_WARNINGS" "0")
-                       #t)))))
+           (lambda _
+             (setenv "CC" "gcc")
+             (substitute* "valadoc/tests/libvaladoc\
+/tests-extra-environment.sh"
+               (("export PKG_CONFIG_PATH=" m)
+                (string-append m "$PKG_CONFIG_PATH:"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("bison" ,bison)
+       ("dbus" ,dbus)                   ; for dbus tests
+       ("docbook-xml" ,docbook-xml-4.4)
+       ("docbook-xsl" ,docbook-xsl)
        ("flex" ,flex)
-       ("bison" ,bison)
-       ("xsltproc" ,libxslt)
-       ("dbus" ,dbus)                                     ; for dbus tests
-       ("gobject-introspection" ,gobject-introspection))) ; for gir tests
-    (inputs
-     `(("graphviz" ,graphviz)))
+       ("gobject-introspection" ,gobject-introspection) ; for gir tests
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libvala-0.40.pc
+     `(("glib" ,glib)                   ; required by libvala-0.40.pc
+       ("libgvc" ,graphviz)))
     (home-page "https://wiki.gnome.org/Projects/Vala/")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "Vala is a programming language that aims to bring modern programming
-language features to GNOME developers without imposing any additional runtime
-requirements and without using a different ABI compared to applications and
-libraries written in C.")
+    (synopsis "Compiler using the GObject type system")
+    (description "Vala is a programming language using modern high level
+abstractions without imposing additional runtime requirements and without using
+a different ABI compared to applications and libraries written in C.  Vala uses
+the GObject type system and has additional code generation routines that make
+targeting the GNOME stack simple.")
     (license license:lgpl2.1+)))
 
-(define-public vala-0.50
-  (package
-    (inherit vala)
-    (version "0.50.2")
+;;; An older variant kept to build libsoup-minimal-2.
+(define-public vala-0.52
+  (package/inherit vala
+    (version "0.52.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/vala/"
@@ -4396,12 +4444,12 @@ libraries written in C.")
                                   "vala-" version ".tar.xz"))
               (sha256
                (base32
-                "1nnf0x6vk0a9p2y6z7jwjfvmlxh3qhj581v381r0y1sxsv35s39c"))))))
+                "12y6p8wdjp01vmfhxg2cgh32xnyqq6ivblvrar9clnj6vc867qhx"))))))
 
 (define-public vte
   (package
     (name "vte")
-    (version "0.60.3")
+    (version "0.64.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/vte/"
@@ -4409,7 +4457,7 @@ libraries written in C.")
                                   "vte-" version ".tar.xz"))
               (sha256
                (base32
-                "0al2v6fn061v4j1wwvppim1q283y2a6s0iyl29hxhmx3h48nxdzy"))))
+                "063ys3330cvhbz1dln9irhciavb2prw098lvhpcc2rx6cl5q4g1b"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -4424,9 +4472,9 @@ libraries written in C.")
        ("gperf" ,gperf)
        ("xmllint" ,libxml2)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)                   ; required by vte-2.91.pc
-       ("gnutls" ,gnutls)               ; ditto
-       ("pcre2" ,pcre2)))               ; ditto
+     (list gtk+ ; required by vte-2.91.pc
+           gnutls ; ditto
+           pcre2))               ; ditto
     (home-page "https://www.gnome.org/")
     (synopsis "Virtual Terminal Emulator")
     (description
@@ -4451,8 +4499,8 @@ editors, IDEs, etc.")
                 "0rnm5c6m3abbm81jsfdas0y80z299ny54gr4syn4bfrms3s4g19l"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)
-       ,@(package-native-inputs vte)))
+     (modify-inputs (package-native-inputs vte)
+       (prepend gtk-doc/stable)))
     (arguments
      `(#:configure-flags '("-Ddocs=true")))
   (synopsis "Enhanced VTE terminal widget")
@@ -4481,12 +4529,11 @@ selection and URL hints.")))
     (arguments
      '(#:configure-flags '("--disable-python")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")))   ; for glib-genmarshal, etc.
+     (list pkg-config intltool
+           `(,glib "bin")))   ; for glib-genmarshal, etc.
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)         ; required by libvte.pc
-       ("ncurses" ,ncurses))))) ; required by libvte.la
+     (list gtk+-2 ; required by libvte.pc
+           ncurses)))) ; required by libvte.la
 
 (define-public vinagre
   (package
@@ -4506,7 +4553,8 @@ selection and URL hints.")))
     (arguments
      ;; Disable -Werror and such, to avoid build failures on compilation
      ;; warnings.
-     '(#:configure-flags '("--enable-compile-warnings=minimum")
+     '(#:configure-flags '("--enable-compile-warnings=minimum"
+                           "CFLAGS=-O2 -g -fcommon")
        #:phases
        (modify-phases %standard-phases
          (add-before 'install 'skip-gtk-update-icon-cache
@@ -4526,15 +4574,15 @@ selection and URL hints.")))
        ("itstool" ,itstool)
        ("glib-bin" ,glib "bin")))                 ;for glib-compile-schemas
     (inputs
-     `(("libxml2" ,libxml2)
-       ("gtk-vnc" ,gtk-vnc)
-       ("gnome-keyring" ,gnome-keyring)
-       ("libsecret" ,libsecret)
-       ("freerdp" ,freerdp)
-       ("spice" ,spice)
-       ("spice-gtk" ,spice-gtk)
-       ("telepathy-glib" ,telepathy-glib)
-       ("vte" ,vte)))
+     (list libxml2
+           gtk-vnc
+           gnome-keyring
+           libsecret
+           freerdp
+           spice
+           spice-gtk
+           telepathy-glib
+           vte))
     (home-page "https://wiki.gnome.org/Apps/Vinagre")
     (synopsis "Remote desktop viewer for GNOME")
     (description "Vinagre is a remote display client supporting the VNC, SPICE
@@ -4544,7 +4592,7 @@ and RDP protocols.")
 (define-public dconf
   (package
     (name "dconf")
-    (version "0.36.0")
+    (version "0.40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4553,14 +4601,13 @@ and RDP protocols.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0bfs069pjv6lhp7xrzmrhz3876ay2ryqxzc6mlva1hhz34ibprlz"))))
+                "0cs5nayg080y8pb9b7qccm1ni8wkicdmqp1jsgc22110r6j24zyg"))))
     (build-system meson-build-system)
     (propagated-inputs
      ;; In Requires of dconf.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("dbus" ,dbus)))
+     (list gtk+ dbus))
     (native-inputs
      `(("bash-completion" ,bash-completion)
        ("libxslt" ,libxslt)                     ;for xsltproc
@@ -4573,7 +4620,7 @@ and RDP protocols.")
        ("vala" ,vala)))
     (arguments
      `(#:glib-or-gtk? #t
-       #:configure-flags '("-Denable-gtk-doc=true")
+       #:configure-flags '("-Dgtk_doc=true")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'increase-test-timeout
                     (lambda _
@@ -4589,36 +4636,91 @@ is to provide a backend to GSettings on platforms that don't already have
 configuration storage systems.")
     (license license:lgpl2.1+)))
 
-(define-public json-glib
+(define-public json-glib-minimal
   (package
-    (name "json-glib")
-    (version "1.4.4")
+    (name "json-glib-minimal")
+    (version "1.6.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+              (uri (string-append "mirror://gnome/sources/json-glib/"
+                                  (version-major+minor version)
+                                  "/json-glib-" version ".tar.xz"))
               (sha256
                (base32
-                "0ixwyis47v5bkx6h8a1iqlw3638cxcv57ivxv4gw2gaig51my33j"))))
+                "092g2dyy1hhl0ix9kp33wcab0pg1qicnsv0cj5ms9g9qs336cgd3"))))
     (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t))           ; To wrap binaries and/or compile schemas
     (native-inputs
      `(("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")              ;for glib-mkenums and glib-genmarshal
-       ("gobject-introspection" ,gobject-introspection)
+       ("glib" ,glib "bin")             ;for glib-mkenums and glib-genmarshal
        ("pkg-config" ,pkg-config)))
+    (inputs
+     (list bash-minimal))
     (propagated-inputs
-     `(("glib" ,glib)))                         ;according to json-glib-1.0.pc
+     (list glib))                 ;according to json-glib-1.0.pc
     (home-page "https://wiki.gnome.org/Projects/JsonGlib")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "JSON-GLib is a C library based on GLib providing serialization and
-deserialization support for the JavaScript Object Notation (JSON) format
-described by RFC 4627.  It provides parser and generator GObject classes and
-various wrappers for the complex data types employed by JSON, such as arrays
-and objects.")
+    (synopsis "Glib and GObject implementation of JSON")
+    (description "JSON-GLib is a library providing serialization and
+described by RFC 4627.  It implements a full JSON parser and generator using
+GLib and GObject, and integrates JSON with GLib data types.")
     (license license:lgpl2.1+)))
 
+(define-public json-glib
+  (package/inherit json-glib-minimal
+    (name "json-glib")
+    (outputs (cons "doc" (package-outputs json-glib-minimal)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments json-glib-minimal)
+       ((#:configure-flags _)
+        `(list "-Ddocs=true"
+               "-Dman=true"
+               ,@(if (%current-target-system)
+                     ;; If enabled, gtkdoc-scangobj will try to execute a
+                     ;; cross-compiled binary.
+                     '("-Dgtk_doc=disabled"
+                       ;; Trying to build introspection data when cross-compiling
+                       ;; causes errors during linking.
+                       "-Dintrospection=disabled")
+                     '())))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-docbook
+             (lambda* (#:key native-inputs inputs #:allow-other-keys)
+               (with-directory-excursion "doc"
+                 (substitute* (find-files "." "\\.xml$")
+                   (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                    (string-append (assoc-ref (or native-inputs inputs)
+                                              "docbook-xml")
+                                   "/xml/dtd/docbook/")))
+                 (substitute* "meson.build"
+                   (("http://docbook.sourceforge.net/release/xsl/current/")
+                    (string-append (assoc-ref (or native-inputs inputs)
+                                              "docbook-xsl")
+                                   "/xml/xsl/docbook-xsl-1.79.2/"))))))
+           ;; When cross-compiling, there are no docs to move.
+           ,(if (%current-target-system)
+                '(add-after 'install 'stub-docs
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     ;; The daemon doesn't like empty output paths.
+                     (mkdir (assoc-ref outputs "doc"))))
+                '(add-after 'install 'move-docs
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref outputs "out"))
+                            (doc (assoc-ref outputs "doc")))
+                       (mkdir-p (string-append doc "/share"))
+                       (rename-file
+                        (string-append out "/share/gtk-doc")
+                        (string-append doc "/share/gtk-doc"))))))))))
+    (native-inputs
+     (append
+         `(("docbook-xml" ,docbook-xml-4.3)
+           ("docbook-xsl" ,docbook-xsl)
+           ("gobject-introspection" ,gobject-introspection)
+           ("gtk-doc" ,gtk-doc)
+           ("xsltproc" ,libxslt))
+         (package-native-inputs json-glib-minimal)))))
+
 (define-public libxklavier
   (package
     (name "libxklavier")
@@ -4652,14 +4754,9 @@ and objects.")
        ("libtool" ,libtool)))
     (propagated-inputs
      ;; Required by libxklavier.pc.
-     `(("glib"    ,glib)
-       ("libxml2" ,libxml2)))
+     (list glib libxml2))
     (inputs
-     `(("iso-codes"        ,iso-codes)
-       ("libxi"            ,libxi)
-       ("libxkbfile"       ,libxkbfile)
-       ("xkbcomp"          ,xkbcomp)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list iso-codes libxi libxkbfile xkbcomp xkeyboard-config))
     (home-page "https://www.freedesktop.org/wiki/Software/LibXklavier/")
     (synopsis "High-level API for X Keyboard Extension")
     (description
@@ -4685,11 +4782,9 @@ indicators etc).")
          "1s8f9rns9v7qlwjv9qh9lr8crp88dpzfm45hj47zc3ivpy0dbnq9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python-2)
-       ("python2-pygtk" ,python2-pygtk)
-       ("librsvg" ,librsvg)))
+     (list python-2 python2-pygtk librsvg))
     (home-page "https://www.gnome.org")
     (synopsis "Python bindings to librsvg")
     (description
@@ -4703,7 +4798,7 @@ library.")
 (define-public glib-networking
   (package
     (name "glib-networking")
-    (version "2.62.2")
+    (version "2.70.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/glib-networking/"
@@ -4711,23 +4806,36 @@ library.")
                                   "glib-networking-" version ".tar.xz"))
               (sha256
                (base32
-                "0i2mw75297ql72h47vyvff3hqa0kcmqybblj52fqrarb0kfbhi06"))))
+                "0dbg1na239mbavn4hknkax5sns9q2dbdnqw9wcpmhv58mzkhid36"))
+              (patches
+               (search-patches "glib-networking-gnutls-binding.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dlibproxy_support=false")))
+     (if (target-64bit?)
+         '()
+         (list #:phases
+               #~(modify-phases %standard-phases
+                   (add-after 'unpack 'work-around-32-bit-time-t
+                     (lambda _
+                       (invoke "patch" "--force" "-p1" "-i"
+                               #$(local-file
+                                  (search-patch
+                                   "glib-networking-32-bit-time.patch")))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+       ("gettext" ,gettext-minimal)))
     (inputs
-     `(("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
-    (home-page "https://www.gnome.org")
-    (synopsis "Network-related GIO modules")
+     (list glib gnutls gsettings-desktop-schemas libproxy))
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (synopsis "Network extensions for GLib")
     (description
-     "This package contains various network related extensions for the GIO
-library.")
-    (license license:lgpl2.0+)))
+     "Glib-networking contains the implementations of certain GLib networking
+features that cannot be implemented directly in GLib itself because of their
+dependencies.  Currently it contains GnuTLS and OpenSSL-based implementations of
+GTlsBackend, a libproxy-based implementation of GProxyResolver,
+GLibproxyResolver, and a GNOME GProxyResolver that uses the proxy information
+from the GSettings schemas in gsettings-desktop-schemas.")
+    (license license:lgpl2.1+)))
 
 (define-public rest
   (package
@@ -4753,7 +4861,7 @@ library.")
     (propagated-inputs
      ;; rest-0.7.pc refers to all these.
      `(("glib"    ,glib)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)))
     (home-page "https://www.gtk.org/")
     (synopsis "RESTful web api query library")
@@ -4763,10 +4871,11 @@ claim to be \"RESTful\".  It includes convenience wrappers for libsoup and
 libxml to ease remote use of the RESTful API.")
     (license license:lgpl2.1+)))
 
-(define-public libsoup
+;;; A minimal version of libsoup used to prevent a cycle with Inkscape.
+(define-public libsoup-minimal
   (package
-    (name "libsoup")
-    (version "2.72.0")
+    (name "libsoup-minimal")
+    (version "3.0.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/libsoup/"
@@ -4774,25 +4883,12 @@ libxml to ease remote use of the RESTful API.")
                                   "libsoup-" version ".tar.xz"))
               (sha256
                (base32
-                "11skbyw2pw32178q3h8pi7xqa41b2x4k6q4k9f75zxmh8s23y30p"))))
+                "0pp2s9rj7pp45ac99hbqszznln5ljj38cbc8lbljfc5fmm6v0rai"))))
     (build-system meson-build-system)
-    (outputs '("out" "doc"))
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build meson-build-system)
-                  (ice-9 popen))
-
-       #:configure-flags '("-Dgtk_doc=true")
+     `(#:configure-flags '("-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
-                                          "/xml/dtd/docbook")))
-               (substitute* (find-files "docs/reference")
-                 (("http://.*/docbookx\\.dtd")
-                  (string-append xmldoc "/docbookx.dtd")))
-               #t)))
          (add-after 'unpack 'adjust-tests
            (lambda _
              ;; This test fails due to missing /etc/nsswitch.conf
@@ -4801,93 +4897,37 @@ libxml to ease remote use of the RESTful API.")
                ((".*/sockets/unconnected.*") ""))
 
              ;; These fail because "subdomain.localhost" does not resolve in
-             ;; the build environment.
-             (substitute* "tests/hsts-test.c"
-               ((".*/hsts/basic.*") "")
-               ((".*/hsts/subdomains.*") "")
-               ((".*/hsts/superdomain.*") "")
-               ((".*/hsts/utf8-address.*") ""))
+             ;; the build environment.  Moreover, the hsts-test suite fails on
+             ;; i686-linux because of errors from `session_get_uri' like
+             ;; "Unexpected status 200 OK (expected 301 Moved Permanently)"
+             ;; (see: https://gitlab.gnome.org/GNOME/libsoup/-/issues/239).
+             (substitute* "tests/meson.build"
+               ((".*'name': 'hsts'.*") ""))
              (substitute* "tests/hsts-db-test.c"
-               ((".*/hsts-db/subdomains.*") ""))
-
-             ;; Generate a self-signed certificate that has "localhost" as its
-             ;; 'dnsName'.  Failing to do that, and starting with GnuTLS
-             ;; 3.5.12, tests such as "ssl-tests" fail:
-             ;;
-             ;; ERROR:ssl-test.c:406:do_tls_interaction_test: Unexpected status 6 Unacceptable TLS certificate (expected 200 OK)
-             ;;
-             ;; 'certtool' is interactive so we have to pipe it the answers.
-             ;; Reported at <https://bugzilla.gnome.org/show_bug.cgi?id=784696>.
-             (let ((pipe (open-output-pipe "certtool --generate-self-signed \
- --load-privkey tests/test-key.pem --outfile tests/test-cert.pem")))
-               (for-each (lambda (line)
-                           (display line pipe)
-                           (newline pipe))
-                         '(""               ;Common name
-                           ""               ;UID
-                           "Guix"           ;Organizational unit name
-                           "GNU"            ;Organization name
-                           ""               ;Locality name
-                           ""               ;State or province
-                           ""               ;Country
-                           ""               ;subject's domain component (DC)
-                           ""               ;E-mail
-                           ""               ;serial number
-                           "-1"             ;expiration time
-                           "N"              ;belong to authority?
-                           "N"              ;web client certificate?
-                           "N"              ;IPsec IKE?
-                           "Y"              ;web server certificate?
-                           "localhost"      ;dnsName of subject
-                           ""               ;dnsName of subject (end)
-                           ""               ;URI of subject
-                           "127.0.0.1"      ;IP address of subject
-                           ""               ;signing?
-                           ""               ;encryption (RSA)?
-                           ""               ;data encryption?
-                           ""               ;sign OCSP requests?
-                           ""               ;sign code?
-                           ""               ;time stamping?
-                           ""               ;email protection?
-                           ""               ;URI of the CRL distribution point
-                           "y"              ;above info OK?
-                           ))
-               (close-pipe pipe))
-             #t))
-         (add-after 'install 'move-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share"))
-               (copy-recursively (string-append out "/share/gtk-doc")
-                                 (string-append doc "/share/gtk-doc"))
-               (delete-file-recursively (string-append out "/share/gtk-doc"))
-               #t))))))
-    (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("glib:bin" ,glib "bin")                   ; for glib-mkenums
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("vala" ,vala)
-       ("php" ,php)
-       ("curl" ,curl)
-       ("gnutls" ,gnutls)                         ;for 'certtool'
-       ("httpd" ,httpd)))
+               ((".*/hsts-db/subdomains.*") "")))))))
+    (native-inputs
+     (list `(,glib "bin") ;for glib-mkenums
+           gobject-introspection
+           intltool
+           pkg-config
+           python-wrapper
+           vala
+           curl
+           gnutls ;for 'certtool'
+           httpd))
     (propagated-inputs
-     ;; libsoup-2.4.pc refers to all of these (except where otherwise noted)
-     `(("brotli" ,brotli)
-       ("glib" ,glib)
-       ("glib-networking" ,glib-networking)       ; for GIO runtime modules
-       ("libpsl" ,libpsl)
-       ("libxml2" ,libxml2)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
-    (inputs
-     `(("mit-krb5" ,mit-krb5)
-       ("ntlm_auth" ,samba))) ; For ntlm_auth support
+     ;; libsoup-3.0.pc refers to all of these (except where otherwise noted)
+     (list brotli
+           glib
+           glib-networking ; for GIO runtime modules
+           libpsl
+           nghttp2 ;for pkg-config
+           `(,nghttp2 "lib")
+           libxml2
+           sqlite
+           zlib))
+    (inputs
+     (list mit-krb5 samba/fixed))     ; For ntlm_auth support
     (home-page "https://wiki.gnome.org/Projects/libsoup")
     (synopsis "GLib-based HTTP Library")
     (description
@@ -4895,20 +4935,61 @@ libxml to ease remote use of the RESTful API.")
 and the GLib main loop, to integrate well with GNOME applications.")
     (license license:lgpl2.0+)))
 
+;;; An older variant kept to build the 'rest' package.
+(define-public libsoup-minimal-2
+  (package/inherit libsoup-minimal
+    (version "2.72.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/libsoup/"
+                                  (version-major+minor version) "/"
+                                  "libsoup-" version ".tar.xz"))
+              (sha256
+               (base32
+                "11skbyw2pw32178q3h8pi7xqa41b2x4k6q4k9f75zxmh8s23y30p"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libsoup-minimal)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'disable-failing-tests
+             (lambda _
+               ;; Disable the SSL test, failing since 2.68 and resolved in
+               ;; libsoup 3.
+               (substitute* "tests/meson.build"
+                 (("[ \t]*\\['ssl', true, \\[\\]\\],") ""))))))))
+    (native-inputs
+     (modify-inputs (package-native-inputs libsoup-minimal)
+       (replace "vala" vala-0.52)))))
 
-;;; A minimal version of libsoup used to prevent a cycle with Inkscape.
-(define-public libsoup-minimal
-  (package/inherit libsoup
-    (name "libsoup-minimal")
-    (outputs (delete "doc" (package-outputs libsoup)))
+(define-public libsoup
+  (package/inherit libsoup-minimal
+    (name "libsoup")
+    (outputs (cons "doc" (package-outputs libsoup-minimal)))
     (arguments
-     (substitute-keyword-arguments (package-arguments libsoup)
+     (substitute-keyword-arguments (package-arguments libsoup-minimal)
        ((#:configure-flags configure-flags)
-        `(delete "-Dgtk_doc=true" ,configure-flags))
+        `(cons "-Dgtk_doc=true"
+               (delete "-Dgtk_doc=false" ,configure-flags)))
        ((#:phases phases)
         `(modify-phases ,phases
-           (delete 'move-doc)))))
-    (native-inputs (alist-delete "gtk-doc" (package-native-inputs libsoup)))))
+           (add-after 'unpack 'patch-docbook-xml
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
+                                            "/xml/dtd/docbook")))
+                 (substitute* (find-files "docs/reference")
+                   (("http://.*/docbookx\\.dtd")
+                    (string-append xmldoc "/docbookx.dtd"))))))
+           (add-after 'install 'move-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (doc (assoc-ref outputs "doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (copy-recursively (string-append out "/share/gtk-doc")
+                                   (string-append doc "/share/gtk-doc"))
+                 (delete-file-recursively
+                  (string-append out "/share/gtk-doc")))))))))
+    (native-inputs (modify-inputs (package-native-inputs libsoup-minimal)
+                     (prepend docbook-xml-4.1.2 gtk-doc)))))
 
 (define-public libsecret
   (package
@@ -4946,13 +5027,11 @@ and the GLib main loop, to integrate well with GNOME applications.")
        ;("python2-pygobject" ,python2-pygobject)
        ;("python2-pygobject-2" ,python2-pygobject-2)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libsecret-1.pc
+     (list glib)) ; required by libsecret-1.pc
     (inputs
      ;; The ‘build’ phase complains about missing docbook-xml-4.2 but adding it
      ;; doesn't seem to affect the build result.
-     `(("docbook-xsl" ,docbook-xsl)
-       ("libgcrypt" ,libgcrypt)
-       ("libxml2" ,libxml2))) ; for XML_CATALOG_FILES
+     (list docbook-xsl libgcrypt libxml2)) ; for XML_CATALOG_FILES
     (home-page "https://wiki.gnome.org/Projects/Libsecret/")
     (synopsis "GObject bindings for \"Secret Service\" API")
     (description
@@ -4992,9 +5071,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Five%20or%20more")
     (synopsis "Logic puzzle game")
     (description "Five or More is a game where you try to align
@@ -5006,25 +5083,25 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public gnome-mines
   (package
     (name "gnome-mines")
-    (version "3.36.1")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
-        (base32 "0m2680r94nk61imym4x73j03jwfjd8cxm592m5ybiqdfdw6i723i"))))
+        (base32 "0sf6kdvhr4pr3hddnj6ql9larz2wy108sri31id6x9g459nbly8z"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            (lambda _
              (substitute* "build-aux/meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+               (("gtk-update-icon-cache") (which "true"))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")       ; for glib-compile-resources
        ("pkg-config" ,pkg-config)
@@ -5035,9 +5112,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
        ("yelp" ,yelp)
        ("appstream-glib" ,appstream-glib)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Mines")
     (synopsis "Minesweeper game")
     (description
@@ -5072,13 +5147,13 @@ floating in an ocean using only your brain and a little bit of luck.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)                   ; for gio
-       ("gusb" ,gusb)
-       ("udisks" ,udisks)
-       ("libgudev" ,libgudev)
-       ("libcanberra" ,libcanberra)
-       ("polkit" ,polkit)))
+     (list gtk+
+           glib ; for gio
+           gusb
+           udisks
+           libgudev
+           libcanberra
+           polkit))
     (home-page "https://wiki.gnome.org/Apps/MultiWriter")
     (synopsis "Write to multiple USB devices at once")
     (description
@@ -5089,26 +5164,26 @@ once.")
 (define-public gnome-sudoku
   (package
     (name "gnome-sudoku")
-    (version "3.34.1")
+    (version "40.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "025y85r4qqardivvwiwhbmgarziykdy224m8zlrq8b79zv82793b"))))
+         "18slsxifad5cjz4fqi818i66jc9b7kzgn01qxa0ra4y7wcqha4in"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            (lambda _
              (substitute* "build-aux/post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+               (("gtk-update-icon-cache") (which "true"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("desktop-file-utils" ,desktop-file-utils)
@@ -5118,11 +5193,7 @@ once.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libgee" ,libgee)
-       ("librsvg" ,librsvg)
-       ("qqwing" ,qqwing)))
+     (list gtk+ json-glib libgee librsvg qqwing))
     (home-page "https://wiki.gnome.org/Apps/Sudoku")
     (synopsis "Japanese logic game")
     (description
@@ -5135,7 +5206,7 @@ more fun.")
 (define-public gnome-terminal
   (package
     (name "gnome-terminal")
-    (version "3.34.2")
+    (version "3.40.3")
     (source
      (origin
        (method url-fetch)
@@ -5144,7 +5215,7 @@ more fun.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0gc004f9b5k94gkdanmqjz3wqgnpny0l3nqm8zd19h4f0ps27mrv"))))
+         "08hsic7sn32xw12i3j0ard2bhfhp8gmzqm0pa8xzl5l1jhzsmsfb"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:configure-flags
@@ -5153,24 +5224,26 @@ more fun.")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-/bin/true
-                     (lambda _
-                       (substitute* "configure"
-                         (("/bin/true") (which "true"))))))))
+           (lambda _
+             (substitute* "configure"
+               (("/bin/true") (which "true"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("docbook-xsl" ,docbook-xsl)
+       ("pkg-config" ,pkg-config)
        ("desktop-file-utils" ,desktop-file-utils)
        ("intltool" ,intltool)
        ("itstool" ,itstool)
+       ("libxslt" ,libxslt)
        ("xmllint" ,libxml2)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("vte" ,vte)
-       ("gnutls" ,gnutls)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("util-linux" ,util-linux "lib")
-       ("vala" ,vala)))
+     (list dconf))
+    (inputs
+     (list gtk+
+           vte
+           gnutls
+           gsettings-desktop-schemas
+           `(,util-linux "lib")
+           vala))
     (home-page "https://wiki.gnome.org/Apps/Terminal")
     (synopsis "Terminal emulator")
     (description
@@ -5182,9 +5255,9 @@ It supports several profiles, multiple tabs and implements several
 keyboard shortcuts.")
     (license license:gpl3+)))
 
-(define-public colord
+(define-public colord-minimal
   (package
-    (name "colord")
+    (name "colord-minimal")
     (version "1.4.5")
     (source
      (origin
@@ -5195,33 +5268,27 @@ keyboard shortcuts.")
         (base32 "05sydi6qqqx1rrqwnga1vbg9srkf89wdcfw5w4p4m7r37m2flx5p"))))
     (build-system meson-build-system)
     (arguments
-     '(;; FIXME: One test fails:
+     '( ;; FIXME: One test fails:
        ;; /colord/icc-store (in lib/colord/colord-self-test-private):
        ;; Incorrect content type for /tmp/colord-vkve/already-exists.icc, got
        ;; application/x-zerosize
        #:tests? #f
        #:glib-or-gtk? #t
-       #:configure-flags (list "-Dlocalstatedir=/var"
-                               ;; No dep on systemd.
-                               "-Dsystemd=false"
-                               ;; Wants to install to global completion dir;
-                               ;; punt.
+       #:configure-flags (list "-Dargyllcms_sensor=false" ;requires spotread
                                "-Dbash_completion=false"
                                "-Ddaemon_user=colord"
+                               "-Ddocs=false"
+                               "-Dlocalstatedir=/var"
+                               "-Dman=false"
                                "-Dsane=true"
-                               "-Dvapi=true"
-                               ;; Requires spotread.
-                               "-Dargyllcms_sensor=false"
-                               ;; TODO: Requires docbook2x.
-                               "-Dman=false")
+                               "-Dsystemd=false") ;no systemd
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-build-system
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "rules/meson.build"
                (("udev.get_pkgconfig_variable\\('udevdir'\\)")
-                (string-append "'" (assoc-ref outputs "out") "/lib/udev'")))
-             #t))
+                (string-append "'" (assoc-ref outputs "out") "/lib/udev'")))))
          (add-before 'configure 'set-sqlite3-file-name
            (lambda* (#:key inputs #:allow-other-keys)
              ;; "colormgr dump" works by invoking the "sqlite3" command.
@@ -5229,13 +5296,10 @@ keyboard shortcuts.")
              (let ((sqlite (assoc-ref inputs "sqlite")))
                (substitute* "client/cd-util.c"
                  (("\"sqlite3\"")
-                  (string-append "\"" sqlite "/bin/sqlite3\"")))
-               #t))))))
+                  (string-append "\"" sqlite "/bin/sqlite3\"")))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for glib-compile-resources, etc.
        ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
@@ -5245,7 +5309,8 @@ keyboard shortcuts.")
        ("udev" ,eudev)))
     (inputs
      `(("dbus-glib" ,dbus-glib)
-       ("gusb" ,gusb)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gusb" ,gusb-minimal)
        ("libgudev" ,libgudev)
        ("libusb" ,libusb)
        ("polkit" ,polkit)
@@ -5259,6 +5324,41 @@ install and generate color profiles to accurately color manage input and
 output devices.")
     (license license:gpl2+)))
 
+(define-public colord
+  (package/inherit colord-minimal
+    (name "colord")
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments colord-minimal)
+       ((#:configure-flags flags)
+        `(begin
+           (use-modules (srfi srfi-1))
+           (append '("-Dbash_completion=true"
+                     "-Ddocs=true"
+                     "-Dman=true"
+                     "-Dvapi=true")
+               (fold delete ,flags '("-Dbash_completion=false"
+                                     "-Ddocs=false"
+                                     "-Dman=false")))))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-bash-completion-dir
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "data/meson.build"
+                 (("bash_completion.get_pkgconfig_variable\
+\\('completionsdir'\\)")
+                  (string-append "'" (assoc-ref outputs "out")
+                                 "/etc/bash_completion.d'")))))))))
+    (native-inputs
+     (append
+         `(("bash-completion" ,bash-completion)
+           ("docbook-xsl-ns" ,docbook-xsl-ns)
+           ("gtk-doc" ,gtk-doc/stable)
+           ("libxml2" ,libxml2)         ;for XML_CATALOG_FILES
+           ("libxslt" ,libxslt)
+           ("vala" ,vala))              ;for VAPI, needed by simple-scan
+         (package-native-inputs colord-minimal)))))
+
 (define-public geoclue
   (package
     (name "geoclue")
@@ -5274,20 +5374,20 @@ output devices.")
        (patches (search-patches "geoclue-config.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags (list "-Dbus-srv-user=geoclue")))
+     '(#:configure-flags (list "-Ddbus-srv-user=geoclue")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("modem-manager" ,modem-manager)
-       ("libnotify" ,libnotify)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)))
+     (list pkg-config
+           gobject-introspection
+           modem-manager
+           libnotify
+           gtk-doc/stable
+           intltool))
     (inputs
      `(("avahi" ,avahi)
        ("glib:bin" ,glib "bin")
        ("glib-networking" ,glib-networking)
        ("json-glib" ,json-glib)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2)))
     (home-page "https://gitlab.freedesktop.org/geoclue/geoclue/-/wikis/home")
     (synopsis "Geolocation service")
     (description "Geoclue is a D-Bus service that provides location
@@ -5317,9 +5417,7 @@ permission from user.")
          (add-before 'check 'set-locales
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "GUIX_LOCPATH"
-                     (string-append (assoc-ref inputs "glibc-locales")
-                                    "/lib/locale"))
-             #t)))))
+                     (search-input-directory inputs "lib/locale")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums
        ("glibc-locales" ,glibc-locales) ; for tests
@@ -5330,9 +5428,9 @@ permission from user.")
        ("json-glib" ,json-glib)))
     (propagated-inputs
      ;; geocode-glib-1.0.pc refers to GIO.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("libsoup" ,libsoup)))
+     `(("libsoup" ,libsoup-minimal-2)))
     (home-page "https://github.com/GNOME/geocode-glib/")
     (synopsis "Geocoding and reverse-geocoding library")
     (description
@@ -5387,33 +5485,29 @@ faster results and to avoid unnecessary server load.")
                                               (assoc-ref %outputs "out")
                                               "/lib/udev/rules.d"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)                 ; for ./autogen.sh
-
-       ;; For tests.
-       ("python-dbus" ,python-dbus)
-       ("python-dbusmock" ,python-dbusmock)
-       ("python-pygobject" ,python-pygobject)
-       ("umockdev" ,umockdev)
-
-       ;; For man pages.
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)             ; for 'xsltproc'
-       ("libxml2" ,libxml2)))           ; for 'XML_CATALOG_FILES'
-    (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("libgudev" ,libgudev)
-       ("libusb" ,libusb)))
+     (list autoconf
+           automake
+           gobject-introspection
+           gtk-doc
+           intltool
+           libtool
+           pkg-config
+           python
+           which ; for ./autogen.sh
+           ;; For tests.
+           python-dbus
+           python-dbusmock
+           python-pygobject
+           umockdev
+           ;; For man pages.
+           docbook-xsl
+           libxslt ; for 'xsltproc'
+           libxml2))           ; for 'XML_CATALOG_FILES'
+    (inputs
+     (list dbus-glib libgudev libusb))
     (propagated-inputs
      ;; In Requires of upower-glib.pc.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://upower.freedesktop.org/")
     (synopsis "System daemon for managing power devices")
     (description
@@ -5426,15 +5520,15 @@ service via the system message bus.")
 (define-public libgweather
   (package
     (name "libgweather")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1fgiqswkhiaijanml3mb16ajn5aanrk7x6yiwagp9n9rssam6902"))))
+                "1rkf4yv43qcahyx7bismdv6z2vh5azdnm1fqfmnzrada9cm8ykna"))))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f ; one of two tests requires network access
@@ -5447,17 +5541,18 @@ service via the system message bus.")
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)
-       ("intltool" ,intltool)))
+       ("intltool" ,intltool)
+       ("python-pygobject" ,python-pygobject)))
     (propagated-inputs
      ;; gweather-3.0.pc refers to GTK+, GDK-Pixbuf, GLib/GObject, libxml, and
      ;; libsoup.
      `(("gtk+" ,gtk+)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("libxml2" ,libxml2)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("geocode-glib" ,geocode-glib)))
     (inputs
-     `(("tzdata" ,tzdata)))
+     (list tzdata))
     (home-page "https://wiki.gnome.org/action/show/Projects/LibGWeather")
     (synopsis "Location, time zone, and weather library for GNOME")
     (description
@@ -5468,20 +5563,21 @@ services for numerous locations.")
 (define-public gnome-settings-daemon
   (package
     (name "gnome-settings-daemon")
-    (version "3.34.1")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "07y1gbicz0pbxmdgwrdzyc4byy30wfwpbqgvnx27gnpqmc5s50cr"))
+         "111qcvlqjpasnswdniy5n53wyrs1y7a91qx1w4nsppnizdhn7jp6"))
        (patches (search-patches "gnome-settings-daemon-gc.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:configure-flags
        (list (string-append "-Dudev_dir="
                             (assoc-ref %outputs "out")
@@ -5503,8 +5599,7 @@ services for numerous locations.")
                         (substitute* "plugins/housekeeping/gsd-disk-space.c"
                           (("g_find_program_in_path \\(DISK_SPACE_ANALYZER\\)")
                            (string-append "g_strdup (\"" baobab
-                                          "/bin/baobab\")")))
-                        #t))))
+                                          "/bin/baobab\")")))))))
 
        ;; Color management test can't reach the colord system service.
        #:tests? #f))
@@ -5517,32 +5612,32 @@ services for numerous locations.")
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("baobab" ,baobab)
-       ("colord" ,colord)
-       ("libgudev" ,libgudev)
-       ("upower" ,upower)
-       ("polkit" ,polkit)
-       ("pulseaudio" ,pulseaudio)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)
-       ("lcms" ,lcms)
-       ("libnotify" ,libnotify)
-       ("geoclue" ,geoclue)
-       ("geocode-glib" ,geocode-glib)
-       ("libgweather" ,libgweather)
-       ("gnome-desktop" ,gnome-desktop)
-       ("nss" ,nss)
-       ("cups" ,cups)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libwacom" ,libwacom)
-       ("librsvg" ,librsvg)
-       ("xf86-input-wacom" ,xf86-input-wacom)
-       ("wayland" ,wayland)
-       ("network-manager" ,network-manager)
-       ("gcr" ,gcr)
-       ("modem-manager" ,modem-manager)))
+     (list alsa-lib
+           baobab
+           colord
+           libgudev
+           upower
+           polkit
+           pulseaudio
+           libcanberra
+           libx11
+           libxtst
+           lcms
+           libnotify
+           geoclue
+           geocode-glib
+           libgweather
+           gnome-desktop
+           nss
+           cups
+           gsettings-desktop-schemas
+           libwacom
+           librsvg
+           xf86-input-wacom
+           wayland
+           network-manager
+           gcr
+           modem-manager))
     (home-page "https://www.gnome.org")
     (synopsis "GNOME settings daemon")
     (description
@@ -5569,18 +5664,12 @@ settings, themes, mouse settings, and startup of other daemons.")
     ;; FIXME: Tests require gvfs.
     `(#:tests? #f))
    (native-inputs
-    `(("intltool" ,intltool)
-      ("glib" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("pkg-config" ,pkg-config)))
+    (list intltool
+          `(,glib "bin") gobject-introspection pkg-config))
    (propagated-inputs
-    `(("glib" ,glib)
-      ("gmime" ,gmime)
-      ("libarchive" ,libarchive)
-      ("libgcrypt" ,libgcrypt)
-      ("libxml2" ,libxml2)))
+    (list glib gmime libarchive libgcrypt libxml2))
    (inputs
-    `(("libsoup" ,libsoup)))
+    (list libsoup))
    (home-page "https://projects.gnome.org/totem")
    (synopsis "Library to parse and save media playlists for GNOME")
    (description "Totem-pl-parser is a GObjects-based library to parse and save
@@ -5612,10 +5701,7 @@ playlists in a variety of formats.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("guile" ,guile-2.2)
-       ("libcanberra" ,libcanberra)
-       ("librsvg" ,librsvg)))
+     (list gtk+ guile-2.2 libcanberra librsvg))
     (home-page "https://wiki.gnome.org/Apps/Aisleriot")
     (synopsis "Solitaire card games")
     (description
@@ -5626,7 +5712,7 @@ which are easy to play with the aid of a mouse.")
 (define-public amtk
   (package
     (name "amtk")
-    (version "5.0.2")
+    (version "5.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/amtk/"
@@ -5634,18 +5720,14 @@ which are easy to play with the aid of a mouse.")
                                   "amtk-" version ".tar.xz"))
               (sha256
                (base32
-                "11jgz2i9wjzv4alrxl1qyxiapb52w7vs5ygfgsw0qgdap8gqkk3i"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--enable-gtk-doc")))
+                "12v3nj1bb7507ndprjggq0hpz8k719b4bwvl8sm43p3ibmn27anm"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("glib:bin" ,glib "bin")         ; for glib-mkenums
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           `(,glib "bin") ; for glib-mkenums
+           gtk-doc/stable pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (home-page "https://wiki.gnome.org/Projects/Amtk")
     (synopsis "Actions, Menus and Toolbars Kit for GTK+ applications")
     (description
@@ -5657,26 +5739,33 @@ both a traditional UI or a modern UI with a GtkHeaderBar.")
 (define-public devhelp
   (package
     (name "devhelp")
-    (version "3.34.0")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0zpmn6fgkgiayvn4diia5df0s6s7dqrdnp3nrvpavsmgn0vhb4pg"))))
+                "1lk0gycjvs6gibhy0zs3ffkrkzrkyl5nkp7n60hgpa6syjq91apc"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
-             (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+             (substitute* "build-aux/meson/meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))))
+         (add-after 'unpack 'fix-devhelp-gir-inputs
+           ;; It still mentions webkitgtk 4.0
+           (lambda _
+             (substitute* "devhelp/meson.build"
+               (("'WebKit2-4.0'") "'WebKit2-4.1'")))))))
+    (propagated-inputs
+     (list gsettings-desktop-schemas))
     (native-inputs
      `(("intltool" ,intltool)
        ("itstool" ,itstool)
@@ -5684,9 +5773,7 @@ both a traditional UI or a modern UI with a GtkHeaderBar.")
        ("glib:bin" ,glib "bin") ; for glib-mkmenus
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("amtk" ,amtk)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)))
+     (list amtk gsettings-desktop-schemas webkitgtk))
     (home-page "https://wiki.gnome.org/Apps/Devhelp")
     (synopsis "API documentation browser for GNOME")
     (description
@@ -5695,6 +5782,22 @@ natively with GTK-Doc (the API reference system developed for GTK+ and used
 throughout GNOME for API documentation).")
     (license license:gpl2+)))
 
+(define-public devhelp-with-libsoup2
+  (package/inherit devhelp
+    (arguments
+     (substitute-keyword-arguments (package-arguments devhelp)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases %standard-phases
+           (add-after 'unpack 'skip-gtk-update-icon-cache
+             ;; Don't create 'icon-theme.cache'.
+             (lambda _
+               (substitute* "build-aux/meson/meson_post_install.py"
+                 (("gtk-update-icon-cache") "true"))))))))
+    (inputs
+     `(("amtk" ,amtk)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))))
+
 (define-public cogl
   (package
     (name "cogl")
@@ -5716,21 +5819,21 @@ throughout GNOME for API documentation).")
        ("xorg-server" ,xorg-server-for-tests)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxdamage" ,libxdamage)
-       ("libxcomposite" ,libxcomposite)
-       ("libxrandr" ,libxrandr)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("wayland" ,wayland)))
+     (list glib
+           gdk-pixbuf
+           libx11
+           libxext
+           libxfixes
+           libxdamage
+           libxcomposite
+           libxrandr))
+    (inputs
+     (list mesa
+           cairo
+           pango
+           gstreamer
+           gst-plugins-base
+           wayland))
     (arguments
      `(#:disallowed-references (,xorg-server-for-tests)
        #:configure-flags (list "--enable-cogl-gst"
@@ -5802,16 +5905,16 @@ without stepping on each others toes.")
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("cogl" ,cogl)
-       ("cairo" ,cairo)
-       ("atk" ,atk)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("glib" ,glib)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("xinput" ,xinput)))
+     (list cogl
+           cairo
+           atk
+           gtk+
+           json-glib
+           glib
+           libxcomposite
+           libxdamage
+           libxext
+           xinput))
     (inputs
      `(("libxkbcommon" ,libxkbcommon)
        ("udev" ,eudev)))
@@ -5848,12 +5951,10 @@ presentations, kiosk style applications and so on.")
          "01ibniy4ich0fgpam53q252idm7f4fn5xg5qvizcfww90gn9652j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config gobject-introspection))
     (propagated-inputs
      ;; clutter-gtk.pc refers to all these.
-     `(("clutter" ,clutter)
-       ("gtk+" ,gtk+)))
+     (list clutter gtk+))
     (home-page "http://www.clutter-project.org")
     (synopsis "OpenGL-based interactive canvas library GTK+ widget")
     (description
@@ -5876,13 +5977,10 @@ presentations, kiosk style applications and so on.")
         (base32 "17czmpl92dzi4h3rn5rishk015yi3jwiw29zv8qan94xcmnbssgy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")         ; for glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list `(,glib "bin") ; for glib-mkenums
+           pkg-config gobject-introspection))
     (inputs
-     `(("clutter" ,clutter)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list clutter gstreamer gst-plugins-base))
     (home-page "http://www.clutter-project.org")
     (synopsis "Integration library for using GStreamer with Clutter")
     (description
@@ -5895,7 +5993,7 @@ OpenGL-based interactive canvas library.")
 (define-public libchamplain
   (package
     (name "libchamplain")
-    (version "0.12.16")
+    (version "0.12.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5903,22 +6001,19 @@ OpenGL-based interactive canvas library.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "13chvc2n074i0jw5jlb8i7cysda4yqx58ca6y3mrlrl9g37k2zja"))))
-    (build-system gnu-build-system)
-    (arguments '(#:configure-flags '("--enable-vala")))
+                "0rihpb0npqpihqcdz4w03rq6xl7jdckfqskvv9diq2hkrnzv8ch2"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gobject-introspection pkg-config vala))
     (propagated-inputs
-     `(("libsoup" ,libsoup)
-       ("sqlite" ,sqlite)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("glib:bin" ,glib "bin")                   ;glib-mkenums, etc.
-       ("cairo" ,cairo)
-       ("gtk+3" ,gtk+)
-       ("glib" ,glib)))
+     (list libsoup-minimal-2
+           sqlite
+           clutter
+           clutter-gtk
+           `(,glib "bin") ;glib-mkenums, etc.
+           cairo
+           gtk+
+           glib))
     (home-page "https://projects.gnome.org/libchamplain/")
     (synopsis "C library providing a ClutterActor to display maps")
     (description
@@ -5943,13 +6038,9 @@ such as OpenStreetMap, OpenCycleMap, OpenAerialMap, and Maps for free.")
          "1zaqqwwkyiswib3v1v8wafpbifpbpak0nn2kp13pizzn9bwz1s5w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list intltool pkg-config gobject-introspection))
     (inputs
-     `(("glib" ,glib)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("sqlite" ,sqlite)))
+     (list glib gdk-pixbuf sqlite))
     ;; XXX TODO: Figure out how to run the test suite.
     (arguments `(#:tests? #f))
     (home-page "https://wiki.gnome.org/Projects/Gom")
@@ -5983,13 +6074,10 @@ queries upon that data.")
                 (setenv "HOME" (getcwd))
                 #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list intltool pkg-config vala))
     (propagated-inputs
      ;; Required by libgnome-games-support-1.0.pc
-     `(("gtk+" ,gtk+)
-       ("libgee" ,libgee)))
+     (list gtk+ libgee))
     (home-page "https://www.gnome.org/")
     (synopsis "Useful functionality shared among GNOME games")
     (description
@@ -6029,9 +6117,7 @@ GNOME Games, but it may be used by others.")
        ("vala" ,vala)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgnome-games-support" ,libgnome-games-support)
-       ("librsvg" ,librsvg)))
+     (list gtk+ libgnome-games-support librsvg))
     (home-page "https://wiki.gnome.org/Apps/Klotski")
     (synopsis "Sliding block puzzles")
     (description
@@ -6044,7 +6130,7 @@ as possible!")
 (define-public grilo
   (package
     (name "grilo")
-    (version "0.3.12")
+    (version "0.3.13")
     (source
      (origin
        (method url-fetch)
@@ -6052,23 +6138,23 @@ as possible!")
                            (version-major+minor version) "/"
                            "grilo-" version ".tar.xz"))
        (sha256
-        (base32 "0w8sq5g6g1rg85h53vbll8va70fcp6082mlpmy98aa03444ddyyv"))))
+        (base32 "0ywjvh7xw4ql1q4fvl0q5n06n08pga1g1nc9l7c3x5214gr3fj6i"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")         ; for glib-mkenums and glib-genmarshal
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("vala" ,vala)))
-    (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("liboauth" ,liboauth)
-       ("libsoup" ,libsoup)
-       ("totem-pl-parser" ,totem-pl-parser)))
+     (list `(,glib "bin") ; for glib-mkenums and glib-genmarshal
+           intltool
+           pkg-config
+           gobject-introspection
+           gtk-doc/stable
+           vala))
+    (inputs
+     (list cyrus-sasl
+           glib
+           gtk+
+           libxml2
+           liboauth
+           libsoup-minimal-2
+           totem-pl-parser))
     (native-search-paths
      (list (search-path-specification
             (variable "GRL_PLUGIN_PATH")
@@ -6084,7 +6170,7 @@ for application developers.")
 (define-public grilo-plugins
   (package
     (name "grilo-plugins")
-    (version "0.3.11")
+    (version "0.3.13")
     (source
      (origin
        (method url-fetch)
@@ -6092,7 +6178,7 @@ for application developers.")
                            (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
-        (base32 "0wyd3n5mn7b77hxylkc3f62v01mlavh96901pz342hwrn42ydqnx"))))
+        (base32 "1y10nnd711qxwgpz6spzp1rnk50fyf11kk1n71a31ab4fgb0ahqw"))))
     (build-system meson-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -6115,12 +6201,24 @@ for application developers.")
        ("libmediaart" ,libmediaart)
        ;("librest" ,rest) ; unused
        ("libsoup" ,libsoup)
+       ("python-pygobject" ,python-pygobject)
        ("totam-pl-parser" ,totem-pl-parser)
-       ("tracker" ,tracker))) ; unused because it's too old
+       ("tracker" ,tracker)
+       ("tracker-miners" ,tracker-miners)))
     (arguments
      `(#:glib-or-gtk? #t
        ;;Disable lua-factory as it needs missing dependencies
-       #:configure-flags '("-Denable-lua-factory=no")))
+       #:configure-flags '("-Denable-lua-factory=no")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-shell
+           (lambda _
+             (setenv "SHELL" (which "bash"))))
+         ;; Disable the tracker test that requires the UPower daemon.
+         (add-before 'configure 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "tests/tracker3/meson.build"
+               (("'test_tracker3'.*") "")))))))
     (home-page "https://live.gnome.org/Grilo")
     (synopsis "Plugins for the Grilo media discovery library")
     (description
@@ -6152,39 +6250,40 @@ discovery protocols.")
        ("xmllint" ,libxml2)
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("atk" ,atk)
-       ("cairo" ,cairo)
-       ("dbus-glib" ,dbus-glib)
-       ("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("clutter-gst" ,clutter-gst)
-       ("xorgproto" ,xorgproto)
-       ("libxxf86vm" ,libxxf86vm)
-       ("libxtst" ,libxtst)
-       ("libxrandr" ,libxrandr)
-       ("libxml2" ,libxml2)
-       ("libsoup" ,libsoup)
-       ("libpeas" ,libpeas)
-       ("librsvg" ,librsvg)
-       ("lirc" ,lirc)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("totem-pl-parser" ,totem-pl-parser)
-       ("grilo" ,grilo)
-       ("grilo-plugins" ,grilo-plugins)
-       ("vala" ,vala)))
-    (arguments
-     `(#:glib-or-gtk? #t
+     (list dconf))
+    (inputs
+     (list gtk+
+           gdk-pixbuf
+           atk
+           cairo
+           dbus-glib
+           clutter
+           clutter-gtk
+           clutter-gst
+           xorgproto
+           libxxf86vm
+           libxtst
+           libxrandr
+           libxml2
+           libsoup
+           libpeas
+           librsvg
+           lirc
+           gnome-desktop
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gsettings-desktop-schemas
+           adwaita-icon-theme
+           python
+           python-pygobject
+           totem-pl-parser
+           grilo
+           grilo-plugins
+           vala))
+    (arguments
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
 
        ;; Disable automatic GStreamer plugin installation via PackageKit and
        ;; all that.
@@ -6264,15 +6363,15 @@ which can read a large number of file formats.")
                  (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                  (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
                  (grl-plugin-path   (getenv "GRL_PLUGIN_PATH"))
-                 (python-path       (getenv "PYTHONPATH")))
+                 (python-path       (getenv "GUIX_PYTHONPATH")))
              (wrap-program (string-append out "/bin/rhythmbox")
                `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
                `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                `("GRL_PLUGIN_PATH"        ":" prefix (,grl-plugin-path))
-               `("PYTHONPATH"             ":" prefix (,python-path))))
+               `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
            #t)))))
    (propagated-inputs
-    `(("dconf" ,dconf)))
+    (list dconf))
    (native-inputs
     `(("itstool" ,itstool)
       ("intltool" ,intltool)
@@ -6286,7 +6385,7 @@ which can read a large number of file formats.")
       ("tdb" ,tdb)
       ("gnome-desktop" ,gnome-desktop)
       ("python" ,python)
-      ("python-pygobject" ,python2-pygobject)
+      ("python-pygobject" ,python-pygobject)
       ("vala" ,vala)
       ("gmime" ,gmime)
       ("adwaita-icon-theme" ,adwaita-icon-theme)
@@ -6302,6 +6401,7 @@ which can read a large number of file formats.")
       ("libsoup" ,libsoup)
       ("libnotify" ,libnotify)
       ("libpeas" ,libpeas)
+      ("libsoup" ,libsoup-minimal-2)
       ("lirc" ,lirc)
       ;; TODO: clutter* only used by visualizer plugin, which also requires mx
       ;;("clutter" ,clutter)
@@ -6324,18 +6424,19 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
 (define-public eog
  (package
    (name "eog")
-   (version "3.34.1")
+   (version "40.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version) "/"
+                                (version-major version) "/"
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0b7ld4azs9xbdjsk9b91ywhdzvxgajhndiwiivxjzbr0hjgp7c7x"))))
+              "0ddjwcd77nw0rxb5x5bz5hd671m8gya9827p8rsnb58x103kpai8"))))
    (build-system meson-build-system)
    (arguments
-    `(#:configure-flags
+    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+      #:configure-flags
       ;; Otherwise, the RUNPATH will lack the final 'eog' path component.
       (list (string-append "-Dc_link_args=-Wl,-rpath="
                            (assoc-ref %outputs "out") "/lib/eog"))
@@ -6345,17 +6446,15 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
         (add-after 'install 'wrap-eog
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out               (assoc-ref outputs "out"))
                   (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
               (wrap-program (string-append out "/bin/eog")
-                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-            #t)))))
+                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
    (propagated-inputs
-    `(("dconf" ,dconf)))
+    (list dconf))
    (native-inputs
     `(("intltool" ,intltool)
       ("itstool" ,itstool)
@@ -6371,8 +6470,9 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
       ("lcms" ,lcms)
       ("libexif" ,libexif)
       ("libpeas" ,libpeas)
+      ("libportal" ,libportal)
       ("libjpeg" ,libjpeg-turbo)
-      ("librsvg" ,librsvg-next)
+      ("librsvg" ,librsvg)
       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
       ("gtk+" ,gtk+)))
    (home-page "https://wiki.gnome.org/Apps/EyeOfGnome")
@@ -6388,7 +6488,7 @@ supports image conversion, rotation, and slideshows.")
   ;; 'XDG_DATA_DIRS' appropriately set.
   (package
     (name "eog-plugins")
-    (version "3.26.4")
+    (version "3.26.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/eog-plugins/"
@@ -6396,20 +6496,19 @@ supports image conversion, rotation, and slideshows.")
                                   "eog-plugins-" version ".tar.xz"))
               (sha256
                (base32
-                "0pd7fqa4ciy5844k5s1c6rlsqkk8pxd8cchxjcjhxlsngm9lynnx"))))
+                "0gbvl54hjawcrj2cbkvsw5jx11p6jv1xkc58c8ikwwpb56gc3ric"))))
     (build-system gnu-build-system)
     (home-page "https://wiki.gnome.org/Apps/EyeOfGnome/Plugins")
     (synopsis "Extensions for the Eye of GNOME image viewer")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)))
+     (list pkg-config gettext-minimal))
     (inputs
-     `(("eog" ,eog)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libpeas" ,libpeas)
-       ("libexif" ,libexif)
-       ("libchamplain" ,libchamplain)))
+     (list eog
+           glib
+           gtk+
+           libpeas
+           libexif
+           libchamplain))
     (description
      "This package provides plugins for the Eye of GNOME (EOG) image viewer,
 notably:
@@ -6443,8 +6542,8 @@ side panel;
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)                   ; in Requires of gudev-1.0.pc
-       ("eudev" ,eudev)))               ; in Requires.private of gudev-1.0.pc
+     (list glib ; in Requires of gudev-1.0.pc
+           eudev))               ; in Requires.private of gudev-1.0.pc
     (inputs
      `(("udev" ,eudev)))
     (home-page "https://wiki.gnome.org/Projects/libgudev")
@@ -6457,7 +6556,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
 (define-public gvfs
   (package
     (name "gvfs")
-    (version "1.40.2")
+    (version "1.48.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gvfs/"
@@ -6465,13 +6564,11 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
                                   "gvfs-" version ".tar.xz"))
               (sha256
                (base32
-                "07lpcfric3h0302n9b1pwa38mjb76r9s98kg2867y2d1qvzfivxx"))
-              ;; This patch may be removed when upgrading to version 1.46.x.
-              (patches
-               (search-patches "gvfs-add-support-for-libplist-2.2.patch"))))
+                "1hlxl6368h6nyqp1888szxs9hnpcw98k3h23dgqi29xd38klzsmj"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:configure-flags
        (list "-Dsystemduserunitdir=no"
              "-Dtmpfilesdir=no"
@@ -6479,7 +6576,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
              (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib/gvfs"))))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
+     `(("glib:bin" ,glib "bin")         ;for glib-genmarshal, etc.
        ("gettext" ,gettext-minimal)
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
@@ -6490,10 +6587,11 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
        ("docbook-xsl" ,docbook-xsl)
        ("dbus" ,dbus)
        ("elogind" ,elogind)
-       ("fuse" ,fuse)
+       ("fuse" ,fuse-3)
        ("gcr" ,gcr)
        ("glib" ,glib)
        ("gnome-online-accounts" ,gnome-online-accounts)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("libarchive" ,libarchive)
        ("libbluray" ,libbluray)
        ("libcap" ,libcap)
@@ -6512,47 +6610,47 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
        ("openssh" ,openssh)
        ("polkit" ,polkit)
        ("udisks" ,udisks)))
-    ;; CVE-2019-{12447,12448,12449} are fixed in the 1.40.2 release.
-    (properties '((lint-hidden-cve . ("CVE-2019-12447"
-                                      "CVE-2019-12448"
-                                      "CVE-2019-12449"))))
     (home-page "https://wiki.gnome.org/gvfs/")
     (synopsis "Userspace virtual file system for GIO")
     (description
      "GVFS is a userspace virtual file system designed to work with the I/O
-abstraction of GIO.  It contains a GIO module that seamlessly adds GVFS support
-to all applications using the GIO API.  It also supports exposing the GVFS
-mounts to non-GIO applications using FUSE.
+abstraction of GIO.  It contains a GIO module that seamlessly adds GVFS
+support to all applications using the GIO API.  It also supports exposing the
+GVFS mounts to non-GIO applications using FUSE.
 
 GVFS comes with a set of backends, including trash support, SFTP, SMB, HTTP,
 DAV, and others.")
     (license license:lgpl2.0+)))
 
-(define-public gusb
+(define-public gusb-minimal
   (package
-    (name "gusb")
+    (name "gusb-minimal")
     (version "0.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/hughsie/libgusb")
-                     (commit version)))
+                    (url "https://github.com/hughsie/libgusb")
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
                 "0ifhdqhpyxwsg0z9s1anj7cf5pya5qsqyp5ksh9n7mqwa4lrjkl8"))))
     (build-system meson-build-system)
-    (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("gtk-doc" ,gtk-doc/stable)))
+    (arguments
+     `(#:tests? #f          ;libusb fails to initialize.  Wonder what that is.
+       #:configure-flags
+       (cons "-Ddocs=false"
+             (if ,(%current-target-system)
+                 ;; Introspection data cannot currently be cross-compiled.
+                 '("-Dintrospection=false"
+                   ;; Requires introspection data.
+                   "-Dvapi=false")
+                 '()))))
+    (native-inputs
+     (list gobject-introspection pkg-config vala))
     (propagated-inputs
      ;; Both of these are required by gusb.pc.
-     `(("glib" ,glib)
-       ("libusb" ,libusb)))
-    (arguments
-     `(#:tests? #f)) ;libusb fails to initialize.  Wonder what that is.
+     (list glib libusb))
     (home-page "https://github.com/hughsie/libgusb")
     (synopsis "GLib binding for libusb1")
     (description
@@ -6562,22 +6660,35 @@ and integration into a mainloop.  This makes it easy to integrate low level
 USB transfers with your high-level application or system daemon.")
     (license license:lgpl2.1+)))
 
+(define-public gusb
+  (package/inherit gusb-minimal
+    (name "gusb")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gusb-minimal)
+       ((#:configure-flags flags)
+        `(cons "-Ddocs=true"
+               (delete "-Ddocs=false" ,flags)))))
+    (native-inputs
+     (cons `("gtk-doc" ,gtk-doc/stable)
+           (package-native-inputs gusb-minimal)))))
+
 (define-public simple-scan
   (package
     (name "simple-scan")
-    (version "3.38.2")
+    (version "40.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/simple-scan/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            "simple-scan-" version ".tar.xz"))
        (sha256
-        (base32 "02sdkhxgr6i7iy481h4xavgaqd0a5dlsipzwrm4qd242jrr813d8"))))
+        (base32 "195rh8zj5n497gj42rd77mvkdl15hk0i08ll5h4hb9kcrgj7jlzb"))))
     (build-system meson-build-system)
     ;; TODO: Fix icons in home screen, About dialogue, and scan menu.
     (arguments
-     '(#:glib-or-gtk? #t))
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t))
     (inputs
      `(("gtk" ,gtk+)
        ("zlib" ,zlib)
@@ -6585,6 +6696,7 @@ USB transfers with your high-level application or system daemon.")
        ("colord" ,colord)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gusb" ,gusb)
+       ("libhandy" ,libhandy)
        ("libsane" ,sane-backends)))
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -6638,7 +6750,7 @@ almost all of them.")
                            ":")))
                (wrap-program (string-append out "/bin/eolie")
                  `("LD_LIBRARY_PATH" ":" prefix (,path))
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
              #t)))))
     (native-inputs
@@ -6675,48 +6787,46 @@ a secret password store, an adblocker, and a modern UI.")
 (define-public epiphany
   (package
     (name "epiphany")
-    (version "3.34.4")
+    (version "40.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/epiphany/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   "epiphany-" version ".tar.xz"))
               (sha256
                (base32
-                "13ar3s40cds1rplwbzx0fzigf120w0rydiv05r3k6zpc0zy91qb0"))))
+                "0r7m34xzz3shdfxf2abxb069izak3yv3ijlg29qy4pfmyawkilfs"))))
 
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "post_install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'unpack 'disable-failing-tests
            (lambda _
              (substitute* "tests/meson.build"
-               ;; embed_shell fails, because webkitgtk apparently no longer supports
-               ;; overriding the ftp schema
-               ;; web_app_utils fails due to missing network access
+               ;; embed_shell fails, because webkitgtk apparently no longer
+               ;; supports overriding the ftp schema web_app_utils fails due
+               ;; to missing network access.
                (("(embed_shell|web_app_utils)_test,")
-                "find_program('sh'), args: ['-c', 'exit 77'],"))
-             #t))
+                "find_program('sh'), args: ['-c', 'exit 77'],"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
-             (setenv "DISPLAY" ":1")
-             #t)))
+             (setenv "DISPLAY" ":1"))))
        #:configure-flags
        ;; Otherwise, the RUNPATH will lack the final 'epiphany' path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib/epiphany"))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("glib:bin" ,glib "bin") ; for glib-mkenums
@@ -6728,19 +6838,22 @@ a secret password store, an adblocker, and a modern UI.")
     (inputs
      `(("avahi" ,avahi)
        ("gcr" ,gcr)
-       ("gdk-pixbuf+svg" ,gdk-pixbuf+svg) ; for loading SVG files
+       ("librsvg" ,librsvg) ; for loading SVG files
        ("glib-networking" ,glib-networking)
        ("gnome-desktop" ,gnome-desktop)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("json-glib" ,json-glib)
        ("iso-codes" ,iso-codes)
+       ("libarchive" ,libarchive)
        ("libdazzle" ,libdazzle)
+       ("libhandy" ,libhandy)
        ("libnotify" ,libnotify)
+       ("libportal" ,libportal)
        ("libsecret" ,libsecret)
        ("libxslt" ,libxslt)
        ("nettle" ,nettle) ; for hogweed
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (home-page "https://wiki.gnome.org/Apps/Web")
     (synopsis "GNOME web browser")
     (description
@@ -6784,7 +6897,7 @@ principles are simplicity and standards compliance.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/d-feet")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (native-inputs
@@ -6810,21 +6923,28 @@ of running programs and invoke methods on those interfaces.")
 (define-public yelp-xsl
   (package
     (name "yelp-xsl")
-    (version "3.34.2")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://gnome/sources/" name "/"
-                       (version-major+minor version) "/"
+                       (version-major version) "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "1bdpgkzawhqmw52l6zx8czzg1ndfgcf1p44m2bxjdpqkc4afcgqc"))))
+        (base32 "19d46rkajvr0f04560vlrzwvac88x5j8ilvzwkawbn5vjg069kf8"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        "--enable-doc")))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
+     `(("ducktype" ,mallard-ducktype)
+       ("gettext" ,gettext-minimal)
+       ("intltool" ,intltool)
        ("itstool" ,itstool)
-       ("xmllint" ,libxml2)))
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
     (synopsis "XSL stylesheets for Yelp")
     (description "Yelp-XSL is a collection of programs and data files to help
 you build, maintain, and distribute documentation.  It provides XSLT stylesheets
@@ -6845,29 +6965,23 @@ jQuery.Syntax JavaScript libraries.")
 (define-public yelp
   (package
     (name "yelp")
-    (version "3.32.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0yrl96icmmrxvg7sxl519gzg9qb368cmzgrr9ddh181ignkxzx7f"))))
+                "11shrqass8ak8m10nayqssa6sbrrxa13ffpamvqi1c0yzkxdk9r5"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           intltool itstool pkg-config))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libxslt" ,libxslt)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)
-       ("yelp-xsl" ,yelp-xsl)))
+     (list gsettings-desktop-schemas libxslt sqlite webkitgtk yelp-xsl))
     (home-page "https://wiki.gnome.org/Apps/Yelp")
     (synopsis "GNOME help browser")
     (description
@@ -6891,9 +7005,9 @@ freedesktop.org help system specification.")
         (base32 "1yg8f5g5wadhmy4yfd9yjhvd8vll4gq4l86ibp0b42qbxnsmcf0q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("yelp-xsl" ,yelp-xsl)))
+     (list yelp-xsl))
     (propagated-inputs
      ;; Needed by `yelp-build', `yelp-check' or 'yelp.m4'.
      `(("itstool" ,itstool)
@@ -6933,11 +7047,9 @@ wraps things up in a developer-friendly way.")
                 (("@INTROSPECTION_TYPELIBDIR@")
                  (string-append out "/lib/girepository-1.0/")))))))))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib gobject-introspection))
     (home-page "https://wiki.gnome.org/Projects/Libgee")
     (synopsis "GObject collection library")
     (description
@@ -6959,16 +7071,13 @@ classes for commonly used data structures.")
                 "0k4ljzzz5dwqndw8awvlw3ala8rh3b2rk9i4jzvywc53mi9ba8i3"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gcr" ,gcr)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list gcr
+           `(,glib "bin") pkg-config vala))
     (propagated-inputs
      ;; Listed in "Requires" section of gexiv2.pc
-     `(("exiv2" ,exiv2)))
+     (list exiv2))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib gobject-introspection))
     (home-page "https://wiki.gnome.org/Projects/gexiv2")
     (synopsis "GObject wrapper around the Exiv2 photo metadata library")
     (description
@@ -7001,7 +7110,7 @@ metadata in photo and video files of various formats.")
                (("update-desktop-database") (which "true")))
              #t)))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -7019,10 +7128,9 @@ metadata in photo and video files of various formats.")
        ("libgphoto2" ,libgphoto2)
        ("libgudev" ,libgudev)
        ("libraw" ,libraw)
-       ("libsoup" ,libsoup)
        ("libxml2" ,libxml2)
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (home-page "https://wiki.gnome.org/Apps/Shotwell")
     (synopsis "Photo manager for GNOME 3")
     (description
@@ -7035,7 +7143,7 @@ share them with others via social networking and more.")
 (define-public file-roller
   (package
     (name "file-roller")
-    (version "3.38.0")
+    (version "3.40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/file-roller/"
@@ -7043,24 +7151,24 @@ share them with others via social networking and more.")
                                   "file-roller-" version ".tar.xz"))
               (sha256
                (base32
-                "06ikvjjcgb8nxabkn2rywy76a1c7s6w8dszaxvaxldbxarp1qgbj"))))
+                "039w1dcpa5ypmv6sm634alk9vbcdkyvy595vkh5gn032jsiqca2a"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
-       ("glib:bin" ,glib "bin")))
+     (list desktop-file-utils ; for update-desktop-database
+           intltool
+           itstool
+           pkg-config
+           `(,gtk+ "bin") ; gtk-update-icon-cache
+           `(,glib "bin")))
     ;; TODO: Add libnautilus.
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("json-glib" ,json-glib)
-       ("libarchive" ,libarchive)
-       ("libnotify" ,libnotify)
-       ("nettle" ,nettle)
-       ("libxml2" ,libxml2)))
+     (list gtk+
+           gdk-pixbuf
+           json-glib
+           libarchive
+           libnotify
+           nettle
+           libxml2))
     (synopsis "Graphical archive manager for GNOME")
     (description "File Roller is an archive manager for the GNOME desktop
 environment that allows users to view, unpack, and create compressed archives
@@ -7071,44 +7179,35 @@ such as gzip tarballs.")
 (define-public gnome-session
   (package
     (name "gnome-session")
-    (version "3.34.2")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
+              (patches (search-patches "gnome-session-support-elogind.patch"))
               (sha256
                (base32
-                "1qgqp97f8k2zi2ydvhds14zsjzfj7cv521r6wx5sw0qacn0p7dwb"))))
+                "02z0xr6sv9ibl7awbw9j4y05hf4jk1zgvsbbmh7n27hhjvsvc8pl"))))
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Use elogind instead of systemd.
-             (substitute* "meson.build"
-               (("libsystemd-login") "libelogind")
-               (("and libsystemd_daemon_dep.found.*") ","))
-             (substitute* "gnome-session/gsm-systemd.c"
-               (("#include <systemd/sd-login.h>")
-                "#include <elogind/sd-login.h>"))
-             ;; Remove uses of the systemd daemon.
-             (substitute* "gnome-session/gsm-autostart-app.c"
-               (("#ifdef HAVE_SYSTEMD") "#if 0"))
-             #t))
          (add-after 'install 'wrap-gnome-session
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'gnome-session' finds the 'gsettings' program.
              (let ((glib (assoc-ref inputs "glib:bin"))
                    (out  (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/gnome-session")
-                 `("PATH" ":" prefix (,(string-append glib "/bin"))))
-               #t))))
+                 `("PATH" ":" prefix (,(string-append glib "/bin"))))))))
 
        #:configure-flags
        '("-Ddocbook=false" ; FIXME: disabled because of docbook validation error
          "-Dman=false" ; FIXME: disabled because of docbook validation error
+         "-Delogind=true"
+         "-Dsystemd=false"
+         "-Dsystemd_session=disable"
          "-Dsystemd_journal=false")))
     (build-system meson-build-system)
     (native-inputs
@@ -7121,17 +7220,17 @@ such as gzip tarballs.")
        ("docbook-xml" ,docbook-xml)
        ("xmlto" ,xmlto)))
     (inputs
-     `(("elogind" ,elogind)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libsm" ,libsm)
-       ("libxcomposite" ,libxcomposite)
-       ("libxtst" ,libxtst)
-       ("mesa" ,mesa)
-       ("upower" ,upower)
-       ("xtrans" ,xtrans)))
+     (list elogind
+           gnome-desktop
+           gsettings-desktop-schemas
+           gtk+
+           json-glib
+           libsm
+           libxcomposite
+           libxtst
+           mesa
+           upower
+           xtrans))
     (synopsis "Session manager for GNOME")
     (description
      "This package contains the GNOME session manager, as well as a
@@ -7142,7 +7241,7 @@ configuration program to choose applications starting on login.")
 (define-public gjs
   (package
     (name "gjs")
-    (version "1.58.3")
+    (version "1.70.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -7150,30 +7249,26 @@ configuration program to choose applications starting on login.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1bkksx362007zs8c31ydygb29spwa5g5kch1ad2grc2sp53wv7ya"))))
-    (build-system gnu-build-system)
+                "0pqwhq0znprs0h5ixz396912acwzk9zvjfhi9qvh52ii38s2j1jb"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* "installed-tests/scripts/testCommandLine.sh"
+                    (("Valentín") "")
+                    (("☭") ""))))))
+    (build-system meson-build-system)
     (arguments
-     '(#:phases
+     '(#:configure-flags '("-Dinstalled_tests=false")
+       #:phases
        (modify-phases %standard-phases
-         (add-before
-          'check 'pre-check
-          (lambda _
-            ;; The test suite requires a running X server.
-            (system "Xvfb :1 &")
-            (setenv "DISPLAY" ":1")
-
-            ;; For the missing /etc/machine-id.
-            (setenv "DBUS_FATAL_WARNINGS" "0")
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; The test suite requires a running X server.
+             (system "Xvfb :1 &")
+             (setenv "DISPLAY" ":1")
 
-            ;; Our mozjs-38 package does not compile the required Intl API
-            ;; support for these failing tests.
-            (substitute* "installed-tests/js/testLocale.js"
-              ((".*toBeDefined.*") "")
-              ((".*expect\\(datestr\\).*") ""))
-            (substitute* "installed-tests/scripts/testCommandLine.sh"
-              (("Valentín") "")
-              (("☭") ""))
-            #t)))))
+             ;; For the missing /etc/machine-id.
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")       ; for glib-compile-resources
        ("pkg-config" ,pkg-config)
@@ -7185,12 +7280,9 @@ configuration program to choose applications starting on login.")
        ("xvfb" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; These are all in the Requires.private field of gjs-1.0.pc.
-     `(("cairo" ,cairo)
-       ("gobject-introspection" ,gobject-introspection)
-       ("mozjs" ,mozjs-60)))
+     (list cairo gobject-introspection mozjs-78))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("readline" ,readline)))
+     (list gtk+ readline))
     (synopsis "Javascript bindings for GNOME")
     (home-page "https://live.gnome.org/Gjs")
     (description
@@ -7201,18 +7293,19 @@ javascript engine and the GObject introspection framework.")
 (define-public gedit
   (package
     (name "gedit")
-    (version "3.34.1")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1inm50sdfw63by1lf4f1swb59mpyxlly0g5rdg99j5l3357fzygb"))))
+                "149ngl9qw6h59546lir1pa7hvw23ppsnqlj9mfqphmmn5jl99qsm"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:configure-flags
        ;; Otherwise, the RUNPATH will lack the final path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -7243,17 +7336,17 @@ javascript engine and the GObject introspection framework.")
              (let ((out               (assoc-ref outputs "out"))
                    (gtksourceview     (assoc-ref inputs "gtksourceview"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/gedit")
                  ;; For plugins.
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))
                  ;; For language-specs.
                  `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
                                                                "/share")))))
              #t)))))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("intltool" ,intltool)
@@ -7271,21 +7364,23 @@ javascript engine and the GObject introspection framework.")
             (base32 "16yld0ap7qj1n96h4f2sqkjmibg7xx5xwkqxdfzam2nmyfdlrrrs"))))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("iso-codes" ,iso-codes)
-       ("python-pygobject" ,python-pygobject)
-       ("python" ,python)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libx11" ,libx11)
-       ("vala" ,vala)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("libsoup" ,libsoup)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list amtk
+           glib
+           gspell
+           gtk+
+           gtksourceview
+           libpeas
+           libxml2
+           iso-codes
+           python-pygobject
+           python
+           tepl
+           gsettings-desktop-schemas
+           libx11
+           vala
+           adwaita-icon-theme
+           libsoup
+           gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/Gedit")
     (synopsis "GNOME text editor")
     (description "While aiming at simplicity and ease of use, gedit is a
@@ -7306,12 +7401,9 @@ powerful general purpose text editor.")
                 "15fdh8xfdhnwcynyh4byx3mrjxbyprqnwxzi7qn3g5wwaqryg1p7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal itstool pkg-config))
     (inputs
-     `(("libnotify" ,libnotify)
-       ("webkitgtk" ,webkitgtk)))
+     (list libnotify webkitgtk))
     (synopsis "Display graphical dialog boxes from shell scripts")
     (home-page "https://www.gnome.org")
     (description
@@ -7322,69 +7414,143 @@ to display dialog boxes from the commandline and shell scripts.")
 (define-public mutter
   (package
     (name "mutter")
-    (version "3.34.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0b8bz5kvs7rlwvqsg87cf6jhrrj95vgd1l235mjx8rip35ipfvrd"))))
+                "17pqrm48kddqrc3fl96n5knhaxyn0crg0zv7zpmqhk848jks307s"))))
     ;; NOTE: Since version 3.21.x, mutter now bundles and exports forked
     ;; versions of cogl and clutter.  As a result, many of the inputs,
     ;; propagated-inputs, and configure flags used in cogl and clutter are
     ;; needed here as well.
     (build-system meson-build-system)
     (arguments
-     '(;; XXX: All mutter tests fail with the following error:
-       ;;   Settings schema 'org.gnome.mutter' is not installed
-       #:tests? #f
+     `(#:imported-modules (,@%meson-build-system-modules
+                           (guix build syscalls))
+       #:modules ((guix build meson-build-system)
+                  (guix build syscalls)
+                  (guix build utils)
+                  (ice-9 match))
        #:glib-or-gtk? #t
        #:configure-flags
-       ;; TODO: Enable profiler when Sysprof is packaged.
-       (list "-Dprofiler=false"
-             ;; Otherwise, the RUNPATH will lack the final path component.
-             (string-append "-Dc_link_args=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib:"
-                            (assoc-ref %outputs "out") "/lib/mutter-5")
-
-             ;; The following flags are needed for the bundled clutter
-             (string-append "-Dxwayland_path="
-                            (assoc-ref %build-inputs "xorg-server-xwayland")
-                            "/bin/Xwayland")
-
-             ;; the remaining flags are needed for the bundled cogl
-             (string-append "-Dopengl_libname="
-                            (assoc-ref %build-inputs "mesa")
-                            "/lib/libGL.so"))
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'fix-build-with-mesa-20
-                    (lambda _
-                      ;; Mimic upstream commit a444a4c5f58ea516ad for
-                      ;; compatibility with Mesa 20.  Remove for 3.36.
-                      (substitute* '("src/backends/meta-egl-ext.h"
-                                     "src/backends/meta-egl.c"
-                                     "src/backends/meta-egl.h")
-                        (("#include <EGL/eglext\\.h>" all)
-                         (string-append all "\n#include <EGL/eglmesaext.h>")))
-                      (substitute* "cogl/cogl/meson.build"
-                        (("#include <EGL/eglext\\.h>" all)
-                         (string-append all "\\n#include <EGL/eglmesaext.h>")))
-                      #t)))))
+       (list
+        ;; Otherwise, the RUNPATH will lack the final path component.
+        (string-append "-Dc_link_args=-Wl,-rpath="
+                       (assoc-ref %outputs "out") "/lib:"
+                       (assoc-ref %outputs "out") "/lib/mutter-9")
+        ;; Disable systemd support.
+        "-Dsystemd=false"
+        ;; The following flags are needed for the bundled clutter
+        (string-append "-Dxwayland_path="
+                       (assoc-ref %build-inputs "xorg-server-xwayland")
+                       "/bin/Xwayland")
+        ;; the remaining flags are needed for the bundled cogl
+        (string-append "-Dopengl_libname="
+                       (assoc-ref %build-inputs "mesa")
+                       "/lib/libGL.so")
+        (string-append "-Dgles2_libname="
+                       (assoc-ref %build-inputs "mesa")
+                       "/lib/libGLESv2.so")
+        "-Degl_device=true"              ;false by default
+        "-Dwayland_eglstream=true")      ;false by default
+       #:test-options
+       (list "--verbose")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-dlopen-calls
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/wayland/meta-wayland-egl-stream.c"
+               (("libnvidia-egl-wayland.so.1")
+                (string-append (assoc-ref inputs "egl-wayland")
+                               "/lib/libnvidia-egl-wayland.so.1")))))
+         (add-before 'configure 'set-udev-dir
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PKG_CONFIG_UDEV_UDEVDIR"
+                     (string-append (assoc-ref outputs "out")
+                                    "/lib/udev"))))
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             ;; The native-headless test hangs due to attempting to use audio,
+             ;; unavailable in the container.
+             ;; Note: the following sed expression deletes the whole test(...)
+             ;; expression paragraph.  For an explanation, see: info '(sed)
+             ;; Multiline techniques'.
+             (invoke "sed" "/./{H;$!d} ; x ; s/^.*native-headless.*$//"
+                     "-i" "src/tests/meson.build")))
+         (replace 'check
+           (lambda* (#:key tests? test-options parallel-tests?
+                     #:allow-other-keys)
+             (when tests?
+               ;; Setup (see the 'test-mutter' CI target at
+               ;; https://gitlab.gnome.org/GNOME/mutter/-/raw/main/.gitlab-ci.yml).
+               (setenv "XDG_RUNTIME_DIR" "runtime-dir")
+               (setenv "GSETTINGS_SCHEMA_DIR" "data")
+               (setenv "MUTTER_DEBUG_DUMMY_MODE_SPECS" "800x600@10.0")
+               (setenv "PIPEWIRE_DEBUG" "2")
+               (setenv "PIPEWIRE_LOG" "meson-logs/pipewire.log")
+               (setenv "XVFB_SERVER_ARGS" "+iglx -noreset")
+               (setenv "G_SLICE" "always-malloc")
+               (setenv "MALLOC_CHECK" "3")
+               (setenv "NO_AT_BRIDGE" "1")
+               ;; This is needed, otherwise the "mutter:core+mutter/unit /
+               ;; anonymous-file" test would fail (see:
+               ;; https://gitlab.gnome.org/GNOME/mutter/-/issues/2017).
+               (setenv "CI_JOB_ID" "1")
+
+               (invoke "glib-compile-schemas" (getenv "GSETTINGS_SCHEMA_DIR"))
+               (mkdir-p (getenv "XDG_RUNTIME_DIR"))
+               (chmod (getenv "XDG_RUNTIME_DIR") #o755)
+               (invoke "pipewire" "--version") ;check for pipewire
+               (system "pipewire &")    ;always returns 0 due to forking
+
+               (setenv "MESON_TESTTHREADS"
+                       (if parallel-tests?
+                           (number->string (parallel-job-count))
+                           "1"))
+               (match (primitive-fork)
+                 (0                     ;child process
+                  (set-child-subreaper!)
+                  ;; Use tini so that signals are properly handled and
+                  ;; doubly-forked processes get reaped; otherwise,
+                  ;; python-dbusmock would waste time polling for the dbus
+                  ;; processes it spawns to be reaped, in vain.
+                  (apply execlp "tini" "--"
+                         "dbus-run-session" "--"
+                         "xvfb-run" "-a" "-s" (getenv "XVFB_SERVER_ARGS")
+                         "meson" "test" "-t" "0" "--print-errorlogs"
+                         test-options))
+                 (pid
+                  (match (waitpid pid)
+                    ((_ . status)
+                     (unless (zero? status)
+                       (error "`meson test' exited with status"
+                              status))))))))))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
-       ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
+       ("glib:bin" ,glib "bin")         ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)
+       ("xvfb-run" ,xvfb-run)
        ;; For git build
        ("autoconf" ,autoconf)
        ("automake" ,automake)
-       ("libtool" ,libtool)))
+       ("libtool" ,libtool)
+       ;; For tests.
+       ;; Warnings are configured to be fatal during the tests; add an icon
+       ;; theme to please libxcursor.
+       ("adwaita-icon-theme" ,adwaita-icon-theme)
+       ("libxcursor" ,libxcursor)       ;for XCURSOR_PATH
+       ("pipewire" ,pipewire-0.3)
+       ("python-dbus" ,python-dbus)
+       ("python-dbusmock" ,python-dbusmock)
+       ("tini" ,tini)))                 ;acting as init (zombie reaper)
     (propagated-inputs
-     `(;; libmutter.pc refers to these:
+     `( ;; libmutter.pc refers to these:
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
        ;; mutter-clutter-1.0.pc and mutter-cogl-1.0.pc refer to these:
@@ -7396,19 +7562,23 @@ to display dialog boxes from the commandline and shell scripts.")
        ("libinput" ,libinput)
        ("libx11" ,libx11)
        ("libxcomposite" ,libxcomposite)
+       ("libxcvt" ,libxcvt)
        ("libxdamage" ,libxdamage)
        ("libxext" ,libxext)
        ("libxfixes" ,libxfixes)
        ("libxkbcommon" ,libxkbcommon)
+       ("libxml2" ,libxml2)
        ("libxrandr" ,libxrandr)
        ("mesa" ,mesa)
        ("pango" ,pango)
        ("udev" ,eudev)
        ("xinput" ,xinput)))
     (inputs
-     `(("elogind" ,elogind)
+     `(("egl-wayland" ,egl-wayland)     ;for wayland-eglstream-protocols
+       ("elogind" ,elogind)
        ("gnome-desktop" ,gnome-desktop)
        ("gnome-settings-daemon" ,gnome-settings-daemon)
+       ("graphene" ,graphene)
        ("libcanberra-gtk" ,libcanberra)
        ("libgudev" ,libgudev)
        ("libice" ,libice)
@@ -7417,8 +7587,9 @@ to display dialog boxes from the commandline and shell scripts.")
        ("libxkbfile" ,libxkbfile)
        ("libxrandr" ,libxrandr)
        ("libxtst" ,libxtst)
-       ("pipewire" ,pipewire)
+       ("pipewire" ,pipewire-0.3)
        ("startup-notification" ,startup-notification)
+       ("sysprof" ,sysprof)
        ("upower-glib" ,upower)
        ("xkeyboard-config" ,xkeyboard-config)
        ("xorg-server-xwayland" ,xorg-server-xwayland)
@@ -7435,7 +7606,7 @@ window manager.")
 (define-public gnome-online-accounts
   (package
     (name "gnome-online-accounts")
-    (version "3.36.0")
+    (version "3.43.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -7443,7 +7614,7 @@ window manager.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0bigfi225g1prnxpb9lcc1i7mdcrkplwb05vilc43jik12cn53qw"))))
+                "1s5pmy3hx6hhnyi40r7b773py9kn2qbkxnpxv6149z9fl5ikdjrv"))))
     (outputs '("out" "lib"))
     (build-system glib-or-gtk-build-system)
     (arguments
@@ -7462,8 +7633,7 @@ window manager.")
                  (("@datadir@") (string-append lib "/share")))
                ;; Make sure gobject-introspection knows about the output
                ;; too (see <https://bugs.gnu.org/36535>).
-               (setenv "outputs" "out lib")
-               #t))))))
+               (setenv "outputs" "out lib")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
@@ -7472,39 +7642,37 @@ window manager.")
        ("vala" ,vala)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib)           ; required by goa-1.0.pc
-       ("gtk+" ,gtk+)))         ; required by goa-backend-1.0.pc
+     (list glib ; required by goa-1.0.pc
+           gtk+))         ; required by goa-backend-1.0.pc
     (inputs
      `(("docbook-xsl" ,docbook-xsl)
        ("json-glib" ,json-glib)
        ("libsecret" ,libsecret)
        ("rest" ,rest)
-       ("webkitgtk" ,webkitgtk)))
+       ;; WebKitGtk propagates libsoup 3, which causes the build to fail; so
+       ;; use a special variant.
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Single sign-on framework for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GnomeOnlineAccounts")
     (description
      "GNOME Online Accounts provides interfaces so that applications and
-libraries in GNOME can access the user's online accounts.  It has providers for
-Google, ownCloud, Facebook, Flickr, Windows Live, Pocket, Foursquare, Microsoft
-Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
+libraries in GNOME can access the user's online accounts.  It has providers
+for Google, ownCloud, Facebook, Flickr, Windows Live, Pocket, Foursquare,
+Microsoft Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
     (license license:lgpl2.0+)))
 
 (define-public evolution-data-server
   (package
     (name "evolution-data-server")
-    (version "3.34.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (patches (search-patches "evolution-data-server-locales.patch"
-                                       "evolution-data-server-libical-compat.patch"
-                                       "evolution-data-server-CVE-2020-14928.patch"
-                                       "evolution-data-server-CVE-2020-16117.patch"))
-              (sha256
-               (base32
-                "16z85y6hhazcrp5ngw47w4x9r0j8zrj7awv5im58hhp0xs19zf1y"))))
+    (version "3.42.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0a7my8spwcaf2i2fz8ndddi1drv6l9gxq0qblmnkxzyhfwm7zrp6"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -7530,27 +7698,25 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
              ;; assertion failed (g_slist_length (contacts) == 20): (0 == 20)
              (delete-file-recursively "tests/book-migration")
              (substitute* "tests/CMakeLists.txt"
-               (("add_subdirectory\\(book-migration\\)") ""))
-             #t))
+               (("add_subdirectory\\(book-migration\\)") ""))))
          (add-after 'unpack 'patch-paths
           (lambda _
             (substitute* '("tests/test-server-utils/e-test-server-utils.c"
                            "tests/libedata-book/data-test-utils.c"
                            "tests/libedata-book/test-book-cache-utils.c"
                            "tests/libedata-cal/test-cal-cache-utils.c")
-              (("/bin/rm") (which "rm")))
-            #t))
+              (("/bin/rm") (which "rm")))))
          (add-before 'configure 'dont-override-rpath
            (lambda _
              (substitute* "CMakeLists.txt"
                ;; CMakeLists.txt hard-codes runpath to just the libdir.
                ;; Remove it so the configure flag is respected.
-               (("SET\\(CMAKE_INSTALL_RPATH .*") ""))
-             #t)))))
+               (("SET\\(CMAKE_INSTALL_RPATH .*") "")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("gperf" ,gperf)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)
@@ -7560,7 +7726,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
      `(("gtk+" ,gtk+)
        ("libical" ,libical)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("nss" ,nss)
        ("sqlite" ,sqlite)))
     (inputs
@@ -7572,7 +7738,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
        ("libgweather" ,libgweather)
        ("mit-krb5" ,mit-krb5)
        ("openldap" ,openldap)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Store address books and calendars")
     (home-page "https://wiki.gnome.org/Apps/Evolution")
     (description
@@ -7610,12 +7776,12 @@ Evolution (hence the name), but is now used by other packages as well.")
          (add-after 'install 'wrap-programs
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH"))
+                   (python-path (getenv "GUIX_PYTHONPATH"))
                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
               (for-each
                (lambda (prog)
                  (wrap-program prog
-                   `("PYTHONPATH"      ":" prefix (,python-path))
+                   `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
                    `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
                (list (string-append out "/bin/caribou-preferences")
                      (string-append out "/libexec/antler-keyboard"))))
@@ -7630,10 +7796,7 @@ Evolution (hence the name), but is now used by other packages as well.")
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      ;; caribou-1.0.pc refers to all these.
-     `(("libgee" ,libgee)
-       ("libxklavier" ,libxklavier)
-       ("libxtst" ,libxtst)
-       ("gtk+" ,gtk+)))
+     (list libgee libxklavier libxtst gtk+))
     (inputs
      `(("clutter" ,clutter)
        ("dconf" ,dconf)
@@ -7649,30 +7812,24 @@ users.")
 (define-public network-manager
   (package
     (name "network-manager")
-    (version "1.24.0")
+    (version "1.32.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/NetworkManager/"
                                   (version-major+minor version) "/"
                                   "NetworkManager-" version ".tar.xz"))
-              (patches (search-patches "network-manager-plugin-path.patch"))
+              (patches (search-patches "network-manager-plugin-path.patch"
+                                       "network-manager-meson.patch"))
               (sha256
                (base32
-                "06044fl60bjlj7c6rqqfbm5795h61h6yzp7ch392hzcnm46wwhn3"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "src/devices/wwan/nm-modem-manager.c"
-                    (("systemd") "elogind"))
-                  #t))))
+                "0jzmz0zw64dgvdn2g7pppr7bkywpbxcbdb1viv6p7zh2lnh3dax8"))))
     (build-system meson-build-system)
     (outputs '("out"
-               "doc")) ; 8 MiB of gtk-doc HTML
+               "doc"))                  ; 8 MiB of gtk-doc HTML
     (arguments
      `(#:configure-flags
        (let ((out      (assoc-ref %outputs "out"))
-             (dhclient (string-append (assoc-ref %build-inputs "isc-dhcp")
-                                      "/sbin/dhclient")))
+             (dhclient (search-input-file %build-inputs "/sbin/dhclient")))
          (list
           ;; Otherwise, the RUNPATH will lack the final 'NetworkManager' path
           ;; component.
@@ -7708,33 +7865,38 @@ users.")
              ;; cope with being already in the Guix build jail as that jail
              ;; lacks some features that they would like to proxy over (like
              ;; a /sys mount).
-             (substitute* "src/platform/tests/meson.build"
+             (substitute* "src/core/tests/meson.build"
+               ((".*test-l3cfg.*") ""))
+             (substitute* "src/core/devices/tests/meson.build"
+               ((".*test-acd.*") "")
+               ((".*test-lldp.*") ""))
+             (substitute* "src/core/platform/tests/meson.build"
                ((".*test-address-linux.*") "")
                ((".*test-cleanup-linux.*") "")
                ((".*test-link-linux.*") "")
-               ((".*test-route-linux.*") ""))
-             (substitute* "src/devices/tests/meson.build"
-               ((".*test-acd.*") "")
-               ((".*test-lldp.*") ""))
-             #t))
+               ((".*test-lldp.*") "")
+               ((".*test-route-linux.*") "")
+               ((".*test-tc-linux.*") ""))
+             ;; FIXME: The jansson check fails (see:
+             ;; https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/837
+             (substitute* "src/libnm-core-impl/tests/test-setting.c"
+               (("g_assert\\(nm_json_vt\\(\\)\\);")
+                "return TRUE;"))))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
                                           "/xml/dtd/docbook")))
                (substitute* (find-files "." ".*\\.(xsl|xml)")
                  (("http://.*/docbookx\\.dtd")
-                  (string-append xmldoc "/docbookx.dtd")))
-               #t)))
+                  (string-append xmldoc "/docbookx.dtd"))))))
          (add-before 'check 'pre-check
            (lambda _
              ;; For the missing /etc/machine-id.
-             (setenv "DBUS_FATAL_WARNINGS" "0")
-             #t))
+             (setenv "DBUS_FATAL_WARNINGS" "0")))
          (add-before 'install 'no-polkit-magic
            ;; Meson ‘magically’ invokes pkexec, which fails (not setuid).
            (lambda _
-             (setenv "PKEXEC_UID" "something")
-             #t))
+             (setenv "PKEXEC_UID" "something")))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -7745,10 +7907,9 @@ users.")
                                              (string-append doc directory))
                            (delete-file-recursively
                             (string-append out directory)))
-                         '("/share/doc" "/share/gtk-doc"))
-               #t))))))
+                         '("/share/doc" "/share/gtk-doc"))))))))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for gdbus-codegen
        ("gtk-doc" ,gtk-doc/stable)
@@ -7780,11 +7941,12 @@ users.")
        ("libgudev" ,libgudev)
        ("libndp" ,libndp)
        ("libnl" ,libnl)
+       ("libselinux" ,libselinux)
        ("libsoup" ,libsoup)
        ("mobile-broadband-provider-info" ,mobile-broadband-provider-info)
        ("modem-manager" ,modem-manager)
-       ("newt" ,newt)                       ;for the 'nmtui' console interface
-       ("openresolv" ,openresolv)           ; alternative resolv.conf manager
+       ("newt" ,newt)                   ;for the 'nmtui' console interface
+       ("openresolv" ,openresolv)       ; alternative resolv.conf manager
        ("polkit" ,polkit)
        ("ppp" ,ppp)
        ("readline" ,readline)
@@ -7825,10 +7987,8 @@ services.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((ovpn (string-append (assoc-ref inputs "openvpn")
-                                         "/sbin/openvpn"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((ovpn (search-input-file inputs "/sbin/openvpn"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" ovpn "\"")))
                (for-each
                 (lambda (file)
@@ -7840,15 +8000,14 @@ services.")
                 '("src/nm-openvpn-service.c" "properties/nm-openvpn-editor.c")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("openvpn" ,openvpn)
-       ("network-manager" ,network-manager)
-       ("libnma" ,libnma)
-       ("libsecret" ,libsecret)))
+     (list gtk+
+           kmod
+           openvpn
+           network-manager
+           libnma
+           libsecret))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "OpenVPN plug-in for NetworkManager")
     (description
@@ -7881,10 +8040,8 @@ to virtual private networks (VPNs) via OpenVPN.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((vpnc (string-append (assoc-ref inputs "vpnc")
-                                         "/sbin/vpnc"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((vpnc (search-input-file inputs "/sbin/vpnc"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" vpnc "\"")))
                (substitute* "src/nm-vpnc-service.c"
                     (("\"/usr/local/sbin/vpnc\"") pretty-ovpn)
@@ -7893,15 +8050,14 @@ to virtual private networks (VPNs) via OpenVPN.")
                     (("/sbin/modprobe") modprobe)))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("vpnc" ,vpnc)
-       ("network-manager" ,network-manager)
-       ("libnma" ,libnma)
-       ("libsecret" ,libsecret)))
+     (list gtk+
+           kmod
+           vpnc
+           network-manager
+           libnma
+           libsecret))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "VPNC plug-in for NetworkManager")
     (description
@@ -7930,28 +8086,25 @@ Compatible with Cisco VPN concentrators configured to use IPsec.")
        (modify-phases %standard-phases
          (add-after 'configure 'patch-path
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-             (let* ((openconnect (string-append (assoc-ref inputs "openconnect")
-                                         "/sbin/openconnect"))
-                    (modprobe (string-append (assoc-ref inputs "kmod")
-                                             "/bin/modprobe"))
+             (let* ((openconnect (search-input-file inputs
+                                                    "/sbin/openconnect"))
+                    (modprobe (search-input-file inputs "/bin/modprobe"))
                     (pretty-ovpn (string-append "\"" openconnect "\"")))
                (substitute* "src/nm-openconnect-service.c"
                  (("\"/usr(/local)?/s?bin/openconnect\"") pretty-ovpn)
                  (("/sbin/modprobe") modprobe)))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("libnma" ,libnma)
-       ("pkg-config" ,pkg-config)))
+     (list intltool libnma pkg-config))
     (inputs
-     `(("gcr" ,gcr)
-       ("gtk+" ,gtk+)
-       ("kmod" ,kmod)
-       ("libsecret" ,libsecret)
-       ("libxml2" ,libxml2)
-       ("lz4" ,lz4)
-       ("network-manager" ,network-manager)
-       ("openconnect" ,openconnect)))
+     (list gcr
+           gtk+
+           kmod
+           libsecret
+           libxml2
+           lz4
+           network-manager
+           openconnect))
     (home-page "https://wiki.gnome.org/Projects/NetworkManager/VPN")
     (synopsis "OpenConnect plug-in for NetworkManager")
     (description
@@ -8001,7 +8154,8 @@ Cisco's AnyConnect SSL VPN.")
                 "1gj6lqqi613j2m49v9i82lqg1rv7kwwc8z4nxjcwpaa0ins803f7"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59
+       #:glib-or-gtk? #t
        #:configure-flags
        '("-Dappindicator=yes")))
     (native-inputs
@@ -8012,20 +8166,18 @@ Cisco's AnyConnect SSL VPN.")
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; libnm-gtk.pc refers to all these.
-     `(("dbus-glib" ,dbus-glib)
-       ("gtk+" ,gtk+)
-       ("network-manager" ,network-manager)
-       ;; nm-applet need by org.gnome.nm-applet.gschema.xml
-       ("libnma" ,libnma)))
-    (inputs
-     `(("gcr" ,gcr)
-       ("libappindicator" ,libappindicator)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("libselinux" ,libselinux)
-       ("jansson" ,jansson) ; for team support
-       ("modem-manager" ,modem-manager)))
+     (list dbus-glib gtk+ network-manager
+           ;; nm-applet need by org.gnome.nm-applet.gschema.xml
+           libnma))
+    (inputs
+     (list gcr
+           libappindicator
+           libgudev
+           libnotify
+           libsecret
+           libselinux
+           jansson ; for team support
+           modem-manager))
     (synopsis "Applet for managing network connections")
     (home-page "https://wiki.gnome.org/Projects/NetworkManager")
     (description
@@ -8068,20 +8220,19 @@ the available networks and allows users to easily switch between them.")
                   (string-append xsldoc "/html/chunk.xsl")))))))))
     (propagated-inputs
      ;; libxml++-3.0.pc refers to all these.
-     `(("glibmm" ,glibmm)
-       ("libxml2" ,libxml2)))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("graphviz" ,graphviz) ; for dot
-       ("libtool" ,libtool)
-       ("libxslt" ,libxslt)
-       ("mm-common" ,mm-common)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list glibmm-2.64 libxml2))
+    (native-inputs
+     (list autoconf
+           automake
+           doxygen
+           docbook-xml
+           docbook-xsl
+           graphviz ; for dot
+           libtool
+           libxslt
+           mm-common
+           perl
+           pkg-config))
     (home-page "https://github.com/libxmlplusplus/libxmlplusplus/")
     (synopsis "C++ bindings to the libxml2 XML parser library")
     (description
@@ -8109,128 +8260,151 @@ library.")
 (define-public gdm
   (package
     (name "gdm")
-    (version "3.34.1")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1lyqvcwxhwxklbxn4xjswjzr6fhjix6h28mi9ypn34wdm9bzcpg8"))
-              (patches (search-patches "gdm-default-session.patch"))))
-    (build-system glib-or-gtk-build-system)
+                "1zbks7bwbys1pn7sk0aq0dbn09adx51amb441z4z4j28cvma3f5b"))
+              (patches
+               (search-patches
+                "gdm-default-session.patch"
+                "gdm-elogind-support.patch"
+                "gdm-remove-hardcoded-xwayland-path.patch"
+                "gdm-wayland-session-wrapper-from-env.patch"
+                "gdm-pass-gdk-pixbuf-loader-env.patch"))))
+    (build-system meson-build-system)
     (arguments
-     '(#:configure-flags
-       `("--without-plymouth"
-         "--disable-systemd-journal"
-
-         ;; Using --with-initial-vt=7 allows GDM to run alongside TTY 1,
-         ;; instead of having to replace it (i.e., stopping the mingetty
-         ;; service for TTY 1 before starting GDM).
-         "--with-initial-vt=7"
-
-         ;; Use '/etc/environment' for locale settings instead of the
-         ;; systemd-specific '/etc/locale.conf'.
-         "--with-lang-file=/etc/environment"
-
-         ,(string-append "--with-udevdir="
-                         (assoc-ref %outputs "out") "/lib/udev")
-
-         "--localstatedir=/var"
-         ,(string-append "--with-default-path="
-                         (string-join '("/run/setuid-programs"
-                                        "/run/current-system/profile/bin"
-                                        "/run/current-system/profile/sbin")
-                                      ":"))
-         ;; Put GDM in bindir so that glib-or-gtk-build-system wraps the
-         ;; XDG_DATA_DIRS so that it finds its schemas.
-         "--sbindir" ,(string-append (assoc-ref %outputs "out") "/bin"))
+     `(#:glib-or-gtk? #t
+       #:configure-flags
+       ,#~(list
+           "-Dplymouth=disabled"
+           "-Dsystemd-journal=false"
+
+           ;; Using --with-initial-vt=7 allows GDM to run alongside TTY 1,
+           ;; instead of having to replace it (i.e., stopping the mingetty
+           ;; service for TTY 1 before starting GDM).
+           "-Dinitial-vt=7"
+
+           ;; Use elogind instead of systemd.
+           "-Dlogind-provider=elogind"
+           "-Dsystemdsystemunitdir=no"
+           "-Dsystemduserunitdir=no"
+
+           ;; Use '/etc/environment' for locale settings instead of the
+           ;; systemd-specific '/etc/locale.conf'.
+           "-Dlang-file=/etc/environment"
+
+           (string-append "-Dudev-dir=" #$output "/lib/udev")
+
+           "--localstatedir=/var"
+           (string-append "-Ddefault-path="
+                          (string-join '("/run/setuid-programs"
+                                         "/run/current-system/profile/bin"
+                                         "/run/current-system/profile/sbin")
+                                       ":"))
+           ;; Put GDM in bindir so that glib-or-gtk-build-system wraps the
+           ;; XDG_DATA_DIRS so that it finds its schemas.
+           "--sbindir" (string-append #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (add-before
-          'configure 'pre-configure
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; We don't have <systemd/sd-daemon.h>.
-            (substitute* '("common/gdm-log.c"
-                           "daemon/gdm-server.c"
-                           "daemon/gdm-session-worker.c"
-                           "daemon/gdm-session-worker-job.c")
-              (("#include <systemd/sd-daemon\\.h>") ""))
-            ;; Use elogind for sd-login.
-            (substitute* '("common/gdm-common.c"
-                           "daemon/gdm-local-display-factory.c"
-                           "daemon/gdm-manager.c"
-                           "libgdm/gdm-user-switching.c")
-              (("#include <systemd/sd-login\\.h>")
-               "#include <elogind/sd-login.h>"))
-            ;; Check for elogind.
-            (substitute* '("configure")
-              (("libsystemd")
-               "libelogind"))
-            ;; Look for system-installed sessions in
-            ;; /run/current-system/profile/share.
-            (substitute* '("libgdm/gdm-sessions.c"
-                           "daemon/gdm-session.c"
-                           "daemon/gdm-display.c"
-                           "daemon/gdm-launch-environment.c")
-              (("DATADIR \"/x")
-               "\"/run/current-system/profile/share/x")
-              (("DATADIR \"/wayland")
-               "\"/run/current-system/profile/share/wayland")
-              (("DATADIR \"/gnome")
-               "\"/run/current-system/profile/share/gnome"))
-            (let ((propagate '("GDM_CUSTOM_CONF"
-                               "GDM_DBUS_DAEMON"
-                               "GDM_X_SERVER"
-                               "GDM_X_SESSION"
-                               ;; XXX: Remove this once GNOME Shell is
-                               ;; a dependency of GDM.
-                               "XDG_DATA_DIRS")))
-              (substitute* "daemon/gdm-session.c"
-                (("set_up_session_environment \\(self\\);")
-                 (apply string-append
-                        "set_up_session_environment (self);\n"
-                        (map (lambda (name)
-                               (string-append
-                                "gdm_session_set_environment_variable "
-                                "(self, \"" name "\","
-                                "g_getenv (\"" name "\"));\n"))
-                             propagate)))))
-            ;; Find the configuration file using an environment variable.
-            (substitute* '("common/gdm-settings.c")
-              (("GDM_CUSTOM_CONF")
-               (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
-                              " ? g_getenv(\"GDM_CUSTOM_CONF\")"
-                              " : GDM_CUSTOM_CONF)")))
-            ;; Use service-supplied path to X.
-            (substitute* '("daemon/gdm-server.c")
-              (("\\(X_SERVER X_SERVER_ARG_FORMAT")
-               "(\"%s\" X_SERVER_ARG_FORMAT, g_getenv (\"GDM_X_SERVER\")"))
-            (substitute* '("daemon/gdm-wayland-session.c"
-                           "daemon/gdm-x-session.c")
-              (("\"dbus-daemon\"")
-               "g_getenv (\"GDM_DBUS_DAEMON\")")
-              (("X_SERVER")
-               "g_getenv (\"GDM_X_SERVER\")")
-              (("GDMCONFDIR \"/Xsession\"")
-               "g_getenv (\"GDM_X_SESSION\")"))
-            ;; Use an absolute path for GNOME Session.
-            (substitute* "daemon/gdm-launch-environment.c"
-              (("\"gnome-session\"")
-               (string-append "\"" (assoc-ref inputs "gnome-session")
-                              "/bin/gnome-session\"")))
-            ;; Do not automatically select the placeholder session.
-            (substitute* "daemon/gdm-session.c"
-              (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
-               (string-append "!g_str_has_suffix (base_name, \".desktop\") || "
-                              "(g_strcmp0(search_dirs[i], \""
-                              (assoc-ref outputs "out") "/share/gdm/BuiltInSessions/"
-                              "\") == 0 && "
-                              "g_strcmp0(base_name, \"fail.desktop\") == 0)"))
-              (("g_error [(]\"GdmSession: no session desktop files installed, aborting\\.\\.\\.\"[)];")
-               "{ self->fallback_session_name = g_strdup(\"fail\"); goto out; }"))
-            #t))
+             'configure 'pre-configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; We don't have <systemd/sd-daemon.h>.
+             (substitute* '("common/gdm-log.c"
+                            "daemon/gdm-server.c"
+                            "daemon/gdm-session-worker.c"
+                            "daemon/gdm-session-worker-job.c")
+               (("#include <systemd/sd-daemon\\.h>") ""))
+             ;; Use elogind for sd-login.
+             (substitute* '("common/gdm-common.c"
+                            "daemon/gdm-local-display-factory.c"
+                            "daemon/gdm-manager.c"
+                            "libgdm/gdm-user-switching.c")
+               (("#include <systemd/sd-login\\.h>")
+                "#include <elogind/sd-login.h>"))
+             ;; Look for system-installed sessions in
+             ;; /run/current-system/profile/share.
+             (substitute* '("libgdm/gdm-sessions.c"
+                            "daemon/gdm-session.c"
+                            "daemon/gdm-display.c"
+                            "daemon/gdm-launch-environment.c")
+               (("DATADIR \"/x")
+                "\"/run/current-system/profile/share/x")
+               (("DATADIR \"/wayland")
+                "\"/run/current-system/profile/share/wayland")
+               (("DATADIR \"/gnome")
+                "\"/run/current-system/profile/share/gnome"))
+             (let ((propagate '("GDM_CUSTOM_CONF"
+                                "GDM_DBUS_DAEMON"
+                                "GDM_X_SERVER"
+                                "GDM_X_SESSION"
+                                ;; XXX: Remove this once GNOME Shell is
+                                ;; a dependency of GDM.
+                                "XDG_DATA_DIRS")))
+               (substitute* "daemon/gdm-session.c"
+                 (("set_up_session_environment \\(self\\);")
+                  (apply string-append
+                         "set_up_session_environment (self);\n"
+                         (map (lambda (name)
+                                (string-append
+                                 "gdm_session_set_environment_variable "
+                                 "(self, \"" name "\","
+                                 "g_getenv (\"" name "\"));\n"))
+                              propagate)))))
+             ;; Find the configuration file using an environment variable.
+             (substitute* '("common/gdm-settings.c")
+               (("GDM_CUSTOM_CONF")
+                (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
+                               " ? g_getenv(\"GDM_CUSTOM_CONF\")"
+                               " : GDM_CUSTOM_CONF)")))
+             ;; Use service-supplied path to X.
+             (substitute* '("daemon/gdm-server.c")
+               (("\\(X_SERVER X_SERVER_ARG_FORMAT")
+                "(\"%s\" X_SERVER_ARG_FORMAT, g_getenv (\"GDM_X_SERVER\")"))
+             (substitute* '("daemon/gdm-wayland-session.c"
+                            "daemon/gdm-x-session.c")
+               (("\"dbus-daemon\"")
+                "g_getenv (\"GDM_DBUS_DAEMON\")")
+               (("X_SERVER")
+                "g_getenv (\"GDM_X_SERVER\")")
+               (("GDMCONFDIR \"/Xsession\"")
+                "g_getenv (\"GDM_X_SESSION\")"))
+             ;; Use an absolute path for GNOME Session.
+             (substitute* "daemon/gdm-launch-environment.c"
+               (("\"gnome-session\"")
+                (string-append "\"" (assoc-ref inputs "gnome-session")
+                               "/bin/gnome-session\"")))
+             ;; Do not automatically select the placeholder session.
+             (substitute* "daemon/gdm-session.c"
+               (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
+                (string-append "!g_str_has_suffix (base_name, \".desktop\") || "
+                               "(g_strcmp0(search_dirs[i], \""
+                               (assoc-ref outputs "out") "/share/gdm/BuiltInSessions/"
+                               "\") == 0 && "
+                               "g_strcmp0(base_name, \"fail.desktop\") == 0)"))
+               (("g_error [(]\"GdmSession: no session desktop files installed, aborting\\.\\.\\.\"[)];")
+                "{ self->fallback_session_name = g_strdup(\"fail\"); goto out; }"))))
+         (add-before 'install 'install-logo
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (guix-icons (assoc-ref inputs "guix-icons"))
+                    (icon
+                     (string-append guix-icons "/share/icons/hicolor/\
+scalable/apps/guix-white-icon.svg"))
+                    (schema
+                     (string-append out "/share/glib-2.0/schemas/\
+org.gnome.login-screen.gschema.override")))
+               (mkdir-p (dirname schema))
+               (with-output-to-file schema
+                 (lambda ()
+                   (format #t "\
+[org.gnome.login-screen]
+logo='~a'~%" icon))))))
          ;; GDM requires that there be at least one desktop entry
          ;; file.  This phase installs a hidden one that simply
          ;; fails.  This enables users to use GDM with a
@@ -8252,8 +8426,7 @@ library.")
                       "Name=Fail\n"
                       "Comment=This session fails immediately.\n"
                       "NoDisplay=true\n"
-                      "Exec=false\n"))))
-               #t)))
+                      "Exec=false\n")))))))
          ;; GDM needs GNOME Session to run these applications.  We link
          ;; their autostart files in `share/gdm/greeter/autostart'
          ;; because GDM explicitly tells GNOME Session to look there.
@@ -8270,26 +8443,28 @@ library.")
                (with-directory-excursion autostart
                  (for-each (lambda (desktop)
                              (symlink desktop (basename desktop)))
-                           (find-files (string-append settings "/etc/xdg"))))
-               #t))))))
+                           (find-files
+                            (string-append settings "/etc/xdg"))))))))))
     (native-inputs
      `(("dconf" ,dconf)
        ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("gobject-introspection" ,gobject-introspection)
+       ("guix-icons" ,guix-icons)
        ("intltool" ,intltool)
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("check" ,check-0.14)            ;for testing
-       ("elogind" ,elogind)
-       ("gnome-session" ,gnome-session)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("libcanberra" ,libcanberra)
-       ("linux-pam" ,linux-pam)))
+     (list accountsservice
+           check-0.14 ;for testing
+           elogind
+           eudev
+           gnome-session
+           gnome-settings-daemon
+           gtk+
+           iso-codes
+           libcanberra
+           linux-pam))
     (synopsis "Display manager for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GDM/")
     (description
@@ -8311,12 +8486,9 @@ providing graphical log-ins and managing local and remote displays.")
                 "1m6jbqk8maa52gxrf223442fr5bvvxgb7ham6v039i3r1i62gwvq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection intltool perl pkg-config))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libgtop-2.0.pc
+     (list glib)) ; required by libgtop-2.0.pc
     (synopsis "Portable system access library")
     (home-page "https://www.gnome.org/")
     (description
@@ -8337,6 +8509,7 @@ usage and information about running processes.")
                (base32
                 "1a9ynlwwkb3wpg293ym517vmrkk63y809mmcv9a21k5yr199x53c"))))
     (build-system meson-build-system)
+    (arguments `(#:meson ,meson-0.59))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
        ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
@@ -8348,12 +8521,9 @@ usage and information about running processes.")
        ("xmllint" ,libxml2)))
     (propagated-inputs
      ;; gnome-bluetooth-1.0.pc refers to all these.
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (inputs
-     `(("eudev" ,eudev)
-       ("libcanberra" ,libcanberra)
-       ("libnotify" ,libnotify)))
+     (list eudev libcanberra libnotify python-dbus))
     (synopsis "GNOME Bluetooth subsystem")
     (home-page "https://wiki.gnome.org/Projects/GnomeBluetooth")
     (description
@@ -8364,18 +8534,19 @@ devices using the GNOME desktop.")
 (define-public gnome-control-center
   (package
     (name "gnome-control-center")
-    (version "3.34.2")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "054igagvmyzpaa5nwzz98gv7bk7l5dwp6g813707132si3szlpx8"))))
+                "0rr4d5m2a72vrb31jgyx49dp0s2pwgyxsrk4hyw5ym66wq63c3v1"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:configure-flags
        (list "-Dcheese=false"
              (string-append "-Dgnome_session_libexecdir="
@@ -8400,8 +8571,8 @@ devices using the GNOME desktop.")
                  (("\"gkbd-keyboard-display")
                   (string-append "\"" libgnomekbd
                                  "/bin/gkbd-keyboard-display")))
-               (substitute* '("panels/network/net-device-wifi.c"
-                              "panels/network/net-device.c"
+               (substitute* '("panels/network/net-device-bluetooth.c"
+                              "panels/network/net-device-mobile.c"
                               "panels/network/connection-editor/net-connection-editor.c")
                  (("\"nm-connection-editor")
                   (string-append "\"" nm-applet
@@ -8409,17 +8580,15 @@ devices using the GNOME desktop.")
                (substitute* '("panels/user-accounts/run-passwd.c")
                  (("/usr/bin/passwd")
                   "/run/setuid-programs/passwd"))
-               (substitute* "panels/info/cc-info-overview-panel.c"
+               (substitute* "panels/info-overview/cc-info-overview-panel.c"
                  (("DATADIR \"/gnome/gnome-version.xml\"")
                   (string-append "\"" gnome-desktop
-                                 "/share/gnome/gnome-version.xml\"")))
-               #t)))
+                                 "/share/gnome/gnome-version.xml\""))))))
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson/meson_post_install.py"
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+               (("gtk-update-icon-cache") (which "true"))))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
        ("intltool" ,intltool)
@@ -8453,7 +8622,7 @@ devices using the GNOME desktop.")
        ("libnma" ,libnma)
        ("libpwquality" ,libpwquality)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)
        ("libwacom" ,libwacom)
        ("mesa" ,mesa)
@@ -8478,35 +8647,22 @@ properties, screen resolution, and other GNOME parameters.")
 (define-public gnome-shell
   (package
     (name "gnome-shell")
-    (version "3.34.5")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0l3mdn7g2c22mdhrqkxvvc1pk2w0v32f2v4a6n1phvaalwcg75nj"))
-              (patches (search-patches "gnome-shell-CVE-2020-17489.patch"
-                                       "gnome-shell-theme.patch"
-                                       "gnome-shell-disable-test.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               #~(begin
-                   ;; Copy images for use on the GDM log-in screen.
-                   (copy-file #$(file-append %artwork-repository
-                                             "/slim/0.x/background.png")
-                              "data/theme/guix-background.png")
-                   (copy-file #$(file-append %artwork-repository
-                                             "/logo/Guix-horizontal-white.svg")
-                              "data/theme/guix-logo.svg")
-                   #t))))
+                "0ragmcln210zvzhc2br33yprbkj9drjzd7inp5sdxra0a7l73yaj"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t
-       #:disallowed-references ((,glib "bin")
-                                ,inkscape ,libxslt
-                                ,ruby-sass)
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
+       #:disallowed-references ,(list (gexp-input glib "bin")
+                                      (gexp-input libxslt)
+                                      (gexp-input ruby-sass))
        #:configure-flags
        (list "-Dsystemd=false"
              ;; Otherwise, the RUNPATH will lack the final path component.
@@ -8527,13 +8683,12 @@ properties, screen resolution, and other GNOME parameters.")
                               out "/share/gnome-control-center/keybindings")))
                (substitute* "meson.build"
                  (("keysdir =.*")
-                  (string-append "keysdir = '" keysdir "'\n")))
-               #t)))
-         (add-before 'configure 'convert-logo-to-png
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Convert the logo from SVG to PNG.
-             (invoke "inkscape" "--export-png=data/theme/guix-logo.png"
-                     "data/theme/guix-logo.svg")))
+                  (string-append "keysdir = '" keysdir "'\n"))))))
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson/postinstall.py"
+               (("gtk-update-icon-cache") "true"))))
          (add-before 'configure 'record-absolute-file-names
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "js/misc/ibusManager.js"
@@ -8543,51 +8698,41 @@ properties, screen resolution, and other GNOME parameters.")
              (substitute* "js/ui/status/keyboard.js"
                (("'gkbd-keyboard-display'")
                 (string-append "'" (assoc-ref inputs "libgnomekbd")
-                               "/bin/gkbd-keyboard-display'")))
-             #t))
+                               "/bin/gkbd-keyboard-display'")))))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Tests require a running X server.
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
-             #t))
+             (setenv "HOME" "/tmp")))   ;to avoid "fatal" warnings
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out              (assoc-ref outputs "out"))
                    (gi-typelib-path  (getenv "GI_TYPELIB_PATH"))
-                   (python-path      (getenv "PYTHONPATH")))
+                   (python-path      (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/gnome-shell")
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 ;; FIXME: gnome-shell loads these libraries with unqualified
-                 ;; names only, so they need to be on LD_LIBRARY_PATH.  The
-                 ;; alternative might be to patch gnome-shell.
-                 `("LD_LIBRARY_PATH" ":" prefix
-                   ,(map (lambda (pkg)
-                           (string-append (assoc-ref inputs pkg) "/lib"))
-                         '("gdk-pixbuf"
-                           "gnome-bluetooth" "librsvg" "libgweather"))))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/bin/" prog)
-                    `("PYTHONPATH"      ":" prefix (,python-path))
+                    `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-                '("gnome-shell-extension-tool" "gnome-shell-perf-tool"))
-               #t)))
+                '("gnome-shell-extension-tool" "gnome-shell-perf-tool")))))
          (replace 'glib-or-gtk-wrap
            (let ((wrap (assoc-ref %standard-phases 'glib-or-gtk-wrap)))
              (lambda* (#:key inputs outputs #:allow-other-keys #:rest rest)
-               ;; By default Inkscape et al. would end up in the XDG_DATA_DIRS
+               ;; By default intltool et al. would end up in the XDG_DATA_DIRS
                ;; settings of the wrappers created by the 'glib-or-gtk-wrap'
                ;; phase.  Fix that since we don't need these.
                (wrap #:inputs (fold alist-delete inputs
-                                    '("inkscape" "intltool" "glib:bin"))
+                                    '("intltool" "glib:bin"))
                      #:outputs outputs)))))))
     (native-inputs
      `(("asciidoc" ,asciidoc)
        ("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gobject-introspection" ,gobject-introspection)
-       ("inkscape" ,inkscape)
+       ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("python" ,python)
@@ -8597,42 +8742,41 @@ properties, screen resolution, and other GNOME parameters.")
        ;; For tests
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("caribou" ,caribou)
-       ("docbook-xsl" ,docbook-xsl)
-       ("evolution-data-server" ,evolution-data-server)
-       ("gcr" ,gcr)
-       ("gdm" ,gdm)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gjs" ,gjs)
-       ("gnome-autoar" ,gnome-autoar)
-       ("gnome-bluetooth" ,gnome-bluetooth)
-       ("gnome-desktop" ,gnome-desktop)
-       ("gnome-settings-daemon" ,gnome-settings-daemon)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("ibus" ,ibus)
-       ("libcanberra" ,libcanberra)
-       ("libcroco" ,libcroco)
-       ("libgnomekbd" ,libgnomekbd)               ;for gkbd-keyboard-display
-       ("libgweather" ,libgweather)
-       ("libnma" ,libnma)
-       ("libsoup" ,libsoup)
-       ("mesa-headers" ,mesa-headers)
-       ("mutter" ,mutter)
-       ("network-manager-applet" ,network-manager-applet)
-       ("polkit" ,polkit)
-       ("pulseaudio" ,pulseaudio)
-       ("python-pygobject" ,python-pygobject)
-       ("startup-notification" ,startup-notification)
-       ("telepathy-logger" ,telepathy-logger)
-       ("upower" ,upower)
-       ;; XXX: These requirements were added in 3.24, but no mention in NEWS.
-       ;; Missing propagation? See also: <https://bugs.gnu.org/27264>
-       ("librsvg" ,librsvg)
-       ("geoclue" ,geoclue)))
-    ;; CVE-2019-3820 was fixed before GNOME 3.34 was released, in upstream
-    ;; commit f0a7395b3006360905ccdc642982f9fc67378927.
-    (properties '((lint-hidden-cve . ("CVE-2019-3820"))))
+     (list accountsservice
+           caribou
+           docbook-xsl
+           evolution-data-server
+           gcr
+           gdm
+           librsvg
+           gjs
+           gtk
+           gnome-autoar
+           gnome-bluetooth
+           gnome-desktop
+           gnome-settings-daemon
+           graphene
+           gst-plugins-base
+           ibus
+           libcanberra
+           libcroco
+           libgnomekbd ;for gkbd-keyboard-display
+           libgweather
+           libnma
+           libsoup
+           mesa-headers
+           mutter
+           network-manager-applet
+           polkit
+           pulseaudio
+           python-pygobject
+           startup-notification
+           telepathy-logger
+           upower
+           ;; XXX: These requirements were added in 3.24, but no mention in NEWS.
+           ;; Missing propagation? See also: <https://bugs.gnu.org/27264>
+           librsvg
+           geoclue))
     (synopsis "Desktop shell for GNOME")
     (home-page "https://wiki.gnome.org/Projects/GnomeShell")
     (description
@@ -8668,7 +8812,7 @@ like switching to windows and launching applications.")
        ("vala" ,vala)))
     (inputs
      `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("gnutls" ,gnutls)
        ("libgcrypt" ,libgcrypt)
@@ -8677,7 +8821,7 @@ like switching to windows and launching applications.")
        ("x11" ,libx11)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "VNC client viewer widget for GTK+")
     (description "GTK-VNC is a project providing client side APIs for the RFB
 protocol / VNC remote desktop technology.  It is built using coroutines allowing
@@ -8689,7 +8833,7 @@ core C library, and bindings for Python (PyGTK).")
 (define-public gnome-autoar
   (package
     (name "gnome-autoar")
-    (version "0.3.3")
+    (version "0.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -8697,15 +8841,15 @@ core C library, and bindings for Python (PyGTK).")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "012w7rhhpxvlrnnhqy01vwzg1wxqpy8jbqgizn47wnip7bvh0917"))))
-    (build-system glib-or-gtk-build-system)
+                "03hmm7cjgjvyxlflghfa89s1amj16qapl2c9pv0r2bfrp87dasv4"))))
+    (build-system meson-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           `(,glib "bin") pkg-config))
     (propagated-inputs
-     `(("libarchive" ,libarchive)))  ; Required by gnome-autoar-0.pc
+     (list libarchive))  ; Required by gnome-autoar-0.pc
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "Archives integration support for GNOME")
     (home-page "https://git.gnome.org/browse/gnome-autoar/")
     (description
@@ -8716,7 +8860,7 @@ easy, safe, and automatic.")
 (define-public tracker
   (package
     (name "tracker")
-    (version "2.3.5")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/tracker/"
@@ -8724,7 +8868,7 @@ easy, safe, and automatic.")
                                   "tracker-" version ".tar.xz"))
               (sha256
                (base32
-                "1ixxyqjlv7pnl4j8g6b72fkbjvzfspza8y71ppkncry8i6xkr223"))))
+                "13zcc07wd51sz7kglk3xbjrsq7d835cxfr7iwjr7nn2xcri8jdns"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -8732,19 +8876,41 @@ easy, safe, and automatic.")
        ;; Otherwise, the RUNPATH will lack the final path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib:"
-                            (assoc-ref %outputs "out") "/lib/tracker-2.0"))
+                            (assoc-ref %outputs "out") "/lib/tracker-3.0")
+             "-Ddocs=false"
+             "-Dsystemd_user_services=false")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'check 'pre-check
+         (add-before 'configure 'set-shell
            (lambda _
-             ;; Some tests expect to write to $HOME.
-             (setenv "HOME" "/tmp")
-             #t)))))
+             (setenv "SHELL" (which "bash"))))
+         (add-before 'configure 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((manpage "/etc/asciidoc/docbook-xsl/manpage.xsl")
+                    (file (search-input-file inputs manpage)))
+               (substitute* "docs/manpages/meson.build"
+                 (("/etc/asciidoc[^']+")
+                  file)))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some tests expect to write to $HOME.
+               (setenv "HOME" "/tmp")
+               (invoke "dbus-run-session" "--" "meson" "test"
+                       "--print-errorlogs")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("asciidoc" ,asciidoc)
+       ("xsltproc" ,libxslt)
+       ("cmake-minimal" ,cmake-minimal)
        ("python-pygobject" ,python-pygobject)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
+       ("dbus" ,dbus)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
@@ -8753,7 +8919,7 @@ easy, safe, and automatic.")
        ("libxml2" ,libxml2)
        ("icu4c" ,icu4c)                 ; libunistring gets miner-miner-fs test to fail.
        ("json-glib" ,json-glib)
-       ("libsoup" ,libsoup)))
+       ("libsoup" ,libsoup-minimal-2))) ; tracker-miners requires the same version.
     (synopsis "Metadata database, indexer and search tool")
     (home-page "https://wiki.gnome.org/Projects/Tracker")
     (description
@@ -8786,7 +8952,7 @@ endpoint and it understands SPARQL. ")
 (define-public tracker-miners
   (package
     (name "tracker-miners")
-    (version "2.3.4")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/tracker-miners/"
@@ -8794,7 +8960,7 @@ endpoint and it understands SPARQL. ")
                                   "/tracker-miners-" version ".tar.xz"))
               (sha256
                (base32
-                "10wy8d8ski52k809p7s6lbw72qmg05bbmhnl00vx4qrbzqyxvc0b"))))
+                "0fpd69lgm8cckbamcf9c2q57glxf0s3jcfwkq8p3s4lfsvdclmd0"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -8803,16 +8969,54 @@ endpoint and it understands SPARQL. ")
              ;; Ensure the RUNPATH contains all installed library locations.
              (string-append "-Dc_link_args=-Wl,-rpath="
                             (assoc-ref %outputs "out")
-                            "/lib/tracker-miners-2.0")
+                            "/lib/tracker-miners-3.0")
              ;; TODO: Enable functional tests. Currently, the following error
              ;; appears:
              ;; Exception: The functional tests require DConf to be the default
              ;; GSettings backend. Got GKeyfileSettingsBackend instead.
-             "-Dfunctional_tests=false")))
+             "-Dfunctional_tests=false"
+             "-Dsystemd_user_services=false")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-shell
+           (lambda _
+             (setenv "SHELL" (which "bash"))))
+         (add-before 'configure 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((manpage "/etc/asciidoc/docbook-xsl/manpage.xsl")
+                    (file (search-input-file inputs manpage)))
+               (substitute* "docs/manpages/meson.build"
+                 (("/etc/asciidoc[^']+")
+                  file)))))
+         (add-before 'configure 'fix-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Disable those tests that require the functional_tests option
+             ;; to be true and the UPower daemon to be started.
+             (substitute* "examples/python/meson.build"
+               (("foreach example_name:.*")
+                "foreach example_name: []"))
+             ;; Disable this test that is failing randomly:
+             ;; https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/170.
+            (substitute* "tests/libtracker-miner/meson.build"
+               (("'miner-fs'.*")
+                ""))))
+        (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Some tests expect to write to $HOME.
+               (setenv "HOME" "/tmp")
+               (setenv "LANG" "en_US.UTF-8")
+               (invoke "dbus-run-session" "--" "meson" "test"
+                       "--print-errorlogs")))))))
     (native-inputs
      `(("dbus" ,dbus)
        ("intltool" ,intltool)
        ("glib:bin" ,glib "bin")
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("asciidoc" ,asciidoc)
+       ("xsltproc" ,libxslt)
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
        ("python-pygobject" ,python-pygobject)))
@@ -8824,6 +9028,7 @@ endpoint and it understands SPARQL. ")
        ("glib" ,glib)
        ("gstreamer" ,gstreamer)
        ("icu4c" ,icu4c)
+       ("json-glib" ,json-glib)
        ("libcue" ,libcue)
        ("libexif" ,libexif)
        ("libgsf" ,libgsf)
@@ -8833,10 +9038,12 @@ endpoint and it understands SPARQL. ")
        ("libosinfo" ,libosinfo)
        ("libpng" ,libpng)
        ("libseccomp" ,libseccomp)
+       ("libsoup" ,libsoup-minimal-2) ; because tracker requires this version.
        ("libtiff" ,libtiff)
        ("libvorbis" ,libvorbis)
        ("libxml2" ,libxml2)
        ("poppler" ,poppler)
+       ("shared-mime-info" ,shared-mime-info)
        ("taglib" ,taglib)
        ("totem-pl-parser" ,totem-pl-parser)
        ("tracker" ,tracker)
@@ -8857,26 +9064,26 @@ shared object databases, search tools and indexing.")
 (define-public nautilus
   (package
     (name "nautilus")
-    (version "3.34.2")
+    (version "41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "19zqwq4qyyncc5wq3xls0f7rsavnw741k336p2h7kx35p4kf41mv"))))
+                "1rd1a0wjh2sc7mzw6m61rryvgxpi2lin4xj0x9khqw04q6nl3fgr"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/meson/postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))
+               (("gtk-update-icon-cache") "true")))))
        ;; XXX: FAIL: check-nautilus
        ;;   Settings schema 'org.gnome.nautilus.preferences' is not installed
        #:tests? #f))
@@ -8894,8 +9101,12 @@ shared object databases, search tools and indexing.")
        ("gnome-desktop" ,gnome-desktop)
        ("gnome-autoar" ,gnome-autoar)
        ("gst-plugins-base" ,gst-plugins-base)
+       ("json-glib" ,json-glib)
+       ("libhandy" ,libhandy)
+       ("libportal" ,libportal)
        ("libseccomp" ,libseccomp)
        ("libselinux" ,libselinux)
+       ("libsoup" ,libsoup-minimal-2) ; to satisfy tracker dependencies
        ("tracker" ,tracker)
        ("tracker-miners" ,tracker-miners)
        ;; XXX: gtk+ is required by libnautilus-extension.pc
@@ -8917,16 +9128,16 @@ files.")
 (define-public baobab
   (package
     (name "baobab")
-    (version "3.38.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://gnome/sources/" name "/"
-                    (version-major+minor version) "/"
+                    (version-major version) "/"
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0ac3fbl15l836yvgw724q4whbkws9v4b6l2xy6bnp0b0g0a6i104"))))
+                "19yii3bdgivxrcka1c4g6dpbmql5nyawwhzlsph7z6bs68nambm6"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t))
@@ -8940,7 +9151,7 @@ files.")
        ("glib" ,glib "bin")
        ("vala" ,vala)))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+ libhandy))
     (synopsis "Disk usage analyzer for GNOME")
     (description
      "Baobab (Disk Usage Analyzer) is a graphical application to analyse disk
@@ -8953,19 +9164,19 @@ is complete it provides a graphical representation of each selected folder.")
 (define-public gnome-backgrounds
   (package
     (name "gnome-backgrounds")
-    (version "3.34.0")
+    (version "40.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0zxlwy55fz7i582hch2wnj8zy1kzikssgaix0l2y41ccp5nzpdy2"))))
+         "03m7ldfk00cly9igrq0qizq1y0f45vijmm23f1dl5kh1lc6qmpv0"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("intltool" ,intltool)))
+     `(("gettext" ,gettext-minimal)))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-backgrounds")
     (synopsis "Background images for the GNOME desktop")
     (description
@@ -8981,16 +9192,18 @@ can add your own files to the collection.")
 (define-public gnome-screenshot
   (package
     (name "gnome-screenshot")
-    (version "3.34.0")
+    (version "40.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1rmiq890j7gfn5mcz31xy6jfnnxgc17dq67bhn2k9m5ylbvza2n8"))))
+         "1qm544ymwibk31s30k47vnn79xg30m18r7l4di0c57g375dak31n"))
+       (patches
+        (search-patches "gnome-screenshot-meson-0.60.patch"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -9008,10 +9221,7 @@ can add your own files to the collection.")
        ("appstream-glib" ,appstream-glib)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list gtk+ libcanberra libhandy libx11 libxext))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-screenshot")
     (synopsis "Take pictures of your screen")
     (description
@@ -9023,7 +9233,7 @@ beautifying border effects.")
 (define-public dconf-editor
   (package
     (name "dconf-editor")
-    (version "3.34.2")
+    (version "3.38.3")
     (source
      (origin
        (method url-fetch)
@@ -9032,7 +9242,7 @@ beautifying border effects.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0pwxjada2vaf69ihpjgp9nky54iykvxq63lp1vl8pxjanif2mk6f"))))
+         "1qvrxrk1h8bd75xwasxbvlkqrw6xkavjimvc7sslkw6lvb3z86jp"))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
@@ -9041,9 +9251,9 @@ beautifying border effects.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list dconf gtk+ libxml2))
+    (arguments
+     `(#:meson ,meson-0.59))
     (home-page "https://gitlab.gnome.org/GNOME/dconf-editor")
     (synopsis "Graphical editor for GNOME's dconf configuration system")
     (description
@@ -9059,8 +9269,7 @@ software that do not provide their own configuration interface.")
     (build-system trivial-build-system)
     (source #f)
     (propagated-inputs
-     `(("nautilus" ,nautilus)
-       ("evince" ,evince)))
+     (list nautilus evince))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -9100,15 +9309,15 @@ associations for GNOME.")
               "1y0x1wyakj3ya33hgj0w1jkbcn50q21gmn2zyalxysqp55i1ij8x"))))
    (build-system glib-or-gtk-build-system)
    (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("glib:bin" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-      ("gtk+:bin" ,gtk+ "bin")
-      ("pkg-config" ,pkg-config)))
+    (list gettext-minimal
+          `(,glib "bin")
+          gobject-introspection
+          gsettings-desktop-schemas
+          `(,gtk+ "bin")
+          pkg-config))
    (inputs
-    `(("glib-networking" ,glib-networking) ; GIO plugin--for the tests
-      ("librest" ,rest)))
+    (list glib-networking ; GIO plugin--for the tests
+          rest))
    (synopsis "GoVirt Library")
    (description "GoVirt is a GObject wrapper for the oVirt REST API.")
    (home-page "https://gitlab.gnome.org/GNOME/libgovirt")
@@ -9117,15 +9326,15 @@ associations for GNOME.")
 (define-public gnome-weather
   (package
    (name "gnome-weather")
-   (version "3.34.0")
+   (version "40.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version) "/"
+                                (version-major version) "/"
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1g63xzs17i36if923b36k9fwbk0nqa5vz6zh1k6q2axrzhhpx1i4"))))
+              "0k9wnyinvx6433r07kvjyahgqc605g7gbpf3d0h6vi4p8x61849x"))))
    (build-system meson-build-system)
    (native-inputs
     `(("gettext" ,gettext-minimal)
@@ -9134,34 +9343,39 @@ associations for GNOME.")
       ("gtk+:bin" ,gtk+ "bin")
       ("pkg-config" ,pkg-config)))
    (inputs
-    `( ;("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("appstream-glib" ,appstream-glib)
-      ("geoclue" ,geoclue)
-      ("gdk-pixbuf" ,gdk-pixbuf)
-      ("gjs" ,gjs)
-      ("gnome-desktop" ,gnome-desktop)
-      ("libgweather" ,libgweather)))
+    (list appstream-glib
+          geoclue
+          gjs
+          gnome-desktop
+          libgweather
+          libhandy))
    (arguments
-    `(#:glib-or-gtk? #t
+    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+      #:glib-or-gtk? #t
       #:phases
-      (modify-phases %standard-phases
-        (add-after 'install 'fix-desktop-file
-          ;; FIXME: "gapplication launch org.gnome.Weather" fails for some reason.
-          ;; See https://issues.guix.gnu.org/issue/39324.
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (applications (string-append out "/share/applications")))
-              (substitute* (string-append applications "/org.gnome.Weather.desktop")
-                (("Exec=.*") "Exec=gnome-weather\n"))
-              #t)))
-        (add-after 'install 'wrap
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out               (assoc-ref outputs "out"))
-                  (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
-              ;; GNOME Weather needs the typelib files of GTK+, Pango etc at runtime.
-              (wrap-program (string-append out "/bin/gnome-weather")
-                `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))
-              #t))))))
+      ,#~(modify-phases %standard-phases
+           (add-after 'unpack 'fix-service-file
+             (lambda _
+               (substitute* "data/org.gnome.Weather.service.in"
+                 (("Exec=[[:graph:]]+")
+                  (string-append "Exec=" #$output
+                                 "/bin/gnome-weather")))))
+           (add-after 'install 'fix-desktop-file
+             ;; FIXME: "gapplication launch org.gnome.Weather" fails for some
+             ;; reason.  See https://issues.guix.gnu.org/issue/39324.
+             (lambda _
+               (let ((applications
+                      (string-append #$output "/share/applications")))
+                 (substitute* (string-append applications
+                                             "/org.gnome.Weather.desktop")
+                   (("Exec=.*") "Exec=gnome-weather\n")))))
+           (add-after 'install 'wrap
+             (lambda _
+               (let ((gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
+                 ;; GNOME Weather needs the typelib files of GTK+, Pango etc
+                 ;; at runtime.
+                 (wrap-program (string-append #$output "/bin/gnome-weather")
+                   `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
    (synopsis "Weather monitoring for GNOME desktop")
    (description "GNOME Weather is a small application that allows you to
 monitor the current weather conditions for your city, or anywhere in the
@@ -9177,15 +9391,12 @@ world.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     ;; TODO: Add or remove packages according to:
-     ;;       <https://calc.disroot.org/2nu6mpf88ynq.html>.
-     `(
-     ;; GNOME-Core-OS-Services
+     `(;; GNOME-Core-OS-Services
        ("accountsservice" ,accountsservice)
        ("network-manager" ,network-manager)
        ("packagekit" ,packagekit)
        ("upower" ,upower)
-     ;; GNOME-Core-Shell
+       ;; GNOME-Core-Shell
        ("adwaita-icon-theme" ,adwaita-icon-theme)
        ("gdm" ,gdm)
        ("glib-networking" ,glib-networking)
@@ -9194,7 +9405,6 @@ world.")
        ("gnome-color-manager" ,gnome-color-manager)
        ("gnome-control-center" ,gnome-control-center)
        ("gnome-desktop" ,gnome-desktop)
-       ("gnome-getting-started-docs" ,gnome-getting-started-docs)
        ("gnome-initial-setup" ,gnome-initial-setup)
        ("gnome-keyring" ,gnome-keyring)
        ("gnome-menus" ,gnome-menus)
@@ -9211,7 +9421,7 @@ world.")
        ("orca" ,orca)
        ("rygel" ,rygel)
        ("sushi" ,sushi)
-     ;; GNOME-Core-Utilities
+       ;; GNOME-Core-Utilities
        ("baobab" ,baobab)
        ("cheese" ,cheese)
        ;; XXX: EoG requires librsvg-next, which depends on Rust, which currently
@@ -9232,8 +9442,8 @@ world.")
        ("gnome-disk-utility" ,gnome-disk-utility)
        ("gnome-font-viewer" ,gnome-font-viewer)
        ("gnome-maps" ,gnome-maps)
-       ; TODO: ("gnome-music" ,gnome-music)
-       ; TODO: ("gnome-photos" ,gnome-photos)
+       ("gnome-music" ,gnome-music)
+       ("gnome-photos" ,gnome-photos)
        ("gnome-screenshot" ,gnome-screenshot)
        ("gnome-system-monitor" ,gnome-system-monitor)
        ("gnome-terminal" ,gnome-terminal)
@@ -9241,8 +9451,9 @@ world.")
        ("nautilus" ,nautilus)
        ("simple-scan" ,simple-scan)
        ("totem" ,totem)
+       ("tracker-miners" ,tracker-miners)
        ("yelp" ,yelp)
-     ;; Others
+       ;; Others
        ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("gnome-online-accounts" ,gnome-online-accounts)
 
@@ -9251,7 +9462,7 @@ world.")
        ;; XXX: Find out exactly which ones are needed and why.
        ("font-abattis-cantarell"            ,font-abattis-cantarell)
        ("font-dejavu"               ,font-dejavu)
-       ("at-spi2-core"              ,at-spi2-core)
+       ("at-spi2-core"              ,at-spi2-core-minimal)
        ("dbus"                      ,dbus)
        ("dconf"                     ,dconf)
        ("desktop-file-utils"        ,desktop-file-utils)
@@ -9306,18 +9517,15 @@ documents and diagrams, playing media, scanning, and much more.")
                  (("-Werror") ""))
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("gnome-common" ,gnome-common)
-         ("intltool" ,intltool)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("which" ,which)))
+       (list autoconf
+             automake
+             gnome-common
+             intltool
+             libtool
+             pkg-config
+             which))
       (inputs
-       `(("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("gst-plugins-base" ,gst-plugins-base)
-         ("gtk+" ,gtk+)))
+       (list glib gstreamer gst-plugins-base gtk+))
       (synopsis "Desktop recording program")
       (description "Byzanz is a simple desktop recording program with a
 command-line interface.  It can record part or all of an X display for a
@@ -9353,7 +9561,7 @@ specified duration and save it as a GIF encoded animated image file.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -9364,18 +9572,18 @@ specified duration and save it as a GIF encoded animated image file.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy-0.0)
-       ("libsecret" ,libsecret)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-pillow" ,python-pillow)
-       ("python-pyfavicon" ,python-pyfavicon)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyotp" ,python-pyotp)
-       ("python-pyzbar" ,python-pyzbar)
-       ("yoyo-migrations" ,yoyo-migrations)
-       ("zbar" ,zbar)))
+     (list gsettings-desktop-schemas
+           gtk+
+           libhandy-0.0
+           libsecret
+           python-beautifulsoup4
+           python-pillow
+           python-pyfavicon
+           python-pygobject
+           python-pyotp
+           python-pyzbar
+           yoyo-migrations
+           zbar))
     (home-page "https://gitlab.gnome.org/World/Authenticator/")
     (synopsis "Two-factor authentication application built for GNOME")
     (description
@@ -9408,11 +9616,9 @@ Features:
                 "06l80xgykj7x1kqkjvcq06pwj2rmca458zvs053qc55x3sg06bfa"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("vala" ,vala)))
+     (list pkg-config gobject-introspection vala))
     (propagated-inputs
-     `(("libcanberra" ,libcanberra)))   ; in Requires.private of gsound.pc
+     (list libcanberra))   ; in Requires.private of gsound.pc
     (home-page "https://wiki.gnome.org/Projects/GSound")
     (synopsis "GObject wrapper for libcanberra")
     (description
@@ -9435,13 +9641,9 @@ library.")
                 "0zn3s7ryjc3k1abj4k55dr2na844l451nrg9s6cvnnhh569zj99x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection intltool pkg-config))
     (inputs
-     `(("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
-       ("json-glib" ,json-glib)
-       ("rest" ,rest)))
+     (list `(,gnome-online-accounts "lib") json-glib rest))
     (home-page "https://wiki.gnome.org/Projects/Zapojit")
     (synopsis "Library for accessing SkyDrive and Hotmail")
     (description
@@ -9452,15 +9654,15 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
 (define-public gnome-clocks
   (package
     (name "gnome-clocks")
-    (version "3.34.0")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0g7hjk55smhkd09hwa9kag3h5a12l494wj89w9smpdk3ghsmy6b1"))))
+                "02d3jg46sn8d9gd4dsaly22gg5vkbz2gpq4pmwpvncb4rsqk7sn2"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -9470,8 +9672,7 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/post-install.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("vala" ,vala)
        ("pkg-config" ,pkg-config)
@@ -9480,13 +9681,14 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
        ("gettext" ,gettext-minimal)
        ("itstool" ,itstool)))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gsound" ,gsound)
-       ("geoclue" ,geoclue)
-       ("geocode-glib" ,geocode-glib)
-       ("libgweather" ,libgweather)
-       ("gnome-desktop" ,gnome-desktop)))
+     (list glib
+           gtk+
+           gsound
+           geoclue
+           geocode-glib
+           libgweather
+           libhandy
+           gnome-desktop))
     (home-page "https://wiki.gnome.org/Apps/Clocks")
     (synopsis "GNOME's clock application")
     (description
@@ -9497,18 +9699,19 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
 (define-public gnome-calendar
   (package
     (name "gnome-calendar")
-    (version "3.34.2")
+    (version "40.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1bnmd191044zn2kr6f5vg7sm5q59qf7z652awll1f7s6ahijr8rw"))))
+                "0czasxnmbw2zm21lmxam8qixacagciq3f815s809hn0f9byh2dwy"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        ;; gnome-calendar has to be installed before the tests can be run
        ;; https://bugzilla.gnome.org/show_bug.cgi?id=788224
        #:tests? #f
@@ -9530,9 +9733,10 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
        ("libdazzle" ,libdazzle)
        ("libedataserverui" ,evolution-data-server)
        ("libgweather" ,libgweather)
+       ("libhandy" ,libhandy)
        ("geoclue" ,geoclue)))
     (propagated-inputs
-     `(("evolution-data-server" ,evolution-data-server)))
+     (list evolution-data-server))
     (home-page "https://wiki.gnome.org/Apps/Calendar")
     (synopsis "GNOME's calendar application")
     (description
@@ -9543,46 +9747,43 @@ desktop.  It supports multiple calendars, month, week and year view.")
 (define-public gnome-todo
   (package
     (name "gnome-todo")
-    (version "3.28.1")
+    (version "40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "08ygqbib72jlf9y0a16k54zz51sncpq2wa18wp81v46q8301ymy7"))
-              (patches
-               (search-patches "gnome-todo-delete-esource-duplicate.patch"))))
+                "1r1fb3zgjvkhx93by24j8cg1w1g3zvwr49vqkscjn261vqs44jq3"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
-       #:phases (modify-phases %standard-phases
-                  (add-after
-                      'install 'wrap-gnome-todo
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let ((out               (assoc-ref outputs "out"))
-                            (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                            (python-path       (getenv "PYTHONPATH")))
-                        (wrap-program (string-append out "/bin/gnome-todo")
-                          ;; XXX: gi plugins are broken.
-                          ;; See https://bugzilla.gnome.org/show_bug.cgi?id=787212
-                          ;; For plugins.
-                          `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                          `("PYTHONPATH" ":" prefix (,python-path))))
-                      #t)))))
+     `(#:glib-or-gtk? #t
+       ;; XXX: Some tests fail with the following error:
+       ;; Settings schema 'org.gnome.todo' is not installed.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "build-aux/meson/meson_post_install.py"
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
        ("glib:bin" ,glib "bin")         ; For glib-compile-resources
-       ("gtk+-bin" ,gtk+ "bin")         ; For gtk-update-icon-cache
+       ("gtk-bin" ,gtk "bin")           ; For gtk-update-icon-cache
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("rest" ,rest)                   ; For Todoist plugin
+       ("gtk" ,gtk)
        ("json-glib" ,json-glib)         ; For Todoist plugin
+       ("libadwaita" ,libadwaita)
        ("libedataserverui" ,evolution-data-server)
        ("libical" ,libical)
        ("libpeas" ,libpeas)
+       ("libportal" ,libportal)
        ("python-pygobject" ,python-pygobject)
        ("evolution-data-server" ,evolution-data-server)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
@@ -9597,26 +9798,25 @@ fit the GNOME desktop.")
 (define-public gnome-dictionary
   (package
     (name "gnome-dictionary")
-    (version "3.26.1")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "007k2bq8iplg4psdpz074r5d4zxvn4s95qym4rw9hs6giljbrf0n"))))
+                "1d8dhcfys788vv27v34i3s3x3jdvdi2kqn2a5p8c937a9hm0qr9f"))))
     (build-system meson-build-system)
-    (arguments '(#:glib-or-gtk? #t
-                 #:phases (modify-phases %standard-phases
-                            (add-after 'unpack 'patch-install-script
-                              (lambda _
-                                ;; This script attempts to compile glib schemas
-                                ;; and create an empty MIME database.  We do
-                                ;; that elsewhere, so prevent it from running.
-                                (substitute* "build-aux/post-install.sh"
-                                  (("\\[ -z \"\\$DESTDIR\" \\]") "false"))
-                                #t)))))
+    (arguments
+     '(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "build-aux/meson/post-install.py"
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -9625,8 +9825,7 @@ fit the GNOME desktop.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)))
+     (list gsettings-desktop-schemas gtk+))
     (home-page "https://wiki.gnome.org/Apps/Dictionary")
     (synopsis "Look up words in dictionary sources")
     (description
@@ -9637,20 +9836,21 @@ existing databases over the internet.")
 (define-public gnome-tweaks
   (package
     (name "gnome-tweaks")
-    (version "3.34.1")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/gnome-tweaks/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   "gnome-tweaks-" version ".tar.xz"))
               (patches
                (list (search-patch "gnome-tweaks-search-paths.patch")))
               (sha256
                (base32
-                "19y62dj4n5i6v4zpjllxl51dch6ndy8xs45v5aqmmq9xyfrqk5yq"))))
+                "0sn3xsjhnini0f2dyi1ymrr3fb8mi7w5j5lsyw11rc5h67h3ypzr"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59
        #:configure-flags '("-Dlocalstatedir=/tmp"
                            "-Dsysconfdir=/tmp")
        #:imported-modules ((guix build python-build-system)
@@ -9661,31 +9861,37 @@ existing databases over the internet.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "meson-postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t))
+               (("gtk-update-icon-cache") "true"))))
          (add-after 'install 'wrap
            (@@ (guix build python-build-system) wrap))
-         (add-after 'wrap 'wrap-gi-typelib
+         (add-after 'wrap 'wrap-gi-typelib-and-python
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
-               (wrap-program (string-append out "/bin/gnome-tweaks")
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-             #t)))))
-    (native-inputs
-     `(("intltool" ,intltool)
+               (let ((python-path
+                      (string-append out "/lib/python"
+                                     ,(version-major+minor
+                                       (package-version python))
+                                     "/site-packages")))
+                 (wrap-program (string-append out "/bin/gnome-tweaks")
+                   `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
+                   `("GUIX_PYTHONPATH" ":" prefix (,python-path))))))))))
+    (native-inputs
+     `(("glib:bin" ,glib "bin") ; for glib-compile-resources, etc.
+       ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gnome-desktop" ,gnome-desktop)
-       ("gtk+" ,gtk+)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("libhandy" ,libhandy-0.0)
-       ("libnotify" ,libnotify)
-       ("libsoup" ,libsoup)
-       ("nautilus" ,nautilus)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list bash-minimal ; to execute the wrapper program
+           gnome-desktop
+           gtk+
+           gobject-introspection
+           gsettings-desktop-schemas
+           libhandy
+           libnotify
+           libsoup
+           nautilus
+           python
+           python-pygobject))
     (synopsis "Customize advanced GNOME 3 options")
     (home-page "https://wiki.gnome.org/Apps/Tweaks")
     (description
@@ -9698,15 +9904,15 @@ GNOME Shell appearance and extension, etc.")
 (define-public gnome-shell-extensions
   (package
     (name "gnome-shell-extensions")
-    (version "3.34.2")
+    (version "40.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version)  "/"
+                                  (version-major version)  "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1f5l35l3kdkzrv49xmg1sh11vwmgjbg7hx3gb91i39bfl1snxqd1"))))
+                "0yfd1bcwf72dmr1hfh7g8s5cb7snyiyg86575hqx1frbq914q7gm"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags '("-Dextension_set=all")))
@@ -9715,7 +9921,7 @@ GNOME Shell appearance and extension, etc.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Extensions for GNOME Shell")
     (description "GNOME Shell extensions modify and extend GNOME Shell
 functionality and behavior.")
@@ -9725,7 +9931,7 @@ functionality and behavior.")
 (define-public folks
   (package
     (name "folks")
-    (version "0.13.1")
+    (version "0.15.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -9734,7 +9940,7 @@ functionality and behavior.")
                     "folks-" version ".tar.xz"))
               (sha256
                (base32
-                "0pda8sx4ap3lyri5fdrnakl29la1zkhwlc9bmnp13qigp1iwdw9x"))))
+                "19a4qp9ry8y24jx1v5456qn9lnw843571vkkah3bxx4ky3x3gmr1"))))
     (build-system meson-build-system)
     (arguments
      '(#:phases
@@ -9746,16 +9952,17 @@ functionality and behavior.")
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("bdb" ,bdb)
-       ("dbus-glib" ,dbus-glib)
-       ("evolution-data-server" ,evolution-data-server)
-       ("glib" ,glib)
-       ("libgee" ,libgee)
-       ("readline" ,readline)
-       ("telepathy-glib" ,telepathy-glib)))
+     (list bdb
+           dbus-glib
+           evolution-data-server
+           glib
+           libgee
+           readline
+           telepathy-glib))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
+       ("python-dbusmock" ,python-dbusmock)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
@@ -9788,15 +9995,14 @@ compiled.")
                            "--enable-gtk-doc"
                            "--enable-introspection")))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)
-
-       ;; The 0.2.4 ‘release’ tarball isn't bootstrapped.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list gobject-introspection
+           gtk-doc/stable
+           pkg-config
+           ;; The 0.2.4 ‘release’ tarball isn't bootstrapped.
+           autoconf
+           automake
+           libtool
+           which))
     (inputs
      `(("json-glib" ,json-glib)
        ("gnome-online-accounts:lib" ,gnome-online-accounts "lib")
@@ -9821,14 +10027,11 @@ GLib/GObject code.")
                 "0y962ykn3rr9gylj0pwpww7bi20lmhvsw6qvxs5bisbn2mih5jpp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)))
+     (list pkg-config
+           `(,glib "bin") intltool))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxklavier" ,libxklavier)))
+     (list glib gtk+ libxklavier))
     (home-page "https://www.gnome.org")
     (synopsis "GNOME keyboard configuration library")
     (description
@@ -9864,7 +10067,7 @@ environment, which can notably display keyboard layouts.")
        ("gtk-doc" ,gtk-doc/stable)))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://wiki.gnome.org/Attic/LibUnique")
     (synopsis "Library for writing single instance applications")
     (description
@@ -9879,18 +10082,25 @@ handling the startup notification side.")
 (define-public gnome-calculator
   (package
     (name "gnome-calculator")
-    (version "3.34.1")
+    (version "40.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0lbh87255zzggqzai6543qg920y52bl4vs5m5h5087ghzg14hlsd"))))
+         "1xkazxbkpn1z5pfphhps7fc5q4yc8lp7f6b222n8bx5iyxhwbrkz"))))
     (build-system meson-build-system)
-    (arguments '(#:glib-or-gtk? #t))
+    (arguments
+     '(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a writable HOME.
+             (setenv "HOME" (getcwd)))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
@@ -9902,7 +10112,8 @@ handling the startup notification side.")
      `(("glib" ,glib)
        ("gtksourceview" ,gtksourceview)
        ("libgee" ,libgee)
-       ("libsoup" ,libsoup)
+       ("libhandy" ,libhandy)
+       ("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)
        ("mpc" ,mpc)
        ("mpfr" ,mpfr)))
@@ -9928,14 +10139,10 @@ is suitable as a default application in a Desktop environment.")
          "0l0g5x8g6dwhf5ksnqqrjjsycy57kcvdslkmsr6bl3vrsjd7qml3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gtk+:bin" ,gtk+ "bin")
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake
+           `(,gtk+ "bin") intltool pkg-config))
     (inputs
-     `(("gtksourceview" ,gtksourceview-3)
-       ("libsm" ,libsm)))
+     (list gtksourceview-3 libsm))
     (home-page "https://wiki.gnome.org/Apps/Xpad")
     (synopsis "Virtual sticky note")
     (description
@@ -10041,9 +10248,7 @@ only know by its Unicode name or code point.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libportal" ,libportal)))
+     (list gsettings-desktop-schemas gtk+ libportal))
     (home-page "https://www.hjdskes.nl/projects/gcolor3/")
     (synopsis "Simple color chooser written in GTK3")
     (description "Color Picker is a simple color chooser written in GTK3.  It
@@ -10063,15 +10268,9 @@ supports both X and Wayland display servers.")
         (base32 "09hgxq139kbkjda5y073lqhq1z1x7cx0j80jh77afrqa3y9c53wl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list desktop-file-utils intltool pkg-config))
     (inputs
-     `(("enchant" ,enchant)
-       ("gtk+" ,gtk+)
-       ("python" ,python-wrapper)
-       ("xmllint" ,libxml2)
-       ("gucharmap" ,gucharmap)))
+     (list enchant gtk+ python-wrapper libxml2 gucharmap))
     (home-page "http://bluefish.openoffice.nl")
     (synopsis "Web development studio")
     (description
@@ -10083,16 +10282,16 @@ Bluefish supports many programming and markup languages.")
 (define-public gnome-system-monitor
   (package
     (name "gnome-system-monitor")
-    (version "3.32.1")
+    (version "40.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1wd43qdgjav6xamq5z5cy8fri5zr01jga3plc9w95gcia0rk3ha8"))))
+         "06hxd4igxas2kyind5jwfq5qbfkknykpdfy2sy3anylhcx1hzczx"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
@@ -10106,12 +10305,13 @@ Bluefish supports many programming and markup languages.")
        ("polkit" ,polkit)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf) ; for loading SVG files.
-       ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)))
+     (list gdk-pixbuf ; for loading SVG files.
+           gtk+
+           gtkmm-3
+           libhandy
+           librsvg
+           libxml2
+           libwnck))
     (home-page "https://wiki.gnome.org/Apps/SystemMonitor")
     (synopsis "Process viewer and system resource monitor for GNOME")
     (description
@@ -10148,11 +10348,11 @@ from gi.repository import Gtk
 from gi.repository import Atspi"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (synopsis "Python client bindings for D-Bus AT-SPI")
     (home-page "https://wiki.linuxfoundation.org/accessibility\
 /atk/at-spi/at-spi_on_d-bus")
@@ -10173,16 +10373,16 @@ accessibility infrastructure.")
 (define-public orca
   (package
     (name "orca")
-    (version "3.34.1")
+    (version "40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://gnome/sources/" name "/"
-                    (version-major+minor version) "/"
+                    (version-major version) "/"
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1q38n7hyshkiszmn361skxjynxr31lcms7a1iny6d0zlpmh1vnk4"))))
+                "0hq0zdcn80ficpcffbk667907v6m7dih3dhyc7ss01mrj3iyw000"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -10203,8 +10403,8 @@ accessibility infrastructure.")
                    (,(getenv "GI_TYPELIB_PATH")))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
                    (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                 `("PYTHONPATH" ":" prefix
-                   (,(getenv "PYTHONPATH")))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH")))))
              #t)))))
     (native-inputs
      `(("intltool" ,intltool)
@@ -10262,11 +10462,9 @@ that support the Assistive Technology Service Provider Interface (AT-SPI).")
              ;; Allow Enchant and its Aspell backend to find the en_US
              ;; dictionary.
              (setenv "ASPELL_DICT_DIR"
-                     (string-append (assoc-ref inputs "aspell-dict-en")
-                                    "/lib/aspell"))
-             #t)))))
+                     (search-input-directory inputs "/lib/aspell")))))))
     (inputs
-     `(("iso-codes" ,iso-codes)))
+     (list iso-codes))
     (native-inputs
      `(("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -10279,9 +10477,7 @@ that support the Assistive Technology Service Provider Interface (AT-SPI).")
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
      ;; Referred by .pc file.
-     `(("enchant" ,enchant)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list enchant glib gtk+))
     (home-page "https://wiki.gnome.org/Projects/gspell")
     (synopsis "GNOME's alternative spell checker")
     (description
@@ -10313,19 +10509,17 @@ text views, and buttons to choose the language.")
                    '("--build=aarch64-unknown-linux-gnu")
                    '()))))
     (inputs
-     `(("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("libglade" ,libglade)
-       ("gnome-vfs" ,gnome-vfs)
-       ("gconf" ,gconf)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("gtk+" ,gtk+)
-       ("glib" ,glib)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("scrollkeeper" ,scrollkeeper)
-       ("pkg-config" ,pkg-config)))
+     (list libgnomecanvas
+           libgnomeui
+           libglade
+           gnome-vfs
+           gconf
+           libxml2
+           libxslt
+           gtk+
+           glib))
+    (native-inputs
+     (list intltool scrollkeeper pkg-config))
     (home-page "https://wiki.gnome.org/Apps/Planner")
     (synopsis "Project management software for the GNOME desktop")
     (description
@@ -10385,7 +10579,7 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
        ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
        ("libhandy" ,libhandy)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("python" ,python)
        ("python-beautifulsoup4" ,python-beautifulsoup4)
        ("python-gst" ,python-gst)
@@ -10396,10 +10590,9 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
        ("totem-pl-parser" ,totem-pl-parser)
        ("webkitgtk" ,webkitgtk)))
     (propagated-inputs
-     `(;; gst-plugins-base is required to start Lollypop,
-       ;; the others are required to play streaming.
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)))
+     (list ;; gst-plugins-base is required to start Lollypop,
+           ;; the others are required to play streaming.
+           gst-plugins-good gst-plugins-ugly))
     (home-page "https://wiki.gnome.org/Apps/Lollypop")
     (synopsis "GNOME music playing application")
     (description
@@ -10423,8 +10616,7 @@ automatically and it can stream songs from online music services and charts.")
                 "1j6h98whgkcxrh30bwvnxvyqxrxchgpdgqhl0j71xz7x72dqxijd"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (home-page "https://wiki.gnome.org/Projects/GnomeVideoEffects")
     (synopsis "Video effects for Cheese and other GNOME applications")
     (description
@@ -10443,9 +10635,11 @@ photo-booth-like software, such as Cheese.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8"))))
+                "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8"))
+              (patches (search-patches "cheese-vala-update.patch"))))
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        ;; Tests require GDK.
        #:tests? #f
        #:phases
@@ -10485,23 +10679,23 @@ photo-booth-like software, such as Cheese.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("gnome-video-effects" ,gnome-video-effects)
-       ("clutter" ,clutter)
-       ("clutter-gst" ,clutter-gst)
-       ("clutter-gtk" ,clutter-gtk)
-       ("libcanberra" ,libcanberra)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gstreamer" ,gstreamer)))
-    (inputs
-     `(("gnome-desktop" ,gnome-desktop)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)))
+     (list gnome-video-effects
+           clutter
+           clutter-gst
+           clutter-gtk
+           libcanberra
+           gdk-pixbuf
+           glib
+           gstreamer))
+    (inputs
+     (list gnome-desktop
+           gobject-introspection
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-bad
+           gtk+
+           libx11
+           libxtst))
     (home-page "https://wiki.gnome.org/Apps/Cheese")
     (synopsis "Webcam photo booth software for GNOME")
     (description
@@ -10537,7 +10731,7 @@ apply fancy special effects and lets you share the fun with others.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -10548,13 +10742,13 @@ apply fancy special effects and lets you share the fun with others.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("libpwquality" ,libpwquality)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pykeepass" ,python-pykeepass)))
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           libhandy
+           libpwquality
+           python-pygobject
+           python-pykeepass))
     (home-page "https://gitlab.gnome.org/World/PasswordSafe")
     (synopsis "Password manager for the GNOME desktop")
     (description
@@ -10578,23 +10772,19 @@ and uncluttered interface for the management of password databases.")
          "19qg4xv0f9rkq34lragkmhii1llxsa87llbl28i759b0ks4f6sny"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("iso-codes" ,iso-codes)
-       ("libbrasero-media3" ,brasero)
-       ("libcanberra" ,libcanberra)
-       ("libdiscid" ,libdiscid)
-       ("libmusicbrainz" ,libmusicbrainz)
-       ("neon" ,neon)))
+     (list desktop-file-utils intltool itstool pkg-config libxml2))
+    (inputs
+     (list gtk+
+           gsettings-desktop-schemas
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           iso-codes
+           brasero
+           libcanberra
+           libdiscid
+           libmusicbrainz
+           neon))
     (home-page "https://wiki.gnome.org/Apps/SoundJuicer")
     (synopsis "Audio music cd ripper")
     (description "Sound Juicer extracts audio from compact discs and convert it
@@ -10645,11 +10835,7 @@ mp3, Ogg Vorbis and FLAC")
        ("pkg-config" ,pkg-config)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gtk+ python python-pygobject gstreamer gst-plugins-base))
     (home-page "https://soundconverter.org/")
     (synopsis "Convert between audio formats with a graphical interface")
     (description
@@ -10677,17 +10863,17 @@ configurable file renaming. ")
     (arguments
      ;; The only tests are maintainer tests (in po/), which fail.
      `(#:tests? #f))
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("gtkmm" ,gtkmm)
-              ("glibmm" ,glibmm)
-              ("libx11" ,libx11)
-              ("libxtst" ,libxtst)
-              ("dconf" ,dconf)
-              ("libice" ,libice)
-              ("libsm" ,libsm)
-              ("libxscrnsaver" ,libxscrnsaver)))
+    (inputs (list glib
+                  gtk+
+                  gdk-pixbuf
+                  gtkmm-3
+                  glibmm
+                  libx11
+                  libxtst
+                  dconf
+                  libice
+                  libsm
+                  libxscrnsaver))
     (native-inputs `(("boost" ,boost)
                      ("pkg-config" ,pkg-config)
                      ("gettext" ,gettext-minimal)
@@ -10770,15 +10956,12 @@ hexadecimal or ASCII.  It is useful for editing binary files in general.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-compile-resources
-       ("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list `(,glib "bin") ; glib-compile-resources
+           pkg-config
+           ;; For tests.
+           xorg-server-for-tests))
     (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("vala" ,vala)))
+     (list glib gobject-introspection gtk+ vala))
     (home-page "https://gitlab.gnome.org/GNOME/libdazzle")
     (synopsis "Companion library to GObject and Gtk+")
     (description "The libdazzle library is a companion library to GObject and
@@ -10791,7 +10974,7 @@ generic enough to work for everyone.")
 (define-public evolution
   (package
     (name "evolution")
-    (version "3.34.2")
+    (version "3.42.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/evolution/"
@@ -10799,8 +10982,7 @@ generic enough to work for everyone.")
                                   "evolution-" version ".tar.xz"))
               (sha256
                (base32
-                "164vy8h432pjglafn8y2ms4gsvk3kbgc63h5qp0mk5dv4smsp29c"))
-              (patches (search-patches "evolution-CVE-2020-11879.patch"))))
+                "0igfzapdvgfx2gnpwfkjfkn7l5j186wk88ni39vqas1sl7ijlls6"))))
     (build-system cmake-build-system)
     (arguments
      `(#:imported-modules (,@%cmake-build-system-modules
@@ -10822,17 +11004,14 @@ generic enough to work for everyone.")
              (substitute* "src/modules/alarm-notify/CMakeLists.txt"
                (("\\$\\{edsuimoduledir\\}")
                 (string-append (assoc-ref outputs "out")
-                               "/lib/evolution-data-server/ui-modules")))
-             #t))
+                               "/lib/evolution-data-server/ui-modules")))))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'install 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib" ,glib "bin")             ; glib-mkenums
-       ("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)))
+     (list `(,glib "bin") ; glib-mkenums
+           pkg-config intltool itstool))
     (inputs
      `(("enchant" ,enchant)
        ("evolution-data-server" ,evolution-data-server) ; must be the same version
@@ -10848,7 +11027,7 @@ generic enough to work for everyone.")
        ("libsoup" ,libsoup)
        ("nss" ,nss)
        ("openldap" ,openldap)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2) ; because of evolution-data-server
        ("ytnef" ,ytnef)))
     (home-page "https://gitlab.gnome.org/GNOME/evolution")
     (synopsis "Manage your email, contacts and schedule")
@@ -10875,6 +11054,11 @@ functionality.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+
+       ;; See
+       ;; <https://github.com/mesonbuild/meson/issues/9492#issuecomment-973117289>.
+       #:meson ,meson-0.59
+
        #:configure-flags
        ;; Ensure the RUNPATH contains all installed library locations.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -10945,7 +11129,7 @@ advanced image management tool")
        ("python-pygobject" ,python-pygobject)
        ("vte" ,vte)))
     (propagated-inputs
-     `(("python-configobj" ,python-configobj)))
+     (list python-configobj))
     (arguments
      ;; One test out of 28 fails due to dbus-python and python-notify; skip
      ;; tests.
@@ -10962,8 +11146,7 @@ advanced image management tool")
              ;; python-dbus cannot be found but it's really there.  See
              ;; https://github.com/SpotlightKid/jack-select/issues/2
              (substitute* "setup.py"
-               (("'dbus-python',") ""))
-             #t))
+               (("'dbus-python',") ""))))
          (add-after 'install 'wrap-program
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((prog (string-append (assoc-ref outputs "out")
@@ -10974,9 +11157,8 @@ advanced image management tool")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t)))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (home-page "https://gnome-terminator.org/")
@@ -10989,7 +11171,7 @@ tabs, and it supports drag and drop re-ordering of terminals.")
 (define-public libhandy
   (package
     (name "libhandy")
-    (version "1.2.2")
+    (version "1.2.3")
     (source
      (origin
        (method git-fetch)
@@ -10998,14 +11180,26 @@ tabs, and it supports drag and drop re-ordering of terminals.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0345x7gif6yjm95y62lww71lj84wfwsr2p32r3iww8shavb8scyk"))))
+        (base32 "1ng2607cp4dfl169rj7zi8q5p6fzxy3a4l0glm7mj75yd1a603rz"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
        '("-Dglade_catalog=enabled"
-         "-Dgtk_doc=true")
+         ;; XXX: Generating the documentation fails because the
+         ;; libhandy.devhelp2 document cannot be created. This seems to be
+         ;; caused by a problem during the XSL transformation.
+         "-Dgtk_doc=false")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (for-each
+              (lambda (file)
+                (substitute* file
+                  (("http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd")
+                   (search-input-file inputs
+                                      "/xml/dtd/docbook/docbookx.dtd"))))
+              (find-files "doc" "\\.xml"))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
@@ -11013,13 +11207,15 @@ tabs, and it supports drag and drop re-ordering of terminals.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glade" ,glade3)
-       ("libxml2" ,libxml2)))
+     (list gtk+ glade3))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
        ("vala" ,vala)
+       ("libxml2" ,libxml2)
+       ("libxslt" ,libxslt)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml-4.3)
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
@@ -11066,18 +11262,17 @@ for usage on small and big screens.")
                 "1pmrcnsa7qdda73c3dxf47733mwprmj5ljpw3acxbj6r8k27anp0"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin") ;; For glib-mkenums
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("python-pygobject" ,python-pygobject)
-       ("python-wrapper" ,python-wrapper)
-       ("vala" ,vala)))
+     (list `(,glib "bin") ;; For glib-mkenums
+           gobject-introspection
+           pkg-config
+           python-pygobject
+           python-wrapper
+           vala))
     (inputs
-     `(("glib" ,glib)
-       ("libssh2" ,libssh2)))
+     (list glib libssh2))
     (propagated-inputs
-     `(;; In Requires of libgit2-glib.pc.
-       ("libgit2" ,libgit2)))
+     (list ;; In Requires of libgit2-glib.pc.
+           libgit2))
     (synopsis "GLib wrapper around the libgit2 Git access library")
     (description "libgit2-glib is a GLib wrapper library around the libgit2 Git
 access library.  It only implements the core plumbing functions, not really the
@@ -11122,19 +11317,19 @@ higher level porcelain stuff.")
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("gtksourceview" ,gtksourceview-3)
-       ("json-glib" ,json-glib)
-       ("libdazzle" ,libdazzle)
-       ("libgee" ,libgee)
-       ("libgit2-glib" ,libgit2-glib)
-       ("libpeas" ,libpeas)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           gtkspell3
+           gtksourceview-3
+           json-glib
+           libdazzle
+           libgee
+           libgit2-glib
+           libpeas
+           libsecret
+           libsoup
+           libxml2))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gtk+:bin" ,gtk+ "bin")
@@ -11167,6 +11362,13 @@ repository and commit your work.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; The 'config.sub' is too old to recognise aarch64.
+         ,@(if (and=> (%current-target-system) target-aarch64?)
+               `((add-after 'unpack 'replace-config.sub
+                   (lambda _
+                     (delete-file "config.sub")
+                     (symlink (which "config.sub") "config.sub"))))
+               '())
          (add-after 'unpack 'remove-deprecated-macro
            (lambda _
              (substitute* '("server/gam_node.c"
@@ -11174,12 +11376,38 @@ repository and commit your work.")
                             "server/gam_node.h"
                             "server/gam_subscription.c")
                (("G_CONST_RETURN") "const"))
-             #t)))))
-    (inputs
-     `(("glib" ,glib)))
+             #t))
+         ;; The configure script runs a test program unconditionally,
+         ;; without an option to manually set the test result.
+         ;; Override this test anyway.
+         ,@(if (%current-target-system)
+               `((add-after 'bootstrap 'set-have-abstract-sockets
+                   (lambda _
+                     (define in-abstract-sockets-test? #f)
+                     (substitute* "configure"
+                       (("^#### Abstract sockets\n$")
+                        (set! in-abstract-sockets-test? #t)
+                        "#### Abstract sockets\n")
+                       (("^have_abstract_sockets=no\n$")
+                        (set! in-abstract-sockets-test? #f)
+                        ;; ‘Abstract sockets’ appear to be Linux-only.
+                        (string-append "have_abstract_sockets="
+                                       ,(if (target-linux?)
+                                            "yes"
+                                            "no")
+                                       "\nif false; then\nif false; then :\n"))
+                       (("^(.*\n)$" line)
+                        (if in-abstract-sockets-test?
+                            "" ; delete
+                            line))))))
+               '()))))
+    (inputs
+     (list glib))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ,@(if (and=> (%current-target-system) target-aarch64?)
+             `(("config" ,config))
+             '())))
     (home-page "https://people.gnome.org/~veillard/gamin/")
     (synopsis "File alteration monitor")
     (description
@@ -11213,11 +11441,9 @@ library which detects when a file or a directory has been modified.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)))
+     (list glib gtk+ librsvg))
     (synopsis "Mahjongg tile-matching game")
     (description "GNOME Mahjongg is a game based on the classic Chinese
 tile-matching game Mahjong.  It features multiple board layouts, tile themes,
@@ -11266,34 +11492,34 @@ index files needed for Adwaita to be used outside of GNOME.")
 (define-public gnote
   (package
     (name "gnote")
-    (version "3.38.1")
+    (version "40.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/" name "/"
-                           (version-major+minor version)  "/"
+                           (version-major version)  "/"
                            "gnote-" version ".tar.xz"))
        (sha256
-        (base32 "1adjfjhmsm2d33999khjyzvli6kiz1jlzavn77jhd49kfzhxa9y4"))))
+        (base32 "01fqdfgcl32cf40jw9q0h7f5bghl1lvf89vln1lh41ncrk0iw6vy"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("unittest-cpp" ,unittest-cpp))) ;FIXME: not found by pkg-config
-    (inputs
-     `(("glibmm" ,glibmm)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
-       ("libsecret" ,libsecret)
-       ("libuuid" ,util-linux "lib")
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list desktop-file-utils
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           itstool
+           pkg-config
+           unittest-cpp)) ;FIXME: not found by pkg-config
+    (inputs
+     (list glibmm
+           gsettings-desktop-schemas
+           gspell
+           gtk+
+           gtkmm-3
+           libsecret
+           `(,util-linux "lib")
+           libxml2
+           libxslt))
     (synopsis "Note-taking application for the GNOME desktop")
     (description
      "Gnote is a note-taking application written for the GNOME desktop
@@ -11331,15 +11557,15 @@ environment.")
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gjs" ,gjs)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("telepathy-glib" ,telepathy-glib)
-       ("telepathy-logger" ,telepathy-logger)))
+     (list glib
+           gsettings-desktop-schemas
+           gspell
+           gtk+
+           gjs
+           libsecret
+           libsoup
+           telepathy-glib
+           telepathy-logger))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -11347,8 +11573,7 @@ environment.")
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (propagated-inputs
-     `(("telepathy-idle" ,telepathy-idle)
-       ("telepathy-mission-control" ,telepathy-mission-control)))
+     (list telepathy-idle telepathy-mission-control))
     (synopsis "Simple IRC Client")
     (description
      "Polari is a simple Internet Relay Chat (IRC) client that is designed to
@@ -11359,26 +11584,29 @@ integrate seamlessly with the GNOME desktop.")
 (define-public gnome-boxes
   (package
     (name "gnome-boxes")
-    (version "3.36.6")
+    (version "41.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://gnome/sources/gnome-boxes/"
-                           (version-major+minor version) "/"
+                           (version-major version) "/"
                            "gnome-boxes-" version ".tar.xz"))
        (sha256
-        (base32 "0c3cw90xqqcpacc2z06ljs0gg8saxizfgjzg9alhpwgz3gl4c5pg"))))
+        (base32 "1wzhm8n485cqhbai4qshgrwl05ix881g8gjshilrj6vg8p1li79h"))
+       (patches
+        (search-patches "gnome-boxes-add-guix-logo.patch"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
+       #:glib-or-gtk? #t
        #:configure-flags (list "-Drdp=false"
                                (string-append "-Dc_link_args=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
                                               "/lib/gnome-boxes"))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")             ; for glib-compile-resources
-       ("gtk+:bin" ,gtk+ "bin")             ; for gtk-update-icon-cache
-       ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
+     `(("glib:bin" ,glib "bin")                   ;for glib-compile-resources
+       ("gtk+:bin" ,gtk+ "bin")                   ;for gtk-update-icon-cache
+       ("desktop-file-utils" ,desktop-file-utils) ;for update-desktop-database
        ("itstool" ,itstool)
        ("intltool" ,intltool)
        ("vala" ,vala)
@@ -11389,9 +11617,12 @@ integrate seamlessly with the GNOME desktop.")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk" ,gtk+)
        ("gtk-vnc" ,gtk-vnc)
+       ("gtksourceview" ,gtksourceview)
+       ("json-glib" ,json-glib)
+       ("libhandy" ,libhandy)
        ("libosinfo" ,libosinfo)
        ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libusb" ,libusb)
        ("libvirt" ,libvirt)
        ("libvirt-glib" ,libvirt-glib)
@@ -11399,7 +11630,7 @@ integrate seamlessly with the GNOME desktop.")
        ("spice-gtk" ,spice-gtk)
        ("sparql-query" ,sparql-query)
        ("vte" ,vte)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2) ;for webkit2gtk-4.0
        ("tracker" ,tracker)
        ("libgudev" ,libgudev)))
     (home-page "https://wiki.gnome.org/Apps/Boxes")
@@ -11418,34 +11649,46 @@ these services on the Guix System.")
 (define-public geary
   (package
     (name "geary")
-    (version "3.34.1")
+    (version "40.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://gitlab.gnome.org/GNOME/geary")
-                    (commit version)))
+                    (url "https://gitlab.gnome.org/GNOME/geary.git")
+                    (commit (string-append "gnome-" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01cc921kyh3zxz07biqbdzkjgmdcc36kwjyajm4y382a75cl5zg7"))
-              (patches (search-patches "geary-CVE-2020-24661.patch"))))
+                "04hvw86r8sczvjm1z3ls5y5y5h6nyfb648rjkfx05ib00mqq5v1x"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:configure-flags
+       '("-Dprofile=release")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-failing-tests
                     (lambda _
-                      (substitute* "test/meson.build"
-                        (("test\\('client-tests', geary_test_client_bin\\)")
-                         ""))
-                      #t))
+                      (substitute* "test/test-client.vala"
+                        (("client.add_suite\\(new Application.CertificateManagerTest\\(\\).suite\\);")
+                         ""))))
+                  (add-after 'unpack 'generate-vapis
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; It’s not possible to generate the GMime vapi, because
+                      ;; there’s custom metadata that gmime didn’t
+                      ;; install. Thus, the vapi should be built and installed
+                      ;; with gmime.
+                      (define gmime
+                        (assoc-ref inputs "gmime"))
+                      (copy-file (string-append gmime "/share/vala/vapi/gmime-3.0.vapi")
+                                 "bindings/vapi/gmime-3.0.vapi")))
                   (add-after 'unpack 'disable-postinstall-script
                     (lambda _
-                      (substitute* "meson.build"
-                        (("meson.add_install_script\\(\
-join_paths\\('build-aux', 'post_install.py'\\)\\)")
-                         ""))
-                      #t))
+                      (substitute* "build-aux/post_install.py"
+                        (("gtk-update-icon-cache")
+                         "true"))))
+                  (add-before 'check 'setup-home
+                    (lambda _
+                      ;; Tests require a writable HOME.
+                      (setenv "HOME" (getcwd))))
                   (add-before 'check 'setup-xvfb
                     (lambda _
                       (system "Xvfb :1 &")
@@ -11455,28 +11698,33 @@ join_paths\\('build-aux', 'post_install.py'\\)\\)")
        ("folks" ,folks)
        ("gcr" ,gcr)
        ("glib" ,glib)
-       ("gmime" ,gmime-2.6)
+       ("gmime" ,gmime)
        ("gnome-online-accounts:lib"
         ,gnome-online-accounts "lib")
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gspell" ,gspell)
+       ("gsound" ,gsound)
        ("gtk+" ,gtk+)
        ("iso-codes" ,iso-codes)
        ("json-glib" ,json-glib)
        ("libcanberra" ,libcanberra)
        ("libgee" ,libgee)
-       ("libhandy" ,libhandy-0.0)
+       ("libhandy" ,libhandy)
        ("libpeas" ,libpeas)
        ("libsecret" ,libsecret)
+       ("libstemmer" ,libstemmer)
        ("libunwind" ,libunwind)
        ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("ytnef" ,ytnef)))
     (native-inputs
      `(("appstream-glib" ,appstream-glib)
        ("cmake-minimal" ,cmake-minimal)
        ("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
+       ("glib" ,glib)
        ("glib:bin" ,glib "bin")
+       ("gmime" ,gmime)
        ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("itstool" ,itstool)
@@ -11526,9 +11774,9 @@ to.")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libxml2" ,libxml2)))
+     (list gtk+ librsvg libxml2))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (home-page "https://glabels.org/")
     (synopsis "Program for creating labels and business cards")
     (description
@@ -11537,11 +11785,10 @@ designed to work with various laser/ink-jet peel-off label and business
 card sheets that you’ll find at most office supply stores.")
     (license license:gpl3+)))
 
-;; Version 3.38.0 is out but requires tepl>=5 which requires glib>=2.64.
 (define-public gnome-latex
   (package
     (name "gnome-latex")
-    (version "3.36.0")
+    (version "3.38.0")
     (source
      (origin
        (method url-fetch)
@@ -11549,28 +11796,28 @@ card sheets that you’ll find at most office supply stores.")
                            (version-major+minor version)  "/"
                            "gnome-latex-" version ".tar.xz"))
        (sha256
-        (base32 "1869kr1zhcp04mzbi67lwgk497w840dbbc7427i9yh9b9s7j6mqn"))))
+        (base32 "0xqd49pgi82dygqnxj08i1v22b0vwwhx3zvdinhrx4jny339yam8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
-    (inputs
-     `(("amtk" ,amtk)
-       ("dconf" ,dconf)
-       ("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("libgee" ,libgee)
-       ("tepl" ,tepl)
-       ("uchardet" ,uchardet)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           gtk-doc/stable
+           intltool
+           itstool
+           pkg-config
+           vala))
+    (inputs
+     (list amtk
+           dconf
+           glib
+           gsettings-desktop-schemas
+           gspell
+           gtk+
+           gtksourceview
+           libgee
+           tepl-5
+           uchardet))
     (home-page "https://wiki.gnome.org/Apps/GNOME-LaTeX")
     (synopsis "LaTeX editor for the GNOME desktop")
     (description
@@ -11608,7 +11855,7 @@ and toolbars.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -11670,26 +11917,26 @@ GTK+.  It integrates well with the GNOME desktop environment.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
-                 `("PATH" prefix (,(string-append (assoc-ref inputs "pandoc")
-                                                  "/bin"))))
-               #t))))))
-    (inputs
-     `(("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gspell" ,gspell)
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("pandoc" ,pandoc)
-       ("python-chardet" ,python-chardet)
-       ("python-levenshtein" ,python-levenshtein)
-       ("python-regex" ,python-regex)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyenchant" ,python-pyenchant)
-       ("python-pypandoc" ,python-pypandoc)
-       ("webkitgtk" ,webkitgtk)))
+                 `("PATH" prefix (,(dirname
+                                    (search-input-file inputs
+                                                       "/bin/pandoc")))))))))))
+    (inputs
+     (list glib
+           gobject-introspection
+           gspell
+           gtk+
+           libhandy
+           pandoc
+           python-chardet
+           python-levenshtein
+           python-regex
+           python-pycairo
+           python-pygobject
+           python-pyenchant
+           python-pypandoc
+           webkitgtk))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -11733,15 +11980,12 @@ It uses pandoc as back-end for parsing Markdown.")
                     (pygo (string-append
                            (assoc-ref inputs "python-pygobject") site))
                     (python-wrap
-                     `("PYTHONPATH" = (,evdev ,pygo))))
+                     `("GUIX_PYTHONPATH" = (,evdev ,pygo))))
                (wrap-program (string-append out "/bin/" "ratbagctl")
                  python-wrap)
                #t))))))
     (native-inputs
-     `(("check" ,check)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)
-       ("valgrind" ,valgrind)))
+     (list check pkg-config swig valgrind))
     (inputs
      `(("glib" ,glib)
        ("json-glib" ,json-glib)
@@ -11875,14 +12119,14 @@ provided there is a DBus service present:
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (inputs
-     `(("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gstreamer" ,gstreamer)
-       ("gtk+" ,gtk+)
-       ("iso-codes" ,iso-codes)
-       ("pocketsphinx" ,pocketsphinx)
-       ("pulseaudio" ,pulseaudio)
-       ("sphinxbase" ,sphinxbase)))
+     (list gst-plugins-base
+           gst-plugins-good
+           gstreamer
+           gtk+
+           iso-codes
+           pocketsphinx
+           pulseaudio
+           sphinxbase))
     (home-page "https://www.parlatype.org")
     (synopsis "GNOME audio player for transcription")
     (description "Parlatype is an audio player for the GNOME desktop
@@ -11904,13 +12148,11 @@ audio files.")
                 "0j05x4xv2cp3cbmp30m68z8g4rdw7b030ip4wszyfj9ya15v5kni"))))
     (build-system meson-build-system)
     (inputs
-     `(("json-glib" ,json-glib)
-       ("glib" ,glib)))
+     (list json-glib glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("vala" ,vala)))
+     (list pkg-config
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           gobject-introspection vala))
     (home-page "https://gitlab.gnome.org/GNOME/jsonrpc-glib")
     (synopsis "JSON-RPC library for GLib")
     (description "Jsonrpc-GLib is a library to communicate with JSON-RPC based
@@ -11935,17 +12177,11 @@ host to avoid parser overhead and memory-allocator fragmentation.")
                 "1wbkzxnqjydfgjvp7vz4ghczcz740zcb1yn90cb6gb5md4n6qx2y"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list `(,glib "bin") gobject-introspection pkg-config vala))
     (inputs
-     `(("dbus" ,dbus)
-       ("gsound" ,gsound)
-       ("json-glib" ,json-glib)
-       ("libgudev" ,libgudev)))
+     (list dbus gsound json-glib libgudev))
     (propagated-inputs
-     `(("glib" ,glib))) ; in Requires of libfeedback-0.0.pc
+     (list glib)) ; in Requires of libfeedback-0.0.pc
     (synopsis "Haptic/visual/audio feedback via DBus")
     (description "Feedbackd provides a DBus daemon to act on events to provide
 haptic, visual and audio feedback.  It offers the libfeedbackd library and
@@ -11957,7 +12193,7 @@ GObject introspection bindings.")
 (define-public sysprof
   (package
     (name "sysprof")
-    (version "3.36.0")
+    (version "3.42.1")
     (source
      (origin
        (method url-fetch)
@@ -11965,7 +12201,7 @@ GObject introspection bindings.")
                            (version-major+minor version) "/"
                            "sysprof-" version ".tar.xz"))
        (sha256
-        (base32 "024i0gzqnm79rpr4gqxdvcj6gvf82xdlcp2p1k9ikcppmi6xnw46"))))
+        (base32 "0090986ar3lz9m9fy7l5y9ibzzmgsx54cm6gp8ggsxgf0habi5hp"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -11981,11 +12217,10 @@ GObject introspection bindings.")
                (("gtk-update-icon-cache") "true")
                (("update-desktop-database") "true"))
              #t)))))
+    (propagated-inputs
+     (list polkit))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libdazzle" ,libdazzle)
-       ("polkit" ,polkit)))
+     (list glib gtk+ json-glib libdazzle polkit))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
@@ -12008,25 +12243,22 @@ libraries.  Applications do not need to be recompiled--or even restarted.")
 (define-public gnome-builder
   (package
     (name "gnome-builder")
-    (version "3.36.1")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "17pvmd5jypar8dkr6w56hvf7jnq4l1wih2wwgkrv7sblr7rkkar2"))))
+                "04p031i999dccbnlbysmr6f93x7dji7b559j6yhdsqbqgxb7ncan"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags (list "-Dnetwork_tests=false"
+     `(#:glib-or-gtk? #t     ; To wrap binaries and compile schemas
+       #:configure-flags (list "-Dnetwork_tests=false"
                                ;; TODO: Enable all plugins...
-                               "-Dplugin_clang=false"
+                               ;; Flatpak plugin wants libsoup 2
                                "-Dplugin_flatpak=false"
-                               "-Dplugin_glade=false"
-                               ;; XXX: This one has been shown not to work in
-                               ;;      <https://issues.guix.gnu.org/45272>
-                               "-Dplugin_jedi=false"
                                ;; ... except this one.
                                "-Dplugin_update_manager=false")
        #:phases
@@ -12039,8 +12271,7 @@ libraries.  Applications do not need to be recompiled--or even restarted.")
              (substitute* "src/libide/meson.build"
                (("/usr/lib")
                 (string-append (assoc-ref inputs "python-pygobject")
-                               "/lib")))
-             #t))
+                               "/lib")))))
          (add-after 'configure 'fix-ninja
            (lambda _
              ;; #43296: meson(?) incorrectly assumes we want to link
@@ -12054,7 +12285,10 @@ libraries.  Applications do not need to be recompiled--or even restarted.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (inputs
-     `(("devhelp" ,devhelp)
+     `(("cmark" ,cmark)
+       ("clang" ,clang)
+       ("devhelp" ,devhelp-with-libsoup2)
+       ("glade" ,glade3)
        ("gspell" ,gspell)
        ("gtk+" ,gtk+)
        ("json-glib" ,json-glib)
@@ -12062,13 +12296,16 @@ libraries.  Applications do not need to be recompiled--or even restarted.")
        ("libdazzle" ,libdazzle)
        ("libgit2-glib" ,libgit2-glib)
        ("libpeas" ,libpeas)
+       ("libportal" ,libportal)
+       ("libsoup" ,libsoup-minimal-2)
+       ("llvm" ,llvm)
        ("python-pygobject" ,python-pygobject)
        ("sysprof" ,sysprof)
        ("template-glib" ,template-glib)
        ("vte" ,vte)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (propagated-inputs
-     `(("gtksourceview" ,gtksourceview)))         ;needed for settings
+     (list gtksourceview))         ;needed for settings
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
        ("glib:bin" ,glib "bin")
@@ -12120,29 +12357,29 @@ integrated profiler via Sysprof, debugging support, and more.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/komikku")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-brotli" ,python-brotli)
-       ("python-cloudscraper" ,python-cloudscraper)
-       ("python-dateparser" ,python-dateparser)
-       ("python-keyring" ,python-keyring)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-natsort" ,python-natsort)
-       ("python-pillow" ,python-pillow)
-       ("python-pure-protobuf" ,python-pure-protobuf)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-requests" ,python-requests)
-       ("python-unidecode" ,python-unidecode)
-       ("webkitgtk" ,webkitgtk)))
+     (list gtk+
+           libhandy
+           libnotify
+           libsecret
+           python-beautifulsoup4
+           python-brotli
+           python-cloudscraper
+           python-dateparser
+           python-keyring
+           python-lxml
+           python-magic
+           python-natsort
+           python-pillow
+           python-pure-protobuf
+           python-pycairo
+           python-pygobject
+           python-requests
+           python-unidecode
+           webkitgtk))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
        ("gettext" ,gettext-minimal)
@@ -12168,10 +12405,15 @@ developed with the aim of being used with the Librem 5 phone.")
                                                version "." "_")))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18rg773gq9v3cdywpmrp12c5xyp97ir9yqjinccpi22sksb1kl8a"))))
+        (base32 "18rg773gq9v3cdywpmrp12c5xyp97ir9yqjinccpi22sksb1kl8a"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove the bundled sqlite, but keep its header because code relies
+        ;; on this header variant.
+        '(delete-file "libgda/sqlite/sqlite-src/sqlite3.c"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--enable-vala")
+     `(#:configure-flags '("--enable-system-sqlite" "--enable-vala")
        ;; There's a race between check_cnc_lock and check_threaded_cnc
        ;; in tests/multi-threading.
        #:parallel-tests? #f
@@ -12202,15 +12444,16 @@ developed with the aim of being used with the Librem 5 phone.")
                         (string-append moduledir "/" shlib))
                #t))))))
     (propagated-inputs
-     `(("libxml2" ,libxml2)))           ; required by libgda-5.0.pc
+     (list libxml2))           ; required by libgda-5.0.pc
     (inputs
-     `(("glib" ,glib)
-       ("glade" ,glade3)
-       ("gtk+" ,gtk+)
-       ("libsecret" ,libsecret)
-       ("libxslt" ,libxslt)
-       ("openssl" ,openssl)
-       ("vala" ,vala)))
+     (list glib
+           glade3
+           gtk+
+           libsecret
+           libxslt
+           openssl
+           sqlite
+           vala))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("autoconf-archive" ,autoconf-archive)
@@ -12238,15 +12481,15 @@ your data.")
 (define-public gtranslator
   (package
     (name "gtranslator")
-    (version "3.36.0")
+    (version "40.0")
         (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version) "/"
+                                  (version-major version) "/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1lxd2nkji4jk8g2xmyc1a1r3ww710ddk91zh9psmx8xlb4xivaid"))))
+                "0d48nc11z0m91scy21ah56ysxns82zvswx8lglvlkig1vqvblgpc"))))
     (build-system meson-build-system)
     (inputs
      `(("json-glib" ,json-glib)
@@ -12258,15 +12501,17 @@ your data.")
        ("gspell" ,gspell)
        ("libdazzle" ,libdazzle)
        ("libgda" ,libgda)
-       ("libsoup" ,libsoup)))
+       ("libhandy" ,libhandy)
+       ("libsoup" ,libsoup-minimal-2)))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("gtksourceview" ,gtksourceview))) ; required for source view
+     (list gtksourceview)) ; required for source view
     (arguments
-     `(#:build-type "release"
+     `(#:meson ,meson-0.59
+       #:build-type "release"
        #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
@@ -12312,7 +12557,7 @@ world.")
                                           (package-version python))
                                         "/site-packages")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                `("PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (native-inputs
@@ -12348,6 +12593,47 @@ world.")
 Document Analysis and Recognition program.")
     (license license:gpl3+)))
 
+(define-public libadwaita
+  (let ((commit "8d66b987a19979d9d7b85dacc6bad5ce0c8743fe")
+        (revision "1"))
+    (package
+      (name "libadwaita")
+      (version (git-version "0.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.gnome.org/GNOME/libadwaita.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0i3wav6jsyi4w4i2r1rad769m5y5s9djj4zqb7dfyh0bad24ba3q"))))
+      (build-system meson-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'pre-check
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Tests require a running X server.
+               (system "Xvfb :1 &")
+               (setenv "DISPLAY" ":1"))))))
+      (native-inputs
+       `(("sassc" ,sassc)
+         ("glib:bin" ,glib "bin")
+         ("gtk-doc" ,gtk-doc/stable)
+         ("pkg-config" ,pkg-config)
+         ("vala" ,vala)
+         ("xvfb" ,xorg-server-for-tests)))
+      (inputs
+       (list gtk gobject-introspection libportal))
+      (home-page "https://gnome.pages.gitlab.gnome.org/libadwaita/")
+      (synopsis "Building blocks for GNOME applications")
+      (description
+       "@code{libadwaita} offers widgets and objects to build GNOME
+applications scaling from desktop workstations to mobile phones.  It is the
+successor of @code{libhandy} for GTK4.")
+      (license license:lgpl2.1+))))
+
 (define-public gnome-power-manager
   (package
     (name "gnome-power-manager")
@@ -12362,15 +12648,10 @@ Document Analysis and Recognition program.")
                 "0drfn3wcc8l4n07qwv6p0rw2dwcd00hwzda282q62l6sasks2b2g"))))
     (build-system meson-build-system)
     (inputs
-     `(("upower" ,upower)
-       ("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)))
+     (list upower gtk+ gsettings-desktop-schemas adwaita-icon-theme))
     (native-inputs
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("glib:bin" ,glib "bin")
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list desktop-file-utils
+           `(,glib "bin") gettext-minimal pkg-config))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-power-manager")
     (synopsis "Power management daemon for the GNOME desktop")
     (description "@code{gnome-power-manager} is a tool for viewing present and
diff --git a/gnu/packages/gnu-pw-mgr.scm b/gnu/packages/gnu-pw-mgr.scm
index d6f0cd6f86..08968f1241 100644
--- a/gnu/packages/gnu-pw-mgr.scm
+++ b/gnu/packages/gnu-pw-mgr.scm
@@ -55,7 +55,7 @@
                (("/dev/tty") "/dev/null"))
              #t)))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://www.gnu.org/software/gnu-pw-mgr/")
     (synopsis "Retrieve login credentials without recording passwords")
     (description
diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm
index eb5c0023e6..ee7ca3cfde 100644
--- a/gnu/packages/gnucash.scm
+++ b/gnu/packages/gnucash.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
 ;;; Copyright © 2020 Christopher Lam <christopher.lck@gmail.com>
 ;;;
@@ -63,15 +63,14 @@
   ;; directory.
   (package
     (name "gnucash")
-    (version "4.2")
+    (version "4.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
                            version "/gnucash-" version ".tar.bz2"))
        (sha256
-        (base32
-         "020k1mm909dcgs52ls4v7xx3yn8gqazi9awyr81l6y7pkq1spn2n"))))
+        (base32 "0csp8iddhc901vv09gl5lj970g6ili696vwj4vdpkiprp7gh26r5"))))
     (build-system cmake-build-system)
     (inputs
      `(("guile" ,guile-3.0)
@@ -84,7 +83,7 @@
        ("libofx" ,libofx)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("aqbanking" ,aqbanking)
        ("python" ,python)
        ("perl-date-manip" ,perl-date-manip)
@@ -93,6 +92,7 @@
     (native-inputs
      `(("glib" ,glib "bin")             ; glib-compile-schemas, etc.
        ("intltool" ,intltool)
+       ("gmp" ,gmp)
        ("googlemock" ,(package-source googletest))
        ("googletest" ,googletest)
        ("gnucash-docs" ,gnucash-docs)
@@ -100,7 +100,7 @@
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; dconf is required at runtime according to README.dependencies.
-     `(("dconf" ,dconf)))
+     (list dconf))
     (outputs '("out" "doc" "debug" "python"))
     (arguments
      `(#:test-target "check"
@@ -231,8 +231,7 @@ installed as well as Yelp, the Gnome help browser.")
          (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
                              version "/gnucash-docs-" version revision ".tar.gz"))
          (sha256
-          (base32
-           "1p1rbv0gyi07nh5pzhk3xm46w66kjyaipb6rpaq9yb9gil1nl7q5"))))
+          (base32 "1365k4wb8zfm2zyg7zqyvajbzh9311m2zi1vpvbpp8p4sibqjksw"))))
       (build-system gnu-build-system)
       ;; These are native-inputs because they are only required for building the
       ;; documentation.
@@ -275,12 +274,9 @@ to be read using the GNOME Yelp program.")
              (string-append "--with-openssl-libs="
                             (assoc-ref %build-inputs "openssl") "/lib"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("gnutls" ,gnutls)
-       ("openssl" ,openssl)
-       ("gtk+" ,gtk+)))
+     (list libgcrypt gnutls openssl gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Utility library for networking and security applications")
     (description
@@ -307,15 +303,11 @@ applications and libraries.  It is used by AqBanking.")
        ;; built.
        #:parallel-build? #f))
     (propagated-inputs
-     `(("gwenhywfar" ,gwenhywfar)))
+     (list gwenhywfar))
     (inputs
-     `(("gmp" ,gmp)
-       ("xmlsec" ,xmlsec)
-       ("gnutls" ,gnutls)))
+     (list gmp xmlsec gnutls))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext-minimal" ,gettext-minimal)
-       ("libltdl" ,libltdl)))
+     (list pkg-config gettext-minimal libltdl))
     (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Interface for online banking tasks")
     (description
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index d0a9955005..5c0dd348cc 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -113,7 +113,7 @@
       ("libvorbis" ,libvorbis)
       ("zlib" ,zlib)))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (outputs '("out"
               "static")) ; 420 KiB .a files
    (arguments
@@ -164,14 +164,11 @@ tool to extract metadata from a file and print the results.")
                                 version ".tar.gz"))
             (sha256
              (base32
-              "0bh39irwzkv48fkw43skfgkk8ka3793bx1lm21sgw6zxi0djyyx3"))))
+              "0bh39irwzkv48fkw43skfgkk8ka3793bx1lm21sgw6zxi0djyyx3"))
+            (patches (search-patches "libmicrohttpd-0.9.73-test-ssl3.patch"))))
    (build-system gnu-build-system)
    (inputs
-    `(("curl" ,curl)
-      ("gnutls" ,gnutls/dane)
-      ("libgcrypt" ,libgcrypt)
-      ("openssl" ,openssl)
-      ("zlib" ,zlib)))
+    (list curl gnutls/dane libgcrypt openssl zlib))
    (synopsis "C library implementing an HTTP 1.1 server")
    (description
     "GNU libmicrohttpd is a small, embeddable HTTP server implemented as a
@@ -200,10 +197,7 @@ authentication and support for SSL3 and TLS.")
              ("libidn2" ,libidn2)
              ("zlib" ,zlib)))
    (native-inputs
-    `(("libtool" ,libtool)
-      ("perl" ,perl)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)))
+    (list libtool perl pkg-config python))
    (arguments
     `(#:configure-flags
       ;; All of these produce errors during configure.
@@ -289,11 +283,8 @@ supports HTTP, HTTPS and GnuTLS.")
       ("zbar" ,zbar)
       ("zlib" ,zlib)))
    (native-inputs
-    `(("curl" ,curl)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)
-      ("xxd" ,xxd)
-      ("which" ,(@ (gnu packages base) which))))
+    (list curl pkg-config python xxd
+          (@ (gnu packages base) which)))
    (arguments
     '(#:parallel-tests? #f ; Parallel tests aren't supported.
       #:phases
@@ -367,11 +358,8 @@ kinds of basic applications for the foundation of a GNU internet.")
                  (base32
                   "0nqc18jh9j30y4l6yh6j35byfg6qalq7yr3frv9rk10qa041c2sv"))))
       (build-system gnu-build-system)
-      (native-inputs `(("pkg-config" ,pkg-config)
-                       ("autoconf" ,autoconf)
-                       ("automake" ,automake)))
-      (inputs `(("guile" ,guile-2.0)
-                ("gnunet" ,gnunet)))
+      (native-inputs (list pkg-config autoconf automake))
+      (inputs (list guile-2.0 gnunet))
       (synopsis "Guile bindings for GNUnet services")
       (description
        "This package provides Guile bindings to the client libraries of various
@@ -410,8 +398,7 @@ services.")
        ("libunique" ,libunique)
        ("qrencode" ,qrencode)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libglade" ,libglade)))
+     (list pkg-config libglade))
     (synopsis "Graphical front-end tools for GNUnet")
     (properties '((ftp-server . "ftp.gnu.org")
                   (ftp-directory . "/gnunet")))))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 348724e8fb..665e9e3021 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -80,13 +81,14 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (ice-9 match)
   #:use-module (guix build-system meson)
   #:use-module (srfi srfi-1))
 
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.37")
+    (version "1.42")
     (source
      (origin
       (method url-fetch)
@@ -94,32 +96,48 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
+        "08syj8mlarww8mh8x3s0x6hjqbnxp2lkg3hab57qqpv1dh7yf1zw"))))
     (build-system gnu-build-system)
     (arguments
      (if (%current-target-system)
-         `(#:modules ((ice-9 match)
-                      (guix build gnu-build-system)
+         `(#:modules ((guix build gnu-build-system)
                       (guix build utils))
            #:phases
            (modify-phases %standard-phases
+             ;; If this is left out, some generated header
+             ;; files will be sprinkled with ‘\c’, which
+             ;; the compiler won't like.
+             (add-after 'unpack 'fix-gen-lock-obj.sh
+               (lambda _
+                 (substitute* "src/gen-lock-obj.sh"
+                   (("if test -n `echo -n`") "if ! test -n `echo -n`"))))
              ;; When cross-compiling, some platform specific properties cannot
              ;; be detected. Create a symlink to the appropriate platform
-             ;; file. See Cross-Compiling section at:
+             ;; file if required. Note that these platform files depend on
+             ;; both the operating system and architecture!
+             ;;
+             ;; See Cross-Compiling section at:
              ;; https://github.com/gpg/libgpg-error/blob/master/README
              (add-after 'unpack 'cross-symlinks
-               (lambda* (#:key target inputs #:allow-other-keys)
-                 (let ((triplet
-                        (match (string-take target
-                                            (string-index target #\-))
-                          ("armhf" "arm-unknown-linux-gnueabi")
-                          ("mips64el" "mips-unknown-linux-gnu")
-                          (x
-                           (string-append x "-unknown-linux-gnu")))))
-                   (symlink
-                    (string-append "lock-obj-pub." triplet ".h")
-                    "src/syscfg/lock-obj-pub.linux-gnu.h"))
-                 #t))))
+               (lambda _
+                 (define (link triplet source)
+                   (symlink (string-append "lock-obj-pub." triplet ".h")
+                            (string-append "src/syscfg/lock-obj-pub."
+                                           source ".h")))
+                 ,(let* ((target (%current-target-system))
+                         (architecture
+                          (string-take target (string-index target #\-))))
+                    (cond ((target-linux? target)
+                           (match architecture
+                             ("armhf"
+                              `(link "arm-unknown-linux-gnueabi" "linux-gnu"))
+                             ("mips64el"
+                              `(link "mips-unknown-linux-gnu" "linux-gnu"))
+                             ;; Don't always link to the "linux-gnu"
+                             ;; configuration, as this is not correct for
+                             ;; all architectures.
+                             (_ #t)))
+                          (#t #t)))))))
          '()))
     (native-inputs `(("gettext" ,gettext-minimal)))
     (home-page "https://gnupg.org")
@@ -136,14 +154,14 @@ Daemon and possibly more in the future.")
 (define-public libgcrypt
   (package
     (name "libgcrypt")
-    (version "1.8.5")
+    (version "1.8.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-                "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
+               "1xasrh9zxhgj2n5n8dvpzbwn1mzpmlzy270xhbq2gl8xk2xy4pc9"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -175,7 +193,7 @@ generation.")
 (define-public libassuan
   (package
     (name "libassuan")
-    (version "2.5.4")
+    (version "2.5.5")
     (source
      (origin
       (method url-fetch)
@@ -183,11 +201,10 @@ generation.")
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1w7vnnycq4z7gf4bk38pi4hrb8qrrzgfpz3cd7frwldxnfbfx060"))))
+        "1r1lvcp67gn5lfrj1g388sd77ca6qwnmxndirdysd71gk362z34f"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)
-       ("pth" ,pth)))
+     (list libgpg-error pth))
     (home-page "https://gnupg.org")
     (synopsis
      "IPC library used by GnuPG and related software")
@@ -203,7 +220,7 @@ provided.")
 (define-public libksba
   (package
     (name "libksba")
-    (version "1.5.0")
+    (version "1.6.0")
     (source
      (origin
       (method url-fetch)
@@ -212,12 +229,12 @@ provided.")
             version ".tar.bz2"))
       (sha256
        (base32
-        "1fm0mf3wq9fmyi1rmc1vk2fafn6liiw2mgxml3g7ybbb44lz2jmf"))))
+        "12x40y9ihs8nw2xs2y2vjfw90mhikbm5rvabma0dh5frybk87mns"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (native-inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (arguments
      `(#:configure-flags
        (list ,@(if (%current-target-system)
@@ -262,7 +279,7 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.29")
+    (version "2.2.30")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
@@ -270,22 +287,22 @@ compatible to GNU Pth.")
               (patches (search-patches "gnupg-default-pinentry.patch"))
               (sha256
                (base32
-                "1j8cpp08zlz9a9n4g9z6352m1bvl369r94p4pjg8z0948pdprl1r"))))
+                "1111ry31gaxv76miqsy6l0kwxwlx8sz0jk41jhyrjwx649p6sqyc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libassuan" ,libassuan)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libksba" ,libksba)
-       ("npth" ,npth)
-       ("openldap" ,openldap)
-       ("pcsc-lite" ,pcsc-lite)
-       ("readline" ,readline)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list gnutls
+           libassuan
+           libgcrypt
+           libgpg-error
+           libksba
+           npth
+           openldap
+           pcsc-lite
+           readline
+           sqlite
+           zlib))
    (arguments
     `(#:configure-flags '(;; Otherwise, the test suite looks for the `gpg`
                           ;; executable in its installation directory in
@@ -299,14 +316,12 @@ compatible to GNU Pth.")
             (substitute* "scd/scdaemon.c"
               (("\"(libpcsclite\\.so[^\"]*)\"" _ name)
                (string-append "\"" (assoc-ref inputs "pcsc-lite")
-                              "/lib/" name "\"")))
-            #t))
+                              "/lib/" name "\"")))))
         (add-after 'build 'patch-scheme-tests
           (lambda _
             (substitute* (find-files "tests" ".\\.scm$")
               (("/usr/bin/env gpgscm")
-               (string-append (getcwd) "/tests/gpgscm/gpgscm")))
-            #t))
+               (string-append (getcwd) "/tests/gpgscm/gpgscm")))))
         (add-before 'build 'patch-test-paths
           (lambda _
             (substitute* '("tests/inittests"
@@ -318,8 +333,7 @@ compatible to GNU Pth.")
             (substitute* "common/t-exectool.c"
               (("/bin/cat") (which "cat"))
               (("/bin/true") (which "true"))
-              (("/bin/false") (which "false")))
-            #t)))))
+              (("/bin/false") (which "false"))))))))
     (home-page "https://gnupg.org/")
     (synopsis "GNU Privacy Guard")
     (description
@@ -333,6 +347,25 @@ libskba (working with X.509 certificates and CMS data).")
     (properties '((ftp-server . "ftp.gnupg.org")
                   (ftp-directory . "/gcrypt/gnupg")))))
 
+(define-public gnupg-2.2.32
+  (package
+    (inherit gnupg)
+    (version "2.2.32")
+
+    ;; Hide this version because packages like 'emacs-pinentry' propagate the
+    ;; default GnuPG and "guix install gnupg emacs-pinentry" would fail with a
+    ;; collision error.
+    (properties `((hidden? . #t)
+                  ,@(package-properties gnupg)))
+
+    (source (origin
+              (inherit (package-source gnupg))
+              (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
+                                  ".tar.bz2"))
+              (sha256
+               (base32
+                "0506gv54z10c96z5821z9p0ksibk1pfilsmag39ffqrcz0sinmxj"))))))
+
 (define-public gnupg-1
   (package (inherit gnupg)
     (version "1.4.23")
@@ -342,14 +375,11 @@ libskba (working with X.509 certificates and CMS data).")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))))
+                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))
+              (patches (search-patches "gnupg-1-build-with-gcc10.patch"))))
     (native-inputs '())
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("curl" ,curl)
-       ("readline" ,readline)
-       ("libgpg-error" ,libgpg-error)))
+     (list zlib bzip2 curl readline libgpg-error))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -371,12 +401,12 @@ libskba (working with X.509 certificates and CMS data).")
        (base32 "1bg13l5s8x9p1v0jyv29n84bay27pflindpzjsc9gj7i4wdkrg7f"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (propagated-inputs
      ;; Needs to be propagated because gpgme.h includes gpg-error.h.
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (inputs
-     `(("libassuan" ,libassuan)))
+     (list libassuan))
     (home-page "https://www.gnupg.org/related_software/gpgme/")
     (synopsis "Library providing simplified access to GnuPG functionality")
     (description
@@ -410,12 +440,15 @@ and every application benefits from this.")
              (chdir "lang/qt")
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ,@(package-native-inputs gpgme)))
+     ;; Use GnuPG 2.2.32.  With 2.2.30, 'testSymmetricEncryptDecrypt' in
+     ;; t-encrypt.cpp fails because 'gpg' wrongfully ask for a passphrase do
+     ;; decrypt the cypher text.
+     (modify-inputs (package-native-inputs gpgme)
+       (replace "gnupg" gnupg-2.2.32)
+       (prepend pkg-config)))
     (inputs
-     `(("gpgme" ,gpgme)
-       ("qtbase" ,qtbase-5)
-       ,@(package-inputs gpgme)))
+     (modify-inputs (package-inputs gpgme)
+       (prepend gpgme qtbase-5)))
     (synopsis "Qt API bindings for gpgme")
     (description "QGpgme provides a very high level Qt API around GpgMEpp.
 
@@ -451,17 +484,14 @@ gpgpme starting with version 1.7.")
                ;; When cross-compiling, the bash script 'libgcrypt-config'
                ;; must be accessible during the configure phase.
                (setenv "PATH"
-                       (string-append (assoc-ref inputs "libgcrypt")
-                                      "/bin:" (getenv "PATH")))))))))
+                       (string-append
+                        (dirname
+                         (search-input-file inputs "bin/libgcrypt-config"))
+                        ":" (getenv "PATH")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)))
+     (list pkg-config autoconf automake texinfo guile-3.0))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgcrypt" ,libgcrypt)))
+     (list guile-3.0 libgcrypt))
     (synopsis "Cryptography library for Guile using Libgcrypt")
     (description
      "Guile-Gcrypt provides a Guile interface to a subset of the
@@ -475,22 +505,22 @@ interface (FFI) of Guile.")
   (package (inherit guile-gcrypt)
     (name "guile2.0-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))
     (inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))))
 
 (define-public guile2.2-gcrypt
   (package
     (inherit guile-gcrypt)
     (name "guile2.2-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))))
 
 (define-public python-gpg
   (package
@@ -513,9 +543,9 @@ interface (FFI) of Guile.")
              #t)))
        #:tests? #f)) ; No test suite.
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page (package-home-page gpgme))
     (synopsis "Python bindings for GPGME GnuPG cryptography library")
     (description "This package provides Python bindings to the GPGME GnuPG
@@ -551,9 +581,9 @@ distributed separately.")
            (lambda _ (invoke "make" "check"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (home-page "https://launchpad.net/pygpgme")
     (synopsis "Python module for working with OpenPGP messages")
     (description
@@ -592,7 +622,7 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
                (invoke "python"
                        "test_gnupg.py" "--no-doctests")))))))
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (home-page "https://pythonhosted.org/python-gnupg/index.html")
     (synopsis "Wrapper for the GNU Privacy Guard")
     (description
@@ -624,14 +654,11 @@ and signature functionality from Python programs.")
              (delete-file "t/encrypt_symmetrically.t")
              #t)))))
     (inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)
-       ("perl-moox-late" ,perl-moox-late)))
+     (list perl-moo perl-moox-handlesvia perl-moox-late))
     (native-inputs
-     `(("which" ,which)
-       ("perl-module-install" ,perl-module-install)))
+     (list which perl-module-install))
     (home-page "https://metacpan.org/release/GnuPG-Interface")
     (synopsis "Perl interface to GnuPG")
     (description "@code{GnuPG::Interface} and its associated modules are
@@ -664,8 +691,7 @@ signing, decryption, verification, and key-listing parsing.")
         (add-before
          'build 'set-gpg-file-name
          (lambda* (#:key inputs outputs #:allow-other-keys)
-           (let* ((gpg (string-append (assoc-ref inputs "gpg")
-                                      "/bin/gpg")))
+           (let* ((gpg (search-input-file inputs "/bin/gpg")))
              (substitute* "libpius/constants.py"
                (("/usr/bin/gpg2") gpg))
              #t))))))
@@ -702,12 +728,12 @@ PGP keysigning parties.")
      ;; 'configure phase.
      `(("autoconf" ,autoconf-wrapper)
        ("automake" ,automake)))
-    (inputs `(("perl" ,perl)
-              ("perl-text-template" ,perl-text-template)
-              ("perl-mime-tools" ,perl-mime-tools)
-              ("perl-gnupg-interface" ,perl-gnupg-interface)
-              ("perl-net-idn-encode" ,perl-net-idn-encode)
-              ("libmd" ,libmd)))
+    (inputs (list perl
+                  perl-text-template
+                  perl-mime-tools
+                  perl-gnupg-interface
+                  perl-net-idn-encode
+                  libmd))
     (arguments
      `(#:tests? #f ; no test suite
        #:phases
@@ -802,11 +828,10 @@ including tools for signing keys, keyring analysis, and party preparation.
     (arguments
      `(#:configure-flags '("--enable-pinentry-tty")))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libassuan" ,libassuan)
-       ("libsecret" ,libsecret "out")))
+     (list ncurses libassuan
+           `(,libsecret "out")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gnupg.org/aegypten2/")
     (synopsis "GnuPG's interface to passphrase input")
     (description
@@ -834,9 +859,8 @@ enter a passphrase when required by @code{gpg} or other software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 glib)))
     (description
      "Pinentry provides a console and a GTK+ GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -846,10 +870,8 @@ passphrase when @code{gpg} is run and needs it.")))
     (inherit pinentry-tty)
     (name "pinentry-gnome3")
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gcr" ,gcr)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 gcr glib)))
     (arguments
      `(#:configure-flags '("--enable-pinentry-gnome3"
                            "--enable-fallback-curses")))
@@ -865,8 +887,8 @@ software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend qtbase-5)))
   (description
    "Pinentry provides a console and a Qt GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -889,8 +911,8 @@ passphrase when @code{gpg} is run and needs it.")))
        ("gettext" ,gettext-minimal)
        ,@(package-native-inputs pinentry-tty)))
     (inputs
-     `(("efl" ,efl)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend efl)))
     (description
    "Pinentry provides a console and a graphical interface for @acronym{EFL,
 the Enlightenment Foundation Libraries} that allows users to enter a
@@ -933,13 +955,8 @@ passphrase when @code{gpg} is run and needs it.")))
            (lambda* rest
              (invoke "make" "installcheck"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)
-              ("rofi" ,rofi)))
+     (list autoconf autoconf-archive automake pkg-config texinfo))
+    (inputs (list guile-3.0 rofi))
     (synopsis "Rofi GUI for GnuPG's passphrase input")
     (description "Pinentry-rofi is a simple graphical user interface for
 passphrase or PIN when required by @code{gpg} or other software.  It is using
@@ -963,12 +980,9 @@ with @code{rofi-pass} a good front end for @code{password-store}.")
         (base32 "1faxaydhc9lr97b2r3sylcy320bn54g4a5p727y3227mz3gg1mn1"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bemenu" ,bemenu)
-       ("libassuan" ,libassuan)
-       ("libgpg-error" ,libgpg-error)
-       ("popt" ,popt)))
+     (list bemenu libassuan libgpg-error popt))
     (home-page "https://github.com/t-8ch/pinentry-bemenu")
     (synopsis "Pinentry implementation based on @code{bemenu}")
     (description
@@ -1029,7 +1043,7 @@ them to transform your existing public key into a secret key.")
        #:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://www.mew.org/~kazu/proj/pgpdump/en/")
     (synopsis "PGP packet visualizer")
     (description "pgpdump displays the sequence of OpenPGP or PGP version 2
@@ -1062,7 +1076,7 @@ however, pgpdump produces more detailed and easier to understand output.")
                  `("PATH" ":" prefix (,(string-append gnupg "/bin"))))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gnupg" ,gnupg)
        ("gpgme" ,gpgme)
@@ -1131,7 +1145,7 @@ files, to verify signatures, and to manage the private and public keys.")
        ("perl-xml-twig" ,perl-xml-twig)
        ("torsocks" ,torsocks)))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1193,8 +1207,7 @@ over.")
          (delete 'configure) ; no configure script
          (add-before 'install 'hardlink-gnupg
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gpg (string-append (assoc-ref inputs "gnupg")
-                                       "/bin/gpg")))
+             (let ((gpg (search-input-file inputs "/bin/gpg")))
                (substitute* (find-files "." "jetring-[[:alpha:]]+$")
                  (("gpg -") (string-append gpg " -"))
                  (("\\\"gpg\\\"") (string-append "\"" gpg "\"")))
@@ -1213,8 +1226,7 @@ over.")
                #t))))
        #:tests? #f)) ; no test phase
     (inputs
-     `(("gnupg" ,gnupg)
-       ("perl" ,perl)))
+     (list gnupg perl))
     (home-page "https://joeyh.name/code/jetring/")
     (synopsis "GnuPG keyring maintenance using changesets")
     (description
diff --git a/gnu/packages/gnustep.scm b/gnu/packages/gnustep.scm
index 012afebd01..eef3863949 100644
--- a/gnu/packages/gnustep.scm
+++ b/gnu/packages/gnustep.scm
@@ -54,7 +54,7 @@
     (arguments
      '(#:tests? #f)) ; no check target
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "http://gnustep.org")
     (synopsis "GNUstep make package")
     (description "The makefile package is a simple, powerful and extensible way
@@ -144,7 +144,7 @@ to easily create cross-compiled binaries.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://windowmaker.org/")
     (description
      "Window Maker is an X11 window manager originally designed to provide
@@ -170,13 +170,9 @@ interface.  It is fast, feature rich, easy to configure, and easy to use.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f)) ; no "check" target
     (inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)
-       ("upower" ,upower)))
+     (list glib libx11 libxext libxpm upower))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dockapps.net/wmbattery")
     (synopsis "Display laptop battery info")
     (description
@@ -200,11 +196,9 @@ graph), and battery status (high - green, low - yellow, or critical - red).")
                 "01s37d8cfpncza1mlw13ar4rcwbrc1vgaj3ifhglmlcnzvvayg0n"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.thregr.org/~wavexx/software/wmnd/")
     (synopsis "Network interface monitor")
     (description
@@ -226,11 +220,9 @@ other compatible window managers.")
                 "1334y0axnxydwv05d172f405iljrfakg4kcyg9kmn46v6ywv424g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dockapps.net/wmcpuload")
     (synopsis "Monitor CPU usage")
     (description
@@ -255,14 +247,10 @@ on.")
                 "1lx276ba8r2yydhmwj1g586jdqg695ad89ng36fr3mb067gvb2rz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxpm" ,libxpm)))
+     (list libx11 libxext libxpm))
     ;; wmclock requires autoreconf to generate its configure script.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://www.dockapps.net/wmclock")
     (synopsis "Display the date and time")
     (description
@@ -286,10 +274,9 @@ display, and can run a user-specified program on mouse click.")
                (search-patches "wmfire-update-for-new-gdk-versions.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libgtop" ,libgtop)))
+     (list gtk+-2 libgtop))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.improbability.net/")
     (synopsis "Display flames to represent resource usage")
     (description
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 6d9f8f44ac..26fd5f95eb 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -16,6 +16,8 @@
 ;;; Copyright © 2020, 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -117,9 +119,9 @@
        ("pkg-config" ,pkg-config)
        ("python" ,python-2)))
     (propagated-inputs
-     `(("nspr" ,nspr))) ; in the Requires.private field of mozjs-17.0.pc
+     (list nspr)) ; in the Requires.private field of mozjs-17.0.pc
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(;; XXX: parallel build fails, lacking:
        ;;   mkdir -p "system_wrapper_js/"
@@ -194,8 +196,7 @@ in C/C++.")
                                 '("--host=aarch64-unknown-linux-gnu")
                                 '())))))))))
     (inputs
-     `(("libffi" ,libffi)
-       ("zlib" ,zlib)))))
+     (list libffi zlib))))
 
 (define-public mozjs-38
   (package
@@ -278,10 +279,7 @@ in C/C++.")
        ("pkg-config" ,pkg-config)
        ("python-2" ,python-2)))
     (inputs
-     `(("libffi" ,libffi)
-       ("readline" ,readline)
-       ("icu4c" ,icu4c)
-       ("zlib" ,zlib)))))
+     (list libffi readline icu4c zlib))))
 
 (define-public mozjs-52
   ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
@@ -342,15 +340,13 @@ in C/C++.")
                (let ((out (assoc-ref outputs "out")))
                  (setenv "SHELL" (which "sh"))
                  (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                   "/bin/autoconf"))
+                 (setenv "AUTOCONF" (which "autoconf"))
                  (apply invoke "./configure"
                         (cons (string-append "--prefix=" out)
                               configure-flags))))))))
       (native-inputs
-       `(("autoconf" ,autoconf-2.13)
-         ("automake" ,automake)
-         ,@(package-native-inputs mozjs-38))))))
+       (modify-inputs (package-native-inputs mozjs-38)
+         (prepend autoconf-2.13 automake))))))
 
 (define-public mozjs-60
   ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
@@ -359,7 +355,7 @@ in C/C++.")
   ;; we take the Debian version instead, because it is easier to work with.
   (package
     (inherit mozjs-38)
-    (version "60.2.3-2")
+    (version "60.2.3-4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -368,27 +364,49 @@ in C/C++.")
               (file-name (git-file-name "mozjs" version))
               (sha256
                (base32
-                "091w050rwzrdcbgyi934k2viyccmlqxrp13sm2mql71mabb5dai6"))))
+                "1xl6avsj9gkgma71p56jzs7nasc767k3n1frnmri5pad4rj94bij"))))
     (arguments
      `(#:tests? #f ; FIXME: all tests pass, but then the check phase fails anyway.
        #:test-target "check-jstests"
        #:configure-flags
-       '("--enable-ctypes"
-         "--enable-optimize"
-         "--enable-pie"
-         "--enable-readline"
-         "--enable-shared-js"
-         "--enable-system-ffi"
-         "--with-system-nspr"
-         "--with-system-zlib"
-         "--with-system-icu"
-         "--with-intl-api"
-         ;; This is important because without it gjs will segfault during the
-         ;; configure phase.  With jemalloc only the standalone mozjs console
-         ;; will work.
-         "--disable-jemalloc")
+       ;; TODO(core-updates): unconditionally use 'quasiquote
+       ,#~(#$(if (%current-target-system)
+                 #~quasiquote
+                 #~quote)
+           ("--enable-ctypes"
+            "--enable-optimize"
+            "--enable-pie"
+            "--enable-readline"
+            "--enable-shared-js"
+            "--enable-system-ffi"
+            "--with-system-nspr"
+            #$@(if (%current-target-system)
+                   #~(,(string-append "--with-nspr-prefix="
+                                      #$(this-package-input "nspr")))
+                   #~())
+            "--with-system-zlib"
+            "--with-system-icu"
+            "--with-intl-api"
+            ;; This is important because without it gjs will segfault during the
+            ;; configure phase.  With jemalloc only the standalone mozjs console
+            ;; will work.
+            "--disable-jemalloc"
+            ;; Mozilla deviates from Autotools conventions due to historical
+            ;; reasons.
+            #$@(if (%current-target-system)
+                   #~(#$(string-append
+                         "--host="
+                         (nix-system->gnu-triplet (%current-system)))
+                      #$(string-append "--target=" (%current-target-system)))
+                   #~())))
        #:phases
        (modify-phases %standard-phases
+         ;; Make sure pkg-config will be found.
+         ,@(if (%current-target-system)
+               `((add-before 'configure 'set-PKG-CONFIG
+                   (lambda _
+                     (setenv "PKG_CONFIG" ,(pkg-config-for-target)))))
+               '())
          (replace 'configure
            (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
              ;; The configure script does not accept environment variables as
@@ -399,8 +417,7 @@ in C/C++.")
                (chdir "run-configure-from-here")
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                 "/bin/autoconf"))
+               (setenv "AUTOCONF" (which "autoconf"))
                (apply invoke "../js/src/configure"
                       (cons (string-append "--prefix=" out)
                             configure-flags))
@@ -422,7 +439,7 @@ in C/C++.")
 (define-public mozjs-78
   (package
     (inherit mozjs-60)
-    (version "78.6.1")
+    (version "78.15.0")
     (source (origin
               (method url-fetch)
               ;; TODO: Switch to IceCat source once available on ftp.gnu.org.
@@ -431,7 +448,7 @@ in C/C++.")
                                   version "esr.source.tar.xz"))
               (sha256
                (base32
-                "1kp75838a38x4h0w98qn01g9asn7jlgm64bz7n70353bnr6bf1qd"))))
+                "0l91cxdc5v9fps79ckb1kid4gw6v5qng1jd9zvaacwaiv628shx4"))))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
        #:modules ((guix build cargo-utils)
@@ -458,12 +475,6 @@ in C/C++.")
          "--with-intl-api")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-StructuredClone.h
-           (lambda _
-             (substitute* "js/public/StructuredClone.h"
-               (("class SharedArrayRawBufferRefs \\{")
-                "class JS_PUBLIC_API SharedArrayRawBufferRefs {"))
-             #t))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda _
              (let ((null-hash
@@ -487,8 +498,7 @@ in C/C++.")
                (chdir "run-configure-from-here")
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
-                                                 "/bin/autoconf"))
+               (setenv "AUTOCONF" (which "autoconf"))
                (apply invoke "../js/src/configure"
                       (cons (string-append "--prefix=" out)
                             configure-flags))
@@ -564,9 +574,7 @@ in C/C++.")
        ("rust" ,rust)
        ("cargo" ,rust "cargo")))
     (inputs
-     `(("icu4c" ,icu4c-68)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))))
+     (list icu4c readline zlib))))
 
 (define mozilla-compare-locales
   (origin
@@ -916,7 +924,7 @@ in C/C++.")
        ("libffi" ,libffi)
        ("ffmpeg" ,ffmpeg)
        ("libvpx" ,libvpx)
-       ("icu4c" ,icu4c-69)
+       ("icu4c" ,icu4c)
        ("pixman" ,pixman)
        ("pulseaudio" ,pulseaudio)
        ("mesa" ,mesa)
@@ -949,8 +957,8 @@ in C/C++.")
 
        ("patch" ,(canonical-package patch))
 
-       ("rust" ,rust-1.51)
-       ("cargo" ,rust-1.51 "cargo")
+       ("rust" ,rust)
+       ("cargo" ,rust "cargo")
        ("rust-cbindgen" ,rust-cbindgen-0.19)
        ("llvm" ,llvm-11)
        ("clang" ,clang-11)
@@ -972,7 +980,7 @@ in C/C++.")
 
        #:configure-flags `("--enable-application=browser"
                            "--with-distribution-id=org.gnu"
-
+                           "--enable-geckodriver"
                            ;; Do not require addons in the global app or
                            ;; system directories to be signed by Mozilla.
                            "--with-unsigned-addon-scopes=app,system"
@@ -1064,8 +1072,7 @@ in C/C++.")
                               (format #t "applying '~a'...~%" file)
                               (invoke patch "--force" "--no-backup-if-mismatch"
                                       "-p1" "--input" file))))
-                         (or native-inputs inputs)))
-             #t))
+                         (or native-inputs inputs)))))
          (add-after 'apply-guix-specific-patches 'remove-bundled-libraries
            (lambda _
              ;; Remove bundled libraries that we don't use, since they may
@@ -1114,8 +1121,7 @@ in C/C++.")
                          ;; UNBUNDLE-ME! "gfx/graphite2"
                          "js/src/ctypes/libffi"
                          ;; UNBUNDLE-ME! "db/sqlite3"
-                         ))
-             #t))
+                         ))))
          (add-after 'remove-bundled-libraries 'fix-ffmpeg-runtime-linker
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
@@ -1123,8 +1129,7 @@ in C/C++.")
                ;; Arrange to load libavcodec.so by its absolute file name.
                (substitute* "dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp"
                  (("libavcodec\\.so")
-                  libavcodec))
-               #t)))
+                  libavcodec)))))
          (add-after 'fix-ffmpeg-runtime-linker 'build-sandbox-whitelist
            (lambda* (#:key inputs #:allow-other-keys)
              (define (runpath-of lib)
@@ -1154,8 +1159,7 @@ in C/C++.")
                        whitelist-string)
                (format port "~%pref(\"security.sandbox.content.read_path_whitelist\", ~S);~%"
                        whitelist-string)
-               (close-output-port port))
-             #t))
+               (close-output-port port))))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda _
              (use-modules (guix build cargo-utils))
@@ -1184,8 +1188,7 @@ in C/C++.")
                            "intl"
                            "servo"
                            "security/manager/ssl"
-                           "build")))
-             #t))
+                           "build")))))
          (delete 'bootstrap)
          (replace 'configure
            ;; configure does not work followed by both "SHELL=..." and
@@ -1245,10 +1248,15 @@ in C/C++.")
                  (("[0-9a-df-np-sv-z]{32}" hash)
                   (string-append (string-take hash 8)
                                  "<!-- Guix: not a runtime dependency -->"
-                                 (string-drop hash 8)))))
-             #t))
+                                 (string-drop hash 8)))))))
          (replace 'install
-           (lambda _ (invoke "./mach" "install")))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./mach" "install")
+             ;; The geckodriver binary is not installed by the above, for some
+             ;; reason.  Use 'find-files' to avoid having to deal with the
+             ;; system/architecture-specific file name.
+             (install-file (first (find-files "." "geckodriver"))
+                           (string-append (assoc-ref outputs "out") "/bin"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1273,8 +1281,7 @@ in C/C++.")
                  ;; package on guix has been observed to be unstable when
                  ;; using wayland, and the bundled extensions stop working.
                  ;;   `("MOZ_ENABLE_WAYLAND" = ("1"))
-                 `("LD_LIBRARY_PATH" prefix ,ld-libs))
-               #t)))
+                 `("LD_LIBRARY_PATH" prefix ,ld-libs)))))
          (add-after 'wrap-program 'install-desktop-entry
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the '.desktop' file.
@@ -1287,8 +1294,7 @@ in C/C++.")
                  (("Icon=.*")          "Icon=icecat\n")
                  (("NewWindow")        "new-window")
                  (("NewPrivateWindow") "new-private-window"))
-               (install-file desktop-file applications)
-               #t)))
+               (install-file desktop-file applications))))
          (add-after 'install-desktop-entry 'install-icons
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -1302,14 +1308,15 @@ in C/C++.")
                       (copy-file file (string-append icons "/icecat.png"))))
                   '("default16.png" "default22.png" "default24.png"
                     "default32.png" "default48.png" "content/icon64.png"
-                    "mozicon128.png" "default256.png"))
-                 #t)))))))
+                    "mozicon128.png" "default256.png")))))))))
     (home-page "https://www.gnu.org/software/gnuzilla/")
     (synopsis "Entirely free browser derived from Mozilla Firefox")
     (description
      "IceCat is the GNU version of the Firefox browser.  It is entirely free
 software, which does not recommend non-free plugins and addons.  It also
-features built-in privacy-protecting features.
+features built-in privacy-protecting features.  This package also includes the
+@command{geckodriver} command, which can be useful for automated web
+testing.
 
 WARNING: IceCat 91 has not yet been released by the upstream IceCat project.
 This is a preview release, and does not currently meet the privacy-respecting
@@ -1470,8 +1477,7 @@ standards of the IceCat project.")
                (setenv "MOZ_NOSPAM" "1")
                (setenv "MACH_USE_SYSTEM_PYTHON" "1")
                (setenv "PYTHON"
-                       (string-append (assoc-ref inputs "python2")
-                                      "/bin/python"))
+                       (search-input-file inputs "/bin/python"))
                (setenv "MOZ_BUILD_DATE" ,%icedove-build-id) ; avoid timestamp
                (setenv "MOZ_APP_NAME" "icedove")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath="
@@ -1574,7 +1580,7 @@ standards of the IceCat project.")
        ("gtk+" ,gtk+)
        ("gtk+-2" ,gtk+-2)
        ("hunspell" ,hunspell)
-       ("icu4c" ,icu4c-69)
+       ("icu4c" ,icu4c)
        ("libcanberra" ,libcanberra)
        ("libevent" ,libevent)
        ("libffi" ,libffi)
@@ -1617,7 +1623,7 @@ standards of the IceCat project.")
              (sha256
               (base32
                "00zj1k3c8p66ylf9n7xp42y6kiv3h6hf8ba7bk6f8wj3hh0r2hrd")))))
-       ("cargo" ,rust-1.51 "cargo")
+       ("cargo" ,rust "cargo")
        ("clang" ,clang)
        ("llvm" ,llvm)
        ("m4" ,m4)
@@ -1627,7 +1633,7 @@ standards of the IceCat project.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)
        ("python2" ,python-2.7)
-       ("rust" ,rust-1.51)
+       ("rust" ,rust)
        ("rust-cbindgen" ,rust-cbindgen-0.19)
        ("which" ,which)
        ("yasm" ,yasm)))
@@ -1689,8 +1695,7 @@ Thunderbird.  It supports email, news feeds, chat, calendar and contacts.")
                 "17yyyxp47z4m8hnflcq34rc1y871515kr3f1y42j1l0yx3g0il07"))))
     (build-system trivial-build-system)
     (inputs
-     `(("nss" ,nss)
-       ("python" ,python)))
+     (list nss python))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -1729,8 +1734,8 @@ Mozilla (Firefox, Waterfox, Thunderbird, SeaMonkey) profiles.")
        (sha256
         (base32 "1xxn8yzr6j8j6prmbj6mxspdczigarfiv3vlm9k70yxmky65ijh3"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("lz4" ,lz4)))
+    (native-inputs (list pkg-config))
+    (inputs (list lz4))
     (arguments
      `(#:tests? #f                              ; no check target
        #:phases
diff --git a/gnu/packages/gobby.scm b/gnu/packages/gobby.scm
index 0e1910d7ce..f948074c39 100644
--- a/gnu/packages/gobby.scm
+++ b/gnu/packages/gobby.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages glib)
@@ -47,7 +49,7 @@
                 "088yqq60wjx3jqjlhl12893p15gl9asjpavrbhh590qzpqndhp8m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        (list "--disable-static")
@@ -63,8 +65,7 @@
                 (string-append "gnutls_priority_set_direct"
                                "(session, \"NORMAL:+ANON-DH\", NULL)"))))))))
     (inputs
-     `(("libsigc++" ,libsigc++)
-       ("gnutls" ,gnutls)))
+     (list libsigc++-2 gnutls))
     (home-page "https://gobby.github.io/")
     (synopsis "Network access framework for IPv4/IPv6")
     (description
@@ -88,11 +89,9 @@
      `(#:configure-flags
        (list "--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libsigc++" ,libsigc++)
-       ("gnutls" ,gnutls)
-       ("libnet6" ,libnet6)))
+     (list libsigc++-2 gnutls libnet6))
     (home-page "https://gobby.github.io/")
     (synopsis "Library for building collaborative editors")
     (description
@@ -117,8 +116,7 @@ documents in one session.  Obby is used by the Gobby collaborative editor.")
                 "0w8q01lf6bcdz537b29m7rwlbc7k87b12vnpm1h6219ypvzqkgcc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("libxml++-2" ,libxml++-2)
        ("gnutls" ,gnutls)
@@ -143,7 +141,7 @@ connect to a server running the old 0.4 protocol.")
 (define-public gobby
   (package
     (name "gobby")
-    (version "0.5.0")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://releases.0x539.de/gobby/gobby-"
@@ -151,16 +149,15 @@ connect to a server running the old 0.4 protocol.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "165x0r668ma5blziisvbr8qig3jw9hf7i6w8r7wwvz3wsac3bswc"))))
-    (build-system gnu-build-system)
+                "1p2wbnchxy2wdzk19p7bxfpbq5zawa0l500na57jp8jgk3qz7czx"))))
+    (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool itstool))
     (inputs
      `(("gnutls" ,gnutls)
        ("gsasl" ,gsasl)
-       ("gtkmm-2" ,gtkmm-2)
-       ("gtksourceview-2" ,gtksourceview-2)
+       ("gtkmm" ,gtkmm-3)
+       ("gtksourceview" ,gtksourceview-3)
        ("libinfinity" ,libinfinity)
        ("libxml++-2" ,libxml++-2)))
     (arguments
@@ -195,12 +192,9 @@ together over the internet in real-time.")
          "17i3g61hxz9pzl3ryd1yr15142r25m06jfzjrpdy7ic1b8vjjw3f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gsasl" ,gsasl)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list glib gsasl gtk+ libxml2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags (list "--disable-static"
                                "--with-inftextgtk"
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 70731e2720..2dade5278f 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2016, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Sergei Trofimovich <slyfox@inbox.ru>
@@ -229,10 +229,7 @@
        ("pcre" ,pcre)
        ("gcc:lib" ,(canonical-package gcc) "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("net-base" ,net-base)
-       ("perl" ,perl)))
+     (list pkg-config which net-base perl))
 
     (home-page "https://golang.org/")
     (synopsis "Compiler and libraries for Go, a statically-typed language")
@@ -272,7 +269,8 @@ in the style of communicating sequential processes (@dfn{CSP}).")
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib"))
                       (ld (string-append (assoc-ref inputs "libc") "/lib"))
-                      (loader (car (find-files ld "^ld-linux.+")))
+                      (loader (car (append (find-files ld "^ld-linux.+")
+                                           (find-files ld "^ld(64)?\\.so.+"))))
                       (net-base (assoc-ref inputs "net-base"))
                       (tzdata-path
                        (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
@@ -310,6 +308,11 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                    (("/bin/pwd") (which "pwd"))
                    (("/bin/sh") (which "sh")))
 
+                 ;; Backport fix for go-1.14 with GCC 9+
+                 ;; https://github.com/golang/go/issues/39157
+                 (substitute* "cmd/go/note_test.go"
+                   (("cannot find 'ld'") "cannot find [‘']ld[’']"))
+
                  ;; Add libgcc to runpath
                  (substitute* "cmd/link/internal/ld/lib.go"
                    (("!rpath.set") "true"))
@@ -404,6 +407,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (setenv "GOOS" "linux")
                  (setenv "GOROOT" (dirname (getcwd)))
                  (setenv "GOROOT_FINAL" output)
+                 (setenv "GOCACHE" "/tmp/go-cache")
                  (setenv "CGO_ENABLED" "1")
                  (invoke "sh" "all.bash"))))
            (replace 'install
@@ -442,7 +446,9 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (copy-recursively "../" output)
                  #t)))))))
     (native-inputs
-     `(("go" ,go-1.4)
+     `(,@(if (member (%current-system) (package-supported-systems go-1.4))
+           `(("go" ,go-1.4))
+           `(("go" ,gccgo-10)))
        ("go-skip-gc-test.patch" ,(search-patch "go-skip-gc-test.patch"))
        ,@(match (%current-system)
            ((or "armhf-linux" "aarch64-linux")
@@ -790,7 +796,13 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   (install-file file (string-append out "/share/doc/go")))
                 '("AUTHORS" "CONTRIBUTORS" "CONTRIBUTING.md" "PATENTS"
                   "README.md" "SECURITY.md"))))))))
-    (inputs (alist-delete "gcc:lib" (package-inputs go-1.16)))))
+    (inputs (alist-delete "gcc:lib" (package-inputs go-1.16)))
+    (native-inputs
+     `(,@(if (not (member (%current-system) (package-supported-systems go-1.4)))
+           ;; gccgo-10.4, 11.3 and lower has a bug which causes bootstrapping
+           ;; to fail. Use go-1.16 until we have a newer version available.
+           (alist-replace "go" (list go-1.16) (package-native-inputs go-1.16))
+           (package-native-inputs go-1.16))))))
 
 (define-public go go-1.14)
 
@@ -814,11 +826,9 @@ in the style of communicating sequential processes (@dfn{CSP}).")
       (arguments
        `(#:import-path "0xacab.org/leap/shapeshifter"))
       (propagated-inputs
-       `(("go-github-com-operatorfoundation-obfs4"
-          ,go-github-com-operatorfoundation-obfs4)
-         ("go-github-com-operatorfoundation-shapeshifter-transports"
-          ,go-github-com-operatorfoundation-shapeshifter-transports)
-         ("go-golang-org-x-net" ,go-golang-org-x-net)))
+       (list go-github-com-operatorfoundation-obfs4
+             go-github-com-operatorfoundation-shapeshifter-transports
+             go-golang-org-x-net))
       (home-page "https://0xacab.org/leap/shapeshifter")
       (synopsis "Shapeshifter Dispatcher Library")
       (description "Shapeshifter provides network protocol shapeshifting
@@ -925,33 +935,21 @@ filtering devices.")
                "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v2"
                "github.com/OperatorFoundation/shapeshifter-transports/transports/shadow/v3")))))))
     (native-inputs
-     `(("go-github-com-stretchr-testify"
-        ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (propagated-inputs
-     `(("go-github-com-aead-chacha20"
-        ,go-github-com-aead-chacha20)
-       ("go-github-com-blanu-dust"
-        ,go-github-com-blanu-dust)
-       ("go-github-com-deckarep-golang-set"
-        ,go-github-com-deckarep-golang-set)
-       ("go-github-com-kataras-golog"
-        ,go-github-com-kataras-golog)
-       ("go-github-com-mufti1-interconv"
-        ,go-github-com-mufti1-interconv)
-       ("go-github-com-opentracing-opentracing-go"
-        ,go-github-com-opentracing-opentracing-go)
-       ("go-github-com-operatorfoundation-monolith-go"
-        ,go-github-com-operatorfoundation-monolith-go)
-       ("go-github-com-operatorfoundation-obfs4"
-        ,go-github-com-operatorfoundation-obfs4)
-       ("go-github-com-operatorfoundation-shapeshifter-ipc"
-        ,go-github-com-operatorfoundation-shapeshifter-ipc)
-       ("go-github-com-shadowsocks-go-shadowsocks2"
-        ,go-github-com-shadowsocks-go-shadowsocks2)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-torproject-org-pluggable-transports-goptlib"
-        ,go-torproject-org-pluggable-transports-goptlib)))
+     (list go-github-com-aead-chacha20
+           go-github-com-blanu-dust
+           go-github-com-deckarep-golang-set
+           go-github-com-kataras-golog
+           go-github-com-mufti1-interconv
+           go-github-com-opentracing-opentracing-go
+           go-github-com-operatorfoundation-monolith-go
+           go-github-com-operatorfoundation-obfs4
+           go-github-com-operatorfoundation-shapeshifter-ipc
+           go-github-com-shadowsocks-go-shadowsocks2
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-torproject-org-pluggable-transports-goptlib))
     (home-page "https://github.com/OperatorFoundation/shapeshifter-transports")
     (synopsis "Go implementation of Pluggable Transports")
     (description "Shapeshifter-Transports is a set of Pluggable Transports
@@ -980,8 +978,7 @@ networks where it would otherwise be blocked or heavily throttled.")
     (arguments
      `(#:import-path "github.com/kataras/golog"))
     (propagated-inputs
-     `(("go-github-com-kataras-pio"
-        ,go-github-com-kataras-pio)))
+     (list go-github-com-kataras-pio))
     (home-page "https://github.com/kataras/golog")
     (synopsis "Logging foundation for Go applications")
     (description "GoLog is a level-based logger written in Go.")
@@ -1030,12 +1027,8 @@ terminals.")
     (arguments
      `(#:import-path "github.com/shadowsocks/go-shadowsocks2"))
     (propagated-inputs
-     `(("go-github-com-riobard-go-bloom"
-        ,go-github-com-riobard-go-bloom)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-github-com-riobard-go-bloom go-golang-org-x-crypto
+           go-golang-org-x-net go-golang-org-x-sys go-golang-org-x-text))
     (home-page "https://github.com/shadowsocks/go-shadowsocks2")
     (synopsis "Shadowsocks tunnel proxy")
     (description "Go-ShadowSocks is a Go implementation of the Shadowsocks tunnel
@@ -1086,7 +1079,7 @@ proxy protocol.")
       (arguments
        `(#:import-path "github.com/aead/chacha20"))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (home-page "https://github.com/aead/chacha20")
       (synopsis "ChaCha20 and XChaCha20 stream ciphers")
       (description "ChaCha is a stream cipher family created by Daniel Bernstein.
@@ -1137,8 +1130,7 @@ standardized in RFC 7539.")
     (arguments
      `(#:import-path "github.com/opentracing/opentracing-go"))
     (native-inputs
-     `(("go-github-com-stretchr-testify"
-        ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/opentracing/opentracing-go")
     (synopsis "OpenTracing API for Go")
     (description "OpenTracing-Go is a Go implementation of the OpenTracing API.")
@@ -1164,8 +1156,7 @@ standardized in RFC 7539.")
        #:unpack-path "github.com/OperatorFoundation/monolith-go"
        #:import-path "github.com/OperatorFoundation/monolith-go/monolith"))
     (propagated-inputs
-     `(("go-github-com-deckarep-golang-set"
-        ,go-github-com-deckarep-golang-set)))
+     (list go-github-com-deckarep-golang-set))
     (home-page "https://github.com/OperatorFoundation/monolith-go")
     (synopsis "Byte sequences library")
     (description "Monolith-Go is a Go library for working with byte sequences.")
@@ -1211,10 +1202,8 @@ standardized in RFC 7539.")
       (build-system go-build-system)
       (arguments `(#:import-path "howett.net/plist"))
       (inputs
-       `(("go-github.com-jessevdk-go-flags" ,go-github.com-jessevdk-go-flags)
-         ("go-github-com-kr-pretty" ,go-github-com-kr-pretty)
-         ("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)
-         ("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+       (list go-github.com-jessevdk-go-flags go-github-com-kr-pretty
+             go-gopkg-in-check-v1 go-gopkg-in-yaml-v2))
       (home-page "https://github.com/DHowett/go-plist")
       (synopsis "Apple property list transcoder")
       (description "This list transcoder supports encoding/decoding property
@@ -1303,11 +1292,8 @@ types.")
                "github.com/blanu/Dust/go/v2/interface"
                "github.com/blanu/Dust/go/v2/shaping")))))))
     (propagated-inputs
-     `(("go-github-com-operatorfoundation-ed25519"
-        ,go-github-com-operatorfoundation-ed25519)
-       ("go-github-com-op-go-logging"
-        ,go-github-com-op-go-logging)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-operatorfoundation-ed25519
+           go-github-com-op-go-logging go-golang-org-x-crypto))
     (home-page "https://github.com/blanu/Dust")
     (synopsis "Censorship-resistant internet transport protocol")
     (description "Dust is an Internet protocol designed to resist a number of
@@ -1504,16 +1490,12 @@ protocol from the Pluggable Transports 2.0 specification.")
                "github.com/OperatorFoundation/obfs4/proxy_dialers/proxy_socks4"
                "github.com/OperatorFoundation/obfs4/transports")))))))
     (propagated-inputs
-     `(("go-github-com-dchest-siphash"
-        ,go-github-com-dchest-siphash)
-       ("go-github-com-operatorfoundation-ed25519"
-        ,go-github-com-operatorfoundation-ed25519)
-       ("go-github-com-willscott-goturn"
-        ,go-github-com-willscott-goturn)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-torproject-org-pluggable-transports-goptlib"
-        ,go-torproject-org-pluggable-transports-goptlib)))
+     (list go-github-com-dchest-siphash
+           go-github-com-operatorfoundation-ed25519
+           go-github-com-willscott-goturn
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-torproject-org-pluggable-transports-goptlib))
     (home-page "https://github.com/OperatorFoundation/obfs4")
     (synopsis "Network obfourscator to scramble network traffic")
     (description "Obfs4 is a look-like nothing obfuscation protocol that
@@ -1601,7 +1583,7 @@ Go.")
     (arguments
      `(#:import-path "github.com/sevlyar/go-daemon"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://github.com/sevlyar/go-daemon")
     (synopsis "Library for writing system daemons")
     (description "Go-Daemon is a library for writing system daemons in Go.")
@@ -1638,9 +1620,7 @@ Go.")
                (substitute* "src/github.com/keybase/go-ps/process_openbsd.go"
                  (("^// \\+build ignore") "")))))))
       (native-inputs
-       `(("coreutils" ,coreutils)
-         ("go-github-com-stretchr-testify"
-          ,go-github-com-stretchr-testify)))
+       (list coreutils go-github-com-stretchr-testify))
       (home-page "https://github.com/keybase/go-ps")
       (synopsis "Process list library for Go")
       (description "Go-Ps is a library for Go that implements OS-specific APIs
@@ -1841,10 +1821,8 @@ jar struct to manage the cookies added to the cookie jar.")
      '(#:unpack-path "github.com/gizak/termui"
        #:import-path "github.com/gizak/termui/v3"))
     (propagated-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-mitchellh-go-wordwrap"
-        ,go-github-com-mitchellh-go-wordwrap)
-       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
+     (list go-github.com-mattn-go-runewidth
+           go-github-com-mitchellh-go-wordwrap go-github.com-nsf-termbox-go))
     (home-page "https://github.com/gizak/termui")
     (synopsis "Terminal dashboard widget Go library")
     (description
@@ -1895,7 +1873,7 @@ mouse, and terminal resizing events.")
     (arguments
      '(#:import-path "github.com/mitchellh/go-wordwrap"))
     (propagated-inputs
-     `(("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-gopkg-in-yaml-v2))
     (home-page "https://github.com/mitchellh/go-wordwrap")
     (synopsis "Go library for word-wrapping strings")
     (description
@@ -1946,7 +1924,7 @@ generally useful thing to do.")
     (arguments
      '(#:import-path "github.com/daviddengcn/go-colortext"))
     (native-inputs
-     `(("go-github-com-golangplus-testing" ,go-github-com-golangplus-testing)))
+     (list go-github-com-golangplus-testing))
     (synopsis "Change the color of console text and background")
     (description
      "This is a package to change the color of the text and background in the
@@ -1973,7 +1951,7 @@ Under Windows, the console APIs are used.  Otherwise, ANSI texts are output.")
     (arguments
      '(#:import-path "github.com/golangplus/testing"))
     (propagated-inputs
-     `(("go-github-com-golangplus-fmt" ,go-github-com-golangplus-fmt)))
+     (list go-github-com-golangplus-fmt))
     (synopsis "Additions to Go's standard testing package")
     (description "This package provides additions to Go's stdlib testing.")
     (license license:bsd-3)))
@@ -1996,7 +1974,7 @@ Under Windows, the console APIs are used.  Otherwise, ANSI texts are output.")
     (arguments
      '(#:import-path "github.com/leodido/go-urn"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (synopsis "Parser for uniform resource names as seen on RFC 2141")
     (description
      "This package implements a parser for uniform resource names (URN) as
@@ -2103,7 +2081,7 @@ implemented features include
     (arguments
      '(#:import-path "github.com/go-playground/universal-translator"))
     (propagated-inputs
-     `(("go-github-com-go-playground-locales" ,go-github-com-go-playground-locales)))
+     (list go-github-com-go-playground-locales))
     (synopsis "Translator using Unicode CLDR data and pluralization rules")
     (description
      "This package offers an Internalization Translator for Go using
@@ -2141,12 +2119,10 @@ professionally translated
     (arguments
      '(#:import-path "gopkg.in/go-playground/validator.v9"))
     (native-inputs
-     `(("go-gopkg-in-go-playground-assert-v1"
-        ,go-gopkg-in-go-playground-assert-v1)))
+     (list go-gopkg-in-go-playground-assert-v1))
     (propagated-inputs
-     `(("go-github-com-go-playground-universal-translator"
-        ,go-github-com-go-playground-universal-translator)
-       ("go-github-com-leodido-go-urn" ,go-github-com-leodido-go-urn)))
+     (list go-github-com-go-playground-universal-translator
+           go-github-com-leodido-go-urn))
     (synopsis "Validator for structs and individual fields based on tags")
     (description
      "This package implements value validations for structs and individual
@@ -2191,10 +2167,9 @@ web framework
      '(#:import-path "github.com/aws/aws-sdk-go/aws"
        #:unpack-path "github.com/aws/aws-sdk-go"))
     (propagated-inputs
-     `(("go-github-com-go-sql-driver-mysql" ,go-github-com-go-sql-driver-mysql)
-       ("go-github-com-jmespath-go-jmespath" ,go-github-com-jmespath-go-jmespath)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-go-sql-driver-mysql
+           go-github-com-jmespath-go-jmespath go-github-com-pkg-errors
+           go-golang-org-x-net))
     (home-page "https://github.com/aws/aws-sdk-go")
     (synopsis "Library to access Amazon Web Services (AWS)")
     (description
@@ -2301,7 +2276,7 @@ per-goroutine.")
     (arguments
      `(#:import-path "github.com/saracen/walker"))
     (inputs
-     `(("go-golang-org-x-sync" ,go-golang-org-x-sync)))
+     (list go-golang-org-x-sync))
     (home-page "https://github.com/saracen/walker")
     (synopsis "Faster, parallel version of Go's filepath.Walk")
     (license license:expat)
@@ -2425,7 +2400,7 @@ Go programming language.")
                       ".*\\.gz$"))
                #t)))))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (synopsis "Supplementary cryptographic libraries in Go")
       (description "This package provides supplementary cryptographic libraries
 for the Go language.")
@@ -2640,7 +2615,7 @@ time.")
       (arguments
        `(#:import-path "golang.org/x/oauth2"))
       (propagated-inputs
-       `(("go-golang-org-x-net" ,go-golang-org-x-net)))
+       (list go-golang-org-x-net))
       (home-page "https://go.googlesource.com/oauth2")
       (synopsis "Client implementation of the OAuth 2.0 spec")
       (description "This package contains a client implementation for OAuth 2.0
@@ -2749,8 +2724,7 @@ is similar to Go's standard library @code{json} and @code{xml} package.")
       (arguments
        '(#:import-path "github.com/getsentry/raven-go"))
       (propagated-inputs
-       `(("go-github-com-certifi-gocertifi" ,go-github-com-certifi-gocertifi)
-         ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)))
+       (list go-github-com-certifi-gocertifi go-github-com-pkg-errors))
       (home-page "https://github.com/getsentry/raven-go")
       (synopsis "Sentry client in Go")
       (description "This package is a Go client API for the Sentry event/error
@@ -3305,7 +3279,7 @@ middleware for Go web applications and services.")
     (arguments
      `(#:import-path "github.com/spf13/cast"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/cast")
     (synopsis "Safe and easy casting from one type to another in Go")
     (description "Safe and easy casting from one type to another in Go")
@@ -3354,7 +3328,7 @@ applications as well as a program to generate applications and command files.")
     (arguments
      `(#:import-path "github.com/spf13/jwalterweatherman"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/jwalterweatherman")
     (synopsis "Go logging library")
     (description "Go logging library")
@@ -3419,7 +3393,7 @@ GNU extensions} to the POSIX recommendations for command-line options.")
        ("gopkg.in/ini.v1" ,go-gopkg-in-ini-v1)
        ("gopkg.in/yaml.v2" ,go-gopkg-in-yaml-v2)))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/spf13/viper")
     (synopsis "Go configuration with fangs")
     (description
@@ -3543,7 +3517,7 @@ application's http.Handlers.")
     (arguments
      `(#:import-path "github.com/subosito/gotenv"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/subosito/gotenv")
     (synopsis "Go library for loading environment variables from files")
     (description "Go library for loading environment variables from files")
@@ -3565,11 +3539,9 @@ application's http.Handlers.")
          "0rvqzic2zz7fpxyizmqxwmhv1m52ii9bgxnqa6km8wsa0l08wh42"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)
-       ("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)
-       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-github-com-davecgh-go-spew go-github-com-pmezard-go-difflib
+           go-github-com-stretchr-testify go-golang-org-x-crypto
+           go-golang-org-x-sys))
     (arguments
      '(#:import-path "github.com/sirupsen/logrus"))
     (home-page "https://github.com/sirupsen/logrus")
@@ -3595,7 +3567,7 @@ compatible with the standard library logger.")
     (arguments
      `(#:import-path "github.com/rifflock/lfshook"))
     (propagated-inputs
-     `(("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)))
+     (list go-github-com-sirupsen-logrus))
     (home-page "https://github.com/rifflock/lfshook")
     (synopsis "Local File System hook for Logrus logger")
     (description "This package provides a hook for Logrus to write directly to
@@ -3650,8 +3622,7 @@ finding resources located relative to the executable file.")
            "0x0cn7l5gda2khsfypix7adxd5yqighzn04mxjw6hc4ayrh7his5"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-kardianos-osext"
-          ,go-github-com-kardianos-osext)))
+       (list go-github-com-kardianos-osext))
       (arguments
        '(#:tests? #f                ;FIXME tests fail: Service is not running.
          #:import-path "github.com/ayufan/golang-kardianos-service"))
@@ -3682,11 +3653,8 @@ SysVinit, and more.")
            "1yg2zrikn3vkvkx5mn51p6bfjk840qdkn7ahhhvvcsc8mpigrjc6"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-         ("go-github-com-sirupsen-logrus"
-          ,go-github-com-sirupsen-logrus)
-         ("go-golang-org-x-crypto"
-          ,go-golang-org-x-crypto)))
+       (list go-golang-org-x-sys go-github-com-sirupsen-logrus
+             go-golang-org-x-crypto))
       (arguments
        '(#:import-path "github.com/docker/distribution"
          #:phases
@@ -3808,7 +3776,7 @@ which satisfies the cron expression.")
     (arguments
      '(#:import-path "gopkg.in/check.v1"))
     (propagated-inputs
-     `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-kr-pretty))
     (home-page "https://gopkg.in/check.v1")
     (synopsis "Test framework for the Go language")
     (description "This package provides a test library for the Go language.")
@@ -3867,7 +3835,7 @@ which satisfies the cron expression.")
     (arguments
      '(#:import-path "gopkg.in/yaml.v2"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://gopkg.in/yaml.v2")
     (synopsis "YAML reader and writer for the Go language")
     (description
@@ -3892,7 +3860,7 @@ values.")
     (arguments
      '(#:import-path "gopkg.in/yaml.v3"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://gopkg.in/yaml.v3")
     (synopsis "YAML reader and writer for the Go language")
     (description
@@ -3917,7 +3885,7 @@ The yaml package supports most of YAML 1.2, but preserves some behavior from
          "0h671sv7hfprja495kavazkalkx7xzaqksjh13brcnwq67ijrali"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (arguments
      '(#:import-path "github.com/mattn/go-isatty"))
     (home-page "https://github.com/mattn/go-isatty")
@@ -3944,8 +3912,7 @@ terminal.")
          "0q34zqwbnls72md8q8mhj368s7p3i4xspvs3rk8fs76s0pn7dr2l"))))
     (build-system go-build-system)
     (native-inputs
-     `(("go-github-com-mattn-go-isatty"
-        ,go-github-com-mattn-go-isatty)))
+     (list go-github-com-mattn-go-isatty))
     (arguments
      '(#:import-path "github.com/mattn/go-colorable"))
     (synopsis "Handle ANSI color escapes on Windows")
@@ -3997,10 +3964,7 @@ makes it possible to handle ANSI color escapes on Windows.")
            "00bz22314j26736w1f0q4jy9d9dfaml17vn890n5zqy3cmvmww1j"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-mattn-go-isatty"
-          ,go-github-com-mattn-go-isatty)
-         ("go-github-com-mattn-go-colorable"
-          ,go-github-com-mattn-go-colorable)))
+       (list go-github-com-mattn-go-isatty go-github-com-mattn-go-colorable))
       (arguments
        '(#:import-path "github.com/mgutz/ansi"))
       (home-page "https://github.com/mgutz/ansi")
@@ -4032,7 +3996,7 @@ generate ANSI colored strings.")
       ;; be built again.  Thus its CGO requirements must be made available in
       ;; the environment, that is, they must be propagated.
       (propagated-inputs
-       `(("lua" ,lua)))
+       (list lua))
       (arguments
        `(#:unpack-path "github.com/aarzilli/golua"
          #:import-path "github.com/aarzilli/golua/lua"
@@ -4074,8 +4038,7 @@ run a Lua virtual machine.")
            "1izcp7p8nagjwqd13shb0020w7xhppib1a3glw2d1468bflhksnm"))))
       (build-system go-build-system)
       (native-inputs
-       `(("lua" ,lua)
-         ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)))
+       (list lua go-github-com-aarzilli-golua))
       (arguments
        `(#:unpack-path "gitlab.com/ambrevar/golua"
          #:import-path "gitlab.com/ambrevar/golua/unicode"
@@ -4167,7 +4130,7 @@ similar word.")
            "1acjgw9cz1l0l9mzkyk7irz6cfk31wnxgbwa805fvm1rqcjzin2c"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)))
+       (list go-github-com-aarzilli-golua))
       (arguments
        `(#:tests? #f                    ; Upstream tests are broken.
          #:import-path "github.com/stevedonovan/luar"))
@@ -4208,7 +4171,7 @@ be performed.")
            "0rjfms0csjqi91xnddzx3rcrcaikc7xc027617px3kdwdap80ir4"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-kr-text" ,go-github-com-kr-text)))
+       (list go-github-com-kr-text))
       (arguments
        `(#:tests? #f                    ; Upstream tests seem to be broken.
          #:import-path "github.com/michiwend/golang-pretty"))
@@ -4242,8 +4205,7 @@ functions in packages @code{fmt} and @code{log}.")
            "1li9daw0kghb80rdmxbh7g72qhxcvx3rvhwq5gs0jrr9hb8pjvcn"))))
       (build-system go-build-system)
       (native-inputs
-       `(("go-github-com-michiwend-golang-pretty" ,go-github-com-michiwend-golang-pretty)
-         ("go-github-com-kr-text" ,go-github-com-kr-text)))
+       (list go-github-com-michiwend-golang-pretty go-github-com-kr-text))
       (arguments
        `(#:import-path "github.com/michiwend/gomusicbrainz"))
       (home-page "https://github.com/michiwend/gomusicbrainz")
@@ -4275,8 +4237,7 @@ and lookup requests.  Browse requests are not supported yet.")
       ;; be built again.  Thus its CGO requirements must be made available in
       ;; the environment, that is, they must be propagated.
       (propagated-inputs
-       `(("pkg-config" ,pkg-config)
-         ("taglib" ,taglib)))
+       (list pkg-config taglib))
       (arguments
        `(#:import-path "github.com/wtolson/go-taglib"
          ;; Tests don't pass "vet" on Go since 1.11.  See
@@ -4441,7 +4402,7 @@ implementing the same interface.")
        '(#:unpack-path "github.com/btcsuite/btcd"
          #:import-path "github.com/btcsuite/btcd/btcec"))
       (native-inputs
-       `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)))
+       (list go-github-com-davecgh-go-spew))
       (home-page "https://github.com/btcsuite/btcd")
       (synopsis "Elliptic curve cryptography to work with Bitcoin")
       (description "Package @command{btcec} implements elliptic curve
@@ -4512,10 +4473,8 @@ Architecture Processors\" by J. Guilford et al.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-crypto"))
       (native-inputs
-       `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)))
+       (list go-golang-org-x-crypto go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf go-github-com-minio-sha256-simd))
       (home-page
        "https://github.com/libp2p/go-libp2p-crypto")
       (synopsis "Various cryptographic utilities used by IPFS")
@@ -4679,12 +4638,12 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/multiformats/go-multihash"))
       (native-inputs
-       `(("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-mr-tron-base58
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multihash")
       (synopsis "Multihash implementation in Go")
       (description "Multihash implementation in Go.")
@@ -4710,16 +4669,16 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-peer"))
       (native-inputs
-       `(("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-gogo-protobuf
+             go-github-com-minio-sha256-simd
+             go-github-com-minio-blake2b-simd
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/libp2p/go-libp2p-peer")
       (synopsis "PKI based identities for use in go-libp2p")
       (description "PKI based identities for use in @command{go-libp2p}.")
@@ -4770,19 +4729,19 @@ required by Go's standard Hash interface.")
       (arguments
        '(#:import-path "github.com/libp2p/go-libp2p-metrics"))
       (native-inputs
-       `(("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-libp2p-go-flow-metrics
+             go-github-com-libp2p-go-libp2p-peer
+             go-github-com-libp2p-go-libp2p-protocol
+             go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/libp2p/go-libp2p-metrics")
       (synopsis "Connection wrapper for go-libp2p that provides bandwidth metrics")
       (description "A connection wrapper for @command{go-libp2p} that provides bandwidth
@@ -4892,7 +4851,7 @@ unknown structures such as those decoded from JSON.")
     (arguments
      `(#:import-path "github.com/mitchellh/copystructure"))
     (native-inputs
-     `(("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)))
+     (list go-github-com-mitchellh-reflectwalk))
     (home-page "https://github.com/mitchellh/copystructure")
     (synopsis "Go library for decoding deep copying values")
     (description "@code{copystructure} is a Go library for deep copying values
@@ -4924,13 +4883,13 @@ references.")
        '(#:import-path
          "github.com/multiformats/go-multiaddr"))
       (native-inputs
-       `(("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multiaddr")
       (synopsis "Composable and future-proof network addresses")
       (description "Multiaddr is a standard way to represent addresses that
@@ -4967,14 +4926,14 @@ does the following:
                ;; TODO: Tests fail because they try to access the network.
                #:tests? #f)))
       (native-inputs
-       `(("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+       (list go-github-com-multiformats-go-multiaddr
+             go-github-com-multiformats-go-multihash
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-spaolacci-murmur3
+             go-golang-org-x-crypto))
       (home-page "https://github.com/multiformats/go-multiaddr-net")
       (synopsis "Multiaddress net tools")
       (description "This package provides Multiaddr specific versions of
@@ -5061,7 +5020,7 @@ as conversion to and from @command{net.Addr}.")
        '(#:import-path
          "github.com/sabhiram/go-gitignore"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-stretchr-testify))
       (home-page "https://github.com/sabhiram/go-gitignore")
       (synopsis "Gitignore parser for Go")
       (description "A @command{.gitignore} parser for Go.")
@@ -5086,7 +5045,7 @@ as conversion to and from @command{net.Addr}.")
     (arguments
      '(#:import-path "github.com/urfave/cli"))
     (propagated-inputs
-     `(("go-github-com-go-md2man" ,go-github-com-go-md2man)))
+     (list go-github-com-go-md2man))
     (home-page "https://github.com/urfave/cli")
     (synopsis "Simple, fast, and fun package for building command line apps in Go")
     (description "@command{cli} is a simple, fast, and fun package for
@@ -5136,7 +5095,7 @@ fast and distributable command line applications in an expressive way.")
     (arguments
      '(#:import-path "github.com/cpuguy83/go-md2man"))
     (propagated-inputs
-     `(("go-github-com-russross-blackfriday" ,go-github-com-russross-blackfriday)))
+     (list go-github-com-russross-blackfriday))
     (home-page "https://github.com/cpuguy83/go-md2man")
     (synopsis "Convert markdown into roff")
     (description "Go-md2man is a Go program that converts markdown to roff for
@@ -5161,10 +5120,9 @@ the purpose of building man pages.")
     (arguments
      '(#:import-path "github.com/russross/blackfriday"))
     (propagated-inputs
-     `(("go-github-com-shurcool-sanitized-anchor-name"
-        ,go-github-com-shurcool-sanitized-anchor-name)))
+     (list go-github-com-shurcool-sanitized-anchor-name))
     (native-inputs
-     `(("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)))
+     (list go-github-com-pmezard-go-difflib))
     (home-page "https://github.com/russross/blackfriday")
     (synopsis "Markdown processor in Go")
     (description "Blackfriday is a Markdown processor in Go.")
@@ -5356,7 +5314,7 @@ format in Go.")
                 "0vzfz06y9q8gs2nxx0kys0591vzp78k0fvpb8digi5n15h3b25hy"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-kr-text" ,go-github-com-kr-text)))
+     (list go-github-com-kr-text))
     (arguments
      '(#:import-path "github.com/kr/pretty"))
     (synopsis "Pretty printer for Go values")
@@ -5478,7 +5436,7 @@ golang's database/sql package.")
     (arguments
      '(#:import-path "github.com/lucasb-eyer/go-colorful"))
     (native-inputs
-     `(("go-golang-org-sql-mock" ,go-golang-org-sql-mock)))
+     (list go-golang-org-sql-mock))
     (synopsis "Convert between colorspaces and generate colors")
     (description "This package implements Go's @code{color.Color} interface
 and provides a means of converting colors stored as RGB to various
@@ -5504,7 +5462,7 @@ colorspaces.")
     (arguments
      '(#:import-path "github.com/gdamore/encoding"))
     (inputs
-     `(("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-text))
     (home-page "https://github.com/gdamore/encoding")
     (synopsis "Provide encodings missing from Go")
     (description "This package provides useful encodings not included in the
@@ -5543,10 +5501,8 @@ non-UTF-friendly sources.")
                            (find-files out "\\.gz$"))
                  #t))))))
       (inputs
-       `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-         ("go-golang-org-colorful" ,go-golang-org-colorful)
-         ("go-golang-org-x-text" ,go-golang-org-x-text)
-         ("go-github-com-gdamore-encoding" ,go-github-com-gdamore-encoding)))
+       (list go-github.com-mattn-go-runewidth go-golang-org-colorful
+             go-golang-org-x-text go-github-com-gdamore-encoding))
       (home-page "https://github.com/gdamore/tcell")
       (synopsis "Provide a cell-based view for text terminals")
       (description "This package includes a full parser and expander for
@@ -5582,9 +5538,8 @@ systems.")
                  (for-each make-file-writable
                            (find-files out "\\.gz$"))))))))
       (propagated-inputs
-       `(("go-golang-org-x-term" ,go-golang-org-x-term)
-         ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-         ,@(package-inputs go-github-com-gdamore-tcell)))))
+       (modify-inputs (package-inputs go-github-com-gdamore-tcell)
+         (prepend go-golang-org-x-term go-golang-org-x-sys)))))
 
 (define-public go-github-com-mattn-go-shellwords
   (let ((commit "2444a32a19f450fabaa0bb3e96a703f15d9a97d2")
@@ -5683,7 +5638,7 @@ mutex, simply ignore the RLock/RUnlock functions.")
        ;; The test suite requires networking.
        #:tests? #f))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (synopsis "TLS 1.3 with QUIC in Go")
     (description "This package provides @code{qtls}, a QUIC-capable variant of
 the Go standard library's TLS 1.3 implementation.")
@@ -5729,7 +5684,7 @@ internal ChaCha20 package.")
     (arguments
      '(#:import-path "github.com/cheekybits/genny"))
     (propagated-inputs
-     `(("go-golang-org-x-tools" ,go-golang-org-x-tools)))
+     (list go-golang-org-x-tools))
     (synopsis "Generics for Go")
     (description "This package provides @code{genny}, a Go language
 implementation of generics.")
@@ -5755,11 +5710,10 @@ implementation of generics.")
        ;; XXX More packages required...
        #:tests? #f))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-cheekybits-genny" ,go-github-com-cheekybits-genny)
-       ("go-github-com-marten-seemann-chacha20" ,go-github-com-marten-seemann-chacha20)
-       ("go-github-com-marten-seemann-qtls" ,go-github-com-marten-seemann-qtls)
-       ("go-github-com-golang-protobuf-proto" ,go-github-com-golang-protobuf-proto)))
+     (list go-golang-org-x-crypto go-github-com-cheekybits-genny
+           go-github-com-marten-seemann-chacha20
+           go-github-com-marten-seemann-qtls
+           go-github-com-golang-protobuf-proto))
     (synopsis "QUIC in Go")
     (description "This package provides a Go language implementation of the QUIC
 network protocol.")
@@ -5783,7 +5737,7 @@ network protocol.")
     (arguments
      '(#:import-path "github.com/francoispqt/gojay"))
     (propagated-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (synopsis "JSON encoder/decoder with powerful stream API for Golang")
     (description "GoJay is a performant JSON encoder/decoder for Golang.  It has
 a simple API and doesn't use reflection.  It relies on small interfaces to
@@ -5929,7 +5883,7 @@ fnmatch gist (https://gist.github.com/kballard/272720).")
       (arguments
        '(#:import-path "github.com/ddevault/go-libvterm"))
       (propagated-inputs
-       `(("go-github-com-mattn-go-pointer" ,go-github-com-mattn-go-pointer)))
+       (list go-github-com-mattn-go-pointer))
       (home-page "https://github.com/ddevault/go-libvterm")
       (synopsis "Go binding to libvterm")
       (description
@@ -5954,7 +5908,7 @@ fnmatch gist (https://gist.github.com/kballard/272720).")
     (arguments
      '(#:import-path "github.com/emersion/go-imap"))
     (native-inputs
-     `(("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-text))
     (home-page "https://github.com/emersion/go-imap")
     (synopsis "IMAP4rev1 library written in Go")
     (description "This package provides an IMAP4rev1 library written in Go.  It
@@ -6005,9 +5959,8 @@ can be used to build a client and/or a server.")
       (arguments
        '(#:import-path "github.com/emersion/go-imap-idle"))
       (native-inputs
-       `(("go-github-com-emersion-go-imap" ,go-github-com-emersion-go-imap)
-         ("go-github-com-emersion-go-sasl" ,go-github-com-emersion-go-sasl)
-         ("go-golang-org-x-text" ,go-golang-org-x-text)))
+       (list go-github-com-emersion-go-imap go-github-com-emersion-go-sasl
+             go-golang-org-x-text))
       (home-page "https://github.com/emersion/go-imap-idle")
       (synopsis "IDLE extension for go-imap")
       (description "This package provides an IDLE extension for go-imap.")
@@ -6053,7 +6006,7 @@ colorized or SGR defined output to the standard output.")
      '(#:import-path "github.com/google/go-cmp/cmp"
        #:unpack-path "github.com/google/go-cmp"))
     (propagated-inputs
-     `(("go-golang-org-x-xerrors" ,go-golang-org-x-xerrors)))
+     (list go-golang-org-x-xerrors))
     (synopsis "Determine equality of values in Go")
     (description "This package provides a more powerful and safer
 alternative to @code{reflect.DeepEqual} for comparing whether two values
@@ -6153,8 +6106,7 @@ into URL query parameters.")
        #:import-path "github.com/google/go-github/v26/github"
        #:unpack-path "github.com/google/go-github/v26"))
     (native-inputs
-     `(("go-github-com-google-go-querystring" ,go-github-com-google-go-querystring)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-google-go-querystring go-golang-org-x-crypto))
     (home-page "https://github.com/google/go-github/")
     (synopsis "Client library for accessing the GitHub API v3")
     (description "@code{go-github} is a Go client library for accessing the
@@ -6242,9 +6194,7 @@ common task.")
 (define-public go-gotest-tools-internal-format
   (package (inherit (go-gotest-tools-package "internal/format"))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Formats messages for use with gotest-tools")
     (description "This package provides a way to format messages for use
 with gotest-tools.")))
@@ -6258,8 +6208,7 @@ with gotest-tools.")))
 (define-public go-gotest-tools-internal-source
   (package (inherit (go-gotest-tools-package "internal/source"))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp" ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Source code AST formatters for gotest-tools")
     (description "This package provides source code AST formatters for
 gotest-tools.")))
@@ -6274,9 +6223,7 @@ gotest-tools.")))
     ;(propagated-inputs
     ; `(("go-gotest-tools-internal-format" ,go-gotest-tools-internal-format)))
     (native-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-pkg-errors go-github-com-google-go-cmp-cmp))
     (synopsis "Compare values and fail a test when a comparison fails")
     (description "This package provides a way to compare values and fail a
 test when a comparison fails.")
@@ -6300,29 +6247,22 @@ test when a comparison fails.")
     (arguments
      '(#:import-path "gotest.tools/gotestsum"))
     (native-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-golang.org-x-sync-errgroup" ,go-golang.org-x-sync-errgroup)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-sirupsen-logrus"
-        ,go-github-com-sirupsen-logrus)
-       ("go-github-com-spf13-pflag" ,go-github-com-spf13-pflag)
-       ("go-github-com-jonboulle-clockwork"
-        ,go-github-com-jonboulle-clockwork)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-gotest-tools-assert" ,go-gotest-tools-assert)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)
-       ;; TODO: This would be better as a propagated-input of
-       ;; go-gotest-tools-assert, but that does not work for
-       ;; some reason.
-       ("go-gotest-tools-internal-format"
-        ,go-gotest-tools-internal-format)
-       ("go-gotest-tools-internal-difflib"
-        ,go-gotest-tools-internal-difflib)
-       ("go-gotest-tools-internal-source"
-        ,go-gotest-tools-internal-source)
-       ("go-github-com-google-go-cmp-cmp"
-        ,go-github-com-google-go-cmp-cmp)))
+     (list go-github-com-fatih-color
+           go-golang.org-x-sync-errgroup
+           go-github-com-pkg-errors
+           go-github-com-sirupsen-logrus
+           go-github-com-spf13-pflag
+           go-github-com-jonboulle-clockwork
+           go-golang-org-x-crypto
+           go-gotest-tools-assert
+           go-github-com-google-go-cmp-cmp
+           ;; TODO: This would be better as a propagated-input of
+           ;; go-gotest-tools-assert, but that does not work for
+           ;; some reason.
+           go-gotest-tools-internal-format
+           go-gotest-tools-internal-difflib
+           go-gotest-tools-internal-source
+           go-github-com-google-go-cmp-cmp))
     (synopsis "Go test runner with output optimized for humans")
     (description "This package provides a @code{go test} runner with output
 optimized for humans, JUnit XML for CI integration, and a summary of the
@@ -6449,8 +6389,7 @@ efficient space usage.")
                (("spaolacci") "twmb"))
              #t)))))
     (propagated-inputs
-     `(("go-github-com-twmb-murmur3" ,go-github-com-twmb-murmur3)
-       ("go-github-com-willf-bitset" ,go-github-com-willf-bitset)))
+     (list go-github-com-twmb-murmur3 go-github-com-willf-bitset))
     (synopsis "Bloom filters in Go")
     (description "This package provides a Go implementation of bloom filters,
 based on murmurhash.")
@@ -6502,7 +6441,7 @@ characters with their ASCII approximations.")
       (arguments
        `(#:import-path "github.com/golang/freetype"))
       (propagated-inputs
-       `(("go-golang-org-x-image" ,go-golang-org-x-image)))
+       (list go-golang-org-x-image))
       (home-page "https://github.com/golang/freetype")
       (synopsis "Freetype font rasterizer in the Go programming language")
       (description "The Freetype font rasterizer in the Go programming language.")
@@ -6527,7 +6466,7 @@ characters with their ASCII approximations.")
      `(#:tests? #f      ; Issue with test flags.
        #:import-path "github.com/fogleman/gg"))
     (propagated-inputs
-     `(("go-github-com-golang-freetype" ,go-github-com-golang-freetype)))
+     (list go-github-com-golang-freetype))
     (home-page "https://github.com/fogleman/gg")
     (synopsis "2D rendering in Go")
     (description "@code{gg} is a library for rendering 2D graphics in pure Go.")
@@ -6652,8 +6591,7 @@ used by other processes.")
       (arguments
        `(#:import-path "github.com/surgebase/porter2"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-         ("go-github-com-surge-glog" ,go-github-com-surge-glog)))
+       (list go-github-com-stretchr-testify go-github-com-surge-glog))
       (home-page "https://github.com/surgebase/porter2")
       (synopsis "Go library implementing english Porter2 stemmer")
       (description "Porter2 implements the
@@ -6752,7 +6690,7 @@ which are widely used in other languages but absent in Go package strings.")
     (arguments
      `(#:import-path "github.com/imdario/mergo"))
     (native-inputs
-     `(("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-gopkg-in-yaml-v2))
     (home-page "https://github.com/imdario/mergo/")
     (synopsis "Helper to merge structs and maps in Golang")
     (description "Helper to merge structs and maps in Golang.  Useful for
@@ -6782,16 +6720,16 @@ maps (because they are not addressable using Go reflection).")
      `(#:tests? #f ;network tests only
        #:import-path "github.com/Masterminds/sprig"))
     (native-inputs
-     `(("go-github-com-masterminds-goutils" ,go-github-com-masterminds-goutils)
-       ("go-github-com-masterminds-semver" ,go-github-com-masterminds-semver)
-       ("go-github-com-google-uuid" ,go-github-com-google-uuid)
-       ("go-github-com-huandu-xstrings" ,go-github-com-huandu-xstrings)
-       ("go-github-com-imdario-mergo" ,go-github-com-imdario-mergo)
-       ("go-github-com-mitchellh-reflectwalk" ,go-github-com-mitchellh-reflectwalk)
-       ("go-github-com-mitchellh-copystructure" ,go-github-com-mitchellh-copystructure)
-       ("go-github-com-spf13-cast" ,go-github-com-spf13-cast)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-masterminds-goutils
+           go-github-com-masterminds-semver
+           go-github-com-google-uuid
+           go-github-com-huandu-xstrings
+           go-github-com-imdario-mergo
+           go-github-com-mitchellh-reflectwalk
+           go-github-com-mitchellh-copystructure
+           go-github-com-spf13-cast
+           go-golang-org-x-crypto
+           go-github-com-stretchr-testify))
     (home-page "https://github.com/Masterminds/sprig/")
     (synopsis "Template functions for Go templates")
     (description "Sprig is a library that provides more than 100 commonly used
@@ -6866,7 +6804,7 @@ matching and globbing with support for \"doublestar\" patterns.")
     (arguments
      `(#:import-path "github.com/alecthomas/colour"))
     (native-inputs
-     `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)))
+     (list go-github-com-mattn-go-isatty))
     (home-page "https://github.com/alecthomas/colour/")
     (synopsis "Colour terminal text for Go")
     (description "Package colour provides Quake-style colour formatting for
@@ -6896,7 +6834,7 @@ stripped.")
       (arguments
        `(#:import-path "github.com/alecthomas/repr"))
       (native-inputs
-       `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+       (list go-github-com-stretchr-testify))
       (home-page "https://github.com/alecthomas/repr/")
       (synopsis "Represent Go values in an almost direct form")
       (description "This package attempts to represent Go values in a form that
@@ -6921,7 +6859,7 @@ can be used almost directly in Go source code.")
      `(#:import-path "github.com/sergi/go-diff/diffmatchpatch"
        #:unpack-path "github.com/sergi/go-diff"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (home-page "https://github.com/sergi/go-diff/")
     (synopsis "Algorithms to perform operations for synchronizing plain text")
     (description "@code{go-diff} offers algorithms to perform operations required for
@@ -6952,10 +6890,8 @@ synchronizing plain text:
       (arguments
        `(#:import-path "github.com/alecthomas/assert"))
       (native-inputs
-       `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-         ("go-github-com-alecthomas-colour" ,go-github-com-alecthomas-colour)
-         ("go-github-com-alecthomas-repr" ,go-github-com-alecthomas-repr)
-         ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+       (list go-github-com-mattn-go-isatty go-github-com-alecthomas-colour
+             go-github-com-alecthomas-repr go-github-com-sergi-go-diff))
       (home-page "https://github.com/alecthomas/assert/")
       (synopsis "Go assertion library")
       (description "Assertion library that:
@@ -6983,12 +6919,12 @@ synchronizing plain text:
     (arguments
      `(#:import-path "github.com/alecthomas/chroma"))
     (native-inputs
-     `(("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-com-alecthomas-assert" ,go-github-com-alecthomas-assert)
-       ("go-github-com-alecthomas-colour" ,go-github-com-alecthomas-colour)
-       ("go-github-com-alecthomas-repr" ,go-github-com-alecthomas-repr)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+     (list go-github-com-dlclark-regexp2
+           go-github-com-alecthomas-assert
+           go-github-com-alecthomas-colour
+           go-github-com-alecthomas-repr
+           go-github-com-mattn-go-isatty
+           go-github-com-sergi-go-diff))
     (home-page "https://github.com/alecthomas/chroma/")
     (synopsis "General purpose syntax highlighter in pure Go")
     (description "Chroma takes source code and other structured text and
@@ -7012,7 +6948,7 @@ converts it into syntax highlighted HTML, ANSI-coloured text, etc.")
     (arguments
      `(#:import-path "github.com/andybalholm/cascadia"))
     (native-inputs
-     `(("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-golang-org-x-net))
     (home-page "https://github.com/andybalholm/cascadia/")
     (synopsis "CSS selectors for HTML")
     (description "The Cascadia package implements CSS selectors for use with
@@ -7036,8 +6972,7 @@ the parse trees produced by the html package.")
     (arguments
      `(#:import-path "github.com/PuerkitoBio/goquery"))
     (propagated-inputs
-     `(("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-andybalholm-cascadia go-golang-org-x-net))
     (home-page "https://github.com/PuerkitoBio/goquery")
     (synopsis "Features similar to jQuery to the Go language")
     (description "@code{goquery} brings a syntax and a set of features similar
@@ -7062,9 +6997,8 @@ to jQuery to the Go language.")
     (arguments
      '(#:import-path "github.com/jmespath/go-jmespath"))
     (native-inputs
-     `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)
-       ("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)
-       ("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-github-com-davecgh-go-spew go-github-com-pmezard-go-difflib
+           go-gopkg-in-yaml-v2))
     (home-page "https://github.com/jmespath/go-jmespath")
     (synopsis "Golang implementation of JMESPath")
     (description
@@ -7089,10 +7023,9 @@ transforms one JSON document into another through a JMESPath expression.")
     (arguments
      `(#:import-path "github.com/aymerick/douceur"))
     (native-inputs
-     `(("go-github-com-puerkitobio-goquery" ,go-github-com-puerkitobio-goquery)
-       ("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)))
+     (list go-github-com-puerkitobio-goquery
+           go-github-com-andybalholm-cascadia go-golang-org-x-net
+           go-github-com-gorilla-css))
     (home-page "https://github.com/aymerick/douceur/")
     (synopsis "CSS parser and inliner")
     (description "This package provides a CSS parser and inliner.")
@@ -7115,11 +7048,9 @@ transforms one JSON document into another through a JMESPath expression.")
     (arguments
      `(#:import-path "github.com/chris-ramon/douceur"))
     (native-inputs
-     `(("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-puerkitobio-goquery" ,go-github-com-puerkitobio-goquery)
-       ("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)))
+     (list go-github-com-aymerick-douceur go-github-com-puerkitobio-goquery
+           go-github-com-andybalholm-cascadia go-golang-org-x-net
+           go-github-com-gorilla-css))
     (home-page "https://github.com/chris-ramon/douceur/")
     (synopsis "CSS parser and inliner")
     (description "This package provides a CSS parser and inliner.")
@@ -7142,10 +7073,8 @@ transforms one JSON document into another through a JMESPath expression.")
     (arguments
      `(#:import-path "github.com/microcosm-cc/bluemonday"))
     (native-inputs
-     `(("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-chris-ramon-douceur go-github-com-aymerick-douceur
+           go-github-com-gorilla-css go-golang-org-x-net))
     (home-page "https://github.com/microcosm-cc/bluemonday/")
     (synopsis "HTML sanitizer")
     (description "@code{bluemonday} is a HTML sanitizer implemented in Go.")
@@ -7169,7 +7098,7 @@ transforms one JSON document into another through a JMESPath expression.")
      `(#:import-path "github.com/muesli/reflow/wordwrap"
        #:unpack-path "github.com/muesli/reflow"))
     (native-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+     (list go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/muesli/reflow/")
     (synopsis "Collection of methods helping to transform blocks of text")
     (description "This package provides a collection of ANSI-aware methods and
@@ -7217,10 +7146,8 @@ io.Writers helping you to transform blocks of text.")
     (arguments
      `(#:import-path "github.com/muesli/termenv"))
     (native-inputs
-     `(("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+     (list go-github-com-google-goterm go-golang-org-colorful
+           go-github-com-mattn-go-isatty go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/muesli/termenv/")
     (synopsis "Advanced styling options on the terminal")
     (description "termenv lets you safely use advanced styling options on the
@@ -7249,7 +7176,7 @@ escape sequences and color conversions.")
     (arguments
      `(#:import-path "github.com/nwidger/jsoncolor"))
     (native-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)))
+     (list go-github-com-fatih-color))
     (synopsis "Colorized JSON marshalling and encoding")
     (description
      "@code{jsoncolor} is a drop-in replacement for @code{encoding/json}'s
@@ -7274,7 +7201,7 @@ which produce colorized output using github.com/fatih/color.")
     (arguments
      `(#:import-path "github.com/olekukonko/tablewriter"))
     (native-inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)))
+     (list go-github.com-mattn-go-runewidth))
     (home-page "https://github.com/olekukonko/tablewriter/")
     (synopsis "Generate ASCII table")
     (description "This package generates ASCII tables.  Features:
@@ -7335,25 +7262,25 @@ which produce colorized output using github.com/fatih/color.")
     (arguments
      `(#:import-path "github.com/charmbracelet/glamour"))
     (native-inputs
-     `(("go-github-com-alecthomas-chroma" ,go-github-com-alecthomas-chroma)
-       ("go-github-com-danwakefield-fnmatch" ,go-github-com-danwakefield-fnmatch)
-       ("go-github-com-dlclark-regexp2" ,go-github-com-dlclark-regexp2)
-       ("go-github-com-microcosm-cc-bluemonday" ,go-github-com-microcosm-cc-bluemonday)
-       ("go-github-com-chris-ramon-douceur" ,go-github-com-chris-ramon-douceur)
-       ("go-github-com-aymerick-douceur" ,go-github-com-aymerick-douceur)
-       ("go-github-com-gorilla-css" ,go-github-com-gorilla-css)
-       ("go-github-com-muesli-reflow-ansi" ,go-github-com-muesli-reflow-ansi)
-       ("go-github-com-muesli-reflow-wordwrap" ,go-github-com-muesli-reflow-wordwrap)
-       ("go-github-com-muesli-reflow-indent" ,go-github-com-muesli-reflow-indent)
-       ("go-github-com-muesli-reflow-padding" ,go-github-com-muesli-reflow-padding)
-       ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-muesli-termenv" ,go-github-com-muesli-termenv)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-golang-org-colorful" ,go-golang-org-colorful)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-olekukonko-tablewriter" ,go-github-com-olekukonko-tablewriter)
-       ("go-github-com-yuin-goldmark" ,go-github-com-yuin-goldmark)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)))
+     (list go-github-com-alecthomas-chroma
+           go-github-com-danwakefield-fnmatch
+           go-github-com-dlclark-regexp2
+           go-github-com-microcosm-cc-bluemonday
+           go-github-com-chris-ramon-douceur
+           go-github-com-aymerick-douceur
+           go-github-com-gorilla-css
+           go-github-com-muesli-reflow-ansi
+           go-github-com-muesli-reflow-wordwrap
+           go-github-com-muesli-reflow-indent
+           go-github-com-muesli-reflow-padding
+           go-github.com-mattn-go-runewidth
+           go-github-com-muesli-termenv
+           go-github-com-google-goterm
+           go-golang-org-colorful
+           go-github-com-mattn-go-isatty
+           go-github-com-olekukonko-tablewriter
+           go-github-com-yuin-goldmark
+           go-golang-org-x-net))
     (home-page "https://github.com/charmbracelet/glamour/")
     (synopsis "Write handsome command-line tools with glamour")
     (description "@code{glamour} lets you render markdown documents and
@@ -7448,8 +7375,7 @@ errors (warnings).")
     (arguments
      `(#:import-path "github.com/go-git/gcfg"))
     (native-inputs
-     `(("go-gopkg-in-warnings" ,go-gopkg-in-warnings)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)))
+     (list go-gopkg-in-warnings go-github-com-pkg-errors))
     (build-system go-build-system)
     (home-page "https://github.com/go-git/gcfg/")
     (synopsis "Gcfg reads INI-style configuration files into Go structs")
@@ -7473,7 +7399,7 @@ errors (warnings).")
     (arguments
      `(#:import-path "github.com/go-git/go-billy/v5"))
     (native-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-gopkg-in-check-v1))
     (home-page "https://github.com/go-git/go-billy/")
     (synopsis "File system abstraction for Go")
     (description "Billy implements an interface based on the OS's standard
@@ -7551,7 +7477,7 @@ can manipulate a @file{ssh_config} file from a program.")
     (arguments
      `(#:import-path "github.com/xanzy/ssh-agent"))
     (native-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-golang-org-x-crypto))
     (home-page "https://github.com/xanzy/ssh-agent/")
     (synopsis "Control ssh-agent from Go")
     (description "Package agent implements the ssh-agent protocol, and
@@ -7616,10 +7542,8 @@ temporal directories.")
        (modify-phases %standard-phases
          (delete 'reset-gzip-timestamps))))
     (native-inputs
-     `(("go-github-com-alcortesm-tgz" ,go-github-com-alcortesm-tgz)
-       ("go-github-com-go-git-go-billy" ,go-github-com-go-git-go-billy)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)))
+     (list go-github-com-alcortesm-tgz go-github-com-go-git-go-billy
+           go-golang-org-x-sys go-gopkg-in-check-v1))
     (home-page "https://github.com/go-git/go-git-fixtures/")
     (synopsis "Fixtures used by @code{go-git}")
     (description "This package provides fixtures used by @code{go-git}.")
@@ -7644,7 +7568,7 @@ temporal directories.")
       (arguments
        `(#:import-path "github.com/pkg/diff"))
       (native-inputs
-       `(("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff)))
+       (list go-github-com-sergi-go-diff))
       (home-page "https://github.com/pkg/diff/")
       (synopsis "Create and print diffs")
       (description
@@ -7690,7 +7614,7 @@ temporal directories.")
     (arguments
      `(#:import-path "github.com/twpayne/go-vfs"))
     (native-inputs
-     `(("go-github-com-bmatcuk-doublestar" ,go-github-com-bmatcuk-doublestar)))
+     (list go-github-com-bmatcuk-doublestar))
     (home-page "https://github.com/twpayne/go-vfs/")
     (synopsis "Abstraction of the @code{os} and @code{ioutil} Go packages")
     (description "Package @code{vfs} provides an abstraction of the @code{os}
@@ -7714,8 +7638,7 @@ and @code{ioutil} packages that is easy to test.")
     (arguments
      `(#:import-path "github.com/twpayne/go-vfsafero"))
     (native-inputs
-     `(("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)
-       ("go-github-com-spf13-afero" ,go-github-com-spf13-afero)))
+     (list go-github-com-twpayne-go-vfs go-github-com-spf13-afero))
     (home-page "https://github.com/twpayne/go-vfsafero/")
     (synopsis "Compatibility later between @code{go-vfs} and @code{afero}")
     (description
@@ -7740,8 +7663,7 @@ and @code{ioutil} packages that is easy to test.")
     (arguments
      `(#:import-path "github.com/twpayne/go-xdg/v3"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-twpayne-go-vfs" ,go-github-com-twpayne-go-vfs)))
+     (list go-github-com-stretchr-testify go-github-com-twpayne-go-vfs))
     (home-page "https://github.com/twpayne/go-xdg/")
     (synopsis "Functions related to freedesktop.org")
     (description "Package @code{xdg} provides functions related to
@@ -7766,7 +7688,7 @@ and @code{ioutil} packages that is easy to test.")
      `(#:tests? #f ;no /var/run/dbus/system_bus_socket
        #:import-path "github.com/godbus/dbus"))
     (native-inputs
-     `(("dbus" ,dbus))) ;dbus-launch
+     (list dbus)) ;dbus-launch
     (home-page "https://github.com/godbus/dbus/")
     (synopsis "Native Go client bindings for the D-Bus")
     (description "@code{dbus} is a library that implements native Go client
@@ -7791,8 +7713,7 @@ bindings for the D-Bus message bus system.")
      `(#:tests? #f ;XXX: Fix dbus tests
        #:import-path "github.com/zalando/go-keyring"))
     (native-inputs
-     `(("go-github-com-godbus-dbus" ,go-github-com-godbus-dbus)
-       ("dbus" ,dbus)))
+     (list go-github-com-godbus-dbus dbus))
     (home-page "https://github.com/zalando/go-keyring/")
     (synopsis "Library for working with system keyring")
     (description "@code{go-keyring} is a library for setting, getting and
@@ -7816,7 +7737,7 @@ deleting secrets from the system keyring.")
     (arguments
      `(#:import-path "go.etcd.io/bbolt"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://pkg.go.dev/go.etcd.io/bbolt/")
     (synopsis "Low-level key/value store in Go")
     (description "This package implements a low-level key/value store in Go.")
@@ -7939,13 +7860,13 @@ inspired by the causal messaging system in the Pony programming language.")
        ;; go-build-system is looking in the wrong directory.
        #:tests? #f))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-github-com-rivo-uniseg" ,go-github-com-rivo-uniseg)
-       ("go-github-com-mattn-go-runewidth" ,go-github-com-mattn-go-runewidth)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-       ("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-vividcortex-ewma" ,go-github-com-vividcortex-ewma)))
+     (list go-golang-org-x-sys
+           go-github-com-rivo-uniseg
+           go-github-com-mattn-go-runewidth
+           go-github-com-mattn-go-isatty
+           go-github-com-mattn-go-colorable
+           go-github-com-fatih-color
+           go-github-com-vividcortex-ewma))
     (home-page "https://github.com/cheggaaa/pb/")
     (synopsis "Console progress bar for Go")
     (description "This package is a Go library that draws progress bars on
@@ -8001,8 +7922,7 @@ additions.")
     (arguments
      '(#:import-path "github.com/frankban/quicktest"))
     (propagated-inputs
-     `(("go-github-com-google-go-cmp-cmp" ,go-github-com-google-go-cmp-cmp)
-       ("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (list go-github-com-google-go-cmp-cmp go-github-com-kr-pretty))
     (home-page "https://github.com/frankban/quicktest")
     (synopsis "Quick helpers for testing Go applications")
     (description
@@ -8058,7 +7978,7 @@ tests.")
                  (invoke "go" "test" import-path "-tags" "dev"))
              #t)))))
     (propagated-inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (native-inputs
      `(("go-github-com-frankban-quicktest" ,go-github-com-frankban-quicktest)
        ("libsass-src" ,(package-source libsass))))
@@ -8135,10 +8055,8 @@ JSON data to the machine.")
     (arguments
      '(#:import-path "golang.zx2c4.com/wireguard"))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)))
+     (list go-golang-org-x-crypto go-golang-org-x-net go-golang-org-x-sys
+           go-golang-org-x-text))
     (home-page "https://git.zx2c4.com/wireguard")
     (synopsis "Implementation of WireGuard in Go")
     (description "This package is a Go Implementation of WireGuard.")
@@ -8188,11 +8106,9 @@ modifying them.")
     (arguments
      `(#:import-path "github.com/goccy/go-yaml"))
     (propagated-inputs
-     `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-golang-org-x-xerrors" ,go-golang-org-x-xerrors)))
+     (list go-github-com-fatih-color go-golang-org-x-xerrors))
     (native-inputs
-     `(("go-gopkg-in-go-playground-validator-v9"
-        ,go-gopkg-in-go-playground-validator-v9)))
+     (list go-gopkg-in-go-playground-validator-v9))
     (synopsis "YAML support for the Go language")
     (description
      "This package provides features beyond the
@@ -8275,7 +8191,7 @@ compressed streams in Go.")
        ;; and require network access.
        #:tests? #f))
     (propagated-inputs
-     `(("go-github-com-goccy-yaml" ,go-github-com-goccy-yaml)))
+     (list go-github-com-goccy-yaml))
     (synopsis "Go library to get configuration values from gitconfig")
     (description "@{gitconfig} is a package to get configuration values from gitconfig.")
     (license license:expat)))
@@ -8328,7 +8244,7 @@ algorithm.")
           (base32 "16p77p3d1v26qd3knxn087jqlad2qm23q8m796cdr66hrdc0gahq"))))
       (build-system go-build-system)
       (inputs
-       `(("pulseaudio" ,pulseaudio)))
+       (list pulseaudio))
       (arguments
        `(#:import-path "github.com/akosmarton/papipes"
          #:phases
@@ -8366,8 +8282,7 @@ sinks and sources.")
           (base32 "1awwczsa9yy99p035ckajqfs8m6mab0lz82mzlj1c5cj9lnmwplj"))))
       (build-system go-build-system)
       (propagated-inputs
-       `(("pkg-config" ,pkg-config)
-         ("pulseaudio" ,pulseaudio)))
+       (list pkg-config pulseaudio))
       (arguments
        '(#:import-path "github.com/mesilliac/pulse-simple"))
       (home-page "https://github.com/mesilliac/pulse-simple")
@@ -8417,8 +8332,7 @@ programs that use traditional command lines.")
     (arguments
      '(#:import-path "go.uber.org/atomic"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)))
+     (list go-github-com-stretchr-testify go-github-com-davecgh-go-spew))
     (home-page "https://go.uber.org/atomic")
     (synopsis "Wrapper types for sync/atomic")
     (description
@@ -8443,9 +8357,9 @@ atomic access.")
     (arguments
      '(#:import-path "go.uber.org/multierr"))
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+     (list go-github-com-stretchr-testify))
     (propagated-inputs
-     `(("go-go-uber-org-atomic" ,go-go-uber-org-atomic)))
+     (list go-go-uber-org-atomic))
     (home-page "https://go.uber.org/multierr")
     (synopsis "Error combination for Go")
     (description
@@ -8472,7 +8386,7 @@ atomic access.")
        '(#:import-path "golang.org/x/lint"
          #:tests? #f)) ;; TODO: Fix tests
       (propagated-inputs
-       `(("go-golang-org-x-tools" ,go-golang-org-x-tools)))
+       (list go-golang-org-x-tools))
       (home-page "https://golang.org/x/lint")
       (synopsis "Linter for Go source code")
       (description
@@ -8526,9 +8440,8 @@ tools with similar semantics.")
        (modify-phases %standard-phases
          (delete 'build))))
     (propagated-inputs
-     `(("go-golang-org-x-tools" ,go-golang-org-x-tools)
-       ("go-github-com-kisielk-gotool",go-github-com-kisielk-gotool)
-       ("go-github-com-burntsushi-toml" ,go-github-com-burntsushi-toml)))
+     (list go-golang-org-x-tools go-github-com-kisielk-gotool
+           go-github-com-burntsushi-toml))
     (home-page "https://honnef.co/go/tools")
     (synopsis "Staticcheck advanced Go linter")
     (description
@@ -8555,14 +8468,11 @@ simplifications, and enforces style rules.")
      '(#:import-path "go.uber.org/zap"
        #:tests? #f)) ; TODO: Fix tests
     (native-inputs
-     `(("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-golang-org-x-lint" ,go-golang-org-x-lint)
-       ("go-honnef-co-go-tools" ,go-honnef-co-go-tools)))
+     (list go-github-com-stretchr-testify go-golang-org-x-lint
+           go-honnef-co-go-tools))
     (propagated-inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-go-uber-org-atomic" ,go-go-uber-org-atomic)
-       ("go-go-uber-org-multierr" ,go-go-uber-org-multierr)
-       ("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)))
+     (list go-github-com-pkg-errors go-go-uber-org-atomic
+           go-go-uber-org-multierr go-gopkg-in-yaml-v2))
     (home-page "https://go.uber.org/zap")
     (synopsis "Logging library for Go")
     (description
@@ -8637,7 +8547,7 @@ back.")
     (arguments
      '(#:import-path "lukechampine.com/blake3"))
     (propagated-inputs
-     `(("go-github-com-klauspost-cpuid" ,go-github-com-klauspost-cpuid)))
+     (list go-github-com-klauspost-cpuid))
     (home-page "https://pkg.go.dev/lukechampine.com/blake3")
     (synopsis "Implementation of the BLAKE3 cryptographic hash function")
     (description "@code{blake3} implements the BLAKE3 cryptographic hash
@@ -8663,7 +8573,7 @@ performance for large inputs and outputs.")
     (build-system go-build-system)
     (arguments '(#:import-path "golang.org/x/term"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (home-page "https://pkg.go.dev/golang.org/x/term")
     (synopsis "Go terminal/console support")
     (description "@code{term} provides support functions for dealing with
@@ -8688,8 +8598,7 @@ terminals, as commonly found on Unix systems.")
     (arguments
      '(#:import-path "github.com/flynn/noise"))
     (propagated-inputs
-     `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-gopkg-in-check-v1 go-golang-org-x-crypto))
     (home-page "https://github.com/flynn/noise")
     (synopsis "Go implementation of the Noise protocol framework")
     (description "@code{noise} implements the Noise protocol framework.  Noise
@@ -8724,7 +8633,7 @@ zero round-trip encryption, and other advanced features.")
              (for-each make-file-writable
                        (find-files (assoc-ref outputs "out") ".gz$")))))))
     (propagated-inputs
-     `(("go-github-com-golang-snappy" ,go-github-com-golang-snappy)))
+     (list go-github-com-golang-snappy))
     (home-page "https://github.com/klauspost/compress")
     (synopsis "Go compression library")
     (description "@code{compress} provides various compression algorithms.")
@@ -8772,15 +8681,15 @@ non-cryptographic hash algorithm, working at speeds close to RAM limits.")
     (arguments
      '(#:import-path "github.com/aswinkarthik/csvdiff"))
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
-       ("go-github-com-spf13-cobra" ,go-github-com-spf13-cobra)
-       ("go-github-com-spf13-afero" ,go-github-com-spf13-afero)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-       ("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-cespare-xxhash" ,go-github-com-cespare-xxhash)
-       ("go-github-com-oneofone-xxhash" ,go-github-com-oneofone-xxhash)))
+     (list go-golang-org-x-sys
+           go-github-com-stretchr-testify
+           go-github-com-spf13-cobra
+           go-github-com-spf13-afero
+           go-github-com-spaolacci-murmur3
+           go-github-com-mattn-go-colorable
+           go-github-com-fatih-color
+           go-github-com-cespare-xxhash
+           go-github-com-oneofone-xxhash))
     (home-page "https://github.com/aswinkarthik/csvdiff")
     (synopsis "Fast diff tool for comparing CSV files")
     (description "@code{csvdiff} is a diff tool to compute changes between two
@@ -8880,7 +8789,7 @@ averages.")
     (build-system go-build-system)
     (arguments '(#:import-path "github.com/mattn/go-runewidth"))
     (propagated-inputs
-     `(("go-github-com-rivo-uniseg" ,go-github-com-rivo-uniseg)))
+     (list go-github-com-rivo-uniseg))
     (home-page "https://github.com/mattn/go-runewidth")
     (synopsis "Rune width implementation for Go")
     (description
@@ -8911,8 +8820,7 @@ string.")
          ;; Source-only package
          (delete 'build))))
     (propagated-inputs
-     `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-arceliar-phony" ,go-github-com-arceliar-phony)))
+     (list go-golang-org-x-crypto go-github-com-arceliar-phony))
     (home-page "https://github.com/Arceliar/ironwood")
     (synopsis "Experimental network routing library")
     (description
diff --git a/gnu/packages/gpodder.scm b/gnu/packages/gpodder.scm
index 07df1da2f2..8df7c0c22b 100644
--- a/gnu/packages/gpodder.scm
+++ b/gnu/packages/gpodder.scm
@@ -62,26 +62,26 @@
        (patches (search-patches "gpodder-disable-updater.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-coverage" ,python-coverage)
-       ("python-minimock" ,python-minimock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-httpserver" ,python-pytest-httpserver)
-       ("which" ,which)))
+     (list intltool
+           python-coverage
+           python-minimock
+           python-pytest
+           python-pytest-cov
+           python-pytest-httpserver
+           which))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-requests" ,python-requests)
-       ("python-dbus" ,python-dbus)
-       ("python-html5lib" ,python-html5lib)
-       ("python-mutagen" ,python-mutagen)
-       ("python-mygpoclient" ,python-mygpoclient)
-       ("python-podcastparser" ,python-podcastparser)
-       ("youtube-dl" ,youtube-dl)
-       ("xdg-utils" ,xdg-utils)))
+     (list bash-minimal
+           gtk+
+           python-pygobject
+           python-pycairo
+           python-requests
+           python-dbus
+           python-html5lib
+           python-mutagen
+           python-mygpoclient
+           python-podcastparser
+           youtube-dl
+           xdg-utils))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -94,9 +94,6 @@
                #t)))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             ; The `unittest' target overrides the PYTHONPATH variable.
-             (substitute* "makefile"
-               (("PYTHONPATH=src/") "PYTHONPATH=${PYTHONPATH}:src/"))
              (when tests?
                (invoke "make" "unittest"))))
          ;; 'msgmerge' introduces non-determinism by resetting the
@@ -147,7 +144,7 @@ locally for later listening.")
                                        "libmygpo-qt-missing-qt5-modules.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("qt" ,qtbase-5)))
     (arguments
@@ -175,9 +172,7 @@ and track podcasts.")
          "1fi5x6k1mngr0iviw2s4n1f3y2x7pwqy5ivkcrjdprzvwr37f0mh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-minimock" ,python-minimock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-minimock python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -203,7 +198,7 @@ downloading episode status changes.")
        (sha256
         (base32 "0m24r2qhck0win44xfhxajbppkss4ha6am0042s0xyq3408883m3"))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -233,15 +228,8 @@ in Python.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("ronn-ng" ,ronn-ng)))
-    (inputs `(("curl" ,curl)
-              ("glib" ,glib)
-              ("id3lib" ,id3lib)
-              ("libxml2" ,libxml2)))
+     (list autoconf automake libtool pkg-config ronn-ng))
+    (inputs (list curl glib id3lib libxml2))
     (synopsis "Command line podcast downloader")
     (description
      "castget is a simple, command-line based RSS enclosure downloader.  It is
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index 9ffa80fc01..290fa76289 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -82,14 +82,9 @@
      `(#:configure-flags
        '("--with-zlib=system")))
     (inputs
-     `(("expat" ,expat)
-       ("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list expat libusb qtbase-5 zlib))
     (native-inputs
-     `(("which" ,which)
-       ("qttools" ,qttools)
-       ("libxml2" ,libxml2)))              ;'xmllint' needed for the KML tests
+     (list which qttools libxml2))              ;'xmllint' needed for the KML tests
     (home-page "https://www.gpsbabel.org/")
     (synopsis "Convert and exchange data with GPS and map programs")
     (description
@@ -127,14 +122,9 @@ manipulate maps.")
                                "\n")))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("exiv2" ,exiv2)))
+     (list gtk+ libxml2 exiv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)))
+     (list pkg-config docbook-xml docbook-xsl libxslt))
     (home-page "https://dfandrich.github.io/gpscorrelate/")
     (synopsis "GPS photo correlation tool to geo-localize images")
     (description
@@ -166,10 +156,9 @@ between two other data points.")
     (build-system gnu-build-system)
     (arguments '(#:parallel-tests? #f)) ; race condition
     (native-inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (inputs
-     `(("expat" ,expat)
-       ("sqlite" ,sqlite)))
+     (list expat sqlite))
     (home-page "https://www.gnu.org/software/gama/")
     (synopsis "Adjustment of geodetic networks")
     (description
@@ -206,10 +195,9 @@ coordinates as well as partial support for adjustments in global coordinate syst
                      (string-append "PREFIX="
                                     (assoc-ref outputs "out"))))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-      ("qtlocation" ,qtlocation)))
+     (list qtbase-5 qtlocation))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (home-page "https://www.gpxsee.org")
     (synopsis "GPS log file viewer and analyzer")
     (description
@@ -232,21 +220,20 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
         (base32 "1hd8b09is4gd73lpsdywxxdx11iijikmqgxd0y57pic3yxnlcb6a"))))
     (build-system scons-build-system)
     (native-inputs
-     `(("bc" ,bc)
-       ("pkg-config" ,pkg-config)))
+     (list bc pkg-config))
     (inputs
-     `(("bluez" ,bluez)
-       ("dbus" ,dbus)
-       ("gtk+" ,gtk+)
-       ("libcap" ,libcap)
-       ("libusb" ,libusb)
-       ("ncurses" ,ncurses)
-       ("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyserial" ,python-pyserial)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)))
+     (list bluez
+           dbus
+           gtk+
+           libcap
+           libusb
+           ncurses
+           python
+           python-pycairo
+           python-pygobject
+           python-pyserial
+           python-wrapper
+           qtbase-5))
     (arguments
      `(#:scons-flags
        (list (string-append "prefix=" %output)
@@ -281,7 +268,7 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
                                              ":")))
                (for-each (lambda (script)
                            (wrap-program (string-append out "/bin/" script)
-                             `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("gegps" "gpscat" "gpsfake" "gpsprof"
                            "ubxtool" "xgps" "xgpsspeed" "zerk"))))))))
     (synopsis "GPS service daemon")
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index c9486935ae..0beb7d12e0 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -80,12 +80,12 @@
              "--with-external-blas"
              "--with-external-lapack")))
     (inputs
-     `(("gmp" ,gmp)
-       ("glpk" ,glpk)
-       ("libxml2" ,libxml2)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("zlib" ,zlib)))
+     (list gmp
+           glpk
+           libxml2
+           lapack
+           openblas
+           zlib))
     (home-page "https://igraph.org")
     (synopsis "Network analysis and visualization")
     (description
@@ -120,12 +120,11 @@ more.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-v"))))))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (propagated-inputs
-     `(("python-texttable" ,python-texttable)))
+     (list python-texttable))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (home-page "https://pypi.org/project/python-igraph/")
     (synopsis "Python bindings for the igraph network analysis library")))
 
@@ -146,7 +145,7 @@ more.")
                   "1yahqrcrqpbcywv73y9rlmyz8apdnp08afialibrr93ch0p06f8z"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-igraph" ,r-igraph)))
+       (list r-igraph))
       (home-page "http://www.biofabric.org/")
       (synopsis "BioFabric network visualization")
       (description "This package provides an implementation of the function
@@ -192,17 +191,15 @@ lines.")
                  (find-files out "\\.gz"))
                #t))))))
     (native-inputs
-     `(("python-ipywidgets" ,python-ipywidgets)
-       ("python-pytest" ,python-pytest)
-       ("python-xarray" ,python-xarray)))
+     (list python-ipywidgets python-pytest python-xarray))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-requests" ,python-requests)
-       ("python-retrying" ,python-retrying)
-       ("python-six" ,python-six)
-       ("python-statsmodels" ,python-statsmodels)))
+     (list python-ipython
+           python-pandas
+           python-pillow
+           python-requests
+           python-retrying
+           python-six
+           python-statsmodels))
     (home-page "https://plotly.com/python/")
     (synopsis "Interactive plotting library for Python")
     (description "Plotly's Python graphing library makes interactive,
@@ -223,12 +220,12 @@ subplots, multiple-axes, polar charts, and bubble charts. ")
           "0s9gk2fl53x8wwncs3fwii1vzfngr0sskv15v3mpshqmrqfrk27m"))))
    (native-inputs '())
    (propagated-inputs
-    `(("python-decorator" ,python-decorator)
-      ("python-nbformat" ,python-nbformat)
-      ("python-pandas" ,python-pandas)
-      ("python-pytz" ,python-pytz)
-      ("python-requests" ,python-requests)
-      ("python-six" ,python-six)))
+    (list python-decorator
+          python-nbformat
+          python-pandas
+          python-pytz
+          python-requests
+          python-six))
     (arguments
      '(#:tests? #f)))) ; The tests are not distributed in the release
 
@@ -244,8 +241,7 @@ subplots, multiple-axes, polar charts, and bubble charts. ")
         (base32 "1sqp97fwh4asx0jr72x8hil8z8fcg2xq92jklmh2m599pvgnx19a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)))
+     (list python-networkx python-numpy))
     (home-page "https://github.com/taynaud/python-louvain")
     (synopsis "Louvain algorithm for community detection")
     (description
@@ -269,13 +265,11 @@ algorithm for community detection in large networks.")
                 "0w31537sifkf65sck1iaip5i6d8g64pa3wdwad83d6p9jwkck57k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ddt" ,python-ddt)
-       ("python-igraph" ,python-igraph)))
+     (list python-ddt python-igraph))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (home-page "https://github.com/vtraag/louvain-igraph")
     (synopsis "Algorithm for methods of community detection in large networks")
     (description
@@ -366,9 +360,9 @@ install(TARGETS ${faiss_lib}_static ARCHIVE DESTINATION lib)
                              "/test"))
              #t)))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (home-page "https://github.com/facebookresearch/faiss")
     (synopsis "Efficient similarity search and clustering of dense vectors")
     (description "Faiss is a library for efficient similarity search and
@@ -418,8 +412,7 @@ CPUFLAGS = ~{~a ~}~%"
        ("python*" ,python)
        ("swig" ,swig)))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)))
+     (list python-matplotlib python-numpy))
     (description "Faiss is a library for efficient similarity search and
 clustering of dense vectors.  This package provides Python bindings to the
 Faiss library.")))
@@ -438,11 +431,11 @@ Faiss library.")))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; tests are not included
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (propagated-inputs
-     `(("python-igraph" ,python-igraph)))
+     (list python-igraph))
     (home-page "https://github.com/vtraag/leidenalg")
     (synopsis "Community detection in large networks")
     (description
@@ -472,9 +465,7 @@ of the Louvain algorithm, for a number of different methods.")
          "01cm7ay1njkfsdnmnvh5zwc7wg7x189hq1vbfhh9p3ihrbnmqzh8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Embedding of planar graphs")
     (description "The package provides a reference implementation of the
 linear time edge addition algorithm for embedding planar graphs and
@@ -498,9 +489,9 @@ isolating planarity obstructions.")
          "1rv2v42x2506x7f10349m1wpmmfxrv9l032bkminni2gbip9cjg0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("igraph" ,igraph)))
+     (list igraph))
     (home-page "https://sourceforge.net/projects/rankwidth/")
     (synopsis "Rank-width and rank-decomposition of graphs")
     (description "rw computes rank-width and rank-decompositions
@@ -521,9 +512,9 @@ of graphs.")
          "08yw3maxhn5fl1lff81gmcrpa4j9aas4mmby1g9w5qcr0np82d1w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gd" ,gd)))
+     (list gd))
     (home-page "http://www.mcternan.me.uk/mscgen/")
     (synopsis "Message Sequence Chart Generator")
     (description "Mscgen is a small program that parses Message Sequence Chart
@@ -576,10 +567,7 @@ transformed into common image formats for display or printing.")
        ("python" ,python-wrapper)
        ("sparsehash" ,sparsehash)))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pycairo" ,python-pycairo)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-pycairo python-scipy))
     (synopsis "Manipulate and analyze graphs with Python efficiently")
     (description "Graph-tool is an efficient Python module for manipulation
 and statistical analysis of graphs (a.k.a. networks).  Contrary to most other
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index aa026c60e3..48844a1683 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2016, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -21,7 +21,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Andy Tai <atai@atai.org>
@@ -119,85 +119,6 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
-(define-public eglexternalplatform
-  (package
-    (name "eglexternalplatform")
-    (version "1.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/NVIDIA/eglexternalplatform")
-         (commit version)))
-       (file-name
-        (git-file-name name version))
-       (sha256
-        (base32 "0lr5s2xa1zn220ghmbsiwgmx77l156wk54c7hybia0xpr9yr2nhb"))))
-    (build-system copy-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-pkgconfig
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "eglexternalplatform.pc"
-               (("/usr")
-                (assoc-ref outputs "out")))
-             #t))
-         (add-after 'install 'revise
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out")))
-               (mkdir-p (string-append out "/include/EGL"))
-               (rename-file
-                (string-append out "/interface")
-                (string-append out "/include/EGL"))
-               (mkdir-p (string-append out "/share/pkgconfig"))
-               (rename-file
-                (string-append out "/eglexternalplatform.pc")
-                (string-append out "/share/pkgconfig/eglexternalplatform.pc"))
-               (for-each delete-file-recursively
-                         (list
-                          (string-append out "/samples")
-                          (string-append out "/COPYING")
-                          (string-append out "/README.md"))))
-             #t)))))
-    (synopsis "EGL External Platform interface")
-    (description "EGLExternalPlatform is an specification of the EGL External
-Platform interface for writing EGL platforms and their interactions with modern
-window systems on top of existing low-level EGL platform implementations.  This
-keeps window system implementation specifics out of EGL drivers by using
-application-facing EGL functions.")
-    (home-page "https://github.com/NVIDIA/eglexternalplatform")
-    (license license:expat)))
-
-(define-public egl-wayland
-  (package
-    (name "egl-wayland")
-    (version "1.1.7")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/NVIDIA/egl-wayland")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0xcx1132zwyp4qps074m72ngjlfmysi1jc2d0lp1ml1r9bllkam6"))))
-    (build-system meson-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("wayland" ,wayland)))
-    (propagated-inputs
-     `(("eglexternalplatform" ,eglexternalplatform)))
-    (synopsis "EGLStream-based Wayland external platform")
-    (description "EGL-Wayland is an implementation of a EGL External Platform
-library to add client-side Wayland support to EGL on top of EGLDevice and
-EGLStream families of extensions.")
-    (home-page "https://github.com/NVIDIA/egl-wayland")
-    (license license:expat)))
-
 (define-public mmm
   (package
     (name "mmm")
@@ -215,12 +136,9 @@ EGLStream families of extensions.")
         (base32 "1xmcv6rwinqsbr863rgl9005h2jlmd7k2qrwsc1h4fb8r61ykpjl"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("luajit" ,luajit)
-       ("pkg-config" ,pkg-config)))
+     (list luajit pkg-config))
     (inputs
-     `(("alsa" ,alsa-lib)
-       ("sdl" ,sdl)
-       ("sdl2" ,sdl2)))
+     (list alsa-lib sdl sdl2))
     (synopsis "Memory Mapped Machine")
     (description "MMM is a shared memory protocol for virtualising access to
 framebuffer graphics, audio output and input event.")
@@ -251,11 +169,7 @@ framebuffer graphics, audio output and input event.")
                (("^.*\\$srcdir/configure.*") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (inputs
      `(("alsa" ,alsa-lib)
        ("ffmpeg" ,ffmpeg)
@@ -289,7 +203,7 @@ framebuffer graphics, audio output and input event.")
        ("xproto" ,xorgproto)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("flux" ,flux)))
+     (list flux))
     (synopsis "DFB Graphics Library")
     (description "DirectFB is a graphics library which was designed with embedded
 systems in mind.  It offers maximum hardware accelerated performance at a
@@ -313,10 +227,7 @@ minimum of resource usage and overhead.")
         (base32 "11f3ypg0sdq5kj69zgz6kih1yrzgm48r16spyvzwvlswng147410"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Interface description language")
     (description "Flux is an interface description language used by DirectFB.
 Fluxcomp compiles .flux files to .cpp or .c files.")
@@ -348,7 +259,7 @@ Fluxcomp compiles .flux files to .cpp or .c files.")
                                 "/include/freetype2"))))
              #t)))))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
      `(("bzip2" ,lbzip2)
        ("freetype" ,freetype)
@@ -454,8 +365,7 @@ with the @command{autotrace} utility or as a C library, @code{libautotrace}.")
          (list
           "-DEMBREE_ISPC_SUPPORT=OFF")))
     (inputs
-     `(("tbb" ,tbb)
-       ("glfw" ,glfw)))
+     (list tbb glfw))
     (home-page "https://www.embree.org/")
     (synopsis "High performance ray tracing kernels")
     (description
@@ -484,13 +394,9 @@ applications.")
        (list (string-append "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib"))))
     (inputs
-     `(("boost" ,boost)
-       ("c-blosc" ,c-blosc)
-       ("ilmbase" ,ilmbase)
-       ("tbb" ,tbb)
-       ("zlib" ,zlib)))
+     (list boost c-blosc ilmbase tbb-2020 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.openvdb.org/")
     (synopsis "Sparse volume data structure and tools")
     (description "OpenVDB is a C++ library comprising a hierarchical data
@@ -503,14 +409,14 @@ typically encountered in feature film production.")
 (define-public blender
   (package
     (name "blender")
-    (version "2.92.0")
+    (version "2.93.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.blender.org/source/"
                                   "blender-" version ".tar.xz"))
               (sha256
                (base32
-                "15a5vffn18a920286x0avbc2rap56k6y531wgibq68r90g2cz4g7"))))
+                "19i84bh8jiamf38fj9p24q8w8fhg3hhl49940dh74h4flyfyqfg7"))))
     (build-system cmake-build-system)
     (arguments
       (let ((python-version (version-major+minor (package-version python))))
@@ -553,14 +459,19 @@ typically encountered in feature film production.")
                #t))
            (add-after 'set-paths 'add-ilmbase-include-path
              (lambda* (#:key inputs #:allow-other-keys)
-               ;; OpenEXR propagates ilmbase, but its include files do not appear
-               ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
-               ;; the CPATH to satisfy the dependency on "half.h".
-               (setenv "CPATH"
-                       (string-append (assoc-ref inputs "ilmbase")
-                                      "/include/OpenEXR"
-                                      ":" (or (getenv "CPATH") "")))
-               #t))))))
+               ;; OpenEXR propagates ilmbase, but its include files do not
+               ;; appear in the C_INCLUDE_PATH, so we need to add
+               ;; "$ilmbase/include/OpenEXR/" to the C_INCLUDE_PATH to satisfy
+               ;; the dependency on "half.h" and "Iex.h".
+               (let ((headers (string-append
+                               (assoc-ref inputs "ilmbase")
+                               "/include/OpenEXR")))
+                 (setenv "C_INCLUDE_PATH"
+                         (string-append headers ":"
+                                        (or (getenv "C_INCLUDE_PATH") "")))
+                 (setenv "CPLUS_INCLUDE_PATH"
+                         (string-append headers ":"
+                                        (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))))
     (inputs
      `(("boost" ,boost)
        ("jemalloc" ,jemalloc)
@@ -587,7 +498,7 @@ typically encountered in feature film production.")
        ("python" ,python)
        ("python-numpy" ,python-numpy)
        ("openvdb" ,openvdb)
-       ("tbb" ,tbb)
+       ("tbb" ,tbb-2020)
        ("zlib" ,zlib)
        ("embree" ,embree)))
     (home-page "https://blender.org/")
@@ -659,10 +570,9 @@ application can be customized via its API for Python scripting.")
                ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
                ;; the CPATH to satisfy the dependency on "half.h".
                (setenv "CPATH"
-                       (string-append (assoc-ref inputs "ilmbase")
-                                      "/include/OpenEXR"
-                                      ":" (or (getenv "CPATH") "")))
-               #t))))))
+                       (string-append
+                        (search-input-directory inputs "include/OpenEXR")
+                        ":" (or (getenv "CPATH") "")))))))))
     (inputs
      `(("boost" ,boost)
        ("jemalloc" ,jemalloc)
@@ -717,7 +627,7 @@ OpenGL 3.  It is retained for use with older computers.")
        #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "release")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk3" ,gtk+)
        ("glfw" ,glfw)
@@ -745,7 +655,7 @@ and export to various formats including the format used by Magicavoxel.")
                 "1rhyqfhzifdj7yibyanph3rh13ykw3i98dnn8mz65j780472hw28"))))
     (build-system cmake-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://www.assimp.org/")
     (synopsis "Asset import library")
     (description
@@ -778,9 +688,7 @@ more.")
                             ,name "-" ,version))
        #:tests? #f))                    ; no test target
     (inputs
-     `(("mpfr" ,mpfr)
-       ("gmp" ,gmp)
-       ("boost" ,boost)))
+     (list mpfr gmp boost))
     (home-page "https://www.cgal.org/")
     (synopsis "Computational geometry algorithms library")
     (description
@@ -851,79 +759,73 @@ exception-handling library.")
     (license license:bsd-3)))
 
 (define-public lib2geom
-  ;; Use the latest master commit, as the 1.0 release suffer build problems.
-  (let ((revision "4")
-        (commit "b29d60e49a58f4e8069544b44863b1a623e4ee59"))
-    (package
-      (name "lib2geom")
-      (version (git-version "1.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://gitlab.com/inkscape/lib2geom.git")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0xd8f3cgfnipdav4w8j54r7hzy9f3m7xk42ppcfhdjz2hriggyk6"))
-                (patches
-                 ;; Patch submitted to upstream (see:
-                 ;; https://gitlab.com/inkscape/lib2geom/-/merge_requests/32).
-                 (search-patches "lib2geom-fix-tests.patch"))
-                (modules '((guix build utils)))
-                (snippet
-                 '(begin
-                    ;; Fix py2geom module initialization (see:
-                    ;; https://gitlab.com/inkscape/lib2geom/merge_requests/18).
-                    (substitute* "src/py2geom/__init__.py"
-                      (("_py2geom") "py2geom._py2geom"))
-                    #t))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:imported-modules ((guix build python-build-system)
-                             ,@%cmake-build-system-modules)
-         #:configure-flags '("-D2GEOM_BUILD_SHARED=ON"
-                             "-D2GEOM_BOOST_PYTHON=ON"
-                             ;; Compiling the Cython bindings fail (see:
-                             ;; https://gitlab.com/inkscape/lib2geom/issues/21).
-                             "-D2GEOM_CYTHON_BINDINGS=OFF")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'patch-python-lib-install-path
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((python-version (@ (guix build python-build-system)
-                                         python-version))
-                      (python-maj-min-version (python-version
-                                               (assoc-ref inputs "python")))
-                      (site-package (string-append
-                                     (assoc-ref outputs "out")
-                                     "/lib/python" python-maj-min-version
-                                     "/site-packages")))
-                 (substitute* '("src/cython/CMakeLists.txt"
-                                "src/py2geom/CMakeLists.txt")
-                   (("PYTHON_LIB_INSTALL \"[^\"]*\"")
-                    (format #f "PYTHON_LIB_INSTALL ~s" site-package))))
-               #t)))))
-      (native-inputs `(("python" ,python-wrapper)
-                       ("googletest" ,googletest)
-                       ("pkg-config" ,pkg-config)))
-      (inputs `(("cairo" ,cairo)
-                ("pycairo" ,python-pycairo)
-                ("double-conversion" ,double-conversion)
-                ("glib" ,glib)
-                ("gsl" ,gsl)))
-      (propagated-inputs
-       `(("boost" ,boost)))             ;referred to in 2geom/pathvector.h.
-      (home-page "https://gitlab.com/inkscape/lib2geom/")
-      (synopsis "C++ 2D graphics library")
-      (description "2geom is a C++ library of mathematics for paths, curves,
+  (package
+    (name "lib2geom")
+    (version "1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/inkscape/lib2geom.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03bx9k1m4bfhmx0ldsg0bks6i8h7fmvl5vbg6gmpq0bk0nkmpnmv"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:imported-modules ((guix build python-build-system)
+                           ,@%cmake-build-system-modules)
+       #:configure-flags '("-D2GEOM_BUILD_SHARED=ON"
+                           "-D2GEOM_BOOST_PYTHON=ON"
+                           ;; Compiling the Cython bindings fail (see:
+                           ;; https://gitlab.com/inkscape/lib2geom/issues/21).
+                           "-D2GEOM_CYTHON_BINDINGS=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-python-lib-install-path
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((python-version (@ (guix build python-build-system)
+                                       python-version))
+                    (python-maj-min-version (python-version
+                                             (assoc-ref inputs "python")))
+                    (site-package (string-append
+                                   (assoc-ref outputs "out")
+                                   "/lib/python" python-maj-min-version
+                                   "/site-packages")))
+               (substitute* '("src/cython/CMakeLists.txt"
+                              "src/py2geom/CMakeLists.txt")
+                 (("PYTHON_LIB_INSTALL \"[^\"]*\"")
+                  (format #f "PYTHON_LIB_INSTALL ~s" site-package))))))
+         ,@(if (target-x86-32?)
+               `((add-after 'unpack 'skip-faulty-test
+                   (lambda _
+                     ;; This test fails on i686 when comparing floating point
+                     ;; values, probably due to excess precision.  However,
+                     ;; '-fexcess-precision' is not implemented for C++ in
+                     ;; GCC 10 so just skip it.
+                     (substitute* "tests/CMakeLists.txt"
+                       (("bezier-test") "")))))
+               '()))))
+    (native-inputs `(("python" ,python-wrapper)
+                     ("googletest" ,googletest)
+                     ("pkg-config" ,pkg-config)))
+    (inputs `(("cairo" ,cairo)
+              ("pycairo" ,python-pycairo)
+              ("double-conversion" ,double-conversion)
+              ("glib" ,glib)
+              ("gsl" ,gsl)))
+    (propagated-inputs
+     (list boost))               ;referred to in 2geom/pathvector.h.
+    (home-page "https://gitlab.com/inkscape/lib2geom/")
+    (synopsis "C++ 2D graphics library")
+    (description "2geom is a C++ library of mathematics for paths, curves,
 and other geometric calculations.  Designed for vector graphics, it tackles
 Bézier curves, conic sections, paths, intersections, transformations, and
 basic geometries.")
-      ;; Because the library is linked with the GNU Scientific Library
-      ;; (GPLv3+), the combined work must be licensed as GPLv3+ (see:
-      ;; https://gitlab.com/inkscape/inkscape/issues/784).
-      (license license:gpl3+))))
+    ;; Because the library is linked with the GNU Scientific Library
+    ;; (GPLv3+), the combined work must be licensed as GPLv3+ (see:
+    ;; https://gitlab.com/inkscape/inkscape/issues/784).
+    (license license:gpl3+)))
 
 (define-public pstoedit
   (package
@@ -938,7 +840,7 @@ basic geometries.")
                 "02av76j75g5sq3bg353yl6dlllda9ihmmk4c8hvgiscix816nv4s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("ghostscript" ,ghostscript)
        ("imagemagick" ,imagemagick)
@@ -1017,9 +919,7 @@ other vector formats such as:
             (base32 "1xhk34pzpha6k5l2j150capq66y8czhmsi04ib09wvb34ahqxpby"))))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("freetype" ,freetype)
-       ("stb-rect-pack" ,stb-rect-pack)
-       ("stb-truetype" ,stb-truetype)))
+     (list freetype stb-rect-pack stb-truetype))
     (home-page "https://github.com/ocornut/imgui")
     (synopsis "Immediate-mode C++ GUI library with minimal dependencies")
     (description
@@ -1086,16 +986,16 @@ operating system features.")
        ("googletest" ,googletest-1.8)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("font-dejavu" ,font-dejavu)
-       ("freeimage" ,freeimage)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libxaw" ,libxaw)
-       ("libxrandr" ,libxrandr)
-       ("pugixml" ,pugixml)
-       ("sdl2" ,sdl2)
-       ("tinyxml" ,tinyxml)
-       ("zziplib" ,zziplib)))
+     (list font-dejavu
+           freeimage
+           freetype
+           glu
+           libxaw
+           libxrandr
+           pugixml
+           sdl2
+           tinyxml
+           zziplib))
     (synopsis "Scene-oriented, flexible 3D engine written in C++")
     (description
      "OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented,
@@ -1131,8 +1031,7 @@ graphics.")
                             "src/test/OpenEXRCoreTest/main.cpp")
                (("/var/tmp") "/tmp")))))))
     (inputs
-     `(("imath" ,imath)
-       ("zlib" ,zlib)))
+     (list imath zlib))
     (home-page "https://www.openexr.com/")
     (synopsis "High-dynamic-range file format library")
     (description
@@ -1184,10 +1083,10 @@ with strong support for multi-part, multi-channel use cases.")
                      #t)))
                '()))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("ilmbase" ,ilmbase)                       ;used in public headers
-       ("zlib" ,zlib)))                           ;OpenEXR.pc reads "-lz"
+     (list ilmbase ;used in public headers
+           zlib))                           ;OpenEXR.pc reads "-lz"
     (home-page (package-home-page openexr))
     (synopsis (package-synopsis openexr))
     (description (package-description openexr))
@@ -1196,7 +1095,7 @@ with strong support for multi-part, multi-channel use cases.")
 (define-public openimageio
   (package
     (name "openimageio")
-    (version "2.2.10.1")
+    (version "2.2.11.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1205,7 +1104,7 @@ with strong support for multi-part, multi-channel use cases.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0wzh5n527l7ia1754cf9xmbvv4ya6hj34dy6cbq9xk9372h8gd9q"))))
+                "1i9r6vgz15aj1yzbf5a9lqhlyakjs793yrw5gw720l84lcyigad7"))))
     (build-system cmake-build-system)
     ;; FIXME: To run all tests successfully, test image sets from multiple
     ;; third party sources have to be present.  For details see
@@ -1214,10 +1113,11 @@ with strong support for multi-part, multi-channel use cases.")
      `(#:tests? #f
        #:configure-flags (list "-DUSE_EXTERNAL_PUGIXML=1")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("boost" ,boost)
        ("fmt" ,fmt)
+       ("libheif" ,libheif)
        ("libpng" ,libpng)
        ("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
@@ -1264,8 +1164,7 @@ visual effects work for film.")
                             (assoc-ref %outputs "out") "/lib:"
                             (assoc-ref %outputs "out") "/lib64"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)))
+     (list pkg-config unzip))
     (inputs
      `(("giflib" ,giflib)
        ("libjpeg" ,libjpeg-turbo)       ; required for the JPEG texture plugin.
@@ -1391,9 +1290,7 @@ in Julia).")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
      `(("boost" ,boost)
        ("libjpeg" ,libjpeg-turbo)
@@ -1476,11 +1373,7 @@ realistic reflections, shading, perspective and other effects.")
     ;; These libraries are listed in the "Required" section of the pkg-config
     ;; file.
     (propagated-inputs
-     `(("librsvg" ,librsvg)
-       ("cairo" ,cairo)
-       ("pango" ,pango)
-       ("libxml2" ,libxml2)
-       ("python2-enum34" ,python2-enum34)))
+     (list librsvg cairo pango libxml2 python2-enum34))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf)
        ("libpng" ,libpng-1.2)
@@ -1520,7 +1413,7 @@ and is connected to the programming logic using data bindings and commands.")
     (arguments '(#:tests? #f))                    ;no 'test' target
 
     ;; Headers include OpenEXR and IlmBase headers.
-    (propagated-inputs `(("openexr" ,openexr-2)))
+    (propagated-inputs (list openexr-2))
 
     (home-page "http://ampasctl.sourceforge.net")
     (synopsis "Color Transformation Language")
@@ -1581,13 +1474,9 @@ exec -a \"$0\" ~a/.brdf-real~%"
                             (chmod "brdf" #o555)))
                         #t)))))
       (native-inputs
-       `(("qttools" ,qttools))) ;for 'qmake'
+       (list qttools)) ;for 'qmake'
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("mesa" ,mesa)
-         ("glew" ,glew)
-         ("freeglut" ,freeglut)
-         ("zlib" ,zlib)))
+       (list qtbase-5 mesa glew freeglut zlib))
       (home-page "https://www.disneyanimation.com/technology/brdf.html")
       (synopsis
        "Analyze bidirectional reflectance distribution functions (BRDFs)")
@@ -1619,7 +1508,8 @@ and understanding different BRDFs (and other component functions).")
                                         version ".tar.gz")))
               (sha256
                (base32 "07wii4i824vy9qsvjsgqxppgqmfdxq0xa87i5yk53fijriadq7mb"))
-              (patches (search-patches "agg-am_c_prototype.patch"))))
+              (patches (search-patches "agg-am_c_prototype.patch"
+                                       "agg-2.5-gcc8.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1636,14 +1526,9 @@ and understanding different BRDFs (and other component functions).")
              (substitute* "autogen.sh" (("./configure") "# ./configure"))
              (invoke "sh" "autogen.sh"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config libtool autoconf automake))
     (inputs
-     `(("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("sdl" ,sdl)))
+     (list libx11 freetype sdl))
 
     ;; Antigrain.com was discontinued.
     (home-page "http://agg.sourceforge.net/antigrain.com/index.html")
@@ -1671,7 +1556,7 @@ rendering @acronym{SVG, Scalable Vector Graphics}.")
                   (replace 'check
                     (lambda _ (invoke "pytest" "pastel" "tests/"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/sdispater/pastel")
     (synopsis "Library to colorize strings in your terminal")
     (description "Pastel is a simple library to help you colorize strings in
@@ -1742,7 +1627,7 @@ your terminal.")
                  `("PERL5LIB" ":" prefix (,perl5lib)))
                #t))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     ;; TODO: Add missing optional dependency: facedetect.
     (inputs
      `(("imagemagick" ,imagemagick)
@@ -1788,20 +1673,19 @@ requirements.")
                   (add-before 'check 'start-xorg-server
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; The test suite requires a running X server.
-                      (system (string-append (assoc-ref inputs "xorg-server")
-                                             "/bin/Xvfb :1 &"))
+                      (system "Xvfb :1 &")
                       (setenv "DISPLAY" ":1")
                       #t)))))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (inputs
-     `(("glew" ,glew)
-       ("libxrandr" ,libxrandr)
-       ("libxcursor" ,libxcursor)
-       ("libxinerama" ,libxinerama)
-       ("libxi" ,libxi)
-       ("zlib" ,zlib)
-       ("glfw" ,glfw)))
+     (list glew
+           libxrandr
+           libxcursor
+           libxinerama
+           libxi
+           zlib
+           glfw))
     (home-page "https://graphics.pixar.com/opensubdiv/")
     (synopsis "High performance subdivision surface evaluation")
     (description "OpenSubdiv is a set of libraries that implement high
@@ -1838,8 +1722,7 @@ and GPU architectures.")
            (add-before 'build 'skip-example
              (lambda _ (chdir "src") #t)))))
       (inputs
-       `(("glew" ,glew)
-         ("freeglut" ,freeglut)))
+       (list glew freeglut))
       (synopsis "Library for rendering Constructive Solid Geometry (CSG)")
       (description
        "OpenCSG is a library for rendering Constructive Solid Geometry (CSG) using
@@ -1876,12 +1759,9 @@ or by subtracting one shape from the other.")
              #t))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("doxygen" ,doxygen)
-         ("graphviz" ,graphviz)))
+       (list doxygen graphviz))
       (inputs
-       `(("boost" ,boost)
-         ("freeglut" ,freeglut)
-         ("glew" ,glew)))
+       (list boost freeglut glew))
       (arguments
        `(#:configure-flags
          (list
@@ -1929,12 +1809,9 @@ software in the scientific and engineering community.")
              #t))))
     (build-system cmake-build-system)
     (native-inputs
-      `(("doxygen" ,doxygen)
-        ("graphviz" ,graphviz)))
+      (list doxygen graphviz))
     (inputs
-      `(("boost" ,boost)
-        ("freeglut" ,freeglut)
-        ("glew" ,glew)))
+      (list boost freeglut glew))
     (arguments
       `(#:configure-flags
         (list
@@ -2008,22 +1885,21 @@ Automated palette selection is supported.")
        '(#:configure-flags
          (list "-DTESTS=ON" "-DTOOLS=ON" "-DKIS_TABLET=ON")))
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list extra-cmake-modules pkg-config))
       (inputs
-       `(("giflib" ,giflib)
-         ("karchive" ,karchive)
-         ("kdnssd" ,kdnssd)
-         ("libmicrohttpd" ,libmicrohttpd)
-         ("libsodium" ,libsodium)
-         ("libvpx" ,libvpx)
-         ("libxi" ,libxi)
-         ;; ("miniupnpc" ,miniupnpc) ;segfaults for some reason
-         ("qtbase" ,qtbase-5)
-         ("qtkeychain" ,qtkeychain)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)
-         ("qtx11extras" ,qtx11extras)))
+       (list giflib
+             karchive
+             kdnssd
+             libmicrohttpd
+             libsodium
+             libvpx
+             libxi
+             ;; ("miniupnpc" ,miniupnpc) ;segfaults for some reason
+             qtbase-5
+             qtkeychain
+             qtmultimedia
+             qtsvg
+             qtx11extras))
       (home-page "https://drawpile.net")
       (synopsis "Collaborative drawing program")
       (description "Drawpile is a drawing program that allows share the canvas
@@ -2068,9 +1944,7 @@ Some feature highlights:
        ("v4l" ,v4l-utils)
        ("vulkan-loader" ,vulkan-loader)))
     (native-inputs
-     `(("eigen" ,eigen)
-       ("pkg-config" ,pkg-config)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list eigen pkg-config vulkan-headers))
     (arguments
      `(#:configure-flags
        (list "-Dinstall-active-runtime=false")))
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 6d3bb292ac..c4dfd4965b 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -34,6 +34,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
@@ -50,6 +51,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
@@ -63,48 +65,48 @@
 (define-public graphviz
   (package
     (name "graphviz")
-    (replacement graphviz/fixed)
-    (version "2.42.3")
+    (version "2.49.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://www2.graphviz.org/Packages/stable/portable_source/"
-                    "graphviz-" version ".tar.gz"))
+              (uri (string-append "https://gitlab.com/api/v4/projects/4207231"
+                                  "/packages/generic/graphviz-releases/"
+                                  version "/graphviz-" version ".tar.xz"))
               (sha256
                (base32
-                "1pbswjbx3fjdlsxcm7cmlsl5bvaa3d6gcnr0cr8x3c8pag13zbwg"))))
+                "042s6mbi681pwgffqww2ap780230nrsrfpfiz9a41dcjb5a0m524"))))
     (build-system gnu-build-system)
     (arguments
      ;; FIXME: rtest/rtest.sh is a ksh script (!).  Add ksh as an input.
-     '(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'move-docs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share/graphviz"))
-               (rename-file (string-append out "/share/graphviz/doc")
-                            (string-append doc "/share/graphviz/doc"))
-               #t)))
-         (add-after 'move-docs 'move-guile-bindings
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib"))
-                    (extdir (string-append lib
-                                           "/guile/2.0/extensions")))
-               (mkdir-p extdir)
-               (rename-file (string-append
-                             lib "/graphviz/guile/libgv_guile.so")
-                            (string-append extdir
-                                           "/libgv_guile.so"))
-               #t))))))
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'move-docs
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out"))
+                         (doc (assoc-ref outputs "doc")))
+                     (mkdir-p (string-append doc "/share/graphviz"))
+                     (rename-file (string-append out "/share/graphviz/doc")
+                                  (string-append doc "/share/graphviz/doc")))))
+               (add-after 'move-docs 'move-guile-bindings
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (lib (string-append out "/lib"))
+                          (extdir (string-append lib "/guile/"
+                                                 #$(version-major+minor
+                                                    (package-version
+                                                     (this-package-input "guile")))
+                                                 "/extensions")))
+                     (mkdir-p extdir)
+                     (rename-file (string-append
+                                   lib "/graphviz/guile/libgv_guile.so")
+                                  (string-append extdir
+                                                 "/libgv_guile.so"))))))))
     (inputs
      `(("libXrender" ,libxrender)
        ("libX11" ,libx11)
        ("gts" ,gts)
-       ("gd" ,gd)                                 ; FIXME: Our GD is too old
-       ("guile" ,guile-2.0)                       ;Guile bindings
+       ("gd" ,gd)
+       ("guile" ,guile-3.0)                       ;Guile bindings
        ("pango" ,pango)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -114,9 +116,7 @@
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)))
     (native-inputs
-     `(("bison" ,bison)
-       ("swig" ,swig)
-       ("pkg-config" ,pkg-config)))
+     (list bison swig pkg-config))
     (outputs '("out" "doc"))                      ; 5 MiB of html + pdfs
     (home-page "https://www.graphviz.org/")
     (synopsis "Graph visualization software")
@@ -128,15 +128,6 @@ software engineering, database and web design, machine learning, and in visual
 interfaces for other technical domains.")
     (license license:epl1.0)))
 
-(define-public graphviz/fixed
-  (hidden-package
-    (package
-      (inherit graphviz)
-      (source (origin
-                (inherit (package-source graphviz))
-                (patches (append (search-patches "graphviz-CVE-2020-18032.patch")
-                                 (origin-patches (package-source graphviz)))))))))
-
 ;; Older Graphviz needed for pygraphviz.  See
 ;; https://github.com/pygraphviz/pygraphviz/issues/175
 (define-public graphviz-2.38
@@ -159,27 +150,28 @@ interfaces for other technical domains.")
       (arguments
        (substitute-keyword-arguments (package-arguments graphviz)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'prepare-bootstrap
-               (lambda _
-                 (substitute* "autogen.sh"
-                   (("/bin/sh") (which "sh"))
-                   (("\\$GRAPHVIZ_VERSION_DATE") "0"))
-                 (setenv "CONFIG_SHELL" (which "sh"))
-                 (setenv "SHELL" (which "sh"))
+          #~(modify-phases #$phases
+              (add-after 'unpack 'prepare-bootstrap
+                (lambda _
+                  (substitute* "autogen.sh"
+                    (("/bin/sh") (which "sh"))
+                    (("\\$GRAPHVIZ_VERSION_DATE") "0"))
+                  (setenv "CONFIG_SHELL" (which "sh"))
+                  (setenv "SHELL" (which "sh"))
 
-                 (map make-file-writable (find-files "." ".*"))
-                 #t))
-             (replace 'bootstrap
-               (lambda _ (invoke (which "sh") "autogen.sh" "NOCONFIG") #t))))))
+                  (map make-file-writable (find-files "." ".*"))
+                  #t))
+              (replace 'bootstrap
+                (lambda _
+                  (invoke (which "sh") "autogen.sh" "NOCONFIG") #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("perl" ,perl)
-         ("tcl" ,tcl)
-         ,@(package-native-inputs graphviz))))))
+       (modify-inputs (package-native-inputs graphviz)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  perl
+                  tcl))))))
 
 (define-public python-graphviz
   (package
@@ -201,14 +193,13 @@ interfaces for other technical domains.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("unzip" ,unzip)
-
-       ;; For tests.
-       ("graphviz" ,graphviz)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list unzip
+           ;; For tests.
+           graphviz
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock))
     (home-page "https://github.com/xflr6/graphviz")
     (synopsis "Simple Python interface for Graphviz")
     (description
@@ -222,7 +213,7 @@ visualization tool suite.")
 (define-public python-pygraphviz
   (package
     (name "python-pygraphviz")
-    (version "1.5")
+    (version "1.7")
     (source
      (origin
        (method git-fetch)
@@ -232,19 +223,13 @@ visualization tool suite.")
        (file-name (string-append "pygraphviz-" version "-checkout"))
        (sha256
         (base32
-         "1yldym38m8ckgflln83i88143pd9fjj1vfp23sq39fs6np5g0nzp"))))
+         "0jqc3dzy9n0hn3b99zq8jp53901zpjzvvi5ns5mbaxg8kdrb1lfx"))))
     (build-system python-build-system)
-    (arguments
-     `(#:configure-flags
-       (let ((graphviz (assoc-ref %build-inputs "graphviz")))
-         (list (string-append "--include-path=" graphviz "/include")
-               (string-append "--library-path=" graphviz "/lib")))))
     (inputs
-     `(("graphviz" ,graphviz-2.38)))
+     (list graphviz))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)
-       ("python-doctest-ignore-unicode" ,python-doctest-ignore-unicode)))
+     (list python-nose python-mock python-pytest
+           python-doctest-ignore-unicode))
     (home-page "https://pygraphviz.github.io")
     (synopsis "Python interface to Graphviz")
     (description "PyGraphviz is a Python interface to the Graphviz graph
@@ -253,9 +238,6 @@ write, and draw graphs using Python to access the Graphviz graph data
 structure and layout algorithms.")
     (license license:bsd-3)))
 
-(define-public python2-pygraphviz
-  (package-with-python2 python-pygraphviz))
-
 (define-public python-uqbar
   (package
     (name "python-uqbar")
@@ -287,17 +269,15 @@ structure and layout algorithms.")
                (invoke "python" "-m" "pytest" "tests"))
              #t)))))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list graphviz
+           python-flake8
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov))
     (propagated-inputs
-     `(("python-black" ,python-black)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-unidecode" ,python-unidecode)))
+     (list python-black python-sphinx python-sphinx-rtd-theme
+           python-unidecode))
     (home-page "https://github.com/josiah-wolf-oberholtzer/uqbar")
     (synopsis "Tools for building documentation with Sphinx, Graphviz and LaTeX")
     (description
@@ -329,10 +309,10 @@ Graphviz and LaTeX.")
        ;; See <http://sourceforge.net/p/gts/bugs/41/>.
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; The gts.pc file has glib-2.0 as required.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "http://gts.sourceforge.net/")
 
     ;; Note: Despite the name, this is not official GNU software.
@@ -368,15 +348,14 @@ Graphviz and LaTeX.")
                     ":" (assoc-ref inputs "gdk-pixbuf") "/lib/girepository-1.0"
                     ":" (assoc-ref inputs "atk") "/lib/girepository-1.0")))
                `("PATH" ":" prefix
-                 (,(string-append (assoc-ref inputs "graphviz") "/bin"))))
-             #t)))))
+                 (,(dirname (search-input-file inputs "bin/dot"))))))))))
     (inputs
-     `(("atk" ,atk)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("graphviz" ,graphviz)
-       ("gtk+" ,gtk+)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list atk
+           librsvg
+           graphviz
+           gtk+
+           python-pycairo
+           python-pygobject))
     (home-page "https://pypi.org/project/xdot/")
     (synopsis "Interactive viewer for graphviz dot files")
     (description "Xdot is an interactive viewer for graphs written in
@@ -411,10 +390,9 @@ can be used either as a standalone application, or as a Python library.")
              #t)))))
     (native-inputs
      ;; For tests.
-     `(("graphviz" ,graphviz)
-       ("python-chardet" ,python-chardet)))
+     (list graphviz python-chardet))
     (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
+     (list python-pyparsing))
     (home-page "https://github.com/pydot/pydot")
     (synopsis "Python interface to Graphviz's DOT language")
     (description
@@ -439,10 +417,9 @@ graphs in Graphviz's DOT language, written in pure Python.")
     (arguments
      `(#:python ,python-2))
     (inputs
-     `(("texlive-latex-preview" ,texlive-latex-preview)
-       ("graphviz" ,graphviz)))
+     (list texlive-latex-preview graphviz))
     (propagated-inputs
-     `(("python-pyparsing" ,python2-pyparsing)))
+     (list python2-pyparsing))
     (home-page "https://github.com/kjellmf/dot2tex")
     (synopsis "Graphviz to LaTeX converter")
     (description
@@ -482,7 +459,7 @@ This approach allows:
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "tests/test.py")))))))
     (native-inputs
-     `(("graphviz" ,graphviz)))
+     (list graphviz))
     (home-page "https://github.com/jrfonseca/gprof2dot")
     (synopsis "Generate a dot graph from the output of several profilers")
     (description "This package provides a Python script to convert the output
diff --git a/gnu/packages/groff.scm b/gnu/packages/groff.scm
index fdb8440a39..1d2af7ff07 100644
--- a/gnu/packages/groff.scm
+++ b/gnu/packages/groff.scm
@@ -60,7 +60,7 @@
    ;; own HTML doc, nor does it change its capabilities, so we removed netpbm
    ;; from 'inputs'.
 
-   (inputs `(("ghostscript" ,ghostscript)))
+   (inputs (list ghostscript))
 
    ;; When cross-compiling, this package depends upon a native install of
    ;; itself.
@@ -207,7 +207,7 @@ is usually the formatter of \"man\" documentation pages.")
                  #t))))))
       (native-inputs `(("html-tree" ,perl-html-tree))) ; for test
       (inputs
-       `(("perl" ,perl)))
+       (list perl))
       (home-page "https://daniel.haxx.se/projects/roffit/")
       (synopsis "Convert nroff files to HTML")
       (description
@@ -250,9 +250,7 @@ It is typically used to display man pages on a web site.")
                                          "ruby-nokogiri")))))
              #t)))))
     (inputs
-     `(("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-mustache" ,ruby-mustache)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-kramdown ruby-mustache ruby-nokogiri))
     (synopsis
      "Build manuals in HTML and Unix man page format from Markdown")
     (description
diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm
index 382dfe7faf..ecbd0cb0bd 100644
--- a/gnu/packages/groovy.scm
+++ b/gnu/packages/groovy.scm
@@ -827,7 +827,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST)."))))
                      "java-jansi" "java-jline-2"))
                  ;; antlr.jar is present twice in antlr2.  Symlink doesn't like
                  ;; it, so we symlink it here.
-                 (symlink (string-append (assoc-ref inputs "antlr2") "/lib/antlr.jar")
+                 (symlink (search-input-file inputs "/lib/antlr.jar")
                           (string-append out-lib "/antlr.jar"))
                  (for-each
                    (lambda (tool)
diff --git a/gnu/packages/gsasl.scm b/gnu/packages/gsasl.scm
index d2aba5450d..787bbae2bb 100644
--- a/gnu/packages/gsasl.scm
+++ b/gnu/packages/gsasl.scm
@@ -62,9 +62,7 @@
             (sha256 (base32
                      "1syyvh3k659xf1hdv9pilnnhbbhs6vfapayp4xgdcc8mfgf9v4gz"))))
    (build-system gnu-build-system)
-   (inputs `(("nettle" ,nettle)
-             ("shishi" ,shishi)
-             ("zlib" ,zlib)))
+   (inputs (list nettle shishi zlib))
    (synopsis "Generic Security Service library")
    (description
     "The GNU Generic Security Service provides a free implementation of the
@@ -92,18 +90,14 @@ the underlying security implementation.")
     `(#:configure-flags '("--with-gssapi-impl=mit"
                           "--disable-static")))
    (inputs
-    `(("libgcrypt" ,libgcrypt)
-      ("libidn" ,libidn)
-      ("libntlm" ,libntlm)
-      ("mit-krb5" ,mit-krb5)
-      ("zlib" ,zlib)))
+    (list libgcrypt libidn libntlm mit-krb5 zlib))
    (native-inputs
-    `(;; Needed for cross compiling.
-      ("libgcrypt" ,libgcrypt)))
+    (list ;; Needed for cross compiling.
+          libgcrypt))
    (propagated-inputs
     ;; Propagate GnuTLS because libgnutls.la reads `-lnettle', and Nettle is a
     ;; propagated input of GnuTLS.
-    `(("gnutls" ,gnutls)))
+    (list gnutls))
    (synopsis "Simple Authentication and Security Layer library")
    (description
     "GNU SASL is an implementation of the Simple Authentication and
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 2927055240..143e4e868e 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -37,9 +37,11 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages aidc)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages curl)
@@ -49,6 +51,7 @@
   #:use-module (gnu packages flex)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -57,16 +60,22 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages image-processing)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages java)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages music)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ocr)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
@@ -84,6 +93,8 @@
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages vulkan)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages xml))
 
@@ -138,18 +149,16 @@ and for middleware components.")
                (base32 "1v8gq54n1pg8izn7s15yylwjf8r1l1dmzbm2yvf6pv2fmb4mz41b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen perl pkg-config))
     (inputs
-     `(("glu" ,glu)
-       ("libraw1394" ,libraw1394)
-       ("libusb" ,libusb)
-       ("libxv" ,libxv)
-       ("linux-headers" ,linux-libre-headers)
-       ("mesa" ,mesa)
-       ("sdl" ,sdl)
-       ("v4l" ,v4l-utils)))
+     (list glu
+           libraw1394
+           libusb
+           libxv
+           linux-libre-headers
+           mesa
+           sdl
+           v4l-utils))
     (synopsis "1394-Based Digital Camera Control Library")
     (description "LibDC1394 is a library that provides functionality to control
 any camera that conforms to the 1394-Based Digital Camera Specification written
@@ -241,7 +250,7 @@ and very fast.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("sdl" ,sdl)))
+     (list sdl))
     (native-search-paths
      (list
       (search-path-specification
@@ -300,13 +309,13 @@ applications that want audio visualisation and audio visualisation plugins.")
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("esound" ,esound)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("gtk+" ,gtk+-2)
        ("jack" ,jack-2)
        ("libx11" ,libx11)
        ("libxext" ,libxext)))
     (propagated-inputs
-     `(("libvisual" ,libvisual)))
+     (list libvisual))
     (synopsis "Audio visualisation library")
     (description "Libvisual is a library that acts as a middle layer between
 applications that want audio visualisation and audio visualisation plugins.")
@@ -329,20 +338,18 @@ applications that want audio visualisation and audio visualisation plugins.")
         (base32 "141jg70fim276i8k2kyypm84gy89i1k9mm4yf68mfwnybvjw1d6n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("gnome-common" ,gnome-common)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("tcsh" ,tcsh)                      ; for the tests
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal
+           gnome-common
+           libtool
+           pkg-config
+           tcsh ; for the tests
+           which))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pcaudiolib" ,pcaudiolib)
-       ("tcp-wrappers" ,tcp-wrappers)))
+     (list alsa-lib pcaudiolib tcp-wrappers))
     (propagated-inputs
-     `(("audiofile" ,audiofile)))
+     (list audiofile))
     (synopsis "Enlightened Sound Daemon")
     (description "The Enlightened Sound Daemon mixes several audio streams for
 playback by a single audio device.  You can also pre-load samples, and play them
@@ -384,7 +391,7 @@ http://www.tux.org/~ricdude/overview.html")
                 "if (error) return 77;"))
              #t)))))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc/stable)))
+     (list gtk-doc/stable))
     (home-page "https://gstreamer.freedesktop.org/modules/orc.html")
     (synopsis "Oil runtime compiler")
     (description
@@ -398,7 +405,7 @@ arrays of data.")
 (define-public gstreamer-docs
   (package
     (name "gstreamer-docs")
-    (version "1.18.2")
+    (version "1.18.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -406,7 +413,7 @@ arrays of data.")
                     "/gstreamer-docs-" version ".tar.xz"))
               (sha256
                (base32
-                "07hrgn11ll16yahyyh5684k8ms1j9npsyb8lj0skwbapin4czshm"))))
+                "1xvqrqv1zxqdpvd02dvr0xspk30c8b940vvnr9x75a08nx0x75xh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -424,11 +431,9 @@ arrays of data.")
              (invoke (string-append tar "/bin/tar") "-xvf" source
                      "--strip-components=3"
                      (string-append ,name "-" ,version
-                                    "/devhelp/books/GStreamer")))
-           #t))))
+                                    "/devhelp/books/GStreamer")))))))
     (native-inputs
-     `(("tar" ,tar)
-       ("xz" ,xz)))
+     (list tar xz))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "Developer documentation for GStreamer")
     (description
@@ -455,22 +460,21 @@ the GStreamer multimedia framework.")
           (("'CK_DEFAULT_TIMEOUT', '[0-9]*'")
            "'CK_DEFAULT_TIMEOUT', '600'")
           (("timeout ?: .*\\)")
-           "timeout: 90 * 60)"))
-        #t))))
+           "timeout: 90 * 60)"))))))
 
 (define-public gstreamer
   (package
     (name "gstreamer")
-    (version "1.18.2")
+    (version "1.18.5")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append
-            "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-"
-            version ".tar.xz"))
-      (sha256
-       (base32
-        "0ijlmvr660m8zn09xlmnq1ajrziqsivp2hig5a9mabhcjx7ypkb6"))))
+       (method url-fetch)
+       (uri (string-append
+             "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-"
+             version ".tar.xz"))
+       (sha256
+        (base32
+         "02p8my6dzmm4rvd93s3qnh8w5bm9bh4f7gdydbsvnn9llqr251jm"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -487,24 +491,42 @@ the GStreamer multimedia framework.")
                        (("tcase_add_test \\(tc_chain, test_stress_cleanup_unschedule.*")
                         "")
                        (("tcase_add_test \\(tc_chain, test_stress_reschedule.*")
-                      ""))
-                     #t)))
-               '()))))
-    (propagated-inputs `(("glib" ,glib))) ; required by gstreamer-1.0.pc.
+                        "")))))
+               '())
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             ;; Disable the 'pipelines-seek' test, which appears to be load
+             ;; sensitive (see:
+             ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/854).
+             (substitute* "tests/check/meson.build"
+               ((".*'pipelines/seek.c'.*")
+                "")))))))
+    (propagated-inputs
+     ;; In gstreamer-1.0.pc:
+     ;;   Requires: glib-2.0, gobject-2.0
+     ;;   Requires.private: gmodule-no-export-2.0 libunwind libdw
+     (list elfutils ; libdw
+           glib libunwind))
     (native-inputs
-     `(("bison" ,bison)
+     `(("bash-completion" ,bash-completion)
+       ("bison" ,bison)
        ("flex" ,flex)
+       ("gettext" ,gettext-minimal)
        ("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
+    (inputs
+     (list gmp libcap
+           ;; For tests.
+           gsl))
     (native-search-paths
      (list (search-path-specification
             (variable "GST_PLUGIN_SYSTEM_PATH")
             (files '("lib/gstreamer-1.0")))))
     (home-page "https://gstreamer.freedesktop.org/")
-    (synopsis "Multimedia library")
+    (synopsis "Multimedia framework")
     (description
      "GStreamer is a library for constructing graphs of media-handling
 components.  The applications it supports range from simple Ogg/Vorbis
@@ -521,21 +543,22 @@ This package provides the core library and elements.")
 (define-public gst-plugins-base
   (package
     (name "gst-plugins-base")
-    (version "1.18.2")
+    (version "1.18.5")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://gstreamer.freedesktop.org/src/" name "/"
                           name "-" version ".tar.xz"))
-      (patches (search-patches "gst-plugins-base-fix-id3v2-invalid-read.patch"))
       (sha256
        (base32
-        "1b05kg46azrxxvq42c71071lfsnc34pw4vynnkczdqi6g0gzn16x"))))
+        "18vg8kk7p2p8za8zaqg0v7z6898yw5a3b12vvl7xn02pb3s7l2wn"))))
     (build-system meson-build-system)
     (propagated-inputs
      `(("glib" ,glib)              ;required by gstreamer-sdp-1.0.pc
        ("gstreamer" ,gstreamer)    ;required by gstreamer-plugins-base-1.0.pc
-
+       ;; wayland-client.h is referred to in
+       ;; include/gstreamer-1.0/gst/gl/wayland/gstgldisplay_wayland.h
+       ("wayland" ,wayland)
        ;; XXX: Do not enable Orc optimizations on ARM systems because
        ;; it leads to two test failures.
        ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/683
@@ -544,6 +567,7 @@ This package provides the core library and elements.")
              '()
              `(("orc" ,orc)))))         ;required by gstreamer-audio-1.0.pc
     (inputs
+     ;; TODO: Add libvorbisidec
      `(("cdparanoia" ,cdparanoia)
        ("pango" ,pango)
        ("libogg" ,libogg)
@@ -554,26 +578,48 @@ This package provides the core library and elements.")
        ("libXext" ,libxext)
        ("libxv" ,libxv)
        ("alsa-lib" ,alsa-lib)
-       ;; XXX Don't build with opus on 32-bit systems:
-       ;; <https://bugs.gnu.org/32360>
-       ,@(if (target-64bit?)
-             `(("opus" ,opus))
-             '())))
+       ("opus" ,opus)
+       ("graphene" ,graphene)
+       ("iso-codes" ,iso-codes)
+       ("libgudev" ,libgudev)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("libvisual" ,libvisual)
+       ("mesa" ,mesa)
+       ("wayland-protocols" ,wayland-protocols)))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("glib:bin" ,glib "bin")
-        ("gobject-introspection" ,gobject-introspection)
-        ("python-wrapper" ,python-wrapper)))
+     `(("pkg-config" ,pkg-config)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("python-wrapper" ,python-wrapper)
+       ("gettext" ,gettext-minimal)
+       ("xorg-server" ,xorg-server-for-tests)))
     (arguments
-     `(#:configure-flags '("-Dgl=disabled")
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          ,@%common-gstreamer-phases
+         (add-after 'unpack 'disable-problematic-tests
+           (lambda _
+             (substitute* "tests/check/meson.build"
+               ;; This test causes nondeterministic failures (see:
+               ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/950).
+               ((".*'elements/appsrc.c'.*")
+                ""))))
          (add-before 'configure 'patch
            (lambda _
              (substitute* "tests/check/libs/pbutils.c"
-               (("/bin/sh") (which "sh")))
-             #t)))))
+               (("/bin/sh") (which "sh")))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis
      "Plugins for the GStreamer multimedia library")
@@ -584,7 +630,7 @@ for the GStreamer multimedia library.")
 (define-public gst-plugins-good
   (package
     (name "gst-plugins-good")
-    (version "1.18.2")
+    (version "1.18.5")
     (source
      (origin
        (method url-fetch)
@@ -592,11 +638,9 @@ for the GStreamer multimedia library.")
         (string-append
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
-       (patches (search-patches "gst-plugins-good-fix-test.patch"
-                                "gst-plugins-good-CVE-2021-3497.patch"
-                                "gst-plugins-good-CVE-2021-3498.patch"))
+       (patches (search-patches "gst-plugins-good-fix-test.patch"))
        (sha256
-        (base32 "1929nhjsvbl4bw37nfagnfsnxz737cm2x3ayz9ayrn9lwkfm45zp"))))
+        (base32 "0svrapawych2s3lm4lx3x023zxq5kcx50jnfmh0qigszfskyxbis"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
@@ -630,7 +674,7 @@ for the GStreamer multimedia library.")
        ("bzip2" ,bzip2)
        ("cairo" ,cairo)
        ("flac" ,flac)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,(librsvg-for-system))
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
        ("glu" ,glu)
@@ -663,8 +707,7 @@ for the GStreamer multimedia library.")
        ("wavpack" ,wavpack)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "GStreamer-Plugins-Good is a collection of plug-ins you'd want
 to have right next to you on the battlefield.  Shooting sharp and making no
@@ -677,15 +720,14 @@ model to base your own plug-in on, here it is.")
 (define-public gst-plugins-bad
   (package
     (name "gst-plugins-bad")
-    (version "1.18.2")
+    (version "1.18.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/src/"
                                   name "/" name "-" version ".tar.xz"))
-              (patches (search-patches "gst-plugins-bad-fix-overflow.patch"))
               (sha256
                (base32
-                "06ildd4rl6cynirv3p00d2ddf5is9svj4i7mkahldzhq24pq5mca"))
+                "13k7mm2wmsbhd04a20v9lj4afpf0w33ambpwlrw8bl7hjhxr4r51"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -694,6 +736,7 @@ model to base your own plug-in on, here it is.")
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dsctp-internal-usrsctp=disabled")
+       #:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:phases
        (modify-phases %standard-phases
          ,@%common-gstreamer-phases
@@ -705,8 +748,7 @@ model to base your own plug-in on, here it is.")
                    (lambda _
                      (substitute* "tests/check/meson.build"
                        (("\\[\\['elements/asfmux\\.c'\\]\\],")
-                        ""))
-                     #t)))
+                        "")))))
                '())
          (add-after 'unpack 'adjust-tests
            (lambda* (#:key native-inputs inputs #:allow-other-keys)
@@ -719,6 +761,15 @@ model to base your own plug-in on, here it is.")
                   (string-append "'GST_PLUGIN_SYSTEM_PATH_1_0', '"
                                  gst-plugins-good "/lib/gstreamer-1.0'"))
 
+                 ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1136
+                 ((".*elements/msdkh264enc\\.c.*") "")
+                 ((".*elements/svthevcenc\\.c.*") "")
+
+                 ;; The 'elements_shm.test_shm_live' test sometimes times out
+                 ;; (see:
+                 ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/790).
+                 ((".*'elements/shm\\.c'.*") "")
+
                  ;; FIXME: Why is this failing.
                  ((".*elements/dash_mpd\\.c.*") "")
 
@@ -727,61 +778,133 @@ model to base your own plug-in on, here it is.")
                  ((".*elements/curlhttpsrc\\.c.*") "")
                  ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1412
                  ((".*elements/dtls\\.c.*") ""))
-               #t))))))
+               (substitute* "tests/check/elements/zxing.c"
+                 ;; zxing 1.2.0 seemingly changed the type representation of
+                 ;; the EAN_13 structure; disable it.
+                 ((".*\"EAN_13\".*")
+                  "")))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (propagated-inputs
-     `(("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")         ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gst-plugins-good" ,gst-plugins-good) ;for tests
+       ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+       ("python" ,python-wrapper)
+       ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     ;; XXX: The following dependencies are missing:
-     ;;  vo-amrwbenc, vo-aacenc, bs2b, chromaprint, directfb, daala, libdts,
-     ;;  faac, flite, libgsm, libde265, libmms, libmimic, mjpegtools,
-     ;;  mpeg2enc, libofa, opencv, openh264, openni2, libtimemmgr, wildmidi,
-     ;;  openspc, gme, sbc, schroedinger, zbar, librtmp, spandsp
      `(("bluez" ,bluez)
+       ("bzip2" ,bzip2)
+       ("cairo" ,cairo)
+       ;; ("ccextractor" ,ccextractor)
+       ("chromaprint" ,chromaprint)
        ("curl" ,curl)
+       ("directfb" ,directfb)
+       ;;("dssim" ,dssim)
+       ("faac" ,faac)
        ("faad2" ,faad2)
+       ("flite" ,flite)
        ("fluidsynth" ,fluidsynth)
+       ("glib" ,glib)
+       ("glib-networking" ,glib-networking)
+       ("glu" ,glu)
+       ("gsm" ,gsm)
        ("gtk+" ,gtk+)
+       ("iqa" ,iqa)
        ("ladspa" ,ladspa)
+       ("lcms" ,lcms)
+       ("libaom" ,libaom)
        ("libass" ,libass)
+       ("libbs2b" ,libbs2b)
+       ("libdc1394" ,libdc1394)
+       ("libdca" ,libdca)
+       ("libde265" ,libde265)
+       ("libdrm" ,libdrm)
        ("libdvdnav" ,libdvdnav)
        ("libdvdread" ,libdvdread)
+       ("libexif" ,libexif)
+       ("libfdk" ,libfdk)
        ("libgcrypt" ,libgcrypt)
+       ("libgme" ,libgme)
        ("libgudev" ,libgudev)
        ("libkate" ,libkate)
+       ("libmfx" ,mediasdk)
+       ("libmms" ,libmms)
        ("libmodplug" ,libmodplug)
+       ("libmpcdec" ,libmpcdec)
        ("libnice" ,libnice)
+       ("libofa" ,libofa)
+       ("libopenmpt" ,libopenmpt)
        ("librsvg" ,librsvg)
        ("libsndfile" ,libsndfile)
        ("libsrtp" ,libsrtp)
        ("libssh2" ,libssh2)
+       ("libtiff" ,libtiff)
        ("libusb" ,libusb)
+       ("libva" ,libva)
        ("libvdpau" ,libvdpau)
        ("libwebp" ,libwebp)
+       ("libx11" ,libx11)
+       ("libxcb" ,libxcb)
+       ("libxext" ,libxext)
+       ("libxkbcommon" ,libxkbcommon)
        ("libxml2" ,libxml2)
+       ("libxshm" ,libxshmfence)
+       ("lilv" ,lilv)
        ("lrdf" ,lrdf)
+       ("lv2" ,lv2)
        ("mesa" ,mesa)
+       ("mjpegtools" ,mjpegtools)
        ("neon" ,neon)
+       ("nettle" ,nettle)
        ("openal" ,openal)
-       ("openexr" ,openexr-2)
+       ;; ("opencv" ,opencv)
+       ("openexr" ,openexr)
+       ("openh264" ,openh264)
        ("openjpeg" ,openjpeg)
+       ;; ("openni2" ,openni2)
+       ("opensles" ,opensles)
        ("openssl" ,openssl)
        ("opus" ,opus)
        ("orc" ,orc)
-       ;("qtbase" ,qtbase-5)
-       ;("qtdeclarative" ,qtdeclarative)
-       ;("qtx11extras" ,qtx11extras)
+       ("pango" ,pango)
+       ("rtmp" ,rtmpdump)
+       ("sbc" ,sbc)
+       ("sctp" ,lksctp-tools)
        ("soundtouch" ,soundtouch)
+       ("spandsp" ,spandsp)
        ("srt" ,srt)
+       ("svthevcenc" ,svt-hevc)
+       ("tinyalsa" ,tinyalsa)
+       ("transcode" ,transcode)
        ("usrsctp" ,usrsctp)
+       ("v4l" ,v4l-utils)
+       ("voaacenc", vo-aacenc)
+       ("voamrwbenc" ,vo-amrwbenc)
+       ("vulkan-headers" ,vulkan-headers)
+       ("vulkan-loader" ,vulkan-loader)
        ("x265" ,x265)
-       ("webrtc-audio-processing" ,webrtc-audio-processing)
-       ("wayland" ,wayland)))
+       ("wayland" ,wayland)
+       ("webrtcdsp" ,webrtc-audio-processing)
+       ("wildmidi" ,wildmidi)
+       ("wpebackend-fdo" ,wpebackend-fdo)
+       ;; ("wpewebkit" ,wpewebkit)
+       ("zbar" ,zbar)
+       ("zxing" ,zxing-cpp-1.2)))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "Plugins for the GStreamer multimedia library")
     (description
@@ -792,16 +915,15 @@ par compared to the rest.")
 (define-public gst-plugins-ugly
   (package
     (name "gst-plugins-ugly")
-    (version "1.18.2")
+    (version "1.18.5")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://gstreamer.freedesktop.org/src/"
                        name "/" name "-" version ".tar.xz"))
-       (patches (search-patches "gst-plugins-ugly-fix-out-of-bound-reads.patch"))
        (sha256
-        (base32 "1nwbcv5yaib3d8icvyja3zf6lyjf5zf1hndbijrhj8j7xlia0dx3"))))
+        (base32 "1nb6kz3gbn8r0sld6xkm16qpgyb2bvhafb7sff9rgagqk0z80cnz"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
@@ -818,8 +940,7 @@ par compared to the rest.")
              ;; Tests look for $XDG_RUNTIME_DIR.
              (setenv "XDG_RUNTIME_DIR" (getcwd))
              ;; For missing '/etc/machine-id'.
-             (setenv "DBUS_FATAL_WARNINGS" "0")
-             #t)))))
+             (setenv "DBUS_FATAL_WARNINGS" "0"))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -830,18 +951,17 @@ par compared to the rest.")
        ("python-wrapper" ,python-wrapper)
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("liba52" ,liba52)
-       ("libcdio" ,libcdio)
-       ("libdvdread" ,libdvdread)
-       ("libmpeg2" ,libmpeg2)
-       ("libx264" ,libx264)
-       ("opencore-amr" ,opencore-amr)
-       ("orc" ,orc)))
+     (list glib
+           glib-networking
+           liba52
+           libcdio
+           libdvdread
+           libmpeg2
+           libx264
+           opencore-amr
+           orc))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "Gst-Plugins-Ugly are the ones that might have a patent noose
 around their neck, or a lock-up license, or any other problem that makes you
@@ -852,7 +972,7 @@ think twice about shipping them.")
 (define-public gst-libav
   (package
     (name "gst-libav")
-    (version "1.18.2")
+    (version "1.18.5")
     (source
      (origin
        (method url-fetch)
@@ -860,20 +980,15 @@ think twice about shipping them.")
         (string-append
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
-       (patches (search-patches "gst-libav-64channels-stack-corruption.patch"))
        (sha256
-        (base32 "0jbzams9ggk3sq9ywv4gsl9rghyn203l2582m6l5c1sz9ka9m5in"))))
+        (base32 "0j55jgk9sbhinfx2gsg21q609x6yzrixrn5xxlxd378fj6500bl2"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("ruby" ,ruby)))
+     (list perl pkg-config python-wrapper ruby))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (propagated-inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "Gst-Libav contains a GStreamer plugin for using the encoders,
 decoders, muxers, and demuxers provided by FFmpeg.")
@@ -883,7 +998,7 @@ decoders, muxers, and demuxers provided by FFmpeg.")
 (define-public gst-editing-services
   (package
     (name "gst-editing-services")
-    (version "1.18.2")
+    (version "1.18.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -891,16 +1006,18 @@ decoders, muxers, and demuxers provided by FFmpeg.")
                     "gst-editing-services-" version ".tar.xz"))
               (sha256
                (base32
-                "0pv2k8zlpn3vv2sdlspi3m63ixcwzi90pjly2ypbkg59ab97rb15"))))
+                "1x8db4021qv4ypq1g6n5q2awrb7glr4xp1h650c3w7q59lwsix4a"))))
     (build-system meson-build-system)
     (arguments
      ;; FIXME: 16/22 failing tests.
      `(#:tests? #f
+       #:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:phases (modify-phases %standard-phases
                   ,@%common-gstreamer-phases)))
+    (propagated-inputs
+     (list gstreamer gst-plugins-base))
     (inputs
-     `(("gst-plugins-base" ,gst-plugins-base)
-       ("libxml2" ,libxml2)))
+     (list glib glib-networking gtk+ libxml2))
     (native-inputs
      `(("flex" ,flex)
        ("gobject-introspection" ,gobject-introspection)
@@ -909,7 +1026,7 @@ decoders, muxers, and demuxers provided by FFmpeg.")
        ("gst-plugins-good" ,gst-plugins-good)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+       ("python" ,python-wrapper)))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "GStreamer library for non-linear editors")
     (description
@@ -942,7 +1059,7 @@ given, also pass them to the build system instead of the ones used by PKG."
 (define-public python-gst
   (package
     (name "python-gst")
-    (version "1.18.2")
+    (version "1.18.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -950,7 +1067,7 @@ given, also pass them to the build system instead of the ones used by PKG."
                     "gst-python-" version ".tar.xz"))
               (sha256
                (base32
-                "171qxzndii7ynn9ag3a12h9vyydxzwy1j4ip3cb8hgim1dv0z7g1"))))
+                "0lmwwmr3wm56qlrdrb0d5cpmqxkcmarz61wmp1nrv5852f3qadjk"))))
     (build-system meson-build-system)
     (arguments
      `(#:modules ((guix build meson-build-system)
@@ -963,11 +1080,9 @@ given, also pass them to the build system instead of the ones used by PKG."
               "-Dpygi-overrides-dir="
               (python:site-packages %build-inputs %outputs) "gi/overrides"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (propagated-inputs
-     `(("gst-plugins-base" ,gst-plugins-base)
-       ("python-pygobject" ,python-pygobject)))
+     (list gst-plugins-base python-pygobject))
     (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "GStreamer GObject Introspection overrides for Python")
     (description
@@ -988,12 +1103,9 @@ be used by Python applications using GStreamer.")
                 "0zaa117n4wkya9p903vkj8hj58lmdb66pxsdx5wwcv7nffbp5d67"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("ncurses" ,ncurses)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list gtk+-2 ncurses gstreamer gst-plugins-base))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://space.twc.de/~stefan/gst123.php")
     (synopsis "Flexible command line media player based on gstreamer")
     (description "The program gst123 is designed to be a more flexible command
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 4e427deaef..53bfd1faa2 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -24,9 +24,10 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,6 +46,7 @@
 
 (define-module (gnu packages gtk)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -60,6 +62,9 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -74,21 +79,30 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages vulkan)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
@@ -99,86 +113,113 @@
 
 (define-public atk
   (package
-   (name "atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1jwp16r6p5z66k4b2v8zlzhyshhwlmyi27ippkrgqr8jsary7w6l"))))
-   (build-system meson-build-system)
-   (propagated-inputs `(("glib" ,glib))) ; required by atk.pc
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME accessibility toolkit")
-   (description
-    "ATK provides the set of accessibility interfaces that are implemented
+    (name "atk")
+    (version "2.36.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1217cmmykjgkkim0zr1lv5j13733m4w5vipmy4ivw0ll6rz28xpv"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t ; To wrap binaries and/or compile schemas
+       ,@(if (%current-target-system)
+             `(#:configure-flags
+               ;; introspection requires running binaries for the host system
+               ;; on the build system.
+               '("-Dintrospection=false"))
+             '())))
+    (propagated-inputs (list glib)) ; required by atk.pc
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("pkg-config" ,pkg-config)))
+    (synopsis "GNOME accessibility toolkit")
+    (description
+     "ATK provides the set of accessibility interfaces that are implemented
 by other toolkits and applications.  Using the ATK interfaces, accessibility
 tools have full access to view and control running applications.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/atk/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility")))
 
 (define-public cairo
   (package
-   (name "cairo")
-   (version "1.16.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "https://cairographics.org/releases/cairo-"
-                                version ".tar.xz"))
-            (patches (search-patches "cairo-CVE-2018-19876.patch"
-                                     "cairo-CVE-2020-35492.patch"))
-            (sha256
-             (base32
-              "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))))
-   (build-system gnu-build-system)
-   (propagated-inputs
-    `(("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("libpng" ,libpng)
-      ("libx11" ,libx11)
-      ("libxext" ,libxext)
-      ("libxrender" ,libxrender)
-      ("pixman" ,pixman)))
-   (inputs
-    `(("ghostscript" ,ghostscript)
-      ("libspectre" ,libspectre)
-      ("poppler" ,poppler)
-      ("xorgproto" ,xorgproto)
-      ("zlib" ,zlib)))
-   (native-inputs
-     `(("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)))
+    (name "cairo")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://cairographics.org/releases/cairo-"
+                       version ".tar.xz"))
+       (sha256
+        (base32 "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))
+       (patches (search-patches
+		 "cairo-CVE-2018-19876.patch"
+		 "cairo-CVE-2020-35492.patch"))))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
-       #:configure-flags '("--enable-tee"      ;needed for GNU Icecat
-                           "--enable-xml"      ;for cairo-xml support
-                           "--disable-static")))
-   (synopsis "2D graphics library")
-   (description
-    "Cairo is a 2D graphics library with support for multiple output devices.
-Currently supported output targets include the X Window System (via both
-Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
-output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.
-
-Cairo is designed to produce consistent output on all output media while
-taking advantage of display hardware acceleration when available
-eg. through the X Render Extension).
-
-The cairo API provides operations similar to the drawing operators of
-PostScript and PDF.  Operations in cairo including stroking and filling cubic
-Bézier splines, transforming and compositing translucent images, and
-antialiased text rendering.  All drawing operations can be transformed by any
-affine transformation (scale, rotation, shear, etc.).")
-   (license license:lgpl2.1) ; or Mozilla Public License 1.1
-   (home-page "https://cairographics.org/")))
+     `(#:tests? #f ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
+       #:configure-flags
+       (list
+        "--disable-static"
+        ;; XXX: To be enabled.
+        ;; "--enable-gallium=yes"
+        ;; "--enable-gl=yes"
+        ;; " --enable-glesv2=yes"
+        ;; "--enable-glesv3=yes"
+        ;; "--enable-cogl=yes"
+        ;; "--enable-directfb=yes"
+        ;; "--enable-vg=yes"
+        "--enable-tee=yes"              ;needed for GNU IceCat
+        "--enable-xml=yes"              ;for cairo-xml support
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html"))))
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     ;; TODO(core-updates): make this unconditional
+     `(,@(if (%current-target-system)
+             `(("bash-minimal" ,bash-minimal)) ; for glib-or-gtk-wrap
+             '())
+       ("drm" ,libdrm)
+       ("ghostscript" ,ghostscript)
+       ("libspectre" ,libspectre)
+       ("poppler" ,poppler)))
+    (propagated-inputs
+     `( ;; ("cogl" ,cogl)
+       ;; ("directfb" ,directfb)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ;; ("gtk+" ,gtk+)
+       ("libpng" ,libpng)
+       ;; ("librsvg" ,librsvg)
+       ;; ("opengl" ,mesa)
+       ("pixman" ,pixman)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xext" ,libxext)
+       ("xrender" ,libxrender)))
+    (synopsis "Multi-platform 2D graphics library")
+    (description "Cairo is a 2D graphics library with support for multiple output
+devices.  Currently supported output targets include the X Window System (via
+both Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
+output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.")
+    (home-page "https://cairographics.org/")
+    (license
+     ;; This project is dual-licensed.
+     (list
+      license:lgpl2.1+
+      license:mpl1.1))))
 
 (define-public cairo-sans-poppler
   ;; Variant used to break the dependency cycle between Poppler and Cairo.
@@ -201,25 +242,23 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public harfbuzz
   (package
    (name "harfbuzz")
-   (version "2.6.4")
+   (version "2.8.2")
    (source (origin
              (method url-fetch)
-             (uri (string-append "https://www.freedesktop.org/software/"
-                                 "harfbuzz/release/harfbuzz-"
+             (uri (string-append "https://github.com/harfbuzz/harfbuzz"
+                                 "/releases/download/" version "/harfbuzz-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "04iwq13w6zkdhljmsxrzgg4fyh04qnwfn57rgrl9kmijc7cvh4wl"))))
+               "1rvv86wpm3y04fqns1655268rhvhvms469837709v2z2bhwn316m"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "bin")) ; 160K, only hb-view depend on cairo
    (inputs
-    `(("cairo" ,cairo)))
+    (list cairo))
    (propagated-inputs
     ;; There are all in the Requires or Requires.private field of '.pc'.
-    `(("glib" ,glib)
-      ("graphite2" ,graphite2)
-      ("icu4c" ,icu4c)))
+    (list glib graphite2 icu4c))
    (native-inputs
     `(("glib:bin" ,glib "bin")          ;for glib-mkenums
       ("gobject-introspection" ,gobject-introspection)
@@ -266,14 +305,15 @@ affine transformation (scale, rotation, shear, etc.).")
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
-     `(#:configure-flags
-       (list
-        (string-append "--with-html-docdir="
-                       (assoc-ref %outputs "doc")
-                       "/share/doc/datrie/html"))))
+     (list #:configure-flags
+           #~(list (string-append "--with-html-docdir=" #$output:doc
+                                  "/share/doc/datrie/html"))
+
+           ;; Several tests refer to the 'test.tri' file, leading to race
+           ;; conditions when running tests in parallel.
+           #:parallel-tests? #f))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (synopsis "Double-Array Trie Library")
     (description "Libdatrie is an implementation of double-array structure for
 representing trie.  Trie is a kind of digital search tree.")
@@ -301,7 +341,8 @@ representing trie.  Trie is a kind of digital search tree.")
                        (assoc-ref %outputs "doc")
                        "/share/doc/libthai/html"))))
     (native-inputs
-     `(("doxygen" ,doxygen)
+     `(("datrie" ,libdatrie)
+       ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("datrie" ,libdatrie)))
@@ -314,54 +355,60 @@ applications.")
 
 (define-public pango
   (package
-   (name "pango")
-   (version "1.44.7")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/pango/"
-                                (version-major+minor version) "/"
-                                name "-" version ".tar.xz"))
-            (patches (search-patches "pango-skip-libthai-test.patch"))
-            (sha256
-             (base32
-              "07qvxa2sk90chp1l12han6vxvy098mc37sdqcznyywyv2g6bd9b6"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'disable-cantarell-tests
-                   (lambda _
-                     (substitute* "tests/meson.build"
-                       ;; XXX FIXME: These tests require "font-abattis-cantarell", but
-                       ;; adding it here would introduce a circular dependency.
-                       (("\\[ 'test-harfbuzz'.*") "")
-                       (("\\[ 'test-itemize'.*") "")
-                       (("\\[ 'test-layout'.*") ""))
-                     #t)))))
-   (propagated-inputs
-    ;; These are all in Requires or Requires.private of the '.pc' files.
-    `(("cairo" ,cairo)
-      ("fribidi" ,fribidi)
-      ("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("harfbuzz" ,harfbuzz)
-
-      ;; Some packages, such as Openbox, expect Pango to be built with the
-      ;; optional libxft support.
-      ("libxft" ,libxft)))
-   (inputs
-    `(("zlib" ,zlib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME text and font handling library")
-   (description
-    "Pango is the core text and font handling library used in GNOME
-applications.  It has extensive support for the different writing systems
-used throughout the world.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/pango/")))
+    (name "pango")
+    (version "1.48.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/pango/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (patches (search-patches "pango-skip-libthai-test.patch"))
+              (sha256
+               (base32
+                "166wxhsjb6hb0dk7wkkdcmpvasl9n0a0aa64mdgagzfdidwzbq91"))))
+    (build-system meson-build-system)
+    (arguments
+     '(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-cantarell-tests
+                    (lambda _
+                      (substitute* "tests/meson.build"
+                        ;; XXX FIXME: These tests require "font-abattis-cantarell", but
+                        ;; adding it here would introduce a circular dependency.
+                        (("\\[ 'test-layout'.*") "")
+                        (("\\[ 'test-itemize'.*") "")
+                        (("\\[ 'test-font'.*") "")
+                        (("\\[ 'test-harfbuzz'.*") "")))))))
+    (propagated-inputs
+     ;; These are all in Requires or Requires.private of the '.pc' files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("fribidi" ,fribidi)
+       ("glib" ,glib)
+       ("harfbuzz" ,harfbuzz)
+       ("libthai" ,libthai)
+       ;; Some packages, such as Openbox, expect Pango to be built with the
+       ;; optional libxft support.
+       ("libxft" ,libxft)
+       ("libxrender" ,libxrender)))
+    (inputs
+     (list bash-minimal zlib))
+    (native-inputs
+     `(("glib" ,glib "bin")                             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (synopsis "Text and font handling library")
+    (description "Pango is a library for laying out and rendering of text, with
+an emphasis on internationalization.  Pango can be used anywhere that text
+layout is needed, though most of the work on Pango so far has been done in the
+context of the GTK+ widget toolkit.  Pango forms the core of text and font
+handling for GTK+-2.x.")
+    (home-page "https://pango.gnome.org/")
+    (license license:lgpl2.0+)))
 
 (define-public pango-1.42
   (package
@@ -381,10 +428,11 @@ used throughout the world.")
                  (add-after 'configure 'disable-layout-test
                    (lambda _
                      ;; This test requires that fontconfig uses bitmap fonts
-                     ;; such as "gs-fonts"; however providing such a package
-                     ;; alone is not enough, as the requirement comes from
-                     ;; deeper in the font stack.  Since this version of Pango
-                     ;; is only used for librsvg, simply disable the test.
+                     ;; such as "font-ghostscript"; however providing such a
+                     ;; package alone is not enough, as the requirement comes
+                     ;; from deeper in the font stack.  Since this version of
+                     ;; Pango is only used for librsvg, simply disable the
+                     ;; test.
                      (substitute* "tests/Makefile"
                        (("test-layout\\$\\(EXEEXT\\)") ""))
                      #t)))))))
@@ -403,11 +451,9 @@ used throughout the world.")
                "0ip0ziys6mrqqmz4n71ays0kf5cs1xflj1gfpvs4fgy2nsrr482m"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("pango" ,pango-1.42)))
+     (list glib pango-1.42))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://developer.gnome.org/pango")
     (synopsis "Obsolete pango functions")
     (description  "Pangox was a X backend to pango.  It is now obsolete and no
@@ -442,8 +488,8 @@ functions which were removed.")
      `(("gtk" ,gtk+-2)
        ("gtkmm" ,gtkmm-2)))
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     (home-page "https://drobilla.net/software/ganv/")
     (synopsis "GTK+ widget for interactive graph-like environments")
     (description
@@ -469,12 +515,12 @@ diagrams.")
                   "gtksourceview-2-add-default-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)
-       ;; For testing.
-       ("xorg-server" ,xorg-server-for-tests)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list intltool
+           `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config
+           ;; For testing.
+           xorg-server-for-tests
+           shared-mime-info))
     (propagated-inputs
      ;; As per the pkg-config file.
      `(("gtk" ,gtk+-2)
@@ -548,9 +594,7 @@ printing and other features typical of a source code editor.")
       ("shared-mime-info" ,shared-mime-info)))
    (propagated-inputs
     ;; gtksourceview-3.0.pc refers to all these.
-    `(("glib" ,glib)
-      ("gtk+" ,gtk+)
-      ("libxml2" ,libxml2)))
+    (list glib gtk+ libxml2))
    (home-page "https://wiki.gnome.org/Projects/GtkSourceView")
    (synopsis "GNOME source code widget")
    (description "GtkSourceView is a text widget that extends the standard
@@ -573,378 +617,622 @@ highlighting and other features typical of a source code editor.")
 
 (define-public gdk-pixbuf
   (package
-   (name "gdk-pixbuf")
-   (version "2.40.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (patches (search-patches "gdk-pixbuf-CVE-2020-29385.patch"))
-            (sha256
-             (base32
-              "1rnlx9yfw970maxi2x6niaxmih5la11q1ilr7gzshz2kk585k0hm"))))
-   (build-system meson-build-system)
-   (arguments
-    `(#:configure-flags '("-Dinstalled_tests=false")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after
-         'unpack 'disable-failing-tests
-         (lambda _
-           (substitute* "tests/meson.build"
-             ;; XXX FIXME: This test fails on armhf machines with:
-             ;; SKIP Not enough memory to load bitmap image
-             ;; ERROR: cve-2015-4491 - too few tests run (expected 4, got 2)
-             ((".*'cve-2015-4491'.*") "")
-             ;; XXX FIXME: This test fails with:
-             ;; ERROR:pixbuf-jpeg.c:74:test_type9_rotation_exif_tag:
-             ;; assertion failed (error == NULL): Data differ
-             ;; (gdk-pixbuf-error-quark, 0)
-             ((".*'pixbuf-jpeg'.*") ""))
-           #t))
-        ;; The slow tests take longer than the specified timeout.
-        ,@(if (any (cute string=? <> (%current-system))
-                   '("armhf-linux" "aarch64-linux"))
-            '((replace 'check
-              (lambda _
-                (invoke "meson" "test" "--timeout-multiplier" "5"))))
-            '()))))
-   (propagated-inputs
-    `(;; Required by gdk-pixbuf-2.0.pc
-      ("glib" ,glib)
-      ("libpng" ,libpng)
-      ;; Used for testing and required at runtime.
-      ("shared-mime-info" ,shared-mime-info)))
-   (inputs
-    `(("libjpeg" ,libjpeg-turbo)
-      ("libtiff" ,libtiff)
-      ("libx11"  ,libx11)))
-   (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME image loading and manipulation library")
-   (description
-    "GdkPixbuf is a library for image loading and manipulation developed
-in the GNOME project.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/gdk-pixbuf/")))
-
-;; To build gdk-pixbuf with SVG support, we need librsvg, and librsvg depends
-;; on gdk-pixbuf, so this new varibale.  Also, librsvg adds 90MiB to the
-;; closure size.
-(define-public gdk-pixbuf+svg
-  (package/inherit gdk-pixbuf
-    (name "gdk-pixbuf+svg")
-    (inputs
-     `(("librsvg" ,librsvg)
-       ,@(package-inputs gdk-pixbuf)))
+    (name "gdk-pixbuf")
+    (version "2.42.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0k9f9177qxaryaxprwrhqnv5p2gdq4a8i6y05gm98qa8izc5v77y"))))
+    (build-system meson-build-system)
+    (outputs '("out" "debug"))
     (arguments
-     '(#:configure-flags '("-Dinstalled-tests=false")
-       #:tests? #f ; tested by the gdk-pixbuf package already
+     `(#:glib-or-gtk? #t             ; To wrap binaries and/or compile schemas
+       #:configure-flags '("-Dinstalled_tests=false")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'install 'register-svg-loader
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out     (assoc-ref outputs "out"))
-                    (librsvg (assoc-ref inputs "librsvg"))
-                    (loaders
-                     (append
-                      (find-files out "^libpixbufloader-.*\\.so$")
-                      (find-files librsvg "^libpixbufloader-.*\\.so$")))
-                    (gdk-pixbuf-query-loaders
-                     (string-append out "/bin/gdk-pixbuf-query-loaders")))
-               (apply invoke
-                      gdk-pixbuf-query-loaders
-                      "--update-cache"
-                      loaders)))))))
-    (synopsis
-     "GNOME image loading and manipulation library, with SVG support")))
+         (add-after 'unpack 'patch-docbook
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* "meson.build"
+                 (("http://docbook.sourceforge.net/release/xsl/current/")
+                  (string-append (assoc-ref ,(if (%current-target-system)
+                                                 '(or native-inputs inputs)
+                                                 'inputs) "docbook-xsl")
+                                 "/xml/xsl/docbook-xsl-1.79.2/")))
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                  (string-append (assoc-ref ,(if (%current-target-system)
+                                                 '(or native-inputs inputs)
+                                                 'inputs) "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
+         (add-before 'configure 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/meson.build"
+               (("\\[ 'pixbuf-fail', \\['conform', 'slow'\\], \\],")
+                ""))))
+         ;; The slow tests take longer than the specified timeout.
+         ,@(if (any (cute string=? <> (%current-system))
+                    '("armhf-linux" "aarch64-linux"))
+               '((replace 'check
+                   (lambda _
+                     (invoke "meson" "test" "--timeout-multiplier" "5"))))
+               '()))))
+    (propagated-inputs
+     (list ;; Required by gdk-pixbuf-2.0.pc
+           glib
+           ;; Required by gdk-pixbuf-xlib-2.0.pc
+           libx11
+           ;; Used for testing and required at runtime.
+           shared-mime-info))
+    (inputs
+     `(,@(if (%current-target-system)
+             `(("bash-minimal" ,bash-minimal)) ; for glib-or-gtk-wrap
+             '())
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng"  ,libpng)
+       ("libtiff" ,libtiff)))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")                             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (native-search-paths
+     ;; This file is produced by the gdk-pixbuf-loaders-cache-file
+     ;; profile hook.
+     (list (search-path-specification
+            (variable "GDK_PIXBUF_MODULE_FILE")
+            (files (list %gdk-pixbuf-loaders-cache-file))
+            (separator #f)              ;single valued
+            (file-type 'regular))))
+    (synopsis "Image loading library")
+    (description "GdkPixbuf is a library that loads image data in various
+formats and stores it as linear buffers in memory.  The buffers can then be
+scaled, composited, modified, saved, or rendered.")
+    (home-page "https://wiki.gnome.org/Projects/GdkPixbuf")
+    (license license:lgpl2.1+)))
 
-(define-public at-spi2-core
-  (package
-   (name "at-spi2-core")
-   (version "2.34.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1ihixwhh3c16q6253qj9gf69741rb2pi51822a4rylsfcyywsafn"))))
-   (build-system meson-build-system)
-   (outputs '("out" "doc"))
-   (arguments
-    '(#:configure-flags
-      (list "-Ddocs=true")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'set-documentation-path
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Ensure that the cross-references point to the "doc" output.
-            (substitute* "doc/libatspi/meson.build"
-              (("docpath =.*")
-               (string-append "docpath = '" (assoc-ref outputs "doc") "/share/gtk-doc/html'\n")))
-            #t))
-        (add-before 'install 'prepare-doc-directory
-          (lambda* (#:key outputs #:allow-other-keys)
-            (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))
-            #t))
-        (add-after 'install 'move-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (doc (assoc-ref outputs "doc")))
-              (copy-recursively
-               (string-append out "/share/gtk-doc")
-               (string-append doc "/share/gtk-doc"))
-              (delete-file-recursively
-               (string-append out "/share/gtk-doc")))
-            #t))
-        (add-after 'install 'check
-          (lambda _
-            (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
-            ;; Run test-suite under a dbus session.
-            (setenv "XDG_DATA_DIRS"     ; for finding org.xfce.Xfconf.service
-                    (string-append %output "/share"))
-            ;; Don't fail on missing  '/etc/machine-id'.
-            (setenv "DBUS_FATAL_WARNINGS" "0") ;
-            (invoke "dbus-launch" "ninja" "test")))
-         (delete 'check))))
-   (propagated-inputs
-    ;; atspi-2.pc refers to all these.
-    `(("dbus" ,dbus)
-      ("glib" ,glib)
-      ("libxi" ,libxi)
-      ("libxtst" ,libxtst)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("glib" ,glib "bin")
-      ("pkg-config" ,pkg-config)))
-   (synopsis "Assistive Technology Service Provider Interface, core components")
-   (description
-    "The Assistive Technology Service Provider Interface, core components,
+;;; A minimal variant used to prevent a cycle with Inkscape.
+(define-public at-spi2-core-minimal
+  (hidden-package
+   (package
+     (name "at-spi2-core")
+     (version "2.40.0")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append "mirror://gnome/sources/" name "/"
+                                   (version-major+minor version)  "/"
+                                   name "-" version ".tar.xz"))
+               (sha256
+                (base32
+                 "0a9l6cfxynjn6jcp29d72i75xbkrzs1l5kmqcwmfal801b9sg5j1"))))
+     (build-system meson-build-system)
+     (arguments
+      '(#:glib-or-gtk? #t    ; To wrap binaries and/or compile schemas
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'install 'check
+            (lambda _
+              (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
+              ;; Run test-suite under a dbus session.
+              (setenv "XDG_DATA_DIRS" ; for finding org.xfce.Xfconf.service
+                      (string-append %output "/share"))
+              ;; Don't fail on missing  '/etc/machine-id'.
+              (setenv "DBUS_FATAL_WARNINGS" "0") ;
+              (invoke "dbus-launch" "ninja" "test")))
+          (delete 'check))))
+     (inputs
+      (list bash-minimal))
+     (propagated-inputs
+      ;; atspi-2.pc refers to all these.
+      (list dbus glib libx11 libxi libxtst))
+     (native-inputs
+      `(("gettext" ,gettext-minimal)
+        ("glib" ,glib "bin")
+        ("gobject-introspection" ,gobject-introspection)
+        ("pkg-config" ,pkg-config)
+        ("python" ,python-wrapper)))
+     (synopsis "Assistive Technology Service Provider Interface, core components")
+     (description
+      "The Assistive Technology Service Provider Interface, core components,
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+     (license license:lgpl2.1+)
+     (home-page "https://wiki.gnome.org/Accessibility/"))))
 
-;;; A minimal variant used to prevent a cycle with Inkscape.
-(define at-spi2-core-minimal
-  (package
-    (inherit at-spi2-core)
-    (name "at-spi2-core-minimal")
-    (outputs (delete "doc" (package-outputs at-spi2-core)))
+(define-public at-spi2-core
+  (package/inherit at-spi2-core-minimal
+    (outputs (cons "doc" (package-outputs at-spi2-core-minimal)))
     (arguments
-     (substitute-keyword-arguments (package-arguments at-spi2-core)
-       ((#:configure-flags configure-flags)
-        `(delete "-Ddocs=true" ,configure-flags))
+     (substitute-keyword-arguments (package-arguments at-spi2-core-minimal)
+       ((#:configure-flags flags ''())
+        `(cons ,(if (%current-target-system)
+                    "-Ddocs=false"
+                    "-Ddocs=true")
+               ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
-           (delete 'set-documentation-path)
-           (delete 'prepare-doc-directory)
-           (delete 'move-documentation)))))
+           (add-after 'unpack 'set-documentation-path
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Ensure that the cross-references point to the "doc" output.
+               (substitute* "doc/libatspi/meson.build"
+                 (("docpath =.*")
+                  (string-append "docpath = '" (assoc-ref outputs "doc")
+                                 "/share/gtk-doc/html'\n")))))
+           (add-before 'install 'prepare-doc-directory
+             (lambda* (#:key outputs #:allow-other-keys)
+               (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))))
+           ,@(if (%current-target-system)
+                 '()
+                 '((add-after 'install 'move-documentation
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let ((out (assoc-ref outputs "out"))
+                             (doc (assoc-ref outputs "doc")))
+                         (copy-recursively
+                          (string-append out "/share/gtk-doc")
+                          (string-append doc "/share/gtk-doc"))
+                         (delete-file-recursively
+                          (string-append out "/share/gtk-doc")))))))))))
     (native-inputs
-     (alist-delete "gtk-doc" (package-native-inputs at-spi2-core)))))
+     (append `(("docbook-xml" ,docbook-xml-4.3)
+               ("gtk-doc" ,gtk-doc/stable)
+               ("libxml2" ,libxml2))    ;for XML_CATALOG_FILES
+         (package-native-inputs at-spi2-core-minimal)))
+    (properties (alist-delete 'hidden?
+                              (package-properties at-spi2-core-minimal)))))
 
 (define-public at-spi2-atk
   (package
-   (name "at-spi2-atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "05ncp7s5nddjinffs26mcvpbd63vk1m3cv5y530p3plgfhqgjvbp"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases
-      (modify-phases %standard-phases
-        (replace 'check
-                 ;; Run test-suite under a dbus session.
-                 (lambda _
-                   (setenv "DBUS_FATAL_WARNINGS" "0")
-                   (invoke "dbus-launch" "meson" "test"))))))
-   (propagated-inputs
-    ;; TODO: Replace by at-spi2-core-minimal in the next staging window, or
-    ;; when Inkscape 0.92 is upgraded to 1.0 to avoid a cycle.
-    `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
-   (inputs
-    `(("atk" ,atk)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ;; For tests.
-      ("dbus" ,dbus)
-      ("libxml2" ,libxml2)))
-   (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
-   (description
-    "The Assistive Technology Service Provider Interface
+    (name "at-spi2-atk")
+    (version "2.38.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0ks6r9sx27l80n3a7yjmkilxv48cqj183wc7cap3caw2myjhi86g"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       ;; Compiling tests requires "libxml2" to be in 'inputs'.
+       ,@(if (%current-target-system)
+             `(#:configure-flags '("-Dtests=false"))
+             '())
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run test-suite under a dbus session.
+           (lambda _
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             (invoke "dbus-launch" "meson" "test"))))))
+    (propagated-inputs
+     (list at-spi2-core-minimal)) ; required by atk-bridge-2.0.pc
+    (inputs
+     (list atk glib))
+    (native-inputs
+     (list dbus ; For tests
+           gobject-introspection libxml2 pkg-config))
+    (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
+    (description
+     "The Assistive Technology Service Provider Interface
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility/")))
 
 (define-public gtk+-2
   (package
-   (name "gtk+")
-   (version "2.24.32")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "0bjq7ja9gwcv6n5q4qkvdjjx40wsdiikksz1zqxvxsm5vlyskj5n"))
-            (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
-                                     "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
-                                     "gtk2-theme-paths.patch"))))
-   (build-system gnu-build-system)
-   (outputs '("out" "bin" "doc"))
-   (propagated-inputs
-    `(("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("pango" ,pango)))
-   (inputs
-    `(("cups" ,cups)
-      ("libxcomposite" ,libxcomposite)
-      ("libxcursor" ,libxcursor)
-      ("libxdamage" ,libxdamage)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxrandr" ,libxrandr)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("pkg-config" ,pkg-config)
-      ("python-wrapper" ,python-wrapper)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-xinput=yes"
-            (string-append "--with-html-dir="
-                           (assoc-ref %outputs "doc")
-                           "/share/gtk-doc/html"))
-      #:phases
-      (modify-phases %standard-phases
-        (add-before 'configure 'disable-tests
-          (lambda _
-            ;; FIXME: re-enable tests requiring an X server
-            (substitute* "gtk/Makefile.in"
-              (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits ."))
-            #t))
-        (add-after 'install 'remove-cache
-          (lambda* (#:key outputs #:allow-other-keys)
-	    (for-each
+    (name "gtk+")
+    (version "2.24.33")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1nn6kks1zyvb5xikr9y2k7r9bwjy1g4b0m0s66532bclymbwfamc"))
+              (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
+                                       "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
+                                       "gtk2-theme-paths.patch"
+                                       "gtk2-fix-builder-test.patch"))))
+    (build-system gnu-build-system)
+    (outputs '("out" "bin" "doc" "debug"))
+    (propagated-inputs
+     (list atk cairo
+           (if (target-x86-64?)
+             librsvg-bootstrap
+             librsvg-2.40)
+           glib pango))
+    (inputs
+     (list cups
+           libx11
+           libxcomposite
+           libxcursor
+           libxext
+           libxdamage
+           libxi
+           libxinerama
+           libxkbcommon
+           libxrandr
+           libxrender
+           libxshmfence))
+    (native-inputs
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           perl
+           pkg-config
+           python-wrapper
+           xorg-server-for-tests))
+    (arguments
+     `(#:parallel-tests? #f
+       #:configure-flags
+       (list "--with-xinput=yes"
+             (string-append "--with-html-dir="
+                            (assoc-ref %outputs "doc")
+                            "/share/gtk-doc/html"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "gtk/Makefile.in"
+               (("aliasfilescheck\\.sh") ""))
+             (substitute* "gtk/tests/recentmanager.c"
+               (("g_test_add_func \\(\"/recent-manager.*;") ""))
+             (substitute* "gtk/tests/defaultvalue.c"
+               (("return g_test_run\\(\\);") ""))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'remove-cache
+           (lambda* (#:key outputs #:allow-other-keys)
+	     (for-each
 	      delete-file
 	      (find-files (assoc-ref outputs "out") "immodules.cache"))
-            #t)))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK2_PATH")
-           (files '("lib/gtk-2.0")))))
-   (synopsis "Cross-platform toolkit for creating graphical user interfaces")
-   (description
-    "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
+             #t)))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK2_PATH")
+            (files '("lib/gtk-2.0")))))
+    (search-paths native-search-paths)
+    (synopsis "Cross-platform toolkit for creating graphical user interfaces")
+    (description
+     "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
 graphical user interfaces.  Offering a complete set of widgets, GTK+ is
 suitable for projects ranging from small one-off tools to complete
 application suites.")
-   (license license:lgpl2.0+)
-   (home-page "https://www.gtk.org/")))
+    (license license:lgpl2.0+)
+    (home-page "https://www.gtk.org/")))
 
 (define-public gtk+
-  (package (inherit gtk+-2)
-   (name "gtk+")
-   (version "3.24.24")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "12ipk1d376bai9v820qzhxba93kkh5abi6mhyqr4hwjvqmkl77fc"))
-            (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
-                                     "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
-   (propagated-inputs
-    `(("at-spi2-atk" ,at-spi2-atk)
-      ("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("libepoxy" ,libepoxy)
-      ("libxcursor" ,libxcursor)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxkbcommon" ,libxkbcommon)
-      ("libxdamage" ,libxdamage)
-      ("libxrandr" ,libxrandr)
-      ("mesa" ,mesa)
-      ("pango" ,pango)
-      ("wayland" ,wayland)
-      ("wayland-protocols" ,wayland-protocols)))
-   (inputs
-    `(("libxml2" ,libxml2)
-      ;; XXX: colord depends on mozjs (through polkit), which fails on
-      ;;      on non-intel systems now.
-      ;;("colord" ,colord)
-      ("cups" ,cups)                            ;for printing support
-      ;; XXX: rest depends on p11-kit, which fails on mips64el now.
-      ;;("rest" ,rest)
-      ("json-glib" ,json-glib)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("glib" ,glib "bin")
-      ("gettext" ,gettext-minimal)
-      ("pkg-config" ,pkg-config)
-      ("gobject-introspection" ,gobject-introspection)
-      ("python-wrapper" ,python-wrapper)
-      ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
-      ;; of updating xorg-server directly on the master branch.
-      ("xorg-server" ,xorg-server-for-tests)))
-   (arguments
-    `(#:disallowed-references (,xorg-server-for-tests)
-      ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
-      ;; to "doc".
-      #:configure-flags (list (string-append "--with-html-dir="
-                                             (assoc-ref %outputs "doc")
-                                             "/share/gtk-doc/html")
-                              ;; The header file <gdk/gdkwayland.h> is required
-                              ;; by gnome-control-center
-                              "--enable-wayland-backend"
-                              ;; This is necessary to build both backends.
-                              "--enable-x11-backend"
-                              ;; This enables the HTML5 websocket backend.
-                              "--enable-broadway-backend")
-      #:phases (modify-phases %standard-phases
-        (add-before 'configure 'pre-configure
-          (lambda _
-            ;; Disable most tests, failing in the chroot with the message:
-            ;; D-Bus library appears to be incorrectly set up; failed to read
-            ;; machine uuid: Failed to open "/etc/machine-id": No such file or
-            ;; directory.
-            ;; See the manual page for dbus-uuidgen to correct this issue.
-            (substitute* "testsuite/Makefile.in"
-              (("SUBDIRS = gdk gtk a11y css reftests")
-               "SUBDIRS = gdk"))
-            #t))
-        (add-after 'install 'move-desktop-files
-          ;; Move desktop files into 'bin' to avoid cycle references.
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p (string-append bin "/share"))
-              (rename-file (string-append out "/share/applications")
-                           (string-append bin "/share/applications"))
-              #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK3_PATH")
-           (files '("lib/gtk-3.0")))))))
+  (package
+    (inherit gtk+-2)
+    (name "gtk+")
+    (version "3.24.30")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1a9vg840fjq1mmm403b67k624qrkxh9shaz9pv7z9l8a6bzvyxds"))
+       (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
+                                "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
+    (propagated-inputs
+     (list atk
+           at-spi2-atk
+           cairo
+           fribidi
+           fontconfig
+           freetype
+           (if (target-x86-64?)
+             librsvg-bootstrap
+             librsvg-2.40)
+           glib
+           libcloudproviders-minimal
+           libepoxy
+           libx11
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxext
+           libxfixes
+           libxi
+           libxinerama
+           libxkbcommon
+           libxrandr
+           libxrender
+           mesa
+           pango
+           wayland
+           wayland-protocols))
+    (inputs
+     (list colord-minimal ;to prevent a cycle with inkscape
+           cups
+           graphene
+           harfbuzz
+           iso-codes
+           json-glib-minimal
+           libxml2
+           rest))
+    (native-inputs
+     (list docbook-xml-4.1.2
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           hicolor-icon-theme
+           perl
+           pkg-config
+           python-wrapper
+           sassc
+           ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
+           ;; of updating xorg-server directly on the master branch.
+           xorg-server-for-tests
+           libxslt))
+    (arguments
+     `(#:imported-modules ((guix build glib-or-gtk-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules ((guix build utils)
+                  (guix build gnu-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:))
+       #:disallowed-references (,xorg-server-for-tests)
+       ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
+       ;; to "doc".
+       #:configure-flags (list (string-append "--with-html-dir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/gtk-doc/html")
+                               "--enable-cloudproviders"
+                               ;; The header file <gdk/gdkwayland.h> is required
+                               ;; by gnome-control-center
+                               "--enable-wayland-backend"
+                               ;; This is necessary to build both backends.
+                               "--enable-x11-backend"
+                               ;; This enables the HTML5 websocket backend.
+                               "--enable-broadway-backend")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "testsuite/gtk/Makefile.in"
+               (("builderparser cellarea check-icon-names check-cursor-names")
+                "builderparser cellarea check-cursor-names")
+               (("notify no-gtk-init object objects-finalize papersize rbtree")
+                "no-gtk-init papersize rbtree")
+               (("stylecontext templates textbuffer textiter treemodel treepath")
+                "stylecontext textbuffer textiter treemodel treepath"))
+             (substitute* "testsuite/a11y/Makefile.in"
+               (("accessibility-dump tree-performance text children derive")
+                "tree-performance text children derive"))
+             (substitute* "testsuite/reftests/Makefile.in"
+               (("TEST_PROGS = gtk-reftest")
+                "TEST_PROGS = "))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'move-desktop-files
+           ;; Move desktop files into 'bin' to avoid cycle references.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (assoc-ref outputs "bin")))
+               (mkdir-p (string-append bin "/share"))
+               (rename-file (string-append out "/share/applications")
+                            (string-append bin "/share/applications"))
+               #t))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK3_PATH")
+            (files '("lib/gtk-3.0")))))))
+
+(define-public gtk
+  (package
+    (name "gtk")
+    (version "4.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1rh9fd5axf79pmd93hb2fmmflic5swcvqvq6vqghlgz4bmvnjc82"))
+       (patches
+        (search-patches "gtk4-respect-GUIX_GTK4_PATH.patch"))))
+    (build-system meson-build-system)
+    (outputs '("out" "bin" "doc"))
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build meson-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:))
+       #:configure-flags
+       (list
+        "-Dbroadway-backend=true"      ;for broadway display-backend
+        "-Dcloudproviders=enabled"     ;for cloud-providers support
+        "-Dtracker=enabled"            ;for filechooser search support
+        "-Dcolord=enabled"             ;for color printing support
+        ,@(if (%current-target-system)
+              ;; If true, gtkdoc-scangobj will try to execute a
+              ;; cross-compiled binary.
+              '("-Dgtk_doc=false")
+              '("-Dgtk_doc=true"))
+        "-Dman-pages=true")
+       #:parallel-tests? #f             ;parallel tests are not supported
+       #:test-options '("--setup=x11"   ;defaults to wayland
+                        ;; Use the same test options as upstream uses for
+                        ;; their CI.
+                        "--suite=gtk"
+                        "--no-suite=gsk-compare-broadway")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
+             ;; Correct DTD resources of docbook.
+             (substitute* (find-files "docs" "\\.xml$")
+               (("http://www.oasis-open.org/docbook/xml/4.3/")
+                (string-append
+                 (assoc-ref (or native-inputs inputs) "docbook-xml-4.3")
+                 "/xml/dtd/docbook/")))
+             ;; Disable building of icon cache.
+             (substitute* "meson.build"
+               (("gtk_update_icon_cache: true")
+                "gtk_update_icon_cache: false"))
+             ;; Disable failing tests.
+             (substitute* (find-files "testsuite" "meson.build")
+               (("[ \t]*'empty-text.node',") "")
+               (("[ \t]*'testswitch.node',") "")
+               (("[ \t]*'widgetfactory.node',") ""))
+             (substitute* "testsuite/reftests/meson.build"
+               (("[ \t]*'label-wrap-justify.ui',") "")) ))
+         (add-before 'build 'set-cache
+           (lambda _
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for those variables.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")))
+         (add-after 'install 'move-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (assoc-ref outputs "bin"))
+                    (doc (assoc-ref outputs "doc")))
+               (for-each mkdir-p
+                         (list
+                          (string-append bin "/bin")
+                          (string-append bin "/share/applications")
+                          (string-append bin "/share/icons")
+                          (string-append bin "/share/man")
+                          (string-append bin "/share/metainfo")
+                          (string-append doc "/share/doc")))
+               ;; Move programs and related files to output 'bin'.
+               (for-each (lambda (dir)
+                           (rename-file
+                            (string-append out dir)
+                            (string-append bin dir)))
+                         (list
+                          "/bin"
+                          "/share/applications"
+                          "/share/icons"
+                          "/share/man"
+                          "/share/metainfo"))
+               ;; Move HTML documentation to output 'doc'.
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("docbook-xml-4.3" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext-minimal" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection) ;for building introspection data
+       ("gtk-doc" ,gtk-doc)             ;for building documentation
+       ("intltool" ,intltool)
+       ("libxslt" ,libxslt)             ;for building man-pages
+       ("pkg-config" ,pkg-config)
+       ;; These python modules are required for building documentation.
+       ("python-jinja2" ,python-jinja2)
+       ("python-markdown" ,python-markdown)
+       ("python-markupsafe" ,python-markupsafe)
+       ("python-pygments" ,python-pygments)
+       ("python-toml" ,python-toml)
+       ("python-typogrify" ,python-typogrify)
+       ("sassc" ,sassc)                 ;for building themes
+       ("vala" ,vala)
+       ("xorg-server-for-tests" ,xorg-server-for-tests)))
+    (inputs
+     (list colord ;for color printing support
+           cups ;for CUPS print-backend
+           ffmpeg ;for ffmpeg media-backend
+           fribidi
+           gstreamer ;for gstreamer media-backend
+           gst-plugins-bad ;provides gstreamer-player
+           gst-plugins-base ;provides gstreamer-gl
+           harfbuzz
+           iso-codes
+           json-glib
+           libcloudproviders ;for cloud-providers support
+           librsvg
+           python
+           rest
+           tracker))          ;for filechooser search support
+    (propagated-inputs
+     ;; Following dependencies are referenced in .pc files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("librsvg" ,librsvg)
+       ("glib" ,glib)
+       ("graphene" ,graphene)
+       ("libepoxy" ,libepoxy)
+       ("libx11" ,libx11)               ;for x11 display-backend
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxdamage" ,libxdamage)
+       ("libxext" ,libxext)
+       ("libxfixes" ,libxfixes)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)     ;for xinerama support
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("pango" ,pango)
+       ("vulkan-headers" ,vulkan-headers)
+       ("vulkan-loader" ,vulkan-loader) ;for vulkan graphics API support
+       ("wayland" ,wayland)             ;for wayland display-backend
+       ("wayland-protocols" ,wayland-protocols)))
+    (native-search-paths
+     (list
+      (search-path-specification
+       (variable "GUIX_GTK4_PATH")
+       (files '("lib/gtk-4.0")))))
+    (search-paths native-search-paths)
+    (home-page "https://www.gtk.org/")
+    (synopsis "Cross-platform widget toolkit")
+    (description "GTK is a multi-platform toolkit for creating graphical user
+interfaces.  Offering a complete set of widgets, GTK is suitable for projects
+ranging from small one-off tools to complete application suites.")
+    (license license:lgpl2.1+)))
 
 ;;;
 ;;; Guile bindings.
@@ -1006,14 +1294,12 @@ application suites.")
                          (find-files module-dir "\\.scm$"))
                #t))))))
     (inputs
-     `(("guile-lib" ,guile-lib)
-       ("expat" ,expat)
-       ("guile" ,guile-3.0)))
+     (list guile-lib expat guile-3.0))
     (propagated-inputs
      ;; The .pc file refers to 'cairo'.
-     `(("cairo" ,cairo)))
+     (list cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.nongnu.org/guile-cairo/")
     (synopsis "Cairo bindings for GNU Guile")
     (description
@@ -1092,15 +1378,10 @@ exceptions, macros, and a dynamic programming environment.")
                                        file "-o" go)))
                            (find-files module-dir "\\.scm$"))
                  #t))))))
-      (native-inputs `(("pkg-config" ,pkg-config)
-                       ("autoconf" ,autoconf)
-                       ("automake" ,automake)
-                       ("libtool" ,libtool)
-                       ("texinfo" ,texinfo)))
-      (inputs `(("guile" ,guile-3.0)
-                ("librsvg" ,librsvg)
-                ("guile-lib" ,guile-lib)))        ;for (unit-test)
-      (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+      (native-inputs (list pkg-config autoconf automake libtool texinfo))
+      (inputs (list guile-3.0
+                    (librsvg-for-system) guile-lib))        ;for (unit-test)
+      (propagated-inputs (list guile-cairo))
       (synopsis "Render SVG images using Cairo from Guile")
       (description
        "Guile-RSVG wraps the RSVG library for Guile, allowing you to render SVG
@@ -1162,13 +1443,11 @@ images onto Cairo surfaces.")
                                  out "/share/guile/site/" version " -C "
                                  out "/lib/guile/" version "/site-ccache "))))
              #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-3.0)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-3.0))
     (propagated-inputs
      ;; These are used by the (present …) modules.
-     `(("guile-lib" ,guile-lib)
-       ("guile-cairo" ,guile-cairo)
-       ("guile-rsvg" ,guile-rsvg)))
+     (list guile-lib guile-cairo guile-rsvg))
     (home-page "https://wingolog.org/software/guile-present/")
     (synopsis "Create SVG or PDF presentations in Guile")
     (description
@@ -1183,7 +1462,7 @@ documents.")
   (package
     (inherit guile-present)
     (name "guile2.2-present")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-lib" ,guile2.2-lib)
        ("guile-cairo" ,guile2.2-cairo)
@@ -1204,23 +1483,23 @@ documents.")
                "1gnf3j96nip5kl99a268i0dy1hj7s1cfs66sps3zwysnkd7qr399"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("atk" ,atk)
-       ;;("corba" ,corba) ; not packaged yet
-       ("gconf" ,gconf)
-       ("gobject-introspection" ,gobject-introspection)
-       ;;("gthread" ,gthread) ; not packaged yet
-       ("gnome-vfs" ,gnome-vfs)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+-2)
-       ("libglade" ,libglade)
-       ("libgnome" ,libgnome)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("pango" ,pango)
-       ("libffi" ,libffi)
-       ("glib" ,glib)))
-    (inputs `(("guile" ,guile-2.2)))
+     (list pkg-config
+           atk
+           ;;("corba" ,corba) ; not packaged yet
+           gconf
+           gobject-introspection
+           ;;("gthread" ,gthread) ; not packaged yet
+           gnome-vfs
+           gdk-pixbuf
+           gtk+-2
+           libglade
+           libgnome
+           libgnomecanvas
+           libgnomeui
+           pango
+           libffi
+           glib))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-cairo" ,guile2.2-cairo)
        ("g-wrap" ,g-wrap)
@@ -1252,24 +1531,45 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 (define-public cairomm
   (package
     (name "cairomm")
-    (version "1.12.2")
+    (version "1.16.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.cairographics.org/releases/"
-                                  name "-" version ".tar.gz"))
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
-                "16fmigxsaz85c3lgcls7biwyz8zy8c8h3jndfm54cxxas3a7zi25"))))
-    (build-system gnu-build-system)
+                "1ya4y7qa000cjawqwswbqv26y5icfkmhs5iiiil4dxgrqn91923y"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     ;; The examples lack -lcairo.
-     '(#:make-flags '("LDFLAGS=-lcairo")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true"
+        "-Dboost-shared=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("boost" ,boost)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("fontconfig" ,fontconfig)))
     (propagated-inputs
-     `(("libsigc++" ,libsigc++)
-       ("freetype" ,freetype)
-       ("fontconfig" ,fontconfig)
-       ("cairo" ,cairo)))
+     (list libsigc++ cairo))
     (home-page "https://cairographics.org/")
     (synopsis "C++ bindings to the Cairo 2D graphics library")
     (description
@@ -1277,42 +1577,63 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 library.")
     (license license:lgpl2.0+)))
 
-(define-public cairomm-1.13
+(define-public cairomm-1.14
   (package
     (inherit cairomm)
     (name "cairomm")
-    (version "1.13.1")
+    (version "1.14.2")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://www.cairographics.org/releases/"
-                       name "-" version ".tar.gz"))
+                       name "-" version ".tar.xz"))
        (sha256
-        (base32 "1xlfl0fm5mgv53lr8xjv2kqsk3bz67qkk6qzvbrqmbvbvvbqp9wp"))))
+        (base32 "1qwdj9xw1w651kqwh82nipbryimm1ir5n3c6q34nphsx576bj9h1"))))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("sigc++" ,libsigc++)))))
+     (modify-inputs (package-propagated-inputs cairomm)
+       (prepend libsigc++-2)))))
 
 (define-public pangomm
   (package
     (name "pangomm")
-    (version "2.42.0")
+    (version "2.48.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0mmzxp3wniaafkxr30sb22mq9x44xckb5d60h1bl99lkzxks0vfa"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y2vyp6azvhrii6rzs89kr08wg8z1p562awyr812131zqdsd83ly"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("cairomm" ,cairomm)
-       ("glibmm" ,glibmm)
-       ("pango" ,pango)))
+     (list cairo cairomm glibmm pango))
     (home-page "https://pango.gnome.org//")
     (synopsis "C++ interface to the Pango text rendering library")
     (description
@@ -1320,11 +1641,11 @@ library.")
 library.")
     (license license:lgpl2.1+)))
 
-(define-public pangomm-2.42
+(define-public pangomm-2.46
   (package
     (inherit pangomm)
     (name "pangomm")
-    (version "2.42.1")
+    (version "2.46.0")
     (source
      (origin
        (method url-fetch)
@@ -1333,102 +1654,192 @@ library.")
                        (version-major+minor version)  "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "03zli5amizhv9bfklwfq7xyf0b5dagchx1lnz9f0v1rhk69h9gql"))))
+        (base32 "06zczkaxf5p5kjgnzrfylzi40w9a8lxpndgs7rpn12qrsq27sy6k"))))
     (propagated-inputs
-     `(("cairomm" ,cairomm-1.13)
-       ("glibmm" ,glibmm-2.64)
-       ("pango" ,pango)))))
+     (list cairomm-1.14 glibmm-2.64 pango))))
 
 (define-public atkmm
   (package
     (name "atkmm")
-    (version "2.28.0")
+    (version "2.36.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0fnxrspxkhhbrjphqrpvl3zjm66n50s4cywrrrwkhbflgy8zqk2c"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0wwr0663jrqx2klsasffd9wpk3kqnwisj1y3ahdkjdk5hzrsjgy9"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glibmm" ,glibmm) ("atk" ,atk)))
-    (home-page "https://www.gtkmm.org")
-    (synopsis "C++ interface to the ATK accessibility library")
-    (description
-     "ATKmm provides a C++ programming interface to the ATK accessibility
-toolkit.")
-    (license license:lgpl2.1+)))
+     (list glibmm atk))
+    (synopsis "C++ bindings for ATK")
+    (description "ATKmm is the C++ binding for the ATK library.")
+    (home-page "https://wiki.gnome.org/Accessibility")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
+
+(define-public atkmm-2.28
+  (package
+    (inherit atkmm)
+    (name "atkmm")
+    (version "2.28.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1b8vycqzr3lfvk2l73f4kk74hj48081zbh9r1r2ilr3h8xh7cs0i"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs atkmm)
+       (prepend glibmm-2.64)))))
 
 (define-public gtkmm
   (package
     (name "gtkmm")
-    (version "3.24.2")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1hxdnhavjyvbcpxhd5z17l9fj4182028s66lc0s16qqqrldhjwbd"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")        ;for 'glib-compile-resources'
-                     ("xorg-server" ,xorg-server-for-tests)))
-    (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
-       ("gtk+" ,gtk+)
-       ("glibmm" ,glibmm)))
+    (version "4.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1nhdf1s437k41af6frbqw2sky46qci0hgkg9h86a9rlnc0r69d1f"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:disallowed-references (,xorg-server-for-tests)
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'run-xvfb
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((xorg-server (assoc-ref inputs "xorg-server")))
-                        ;; Tests such as 'object_move/test' require a running
-                        ;; X server.
-                        (system (string-append xorg-server "/bin/Xvfb :1 &"))
-                        (setenv "DISPLAY" ":1")
-                        ;; Don't fail because of the missing /etc/machine-id.
-                        (setenv "DBUS_FATAL_WARNINGS" "0")
-                        #t))))))
+     `(#:configure-flags '("-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-cache
+           (lambda _
+             (setenv "XDG_CACHE_HOME" (getcwd))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("glib:bin" ,glib "bin")
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (propagated-inputs
+     (list atkmm cairomm glibmm gtk pangomm))
+    (synopsis "C++ Interfaces for GTK+ and GNOME")
+    (description "GTKmm is the official C++ interface for the popular GUI
+library GTK+.  Highlights include typesafe callbacks, and a comprehensive set
+of widgets that are easily extensible via inheritance.  You can create user
+interfaces either in code or with the Glade User Interface designer, using
+libglademm.  There's extensive documentation, including API reference and a
+tutorial.")
     (home-page "https://gtkmm.org/")
-    (synopsis
-     "C++ interface to the GTK+ graphical user interface library")
-    (description
-     "gtkmm is the official C++ interface for the popular GUI library GTK+.
-Highlights include typesafe callbacks, and a comprehensive set of widgets that
-are easily extensible via inheritance.  You can create user interfaces either
-in code or with the Glade User Interface designer, using libglademm.  There's
-extensive documentation, including API reference and a tutorial.")
-    (license license:lgpl2.1+)))
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
 
+(define-public gtkmm-3
+  (package
+    (inherit gtkmm)
+    (name "gtkmm")
+    (version "3.24.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1ri2msp3cmzi6r65ghwb8gfavfaxv0axpwi3q60nm7v8hvg36qw5"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments gtkmm)
+       ;; Use meson 0.59 to workaround a new issue with meson 0.60 (see:
+       ;; https://github.com/mesonbuild/meson/issues/9350#issuecomment-953799600).
+       ((#:meson _ #f)
+        meson-0.59)))
+    (propagated-inputs
+     `(("atkmm-2.28" ,atkmm-2.28)
+       ("cairomm-1.14" ,cairomm-1.14)
+       ("glibmm" ,glibmm)
+       ("gtk+" ,gtk+)
+       ("pangomm-2.42" ,pangomm-2.46)))))
 
 (define-public gtkmm-2
-  (package (inherit gtkmm)
+  (package
+    (inherit gtkmm)
     (name "gtkmm")
     (version "2.24.5")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
-    (arguments '())
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
+    (build-system gnu-build-system)
+    (arguments
+     (strip-keyword-arguments
+      '(#:configure-flags) (package-arguments gtkmm)))
     (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
-       ("gtk+" ,gtk+-2)
-       ("glibmm" ,glibmm)))))
+     (list atkmm-2.28 cairomm-1.14 glibmm-2.64 gtk+-2 pangomm-2.46))))
 
 (define-public gtksourceviewmm
   (package
@@ -1443,12 +1854,10 @@ extensive documentation, including API reference and a tutorial.")
                (base32 "0fgvmhm4h4qmxig87qvangs6ijw53mi40siz7pixlxbrsgiil22i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In 'Requires' of gtksourceviewmm-3.0.pc.
-     `(("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm)
-       ("gtksourceview" ,gtksourceview-3)))
+     (list glibmm gtkmm-3 gtksourceview-3))
     (synopsis "C++ interface to the GTK+ 'GtkTextView' widget")
     (description
      "gtksourceviewmm is a portable C++ library that extends the standard GTK+
@@ -1465,7 +1874,7 @@ printing and other features typical of a source code editor.")
 (define-public python-pycairo
   (package
     (name "python-pycairo")
-    (version "1.19.1")
+    (version "1.20.0")
     (source
      (origin
       (method url-fetch)
@@ -1473,13 +1882,12 @@ printing and other features typical of a source code editor.")
                           version "/pycairo-" version ".tar.gz"))
       (sha256
        (base32
-        "111fav9m1iagw3nh2ws2vzkjh34r97yl7rdlpvsngsqg521k251c"))))
+        "1326aa2ybhhhrvz3n4p22z5sic25m016ddb5yq0hvbprnw6a35an"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (propagated-inputs                  ;pycairo.pc references cairo
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://cairographics.org/pycairo/")
     (synopsis "Python bindings for cairo")
     (description
@@ -1522,7 +1930,7 @@ printing and other features typical of a source code editor.")
     (outputs '("out"
                "doc"))                            ;13 MiB of gtk-doc HTML
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("python" ,python-2)
 
@@ -1533,9 +1941,9 @@ printing and other features typical of a source code editor.")
        ("libglade" ,libglade)
        ("glib"   ,glib)))
     (propagated-inputs
-     `(("python-pycairo"   ,python2-pycairo)     ;loaded at runtime
-       ("python-pygobject" ,python2-pygobject-2) ;referenced in pc file
-       ("gtk+"             ,gtk+-2)))
+     (list python2-pycairo ;loaded at runtime
+           python2-pygobject-2 ;referenced in pc file
+           gtk+-2))
     (arguments
      `(#:tests? #f
        #:phases (modify-phases %standard-phases
@@ -1589,10 +1997,9 @@ write GNOME applications.")
                 "0zq78dv22arg35ma6kah9cwfd1zx8gg7amsibzd128qw81p766c2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("cairo" ,cairo)))
+     (list cairo))
     (home-page "https://metacpan.org/release/Cairo")
     (synopsis "Perl interface to the cairo 2d vector graphics library")
     (description "Cairo provides Perl bindings for the vector graphics library
@@ -1613,11 +2020,9 @@ produces identical output on all those targets.")
         (base32 "0l2wcz77ndmbgvxx34gdm919a3dxh9fixqr47p50n78ysx2692cd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (propagated-inputs
-     `(("perl-cairo" ,perl-cairo)
-       ("perl-glib" ,perl-glib)))
+     (list perl-cairo perl-glib))
     (home-page "https://metacpan.org/dist/Cairo-GObject")
     (synopsis "Integrate Cairo into the Glib type system")
     (description "Cairo::GObject registers Cairo's types with Glib's type systems,
@@ -1637,12 +2042,11 @@ so that they can be used normally in signals and properties.")
                 "0ry9jfvfgdwzalxcvwsgr7plhk3agx7p40l0fqdf3vrf7ds47i29"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (propagated-inputs
-     `(("perl-pango" ,perl-pango)))
+     (list perl-pango))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1690,11 +2094,8 @@ yet remaining very close in spirit to original API.")
        ("perl-test-simple" ,perl-test-simple)
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("perl-cairo-gobject" ,perl-cairo-gobject)
-       ("perl-carp" ,perl-carp)
-       ("perl-exporter" ,perl-exporter)
-       ("perl-glib-object-introspection" ,perl-glib-object-introspection)))
+     (list gtk+ perl-cairo-gobject perl-carp perl-exporter
+           perl-glib-object-introspection))
     (home-page "https://metacpan.org/dist/Gtk3")
     (synopsis "Perl interface to the 3.x series of the gtk+ toolkit")
     (description "Perl bindings to the 3.x series of the gtk+ toolkit.
@@ -1716,13 +2117,11 @@ yet remaining very close in spirit to original API.")
                 "0wdcidnfnb6nm79fzfs39ivawj3x8m98a147fmcxgv1zvwia9c1l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+     (list perl-extutils-depends perl-extutils-pkgconfig))
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (propagated-inputs
-     `(("perl-cairo" ,perl-cairo)
-       ("perl-glib" ,perl-glib)))
+     (list perl-cairo perl-glib))
     (home-page "https://metacpan.org/release/Pango")
     (synopsis "Layout and render international text")
     (description "Pango is a library for laying out and rendering text, with an
@@ -1759,7 +2158,7 @@ and routines to assist in editing internationalized text.")
                      ("glib:bin" ,glib "bin")
                      ("xorg-server" ,xorg-server-for-tests)))
     ;; Listed in 'Requires.private' of 'girara.pc'.
-    (propagated-inputs `(("gtk+" ,gtk+)))
+    (propagated-inputs (list gtk+))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'check 'start-xserver
@@ -1792,7 +2191,7 @@ information.")
 (define-public gtk-doc
   (package
     (name "gtk-doc")
-    (version "1.28")
+    (version "1.33.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1800,8 +2199,10 @@ information.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "05apmwibkmn1icx05l8aw241lhymcx01zvk5i499cb150bijj7li"))))
-    (build-system gnu-build-system)
+                "0hxza8qp52lrq7s1vbilz2vh4170cail560zi8khl0zb42d706yc"))
+              (patches
+               (search-patches "gtk-doc-respect-xml-catalog.patch"))))
+    (build-system meson-build-system)
     (arguments
      `(#:parallel-tests? #f
        #:phases
@@ -1809,82 +2210,67 @@ information.")
          (add-after 'unpack 'patch-gtk-doc-scan
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "gtk-doc.xsl"
-              (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/html/chunk.xsl"))
-              (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/common/en.xml")))
-             #t))
-         (add-after 'patch-gtk-doc-scan 'patch-test-out
-           (lambda _
-             ;; sanity.sh counts the number of status lines.  Since our
-             ;; texlive regenerates the fonts every time and the font
-             ;; generator metafont outputs a lot of extra lines, this
-             ;; test would always fail.  Disable it for now.
-             (substitute* "tests/Makefile.in"
-              (("empty.sh sanity.sh") "empty.sh"))
+               (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/html/chunk.xsl"))
+               (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/common/en.xml")))
              #t))
-         (add-before 'build 'set-HOME
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; FIXME: dblatex with texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
-             #t))
-         (add-before 'configure 'fix-docbook
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "configure"
-               ;; The configure check is overzealous about making sure that
-               ;; things are in place -- it uses the xmlcatalog tool to make
-               ;; sure that docbook-xsl is available, but this tool can only
-               ;; look in one catalog file, unlike the $XML_CATALOG_FILES
-               ;; variable that Guix defines.  Fool the test by using the
-               ;; docbook-xsl catalog explicitly and get on with life.
-               (("\"\\$XML_CATALOG_FILE\" \
-\"http://docbook.sourceforge.net/release/xsl/")
-                (string-append (car (find-files (assoc-ref inputs "docbook-xsl")
-                                                "^catalog.xml$"))
-                               " \"http://docbook.sourceforge.net/release/xsl/")))
+             (substitute* "tests/Makefile.am"
+               (("annotations.sh bugs.sh empty.sh fail.sh gobject.sh program.sh")
+                ""))
              #t))
          (add-after 'install 'wrap-executables
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (for-each (lambda (prog)
                            (wrap-program prog
-                             `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
-                         (find-files (string-append out "/bin")))
-               #t))))
-       #:configure-flags
-       (list (string-append "--with-xml-catalog="
-                            (assoc-ref %build-inputs "docbook-xml")
-                            "/xml/dtd/docbook/catalog.xml"))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
+                         (find-files (string-append out "/bin")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
        ("itstool" ,itstool)
-       ("libxml" ,libxml2)
-       ("gettext" ,gettext-minimal)
-       ("bc" ,bc)))
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("xsltproc" ,libxslt)
-       ("dblatex" ,dblatex)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("docbook-xsl" ,docbook-xsl)
-       ("source-highlight" ,source-highlight)
-       ("glib" ,glib)
-       ("python-six" ,python-six)))
-    (home-page "https://www.gtk.org/gtk-doc/")
-    (synopsis "Documentation generator from C source code")
-    (description
-     "GTK-Doc generates API documentation from comments added to C code.  It is
-typically used to document the public API of GTK+ and GNOME libraries, but it
-can also be used to document application code.")
-    (license license:gpl2+)))
+     (list bc
+           dblatex
+           docbook-xml-4.3
+           docbook-xsl
+           glib
+           libxml2
+           libxslt
+           python
+           python-anytree
+           python-lxml
+           python-parameterized
+           python-pygments
+           python-unittest2
+           source-highlight
+           yelp-tools))
+    (home-page "https://wiki.gnome.org/DocumentationProject/GtkDoc")
+    (synopsis "GTK+ DocBook Documentation Generator")
+    (description "GtkDoc is a tool used to extract API documentation from C-code
+like Doxygen, but handles documentation of GObject (including signals and
+properties) that makes it very suitable for GTK+ apps and libraries.  It uses
+docbook for intermediate files and can produce html by default and pdf/man-pages
+with some extra work.")
+    (license
+     (list
+      ;; Docs.
+      license:fdl1.1+
+      ;; Others.
+      license:gpl2+))))
 
 ;; This is a variant of the 'gtk-doc' package that is not updated often.  It
 ;; is intended to be used as a native-input at build-time only.  This allows
@@ -1914,11 +2300,10 @@ can also be used to document application code.")
      `(#:configure-flags
        `("--enable-animation")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      ;; Don't propagate GTK+ to reduce "profile pollution".
-     `(("gtk+" ,gtk+-2))) ; required by gtk-engines-2.pc
+     (list gtk+-2)) ; required by gtk-engines-2.pc
     (home-page "https://live.gnome.org/GnomeArt")
     (synopsis "Theming engines for GTK+ 2.x")
     (description
@@ -1945,10 +2330,9 @@ Redmond95 and ThinIce.")
        `("--enable-animation"
          "--enable-animationrtl")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "https://live.gnome.org/GnomeArt")
     (synopsis "Cairo-based theming engine for GTK+ 2.x")
     (description
@@ -1969,15 +2353,11 @@ glass artworks done by Venicians glass blowers.")
                 "0cjp6xdcnzh6kka42w9g0w2ihqjlq8yl8hjm9wsfnixk6qwgch5h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("vala" ,vala)))
+     (list intltool pkg-config vala))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("pango" ,pango)))
+     (list gobject-introspection gtk+ pango))
     (propagated-inputs
-     `(("enchant" ,enchant)))           ; gtkspell3-3.0.pc refers to it
+     (list enchant))           ; gtkspell3-3.0.pc refers to it
     (home-page "http://gtkspell.sourceforge.net")
     (synopsis "Spell-checking addon for GTK's TextView widget")
     (description
@@ -2000,12 +2380,9 @@ misspelled words in a GtkTextView widget.")
         (base32 "05xi29v2y0rvb33fmvrz7r9j4l858qj7ngwd7dp4pzpkkaybjln0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "https://github.com/CristianHenzel/ClipIt")
     (synopsis "Lightweight GTK+ clipboard manager")
     (description
@@ -2017,7 +2394,7 @@ Parcellite and adds bugfixes and features.")
 (define-public graphene
   (package
     (name "graphene")
-    (version "1.10.0")
+    (version "1.10.6")
     (source
      (origin
        (method git-fetch)
@@ -2027,21 +2404,24 @@ Parcellite and adds bugfixes and features.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14a0j1rvjlc7yhfdmhmckdmkzy4ch61qbzywdlw1xv58h23wx29p"))))
+        (base32 "0g2jjy6xizzjxlp0dr81h1f5l16dzcnhznhj6jvhpdjqcvgp98xr"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:configure-flags
        (list
-        "-Dinstalled_tests=false")))
+        "-Dinstalled_tests=false"
+        ,@(if (%current-target-system)
+              ;; Introspection requires running binaries for 'host' on 'build'.
+              '("-Dintrospection=false")
+              '()))))
     (native-inputs
-     `(("git" ,git-minimal)
+     `(("git" ,git-minimal/fixed)
        ("gobject-introspection" ,gobject-introspection)
        ("mutest" ,mutest)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("python" ,python)))
+     (list glib python))
     (synopsis "Thin layer of graphic data types")
     (description "Graphene provides graphic types and their relative API; it
 does not deal with windowing system surfaces, drawing, scene graphs, or input.")
@@ -2061,12 +2441,11 @@ does not deal with windowing system surfaces, drawing, scene graphs, or input.")
         (base32 "09rzgp7gabnzab460x874a1ibgyjiibpwzsz5srn9zs6jv2jdxjb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") ; for glib-genmarshal, etc.
+           pkg-config))
     ;; In 'Requires' of spread-sheet-widget.pc.
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (home-page "https://www.gnu.org/software/ssw/")
     (synopsis "Gtk+ widget for dealing with 2-D tabular data")
     (description
@@ -2091,12 +2470,9 @@ popular spread sheet programs.")
      `(#:configure-flags
        (list "--enable-notify")))       ; optional libnotify support
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)))
+     (list alsa-lib gtk+ libnotify))
     (home-page "http://nullwise.com/volumeicon.html")
     (synopsis "System tray volume applet")
     (description
@@ -2135,13 +2511,9 @@ independent of your desktop environment, and supports global key bindings.")
            (lambda _
              (invoke "intltoolize" "--force" "--automake"))))))
     (inputs
-     `(("gspell" ,gspell)
-       ("gtk+" ,gtk+)))
+     (list gspell gtk+))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake intltool pkg-config))
     (home-page "https://sourceforge.net/projects/yad-dialog/")
     (synopsis "GTK+ dialog boxes for shell scripts")
     (description
@@ -2165,8 +2537,8 @@ shell scripts.  Example of how to use @code{yad} can be consulted at
               (base32
                "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra"))))
    (build-system gnu-build-system)
-   (inputs `(("gtk+" ,gtk+)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list gtk+))
+   (native-inputs (list pkg-config))
    (arguments
     `(#:tests? #f                       ; no check
       #:make-flags
@@ -2272,10 +2644,8 @@ displayed on the other side of the bus.")
         (base32 "1kcp4p3s7sdh9lwniybjdarfy8z69j2j23hfrw98amhwhq39gdcc"))))
     (build-system meson-build-system)
     (arguments `(#:configure-flags (list "-Dtests=true")))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("gobject-introspection" ,gobject-introspection)))
-    (inputs `(("wayland" ,wayland)
-              ("gtk+" ,gtk+)))
+    (native-inputs (list pkg-config gobject-introspection))
+    (inputs (list wayland gtk+))
     (home-page "https://github.com/wmww/gtk-layer-shell")
     (synopsis "Library to create Wayland desktop components using the Layer
 Shell protocol")
@@ -2307,10 +2677,7 @@ popovers.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list cairo glib gtk+ python-pygobject))
     (arguments
      `(#:configure-flags '("--disable-rebuilds"
                            "--disable-static")
@@ -2349,7 +2716,8 @@ library for drawing.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-glade"
-                               "--enable-introspection")
+                               "--enable-introspection"
+                               "CFLAGS=-fcommon")
        #:phases
        (modify-phases %standard-phases
          ;; The "configure" script is present, but otherwise the project is
@@ -2359,11 +2727,14 @@ library for drawing.")
            (lambda _
              (delete-file "configure")
              #t))
-         (add-after 'unpack 'rename-type
+         (add-after 'unpack 'patch-for-compatibility
            (lambda _
              (substitute* "glade/glade-gtksheet-editor.c"
                (("GladeEditableIface") "GladeEditableInterface"))
-             #t))
+             ;; Glade 3.37 renamed the macro GWA_GET_CLASS to
+             ;; GLADE_WIDGET_ADAPTOR_GET_ADAPTOR_CLASS.
+             (substitute* "glade/glade-gtksheet-editor.c"
+               (("GWA_GET_CLASS") "GLADE_WIDGET_ADAPTOR_GET_ADAPTOR_CLASS"))))
          ;; Fix glade install directories.
          (add-before 'bootstrap 'configure-glade-directories
            (lambda* (#:key outputs #:allow-other-keys)
@@ -2376,16 +2747,9 @@ library for drawing.")
                 (string-append (assoc-ref outputs "out") "/share/pixmaps")))
              #t)))))
     (inputs
-     `(("glade" ,glade3)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)))
+     (list glade3 glib gtk+ libxml2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gobject-introspection libtool pkg-config))
     (home-page "https://fpaquet.github.io/gtksheet/")
     (synopsis "Spreadsheet widget for GTK+")
     (description "GtkSheet is a matrix widget for GTK+.  It consists of an
@@ -2417,9 +2781,9 @@ foreground and background colors, text justification and more.")
         (base32 "1qykm551bx8j8pfgxs60l2vhpi8lv4r8va69zvn2594lchh71vlb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (synopsis "Display widget for dynamic data")
     (description "GtkDatabox is a widget for live display of large amounts of
 fluctuating numerical data.  It enables data presentation (for example, on
@@ -2456,14 +2820,9 @@ user interaction (e.g.  measuring distances).")
                   (string-append pulse "/lib/libpulse.so.0")))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxfixes" ,libxfixes)
-       ("pulseaudio" ,pulseaudio)))
+     (list gtk+ libxfixes pulseaudio))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-click python-pycairo python-pygobject python-pyyaml))
     (home-page "https://buzz.github.io/volctl/")
     (synopsis "Per-application volume control and on-screen display (OSD) for graphical desktops")
     (description "Volctl is a PulseAudio-enabled tray icon volume control and
diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm
index e2c1bd432b..911cda8968 100644
--- a/gnu/packages/guile-wm.scm
+++ b/gnu/packages/guile-wm.scm
@@ -58,9 +58,7 @@
                                             "--with-guile-site-ccache-dir="
                                             (assoc-ref %outputs "out")
                                             "/lib/guile/2.2/site-ccache"))))
-      (native-inputs `(("guile" ,guile-2.2)
-                       ("pkg-config" ,pkg-config)
-                       ("texinfo" ,texinfo)))
+      (native-inputs (list guile-2.2 pkg-config texinfo))
       (inputs `(("guile" ,guile-2.2)
                 ("xcb" ,xcb-proto)))
       (home-page "https://github.com/mwitmer/guile-xcb")
@@ -174,12 +172,8 @@ dependencies.")
                                     Type=Application~%"
                              ,name ,synopsis %output))))
                #t)))))
-      (native-inputs `(("guile" ,guile-2.2)
-                       ("guile-xcb" ,guile-xcb)
-                       ("pkg-config" ,pkg-config)
-                       ("texinfo" ,texinfo)))
-      (inputs `(("guile" ,guile-2.2)
-                ("guile-xcb" ,guile-xcb)))
+      (native-inputs (list guile-2.2 guile-xcb pkg-config texinfo))
+      (inputs (list guile-2.2 guile-xcb))
       (home-page "https://github.com/mwitmer/guile-wm/releases")
       (description
        "Guile-WM is a simple window manager that's completely customizable—you
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 37add951ac..b5df887a51 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -169,17 +169,13 @@
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("guile" ,guile-3.0)
-       ("nspr" ,nspr)
-       ("nss" ,nss)))
+     (list guile-3.0 nspr nss))
     ;; FIXME the bundled csv contains one more exported procedure
     ;; (sxml->csv-string) than guile-csv. The author is maintainer of both
     ;; projects.
     ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
     (propagated-inputs
-     `(("guile-json" ,guile-json-3)
-       ("guile-readline" ,guile-readline)
-       ("guile-redis" ,guile-redis)))
+     (list guile-json-3 guile-readline guile-redis))
     (native-inputs
      `(("bash"       ,bash)         ;for the `source' builtin
        ("pkgconfig"  ,pkg-config)
@@ -276,7 +272,7 @@ more.")
           (base32 "038gwrhfywgs8372q478wn4623lhcmkknfj4p8yaa93bykfc0fml"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://github.com/joshwalters/guile-pipe")
       (synopsis "Guile pipe macros for functional chaining")
       (description
@@ -300,7 +296,7 @@ to UNIX pipes (@code{|}), Clojure's threading macros (@code{->} and
         (base32 "14wyrs3m1649l3km4pl2175dmap1372j5h8nkhykrbxg5xqp6ivd"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://git.sr.ht/~brown121407/f.scm")
     (synopsis "Library for working with files and directories")
     (description
@@ -345,12 +341,10 @@ AM_SCM_LOG_FLAGS =  --no-auto-compile -s")
                  (("tests/database.scm") ""))
                #t)))))
       (inputs
-       `(("guile" ,guile-2.0)))
+       (list guile-2.0))
       (native-inputs
-       `(("zip" ,zip) ; for tests
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)))
+       (list zip ; for tests
+             autoconf automake texinfo))
       (synopsis "Package manager for Guile")
       (description
        "Guildhall is a package manager written for Guile Scheme.  A guild is
@@ -396,9 +390,8 @@ $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
                            (string-append "\"" aspell
                                           "/lib/libaspell\"")))
                         #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)
-              ("aspell" ,aspell)))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2 aspell))
     (home-page "https://github.com/spk121/guile-aspell")
     (synopsis "Spell-checking from Guile")
     (description
@@ -506,11 +499,7 @@ and then run @command{scm example.scm}.")
                (base32
                 "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("guile" ,guile-2.2)
-                     ("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list autoconf automake guile-2.2 pkg-config texinfo))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'setenv
@@ -542,9 +531,9 @@ Note that 8sync is only available for Guile 2.2.")
                 "08gaqrgjlly9k5si72vvpbr4xhq5v52l5ma5y6a7spid5dd057cy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/alezost/guile-daemon")
     (synopsis "Evaluate code in a running Guile process")
     (description
@@ -568,12 +557,9 @@ you send to a FIFO file.")
                 "0s9zan08ala7432pn44z3vmb3sc19rf18zfr9mskydnam5xn6qlw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
+    (propagated-inputs (list guile-lib))
     (arguments
      `(#:modules (((guix build guile-build-system)
                    #:select (target-guile-effective-version))
@@ -611,7 +597,7 @@ Unix-style DSV format and RFC 4180 format.")
   (package
     (inherit guile-dsv)
     (name "guile2.2-dsv")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
 
 (define-public guile-fibers
@@ -668,10 +654,9 @@ Unix-style DSV format and RFC 4180 format.")
                         (rename-file old new)
                         #t))))))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)))
+     (list texinfo pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Lightweight concurrency facility for Guile")
     (description
      "Fibers is a Guile library that implements a a lightweight concurrency
@@ -691,7 +676,7 @@ is not available for Guile 2.0.")
   (package
     (inherit guile-fibers)
     (name "guile2.2-fibers")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-filesystem
   (package
@@ -708,12 +693,9 @@ is not available for Guile 2.0.")
                 "1shmkc0y9r2sj3kw7hrsnamnp7y8xifkhf3m3rnfxczqg63k67vy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/leoprikler/guile-filesystem")
     (synopsis "Complementary library to Guile's built-in file system procedures")
     (description "@code{guile-filesystem} provides a set of utility functions,
@@ -724,13 +706,13 @@ that augment Guile's support for handling files and their names.")
   (package
     (inherit guile-filesystem)
     (name "guile2.0-filesystem")
-    (inputs `(("guile" ,guile-2.0)))))
+    (inputs (list guile-2.0))))
 
 (define-public guile2.2-filesystem
   (package
     (inherit guile-filesystem)
     (name "guile2.2-filesystem")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-syntax-highlight
   (package
@@ -755,9 +737,9 @@ that augment Guile's support for handling files and their names.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "General-purpose syntax highlighter for GNU Guile")
     (description "Guile-syntax-highlight is a general-purpose syntax
 highlighting library for GNU Guile.  It can parse code written in various
@@ -783,17 +765,15 @@ HTML (via SXML) or any other format for rendering.")
                  (base32
                   "18zlg4mkgd3swgv2ggfz91ivnnzc0zhvc9ybgrxg1y762va9hyvj"))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ,@(package-native-inputs guile-syntax-highlight)))
+       (modify-inputs (package-native-inputs guile-syntax-highlight)
+         (prepend autoconf automake texinfo)))
       (properties '((hidden? . #t))))))
 
 (define-public guile2.2-syntax-highlight
   (package
     (inherit guile-syntax-highlight)
     (name "guile2.2-syntax-highlight")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-sjson
   (package
@@ -816,11 +796,9 @@ HTML (via SXML) or any other format for rendering.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/dustyweb/guile-sjson")
     (synopsis "S-expression based json reader/writer for Guile")
     (description "guile-sjson is a json reader/writer for Guile.
@@ -831,7 +809,7 @@ It has a nice, simple s-expression based syntax.")
   (package
     (inherit guile-sjson)
     (name "guile2.2-sjson")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-squee
   (let ((commit "c1497a216e881cfde39d6aa7c73d0bf6b497c89b")
@@ -862,9 +840,9 @@ It has a nice, simple s-expression based syntax.")
                    "\"")))
                #t)))))
       (inputs
-       `(("postgresql" ,postgresql)))
+       (list postgresql))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://notabug.org/cwebber/guile-squee")
       (synopsis "Connect to PostgreSQL using Guile")
       (description
@@ -876,9 +854,8 @@ using Guile's foreign function interface.")
   (package
     (inherit guile-squee)
     (name "guile2.2-squee")
-    (native-inputs `(("guile" ,guile-2.2)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-squee))))))
+    (native-inputs (modify-inputs (package-native-inputs guile-squee)
+                     (replace "guile" guile-2.2)))))
 
 (define-public guile-colorized
   (package
@@ -895,7 +872,7 @@ using Guile's foreign function interface.")
         (base32 "10mv8c63159r3qvwwdvsgnsvdg7nc2ghak85zapwqpv4ywrqp9zc"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/NalaGinrut/guile-colorized")
     (synopsis "Colorized REPL for Guile")
     (description
@@ -906,7 +883,7 @@ using Guile's foreign function interface.")
   (package
     (inherit guile-colorized)
     (name "guile2.2-colorized")
-    (native-inputs `(("guile" ,guile-2.2)))))
+    (native-inputs (list guile-2.2))))
 
 (define-public guile-pfds
   (package
@@ -958,7 +935,7 @@ using Guile's foreign function interface.")
                                   "sequences.sls"
                                   "sets.sls")))))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Purely functional data structures for Guile")
     (description
      "This package provides purely functional data structures written in R6RS
@@ -1000,12 +977,10 @@ Vicare Scheme and IronScheme.  Right now it contains:
                (("\\/share\\/guile\\/site") "/share/guile/site/2.0"))
              #t)))))
     (native-inputs
-     `(("procps" ,procps)               ; fake-cluster-control uses ps
-       ("guile" ,guile-2.0)
-       ("postgresql" ,postgresql)))
+     (list procps ; fake-cluster-control uses ps
+           guile-2.0 postgresql))
     (inputs
-     `(("guile" ,guile-2.0)
-       ("postgresql" ,postgresql)))
+     (list guile-2.0 postgresql))
     (home-page "https://www.nongnu.org/guile-pg/")
     (synopsis "Guile modules for accessing PostgreSQL")
     (description
@@ -1033,12 +1008,9 @@ works with Guile 1.4.x to 2.0.x.")
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)))
+     (list pkg-config autoconf automake guile-3.0))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://git.cbaines.net/guile/prometheus")
     (synopsis "Prometheus client library for Guile")
     (description
@@ -1051,7 +1023,7 @@ types are supported.")
   (package
     (inherit guile-pfds)
     (name "guile2.2-pfds")
-    (native-inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     (arguments
      (substitute-keyword-arguments (package-arguments guile-pfds)
        ((#:phases phases)
@@ -1081,7 +1053,7 @@ types are supported.")
                (base32
                 "0044c105r3q9vpl17pv3phl1b79kjm1llhkakqgiasixyav01blh"))))
     (build-system guile-build-system)
-    (native-inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     ;; https://savannah.nongnu.org/projects/guile-aa-tree
     (home-page "https://qlfiles.net/guile-aa-tree/")
     (synopsis "AA tree data structure for Guile")
@@ -1115,12 +1087,9 @@ convenient nested tree operations.")
          '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
 
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("zeromq" ,zeromq)))
+       (list autoconf automake pkg-config zeromq))
       (home-page "https://github.com/jerry40/guile-simple-zmq")
       (synopsis "Guile wrapper over ZeroMQ library")
       (description
@@ -1132,7 +1101,7 @@ messaging library.")
   (package
     (inherit guile-simple-zmq)
     (name "guile2.2-simple-zmq")
-    (native-inputs `(("guile" ,guile-2.2)))))
+    (native-inputs (list guile-2.2))))
 
 (define-public jupyter-guile-kernel
   (let ((commit "f25fb90b95529b17a006a807bd04e6aee12ea304")
@@ -1159,9 +1128,7 @@ messaging library.")
                         ;; command.
                         (substitute* "src/hmac.scm"
                           (("openssl")
-                           (string-append (assoc-ref inputs "openssl")
-                                          "/bin/openssl")))
-                        #t))
+                           (search-input-file inputs "/bin/openssl")))))
 
                     ;; XXX: The code uses 'include' to include its own source
                     ;; files, and "-L src" isn't enough in this case.
@@ -1213,10 +1180,7 @@ messaging library.")
                                               ", \"-s"))))
                           #t))))))
       (inputs
-       `(("openssl" ,openssl)
-         ("guile" ,guile-3.0)
-         ("guile-json" ,guile-json-3)
-         ("guile-simple-zmq" ,guile-simple-zmq)))
+       (list openssl guile-3.0 guile-json-3 guile-simple-zmq))
       (synopsis "Guile kernel for the Jupyter Notebook")
       (description
        "This package provides a Guile 2.x kernel for the Jupyter Notebook.  It
@@ -1237,9 +1201,9 @@ allows users to interact with the Guile REPL through Jupyter.")
              (base32 "1jf4972f9fpm0rd865xpnc9mzl3xv6vhfnp0iygadydy905z9nln"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (inputs
-    `(("guile" ,guile-3.0)))
+    (list guile-3.0))
    (home-page "https://github.com/roelj/guile-sparql")
    (synopsis "SPARQL module for Guile")
    (description "This package provides the functionality to query a SPARQL
@@ -1260,10 +1224,9 @@ using S-expressions.")
                 "1cc63nw3xdfjrfk8c58r6d5lidmfq5cpqcy32yd5xp81yccprvn9"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("guile-email" ,guile-email)))
+     (list guile-email))
     (native-inputs
-     `(("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+     (list guile-3.0 pkg-config))
     (home-page "https://savannah.gnu.org/projects/guile-debbugs/")
     (synopsis "Guile interface to the Debbugs bug tracking service")
     (description
@@ -1283,13 +1246,14 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.")
              version ".tar.lz"))
        (sha256
         (base32
-         "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))))
+         "1rc8r0fgvflnyq5ckl7ii8sghpsgpkzxa8vskjr1ak2kyar6m35k"))
+       (patches
+        (search-patches "guile-email-fix-tests.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lzip" ,lzip)))
+     (list pkg-config lzip))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
     (home-page "https://guile-email.systemreboot.net")
@@ -1318,17 +1282,14 @@ format.")
           (base32
            "1l5mikalawq83786rnb9zky908ncsd5dna9vyz6bx6kc2frrl7xv"))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo))))))
+       (list pkg-config autoconf automake texinfo)))))
 
 (define-public guile2.2-email
   (package
     (inherit guile-email)
     (name "guile2.2-email")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-email))))))
+    (inputs (modify-inputs (package-inputs guile-email)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-newt
   (package
@@ -1348,12 +1309,9 @@ format.")
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("newt" ,newt)))
+     (list guile-3.0 newt))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (synopsis "Guile bindings to Newt")
     (description
      "This package provides bindings for Newt, a programming library for
@@ -1366,8 +1324,8 @@ Scheme by using Guile’s foreign function interface.")
   (package
     (inherit guile-newt)
     (name "guile2.2-newt")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-newt))))))
+    (inputs (modify-inputs (package-inputs guile-newt)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-mastodon
   (let ((commit "74b75bcf547df92acee1e0466ecd7ec07f775392")
@@ -1386,15 +1344,9 @@ Scheme by using Guile’s foreign function interface.")
                   "1wx5h6wa9c0na8mrnr2nv1nzjvq68zyrly8yyp11dsskhaw4y33h"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("emacs" ,emacs-minimal)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake emacs-minimal pkg-config texinfo))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("gnutls" ,gnutls)
-         ("guile-json" ,guile-json-4)))
+       (list guile-3.0 gnutls guile-json-4))
       (home-page "https://framagit.org/prouby/guile-mastodon")
       (synopsis "Guile Mastodon REST API module")
       (description "This package provides Guile modules to access the
@@ -1421,14 +1373,11 @@ microblogging service.")
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("parted" ,parted)))
+     (list guile-3.0 parted))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (synopsis "Guile bindings to GNU Parted")
     (description
      "This package provides bindings for GNU Parted library, a C library
@@ -1441,8 +1390,8 @@ written in pure Scheme by using Guile's foreign function interface.")
   (package
     (inherit guile-parted)
     (name "guile2.2-parted")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-parted))))
+    (inputs (modify-inputs (package-inputs guile-parted)
+              (replace "guile" guile-2.2)))
     (propagated-inputs
      `(("guile-bytestructures" ,guile2.2-bytestructures)))))
 
@@ -1470,13 +1419,9 @@ written in pure Scheme by using Guile's foreign function interface.")
                       (or (getenv "CPATH") "")))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("xosd" ,xosd)))
+     (list guile-3.0 libx11 libxext libxinerama xosd))
     (home-page "https://github.com/alezost/guile-xosd")
     (synopsis "XOSD bindings for Guile")
     (description
@@ -1526,13 +1471,9 @@ library}.")
                     (ext (string-append out "/lib/libguile-dbi")))
                (substitute* dbi.scm (("libguile-dbi") ext))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake libtool perl texinfo))
     (propagated-inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (synopsis "Guile database abstraction layer")
     (home-page "https://github.com/opencog/guile-dbi")
     (description
@@ -1561,12 +1502,11 @@ It currently supports MySQL, Postgres and SQLite3.")
                (chdir "guile-dbd-sqlite3")))
            (delete 'patch-extension-path)))))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list sqlite zlib))
     (native-inputs
-     `(("guile-dbi" ,guile-dbi)         ; only required for headers
-       ("pkg-config" ,pkg-config)
-       ,@(package-native-inputs guile-dbi)))
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                pkg-config)))
     (synopsis "Guile DBI driver for SQLite")
     (description
      "guile-dbi is a library for Guile that provides a convenient interface to
@@ -1591,11 +1531,11 @@ SQL databases.  This package implements the interface for SQLite.")))
                  (("postgresql/libpq-fe\\.h") "libpq-fe.h"))))
            (delete 'patch-extension-path)))))
     (inputs
-     `(("postgresql" ,postgresql)
-       ("zlib" ,zlib)))
+     (list postgresql zlib))
     (native-inputs
-     `(("guile-dbi" ,guile-dbi)         ; only required for headers
-       ,@(package-native-inputs guile-dbi)))
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                )))
     (synopsis "Guile DBI driver for PostgreSQL")
     (description
      "@code{guile-dbi} is a library for Guile that provides a convenient
@@ -1623,12 +1563,12 @@ PostgreSQL.")))
                  (("<mariadb/") "<mysql/"))))
            (delete 'patch-extension-path)))))
     (inputs
-     `(("mariadb" ,mariadb "dev")
-       ("mariadb" ,mariadb "lib")
-       ("zlib" ,zlib)))
+     (list `(,mariadb "dev")
+           `(,mariadb "lib") zlib))
     (native-inputs
-     `(("guile-dbi" ,guile-dbi)         ; only required for headers
-       ,@(package-native-inputs guile-dbi)))
+     (modify-inputs (package-native-inputs guile-dbi)
+       (prepend guile-dbi ; only required for headers
+                )))
     (synopsis "Guile DBI driver for MySQL")
     (description "@code{guile-dbi} is a library for Guile that provides a
 convenient interface to SQL databases.  This package implements the interface
@@ -1650,11 +1590,8 @@ for MySQL.")
                 "09028ylbddjdp3d67zdjz3pnsjqz6zs2bfck5rr3dfaa0qjap40n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (synopsis
      "Guile application configuration parsing library.")
     (description
@@ -1673,8 +1610,8 @@ above command-line parameters.")
   (package
     (inherit guile-config)
     (name "guile2.2-config")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-config))))))
+    (inputs (modify-inputs (package-inputs guile-config)
+              (replace "guile" guile-2.2)))))
 
 (define-public guile-hall
   (package
@@ -1738,13 +1675,10 @@ above command-line parameters.")
                           ,''("hall"))
                         #t))))))))
     (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("pkg-config" ,pkg-config)
-        ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+      (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (propagated-inputs
-     `(("guile-config" ,guile-config)))
+     (list guile-config))
     (synopsis "Guile project tooling")
     (description
      "Hall is a command-line application and a set of Guile libraries that
@@ -1758,8 +1692,8 @@ provides tight coupling to Guix.")
   (package
     (inherit guile-hall)
     (name "guile2.2-hall")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-hall))))
+    (inputs (modify-inputs (package-inputs guile-hall)
+              (replace "guile" guile-2.2)))
     (propagated-inputs
      `(("guile-config" ,guile2.2-config)
        ,@(alist-delete "guile-config"
@@ -1787,6 +1721,9 @@ provides tight coupling to Guix.")
                      "GUILE_PKG([3.0 2.2 2.0])\n"))
                   #t))))
     (build-system gnu-build-system)
+    ;; XXX: Tests expect 'test-runner-current' to not return #f after
+    ;; 'test-end', which is no longer the case in Guile 3.0.7.
+    (arguments '(#:tests? #f))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -1794,8 +1731,8 @@ provides tight coupling to Guix.")
        ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-3.0) ("which" ,which)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
+    (inputs (list guile-3.0 which))
+    (propagated-inputs (list guile-lib))
     (home-page "https://github.com/artyom-poptsov/guile-ics")
     (synopsis "Guile parser library for the iCalendar format")
     (description
@@ -1809,8 +1746,8 @@ The library is shipped with documentation in Info format and usage examples.")
   (package
     (inherit guile-ics)
     (name "guile2.2-ics")
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-ics))))
+    (inputs (modify-inputs (package-inputs guile-ics)
+              (replace "guile" guile-2.2)))
     (propagated-inputs `(("guile-lib" ,guile2.2-lib)))))
 
 (define-public guile-imanifest
@@ -1830,11 +1767,9 @@ The library is shipped with documentation in Info format and usage examples.")
                   "0i5qllcrhdjhspyj7j9h4dc9y37d3cfbpackmybm3030qgfxqirf"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-readline" ,guile-readline)
-         ("guile-colorized" ,guile-colorized)
-         ("guix" ,guix)))
+       (list guile-readline guile-colorized guix))
       (home-page "https://sr.ht/~brown121407/guile-imanifest")
       (synopsis "Interactive Guix manifests")
       (description "This package provides functions to generate Guix manifests
@@ -1907,7 +1842,7 @@ user which package sets would they like to install from it.")
            (assoc-ref emacs:%standard-phases 'make-autoloads)))))
     (home-page "https://www.draketo.de/english/wisp")
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -1925,7 +1860,7 @@ users and in some situations.")
   (package
     (inherit guile-wisp)
     (name "guile2.2-wisp")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-udev
   (package
@@ -1942,16 +1877,15 @@ users and in some situations.")
                 "037md1sg7bgsa4478hz1dbsivsxzdnl5acadlrsh4ds2yxbsb5jp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gettext-minimal
+           libtool
+           texinfo
+           pkg-config
+           which))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("eudev" ,eudev)))
+     (list guile-3.0 eudev))
     (home-page "https://github.com/artyom-poptsov/guile-udev")
     (synopsis "Guile bindings to libudev")
     (description
@@ -1995,15 +1929,11 @@ users and in some situations.")
              (string-append "--with-libgslcblas-prefix="
                             (assoc-ref %build-inputs "gsl")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("guile-sdl" ,guile-sdl)
-       ("guile-opengl" ,guile-opengl)))
+     (list guile-sdl guile-opengl))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("gsl" ,gsl)
-       ("freeimage" ,freeimage)
-       ("mesa" ,mesa)))
+     (list guile-2.2 gsl freeimage mesa))
     (synopsis "2D/3D game engine for GNU Guile")
     (description "Sly is a 2D/3D game engine written in Guile Scheme.  Sly
 features a functional reactive programming interface and live coding
@@ -2042,7 +1972,7 @@ capabilities.")
          ("gtk" ,gtk+)
          ("glib" ,glib)))
       (propagated-inputs
-       `(("gobject-introspection" ,gobject-introspection)))
+       (list gobject-introspection))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -2111,12 +2041,11 @@ object-oriented programming system, GOOPS.")
                 "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("guile" ,guile-2.2)
-       ("guile-lib" ,guile-lib)))
+     (list guile-2.2 guile-lib))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (arguments
      `(#:configure-flags '("--disable-Werror")
        #:phases
@@ -2154,7 +2083,7 @@ provides access to that interface and its types from the Scheme level.")
                   "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
       (build-system guile-build-system)
       (native-inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (home-page "https://github.com/fisherdj/miniAdapton")
       (synopsis "Minimal implementation of incremental computation in Guile
 Scheme")
@@ -2191,7 +2120,7 @@ understand, extend, and port to host languages other than Scheme.")
                (when tests?
                  (invoke "guile" "-L" "." "-s" "test.scm")))))))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (home-page "https://github.com/lloda/guile-raw-strings")
       (synopsis "Guile reader extension for `raw strings'")
       (description "This package provides A Guile reader extension for `raw
@@ -2211,9 +2140,8 @@ quotes. ")
                 (base32
                  "1fyjckmygkhq22lq8nqc86yl5zzbqd7a944dnz5c1f6vx92b9hiq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkgconfig" ,pkg-config)
-                     ("gperf" ,gperf)))
-    (inputs `(("guile" ,guile-3.0)))
+    (native-inputs (list pkg-config gperf))
+    (inputs (list guile-3.0))
     (synopsis "Framework for building readers for GNU Guile")
     (description
      "Guile-Reader is a simple framework for building readers for GNU Guile.
@@ -2234,7 +2162,7 @@ many readers as needed).")
   (package
     (inherit guile-reader)
     (name "guile2.2-reader")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-ncurses
   (package
@@ -2248,9 +2176,8 @@ many readers as needed).")
               (base32
                "038xbffalhymg26lvmzgf7ljilxz2f2zmqg5r5nfzbipfbprwjhf"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
-              ("guile" ,guile-3.0)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list ncurses guile-3.0))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   ((guix build guile-build-system)
@@ -2287,8 +2214,7 @@ library.")
   (package
     (inherit guile-ncurses)
     (name "guile2.2-ncurses")
-    (inputs `(("ncurses" ,ncurses)
-              ("guile" ,guile-2.2)))))
+    (inputs (list ncurses guile-2.2))))
 
 (define-public guile-ncurses/gpm
   (package
@@ -2328,7 +2254,7 @@ $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))))))
        ("guile" ,guile-3.0)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("guile" ,guile-3.0)))           ;for cross-compilation
+     (list guile-3.0))           ;for cross-compilation
     (home-page "https://www.nongnu.org/guile-lib/")
     (synopsis "Collection of useful Guile Scheme modules")
     (description
@@ -2407,7 +2333,7 @@ for Guile\".  It provides the following modules:
                 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/ijp/minikanren")
     (synopsis "MiniKanren declarative logic system, packaged for Guile")
     (description
@@ -2426,13 +2352,13 @@ See http://minikanren.org/ for more on miniKanren generally.")
   (package
     (inherit guile-minikanren)
     (name "guile2.0-minikanren")
-    (native-inputs `(("guile" ,guile-2.0)))))
+    (native-inputs (list guile-2.0))))
 
 (define-public guile2.2-minikanren
   (package
     (inherit guile-minikanren)
     (name "guile2.2-minikanren")
-    (native-inputs `(("guile" ,guile-2.2)))))
+    (native-inputs (list guile-2.2))))
 
 (define-public guile-irregex
   (package
@@ -2465,7 +2391,7 @@ See http://minikanren.org/ for more on miniKanren generally.")
                       #t)))
        #:source-directory "src"))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "http://synthcode.com/scheme/irregex")
     (synopsis "S-expression based regular expressions")
     (description
@@ -2478,13 +2404,13 @@ inspired by the SCSH regular expression system.")
   (package
     (inherit guile-irregex)
     (name "guile2.0-irregex")
-    (native-inputs `(("guile" ,guile-2.0)))))
+    (native-inputs (list guile-2.0))))
 
 (define-public guile2.2-irregex
   (package
     (inherit guile-irregex)
     (name "guile2.2-irregex")
-    (native-inputs `(("guile" ,guile-2.2)))))
+    (native-inputs (list guile-2.2))))
 
 (define-public haunt
   (package
@@ -2539,15 +2465,13 @@ inspired by the SCSH regular expression system.")
                                          deps))))
                              #t)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list pkg-config texinfo))
     (inputs
      ;; Depend on the latest Guile to avoid bytecode compatibility issues when
      ;; using modules built against the latest version.
-     `(("guile" ,guile-3.0-latest)))
+     (list guile-3.0-latest))
     (propagated-inputs
-     `(("guile-reader" ,guile-reader)
-       ("guile-commonmark" ,guile-commonmark)))
+     (list guile-reader guile-commonmark))
     (synopsis "Functional static site generator")
     (description "Haunt is a static site generator written in Guile
 Scheme.  Haunt features a functional build system and an extensible
@@ -2559,7 +2483,7 @@ interface for reading articles in any format.")
   (package
     (inherit haunt)
     (name "guile2.2-haunt")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
      `(("guile-reader" ,guile2.2-reader)
        ("guile-commonmark" ,guile2.2-commonmark)))))
@@ -2568,7 +2492,7 @@ interface for reading articles in any format.")
   (package
     (inherit haunt)
     (name "guile2.0-haunt")
-    (inputs `(("guile" ,guile-2.0)))))
+    (inputs (list guile-2.0))))
 
 (define-public guile-redis
   (package
@@ -2588,10 +2512,7 @@ interface for reading articles in any format.")
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config guile-3.0))
     (synopsis "Redis client library for Guile")
     (description "Guile-redis provides a Scheme interface to the Redis
 key-value cache and store.")
@@ -2601,9 +2522,8 @@ key-value cache and store.")
   (package
     (inherit guile-redis)
     (name "guile2.2-redis")
-    (native-inputs `(("guile" ,guile-2.2)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-redis))))))
+    (native-inputs (modify-inputs (package-native-inputs guile-redis)
+                     (replace "guile" guile-2.2)))))
 
 (define-public guile2.0-redis
   (package
@@ -2621,9 +2541,8 @@ key-value cache and store.")
                 "(rnrs io ports)"))
              #t)))
        ,@(package-arguments guile-redis)))
-    (native-inputs `(("guile" ,guile-2.0)
-                     ,@(alist-delete "guile"
-                                     (package-native-inputs guile-redis))))))
+    (native-inputs (modify-inputs (package-native-inputs guile-redis)
+                     (replace "guile" guile-2.0)))))
 
 (define-public guile-commonmark
   (package
@@ -2660,9 +2579,9 @@ key-value cache and store.")
                (("\\(exit.*") ""))
              #t)))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "CommonMark parser for Guile")
     (description
      "guile-commonmark is a library for parsing CommonMark, a fully specified
@@ -2677,13 +2596,13 @@ is no support for parsing block and inline level HTML.")
   (package
     (inherit guile-commonmark)
     (name "guile2.2-commonmark")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile2.0-commonmark
   (package
     (inherit guile-commonmark)
     (name "guile2.0-commonmark")
-    (inputs `(("guile" ,guile-2.0)))))
+    (inputs (list guile-2.0))))
 
 (define-public mcron
   (package
@@ -2719,7 +2638,7 @@ is no support for parsing block and inline level HTML.")
                      ("tzdata" ,tzdata-for-tests)
                      ("guile-native"              ;for 'guild compile'
                       ,@(assoc-ref (package-inputs this-package) "guile"))))
-    (inputs `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (home-page "https://www.gnu.org/software/mcron/")
     (synopsis "Run jobs at scheduled times")
     (description
@@ -2733,7 +2652,7 @@ format is also supported.")
   (package
     (inherit mcron)
     (name "guile2.2-mcron")
-    (inputs `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public guile-picture-language
   (let ((commit "a1322bf11945465241ca5b742a70893f24156d12")
@@ -2752,16 +2671,11 @@ format is also supported.")
                   "03i528z92ainccgm28shg4haxiav5x4cyhyi5dggq1rm027vbm99"))))
       (build-system gnu-build-system)
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-cairo" ,guile-cairo)
-         ("guile-rsvg" ,guile-rsvg)))
+       (list guile-cairo guile-rsvg))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("librsvg" ,librsvg)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake librsvg pkg-config texinfo))
       (home-page "https://git.elephly.net/software/guile-picture-language.git")
       (synopsis "Picture language for Guile")
       (description
@@ -2775,10 +2689,9 @@ The picture values can directly be displayed in Geiser.")
   (package
     (inherit guile-picture-language)
     (name "guile2.2-picture-language")
-    (inputs `(("guile" ,guile-2.2)))
+    (inputs (list guile-2.2))
     (propagated-inputs
-     `(("guile-cairo" ,guile2.2-cairo)
-       ("guile-rsvg" ,guile2.2-rsvg)))))
+     (list guile2.2-cairo guile2.2-rsvg))))
 
 (define-public guile-studio
   (let ((commit "dd0ad42e51feafebda7cc29afe7c8bc7a182a842")
@@ -2822,25 +2735,25 @@ The picture values can directly be displayed in Geiser.")
            (delete 'configure)
            (delete 'install))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("guile-picture-language" ,guile-picture-language)
-         ("emacs" ,emacs)
-         ("emacs-f" ,emacs-f)                       ; needed by doom-modeline
-         ("emacs-memoize" ,emacs-memoize)           ; needed by all-the-icons
-         ("emacs-all-the-icons" ,emacs-all-the-icons) ; needed by doom-modeline
-         ("emacs-all-the-icons-dired" ,emacs-all-the-icons-dired)
-         ("emacs-dired-sidebar" ,emacs-dired-sidebar)
-         ("emacs-doom-modeline" ,emacs-doom-modeline)
-         ("emacs-modus-themes" ,emacs-modus-themes)
-         ("emacs-geiser" ,emacs-geiser)
-         ("emacs-geiser-guile" ,emacs-geiser-guile)
-         ("emacs-company" ,emacs-company)
-         ("emacs-ivy" ,emacs-ivy)
-         ("emacs-flycheck" ,emacs-flycheck)
-         ("emacs-flycheck-guile" ,emacs-flycheck-guile)
-         ("emacs-paren-face" ,emacs-paren-face)))
+       (list guile-3.0
+             guile-picture-language
+             emacs
+             emacs-f ; needed by doom-modeline
+             emacs-memoize ; needed by all-the-icons
+             emacs-all-the-icons ; needed by doom-modeline
+             emacs-all-the-icons-dired
+             emacs-dired-sidebar
+             emacs-doom-modeline
+             emacs-modus-themes
+             emacs-geiser
+             emacs-geiser-guile
+             emacs-company
+             emacs-ivy
+             emacs-flycheck
+             emacs-flycheck-guile
+             emacs-paren-face))
       (native-inputs
-       `(("texinfo" ,texinfo)))
+       (list texinfo))
       (home-page "https://gnu.org/software/guile")
       (synopsis "IDE for Guile")
       (description
@@ -2875,11 +2788,9 @@ completion, a simple mode line, etc.")
              (delete-file "parser/stis-parser/lang/.#calc.scm")
              #t)))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://gitlab.com/tampe/stis-parser")
     (synopsis "Parser combinator framework")
     (description
@@ -2912,7 +2823,7 @@ chunks can be expressions as well as simple tokens.")
                (("/usr/local/lib/guile")
                 (string-append (assoc-ref outputs "out") "/lib/guile"))
                (("/usr/local/include/guile")
-                (string-append (assoc-ref inputs "guile") "/include/guile"))
+                (search-input-directory inputs "/include/guile"))
                (("-L/usr/local/lib")
                 (string-append "-L" (assoc-ref inputs "guile") "/lib")))
              #t))
@@ -2924,12 +2835,9 @@ chunks can be expressions as well as simple tokens.")
                   (format #f "\"~a/lib/guile/3.0/extensions/libguile-persist\"" out)))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://gitlab.com/tampe/guile-persist")
     (synopsis "Persistence programming framework for Guile")
     (description
@@ -2993,15 +2901,9 @@ serializing continuations or delimited continuations.")
                    (,compiled-path)))
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("guile-persist" ,guile-persist)
-       ("guile-readline" ,guile-readline)
-       ("guile-stis-parser" ,guile-stis-parser)))
+     (list guile-3.0 guile-persist guile-readline guile-stis-parser))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Python implementation in Guile")
     (description
      "This package allows you to compile a Guile Python file to any target
@@ -3031,9 +2933,9 @@ from @code{tree-il}.")
                 "guilemoddir = $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
              #t)))))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.com/brandoninvergo/guile-file-names")
     (synopsis "Manipulate file names")
     (description
@@ -3114,7 +3016,7 @@ list of components.  This module takes care of that for you.")
        ("gtk+" ,gtk+)
        ("guile-lib" ,guile-lib)
        ("webkitgtk" ,webkitgtk)))
-    (inputs `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (home-page "https://github.com/spk121/guile-gi")
     (synopsis "GObject bindings for Guile")
     (description
@@ -3128,8 +3030,8 @@ pre-alpha code.")
     (inherit guile-gi)
     (name "guile2.2-gi")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-gi))))))
+     (modify-inputs (package-inputs guile-gi)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-srfi-89
   (package
@@ -3147,7 +3049,7 @@ pre-alpha code.")
        (file-name (git-file-name name version))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/mjbecze/guile-srfi-89")
     (synopsis "Hygienic implementation of SRFI-89 for Guile")
     (description
@@ -3171,7 +3073,7 @@ parameters, which  define* and lambda* special forms")
        (file-name (git-file-name name version))))
     (build-system guile-build-system)
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/mjbecze/guile-srfi-145")
     (synopsis "SRFI-145 port for Guile")
     (description
@@ -3195,11 +3097,9 @@ denote the invalidity of certain code paths in a Scheme program.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/samplet/guile-srfi-158")
     (synopsis "SRFI 158 (Generators and Accumulators) for Guile")
     (description "This package provides an implementation of SRFI 158
@@ -3230,7 +3130,7 @@ implementation in a thin Guile compatibility layer.")
        ;; should not be compiled separately, but they must be installed.
        '(#:not-compiled-file-regexp "-impl\\.scm$"))
       (inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (synopsis "Formatting combinators for Guile")
       (description
        "The @code{(srfi-159)} module and its sub-modules implement the
@@ -3267,9 +3167,9 @@ more expressive and flexible than the traditional @code{format} procedure.")
       (arguments
        '(#:not-compiled-file-regexp "body\\.scm$"))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-srfi-145" ,guile-srfi-145)))
+       (list guile-srfi-145))
       (home-page "https://srfi.schemers.org/srfi-180/")
       (synopsis "JSON parser and printer for Guile")
       (description
@@ -3318,14 +3218,14 @@ API.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-generic-epsf)))))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-epsf)))))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("guile" ,guile-3.0)
-       ("guile-lib" ,guile-lib)
-       ("guile-readline" ,guile-readline)
-       ("freeglut" ,freeglut)
-       ("webkitgtk" ,webkitgtk)))
+     (list dbus-glib
+           guile-3.0
+           guile-lib
+           guile-readline
+           freeglut
+           webkitgtk))
     (propagated-inputs
      `(("glib-networking" ,glib-networking)
        ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)))
@@ -3437,10 +3337,7 @@ in C using Gtk+-3 and WebKitGtk.")
                     #t))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("guile" ,guile-2.2)))
+       (list autoconf automake pkg-config guile-2.2))
       (synopsis "JPEG file parsing library for Guile")
       (description
        "Guile-JPEG is a Scheme library to parse JPEG image files and to
@@ -3598,11 +3495,9 @@ feature-set, fully programmable in Guile Scheme.")
                      (string-append (assoc-ref inputs "vigra-c") "/lib"))
              #t)))))
     (inputs
-     `(("vigra" ,vigra)
-       ("vigra-c" ,vigra-c)
-       ("guile" ,guile-2.2)))
+     (list vigra vigra-c guile-2.2))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-booktabs
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-booktabs
                                         texlive-lm
                                         texlive-siunitx
                                         texlive-standalone
@@ -3652,8 +3547,7 @@ clean and easy to use high level API.")
                (invoke "guile" "-L" "mod"
                        "-s" "test/test-ffi-fftw.scm"))))))
       (inputs
-       `(("fftw" ,fftw)
-         ("guile" ,guile-2.2)))
+       (list fftw guile-2.2))
       (home-page "https://github.com/lloda/guile-ffi-fftw/")
       (synopsis "Access FFTW through Guile's FFI")
       (description "This is a minimal set of Guile FFI bindings for the FFTW
@@ -3681,9 +3575,9 @@ anything other than straight complex DFTs.")
        (modify-phases %standard-phases
          (delete 'build))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (home-page "https://ngyro.com/software/srfi-64-driver.html")
     (synopsis "Automake test driver for SRFI 64 test suites")
     (description "This package provides an Automake test driver that can
@@ -3704,9 +3598,9 @@ tests being run, resulting clearer and more specific output.")
                 "109p4n39ln44cxvwdccf9kgb96qx54makvd2ir521ssz6wchjyag"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://ngyro.com/software/guile-semver.html")
     (synopsis "Semantic Versioning (SemVer) for Guile")
     (description "This Guile library provides tools for reading,
@@ -3719,7 +3613,7 @@ the style of the Node Package Manager (NPM).")
     (inherit guile-semver)
     (name "guile2.2-semver")
     (inputs
-     `(("guile" ,guile-2.2)))))
+     (list guile-2.2))))
 
 (define-public guile-hashing
   (package
@@ -3764,7 +3658,7 @@ the style of the Node Package Manager (NPM).")
                       (rename-file "private" "hashing/private")
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Cryprographic hash functions implemented in Scheme")
     (description
      "The @code{(hashing @dots{})} modules implement cryptographic hash
@@ -3777,7 +3671,7 @@ SHA-512).")
     (inherit guile-hashing)
     (name "guile2.2-hashing")
     (native-inputs
-     `(("guile" ,guile-2.2)))))
+     (list guile-2.2))))
 
 (define-public guile-packrat
   (package
@@ -3806,7 +3700,7 @@ SHA-512).")
                          (object->string '(only (guile) error))))
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "Packrat parser library in R6RS Scheme")
     (description
      "This is an R6RS Scheme adaptation of the
@@ -3866,9 +3760,9 @@ and space linear in the size of the input text.")
 
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-packrat" ,guile-packrat)))
+     (list guile-packrat))
     (synopsis "D-Bus protocol implementation in R6RS Scheme")
     (description
      "AC/D-Bus is an implementation of the D-Bus wire protocol.  D-Bus is an
@@ -3904,15 +3798,11 @@ gnome-keyring, and many more.")
                     #t))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake pkg-config texinfo))
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (propagated-inputs
-       `(("guile-irregex" ,guile-irregex)
-         ("guile-gcrypt" ,guile-gcrypt)))
+       (list guile-irregex guile-gcrypt))
       (home-page "https://notabug.org/cwebber/guile-webutils")
       (synopsis "Web application authoring utilities for Guile")
       (description
@@ -3925,10 +3815,9 @@ as signed sessions, multipart message support, etc.")
     (inherit guile-webutils)
     (name "guile2.2-webutils")
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (propagated-inputs
-     `(("guile-irregex" ,guile2.2-irregex)
-       ("guile-gcrypt" ,guile2.2-gcrypt)))))
+     (list guile2.2-irregex guile2.2-gcrypt))))
 
 (define-public guile-lens
   (let ((commit "14b15d07255f9d3f55d40a3b750d13c9ee3a154f")
@@ -3954,12 +3843,12 @@ as signed sessions, multipart message support, etc.")
                (setenv "HOME" "/tmp")   ; for ~/.hall
                (invoke "hall" "dist" "-x"))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("guile" ,guile-3.0)
-         ("guile-hall" ,guile-hall)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf
+             automake
+             guile-3.0
+             guile-hall
+             pkg-config
+             texinfo))
       (home-page "https://gitlab.com/a-sassmannshausen/guile-lens.git")
       (synopsis "Composable lenses for data structures in Guile")
       (description
@@ -3974,8 +3863,8 @@ over, or update a value in arbitrary data structures.")
     (inherit guile-lens)
     (name "guile2.2-lens")
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-native-inputs guile-lens))))))
+     (modify-inputs (package-native-inputs guile-lens)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-xapian
   (package
@@ -3990,21 +3879,26 @@ over, or update a value in arbitrary data structures.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16k61f1jn3g48jaf3730b9l0izr5j933jzyri73nmcnjd09gm35i"))))
+         "16k61f1jn3g48jaf3730b9l0izr5j933jzyri73nmcnjd09gm35i"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Guile >= 3.0.7 no longer uses libltdl so we need to explicitly add
+        ;; ".libs" so that 'load-extension' finds the '.so' file.
+        '(substitute* "pre-inst-env.in"
+           (("^LD_LIBRARY_PATH=.*$")
+            "LD_LIBRARY_PATH=\"$abs_top_builddir/.libs\"\n")))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) ; to prevent guild warnings
     (inputs
-     `(("guile" ,guile-3.0)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list guile-3.0 xapian zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list autoconf
+           autoconf-archive
+           automake
+           libtool
+           pkg-config
+           swig))
     (synopsis "Guile bindings for Xapian")
     (description "@code{guile-xapian} provides Guile bindings for Xapian, a
 search engine library.  Xapian is a highly adaptable toolkit which allows
@@ -4018,8 +3912,8 @@ models and also supports a rich set of boolean query operators.")
     (inherit guile-xapian)
     (name "guile2.2-xapian")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-xapian))))))
+     (modify-inputs (package-inputs guile-xapian)
+       (replace "guile" guile-2.2)))))
 
 (define-public guile-torrent
   (package
@@ -4036,14 +3930,14 @@ models and also supports a rich set of boolean query operators.")
                       "1yiagi55ncq1x7s9n7salzywjm4l96y3n7y3s47a9anvz87mrmim"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-2.2)
-       ("texinfo" ,texinfo)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           guile-2.2
+           texinfo
+           perl
+           pkg-config))
     (propagated-inputs
-     `(("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-gcrypt))
     (home-page "https://github.com/o-nly/torrent")
     (synopsis "Torrent library for GNU Guile")
     (description "This package provides facilities for working with
@@ -4070,12 +3964,9 @@ according to Bitorrent BEP003.")
       (arguments
        `(#:configure-flags '("--enable-gnutls=yes")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake texinfo))
       (inputs
-       `(("gnutls" ,gnutls)
-         ("guile" ,guile-3.0)))
+       (list gnutls guile-3.0))
       (home-page "https://github.com/rekado/guile-irc")
       (synopsis "IRC library for Guile")
       (description "This package provides a Guile library for @dfn{Internet
@@ -4104,11 +3995,9 @@ Relay Chat} (IRC).")
        '(#:make-flags
          '("GUILE_AUTO_COMPILE=0")))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (synopsis "Websocket server/client for Guile")
       (description "Guile-websocket provides an implementation of the
 WebSocket protocol as defined by RFC 6455.")
@@ -4133,12 +4022,9 @@ WebSocket protocol as defined by RFC 6455.")
     (arguments
      `(#:tests? #f)); tests require network
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf pkg-config texinfo))
     (home-page "https://framagit.org/tyreunom/guile-rdf")
     (synopsis "Guile implementation of the RDF abstract and concrete syntaxes")
     (description "Guile RDF is an implementation of the RDF (Resource Description
@@ -4174,12 +4060,9 @@ manipulating graphs and datasets.")
        ("guile-json" ,guile-json-4)
        ("guile-rdf" ,guile-rdf)))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list automake autoconf pkg-config texinfo))
     (home-page "https://framagit.org/tyreunom/guile-jsonld")
     (synopsis "Guile implementation of the JsonLD API specification")
     (description "Guile JsonLD is an implementation of the JsonLD (Json for
@@ -4225,7 +4108,7 @@ more objects or strings, represented by a Json object or an IRI.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/weinholt/struct-pack")
     (synopsis "R6RS library for working with packed byte structures")
     (description
@@ -4269,9 +4152,9 @@ similar to struct in Python or pack and unpack in Perl.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-struct-pack" ,guile-struct-pack)))
+     (list guile-struct-pack))
     (home-page "https://github.com/weinholt/machine-code")
     (synopsis "Tools that relate to machine code and object formats")
     (description
@@ -4317,7 +4200,7 @@ object formats and related areas.")
                                 files)
                       #t)))))
     (native-inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/weinholt/laesare")
     (synopsis "R6RS Scheme library that provides a reader")
     (description
@@ -4371,14 +4254,9 @@ errors.")
                           out (target-guile-effective-version))))
                #t))))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("avahi" ,avahi)))
+       (list guile-3.0 avahi))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("texinfo" ,texinfo)))
+       (list autoconf automake libtool pkg-config texinfo))
       (synopsis "Guile bindings to Avahi")
       (description
        "This package provides bindings for Avahi.  It allows programmers to
@@ -4404,13 +4282,11 @@ Discovery (DNS-SD).")
          "1p8sapiv5im18rjnzc8xnw6y7dr661rycf9g10z5ww0dl4rfz3z1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (propagated-inputs
-     `(("guile-json" ,guile-json-4)))
+     (list guile-json-4))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://github.com/aconchillo/guile-jwt")
     (synopsis "JSON Web Token library for Guile")
     (description
@@ -4435,12 +4311,9 @@ JWT.  Supported algorithms: HS256, HS384, HS512.")
     (build-system gnu-build-system)
     (arguments `())
     (native-inputs
-      `(("autoconf" ,autoconf)
-        ("automake" ,automake)
-        ("pkg-config" ,pkg-config)
-        ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
-    (propagated-inputs `(("libsodium" ,libsodium)))
+      (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
+    (propagated-inputs (list libsodium))
     (synopsis "Guile bindings to the libsodium cryptographic library")
     (description
      "This package provides Guile bindings to the libsodium cryptographic library
@@ -4464,15 +4337,15 @@ tools.")
     (build-system gnu-build-system)
     (arguments '())
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ;; test dependency
-       ("guile-srfi-180" ,guile-srfi-180)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf
+           automake
+           pkg-config
+           texinfo
+           ;; test dependency
+           guile-srfi-180))
+    (inputs (list guile-3.0))
     (propagated-inputs
-     `(("guile-sodium" ,guile-sodium)))
+     (list guile-sodium))
     (synopsis "Guile implementation of the Encoding for Robust Immutable Storage (ERIS)")
     (description
      "Guile-ERIS is the reference implementation of the Encoding for Robust
@@ -4500,7 +4373,7 @@ read-capability.")
     (arguments
      `(#:compile-flags '("--r6rs")))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://gitlab.com/joolean/r6rs-protobuf/")
     (synopsis "Scheme implementation of Protocol Buffers")
     (description
@@ -4531,18 +4404,18 @@ including parsing and code generation.")
              (delete-file-recursively "docs")
              #t))
          (add-after 'install 'install-info-documentation
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((share (string-append (assoc-ref outputs "out") "/share"))
                     (doc (string-append share "/doc/" ,name "-" ,version))
                     (info (string-append share "/info/"))
-                    (makeinfo (string-append (assoc-ref %build-inputs "texinfo")
-                                             "/bin/makeinfo")))
+                    (makeinfo (search-input-file inputs
+                                                 "/bin/makeinfo")))
                (invoke makeinfo "guile-shapefile.texi" "-o" info)
                #t))))))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (home-page "https://github.com/HugoNikanor/guile-shapefile")
     (synopsis "Parse shapefiles in Guile")
     (description
@@ -4565,16 +4438,11 @@ including parsing and code generation.")
          "1m2x62n3x5hi5vnsvv2zgqhgpzrfq7r5095fzzjd1aaybi9i9igg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("sed" ,sed)))
+     (list autoconf automake pkg-config texinfo sed))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)
-       ("nyacc" ,nyacc)))
+     (list guile-bytestructures nyacc))
     (home-page "https://git.elephly.net/software/guile-drmaa.git")
     (synopsis "Guile bindings to DRMAA")
     (description "This project provides Guile bindings to the DRMAA library
@@ -4625,11 +4493,9 @@ schedulers.")
              (assoc-ref guile:%standard-phases 'build))
            (delete 'install))))
       (inputs
-       `(("guile" ,guile-3.0)
-         ("libyaml" ,libyaml)))
+       (list guile-3.0 libyaml))
       (propagated-inputs
-       `(("guile-bytestructures" ,guile-bytestructures)
-         ("nyacc" ,nyacc)))
+       (list guile-bytestructures nyacc))
       (home-page "https://github.com/mwette/guile-libyaml")
       (synopsis "Guile wrapper for libyaml")
       (description
@@ -4655,9 +4521,9 @@ ffi-helper from nyacc.")
       (build-system cmake-build-system)
       (arguments `(#:tests? #f))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("guile" ,guile-2.2)))
+       (list guile-2.2))
       (home-page "https://github.com/arximboldi/schmutz")
       (synopsis "Bind C++ code to Scheme")
       (description "Schmutz is a header-only library to declare Scheme bindings
@@ -4680,11 +4546,8 @@ or @code{LuaBind} but for Scheme.")
     (build-system gnu-build-system)
     (arguments `())
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)))
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
     (synopsis "Guile implementation of CBOR")
     (description
      "The Concise Binary Object Representation (CBOR), as specified by RFC 8949, is
@@ -4708,9 +4571,9 @@ a Guile implementation of CBOR.")
                 "03mwi1l3354x52nar0zwhcm0x29yai9xjln4p4gbchwvx5dsr6fb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://ngyro.com/software/guile-quickcheck.html")
     (synopsis "Randomized property-based testing for Guile")
     (description "Guile-Quickcheck is a library for random testing of program
@@ -4735,7 +4598,7 @@ in a large number of randomly generated test cases.")
          "118d84p443w7hrslv8hjyhgws631ia08mggiyklkmk0b9plfdsvz"))))
     (build-system guile-build-system)
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (home-page "https://notabug.org/ZelphirKaltstahl/guile-fslib")
     (synopsis "Helper functions for working with locations in file systems")
     (description
@@ -4759,13 +4622,13 @@ locations.")
          "0jcl6mzqy04if5drflmygmggbgzsxa42mlmskqb3cfqmksq0zj0y"))))
     (build-system gnu-build-system)
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)                    ;for 'guild compile' + guile.m4
-       ("texinfo" ,texinfo)))
+     (list automake
+           autoconf
+           pkg-config
+           guile-3.0 ;for 'guild compile' + guile.m4
+           texinfo))
     (home-page "https://git.lepiller.eu/guile-netlink")
     (synopsis "Netlink protocol implementation for Guile")
     (description "Guile Netlink is a GNU Guile library providing an implementation
@@ -4824,10 +4687,7 @@ high-level API for network management that uses rtnetlink.")
                     ,(string-append json go)
                     ,(string-append tls go))))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
      `(("bash" ,bash-minimal)
        ("guile" ,guile-2.2)
@@ -4903,10 +4763,7 @@ GitLab instance.")
                     ,(string-append guile-lib go)))))
              #t)))))
     (native-inputs
-     `(("autoconf"   ,autoconf)
-       ("automake"   ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo"    ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
      `(("bash"      ,bash-minimal)
        ("guile"     ,guile-3.0)
@@ -4947,16 +4804,13 @@ with a FSM is being built (for example, from a Makefile.)")
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ;to prevent guild warnings
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
      `(("bash" ,bash-minimal)
        ("guile" ,guile-3.0)
        ("guile-lib" ,guile-lib)))
     (propagated-inputs
-     `(("guile-smc" ,guile-smc)))
+     (list guile-smc))
     (home-page "https://github.com/artyom-poptsov/guile-ini")
     (synopsis "Guile library for INI format support")
     (description
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 2108b9f9d3..28887dd69f 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 Taylan Kammer <taylan.kammer@gmail.com>
 ;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,9 +63,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system guile)
   #:use-module (guix deprecation)
-  #:use-module (guix utils)
-  #:use-module (ice-9 match)
-  #:use-module ((srfi srfi-1) #:prefix srfi-1:))
+  #:use-module (guix utils))
 
 ;;; Commentary:
 ;;;
@@ -85,7 +84,12 @@
               "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
             (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
    (build-system gnu-build-system)
-   (arguments '(#:configure-flags '("--disable-error-on-warning")
+   (arguments '(#:configure-flags '("--disable-error-on-warning"
+
+                                    ;; Build with '-O1' to work around GC
+                                    ;; crash on x86_64:
+                                    ;; <https://issues.guix.gnu.org/50427>.
+                                    "CFLAGS=-O1 -g -Wall")
 
                 ;; Insert a phase before `configure' to patch things up.
                 #:phases
@@ -104,21 +108,24 @@
 
                       ;; The usual /bin/sh...
                       (substitute* "ice-9/popen.scm"
-                        (("/bin/sh") (which "sh")))
-                      #t)))))
+                        (("/bin/sh") (which "sh"))))))
+
+                ;; XXX: Several numerical tests and tests related to
+                ;; 'inet-pton' fail on glibc 2.33/GCC 10.  Disable them.
+                ;; TODO: Remove this package when its dependents no longer
+                ;; need it.
+                #:tests? #f))
 
    ;; When cross-compiling, a native version of Guile itself is needed.
    (native-inputs (if (%current-target-system)
                       `(("self" ,this-package))
                       '()))
 
-   (inputs `(("gawk" ,gawk)
-             ("readline" ,readline)))
+   (inputs (list gawk readline))
 
    ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
    ;; propagated.
-   (propagated-inputs `(("gmp" ,gmp)
-                        ("libltdl" ,libltdl)))
+   (propagated-inputs (list gmp libltdl))
 
    (native-search-paths
     (list (search-path-specification
@@ -180,6 +187,11 @@ without requiring the source code to be rewritten.")
 
    (arguments
     `(#:configure-flags '("--disable-static") ; saves 3 MiB
+
+      ;; Work around non-reproducible .go files as described in
+      ;; <https://bugs.gnu.org/20272>, which affects 2.0, 2.2, and 3.0 so far.
+      #:parallel-build? #f
+
       #:phases
       (modify-phases %standard-phases
         ,@(if (hurd-system?)
@@ -246,7 +258,8 @@ without requiring the source code to be rewritten.")
                 "013mydzhfswqci6xmyc1ajzd59pfbdak15i0b090nhr9bzm7dxyd"))
               (modules '((guix build utils)))
               (patches (search-patches
-                        "guile-2.2-skip-oom-test.patch"))
+                        "guile-2.2-skip-oom-test.patch"
+                        "guile-2.2-skip-so-test.patch"))
 
               ;; Remove the pre-built object files.  Instead, build everything
               ;; from source, at the expense of significantly longer build
@@ -255,6 +268,13 @@ without requiring the source code to be rewritten.")
                           (for-each delete-file
                                     (find-files "prebuilt" "\\.go$"))
                           #t))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-2.0)
+       ((#:configure-flags flags ''())
+        (if (target-x86-32?)            ;<https://issues.guix.gnu.org/49368>
+            `(append ,flags '("CFLAGS=-g -O2 -fexcess-precision=standard"))
+            flags))))
+
     (properties '((timeout . 72000)               ;20 hours
                   (max-silent-time . 36000)))     ;10 hours (needed on ARM
                                                   ;  when heavily loaded)
@@ -285,21 +305,75 @@ without requiring the source code to be rewritten.")
   (package
     (inherit guile-2.2)
     (name "guile")
-    (version "3.0.2")
+    (version "3.0.7")
     (source (origin
               (inherit (package-source guile-2.2))
+              (patches '())     ; We no longer need the patches.
               (uri (string-append "mirror://gnu/guile/guile-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "12lziar4j27j9whqp2n18427q45y9ghq7gdd8lqhmj1k0lr7vi2k"))))
+                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))
+              ;; Replace the snippet because the oom-test still
+              ;; fails on some 32-bit architectures.
+              (snippet '(begin
+                          (substitute* "test-suite/standalone/Makefile.in"
+                            (("test-out-of-memory") ""))
+                          (for-each delete-file
+                                    (find-files "prebuilt" "\\.go$"))))))
+
+    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
+    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs guile-2.2)
+       (delete "gmp" "libltdl")))
     (arguments
-     ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
-     (if (hurd-target?)
-         (substitute-keyword-arguments (package-arguments guile-2.2)
-           ((#:configure-flags flags ''())
-            `(cons "--disable-jit" ,flags)))
-         (package-arguments guile-2.2)))
+     (substitute-keyword-arguments (package-arguments guile-2.0)
+       ((#:configure-flags flags ''())
+        ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
+        `(cons* ,@(if (hurd-target?)
+                      '("--disable-jit")
+                      '())
+                ;; -fexcess-precision=standard is required when compiling for
+                ;; i686-linux, otherwise "numbers.test" will fail
+                ;; (see <https://issues.guix.gnu.org/49368> and
+                ;; <https://issues.guix.gnu.org/49659>).
+                ;; TODO: Keep this in GUILE-2.2 and remove from here on next
+                ;; rebuild cycle.
+                ,@(if (target-x86-32?)
+                      '("CFLAGS=-g -O2 -fexcess-precision=standard")
+                      '())
+                "--enable-mini-gmp"
+                ,flags))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'check 'disable-stack-overflow-test
+             (lambda _
+               ;; This test can invoke the "OOM killer", especially when
+               ;; running on emulated hardware (QEMU).  Skip it.
+               (substitute* "test-suite/standalone/test-stack-overflow"
+                 (("!#")
+                  "!#\n(exit 77)\n"))))
+
+           ,@(if (string-prefix? "powerpc-" (%current-system))
+                 `((add-after 'unpack 'adjust-bootstrap-flags
+                     (lambda _
+                       ;; Upstream knows about suggested solution.
+                       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45214
+                       (substitute* "bootstrap/Makefile.in"
+                         (("^GUILE_OPTIMIZATIONS.*")
+                          "GUILE_OPTIMIZATIONS = -O1 -Oresolve-primitives -Ocps\n")))))
+                 '())
+           ,@(if (or (target-ppc32?)
+                     (target-riscv64?))
+               `((add-after 'unpack 'skip-failing-fdes-test
+                   (lambda _
+                     ;; ERROR: ((system-error "seek" "~A" ("Bad file descriptor") (9)))
+                     (substitute* "test-suite/tests/ports.test"
+                       (("fdes not closed\"" all) (string-append all "(exit 77)")))
+                     #t)))
+               '())))))
+
     (native-search-paths
      (list (search-path-specification
             (variable "GUILE_LOAD_PATH")
@@ -310,31 +384,7 @@ without requiring the source code to be rewritten.")
                      "share/guile/site/3.0")))))))
 
 (define-public guile-3.0-latest
-  ;; TODO: Make this 'guile-3.0' on the next rebuild cycle.
-  (package
-    (inherit guile-3.0)
-    (version "3.0.7")
-    (source (origin
-              (inherit (package-source guile-3.0)) ;preserve snippet
-              (patches '())
-              (uri (string-append "mirror://gnu/guile/guile-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))))
-
-    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
-    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.  Use
-    ;; LIBGC/DISABLE-MUNMAP to work around <https://bugs.gnu.org/40525>.
-    ;; Remove libltdl, which is no longer used.
-    (propagated-inputs
-     `(("bdw-gc" ,libgc/disable-munmap)
-       ,@(srfi-1:fold srfi-1:alist-delete (package-propagated-inputs guile-3.0)
-                      '("gmp" "libltdl" "bdw-gc"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments guile-3.0)
-       ((#:configure-flags flags ''())
-        `(cons "--enable-mini-gmp" ,flags))))))
+  guile-3.0)
 
 (define-public guile-3.0/libgc-7
   ;; Using libgc-7 avoid crashes that can occur, particularly when loading
@@ -344,8 +394,8 @@ without requiring the source code to be rewritten.")
    (package
      (inherit guile-3.0-latest)
      (propagated-inputs
-      `(("bdw-gc" ,libgc-7)
-        ,@(srfi-1:alist-delete "bdw-gc" (package-propagated-inputs guile-3.0)))))))
+      (modify-inputs (package-propagated-inputs guile-3.0)
+        (replace "bdw-gc" libgc-7))))))
 
 (define-public guile-3.0/fixed
   ;; A package of Guile that's rarely changed.  It is the one used in the
@@ -386,14 +436,14 @@ without requiring the source code to be rewritten.")
                  (delete-file "test-suite/tests/version.test")
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("gettext" ,gnu-gettext)
-         ("texinfo" ,texinfo)
-         ("gperf" ,gperf)
-         ,@(package-native-inputs guile-3.0)))
+       (modify-inputs (package-native-inputs guile-3.0)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  gnu-gettext
+                  texinfo
+                  gperf)))
       (synopsis "Development version of GNU Guile"))))
 
 (define* (make-guile-readline guile #:optional (name "guile-readline"))
@@ -403,7 +453,8 @@ without requiring the source code to be rewritten.")
     (source (package-source guile))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-silent-rules")
+     '(#:configure-flags '("--disable-silent-rules"
+                           "--enable-mini-gmp")   ;for Guile >= 3.0.6
        #:phases (modify-phases %standard-phases
                   (add-before 'build 'chdir
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -512,18 +563,18 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
                  ;; FAIL: test-out-of-memory
                  (substitute* "test-suite/standalone/Makefile.am"
                    (("(check_SCRIPTS|TESTS) \\+= test-out-of-memory") ""))
-                 
+
                  (patch-shebang "build-aux/git-version-gen")
                  (invoke "sh" "autogen.sh")
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("texinfo" ,texinfo)
-         ("gettext" ,gettext-minimal)
-         ,@(package-native-inputs guile-2.2))))))
+       (modify-inputs (package-native-inputs guile-2.2)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  texinfo
+                  gettext-minimal))))))
 
 
 ;;;
@@ -545,9 +596,8 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))   ;to prevent guild warnings
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-2.2)))
-    (inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list pkg-config guile-2.2))
+    (inputs (list guile-2.2))
     (synopsis "JSON module for Guile")
     (description
      "Guile-JSON supports parsing and building JSON documents according to the
@@ -585,9 +635,8 @@ specification.  These are the main features:
               (sha256
                (base32
                 "0nj0684qgh6ppkbdyxqfyjwsv2qbyairxpi8fzrhsi3xnc7jn4im"))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-3.0)))
-    (inputs `(("guile" ,guile-3.0)))))
+    (native-inputs (list pkg-config guile-3.0))
+    (inputs (list guile-3.0))))
 
 (define-public guile-json-4
   (package
@@ -643,10 +692,8 @@ specification.  These are the main features:
                          (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
                                  (assoc-ref inputs "gdbm"))))
                       #t)))))
-    (native-inputs
-     `(("guile" ,guile-3.0)))
-    (inputs
-     `(("gdbm" ,gdbm)))
+    (native-inputs (list guile-3.0))
+    (inputs (list gdbm))
     (home-page "https://github.com/ijp/guile-gdbm")
     (synopsis "Guile bindings to the GDBM library via Guile's FFI")
     (description
@@ -675,14 +722,8 @@ Guile's foreign function interface.")
                 "1nryy9j3bk34i0alkmc9bmqsm0ayz92k1cdf752mvhyjjn8nr928"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("sqlite" ,sqlite)))
+    (native-inputs (list autoconf automake guile-3.0 pkg-config))
+    (inputs (list guile-3.0 sqlite))
     (synopsis "Access SQLite databases from Guile")
     (description
      "This package provides Guile bindings to the SQLite database system.")
@@ -720,13 +761,8 @@ Guile's foreign function interface.")
                              (doc (string-append out "/share/doc/" package)))
                         (install-file "README.md" doc)
                         #t))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0))
     (synopsis "Structured access to bytevector contents for Guile")
     (description
      "Guile bytestructures offers a system imitating the type system
@@ -756,22 +792,18 @@ type system, elevating types to first-class status.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "11a51acibwi2hpaygmrpn6nwbr4lqalc87ihrgj3mhz6swbsk9n7"))))
+                "11a51acibwi2hpaygmrpn6nwbr4lqalc87ihrgj3mhz6swbsk9n7"))
+              (patches (search-patches
+                        "guile-git-adjust-for-libgit2-1.2.0.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ; to prevent guild warnings
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)
-       ("guile-bytestructures" ,guile-bytestructures)))
+     (list pkg-config autoconf automake texinfo guile-3.0 guile-bytestructures))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgit2" ,libgit2)))
+     (list guile-3.0 libgit2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "Guile bindings for libgit2")
     (description
      "This package provides Guile bindings to libgit2, a library to
@@ -806,16 +838,8 @@ manipulate repositories of the Git version control system.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("zlib" ,zlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 zlib))
     (synopsis "Guile bindings to zlib")
     (description
      "This package provides Guile bindings for zlib, a lossless
@@ -845,16 +869,8 @@ Guile's foreign function interface.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("lzlib" ,lzlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 lzlib))
     (synopsis "Guile bindings to lzlib")
     (description
      "This package provides Guile bindings for lzlib, a C library for
@@ -880,14 +896,8 @@ pure Scheme by using Guile's foreign function interface.")
                (base32
                 "1c8l7829b5yx8wdc0mrhzjfwb6h9hb7cd8dfxcr71a7vlsi86310"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("zstd" ,zstd "lib")
-       ("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list `(,zstd "lib") guile-3.0))
     (synopsis "GNU Guile bindings to the zstd compression library")
     (description
      "This package provides a GNU Guile interface to the zstd (``zstandard'')
diff --git a/gnu/packages/gv.scm b/gnu/packages/gv.scm
index b2e1fbb211..f18051261c 100644
--- a/gnu/packages/gv.scm
+++ b/gnu/packages/gv.scm
@@ -64,7 +64,7 @@
              ("libxpm" ,libxpm)
              ("zlib" ,zlib)))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "PostScript and PDF viewer using Ghostscript as a back-end")
    (description
     "GNU GV is a graphical user interface to the Ghostscript interpreter.
diff --git a/gnu/packages/gxmessage.scm b/gnu/packages/gxmessage.scm
index 0150dd0d6f..498c13d25e 100644
--- a/gnu/packages/gxmessage.scm
+++ b/gnu/packages/gxmessage.scm
@@ -48,10 +48,9 @@
                (("gtk-update-icon-cache") "true"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.gnu.org/software/gxmessage/")
     (synopsis "Open popup message window with buttons for return")
     (description "GNU gxmessage is a program that pops up dialog windows, which display
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 46ac96d679..7f6e858ee0 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -163,10 +163,7 @@
                 (lambda (y) (install-file y man8-dir))
                 (find-files "doc" "\\.8$"))))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen flex perl pkg-config))
     (inputs
      `(("libx86emu" ,libx86emu)
        ("util-linux:lib" ,util-linux "lib")))
@@ -189,15 +186,15 @@ support.")
         (base32 "19kkwb9ijzn6ya3mvjanggh1c96fcc0lkbk7xnyi2qp6wsr4nhxp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("glib" ,glib)
-       ("libdrm" ,libdrm)               ; enhanced diagnostics
-       ("libusb" ,libusb)               ; support USB monitors
-       ("libx11" ,libx11)               ; enhanced diagnostics
-       ("libxrandr" ,libxrandr)
-       ("zlib" ,zlib)))
+     (list eudev
+           glib
+           libdrm ; enhanced diagnostics
+           libusb ; support USB monitors
+           libx11 ; enhanced diagnostics
+           libxrandr
+           zlib))
     (home-page "https://www.ddcutil.com/")
     (synopsis "Control external monitor settings")
     (description
@@ -235,12 +232,9 @@ calibrated, and restored when the calibration is applied.")
     (arguments
      '(#:tests? #f))                    ; No test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("ddcutil" ,ddcutil)
-       ("glib" ,glib)
-       ("qtbase" ,qtbase-5)))
+     (list ddcutil glib qtbase-5))
     (home-page "https://www.ddcutil.com/")
     (synopsis "Graphical user interface for ddcutil")
     (description "ddcui is a graphical user interface for ddcutil, implemented
@@ -308,11 +302,7 @@ human-readable format and checks if it conforms to the standards.")
          ;; build container.
          #:tests? #f))
       (inputs
-       `(("python2" ,python-2)
-         ("python2-pycurl", python2-pycurl)
-         ("python2-pygtk", python2-pygtk)
-         ("pciutils", pciutils)
-         ("usbutils", usbutils)))
+       (list python-2 python2-pycurl python2-pygtk pciutils usbutils))
       (synopsis "Graphical client for the h-node hardware database
 project")
       (description
@@ -357,7 +347,7 @@ whether the hardware works with a fully free operating system or not.")
          (modify-phases %standard-phases
            (delete 'configure))))       ; no configure script
       (inputs
-       `(("ncurses" ,ncurses)))
+       (list ncurses))
       (home-page "https://github.com/afontenot/i7z")
       (synopsis "Thermal and C-state reporting on older Intel Core CPUs")
       (description
@@ -397,7 +387,7 @@ information can be viewed in real time and/or logged to a file.")
        ("perl" ,perl)
        ("python" ,python)))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -457,7 +447,7 @@ specific SMBIOS tables.")
                #t))))))
     (native-inputs
      ;; Newer GCCs fail with a deluge of "multiple definition of `__foo'" errors.
-     `(("gcc" ,gcc-4.9)))
+     (list gcc-4.9))
     (supported-systems (list "i686-linux" "x86_64-linux"))
     (home-page "https://www.memtest.org/")
     (synopsis "Thorough real-mode memory tester")
@@ -548,7 +538,7 @@ It can also be told to test memory starting at a particular physical address.")
                #t))))
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     ;; These registers and the CPUID instruction only exist on (most) x86 chips.
     (supported-systems (list "i686-linux" "x86_64-linux"))
     (home-page "https://01.org/msr-tools/")
@@ -587,9 +577,9 @@ be dangerous and may void your CPU or system board's warranty.")
     (arguments
      `(#:tests? #f)) ; no test target although there is a test folder
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("hidapi" ,hidapi)))
+     (list hidapi))
     (home-page "http://www.openhmd.net/")
     (synopsis "API and drivers for immersive technology")
     (description "OpenHMD aims to provide an API and drivers for immersive
@@ -619,11 +609,9 @@ technology, such as head mounted displays with built in head tracking.")
                             "/share/doc/" ,name "-" ,version))
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libcap" ,libcap)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)))
+     (list libcap libnl ncurses))
     (home-page "https://github.com/uoaerg/wavemon")
     (synopsis "Wireless network device monitor")
     (description
@@ -655,11 +643,9 @@ supported by the Linux kernel.")
           (base32 "0zwrkqfxd671iy69v3q0844gfdpm1yk51i9qh2rqc969bd8glxga"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (home-page "https://github.com/rockchip-linux/rkdeveloptool")
       (synopsis "Read from and write to RockChicp devices over USB")
       (description
@@ -683,8 +669,7 @@ as the Pinebook Pro.")
                 "008vvw504kh40br5v2xkqavnp9vpmjvf768faqzv1d00fd53ingn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xmllint" ,libxml2)))
+     (list pkg-config libxml2))
     (home-page "https://clusterlabs.github.io/libqb/")
     (synopsis "Library providing high performance logging, tracing, ipc, and poll")
     (description "Libqb is a library with the primary purpose of providing
@@ -791,15 +776,14 @@ Simply put, it is a USB device whitelisting tool.")
         (base32 "0gv3xj9sbk1wsyijfw9xjnvy8pg7j4arjnma2r2kfi18qy32wd30"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("glib" ,glib "bin")
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           intltool
+           libtool
+           `(,glib "bin")
+           automake
+           pkg-config))
     (synopsis "Simple screen testing tool")
     (description "This is a program for testing the quality of CRT/LCD
 screens.  It displays various patterns and allows you to estimate the quality
@@ -821,11 +805,9 @@ of your CRT/LCD monitor.")
         (base32 "05xynpwq851fp8f5fy7ac0blvz8mr5m5cbqj3gslgbwv63kjnfbq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("json-c" ,json-c)
-       ("openssl" ,openssl)))
+     (list curl json-c openssl))
     (home-page "https://tpm2-software.github.io/")
     (synopsis "OSS Implementation of the TCG TPM2 Software Stack (TSS2)")
     (description
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 8ef5bb5788..ed977f369f 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -71,21 +71,17 @@
          "1sn5g71sx8xa4ggyk49m661iip6zrzl65vb87l16l31kf79bbm7w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-refact" ,ghc-refact)
-       ("ghc-exactprint" ,ghc-exactprint)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-optparse-applicative"
-        ,ghc-optparse-applicative)))
+     (list ghc-refact
+           ghc-exactprint
+           ghc-syb
+           ghc-extra
+           ghc-uniplate
+           ghc-filemanip
+           ghc-unix-compat
+           ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-expected-failure"
-        ,ghc-tasty-expected-failure)
-       ("ghc-silently" ,ghc-silently)))
+     (list ghc-tasty ghc-tasty-golden ghc-tasty-expected-failure
+           ghc-silently))
     (home-page "https://hackage.haskell.org/package/apply-refact")
     (synopsis "Perform refactorings specified by the refact library")
     (description
@@ -120,21 +116,21 @@ library.  It is primarily used with HLint's @code{--refactor} flag.")
                (("(base|base16-bytestring|random)\\s+[^,]+" all dep)
                 dep)))))))
    (inputs
-    `(("ghc-async" ,ghc-async)
-      ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-      ("ghc-cryptohash-sha256" ,ghc-cryptohash-sha256)
-      ("ghc-echo" ,ghc-echo)
-      ("ghc-edit-distance" ,ghc-edit-distance)
-      ("ghc-hackage-security" ,ghc-hackage-security)
-      ("ghc-hashable" ,ghc-hashable)
-      ("ghc-http" ,ghc-http)
-      ("ghc-network-uri" ,ghc-network-uri)
-      ("ghc-network" ,ghc-network)
-      ("ghc-random" ,ghc-random)
-      ("ghc-resolv" ,ghc-resolv)
-      ("ghc-tar" ,ghc-tar)
-      ("ghc-zip-archive" ,ghc-zip-archive)
-      ("ghc-zlib" ,ghc-zlib)))
+    (list ghc-async
+          ghc-base16-bytestring
+          ghc-cryptohash-sha256
+          ghc-echo
+          ghc-edit-distance
+          ghc-hackage-security
+          ghc-hashable
+          ghc-http
+          ghc-network-uri
+          ghc-network
+          ghc-random
+          ghc-resolv
+          ghc-tar
+          ghc-zip-archive
+          ghc-zlib))
    (home-page "https://www.haskell.org/cabal/")
    (synopsis "Command-line interface for Cabal and Hackage")
    (description
@@ -158,9 +154,7 @@ installation of Haskell libraries and programs.")
          "17wi7fma2qaqdm1hwgaam3fd140v9bpa8ky0wg708h1pqc5v2nbz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-polyparse" ,ghc-polyparse)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-old-time" ,ghc-old-time)))
+     (list ghc-polyparse ghc-old-locale ghc-old-time))
     (home-page "http://projects.haskell.org/cpphs/")
     (synopsis "Liberalised re-implementation of cpp, the C pre-processor")
     (description "Cpphs is a re-implementation of the C pre-processor that is
@@ -216,53 +210,53 @@ unlit literate code files; and an option to turn off macro-expansion.")
                (("(cryptonite)\\s+[^,]+" all dep)
                 dep)))))))
     (inputs
-     `(("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-split" ,ghc-split)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-constraints" ,ghc-constraints)
-       ("ghc-findbin" ,ghc-findbin)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-data-ordlist" ,ghc-data-ordlist)
-       ("ghc-fgl" ,ghc-fgl)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-graphviz" ,ghc-graphviz)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-html" ,ghc-html)
-       ("ghc-mmap" ,ghc-mmap)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-applicative" ,ghc-regex-applicative)
-       ("ghc-regex-compat-tdfa" ,ghc-regex-compat-tdfa)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-shelly" ,ghc-shelly)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zip-archive" ,ghc-zip-archive)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-http" ,ghc-http)
-       ("curl" ,curl)
-       ("ghc" ,ghc)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("libiconv" ,libiconv)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-cmdargs
+           ghc-split
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit
+           ghc-test-framework
+           ghc-quickcheck
+           ghc-constraints
+           ghc-findbin
+           ghc-hunit
+           ghc-cryptonite
+           ghc-http-conduit
+           ghc-http-types
+           ghc-async
+           ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-bytestring-builder
+           ghc-cryptohash
+           ghc-data-ordlist
+           ghc-fgl
+           ghc-system-filepath
+           ghc-graphviz
+           ghc-hashable
+           ghc-html
+           ghc-mmap
+           ghc-old-time
+           ghc-random
+           ghc-regex-applicative
+           ghc-regex-compat-tdfa
+           ghc-sandi
+           ghc-shelly
+           ghc-tar
+           ghc-transformers-compat
+           ghc-unix-compat
+           ghc-utf8-string
+           ghc-vector
+           ghc-zip-archive
+           ghc-zlib
+           ghc-http
+           curl
+           ghc
+           ncurses
+           perl
+           libiconv
+           ghc-network
+           ghc-network-uri))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://darcs.net")
     (synopsis "Distributed Revision Control System")
     (description
@@ -294,14 +288,10 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
         (base32 "0yqc1pkfajnr56gnh43sbj50r7c3r41b2jfz07ivgl6phi4frjbq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-extra" ,ghc-extra)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-terminal-size" ,ghc-terminal-size)))
+     (list ghc-extra ghc-ansi-terminal ghc-cmdargs ghc-fsnotify
+           ghc-terminal-size))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/ndmitchell/ghcid#readme")
     (synopsis "GHCi based bare bones IDE")
     (description
@@ -414,69 +404,66 @@ to @code{cabal repl}).")
                (lambda ()
                  (display "static output not used\n"))))))))
     (inputs
-     `(("curl" ,curl)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-async" ,ghc-async)
-       ("ghc-aws" ,ghc-aws)
-       ("ghc-bloomfilter" ,ghc-bloomfilter)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-concurrent-output" ,ghc-concurrent-output)
-       ("ghc-crypto-api" ,ghc-crypto-api)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-dav" ,ghc-dav)
-       ("ghc-disk-free-space" ,ghc-disk-free-space)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-esqueleto" ,ghc-esqueleto)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-feed" ,ghc-feed)
-       ("ghc-filepath-bytestring" ,ghc-filepath-bytestring)
-       ("ghc-free" ,ghc-free)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-ifelse" ,ghc-ifelse)
-       ("ghc-magic" ,ghc-magic)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-mountpoints" ,ghc-mountpoints)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-info" ,ghc-network-info)
-       ("ghc-network-multicast" ,ghc-network-multicast)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-persistent-template" ,ghc-persistent-template)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-safesemaphore" ,ghc-safesemaphore)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-securemem" ,ghc-securemem)
-       ("ghc-socks" ,ghc-socks)
-       ("ghc-split" ,ghc-split)
-       ("ghc-stm-chans" ,ghc-stm-chans)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-torrent" ,ghc-torrent)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-uuid" ,ghc-uuid)
-       ("git" ,git)
-       ("rsync" ,rsync)))
+     (list curl
+           ghc-aeson
+           ghc-async
+           ghc-aws
+           ghc-bloomfilter
+           ghc-byteable
+           ghc-case-insensitive
+           ghc-concurrent-output
+           ghc-crypto-api
+           ghc-cryptonite
+           ghc-data-default
+           ghc-dav
+           ghc-disk-free-space
+           ghc-dlist
+           ghc-edit-distance
+           ghc-esqueleto
+           ghc-exceptions
+           ghc-feed
+           ghc-filepath-bytestring
+           ghc-free
+           ghc-hinotify
+           ghc-hslogger
+           ghc-http-client
+           ghc-http-conduit
+           ghc-http-types
+           ghc-ifelse
+           ghc-magic
+           ghc-memory
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-mountpoints
+           ghc-network
+           ghc-network-info
+           ghc-network-multicast
+           ghc-old-locale
+           ghc-optparse-applicative
+           ghc-persistent
+           ghc-persistent-sqlite
+           ghc-persistent-template
+           ghc-quickcheck
+           ghc-random
+           ghc-regex-tdfa
+           ghc-resourcet
+           ghc-safesemaphore
+           ghc-sandi
+           ghc-securemem
+           ghc-socks
+           ghc-split
+           ghc-stm-chans
+           ghc-tagsoup
+           ghc-torrent
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-uuid
+           git
+           rsync))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-rerun" ,ghc-tasty-rerun)
-       ("perl" ,perl)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck ghc-tasty-rerun
+           perl))
     (home-page "https://git-annex.branchable.com/")
     (synopsis "Manage files with Git, without checking in their contents")
     (description "This package allows managing files with Git, without
@@ -509,22 +496,22 @@ used to keep a folder in sync between computers.")
          "0z6gxndrh7blzapkdn6fq1pkbkjlmbgjbq9ydnvy2wm00fb3v73g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("cpphs" ,cpphs)
-       ("ghc-filepattern" ,ghc-filepattern)
-       ("ghc-lib-parser-ex" ,ghc-lib-parser-ex)
-       ("hscolour" ,hscolour)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-refact" ,ghc-refact)
-       ("ghc-aeson" ,ghc-aeson)))
+     (list ghc-unordered-containers
+           ghc-yaml
+           ghc-vector
+           ghc-data-default
+           ghc-file-embed
+           ghc-utf8-string
+           cpphs
+           ghc-filepattern
+           ghc-lib-parser-ex
+           hscolour
+           ghc-cmdargs
+           ghc-uniplate
+           ghc-ansi-terminal
+           ghc-extra
+           ghc-refact
+           ghc-aeson))
     (home-page "https://github.com/ndmitchell/hlint")
     (synopsis "Suggest improvements for Haskell source code")
     (description "HLint reads Haskell programs and suggests changes that
@@ -548,35 +535,35 @@ unwanted suggestions, and to add your own custom suggestions.")
          "1xacx2f33x1a4qlv25f8rlmb4wi0cjfzrj22nlnkrd0knghik3m7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-foundation" ,ghc-foundation)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-js-flot" ,ghc-js-flot)
-       ("ghc-js-jquery" ,ghc-js-jquery)
-       ("ghc-mmap" ,ghc-mmap)
-       ("ghc-process-extras" ,ghc-process-extras)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-storable-tuple" ,ghc-storable-tuple)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-warp-tls" ,ghc-warp-tls)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-quickcheck
+           ghc-aeson
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-cmdargs
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-connection
+           ghc-extra
+           ghc-foundation
+           ghc-old-locale
+           ghc-haskell-src-exts
+           ghc-http-conduit
+           ghc-http-types
+           ghc-js-flot
+           ghc-js-jquery
+           ghc-mmap
+           ghc-process-extras
+           ghc-resourcet
+           ghc-storable-tuple
+           ghc-tar
+           ghc-uniplate
+           ghc-utf8-string
+           ghc-vector
+           ghc-wai
+           ghc-wai-logger
+           ghc-warp
+           ghc-warp-tls
+           ghc-zlib))
     (home-page "https://hoogle.haskell.org/")
     (synopsis "Haskell API Search")
     (description "Hoogle is a Haskell API search engine, which allows
@@ -648,17 +635,17 @@ and mIRC chat codes.")
                (copy-recursively "keymap" (string-append doc "/keymap"))
                #t))))))
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-rio" ,ghc-rio)
-       ("ghc-unagi-chan" ,ghc-unagi-chan)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-cereal
+           ghc-exceptions
+           ghc-hashable
+           ghc-lens
+           ghc-megaparsec
+           ghc-optparse-applicative
+           ghc-resourcet
+           ghc-rio
+           ghc-unagi-chan
+           ghc-unliftio
+           ghc-unordered-containers))
     (home-page "https://github.com/david-janssen/kmonad")
     (synopsis "Advanced keyboard manager")
     (description "KMonad is a keyboard remapping utility that supports
@@ -683,10 +670,8 @@ Wayland, and Linux console environments alike.")
         (base32 "1ispgl8rc2scr6v8bb6sks7px856jf61x74zj2iyddrn5qamkb3n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-megaparsec ghc-parser-combinators ghc-cmdargs
+           ghc-safe-exceptions))
     (arguments
      `(#:cabal-revision
        ("1" "1hsj0jh6siph3afd9c2wii09sffl48rzqv653n4clpd8qy0rn48d")
@@ -719,19 +704,19 @@ formatting by forgetting all existing formatting during parsing.")
         (base32 "1baw360dcnyavacf7a8v6wq4m5g6bcmyybkckv4cz7r4xl5p3qws"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-microlens-mtl" ,ghc-microlens-mtl)
-       ("ghc-protolude" ,ghc-protolude)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-wordexp" ,ghc-wordexp)))
+     (list libx11
+           libxext
+           libxscrnsaver
+           ghc-x11
+           ghc-exceptions
+           ghc-hashable
+           ghc-microlens
+           ghc-microlens-mtl
+           ghc-protolude
+           ghc-vector
+           ghc-wordexp))
     (home-page "https://github.com/erebe/greenclip")
     (synopsis "Simple Clipboard manager")
     (description "@code{greenclip} is a clipboard manager written in
@@ -763,14 +748,14 @@ Haskell.")
                                     "/lib"))))
                #t))))))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-random" ,ghc-random)
-       ("ghc-glut" ,ghc-glut)
-       ("freeglut" ,freeglut)
-       ("ghc-opengl" ,ghc-opengl)
-       ("ghc-sdl2" ,ghc-sdl2)
-       ("ghc-sdl2-image" ,ghc-sdl2-image)
-       ("ghc-sdl2-mixer" ,ghc-sdl2-mixer)))
+     (list ghc-extensible-exceptions
+           ghc-random
+           ghc-glut
+           freeglut
+           ghc-opengl
+           ghc-sdl2
+           ghc-sdl2-image
+           ghc-sdl2-mixer))
     (home-page "https://www.gamecreation.org/games/raincat")
     (synopsis "Puzzle game with a cat in lead role")
     (description "Project Raincat is a game developed by Carnegie Mellon
@@ -809,14 +794,14 @@ is programmed in Haskell.")
                  (display "static output not used\n")))
              #t)))))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-ifelse" ,ghc-ifelse)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-ncurses" ,ghc-ncurses)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-random" ,ghc-random)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-case-insensitive
+           ghc-data-default
+           ghc-ifelse
+           ghc-monad-loops
+           ghc-ncurses
+           ghc-optparse-applicative
+           ghc-random
+           ghc-vector))
     (home-page "https://joeyh.name/code/scroll/")
     (synopsis "scroll(6), a roguelike game")
     (description
@@ -852,12 +837,9 @@ too slow and you'll get wound up in the scroll and crushed.")
                            (string-append (assoc-ref outputs "out")
                                           "/share/man/man1/")))))))
     (native-inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
+     (list ghc-aeson ghc-diff ghc-quickcheck ghc-regex-tdfa))
     (home-page "https://www.shellcheck.net/")
     (synopsis "Static analysis for shell scripts")
     (description "@code{shellcheck} provides static analysis for
@@ -909,16 +891,16 @@ advanced user's otherwise working script to fail under future circumstances.
                    (format #t "test suite not run~%"))
                #t))))))
     (inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-filemanip" ,ghc-filemanip)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-diff
+           ghc-cmdargs
+           ghc-filemanip
+           ghc-hunit
+           ghc-pretty-show
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-utf8-string
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/simonmichael/shelltestrunner")
     (synopsis "Test CLI programs")
     (description
@@ -944,19 +926,19 @@ output, stderr, and exit status.")
          "0x9w3zh1lzp6l5xj3mynnlr0fzb5mbv0wwpfxp8fr6bk0jcrzjwf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-hsyaml" ,ghc-hsyaml)
-       ("ghc-hsyaml-aeson" ,ghc-hsyaml-aeson)
-       ("ghc-lib-parser" ,ghc-lib-parser)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-aeson
+           ghc-file-embed
+           ghc-haskell-src-exts
+           ghc-semigroups
+           ghc-syb
+           ghc-hsyaml
+           ghc-hsyaml-aeson
+           ghc-lib-parser
+           ghc-strict
+           ghc-optparse-applicative
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/jaspervdj/stylish-haskell")
     (synopsis "Haskell code prettifier")
     (description "Stylish-haskell is a Haskell code prettifier.  The goal is
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 90ef3236b6..e647d65a89 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -55,10 +55,7 @@
          "0h9mllhw9cd0rn34xhj8grwmbny7z7hpd8qmp9lfcdj0s4qx9vx8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-generic-deriving ghc-xml ghc-tagged ghc-tasty))
     (home-page
      "https://github.com/ocharles/tasty-ant-xml")
     (synopsis
@@ -85,10 +82,7 @@ framework.")
          "0csgwn3vch0jnpqyyfnrfjq4z0dpl67imh5a7byll3hhlyidgjym"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-async" ,ghc-async)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-tasty ghc-smallcheck ghc-async ghc-tagged))
     (home-page "https://documentup.com/feuerbach/tasty")
     (synopsis "SmallCheck support for the Tasty test framework")
     (description "This package provides SmallCheck support for the Tasty
@@ -110,13 +104,13 @@ Haskell test framework.")
          "0i1i78587znqzwps49milyr5n2k388ld2kr9ysz1vw8gcw51qq49"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-random" ,ghc-random)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-pcre-light" ,ghc-pcre-light)))
+     (list ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-random
+           ghc-ansi-terminal
+           ghc-tasty-hunit
+           ghc-pcre-light))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "QuickCheck support for the Tasty test framework")
     (description "This package provides QuickCheck support for the Tasty
@@ -139,13 +133,13 @@ Haskell test framework.")
          "1nskavqgfxx1cw7q6c0cmizlwj54rnlv93yhgssaa77gv1nbvwpn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
-    (native-inputs `(("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-async
+           ghc-optparse-applicative
+           ghc-tagged
+           ghc-tasty
+           ghc-temporary
+           ghc-unix-compat))
+    (native-inputs (list ghc-tasty-hunit))
     (home-page
      "https://github.com/feuerbach/tasty-golden")
     (synopsis "Golden tests support for tasty")
@@ -172,14 +166,14 @@ contains the correct result for the test.")
          "0574hbqzxzyv6vsk5kzbf04kz58y0iy8x9ydcj4b8fpncgmgy63g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-unbounded-delays" ,ghc-unbounded-delays)
-       ("ghc-async" ,ghc-async)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock-bootstrap" ,ghc-clock-bootstrap)
-       ("ghc-wcwidth" ,ghc-wcwidth-bootstrap)))
+     (list ghc-tagged
+           ghc-regex-tdfa
+           ghc-optparse-applicative
+           ghc-unbounded-delays
+           ghc-async
+           ghc-ansi-terminal
+           ghc-clock-bootstrap
+           ghc-wcwidth-bootstrap))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "Modern and extensible testing framework")
     (description "Tasty is a modern testing framework for Haskell.  It lets
@@ -201,11 +195,9 @@ and any other types of tests into a single test suite.")
          "0cy49z8n124xh2ra2482vfy5if1n6d9lbdjma2zg1mxfj0k0zyfb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-hedgehog" ,ghc-hedgehog)))
+     (list ghc-tagged ghc-tasty ghc-hedgehog))
     (native-inputs
-     `(("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)))
+     (list ghc-tasty-expected-failure))
     (home-page "https://github.com/qfpl/tasty-hedgehog")
     (synopsis "Integration for tasty and hedgehog")
     (description "This package provides the means for integrating the
@@ -230,13 +222,13 @@ framework}.")
          "02s82ijs2ringqxsqbm7m3vcy5brmwxa617azxv0v2phi3rdkjvl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hspec
+           ghc-hspec-core
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-smallcheck
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "0za15rg0szacxq9yfxxjzddr77ai7ng5827a20pj9dr5anjlnajj")))
@@ -264,8 +256,7 @@ framework}.")
          "0gz6zz3w7s44pymw33xcxnawryl27zk33766sab96nz2xh91kvxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-call-stack" ,ghc-call-stack-boot)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-call-stack-boot ghc-tasty))
     (home-page "http://documentup.com/feuerbach/tasty")
     (synopsis "HUnit support for the Tasty test framework")
     (description "This package provides HUnit support for the Tasty Haskell
@@ -285,9 +276,7 @@ test framework.")
                 "14yvlpli6cv6bn3kh8mlfp4x1l6ns4fvmfv6hmj75cvxyzq029d7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/tasty-kat")
     (synopsis "Known Answer Tests (KAT) framework for tasty")
     (description
@@ -309,11 +298,9 @@ tasty.")
          "0wa73ihkjcxi50lgpdzwwdx7s903lqi79hw7hxlvhbcvdly1cq53"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-hslua" ,ghc-hslua)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-file-embed ghc-hslua ghc-tasty))
     (native-inputs
-     `(("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty-hunit))
     (home-page "https://github.com/hslua/tasty-lua")
     (synopsis "Write tests in Lua, integrate into tasty")
     (description "This package gives users the ability to define tasty tests
@@ -335,9 +322,7 @@ from Lua.")
          "0b2ivrw2257m4cy4rjnkwqlarh83j1y3zywnmaqqqbvy667sqnj3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-haskell-src-exts ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/bennofs/tasty-th")
     (synopsis "Automatically generate tasty TestTrees")
     (description
@@ -361,11 +346,8 @@ test-framework.")
                 "0sccp5zx9v2rx741nbmgd8mzjhy5m4v74hk26d23xz93ph8aqx7s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-reducers" ,ghc-reducers)
-       ("ghc-split" ,ghc-split)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)))
+     (list ghc-optparse-applicative ghc-reducers ghc-split ghc-tagged
+           ghc-tasty))
     (home-page "https://github.com/ocharles/tasty-rerun")
     (synopsis "Run tests by filtering the test tree")
     (description "This package adds the ability to run tests by filtering the
@@ -395,9 +377,7 @@ been added since previous test run.")
 ;       ("ghc-hedgehog" ,ghc-hedgehog)
 ;       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)))
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-unbounded-delays" ,ghc-unbounded-delays)))
+     (list ghc-tagged ghc-tasty ghc-unbounded-delays))
     (home-page "https://github.com/nomeata/tasty-expected-failure")
     (synopsis "Mark tasty tests as failure expected")
     (description
@@ -426,22 +406,22 @@ development.")
      `(#:cabal-revision
        ("2" "1lsa3pbg4ljlk29fhm3mdklnx3hwffyga1nr5krbpcyc3ywq8fq8")))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-fix" ,ghc-data-fix)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-integer-logarithms" ,ghc-integer-logarithms)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-splitmix" ,ghc-splitmix)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-these" ,ghc-these)
-       ("ghc-time-compat" ,ghc-time-compat)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-case-insensitive
+           ghc-data-fix
+           ghc-hashable
+           ghc-integer-logarithms
+           ghc-old-time
+           ghc-quickcheck
+           ghc-scientific
+           ghc-splitmix
+           ghc-strict
+           ghc-tagged
+           ghc-these
+           ghc-time-compat
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
     (home-page "https://github.com/aslatter/qc-instances")
     (synopsis "Common quickcheck instances")
     (description "This package provides QuickCheck instances for types
@@ -462,7 +442,7 @@ provided by the Haskell Platform.")
         (base32
          "0s43s1bzbg3gwsjgm7fpyksd1339f0m26dlw2famxwyzgvm0a80k"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (home-page
      "https://github.com/bos/quickcheck-unicode")
     (synopsis "Generator functions Unicode-related tests")
@@ -486,8 +466,7 @@ testing Unicode-related software.")
          "08k4v7pkgjf30pv5j2dfv1gqv6hclxlniyq2sps8zq4zswcr2xzv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-quickcheck ghc-hunit))
     (home-page
      "https://github.com/hspec/quickcheck-io#readme")
     (synopsis "Use HUnit assertions as QuickCheck properties")
@@ -511,8 +490,7 @@ use HUnit assertions as QuickCheck properties.")
          "1wrnrm9sq4s0bly0q58y80g4153q45iglqa34xsi2q3bd62nqyyq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-splitmix" ,ghc-splitmix-bootstrap)))
+     (list ghc-random ghc-splitmix-bootstrap))
     (home-page "https://github.com/nick8325/quickcheck")
     (synopsis "Automatic testing of Haskell programs")
     (description
@@ -537,11 +515,9 @@ expressed in Haskell, using combinators defined in the QuickCheck library.")
         (base32 "1kyam4cy7qmnizjwjm8jamq43w7f0fs6ljfplwj0ib6wi2kjh0wv"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (inputs
-     `(("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-ieee754 ghc-pretty-show ghc-quickcheck))
     (home-page "https://github.com/s9gf4ult/quickcheck-assertions")
     (synopsis "HUnit-like assertions for QuickCheck")
     (description
@@ -568,8 +544,7 @@ HUnit.")
        #:cabal-revision
        ("6" "0wbq9wiaag69nsqxwijzhs5y1hb9kbpkp1x65dvx158cxp8i9w9r")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hunit ghc-quickcheck))
     (inputs
      `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
        ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
@@ -608,9 +583,7 @@ reporting and test statistics output.")
      `(#:cabal-revision
        ("3" "0i9mlalv7cl1iq43ld5myrnpszq5rxmd79hk495dcb08rglhgl3z")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-extensible-exceptions ghc-hunit ghc-test-framework))
     (home-page "https://batterseapower.github.io/test-framework/")
     (synopsis "HUnit support for test-framework")
     (description
@@ -635,10 +608,8 @@ reporting and test statistics output.")
      `(#:cabal-revision
        ("3" "0mglqfimla4vvv80mg08aj76zf4993wmngqlirh05h8i9nmgv6lh")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-extensible-exceptions ghc-quickcheck ghc-random
+           ghc-test-framework))
     (home-page "https://batterseapower.github.io/test-framework/")
     (synopsis "QuickCheck2 support for test-framework")
     (description
@@ -660,8 +631,7 @@ package.")
         (base32 "1xpgpk1gp4w7w46b4rhj80fa0bcyz8asj2dcjb5x1c37b7rw90b0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-test-framework" ,ghc-test-framework)))
+     (list ghc-smallcheck ghc-test-framework))
     (home-page "https://github.com/Bodigrim/smallcheck")
     (synopsis "SmallCheck support for test-framework")
     (description
@@ -684,10 +654,8 @@ test-framework.  New projects should use ghc-tasty-smallcheck instead.")
          "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-language-haskell-extract" ,ghc-language-haskell-extract)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-test-framework ghc-language-haskell-extract
+           ghc-haskell-src-exts ghc-regex-posix))
     (home-page "https://github.com/finnsson/test-generator")
     (synopsis "Auto generate the HUnit- and Quickcheck-bulk-code
 using Template Haskell")
@@ -720,7 +688,7 @@ using Template Haskell")
     (inputs
      ;; We cannot use ghc-call-stack there, because it depends on
      ;; ghc-nanospec, which depends on ghc-hunit.
-     `(("ghc-call-stack" ,ghc-call-stack-boot)))
+     (list ghc-call-stack-boot))
     (home-page "http://hunit.sourceforge.net/")
     (synopsis "Unit testing framework for Haskell")
     (description
@@ -743,8 +711,7 @@ JUnit tool for Java.")
          "13yzvd3b679skvs1insk4s0wc4zvmz6hs38kc8q0j6vzqq06smqa"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec-meta" ,ghc-hspec-meta)))
+     (list ghc-quickcheck ghc-hspec-meta))
     (home-page "https://hspec.github.io/")
     (synopsis "Automatically discover and run Hspec tests")
     (description "hspec-discover is a tool which automatically discovers and
@@ -766,15 +733,15 @@ runs Hspec tests.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: testing libraries are missing.
     (inputs
-     `(("ghc-setenv" ,ghc-setenv)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-quickcheck-io" ,ghc-quickcheck-io)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-tf-random" ,ghc-tf-random)))
+     (list ghc-setenv
+           ghc-ansi-terminal
+           ghc-clock
+           ghc-quickcheck-io
+           ghc-hunit
+           ghc-quickcheck
+           ghc-hspec-expectations
+           ghc-silently
+           ghc-tf-random))
     (home-page "https://hspec.github.io/")
     (synopsis "Testing framework for Haskell")
     (description "This library exposes internal types and functions that can
@@ -795,14 +762,14 @@ be used to extend Hspec's functionality.")
          "0sfj0n2hy1r8ifysgbcmfdygcd7vyzr13ldkcp0l2ml337f8j0si"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-setenv" ,ghc-setenv)
-       ("ghc-random" ,ghc-random)
-       ("ghc-quickcheck-io" ,ghc-quickcheck-io)))
+     (list ghc-quickcheck
+           ghc-hunit
+           ghc-ansi-terminal
+           ghc-clock
+           ghc-hspec-expectations
+           ghc-setenv
+           ghc-random
+           ghc-quickcheck-io))
     (home-page "https://hspec.github.io/")
     (synopsis "Version of Hspec to test Hspec itself")
     (description "This library provides a stable version of Hspec which is
@@ -824,13 +791,13 @@ used to test the in-development version of Hspec.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-hspec-core" ,ghc-hspec-core)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)
-       ("ghc-hspec-meta" ,ghc-hspec-meta)))
+     (list ghc-hspec-core
+           hspec-discover
+           ghc-hspec-expectations
+           ghc-quickcheck
+           ghc-hunit
+           ghc-stringbuilder
+           ghc-hspec-meta))
     (home-page "https://hspec.github.io/")
     (synopsis "Testing Framework for Haskell")
     (description "This library provides the Hspec testing framework for
@@ -851,12 +818,9 @@ Haskell, inspired by the Ruby library RSpec.")
                 "0hhzxaa3fxz5mk5qcsrnfr98a7bn3szx2ydgr0x9mbqmm1jg06rc"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec-core ghc-hunit ghc-hspec ghc-quickcheck))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)))
+     (list hspec-discover))
     (home-page "https://hspec.github.io/")
     (synopsis "Contributed functionality for Hspec")
     (description
@@ -879,7 +843,7 @@ Haskell, inspired by the Ruby library RSpec.")
     (build-system haskell-build-system)
     ;; Tests depend on ghc-nanospec.
     (arguments '(#:tests? #f))
-    (inputs `(("ghc-hunit" ,ghc-hunit)))
+    (inputs (list ghc-hunit))
     (home-page "https://github.com/sol/hspec-expectations")
     (synopsis "Catchy combinators for HUnit")
     (description "This library provides catchy combinators for HUnit, see
@@ -901,8 +865,7 @@ Haskell, inspired by the Ruby library RSpec.")
          "1rcmhl9bhyfvanalnf1r86wkx6rq6wdvagnw1h011jcnnb1cq56g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-silently" ,ghc-silently)))
+     (list ghc-hspec ghc-silently))
     (home-page "https://github.com/hspec/nanospec#readme")
     (synopsis "Lightweight implementation of a subset of Hspec's API")
     (description
@@ -924,14 +887,14 @@ minimal dependencies.")
         (base32
          "19wqignlq90qwpam01hnmmrxaxh5lkax9l1l6rlbi4a07nvp1dnz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-              ("ghc-hunit" ,ghc-hunit)
-              ("ghc-test-framework" ,ghc-test-framework)
-              ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-              ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-              ("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)
-              ("ghc-crypto-cipher-types" ,ghc-crypto-cipher-types)))
+    (inputs (list ghc-quickcheck
+                  ghc-hunit
+                  ghc-test-framework
+                  ghc-test-framework-quickcheck2
+                  ghc-test-framework-hunit
+                  ghc-byteable
+                  ghc-securemem
+                  ghc-crypto-cipher-types))
     (home-page "https://github.com/vincenthz/hs-crypto-cipher")
     (synopsis "Generic cryptography cipher tests for Haskell")
     (description " This Haskell package contains generic tests for
@@ -955,21 +918,20 @@ implementations of cryptographic ciphers.")
          "1qsqs8lmxa3wmw228cwi98vvvh9hqbc9d43i1sy2c9igw9xlhfi6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-async" ,ghc-async)
-       ("ghc-concurrent-output" ,ghc-concurrent-output)
-       ("ghc-erf" ,ghc-erf)
-       ;("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-random" ,ghc-random)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-wl-pprint-annotated"
-        ,ghc-wl-pprint-annotated)))
+     (list ghc-ansi-terminal
+           ghc-async
+           ghc-concurrent-output
+           ghc-erf
+           ;("ghc-exceptions" ,ghc-exceptions)
+           ghc-lifted-async
+           ghc-mmorph
+           ghc-monad-control
+           ghc-pretty-show
+           ghc-primitive
+           ghc-random
+           ghc-resourcet
+           ghc-transformers-base
+           ghc-wl-pprint-annotated))
     (home-page "https://hedgehog.qa")
     (synopsis "Property-based testing in the spirt of QuickCheck")
     (description
@@ -1043,10 +1005,8 @@ testing frameworks.")
             "1v2qzzpf1s008g7q6q67glf7vbm1pkpq4rc3ii74f4g6vhfx610r"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-size-based" ,ghc-size-based)
-        ("ghc-testing-type-modifiers" ,ghc-testing-type-modifiers)
-        ("ghc-semigroups" ,ghc-semigroups)))
+      (list ghc-quickcheck ghc-size-based ghc-testing-type-modifiers
+            ghc-semigroups))
     (home-page "https://github.com/JonasDuregard/testing-feat")
     (synopsis "Functional Enumeration of Algebraic Types")
     (description "Feat (Functional Enumeration of Algebraic Types)
@@ -1111,12 +1071,12 @@ examples and more information.")
           (base32 "16c6gq4cqpkwnq1pzkhm6r7mrwk4an50ha5w77bmiia2qkhla6ch"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-contravariant" ,ghc-contravariant)
-        ("ghc-bifunctors" ,ghc-bifunctors)
-        ("ghc-semigroups" ,ghc-semigroups)
-        ("ghc-fail" ,ghc-fail)
-        ("ghc-tagged" ,ghc-tagged)))
+      (list ghc-quickcheck
+            ghc-contravariant
+            ghc-bifunctors
+            ghc-semigroups
+            ghc-fail
+            ghc-tagged))
     (home-page "https://github.com/andrewthad/quickcheck-classes#readme")
     (synopsis "QuickCheck common typeclasses from `base`")
     (description
@@ -1172,9 +1132,7 @@ these constraints more cleanly.")
           (base32 "1g3c7yrqq2mwqbmvs8vkx1a3cf0p0x74b7fnn344dsk7bsfpgv0x"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-doctest-lib" ,ghc-doctest-lib)
-        ("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-semigroups" ,ghc-semigroups)))
+      (list ghc-doctest-lib ghc-quickcheck ghc-semigroups))
     (home-page "https://hub.darcs.net/thielema/doctest-exitcode-stdio/")
     (synopsis "Run Doctests in a @code{Cabal.Test.exitcode-stdio} environment")
     (description
@@ -1220,18 +1178,17 @@ environment.")
           (base32 "0nvh2k8iqqkanmp7lpwd3asimyarzisly8wavbdahcxryn0j4xb7"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-        ("ghc-async" ,ghc-async)
-        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-        ("ghc-process-extras" ,ghc-process-extras)
-        ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-        ("ghc-semigroups" ,ghc-semigroups)
-        ("ghc-tagged" ,ghc-tagged)
-        ("ghc-tasty" ,ghc-tasty)
-        ("ghc-temporary" ,ghc-temporary)))
+      (list ghc-ansi-terminal
+            ghc-async
+            ghc-optparse-applicative
+            ghc-process-extras
+            ghc-regex-tdfa
+            ghc-semigroups
+            ghc-tagged
+            ghc-tasty
+            ghc-temporary))
     (native-inputs
-     `(("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-silently" ,ghc-silently)))
+     (list ghc-tasty-hunit ghc-silently))
     (home-page "https://github.com/phile314/tasty-silver")
     (synopsis "Fancy test runner, including support for golden tests")
     (description
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 8902a92ac7..422e00035b 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -48,8 +48,7 @@
                 "1a119qxhxhr0yn37r26dkydm6g5kykdkx98ghb59i4ipa6i95vkq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-hourglass" ,ghc-hourglass)))
+     (list ghc-memory ghc-hourglass))
     (home-page "https://github.com/vincenthz/hs-asn1-types")
     (synopsis "ASN.1 types for Haskell")
     (description
@@ -71,11 +70,9 @@ format.")
                 "02nsr30h5yic1mk7znf0q4z3n560ip017n60hg7ya25rsfmxxy6r"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-asn1-types" ,ghc-asn1-types)))
+     (list ghc-hourglass ghc-asn1-types))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/vincenthz/hs-asn1")
     (synopsis "ASN1 data reader and writer in RAW, BER and DER forms")
     (description
@@ -97,8 +94,7 @@ supports for high level forms of ASN1 (BER, and DER).")
                 "17pk8y3nwv9b9i5j15qlmwi7fmq9ab2z4kfpjk2rvcrh9lsf27wg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
+     (list ghc-asn1-types ghc-asn1-encoding))
     (home-page "https://github.com/vincenthz/hs-asn1")
     (synopsis "Simple monadic parser for ASN1 stream types")
     (description
@@ -120,9 +116,7 @@ when ASN1 pattern matching is not convenient.")
         (base32
          "19bsmkqkpnvh01b77pmyarx00fic15j4hvg4pzscrj4prskrx2i9"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-entropy" ,ghc-entropy)))
+    (inputs (list ghc-cereal ghc-tagged ghc-entropy))
     (home-page "https://github.com/TomMD/crypto-api")
     (synopsis "Provides generic interface for cryptographic operations
 for Haskell")
@@ -152,13 +146,13 @@ algorithm (ex: padding) is within scope of this package.")
          "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-test-framework" ,ghc-test-framework)
-              ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-              ("ghc-hunit" ,ghc-hunit)
-              ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-test-framework-quickcheck2
+                  ghc-crypto-api
+                  ghc-cereal
+                  ghc-test-framework
+                  ghc-test-framework-hunit
+                  ghc-hunit
+                  ghc-quickcheck))
     (home-page "https://github.com/TomMD/crypto-api-tests")
     (synopsis "Test framework and KATs for cryptographic operations for Haskell")
     (description "This Haskell package provides a test framework for hash and
@@ -181,14 +175,14 @@ for common cryptographic algorithms are included.")
          "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-byteable" ,ghc-byteable)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-byteable
+           ghc-cryptonite
+           ghc-memory
+           ghc-hunit
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-quickcheck
+           ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-cryptohash")
     (synopsis "Collection of cryptographic hashes in Haskell")
     (description
@@ -212,11 +206,8 @@ that hides the C implementation.")
         (base32
          "018g13hkmq5782i24b4518hcd926fl6x6fh5hd7b9wlxwc5dn21v"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-                     ("ghc-puremd5" ,ghc-puremd5)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (native-inputs (list ghc-base16-bytestring ghc-puremd5 ghc-tasty
+                         ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/cryptohash-md5")
     (synopsis "MD5 implementation for Haskell")
     (description "This Haskell package provides implementation of MD5.")
@@ -240,11 +231,8 @@ that hides the C implementation.")
      `(#:cabal-revision
        ("6" "10rpxrmqgwihmplczglwxf5q3l13z9j3kvi065z884y4dymmnkgc")
        #:tests? #f)) ; tests require old version of ghc-hunit (0.9)
-    (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-                     ("ghc-sha" ,ghc-sha)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-base16-bytestring ghc-sha ghc-tasty
+                         ghc-tasty-quickcheck ghc-hunit))
     (home-page "https://github.com/hvr/cryptohash-sha1")
     (synopsis "SHA-1 implementation for Haskell")
     (description "This Haskell package provides an incremental and one-pass,
@@ -275,11 +263,8 @@ the C implementation.")
        ("1" "0v5ppc7r2lxbk49h1kwj4b5vyb1dw2fnppykvp5m9rm0p3vhlykr")
        #:tests? #f)) ; TODO: tasty ==1.1.*
     (native-inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-base16-bytestring ghc-sha ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/cryptohash-sha1")
     (synopsis "SHA-256 implementation for Haskell")
     (description "This Haskell package provides an incremental and
@@ -309,14 +294,9 @@ the C implementation.")
     (arguments '(#:tests? #f))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-byteable" ,ghc-byteable)))
+     (list ghc-basement ghc-memory ghc-byteable))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-kat" ,ghc-tasty-kat)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit ghc-tasty-kat))
     (home-page "https://github.com/haskell-crypto/cryptonite")
     (synopsis "Cryptography primitives")
     (description
@@ -344,7 +324,7 @@ generators, and more.")
     (arguments
      `(#:extra-directories ("zlib")))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page
      "https://hackage.haskell.org/package/digest")
     (synopsis
@@ -387,14 +367,10 @@ to obtain cryptographically strong entropy.")
                 "1m7qjsxrd8m88cvkqmr8kscril500j2a9y0iynvksjyjkhdlq33p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-memory" ,ghc-memory)))
+     (list ghc-basement ghc-memory))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit ghc-hunit ghc-quickcheck))
     (home-page "https://github.com/vincenthz/hs-pem")
     (synopsis "Privacy Enhanced Mail (PEM) format reader and writer")
     (description
@@ -416,15 +392,10 @@ Mail} (PEM) format.")
         (base32
          "0qwkvxwi9wh6knn69rg2hvc8ngmv1if77kmpcnp0xqr0l30fwavq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-tagged" ,ghc-tagged)))
-    (native-inputs `(("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ("ghc-test-framework-quickcheck2"
-                      ,ghc-test-framework-quickcheck2)
-                     ("ghc-pretty-hex" ,ghc-pretty-hex)))
+    (inputs (list ghc-cereal ghc-crypto-api ghc-tagged))
+    (native-inputs (list ghc-crypto-api-tests ghc-quickcheck
+                         ghc-test-framework ghc-test-framework-quickcheck2
+                         ghc-pretty-hex))
     (home-page "https://github.com/TomMD/pureMD5")
     (synopsis "Haskell implementation of the MD5 hash algorithm")
     (description "This package provides a Haskell-only implementation of
@@ -445,9 +416,8 @@ interface.")
                 "0i4b2wjisivdy72synal711ywhx05mfqfba5n65rk8qidggm1nbb"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/SHA")
     (synopsis "SHA suite of message digest functions")
     (description
@@ -472,16 +442,15 @@ libraries, like OpenSSL.")
                 "1j67c35g8334jx7x32hh6awhr43dplp0qwal5gnlkmx09axzrc5i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-asn1-parse" ,ghc-asn1-parse)
-       ("ghc-cryptonite" ,ghc-cryptonite)))
+     (list ghc-memory
+           ghc-hourglass
+           ghc-pem
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-asn1-parse
+           ghc-cryptonite))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X509 reader and writer")
     (description
@@ -502,14 +471,10 @@ libraries, like OpenSSL.")
                 "1y8yyr1i95jkllg8k0z54k5v4vachp848clc07m33xpxidn3b1lp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-x509" ,ghc-x509)))
+     (list ghc-pem ghc-asn1-types ghc-asn1-encoding ghc-cryptonite
+           ghc-x509))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 collection accessing and storing methods")
     (description
@@ -531,19 +496,18 @@ collections, certificates, revocation lists, and exception lists.")
                 "16yihzljql3z8w5rgdl95fv3hgk7yd86kbl9b3glllsark5j2hzr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-hourglass" ,ghc-hourglass)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-pem" ,ghc-pem)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-cryptonite" ,ghc-cryptonite)))
+     (list ghc-memory
+           ghc-byteable
+           ghc-hourglass
+           ghc-data-default-class
+           ghc-pem
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-x509
+           ghc-x509-store
+           ghc-cryptonite))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 certificate and revocation list validation")
     (description
@@ -565,9 +529,7 @@ list validation.")
                 "06a4m9c7vlr9nhp9gmqbb46arf0yj1dkdm4nip03hzy67spdmp20"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-pem" ,ghc-pem)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)))
+     (list ghc-pem ghc-x509 ghc-x509-store))
     (home-page "https://github.com/vincenthz/hs-certificate")
     (synopsis "Handle system X.509 accessors and storage")
     (description
@@ -589,8 +551,7 @@ for X.509 certificates.")
         (base32
          "03qa1i1kj07pfrxsi7fiaqnnd0vi94jd4jfswbmnm4gp1nvzcwr0"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)))
+    (inputs (list ghc-byteable ghc-securemem))
     (home-page "https://github.com/vincenthz/hs-crypto-cipher")
     (synopsis "Generic cryptography cipher types for Haskell")
     (description "This Haskell package provides basic typeclasses and types
@@ -611,13 +572,10 @@ for symmetric ciphers.")
         (base32
          "05ahz6kjq0fl1w66gpiqy0vndli5yx1pbsbw9ni3viwqas4p3cfk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-securemem" ,ghc-securemem)
-              ("ghc-crypto-cipher-types" ,ghc-crypto-cipher-types)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-                     ("ghc-crypto-cipher-tests" ,ghc-crypto-cipher-tests)))
+    (inputs (list ghc-byteable ghc-securemem ghc-crypto-cipher-types))
+    (native-inputs (list ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-quickcheck2
+                         ghc-crypto-cipher-tests))
     (home-page "https://github.com/vincenthz/hs-cipher-aes")
     (synopsis "AES cipher implementation with advanced mode of operations for
 Haskell")
@@ -651,8 +609,7 @@ AES-NI available, or you'll need to use a different implementation.")
         (base32
          "0139kbbb2h7vshf68y3fvjda29lhj7jjwl4vq78w4y8k8hc7l2hp"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-securemem" ,ghc-securemem)
-              ("ghc-vector" ,ghc-vector)))
+    (inputs (list ghc-securemem ghc-vector))
     (home-page "https://github.com/vincenthz/hs-crypto-random")
     (synopsis "Simple cryptographic random related types for Haskell")
     (description "Simple cryptographic random related types: a safe
@@ -673,9 +630,7 @@ abstraction for CPRNGs.")
         (base32
          "1wr15kbmk1g3l8a75n0iwbzqg24ixv78slwzwb2q6rlcvq0jlnb4"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-crypto-random" ,ghc-crypto-random)
-              ("ghc-cipher-aes" ,ghc-cipher-aes)))
+    (inputs (list ghc-byteable ghc-crypto-random ghc-cipher-aes))
     (home-page "https://github.com/vincenthz/hs-cprng-aes")
     (synopsis "Crypto Pseudo Random Number Generator using AES in counter mode
 in Haskell")
@@ -748,22 +703,20 @@ guidelines.")
                 "0j1rxxq5lzs584nk19610mk7mmsqqkgfxw2qj74ibb1zsk7baj4a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-asn1-types" ,ghc-asn1-types)
-       ("ghc-asn1-encoding" ,ghc-asn1-encoding)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-x509-validation" ,ghc-x509-validation)
-       ("ghc-async" ,ghc-async)
-       ("ghc-network" ,ghc-network)
-       ("ghc-hourglass" ,ghc-hourglass)))
+     (list ghc-cereal
+           ghc-data-default-class
+           ghc-memory
+           ghc-cryptonite
+           ghc-asn1-types
+           ghc-asn1-encoding
+           ghc-x509
+           ghc-x509-store
+           ghc-x509-validation
+           ghc-async
+           ghc-network
+           ghc-hourglass))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck))
     (home-page "https://github.com/vincenthz/hs-tls")
     (synopsis
      "TLS/SSL protocol native implementation (Server and Client)")
@@ -793,8 +746,7 @@ extensions.")
     (arguments
      `(#:extra-directories ("openssl")))
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("openssl" ,openssl)))
+     (list ghc-network openssl))
     (home-page "https://github.com/vshabanov/HsOpenSSL")
     (synopsis "Partial OpenSSL binding for Haskell")
     (description "HsOpenSSL is an OpenSSL binding for Haskell.  It can
@@ -822,13 +774,9 @@ implementation of SSL.")
          "10pnnpzgb5xr811kc9qdk7h2cgn6hk2yiyhnzz8f8p0fjzc0pwjm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hsopenssl" ,ghc-hsopenssl)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-hsopenssl ghc-io-streams ghc-network))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://hackage.haskell.org/package/openssl-streams")
     (synopsis "OpenSSL network support for io-streams")
     (description "This library contains io-streams routines for secure
@@ -850,17 +798,15 @@ networking using OpenSSL (by way of HsOpenSSL).")
          "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit
+           ghc-conduit-extra
+           ghc-cryptonite
+           ghc-exceptions
+           ghc-memory
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-conduit-combinators ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz")))
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index 6a6389d5dd..d95b87639c 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -55,7 +55,7 @@
          "1m9sx6gr9y9yxvkmcap8xsks8cnhznvma1mrfl39zljkv005azms"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/tagsoup")
     (synopsis
      "Parsing and extracting information from (possibly malformed) HTML/XML
@@ -84,14 +84,14 @@ for screen-scraping.")
          "10rmdasb7mypbwxdj2mhr810vqhkakpik7hyd8fvj60hng8r8zvh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-old-locale
+           ghc-blaze-builder
+           ghc-data-default-class
+           ghc-hunit
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/snoyberg/cookie")
     (synopsis "HTTP cookie parsing and rendering")
     (description "HTTP cookie parsing and rendering library for Haskell.")
@@ -110,7 +110,7 @@ for screen-scraping.")
                 "0vj4hpaa30jz7c702xpsfvqaqdxz28zslsqnsfx6bf6dpwvck1wh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (home-page "https://hackage.haskell.org/package/curl")
     (synopsis "Haskell bindings for libcurl")
     (description
@@ -132,9 +132,7 @@ This package provides a Haskell binding to libcurl.")
          "19dgdimpzr7pxk7pqvyin6j87gmvnf0rm35gzhmna8qr835wy3sr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network-bsd" ,ghc-network-bsd)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-network-bsd ghc-network-uri ghc-network))
     (home-page "https://hackage.haskell.org/package/httpd-shed")
     (synopsis "Simple web-server with an interact style API")
     (description
@@ -157,13 +155,10 @@ requests, and the library is intended for implementing Ajax APIs.")
          "05j00b9nqmwh9zaq9y9x50k81v2pd3j7a71kd91zlnbl8xk4m2jf"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-doctest ghc-hspec ghc-quickcheck ghc-quickcheck-instances
+           hspec-discover))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)))
+     (list ghc-case-insensitive))
     (home-page "https://github.com/aristidb/http-types")
     (synopsis "Generic HTTP types for Haskell")
     (description "This package provides generic HTTP types for Haskell (for
@@ -185,20 +180,18 @@ both client and server code).")
          "0bgyj3ahqlyg0jw6qsm2sncp8mklc4h0dj91s043vb3ig01iq2fn"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-httpd-shed" ,ghc-httpd-shed)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-httpd-shed ghc-hunit ghc-test-framework
+           ghc-test-framework-hunit))
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-puremd5" ,ghc-puremd5)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-case-insensitive
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-http-types
+           ghc-old-time
+           ghc-puremd5
+           ghc-network
+           ghc-network-uri
+           ghc-split))
     (arguments
      `(#:tests? #f  ; FIXME: currently missing libraries used for tests.
        #:phases
@@ -241,24 +234,24 @@ responses coming back.")
     ;; Tests require access to the web.
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-random" ,ghc-random)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-async
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-cookie
+           ghc-data-default-class
+           ghc-exceptions
+           ghc-http-types
+           ghc-memory
+           ghc-mime-types
+           ghc-monad-control
+           ghc-network
+           ghc-network-uri
+           ghc-random
+           ghc-streaming-commons
+           ghc-zlib))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/snoyberg/http-client")
     (synopsis "HTTP client engine")
     (description
@@ -282,14 +275,14 @@ for more user-friendly packages.")
     ;; Tests require Internet access
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-network" ,ghc-network)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-data-default-class
+           ghc-http-client
+           ghc-connection
+           ghc-network
+           ghc-tls
+           ghc-http-types))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/snoyberg/http-client")
     (synopsis "Backend for http-client using the TLS library")
     (description
@@ -313,12 +306,9 @@ libraries, such as http-conduit.")
          "1lzlrj2flcnz3k5kfhf11nk5n8m6kcya0lkwrsnzxgfr3an27y9j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)))
+     (list ghc-attoparsec))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-doctest ghc-hspec hspec-discover ghc-old-locale))
     (home-page "https://github.com/kazu-yamamoto/http-date")
     (synopsis "HTTP Date parser/formatter")
     (description "Library for Parsing and formatting HTTP
@@ -340,28 +330,28 @@ Date in Haskell.")
          "13c2z35gdimncgpyg5dn5cpjvd83rbrigc8b40crg36678m0k0d1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network-byte-order" ,ghc-network-byte-order)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-run" ,ghc-network-run)
-       ("ghc-psqueues" ,ghc-psqueues)
-       ("ghc-time-manager" ,ghc-time-manager)
-       ("ghc-unix-time" ,ghc-unix-time)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-word8" ,ghc-word8)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-base16-bytestring
+           ghc-case-insensitive
+           ghc-cryptonite
+           ghc-http-types
+           ghc-network-byte-order
+           ghc-network
+           ghc-network-run
+           ghc-psqueues
+           ghc-time-manager
+           ghc-unix-time
+           ghc-unordered-containers
+           ghc-vector
+           ghc-word8))
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-typed-process" ,ghc-typed-process)))
+     (list ghc-async
+           ghc-doctest
+           ghc-glob
+           ghc-hspec
+           hspec-discover
+           ghc-typed-process))
     (home-page "https://github.com/kazu-yamamoto/http2")
     (synopsis "HTTP/2 library including frames, priority queues and HPACK")
     (description "This package provides a HTTP/2.0 library including frames
@@ -387,39 +377,39 @@ and HPACK.  Currently HTTP/2 16 framing and HPACK 10 is supported.")
     ;; name: tcp)
     (arguments `(#:tests? #f))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-unliftio" ,ghc-unliftio)))
+     (list ghc-aeson
+           ghc-resourcet
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-http-types
+           ghc-lifted-base
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-monad-control
+           ghc-exceptions
+           ghc-unliftio))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-warp-tls" ,ghc-warp-tls)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-network" ,ghc-network)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-wai-conduit" ,ghc-wai-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-hunit
+           ghc-hspec
+           ghc-data-default-class
+           ghc-connection
+           ghc-warp-tls
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-utf8-string
+           ghc-case-insensitive
+           ghc-lifted-base
+           ghc-network
+           ghc-wai
+           ghc-warp
+           ghc-wai-conduit
+           ghc-http-types
+           ghc-cookie
+           ghc-conduit-extra
+           ghc-streaming-commons
+           ghc-aeson
+           ghc-temporary
+           ghc-resourcet))
     (home-page "https://hackage.haskell.org/package/http-conduit")
     (synopsis "HTTP/HTTPS client with conduit interface")
     (description "This library uses attoparsec for parsing the actual
@@ -442,23 +432,21 @@ which allow you to avoid direct usage of conduits.")
          "1a6i5njf85b2lhg8m83njagcf09wih5q2irnyb2890s724qr277v"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-network" ,ghc-network)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)))
+     (list ghc-case-insensitive
+           ghc-http-types
+           ghc-word8
+           ghc-blaze-builder
+           ghc-http-client
+           ghc-wai
+           ghc-network
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-wai-logger
+           ghc-resourcet
+           ghc-unliftio
+           ghc-streaming-commons))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-http-conduit" ,ghc-http-conduit)))
+     (list ghc-hspec ghc-warp ghc-http-conduit))
     (home-page
      "https://github.com/fpco/http-reverse-proxy")
     (synopsis
@@ -485,17 +473,14 @@ approach performs full request/response parsing via WAI and http-conduit.")
          "1y19h9v0cq1fl17ywcyyvd6419fhgyw2s0yk0ki8z60021adcx2m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-bytestring-builder
+           ghc-unix-compat
+           ghc-vault
+           ghc-blaze-builder
+           ghc-network
+           ghc-http-types))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-quickcheck ghc-hunit ghc-hspec))
     (home-page "https://hackage.haskell.org/package/wai")
     (synopsis "Web application interface for Haskell")
     (description "This package provides a Web Application Interface (WAI)
@@ -521,16 +506,16 @@ communication between web applications and web servers.")
     (arguments `(#:tests? #f)) ; FIXME: Tests cannot find libraries exported
                                ; by propagated-inputs.
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-byteorder" ,ghc-byteorder)
-       ("ghc-easy-file" ,ghc-easy-file)
-       ("ghc-unix-time" ,ghc-unix-time)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-wai" ,ghc-wai)))
+     (list ghc-auto-update
+           ghc-byteorder
+           ghc-easy-file
+           ghc-unix-time
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-fast-logger
+           ghc-http-types
+           ghc-network
+           ghc-wai))
     (home-page "https://hackage.haskell.org/package/wai-logger")
     (synopsis "Logging system for WAI")
     (description "This package provides the logging system for WAI.")
@@ -552,29 +537,26 @@ communication between web applications and web servers.")
          "1avf7bjcsbs8l6klp5kkd0cd2dc5n0j0a2yf8813pnwfn5b7qyd4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-call-stack" ,ghc-call-stack)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-network" ,ghc-network)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-wai-logger" ,ghc-wai-logger)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-iproute" ,ghc-iproute)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-http2" ,ghc-http2)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-aeson" ,ghc-aeson)))
+     (list ghc-ansi-terminal
+           ghc-base64-bytestring
+           ghc-call-stack
+           ghc-cookie
+           ghc-network
+           ghc-streaming-commons
+           ghc-resourcet
+           ghc-fast-logger
+           ghc-wai-logger
+           ghc-word8
+           ghc-iproute
+           ghc-wai
+           ghc-http-types
+           ghc-http2
+           ghc-case-insensitive
+           ghc-data-default-class
+           ghc-vault
+           ghc-aeson))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list hspec-discover ghc-hspec ghc-hunit ghc-zlib))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Some basic WAI handlers and middleware")
     (description "This library provides basic WAI handlers and middleware
@@ -596,10 +578,7 @@ functionality.")
          "07yn41rn2skd5p3wqqa09wa761vj7ibl8l19gh4bi4i8slxhk417"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)))
+     (list ghc-conduit ghc-http-types ghc-wai ghc-blaze-builder))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Conduit wrappers for Haskell's WAI")
     (description "This package provides data streaming abstraction for
@@ -629,13 +608,13 @@ Haskell's Web Application Interface (WAI).")
        #:cabal-revision
        ("3" "15hg352id2f4x0dnvv47bdiz6gv5hp5a2mki9yzmhc7ajpk31mdd")))
     (native-inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-attoparsec
+           ghc-blaze-builder
+           ghc-hedgehog
+           ghc-tasty
+           ghc-tasty-hedgehog
+           ghc-tasty-hunit
+           ghc-doctest))
     (home-page "https://github.com/sjakobi/bsb-http-chunked")
     (synopsis "Chunked HTTP transfer encoding for bytestring builders")
     (description "This Haskell library contains functions for encoding
@@ -657,35 +636,35 @@ transfers.")
         (base32 "0v54ca3wpa79gdyiikwhbv9h8b5vr3d60piq3ndb2v7s7fi1qpm0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-bsb-http-chunked" ,ghc-bsb-http-chunked)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-iproute" ,ghc-iproute)
-       ("ghc-network" ,ghc-network)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-time-manager" ,ghc-time-manager)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vault" ,ghc-vault)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-word8" ,ghc-word8)
-       ("ghc-http-date" ,ghc-http-date)
-       ("ghc-simple-sendfile" ,ghc-simple-sendfile)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-http2" ,ghc-http2)))
+     (list ghc-async
+           ghc-auto-update
+           ghc-bsb-http-chunked
+           ghc-case-insensitive
+           ghc-hashable
+           ghc-http-types
+           ghc-iproute
+           ghc-network
+           ghc-streaming-commons
+           ghc-time-manager
+           ghc-unix-compat
+           ghc-vault
+           ghc-wai
+           ghc-word8
+           ghc-http-date
+           ghc-simple-sendfile
+           ghc-unliftio
+           ghc-x509
+           ghc-http2))
     (native-inputs
-     `(("curl" ,curl)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-http-client" ,ghc-http-client)
-       ("hspec-discover" ,hspec-discover)))
+     (list curl
+           ghc-silently
+           ghc-hspec
+           ghc-doctest
+           ghc-lifted-base
+           ghc-quickcheck
+           ghc-hunit
+           ghc-http-client
+           hspec-discover))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "HTTP server library for Haskell's WAI")
     (description "Warp is a server library for HTTP/1.x and HTTP/2
@@ -708,10 +687,7 @@ based WAI (Web Application Interface in Haskell).")
           "134kb5nz668f4xrr5g98g7fc1bwb3ri6q433a1i6asjkniwpy85s"))))
   (build-system haskell-build-system)
   (inputs
-    `(("ghc-auto-update" ,ghc-auto-update)
-      ("ghc-clock" ,ghc-clock)
-      ("ghc-psqueues" ,ghc-psqueues)
-      ("ghc-tls" ,ghc-tls)))
+    (list ghc-auto-update ghc-clock ghc-psqueues ghc-tls))
   (home-page "https://hackage.haskell.org/package/tls-session-manager")
   (synopsis "In-memory TLS session manager")
   (description "This Haskell library provides a TLS session manager with
@@ -733,15 +709,15 @@ limitation, automatic pruning, energy saving and replay resistance.")
          "0b9viw26ymzq4q8snfddz3w59sqcf5ankxnw6f99iacxjhk6zs6m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-tls-session-manager" ,ghc-tls-session-manager)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)))
+     (list ghc-cryptonite
+           ghc-data-default-class
+           ghc-network
+           ghc-streaming-commons
+           ghc-tls
+           ghc-tls-session-manager
+           ghc-unliftio
+           ghc-wai
+           ghc-warp))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "SSL/TLS support for Warp")
     (description "This package provides SSL/TLS support for Warp,
@@ -764,23 +740,20 @@ a WAI handler, via the native Haskell TLS implementation.")
          "1b92a41l2var1ccg350mh2bjmb2plb6d79yzvmlwkd41nifmmi44"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-random" ,ghc-random)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-async" ,ghc-async)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-entropy" ,ghc-entropy)))
+     (list ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-network
+           ghc-random
+           ghc-sha
+           ghc-clock
+           ghc-async
+           ghc-streaming-commons
+           ghc-entropy))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://jaspervdj.be/websockets/")
     (synopsis
      "Write WebSocket-capable servers in Haskell")
@@ -817,11 +790,8 @@ See also:
          "0b2xmdsrsqpssyib53wbr6r8hf75789ndyyanv37sv99iyqcwz4i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-websockets" ,ghc-websockets)
-       ("ghc-http-types" ,ghc-http-types)))
+     (list ghc-wai ghc-case-insensitive ghc-network ghc-websockets
+           ghc-http-types))
     (arguments
      `(#:configure-flags '("--flags=-example")))
     (home-page "https://github.com/yesodweb/wai")
@@ -846,14 +816,9 @@ See also:
          "1d72s3a6520iwwc1wbn9v2znqgbw6a5wwzb23iq8ny9ccnjyx1dk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-css-text" ,ghc-css-text)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-tagsoup ghc-utf8-string ghc-css-text ghc-network-uri))
     (native-inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-attoparsec ghc-hspec ghc-hunit))
     (home-page "https://github.com/yesodweb/haskell-xss-sanitize")
     (synopsis "Sanitize untrusted HTML to prevent XSS attacks")
     (description "This library provides @code{sanitizeXSS}.  Run untrusted
@@ -877,9 +842,7 @@ attacks.")
          "0ynd9f4hn2sfwqzbsa0y7phmxq8za7jiblpjwx0ry8b372zhgxaz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-attoparsec ghc-hspec ghc-quickcheck))
     (home-page "https://www.yesodweb.com/")
     (synopsis "CSS parser and renderer")
     (description "This package provides a CSS parser and renderer for
@@ -943,15 +906,14 @@ documents.")
          "09bwrdam3y47kqllgg6w098ghqb8jb10dp4wxirsvx5ddpx9zpi6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)))
+     (list ghc-resourcet
+           ghc-conduit
+           ghc-xml-conduit
+           ghc-xml-types
+           ghc-attoparsec
+           ghc-conduit-extra))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hspec ghc-hunit))
     (home-page "https://github.com/snoyberg/xml")
     (synopsis "Parse HTML documents using xml-conduit datatypes")
     (description
@@ -982,14 +944,10 @@ entity decoding bugfixes applied.")
        #:cabal-revision
        ("1" "0wvlfb3rd9cm3p894p5rl9kggrsr5da3n8x9ydrbagx91yvkxns9")))
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)))
+     (list ghc-blaze-builder ghc-blaze-markup))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "http://jaspervdj.be/blaze")
     (synopsis "Fast HTML combinator library")
     (description "This library provides HTML combinators for Haskell.")
@@ -1016,21 +974,21 @@ entity decoding bugfixes applied.")
        ("2" "1zxkarvmbgc2cpcc9sx1rlqm7nfh473052898ypiwk8azawp1hbj")))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-data-fix" ,ghc-data-fix)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-these" ,ghc-these)
-       ("ghc-time-compat" ,ghc-time-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-attoparsec
+           ghc-base-compat-batteries
+           ghc-data-fix
+           ghc-dlist
+           ghc-hashable
+           ghc-primitive
+           ghc-scientific
+           ghc-strict
+           ghc-tagged
+           ghc-th-abstraction
+           ghc-these
+           ghc-time-compat
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
 ;    (native-inputs
 ;     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
 ;       ("ghc-base-compat" ,ghc-base-compat)
@@ -1066,13 +1024,13 @@ naming: in Greek mythology, Aeson was the father of Jason.)")
                 "021az9az6xik9c9s3rnar5fr1lgy2h3igibf5ixnc7ps3m2lzg2x"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-cmdargs" ,ghc-cmdargs)))
+     (list ghc-aeson
+           ghc-base-compat
+           ghc-scientific
+           ghc-vector
+           ghc-unordered-containers
+           ghc-attoparsec
+           ghc-cmdargs))
     (home-page "https://github.com/informatikr/aeson-pretty")
     (synopsis "JSON pretty-printing library and command-line tool")
     (description
@@ -1098,15 +1056,14 @@ essentially the opposite of pretty-printing.")
                 "0dpklq2xdhrkg1rdc7zfdjnzm6c3qxx2i1xskrqdxpqi84ffnlyh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-haskell-src-meta" ,ghc-haskell-src-meta)))
+     (list ghc-base-compat
+           ghc-attoparsec
+           ghc-scientific
+           ghc-vector
+           ghc-aeson
+           ghc-haskell-src-meta))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/zalora/aeson-qq")
     (synopsis "JSON quasiquoter for Haskell")
     (description
@@ -1131,13 +1088,13 @@ of a JSON value into a @code{Data.Aeson.Value}.")
          "09vkyrhwak3bmpfsqcd2az8hfqqkxyhg468hv5avgisy0nzh3w38"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-void" ,ghc-void)))
+     (list ghc-aeson
+           ghc-unordered-containers
+           ghc-dlist
+           ghc-scientific
+           ghc-vector
+           ghc-transformers-compat
+           ghc-void))
     (home-page
      "https://github.com/hdgarrood/aeson-better-errors")
     (synopsis
@@ -1164,7 +1121,7 @@ good error messages when parsing fails.  See also
          "0p6n4knxpjv70nbl6cmd6x7gkdjsjqp4ya7fz00bfrqp7jvhlivn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stringsearch" ,ghc-stringsearch)))
+     (list ghc-stringsearch))
     (home-page
      "http://www.github.com/silkapp/multipart")
     (synopsis
@@ -1188,8 +1145,7 @@ good error messages when parsing fails.  See also
          "0lj2h701af12539p957rw24bxr07mfqd5r4h52i42f43ax165767"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-utf8-string ghc-network-uri))
     (home-page "https://hackage.haskell.org/package/uri-encode")
     (synopsis "Unicode aware uri-encoding")
     (description "Unicode aware uri-encoding for Haskell.")
@@ -1209,9 +1165,7 @@ good error messages when parsing fails.  See also
         (base32
          "0vx3sivcsld76058925hym2j6hm3g71f0qjr7v59f1g2afgx82q8"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec" ,ghc-hspec)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (native-inputs (list ghc-hunit ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/yesodweb/path-pieces")
     (synopsis "Used in Yesod to automatically marshall data in the request path")
     (description  "This Haskell package provides two typeclasses for converting
@@ -1232,10 +1186,8 @@ Haskell data types to and from route pieces.")
         (base32
          "1jdqdk0rz2wnvw735clnj8jh0a9rkrbqjg7vk3w6wczdql6cm0pq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-crpto-api" ,ghc-crypto-api)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (inputs (list ghc-cereal ghc-tagged ghc-crypto-api))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/yesodweb/path-pieces")
     (synopsis "Skein family of cryptographic hash functions for Haskell")
     (description "@uref{(http://www.skein-hash.info, Skein} is a family of
@@ -1260,19 +1212,17 @@ This Haskell package uses bindings to the optimized C implementation of Skein.")
         (base32
          "0s6h4ykj16mpf7nlw2iqn2ji0p8g1fn5ni0s7yqaili6vv2as5ar"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cereal" ,ghc-cereal)
-              ("ghc-tagged" ,ghc-tagged)
-              ("ghc-crypto-api" ,ghc-crypto-api)
-              ("ghc-skein" ,ghc-skein)
-              ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-              ("ghc-entropy" ,ghc-entropy)
-              ("ghc-cprng-aes" ,ghc-cprng-aes)
-              ("ghc-cipher-aes" ,ghc-cipher-aes)
-              ("ghc-crypto-random" ,ghc-crypto-random)
-              ("ghc-setenv" ,ghc-setenv)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec" ,ghc-hspec)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-cereal
+                  ghc-tagged
+                  ghc-crypto-api
+                  ghc-skein
+                  ghc-base64-bytestring
+                  ghc-entropy
+                  ghc-cprng-aes
+                  ghc-cipher-aes
+                  ghc-crypto-random
+                  ghc-setenv))
+    (native-inputs (list ghc-hunit ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/yesodweb/clientsession/tree/master")
     (synopsis "Haskell library for securely store session data in a
 client-side cookie")
@@ -1295,54 +1245,54 @@ avoid any issues with characters.")
         (base32
          "0wmh7ip318p89lyy6k5mvxkkpq43knp41wlq9iaf3icz0ahqdmb7"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-wai" ,ghc-wai)
-              ("ghc-extra" ,ghc-extra)
-              ("ghc-shakespeare" ,ghc-shakespeare)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-clientsession" ,ghc-clientsession)
-              ("ghc-random" ,ghc-random)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-old-locale" ,ghc-old-locale)
-              ("ghc-unliftio" ,ghc-unliftio)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-cookie" ,ghc-cookie)
-              ("ghc-http-types" ,ghc-http-types)
-              ("ghc-case-insensitive" ,ghc-case-insensitive)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-aeson" ,ghc-aeson)
-              ("ghc-fast-logger" ,ghc-fast-logger)
-              ("ghc-wai-logger" ,ghc-wai-logger)
-              ("ghc-monad-logger" ,ghc-monad-logger)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-rio" ,ghc-rio)
-              ("ghc-lifted-base" ,ghc-lifted-base)
-              ("ghc-blaze-html" ,ghc-blaze-html)
-              ("ghc-blaze-markup" ,ghc-blaze-markup)
-              ("ghc-data-default" ,ghc-data-default)
-              ("ghc-safe" ,ghc-safe)
-              ("ghc-warp" ,ghc-warp)
-              ("ghc-unix-compat" ,ghc-unix-compat)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-exceptions" ,ghc-exceptions)
-              ("ghc-deepseq-generics" ,ghc-deepseq-generics)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-word8" ,ghc-word8)
-              ("ghc-auto-update" ,ghc-auto-update)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-byteable" ,ghc-byteable)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-path-pieces" ,ghc-path-pieces)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-network" ,ghc-network)
-                     ("ghc-async" ,ghc-async)
-                     ("ghc-streaming-commons" ,ghc-streaming-commons)
-                     ("ghc-wai-extra" ,ghc-wai-extra)))
+    (inputs (list ghc-wai
+                  ghc-extra
+                  ghc-shakespeare
+                  ghc-blaze-builder
+                  ghc-clientsession
+                  ghc-random
+                  ghc-cereal
+                  ghc-old-locale
+                  ghc-unliftio
+                  ghc-unordered-containers
+                  ghc-monad-control
+                  ghc-transformers-base
+                  ghc-cookie
+                  ghc-http-types
+                  ghc-case-insensitive
+                  ghc-vector
+                  ghc-aeson
+                  ghc-fast-logger
+                  ghc-wai-logger
+                  ghc-monad-logger
+                  ghc-conduit
+                  ghc-resourcet
+                  ghc-rio
+                  ghc-lifted-base
+                  ghc-blaze-html
+                  ghc-blaze-markup
+                  ghc-data-default
+                  ghc-safe
+                  ghc-warp
+                  ghc-unix-compat
+                  ghc-conduit-extra
+                  ghc-exceptions
+                  ghc-deepseq-generics
+                  ghc-mwc-random
+                  ghc-primitive
+                  ghc-word8
+                  ghc-auto-update
+                  ghc-semigroups
+                  ghc-byteable))
+    (native-inputs (list ghc-hspec
+                         ghc-path-pieces
+                         ghc-hunit
+                         ghc-hspec-expectations
+                         ghc-quickcheck
+                         ghc-network
+                         ghc-async
+                         ghc-streaming-commons
+                         ghc-wai-extra))
     (home-page "https://www.yesodweb.com")
     (synopsis "Core package for the Yesod web framework")
     (description "This Haskell package provides all core functionality, for
@@ -1365,17 +1315,15 @@ functions, widgets, etc.")
          "102xmp7n08sk1g5rv31jpln2v9kqf1zsqsnmi83mnhmgggcbj1k4"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: hspec-discover not available in PATH.
-    (inputs `(("ghc-yesod-core" ,ghc-yesod-core)
-              ("ghc-persistent" ,ghc-persistent)
-              ("ghc-persistent-template" ,ghc-persistent-template)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-resource-pool" ,ghc-resource-pool)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-wai-extra" ,ghc-wai-extra)
-                     ("ghc-yesod-core" ,ghc-yesod-core)
-                     ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)))
+    (inputs (list ghc-yesod-core
+                  ghc-persistent
+                  ghc-persistent-template
+                  ghc-blaze-builder
+                  ghc-conduit
+                  ghc-resourcet
+                  ghc-resource-pool))
+    (native-inputs (list ghc-hspec ghc-wai-extra ghc-yesod-core
+                         ghc-persistent-sqlite))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Helpers for using Persistent from Yesod")
     (description "This Haskell package provides helpers for using Persistent
@@ -1398,24 +1346,24 @@ from Yesod.")
             "170gby381h5pg9njn908cyx2931yiv79x3rc5npg2rd74kif06vi"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-yesod-core" ,ghc-yesod-core)
-        ("ghc-yesod-persistent" ,ghc-yesod-persistent)
-        ("ghc-shakespeare" ,ghc-shakespeare)
-        ("ghc-persistent" ,ghc-persistent)
-        ("ghc-data-default" ,ghc-data-default)
-        ("ghc-xss-sanitize" ,ghc-xss-sanitize)
-        ("ghc-blaze-builder" ,ghc-blaze-builder)
-        ("ghc-email-validate" ,ghc-email-validate)
-        ("ghc-wai" ,ghc-wai)
-        ("ghc-blaze-html" ,ghc-blaze-html)
-        ("ghc-blaze-markup" ,ghc-blaze-markup)
-        ("ghc-attoparsec" ,ghc-attoparsec)
-        ("ghc-byteable" ,ghc-byteable)
-        ("ghc-aeson" ,ghc-aeson)
-        ("ghc-resourcet" ,ghc-resourcet)
-        ("ghc-semigroups" ,ghc-semigroups)
-        ("ghc-network-uri" ,ghc-network-uri)
-        ("ghc-hspec" ,ghc-hspec)))
+      (list ghc-yesod-core
+            ghc-yesod-persistent
+            ghc-shakespeare
+            ghc-persistent
+            ghc-data-default
+            ghc-xss-sanitize
+            ghc-blaze-builder
+            ghc-email-validate
+            ghc-wai
+            ghc-blaze-html
+            ghc-blaze-markup
+            ghc-attoparsec
+            ghc-byteable
+            ghc-aeson
+            ghc-resourcet
+            ghc-semigroups
+            ghc-network-uri
+            ghc-hspec))
     (home-page "https://www.yesodweb.com")
     (synopsis "Form handling support for Yesod Web Framework")
     (description "This Haskell package provides a set of basic form inputs such
@@ -1439,23 +1387,23 @@ providing richtext field using Nic editor. ")
          "13r0ispprj41kgn2rkc7zhy1rxfmgpjbmdlnys15h0ihhh3zhw2f"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-yesod-core" ,ghc-yesod-core)
-       ("ghc-yesod-persistent" ,ghc-yesod-persistent)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-wai-logger" ,ghc-wai-logger)))
+     (list ghc-yesod-core
+           ghc-yesod-persistent
+           ghc-yesod-form
+           ghc-wai
+           ghc-wai-extra
+           ghc-warp
+           ghc-aeson
+           ghc-file-embed
+           ghc-data-default-class
+           ghc-unordered-containers
+           ghc-yaml
+           ghc-monad-logger
+           ghc-fast-logger
+           ghc-conduit
+           ghc-shakespeare
+           ghc-streaming-commons
+           ghc-wai-logger))
     (home-page "https://www.yesodweb.com")
     (synopsis "Framework for creating type-safe, RESTful web applications")
     (description "The Haskell package package groups together the various
@@ -1501,7 +1449,7 @@ supported Unicode version is 7.0.0")
          "0rj48cy8z4fl3zpg5bpa458kqr83adav6jnqv4i71dclpprj6n3v"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)))
+     (list ghc-hxt-charproperties))
     (home-page
      "http://www.fh-wedel.de/~si/HXmlToolbox/index.html https://github.com/UweSchmidt/hxt")
     (synopsis
@@ -1528,8 +1476,7 @@ ignored.")
          "0ynrf65m7abq2fjnarlwq6i1r99pl89npibxx05rlplcgpybrdmr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hxt-charproperties ghc-hunit))
     (home-page "https://wiki.haskell.org/Regular_expressions_for_XML_Schema")
     (synopsis "Regular expression library for W3C XML Schema regular expressions")
     (description
@@ -1555,10 +1502,8 @@ derivations of regular expressions.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-hxt-charproperties" ,ghc-hxt-charproperties)
-       ("ghc-hxt-unicode" ,ghc-hxt-unicode)
-       ("ghc-hxt-regex-xmlschema" ,ghc-hxt-regex-xmlschema)
-       ("ghc-network-uri" ,ghc-network-uri)))
+     (list ghc-hxt-charproperties ghc-hxt-unicode ghc-hxt-regex-xmlschema
+           ghc-network-uri))
     (home-page "https://github.com/UweSchmidt/hxt")
     (synopsis "Collection of tools for processing XML with Haskell")
     (description
@@ -1580,12 +1525,12 @@ introduces a more general approach for processing XML with Haskell.")
          "1xpbnfac0fqa5r670ggwm4kq3cmz9jpaw9bx40j9w9qiw6xi4i28"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-network" ,ghc-network)
-       ("ghc-random" ,ghc-random)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-network
+           ghc-random
+           ghc-unordered-containers))
     (home-page "https://github.com/afcowie/http-streams/")
     (synopsis "Common types for HTTP clients and servers")
     (description "Base types used by a variety of HTTP clients and
@@ -1609,18 +1554,18 @@ pipes-http re-export this package's types and functions.")
          "03xdcb0v735xdrkjlm1w56mskh3x08cbsjrcd7wn4li65ixc20xa"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-hsopenssl" ,ghc-hsopenssl)
-       ("ghc-openssl-streams" ,ghc-openssl-streams)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-http-common" ,ghc-http-common)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-case-insensitive
+           ghc-io-streams
+           ghc-hsopenssl
+           ghc-openssl-streams
+           ghc-unordered-containers
+           ghc-aeson
+           ghc-http-common
+           ghc-network-uri
+           ghc-network))
     (arguments
      `(#:tests? #f)) ; tests rely on an outdated version of snap-server
     (home-page "https://github.com/afcowie/http-streams/")
@@ -1649,31 +1594,31 @@ deal with the result.")
        #:cabal-revision
        ("1" "065v61clskzikywv0gy9n4fjaszi2fnjklal83kqbzhzzgkf83ng")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-random" ,ghc-random)
-       ("ghc-readable" ,ghc-readable)
-       ("ghc-regex-posix" ,ghc-regex-posix)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-old-locale
+           ghc-hunit
+           ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-lifted-base
+           ghc-io-streams
+           ghc-hashable
+           ghc-monad-control
+           ghc-random
+           ghc-readable
+           ghc-regex-posix
+           ghc-transformers-base
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-vector
+           ghc-network-uri
+           ghc-network))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-quickcheck
+           ghc-parallel
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-zlib))
     (home-page "http://snapframework.com/")
     (synopsis "Haskell Web Framework (core interfaces and types)")
     (description "Snap is a simple and fast web development framework
@@ -1696,32 +1641,32 @@ contains the core definitions and types for the Snap framework.")
          "0w4yv9a5ilpma0335ariwap2iscmdbaaif88lq3cm7px910nyc4j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-io-streams-haproxy" ,ghc-io-streams-haproxy)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-snap-core" ,ghc-snap-core)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-attoparsec
+           ghc-blaze-builder
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-clock
+           ghc-io-streams
+           ghc-io-streams-haproxy
+           ghc-lifted-base
+           ghc-network
+           ghc-old-locale
+           ghc-snap-core
+           ghc-unix-compat
+           ghc-vector))
     (native-inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-random" ,ghc-random)
-       ("ghc-threads" ,ghc-threads)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-http-streams" ,ghc-http-streams)
-       ("ghc-http-common" ,ghc-http-common)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-base16-bytestring
+           ghc-monad-control
+           ghc-random
+           ghc-threads
+           ghc-hunit
+           ghc-quickcheck
+           ghc-http-streams
+           ghc-http-common
+           ghc-parallel
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "http://snapframework.com/")
     (synopsis "Web server for the Snap Framework")
     (description "Snap is a simple and fast web development framework
@@ -1775,7 +1720,7 @@ users (e.g. Debian).")
          "0yjyzqh3qzhy5h3nql1fckw0gcfb0f4wj9pm85nafpfqp2kg58hv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-http" ,ghc-http)))
+     (list ghc-http))
     (home-page "https://github.com/ndmitchell/js-flot")
     (synopsis "Obtain minified flot code")
     (description "This package bundles the minified
@@ -1801,29 +1746,27 @@ requirements of downstream users (e.g. Debian).")
          "0nc5rnvrzl9m3pinmdq234m80qkf4jszbdqnd567f7lh09yiqw9n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-network-bsd" ,ghc-network-bsd)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-extensible-exceptions"
-        ,ghc-extensible-exceptions)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-html" ,ghc-html)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-sendfile" ,ghc-sendfile)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-threads" ,ghc-threads)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat"
-        ,ghc-transformers-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-network
+           ghc-network-bsd
+           ghc-network-uri
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-exceptions
+           ghc-extensible-exceptions
+           ghc-hslogger
+           ghc-html
+           ghc-monad-control
+           ghc-old-locale
+           ghc-semigroups
+           ghc-sendfile
+           ghc-system-filepath
+           ghc-syb
+           ghc-threads
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-utf8-string
+           ghc-zlib))
+    (native-inputs (list ghc-hunit))
     (home-page "http://happstack.com")
     (synopsis "Web related tools and services for Haskell")
     (description
@@ -1846,7 +1789,7 @@ cookies, serving files, and more.")
         (base32
          "0988snmx3bylpw3kcq8hsgji8idc6xcrcfp275qjv3apfdgc9rp0"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-network" ,ghc-network)))
+    (inputs (list ghc-network))
     (home-page
      "https://hub.darcs.net/stepcut/sendfile")
     (synopsis "Portable sendfile library for Haskell")
@@ -1869,14 +1812,14 @@ cookies, serving files, and more.")
           "07mjff8aqwabx8yhq8bd7jpnarkkrjqss8h8s2wkfmfj808fllmf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-pointedlist" ,ghc-pointedlist)
-       ("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-data-default
+           ghc-fail
+           ghc-pointedlist
+           ghc-regex-base
+           ghc-regex-tdfa
+           ghc-tagsoup
+           ghc-vector))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/fimad/scalpel")
     (synopsis
      "High level web scraping library for Haskell")
@@ -1901,12 +1844,12 @@ non-Haskell dependencies.")
           "04hhvk0yjxha3yg6n9fxivrz97hpjjiiblnj0bvs5myax1ggkjch"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-scalpel-core" ,ghc-scalpel-core)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-tagsoup" ,ghc-tagsoup)))
+     (list ghc-scalpel-core
+           ghc-case-insensitive
+           ghc-data-default
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-tagsoup))
     (home-page "https://github.com/fimad/scalpel")
     (synopsis
      "High level web scraping library for Haskell")
@@ -1932,10 +1875,8 @@ declarative and monadic interface.")
          "0kz8xpcd5syg5s4qa2qq8ylaxjhabj127w42may46vv6i0q1bf8a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-aeson ghc-unordered-containers ghc-attoparsec
+           ghc-utf8-string))
     (arguments
      `(#:tests? #f ; FIXME: Fail to compile
        #:cabal-revision
@@ -1966,14 +1907,9 @@ proposed by Google and Mozilla here
          "0s6igb54cxm2jywgc3sq53f52gcsc39wd3g78yisfzvl9jm3d86i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-blaze-builder ghc-utf8-string))
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-utf8-light" ,ghc-utf8-light)))
+     (list ghc-alex ghc-quickcheck ghc-happy ghc-hspec ghc-utf8-light))
     (home-page
      "https://github.com/erikd/language-javascript")
     (synopsis "Parser for JavaScript")
@@ -1998,14 +1934,10 @@ as frontend to hjsmin.")
          "0wvygg3rdbxzrmr61a9w6ddv9pfric85ih8hnxyk0ydzn7i59abs"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-better-errors" ,ghc-aeson-better-errors)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-transformers" ,ghc-transformers)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-aeson ghc-aeson-better-errors ghc-scientific
+           ghc-transformers ghc-unordered-containers))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/hdgarrood/bower-json")
     (synopsis "Read bower.json from Haskell")
     (description
@@ -2026,21 +1958,21 @@ Bower's package manifest file, bower.json.")
         (base32 "1isvi4fahq70lzxfz23as7qzkc01g7kba568l6flrgd0j1984fsy"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-hamlet" ,ghc-xml-hamlet)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-case-insensitive
+           ghc-data-default
+           ghc-exceptions
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-lens
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-utf8-string
+           ghc-xml-conduit
+           ghc-xml-hamlet
+           ghc-network
+           ghc-network-uri
+           ghc-optparse-applicative))
     (home-page "http://floss.scru.org/hDAV")
     (synopsis "RFC 4918 WebDAV support")
     (description "This package provides a library for the Web Distributed
@@ -2062,31 +1994,28 @@ Authoring and Versioning (WebDAV) extensions to HTTP as well an executable,
          "1xgy7dzhqjgllqcpyyxs0spdg6vlz2c1sjvni7w7qnsf0ckyw2l8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-cookie" ,ghc-cookie)
-       ("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-html-conduit" ,ghc-html-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-yesod-core" ,ghc-yesod-core)))
+     (list ghc-hunit
+           ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-blaze-html
+           ghc-case-insensitive
+           ghc-conduit
+           ghc-cookie
+           ghc-hspec-core
+           ghc-html-conduit
+           ghc-http-types
+           ghc-network
+           ghc-memory
+           ghc-pretty-show
+           ghc-semigroups
+           ghc-wai
+           ghc-wai-extra
+           ghc-xml-conduit
+           ghc-xml-types
+           ghc-yesod-core))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-yesod-form" ,ghc-yesod-form)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-hspec ghc-yesod-form ghc-unliftio ghc-unliftio-core))
     (home-page "https://www.yesodweb.com")
     (synopsis "Integration testing for WAI/Yesod Applications")
     (description "This package's main goal is to encourage integration
@@ -2111,27 +2040,24 @@ HTML responses using CSS selectors.")
          "138gd5482psq0wbm8s1az672lksi7vbavq6ayiyjkliivf6xpry8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-http-date" ,ghc-http-date)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-warp" ,ghc-warp)))
+     (list ghc-wai
+           ghc-http-types
+           ghc-unix-compat
+           ghc-old-locale
+           ghc-file-embed
+           ghc-cryptonite
+           ghc-memory
+           ghc-http-date
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-mime-types
+           ghc-unordered-containers
+           ghc-zlib
+           ghc-wai-extra
+           ghc-optparse-applicative
+           ghc-warp))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-network" ,ghc-network)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-mockery" ,ghc-mockery)))
+     (list ghc-hspec ghc-network ghc-temporary ghc-mockery))
     (arguments
      `(#:cabal-revision
        ("1" "1q7zwjasysgbp9rdp75535igd7s6mhi2bnl4pzsn6vbyfw3qnsxd")))
@@ -2163,10 +2089,9 @@ helper functions and datatypes for use outside of WAI.")
              (substitute* '("test/test-cli.hs" "test/cli/core/runner")
                (("dist-newstyle") "dist")))))))
     (inputs
-     `(("ghc-language-javascript" ,ghc-language-javascript)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-language-javascript ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-extra" ,ghc-extra)))
+     (list ghc-extra))
     (home-page "https://github.com/erikd/hjsmin")
     (synopsis "Haskell implementation of a JavaScript minifier")
     (description "This library provides tools reduce the size of
@@ -2188,32 +2113,28 @@ syntactic elements, without changing the semantics.")
          "18f5hm9ncvkzl8bkn39cg841z0k5iqs5w45afsyk9y6k98pjd54p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
-       ("ghc-css-text" ,ghc-css-text)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hjsmin" ,ghc-hjsmin)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-mime-types" ,ghc-mime-types)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-app-static" ,ghc-wai-app-static)
-       ("ghc-yesod-core" ,ghc-yesod-core)))
+     (list ghc-async
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-cryptonite
+           ghc-cryptonite-conduit
+           ghc-css-text
+           ghc-data-default
+           ghc-file-embed
+           ghc-hashable
+           ghc-hjsmin
+           ghc-http-types
+           ghc-memory
+           ghc-mime-types
+           ghc-unix-compat
+           ghc-unordered-containers
+           ghc-wai
+           ghc-wai-app-static
+           ghc-yesod-core))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-yesod-test" ,ghc-yesod-test)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-rio" ,ghc-rio)))
+     (list ghc-hspec ghc-yesod-test ghc-wai-extra ghc-hunit ghc-rio))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Static file serving subsite for Yesod")
     (description "This package provides a static file serving subsite
@@ -2235,11 +2156,8 @@ for the Yesod Web Framework.")
          "1ifqgyc1ccig5angh5l1iq7vyms4lvi8wzvysg5dw82nml49n02m"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-wai" ,ghc-wai)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-async" ,ghc-async)))
+     (list ghc-wai ghc-warp ghc-http-types ghc-streaming-commons
+           ghc-async))
     (home-page "https://hackage.haskell.org/package/wai-handler-launch")
     (synopsis "Launch a Web application in the default browser")
     (description "This package handles cross-platform Web browser
@@ -2270,22 +2188,19 @@ server no longer receives pings, it shuts down.")
            (lambda _
              (invoke "runhaskell" "Setup.hs" "test" "unit-tests"))))))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base-unicode-symbols" ,ghc-base-unicode-symbols)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-wai" ,ghc-wai)))
+     (list ghc-attoparsec ghc-base-unicode-symbols ghc-case-insensitive
+           ghc-http-types ghc-wai))
     (native-inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-wai-extra" ,ghc-wai-extra)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)))
+     (list ghc-network
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-wai-extra
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets))
     (home-page "https://github.com/larskuhtz/wai-cors")
     (synopsis "Cross-Origin Resource Sharing (CORS) for WAI")
     (description "This package provides an implementation of Cross-Origin
@@ -2307,7 +2222,7 @@ aims to be compliant with @url{https://www.w3.org/TR/cors}.")
         (sha256
           (base32 "0w3dmwk03j4n01xkiq8m4sqa27bskh239mpw7m4ihjmkxqcwc5gl"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-network" ,ghc-network)))
+    (inputs (list ghc-network))
     (home-page "https://hackage.haskell.org/package/network-run")
     (synopsis "Simple network runner library")
     (description
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index ae077f7400..f5d15bcc2f 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -94,7 +94,7 @@
         (base32
          "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-random" ,ghc-random)))
+    (inputs (list ghc-random))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Abstract, parameterized interface to mutable Deques for Haskell")
     (description "This Haskell package provides an abstract interface to
@@ -154,13 +154,10 @@ module for more details.")
          "019xr66pahsssqr2hybs88mga4qshv1vmd22j7624wqafqm57d74"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-linear" ,ghc-linear)))
+     (list ghc-vector ghc-semigroups ghc-semigroupoids ghc-lens
+           ghc-linear))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/active")
     (synopsis "Abstractions for animation")
     (description "This package defines an @code{Active} abstraction for
@@ -189,20 +186,18 @@ diagrams framework}.")
      `(#:cabal-revision
        ("2" "1yfsjx7dqikg3hvld7i91xfsg5lawmr5980lvfd794sybmgxsf17")))
     (inputs
-     `(("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-free" ,ghc-free)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-profunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-free
+           ghc-tagged
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-transformers-compat
+           ghc-void))
+    (native-inputs
+     (list ghc-generic-deriving ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/adjunctions/")
     (synopsis "Adjunctions and representable functors")
     (description "This library provides adjunctions and representable functors
@@ -223,23 +218,23 @@ for Haskell.")
         (base32
          "0ia3qfdpbrzhwwg4ywpdwca0z1m85k081pcz6jh1sx8qjsvcr71w"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-base-compat" ,ghc-base-compat)
-              ("ghc-aeson" ,ghc-aeson)
-              ("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-attoparsec-iso8601" ,ghc-attoparsec-iso8601)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-scientific" ,ghc-scientific)
-              ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-tagged" ,ghc-tagged)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-base-orphans" ,ghc-base-orphans)))
+    (inputs (list ghc-base-compat
+                  ghc-aeson
+                  ghc-attoparsec
+                  ghc-attoparsec-iso8601
+                  ghc-hashable
+                  ghc-scientific
+                  ghc-time-locale-compat
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-tagged))
+    (native-inputs
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-base-orphans))
     (home-page "https://github.com/phadej/aeson-compat")
     (synopsis "Compatibility layer for ghc-aeson")
     (description "This Haskell package provides compatibility layer for
@@ -260,23 +255,23 @@ ghc-aeson.")
          "18bm4qyjjwgrr6dxc4y0vai0z6qgrh2lcqb4jrr4xqs4cxrlwr92"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-edit-distance-vector" ,ghc-edit-distance-vector)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)
-       ("hlint" ,hlint)))
+     (list ghc-aeson
+           ghc-edit-distance-vector
+           ghc-hashable
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-semigroups
+           ghc-optparse-applicative))
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-glob
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-quickcheck
+           ghc-doctest
+           hlint))
     (home-page "https://github.com/thsutton/aeson-diff")
     (synopsis "Extract and apply patches to JSON documents")
     (description "This is a small library for working with changes to JSON
@@ -309,9 +304,9 @@ systems.")
                                            (getenv "PATH")))
              (setenv "alex_datadir" (string-append (getcwd) "/data"))
              #t)))))
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://www.haskell.org/alex/")
     (synopsis
      "Tool for generating lexical analysers in Haskell")
@@ -340,10 +335,9 @@ tool lex or flex for C/C++.")
     (arguments
      `(#:extra-directories ("alsa-lib")))
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("alsa-lib" ,alsa-lib)))
+     (list ghc-extensible-exceptions alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://wiki.haskell.org/ALSA")
     (synopsis "Binding to the ALSA Library API (Exceptions)")
     (description "This package provides access to ALSA infrastructure, that is
@@ -365,8 +359,8 @@ needed by both alsa-seq and alsa-pcm.")
       (base32
        "00ny2p3276jilidjs44npc8zmbhynz3f2lpmlwwl6swwx5yijsnb"))))
    (build-system haskell-build-system)
-   (inputs `(("ghc-alsa-core" ,ghc-alsa-core)))
-   (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+   (inputs (list ghc-alsa-core))
+   (native-inputs (list ghc-c2hs))
    (home-page "https://github.com/ttuegel/alsa-mixer")
    (synopsis "Bindings to the ALSA simple mixer API")
    (description
@@ -414,7 +408,7 @@ a variety of ways.")
          "14rp62c7y79n9dmmi7m0l9n3mcq6dh331b4yyyrivm5da6g1nqf6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-colour" ,ghc-colour)))
+     (list ghc-colour))
     (home-page "https://github.com/feuerbach/ansi-terminal")
     (synopsis "ANSI terminal support for Haskell")
     (description "This package provides ANSI terminal support for Haskell.  It
@@ -440,7 +434,7 @@ cursor, and changing the title.")
      `(#:cabal-revision
        ("2" "1xrv66v5hqchjhj8a0g3awy1qpsswk2jqb4w4yh3mm1py5s0dlr0")))
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)))
+     (list ghc-ansi-terminal))
     (home-page "https://github.com/ekmett/ansi-wl-pprint")
     (synopsis "Wadler/Leijen Pretty Printer for colored ANSI terminal output")
     (description "This is a pretty printing library based on Wadler's paper
@@ -486,8 +480,7 @@ style.")
          "0kqlizznjy94fm8zr1ng633yxbinjff7cnsiaqs7m33ix338v66q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-bifunctors ghc-tagged))
     (home-page
      "http://hackage.haskell.org/package/assoc")
     (synopsis
@@ -514,11 +507,9 @@ similar operations (e.g. @code{Either}, @code{These}).")
          "09d7w3krfhnmf9dp6yffa9wykinhw541wibnjgnlyv77w1dzhka8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/simonmar/async")
     (synopsis "Library to run IO operations asynchronously")
     (description "Async provides a library to run IO operations
@@ -540,7 +531,7 @@ will eventually deliver a value of type @code{a}.")
         (base32
          "0gidqyk913vhcz3q4vnpadx3vkkrwb66rqhsxvdba8g2p5z63a12"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-primitive" ,ghc-primitive)))
+    (inputs (list ghc-primitive))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Safe approach to CAS and other atomic ops")
     (description
@@ -565,13 +556,9 @@ This library provides a safer method based on the concept of @code{Ticket}s.")
          "1xs3shwnlj8hmnm3q6jc8nv78z0481i5n4hrqqdmbpx8grvlnqyl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-temporary ghc-unix-compat))
     (native-inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-temporary ghc-unix-compat ghc-hspec hspec-discover))
     (home-page "https://github.com/stackbuilders/atomic-write")
     (synopsis "Atomically write to a file")
     (description
@@ -626,13 +613,10 @@ permissions while atomically writing to a file.")
                ((", testProperty \"satisfyWith\" satisfyWith")
                 "")))))))
     (inputs
-     `(("ghc-scientific" ,ghc-scientific)))
+     (list ghc-scientific))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-unicode" ,ghc-quickcheck-unicode)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck
+           ghc-quickcheck-unicode ghc-vector))
     (home-page "https://github.com/bos/attoparsec")
     (synopsis "Fast combinator parsing for bytestrings and text")
     (description "This library provides a fast parser combinator library,
@@ -667,9 +651,7 @@ complicated text/binary file formats.")
     (arguments
      `(#:cabal-revision
        ("2" "18557xy5gvkhj0sb35wwxmhqirkiqrkwm0y0pqygsr0aimccs5zm")))
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-              ("ghc-time-compat" ,ghc-time-compat)))
+    (inputs (list ghc-attoparsec ghc-base-compat-batteries ghc-time-compat))
     (home-page "https://github.com/bos/aeson")
     (synopsis "Parse ISO 8601 dates")
     (description "Haskell library for parsing of ISO 8601 dates, originally
@@ -692,10 +674,7 @@ from aeson.")
          "1i36xc2i34aync8271x3pv515l3zb53i518dybn8ghqkhzf27q7l"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-retry" ,ghc-retry)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-hunit ghc-retry hspec-discover))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Efficiently run periodic, on-demand actions")
     (description "This library provides mechanisms to efficiently run
@@ -727,42 +706,42 @@ periodic, on-demand actions in Haskell.")
                (("(base64-bytestring)\\s+==\\s+1\\.0\\.\\*" all dep)
                 dep)))))))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-bsd" ,ghc-network-bsd)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-errors" ,ghc-errors)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)))
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-base64-bytestring
+           ghc-blaze-builder
+           ghc-byteable
+           ghc-case-insensitive
+           ghc-cereal
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-cryptonite
+           ghc-data-default
+           ghc-http-conduit
+           ghc-http-types
+           ghc-lifted-base
+           ghc-monad-control
+           ghc-network
+           ghc-network-bsd
+           ghc-old-locale
+           ghc-safe
+           ghc-scientific
+           ghc-tagged
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-xml-conduit))
+    (native-inputs
+     (list ghc-quickcheck
+           ghc-errors
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-quickcheck-instances
+           ghc-tasty
+           ghc-tasty-quickcheck
+           ghc-tasty-hunit
+           ghc-conduit-combinators))
     (home-page "https://github.com/aristidb/aws")
     (synopsis "Amazon Web Services for Haskell")
     (description "This package attempts to provide support for using
@@ -786,11 +765,8 @@ Web Services.")
          "1ynnplw8iz3v5ld0xxgpxgasb0hg62x62wxxf5lx6lxyb15hmiy0"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/base16-bytestring")
     (synopsis "Fast base16 (hex) encoding and decoding for ByteStrings")
     (description
@@ -836,9 +812,7 @@ Haskell @code{ByteString}s.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-compat")
     (synopsis "Haskell compiler compatibility library")
     (description "This library provides functions available in later versions
@@ -861,11 +835,9 @@ pragmas in your code.")
          "08rh9nlm9ir28fm42xim06ga8qwdqdcvkbb5ckz99bwnmajndq1i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-base-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-compat-batteries")
     (synopsis "base-compat with extra batteries")
     (description "This library provides functions available in later
@@ -913,9 +885,7 @@ packages.")
          "1lw1jhrrsdq7x9wr2bwkxq9mscidcad0n30kh9gfk8kgifl5xh9k"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/base-orphans")
     (synopsis "Orphan instances for backwards compatibility")
     (description "This package defines orphan instances that mimic instances
@@ -999,10 +969,7 @@ stand for certain ASCII character sequences, i.e. → instead of @code{->},
          "0yckmnvm6i4vw0mykj4fzl4ldsf67v8d2h0vp1bakyj84n4myx8h"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable ghc-unordered-containers ghc-vector))
     (home-page "https://github.com/snoyberg/basic-prelude#readme")
     (synopsis "Enhanced core prelude; a common foundation for alternate preludes")
     (description
@@ -1037,10 +1004,9 @@ wishing to create a new prelude should use CorePrelude.")
         (base32 "0znv0y3b3zm5jvhlvj5f5s7y93db67j9yd59w1bnrw2pqv30gqaq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/bencode")
     (synopsis "Parsers and printers for bencoded data")
     (description
@@ -1065,16 +1031,14 @@ storing and transmitting loosely structured data.")
          "070964w7gz578379lyj6xvdbcf367csmz22cryarjr5bz9r9csrb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-base-orphans
+           ghc-comonad
+           ghc-th-abstraction
+           ghc-transformers-compat
+           ghc-tagged
+           ghc-semigroups))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec hspec-discover ghc-quickcheck))
     (home-page "https://github.com/ekmett/bifunctors/")
     (synopsis "Bifunctors for Haskell")
     (description "This package provides bifunctors for Haskell.")
@@ -1142,15 +1106,14 @@ functions.")
          "0rxg6vjr0ji6g1nngrqpl4k1q9w66fwkhld9cqm5yfhx0a69kp1c"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-bytestring-builder ghc-semigroups))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-utf8-string))
     (home-page "https://github.com/lpsmith/blaze-builder")
     (synopsis "Efficient buffered output")
     (description "This library provides an implementation of the older
@@ -1183,13 +1146,10 @@ interoperate with code that uses the new implementation.")
                (("tasty            >= 1\\.0  && < 1\\.1")
                 "tasty            >= 1.0  && < 1.2")))))))
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)))
+     (list ghc-blaze-builder))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://jaspervdj.be/blaze")
     (synopsis "Fast markup combinator library for Haskell")
     (description "This library provides core modules of a markup combinator
@@ -1210,10 +1170,8 @@ library for Haskell.")
          "03vrmncg1c10a2wcg5skq30m1yiknn7nwxz2gblyyfaxglshspkc"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-random ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/bloomfilter")
     (synopsis "Pure and impure Bloom filter implementations")
     (description "This package provides both mutable and immutable Bloom
@@ -1234,8 +1192,7 @@ interface.")
         (base32 "1hsnmw95i58d4bkpxby3ddsj1cawypw4mdyb18m393s5i8p7iq9q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-split" ,ghc-split)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-split ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/boxes")
     (synopsis "2D text pretty-printing library")
     (description
@@ -1303,13 +1260,13 @@ system.")
       (base32
        "1qmps8vvg98wfm9xm734hwzi56bsk8r1zc6vx20rlhc79krv5s9s"))))
    (build-system haskell-build-system)
-   (inputs `(("ghc-binary-orphans" ,ghc-binary-orphans)
-             ("ghc-cereal" ,ghc-cereal)
-             ("ghc-hashable" ,ghc-hashable)
-             ("ghc-scientific" ,ghc-scientific)
-             ("ghc-transformers-compat" ,ghc-transformers-compat)
-             ("ghc-unordered-containers" ,ghc-unordered-containers)
-             ("ghc-void" ,ghc-void)))
+   (inputs (list ghc-binary-orphans
+                 ghc-cereal
+                 ghc-hashable
+                 ghc-scientific
+                 ghc-transformers-compat
+                 ghc-unordered-containers
+                 ghc-void))
    (synopsis "Serialization between @code{binary} and @code{cereal}")
    (description "This package provides a simple compatibility shim that lets
 you work with both @code{binary} and @code{cereal} with one chunk of
@@ -1357,11 +1314,8 @@ Compatibility package for older packages.")
      `(#:cabal-revision
        ("2" "1x1sy3dz2ph9v6jk22wmcv5gk2bka5fv4s68i8q0j9m9pk085w37")))
     (inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://hub.darcs.net/ganesh/bytestring-handle")
     (synopsis "ByteString-backed Handles")
     (description "ByteString-backed Handles") ; There is no description
@@ -1382,9 +1336,7 @@ Compatibility package for older packages.")
          "1p7i2haix4m11an3djaq65cnd293hzwqy4cd2i8jxzcl248pk6iy"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-smallcheck))
     (home-page "http://code.haskell.org/~wren/")
     (synopsis "Parse and produce literals from strict or lazy bytestrings")
     (description
@@ -1406,13 +1358,10 @@ from strict or lazy bytestrings.")
          "0a21zin5plsl37hkxh2jv8cxwyjrbs2fy7n5cyrzgdaa7lmp6b7b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bindings-dsl" ,ghc-bindings-dsl)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-bindings-dsl ghc-conduit ghc-data-default-class
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-hspec ghc-random))
     (home-page "https://github.com/snoyberg/bzlib-conduit")
     (synopsis "Streaming compression/decompression via conduits")
     (description
@@ -1436,13 +1385,10 @@ streaming compression and decompression.")
          "0k482wv94jbpwd96a2c2lc7qz9k8072slx7l7943472nzk7k41ir"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-language-c" ,ghc-language-c)
-       ("ghc-dlist" ,ghc-dlist)))
+     (list ghc-language-c ghc-dlist))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-shelly" ,ghc-shelly)))
+     (list ghc-test-framework ghc-test-framework-hunit ghc-hunit
+           ghc-shelly))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1494,11 +1440,9 @@ imported with the correct Haskell types.")
          "1hpkyhrlg1d24s34kq6d379z8l8fvznm98wpq37haqjma4nl25hk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-utf8-string" ,ghc-utf8-string)
-       ("cairo" ,cairo)))
+     (list ghc-utf8-string cairo))
     (native-inputs
-     `(("ghc-gtk2hs-buildtools" ,ghc-gtk2hs-buildtools)
-       ("pkg-config" ,pkg-config)))
+     (list ghc-gtk2hs-buildtools pkg-config))
     (home-page "http://projects.haskell.org/gtk2hs/")
     (synopsis "Haskell bindings to the Cairo vector graphics library")
     (description
@@ -1521,7 +1465,7 @@ documents, amongst others.")
         (base32
          "0ski7ihdxah7x4x07qgkjljg8hzqs9d6aa5k4cmr40bzp3i8s3mq"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-nanospec" ,ghc-nanospec)))
+    (native-inputs (list ghc-nanospec))
     (home-page "https://github.com/sol/call-stack#readme")
     (synopsis "Use GHC call-stacks in a backward compatible way")
     (description "This package provides a compatibility layer for using GHC
@@ -1555,7 +1499,7 @@ call stacks with different versions of the compiler.")
     (build-system haskell-build-system)
     ;; these inputs are necessary to use this library
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (arguments
      `(#:tests? #f)) ; FIXME: currently missing libraries used for tests.
     (home-page
@@ -1584,21 +1528,21 @@ the resulting type will be insensitive to cases.")
          "01h1zrdqb313cjd4rqm1107azzx4czqi018c2djf66a5i7ajl3dk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-only" ,ghc-only)
-       ("ghc-text-short" ,ghc-text-short)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)))
+     (list ghc-attoparsec
+           ghc-hashable
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-only
+           ghc-text-short
+           ghc-bytestring-builder))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (arguments
      `(#:cabal-revision
        ("4"
@@ -1666,13 +1610,9 @@ very simple example of encoding CSV data:
          "0pg9z38jmrylbj683b6pf7psipp7lrdq6mn1hbj8v2gj5lh8yf8n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cassava" ,ghc-cassava)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-cassava ghc-megaparsec ghc-unordered-containers ghc-vector))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-megaparsec" ,ghc-hspec-megaparsec)))
+     (list ghc-hspec ghc-hspec-megaparsec))
     (home-page "https://github.com/stackbuilders/cassava-megaparsec")
     (synopsis "Megaparsec parser for CSV files that plays nicely with Cassava")
     (description
@@ -1696,19 +1636,18 @@ provides for better error messages at the expense of some speed.")
          "08da498bpbnl5c919m45mjm7sr78nn6qs7xyl0smfgd06wwm65xf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-half" ,ghc-half)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-half ghc-primitive))
     (native-inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson
+           ghc-base64-bytestring
+           ghc-base16-bytestring
+           ghc-fail
+           ghc-quickcheck
+           ghc-scientific
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-vector))
     (home-page "http://hackage.haskell.org/package/cborg")
     (synopsis "Concise Binary Object Representation")
     (description
@@ -1746,12 +1685,12 @@ command-line utility for working with CBOR data.")
      `(#:cabal-revision
        ("3" "1sn2f9nfjcbr0n62n4kklbdi3pzpwrcy7ilg7m3v41nwrk53ifwy")))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-cborg" ,ghc-cborg)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-unordered-containers
+           ghc-scientific
+           ghc-vector
+           ghc-cborg))
     (home-page "https://github.com/well-typed/cborg")
     (synopsis "A library for encoding JSON as CBOR")
     (description
@@ -1775,10 +1714,8 @@ defined in the CBOR specification, RFC 7049.")
          "1mqvd1iwzr50az4y24332x3g3wsrzw8j1iwph02vr7jbjfn8i7id"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-fail ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/cereal")
     (synopsis "Binary serialization library")
     (description "This package provides a binary serialization library,
@@ -1801,11 +1738,9 @@ parser isolation, and labeled blocks for better error messages.")
          "1srr7agvgfw78q5s1npjq5sgynvhjgllpihiv37ylkwqm4c4ap6r"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-cereal" ,ghc-cereal)))
+     (list ghc-conduit ghc-resourcet ghc-cereal))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Turn Data.Serialize Gets and Puts into Sources, Sinks, and Conduits")
     (description
@@ -1829,13 +1764,9 @@ parser isolation, and labeled blocks for better error messages.")
          "09wvp9vkqasns4flw9z46nhcy96r4qxjv6h47d5f90drz77pmm8a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-multipart" ,ghc-multipart)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-exceptions ghc-multipart ghc-network-uri ghc-network))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-doctest ghc-quickcheck))
     (home-page
      "https://github.com/cheecheeo/haskell-cgi")
     (synopsis "Library for writing CGI programs")
@@ -1859,8 +1790,7 @@ parser isolation, and labeled blocks for better error messages.")
          "1rw6y2insgljbi5l1nwqwv9v865sswjly9rvwipd8zajkgks7aks"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-semigroups ghc-unordered-containers))
     (home-page "https://github.com/ekmett/charset")
     (synopsis "Fast unicode character sets for Haskell")
     (description "This package provides fast unicode character sets for
@@ -1884,12 +1814,12 @@ Haskell, based on complemented PATRICIA tries.")
      `(#:cabal-revision
        ("2" "04mmsm54mdqcrypvgawhhbwjscmky3j7g5841bc71c0q6d33h2k4")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-operational" ,ghc-operational)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-old-locale
+           ghc-lens
+           ghc-colour
+           ghc-data-default-class
+           ghc-operational
+           ghc-vector))
     (home-page "https://github.com/timbod7/haskell-chart/wiki")
     (synopsis "Library for generating 2D charts and plots")
     (description
@@ -1914,14 +1844,14 @@ backends provided by the @code{Cairo} and @code{Diagrams} libraries.")
      `(#:cabal-revision
        ("2" "0z93znn3dpgj80iiz3a67m90x0j9ljr0jd1ws9jkzj7rk88014gp")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-cairo" ,ghc-cairo)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-operational" ,ghc-operational)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-chart" ,ghc-chart)
-       ("zlib" ,zlib)))
+     (list ghc-old-locale
+           ghc-cairo
+           ghc-colour
+           ghc-data-default-class
+           ghc-operational
+           ghc-lens
+           ghc-chart
+           zlib))
     (home-page "https://github.com/timbod7/haskell-chart/wiki")
     (synopsis "Cairo backend for Charts")
     (description "This package provides a Cairo vector graphics rendering
@@ -1942,9 +1872,7 @@ backend for the Charts library.")
          "1flr56hd8ny0ddlv1agi0ikdjv5wgx0aba6xqdsn3nv6dyw9nbf3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-quickcheck ghc-random ghc-syb))
     (home-page "https://hackage.haskell.org/package/ChasingBottoms")
     (synopsis "Testing of partial and infinite values in Haskell")
     (description
@@ -1974,11 +1902,8 @@ Partial and Infinite Values\"}.")
          "17n6laihqrjn62l8qw4565nf77zkvrl68bjmc3vzr4ckqfblhdzd"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-xss-sanitize" ,ghc-xss-sanitize)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-uniplate" ,ghc-uniplate)))
+     (list ghc-blaze-html ghc-xss-sanitize ghc-data-default ghc-syb
+           ghc-uniplate))
     (home-page "https://github.com/jgm/cheapskate")
     (synopsis "Experimental markdown processor")
     (description "Cheapskate is an experimental Markdown processor in pure
@@ -2006,10 +1931,8 @@ cross-site scripting (@dfn{XSS}) attacks.")
      `(#:cabal-revision
        ("1" "1q93wrw03ix4cmnkz3lzkixcvvizw6i2ia2zifdfak1dvxnblxk0")))
     (inputs
-     `(("ghc-options-bootstrap" ,ghc-options-bootstrap)
-       ("ghc-patience" ,ghc-patience)
-       ("ghc-random" ,ghc-random)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)))
+     (list ghc-options-bootstrap ghc-patience ghc-random
+           ghc-ansi-terminal))
     (home-page "https://john-millikin.com/software/chell/")
     (synopsis "Simple and intuitive library for automated testing")
     (description
@@ -2042,10 +1965,8 @@ testing strategies.")
                (("QuickCheck >= 2\\.3 && < 2\\.13")
                 "QuickCheck >= 2.3 && < 2.15")))))))
     (inputs
-     `(("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck-bootstrap" ,ghc-chell-quickcheck-bootstrap)
-       ("ghc-random" ,ghc-random)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-chell ghc-chell-quickcheck-bootstrap ghc-random
+           ghc-quickcheck))
     (home-page "https://john-millikin.com/software/chell/")
     (synopsis "QuickCheck support for the Chell testing library")
     (description "More complex tests for @code{chell}.")
@@ -2097,8 +2018,7 @@ testing strategies.")
         (base32
          "16m7y7fwrirbjbqqcsfmr4yxa9qvfax6r7pw0zl9ky71ms0wa47p"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-vector" ,ghc-vector)
-              ("ghc-semigroups" ,ghc-semigroups)))
+    (inputs (list ghc-vector ghc-semigroups))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Typeclasses for dealing with various chunked data
 representations for Haskell")
@@ -2121,8 +2041,7 @@ classy-prelude.")
         (base32 "0qg4ljwmw28vvxjzr4sknh8220abjcx2b0sq3ljqprh3qw8b2p8b"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/clock")
     (synopsis "High-resolution clock for Haskell")
     (description "A package for convenient access to high-resolution clock and
@@ -2154,7 +2073,7 @@ timer functions of different operating systems via a unified API.")
                 "1p41z6z8dqxk62287lvhhg4ayy9laai9ljh4azsnzb029v6mbv0d"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Fast, accurate CommonMark (Markdown) parser and renderer")
     (description
@@ -2179,7 +2098,7 @@ sources, and does not require prior installation of the C library.")
          "1skzdg1icmhn0zrkhbnba4200ymah8sd5msk4qfgawrk77zilw7f"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/kivikakk/cmark-gfm-hs")
     (synopsis
      "Fast, accurate GitHub Flavored Markdown parser and renderer")
@@ -2275,10 +2194,8 @@ supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
          "04rxycp2pbkrvhjgpgx08jmsipjz4cdmhv59dbp47k4jq8ndyv7g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-distributive" ,ghc-distributive)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-indexed-traversable" ,ghc-indexed-traversable)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-distributive ghc-tagged ghc-indexed-traversable
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/comonad/")
     (synopsis "Comonads for Haskell")
     (description "This library provides @code{Comonad}s for Haskell.")
@@ -2324,13 +2241,10 @@ postfix notation.  For more information on stack based languages, see
      ;; XXX: The ReadWriteLock 'stressTest' fails.
      `(#:tests? #f))
     (inputs
-     `(("ghc-unbounded-delays" ,ghc-unbounded-delays)))
+     (list ghc-unbounded-delays))
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-async ghc-hunit ghc-random ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/basvandijk/concurrent-extra")
     (synopsis "Extra concurrency primitives")
     (description "This Haskell library offers (among other things) the
@@ -2373,10 +2287,7 @@ Python.")
          "081wpag1d5znr0ynrjvkc14xl816m88vz9hgfm3g3sp6ak7s3y47"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-terminal-size" ,ghc-terminal-size)))
+     (list ghc-async ghc-exceptions ghc-ansi-terminal ghc-terminal-size))
     (home-page
      "https://hackage.haskell.org/package/concurrent-output")
     (synopsis
@@ -2404,22 +2315,19 @@ concurrent threads.  Can be used for progress displays etc.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-mono-traversable" ,ghc-mono-traversable)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-exceptions
+           ghc-lifted-base
+           ghc-mono-traversable
+           ghc-mmorph
+           ghc-resourcet
+           ghc-silently
+           ghc-transformers-base
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-vector
+           ghc-void))
+    (native-inputs
+     (list ghc-quickcheck ghc-hspec ghc-safe ghc-split))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Streaming data library ")
     (description
@@ -2445,26 +2353,24 @@ space as enumerator/iteratee and pipes.")
          "0c1jwz30kkvimx7lb61782yk0kyfamrf5bqc3g1h7g51lk8bbv9i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-bzlib-conduit" ,ghc-bzlib-conduit)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-conduit-zstd" ,ghc-conduit-zstd)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-lzma-conduit" ,ghc-lzma-conduit)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-pqueue" ,ghc-pqueue)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-stm-conduit" ,ghc-stm-conduit)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list ghc-async
+           ghc-bzlib-conduit
+           ghc-conduit
+           ghc-conduit-combinators
+           ghc-conduit-extra
+           ghc-conduit-zstd
+           ghc-exceptions
+           ghc-lzma-conduit
+           ghc-monad-control
+           ghc-pqueue
+           ghc-resourcet
+           ghc-stm-conduit
+           ghc-streaming-commons
+           ghc-unliftio-core
+           ghc-vector))
+    (native-inputs
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-th))
     (home-page "https://github.com/luispedro/conduit-algorithms#readme")
     (synopsis "Conduit-based algorithms")
     (description
@@ -2486,24 +2392,21 @@ level asynchronous processing and some other utilities.")
         (base32
          "1lz70vwp4y4lpsivxl0cshq7aq3968rh48r6rjvpyaj2l0bdj5wp"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-conduit" ,ghc-conduit)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-void" ,ghc-void)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-unix-compat" ,ghc-unix-compat)
-              ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-              ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-chunked-data" ,ghc-chunked-data)
-              ("ghc-mono-traversable" ,ghc-mono-traversable)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-silently" ,ghc-silently)
-                     ("ghc-safe" ,ghc-safe)
-                     ("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-conduit
+                  ghc-conduit-extra
+                  ghc-transformers-base
+                  ghc-primitive
+                  ghc-vector
+                  ghc-void
+                  ghc-mwc-random
+                  ghc-unix-compat
+                  ghc-base16-bytestring
+                  ghc-base64-bytestring
+                  ghc-resourcet
+                  ghc-monad-control
+                  ghc-chunked-data
+                  ghc-mono-traversable))
+    (native-inputs (list ghc-hspec ghc-silently ghc-safe ghc-quickcheck))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Commonly used conduit functions, for both chunked and
 unchunked data")
@@ -2526,23 +2429,23 @@ as well as a convenient Conduit module.")
          "1n8js1y1rdswvp0bkjmmz19fag19bdxgwsrqz93yc09w43p8sr4a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-typed-process" ,ghc-typed-process)
-       ("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
-    (native-inputs
-     `(("hspec-discover" ,hspec-discover)))
+     (list ghc-conduit
+           ghc-exceptions
+           ghc-monad-control
+           ghc-transformers-base
+           ghc-typed-process
+           ghc-async
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-network
+           ghc-primitive
+           ghc-resourcet
+           ghc-streaming-commons
+           ghc-hspec
+           ghc-bytestring-builder
+           ghc-quickcheck))
+    (native-inputs
+     (list hspec-discover))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Conduit adapters for common libraries")
     (description
@@ -2567,14 +2470,10 @@ dependencies.  The basic idea is that this package should only depend on
          "0f0ir4zs3skw33c8mfppxhfsyqh1c2cnc4gkf8bvv3bdiikdj1yl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-zstd" ,ghc-zstd)))
+     (list ghc-conduit ghc-zstd))
     (native-inputs
-     `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-conduit-combinators ghc-conduit-extra
+           ghc-quickcheck-instances ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/luispedro/conduit-zstd#readme")
     (synopsis "Conduit-based ZStd Compression")
     (description "Zstandard compression packaged as a conduit.  This is
@@ -2602,13 +2501,9 @@ interface}.")
        #:cabal-revision
        ("2" "0iwraaa0y1b3xdsg760j1wpylkqshky0k2djcg0k4s97lrwqpbcz")))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-ini" ,ghc-ini)
-       ("ghc-microlens" ,ghc-microlens)))
+     (list ghc-doctest ghc-hedgehog ghc-ini ghc-microlens))
     (inputs
-     `(("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-megaparsec ghc-unordered-containers))
     (home-page "https://github.com/aisamanra/config-ini")
     (synopsis "Monadic Haskell DSL for parsing simple INI configuration files")
     (description
@@ -2636,14 +2531,10 @@ human-readable error messages when things go wrong.")
          "1d1iq1knwiq6ia5g64rw5hqm6dakz912qj13r89737rfcxmrkfbf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-hashable ghc-unix-compat
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/bos/configurator")
     (synopsis "Configuration management")
     (description
@@ -2677,15 +2568,15 @@ and daemons.  The features include:
                 "1nbmafhlg0wy4aa3p7amjddbamdz6avzrxn4py3lvhrjqn4raxax"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-byteable" ,ghc-byteable)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-tls" ,ghc-tls)
-       ("ghc-socks" ,ghc-socks)
-       ("ghc-x509" ,ghc-x509)
-       ("ghc-x509-store" ,ghc-x509-store)
-       ("ghc-x509-system" ,ghc-x509-system)
-       ("ghc-x509-validation" ,ghc-x509-validation)))
+     (list ghc-byteable
+           ghc-data-default-class
+           ghc-network
+           ghc-tls
+           ghc-socks
+           ghc-x509
+           ghc-x509-store
+           ghc-x509-system
+           ghc-x509-validation))
     (home-page "https://github.com/vincenthz/hs-connection")
     (synopsis "Simple and easy network connections API")
     (description
@@ -2709,13 +2600,10 @@ the choice of SSL/TLS, and SOCKS.")
          "143558jykvya7y8134dx30g6nh27q5s61nbq369p69igd1aayncj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-type-equality" ,ghc-type-equality)))
+     (list ghc-hashable ghc-semigroups ghc-transformers-compat
+           ghc-type-equality))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/constraints/")
     (synopsis "Constraint manipulation")
     (description
@@ -2740,10 +2628,7 @@ a vocabulary for working with them.")
          "1ynz89vfn7czxpa203zmdqknkvpylzzl9rlkpasx1anph1jxcbq6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-void" ,ghc-void)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-void ghc-transformers-compat ghc-statevar ghc-semigroups))
     (home-page
      "https://github.com/ekmett/contravariant/")
     (synopsis "Contravariant functors")
@@ -2765,8 +2650,7 @@ a vocabulary for working with them.")
          "0ikwzg0992j870yp0x2ssf4mv2hw2nml979apg493m72xnvr1jz9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-template-haskell-compat-v0208" ,ghc-template-haskell-compat-v0208)))
+     (list ghc-contravariant ghc-template-haskell-compat-v0208))
     (home-page "https://github.com/nikita-volkov/contravariant-extras")
     (synopsis "Extras for the @code{ghc-contravariant} Haskell package")
     (description "This Haskell package provides extras for the
@@ -2817,8 +2701,7 @@ Free Monads, MPC'08}
          "0v18ap1mccnndgxmbfgyjdicg8jlss01bd5fq8a576dr0h4sgyg9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-time ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/convertible")
     (synopsis "Typeclasses and instances for converting between types")
     (description
@@ -2894,7 +2777,7 @@ manipulating fields of records.")
        (sha256
         (base32 "0yp030vafbpddl27m606aibbbr5ar5j5bsv4bksscz3cq4yq5j10"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-data-accessor" ,ghc-data-accessor)))
+    (inputs (list ghc-data-accessor))
     (home-page "https://wiki.haskell.org/Record_access")
     (synopsis "Use Accessor to access state in transformers State monad")
     (description "This package provides Haskell modules to allow use of
@@ -2914,7 +2797,7 @@ Accessor to access state in transformers State monad.")
         (base32 "1mwfhnmvi3vicyjzl33m6pcipi2v887zazyqxygq258ndd010s9m"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "13hg7a3d4ky8b765dl03ryxg28lq8iaqj5ky3j51r0i1i4f2a9hy")))
@@ -2942,16 +2825,10 @@ observed.")
         (base32 "04d5n8ybmcxba9qb6h389w9zfq1lvj81b82jh6maqp6pkhkmvydh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class"
-        ,ghc-data-default-class)
-       ("ghc-data-default-instances-base"
-        ,ghc-data-default-instances-base)
-       ("ghc-data-default-instances-containers"
-        ,ghc-data-default-instances-containers)
-       ("ghc-data-default-instances-dlist"
-        ,ghc-data-default-instances-dlist)
-       ("ghc-data-default-instances-old-locale"
-        ,ghc-data-default-instances-old-locale)))
+     (list ghc-data-default-class ghc-data-default-instances-base
+           ghc-data-default-instances-containers
+           ghc-data-default-instances-dlist
+           ghc-data-default-instances-old-locale))
     (home-page "https://hackage.haskell.org/package/data-default")
     (synopsis "Types with default values")
     (description
@@ -2994,7 +2871,7 @@ packages.")
         (base32 "0ym1sw3ssdzzifxxhh76qlv8kkmb2iclc158incv1dklyr9y8kw4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)))
+     (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-base")
     (synopsis "Default instances for types in base")
     (description
@@ -3017,7 +2894,7 @@ package.")
         (base32 "06h8xka031w752a7cjlzghvr8adqbl95xj9z5zc1b62w02phfpm5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)))
+     (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-containers")
     (synopsis "Default instances for types in containers")
     (description "Provides default instances for types from the containers
@@ -3039,8 +2916,7 @@ package.")
         (base32 "0narkdqiprhgayjiawrr4390h4rq4pl2pb6mvixbv2phrc8kfs3x"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-dlist" ,ghc-dlist)))
+     (list ghc-data-default-class ghc-dlist))
     (home-page "https://hackage.haskell.org/package/data-default-instances-dlist")
     (synopsis "Default instances for types in dlist")
     (description "Provides default instances for types from the dlist
@@ -3062,8 +2938,7 @@ package.")
           (base32 "00h81i5phib741yj517p8mbnc48myvfj8axzsw44k34m48lv1lv0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-data-default-class ghc-old-locale))
     (home-page
       "https://hackage.haskell.org/package/data-default-instances-old-locale")
     (synopsis "Default instances for types in old-locale")
@@ -3084,7 +2959,7 @@ package.")
        (sha256
         (base32 "1k0rcbb6dzv0ggdxqa2bh4jr829y0bczjrg98mrk5733q0xjs5rs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hashable" ,ghc-hashable)))
+    (inputs (list ghc-hashable))
     (home-page "https://github.com/spell-music/data-fix")
     (synopsis "Fixpoint data types")
     (description
@@ -3107,9 +2982,8 @@ Thanks for contribution to: Matej Kollar, Herbert Valerio Riedel")
         (base32 "1ghbqvc48gf9p8wiy71hdpaj7by3b9cw6wgwi3qqz8iw054xs5wi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/data-hash")
     (synopsis "Combinators for building fast hashing functions")
     (description
@@ -3153,24 +3027,24 @@ It includes hashing functions for all basic Haskell98 types.")
             "0iyfnkxcnm1vl379ry88fqxgn2y8q6ilsvpic6ciassnyv5pcbrv"))))
     (build-system haskell-build-system)
     (inputs
-      `(("ghc-cereal" ,ghc-cereal)
-        ("ghc-conduit" ,ghc-conduit)
-        ("ghc-exceptions" ,ghc-exceptions)
-        ("ghc-lens" ,ghc-lens)
-        ("ghc-network" ,ghc-network)
-        ("ghc-random" ,ghc-random)
-        ("ghc-split" ,ghc-split)
-        ("ghc-th-lift" ,ghc-th-lift)
-        ("ghc-vector" ,ghc-vector)
-        ("ghc-xml-conduit" ,ghc-xml-conduit)
-        ("ghc-xml-types" ,ghc-xml-types)))
-    (native-inputs
-      `(("ghc-extra" ,ghc-extra)
-        ("ghc-quickcheck" ,ghc-quickcheck)
-        ("ghc-resourcet" ,ghc-resourcet)
-        ("ghc-tasty" ,ghc-tasty)
-        ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+      (list ghc-cereal
+            ghc-conduit
+            ghc-exceptions
+            ghc-lens
+            ghc-network
+            ghc-random
+            ghc-split
+            ghc-th-lift
+            ghc-vector
+            ghc-xml-conduit
+            ghc-xml-types))
+    (native-inputs
+      (list ghc-extra
+            ghc-quickcheck
+            ghc-resourcet
+            ghc-tasty
+            ghc-tasty-hunit
+            ghc-tasty-quickcheck))
     ;; FIXME - Some tests try to talk to network.
     (arguments `(#:tests? #f))
     (home-page "https://github.com/rblaze/haskell-dbus")
@@ -3202,11 +3076,8 @@ interfaces common to foreign bindings.")
          "19w7i9f0lbiyzwa0v3bm95233vi7f1688f0xms6cnjsf88h04ym3"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2 ghc-test-framework-hunit))
     (home-page "https://github.com/PaulJohnson/Haskell-Decimal")
     (synopsis "Decimal numbers with variable precision")
     (description
@@ -3232,9 +3103,7 @@ value.")
      `(#:cabal-revision
        ("6" "1qwnpdjsrqzn18pjmvv9aqz3l12fbdcimf62wkj33yfh69rx4s42")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/hvr/deepseq-generics")
     (synopsis "Generic RNF implementation")
     (description
@@ -3258,15 +3127,14 @@ providing an @code{rnf} implementation.")
          "1m7jjxahqxj7ilic3r9806mwp5rnnsmn8vvipkmk40xl65wplxzp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)))
+     (list ghc-math-functions
+           ghc-primitive
+           ghc-vector
+           ghc-vector-algorithms
+           ghc-vector-th-unbox
+           ghc-vector-binary-instances))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/dense-linear-algebra")
     (synopsis "Simple and incomplete implementation of linear algebra")
     (description "This library is simply a collection of linear-algebra
@@ -3289,13 +3157,9 @@ related modules split from the statistics library.")
          "0y5693zm2kvqjilybbmrcv1g6n6x2p6zjgi0k0axjw1sdhh1g237"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson ghc-bifunctors ghc-scientific ghc-vector))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hunit ghc-hspec))
     (home-page
      "https://github.com/chrisdone/descriptive")
     (synopsis
@@ -3319,15 +3183,15 @@ and parsers with useful semantics.")
          "0y3smp3hiyfdirdak3j4048cgqv7a5q9p2jb6z8na2llys5mrmdn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-dual-tree" ,ghc-dual-tree)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-profunctors" ,ghc-profunctors)))
+     (list ghc-unordered-containers
+           ghc-semigroups
+           ghc-monoid-extras
+           ghc-dual-tree
+           ghc-lens
+           ghc-linear
+           ghc-adjunctions
+           ghc-distributive
+           ghc-profunctors))
     (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
     (synopsis "Core libraries for diagrams embedded domain-specific language")
     (description "This package provides the core modules underlying
@@ -3349,34 +3213,32 @@ declarative drawing.")
          "09np7kj8si8kcb854f95a0cq392mgbxif8lnazbpfsa1k87d9vzy"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-dual-tree" ,ghc-dual-tree)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-solve" ,ghc-diagrams-solve)
-       ("ghc-active" ,ghc-active)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-intervals" ,ghc-intervals)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-cereal" ,ghc-cereal)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-numeric-extras" ,ghc-numeric-extras)))
+     (list ghc-semigroups
+           ghc-monoid-extras
+           ghc-dual-tree
+           ghc-diagrams-core
+           ghc-diagrams-solve
+           ghc-active
+           ghc-colour
+           ghc-data-default-class
+           ghc-fingertree
+           ghc-intervals
+           ghc-lens
+           ghc-tagged
+           ghc-optparse-applicative
+           ghc-juicypixels
+           ghc-hashable
+           ghc-linear
+           ghc-adjunctions
+           ghc-distributive
+           ghc-fsnotify
+           ghc-unordered-containers
+           ghc-profunctors
+           ghc-exceptions
+           ghc-cereal))
+    (native-inputs
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-numeric-extras))
     (arguments
      `(#:cabal-revision
        ("1" "1c7kpnbvxwdcmk5znqyig3l6s986ppj168ck5v72dfbp8cjvwa8i")))
@@ -3404,9 +3266,7 @@ primitives and operations for creating diagrams.")
          "09qqwcvbvd3a0j5fnp40dbzw0i3py9c7kgizj2aawajwbyjvpd17"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "0dp61igq17l7hvhs3167skdi1vmlm773qrrmsqmj08951l4cgv0h")))
@@ -3434,18 +3294,18 @@ and cyclic tridiagonal linear systems.")
          "1ysv6cz0fngrndl4wjmw4hrdj2rik5fxa1dkxzwnlgf1xwpvxgk8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-diagrams-core" ,ghc-diagrams-core)
-       ("ghc-diagrams-lib" ,ghc-diagrams-lib)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)
-       ("ghc-svg-builder" ,ghc-svg-builder)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-split" ,ghc-split)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-base64-bytestring
+           ghc-colour
+           ghc-diagrams-core
+           ghc-diagrams-lib
+           ghc-monoid-extras
+           ghc-svg-builder
+           ghc-juicypixels
+           ghc-split
+           ghc-lens
+           ghc-hashable
+           ghc-optparse-applicative
+           ghc-semigroups))
     (arguments
      `(#:cabal-revision
        ("4" "0irjf0g1barr06fy409r0ld2hypihrhh6n80ig3487xxny6gfzs0")))
@@ -3492,9 +3352,8 @@ members are shared.")
                 "1is9y5rlqyxacnj6kbi6h9laym5shp699r0hkj5p9d6qi84sr43j"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://hub.darcs.net/sterlingclover/Diff")
     (synopsis "O(ND) diff algorithm in Haskell")
     (description
@@ -3538,16 +3397,10 @@ disk space usage.")
          "14bb66qyfn43bj688igfvnfjw7iycjf4n2k38sm8rxbqw2916dfp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-tagged" ,ghc-tagged)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)))
+     (list ghc-tagged ghc-base-orphans ghc-transformers-compat
+           ghc-semigroups ghc-generic-deriving))
     (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list cabal-doctest ghc-doctest ghc-hspec hspec-discover))
     (home-page "https://github.com/ekmett/distributive/")
     (synopsis "Distributive functors for Haskell")
     (description "This package provides distributive functors for Haskell.
@@ -3569,7 +3422,7 @@ Dual to @code{Traversable}.")
         (base32 "0581a60xw4gw7pmqlmg5w2hr4hm9yjgx4c2z6v63y5xv51rn6g8p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/spl/dlist")
     (synopsis "Difference lists")
     (description
@@ -3593,20 +3446,17 @@ Writer monad), where list append quickly becomes too expensive.")
          "048h8ka849h1f0xxwkasjbrrwq03rfz2m7aqg5xc5286kp02w9ns"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-doclayout" ,ghc-doclayout)
-       ("ghc-hsyaml" ,ghc-hsyaml)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-text-conversions" ,ghc-text-conversions)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson
+           ghc-doclayout
+           ghc-hsyaml
+           ghc-safe
+           ghc-scientific
+           ghc-text-conversions
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-glob" ,ghc-glob)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-glob ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+           ghc-temporary))
     (home-page "https://github.com/jgm/doctemplates#readme")
     (synopsis "Pandoc-style document templates")
     (description
@@ -3630,18 +3480,15 @@ Writer monad), where list append quickly becomes too expensive.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f))          ; FIXME: missing test framework
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-code-page" ,ghc-code-page)
-       ("ghc-paths" ,ghc-paths)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-base-compat ghc-code-page ghc-paths ghc-syb))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-setenv" ,ghc-setenv)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-hspec
+           ghc-mockery
+           ghc-setenv
+           ghc-silently
+           ghc-stringbuilder))
     (home-page
      "https://github.com/sol/doctest#readme")
     (synopsis "Test interactive Haskell examples")
@@ -3689,10 +3536,8 @@ monadic interface for building graphs.")
          "0sx2kc1gw72mjvd8vph8bbjw5whfxfv92rsdhjg1c0al75rf3ka4"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/double-conversion")
     (synopsis "Fast conversion between double precision floating point and text")
     (description
@@ -3718,9 +3563,7 @@ between double precision floating point and text.")
        #:cabal-revision
        ("1" "1babd7ybsgk73x57yl35q0n1i7mbbqmv4am710kq1hzg3in4g9dv")))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-newtype-generics" ,ghc-newtype-generics)
-       ("ghc-monoid-extras" ,ghc-monoid-extras)))
+     (list ghc-semigroups ghc-newtype-generics ghc-monoid-extras))
 ;    (native-inputs
 ;     `(("ghc-quickcheck" ,ghc-quickcheck)
 ;       ("ghc-testing-feat" ,ghc-testing-feat)))
@@ -3767,7 +3610,7 @@ diagrams framework}, but potentially has other applications as well.")
        (sha256
         (base32 "18kndgvdj2apjpfga6fp7m16y1gx8zrwp3c5vfj03sx4v6jvciqk"))))
     (build-system haskell-build-system)
-    (propagated-inputs `(("gnuplot" ,gnuplot)))
+    (propagated-inputs (list gnuplot))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-setup-suffix
@@ -3821,10 +3664,8 @@ MinTTY and other consoles.")
        #:cabal-revision
        ("1" "1vjn4ryzdilz7l1ad7czh11nw48h5mj8if7ij3q0mmc3sffa8csd")))
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-random ghc-test-framework ghc-quickcheck
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/phadej/edit-distance")
     (synopsis "Levenshtein and restricted Damerau-Levenshtein edit distances")
     (description
@@ -3848,10 +3689,9 @@ Damerau-Levenshtein algorithms.")
          "07qgc8dyi9kkzkd3xcd78wdlljy0xwhz65b4r2qg2piidpcdvpxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-quickcheck ghc-quickcheck-instances))
     (home-page "https://github.com/thsutton/edit-distance-vector")
     (synopsis "Calculate edit distances and edit scripts between vectors")
     (description "This package provides implementation of the
@@ -3894,9 +3734,8 @@ but is otherwise agnostic to:
               ("ghc-semigroupoids" ,ghc-semigroupoids)
               ("ghc-transformers-base" ,ghc-transformers-base)))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/ekmett/either")
     (synopsis "Provides an either monad transformer for Haskell")
     (description "This Haskell package provides an either monad transformer.")
@@ -3919,10 +3758,7 @@ but is otherwise agnostic to:
          "0n67wss6k8lhwfkybkhsa04bbdfdv541sacbxlylkx2hqpj5r5gh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-attoparsec ghc-hspec ghc-quickcheck ghc-doctest))
     (home-page
      "https://github.com/Porges/email-validate-hs")
     (synopsis "Email address validator for Haskell")
@@ -3948,13 +3784,10 @@ address string against RFC 5322.")
     ;; "thread blocked indefinitely in an MVar operation"
     (arguments '(#:tests? #f))
     (inputs
-     `(("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-async" ,ghc-async)
-       ("ghc-transformers-base" ,ghc-transformers-base)))
+     (list ghc-lifted-base ghc-monad-control ghc-async
+           ghc-transformers-base))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://github.com/jcristovao/enclosed-exceptions")
     (synopsis "Catch all exceptions from within an enclosed computation")
     (description
@@ -3976,10 +3809,8 @@ asynchronous exceptions.")
         (base32 "167njzd1cf32aa7br90rjafrxy6hw3fxkk8awifqbxjrcwm5maqp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stmonadtrans" ,ghc-stmonadtrans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-stmonadtrans ghc-transformers-compat ghc-fail
+           ghc-quickcheck))
     (home-page "https://github.com/pa-ba/equivalence")
     (synopsis "Maintaining an equivalence relation implemented as union-find")
     (description
@@ -4026,11 +3857,9 @@ Double.")
          "0hqw82m8bbrxy5vgdwb83bhzdx070ibqrm9rshyja7cb808ahijm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/errorcall-eq-instance")
     (synopsis "Orphan Eq instance for ErrorCall")
     (description
@@ -4053,10 +3882,8 @@ This package provides an orphan instance.")
          "0x8znwn31qcx6kqx99wp7bc86kckfb39ncz3zxvj1s07kxlfawk7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unexceptionalio" ,ghc-unexceptionalio)
-       ("ghc-safe" ,ghc-safe)))
+     (list ghc-exceptions ghc-transformers-compat ghc-unexceptionalio
+           ghc-safe))
     (home-page "https://github.com/gabriel439/haskell-errors-library")
     (synopsis "Error handling library for Haskell")
     (description "This library encourages an error-handling style that
@@ -4079,28 +3906,28 @@ directly uses the type system, rather than out-of-band exceptions.")
     (arguments
      `(#:tests? #f))  ; TODO: Cannot connect to mysql server.
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-mysql" ,ghc-mysql)
-       ("ghc-mysql-simple" ,ghc-mysql-simple)
-       ("ghc-persistent-mysql" ,ghc-persistent-mysql)
-       ("ghc-persistent-postgresql" ,ghc-persistent-postgresql)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-postgresql-simple" ,ghc-postgresql-simple)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-html
+           ghc-conduit
+           ghc-monad-logger
+           ghc-persistent
+           ghc-resourcet
+           ghc-tagged
+           ghc-unliftio
+           ghc-unordered-containers
+           openssl
+           zlib))
+    (native-inputs
+     (list ghc-hspec-core
+           ghc-hspec
+           ghc-mysql
+           ghc-mysql-simple
+           ghc-persistent-mysql
+           ghc-persistent-postgresql
+           ghc-persistent-sqlite
+           ghc-postgresql-simple
+           ghc-quickcheck))
     (home-page "https://github.com/bitemyapp/esqueleto")
     (synopsis "Type-safe embedded domain specific language for SQL queries")
     (description "This library provides a type-safe embedded domain specific
@@ -4125,14 +3952,9 @@ generated SQL and optimize it for your backend.")
          "0a6baza962d4pz2m02hxmh8234i47zkizmwhsy68namr05dmlgpw"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-paths" ,ghc-paths)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-free" ,ghc-free)))
+     (list ghc-paths ghc-syb ghc-free))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-filemanip" ,ghc-filemanip)))
+     (list ghc-hunit ghc-diff ghc-silently ghc-filemanip))
     (home-page
      "https://hackage.haskell.org/package/ghc-exactprint")
     (synopsis "ExactPrint for GHC")
@@ -4161,12 +3983,10 @@ excluding @file{.lhs} files.")
      `(#:cabal-revision
        ("2" "1154g0dqil2xf4wc1v6gndzhnbf5saf2dzf77c6lcjxssx360m6j")))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://github.com/ekmett/exceptions/")
     (synopsis "Extensible optionally-pure exceptions")
     (description "This library provides extensible optionally-pure exceptions
@@ -4231,10 +4051,8 @@ versions of GHC (i.e., < 6.10).")
          "17fzmxwrv0w7inhq7kia36prc2nsx845r9v56sihqvr17fk2cvpn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-clock" ,ghc-clock)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-clock ghc-semigroups ghc-quickcheck
+           ghc-quickcheck-instances))
     (home-page "https://github.com/ndmitchell/extra")
     (synopsis "Extra Haskell functions")
     (description "This library provides extra functions for the standard
@@ -4284,13 +4102,9 @@ when used with GHC versions which already provide the
          "1mbnah6n8lig494523czcd95dfn01f438qai9pf20wpa2gdbz4x6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)
-       ("ghc-easy-file" ,ghc-easy-file)
-       ("ghc-unix-time" ,ghc-unix-time)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-auto-update ghc-easy-file ghc-unix-time ghc-unix-compat))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-hspec))
     (home-page "https://hackage.haskell.org/package/fast-logger")
     (synopsis "Fast logging system")
     (description "This library provides a fast logging system for Haskell.")
@@ -4311,22 +4125,22 @@ when used with GHC versions which already provide the
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Fail.
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml-types" ,ghc-xml-types)))
-    (native-inputs
-     `(("ghc-doctest-driver-gen" ,ghc-doctest-driver-gen)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-markdown-unlit" ,ghc-markdown-unlit)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-base-compat
+           ghc-old-locale
+           ghc-old-time
+           ghc-safe
+           ghc-time-locale-compat
+           ghc-utf8-string
+           ghc-xml-conduit
+           ghc-xml-types))
+    (native-inputs
+     (list ghc-doctest-driver-gen
+           ghc-doctest
+           ghc-hunit
+           ghc-markdown-unlit
+           ghc-syb
+           ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/bergmark/feed")
     (synopsis "Haskell package for handling various syndication formats")
     (description "This Haskell package includes tools for generating and
@@ -4360,8 +4174,7 @@ consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
                (("hspec >= 2\\.1 && < 2\\.7")
                 "hspec >= 2.1 && < 2.8")))))))
     (inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://web.engr.oregonstate.edu/~erwig/fgl/haskell")
     (synopsis
      "Martin Erwig's Functional Graph Library")
@@ -4386,9 +4199,7 @@ encourages inductive, recursive definitions of graph algorithms.")
          "1mykbd1r43gpsn10ys8q3nr0i4wnhn6wq23hcici18mxxji11wkc"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-fgl" ,ghc-fgl)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-fgl ghc-quickcheck ghc-hspec))
     (home-page "https://hackage.haskell.org/package/fgl-arbitrary")
     (synopsis "QuickCheck support for fgl")
     (description
@@ -4432,7 +4243,7 @@ embedded in your Haskell code.")
                 "0ilqr8jv41zxcj5qyicg29m8s30b9v70x6f9h2h2rw5ap8bxldl8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unix-compat" ,ghc-unix-compat)))
+     (list ghc-unix-compat))
     (home-page "https://github.com/bos/filemanip")
     (synopsis "File and directory manipulation for Haskell")
     (description
@@ -4456,7 +4267,7 @@ file contents, and more.")
          "0qrrvbjpjsk75ghqrdqzwqg7wjgm3rr9kk7p04ax98ilv90pm0ip"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/filepath-bytestring")
     (synopsis "Library for manipulating RawFilePaths in a cross-platform way")
     (description "This package provides a drop-in replacement for the standard
@@ -4502,11 +4313,8 @@ an executable.")
          "0zvandj8fysck7ygpn0dw5bhrhmj1s63i326nalxbfkh2ls4iacm"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://hackage.haskell.org/package/fingertree")
     (synopsis "Generic finger-tree structure")
     (description "This library provides finger trees, a general sequence
@@ -4595,17 +4403,17 @@ completely unverified though.")
          "0zf4yljh3s2ddxa7dhzdglmylj14kfldhkclc44g37zvjq6kcnag"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-comonad" ,ghc-comonad)
-              ("ghc-contravariant" ,ghc-contravariant)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-profunctors" ,ghc-profunctors)
-              ("ghc-random" ,ghc-random)
-              ("ghc-semigroupoids" ,ghc-semigroupoids)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-vector" ,ghc-vector)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+    (inputs (list ghc-comonad
+                  ghc-contravariant
+                  ghc-hashable
+                  ghc-primitive
+                  ghc-profunctors
+                  ghc-random
+                  ghc-semigroupoids
+                  ghc-semigroups
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-doctest))
     (home-page "https://github.com/Gabriel439/Haskell-Foldl-Library")
     (synopsis "Composable, streaming, and efficient left folds for Haskell")
     (description "This Haskell library provides strict left folds that stream
@@ -4638,7 +4446,7 @@ and are often as efficient as hand-written folds.")
                ((", testDividible proxy") ""))
              #t)))))
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-basement" ,ghc-basement)))
+    (inputs (list ghc-basement))
     (home-page "https://github.com/haskell-foundation/foundation")
     (synopsis "Alternative prelude with batteries and no dependencies")
     (description
@@ -4676,16 +4484,16 @@ Foundation has the following goals:
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-prelude-extras" ,ghc-prelude-extras)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-prelude-extras
+           ghc-profunctors
+           ghc-exceptions
+           ghc-bifunctors
+           ghc-comonad
+           ghc-distributive
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-transformers-base
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/free/")
     (synopsis "Unrestricted monads for Haskell")
     (description "This library provides free monads, which are useful for many
@@ -4711,14 +4519,14 @@ definition of @code{Monad}.")
                 "19bdbz9wb9jvln6yg6qm0hz0w84bypvkxf0wjhgrgd52f9gidlny"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-random" ,ghc-random)
-       ("ghc-shelly" ,ghc-shelly)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-async
+           ghc-unix-compat
+           ghc-hinotify
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-random
+           ghc-shelly
+           ghc-temporary))
     (home-page "https://github.com/haskell-fswatch/hfsnotify")
     (synopsis "Cross platform library for file change notification.")
     (description "Cross platform library for file creation, modification, and
@@ -4743,10 +4551,9 @@ specific Windows, Mac, and Linux file system event notification.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-th-abstraction))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/generic-deriving")
     (synopsis "Generalise the deriving mechanism to arbitrary classes")
     (description "This package provides functionality for generalising the
@@ -4766,9 +4573,9 @@ deriving mechanism in Haskell to arbitrary classes.")
        (sha256
         (base32 "130lmblycxnpqbsl7vf6a90zccibnvcb5zaclfajcn3by39007lv"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (inputs (list ghc-quickcheck))
     (native-inputs
-     `(("ghc-inspection-testing" ,ghc-inspection-testing)))
+     (list ghc-inspection-testing))
     (arguments
      `(#:cabal-revision
        ("1" "1d0hx41r7yq2a86ydnfh2fv540ah8cz05l071s2z4wxcjw0ymyn4")))
@@ -4823,8 +4630,7 @@ and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-sop-core" ,ghc-sop-core)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-sop-core ghc-th-abstraction))
     (home-page "https://github.com/well-typed/generics-sop")
     (synopsis "Generic Programming using True Sums of Products for Haskell")
     (description "This Haskell package supports the definition of generic
@@ -4870,12 +4676,9 @@ geniplate} package, written by Lennart Augustsson.")
          "16bd5dx0ngc8z7mij23i2l3a8v3c112x8ksd623alik18zx7pi8j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-validity" ,ghc-validity)))
+     (list ghc-quickcheck ghc-validity))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-hspec-core" ,ghc-hspec-core)))
+     (list ghc-hspec hspec-discover ghc-hspec-core))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis
@@ -4902,13 +4705,13 @@ with the @code{Validity} typeclass.")
          "0cvzc4z4771vpycwfgcj0yswyglzl6cl1h2wrfhs224nrcmk5a7z"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-genvalidity" ,ghc-genvalidity)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-validity" ,ghc-validity)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-quickcheck
+           ghc-genvalidity
+           ghc-hspec
+           hspec-discover
+           ghc-pretty-show
+           ghc-validity))
+    (native-inputs (list ghc-doctest))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis
@@ -4933,16 +4736,9 @@ properties for functions operating on them.")
          "1rszkcn1rg38wf35538ljk5bbqjc57y9sb3a0al7qxm82gy8yigr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-generics-sop" ,ghc-generics-sop)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-base-compat ghc-base-orphans ghc-generics-sop ghc-tagged))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-silently" ,ghc-silently)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec ghc-safe ghc-silently hspec-discover))
     (home-page "https://github.com/soenkehahn/getopt-generics")
     (synopsis "Create command line interfaces with ease")
     (description "This library provides tools to create command line
@@ -4961,7 +4757,7 @@ interfaces with ease.")
        (sha256
         (base32 "0cl3lfm6k1h8fxp2vxa6ihfp4v8igkz9h35iwyq2frzm4kdn96d8"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-base-compat" ,ghc-base-compat)))
+    (inputs (list ghc-base-compat))
     (home-page "https://github.com/acfoltzer/gitrev")
     (synopsis "Compile git revision info into Haskell projects")
     (description
@@ -4986,15 +4782,10 @@ info for more informative bug reports.")
          "05fknrb114qvfzv6324ngx0fz43cwgrhrc700l3h2is9jinlgr6a"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-dlist" ,ghc-dlist)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-dlist ghc-semigroups ghc-transformers-compat))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "http://iki.fi/matti.niemenmaa/glob/")
     (synopsis "Haskell library matching glob patterns against file paths")
     (description "This package provides a Haskell library for @dfn{globbing}:
@@ -5017,7 +4808,7 @@ matching patterns against file paths.")
          "1i2xi35n5z0d372px9mh6cyhgg1m0cfaiy3fnspkf6kbn9fgsqxq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-openglraw" ,ghc-openglraw)))
+     (list ghc-openglraw))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Raw Haskell bindings GLU")
     (description "GLURaw is a raw Haskell binding for the GLU 1.3 OpenGL
@@ -5041,10 +4832,7 @@ basis for a nicer interface.")
          "0vdkfj4wjzigdpzgr5l001y9wkhwgl00mclr26gf93kps14fkymn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-statevar" ,ghc-statevar)
-       ("ghc-opengl" ,ghc-opengl)
-       ("ghc-openglraw" ,ghc-openglraw)
-       ("freeglut" ,freeglut)))
+     (list ghc-statevar ghc-opengl ghc-openglraw freeglut))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Haskell bindings for the OpenGL Utility Toolkit")
     (description "This library provides Haskell bindings for the OpenGL
@@ -5066,12 +4854,12 @@ programs.")
         (base32 "1rfq94lnsyjr8y9p5r56jpllv3p8rvh9xxzjji016b6r5adi8cnb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-data-accessor-transformers" ,ghc-data-accessor-transformers)
-       ("ghc-data-accessor" ,ghc-data-accessor)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("gnuplot" ,gnuplot)))
+     (list ghc-temporary
+           ghc-utility-ht
+           ghc-data-accessor-transformers
+           ghc-data-accessor
+           ghc-semigroups
+           gnuplot))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5100,18 +4888,15 @@ programs.")
                 "0l0zxgb938hh09qirggbaskq79mgj3s081cnr42y5vm1rp1jir2s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-colour" ,ghc-colour)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-fgl" ,ghc-fgl)
-       ("ghc-polyparse" ,ghc-polyparse)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-wl-pprint-text" ,ghc-wl-pprint-text)))
+     (list ghc-colour
+           ghc-dlist
+           ghc-fgl
+           ghc-polyparse
+           ghc-temporary
+           ghc-wl-pprint-text))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("graphviz" ,graphviz)
-       ("ghc-fgl-arbitrary" ,ghc-fgl-arbitrary)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec graphviz ghc-fgl-arbitrary ghc-quickcheck
+           hspec-discover))
     (home-page "https://hackage.haskell.org/package/graphviz")
     (synopsis "Bindings to Graphviz for graph visualisation")
     (description
@@ -5166,11 +4951,9 @@ monoid with invertibility.")
          "102x753jbc90lfm9s0ng5kvm0risqwpar331xwsd752as0bms142"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-hashtables" ,ghc-hashtables)))
+     (list ghc-random ghc-hashtables))
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-alex ghc-happy))
     (home-page "http://projects.haskell.org/gtk2hs/")
     (synopsis "Tools to build the Gtk2Hs suite of user interface libraries")
     (description
@@ -5201,24 +4984,24 @@ tools are not needed to actually run Gtk2Hs programs.")
        ("8" "1xpzcdpfz0agbv75sadsylq6r8pq7zr0pyzbzrz0nz130yixsv5f")
        #:tests? #f)) ; Tests fail because of framework updates.
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cryptohash-sha256" ,ghc-cryptohash-sha256)
-       ("ghc-ed25519" ,ghc-ed25519)
-       ("ghc-lukko" ,ghc-lukko)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-base16-bytestring
+           ghc-base64-bytestring
+           ghc-cryptohash-sha256
+           ghc-ed25519
+           ghc-lukko
+           ghc-network
+           ghc-network-uri
+           ghc-tar
+           ghc-zlib))
+    (native-inputs
+     (list ghc-aeson
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-temporary
+           ghc-unordered-containers
+           ghc-vector))
     (home-page "https://github.com/haskell/hackage-security")
     (synopsis "Hackage security library")
     (description "This Hackage security library provides both server and
@@ -5254,7 +5037,7 @@ Tor project}.")
              (setenv "PATH" (string-append (getcwd) "/dist/build/haddock"
                                            ":" (getenv "PATH")))
              #t)))))
-    (inputs `(("ghc-haddock-api" ,ghc-haddock-api)))
+    (inputs (list ghc-haddock-api))
 ;    (native-inputs
 ;     `(("ghc-haddock-test" ,ghc-haddock-test)
 ;       ("ghc-hspec" ,ghc-hspec)))
@@ -5281,12 +5064,9 @@ Tor project}.")
          "1jj2csi85nlywsyvnbwhclfdz27j2kyfbhrl9cm7av0243br9vg1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-paths" ,ghc-paths)
-       ("ghc-haddock-library" ,ghc-haddock-library)))
+     (list ghc-paths ghc-haddock-library))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis "API for documentation-generation tool Haddock")
     (description "This package provides an API to Haddock, the
@@ -5310,12 +5090,12 @@ documentation-generation tool for Haskell libraries.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: optparse-applicative ==0.15.*, tree-diff ==0.1.*
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tree-diff" ,ghc-tree-diff)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat
+           ghc-hspec
+           ghc-optparse-applicative
+           ghc-quickcheck
+           ghc-tree-diff
+           hspec-discover))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis "Library exposing some functionality of Haddock")
     (description
@@ -5374,9 +5154,8 @@ the ‘haddock’ package.")
          "1l8m2spqg0ac50qys2jk5b32v6wxklbbk5ypjp3ga6z14hkw7bz2"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-quickcheck2
+           ghc-quickcheck))
     (home-page "https://github.com/ekmett/half")
     (synopsis "Half-precision floating-point computations")
     (description "This library provides a half-precision floating-point
@@ -5435,11 +5214,8 @@ Happy works in a similar way to the yacc tool for C.")
        #:cabal-revision
        ("2" "16va8hx4ynw0n5s2warhs13ilj7hrs5fcdn140h1fiix480as36n")))
     (native-inputs
-     `(("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2 ghc-hunit ghc-quickcheck))
     (home-page "https://github.com/tibbe/hashable")
     (synopsis "Class for types that can be converted to a hash value")
     (description
@@ -5478,8 +5254,7 @@ combine hash values.")
      `(#:cabal-revision
        ("1" "151gxiprdlj3masa95vvrxal9nwa72n3p1y15xyj4hp7mvvl4s2l")))
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-time-compat" ,ghc-time-compat)))
+     (list ghc-hashable ghc-time-compat))
     (home-page "https://hackage.haskell.org/package/hashable-time")
     (synopsis "Hashable instances for Data.Time")
     (description
@@ -5501,16 +5276,14 @@ combine hash values.")
         (base32 "0vgggm7bqq55zmqj6qji89bfj3k1rdkikkfhyg81vsqf0f3bzhqa"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable ghc-primitive ghc-vector))
     (native-inputs
-     `(("ghc-mwc-random" ,ghc-mwc-random)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-mwc-random
+           ghc-quickcheck
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-quickcheck2
+           ghc-test-framework-hunit))
     (home-page "https://github.com/gregorycollins/hashtables")
     (synopsis "Haskell Mutable hash tables in the ST monad")
     (description "This package provides a Haskell library including a
@@ -5534,8 +5307,8 @@ a set of wrappers to use the hash tables in the IO monad.")
         (base32
          "0gqsa5s0drim9m42hv4wrq61mnvcdylxysfxfw3acncwilfrn9pb"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-exceptions" ,ghc-exceptions)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (inputs (list ghc-exceptions))
+    (native-inputs (list ghc-hunit))
     ;; FIXME: Tests failing
     (arguments `(#:tests? #f))
     (home-page "https://github.com/judah/haskeline")
@@ -5588,8 +5361,7 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
      `(#:cabal-revision
        ("4" "0cyqdw77clzz7mq0b4c0jg2d1kdz9xii41268w2psmqmfpyn29pc")))
     (inputs
-     `(("ghc-happy" ,ghc-happy)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-happy ghc-syb))
     (home-page
      "https://hackage.haskell.org/package/haskell-src")
     (synopsis
@@ -5618,14 +5390,9 @@ package are to parse or generate Haskell 98 code.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("cpphs" ,cpphs)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-pretty-show" ,ghc-pretty-show)))
+     (list cpphs ghc-happy ghc-pretty-show))
     (native-inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)))
+     (list ghc-smallcheck ghc-tasty ghc-tasty-smallcheck ghc-tasty-golden))
     (home-page "https://github.com/haskell-suite/haskell-src-exts")
     (synopsis "Library for manipulating Haskell source")
     (description "Haskell-Source with Extensions (HSE, haskell-src-exts) is an
@@ -5650,10 +5417,8 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
          "0fvqi72m74p7q5sbpy8m2chm8a1lgy10mfrcxcz8wrh59vngj0n8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-uniplate" ,ghc-uniplate)))
+     (list ghc-data-default ghc-haskell-src-exts ghc-semigroups
+           ghc-uniplate))
     (home-page "https://github.com/pepeiborra/haskell-src-exts-util")
     (synopsis "Helper functions for working with haskell-src-exts trees")
     (description
@@ -5675,13 +5440,9 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
                 "1yy2dfb1ip1zqx3xh28g92209555abzvxrxiwcl95j27zzqxc6in"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-th-orphans" ,ghc-th-orphans)))
+     (list ghc-haskell-src-exts ghc-syb ghc-th-orphans))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit))
     (home-page "https://hackage.haskell.org/package/haskell-src-meta")
     (synopsis "Parse source to template-haskell abstract syntax")
     (description
@@ -5708,13 +5469,9 @@ template-haskell abstract syntax.")
      `(#:cabal-revision
        ("1" "0q39ssdgm6lcmqj92frjvr53i34divx53zli0qar39mx8ka1l8ml")))
     (inputs
-     `(("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-system-filepath ghc-optparse-applicative))
     (native-inputs
-     `(("ghc-json" ,ghc-json)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-microlens-platform" ,ghc-microlens-platform)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-json ghc-utf8-string ghc-microlens-platform ghc-hunit))
     (home-page "https://github.com/MarcWeber/hasktags")
     (synopsis "Make @code{Ctags} and @code{Etags} files for Haskell programs")
     (description
@@ -5756,11 +5513,9 @@ hexadecimal string representation.")
                 "1bqv00gfmrsf0jjr4qf3lhshvfkyzmhbi3pjb6mafbnsyn2k7f6q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-regex-pcre-builtin" ,ghc-regex-pcre-builtin)))
+     (list ghc-diff ghc-regex-pcre-builtin))
     (native-inputs
-     `(("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-blaze-html ghc-utf8-string))
     (home-page "https://github.com/jgm/highlighting-kate")
     (synopsis "Syntax highlighting library")
     (description
@@ -5800,8 +5555,7 @@ descriptions.")
              (let* ((out   (assoc-ref outputs "out"))
                     (elisp-file "elisp/hindent.el")
                     (dest  (string-append out "/share/emacs/site-lisp"))
-                    (emacs (string-append (assoc-ref inputs "emacs")
-                                          "/bin/emacs")))
+                    (emacs (search-input-file inputs "/bin/emacs")))
                (make-file-writable elisp-file)
                (emacs-substitute-variables elisp-file
                  ("hindent-process-path"
@@ -5809,15 +5563,15 @@ descriptions.")
                (install-file elisp-file dest)
                (emacs-generate-autoloads "hindent" dest)))))))
     (inputs
-     `(("ghc-haskell-src-exts" ,ghc-haskell-src-exts)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-yaml" ,ghc-yaml)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-path" ,ghc-path)
-       ("ghc-path-io" ,ghc-path-io)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
+     (list ghc-haskell-src-exts
+           ghc-monad-loops
+           ghc-utf8-string
+           ghc-exceptions
+           ghc-yaml
+           ghc-unix-compat
+           ghc-path
+           ghc-path-io
+           ghc-optparse-applicative))
     (native-inputs
      `(("ghc-hspec" ,ghc-hspec)
        ("ghc-diff" ,ghc-diff)
@@ -5844,7 +5598,7 @@ library and an executable.")
                 "06pqfikfa61i45g92b65br83kplwmizqkm42yp8d0ddgmq0b21qk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)))
+     (list ghc-async))
     (home-page "https://github.com/kolmodin/hinotify.git")
     (synopsis "Haskell binding to inotify")
     (description "This library provides a wrapper to the Linux kernel's inotify
@@ -5868,35 +5622,35 @@ accessed or modified.")
          "00prslqk8vnbyz388cpc0nsamzy8xcjzday5q9n3m9lx4p2dhb5y"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-call-stack" ,ghc-call-stack)
-       ("ghc-cassava" ,ghc-cassava)
-       ("ghc-cassava-megaparsec" ,ghc-cassava-megaparsec)
-       ("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-decimal" ,ghc-decimal)
-       ("ghc-extra" ,ghc-extra)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-hashtables" ,ghc-hashtables)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-pretty-simple" ,ghc-pretty-simple)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-tabular" ,ghc-tabular)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-timeit" ,ghc-timeit)
-       ("ghc-uglymemo" ,ghc-uglymemo)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-base-compat-batteries
+           ghc-blaze-markup
+           ghc-call-stack
+           ghc-cassava
+           ghc-cassava-megaparsec
+           ghc-cmdargs
+           ghc-data-default
+           ghc-decimal
+           ghc-extra
+           ghc-file-embed
+           ghc-glob
+           ghc-hashtables
+           ghc-megaparsec
+           ghc-old-time
+           ghc-parser-combinators
+           ghc-pretty-simple
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-tabular
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-timeit
+           ghc-uglymemo
+           ghc-unordered-containers
+           ghc-utf8-string))
+    (native-inputs (list ghc-doctest))
     (home-page "https://hledger.org")
     (synopsis "Reusable library providing the core functionality of hledger")
     (description
@@ -5927,13 +5681,13 @@ Accounting.")
     (arguments
      `(#:extra-directories ("lapack")))
     (inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-split" ,ghc-split)
-       ("ghc-storable-complex" ,ghc-storable-complex)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-vector" ,ghc-vector)
-       ;;("openblas" ,openblas)
-       ("lapack" ,lapack)))
+     (list ghc-random
+           ghc-split
+           ghc-storable-complex
+           ghc-semigroups
+           ghc-vector
+           ;;("openblas" ,openblas)
+           lapack))
     ;; Guix's OpenBLAS is built with the flag "NO_LAPACK=1" which
     ;; disables inclusion of the LAPACK functions.
     ;; (arguments `(#:configure-flags '("--flags=openblas")))
@@ -5960,11 +5714,8 @@ numerical computations based on BLAS and LAPACK.")
     (arguments
      `(#:extra-directories ("gsl")))
     (inputs
-     `(("ghc-hmatrix" ,ghc-hmatrix)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-random" ,ghc-random)
-       ("gsl" ,gsl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list ghc-hmatrix ghc-vector ghc-random gsl))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/albertoruiz/hmatrix")
     (synopsis "Haskell GSL binding")
     (description "This Haskell library provides a purely functional
@@ -5987,11 +5738,8 @@ using GSL.")
         (base32 "1cq049sj3q5r06x7i35hqrkf2jc4p4kfi9zv0jmi2vp7w4644i5q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-storable-complex" ,ghc-storable-complex)
-       ("ghc-hmatrix" ,ghc-hmatrix)
-       ("gsl" ,gsl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list ghc-vector ghc-storable-complex ghc-hmatrix gsl))
+    (native-inputs (list pkg-config))
     (home-page "http://code.haskell.org/hmatrix-gsl-stats")
     (synopsis "GSL Statistics interface for Haskell")
     (description "This Haskell library provides a purely functional
@@ -6013,8 +5761,7 @@ interface for statistics based on hmatrix and GSL.")
         (base32 "1mywr61kr852sbff26n9x95kswx9l4ycbv6s68qsbkh02xzqq7qz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hmatrix" ,ghc-hmatrix)
-       ("ghc-hmatrix-gsl" ,ghc-hmatrix-gsl)))
+     (list ghc-hmatrix ghc-hmatrix-gsl))
     (home-page "https://github.com/albertoruiz/hmatrix")
     (synopsis "Haskell interface to GSL special functions")
     (description "This library provides an interface to GSL special
@@ -6053,11 +5800,9 @@ determine the hostname.")
                 "0jnay5j13vpz6i1rkaj3j0d9v8jfpri499xn3l7wd01f81f5ncs4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-locale))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-hourglass")
     (synopsis "Simple time-related library for Haskell")
     (description
@@ -6082,26 +5827,26 @@ representations of current time.")
          "0gmm6jgi1sgyilphww6apq1x04grqznm7xhyb7g1rj5j7my40ws2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-infer-license" ,ghc-infer-license)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-yaml" ,ghc-yaml)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-interpolate" ,ghc-interpolate)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-aeson
+           ghc-bifunctors
+           ghc-cryptonite
+           ghc-glob
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http-types
+           ghc-infer-license
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector
+           ghc-yaml))
+    (native-inputs
+     (list ghc-hspec
+           ghc-hunit
+           ghc-interpolate
+           ghc-mockery
+           ghc-quickcheck
+           ghc-temporary
+           hspec-discover))
     (home-page "https://github.com/sol/hpack")
     (synopsis "Tools for an alternative Haskell package format")
     (description
@@ -6130,10 +5875,9 @@ are described in a file named @code{package.yaml}.  Both @code{cabal2nix} and
          "0hyf06gzzqd6sqd76crwxycwgx804sd39z7i0c2vmv1qgsxv82gn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-megaparsec" ,ghc-megaparsec)))
+     (list ghc-hspec-expectations ghc-megaparsec))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://github.com/mrkkrp/hspec-megaparsec")
     (synopsis "Utility functions for testing Megaparsec parsers with Hspec")
     (description
@@ -6155,7 +5899,7 @@ with Hspec.")
         (base32
          "1wnpy1v5rbii2iwlcc9psnww8pkirv9zl21s64cmbi6q7dv15g3n"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-syb" ,ghc-syb)))
+    (inputs (list ghc-syb))
     (home-page "https://hackage.haskell.org/package/hs-bibutils")
     (synopsis "Haskell bindings to bibutils")
     (description
@@ -6181,11 +5925,9 @@ MODS-format XML intermediate.")
      `(#:cabal-revision
        ("3" "04mda3bwr2a00f5nbkqc84d46lmqfsk3gibzg3amdh74ngb451xq")))
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-network ghc-old-locale))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-network-bsd" ,ghc-network-bsd)))
+     (list ghc-hunit ghc-network-bsd))
     (home-page "https://software.complete.org/hslogger")
     (synopsis "Logging framework for Haskell, similar to Python's logging module")
     (description "Hslogger lets each log message have a priority and source be
@@ -6210,16 +5952,15 @@ handler built in.")
      `(#:configure-flags '("-fsystem-lua")
        #:extra-directories ("lua")))
     (inputs
-     `(("lua" ,lua)
-       ("ghc-base-compat" ,ghc-base-compat)))
+     (list lua ghc-base-compat))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-fail
+           ghc-semigroups))
     (home-page "https://hackage.haskell.org/package/hslua")
     (synopsis "Lua language interpreter embedding in Haskell")
     (description
@@ -6242,12 +5983,9 @@ described in @url{https://www.lua.org/}.")
          "0hk2splyasbplnggknjhlb423axc5b32xq8aq8zal4vvwlqhzvf1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hslua" ,ghc-hslua)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-hslua ghc-temporary))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-lua" ,ghc-tasty-lua)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
     (home-page "https://github.com/hslua/hslua-module-system")
     (synopsis "Lua module wrapper around Haskell's System module")
     (description "This library provides access to system information and
@@ -6272,11 +6010,9 @@ already been loaded before the loader can be added.")
          "1vmd15n905i2pcsx748hz3h9kv5nnv74y663rj57q8mp0b40cbfl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hslua" ,ghc-hslua)))
+     (list ghc-hslua))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-lua" ,ghc-tasty-lua)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
     (home-page "https://github.com/hslua/hslua-module-text")
     (synopsis "Lua module for text")
     (description
@@ -6350,23 +6086,23 @@ for user-defined custom schemas).
         (base32
          "0xzfvxxh33ivlnrnzmm19cni3jgb5ph18n9hykkw3d6l3rhwzcnl"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-attoparsec-iso8601" ,ghc-attoparsec-iso8601)
-              ("ghc-cookie" ,ghc-cookie)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-http-types" ,ghc-http-types)
-              ("ghc-time-compat" ,ghc-time-compat)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-uuid-types" ,ghc-uuid-types)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-nats" ,ghc-nats)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-doctest" ,ghc-doctest)
-       ("hspec-discover" ,hspec-discover)))
+    (inputs (list ghc-attoparsec
+                  ghc-attoparsec-iso8601
+                  ghc-cookie
+                  ghc-hashable
+                  ghc-http-types
+                  ghc-time-compat
+                  ghc-unordered-containers
+                  ghc-uuid-types))
+    (native-inputs
+     (list cabal-doctest
+           ghc-nats
+           ghc-hunit
+           ghc-hspec
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-doctest
+           hspec-discover))
     (home-page "https://github.com/fizruk/http-api-data")
     (synopsis "Convert to/from HTTP API data like URL pieces, headers and
 query parameters")
@@ -6430,10 +6166,9 @@ monads with anaphoric variants on @code{if} and @code{when} and a C-like
     ;; This package needs an older version of tasty.
     (arguments '(#:tests? #f))
     (inputs
-     `(("ghc-concatenative" ,ghc-concatenative)))
+     (list ghc-concatenative))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/jaspervdj/indents")
     (synopsis "Indentation sensitive parser-combinators for parsec")
     (description
@@ -6456,10 +6191,9 @@ lines continued at an indented level below.")
          "0wlfm6bf55kfvm74xar9lmjg5v1103rs9m3grw1rq5bmcmhzxrhj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-text-metrics" ,ghc-text-metrics)))
+     (list ghc-text-metrics))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/infer-license")
     (synopsis "Infer software license from a given license file")
     (description "This library provides tools to infer a software
@@ -6478,10 +6212,9 @@ license from a given license file.")
        (sha256
         (base32 "0mvwii8jbh2ll54qb9dij5m66c6324s2y4vrwz1qr4wz40m3qa8l"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (native-inputs (list ghc-hspec))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-unordered-containers))
     (home-page "https://github.com/chrisdone/ini")
     (synopsis
      "Haskell library to easily handle configuration files in the INI format")
@@ -6504,17 +6237,11 @@ read and write configuration files in the simple INI format.")
          "0a0m3bhh910c5g46cwkxgflsgw5ab7lzymwll9hijyvwgnsw3h7i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-ansi-wl-pprint ghc-hashable ghc-parsers
+           ghc-unordered-containers ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
-       ("ghc-regex-posix" ,ghc-regex-posix)
-       ("ghc-split" ,ghc-split)))
+     (list ghc-quickcheck ghc-hspec ghc-raw-strings-qq ghc-regex-posix
+           ghc-split))
     (home-page "https://hackage.haskell.org/package/inline-c")
     (synopsis "Write Haskell source files including C code inline")
     (description
@@ -6538,10 +6265,9 @@ minimal overhead.  No FFI required.")
          "0bqrhyic3cw1pqg7knsmkqx5swpr4kvf9bmz0mhmqbl6brmv5il0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-inline-c" ,ghc-inline-c)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-inline-c ghc-safe-exceptions))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://hackage.haskell.org/package/inline-c-cpp")
     (synopsis "Lets you embed C++ code into Haskell")
     (description
@@ -6565,12 +6291,12 @@ minimal overhead.  No FFI required.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Needs tasty<1.4
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)))
+     (list ghc-quickcheck
+           ghc-smallcheck
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-smallcheck))
     (home-page "https://github.com/Bodigrim/integer-logarithms")
     (synopsis "Integer logarithms")
     (description
@@ -6604,13 +6330,10 @@ in migrated modules.")
          "03jrkj9c62w0c2awym8mhpsgpd0jffl50cqwfrm7bbdfhd8dsxi7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-meta" ,ghc-haskell-src-meta)))
+     (list ghc-haskell-src-meta))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat ghc-hspec ghc-quickcheck
+           ghc-quickcheck-instances hspec-discover))
     (home-page "https://github.com/sol/interpolate")
     (synopsis "String interpolation library")
     (description "This package provides a string interpolation library for
@@ -6631,7 +6354,7 @@ Haskell.")
          "03smzhwk1zf5na544b0azp49j4gvafqsih9ggwf6yng38yhixwld"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "http://www.chr-breitkopf.de/comp/IntervalMap")
     (synopsis "Containers for intervals, with efficient search")
     (description
@@ -6654,9 +6377,9 @@ example code on the home page for a quick introduction.")
          "1qibvgys8lw61x9na3iy3dcglyj9qyhcbfc00glnagl7cbk1shlv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-distributive" ,ghc-distributive)))
+     (list ghc-distributive))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ekmett/intervals")
     (synopsis "Interval arithmetic")
     (description "This library provides @code{Numeric.Interval.Interval},
@@ -6678,20 +6401,18 @@ which represets a closed, convex set of floating point values.")
          "1jlp0gbfjsx7k08275djh8m3v4rpg8llw5gdkg9s9qfx0lc0mymr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-profunctors
+           ghc-semigroups
+           ghc-statevar
+           ghc-tagged
+           ghc-th-abstraction
+           ghc-transformers-compat
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/nfrisby/invariant-functors")
     (synopsis "Haskell98 invariant functors")
     (description "Haskell98 invariant functors (also known as exponential
@@ -6713,19 +6434,19 @@ functors).  For more information, see Edward Kmett's article
          "1y3sqmxrwiksz7pl4hf3vzvg8p8n00qnv98nj5xbpcadlh468rny"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zlib-bindings" ,ghc-zlib-bindings)))
+     (list ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-network
+           ghc-primitive
+           ghc-vector
+           ghc-zlib-bindings))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-zlib))
     (home-page "https://hackage.haskell.org/package/io-streams")
     (synopsis "Simple and composable stream I/O")
     (description "This library contains simple and easy-to-use
@@ -6750,13 +6471,9 @@ primitives for I/O using streams.")
      `(#:cabal-revision
        ("3" "02k9halblgnynlm781ahc81yxla8z7cck1gikm8555v78rf5hv7x")))
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-io-streams" ,ghc-io-streams)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-attoparsec ghc-io-streams ghc-network))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "http://snapframework.com/")
     (synopsis "HAProxy protocol 1.5 support for io-streams")
     (description "HAProxy protocol version 1.5 support
@@ -6784,10 +6501,7 @@ through a forwarding proxy that is configured to speak this protocol.")
     (arguments `(#:tests? #f)) ; FIXME: Tests cannot find System.ByteOrder,
                                ; exported by ghc-byteorder.  Doctest issue.
     (inputs
-     `(("ghc-appar" ,ghc-appar)
-       ("ghc-byteorder" ,ghc-byteorder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-safe" ,ghc-safe)))
+     (list ghc-appar ghc-byteorder ghc-network ghc-safe))
     (home-page "https://www.mew.org/~kazu/proj/iproute/")
     (synopsis "IP routing table")
     (description "IP Routing Table is a tree of IP ranges to search one of
@@ -6809,15 +6523,10 @@ removed.  Both IPv4 and IPv6 are supported.")
          "0qky4l5aaiq7ypwbxh0mr7s572290fi596f18dg68qpyzc49a9kx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-unordered-containers ghc-base64-bytestring ghc-aeson
+           ghc-semigroups))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-microlens-aeson" ,ghc-microlens-aeson)
-       ("ghc-microlens" ,ghc-microlens)))
+     (list ghc-tasty ghc-tasty-hunit ghc-microlens-aeson ghc-microlens))
     (home-page "https://hackage.haskell.org/package/ipynb")
     (synopsis "Data structure for working with Jupyter notebooks")
     (description "This library defines a data structure for representing
@@ -6840,7 +6549,7 @@ instances for conversion to and from JSON .ipynb files.")
     (arguments
      `(#:extra-directories ("wireless-tools")))
     (inputs
-     `(("wireless-tools" ,wireless-tools)))
+     (list wireless-tools))
     (home-page "https://github.com/jaor/iwlib")
     (synopsis "Haskell binding to the iw wireless networking library")
     (description
@@ -6866,7 +6575,7 @@ supported systems.")
      `(#:cabal-revision
        ("1" "16fp0y95gaibjravzj1hxdkng1cr8zqjqzd14m48kf4jrq3npz6r")))
     (inputs
-     `(("ghc-syb" ,ghc-syb)))
+     (list ghc-syb))
     (home-page "https://hackage.haskell.org/package/json")
     (synopsis "Serializes Haskell data to and from JSON")
     (description "This package provides a parser and pretty printer for
@@ -6889,9 +6598,7 @@ Notation, JSON} is a lightweight data-interchange format.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-zlib" ,ghc-zlib)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-zlib ghc-vector ghc-primitive))
     (home-page "https://github.com/Twinside/Juicy.Pixels")
     (synopsis "Picture loading and serialization library")
     (description
@@ -6915,15 +6622,15 @@ TIFF and GIF formats.")
          "1rkjxwc2k2425d2shdra6wzd4f4dpj76hxmq8mish4f0lz9gxxml"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-free" ,ghc-free)
-       ("ghc-invariant" ,ghc-invariant)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-adjunctions
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-free
+           ghc-invariant
+           ghc-semigroupoids
+           ghc-tagged
+           ghc-transformers-compat))
     (home-page "https://github.com/ekmett/kan-extensions/")
     (synopsis "Kan extensions library")
     (description "This library provides Kan extensions, Kan lifts, various
@@ -6943,10 +6650,9 @@ forms of the Yoneda lemma, and (co)density (co)monads for Haskell.")
         (base32
          "0bi02jdirkys8v7flf39vrpla2a74z1z0sdhy9lb9v7cmcc6rmpk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-syb" ,ghc-syb)))
+    (inputs (list ghc-syb))
     (native-inputs
-     `(("ghc-happy" ,ghc-happy)
-       ("ghc-alex" ,ghc-alex)))
+     (list ghc-happy ghc-alex))
     (home-page "https://visq.github.io/language-c/")
     (synopsis "Analysis and generation of C code")
     (description
@@ -6968,7 +6674,7 @@ and a large set of GNU extensions.")
         (base32
          "0hdg67ainlqpjjghg3qin6fg4p783m0zmjqh4rd5gyizwiplxkp1"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-prettyclass" ,ghc-prettyclass)))
+    (inputs (list ghc-prettyclass))
     (arguments
      `(#:tests? #f
        #:cabal-revision
@@ -7005,8 +6711,7 @@ representation, parsing, and pretty-printing of GLSL 1.50 code.")
                (("(template-haskell)\\s+[^,]+" all dep)
                 dep)))))))
     (inputs
-     `(("ghc-regex-posix" ,ghc-regex-posix)
-       ("ghc-template-haskell" ,ghc-template-haskell)))
+     (list ghc-regex-posix ghc-template-haskell))
     (home-page "https://github.com/finnsson/template-helper")
     (synopsis "Haskell module to automatically extract functions from
 the local code")
@@ -7038,38 +6743,38 @@ with @code{wc} (for a web service).")
        ("6" "1k08my9rh1il3ibiyhljxkgndfgk143pn5a6nyzjnckw3la09myl")))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-free" ,ghc-free)
-       ("ghc-kan-extensions" ,ghc-kan-extensions)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-reflection" ,ghc-reflection)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-call-stack" ,ghc-call-stack)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-void" ,ghc-void)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-nats" ,ghc-nats)
-       ("ghc-simple-reflect" ,ghc-simple-reflect)
-       ("hlint" ,hlint)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-base-orphans
+           ghc-bifunctors
+           ghc-distributive
+           ghc-exceptions
+           ghc-free
+           ghc-kan-extensions
+           ghc-parallel
+           ghc-reflection
+           ghc-semigroupoids
+           ghc-vector
+           ghc-call-stack
+           ghc-comonad
+           ghc-contravariant
+           ghc-hashable
+           ghc-profunctors
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-void
+           ghc-generic-deriving
+           ghc-nats
+           ghc-simple-reflect
+           hlint))
+    (native-inputs
+     (list cabal-doctest
+           ghc-doctest
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-quickcheck))
     (home-page "https://github.com/ekmett/lens/")
     (synopsis "Lenses, Folds and Traversals")
     (description "This library provides @code{Control.Lens}.  The combinators
@@ -7127,8 +6832,8 @@ lenses and traversals for those who require Haskell 98.")
         (base32
          "0g7jnhng3j7z5517aaqga0144aamibsbpgm3yynwyfzkq1kp0f28"))))
     (build-system haskell-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libffi" ,libffi)))
+    (native-inputs (list pkg-config))
+    (inputs (list libffi))
     (home-page "https://hackage.haskell.org/package/libffi")
     (synopsis "Haskell binding to libffi")
     (description
@@ -7152,15 +6857,10 @@ to be called from Haskell.")
          "088vlir0n3wps2p5ydgyx51p41nfjcm2v02sszpyjj3c8z7f4qkh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-network" ,ghc-network)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-attoparsec ghc-data-default-class ghc-network
+           ghc-safe-exceptions ghc-utf8-string))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://github.com/vimus/libmpd-haskell")
     (synopsis "Haskell client library for the Music Player Daemon")
     (description "This package provides a pure Haskell client library for the
@@ -7182,8 +6882,7 @@ Music Player Daemon.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc")) ; documentation is 39M
     (native-inputs
-     `(("ghc-alex" ,ghc-alex)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-alex ghc-happy))
     (home-page "https://github.com/digital-asset/ghc-lib")
     (synopsis "The GHC API, decoupled from GHC versions")
     (description "This library implements the GHC API.  It is like the
@@ -7205,7 +6904,7 @@ compiler versions.")
          "01zvk86kg726lf2vnlr7dxiz7g3xwi5a4ak9gcfbwyhynkzjmsfi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (arguments
      `(#:configure-flags
        `(,(string-append "--extra-include-dirs="
@@ -7240,9 +6939,7 @@ compiler versions.")
      `(#:configure-flags `("--flags=system-libyaml")
        #:extra-directories ("libyaml+static")))
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("libyaml+static" ,libyaml+static)))
+     (list ghc-conduit ghc-resourcet libyaml+static))
     (home-page "https://github.com/snoyberg/yaml#readme")
     (synopsis "Low-level, streaming YAML interface.")
     (description "This package provides a Haskell wrapper over the
@@ -7264,16 +6961,16 @@ LibYAML C library.")
          "0j4f5471qfxkxy84ri87bcvp30ikh4m30imcggwn8m5v8igp218d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-constraints" ,ghc-constraints)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-th" ,ghc-tasty-th)))
+     (list ghc-async
+           ghc-lifted-base
+           ghc-transformers-base
+           ghc-monad-control
+           ghc-constraints
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-tasty-th))
     (home-page "https://github.com/maoe/lifted-async")
     (synopsis "Run lifted IO operations asynchronously and wait for their results")
     (description
@@ -7298,10 +6995,8 @@ instance of @code{MonadBase} or @code{MonadBaseControl}.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; FIXME: Missing testing libraries.
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-transformers-base ghc-monad-control ghc-transformers-compat
+           ghc-hunit))
     (home-page "https://github.com/basvandijk/lifted-base")
     (synopsis "Lifted IO operations from the base library")
     (description "Lifted-base exports IO operations from the @code{base}
@@ -7325,28 +7020,28 @@ Kaseorg.")
          "0ax6prmc7b53w0lz5ddc40wrjj9bm7wldpp57283gx9hdf8qrb35"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-adjunctions" ,ghc-adjunctions)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bytes" ,ghc-bytes)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-reflection" ,ghc-reflection)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-void" ,ghc-void)))
-    (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-simple-reflect" ,ghc-simple-reflect)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-adjunctions
+           ghc-base-orphans
+           ghc-bytes
+           ghc-cereal
+           ghc-distributive
+           ghc-hashable
+           ghc-lens
+           ghc-reflection
+           ghc-semigroups
+           ghc-semigroupoids
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-vector
+           ghc-void))
+    (native-inputs
+     (list cabal-doctest
+           ghc-doctest
+           ghc-simple-reflect
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-hunit))
     (home-page "https://github.com/ekmett/linear/")
     (synopsis "Linear algebra library for Haskell")
     (description
@@ -7370,13 +7065,13 @@ vector spaces.")
          "08jip0q2f9qc95wcqka2lrqpf8r7sswsi5104w73kyrbmfirqnrd"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-fmlist" ,ghc-fmlist)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-vector
+           ghc-dlist
+           ghc-fmlist
+           ghc-hunit
+           ghc-quickcheck
+           ghc-random
+           ghc-utf8-string))
     (home-page "https://github.com/JohnLato/listlike")
     (synopsis "Generic support for list-like structures")
     (description "The ListLike module provides a common interface to the
@@ -7403,13 +7098,9 @@ can handle infinite lists.")
          "0pxb5ah8r5pzpz2ibqw3g9g1isigb4z7pbzfrwr8kmcjn74ab3kf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-fail" ,ghc-fail)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-attoparsec ghc-fail ghc-unordered-containers))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/llvm-hs/llvm-hs/")
     (synopsis "Pure Haskell LLVM functionality (no FFI)")
     (description "llvm-hs-pure is a set of pure Haskell types and functions
@@ -7432,19 +7123,16 @@ llvm-hs-pure does not require LLVM to be available.")
          "0723xgh45h9cyxmmjsvxnsp8bpn1ljy4qgh7a7vqq3sj9d6wzq00"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-llvm-hs-pure" ,ghc-llvm-hs-pure)
-       ("llvm" ,llvm-9)))
+     (list ghc-attoparsec ghc-exceptions ghc-utf8-string ghc-llvm-hs-pure
+           llvm-9))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-quickcheck
+           ghc-temporary
+           ghc-pretty-show
+           ghc-temporary))
     (home-page "https://github.com/llvm-hs/llvm-hs/")
     (synopsis "General purpose LLVM bindings for Haskell")
     (description "llvm-hs is a set of Haskell bindings for LLVM.  Unlike other
@@ -7469,8 +7157,7 @@ into Haskell.")
                 "0d0lwxxgd16is9aw6v3ps4r9prv3dj8xscmm45fvzq3nicjiawcf"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/logging-facade")
     (synopsis "Simple logging abstraction that allows multiple back-ends")
     (description
@@ -7493,11 +7180,9 @@ back-ends.")
         (base32
          "1d22b7r8lnak5k8ars166cxbk1lv7gf8g0qs604irsx2s474ybi7"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-fail" ,ghc-fail)))
+    (inputs (list ghc-fail))
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-async ghc-tasty ghc-tasty-hunit))
     (home-page "http://code.haskell.org/~dolio/")
     (synopsis "Backtracking logic-programming monad")
     (description "This library provides a continuation-based, backtracking,
@@ -7523,14 +7208,10 @@ online}.")
          "0nky4pqxd6828kg3js90ks6r3hxs5x48ibfz37pw2dr7y1nygq21"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-blaze-builder ghc-hashable ghc-mmorph
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-bifunctors" ,ghc-bifunctors)))
+     (list ghc-hunit ghc-hspec ghc-bifunctors))
     (arguments
      `(#:cabal-revision
        ("1"
@@ -7567,11 +7248,8 @@ Same combinator can be used for attributes and elements
        #:cabal-revision
        ("6" "1sh2g5wkh0m6646cxnii0k20f0crwdcnprfl9jfg7gxn5875bkip")))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/lzma")
     (synopsis "LZMA/XZ compression and decompression")
     (description
@@ -7594,16 +7272,14 @@ monadic incremental interface is provided as well.")
          "1z6q16hzp2r5a4gdbg9akky5l9bfarzzhzswrgvh0v28ax400whb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-lzma" ,ghc-lzma)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-lzma ghc-resourcet))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-base-compat
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-hunit
+           ghc-quickcheck))
     (home-page "https://github.com/alphaHeavy/lzma-conduit")
     (synopsis "Conduit interface for lzma/xz compression")
     (description
@@ -7683,13 +7359,13 @@ orphan instances
                 "0njzn56m8z6lm70xyixbylbnpjz1gk7x8vdsdvi3qld9m66gc3n7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-stringbuilder" ,ghc-stringbuilder)
-       ("ghc-temporary" ,ghc-temporary)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat
+           ghc-hspec
+           ghc-quickcheck
+           ghc-silently
+           ghc-stringbuilder
+           ghc-temporary
+           hspec-discover))
     (home-page "https://github.com/sol/markdown-unlit#readme")
     (synopsis "Literate Haskell support for Markdown")
     (description "This package allows you to have a README.md that at the
@@ -7712,16 +7388,14 @@ same time is a literate Haskell program.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f))  ; FIXME: 1 test fails.
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)))
+     (list ghc-data-default-class ghc-vector ghc-vector-th-unbox))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-erf" ,ghc-erf)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-erf
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/math-functions")
     (synopsis "Special functions and Chebyshev polynomials for Haskell")
     (description "This Haskell library provides implementations of
@@ -7744,14 +7418,9 @@ functions are often useful in statistical and numerical computing.")
          "00953zvxfyjibw8c1ssmixxh0cwn59pz24zbh6s34rk3v14vqa3j"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-parser-combinators" ,ghc-parser-combinators)
-       ("ghc-scientific" ,ghc-scientific)))
+     (list ghc-case-insensitive ghc-parser-combinators ghc-scientific))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec ghc-hspec-expectations hspec-discover))
     (home-page "https://github.com/mrkkrp/megaparsec")
     (synopsis "Monadic parser combinators")
     (description
@@ -7773,12 +7442,9 @@ speed, flexibility, and quality of parse errors.")
                 "0a9mxcddnqn4359hk59d6l2zbh0vp154yb5vs1a8jw4l38n8kzz3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-basement" ,ghc-basement)
-       ("ghc-foundation" ,ghc-foundation)))
+     (list ghc-basement ghc-foundation))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/hs-memory")
     (synopsis "Memory abstractions for Haskell")
     (description
@@ -7805,7 +7471,7 @@ set, memory copy, ..) and more")
          "0lxsarhyhhkp58wpbp7b08scmjxq7s46jfl9vhp2yfq973hz0kaq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-newtype-generics" ,ghc-newtype-generics)))
+     (list ghc-newtype-generics))
     (home-page "https://github.com/conal/MemoTrie")
     (synopsis "Trie-based memo functions")
     (description "This package provides a functional library for creating
@@ -7852,16 +7518,15 @@ stripped.  As the result, this package has no dependencies.")
          "074mzpk7av6i0xf7xy42jpzgljlmyw805md1vz4sqy85m99f0ikr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-hashable
+           ghc-microlens
+           ghc-scientific
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/fosskers/microlens-aeson")
     (synopsis "Law-abiding lenses for Aeson, using microlens")
     (description "This library provides law-abiding lenses for Aeson, using
@@ -7883,7 +7548,7 @@ microlens.")
         (base32
          "1r6x788br3f9rksj0dmk1nyh5mfvd9zzasclf1mi3rxhb7c0j926"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-microlens" ,ghc-microlens)))
+    (inputs (list ghc-microlens))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis "Use @code{microlens} with GHC libraries like @code{array}")
     (description "This library provides everything that @code{microlens}
@@ -7910,8 +7575,7 @@ microlens} family; see the readme
          "0ijy7xyd5lbc3calhcrhy8czkf3fjcxrv68p7kd2a5b352rfi7fp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-microlens" ,ghc-microlens)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-microlens ghc-transformers-compat))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis
      "@code{microlens} support for Reader/Writer/State from mtl")
@@ -7938,13 +7602,13 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
          "0yf0z0glq2d6mpclzswc64h9w2cck4fd8l8ffm89pyb0a5n8m4c7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-microlens-ghc" ,ghc-microlens-ghc)
-       ("ghc-microlens-mtl" ,ghc-microlens-mtl)
-       ("ghc-microlens-th" ,ghc-microlens-th)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable
+           ghc-microlens
+           ghc-microlens-ghc
+           ghc-microlens-mtl
+           ghc-microlens-th
+           ghc-unordered-containers
+           ghc-vector))
     (home-page "https://github.com/monadfix/microlens")
     (synopsis "Feature-complete microlens")
     (description
@@ -7980,9 +7644,8 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
         (base32
          "1dg2xhj85fy8q39m5dd94kjlabjyxgc0336vzkg0174l6l110l1c"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-microlens" ,ghc-microlens)
-              ("ghc-th-abstraction" ,ghc-th-abstraction)))
-    (native-inputs `(("ghc-tagged" ,ghc-tagged)))
+    (inputs (list ghc-microlens ghc-th-abstraction))
+    (native-inputs (list ghc-tagged))
     (home-page
      "https://github.com/aelve/microlens")
     (synopsis "Automatic generation of record lenses for
@@ -8015,17 +7678,15 @@ used both from lens and microlens).")
                (("(random)\\s+[^,]+" all dep)
                 dep)))))))
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-regex-compat" ,ghc-regex-compat)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-random" ,ghc-random)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-network
+           ghc-hunit
+           ghc-regex-compat
+           ghc-hslogger
+           ghc-random
+           ghc-old-time
+           ghc-old-locale))
     (native-inputs
-     `(("ghc-errorcall-eq-instance" ,ghc-errorcall-eq-instance)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-errorcall-eq-instance ghc-quickcheck ghc-hunit))
     ;; ‘Official’ <http://software.complete.org/missingh> redirects to a 404.
     (home-page "https://github.com/haskell-hvr/missingh")
     (synopsis "Large utility library")
@@ -8072,7 +7733,7 @@ do on-demand loading.")
          "0bq9m3hlfax1826gg5yhih79x33rvfx59wdh8yf43azd7l74bys6"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://hackage.haskell.org/package/mmorph")
     (synopsis "Monad morphisms")
     (description
@@ -8093,12 +7754,9 @@ manipulating monad transformer stacks.")
                 "09ypgm3z69gq8mj6y66ss58kbjnk15r8frwcwbqcfbfksfnfv8dp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-logging-facade" ,ghc-logging-facade)
-       ("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-temporary ghc-logging-facade ghc-base-compat))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/mockery")
     (synopsis "Support functions for automated testing")
     (description
@@ -8120,8 +7778,7 @@ manipulating monad transformer stacks.")
          "0g3if9km8ik80bcy130a826ig9wlk4bnf0qli3vmwdwr9nhaw2xf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-base ghc-transformers-compat))
     (home-page "https://github.com/basvandijk/monad-control")
     (synopsis "Monad transformers to lift control operations like exception
 catching")
@@ -8144,18 +7801,18 @@ a subset of @code{MonadBase} into which generic control operations such as
         (base32
          "12rw0k01gkhiqjm2fhxgkmribksmizhj14xphfn8fkd86wzl0vbh"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-transformers-compat" ,ghc-transformers-compat)
-              ("ghc-stm-chans" ,ghc-stm-chans)
-              ("ghc-lifted-base" ,ghc-lifted-base)
-              ("ghc-resourcet" ,ghc-resourcet)
-              ("ghc-conduit" ,ghc-conduit)
-              ("ghc-conduit-extra" ,ghc-conduit-extra)
-              ("ghc-fast-logger" ,ghc-fast-logger)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-monad-loops" ,ghc-monad-loops)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-exceptions" ,ghc-exceptions)))
+    (inputs (list ghc-transformers-compat
+                  ghc-stm-chans
+                  ghc-lifted-base
+                  ghc-resourcet
+                  ghc-conduit
+                  ghc-conduit-extra
+                  ghc-fast-logger
+                  ghc-transformers-base
+                  ghc-monad-control
+                  ghc-monad-loops
+                  ghc-blaze-builder
+                  ghc-exceptions))
     (home-page "https://github.com/kazu-yamamoto/logger")
     (synopsis "Provides a class of monads which can log messages for Haskell")
     (description "This Haskell package uses a monad transformer approach
@@ -8179,8 +7836,7 @@ code locations of messages.")
         (base32
          "062c2sn3hc8h50p1mhqkpyv6x8dydz2zh3ridvlfjq9nqimszaky"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/mokus0/monad-loops")
     (synopsis "Monadic loops for Haskell")
     (description "This Haskell package provides some useful control
@@ -8205,19 +7861,15 @@ operators for looping.")
      `(#:tests? #f ; TODO: ghc-test-framework-th does not build.
        #:cabal-revision
        ("1" "17l7zjykf5iqjmw1pq4iwls7v9x9d3in94iikxabx43q5l2iccsm")))
-    (inputs `(("ghc-abstract-par" ,ghc-abstract-par)
-              ("ghc-abstract-deque" ,ghc-abstract-deque)
-              ("ghc-monad-par-extras" ,ghc-monad-par-extras)
-              ("ghc-mwc-random" ,ghc-mwc-random)
-              ("ghc-parallel" ,ghc-parallel)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-                     ("ghc-test-framework-quickcheck2"
-                      ,ghc-test-framework-quickcheck2)
-                     ("ghc-test-framework" ,ghc-test-framework)
-                     ;("ghc-test-framework-th" ,ghc-test-framework-th)
-                     ))
+    (inputs (list ghc-abstract-par ghc-abstract-deque ghc-monad-par-extras
+                  ghc-mwc-random ghc-parallel))
+    (native-inputs (list ghc-quickcheck
+                         ghc-hunit
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2
+                         ghc-test-framework
+                         ;("ghc-test-framework-th" ,ghc-test-framework-th)
+                         ))
     (home-page "https://github.com/simonmar/monad-par")
     (synopsis "Haskell library for parallel programming based on a monad")
     (description "The @code{Par} monad offers an API for parallel
@@ -8241,9 +7893,7 @@ that are much lighter weight than IO-threads.")
         (base32
          "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-abstract-par" ,ghc-abstract-par)
-              ("ghc-cereal" ,ghc-cereal)
-              ("ghc-random" ,ghc-random)))
+    (inputs (list ghc-abstract-par ghc-cereal ghc-random))
     (home-page "https://github.com/simonmar/monad-par")
     (synopsis "Combinators and extra features for Par monads for Haskell")
     (description "This Haskell package provides additional data structures,
@@ -8264,10 +7914,8 @@ and other added capabilities layered on top of the @code{Par} monad.")
         (base32
          "17qaw1gg42p9v6f87dj5vih7l88lddbyd8880ananj8avanls617"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-transformers-compat" ,ghc-transformers-compat)
-              ("ghc-primitive" ,ghc-primitive)
-              ("ghc-fail" ,ghc-fail)
-              ("ghc-random" ,ghc-random)))
+    (inputs (list ghc-transformers-compat ghc-primitive ghc-fail
+                  ghc-random))
     (home-page "https://github.com/byorgey/MonadRandom")
     (synopsis "Random-number generation monad for Haskell")
     (description "This Haskell package provides support for computations
@@ -8312,15 +7960,9 @@ the @code{mtl-tf} package.")
          "1dvlp7r7r1lc3fxkwaz68f1nffg83240q8a989x24x1x67rj1clq"))))
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
-    (inputs `(("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-hashable" ,ghc-hashable)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-              ("ghc-split" ,ghc-split)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-foldl" ,ghc-foldl)))
+    (inputs (list ghc-unordered-containers ghc-hashable ghc-vector
+                  ghc-vector-algorithms ghc-split))
+    (native-inputs (list ghc-hspec ghc-hunit ghc-quickcheck ghc-foldl))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Haskell classes for mapping, folding, and traversing monomorphic
 containers")
@@ -8345,8 +7987,7 @@ data structures as non-empty.")
          "0ki1d3b1xpf653qj7brlqdgngghwrnmapy5gja75iiydfx2506a1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-groups" ,ghc-groups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)))
+     (list ghc-groups ghc-semigroupoids))
     (home-page "https://hackage.haskell.org/package/monoid-extras")
     (synopsis "Various extra monoid-related definitions and utilities")
     (description "This package provides various extra monoid-related
@@ -8449,17 +8090,12 @@ binding.")
          "0ny2mw4am24d6ykrm8rbcjnrq6p2cjmzjb4m6qfk54wfdxflvmim"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-math-functions" ,ghc-math-functions)))
+     (list ghc-primitive ghc-vector ghc-math-functions))
     (arguments
      `(#:tests? #f)) ; FIXME: Test-Suite `spec` fails.
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-hunit ghc-quickcheck ghc-test-framework
+           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/mwc-random")
     (synopsis "Random number generation library for Haskell")
     (description "This Haskell package contains code for generating
@@ -8490,7 +8126,7 @@ between 2 and 3 times faster than the Mersenne Twister.")
     (build-system haskell-build-system)
     (arguments `(#:haddock? #f))
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (home-page "https://hackage.haskell.org/package/nats")
     (synopsis "Natural numbers")
     (description "This library provides the natural numbers for Haskell.")
@@ -8533,8 +8169,8 @@ between 2 and 3 times faster than the Mersenne Twister.")
        #:cabal-revision
        ("1"
         "1wfdy716s5p1sqp2gsg43x8wch2dxg0vmbbndlb2h3d8c9jzxnca")))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+    (inputs (list ncurses))
+    (native-inputs (list ghc-c2hs))
     (home-page "https://john-millikin.com/software/haskell-ncurses/")
     (synopsis "Modernised bindings to GNU ncurses")
     (description "GNU ncurses is a library for creating command-line application
@@ -8561,10 +8197,8 @@ ncurses.")
     ;; The regression tests depend on an unpublished module.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-doctest ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/haskell/network")
     (synopsis "Low-level networking interface")
     (description
@@ -8588,7 +8222,7 @@ ncurses.")
      `(#:cabal-revision
        ("4" "1gd9a8j7fwg0jz0s6il5fk9sl0hm19ja1w56ix51wa0qi2h5x56d")))
     (inputs
-     `(("ghc-network" ,ghc-network)))
+     (list ghc-network))
     (home-page "https://github.com/haskell/network-bsd")
     (synopsis "POSIX network database (<netdb.h>) API")
     (description "This package provides Haskell bindings to the the POSIX
@@ -8610,7 +8244,7 @@ network database (<netdb.h>) API.")
          "0pnwcg13k4qw82n0zc1xibyc24sc77y79j5a62pqdmjrnz4wrc7j"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-doctest))
     (home-page "https://hackage.haskell.org/package/network-byte-order")
     (synopsis "Network byte order utilities")
     (description "This library provides peek and poke functions for network
@@ -8655,8 +8289,7 @@ IPv4, IPv6 and MAC addresses.")
          "0whvi0pbwjy6dbwfdf9rv1j3yr3lcmfp3q7a8pwq63g537l4l2l3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network" ,ghc-network)
-       ("ghc-network-bsd" ,ghc-network-bsd)))
+     (list ghc-network ghc-network-bsd))
     (home-page
      "http://hackage.haskell.org/package/network-multicast")
     (synopsis "Simple multicast library for Haskell")
@@ -8686,13 +8319,10 @@ sending UDP datagrams over multicast (class D) addresses.")
          "111m485rx2kyqdymi1x6sl08hi6lp34q3f41yqcx99086swnv1ap"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-th-compat" ,ghc-th-compat)))
+     (list ghc-th-compat))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page
      "https://github.com/haskell/network-uri")
     (synopsis "Library for URI manipulation")
@@ -8716,8 +8346,7 @@ sending UDP datagrams over multicast (class D) addresses.")
          "04bymwhkvlsgcsd0v630mndrzf0xnh3v81ba6nfzwcvbg3ksr2wa"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/sjakobi/newtype-generics")
     (synopsis "Typeclass and set of functions for working with newtypes")
     (description "The @code{Newtype} typeclass represents the packing and
@@ -8743,9 +8372,7 @@ and an alternative to newtype-th.")
          "0f01q916dzkl1i0v15qrw9cviycki5g3fgi6x8gs45iwbzssq52n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-semigroups ghc-utility-ht ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/non-negative")
     (synopsis "Non-negative numbers class")
     (description "This library provides a class for non-negative numbers,
@@ -8772,10 +8399,8 @@ of Peano numbers).")
      `(#:cabal-revision
        ("2" "09xvg4lpmb1hw153afhbjrdg9v3npfwpdfhpv5y8b0qvb4zi3n9q")))
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-entropy" ,ghc-entropy)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-base64-bytestring ghc-entropy ghc-unliftio
+           ghc-unliftio-core))
     (home-page "https://github.com/prowdsponsor/nonce")
     (synopsis "Generate cryptographic nonces in Haskell")
     (description
@@ -8873,7 +8498,7 @@ date and time formats.")
      `(#:cabal-revision
        ("2" "1j6ln1dkvhdvnwl33bp0xf9lhc4sybqk0aw42p8cq81xwwzbn7y9")))
     (inputs
-     `(("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/old-time")
     (synopsis "Time compatibility library for Haskell")
     (description "Old-time is a package for backwards compatibility with the
@@ -8932,10 +8557,7 @@ traditionally so named type-wrapper for attaching typeclass instances.")
      `(#:cabal-revision
        ("1" "1748mrb6r9mpf5jbrx436lwbg8w6dadyy8dhxw2dwnrj5z7zf741")))
     (inputs
-     `(("ghc-objectname" ,ghc-objectname)
-       ("ghc-gluraw" ,ghc-gluraw)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-openglraw" ,ghc-openglraw)))
+     (list ghc-objectname ghc-gluraw ghc-statevar ghc-openglraw))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Haskell bindings for the OpenGL graphics system")
     (description "This package provides Haskell bindings for the OpenGL
@@ -8961,9 +8583,7 @@ version 1.3).")
     (arguments
      `(#:extra-directories ("glu")))
     (inputs
-     `(("ghc-half" ,ghc-half)
-       ("ghc-fixed" ,ghc-fixed)
-       ("glu" ,glu)))
+     (list ghc-half ghc-fixed glu))
     (home-page "https://wiki.haskell.org/Opengl")
     (synopsis "Raw Haskell bindings for the OpenGL graphics system")
     (description "OpenGLRaw is a raw Haskell binding for the OpenGL 4.5
@@ -8991,7 +8611,7 @@ found at runtime, a userError is thrown.")
          "1hwmwbsxzwv68b39rv4gn3da6irv8zm89gqrkc3rdsgwi5ziyn3i"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-random" ,ghc-random)))
+     (list ghc-random))
     (home-page "http://wiki.haskell.org/Operational")
     (synopsis "Implementation of difficult monads made easy with operational semantics")
     (description
@@ -9048,9 +8668,7 @@ arguments.")
                (("chell >= 0\\.4 && < 0\\.5") "chell >= 0.4 && < 0.6"))
              #t)))))
     (inputs
-     `(("ghc-monads-tf" ,ghc-monads-tf)
-       ("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)))
+     (list ghc-monads-tf ghc-chell ghc-chell-quickcheck))
     (home-page "https://john-millikin.com/software/haskell-options/")
     (synopsis "Powerful and easy-to-use command-line option parser")
     (description
@@ -9103,10 +8721,9 @@ easily work with command-line options.")
      `(#:cabal-revision
        ("1" "0401ik87gm9gjpch6lmkczygp59na3f1j7bcs6mc2r929c2xgsqn")))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)))
+     (list ghc-transformers-compat ghc-ansi-wl-pprint))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/pcapriotti/optparse-applicative")
     (synopsis "Utilities and combinators for parsing command line options")
     (description "This package provides utilities and combinators for parsing
@@ -9127,8 +8744,7 @@ command line options in Haskell.")
         (base32 "0p6axj6km4440ss5naw68r3r85si4qxqgrklp6ssfyapawy0s88w"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/tarleb/jira-wiki-markup")
     (synopsis "Handle Jira wiki markup")
     (description
@@ -9150,7 +8766,7 @@ to other formats.")
         (base32 "09x2xrppwypi369y7rzf3ln2g7c3g9qfckn2gydxpfzglcp9rziw"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/jgm/emojis#readme")
     (synopsis "Conversion between emoji characters and their names.")
     (description
@@ -9183,12 +8799,9 @@ require aeson
         (base32 "0kbxin1q8xj9sgdl185gncrdjwcfzndp8sl5qll8y93l60yq8dxi"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-errors" ,ghc-errors)))
+     (list ghc-base16-bytestring ghc-base64-bytestring ghc-errors))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/cjdev/text-conversions#readme")
     (synopsis "Safe conversions between textual types")
     (description "Safe conversions between textual types")
@@ -9209,13 +8822,10 @@ require aeson
         (base32
          "0xyrxlb602z8bc9sr2y1fag0x56a20yj5qrkvy7iwc6hnznrynxz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hashable" ,ghc-hashable)))
+    (inputs (list ghc-hashable))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-quickcheck-instances"
-        ,ghc-quickcheck-instances)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+           ghc-quickcheck-instances))
     (arguments
      `(#:tests? #f ; TODO: Needs tasty<1.3
        #:cabal-revision
@@ -9246,11 +8856,9 @@ plus the length of the UTF-8 encoded payload.")
         (base32 "07l1pyx93gv95cn1wh1di129axhm9sqsn4znykliacv60ld854ys"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (home-page "https://github.com/jtdaugherty/text-zipper/")
     (synopsis "Text editor zipper library")
     (description
@@ -9277,13 +8885,10 @@ Implementations using both of these examples are provided.")
         (base32 "1p9kgjlf7y4p1symvkwndgs4lvyw2c45bsgld09y9r4aiqbhdrxp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-safe" ,ghc-safe)
-       ("ghc-emojis" ,ghc-emojis)))
+     (list ghc-safe ghc-emojis))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jgm/doclayout")
     (synopsis "Pretty-printing library for laying out text documents")
     (description
@@ -9317,68 +8922,68 @@ code.  It was designed for use in @code{Pandoc}.")
              #t)))))
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-citeproc" ,ghc-citeproc)
-       ("ghc-commonmark-extensions" ,ghc-commonmark-extensions)
-       ("ghc-commonmark" ,ghc-commonmark)
-       ("ghc-commonmark-pandoc" ,ghc-commonmark-pandoc)
-       ("ghc-connection" ,ghc-connection)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-doclayout" ,ghc-doclayout)
-       ("ghc-doctemplates" ,ghc-doctemplates)
-       ("ghc-emojis" ,ghc-emojis)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-haddock-library" ,ghc-haddock-library)
-       ("ghc-hslua" ,ghc-hslua)
-       ("ghc-hslua-module-path" ,ghc-hslua-module-path)
-       ("ghc-hslua-module-system" ,ghc-hslua-module-system)
-       ("ghc-hslua-module-text" ,ghc-hslua-module-text)
-       ("ghc-hsyaml" ,ghc-hsyaml)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-client-tls" ,ghc-http-client-tls)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-ipynb" ,ghc-ipynb)
-       ("ghc-jira-wiki-markup" ,ghc-jira-wiki-markup)
-       ("ghc-juicypixels" ,ghc-juicypixels)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)
-       ("ghc-random" ,ghc-random)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-sha" ,ghc-sha)
-       ("ghc-skylighting-core" ,ghc-skylighting-core)
-       ("ghc-skylighting" ,ghc-skylighting)
-       ("ghc-split" ,ghc-split)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-texmath" ,ghc-texmath)
-       ("ghc-text-conversions" ,ghc-text-conversions)
-       ("ghc-unicode-collation" ,ghc-unicode-collation)
-       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-zip-archive" ,ghc-zip-archive)
-       ("ghc-zlib" ,ghc-zlib)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-lua" ,ghc-tasty-lua)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-diff" ,ghc-diff)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-aeson
+           ghc-aeson-pretty
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-base-compat
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-case-insensitive
+           ghc-citeproc
+           ghc-commonmark-extensions
+           ghc-commonmark
+           ghc-commonmark-pandoc
+           ghc-connection
+           ghc-data-default
+           ghc-doclayout
+           ghc-doctemplates
+           ghc-emojis
+           ghc-file-embed
+           ghc-glob
+           ghc-haddock-library
+           ghc-hslua
+           ghc-hslua-module-path
+           ghc-hslua-module-system
+           ghc-hslua-module-text
+           ghc-hsyaml
+           ghc-http-client
+           ghc-http-client-tls
+           ghc-http
+           ghc-http-types
+           ghc-ipynb
+           ghc-jira-wiki-markup
+           ghc-juicypixels
+           ghc-network
+           ghc-network-uri
+           ghc-pandoc-types
+           ghc-random
+           ghc-safe
+           ghc-scientific
+           ghc-sha
+           ghc-skylighting-core
+           ghc-skylighting
+           ghc-split
+           ghc-syb
+           ghc-tagsoup
+           ghc-temporary
+           ghc-texmath
+           ghc-text-conversions
+           ghc-unicode-collation
+           ghc-unicode-transforms
+           ghc-unordered-containers
+           ghc-xml-conduit
+           ghc-xml
+           ghc-zip-archive
+           ghc-zlib))
+    (native-inputs
+     (list ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit
+           ghc-tasty-lua
+           ghc-tasty-quickcheck
+           ghc-diff
+           ghc-quickcheck))
     (home-page "https://pandoc.org")
     (synopsis "Conversion between markup formats")
     (description
@@ -9545,15 +9150,14 @@ version = Version [~a] []
 " (string-map (lambda (chr) (if (eq? chr #\.) #\, chr)) ,version))))
              #t)))))
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-aeson" ,ghc-aeson)))
+     (list ghc-syb ghc-aeson))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-string-qq" ,ghc-string-qq)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-string-qq
+           ghc-hunit))
     (home-page "https://pandoc.org")
     (synopsis "Types for representing a structured document")
     (description
@@ -9645,12 +9249,12 @@ combinators.")
     (arguments `(#:tests? #f)) ; FIXME: Test fails with "cannot satisfy
                                ; -package attoparsec-0.13.0.1"
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-charset" ,ghc-charset)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-base-orphans
+           ghc-attoparsec
+           ghc-scientific
+           ghc-semigroups
+           ghc-charset
+           ghc-unordered-containers))
     (home-page "https://github.com/ekmett/parsers/")
     (synopsis "Parsing combinators")
     (description "This library provides convenient combinators for working
@@ -9679,16 +9283,15 @@ the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
      `(#:cabal-revision
        ("1" "02vhx94mqapyigvayb6cj7p7snn354pb542n3qyvsm0gih52wlja")))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-aeson ghc-hashable))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-genvalidity" ,ghc-genvalidity)
-       ("ghc-genvalidity-hspec" ,ghc-genvalidity-hspec)
-       ("ghc-genvalidity-property" ,ghc-genvalidity-property)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-validity" ,ghc-validity)))
+     (list ghc-hspec
+           ghc-quickcheck
+           ghc-genvalidity
+           ghc-genvalidity-hspec
+           ghc-genvalidity-property
+           ghc-hspec
+           ghc-validity))
     (home-page
      "https://hackage.haskell.org/package/path")
     (synopsis "Support for well-typed paths")
@@ -9715,14 +9318,14 @@ invariants.")
      `(#:cabal-revision
        ("3" "0rsr9r2175lf7zcz2sns0mhxkvl21pm50sjidjq5v75nalrsw6rp")))
     (inputs
-     `(("ghc-dlist" ,ghc-dlist)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-path" ,ghc-path)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-dlist
+           ghc-exceptions
+           ghc-path
+           ghc-transformers-base
+           ghc-unix-compat
+           ghc-temporary))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page
      "https://github.com/mrkkrp/path-io")
     (synopsis "Functions for manipulating well-typed paths")
@@ -9820,10 +9423,9 @@ rules.")
     (arguments
      `(#:extra-directories ("pcre")))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list pkg-config ghc-hunit))
     (home-page "https://github.com/Daniel-Diaz/pcre-light")
     (synopsis "Haskell library for Perl 5 compatible regular expressions")
     (description "This package provides a small, efficient, and portable regex
@@ -9847,30 +9449,28 @@ syntax and semantics as Perl 5.")
          "13lp9i94f57qhifdmr1vnsrra34526f7kqa1sybcaj2jh2v3q85k"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-lift-type" ,ghc-lift-type)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-silently" ,ghc-silently)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-shakespeare" ,ghc-shakespeare)))
+     (list ghc-aeson
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-conduit
+           ghc-fast-logger
+           ghc-http-api-data
+           ghc-lift-type
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-resource-pool
+           ghc-resourcet
+           ghc-scientific
+           ghc-silently
+           ghc-th-lift-instances
+           ghc-unliftio-core
+           ghc-unliftio
+           ghc-unordered-containers
+           ghc-vector))
+    (native-inputs
+     (list ghc-hspec ghc-quickcheck ghc-quickcheck-instances
+           ghc-shakespeare))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Type-safe, multi-backend data serialization for Haskell")
     (description "This Haskell package allows Haskell programs to access data
@@ -9892,28 +9492,26 @@ storage systems like PostgreSQL, SQLite, and MariaDB in a type-safe way.")
          "12za89crbk74mya4qxpw5fp5fqp64vwz5s8vbjd7m8r3j3vbw338"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-microlens-th" ,ghc-microlens-th)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)))
-    (native-inputs
-     `(("ghc-persistent-template"
-        ,ghc-persistent-template)
-       ("ghc-persistent-test" ,ghc-persistent-test)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-system-fileio" ,ghc-system-fileio)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-persistent
+           ghc-aeson
+           ghc-conduit
+           ghc-microlens-th
+           ghc-monad-logger
+           ghc-resource-pool
+           ghc-resourcet
+           ghc-unliftio-core
+           ghc-unordered-containers))
+    (native-inputs
+     (list ghc-persistent-template
+           ghc-persistent-test
+           ghc-exceptions
+           ghc-fast-logger
+           ghc-hspec
+           ghc-hunit
+           ghc-quickcheck
+           ghc-system-fileio
+           ghc-system-filepath
+           ghc-temporary))
     (home-page
      "https://www.yesodweb.com/book/persistent")
     (synopsis "Backend for the persistent library using sqlite3")
@@ -9937,18 +9535,16 @@ system dependencies.")
          "0c9cs27j43azimj74s2m2cdks87682ibpy1xbyzvygipgmb8nj6w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-unordered-containers"
-        ,ghc-unordered-containers)))
+     (list ghc-persistent
+           ghc-aeson
+           ghc-http-api-data
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-th-lift-instances
+           ghc-unordered-containers))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Type-safe, non-relational, multi-backend persistence")
     (description "This Haskell package provides interfaces and helper
@@ -9970,26 +9566,23 @@ functions for the ghc-persistent package.")
          "07q53jvhz00cf10k7a8fkvykgwcl10fgzh8k9gv1d248f336crvs"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-persistent-template" ,ghc-persistent-template)
-       ("ghc-random" ,ghc-random)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-aeson
+           ghc-blaze-html
+           ghc-conduit
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-path-pieces
+           ghc-persistent
+           ghc-persistent-template
+           ghc-random
+           ghc-resourcet
+           ghc-transformers-base
+           ghc-unliftio
+           ghc-unliftio-core
+           ghc-unordered-containers))
+    (native-inputs
+     (list ghc-quickcheck ghc-quickcheck-instances ghc-hspec
+           ghc-hspec-expectations ghc-hunit))
     (home-page "https://www.yesodweb.com/book/persistent")
     (synopsis "Tests for the Persistent database library")
     (description
@@ -10014,13 +9607,10 @@ libraries.")
          "15g6qh0fb7kjj3l0w8cama7cxgnhnhybw760md9yy7cqfq15cfzg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-doctest))
     (home-page
      "https://github.com/quchen/pgp-wordlist")
     (synopsis
@@ -10052,15 +9642,10 @@ For further information, see
          "163lx5sf68zx5kik5h1fjsyckwr9shdsn5k2dsjq3mhg077nxqgl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-void" ,ghc-void)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-exceptions ghc-mmorph ghc-void ghc-semigroups))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2"
-        ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page
      "https://hackage.haskell.org/package/pipes")
     (synopsis "Compositional pipelines")
@@ -10150,7 +9735,7 @@ Strings.")
          "1sz7hlnfd86hbwrgqxczmsjsl1ki0ryi9dgzscxlsgjkdgcdia2p"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/pqueue")
     (synopsis "Reliable, persistent, fast priority queues")
     (description
@@ -10216,13 +9801,13 @@ types.")
         (base32 "0i8b3wjjpdvp5b857j065jwyrpgcnzgk75imrj7i3yhl668acvjy"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-pgp-wordlist" ,ghc-pgp-wordlist)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-doctest
+           ghc-pgp-wordlist
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/quchen/prettyprinter")
     (synopsis
      "Modern, easy to use, well-documented, extensible pretty-printer")
@@ -10246,9 +9831,8 @@ clashes, @code{Text}-based, extensible.")
         (base32 "1cqxbcmy9ykk4pssq5hp6h51g2h547zfz549awh0c1fni8q3jdw1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-prettyprinter" ,ghc-prettyprinter)))
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+     (list ghc-ansi-terminal ghc-prettyprinter))
+    (native-inputs (list ghc-doctest))
     (home-page
      "https://github.com/quchen/prettyprinter")
     (synopsis
@@ -10290,8 +9874,7 @@ ByteStrings in the style of other common *nix hex dump tools.")
          "1lkgvbv00v1amvpqli6y4dzsbs25l4v3wlagvhwx8qxhw2390zrh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-lexer" ,ghc-haskell-lexer)
-       ("ghc-happy" ,ghc-happy)))
+     (list ghc-haskell-lexer ghc-happy))
     (home-page "https://wiki.github.com/yav/pretty-show")
     (synopsis "Tools for working with derived `Show` instances")
     (description
@@ -10319,15 +9902,10 @@ examination.")
     (build-system haskell-build-system)
 
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-prettyprinter-ansi-terminal" ,ghc-prettyprinter-ansi-terminal)
-       ("ghc-prettyprinter" ,ghc-prettyprinter)))
+     (list ghc-aeson ghc-optparse-applicative
+           ghc-prettyprinter-ansi-terminal ghc-prettyprinter))
     (native-inputs
-     `(("cabal-doctest" ,cabal-doctest)
-       ("ghc-doctest" ,ghc-doctest)
-       ("ghc-glob" ,ghc-glob)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list cabal-doctest ghc-doctest ghc-glob ghc-quickcheck))
     (home-page "https://github.com/cdepillabout/pretty-simple")
     (synopsis "Pretty printer for data types with a 'Show' instance")
     (description
@@ -10382,10 +9960,7 @@ Show instance.")
          "0klqgr37f1z2z6i0a9b0giapmq0p35l5k9kz1p7f0k1597w7agi9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default" ,ghc-data-default)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-listlike" ,ghc-listlike)))
+     (list ghc-data-default ghc-generic-deriving ghc-hunit ghc-listlike))
     (home-page "https://github.com/seereason/process-extras")
     (synopsis "Extra tools for managing processes")
     (description "This package extends
@@ -10413,13 +9988,13 @@ API.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)))
+     (list ghc-base-orphans
+           ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-semigroups
+           ghc-tagged))
     (home-page "https://github.com/ekmett/profunctors/")
     (synopsis "Profunctors for Haskell")
     (description "This library provides profunctors for Haskell.")
@@ -10440,14 +10015,10 @@ API.")
          "0ac43x36i6b595jhflif1qqhri1rrqw90ama5n7rsh0ffnzyb69d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-base64-bytestring ghc-conduit ghc-conduit-extra
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec hspec-discover ghc-quickcheck))
     (home-page "https://github.com/fpco/haskell-ide")
     (synopsis "Specify Haskell project templates and generate files")
     (description
@@ -10477,11 +10048,8 @@ the ideal templating system.")
          "1b6wprbwfdjyvds2bm6na0fbqgzdkj5ikkk33whbkyh3krd3i0s0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-mtl-compat" ,ghc-mtl-compat)
-       ("ghc-paths" ,ghc-paths)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-async ghc-hashable ghc-mtl-compat ghc-paths
+           ghc-transformers-compat))
     (home-page "https://github.com/protolude/protolude")
     (synopsis "Sensible set of defaults for writing custom Preludes")
     (description
@@ -10534,14 +10102,14 @@ keys, in linear time.")
        #:cabal-revision
        ("1" "0d0mm3c8x31dasfzp1884r2irkm3c9irvvbahjzfr1bzzxfb7vyv")))
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)))
+     (list ghc-hashable))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jaspervdj/psqueues")
     (synopsis "Pure priority search queues")
     (description "The psqueues package provides
@@ -10599,10 +10167,7 @@ Typical applications of Priority Search Queues include:
          "1cpvlwzg3qznhygrr78f75p65mnljd9v5cvnagfxjqppnrkay6bj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-random" ,ghc-random)
-       ("ghc-byteable" ,ghc-byteable)))
+     (list ghc-base64-bytestring ghc-cryptohash ghc-random ghc-byteable))
     (home-page "https://github.com/PeterScott/pwstore")
     (synopsis "Secure password storage")
     (description
@@ -10676,7 +10241,7 @@ library, including the ability to split random number generators.")
         (base32
          "1lxy1wy3awf52968iy5y9r5z4qgnn2sxkdrh7js3m9gadb11w09f"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/23Skidoo/raw-strings-qq")
     (synopsis "Raw string literals for Haskell")
     (description
@@ -10723,22 +10288,22 @@ includes efficient implementations for common data types.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-either" ,ghc-either)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-hashable-time" ,ghc-hashable-time)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-selective" ,ghc-selective)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-instances" ,ghc-vector-instances)
-       ("ghc-void" ,ghc-void)))
+     (list ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-dlist
+           ghc-either
+           ghc-hashable
+           ghc-hashable-time
+           ghc-profunctors
+           ghc-scientific
+           ghc-selective
+           ghc-semigroupoids
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector
+           ghc-vector-instances
+           ghc-void))
     (home-page "https://github.com/nikita-volkov/rebase")
     (synopsis "Progressive alternative to the base package
 for Haskell")
@@ -10784,11 +10349,8 @@ the community, with the missing features being added with pull-requests.")
      '(#:cabal-revision
        ("2" "1kd38n9h2hxl09khvkvkhnflgm6rbky1zkw3iazlpb8xk9zkk39s")))
     (inputs
-     `(("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-fingertree ghc-hashable ghc-unordered-containers
+           ghc-semigroupoids ghc-semigroups))
     (home-page "https://github.com/ekmett/reducers/")
     (synopsis "Semigroups, specialized containers and a general map/reduce framework")
     (description "This library provides various semigroups, specialized
@@ -10832,11 +10394,9 @@ specify refactorings without depending on GHC.")
         (base32
          "1kd6dgnp99dzbkxdnj01g81j03v7zq5cwg0sf19rlcmvgs8i8gmz"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-tagged" ,ghc-tagged)))
+    (inputs (list ghc-tagged))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/ekmett/reflection")
     (synopsis "Reify arbitrary terms into types that can be reflected back
 into terms")
@@ -10871,14 +10431,14 @@ configurations to coexist without resorting to mutable global variables or
                 "template-haskell >= 2.7\n"))
              #t)))))
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-pcre-builtin" ,ghc-regex-pcre-builtin)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-time-locale-compat" ,ghc-time-locale-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-base-compat
+           ghc-hashable
+           ghc-regex-base
+           ghc-regex-pcre-builtin
+           ghc-regex-tdfa
+           ghc-time-locale-compat
+           ghc-unordered-containers
+           ghc-utf8-string))
     (home-page "http://regex.uk")
     (synopsis "Toolkit for regex-base")
     (description
@@ -10904,12 +10464,9 @@ copious examples.")
         (base32
          "0di66pi2kq5rrsn0k6pwakzwa0bgi9jfb2csm72kp5gzqdws8s8p"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-filtrable" ,ghc-filtrable)))
+    (inputs (list ghc-filtrable))
     (native-inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)))
+     (list ghc-smallcheck ghc-tasty ghc-tasty-hunit ghc-tasty-smallcheck))
     (home-page "https://github.com/feuerbach/regex-applicative")
     (synopsis "Regex-based parsing with applicative interface")
     (description
@@ -10955,8 +10512,7 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
          "0ivrdrcphrz3g6nr5wbsmfiv8i82caw0kf6z5qlmlq7xf9n3hywg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-posix" ,ghc-regex-posix)))
+     (list ghc-regex-base ghc-regex-posix))
     (home-page "https://sourceforge.net/projects/lazy-regex")
     (synopsis "Replaces/Enhances Text.Regex")
     (description "This library provides one module layer over
@@ -10978,8 +10534,7 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
          "1p90fn90yhp7fvljjdqjp41cszidcfz4pw7fwvzyx4739b98x8sg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
+     (list ghc-regex-base ghc-regex-tdfa))
     (home-page "https://hub.darcs.net/shelarcy/regex-compat-tdfa")
     (synopsis "Unicode Support version of Text.Regex, using regex-tdfa")
     (description
@@ -11005,10 +10560,9 @@ this problem.")
      `(#:extra-directories ("pcre")
        #:cabal-revision
        ("3" "1mxy2y7dmv37hhsasm17x2mb9dhmzza13pc7jfrk77inpig78ib8")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)
-       ("pcre" ,pcre)))
+     (list ghc-regex-base pcre))
     (home-page "https://hackage.haskell.org/package/regex-pcre")
     (synopsis "Enhancement of the builtin Text.Regex library")
     (description
@@ -11031,7 +10585,7 @@ expressions.")
                 "0pn55ssrwr05c9sa9jvp0knvzjksz04wn3pmzf5dz4xgbyjadkna"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
+     (list ghc-regex-base))
     (home-page "https://hackage.haskell.org/package/regex-pcre-builtin")
     (synopsis "Enhancement of the builtin Text.Regex library")
     (description
@@ -11056,7 +10610,7 @@ providing the PCRE backend to accompany regex-base, with bundled code from
          "1715b57z67q4hg0jz44wkxrxi3v7n5iagw6gw48pf8hr34wpr0n7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
+     (list ghc-regex-base))
     (home-page "https://sourceforge.net/projects/lazy-regex")
     (synopsis "POSIX regular expressions for Haskell")
     (description "This library provides the POSIX regex backend used by the
@@ -11081,8 +10635,8 @@ Haskell library @code{regex-base}.")
      '(#:cabal-revision
        ("1" "02gwf740vs0jy3l6dgw72r8c04yggshia6w16n140ncpsici8c4r")))
     (inputs
-     `(("ghc-regex-base" ,ghc-regex-base)))
-    (native-inputs `(("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-regex-base))
+    (native-inputs (list ghc-utf8-string))
     (home-page "https://github.com/haskell-hvr/regex-tdfa")
     (synopsis "POSIX extended regular expressions in Haskell.")
     (description
@@ -11107,8 +10661,7 @@ inspired by libtre.")
          "1dspwi28krinkxdd7waq4y6plz0dfmzz72885p9pcqp1r14qrhj3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-haskeline" ,ghc-haskeline)))
+     (list ghc-exceptions ghc-haskeline))
     (home-page "https://github.com/sdiehl/repline")
     (synopsis "Haskeline wrapper for GHCi-like REPL interfaces")
     (description
@@ -11132,7 +10685,7 @@ normal mtl transformers.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-rebase" ,ghc-rebase)))
+     (list ghc-rebase))
     (home-page "https://github.com/nikita-volkov/rerebase")
     (synopsis "Reexports from ``base'' with many other standard libraries")
     (description "A rich drop-in replacement for @code{base}.  For details and
@@ -11159,10 +10712,9 @@ the project's home page}.")
        #:cabal-revision
        ("3" "0af5dsdyn04i76d012xhhfkkml10bqzl6q2yivkhf8rlvh1fiii5")))
     (inputs
-     `(("ghc-base16-bytestring" ,ghc-base16-bytestring)))
+     (list ghc-base16-bytestring))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/haskell/hackage-security")
     (synopsis "Domain Name Service (DNS) lookup via @code{libresolv}")
     (description "This package implements an API for accessing the
@@ -11186,10 +10738,8 @@ Unix systems.")
         (base32
          "04mw8b9djb14zp4rdi6h7mc3zizh597ffiinfbr4m0m8psifw9w6"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hashable" ,ghc-hashable)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-transformers-base" ,ghc-transformers-base)
-              ("ghc-vector" ,ghc-vector)))
+    (inputs (list ghc-hashable ghc-monad-control ghc-transformers-base
+                  ghc-vector))
     (home-page "https://github.com/bos/pool")
     (synopsis "Striped resource pooling implementation in Haskell")
     (description "This Haskell package provides striped pooling abstraction
@@ -11211,15 +10761,14 @@ connections.")
          "0zrvnikw1a0r2j59k12fxikyrg0ki5a7xhqhjgfl9h6dqpz54h85"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-mmorph" ,ghc-mmorph)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-transformers-base
+           ghc-monad-control
+           ghc-transformers-compat
+           ghc-mmorph
+           ghc-exceptions
+           ghc-unliftio-core))
     (native-inputs
-     `(("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-lifted-base ghc-hspec))
     (home-page "https://github.com/snoyberg/conduit")
     (synopsis "Deterministic allocation and freeing of scarce resources")
     (description "ResourceT is a monad transformer which creates a region of
@@ -11240,14 +10789,10 @@ code where you can safely allocate resources.")
          "0nwyis42xpmxfw8nz8qn59r3v7q0dkfzkzkhllgn30cdjbbmwhf5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-exceptions ghc-random))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-       ("ghc-hedgehog" ,ghc-hedgehog)))
+     (list ghc-hunit ghc-tasty ghc-tasty-hunit ghc-tasty-hedgehog
+           ghc-hedgehog))
     (home-page "https://github.com/Soostone/retry")
     (synopsis "Retry combinators for monadic actions that may fail")
     (description "This package exposes combinators that can wrap
@@ -11298,19 +10843,17 @@ better for some purposes.")
          "013m4xgsmg8h1rba9krxppz49lc5wz26gksms5zibsjj0w59m58h"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-microlens" ,ghc-microlens)
-       ("ghc-microlens-mtl" ,ghc-microlens-mtl)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-typed-process" ,ghc-typed-process)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unliftio" ,ghc-unliftio)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hashable
+           ghc-microlens
+           ghc-microlens-mtl
+           ghc-primitive
+           ghc-typed-process
+           ghc-unliftio-core
+           ghc-unliftio
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/commercialhaskell/rio#readme")
     (synopsis "A standard library for Haskell")
     (description "This package works as a prelude replacement for Haskell,
@@ -11342,7 +10885,7 @@ expose it from another module in the hierarchy.
          "18pp6cn9np9jgs01x9mac6wk41k34g86fx5ibfarbapqr1138115"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/safe#readme")
     (synopsis "Library of safe (exception free) functions")
     (description "This library provides wrappers around @code{Prelude} and
@@ -11365,9 +10908,7 @@ exceptions.")
          "15a80s87f603w8l7fnaba2cyqx62042vvcidpjzyga2685wpyqv9"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-void" ,ghc-void)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec ghc-void hspec-discover))
     (home-page "https://github.com/fpco/safe-exceptions")
     (synopsis "Safe, consistent, and easy exception handling")
     (description "Runtime exceptions - as exposed in @code{base} by the
@@ -11393,15 +10934,11 @@ handling wrong.")
          "04g3070cbjdqj0h9l9ii6470xcbn40xfv4fr89a8yvnkdim9nyfm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-conduit-combinators ghc-exceptions
+           ghc-resourcet))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-th" ,ghc-test-framework-th)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+           ghc-test-framework-th))
     (home-page "https://github.com/luispedro/safeio")
     (synopsis "Write output to disk atomically")
     (description
@@ -11423,7 +10960,7 @@ avoid the problem of partial intermediate files.")
          "0rpg9j6fy70i0b9dkrip9d6wim0nac0snp7qzbhykjkqlcvvgr91"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://github.com/ChrisKuklewicz/SafeSemaphore")
     (synopsis "Exception safe semaphores")
     (description "This library provides exception safe semaphores that can be
@@ -11446,14 +10983,14 @@ are not exception safe and can be broken by @code{killThread}.")
          "1ndgai8idlxyccvkz5zsgq06v58blc30i6hkky5b1sf5x6gs2h29"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stringsearch" ,ghc-stringsearch)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-th" ,ghc-tasty-th)))
+     (list ghc-stringsearch
+           ghc-conduit
+           ghc-exceptions
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck
+           ghc-tasty-th))
     (home-page "https://hackage.haskell.org/package/sandi")
     (synopsis "Data encoding library")
     (description "Reasonably fast data encoding library.")
@@ -11475,9 +11012,7 @@ are not exception safe and can be broken by @code{killThread}.")
          "1r5kffjfwpas45g74sip8glrj1m9nygrnxjm7xgw898rq9pnafgn"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-unliftio" ,ghc-unliftio)))
+     (list ghc-hspec hspec-discover ghc-unliftio))
     (home-page "https://github.com/fpco/say")
     (synopsis
      "Send textual messages to a Handle in a thread-friendly way")
@@ -11509,17 +11044,15 @@ as sending some messages to the terminal - that has the following properties:
          "1aa3ngb71l2sh1x2829napnr1w285q0sn2f7z2wvi3ynng2238d3"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-integer-logarithms" ,ghc-integer-logarithms)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-integer-logarithms ghc-hashable ghc-primitive))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-ant-xml" ,ghc-tasty-ant-xml)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-tasty
+           ghc-tasty-ant-xml
+           ghc-tasty-hunit
+           ghc-tasty-smallcheck
+           ghc-tasty-quickcheck
+           ghc-smallcheck
+           ghc-quickcheck))
     (home-page "https://github.com/basvandijk/scientific")
     (synopsis "Numbers represented using scientific notation")
     (description "This package provides @code{Data.Scientific}, which provides
@@ -11557,7 +11090,7 @@ notation}.")
          "00y67v80a8l09i3k76z09lg25kw72ivl09nag8ckdlk4a0cfnzfq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("sdl" ,sdl)))
+     (list sdl))
     (home-page "https://hackage.haskell.org/package/SDL")
     (synopsis "LibSDL for Haskell")
     (description "Simple DirectMedia Layer (libSDL) is a cross-platform
@@ -11582,14 +11115,9 @@ award winning Linux port of \"Civilization: Call To Power.\"")
     (build-system haskell-build-system)
     (arguments '(#:tests? #f)) ; tests require graphical environment
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-linear" ,ghc-linear)
-       ("ghc-statevar" ,ghc-statevar)
-       ("ghc-vector" ,ghc-vector)
-       ("sdl2" ,sdl2)))
+     (list ghc-exceptions ghc-linear ghc-statevar ghc-vector sdl2))
     (native-inputs
-     `(("ghc-weigh" ,ghc-weigh)
-       ("pkg-config" ,pkg-config)))
+     (list ghc-weigh pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2")
     (synopsis "High- and low-level bindings to the SDL library")
     (description
@@ -11617,10 +11145,9 @@ programming.")
          "1pr6dkg73cy9z0w54lrkj9c5bhxj56nl92lxikjy8kz6nyr455rr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-sdl2" ,ghc-sdl2)
-       ("sdl2-image" ,sdl2-image)))
+     (list ghc-sdl2 sdl2-image))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2-image")
     (synopsis "Bindings to SDL2_image")
     (description "This package provides Haskell bindings to
@@ -11641,14 +11168,14 @@ programming.")
          "1k8avyccq5l9z7bwxigim312yaancxl1sr3q6a96bcm7pnhiak0g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-sdl2" ,ghc-sdl2)
-       ("ghc-vector" ,ghc-vector)
-       ("sdl2-mixer" ,sdl2-mixer)))
+     (list ghc-data-default-class
+           ghc-lifted-base
+           ghc-monad-control
+           ghc-sdl2
+           ghc-vector
+           sdl2-mixer))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://hackage.haskell.org/package/sdl2-mixer")
     (synopsis "Bindings to SDL2 mixer")
     (description "This package provides Haskell bindings to
@@ -11676,8 +11203,7 @@ programming.")
               (sdl-image-include (string-append sdl-image "/include/SDL")))
          (list (string-append "--extra-include-dirs=" sdl-image-include)))))
     (inputs
-     `(("ghc-sdl" ,ghc-sdl)
-       ("sdl-image" ,sdl-image)))
+     (list ghc-sdl sdl-image))
     (home-page "https://hackage.haskell.org/package/SDL-image")
     (synopsis "Haskell bindings to libSDL_image")
     (description "SDL_image is an image file loading library.  It loads images
@@ -11706,8 +11232,7 @@ PNG, PNM, TGA, TIFF, XCF, XPM, XV.")
               (sdl-mixer-include (string-append sdl-mixer "/include/SDL")))
          (list (string-append "--extra-include-dirs=" sdl-mixer-include)))))
     (inputs
-     `(("ghc-sdl" ,ghc-sdl)
-       ("sdl-mixer" ,sdl-mixer)))
+     (list ghc-sdl sdl-mixer))
     (home-page "https://hackage.haskell.org/package/SDL-mixer")
     (synopsis "Haskell bindings to libSDL_mixer")
     (description "SDL_mixer is a sample multi-channel audio mixer library.  It
@@ -11730,8 +11255,7 @@ MIDI, Ogg Vorbis, and SMPEG MP3 libraries.")
         (base32
          "19hnw2cfbsfjynxq1bq9f6djbxhsc1k751ml0y1ab3ah913mm29j"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-byteable" ,ghc-byteable)
-              ("ghc-memory" ,ghc-memory)))
+    (inputs (list ghc-byteable ghc-memory))
     (home-page "https://github.com/vincenthz/hs-securemem")
     (synopsis "Auto-scrubbing and const-time-eq memory chunk abstraction for
 Haskell")
@@ -11755,13 +11279,13 @@ a memory chunk that will be auto-scrubbed after it run out of scope.")
          "11qs4imy3cq4cx9mm6g30r6qk3rngqrmz7lkl5379gs1yvgvs44q"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-these" ,ghc-these)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)))
+     (list ghc-these
+           ghc-base-compat
+           ghc-hashable
+           ghc-tagged
+           ghc-unordered-containers
+           ghc-vector
+           ghc-semigroupoids))
     (home-page
      "https://github.com/isomorphism/these")
     (synopsis
@@ -11792,16 +11316,16 @@ class, forming lattice-like structure.")
     (build-system haskell-build-system)
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-contravariant" ,ghc-contravariant)
-       ("ghc-distributive" ,ghc-distributive)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-base-orphans
+           ghc-transformers-compat
+           ghc-bifunctors
+           ghc-comonad
+           ghc-contravariant
+           ghc-distributive
+           ghc-generic-deriving
+           ghc-hashable
+           ghc-tagged
+           ghc-unordered-containers))
     (home-page "https://github.com/ekmett/semigroupoids")
     (synopsis "Semigroupoids operations for Haskell")
     (description "This library provides a wide array of (semi)groupoids and
@@ -11830,10 +11354,7 @@ just a @code{Semigroup} are added.")
          "0h1sl3i6k8csy5zkkpy65rxzds9wg577z83aaakybr3n1gcv4855"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-nats" ,ghc-nats)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-nats ghc-tagged ghc-unordered-containers ghc-hashable))
     (home-page "https://github.com/ekmett/semigroups/")
     (synopsis "Semigroup operations for Haskell")
     (description "This package provides semigroups for Haskell.  In
@@ -11850,10 +11371,8 @@ semigroup.")
     (inherit ghc-semigroups)
     (name "ghc-semigroups-bootstrap")
     (inputs
-     `(("ghc-nats" ,ghc-nats-bootstrap)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-unordered-containers" ,ghc-unordered-containers-bootstrap)
-       ("ghc-hashable" ,ghc-hashable-bootstrap)))
+     (list ghc-nats-bootstrap ghc-tagged
+           ghc-unordered-containers-bootstrap ghc-hashable-bootstrap))
     (properties '((hidden? #t)))))
 
 (define-public ghc-serialise
@@ -11872,18 +11391,15 @@ semigroup.")
          "0vp4wyxpximpx10pssfgdsir1pc23zb62fg3kj3iblpzqfrryy69"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cborg" ,ghc-cborg)
-       ("ghc-half" ,ghc-half)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-cborg
+           ghc-half
+           ghc-hashable
+           ghc-primitive
+           ghc-unordered-containers
+           ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-quickcheck ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+           ghc-quickcheck-instances))
     (arguments
      `(#:cabal-revision
        ("2" "1qcsp15v0swxy2qlvc40fil09zq32y3wl00y3passc2a4b4yhmr4")))
@@ -11960,16 +11476,14 @@ environment variables.")
         (base32
          "1fjv3yg425d87d3dih0l3ff95g5a5yp9w85m58sjara6xqivj9s4"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-aeson" ,ghc-aeson)
-              ("ghc-blaze-markup" ,ghc-blaze-markup)
-              ("ghc-blaze-html" ,ghc-blaze-html)
-              ("ghc-vector" ,ghc-vector)
-              ("ghc-th-lift" ,ghc-th-lift)
-              ("ghc-unordered-containers" ,ghc-unordered-containers)
-              ("ghc-scientific" ,ghc-scientific)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("hspec-discover" ,hspec-discover)))
+    (inputs (list ghc-aeson
+                  ghc-blaze-markup
+                  ghc-blaze-html
+                  ghc-vector
+                  ghc-th-lift
+                  ghc-unordered-containers
+                  ghc-scientific))
+    (native-inputs (list ghc-hspec ghc-hunit hspec-discover))
     (home-page "https://www.yesodweb.com/book/shakespearean-templates")
     (synopsis "Family of type-safe template languages for Haskell")
     (description "This Haskell package provides a family of type-safe
@@ -11993,19 +11507,19 @@ interpolates variables according to the type being inserted.")
          "1kma77gixhyciimh19p64h1ndbcrs9qhk8fgyv71iqh5q57zvday"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-system-filepath-bootstrap" ,ghc-system-filepath-bootstrap)
-       ("ghc-system-fileio-bootstrap" ,ghc-system-fileio-bootstrap)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-enclosed-exceptions" ,ghc-enclosed-exceptions)
-       ("ghc-async" ,ghc-async)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-contrib" ,ghc-hspec-contrib)))
+     (list ghc-unix-compat
+           ghc-system-filepath-bootstrap
+           ghc-system-fileio-bootstrap
+           ghc-monad-control
+           ghc-lifted-base
+           ghc-lifted-async
+           ghc-exceptions
+           ghc-enclosed-exceptions
+           ghc-async
+           ghc-transformers-base
+           ghc-hunit
+           ghc-hspec
+           ghc-hspec-contrib))
     (home-page "https://github.com/yesodweb/Shelly.hs")
     (synopsis "Shell-like (systems) programming in Haskell")
     (description
@@ -12077,13 +11591,9 @@ them.")
          "112j0qfsjazf9wg1zywf7hjybgsiywk9wkm27yi8xzv27hmlv1mn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-network" ,ghc-network)
-       ("ghc-resourcet" ,ghc-resourcet)))
+     (list ghc-conduit ghc-conduit-extra ghc-network ghc-resourcet))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://github.com/kazu-yamamoto/simple-sendfile")
     (synopsis "Cross platform library for the sendfile system call")
     (description "This library tries to call minimum system calls which
@@ -12104,9 +11614,8 @@ are the bottleneck of web servers.")
          "06hmlic0n73ncwlkpx49xlv09bzsrr27ncnp5byhzlknak2gd7vp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-dictionary-sharing" ,ghc-dictionary-sharing)
-       ("ghc-testing-type-modifiers" ,ghc-testing-type-modifiers)
-       ("ghc-template-haskell" ,ghc-template-haskell)))
+     (list ghc-dictionary-sharing ghc-testing-type-modifiers
+           ghc-template-haskell))
     (arguments
      `(#:cabal-revision
        ("1" "0kax1ypjyglkn6iff1x4yz12y7f2n249m95xvdhrc63hsa4xlcqv")
@@ -12137,24 +11646,24 @@ enumerations.")
                 "0bskci0gng6nf324wna9ss4xbr1mwjkgk3mlfkr96r1m3wza5g3d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-colour" ,ghc-colour)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)))
-    (native-inputs
-     `(("ghc-diff" ,ghc-diff)
-       ("ghc-pretty-show" ,ghc-pretty-show)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-aeson
+           ghc-ansi-terminal
+           ghc-attoparsec
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-case-insensitive
+           ghc-colour
+           ghc-safe
+           ghc-utf8-string
+           ghc-xml-conduit))
+    (native-inputs
+     (list ghc-diff
+           ghc-pretty-show
+           ghc-quickcheck
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/jgm/skylighting")
     (synopsis "Syntax highlighting library")
     (description "Skylighting is a syntax highlighting library with support
@@ -12177,8 +11686,8 @@ provided.  Skylighting is intended to be the successor to highlighting-kate.")
                (base32
                 "152ywiy7h04xjy0fdl571jwahl6c9350isqbm4p0na4cjd9cczzh"))))
     (inputs
-     `(("ghc-skylighting-core" ,ghc-skylighting-core)
-       ,@(package-inputs ghc-skylighting-core)))))
+     (modify-inputs (package-inputs ghc-skylighting-core)
+       (prepend ghc-skylighting-core)))))
 
 (define-public ghc-smallcheck
   (package
@@ -12196,7 +11705,7 @@ provided.  Skylighting is intended to be the successor to highlighting-kate.")
          "0sf87zjlrgjw7q6a0499g2ywx66zvpv6rg6953fjc18fnl8rs7z4"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-logict" ,ghc-logict)))
+     (list ghc-logict))
     (home-page
      "https://github.com/feuerbach/smallcheck")
     (synopsis "Property-based testing library")
@@ -12218,9 +11727,7 @@ automatically by SmallCheck.")
                 "0wvaxy3dkv97wrncjv1rxrmjr4014hgxz82kixvcwqdhidalfi3k"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-basement" ,ghc-basement)
-       ("ghc-network" ,ghc-network)))
+     (list ghc-cereal ghc-basement ghc-network))
     (home-page "https://github.com/vincenthz/hs-socks")
     (synopsis "SOCKS proxy (version 5) implementation")
     (description
@@ -12265,9 +11772,7 @@ generics-sop}.")
          "1kkdw2c4d2hha99v9f89ahmifjxp7fxmxyfwq9a8xk6s0h9xs51w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-scientific" ,ghc-scientific)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-nats" ,ghc-nats)))
+     (list ghc-scientific ghc-ieee754 ghc-nats))
     (home-page
      "https://github.com/minad/special-values#readme")
     (synopsis "Typeclass providing special values")
@@ -12295,7 +11800,7 @@ used for example by QuickCheck, see quickcheck-special."  )
      `(#:cabal-revision
        ("1" "06pmlvyrz4rr7rsrghpyrdypprphm9522rvnz4l3i8333n4pb304")))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/split")
     (synopsis "Combinator library for splitting lists")
     (description "This package provides a collection of Haskell functions for
@@ -12317,16 +11822,16 @@ mainstream languages.")
          "0das5n44dhlcv5i233iakx37d17kidqvhrvp6w9nd7hc015ry026"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-base-compat-batteries" ,ghc-base-compat-batteries)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-random" ,ghc-random-bootstrap)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-tf-random" ,ghc-tf-random)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-async
+           ghc-base-compat-batteries
+           ghc-base-compat
+           ghc-hunit
+           ghc-math-functions
+           ghc-random-bootstrap
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-tf-random
+           ghc-vector))
     (home-page "https://hackage.haskell.org/package/splitmix")
     (synopsis "Fast and splittable pseudorandom number generator")
     (description "This package provides a Pure Haskell implementation of the
@@ -12421,27 +11926,27 @@ in the @code{IO} monad, like @code{IORef}s or parts of the OpenGL state.")
      '(;; Two tests fail: "Discrete CDF is OK" and "Quantile is CDF inverse".
        #:tests? #t))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-async" ,ghc-async)
-       ("ghc-base-orphans" ,ghc-base-orphans)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-dense-linear-algebra" ,ghc-dense-linear-algebra)
-       ("ghc-math-functions" ,ghc-math-functions)
-       ("ghc-monad-par" ,ghc-monad-par)
-       ("ghc-mwc-random" ,ghc-mwc-random)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-algorithms" ,ghc-vector-algorithms)
-       ("ghc-vector-th-unbox" ,ghc-vector-th-unbox)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)))
-    (native-inputs
-     `(("ghc-erf" ,ghc-erf)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-aeson
+           ghc-async
+           ghc-base-orphans
+           ghc-data-default-class
+           ghc-dense-linear-algebra
+           ghc-math-functions
+           ghc-monad-par
+           ghc-mwc-random
+           ghc-primitive
+           ghc-vector
+           ghc-vector-algorithms
+           ghc-vector-th-unbox
+           ghc-vector-binary-instances))
+    (native-inputs
+     (list ghc-erf
+           ghc-ieee754
+           ghc-quickcheck
+           ghc-tasty-expected-failure
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/bos/mwc-random")
     (synopsis "Haskell library of statistical types, data, and functions")
     (description "This library provides a number of common functions
@@ -12501,23 +12006,23 @@ features.")
          "0hhlxvpp7mah8dcvkknh6skx44jfk3092zz2w52zlr255bkmn3p8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-stm-chans" ,ghc-stm-chans)
-       ("ghc-cereal" ,ghc-cereal)
-       ("ghc-cereal-conduit" ,ghc-cereal-conduit)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-async" ,ghc-async)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-unliftio" ,ghc-unliftio)))
-    (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-stm-chans
+           ghc-cereal
+           ghc-cereal-conduit
+           ghc-conduit
+           ghc-conduit-extra
+           ghc-exceptions
+           ghc-resourcet
+           ghc-async
+           ghc-monad-loops
+           ghc-unliftio))
+    (native-inputs
+     (list ghc-doctest
+           ghc-quickcheck
+           ghc-hunit
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/cgaebel/stm-conduit")
     (synopsis "Introduces conduits to channels and promotes using conduits concurrently")
     (description
@@ -12538,7 +12043,7 @@ source and a sink.")
         (base32 "0rvhh0hhwz601ibpzisry7xf3j61r5sxfgp47imaa37i5bvrlynb"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Loops.
-    (inputs `(("ghc-fail" ,ghc-fail)))
+    (inputs (list ghc-fail))
 ;    (native-inputs
 ;     `(("ghc-tasty" ,ghc-tasty)
 ;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
@@ -12565,7 +12070,7 @@ for strict state threads.")
         (base32 "0fnwbfmd5vsaaqvf9182qdcjrzcfjd1zhdyvjwzifbwvn6r9kx4s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (home-page "https://github.com/cartazio/storable-complex")
     (synopsis "Haskell Storable instance for Complex")
     (description "This package provides a Haskell library including a
@@ -12589,10 +12094,7 @@ and Fortran complex data types.")
          "17nf0bx3g169cpslf8prr5h5lvxl389m23rbsyb3kdai45fibpwf"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-storablevector" ,ghc-storablevector)
-       ("ghc-timeit" ,ghc-timeit)))
+     (list ghc-semigroups ghc-utility-ht ghc-storablevector ghc-timeit))
     (home-page "https://hackage.haskell.org/package/storable-record")
     (synopsis "Elegant definition of Storable instances for records")
     (description "With this package you can build a Storable instance of
@@ -12621,9 +12123,7 @@ alignment of the record elements.")
          "0dfzhxgkn1l6ls7zh6iifhyvhm8l47n40z0ar23c6ibsa94w1ynw"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-storable-record" ,ghc-storable-record)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-storable-record ghc-utility-ht ghc-base-orphans))
     (home-page "https://hackage.haskell.org/package/storable-tuple")
     (synopsis "Storable instance for pairs and triples")
     (description "This package provides a Storable instance for pairs
@@ -12649,12 +12149,12 @@ together.")
          "06fgxbnc5vwmiv7dxywj7ncjhmxv0wjs0bys5hza6mrwn3sw5r2w"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-non-negative" ,ghc-non-negative)
-       ("ghc-utility-ht" ,ghc-utility-ht)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-unsafe" ,ghc-unsafe)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-non-negative
+           ghc-utility-ht
+           ghc-semigroups
+           ghc-unsafe
+           ghc-quickcheck
+           ghc-syb))
     (home-page "https://wiki.haskell.org/Storable_Vector")
     (synopsis "Fast, packed, strict storable arrays with a list interface")
     (description "This library provides fast, packed, strict storable
@@ -12686,15 +12186,9 @@ a library that provides fusion with lazy lists.")
          "1lmyx3wkjsayhy5yilzvy0kf8qwmycwlk26r1d8f3cxbfhkr7s52"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-network" ,ghc-network)
-       ("ghc-random" ,ghc-random)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-async ghc-blaze-builder ghc-network ghc-random ghc-zlib))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/streaming-commons")
     (synopsis "Conduit and pipes needed by some streaming data libraries")
     (description "This package provides low-dependency functionality commonly
@@ -12715,9 +12209,7 @@ needed by various Haskell streaming data libraries, such as @code{conduit} and
         (base32 "0hb24a09c3agsq7sdv8r2b2jc2f4g1blg2xvj4cfadynib0apxnz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-these" ,ghc-these)
-       ("ghc-assoc" ,ghc-assoc)))
+     (list ghc-hashable ghc-these ghc-assoc))
     (home-page "https://hackage.haskell.org/package/strict")
     (synopsis "Strict data types and String IO")
     (description
@@ -12765,7 +12257,7 @@ literals.")
          "0wfxkw4x6j6jq9nd82k83g2k3hskpsvk1dp4cpkshvjr4wg9qny8"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hunit))
     (home-page "https://hackage.haskell.org/package/string-qq")
     (synopsis
      "QuasiQuoter for non-interpolated strings, texts and bytestrings.")
@@ -12814,9 +12306,7 @@ occurrences of a substring (the first in case of overlaps) with another.")
          "1k420f497lzkymmxin88ql6ib8dziic43avykv31yq65rgrf7l2g"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-blaze-builder ghc-hashable ghc-unordered-containers))
     (arguments
      `(#:cabal-revision
        ("3" "1zc7shja5i63rn7kd9mnq2m052qhp7nh44qy8qp93dm64v9m9pi2")))
@@ -12843,8 +12333,7 @@ building Scalable Vector Graphics (SVG).")
          "15ld5929n3lzfb5sy9nnm77x2l6i2sgsxw47jdrqcrz6fxpwc1qq"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "http://www.cs.uu.nl/wiki/GenericProgramming/SYB")
     (synopsis "Scrap Your Boilerplate")
@@ -12879,9 +12368,7 @@ variety of traversals.")
                (("chell >= 0\\.4 && < 0\\.5") "chell >= 0.4"))
              #t)))))
     (inputs
-     `(("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-chell" ,ghc-chell)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-system-filepath ghc-chell ghc-temporary))
     (home-page "https://github.com/fpco/haskell-filesystem")
     (synopsis "Consistent file system interaction across GHC versions")
     (description
@@ -12942,9 +12429,7 @@ which can't be decoded in the current locale encoding.")
        #:cabal-revision
        ("1" "18llfvisghrn9w9yfgacqn51gs50a0lngah3bmg852h0swj7vkp8")))
     (native-inputs
-     `(("ghc-chell" ,ghc-chell)
-       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-chell ghc-chell-quickcheck ghc-quickcheck))
     (home-page "https://github.com/fpco/haskell-filesystem")
     (synopsis "High-level, byte-based file and directory path manipulations")
     (description
@@ -12999,8 +12484,7 @@ increasing type safety.")
          "0z936gh8n8i8qdkagyxwd9gqq13skd5fv013vdvwsibrxkm0czfb"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-csv" ,ghc-csv)
-       ("ghc-html" ,ghc-html)))
+     (list ghc-csv ghc-html))
     (home-page "https://github.com/bgamari/tabular")
     (synopsis "Two-dimensional data tables with rendering functions")
     (description
@@ -13046,7 +12530,7 @@ B 3 ||       meh |   well... ||  worst ever |          ok
      `(#:cabal-revision
        ("2" "0qi63c3z40i9qm44r571yjzcpb8d473vj2km4kq0fij0ljc7vii9")))
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page "https://hackage.haskell.org/package/tagged")
     (synopsis "Haskell phantom types to avoid passing dummy arguments")
     (description "This library provides phantom types for Haskell 98, to avoid
@@ -13071,10 +12555,8 @@ having to unsafely pass dummy arguments.")
      `(#:cabal-revision
        ("4" "03a33nj9k62f318qgmp5pgk7i99c8cyqy5f7m7p0bwc5ni39ysfq")))
     (inputs
-     `(("ghc-bytestring-handle" ,ghc-bytestring-handle)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-bytestring-handle ghc-quickcheck ghc-tasty
+           ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/tar")
     (synopsis "Reading, writing and manipulating \".tar\" archive files")
     (description
@@ -13101,15 +12583,10 @@ an index.")
          "0bgn3hyf20g1gfnzy8f41s7nj54kfcyjk2izw99svrw8f3dphi80"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-combinators" ,ghc-conduit-combinators)
-       ("ghc-safe-exceptions" ,ghc-safe-exceptions)))
+     (list ghc-conduit ghc-conduit-combinators ghc-safe-exceptions))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-weigh" ,ghc-weigh)))
+     (list ghc-quickcheck ghc-conduit-extra ghc-hspec ghc-hspec
+           ghc-weigh))
     (home-page "https://github.com/snoyberg/tar-conduit#readme")
     (synopsis "Extract and create tar files using conduit for streaming")
     (description "This library provides a conduit-based, streaming
@@ -13132,12 +12609,9 @@ interface for extracting and creating tar files.")
          "144qhwfwg37l3k313raf4ssiz16jbgwlm1nf4flgqpsbd69jji4c"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-exceptions ghc-random))
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-base-compat ghc-tasty ghc-tasty-hunit))
     (home-page "https://www.github.com/batterseapower/temporary")
     (synopsis "Temporary file and directory support")
     (description "The functions for creating temporary files and directories
@@ -13162,7 +12636,7 @@ installed.")
         (base32
          "1nqih0qks439k3pr5kmbbc8rjdw730slrxlflqb27fbxbzb8skqs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-exceptions" ,ghc-exceptions)))
+    (inputs (list ghc-exceptions))
     (home-page
      "https://www.github.com/feuerbach/temporary")
     (synopsis
@@ -13208,14 +12682,9 @@ dependency.")
                 "1d9r3na7hmkgr0j63fs50ssll506l1wyqhw0dpap7jk0rdz8pv6n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-split" ,ghc-split)
-       ("ghc-xml" ,ghc-xml)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)))
+     (list ghc-syb ghc-network-uri ghc-split ghc-xml ghc-pandoc-types))
     (native-inputs
-     `(("ghc-temporary" ,ghc-temporary)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
+     (list ghc-temporary ghc-utf8-string))
     (home-page "https://github.com/jgm/texmath")
     (synopsis "Conversion between formats used to represent mathematics")
     (description
@@ -13266,8 +12735,7 @@ text package.")
          "0pmzp38m3r0k6ps97b1wqplxlgvvlaid09x53jl3gxng0fwq910a"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "https://github.com/brendanhay/text-manipulate")
     (synopsis
@@ -13301,10 +12769,9 @@ upgraded.  Consider yourself warned!")
          "17bp1lnbkqr5ykrcd6v5sqv0fhljck7hky8zrrpw7rlkb1f3sdc2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-quickcheck ghc-hspec))
     (arguments
      `(#:cabal-revision
        ("4" "017drxq9x56b345d8w5m8xdsi1zzs0z16pbdx8j35cd1lsnh3kf1")))
@@ -13330,8 +12797,7 @@ string metrics efficiently.")
         (base32 "0445r2nns6009fmq0xbfpyv7jpzwv0snccjdg7hwj4xk4z0cwc1f"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ("ghc-random" ,ghc-random)))
+     (list ghc-primitive ghc-random))
     (home-page "https://hackage.haskell.org/package/tf-random")
     (synopsis "High-quality splittable pseudorandom number generator")
     (description "This package contains an implementation of a high-quality
@@ -13381,8 +12847,7 @@ Template Haskell.")
      `(#:cabal-revision
        ("1" "0l30cmwm20lgjpvr3a5yxj6429s1hqahjsij8z2ap88754phd41l")))
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-syb ghc-th-abstraction))
     (home-page "https://hackage.haskell.org/package/th-expand-syns")
     (synopsis "Expands type synonyms in Template Haskell ASTs")
     (description
@@ -13403,7 +12868,7 @@ Template Haskell.")
                 "1r2wrnrn6qwy6ysyfnlqn6xbfckw0b22h8n00pk67bhhg81jfn9s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-th-abstraction" ,ghc-th-abstraction)))
+     (list ghc-th-abstraction))
     (home-page "https://github.com/mboes/th-lift")
     (synopsis "Derive Template Haskell's Lift class for datatypes")
     (description
@@ -13426,9 +12891,7 @@ datatypes.")
          "09nv1zsffvv6zfz1fjzcqrla3lc350qr4i4xf7wgvzp049sprrdy"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-th-lift" ,ghc-th-lift)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-th-lift ghc-vector ghc-quickcheck))
     (home-page "https://github.com/bennofs/th-lift-instances/")
     (synopsis "Lift instances for template-haskell for common data types.")
     (description "Most data types in the Haskell platform do not have Lift
@@ -13452,14 +12915,14 @@ instances.  This package provides orphan instances for @code{containers},
      `(#:cabal-revision
        ("1" "0vfz9dl5g9xwp2zmwqc5gngyvjaqj3i0s97vbcslafcqhdqw3qaj")))
     (inputs
-     `(("ghc-th-lift" ,ghc-th-lift)
-       ("ghc-th-lift-instances" ,ghc-th-lift-instances)
-       ("ghc-th-reify-many" ,ghc-th-reify-many)
-       ("ghc-th-compat" ,ghc-th-compat)
-       ("ghc-th-expand-syns" ,ghc-th-expand-syns)
-       ("ghc-generic-deriving" ,ghc-generic-deriving)))
+     (list ghc-th-lift
+           ghc-th-lift-instances
+           ghc-th-reify-many
+           ghc-th-compat
+           ghc-th-expand-syns
+           ghc-generic-deriving))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-hspec))
     (home-page "https://hackage.haskell.org/package/th-orphans")
     (synopsis "Orphan instances for TH datatypes")
     (description
@@ -13485,8 +12948,7 @@ package, and that's where the version number started.")
          "027m1gd7i6jf2ppfkld9qrv3xnxg276587pmx10z9phpdvswk66p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hashable" ,ghc-hashable)
-       ("ghc-assoc" ,ghc-assoc)))
+     (list ghc-hashable ghc-assoc))
     (arguments
      `(#:cabal-revision
        ("2" "16x3am622jn97j1d9879x7j5zbjn33bkfaa0dq0xyp1fbc0s7h5x")))
@@ -13534,10 +12996,8 @@ variant of @code{These}.
          "0bjnjhnq3km6xqk0fn1fgyz5xdw4h6lylbwwbcmkkfzwcz0c76hk"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-concurrent-extra" ,ghc-concurrent-extra)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-concurrent-extra ghc-hunit ghc-test-framework
+           ghc-test-framework-hunit))
     (home-page "https://github.com/basvandijk/threads")
     (synopsis "Fork threads and wait for their result")
     (description "This package provides functions to fork threads and
@@ -13571,8 +13031,7 @@ package is similar to the @code{threadmanager}, @code{async} and
                 "19g4gc1q3zxbylmvrgk3dqjzychq2k02i7fwvs3vhbrg4ihhw9cx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-safe" ,ghc-safe)
-       ("ghc-th-expand-syns" ,ghc-th-expand-syns)))
+     (list ghc-safe ghc-th-expand-syns))
     (home-page "https://github.com/mgsloan/th-reify-many")
     (synopsis "Recurseively reify template haskell datatype info")
     (description
@@ -13596,15 +13055,15 @@ function which generates instances.")
          "19p3056i6kh8lgcdsnwsh8pj80xyi23kmw9n7hmdacczs5kv49ii"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-orphans" ,ghc-base-orphans)))
+     (list ghc-base-orphans))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-hunit
+           ghc-base-compat
+           ghc-quickcheck
+           ghc-tagged
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("1" "1f6r8cyfgzpfg9nrsqbf99pi44fyds9wcmgwxb4s0zmlb5dbv1m5")))
@@ -13628,7 +13087,7 @@ features as possible.")
         (base32
          "0b2hmj8wwrfkndwzgm11qr496ca2ahwdxcj3m0ii91bxvrk1bzq7"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-old-locale" ,ghc-old-locale)))
+    (inputs (list ghc-old-locale))
     (home-page "https://github.com/khibino/haskell-time-locale-compat")
     (synopsis "Compatibility of TimeLocale between old-locale and time-1.5")
     (description "This package contains a wrapped name module for
@@ -13649,7 +13108,7 @@ features as possible.")
          "1nzwj0fxz370ks6vr1sylcidx33rnqq45y3q9yv9n4dj43nid9lh"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-auto-update" ,ghc-auto-update)))
+     (list ghc-auto-update))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Scalable timer")
     (description "This library contains scalable timer functions provided by a
@@ -13716,8 +13175,7 @@ create timezone series, see the ghc-timezone-olson package.")
        "0b9vh27b9nz803yhd93d5z63bs370lvn4vkdajxaak9clxlw6mwg"))))
    (build-system haskell-build-system)
    (inputs
-    `(("ghc-timezone-series" ,ghc-timezone-series)
-      ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)))
+    (list ghc-timezone-series ghc-extensible-exceptions))
    (home-page "https://archives.haskell.org/projects.haskell.org/time-ng/")
    (synopsis "Parser and renderer for binary Olson timezone files")
    (description
@@ -13745,16 +13203,15 @@ objects from the timezone-series package.")
          "1yypb9zhsj9ks7bbw2sayqv3rn9y8z3w5p1xmsnwb4w99dqmvcx5"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-cmark" ,ghc-cmark)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-zip-archive" ,ghc-zip-archive)))
+     (list ghc-ansi-terminal
+           ghc-attoparsec
+           ghc-cmark
+           ghc-http-conduit
+           ghc-optparse-applicative
+           ghc-semigroups
+           ghc-zip-archive))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)))
+     (list ghc-tasty ghc-tasty-golden))
     (home-page "https://github.com/psibi/tldr-hs#readme")
     (synopsis "Haskell tldr client")
     (description "This package provides the @command{tldr} command and a
@@ -13777,8 +13234,7 @@ man pages with practical examples.")
         (base32 "0m7s0q7f8c7glxzqhf2j86ch5xhk6jnzwwsa4mkywag22119c290"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-bencode" ,ghc-bencode)
-       ("ghc-syb" ,ghc-syb)))
+     (list ghc-bencode ghc-syb))
     (home-page "https://hackage.haskell.org/package/torrent")
     (synopsis "BitTorrent file parser and generator")
     (description "This library provides support for parsing and generating
@@ -13840,7 +13296,7 @@ other transformers.")
          "146g69yxmlrmvqnzwcw4frxfl3z04lda9zqwcqib34dnkrlghfrj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-transformers-compat" ,ghc-transformers-compat)))
+     (list ghc-transformers-compat))
     (home-page
      "https://hackage.haskell.org/package/transformers-compat")
     (synopsis
@@ -13892,28 +13348,25 @@ but also need those types.")
      `(#:cabal-revision
        ("1" "0brlnq5ddmambidll1dn4jnjac2i44a9hd5hwp2p0rbh1s8jfyhm")))
     (inputs
-     `(("ghc-aeson" ,ghc-aeson)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-primitive" ,ghc-primitive)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-semialign" ,ghc-semialign)
-       ("ghc-strict" ,ghc-strict)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-these" ,ghc-these)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-trifecta" ,ghc-trifecta)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-aeson
+           ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-base-compat
+           ghc-bytestring-builder
+           ghc-hashable
+           ghc-parsers
+           ghc-primitive
+           ghc-quickcheck
+           ghc-scientific
+           ghc-semialign
+           ghc-strict
+           ghc-tagged
+           ghc-these
+           ghc-unordered-containers
+           ghc-uuid-types
+           ghc-vector))
+    (native-inputs
+     (list ghc-trifecta ghc-tasty ghc-tasty-golden ghc-tasty-quickcheck))
     (home-page "https://github.com/phadej/tree-diff")
     (synopsis "Compute difference between (expression) trees")
     (description "This Haskell library provides a function for computing
@@ -13936,25 +13389,25 @@ compute the difference between arbitrary abstract datatypes (ADTs) using
                 "1lhzi0xxvilvgjy3yf3f85wfmrks562hhsnl0kg1xwji36rgwp6y"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-charset" ,ghc-charset)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-indexed-traversable" ,ghc-indexed-traversable)
-       ("ghc-lens" ,ghc-lens)
-       ("ghc-parsers" ,ghc-parsers)
-       ("ghc-prettyprinter-ansi-terminal" ,ghc-prettyprinter-ansi-terminal)
-       ("ghc-prettyprinter" ,ghc-prettyprinter)
-       ("ghc-profunctors" ,ghc-profunctors)
-       ("ghc-reducers" ,ghc-reducers)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)))
-    (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-ansi-terminal
+           ghc-blaze-builder
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-charset
+           ghc-comonad
+           ghc-fingertree
+           ghc-hashable
+           ghc-indexed-traversable
+           ghc-lens
+           ghc-parsers
+           ghc-prettyprinter-ansi-terminal
+           ghc-prettyprinter
+           ghc-profunctors
+           ghc-reducers
+           ghc-unordered-containers
+           ghc-utf8-string))
+    (native-inputs
+     (list ghc-quickcheck))
     (home-page "https://github.com/ekmett/trifecta/")
     (synopsis "Parser combinator library with convenient diagnostics")
     (description "Trifecta is a modern parser combinator library for Haskell,
@@ -13999,24 +13452,23 @@ statically known size.")
          "14lf43b5rxci6p9sy1gkb715m4b1s4rl65swn2qpdqv3h2yvpi4s"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-async" ,ghc-async)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-foldl" ,ghc-foldl)
-       ("ghc-hostname" ,ghc-hostname)
-       ("ghc-managed" ,ghc-managed)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-system-fileio" ,ghc-system-fileio)
-       ("ghc-streaming-commons" ,ghc-streaming-commons)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-optional-args" ,ghc-optional-args)
-       ("ghc-unix-compat" ,ghc-unix-compat)))
-    (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-fail" ,ghc-fail)))
+     (list ghc-ansi-wl-pprint
+           ghc-async
+           ghc-clock
+           ghc-exceptions
+           ghc-foldl
+           ghc-hostname
+           ghc-managed
+           ghc-semigroups
+           ghc-system-filepath
+           ghc-system-fileio
+           ghc-streaming-commons
+           ghc-temporary
+           ghc-optparse-applicative
+           ghc-optional-args
+           ghc-unix-compat))
+    (native-inputs
+     (list ghc-doctest ghc-fail))
     (home-page
      "http://hackage.haskell.org/package/turtle")
     (synopsis "Shell programming, Haskell-style")
@@ -14058,13 +13510,9 @@ similar functionality.")
          "071mw4yv4xr5n82si33qbcqcxvcr7h56zlyd8gmsfrsdnacbq47k"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
+     (list ghc-async ghc-unliftio-core))
     (native-inputs
-     `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-base64-bytestring ghc-hspec hspec-discover ghc-temporary))
     (home-page "https://haskell-lang.org/library/typed-process")
     (synopsis "Run external processes with strong typing of streams")
     (description
@@ -14109,8 +13557,7 @@ function.")
          "15fnk9x4fd2ryp31fjfrwm8k61m3a0qyb95m4065zc0yi0jyacp2"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-atomic-primops" ,ghc-atomic-primops)
-       ("ghc-primitive" ,ghc-primitive)))
+     (list ghc-atomic-primops ghc-primitive))
     (arguments
      `(#:tests? #f)) ; TODO: Fail.
     (home-page "https://hackage.haskell.org/package/unagi-chan")
@@ -14159,9 +13606,7 @@ unbounded @code{Integer} type.")
        (sha256 (base32 "07py2nffdgxpz8sryvqcghzb2kiiagpdf5ja1dia4z0rpwi79smh"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+     (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/singpolyma/unexceptionalio")
     (synopsis "IO without any non-error, synchronous exceptions")
     (description "When you've caught all the exceptions that can be
@@ -14183,10 +13628,7 @@ handled safely, this is what you're left with.")
          "1010sahi4mjzqmxqlj3w73rlymbl2370x5vizjqbx7mb86kxzx4f"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-getopt-generics" ,ghc-getopt-generics)
-       ("ghc-split" ,ghc-split)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list ghc-quickcheck ghc-getopt-generics ghc-split ghc-hspec))
     (home-page "https://github.com/composewell/unicode-transforms")
     (synopsis "Unicode normalization")
     (description "This library provides tools for fast Unicode 12.1.0
@@ -14234,9 +13676,7 @@ constant-time:
          "1lis5qcb5j7yzd1cqjaqpb6bmkyjfb7l4nhk3ykmcma4513cjxz7"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-syb" ,ghc-syb)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-syb ghc-hashable ghc-unordered-containers))
     (home-page "https://github.com/ndmitchell/uniplate")
     (synopsis "Simple, concise and fast generic operations")
     (description "Uniplate is a library for writing simple and concise generic
@@ -14287,8 +13727,7 @@ isn't available, portable implementations are used.")
      `(#:tests? #f)) ; FIXME: Test fails with "System.Time not found".  This
                      ; is weird, that should be provided by GHC 7.10.2.
     (inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-old-locale" ,ghc-old-locale)))
+     (list ghc-old-time ghc-old-locale))
     (home-page "https://hackage.haskell.org/package/unix-time")
     (synopsis "Unix time parser/formatter and utilities")
     (description "This library provides fast parsing and formatting utilities
@@ -14313,9 +13752,8 @@ for Unix time in Haskell.")
     (arguments `(#:tests? #f)) ; FIXME: hspec-discover not in PATH
     (outputs '("out" "static" "doc"))
     (inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-async ghc-unliftio-core))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/fpco/unliftio")
     (synopsis "Provides MonadUnliftIO typecplass for unlifting monads to
 IO (batteries included)")
@@ -14365,13 +13803,13 @@ functions.")
          "0rw8kmg7xjlacmr1hcpin95abkd387awf154s9ran7zg9jllh3x1"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-chasingbottoms" ,ghc-chasingbottoms)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-chasingbottoms
+           ghc-hunit
+           ghc-quickcheck
+           ghc-test-framework
+           ghc-test-framework-hunit
+           ghc-test-framework-quickcheck2
+           ghc-hashable))
     (home-page
      "https://github.com/tibbe/unordered-containers")
     (synopsis
@@ -14432,17 +13870,15 @@ a style ready for qualification, that is, you should import them by
         (base32
          "0s0k26v5x6601rbpkjkl5vp3dkp9xwj1dlgy4xkl470i4sna1rzk"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-              ("ghc-blaze-builder" ,ghc-blaze-builder)
-              ("ghc-th-lift-instances" ,ghc-th-lift-instances)))
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-hedgehog" ,ghc-hedgehog)
-                     ("ghc-tasty-hedgehog" ,ghc-tasty-hedgehog)
-                     ("ghc-base-compat" ,ghc-base-compat)
-                     ("ghc-semigroups" ,ghc-semigroups)
-                     ("ghc-safe" ,ghc-safe)))
+    (inputs (list ghc-attoparsec ghc-blaze-builder ghc-th-lift-instances))
+    (native-inputs (list ghc-hunit
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-hedgehog
+                         ghc-tasty-hedgehog
+                         ghc-base-compat
+                         ghc-semigroups
+                         ghc-safe))
     (home-page "https://github.com/Soostone/uri-bytestring")
     (synopsis "Haskell URI parsing as ByteStrings")
     (description "This Haskell package aims to be an RFC3986 compliant URI
@@ -14488,7 +13924,7 @@ including only one module.")
        (sha256
         (base32 "16mh36ffva9rh6k37bi1046pgpj14h0cnmj1iir700v0lynxwj7f"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/glguy/utf8-string/")
     (synopsis "Support for reading and writing UTF8 Strings")
     (description
@@ -14510,9 +13946,7 @@ UTF8 without truncation.")
         (base32 "10dvmfhhhj5w4wz5drhvs6i0yv35kbbcbzhy6ci34r3ppcik5rdw"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-doctest-exitcode-stdio" ,ghc-doctest-exitcode-stdio)
-       ("ghc-doctest-lib" ,ghc-doctest-lib)))
+     (list ghc-quickcheck ghc-doctest-exitcode-stdio ghc-doctest-lib))
     (synopsis "Haskell helper functions for Lists, Maybes, Tuples, Functions")
     (description "This package includes Hakell modules providing various
 helper functions for Lists, Maybes, Tuples, Functions.")
@@ -14532,16 +13966,14 @@ helper functions for Lists, Maybes, Tuples, Functions.")
         (base32
          "0r05h16gd7fgfpq9iz43jcn9jzrgfa0gk4cv1xy0p4rli66rb1gq"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-cryptohash-sha1" ,ghc-cryptohash-sha1)
-              ("ghc-cryptohash-md5" ,ghc-cryptohash-md5)
-              ("ghc-entropy" ,ghc-entropy)
-              ("ghc-network-info" ,ghc-network-info)
-              ("ghc-random" ,ghc-random)
-              ("ghc-uuid-types" ,ghc-uuid-types)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (inputs (list ghc-cryptohash-sha1
+                  ghc-cryptohash-md5
+                  ghc-entropy
+                  ghc-network-info
+                  ghc-random
+                  ghc-uuid-types))
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/uuid")
     (synopsis "Haskell library to create, compare, parse, and print UUIDs")
     (description "This Haskell library provides utilities creating, comparing,
@@ -14563,13 +13995,9 @@ parsing and printing @dfn{Universally Unique Identifiers} or UUIDs.")
          "1pd7xd6inkmmwjscf7pmiwqjks9y0gi1p8ahqbapvh34gadvhs5d"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Wrong byteorder version?
-    (inputs `(("ghc-hashable" ,ghc-hashable)
-              ("ghc-random" ,ghc-random)))
-    (native-inputs `(("ghc-byteorder" ,ghc-byteorder)
-                     ("ghc-quickcheck" ,ghc-quickcheck)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (inputs (list ghc-hashable ghc-random))
+    (native-inputs (list ghc-byteorder ghc-quickcheck ghc-tasty
+                         ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/uuid")
     (synopsis "Haskell type definitions for UUIDs")
     (description "This Haskell library contains type definitions for
@@ -14594,14 +14022,10 @@ functions.")
          "1dv7azpljdcf7irbnznnz31hq611bn1aj2m6ywghz3hgv835qqak"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-assoc" ,ghc-assoc)
-       ("ghc-bifunctors" ,ghc-bifunctors)
-       ("ghc-lens" ,ghc-lens)))
+     (list ghc-semigroups ghc-semigroupoids ghc-assoc ghc-bifunctors
+           ghc-lens))
     (native-inputs
-     `(("ghc-hedgehog" ,ghc-hedgehog)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hedgehog ghc-hunit))
     (home-page "https://github.com/qfpl/validation")
     (synopsis
      "Data-type like Either but with an accumulating Applicative")
@@ -14638,8 +14062,7 @@ example of, \"An applicative functor that is not a monad.\"")
         (base32
          "086nj5ymp4mxxfw9qjgjhd4j3z7gl2y9d89p0b7bkap5ampgdw2x"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)
-                     ("hspec-discover" ,hspec-discover)))
+    (native-inputs (list ghc-hspec hspec-discover))
     (home-page
      "https://github.com/NorfairKing/validity")
     (synopsis "Validity typeclass")
@@ -14665,9 +14088,7 @@ explicit by providing a function to check whether the invariants hold.")
          "181ksk1yixjg0jiggw5jvm8am8m8c7lim4xaixf8qnaqvxm6namc"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-unordered-containers ghc-hashable ghc-semigroups))
     (home-page
      "https://github.com/HeinrichApfelmus/vault")
     (synopsis "Persistent store for arbitrary values")
@@ -14700,12 +14121,12 @@ representing a store for a single element.")
     (arguments
      `(#:tests? #f))
     (inputs
-     `(("ghc-primitive" ,ghc-primitive)
-       ;; ("ghc-hunit" ,ghc-hunit)
-       ;; ("ghc-test-framework" ,ghc-test-framework)
-       ;; ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ;; ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ))
+     (list ghc-primitive
+           ;; ("ghc-hunit" ,ghc-hunit)
+           ;; ("ghc-test-framework" ,ghc-test-framework)
+           ;; ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+           ;; ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+           ))
     (home-page "https://github.com/haskell/vector")
     (synopsis "Efficient Arrays")
     (description "This library provides an efficient implementation of
@@ -14728,9 +14149,9 @@ optimisation framework.")
          "0fxg6w0vh5g2vzw4alajj9ywdijfn9nyx28hbckhmwwbfxb6l5vn"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-quickcheck))
     (home-page "https://github.com/bos/math-functions")
     (synopsis "Algorithms for vector arrays in Haskell")
     (description "This Haskell library algorithms for vector arrays.")
@@ -14752,10 +14173,9 @@ optimisation framework.")
          "0kgmlb4rf89b18d348cf2k06xfhdpamhmvq7iz5pab5014hknbmp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)))
+     (list ghc-vector))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://github.com/bos/vector-binary-instances")
     (synopsis "Instances of Data.Binary and Data.Serialize for vector")
     (description "This library provides instances of @code{Binary} for the
@@ -14779,16 +14199,14 @@ boxed and storable vectors.")
         (base32
          "1g1zxp6xcwcq3372a5qqs44cl09a48p21m1jsys5bsampprlmcgs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-vector" ,ghc-vector)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-base-prelude" ,ghc-base-prelude)))
-    (native-inputs `(("ghc-attoparsec" ,ghc-attoparsec)
-                     ("ghc-tasty" ,ghc-tasty)
-                     ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-                     ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-                     ("ghc-hunit" ,ghc-hunit)
-                     ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-                     ("ghc-rerebase" ,ghc-rerebase)))
+    (inputs (list ghc-vector ghc-semigroups ghc-base-prelude))
+    (native-inputs (list ghc-attoparsec
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-hunit
+                         ghc-quickcheck-instances
+                         ghc-rerebase))
     (home-page "https://github.com/nikita-volkov/vector-builder")
     (synopsis "Vector builder for Haskell")
     (description "This Haskell package provides an API for constructing vectors.
@@ -14815,8 +14233,7 @@ vector. ")
          "0jbzm31d91kxn8m0h6iplj54h756q6f4zzdrnb2w7rzz5zskgqyl"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-data-default" ,ghc-data-default)))
+     (list ghc-vector ghc-data-default))
     (home-page "https://github.com/liyang/vector-th-unbox")
     (synopsis "Deriver for Data.Vector.Unboxed using Template Haskell")
     (description "This Haskell library provides a Template Haskell
@@ -14840,8 +14257,7 @@ and from some existing type with an Unbox instance.")
          "05vk3x1r9a2pqnzfji475m5gdih2im1h7rbi2sc67p1pvj6pbbsk"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-semigroups ghc-hashable))
     (home-page "https://github.com/ekmett/void")
     (synopsis
      "Logically uninhabited data type")
@@ -14873,14 +14289,9 @@ given term should not exist.")
                (("temporary.* < 1\\.3")
                 "temporary >= 1.1 && < 1.4")))))))
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-data-default-class"
-        ,ghc-data-default-class)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-cereal ghc-data-default-class ghc-quickcheck ghc-temporary))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)))
+     (list hspec-discover ghc-hspec))
     (home-page "https://github.com/mrkkrp/wave")
     (synopsis "Work with WAVE and RF64 files in Haskell")
     (description "This package allows you to work with WAVE and RF64
@@ -14901,9 +14312,7 @@ files in Haskell.")
          "1n1fq7v64b59ajf5g50iqj9sa34wm7s2j3viay0kxpmvlcv8gipz"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-setlocale" ,ghc-setlocale)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-attoparsec" ,ghc-attoparsec)))
+     (list ghc-setlocale ghc-utf8-string ghc-attoparsec))
     (home-page "https://github.com/solidsnack/wcwidth/")
     (synopsis "Haskell bindings to wcwidth")
     (description "This package provides Haskell bindings to your system's
@@ -14917,9 +14326,7 @@ widths to the Char type.")
     (inherit ghc-wcwidth)
     (name "ghc-wcwidth-bootstrap")
     (inputs
-     `(("ghc-setlocale" ,ghc-setlocale)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-attoparsec" ,ghc-attoparsec-bootstrap)))
+     (list ghc-setlocale ghc-utf8-string ghc-attoparsec-bootstrap))
     (properties '((hidden? #t)))))
 
 (define-public ghc-weigh
@@ -14936,8 +14343,7 @@ widths to the Char type.")
          "13pbjr7fzqy3s9c1nd2jhfwzbpccmpfwdn7y46z9k2bfkch1jam9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-split" ,ghc-split)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-split ghc-temporary))
     (home-page "https://github.com/fpco/weigh#readme")
     (synopsis "Measure allocations of a Haskell functions/values")
     (description "This package provides tools to measure the memory usage of a
@@ -14960,7 +14366,7 @@ Haskell value or function.")
          "1clvbd1ckhvy29qrbmpkn7bya7300fq6znnps23nn3nxyrxhsr85"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-control-monad-free" ,ghc-control-monad-free)))
+     (list ghc-control-monad-free))
     (arguments
      `(#:cabal-revision
        ("1"
@@ -15023,8 +14429,7 @@ instances of the @code{Pretty} class.")
          "1br7qyf27iza213inwhf9bm2k6in0zbmfw6w4clqlc9f9cj2nrkb"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page
      "https://github.com/minad/wl-pprint-annotated#readme")
     (synopsis
@@ -15052,7 +14457,7 @@ modernized interface.")
          "030ckgzz14sv2c317g4j5g68hyq9xi40cmv0apwclw6sc6xgsvly"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-base-compat" ,ghc-base-compat)))
+     (list ghc-base-compat))
     (home-page "https://hackage.haskell.org/package/wl-pprint-text")
     (synopsis "Wadler/Leijen Pretty Printer for Text values")
     (description
@@ -15071,7 +14476,7 @@ modernized interface.")
        (sha256
         (base32 "15rcqhg9vb7qisk9ryjnyhhfgigxksnkrczycaw2rin08wczjwpb"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (native-inputs (list ghc-hspec))
     (arguments
      `(#:cabal-revision
        ("1" "1k4w4g053vhmpp08542hrqaw81p3p35i567xgdarqmpghfrk68pp")))
@@ -15097,8 +14502,7 @@ modernized interface.")
          "12jx7f13d2h1djq4fh4dyrab61sm49mj1w61j3rzp2vjfm696c16"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/word8")
     (synopsis "Word8 library for Haskell")
     (description "Word8 library to be used with @code{Data.ByteString}.")
@@ -15119,9 +14523,9 @@ modernized interface.")
         (base32
          "1mbcrq89jz0dcibw66w0jdy4f4bfpx4zwjfs98rm3jjgdikwdzb4"))))
     (build-system haskell-build-system)
-    (native-inputs `(("ghc-c2hs" ,ghc-c2hs)))
+    (native-inputs (list ghc-c2hs))
     (inputs
-     `(("ghc-semigroups" ,ghc-semigroups)))
+     (list ghc-semigroups))
     (home-page "https://hackage.haskell.org/package/wordexp")
     (synopsis "Library wrapping @code{wordexp} for Haskell")
     (description "@code{wordexp(3)} wrapper library for Haskell to perform
@@ -15144,11 +14548,8 @@ word expansion like a posix-shell.")
      `(#:extra-directories
        ("libx11" "libxrandr" "libxinerama" "libxscrnsaver")))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("ghc-data-default-class" ,ghc-data-default-class)))
+     (list libx11 libxrandr libxinerama libxscrnsaver
+           ghc-data-default-class))
     (home-page "https://github.com/haskell-pkg-janitors/X11")
     (synopsis "Bindings to the X11 graphics library")
     (description
@@ -15170,13 +14571,9 @@ bindings are a direct translation of the C bindings.")
     (arguments
      `(#:extra-directories ("libx11" "libxft" "xorgproto")))
     (inputs
-     `(("ghc-x11" ,ghc-x11)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("xorgproto" ,xorgproto)))
+     (list ghc-x11 ghc-utf8-string libx11 libxft xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system haskell-build-system)
     (home-page "https://hackage.haskell.org/package/X11-xft")
     (synopsis "Bindings to Xft")
@@ -15238,19 +14635,16 @@ parts.")
          "1zzh7xnmbm68dab1vqsjkr6ghxqgnla5nik4amrwlmhbdih1gcdx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-conduit-extra" ,ghc-conduit-extra)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-xml-types" ,ghc-xml-types)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-blaze-html" ,ghc-blaze-html)))
+     (list ghc-conduit
+           ghc-conduit-extra
+           ghc-resourcet
+           ghc-xml-types
+           ghc-attoparsec
+           ghc-data-default-class
+           ghc-blaze-markup
+           ghc-blaze-html))
     (native-inputs
-     `(("ghc-doctest" ,ghc-doctest)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-cabal-doctest" ,ghc-cabal-doctest)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-doctest ghc-hspec ghc-cabal-doctest ghc-hunit))
     (home-page "https://github.com/snoyberg/xml")
     (synopsis "Utilities for dealing with XML with the conduit package")
     (description
@@ -15290,11 +14684,9 @@ documents.")
         (base32 "0jrhcjy7ww59dafg857f2g2df1fw2jmbwcs1q379ph0pc5rxj3lj"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-shakespeare" ,ghc-shakespeare)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)))
+     (list ghc-shakespeare ghc-xml-conduit))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)))
+     (list ghc-hspec ghc-hunit))
     (home-page "https://www.yesodweb.com/")
     (synopsis "Hamlet-style quasiquoter for XML content")
     (description "This package provides a type-safe tool for generating XML
@@ -15314,23 +14706,23 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
                 "0s08kw0hqxixxripwjmz7b4yh9130dws3jaj460x8ds8q4b6khbx"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-conduit" ,ghc-conduit)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-libyaml" ,ghc-libyaml)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)))
-    (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-mockery" ,ghc-mockery)
-       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-conduit
+           ghc-resourcet
+           ghc-aeson
+           ghc-unordered-containers
+           ghc-vector
+           ghc-attoparsec
+           ghc-scientific
+           ghc-libyaml
+           ghc-optparse-applicative))
+    (native-inputs
+     (list ghc-hspec
+           ghc-hunit
+           ghc-base-compat
+           hspec-discover
+           ghc-mockery
+           ghc-raw-strings-qq
+           ghc-temporary))
     (home-page "https://github.com/snoyberg/yaml/")
     (synopsis "Parsing and rendering YAML documents")
     (description
@@ -15363,13 +14755,9 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
                (setenv "PATH" (string-append unzip "/bin:" which "/bin:" path))
                #t))))))
     (inputs
-     `(("ghc-digest" ,ghc-digest)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-zlib" ,ghc-zlib)))
+     (list ghc-digest ghc-temporary ghc-zlib))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list ghc-hunit unzip which))
     (home-page "https://hackage.haskell.org/package/zip-archive")
     (synopsis "Zip archive library for Haskell")
     (description "The zip-archive library provides functions for creating,
@@ -15402,12 +14790,9 @@ modifying, and extracting files from zip archives in Haskell.")
                (("tasty            >= 0\\.8 && < 0\\.12") "tasty")
                (("tasty-hunit      >= 0\\.8 && < 0\\.10") "tasty-hunit")
                (("tasty-quickcheck == 0\\.8\\.\\*") "tasty-quickcheck")))))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-quickcheck ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/zlib")
     (synopsis
      "Compression and decompression in the gzip and zlib formats")
@@ -15434,10 +14819,9 @@ provides access to the full zlib feature set.")
          "02ciywlz4wdlymgc3jsnicz9kzvymjw1www2163gxidnz4wb8fy8"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-zlib" ,ghc-zlib)))
+     (list ghc-zlib))
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-hspec ghc-quickcheck))
     (arguments
      `(#:cabal-revision
        ("2" "0fq49694gqkab8m0vq4i879blswczwd66n7xh4r4gwiahf0ryvqc")))
@@ -15461,9 +14845,8 @@ provides access to the full zlib feature set.")
          "0vghl48cxcqy72sqk2gpi7rvy5ya36j13vndaxi6kck6bqivbhm0"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/luispedro/hs-zstd")
     (synopsis "Haskell bindings to the Zstandard compression algorithm")
     (description "This library provides Haskell bindings to the
@@ -15486,7 +14869,7 @@ compression ratios.")
        (sha256
         (base32 "0fc18vdm1894yjbjkj9wjm27bf37ac3gvkzak677mgiw2pinmhvs"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-generic-deriving" ,ghc-generic-deriving)))
+    (inputs (list ghc-generic-deriving))
     (arguments
      `(#:cabal-revision
        ("1" "0krvp9v5dh4w2076kar48cpkk62ndqp769v2ai3b38rsa5bj6q74")))
@@ -15562,10 +14945,8 @@ for compilers with @code{PolyKinds}.")
         (base32 "1mg5hnr3f4zjh3ajy16jkxj630rnfa9iqnnmpjqd9gkjdxpssd5l"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-quickcheck ghc-tasty ghc-tasty-expected-failure
+           ghc-tasty-quickcheck))
     (home-page "https://github.com/snowleopard/selective")
     (synopsis "Selective applicative functors")
     (description
@@ -15591,14 +14972,14 @@ on selective functors} for more details.")
         (base32 "0ik6wsff306dnbz0v3gpiajlj5b558hrk9176fzcb2fclf4447nm"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-comonad" ,ghc-comonad)
-       ("ghc-free" ,ghc-free)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-comonad
+           ghc-free
+           ghc-hashable
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-unordered-containers))
     (home-page "http://github.com/ekmett/keys/")
     (synopsis "Keyed functors and containers")
     (description
@@ -15623,15 +15004,15 @@ dependencies.")
         (base32 "07p92y62dibys3xa59rvx52xyyr39nghl73z7hzwnksa3ry3vfmq"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-data-default-class" ,ghc-data-default-class)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-kan-extensions" ,ghc-kan-extensions)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)))
+     (list ghc-data-default-class
+           ghc-comonad
+           ghc-kan-extensions
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-tagged
+           ghc-transformers-compat
+           ghc-hashable
+           ghc-unordered-containers))
     (home-page "https://github.com/ekmett/pointed/")
     (synopsis "Pointed and copointed data types")
     (description
@@ -15653,13 +15034,13 @@ dependencies.")
         (base32 "10akvpa5w9bp0d8hflab63r9laa9gy2hv167smhjsdzq1kplc0hv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-vector" ,ghc-vector)
-       ("ghc-semigroupoids" ,ghc-semigroupoids)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-comonad" ,ghc-comonad)
-       ("ghc-pointed" ,ghc-pointed)
-       ("ghc-keys" ,ghc-keys)
-       ("ghc-hashable" ,ghc-hashable)))
+     (list ghc-vector
+           ghc-semigroupoids
+           ghc-semigroups
+           ghc-comonad
+           ghc-pointed
+           ghc-keys
+           ghc-hashable))
     (home-page "https://github.com/ekmett/vector-instances")
     (synopsis "Orphan instances for @code{Data.Vector}")
     (description
@@ -15682,9 +15063,7 @@ the @code{ghc-vector} package.")
         (base32 "1il1hs5yjfkb417c224pw1vrh4anyprasfwmjbd4fkviyv55jl3b"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-base-compat ghc-hspec hspec-discover))
     (home-page "https://github.com/haskell-compat/th-compat")
     (synopsis
      "Backward- and forward-compatible @code{Quote} and @code{Code} types")
@@ -15711,9 +15090,8 @@ range of @code{template-haskell} versions.  On recent versions of
         (base32 "0nznzji5haxl4ninm2a79dqf4c7fj6pc3z9gdc6wbf5h1pp14afr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-extra" ,ghc-extra)
-       ("ghc-semigroups" ,ghc-semigroups)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+     (list ghc-extra ghc-semigroups))
+    (native-inputs (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/filepattern")
     (synopsis "File path glob-like matching")
     (description
@@ -15754,11 +15132,9 @@ traverals using patterns.
        (sha256
         (base32 "0r5sl7hhn0cxp0b1dskx1lshplc0yka7hcvs2nh10nrj07fjd3vj"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-uniplate" ,ghc-uniplate)))
+    (inputs (list ghc-uniplate))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-extra" ,ghc-extra)))
+     (list ghc-tasty ghc-tasty-hunit ghc-extra))
     (home-page "https://github.com/shayne-fletcher/ghc-lib-parser-ex")
     (synopsis "Algorithms on GHC parse trees")
     (description
@@ -15802,13 +15178,10 @@ it.")
        (sha256
         (base32 "0nbxkpd29ivdi6vcikbaasffkcz9m2vd4nhv29p6gmvckzmhj7zi"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-th-lift-instances" ,ghc-th-lift-instances)))
+    (inputs (list ghc-th-lift-instances))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
-       ("ghc-doctest" ,ghc-doctest)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+           ghc-unicode-transforms ghc-doctest))
     (home-page "https://github.com/jgm/unicode-collation")
     (synopsis "Haskell implementation of the Unicode Collation Algorithm")
     (description
@@ -15834,21 +15207,21 @@ provided.")
         (base32 "13hgbcbr7jbyfbxp8fsc43c2wq4fhlbxzqwh1plfkdi5n9bif1lv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-safe" ,ghc-safe)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-xml-conduit" ,ghc-xml-conduit)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)
-       ("ghc-unicode-collation" ,ghc-unicode-collation)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)))
-    (native-inputs `(("ghc-timeit" ,ghc-timeit) ("ghc-diff" ,ghc-diff)))
+     (list ghc-safe
+           ghc-case-insensitive
+           ghc-vector
+           ghc-scientific
+           ghc-uniplate
+           ghc-xml-conduit
+           ghc-attoparsec
+           ghc-data-default
+           ghc-aeson
+           ghc-file-embed
+           ghc-pandoc-types
+           ghc-unicode-collation
+           ghc-base-compat
+           ghc-aeson-pretty))
+    (native-inputs (list ghc-timeit ghc-diff))
     (home-page "https://hackage.haskell.org/package/citeproc")
     (synopsis "Generate citations and bibliography from CSL styles")
     (description
@@ -15871,11 +15244,9 @@ entries.  For more information about CSL, see @uref{https://citationstyles.org/}
        (sha256
         (base32 "105szy7l4ji255fwv0kbfcy3i3a3a4197zgj6s9jb12kwbn6n0c7"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-unicode-transforms" ,ghc-unicode-transforms)))
+    (inputs (list ghc-unicode-transforms))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Pure Haskell Commonmark parser")
     (description
@@ -15910,11 +15281,9 @@ varies linearly with input length.")
         (base32 "0jm6w84p2a2gyaljvnlvjjwrwnir1lss3ps53d0bd8mkvhixxrqr"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-network-uri" ,ghc-network-uri)
-       ("ghc-commonmark" ,ghc-commonmark)
-       ("ghc-emojis" ,ghc-emojis)))
+     (list ghc-network-uri ghc-commonmark ghc-emojis))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty) ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Extensions for @code{ghc-commonmark}")
     (description
@@ -15938,9 +15307,7 @@ footnotes, math, and more.")
         (base32 "15rfaz49msswb7gh5wyxpm9vckbf3wzyd2m5m2f3hggb82ydk5cp"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-commonmark" ,ghc-commonmark)
-       ("ghc-commonmark-extensions" ,ghc-commonmark-extensions)
-       ("ghc-pandoc-types" ,ghc-pandoc-types)))
+     (list ghc-commonmark ghc-commonmark-extensions ghc-pandoc-types))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Bridge between Commonmark and Pandoc AST.")
     (description
@@ -15962,11 +15329,9 @@ Pandoc types.")
        (sha256
         (base32 "1zxfljcn74rky26ijqmba6grpj0h9plgr47wxdaf7gcz1y8dhn68"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hslua" ,ghc-hslua)))
+    (inputs (list ghc-hslua))
     (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-lua" ,ghc-tasty-lua)))
+     (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
     (home-page "https://github.com/hslua/hslua-module-path")
     (synopsis "Lua module to work with file paths")
     (description
@@ -15988,7 +15353,7 @@ platform independent way.")
        (sha256
         (base32 "1nk1cv35szp80qkhbyh5gn6vn194zzl0wz186qrqdrdx3a9r9w4g"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-boot-th" ,ghc-boot-th)))
+    (inputs (list ghc-boot-th))
     (home-page "http://hackage.haskell.org/package/template-haskell")
     (synopsis "Support library for Template Haskell")
     (description
@@ -16013,13 +15378,13 @@ information.")
         (base32 "0aajx07n2rznyqxb0c4pn9j2cvkzw5brz9ki4grhhigbcri3jzmv"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-genvalidity" ,ghc-genvalidity)
-       ("ghc-genvalidity-property" ,ghc-genvalidity-property)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-hspec-core" ,ghc-hspec-core)
-       ("ghc-validity" ,ghc-validity)))
+     (list ghc-quickcheck
+           ghc-genvalidity
+           ghc-genvalidity-property
+           ghc-hspec
+           hspec-discover
+           ghc-hspec-core
+           ghc-validity))
     (home-page "https://github.com/NorfairKing/validity")
     (synopsis "Standard spec's for @code{GenValidity} instances")
     (description
@@ -16066,11 +15431,8 @@ upon by user code.")
         (base32 "0gbmn5rpvyxhw5bxjmxwld6918lslv03b2f6hshssaw1il5x86j3"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-tagged" ,ghc-tagged)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     (list ghc-quickcheck ghc-quickcheck-instances ghc-tagged ghc-tasty
+           ghc-tasty-quickcheck))
     (arguments
      `(#:cabal-revision
        ("5" "1h2d37szfrcwn9rphnijn4q9l947b0wwqjs1aqmm62xkhbad7jf6")))
@@ -16096,11 +15458,8 @@ upon by user code.")
         (base32 "1q8sxycv93sap6dgbw70scklnpjj5vav6qlvsxm5500jlvb3jnf0"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-cereal" ,ghc-cereal)
-       ("ghc-monad-loops" ,ghc-monad-loops)
-       ("ghc-pretty-hex" ,ghc-pretty-hex)
-       ("ghc-language-c" ,ghc-language-c)
-       ("ghc-regex-pcre" ,ghc-regex-pcre)))
+     (list ghc-cereal ghc-monad-loops ghc-pretty-hex ghc-language-c
+           ghc-regex-pcre))
     (home-page "https://github.com/Ongy/netlink-hs")
     (synopsis "Netlink communication for Haskell")
     (description
@@ -16124,7 +15483,7 @@ of Netlink families.")
         (base32 "1fbqi4s4ajxhyv4a7nbh3v98limla0z8rfqlh02pwc1a90qpwy1a"))))
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Fail to open shared library.
-    (native-inputs `(("ghc-doctest" ,ghc-doctest)))
+    (native-inputs (list ghc-doctest))
     (home-page "https://github.com/Hexirp/doctest-driver-gen")
     (synopsis "Generate driver file for Doctest's Cabal integration")
     (description
@@ -16169,10 +15528,8 @@ Haskell newer than 2.8.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
     (inputs
-     `(("mysql" ,mysql)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+     (list mysql zlib openssl))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/paul-rouse/mysql")
     (synopsis "Low-level MySQL client library")
     (description
@@ -16201,14 +15558,10 @@ built.")
         (base32 "0zjnwnjpcpnnm0815h9ngr3a3iy0szsnb3nrcavkbx4905s9k4bs"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-blaze-builder ghc-old-locale ghc-vector))
     (native-inputs
-     `(("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-double-conversion" ,ghc-double-conversion)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+     (list ghc-quickcheck ghc-double-conversion ghc-test-framework
+           ghc-test-framework-quickcheck2))
     (home-page "https://github.com/bos/blaze-textual")
     (synopsis "Fast rendering of common datatypes")
     (description
@@ -16232,17 +15585,17 @@ Haskell datatypes in text form using the @code{ghc-blaze-builder} library.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
     (inputs
-     `(("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-mysql" ,ghc-mysql)
-       ("ghc-pcre-light" ,ghc-pcre-light)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-blaze-textual" ,ghc-blaze-textual)
-       ("ghc-vector" ,ghc-vector)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
-    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+     (list ghc-attoparsec
+           ghc-base16-bytestring
+           ghc-blaze-builder
+           ghc-mysql
+           ghc-pcre-light
+           ghc-old-locale
+           ghc-blaze-textual
+           ghc-vector
+           openssl
+           zlib))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/paul-rouse/mysql-simple")
     (synopsis "Mid-level MySQL client library")
     (description
@@ -16265,17 +15618,16 @@ Haskell datatypes in text form using the @code{ghc-blaze-builder} library.")
         (base32 "1dvniapxjaw2vmdqd5cplwxdxiy2l6z6gns8gp3ci3rn3xp0pf6p"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-haskell-src-meta" ,ghc-haskell-src-meta)
-       ("ghc-persistent" ,ghc-persistent)))
+     (list ghc-haskell-src-meta ghc-persistent))
     (native-inputs
-     `(("ghc-hunit" ,ghc-hunit)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-unliftio" ,ghc-unliftio)))
+     (list ghc-hunit
+           ghc-aeson
+           ghc-fast-logger
+           ghc-hspec
+           ghc-monad-logger
+           ghc-persistent-sqlite
+           ghc-resourcet
+           ghc-unliftio))
     (home-page "https://github.com/yesodweb/persistent")
     (synopsis "Quasi-quoter for raw SQL for @code{ghc-persistent}")
     (description
@@ -16299,28 +15651,28 @@ Language} for @code{ghc-persistent}.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Fails to import MaybeFieldDefsTest.
     (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-mysql" ,ghc-mysql)
-       ("ghc-mysql-simple" ,ghc-mysql-simple)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-persistent-qq" ,ghc-persistent-qq)
-       ("ghc-persistent-test" ,ghc-persistent-test)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)))
+     (list ghc-persistent
+           ghc-aeson
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-monad-logger
+           ghc-mysql
+           ghc-mysql-simple
+           ghc-resourcet
+           ghc-resource-pool
+           ghc-unliftio-core
+           openssl
+           zlib))
+    (native-inputs
+     (list ghc-fast-logger
+           ghc-hspec
+           ghc-http-api-data
+           ghc-hunit
+           ghc-path-pieces
+           ghc-persistent-qq
+           ghc-persistent-test
+           ghc-quickcheck
+           ghc-quickcheck-instances))
     (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis
      "Backend for the @code{ghc-persistent} library using MySQL database server")
@@ -16346,7 +15698,7 @@ is officially supported.")
        (sha256
         (base32 "0a1qwz0n80lph8m9cq6cb06m8bsmqgg8ifx0acpylvrrkd8g3k92"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-hspec-expectations" ,ghc-hspec-expectations)))
+    (inputs (list ghc-hspec-expectations))
     (home-page "https://hackage.haskell.org/package/hspec-expectations-lifted")
     (synopsis "Version of @code{ghc-hspec-expectations} generalized to @code{MonadIO}")
     (description
@@ -16368,12 +15720,10 @@ to @code{MonadIO}.")
        (sha256
         (base32 "150rdank90h7v08x0wq4dffjbxv2daf5v9sqfs5mab76kinwxg26"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-utf8-string" ,ghc-utf8-string)))
+    (inputs (list ghc-utf8-string))
     (native-inputs
-     `(("hspec-discover" ,hspec-discover)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-quickcheck" ,ghc-quickcheck)))
+     (list hspec-discover ghc-hspec ghc-quickcheck-instances
+           ghc-quickcheck))
     (home-page "https://github.com/soenkehahn/string-conversions")
     (synopsis "Simplify dealing with different types for strings")
     (description
@@ -16398,7 +15748,7 @@ string types into values of other string types.")
     (arguments
      `(#:cabal-revision
        ("1" "1clivf13z15w954a0kcfkv8yc0d8kx61b68x2hk7a9236ck7l2m2")))
-    (inputs `(("postgresql" ,postgresql)))
+    (inputs (list postgresql))
     (home-page "https://github.com/haskellari/postgresql-libpq")
     (synopsis "Low-level bindings to @code{libpq}")
     (description
@@ -16423,27 +15773,27 @@ server and to receive the results of these queries.")
         (base32 "0rz2bklxp4pvbxb2w49h5p6pbwabn6d5d4j4mrya4fpa0d13k43d"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-time-compat" ,ghc-time-compat)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-only" ,ghc-only)
-       ("ghc-postgresql-libpq" ,ghc-postgresql-libpq)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-uuid-types" ,ghc-uuid-types)
-       ("ghc-vector" ,ghc-vector)))
-    (native-inputs
-     `(("ghc-inspection-testing" ,ghc-inspection-testing)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-cryptohash-md5" ,ghc-cryptohash-md5)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+     (list ghc-time-compat
+           ghc-aeson
+           ghc-attoparsec
+           ghc-bytestring-builder
+           ghc-case-insensitive
+           ghc-hashable
+           ghc-only
+           ghc-postgresql-libpq
+           ghc-scientific
+           ghc-uuid-types
+           ghc-vector))
+    (native-inputs
+     (list ghc-inspection-testing
+           ghc-tasty
+           ghc-tasty-hunit
+           ghc-base16-bytestring
+           ghc-cryptohash-md5
+           ghc-hunit
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hunit))
     (arguments
      `(#:cabal-revision
        ("2" "1kwjlj0bsc1yd4dgfc0ydawq9acfjlf0bymwc830dryp16wpj9zv")))
@@ -16470,33 +15820,33 @@ server and to receive the results of these queries.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Cannot import MaybeFieldDefsTest.
     (inputs
-     `(("ghc-persistent" ,ghc-persistent)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-conduit" ,ghc-conduit)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-postgresql-simple" ,ghc-postgresql-simple)
-       ("ghc-postgresql-libpq" ,ghc-postgresql-libpq)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-resource-pool" ,ghc-resource-pool)
-       ("ghc-string-conversions" ,ghc-string-conversions)
-       ("ghc-unliftio-core" ,ghc-unliftio-core)
-       ("ghc-unliftio" ,ghc-unliftio)))
-    (native-inputs
-     `(("ghc-persistent-qq" ,ghc-persistent-qq)
-       ("ghc-persistent-test" ,ghc-persistent-test)
-       ("ghc-fast-logger" ,ghc-fast-logger)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("ghc-hspec-expectations" ,ghc-hspec-expectations)
-       ("ghc-hspec-expectations-lifted" ,ghc-hspec-expectations-lifted)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-       ("ghc-path-pieces" ,ghc-path-pieces)
-       ("ghc-http-api-data" ,ghc-http-api-data)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-persistent
+           ghc-aeson
+           ghc-attoparsec
+           ghc-blaze-builder
+           ghc-conduit
+           ghc-monad-logger
+           ghc-postgresql-simple
+           ghc-postgresql-libpq
+           ghc-resourcet
+           ghc-resource-pool
+           ghc-string-conversions
+           ghc-unliftio-core
+           ghc-unliftio))
+    (native-inputs
+     (list ghc-persistent-qq
+           ghc-persistent-test
+           ghc-fast-logger
+           ghc-hunit
+           ghc-hspec
+           ghc-hspec-expectations
+           ghc-hspec-expectations-lifted
+           ghc-quickcheck
+           ghc-quickcheck-instances
+           ghc-path-pieces
+           ghc-http-api-data
+           ghc-unordered-containers
+           ghc-vector))
     (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis "Backend for the @code{ghc-persistent library} using Postgresql")
     (description
@@ -16520,9 +15870,7 @@ using the @code{ghc-postgresql-simple} package.")
     (build-system haskell-build-system)
     (arguments `(#:tests? #f)) ; TODO: Needs tasty >=1.3.1 && <1.4
     (native-inputs
-     `(("ghc-smallcheck" ,ghc-smallcheck)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)))
+     (list ghc-smallcheck ghc-tasty ghc-tasty-smallcheck))
     (home-page "https://github.com/strake/filtrable.hs")
     (synopsis "Class of filtrable containers")
     (description "This package provides filtrable containers.")
@@ -16543,8 +15891,7 @@ using the @code{ghc-postgresql-simple} package.")
         (base32 "06a44i7a956d7xkk2na4090xj2a7b7a228pk4spmccs4x20ymssh"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-async" ,ghc-async)))
+     (list ghc-async ghc-async))
     (home-page "https://github.com/takano-akio/filelock")
     (synopsis "Portable interface to file locking")
     (description
@@ -16566,11 +15913,8 @@ using the @code{ghc-postgresql-simple} package.")
         (base32 "12sxww260pc0bbpiyirm7911haxhljdi2f08a9ddpbgw8d5n7ffg"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-hsyaml" ,ghc-hsyaml)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-vector" ,ghc-vector)))
+     (list ghc-hsyaml ghc-aeson ghc-scientific ghc-unordered-containers
+           ghc-vector))
     (arguments
      `(#:cabal-revision
        ("3" "0vhdndyj5f07vvvnssn5ybdja5wmaydq0n2lfpihvdg4dkhczrx2")))
@@ -16604,12 +15948,12 @@ data into native Haskell data types.")
         (base32 "07xb926kixqv5scqdl8w34z42zjzdpbq06f0ha3f3nm3rxhgn3m8"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-async" ,ghc-async)
-       ("ghc-singleton-bool" ,ghc-singleton-bool)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-temporary" ,ghc-temporary)))
+     (list ghc-async
+           ghc-singleton-bool
+           ghc-tasty
+           ghc-tasty-expected-failure
+           ghc-tasty-hunit
+           ghc-temporary))
     (arguments
      `(#:cabal-revision
        ("1" "0mmq1q82mrbayiij0p8wdnkf0j8drmq1iibg8kn4cak3nrn9pd1d")))
@@ -16673,7 +16017,7 @@ data Dec a
        (sha256
         (base32 "17w9vv6arn7vvc7kykqcx81q2364ji43khrryl27r1cjx9yxapa0"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-dec" ,ghc-dec)))
+    (inputs (list ghc-dec))
     (arguments
      `(#:cabal-revision
        ("3" "11rhzpy4xiry39bbxzwrqff75f0f4g7z0vkr3v9l8rv3w40jlf7x")))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index e8bbc9dd10..699b45e45a 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
@@ -22,6 +22,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -91,7 +92,7 @@
                (setenv "HASKELLPROG" "./bin/clisp-haskell")
                #t)))))
       (inputs
-       `(("clisp" ,clisp)))
+       (list clisp))
       (home-page "https://git.elephly.net/software/yale-haskell.git")
       (synopsis "Port of the Yale Haskell system to CLISP")
       (description "This package provides the Yale Haskell system running on
@@ -248,9 +249,8 @@ top of CLISP.")
                      (gmp-lib (string-append gmp "/lib"))
                      (gmp-include (string-append gmp "/include"))
                      (ncurses-lib
-                      (string-append (assoc-ref inputs "ncurses") "/lib"))
-                     (ld-so (string-append (assoc-ref inputs "libc")
-                                           ,(glibc-dynamic-linker)))
+                      (dirname (search-input-file inputs "/lib/libncurses.so")))
+                     (ld-so (search-input-file inputs ,(glibc-dynamic-linker)))
                      (libtinfo-dir
                       (string-append ghc-bootstrap-prefix
                                      "/lib/ghc-7.8.4/terminfo-0.4.0.0")))
@@ -422,9 +422,7 @@ interactive environment for the functional language Haskell.")
        (sha256
         (base32 "1ch4j2asg7pr52ai1hwzykxyj553wndg7wq93i47ql4fllspf48i"))))
     (inputs
-     `(("gmp" ,gmp)
-       ("ncurses" ,ncurses)
-       ("libffi" ,libffi)))
+     (list gmp ncurses libffi))
     (native-inputs
      `(("perl" ,perl)
        ("python" ,python)               ; for tests
@@ -635,7 +633,7 @@ interactive environment for the functional language Haskell.")
            (sha256
             (base32
              "0c55pj2820q26rikhpf636sn4mjgqsxjrl94vsywrh79dxp3k14z"))))
-       ("git" ,git)                     ; invoked during tests
+       ("git" ,git-minimal/fixed)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -688,7 +686,7 @@ interactive environment for the functional language Haskell.")
            (sha256
             (base32
              "1zl25gg6bpx5601k8h3cqnns1xfc0nqgwnh8jvn2s65ra3f2g1nz"))))
-       ("git" ,git-minimal)                     ; invoked during tests
+       ("git" ,git-minimal/fixed)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -712,12 +710,18 @@ interactive environment for the functional language Haskell.")
                  (("\\]\\), " all)
                   (string-append all "expect_broken(0)], ")))))
            ;; TODO: Turn this into an undconditional patch on the next rebuild.
-           ,@(if (string=? "i686-linux" (%current-system))
+           ,@(if (string-prefix? "i686" (or (%current-target-system)
+                                                  (%current-system)))
               '((add-after 'skip-more-tests 'skip-failing-tests-i686
                  (lambda _
                    (substitute* '("testsuite/tests/codeGen/should_compile/all.T")
                      (("(test\\('T15155l', )when\\(unregisterised\\(\\), skip\\)" all before)
-                      (string-append before "when(arch('i386'), skip)"))))))
+                      (string-append before "when(arch('i386'), skip)")))
+                   ;; Unexpected failures:
+                   ;;    quasiquotation/T14028.run  T14028 [bad stderr] (dyn)
+                   (substitute* '("testsuite/tests/quasiquotation/all.T")
+                     (("unless\\(config.have_ext_interp, skip\\),")
+                      "unless(config.have_ext_interp, skip), when(arch('i386'), skip),")))))
               '())))))
     (native-search-paths (list (search-path-specification
                                 (variable "GHC_PACKAGE_PATH")
diff --git a/gnu/packages/hexedit.scm b/gnu/packages/hexedit.scm
index e5ea18cde6..20f3cbfe7b 100644
--- a/gnu/packages/hexedit.scm
+++ b/gnu/packages/hexedit.scm
@@ -60,11 +60,9 @@
                                "/share/man/man1/hexedit.1.gz\"")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("man-db" ,man-db)
-       ("ncurses" ,ncurses)))
+     (list man-db ncurses))
     (synopsis "View and edit files or devices in hexadecimal or ASCII")
     (description "hexedit shows a file both in ASCII and in hexadecimal.  The
 file can be a device as the file is read a piece at a time.  You can modify
@@ -86,8 +84,7 @@ the file and search through it.")
                 "0w2xnw3z9ws9qrdpb80q55h6ynhh3aziixcfn45x91bzrbifix9i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lzo" ,lzo)
-       ("ncurses" ,ncurses)))
+     (list lzo ncurses))
     (synopsis "Viewer, editor, and analyzer for executable binaries")
     (description
      "ht is a terminal-based program to view, edit, and analyze any file, but
@@ -112,7 +109,7 @@ Development Environment} (IDE).")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no check target
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Binary file editor")
     (description "@command{bvi} is a display-oriented editor for binary files,
 based on the @command{vi} text editor.")
diff --git a/gnu/packages/hugs.scm b/gnu/packages/hugs.scm
index a14b8a8583..c9915e4cd6 100644
--- a/gnu/packages/hugs.scm
+++ b/gnu/packages/hugs.scm
@@ -72,7 +72,7 @@
              #t)))
        #:tests? #f)) ; no test target
     ;; FIXME: Fails to build with GCC 5.
-    (native-inputs `(("gcc" ,gcc-4.9)))
+    (native-inputs (list gcc-4.9))
     (home-page "https://www.haskell.org/hugs/")
     (synopsis "Functional programming system based on Haskell 98")
     (description
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 59a7b55943..d6ce00e15d 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
-;;; Copyright © 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -51,20 +51,16 @@
             hurd-target?
             hurd-triplet?))
 
-(define (hurd-triplet? triplet)
-  (and (string-suffix? "-gnu" triplet)
-       (not (string-contains triplet "linux"))))
-
 (define (hurd-target?)
   "Return true if the cross-compilation target or the current system is
 GNU/Hurd."
-  (or (and=> (%current-target-system) hurd-triplet?)
+  (or (and=> (%current-target-system) target-hurd?)
       (and (not (%current-target-system))
-           (and=> (%current-system) hurd-triplet?))))
+           (and=> (%current-system) target-hurd?))))
 
 (define (hurd-system?)
   "Return true if the current system is the Hurd."
-  (and=> (%current-system) hurd-triplet?))
+  (and=> (%current-system) target-hurd?))
 
 (define (hurd-source-url version)
   (string-append "mirror://gnu/hurd/hurd-"
@@ -106,9 +102,7 @@ GNU/Hurd."
 
            #:tests? #f))
        (native-inputs
-        `(("autoconf" ,autoconf)
-          ("automake" ,automake)
-          ("texinfo" ,texinfo-4)))
+        (list autoconf automake texinfo-4))
        (home-page "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html")
        (synopsis "GNU Mach kernel headers")
        (description
@@ -129,12 +123,9 @@ GNU/Hurd."
         "1gyda8sq6b379nx01hkpbd85lz39irdvz2b9wbr63gicicx8i706"))))
     (build-system gnu-build-system)
     ;; Flex is needed both at build and run time.
-    (inputs `(("gnumach-headers" ,gnumach-headers)
-              ("flex" ,flex)
-              ("perl" ,perl)))
+    (inputs (list gnumach-headers flex perl))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)))
+     (list flex bison))
     (arguments `(#:tests? #f
                  #:phases
                  (modify-phases %standard-phases
@@ -186,9 +177,7 @@ communication.")
                (file-name (git-file-name name version))))
      (build-system gnu-build-system)
      (native-inputs
-      `(("mig" ,mig)
-        ("autoconf" ,autoconf)
-        ("automake" ,automake)))
+      (list mig autoconf automake))
      (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -233,7 +222,7 @@ Library and other user programs.")
 (define-public hurd-minimal
   (package (inherit hurd-headers)
     (name "hurd-minimal")
-    (inputs `(("glibc-hurd-headers" ,glibc/hurd-headers)))
+    (inputs (list glibc/hurd-headers))
     (arguments
      (substitute-keyword-arguments (package-arguments hurd-headers)
        ((#:phases _)
@@ -289,9 +278,7 @@ Library for GNU/Hurd.")
                         (union-build (assoc-ref %outputs "out")
                                      directories)
                         #t))))))
-    (inputs `(("gnumach-headers" ,gnumach-headers)
-              ("hurd-headers" ,hurd-headers)
-              ("hurd-minimal" ,hurd-minimal)))
+    (inputs (list gnumach-headers hurd-headers hurd-minimal))
     (synopsis "Union of the Hurd headers and libraries")
     (description
      "This package contains the union of the Mach and Hurd headers and the
@@ -305,6 +292,8 @@ Hurd-minimal package which are needed for both glibc and GCC.")
     (name "gnumach")
     (arguments
      (substitute-keyword-arguments (package-arguments gnumach-headers)
+       ((#:make-flags flags ''())
+        `(cons "CFLAGS=-fcommon" ,flags))
        ((#:configure-flags flags ''())
         `(cons "--enable-kdb" ,flags))            ;enable kernel debugger
        ((#:phases phases '%standard-phases)
@@ -314,14 +303,9 @@ Hurd-minimal package which are needed for both glibc and GCC.")
                (let* ((out  (assoc-ref outputs "out"))
                       (boot (string-append out "/boot")))
                  (invoke "make" "gnumach.gz")
-                 (install-file "gnumach.gz" boot)
-                 #t)))))))
+                 (install-file "gnumach.gz" boot))))))))
     (native-inputs
-     `(("mig" ,mig)
-       ("perl" ,perl)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo-4)))
+     (list mig perl autoconf automake texinfo-4))
     (supported-systems (cons "i686-linux" %hurd-systems))
     (synopsis "Microkernel of the GNU system")
     (description
@@ -378,9 +362,10 @@ Hurd-minimal package which are needed for both glibc and GCC.")
            (lambda* (#:key inputs #:allow-other-keys)
              (for-each (lambda (var)
                          (setenv var
-                                 (string-append (assoc-ref inputs "libtirpc")
-                                                "/include/tirpc:"
-                                                (or (getenv var) ""))))
+                                 (string-append
+                                  (search-input-directory inputs
+                                                          "include/tirpc")
+                                  ":" (or (getenv var) ""))))
                        '("CROSS_C_INCLUDE_PATH" "C_INCLUDE_PATH"
                          "CROSS_CPATH" "CPATH"))
              #t))
@@ -510,16 +495,18 @@ exec ${system}/rc \"$@\"
                (copy-file "unifont"
                           (string-append datadir "/vga-system.bdf"))
                #t))))
-       #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                              %output "/lib")
-                          "--disable-ncursesw"
-                          "--without-libbz2"
-                          "--without-libz"
-                          "--without-parted"
-                          ;; This is needed to pass the configure check for
-                          ;; clnt_create
-                          "ac_func_search_save_LIBS=-ltirpc"
-                          "ac_cv_search_clnt_create=false")))
+       #:configure-flags
+       ,#~(list (string-append "LDFLAGS=-Wl,-rpath="
+                               #$output "/lib")
+                "--disable-ncursesw"
+                "--without-libbz2"
+                "--without-libz"
+                "--without-parted"
+                ;; This is needed to pass the configure check for
+                ;; clnt_create
+                "ac_func_search_save_LIBS=-ltirpc"
+                "ac_cv_search_clnt_create=false"
+                "CFLAGS=-fcommon")))
     (build-system gnu-build-system)
     (inputs
      `(("glibc-hurd-headers" ,glibc/hurd-headers)
@@ -581,15 +568,15 @@ implementing them.")
       (build-system gnu-build-system)
       (arguments
        `(#:make-flags
-         (list (string-append "SHELL=" (assoc-ref %build-inputs "bash")
-                              "/bin/bash")
+         (list (string-append "SHELL="
+                              (search-input-file %build-inputs "/bin/bash"))
                "PKGDIR=libdde_linux26"
                ,@(if (%current-target-system)
                      (list "CC=i586-pc-gnu-gcc"
                            "LINK_PROGRAM=i586-pc-gnu-gcc")
                      (list "CC=gcc")))
          #:configure-flags
-         (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
+         ,#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)
@@ -625,9 +612,7 @@ implementing them.")
                                             "/bin"))
                #t)))))
       (inputs
-       `(("hurd" ,hurd)
-         ("libpciaccess" ,libpciaccess)
-         ("zlib" ,zlib)))
+       (list hurd libpciaccess zlib))
       (native-inputs
        `(("coreutils" ,coreutils)
          ("gawk" ,gawk)
diff --git a/gnu/packages/hyperledger.scm b/gnu/packages/hyperledger.scm
index 82680cd5e4..2a4b87e927 100644
--- a/gnu/packages/hyperledger.scm
+++ b/gnu/packages/hyperledger.scm
@@ -63,10 +63,7 @@
               (file-name (git-file-name name version))))
     (build-system go-build-system)
     (native-inputs
-     `(("which" ,which)
-       ("docker-cli" ,docker-cli)
-       ("git" ,git)
-       ("curl" ,curl)))
+     (list which docker-cli git curl))
     (arguments
      `(#:import-path "github.com/hyperledger/fabric"
        #:unpack-path "github.com/hyperledger/fabric"
@@ -122,7 +119,7 @@ different components.")
                 "0kr1zwah8mhnpfrpk3h6hdafyqdl3ixhs7czdfscqv6vxqfiabc4"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest)))
+     (list googletest))
     (arguments
      `(#:tests? #f      ; Tests don't build because CMake cannot find GTest main.
        #:configure-flags '("-DHUNTER_ENABLED=OFF"
@@ -182,20 +179,16 @@ link-time.  New implementations can be added as well.")
        #:test-target "."))
     ;; https://github.com/hyperledger/iroha/blob/master/vcpkg/VCPKG_DEPS_LIST
     (native-inputs
-     `(("fmt" ,fmt)
-       ("googletest" ,googletest)
-       ("rapidjson" ,rapidjson)
-       ("rxcpp" ,rxcpp)
-       ("spdlog" ,spdlog)))
+     (list fmt googletest rapidjson rxcpp spdlog))
     (inputs
-     `(("boost" ,boost)
-       ("gflags" ,gflags)
-       ("grpc" ,grpc-1.16.1)
-       ("hyperledger-iroha-ed25519" ,hyperledger-iroha-ed25519)
-       ("postgresql" ,postgresql)
-       ("protobuf" ,protobuf)
-       ("soci" ,soci)
-       ("tbb" ,tbb)))
+     (list boost
+           gflags
+           grpc-1.16.1
+           hyperledger-iroha-ed25519
+           postgresql
+           protobuf
+           soci
+           tbb))
     (synopsis "Simple, decentralized ledger")
     (description "Iroha is a distributed ledger technology (DLT).  Iroha has
 essential functionality for your asset, information and identity management
diff --git a/gnu/packages/i2p.scm b/gnu/packages/i2p.scm
index 1a9958c8d0..b945018ba8 100644
--- a/gnu/packages/i2p.scm
+++ b/gnu/packages/i2p.scm
@@ -44,10 +44,7 @@
         (base32 "1a35grcfw5a9dsj0rnm2i86fjf4px96xbnjj3hkril7hv5jvl37k"))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("miniupnpc" ,miniupnpc)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list boost miniupnpc openssl zlib))
     (arguments
      '(#:configure-flags
        (let ((source (assoc-ref %build-inputs "source")))
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index ab4b82284e..edaeb59641 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018, 2019, 2020, 2021 Peng Mei Yu <pengmeiyu@riseup.net>
 ;;; Copyright © 2020 kanichos <kanichos@yandex.ru>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -44,6 +45,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -51,19 +53,22 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages logging)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages unicode)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xdisorg))
 
 (define-public ibus
   (package
     (name "ibus")
-    (version "1.5.22")
+    (version "1.5.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ibus/ibus/"
@@ -71,12 +76,14 @@
                                   version "/ibus-" version ".tar.gz"))
               (sha256
                (base32
-                "0jmy2w01phpmqnjnfnak7nvfna57mpgfnl87jwc4iai8ijjynw41"))))
+                "07s2ly75xv50bqg37mn37i9akqvcfd45k2mbplxrsqk3a2b3mwxb"))))
     (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; tests fail because there's no connection to dbus
-       #:parallel-build? #f ; race condition discovered with emoji support
+     `(#:parallel-build? #f ; race condition discovered with emoji support
        #:configure-flags (list "--enable-python-library"
+                               "--enable-gtk-doc"
+                               "--enable-memconf"
                                (string-append
                                 "--with-unicode-emoji-dir="
                                 (assoc-ref %build-inputs "unicode-emoji")
@@ -91,6 +98,20 @@
                                "--enable-wayland")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; These tests require /etc/machine-id.
+             (with-directory-excursion "src/tests"
+               (substitute* '("ibus-share.c" "ibus-compose.c"
+                              "ibus-keypress.c")
+                 (("[ \t]*return g_test_run \\(\\);") "")))))
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs/reference/ibus"
+               (substitute* "ibus-docs.sgml.in"
+                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'patch-python-target-directories
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((root (string-append (assoc-ref outputs "out")
@@ -101,13 +122,11 @@
                  (("(py2?overridesdir)=.*" _ var)
                   (string-append var "=" root "/gi/overrides/"))
                  (("(pkgpython2dir=).*" _ var)
-                  (string-append var root "/ibus"))))
-             #t))
+                  (string-append var root "/ibus"))))))
          (add-before 'configure 'disable-dconf-update
            (lambda _
              (substitute* "data/dconf/Makefile.in"
-               (("dconf update") "echo dconf update"))
-             #t))
+               (("dconf update") "echo dconf update"))))
          (add-after 'unpack 'delete-generated-files
            (lambda _
              (for-each (lambda (file)
@@ -115,53 +134,85 @@
                            (when (file-exists? c)
                              (format #t "deleting ~a\n" c)
                              (delete-file c))))
-                       (find-files "." "\\.vala"))
-             #t))
+                       (find-files "." "\\.vala"))))
          (add-after 'unpack 'fix-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/ibusenginesimple.c"
                (("/usr/share/X11/locale")
-                (string-append (assoc-ref inputs "libx11")
-                               "/share/X11/locale")))
+                (search-input-directory inputs
+                                        "share/X11/locale")))
              (substitute* "ui/gtk3/xkblayout.vala"
                (("\"(setxkbmap|xmodmap)\"" _ prog)
-                (string-append "\"" (assoc-ref inputs prog) "/bin/" prog "\"")))
-             #t))
+                (string-append "\""
+                               (search-input-file inputs
+                                                  (string-append "bin/" prog))
+                               "\"")))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests require running iBus daemon.
+             (system "./bus/ibus-daemon --daemonize")))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/gtk-doc")
+                (string-append doc "/share/gtk-doc")))))
          (add-after 'wrap-program 'wrap-with-additional-paths
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure 'ibus-setup' runs with the correct PYTHONPATH and
              ;; GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/ibus-setup")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" ":" prefix
                    (,(getenv "GI_TYPELIB_PATH")
-                    ,(string-append out "/lib/girepository-1.0")))))
-             #t)))))
+                    ,(string-append out "/lib/girepository-1.0"))))))))))
     (inputs
      `(("dbus" ,dbus)
        ("dconf" ,dconf)
-       ("gconf" ,gconf)
+       ("glib" ,glib)
        ("gtk2" ,gtk+-2)
        ("gtk+" ,gtk+)
+       ("iso-codes" ,iso-codes)
        ("json-glib" ,json-glib)
        ("libnotify" ,libnotify)
        ("libx11" ,libx11)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxtst" ,libxtst)
+       ("pygobject" ,python-pygobject)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
        ("setxkbmap" ,setxkbmap)
+       ("ucd" ,ucd)
+       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("unicode-emoji" ,unicode-emoji)
        ("wayland" ,wayland)
-       ("xmodmap" ,xmodmap)
-       ("iso-codes" ,iso-codes)
-       ("pygobject2" ,python-pygobject)
-       ("python" ,python)))
+       ("xmodmap" ,xmodmap)))
     (native-inputs
-     `(("glib" ,glib "bin") ; for glib-genmarshal
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("glib" ,glib "bin")             ; for glib-genmarshal
        ("gettext" ,gettext-minimal)
+       ("gnome-common" ,gnome-common)
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-compiler
-       ("ucd" ,ucd)
-       ("unicode-emoji" ,unicode-emoji)
-       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("gtk-doc" ,gtk-doc)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
        ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
+       ("which" ,which)
+       ("xorg-server" ,xorg-server-for-tests)))
     (native-search-paths
      (list (search-path-specification
             (variable "IBUS_COMPONENT_PATH")
@@ -198,8 +249,8 @@ may also simplify input method development.")
              ;; PYTHONPATH and GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/libexec/ibus-setup-libpinyin")
-                 `("PYTHONPATH" ":" =
-                   (,(getenv "PYTHONPATH")
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH")
                     ,(string-append (assoc-ref inputs "ibus")
                                     "/lib/girepository-1.0")
                     ,(string-append (assoc-ref outputs "out")
@@ -220,9 +271,8 @@ may also simplify input method development.")
        ("pygobject2" ,python-pygobject)
        ("gtk+" ,gtk+)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")))
+     (list pkg-config intltool
+           `(,glib "bin")))
     (synopsis "Chinese pinyin and ZhuYin input methods for IBus")
     (description
      "This package includes a Chinese pinyin input method and a Chinese
@@ -244,10 +294,9 @@ ZhuYin (Bopomofo) input method based on libpinyin for IBus.")
                 "10h5mjgv4ibhispvr3s1k36a4aclx4dcvcc2knd4sg1xibw0dp4w"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("bdb" ,bdb)))
+     (list glib bdb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Library to handle Chinese pinyin")
     (description
      "The libpinyin C++ library provides algorithms needed for sentence-based
@@ -280,8 +329,8 @@ Chinese pinyin input methods.")
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/libexec/" prog)
-                    `("PYTHONPATH" ":" prefix
-                      (,(getenv "PYTHONPATH")))
+                    `("GUIX_PYTHONPATH" ":" prefix
+                      (,(getenv "GUIX_PYTHONPATH")))
                     `("GI_TYPELIB_PATH" ":" prefix
                       (,(getenv "GI_TYPELIB_PATH")
                        ,(string-append out "/lib/girepository-1.0")))))
@@ -293,11 +342,7 @@ Chinese pinyin input methods.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
-     `(("anthy" ,anthy)
-       ("gtk+" ,gtk+)
-       ("ibus" ,ibus)
-       ("gobject-introspection" ,gobject-introspection)
-       ("python-pygobject" ,python-pygobject)))
+     (list anthy gtk+ ibus gobject-introspection python-pygobject))
     (synopsis "Anthy Japanese language input method for IBus")
     (description "IBus-Anthy is an engine for the input bus \"IBus\").  It
 adds the Anthy Japanese language input method to IBus.  Because most graphical
@@ -320,6 +365,7 @@ Japanese language input in most graphical applications.")
        (sha256
         (base32
          "0pqk0i3zcii3fx5laj9qzbgd58jvq6wn31j76w4zix2i4b1lqcqv"))
+       (patches (search-patches "librime-fix-build-with-gcc10.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -338,17 +384,15 @@ Japanese language input in most graphical applications.")
                (("link_directories\\($\\{PROJECT_SOURCE_DIR\\}/thirdparty/lib\\)") ""))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("capnproto" ,capnproto)
-       ("glog" ,glog)
-       ("leveldb" ,leveldb)
-       ("marisa" ,marisa)
-       ("opencc" ,opencc)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list boost
+           capnproto
+           glog
+           leveldb
+           marisa
+           opencc
+           yaml-cpp))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto))) ; keysym.h
+     (list googletest pkg-config xorgproto)) ; keysym.h
     (home-page "https://rime.im/")
     (synopsis "The core library of Rime Input Method Engine")
     (description "@dfn{librime} is the core library of Rime Input Method
@@ -692,12 +736,12 @@ Method Engine.")
                 "DESTINATION \"${CMAKE_INSTALL_DATADIR}/rime-data\""))
              #t)))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("ibus" ,ibus)
-       ("libnotify" ,libnotify)
-       ("librime" ,librime)
-       ("rime-data" ,rime-data)))
+     (list gdk-pixbuf
+           glib
+           ibus
+           libnotify
+           librime
+           rime-data))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("pkg-config" ,pkg-config)))
@@ -752,7 +796,7 @@ hanja dictionary and small hangul character classification.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/libexec/ibus-setup-hangul")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("LD_LIBRARY_PATH" ":" prefix
                  (,(string-append (assoc-ref inputs "libhangul") "/lib")))
                `("GI_TYPELIB_PATH" ":" prefix
@@ -763,12 +807,12 @@ hanja dictionary and small hangul character classification.")
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("ibus" ,ibus)
-       ("glib" ,glib)
-       ("python-pygobject" ,python-pygobject)
-       ("gtk+" ,gtk+)
-       ("libhangul" ,libhangul)
-       ("python" ,python)))
+     (list ibus
+           glib
+           python-pygobject
+           gtk+
+           libhangul
+           python))
     (home-page "https://github.com/libhangul/ibus-hangul")
     (synopsis "Hangul engine for IBus")
     (description
@@ -793,8 +837,7 @@ hanja dictionary and small hangul character classification.")
     (arguments
      `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("python-tinycss2" ,python-tinycss2)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-tinycss2 python-pygobject))
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (home-page "https://github.com/openSUSE/IBus-Theme-Tools")
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 12f8393900..ec526e5ed3 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -1,13 +1,14 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +30,7 @@
   #:use-module (gnu packages java)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (guix gexp)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -39,7 +41,7 @@
 (define-public icu4c
   (package
    (name "icu4c")
-   (version "66.1")
+   (version "69.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -48,10 +50,8 @@
                   "/icu4c-"
                   (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                   "-src.tgz"))
-            (patch-flags '("-p2"))
-            (patches (search-patches "icu4c-CVE-2020-10531.patch"))
             (sha256
-             (base32 "0bharwzc9nzkbrcf405z2nb3h7q0711z450arz0mjmdrk8hg58sj"))))
+             (base32 "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))
    (build-system gnu-build-system)
    ;; When cross-compiling, this package needs a source directory of a
    ;; native-build of itself.
@@ -61,7 +61,7 @@
             `(("icu4c-build-root" ,icu4c-build-root))
             '())))
    (inputs
-    `(("perl" ,perl)))
+    (list perl))
    (arguments
     `(#:configure-flags
       (list
@@ -130,22 +130,6 @@ C/C++ part.")
                (base32
                 "09fng7a80xj8d5r1cgbgq8r47dsw5jsr6si9p2cj2ylhwgg974f7"))))))
 
-(define-public icu4c-69
-  (package
-    (inherit icu4c)
-    (version "69.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/unicode-org/icu/releases/download/release-"
-                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
-                    "/icu4c-"
-                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
-                    "-src.tgz"))
-              (sha256
-               (base32
-                "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))))
-
 (define-public icu4c-build-root
   (package
     (inherit icu4c)
@@ -182,18 +166,19 @@ C/C++ part.")
     (build-system ant-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "-Djunit.core.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-junit")
-                                   ".*.jar$")))
-             (string-append "-Djunit.junitparams.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-junitparams")
-                                   ".*.jar$")))
-             (string-append "-Djunit.hamcrest.jar="
-                            (car (find-files
-                                   (assoc-ref %build-inputs "java-hamcrest-core")
-                                   ".*.jar$"))))
+       ,#~(list
+           (string-append "-Djunit.core.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-junit")
+                                ".*.jar$")))
+           (string-append "-Djunit.junitparams.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-junitparams")
+                                ".*.jar$")))
+           (string-append "-Djunit.hamcrest.jar="
+                          (car (find-files
+                                #$(this-package-native-input "java-hamcrest-core")
+                                ".*.jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
@@ -215,9 +200,7 @@ C/C++ part.")
                (install-file "icu4j.jar" share)
                #t))))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-junitparams" ,java-junitparams)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-junitparams java-hamcrest-core))
     (home-page "http://site.icu-project.org/")
     (synopsis "International Components for Unicode")
     (description
diff --git a/gnu/packages/idris.scm b/gnu/packages/idris.scm
index 10ad154923..3e480e06b4 100644
--- a/gnu/packages/idris.scm
+++ b/gnu/packages/idris.scm
@@ -52,41 +52,38 @@
                                        "idris-build-with-megaparsec-9.patch"))))
     (build-system haskell-build-system)
     (native-inputs                      ;For tests
-     `(("perl" ,perl)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-rerun" ,ghc-tasty-rerun)))
+     (list perl ghc-cheapskate ghc-tasty ghc-tasty-golden
+           ghc-tasty-rerun))
     (inputs
-     `(("gmp" ,gmp)
-       ("ncurses" ,ncurses)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-async" ,ghc-async)
-       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-blaze-markup" ,ghc-blaze-markup)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-code-page" ,ghc-code-page)
-       ("ghc-fingertree" ,ghc-fingertree)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-ieee754" ,ghc-ieee754)
-       ("ghc-libffi" ,ghc-libffi)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-network" ,ghc-network)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-split" ,ghc-split)
-       ("ghc-terminal-size" ,ghc-terminal-size)
-       ("ghc-uniplate" ,ghc-uniplate)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-vector-binary-instances" ,ghc-vector-binary-instances)
-       ("ghc-zip-archive" ,ghc-zip-archive)))
+     (list gmp
+           ncurses
+           ghc-aeson
+           ghc-annotated-wl-pprint
+           ghc-ansi-terminal
+           ghc-ansi-wl-pprint
+           ghc-async
+           ghc-base64-bytestring
+           ghc-blaze-html
+           ghc-blaze-markup
+           ghc-cheapskate
+           ghc-code-page
+           ghc-fingertree
+           ghc-fsnotify
+           ghc-ieee754
+           ghc-libffi
+           ghc-megaparsec
+           ghc-network
+           ghc-optparse-applicative
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-split
+           ghc-terminal-size
+           ghc-uniplate
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-vector-binary-instances
+           ghc-zip-archive))
     (arguments
      `(#:configure-flags
        (list (string-append "--datasubdir="
@@ -214,7 +211,7 @@ Epigram and Agda.")
                   "1pkxnn3ryr0v0cin4nasw7kgkc9dnnpja1nfbj466mf3qv5s98af"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/ziman/lightyear")
       (synopsis "Lightweight parser combinator library for Idris")
@@ -239,7 +236,7 @@ difference: backtracking.")
                   "0g7c3y9smifdz4sivi3qmvymhdr7v9kfq45fmfmmvkqcrix0spzn"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/shayan-najd/wl-pprint")
       (synopsis "Pretty printing library")
@@ -264,7 +261,7 @@ wl-pprint library.")
                   "02vbsd3rmgnj0l1qq787709qcxjbr9890cbad4ykn27f77jk81h4"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/HuwCampbell/Idris-Bifunctors")
       (synopsis "Bifunctor library")
@@ -288,9 +285,9 @@ excellent Haskell Bifunctors package from Edward Kmett.")
                   "06jzfj6rad08rk92w8jk5byi79svmyg0mrcqhibgx8rkjjy6vmai"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("idris" ,idris)))
+       (list idris))
       (propagated-inputs
-       `(("idris-bifunctors" ,idris-bifunctors)))
+       (list idris-bifunctors))
       (arguments (idris-default-arguments name))
       (home-page "https://github.com/HuwCampbell/idris-lens")
       (synopsis "Van Laarhoven lenses for Idris")
diff --git a/gnu/packages/idutils.scm b/gnu/packages/idutils.scm
index 26472c6900..6d2f003734 100644
--- a/gnu/packages/idutils.scm
+++ b/gnu/packages/idutils.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -36,7 +36,6 @@
              (sha256
               (base32
                "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1"))
-             (patches (search-patches "diffutils-gets-undeclared.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -49,8 +48,15 @@
                                    "# define _IO_IN_BACKUP 0x100\n"
                                    "#endif\n\n"
                                    "/* BSD stdio derived implementations")))
-                 #t))))
+
+                 ;; 'gets' is deprecated in glibc 2.33 and its declaration is
+                 ;; no longer visible by default from <stdio.h>.
+                 (substitute* "lib/stdio.in.h"
+                   (("_GL_WARN_ON_USE \\(gets.*") ""))))))
     (build-system gnu-build-system)
+    (arguments
+     ;; XXX: These Gnulib tests fail with GCC 10 and glibc 2.33; skip them.
+     '(#:make-flags '("XFAIL_TESTS=test-sprintf-posix test-isnanl-nolibm")))
     (native-inputs `(("emacs" ,emacs-minimal)))
     (home-page "https://www.gnu.org/software/idutils/")
     (synopsis "Identifier database utilities")
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 9becd530b6..93fe384aa8 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Andy Tai <atai@atai.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -105,15 +106,15 @@
         (base32 "13j5yf3p6qj3mr17d77r3kcqchf055hgvk1w15vmdr8f54mwcnb8"))))
     (build-system cmake-build-system)
     (inputs
-     `(("icu4c" ,icu4c)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list icu4c
+           libjpeg-turbo
+           libpng
+           libtiff
+           libxml2
+           openssl
+           zlib))
     (native-inputs
-     `(("doxygen" ,doxygen)))           ; for HTML documentation
+     (list doxygen))           ; for HTML documentation
     (home-page "https://dcmtk.org")
     (synopsis "Libraries and programs implementing parts of the DICOM standard")
     (description "DCMTK is a collection of libraries and applications
@@ -225,15 +226,12 @@ of external libraries that provide additional functionality.")
                (("/bin/sh") (which "bash")))
              #t)))))
     (native-inputs
-     `(("git" ,git)
-       ("pkg-config" ,pkg-config)))
+     (list git pkg-config))
     (inputs
      ;; XXX Adding freeglut, glew, ilmbase, mesa, and openimageio for
      ;; ocioconvert fails: error: conflicting declaration ?typedef void
      ;; (* PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum, GLenum, GLfloat*)
-     `(("lcms" ,lcms)
-       ("openexr" ,openexr-2)
-       ("tinyxml" ,tinyxml)))
+     (list lcms openexr-2 tinyxml))
     (home-page "https://opencolorio.org")
     (synopsis "Color management for visual effects and animation")
     (description
@@ -344,98 +342,7 @@ many popular formats.")
     (propagated-inputs
      ;; VTK's 'VTK-vtk-module-find-packages.cmake' calls
      ;; 'find_package(THEORA)', which in turns looks for libogg.
-     `(("libogg" ,libogg)))
-    (home-page "https://vtk.org/")
-    (synopsis "Libraries for 3D computer graphics")
-    (description
-     "The Visualization Toolkit (VTK) is a C++ library for 3D computer graphics,
-image processing and visualization.  It supports a wide variety of
-visualization algorithms including: scalar, vector, tensor, texture, and
-volumetric methods; and advanced modeling techniques such as: implicit
-modeling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay
-triangulation.  VTK has an extensive information visualization framework, has
-a suite of 3D interaction widgets, supports parallel processing, and
-integrates with various databases on GUI toolkits such as Qt and Tk.")
-    (license license:bsd-3)))
-
-;; freecad needs an old version of VTK, because VTK's API changed from 8 to 9
-(define-public vtk-8
-  (package
-    (name "vtk")
-    (version "8.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://vtk.org/files/release/"
-                                  (version-major+minor version)
-                                  "/VTK-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl"))
-              (patches
-               (search-patches "vtk-8-fix-freetypetools-build-failure.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (for-each
-                    (lambda (dir)
-                      (delete-file-recursively
-                        (string-append "ThirdParty/" dir "/vtk" dir)))
-                    ;; ogg, pugixml depended upon unconditionally
-                    '("doubleconversion" "eigen" "expat" "freetype" "gl2ps"
-                      "glew" "hdf5" "jpeg" "jsoncpp" "libproj" "libxml2" "lz4"
-                      "netcdf" "png" "sqlite" "theora" "tiff" "zlib"))
-                  #t))))
-    (build-system cmake-build-system)
-    (arguments
-     '(#:build-type "Release"           ;Build without '-g' to save space.
-       #:configure-flags '(;"-DBUILD_TESTING:BOOL=TRUE"
-                           ;"-DVTK_MODULE_USE_EXTERNAL_vtkogg:BOOL=TRUE"    ; not honored
-                           "-DVTK_USE_SYSTEM_DOUBLECONVERSION:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_EIGEN:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_EXPAT:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_FREETYPE:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_GL2PS:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_GLEW:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_HDF5:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_JPEG:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_JSONCPP:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LIBPROJ:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LIBXML2:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LZ4:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_NETCDF:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_PNG:BOOL=TRUE"
-                           ;"-DVTK_USE_SYSTEM_PUGIXML:BOOL=TRUE"    ; breaks IO/CityGML
-                           "-DVTK_USE_SYSTEM_SQLITE:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_THEORA:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_TIFF:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_ZLIB:BOOL=TRUE")
-       #:tests? #f))        ;XXX: test data not included
-    (inputs
-     `(("double-conversion" ,double-conversion)
-       ("eigen" ,eigen)
-       ("expat" ,expat)
-       ("freetype" ,freetype)
-       ("gl2ps" ,gl2ps)
-       ("glew" ,glew)
-       ("glu" ,glu)
-       ("hdf5" ,hdf5)
-       ("jpeg" ,libjpeg-turbo)
-       ("jsoncpp" ,jsoncpp)
-       ;("libogg" ,libogg)
-       ("libtheora" ,libtheora)
-       ("libX11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libXt" ,libxt)
-       ("lz4" ,lz4)
-       ("mesa" ,mesa)
-       ("netcdf" ,netcdf)
-       ("png" ,libpng)
-       ("proj" ,proj.4)
-       ;("pugixml" ,pugixml)
-       ("sqlite" ,sqlite)
-       ("tiff" ,libtiff)
-       ("xorgproto" ,xorgproto)
-       ("zlib" ,zlib)))
+     (list libogg))
     (home-page "https://vtk.org/")
     (synopsis "Libraries for 3D computer graphics")
     (description
@@ -462,8 +369,8 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                (base32
                 "0pla1r5mvkgl4sl213gfdhzrypdgai0h3z5mfgm6p9jz9hsr794j"))))
     (inputs
-     `(("jsoncpp" ,jsoncpp-for-tensorflow)
-       ,@(alist-delete "jsoncpp" (package-inputs vtk))))))
+     (modify-inputs (package-inputs vtk)
+       (replace "jsoncpp" jsoncpp-for-tensorflow)))))
 
 (define-public opencv
   (package
@@ -580,10 +487,8 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
              (mkdir "../opencv-contrib")
              (copy-recursively (assoc-ref inputs "opencv-extra")
                                "../opencv-extra")
-             (invoke "tar" "xvf"
-                     (assoc-ref inputs "opencv-contrib")
-                     "--strip-components=1"
-                     "-C" "../opencv-contrib")))
+             (copy-recursively (assoc-ref inputs "opencv-contrib")
+                               "../opencv-contrib")))
 
          (add-after 'set-paths 'add-ilmbase-include-path
            (lambda* (#:key inputs #:allow-other-keys)
@@ -591,10 +496,11 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
            ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
            ;; the CPATH to satisfy the dependency on "ImathVec.h".
            (setenv "CPATH"
-                   (string-append (assoc-ref inputs "ilmbase")
-                                  "/include/OpenEXR"
-                                  ":" (or (getenv "CPATH") "")))
-           #t))
+                   (string-append
+                    (string-drop-right
+                     (search-input-file inputs "include/OpenEXR/ImathVec.h")
+                     11)
+                    ":" (or (getenv "CPATH") "")))))
        (add-before 'check 'start-xserver
          (lambda* (#:key inputs #:allow-other-keys)
            (let ((xorg-server (assoc-ref inputs "xorg-server"))
@@ -683,30 +589,29 @@ vision algorithms.  It can be used to do things like:
         (base32 "0vjsh3i0861f6h9as3bch956cidz824zz499pvhjs3lfjn6hhs14"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection pkg-config))
     (inputs
-     `(("expat" ,expat)
-       ("fftw" ,fftw)
-       ("giflib" ,giflib)
-       ("glib" ,glib)
-       ("hdf5" ,hdf5)
-       ("imagemagick" ,imagemagick)
-       ("lcms" ,lcms)
-       ("libexif" ,libexif)
-       ("libgsf" ,libgsf)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("librsvg" ,librsvg)
-       ("libtiff" ,libtiff)
-       ("libxml2" ,libxml2)
-       ("libwebp" ,libwebp)
-       ("matio" ,matio)
-       ("niftilib" ,niftilib)
-       ("openexr" ,openexr-2)
-       ("orc" ,orc)
-       ("pango" ,pango)
-       ("poppler" ,poppler)))
+     (list expat
+           fftw
+           giflib
+           glib
+           hdf5
+           imagemagick
+           lcms
+           libexif
+           libgsf
+           libjpeg-turbo
+           libpng
+           librsvg
+           libtiff
+           libxml2
+           libwebp
+           matio
+           niftilib
+           openexr-2
+           orc
+           pango
+           poppler))
     (home-page "https://libvips.github.io/libvips/")
     (synopsis "Multithreaded image processing system with low memory needs")
     (description
@@ -745,18 +650,18 @@ due to its architecture which automatically parallelises the image workflows.")
                       "-Wl,-rpath="
                       (assoc-ref outputs "out") "/lib")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("fftw" ,fftw)
-       ("graphicsmagick" ,graphicsmagick)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ;;("opencv" ,opencv) ;OpenCV is currently broken in the CI
-       ("openexr" ,openexr-2)
-       ("zlib" ,zlib)))
+     (list curl
+           fftw
+           graphicsmagick
+           libjpeg-turbo
+           libpng
+           libtiff
+           libx11
+           ;;("opencv" ,opencv) ;OpenCV is currently broken in the CI
+           openexr-2
+           zlib))
     (home-page "https://gmic.eu/")
     (synopsis "Full-featured framework for digital image processing")
     (description "G'MIC is a full-featured framework for digital image
@@ -782,12 +687,10 @@ including 2D color images.")
             (add-after 'unpack 'qt-chdir
               (lambda _ (chdir "gmic-qt") #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("gmic" ,gmic)
-       ("qtbase" ,qtbase-5)
-       ,@(package-inputs gmic)))
+     (modify-inputs (package-inputs gmic)
+       (prepend gmic qtbase-5)))
     (synopsis "Qt frontend for the G'MIC image processing framework")
     (license license:gpl3+)))
 
@@ -809,11 +712,8 @@ including 2D color images.")
     (name "gmic-qt-gimp")
     (inputs
      ;; GIMP and its dependencies.
-     `(("gimp" ,gimp)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("cairo" ,cairo)
-       ("gegl" ,gegl)
-       ,@(package-inputs gmic-qt)))
+     (modify-inputs (package-inputs gmic-qt)
+       (prepend gimp gdk-pixbuf cairo gegl)))
     (arguments
      (substitute-keyword-arguments (package-arguments gmic-qt)
        ((#:configure-flags flags)
@@ -865,9 +765,7 @@ including 2D color images.")
        ("poppler" ,poppler)
        ("gsl" ,gsl)))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list flex bison pkg-config))
     (home-page "https://github.com/libvips/nip2")
     (synopsis "Spreadsheet-like GUI for libvips")
     (description "This package provide a graphical user interface (GUI) for
@@ -907,11 +805,7 @@ recalculates.")
            #t))))
     (build-system cmake-build-system)
     (inputs
-     `(("libgeotiff" ,libgeotiff)
-       ("libtiff" ,libtiff)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libgeotiff libtiff libjpeg-turbo libpng zlib))
     (home-page "https://github.com/vxl/vxl/")
     (synopsis "Collection of C++ libraries for computer vision")
     (description "VXL (the Vision-something-Libraries) is a collection of C++
@@ -997,8 +891,7 @@ libraries designed for computer vision research and implementation.")
        ("vxl" ,vxl-1)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/InsightSoftwareConsortium/ITK/")
     (synopsis "Scientific image processing, segmentation and registration")
     (description "The Insight Toolkit (ITK) is a toolkit for N-dimensional
@@ -1254,7 +1147,7 @@ substituted by matching images.")
            "0kixwjb2x457dq7927hkh34c803p7yh1pmn6n61rk9shqrcg492h"))))
       (build-system qt-build-system)
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (inputs
        `(("boost" ,boost)
          ("libjpeg" ,libjpeg-turbo)
@@ -1297,9 +1190,7 @@ and Scan Tailor Enhanced versions as well as including many more bug fixes.")
         (base32 "14m92dskzw7bwsr64ha4p0mj3ndv13gwcbfic3qxrs3zq5353s7l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libtiff" ,libtiff)
-       ("zlib" ,zlib)
-       ("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libtiff zlib libjpeg-turbo))
     (home-page "https://www.astromatic.net/software/stiff")
     (synopsis "Convert scientific FITS images to TIFF format")
     (description
@@ -1333,11 +1224,8 @@ purposes.")
                (invoke "pytest" "-v" "tests"))
              #t)))))
     (propagated-inputs
-      `(("python-matplotlib" ,python-matplotlib)
-        ("python-numpy" ,python-numpy)
-        ("python-pillow" ,python-pillow)
-        ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+      (list python-matplotlib python-numpy python-pillow python-pyyaml))
+    (native-inputs (list python-pytest))
     (home-page "http://github.com/wkentaro/imgviz")
     (synopsis "Image Visualization Tools")
     (description "Python library for object detection, semantic and instance
@@ -1362,6 +1250,12 @@ segmentation.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             ;; Don't require an outdated version of matplotlib.
+             (substitute* "setup.py"
+               (("matplotlib<3\\.3")
+                "matplotlib"))))
          (add-before 'check 'start-xserver
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xorg-server (assoc-ref inputs "xorg-server")))
@@ -1383,17 +1277,15 @@ segmentation.")
                (setenv "MPLBACKEND" "agg")
                (invoke "pytest" "-v" "tests" "-m" "not gpu")))))))
     (propagated-inputs
-      `(("python-imgviz" ,python-imgviz)
-        ("python-matplotlib" ,python-matplotlib)
-        ("python-numpy" ,python-numpy)
-        ("python-pillow" ,python-pillow)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-qtpy" ,python-qtpy)
-        ("python-termcolor" ,python-termcolor)))
+      (list python-imgviz
+            python-matplotlib
+            python-numpy
+            python-pillow
+            python-pyyaml
+            python-qtpy
+            python-termcolor))
     (native-inputs
-      `(("python-pytest" ,python-pytest)
-        ("python-pytest-qt" ,python-pytest-qt)
-        ("xorg-server" ,xorg-server-for-tests)))
+      (list python-pytest python-pytest-qt xorg-server-for-tests))
     (home-page "https://github.com/wkentaro/labelme")
     (synopsis
       "Image Polygonal Annotation")
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 291dcd383d..715b6fdc62 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -20,6 +20,7 @@
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 dissent <disseminatedissent@protonmail.com>
 ;;;
@@ -228,24 +229,24 @@
                 "report at: https://issues.guix.gnu.org"))))
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("bash" ,bash)
-       ("catimg" ,catimg)
-       ("chafa" ,chafa)
-       ("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("dmenu" ,dmenu)
-       ("fzf" ,fzf)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("jp2a" ,jp2a)
-       ("jq" ,jq)
-       ("libnotify" ,libnotify)
-       ("mpv" ,mpv)
-       ("ncurses" ,ncurses)
-       ("python-ueberzug" ,python-ueberzug)
-       ("sed" ,sed)
-       ("util-linux" ,util-linux)
-       ("youtube-dl" ,youtube-dl)))
+     (list bash
+           catimg
+           chafa
+           coreutils
+           curl
+           dmenu
+           fzf
+           gawk
+           grep
+           jp2a
+           jq
+           libnotify
+           mpv
+           ncurses
+           python-ueberzug
+           sed
+           util-linux
+           youtube-dl))
     (synopsis "Watch PeerTube or YouTube videos from the terminal")
     (description "@code{ytfzf} is a POSIX script that helps you find PeerTube or
 YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
@@ -273,15 +274,14 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
              "exif=1"
              "inotify=1")))
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-test-command" ,perl-test-command)))
-    (inputs `(("imlib2" ,imlib2)
-              ("curl" ,curl)
-              ("libexif" ,libexif)
-              ("libpng" ,libpng)
-              ("libxt" ,libxt)
-              ("libx11" ,libx11)
-              ("libxinerama" ,libxinerama)))
+     (list perl perl-test-command))
+    (inputs (list imlib2
+                  curl
+                  libexif
+                  libpng
+                  libxt
+                  libx11
+                  libxinerama))
     (native-search-paths
      ;; Feh allows overriding the libcurl builtin CA path (unset in Guix)
      ;; with the same variable as the `curl` command line HTTP tool.
@@ -304,7 +304,7 @@ actions.")
 (define-public geeqie
   (package
     (name "geeqie")
-    (version "1.5")
+    (version "1.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -312,26 +312,43 @@ actions.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0nf45sh3pwsv98sppcrqj81b6mdi31n1sbc7gn88m8mhpfp1qq6k"))
-              (file-name (git-file-name name version))))
+                "1i9yd8lddp6b9s9vjjjzbpqj4bvwidxc6kiba6vdrk7dda5akyky"))
+              (file-name (git-file-name name version))
+              (patches (search-patches "geeqie-clutter.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `( ;; Enable support for a "map" pane using GPS data.
-       #:configure-flags '("--enable-map"
-                           "--enable-gtk3")))
+     ;; Enable support for a "map" pane using GPS data.
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon"
+                           "--enable-map"
+                           "--enable-gtk3")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'correctly-locate-aux-scripts
+                    ;; The git checkout has symlinks under the auxdir
+                    ;; directory pointing to /usr/share/automake-1.16/depcomp
+                    ;; and /usr/share/automake-1.16/install-sh, which causes
+                    ;; the configure phase to fail (see:
+                    ;; https://github.com/BestImageViewer/geeqie/issues/936).
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((automake (assoc-ref inputs "automake")))
+                        (delete-file "auxdir/depcomp")
+                        (symlink (car (find-files automake "depcomp"))
+                                 "auxdir/depcomp")
+                        (delete-file "auxdir/install-sh")
+                        (symlink (car (find-files automake "install-sh"))
+                                 "auxdir/install-sh")))))))
     (inputs
-     `(("clutter" ,clutter)
-       ("libchamplain" ,libchamplain)
-       ("lcms" ,lcms)
-       ("exiv2" ,exiv2)
-       ("libpng" ,libpng)
-       ("gtk+" ,gtk+)))
+     (list clutter
+           libchamplain
+           lcms
+           exiv2
+           libpng
+           gtk+))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")                       ; glib-gettextize
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           `(,glib "bin") ; glib-gettextize
+           intltool
+           pkg-config))
     (home-page "http://www.geeqie.org/")
     (synopsis "Lightweight GTK+ based image viewer")
     (description
@@ -356,10 +373,8 @@ collection.  Geeqie was initially based on GQview.")
                (base32
                 "0hi9v0rdx47nys0wvm9xasdrafa34r5kq6crb074a0ipwmc60iiq"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)
-              ("libjpeg" ,libjpeg-turbo)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 libjpeg-turbo))
+    (native-inputs (list intltool pkg-config))
     (synopsis "Simple and fast image viewer for X")
     (description "gpicview is a lightweight GTK+ 2.x based image viewer.
 It is the default image viewer on LXDE desktop environment.")
@@ -404,12 +419,12 @@ It is the default image viewer on LXDE desktop environment.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "-C" "icon" "install" make-flags))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("giflib" ,giflib)
-       ("imlib2" ,imlib2)
-       ("libexif" ,libexif)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)))
+     (list freetype
+           giflib
+           imlib2
+           libexif
+           libx11
+           libxft))
     (home-page "https://github.com/muennich/sxiv")
     (synopsis "Simple X Image Viewer")
     (description
@@ -461,12 +476,12 @@ it and customize it for your needs.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "-C" "icon" "install" make-flags))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("giflib" ,giflib)
-       ("imlib2" ,imlib2)
-       ("libexif" ,libexif)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)))
+     (list freetype
+           giflib
+           imlib2
+           libexif
+           libx11
+           libxft))
     (home-page "https://github.com/nsxiv/nsxiv")
     (synopsis "Neo Simple X Image Viewer")
     (description
@@ -565,7 +580,7 @@ your images.  Among its features are:
                                        "/bin/catimg.sh"))
              #t)))))
     (inputs
-     `(("imagemagick" ,imagemagick))) ; for the bash script version
+     (list imagemagick)) ; for the bash script version
     (home-page "https://github.com/posva/catimg")
     (synopsis "Render images in the terminal")
     (description
@@ -587,8 +602,7 @@ It supports JPEG, PNG and GIF formats.")
                 "188q0l63nfasqfvwbq4mwx2vh7wsfi2bq9n5nksddspl1qz01lnp"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
      `(("qtbase" ,qtbase-5)
        ("qtdeclarative" ,qtdeclarative)
@@ -617,10 +631,9 @@ It supports JPEG, PNG and GIF formats.")
              ;; not use 'OpenEXR.pc'.  Thus, we need to add
              ;; "$ilmbase/include/OpenEXR/" to the CPATH.
              (setenv "CPATH"
-                     (string-append (assoc-ref inputs "ilmbase")
-                                    "/include/OpenEXR"
-                                    ":" (or (getenv "CPATH") "")))
-             #t)))))
+                     (string-append
+                      (search-input-directory inputs "include/OpenEXR")
+                      ":" (or (getenv "CPATH") ""))))))))
     (home-page "http://qtpfsgui.sourceforge.net")
     (synopsis "High dynamic range (HDR) imaging application")
     (description
@@ -658,10 +671,7 @@ imaging.  It supports several HDR and LDR image formats, and it can:
            "05zl0dkjwbdcm2zlk4nz9w33amlqj8pbf32a8ymshc2356fqhhi5"))))
       (build-system python-build-system)
       (inputs
-       `(("p7zip" ,p7zip)
-         ("python-pillow" ,python-pillow)
-         ("python-pygobject" ,python-pygobject)
-         ("python-pycairo" ,python-pycairo)))
+       (list p7zip python-pillow python-pygobject python-pycairo))
       (arguments
        `(#:tests? #f                    ; FIXME: How do we run tests?
          #:phases
@@ -759,9 +769,7 @@ For PDF support, install the @emph{mupdf} package.")
                (("updateText\\(\\);") ""))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtimageformats" ,qtimageformats)))
+     (list qtbase-5 qtsvg qtimageformats))
     (home-page "https://interversehq.com/qview/")
     (synopsis "Convenient and minimal image viewer")
     (description "qView is a Qt image viewer designed with visually
@@ -783,12 +791,9 @@ preloading.")
                 "18rb82bfqj1sj2g4irazx4lwq9q4b4k7my1r0q714vf9yhs41ls6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("glib" ,glib)
-       ("imagemagick" ,imagemagick)))
+     (list freetype libjpeg-turbo glib imagemagick))
     (synopsis "Convert images to ANSI/Unicode characters")
     (description
      "Chafa is a command-line utility that converts all kinds of images,
@@ -825,17 +830,17 @@ displayed in a terminal.")
                   (string-append bin "/imv-")))
                #t))))))
     (inputs
-     `(("freeimage" ,freeimage)
-       ("glu" ,glu)
-       ("libheif" ,libheif)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libinih" ,libinih)
-       ("libnsgif" ,libnsgif)
-       ("librsvg" ,librsvg-next)
-       ("libtiff" ,libtiff)
-       ("libxkbcommon" ,libxkbcommon)
-       ("pango" ,pango)
-       ("wayland" ,wayland)))
+     (list freeimage
+           glu
+           libheif
+           libjpeg-turbo
+           libinih
+           libnsgif
+           librsvg
+           libtiff
+           libxkbcommon
+           pango
+           wayland))
     (native-inputs
      `(("asciidoc" ,asciidoc)
        ("cmocka" ,cmocka)
@@ -884,9 +889,9 @@ with tiling window managers.  Features include:
               "$(PREFIX)/share/man"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; That is required for testing.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list pkg-config
+           ;; That is required for testing.
+           xorg-server-for-tests))
     (inputs
      `(("imlib2" ,imlib2)
        ("glib" ,glib)
@@ -942,15 +947,15 @@ to set X desktop background.")
         (base32 "18nvrqmlifh4m8nfs0d19sb9d1l3a95xc89qxqdr881jcxdsgflw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("gtk+" ,gtk+)
-       ("imagemagick" ,imagemagick)
-       ("libarchive" ,libarchive)
-       ("libspectre" ,libspectre)
-       ("libwebp" ,libwebp)
-       ("poppler" ,poppler)))
+     (list ffmpeg
+           gtk+
+           imagemagick
+           libarchive
+           libspectre
+           libwebp
+           poppler))
     (arguments
      `(#:tests? #f                      ;no tests
        #:phases
@@ -1060,10 +1065,9 @@ synchronization of multiple instances.")
                (install-file "src/xzgv" bin))))) ; just install the executable
        #:tests? #f))                             ; no rule for target 'test'
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libexif" ,libexif)))
+     (list gtk+-2 libexif))
     (home-page "https://sourceforge.net/projects/xzgv/")
     (synopsis "Picture viewer for X with a thumbnail-based selector")
     (description
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index ff3963e6f5..b6378a3890 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
@@ -26,6 +26,7 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
@@ -115,8 +116,8 @@
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/iqa/files/"
-                       "1.1.2%20Release/iqa_1.1.2_src.tar.gz/download"))
+        (string-append "mirror://sourceforge/iqa/"
+                       version " Release" "/iqa_" version "_src.tar.gz"))
        (sha256
         (base32 "00mgwy031ammab6bwmd1whhvqv3fxy1cs1igabq0n3ag12zhjs77"))))
     (build-system gnu-build-system)
@@ -161,7 +162,7 @@ code is Valgrind-clean and unit tested.")
     `(#:configure-flags '("--disable-static")))
 
    ;; libpng.la says "-lz", so propagate it.
-   (propagated-inputs `(("zlib" ,zlib)))
+   (propagated-inputs (list zlib))
 
    (synopsis "Library for handling PNG files")
    (description
@@ -225,10 +226,10 @@ library.  It supports almost all PNG features and is extensible.")
                    (base32
                     "1dh0250mw9b2hx7cdmnb2blk7ddl49n6vx8zz7jdmiwxy38v4fw2"))))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     ;; libpng.la says "-lz", so propagate it.
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "APNG patch for libpng")
     (description
      "APNG (Animated Portable Network Graphics) is an unofficial
@@ -283,8 +284,7 @@ APNG patch provides APNG support to libpng.")
                (string-append (assoc-ref outputs "out") "/")))
             #t)))))
    (inputs
-    `(("libpng" ,libpng)
-      ("zlib" , zlib)))
+    (list libpng zlib))
    (home-page "https://pmt.sourceforge.io/pngcrush")
    (synopsis "Utility to compress PNG files")
    (description "Pngcrush optimizes @acronym{PNG, Portable Network Graphics}
@@ -339,7 +339,7 @@ images.  It can further losslessly compress them by as much as 40%.")
                  (install-file "pnglite.h" include)
                  (install-file "README.md" doc)
                  #t))))))
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (home-page "https://github.com/dankar/pnglite")
       (synopsis "Pretty small png library")
       (description "A pretty small png library.
@@ -389,12 +389,9 @@ and other PNG optimizers.")
        #:configure-flags
        '("--with-openmp" "--with-lcms2")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" , zlib)
-       ("lcms" ,lcms)
-       ("libimagequant" ,libimagequant)))
+     (list libpng zlib lcms libimagequant))
     (home-page "https://pngquant.org/")
     (synopsis "Utility and library for lossy compressing PNG images")
     (description "pngquant is a PNG compressor that significantly reduces file
@@ -565,8 +562,7 @@ maximum quality factor.")
                 "1hjm8lwap7bjyyxsyi94fh5817xzqhk4kb5y0b7mb6675xw10prk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("jasper" ,jasper)))
+     (list libpng jasper))
     (arguments
      `(#:tests? #t)) ; No tests.
     (home-page "http://icns.sourceforge.net/")
@@ -585,7 +581,7 @@ extracting icontainer icon files.")
 (define-public libtiff
   (package
    (name "libtiff")
-   (version "4.1.0")
+   (version "4.3.0")
    (source
      (origin
        (method url-fetch)
@@ -593,11 +589,10 @@ extracting icontainer icon files.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0d46bdvxdiv59lxnb0xz9ywm8arsr6xsapi5s6y6vnys2wjz6aax"))))
-   (replacement libtiff/fixed)
+         "1j3snghqjbhwmnm5vz3dr1zm68dj15mgbx1wqld7vkl7n2nfaihf"))))
    (build-system gnu-build-system)
    (outputs '("out"
-              "doc"))                           ;1.3 MiB of HTML documentation
+              "doc"))                           ;1.8 MiB of HTML documentation
    (arguments
     ;; Instead of using --docdir, this package has its own --with-docdir.
     `(#:configure-flags
@@ -618,20 +613,6 @@ collection of tools for doing simple manipulations of TIFF images.")
                                   "See COPYRIGHT in the distribution."))
    (home-page "http://www.simplesystems.org/libtiff/")))
 
-(define-public libtiff/fixed
-  (package
-    (inherit libtiff)
-    (name "libtiff")
-    (version "4.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://download.osgeo.org/libtiff/tiff-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1jrkjv0xya9radddn8idxvs2gqzp3l2b1s8knlizmn7ad3jq817b"))))))
-
 (define-public leptonica
   (package
     (name "leptonica")
@@ -647,11 +628,11 @@ collection of tools for doing simple manipulations of TIFF images.")
         (base32 "12ddln72z5l3icz0i9rpsfkg5xik8fcwcn8lb0cp3jigjxi8gvkg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnuplot" ,gnuplot)             ;needed for test suite
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list gnuplot ;needed for test suite
+           autoconf
+           automake
+           libtool
+           pkg-config))
     (inputs
      `(("giflib" ,giflib)
        ("libjpeg" ,libjpeg-turbo)
@@ -694,15 +675,15 @@ arithmetic ops.")
 (define-public jbig2dec
   (package
     (name "jbig2dec")
-    (version "0.18")
+    (version "0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ArtifexSoftware"
                                   "/ghostpdl-downloads/releases/download"
-                                  "/gs951/" name "-" version ".tar.gz"))
+                                  "/gs9533/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0pigfw2v0ppvr0lbysm69gx0zsa5q2q92yrb8af2j3im6x97f6cy"))))
+                "0dwa24kjqyg9hmm40fh048sdxfpnasz43l2rm8wlkw1qbdlpd517"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-static")
                  #:phases (modify-phases %standard-phases
@@ -720,7 +701,7 @@ arithmetic ops.")
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("python" ,python-wrapper)))     ;for tests
+       ("python" ,python-minimal-wrapper)))     ;for tests
     (synopsis "Decoder of the JBIG2 image compression format")
     (description
       "JBIG2 is designed for lossy or lossless encoding of @code{bilevel} (1-bit
@@ -813,17 +794,17 @@ images of initially unknown height.")
 (define-public openjpeg-data
   (package
     (name "openjpeg-data")
-    (version "2020.05.19")
+    (version "2020.11.30")
     (source
      (origin
        (method git-fetch)
        (uri
         (git-reference
          (url "https://github.com/uclouvain/openjpeg-data")
-         (commit "c5c4a8c")))
+         (commit "cd724fb1f93e6af41ebc68c4904f4bf2a4cd1e60")))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1jp84gbhw8q5b8mhc322ql9410hjf32w9hg10x4isfa9j59mnncb"))))
+        (base32 "1q2swh4g9r9haqs075fyk42aclqcs9q51lqqzfb57lisszminpwm"))))
     (build-system copy-build-system)
     (synopsis "Test files for OpenJPEG")
     (description "OpenJPEG-Data contains all files required to run the openjpeg
@@ -835,28 +816,49 @@ test suite, including conformance tests (following Rec. ITU-T T.803 | ISO/IEC
 (define-public openjpeg
   (package
     (name "openjpeg")
-    (version "2.3.1")
+    (version "2.4.0")
     (source
      (origin
        (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/uclouvain/openjpeg")
-         (commit
-          (string-append "v" version))))
-       (file-name
-        (git-file-name "openjpeg" version))
+       (uri (git-reference
+             (url "https://github.com/uclouvain/openjpeg")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1dn98d2dfa1lqyxxmab6rrcv52dyhjr4g7i4xf2w54fqsx14ynrb"))))
+        (base32 "143dvy5g6v6129lzvl0r8mrgva2fppkn0zl099qmi9yi9l9h7yyf"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f           ;TODO: requires a 1.1 GiB data repository
-       #:configure-flags '("-DBUILD_STATIC_LIBS=OFF")))
+     `(#:configure-flags
+       (list
+        "-DBUILD_STATIC_LIBS=OFF"
+        "-DBUILD_UNIT_TESTS=ON"
+        "-DBUILD_TESTING=ON"
+        (string-append "-DOPJ_DATA_ROOT="
+                       (assoc-ref %build-inputs "openjpeg-data")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; To be re-enabled after upstream fixes the bug,
+             ;; https://github.com/uclouvain/openjpeg/issues/1264
+             (substitute* "tests/CMakeLists.txt"
+               (("add_subdirectory\\(nonregression\\)")
+                ""))
+             ;; These tests fail on all architectures except x86_64
+             (substitute* "tests/conformance/CMakeLists.txt"
+               ;; 4, 5, 6 fail
+               (("numFileC1P0 RANGE 1 16") "numFileC1P0 RANGE 7 16")
+               ;; 2, 3, 4, 5 fail
+               (("numFileC1P1 RANGE 1 7") "numFileC1P1 1 6 7")
+               ;; 2, 3 fail
+               (("numFileJP2 RANGE 1 9") "numFileJP2 RANGE 4 9")
+               ;; All fail
+               (("subsampling.*") "")
+               (("zoo.*") "")))))))
+    (native-inputs
+     (list openjpeg-data)) ; Files for test-suite
     (inputs
-     `(("lcms" ,lcms)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list lcms libpng libtiff zlib))
     (synopsis "OPENJPEG Library and Applications")
     (description "OpenJPEG is an implementation of JPEG 2000 codec written in C
 language.  It has been developed in order to promote the use of JPEG 2000, a
@@ -971,7 +973,7 @@ compose, and analyze GIF images.")
                    (("^EXECINPUT=.*")
                     (format #f "EXECINPUT=~a~%" execinput)))
                  (invoke "sh" "testit.sh"))))))))
-    (native-inputs `(("drm-tools" ,drm-tools))) ;for tests
+    (native-inputs (list drm-tools)) ;for tests
     (home-page "http://libuemf.sourceforge.net/")
     (synopsis "Library for working with WFM, EMF and EMF+ images")
     (description "The libUEMF library is a portable C99 implementation for
@@ -992,7 +994,7 @@ Metafile}, and @acronym{EMF+, Enhanced Metafile Plus} files.")
                (base32
                 "0cnksimmmjngdrys302ik1385sg1sj4i0gxivzldhgwd46n7x2kh"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))          ;package ships some perl tools
+    (inputs (list perl))          ;package ships some perl tools
     (home-page "http://giflib.sourceforge.net/")
     (synopsis "GIF decompression library")
     (description
@@ -1064,8 +1066,7 @@ more modular, simple, and flexible.")
                 "1b4bmbmj52glq0s898lppkpzxlprq9aav49r06j2wx4dv3212rhp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("imlib2" ,imlib2)))
+     (list libx11 imlib2))
     (home-page
      ;; This vanished page is universally accepted as giblib's home despite not
      ;; mentioning the package once.
@@ -1149,8 +1150,7 @@ supplies a generic doubly-linked list and some string functions.")
                            "-I" (assoc-ref %build-inputs "libjxr") "/include/jxrlib"))
       #:tests? #f)) ; no check target
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("unzip" ,unzip)))
+    (list pkg-config unzip))
    (inputs
     `(("libjpeg" ,libjpeg-turbo)
       ("libjxr" ,libjxr)
@@ -1169,79 +1169,87 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
    (home-page "http://freeimage.sourceforge.net")))
 
 (define-public vigra
-  (package
-   (name "vigra")
-   (version "1.11.1")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "https://github.com/ukoethe/vigra/releases/download/"
-                          "Version-" (string-join (string-split version #\.) "-")
-                          "/vigra-" version "-src.tar.gz"))
-      (patches (search-patches "vigra-python-compat.patch"))
-      (sha256 (base32
-                "1bqs8vx5i1bzamvv563i24gx2xxdidqyxh9iaj46mbznhc84wmm5"))))
-   (build-system cmake-build-system)
-   (inputs
-    `(("boost" ,boost)
-      ("fftw" ,fftw)
-      ("fftwf" ,fftwf)
-      ("hdf5" ,hdf5)
-      ("ilmbase" ,ilmbase) ; propagated by openexr, but needed explicitly
-                           ; to create a configure-flag
-      ("libjpeg" ,libjpeg-turbo)
-      ("libpng" ,libpng)
-      ("libtiff" ,libtiff)
-      ("openexr" ,openexr-2)
-      ("python" ,python-wrapper)
-      ("python-numpy" ,python-numpy)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("doxygen" ,doxygen)
-      ("python-nose" ,python-nose)
-      ("sphinx" ,python-sphinx)))
-   (arguments
-    `(#:test-target "check"
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'disable-broken-tests
-          (lambda _
-            ;; See https://github.com/ukoethe/vigra/issues/432
-            (substitute* "test/fourier/CMakeLists.txt"
-              (("VIGRA_ADD_TEST.*") ""))
-            ;; This test fails with Numpy 1.15:
-            ;; <https://github.com/ukoethe/vigra/issues/436>.
-            (substitute* "vigranumpy/test/CMakeLists.txt"
-              (("test1\\.py") ""))
-            #t)))
-      #:configure-flags
-        (list "-Wno-dev" ; suppress developer mode with lots of warnings
-              (string-append "-DVIGRANUMPY_INSTALL_DIR="
-                             (assoc-ref %outputs "out")
-                             "/lib/python"
-                             ,(version-major+minor (package-version python))
-                             "/site-packages")
-              ;; OpenEXR is not enabled by default.
-              "-DWITH_OPENEXR=1"
-              ;; Fix rounding error on 32-bit machines
-              "-DCMAKE_C_FLAGS=-ffloat-store"
-              ;; The header files of ilmbase are not found when included
-              ;; by the header files of openexr, and an explicit flag
-              ;; needs to be set.
-              (string-append "-DCMAKE_CXX_FLAGS=-I"
-                             (assoc-ref %build-inputs "ilmbase")
-                             "/include/OpenEXR"
-                             " -ffloat-store"))))
-   (synopsis "Computer vision library")
-   (description
-    "VIGRA stands for Vision with Generic Algorithms.  It is an image
-processing and analysis library that puts its main emphasis on customizable
-algorithms and data structures.  It is particularly strong for
-multi-dimensional image processing.")
-   (license license:expat)
-   (home-page "https://ukoethe.github.io/vigra/")
-   (properties '((max-silent-time . 7200))))) ;2 hours, to avoid timing out
-
+    (let ((commit "9b514fa00a136f5fd81bb57ee9f6293c333ffc1f")
+          (revision "0"))
+    (package
+     (name "vigra")
+     (version (git-version "1.11.1" revision commit))
+     (source
+      (origin
+        ;; The last release is 1.11.1, from 2017. It's becoming more and more
+        ;; difficult to build this old release, and the upstream developers
+        ;; suggest on their home page to build from the Git repo, saying "It is
+        ;; generally safe to use the 'master' branch of the development snapshot,
+        ;; as we avoid uploading untested or incompatible changes to this branch."
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/ukoethe/vigra")
+               (commit commit)))
+        (file-name (git-file-name name version))
+        (sha256 (base32
+                  "1vzlypviala109imwxkp46lqhhxszf79ypfb8wxg6z7g02j7mm73"))))
+     (build-system cmake-build-system)
+     (inputs
+      `(("boost" ,boost)
+        ("fftw" ,fftw)
+        ("fftwf" ,fftwf)
+        ("hdf5" ,hdf5)
+        ("ilmbase" ,ilmbase) ; propagated by openexr, but needed explicitly
+                             ; to create a configure-flag
+        ("libjpeg" ,libjpeg-turbo)
+        ("libpng" ,libpng)
+        ("libtiff" ,libtiff)
+        ("openexr" ,openexr-2)
+        ("python" ,python-wrapper)
+        ;("python-numpy" ,python-numpy)
+        ("zlib" ,zlib)))
+     (native-inputs
+      `(("doxygen" ,doxygen)
+        ("python-nose" ,python-nose)
+        ("sphinx" ,python-sphinx)))
+     (arguments
+      `(#:test-target "check"
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'disable-broken-tests
+            (lambda _
+              ;; See https://github.com/ukoethe/vigra/issues/432
+              (substitute* "test/fourier/CMakeLists.txt"
+                (("VIGRA_ADD_TEST.*") ""))
+              ;; This test fails with Numpy 1.15:
+              ;; <https://github.com/ukoethe/vigra/issues/436>.
+              (substitute* "vigranumpy/test/CMakeLists.txt"
+                (("test1\\.py") ""))
+              #t)))
+        #:configure-flags
+          (list "-Wno-dev" ; suppress developer mode with lots of warnings
+                (string-append "-DVIGRANUMPY_INSTALL_DIR="
+                               (assoc-ref %outputs "out")
+                               "/lib/python"
+                               ,(version-major+minor (package-version python))
+                               "/site-packages")
+                ;; Vigranumpy isn't compatible with numpy >= 1.20.
+                "-DWITH_VIGRANUMPY=0"
+                ;; OpenEXR is not enabled by default.
+                "-DWITH_OPENEXR=1"
+                ;; Fix rounding error on 32-bit machines
+                "-DCMAKE_C_FLAGS=-ffloat-store"
+                ;; The header files of ilmbase are not found when included
+                ;; by the header files of openexr, and an explicit flag
+                ;; needs to be set.
+                (string-append "-DCMAKE_CXX_FLAGS=-I"
+                               (assoc-ref %build-inputs "ilmbase")
+                               "/include/OpenEXR"
+                               " -ffloat-store"))))
+     (synopsis "Computer vision library")
+     (description
+      "VIGRA stands for Vision with Generic Algorithms.  It is an image
+  processing and analysis library that puts its main emphasis on customizable
+  algorithms and data structures.  It is particularly strong for
+  multi-dimensional image processing.")
+     (license license:expat)
+     (home-page "https://ukoethe.github.io/vigra/")
+     (properties '((max-silent-time . 7200)))))) ;2 hours, to avoid timing out
 
 (define-public vigra-c
   (let* ((commit "66ff4fa5a7d4a77415caa676a45c2c6ea16562e7")
@@ -1263,12 +1271,9 @@ multi-dimensional image processing.")
       (arguments
        `(#:tests? #f))                  ; No test target.
       (native-inputs
-       `(("doxygen" ,doxygen)))
+       (list doxygen))
       (inputs
-       `(("fftw" ,fftw)
-         ("fftwf" ,fftwf)
-         ("hdf5" ,hdf5)
-         ("vigra" ,vigra)))
+       (list fftw fftwf hdf5 vigra))
       (synopsis "C interface to the VIGRA computer vision library")
       (description
        "This package provides a C interface to the VIGRA C++ computer vision
@@ -1279,7 +1284,7 @@ language bindings to VIGRA.")
 (define-public libwebp
   (package
     (name "libwebp")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        ;; No tarballs are provided for >0.6.1.
@@ -1290,7 +1295,7 @@ language bindings to VIGRA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0r2yy9if0ndvpzadk39bigvsygyqnlv0xjb9w2aj6rs534mncazz"))))
+         "1rgblphsd56033w7lpkrzl7m5w0fi7wavxri1ayzlg8fhpmmqp4k"))))
     (build-system gnu-build-system)
     (inputs
      `(("freeglut" ,freeglut)
@@ -1299,9 +1304,7 @@ language bindings to VIGRA.")
        ("libpng" ,libpng)
        ("libtiff" ,libtiff)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      '(#:configure-flags '("--enable-libwebpmux"
                            "--enable-libwebpdemux"
@@ -1366,11 +1369,9 @@ channels.")
                     (lib (string-append out "/lib")))
                (for-each delete-file (find-files lib "\\.a$"))))))))
     (propagated-inputs
-     `(("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list expat zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("python" ,python)))
+     (list googletest python))
     (home-page "https://www.exiv2.org/")
     (synopsis "Library and command-line utility to manage image metadata")
     (description
@@ -1405,7 +1406,7 @@ and XMP metadata of images in various formats.")
          (add-before 'configure 'change-directory
            (lambda _ (chdir "DevIL") #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("lcms" ,lcms)
        ("libjpeg" ,libjpeg-turbo)
@@ -1436,7 +1437,7 @@ convert, manipulate, filter and display a wide variety of image formats.")
                 "0p3fj89gkhd2ys5ci75cwb6p7rvb2pf52jd8c9d4g76qp846njnx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)))
+     (list libjpeg-turbo))
     (synopsis "JPEG-2000 library")
     (description "The JasPer Project is an initiative to provide a reference
 implementation of the codec specified in the JPEG-2000 Part-1 standard (i.e.,
@@ -1447,7 +1448,7 @@ ISO/IEC 15444-1).")
 (define-public zimg
   (package
     (name "zimg")
-    (version "2.9.3")
+    (version "3.0.3")
     (source
       (origin
         (method git-fetch)
@@ -1456,12 +1457,10 @@ ISO/IEC 15444-1).")
               (commit (string-append "release-" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1dqyrq3p8bkgvj4ci50ac342hjnhyz6xxvhiwp7wpi3v3nbj7s02"))))
+         (base32 "0pwgf1mybpa3fs13p6jryzm32vfldyql9biwaypqdcimlnlmyk20"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Scaling, colorspace conversion, and dithering library")
     (description "Zimg implements the commonly required image processing basics
 of scaling, colorspace conversion, and depth conversion.  A simple API enables
@@ -1486,7 +1485,7 @@ the programmer.")
        (sha256
         (base32 "0yys55f9i9g3wjjg0j2m0p0k21zwnid8520a8lrr30khm4k5gibp"))))
     (build-system cmake-build-system)
-    (inputs `(("freeimage" ,freeimage)))
+    (inputs (list freeimage))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-tests
@@ -1565,8 +1564,7 @@ changed, making the embedding resistant against first-order statistical tests.")
             #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1606,7 +1604,7 @@ PNG, and performs PNG integrity checks and corrections.")
              (rename-file "imgp.py" "imgp")
              #t)))))
     (inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-pillow))
     (home-page "https://github.com/jarun/imgp")
     (synopsis "High-performance CLI batch image resizer & rotator")
     (description
@@ -1665,7 +1663,7 @@ is hereby granted."))))
                 "0pbv6pc97kbj7ib31qcwi7lnmm9xg5y3b11aasmkhfjvf7rgdy0n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("nasm" ,nasm)))
+     (list nasm))
     (arguments
      `(#:configure-flags '("-DCMAKE_INSTALL_LIBDIR:PATH=lib"
                            "-DENABLE_STATIC=0"
@@ -1750,7 +1748,7 @@ and decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.).")
              #t))
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Library for reading and writing files in the nifti-1 format")
     (description "Niftilib is a set of i/o libraries for reading and writing
 files in the nifti-1 data format - a binary file format for storing
@@ -1838,10 +1836,9 @@ parsing, viewing, modifying, and saving this metadata.")
          "1z77igs60lz106vsf6wsayxjafxm3llf2lm4dpvsqyyrxybfq191"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (arguments
      `(#:tests? #f))                    ;no tests
     (home-page "https://github.com/flameshot-org/flameshot")
@@ -1873,15 +1870,13 @@ Features:
         (base32 "1s2lp3bz30svqdg6467jvncim0qgl0q1b1nqxnnci6kljbp5g0xh"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config scdoc
+           `(,glib "bin"))) ; for 'glib-compile-resources'
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)))
+     (list gtk+ libnotify))
     (propagated-inputs
      ;; Needed to properly render the icons.
-     `(("font-awesome" ,font-awesome)))
+     (list font-awesome))
     (home-page "https://github.com/jtheoof/swappy")
     (synopsis "Grab and edit on the fly snapshots of a Wayland compositor")
     (description
@@ -1916,8 +1911,8 @@ stdout.")
               (("/bin/rm")
                (which "rm")))
             #t)))))
-   (native-inputs `(("perl" ,perl)))    ; only for tests
-   (inputs `(("libx11" ,libx11)))
+   (native-inputs (list perl))    ; only for tests
+   (inputs (list libx11))
    (home-page "https://www.lcdf.org/gifsicle/")
    (synopsis "Edit GIF images and animations")
    (description "Gifsicle is a command-line GIF image manipulation tool that:
@@ -1952,9 +1947,7 @@ identical visual appearance.")
           "076frk3pa16s4r1b10zgy81vdlz0385zh3ykbnkaij25jn5aqc09"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libjpeg" ,libjpeg-turbo)
-       ("ncurses" ,ncurses)))
+     (list curl libjpeg-turbo ncurses))
     (home-page "https://csl.name/jp2a/")
     (synopsis "Convert JPEG images to ASCII")
     (description
@@ -1975,12 +1968,8 @@ identical visual appearance.")
      (sha256
       (base32 "1l4gwvvc0zvg5b6f6w92xjhmwj7cg9hlgrf43lc7ygaz8dh6cmzg"))))
    (build-system meson-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)
-                    ("scdoc" ,scdoc)))
-   (inputs `(("cairo" ,cairo)
-             ("libjpeg-turbo" ,libjpeg-turbo)
-             ("wayland" ,wayland)
-             ("wayland-protocols" ,wayland-protocols)))
+   (native-inputs (list pkg-config scdoc))
+   (inputs (list cairo libjpeg-turbo wayland wayland-protocols))
    (home-page "https://github.com/emersion/grim")
    (synopsis "Create screenshots from a Wayland compositor")
    (description "grim can create screenshots from a Wayland compositor.")
@@ -2002,13 +1991,9 @@ identical visual appearance.")
       (base32 "00dx6ds1227qnxqrw58k0am78q8fa49rgp1zingrkjcbpbi7g475"))))
    (build-system meson-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("scdoc" ,scdoc)))
+    (list pkg-config scdoc))
    (inputs
-    `(("cairo" ,cairo)
-      ("libxkbcommon" ,libxkbcommon)
-      ("wayland" ,wayland)
-      ("wayland-protocols" ,wayland-protocols)))
+    (list cairo libxkbcommon wayland wayland-protocols))
    (home-page "https://github.com/emersion/slurp")
    (synopsis "Select a region in a Wayland compositor")
    (description "Slurp can select a region in a Wayland compositor and print it
@@ -2039,9 +2024,8 @@ to the standard output.  It works well together with grim.")
        (list (string-append "--with-rgbtxt="
                             (assoc-ref %build-inputs "xorg-rgb")
                             "/share/X11/rgb.txt"))))
-    (inputs `(("xorg-rgb" ,xorg-rgb)
-              ("libpng" ,libpng)))
-    (native-inputs `(("pngsuite" ,pngsuite)))
+    (inputs (list xorg-rgb libpng))
+    (native-inputs (list pngsuite))
     (home-page "http://sng.sourceforge.net")
     (synopsis "Markup language for representing PNG contents")
     (description "SNG (Scriptable Network Graphics) is a minilanguage designed
@@ -2069,9 +2053,7 @@ losslessly translates between SNG and PNG.")
         (base32 "0jy2iigarskwfhskyladbb6l92x1fb3i3vz4bvcks0za4w5hfxk5"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("cmake" ,cmake)
-       ("doctest" ,doctest)
-       ("gcc" ,gcc-8)))
+     (list cmake doctest gcc-8))
     (home-page "https://github.com/Nheko-Reborn/blurhash")
     (synopsis "C++ blurhash encoder/decoder")
     (description "Simple encoder and decoder for blurhashes.  Contains a
@@ -2146,10 +2128,9 @@ wrapper with a more convenient interface on top.")
         (base32 "1q66cksms4l62y0wizb8vfavhmf7kyfgcfkynil3n99s0hny1aqp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("perl" ,perl)))
+     (list libpng perl))
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://www.nongnu.org/icoutils/")
     (synopsis "Extract and convert bitmaps from Windows icon and cursor files")
     (description "Icoutils are a set of program for extracting and converting
@@ -2232,20 +2213,14 @@ by AOM, including with alpha.")
     (arguments
      `(#:tests? #f)) ;no test target although there is a tests folder
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf) ;optional
        ("libjpeg" ,libjpeg-turbo)
        ("libpng" ,libpng)))
      ;; Propagated to satisfy 'libheif.pc'.
      (propagated-inputs
-      `(("dav1d" ,dav1d)
-        ("libaom" ,libaom)
-        ("libde265" ,libde265)
-        ("x265" ,x265)))
+      (list dav1d libaom libde265 x265))
     (home-page "https://github.com/strukturag/libheif")
     (synopsis "HEIF and AVIF file format decoder and encoder")
     (description
@@ -2343,16 +2318,16 @@ GIF, TIFF, WEBP, BMP, PNG, XPM formats.")
        ("swig" ,swig)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("libmypaint" ,libmypaint)
-       ("mypaint-brushes" ,mypaint-brushes)
-       ("json-c" ,json-c)
-       ("lcms" ,lcms)
-       ("python-numpy" ,python-numpy)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+
+           librsvg
+           hicolor-icon-theme
+           libmypaint
+           mypaint-brushes
+           json-c
+           lcms
+           python-numpy
+           python-pycairo
+           python-pygobject))
     (home-page "http://mypaint.org/")
     (synopsis "Fast and simple painting app for artists")
     (description
@@ -2383,10 +2358,8 @@ Wacom-style graphics tablets.")
          (add-after 'unpack 'configure
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (list "src/dependency.py" "src/exif.py")
-               (("'exiftool")
-                (string-append "'"
-                               (assoc-ref inputs "perl-image-exiftool")
-                               "/bin/exiftool")))))
+               (("exiftool")
+                (search-input-file inputs "/bin/exiftool")))))
          (add-before 'install 'check
            (lambda _
              (invoke "pytest")))
@@ -2400,16 +2373,13 @@ Wacom-style graphics tablets.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/phockup")
-                 `("PYTHONPATH" prefix
+                 `("GUIX_PYTHONPATH" prefix
                    ,(search-path-as-string->list
-                     (getenv "PYTHONPATH"))))))))))
+                     (getenv "GUIX_PYTHONPATH"))))))))))
     (inputs
-     `(("perl-image-exiftool" ,perl-image-exiftool)
-       ("python" ,python)
-       ("python-tqdm" ,python-tqdm)))
+     (list perl-image-exiftool python python-tqdm))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://github.com/ivandokov/phockup")
     (synopsis "Organize photos and videos in folders")
     (description "Phockup is a media sorting tool that uses creation date and
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 4f0ffcbcc6..06ed80cbac 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -127,7 +127,7 @@
                ("freetype" ,freetype)
                ("bzip2" ,bzip2)
                ("xz" ,xz)))
-     (native-inputs `(("pkg-config" ,pkg-config)))
+     (native-inputs (list pkg-config))
      (outputs '("out"
                 "doc"))                 ; 26 MiB of HTML documentation
      (home-page "https://www.imagemagick.org/")
@@ -175,8 +175,8 @@ text, lines, polygons, ellipses and Bézier curves.")
         (base32
          "0n9afy1z5bhf9phrbahnkwhgcmijn8jggpbzwrivw1zhliliiy68"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("imagemagick" ,imagemagick)))
+    (native-inputs (list pkg-config))
+    (inputs (list imagemagick))
     (arguments
      `(#:tests? #f ;;Failed 2/23 test programs. 2/353 subtests failed.
        #:phases
@@ -235,12 +235,12 @@ script.")
              "--with-quantum-depth=16" ; required by Octave
              "--enable-quantum-library-names"
              (string-append "--with-gs-font-dir="
-                            (assoc-ref %build-inputs "gs-fonts")
+                            (assoc-ref %build-inputs "font-ghostscript")
                             "/share/fonts/type1/ghostscript"))))
     (inputs
      `(("graphviz" ,graphviz)
        ("ghostscript" ,ghostscript)
-       ("gs-fonts" ,gs-fonts)
+       ("font-ghostscript" ,font-ghostscript)
        ("lcms" ,lcms)
        ("libx11" ,libx11)
        ("libxml2" ,libxml2)
@@ -253,7 +253,7 @@ script.")
        ("xz" ,xz)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (outputs '("out"                  ; 13 MiB
                "doc"))                ; ~7 MiB
     (home-page "http://www.graphicsmagick.org")
diff --git a/gnu/packages/inklingreader.scm b/gnu/packages/inklingreader.scm
index 6cdc4b3330..88c1c2144c 100644
--- a/gnu/packages/inklingreader.scm
+++ b/gnu/packages/inklingreader.scm
@@ -43,13 +43,9 @@
                 "0ikg95mgwfqh0bq4dzvkfmdiycacqvv27g91hl6adwk5y3gzl96g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libusb" ,libusb)))
+     (list glib cairo gtk+ librsvg libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.gnu.org/software/inklingreader/")
     (synopsis "Wacom Inkling sketch format conversion and manipulation")
     (description
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 8747218e54..c87f148329 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Boris A. Dekshteyn <boris.dekshteyn@gmail.com>
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
@@ -55,71 +55,6 @@
 (define-public inkscape
   (package
     (name "inkscape")
-    (version "0.92.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://media.inkscape.org/dl/"
-                                  "resources/file/"
-                                  "inkscape-" version ".tar.bz2"))
-              (patches (search-patches "inkscape-poppler-0.76.patch"))
-              (sha256
-               (base32
-                "0pjinhjibfsz1aywdpgpj3k23xrsszpj4a1ya5562dkv2yl2vv2p"))))
-    (build-system cmake-build-system)
-    (inputs
-     `(("aspell" ,aspell)
-       ("gtkmm" ,gtkmm-2)
-       ("gtk" ,gtk+-2)
-       ("gsl" ,gsl)
-       ("poppler" ,poppler)
-       ("libpng" ,libpng)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("libgc" ,libgc)
-       ("freetype" ,freetype)
-       ("popt" ,popt)
-       ("potrace" ,potrace)
-       ("python" ,python-2)
-       ("lcms" ,lcms)
-       ("boost" ,boost)))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
-    ;; FIXME: tests require gmock
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-icon-cache-generator
-           (lambda _
-             (substitute* "share/icons/application/CMakeLists.txt"
-              (("gtk-update-icon-cache") "true"))
-             #t))
-         (add-after 'unpack 'adjust-for-new-poppler
-           (lambda _
-             (substitute* (find-files "src/extension/internal/pdfinput")
-               ;; Needed for Poppler 0.82.
-               (("Unicode \\*u") "Unicode const *u")
-               ;; Needed for Poppler 0.83.
-               (("\\(GfxPath") "(const GfxPath")
-               (("GfxSubpath") "const GfxSubpath")
-               (("new GlobalParams\\(\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams())")
-               (("new GlobalParams\\(poppler_datadir\\)")
-                "std::unique_ptr<GlobalParams>(new GlobalParams(poppler_datadir))"))
-             #t)))))
-    (home-page "https://inkscape.org/")
-    (synopsis "Vector graphics editor")
-    (description "Inkscape is a vector graphics editor.  What sets Inkscape
-apart is its use of Scalable Vector Graphics (SVG), an XML-based W3C standard,
-as the native format.")
-    (license license:gpl2+)))
-
-(define-public inkscape-1.1
-  (package
-    (name "inkscape")
     (version "1.1.1")
     (source
      (origin
@@ -212,8 +147,7 @@ endif()~%~%"
              ((".*find_package\\(DoubleConversion.*") ""))))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #t
-       #:test-target "check"            ;otherwise some test binaries are missing
+     `(#:test-target "check"            ;otherwise some test binaries are missing
        #:imported-modules (,@%cmake-build-system-modules
                            (guix build glib-or-gtk-build-system))
        #:modules ((guix build cmake-build-system)
@@ -221,6 +155,9 @@ endif()~%~%"
                   (guix build utils))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+           (assoc-ref glib-or-gtk:%standard-phases
+                      'generate-gdk-pixbuf-loaders-cache-file))
          (add-after 'unpack 'patch-icon-cache-generator
            (lambda _
              (substitute* "share/icons/application/CMakeLists.txt"
@@ -236,8 +173,7 @@ endif()~%~%"
          (add-after 'unpack 'set-home
            ;; Mute Inkscape warnings during tests.
            (lambda _
-             (setenv "HOME" (getcwd))
-             (format #t "ARGS is set to: ~a" (getenv "ARGS"))))
+             (setenv "HOME" (getcwd))))
          ;; Move the check phase after the install phase, as when run in the
          ;; tests, Inkscape relies on files that are not yet installed, such
          ;; as the "share/inkscape/ui/units.xml" file.
@@ -253,12 +189,13 @@ endif()~%~%"
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/inkscape")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))))))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH"))))))))))
     (inputs
      `(("aspell" ,aspell)
        ("autotrace" ,autotrace)
        ("gdl" ,gdl-minimal)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("gtk" ,gtk+)
        ("gtkspell3" ,gtkspell3)
        ("gsl" ,gsl)
@@ -269,7 +206,7 @@ endif()~%~%"
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("libgc" ,libgc)
-       ("libsoup" ,libsoup-minimal)
+       ("libsoup" ,libsoup-minimal-2)
        ("libcdr" ,libcdr)
        ("libvisio" ,libvisio)
        ("libwpd" ,libwpd)
@@ -285,12 +222,12 @@ endif()~%~%"
        ("python-numpy" ,python-numpy)
        ("python-lxml" ,python-lxml)))
     (native-inputs
-     `(("imagemagick" ,imagemagick)     ;for tests
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("googletest" ,googletest)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list imagemagick ;for tests
+           intltool
+           `(,glib "bin")
+           googletest
+           perl
+           pkg-config))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
diff --git a/gnu/packages/installers.scm b/gnu/packages/installers.scm
index c768a367aa..04357b9719 100644
--- a/gnu/packages/installers.scm
+++ b/gnu/packages/installers.scm
@@ -48,7 +48,7 @@
       (native-inputs `(("xgcc" ,xgcc)
                        ("xbinutils" ,xbinutils)
                        ("mingw-w64" ,xlibc)))
-      (inputs `(("zlib" ,zlib)))
+      (inputs (list zlib))
       (arguments
        `(#:scons ,scons-python2
          #:modules ((srfi srfi-1)
diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
index 57701991e3..51808bdd51 100644
--- a/gnu/packages/ipfs.scm
+++ b/gnu/packages/ipfs.scm
@@ -78,26 +78,26 @@ that are shared between @command{go-ipfs/commands} and its rewrite
          ;; TODO: Tests fail, might need network access.
          #:tests? #f))
       (native-inputs
-       `(("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-         ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-         ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-         ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-         ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-         ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-         ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-         ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-         ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-         ("go-github-com-cheekybits-is" ,go-github-com-cheekybits-is)))
+       (list go-github-com-ipfs-go-ipfs-cmdkit-files
+             go-github-com-libp2p-go-libp2p-metrics
+             go-github-com-libp2p-go-flow-metrics
+             go-github-com-libp2p-go-libp2p-peer
+             go-github-com-libp2p-go-libp2p-protocol
+             go-github-com-libp2p-go-libp2p-crypto
+             go-github-com-mitchellh-go-homedir
+             go-github-com-multiformats-go-multiaddr
+             go-github-com-multiformats-go-multiaddr-net
+             go-github-com-btcsuite-btcd-btcec
+             go-github-com-gogo-protobuf
+             go-github-com-minio-blake2b-simd
+             go-github-com-minio-sha256-simd
+             go-github-com-mr-tron-base58
+             go-github-com-multiformats-go-multihash
+             go-golang-org-x-crypto
+             go-github-com-spaolacci-murmur3
+             go-github-com-gxed-hashland-keccakpg
+             go-github-com-whyrusleeping-tar-utils
+             go-github-com-cheekybits-is))
       (home-page "https://github.com/ipfs/go-ipfs-api")
       (synopsis "Unofficial Go interface to IPFS's HTTP API")
       (description "An unofficial Go interface to IPFS's HTTP API")
@@ -120,32 +120,32 @@ that are shared between @command{go-ipfs/commands} and its rewrite
     (arguments
      '(#:import-path "github.com/whyrusleeping/gx"))
     (native-inputs
-     `(("go-github-com-blang-semver" ,go-github-com-blang-semver)
-       ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-       ("go-github-com-ipfs-go-ipfs-api" ,go-github-com-ipfs-go-ipfs-api)
-       ("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-       ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-       ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-       ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-       ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-       ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-       ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-       ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-       ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-       ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-       ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-       ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-       ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-       ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-       ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-       ("go-github-com-sabhiram-go-gitignore" ,go-github-com-sabhiram-go-gitignore)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
-       ("go-github-com-whyrusleeping-json-filter" ,go-github-com-whyrusleeping-json-filter)
-       ("go-github-com-whyrusleeping-progmeter" ,go-github-com-whyrusleeping-progmeter)
-       ("go-github-com-whyrusleeping-stump" ,go-github-com-whyrusleeping-stump)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-blang-semver
+           go-github-com-gxed-hashland-keccakpg
+           go-github-com-ipfs-go-ipfs-api
+           go-github-com-ipfs-go-ipfs-cmdkit-files
+           go-github-com-libp2p-go-flow-metrics
+           go-github-com-libp2p-go-libp2p-crypto
+           go-github-com-libp2p-go-libp2p-metrics
+           go-github-com-libp2p-go-libp2p-peer
+           go-github-com-libp2p-go-libp2p-protocol
+           go-github-com-minio-blake2b-simd
+           go-github-com-minio-sha256-simd
+           go-github-com-mitchellh-go-homedir
+           go-github-com-mr-tron-base58
+           go-github-com-multiformats-go-multiaddr
+           go-github-com-multiformats-go-multiaddr-net
+           go-github-com-multiformats-go-multihash
+           go-github-com-spaolacci-murmur3
+           go-github-com-whyrusleeping-tar-utils
+           go-github-com-btcsuite-btcd-btcec
+           go-github-com-gogo-protobuf
+           go-github-com-sabhiram-go-gitignore
+           go-github-com-urfave-cli
+           go-github-com-whyrusleeping-json-filter
+           go-github-com-whyrusleeping-progmeter
+           go-github-com-whyrusleeping-stump
+           go-golang-org-x-crypto))
     (home-page "https://github.com/whyrusleeping/gx")
     (synopsis "Package management tool using IPFS")
     (description "@command{gx} is a packaging tool built around the
@@ -179,32 +179,32 @@ powerful and simple.")
     (arguments
      '(#:import-path "github.com/whyrusleeping/gx-go"))
     (native-inputs
-     `(("go-github-com-whyrusleeping-gx-util" ,go-github-com-whyrusleeping-gx-util)
-       ("go-github-com-kr-fs" ,go-github-com-kr-fs)
-       ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
-       ("go-github-com-ipfs-go-ipfs-api" ,go-github-com-ipfs-go-ipfs-api)
-       ("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
-       ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
-       ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
-       ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
-       ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
-       ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
-       ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
-       ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-       ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
-       ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
-       ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
-       ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
-       ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
-       ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
-       ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
-       ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
-       ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-       ("go-github-com-sabhiram-go-gitignore" ,go-github-com-sabhiram-go-gitignore)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
-       ("go-github-com-whyrusleeping-progmeter" ,go-github-com-whyrusleeping-progmeter)
-       ("go-github-com-whyrusleeping-stump" ,go-github-com-whyrusleeping-stump)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github-com-whyrusleeping-gx-util
+           go-github-com-kr-fs
+           go-github-com-gxed-hashland-keccakpg
+           go-github-com-ipfs-go-ipfs-api
+           go-github-com-ipfs-go-ipfs-cmdkit-files
+           go-github-com-libp2p-go-flow-metrics
+           go-github-com-libp2p-go-libp2p-crypto
+           go-github-com-libp2p-go-libp2p-metrics
+           go-github-com-libp2p-go-libp2p-peer
+           go-github-com-libp2p-go-libp2p-protocol
+           go-github-com-minio-blake2b-simd
+           go-github-com-minio-sha256-simd
+           go-github-com-mitchellh-go-homedir
+           go-github-com-mr-tron-base58
+           go-github-com-multiformats-go-multiaddr
+           go-github-com-multiformats-go-multiaddr-net
+           go-github-com-multiformats-go-multihash
+           go-github-com-spaolacci-murmur3
+           go-github-com-whyrusleeping-tar-utils
+           go-github-com-btcsuite-btcd-btcec
+           go-github-com-gogo-protobuf
+           go-github-com-sabhiram-go-gitignore
+           go-github-com-urfave-cli
+           go-github-com-whyrusleeping-progmeter
+           go-github-com-whyrusleeping-stump
+           go-golang-org-x-crypto))
     (home-page "https://github.com/whyrusleeping/gx-go")
     (synopsis "Golang subtool for the @command{gx} package manager")
     (description "A subtool for the @command{gx} package manager for packages
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 840c27f5c5..3cc2afda33 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -120,14 +120,12 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-inxi-reference
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((inxi (string-append (assoc-ref inputs "inxi") "/bin/inxi")))
+             (let ((inxi (search-input-file inputs "/bin/inxi")))
                (symlink inxi "data/scripts/inxi")
                #t))))
        #:tests? #f)) ; no test target
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
      `(("inxi" ,inxi-minimal)
        ("libdbusmenu-qt" ,libdbusmenu-qt)
@@ -175,12 +173,9 @@ irssi, but graphical.")
            (lambda _
              (setenv "HOME" (getcwd)))))))
     (inputs
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("perl" ,perl)))
+     (list glib ncurses openssl perl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://irssi.org/")
     (synopsis "Terminal-based IRC client")
     (description
@@ -206,19 +201,18 @@ SILC and ICB protocols via plugins.")
        ;; For tests.
        ("cpputest" ,cpputest)))
     (inputs
-     `(("aspell" ,aspell)
-       ("curl" ,curl)
-       ("gnutls" ,gnutls)
-       ("libgcrypt" ,libgcrypt "out")
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)
-
-       ;; Scripting language plug-ins.
-       ("guile" ,guile-3.0)
-       ("lua" ,lua-5.1)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("tcl" ,tcl)))
+     (list aspell
+           curl
+           gnutls
+           `(,libgcrypt "out")
+           ncurses
+           zlib
+           ;; Scripting language plug-ins.
+           guile-3.0
+           lua-5.1
+           perl
+           python
+           tcl))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_PHP=OFF"
@@ -264,13 +258,13 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
        ("python" ,python-wrapper)
        ("python-sphinx" ,python-sphinx)))
     (inputs
-     `(("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("libconfig" ,libconfig)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("openssl" ,openssl)))
+     (list glib-networking
+           gsettings-desktop-schemas
+           gtk+
+           libconfig
+           libsecret
+           libsoup
+           openssl))
     (home-page "https://srain.im")
     (synopsis "Modern IRC client written in GTK")
     (description
@@ -315,11 +309,9 @@ for the IRCv3 protocol.")
                (("/bin/rm") "rm")
                (("/bin/mv") "mv")))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list ncurses openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list pkg-config perl))
     (home-page "http://www.eterna.com.au/ircii/")
     (synopsis "Terminal-based IRC and ICB client")
     (description
@@ -343,11 +335,9 @@ for the IRCv3 protocol.")
        #:make-flags (list (string-append "PREFIX=" %output)
                           ,(string-append "CC=" (cc-for-target)))))
     (native-inputs
-     `(("universal-ctags" ,universal-ctags)
-       ("pkg-config" ,pkg-config)))
+     (list universal-ctags pkg-config))
     (inputs
-     `(("libressl" ,libressl)
-       ("ncurses" ,ncurses)))
+     (list libressl ncurses))
     (home-page "https://git.causal.agency/catgirl")
     (synopsis "TLS-only terminal IRC client")
     (description
@@ -461,16 +451,16 @@ all RFC 2812 commands, and customized color scheme definitions.")
         (base32 "0853xk1ps3v6lkmfx50wv56vynnzpl84v66hxnhl8i34zl36kk3c"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-chardet" ,python-chardet)
-       ("python-dateutil" ,python-dateutil)
-       ("python-gnupg" ,python-gnupg)
-       ("python-feedparser" ,python-feedparser)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-socksipy-branch" ,python-socksipy-branch)
-       ("python-ecdsa" ,python-ecdsa)))
+     (list python-pytz
+           python-chardet
+           python-dateutil
+           python-gnupg
+           python-feedparser
+           python-sqlalchemy
+           python-socksipy-branch
+           python-ecdsa))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     ;; Despite the existence of a test folder there is no test phase.
     ;; We need to package https://github.com/ProgVal/irctest and write
     ;; our own testphase.
@@ -548,14 +538,14 @@ other enhancements and bug fixes.")
                                       (assoc-ref %build-inputs "tcl")
                                       "/lib/tclConfig.sh"))))))))
     (inputs
-     `(("libressl" ,libressl)
-       ("ncurses" ,ncurses)
-       ("libarchive" ,libarchive) ; CHANGELOG: "Support for loading zip files"
-       ("perl" ,perl)
-       ("tcl" ,tcl)
-       ("ruby" ,ruby)))
+     (list libressl
+           ncurses
+           libarchive ; CHANGELOG: "Support for loading zip files"
+           perl
+           tcl
+           ruby))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://epicsol.org")
     (synopsis "Epic5 IRC Client")
     (description
@@ -590,11 +580,9 @@ interface for those who are accustomed to the ircII way of doing things.")
         (string-append "CC=" ,(cc-for-target))
         (string-append "PREFIX=" %output))))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("universal-ctags" ,universal-ctags)))
+      (list pkg-config universal-ctags))
     (inputs
-      `(("libressl" ,libressl)
-        ("sqlite" ,sqlite)))
+      (list libressl sqlite))
     (home-page "https://code.causal.agency/june/litterbox")
     (synopsis "TLS-only IRC logger")
     (description
@@ -658,21 +646,21 @@ but can also be used independently as a logging bot.")
                        (string-append "--config-dir=" out-etc name)))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("argon2" ,argon2)
-       ("gnutls" ,gnutls)
-       ("libmaxminddb" ,libmaxminddb)
-       ("mbedtls-apache" ,mbedtls-apache)
-       ("mysql" ,mysql)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre "bin")
-       ("perl" ,perl)
-       ("postgresql" ,postgresql)
-       ("re2" ,re2)
-       ("sqlite" ,sqlite)
-       ("tre" ,tre)))
+     (list argon2
+           gnutls
+           libmaxminddb
+           mbedtls-apache
+           mysql
+           openldap
+           openssl
+           `(,pcre "bin")
+           perl
+           postgresql
+           re2
+           sqlite
+           tre))
     (synopsis "Modular IRC server written in C++")
     (description "InspIRCd is a modular Internet Relay Chat
 server written in C++ for Unix-like operating systems.")
diff --git a/gnu/packages/irods.scm b/gnu/packages/irods.scm
index bb0263682c..e9ac0d5297 100644
--- a/gnu/packages/irods.scm
+++ b/gnu/packages/irods.scm
@@ -120,18 +120,15 @@
                (("'usr', 'lib', 'irods'") "'lib', 'irods'"))
              (substitute* "scripts/irods/pypyodbc.py"
                (("\"/usr/lib/libodbc.so\"")
-                (string-append (assoc-ref inputs "unixodbc") "/lib/libodbc.so")))))
+                (search-input-file inputs "/lib/libodbc.so")))))
          (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "catch2")
-                                              "/include/catch2")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs "/include/c++/v1")
+                               (search-input-directory inputs "/include/catch2")
+                               (search-input-directory inputs "/include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -231,10 +228,10 @@ stored.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs
+                                                       "include/c++/v1")
+                               (search-input-directory inputs
+                                                       "include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/iso-codes.scm b/gnu/packages/iso-codes.scm
index 637390d734..b2cfd3434c 100644
--- a/gnu/packages/iso-codes.scm
+++ b/gnu/packages/iso-codes.scm
@@ -44,10 +44,19 @@
               (base32
                "1q6x9c5x4x0x4q11iygldsmxdyzhz1mb4n8im76glwsgqsqyjs80"))))
     (build-system gnu-build-system)
+    ;; TODO(staging): Unconditionally move inputs to native-inputs.
+    (native-inputs
+     (if (%current-target-system)
+         `(("python" ,python-wrapper)
+           ("perl" ,perl)
+           ("gettext" ,gettext-minimal))
+         '()))
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("perl" ,perl)
-       ("python" ,python-wrapper)))
+     `(,@(if (%current-target-system)
+             '()
+             `(("gettext" ,gettext-minimal)
+               ("perl" ,perl)
+               ("python" ,python-wrapper)))))
     (synopsis "Various ISO standards")
     (description
      "This package provides lists of various ISO standards (e.g. country,
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 5cb92840dc..926cf083a2 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -437,13 +437,13 @@
        ("webrtc-audio-processing" ,webrtc-audio-processing)
        ("yaml-cpp" ,yaml-cpp)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gcc" ,gcc-8)                   ;charconv requires GCC 8.1+
-       ("libtool" ,libtool)
-       ("perl" ,perl)                   ;to generate manpages with pod2man
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           gcc-8 ;charconv requires GCC 8.1+
+           libtool
+           perl ;to generate manpages with pod2man
+           pkg-config
+           which))
     (arguments
      `(#:tests? #f         ; The tests fail to compile due to missing headers.
        #:make-flags '("V=1")            ;build verbosely
@@ -472,10 +472,9 @@ protocols, as well as decentralized calling using P2P-DHT.")
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (inputs
-     `(("libring" ,libring)
-       ("network-manager" ,network-manager)))
+     (list libring network-manager))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))     ; Qt is included in several installed headers.
+     (list qtbase-5))     ; Qt is included in several installed headers.
     (arguments
      `(#:tests? #f                      ; There is no testsuite.
        #:configure-flags
@@ -515,25 +514,25 @@ decentralized calling using P2P-DHT.")
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (inputs
-     `(("clutter" ,clutter)
-       ("clutter-gtk" ,clutter-gtk)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libappindicator" ,libappindicator)
-       ("libnotify" ,libnotify)
-       ("libringclient" ,libringclient)
-       ("network-manager" ,network-manager)
-       ("qrencode" ,qrencode)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+     (list clutter
+           clutter-gtk
+           gtk+
+           libcanberra
+           libappindicator
+           libnotify
+           libringclient
+           network-manager
+           qrencode
+           sqlite
+           webkitgtk))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")))       ;for glib-compile-resources
     (propagated-inputs
-     `(("libring" ,libring) ; Contains 'dring', the daemon, which is
-                            ; automatically started by DBus.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)))
+     (list libring ; Contains 'dring', the daemon, which is
+           ; automatically started by DBus.
+           adwaita-icon-theme))
     (arguments
      `(#:tests? #f                      ;no test suite
        #:imported-modules (,@%cmake-build-system-modules
@@ -546,6 +545,11 @@ decentralized calling using P2P-DHT.")
          (add-after 'unpack 'change-directory
            (lambda _
              (chdir "client-gnome")))
+         (add-after 'change-directory 'fix-webkit-detection
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("WEBKIT webkit2gtk-4.0")
+                "WEBKIT webkit2gtk-4.1"))))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref gtk:%standard-phases 'glib-or-gtk-compile-schemas))
          (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
@@ -579,25 +583,22 @@ decentralized calling using P2P-DHT.")
              (lambda _
                (chdir "client-qt"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)))
+     (list pkg-config qttools doxygen graphviz))
     (inputs
-     `(("libnotify" ,libnotify)
-       ("libringclient" ,libringclient)
-       ("network-manager" ,network-manager)
-       ("qrencode" ,qrencode)
-       ("qtsvg" ,qtsvg)
-       ("qtwebengine" ,qtwebengine)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)))
+     (list libnotify
+           libringclient
+           network-manager
+           qrencode
+           qtsvg
+           qtwebengine
+           qtwebchannel
+           qtmultimedia
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2))
     (propagated-inputs
-     `(("libring" ,libring)))           ;for dring
+     (list libring))           ;for dring
     (home-page "https://jami.net")
     (synopsis "Qt Jami client")
     (description "This package provides the Jami Qt client.  Jami is a secure
diff --git a/gnu/packages/java-compression.scm b/gnu/packages/java-compression.scm
index 033b55c988..32d04a2fa6 100644
--- a/gnu/packages/java-compression.scm
+++ b/gnu/packages/java-compression.scm
@@ -237,9 +237,7 @@ compressor/decompressor.")
          (replace 'install (install-from-pom "pom.xml")))))
     (home-page "https://github.com/dain/snappy")
     (native-inputs
-     `(("java-guava" ,java-guava)
-       ("java-snappy" ,java-snappy)
-       ("java-testng" ,java-testng)))
+     (list java-guava java-snappy java-testng))
     (synopsis "Java port of the Snappy (de)compressor")
     (description
      "Iq80-snappy is a port of the Snappy compressor and decompressor rewritten
@@ -263,8 +261,7 @@ output created by the original C++ code, and is extremely fast.")
                 "0ncmhlqmrfmj96nqf6p77b9ws35lcfsvpfxzwxi2asissc83z1l3"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)))
+     (list unzip java-junit))
     (arguments
      `(#:tests? #f                      ; no tests
        #:jar-name "jbzip2.jar"
@@ -319,7 +316,7 @@ It can be used as a replacement for the Apache @code{CBZip2InputStream} /
         (replace 'install
           (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://tukaani.org")
     (synopsis "XZ in Java")
     (description "Tukaani-xz is an implementation of xz compression/decompression
diff --git a/gnu/packages/java-graphics.scm b/gnu/packages/java-graphics.scm
index f7a89021cd..9a71548b9c 100644
--- a/gnu/packages/java-graphics.scm
+++ b/gnu/packages/java-graphics.scm
@@ -48,7 +48,7 @@
          (add-after 'unpack 'chdir
            (lambda _ (chdir "core") #t)))))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://piccolo2d.org")
     (synopsis "Structured 2D graphics framework")
     (description "Piccolo2D is a framework (in the Jazz ZUI tradition) to
@@ -75,15 +75,13 @@ libraries.")
          (add-before 'check 'start-xorg-server
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (inputs
-     `(("java-piccolo2d-core" ,java-piccolo2d-core)
-       ("java-junit" ,java-junit)))
+     (list java-piccolo2d-core java-junit))
     (native-inputs
-     `(("xorg-server" ,xorg-server))) ; for tests
+     (list xorg-server)) ; for tests
     (description "Piccolo2D is a framework (in the Jazz ZUI tradition) to
 create robust, full-featured graphical applications in Java, with features
 such as zooming and multiple representation.  This package provides additional
@@ -110,8 +108,7 @@ features not found in the core libraries.")))
      `(#:jar-name "marlin.jar"
        #:test-include (list "src/test/java/RunJUnitTest.java")))
     (inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (home-page "https://github.com/bourgesl/marlin-renderer/")
     (synopsis "Rendering engine")
     (description "Marlin is a Java2D @code{RenderingEngine} optimized for
diff --git a/gnu/packages/java-maths.scm b/gnu/packages/java-maths.scm
index 97343e0a16..45c42297ad 100644
--- a/gnu/packages/java-maths.scm
+++ b/gnu/packages/java-maths.scm
@@ -74,7 +74,7 @@
                (install-file (string-append "jblas-" ,version ".jar") target))
              #t)))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
      `(("ant" ,ant)
        ("ruby" ,ruby)                   ; for configure script
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index fdd849b8d6..cb1f524d5c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
   #:use-module (guix svn-download)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system maven)
@@ -58,6 +60,7 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages ghostscript) ;lcms
@@ -129,24 +132,11 @@
         (base32 "0lpbnb4dq4azmsvlhp6khq1gy42kyqyjv8gww74g5lm2y6blm4fa"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-debuginfo" "--disable-static")
-       #:phases (modify-phases %standard-phases
-                  (replace 'configure
-                    (lambda* (#:key build target native-inputs inputs outputs
-                              (configure-flags '()) out-of-source? system
-                              #:allow-other-keys)
-                      (let ((configure (assoc-ref %standard-phases 'configure))
-                            (enable-64bit? (member system '("aarch64-linux"
-                                                            "x86_64-linux"
-                                                            "mips64el-linux"))))
-                        (configure #:build build #:target target
-                                   #:native-inputs native-inputs
-                                   #:inputs inputs #:outputs outputs
-                                   #:configure-flags `(,(if enable-64bit?
-                                                            "--enable-64bit"
-                                                            '())
-                                                       ,@configure-flags)
-                                   #:out-of-source? out-of-source?)))))))
+     `(#:configure-flags (list "--enable-debuginfo"
+                               "--disable-static"
+                               ,@(if (target-64bit?)
+                                  `("--enable-64bit")
+                                  '()))))
     (synopsis "ANTLR C Library")
     (description "LIBANTLR3C provides run-time C libraries for ANTLR3 (ANother
 Tool for Language Recognition v3).")
@@ -197,7 +187,7 @@ and binary format defined in The Java Virtual Machine Specification.")
            (delete 'configure)
            (add-before 'install 'fix-wrapper
              (lambda* (#:key inputs #:allow-other-keys)
-               (let ((jps (string-append (assoc-ref inputs "jdk") "/bin/jps")))
+               (let ((jps (search-input-file inputs "/bin/jps")))
                  (substitute* "bin/drip"
                    (("jps") jps)
                    (("brew update && brew upgrade drip") "guix pull && guix install drip")
@@ -242,13 +232,13 @@ only faster.")
               (sha256
                (base32
                 "0i99wf9xd3hw1sj2sazychb9prx8nadxh2clgvk3zlmb28v0jbfz"))
-              (patches (search-patches "classpath-aarch64-support.patch"))))
+              (patches (search-patches "classpath-aarch64-support.patch"
+                                       "classpath-miscompilation.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list (string-append "JAVAC="
-                            (assoc-ref %build-inputs "jikes")
-                            "/bin/jikes")
+                            (search-input-file %build-inputs "/bin/jikes"))
              "--disable-Werror"
              "--disable-gmp"
              "--disable-gtk-peer"
@@ -259,17 +249,6 @@ only faster.")
              "--disable-gjdoc")
        #:phases
        (modify-phases %standard-phases
-         ;; XXX: This introduces a memory leak as we remove a call to free up
-         ;; memory for the file name string.  This was necessary because of a
-         ;; runtime error that would have prevented us from building
-         ;; ant-bootstrap later.  See https://issues.guix.gnu.org/issue/36685
-         ;; for the gnarly details.
-         (add-after 'unpack 'remove-call-to-free
-           (lambda _
-             (substitute* "native/jni/java-io/java_io_VMFile.c"
-               (("result = cpio_isFileExists.*" m)
-                (string-append m "\n//")))
-             #t))
          (add-after 'install 'install-data
            (lambda _ (invoke "make" "install-data"))))))
     (native-inputs
@@ -373,19 +352,15 @@ JNI.")
        (modify-phases %standard-phases
          (delete 'bootstrap)
          (delete 'configure)
-         (replace 'build
+         (add-before 'build 'define-java-environment-variables
            (lambda* (#:key inputs #:allow-other-keys)
+             ;; First, set environment variables (eases debugging on -K).
              (setenv "JAVA_HOME" (assoc-ref inputs "jamvm"))
-             (setenv "JAVACMD"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/bin/jamvm"))
-             (setenv "JAVAC"
-                     (string-append (assoc-ref inputs "jikes")
-                                    "/bin/jikes"))
-             (setenv "CLASSPATH"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/lib/rt.jar"))
-
+             (setenv "JAVACMD" (search-input-file inputs "/bin/jamvm"))
+             (setenv "JAVAC" (search-input-file inputs "/bin/jikes"))
+             (setenv "CLASSPATH" (search-input-file inputs "/lib/rt.jar"))))
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Ant complains if this file doesn't exist.
              (setenv "HOME" "/tmp")
              (with-output-to-file "/tmp/.ant.properties"
@@ -487,8 +462,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CLASSPATH"
                      (string-join
-                      (cons (string-append (assoc-ref inputs "jamvm")
-                                           "/lib/rt.jar")
+                      (cons (search-input-file inputs "/lib/rt.jar")
                             (find-files (string-append
                                          (assoc-ref inputs "ant-bootstrap")
                                          "/lib")
@@ -935,6 +909,33 @@ machine.")))
                             "patches/hotspot/hs23/drop_unlicensed_test.patch")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              #t))
+         (add-after 'unpack 'fix-openjdk
+           (lambda _
+             (substitute* "openjdk/jdk/make/common/Defs-linux.gmk"
+               (("CFLAGS_COMMON  = -fno-strict-aliasing" all)
+                (string-append all " -fcommon")))
+             (substitute* "openjdk/hotspot/src/share/vm/code/relocInfo.hpp"
+               (("inline friend relocInfo prefix_relocInfo\\(int datalen = 0\\);")
+                "inline friend relocInfo prefix_relocInfo(int datalen);"))
+             (substitute*
+                 '("openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                   "openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+               (("#include <sys/sysctl.h>")
+                "#include <linux/sysctl.h>"))
+             ;; It looks like the "h = 31 * h + c" line of the jsum()
+             ;; function gets miscompiled. After a few iterations of the loop
+             ;; the result of "31 * h" is always 0x8000000000000000.
+             ;; Bad optimization maybe...
+             ;; Transform "31 * h + c" into a convoluted "32 * h + c - h"
+             ;; as a workaround.
+             (substitute* "openjdk/hotspot/src/share/vm/memory/dump.cpp"
+               (("h = 31 \\* h \\+ c;")
+                "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;"))
+             ;; Our gcc version is higher than 4.3; replace the failing
+             ;; expression to test this by its result.
+             (substitute* "openjdk/jdk/make/sun/font/Makefile"
+               (("\"\\$\\(shell expr.*0\"")
+                "\"1\" \"0\""))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              ;; buildtree.make generates shell scripts, so we need to replace
@@ -1103,6 +1104,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/")
                  (changeset "jdk6-b41")))
+           (file-name "jdk6-checkout")
            (sha256
             (base32
              "14q47yfg586fs64w30g8mk92m5dkxsvr36zzh0ra99xk5x0x96mv"))))
@@ -1112,6 +1114,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jdk/")
                  (changeset "jdk6-b41")))
+           (file-name "jdk-checkout")
            (sha256
             (base32
              "165824nhg1k1dx6zs9dny0j49rmk35jw5b13dmz8c77jfajml4v9"))))
@@ -1121,6 +1124,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/hotspot/")
                  (changeset "jdk6-b41")))
+           (file-name "hotspot-checkout")
            (sha256
             (base32
              "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))))
@@ -1130,6 +1134,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/corba/")
                  (changeset "jdk6-b41")))
+           (file-name "corba-checkout")
            (sha256
             (base32
              "1p9g1r9dnax2iwp7yb59qx7m4nmshqhwmrb2b8jj8zgbd9dl2i3q"))))
@@ -1139,6 +1144,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/langtools/")
                  (changeset "jdk6-b41")))
+           (file-name "langtools-checkout")
            (sha256
             (base32
              "1x52wd67fynbbd9ild6fb4wvba3f5hhwk03qdjfazd0a1qr37z3d"))))
@@ -1148,6 +1154,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxp/")
                  (changeset "jdk6-b41")))
+           (file-name "jaxp-checkout")
            (sha256
             (base32
              "0shlqrvzpr4nrkmv215lbxnby63s3yvbdh1yxcayznsyqwa4nlxm"))))
@@ -1157,6 +1164,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxws/")
                  (changeset "jdk6-b41")))
+           (file-name "jaxws-checkout")
            (sha256
             (base32
              "0835lkw8vib1xhp8lxnybhlvzdh699hbi4mclxanydjk63zbpxk0"))))))
@@ -1279,6 +1287,25 @@ bootstrapping purposes.")
                               "openjdk.src/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c")
                  (("attr/xattr.h") "sys/xattr.h"))
                #t))
+           (add-after 'unpack 'fix-openjdk
+             (lambda _
+               (substitute* "openjdk.src/jdk/make/common/Defs-linux.gmk"
+                 (("CFLAGS_COMMON   = -fno-strict-aliasing" all)
+                  (string-append all " -fcommon")))
+               (substitute*
+                   '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                     "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                 (("#include <sys/sysctl.h>")
+                  "#include <linux/sysctl.h>"))
+               ;; It looks like the "h = 31 * h + c" line of the jsum()
+               ;; function gets miscompiled. After a few iterations of the loop
+               ;; the result of "31 * h" is always 0x8000000000000000.
+               ;; Bad optimization maybe...
+               ;; Transform "31 * h + c" into a convoluted "32 * h + c - h"
+               ;; as a workaround.
+               (substitute* "openjdk.src/hotspot/src/share/vm/memory/dump.cpp"
+                 (("h = 31 \\* h \\+ c;")
+                  "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;"))))
            (add-after 'unpack 'fix-x11-extension-include-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk"
@@ -1572,8 +1599,8 @@ bootstrapping purposes.")
            (add-after 'install 'install-keystore
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((keystore  "cacerts")
-                      (certs-dir (string-append (assoc-ref inputs "nss-certs")
-                                                "/etc/ssl/certs"))
+                      (certs-dir (search-input-directory inputs
+                                                         "etc/ssl/certs"))
                       (keytool   (string-append (assoc-ref outputs "jdk")
                                                 "/bin/keytool")))
                  (define (extract-cert file target)
@@ -1754,7 +1781,7 @@ IcedTea build harness.")
           (guix build syscalls)
           ,@%gnu-build-system-modules)
 
-         #:disallowed-references ((,icedtea-7 "jdk"))
+         #:disallowed-references ,(list (gexp-input icedtea-7 "jdk"))
 
          ,@(substitute-keyword-arguments (package-arguments icedtea-7)
              ((#:modules modules)
@@ -1767,7 +1794,9 @@ IcedTea build harness.")
                 (srfi srfi-26)))
              ((#:configure-flags flags)
               `(let ((jdk (assoc-ref %build-inputs "jdk")))
-                 `( ;;"--disable-bootstrap"
+                 `("CFLAGS=-fcommon"
+                   "CXXFLAGS=-fcommon"
+                   ;;"--disable-bootstrap"
                    "--enable-bootstrap"
                    "--enable-nss"
                    ,(string-append "--with-parallel-jobs="
@@ -1832,6 +1861,13 @@ new Date();"))
                         (find-files "openjdk.src/jdk/src/solaris/native"
                                     "\\.c|\\.h"))
                        #t)))
+                 (replace 'fix-openjdk
+                   (lambda _
+                     (substitute*
+                         '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                           "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                       (("#include <sys/sysctl.h>")
+                        "#include <linux/sysctl.h>"))))
                  (replace 'install
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let ((doc (string-append (assoc-ref outputs "doc")
@@ -1910,7 +1946,8 @@ new Date();"))
        ((guix build syscalls)
         ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,icedtea-8 (,icedtea-8 "jdk"))
+       #:disallowed-references ,(list (gexp-input icedtea-8)
+                                      (gexp-input icedtea-8 "jdk"))
 
        #:phases
        (modify-phases %standard-phases
@@ -1925,7 +1962,12 @@ new Date();"))
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; TODO: unbundle libpng and lcms
              (invoke "bash" "./configure"
-                     (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                     ;; Add flags for compilation with gcc >= 10
+                     ,(string-append "--with-extra-cflags=-fcommon"
+                                     " -fno-delete-null-pointer-checks"
+                                     " -fno-lifetime-dse")
+                     (string-append "--with-freetype="
+                                    (assoc-ref inputs "freetype"))
                      "--disable-freetype-bundling"
                      "--disable-warnings-as-errors"
                      "--disable-hotspot-gtest"
@@ -2099,17 +2141,28 @@ new Date();"))
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (invoke "bash" "./configure"
-                       (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                       ;; Add flags for compilation with gcc >= 10
+                       ,(string-append "--with-extra-cflags=-fcommon"
+                                       " -fno-delete-null-pointer-checks"
+                                       " -fno-lifetime-dse")
+                       (string-append "--with-freetype="
+                                      (assoc-ref inputs "freetype"))
                        "--disable-freetype-bundling"
                        "--disable-warnings-as-errors"
                        "--disable-hotspot-gtest"
                        "--with-giflib=system"
                        "--with-libjpeg=system"
                        "--with-native-debug-symbols=zipped"
-                       (string-append "--prefix=" (assoc-ref outputs "out")))
-               #t))))
+                       (string-append "--prefix=" (assoc-ref outputs "out")))))
+           (add-after 'unpack 'disable-warnings-as-errors
+             (lambda _
+               ;; It looks like the "--disable-warnings-as-errors" option of
+               ;; the 'configure' phase is not working.
+               (substitute* "make/autoconf/generated-configure.sh"
+                 (("-Werror") ""))))))
        ((#:disallowed-references _ '())
-        `(,openjdk9 (,openjdk9 "jdk")))))
+        `(,(gexp-input openjdk9)
+          ,(gexp-input openjdk9 "jdk")))))
     (native-inputs
      `(("openjdk9" ,openjdk9)
        ("openjdk9:jdk" ,openjdk9 "jdk")
@@ -2141,12 +2194,17 @@ new Date();"))
      `(#:imported-modules ((guix build syscalls)
                            ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,openjdk10 (,openjdk10 "jdk"))
+       #:disallowed-references ,(list (gexp-input openjdk10)
+                                      (gexp-input openjdk10 "jdk"))
 
        #:tests? #f; requires jtreg
        ;; TODO package jtreg
        #:configure-flags
-       `("--disable-option-checking" ; --enable-fast-install default flag errors otherwise
+       `(;; Add flags for compilation with gcc >= 10
+         ,(string-append "--with-extra-cflags=-fcommon"
+                         " -fno-delete-null-pointer-checks"
+                         " -fno-lifetime-dse")
+         "--disable-option-checking" ; --enable-fast-install default flag errors otherwise
          "--disable-warnings-as-errors"
          ;; make validate-runpath pass, see: http://issues.guix.info/issue/32894
          "--with-native-debug-symbols=zipped"
@@ -2635,6 +2693,7 @@ new Date();"))
      (substitute-keyword-arguments (package-arguments ant-bootstrap)
        ((#:phases phases)
         `(modify-phases ,phases
+           (delete 'define-java-environment-variables)
            (add-after 'unpack 'remove-scripts
              ;; Remove bat / cmd scripts for DOS as well as the antRun and runant
              ;; wrappers.
@@ -2707,8 +2766,8 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-commons-bcel" ,java-commons-bcel)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-commons-bcel)))))
 
 (define-public ant-junit
   (package
@@ -2739,8 +2798,8 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-junit)))))
 
 (define-public java-openjfx-build
   (package
@@ -2778,11 +2837,9 @@ new Date();"))
                      "buildSrc/src/main/java/com/sun/scenario/effect/compiler"
                      "buildSrc/src/main/antlr/JSL.g"))))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-stringtemplate" ,java-stringtemplate)))
+     (list antlr3 java-stringtemplate))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjfx.io")
     (synopsis "Graphical application toolkit in Java")
     (description "OpenJFX is a client application platform for desktop,
@@ -2818,7 +2875,7 @@ distribution.")
                (delete-file "com/sun/javafx/runtime/VersionInfoTest.java"))
              #t)))))
     (propagated-inputs
-     `(("java-openjfx-build" ,java-openjfx-build)))
+     (list java-openjfx-build))
     (description "OpenJFX is a client application platform for desktop,
 mobile and embedded systems built on Java.  Its goal is to produce a
 modern, efficient, and fully featured toolkit for developing rich client
@@ -2913,8 +2970,7 @@ distribution.")))
                                         (string-append target new-name))))
                          (find-files "netbeans" "\\.so$"))))))))
     (propagated-inputs
-     `(("java-openjfx-base" ,java-openjfx-base)
-       ("java-swt" ,java-swt)))
+     (list java-openjfx-base java-swt))
     ;; XXX: for unknown reasons
     ;; modules/graphics/src/main/native-prism-sw/JNativeSurface.c is missing
     ;; in this revision.
@@ -3072,9 +3128,9 @@ debugging, etc.")
                         #t))))
     (arguments
      `(#:make-flags                     ; bootstrap from javacc-4
-       (list (string-append "-Dbootstrap-jar="
-                            (assoc-ref %build-inputs "javacc")
-                            "/share/java/javacc.jar"))
+       ,#~(list (string-append "-Dbootstrap-jar="
+                               #$(this-package-native-input "javacc")
+                               "/share/java/javacc.jar"))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
@@ -3100,7 +3156,7 @@ debugging, etc.")
                #t))))))
 
     (native-inputs
-     `(("javacc" ,javacc-4)))))
+     (list javacc-4))))
 
 ;; This is the last 3.x release of ECJ
 (define-public java-ecj-3
@@ -3168,7 +3224,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)))))
+     (list unzip))))
 
 (define-public java-ecj
   (package (inherit java-ecj-3)
@@ -3251,19 +3307,22 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3397,11 +3456,9 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (add-after 'unpack 'unpack-build-resources
              (lambda* (#:key inputs #:allow-other-keys)
                (mkdir-p "../build_resources")
-               (invoke "tar" "xf" (assoc-ref inputs "build-resources")
-                       "-C" "../build_resources"
-                       "--strip-components=1")
-               (mkdir-p "../build_resources/lib")
-               #t))
+               (copy-recursively (assoc-ref inputs "build-resources")
+                                 "../build_resources")
+               (mkdir-p "../build_resources/lib")))
            (add-after 'unpack-build-resources 'fix-dependencies
              (lambda* (#:key inputs #:allow-other-keys)
                ;; FIXME: There should be a more convenient abstraction for
@@ -3436,8 +3493,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                  (rename-file "build-common.xml.new" "build-common.xml"))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/cisd-base/cisd-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs "/share/java/sis-base.jar"))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3449,7 +3505,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                #t))
            (replace 'install (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)))
+       (list java-cisd-base))
       (native-inputs
        `(("ecj" ,java-ecj-3.5)
          ("build-resources"
@@ -3539,29 +3595,32 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "../build_resources/ant/build-common.xml"
                  (("../libraries/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar")))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar")))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/sis-base/sis-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs
+                                     "/share/java/sis-base.jar"))
                  (("\\$\\{lib\\}/cisd-args4j/cisd-args4j.jar")
-                  (string-append (assoc-ref inputs "java-cisd-args4j")
-                                 "/share/java/cisd-args4j.jar"))
+                  (search-input-file inputs
+                                     "/share/java/cisd-args4j.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/junit4/junit.jar")
                   (car (find-files (assoc-ref inputs "java-junit") "jar$")))
                  (("\\$\\{lib\\}/jmock/hamcrest/hamcrest-core.jar")
@@ -3618,12 +3677,12 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (replace 'install
              (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)
-         ("java-cisd-args4j" ,java-cisd-args4j)
-         ("java-commons-lang" ,java-commons-lang)
-         ("java-commons-io" ,java-commons-io)
-         ("hdf5" ,hdf5-1.8)
-         ("zlib" ,zlib)))
+       (list java-cisd-base
+             java-cisd-args4j
+             java-commons-lang
+             java-commons-io
+             hdf5-1.8
+             zlib))
       (native-inputs
        `(("jdk" ,icedtea-8)
          ("java-testng" ,java-testng)
@@ -3668,8 +3727,8 @@ HDF5 files, building on the libraries provided by the HDF Group.")
      `(#:tests? #f ; there is no test target
        #:build-target "compile"
        #:make-flags
-       (list "-Dbuild.compiler=javac1.8"
-             (string-append "-Ddist=" (assoc-ref %outputs "out")))
+       ,#~(list "-Dbuild.compiler=javac1.8"
+                (string-append "-Ddist=" #$output))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
@@ -3720,7 +3779,7 @@ API and version 2.1 of the Java ServerPages API.")
                                "http/LocalStrings_fr.properties")))
                #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://javaee.github.io/servlet-spec/")
     (synopsis "Java servlet API")
     (description "Java Servlet is the foundation web specification in the
@@ -3800,8 +3859,7 @@ specification.")
        ("mesa" ,mesa)
        ("glu" ,glu)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)))
+     (list pkg-config unzip))
     (home-page "https://www.eclipse.org/swt/")
     (synopsis "Widget toolkit for Java")
     (description
@@ -3982,9 +4040,9 @@ documentation tools.")
                              target))
              #t)))))
     (inputs
-     `(("java-asm-bootstrap" ,java-asm-bootstrap)))
+     (list java-asm-bootstrap))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://code.google.com/archive/p/jarjar/")
     (synopsis "Repackage Java libraries")
     (description
@@ -4081,7 +4139,7 @@ private Method[] allMethods = getSortedMethods();")))
      `(("java-qdox-1.12" ,java-qdox-1.12)
        ("java-jarjar" ,java-jarjar)))
     (propagated-inputs
-     `(("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))
+     (list java-hamcrest-parent-pom))
     (home-page "http://hamcrest.org/")
     (synopsis "Library of matchers for building test expressions")
     (description
@@ -4134,8 +4192,7 @@ testing frameworks, mocking libraries and UI validation rules.")
           (replace 'install
             (install-from-pom "pom/hamcrest-library.pom"))))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))))
+     (list java-hamcrest-core java-hamcrest-parent-pom))))
 
 (define-public java-junit
   (package
@@ -4172,9 +4229,9 @@ testing frameworks, mocking libraries and UI validation rules.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (native-inputs
-     `(("java-hamcrest-library" ,java-hamcrest-library)))
+     (list java-hamcrest-library))
     (home-page "https://junit.org/junit4/")
     (synopsis "Test framework for Java")
     (description
@@ -4203,11 +4260,9 @@ sharing common test data, and test runners for running tests.")
        #:test-dir "src/test"
        #:test-exclude (list "**/SuperclassTest.java")))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-assertj" ,java-assertj)))
+     (list java-junit java-hamcrest-core java-assertj))
     (home-page "https://github.com/Pragmatists/JUnitParams")
     (synopsis "Parameterised test support for JUnit")
     (description "The JUnitParams project adds a new runner to JUnit and
@@ -4268,10 +4323,9 @@ cli/shell/BourneShell.java"
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (propagated-inputs
-     `(("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list plexus-parent-pom-5.1))
     (home-page "https://codehaus-plexus.github.io/plexus-utils/")
     (synopsis "Common utilities for the Plexus framework")
     (description "This package provides various Java utility classes for the
@@ -4316,8 +4370,7 @@ more.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://codehaus-plexus.github.io/plexus-interpolation/")
     (synopsis "Java components for interpolating ${} strings and the like")
     (description "Plexus interpolator is a modular, flexible interpolation
@@ -4353,7 +4406,7 @@ these two libraries to vary independently of one another.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-classworlds/")
     (synopsis "Java class loader framework")
     (description "Plexus classworlds replaces the native @code{ClassLoader}
@@ -4455,11 +4508,9 @@ implementation.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-commons-io" ,java-commons-io)
-       ("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list java-plexus-utils-3.3.0 java-commons-io plexus-parent-pom-5.1))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -4513,11 +4564,8 @@ reusing it in maven.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-plexus-io" ,java-plexus-io)
-       ("java-iq80-snappy" ,java-iq80-snappy)
-       ("java-commons-compress" ,java-commons-compress)
-       ("plexus-parent-pom" ,plexus-parent-pom-6.1)))
+     (list java-plexus-utils-3.3.0 java-plexus-io java-iq80-snappy
+           java-commons-compress plexus-parent-pom-6.1))
     (inputs
      `(("java-jsr305" ,java-jsr305)
        ("java-plexus-container-default"
@@ -4599,7 +4647,7 @@ archives (jar).")
          (replace 'install
            (install-from-pom "plexus-component-annotations/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-containers-parent-pom" ,java-plexus-containers-parent-pom)))
+     (list java-plexus-containers-parent-pom))
     (inputs '())
     (native-inputs '())
     (synopsis "Plexus descriptors generator")
@@ -4641,9 +4689,7 @@ from source tags and class annotations.")))
        ("java-jdom2" ,java-jdom2)
        ("java-asm" ,java-asm)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)))
+     (list java-junit java-guava java-geronimo-xbean-reflect))
     (synopsis "Inversion-of-control container for Maven")
     (description "The Plexus project provides a full software stack for creating
 and executing software projects.  Based on the Plexus container, the
@@ -4687,12 +4733,11 @@ provides the Maven plugin generating the component metadata.")))
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-javax-inject" ,java-javax-inject)))
+     (list java-cdi-api java-javax-inject))
     (propagated-inputs
-     `(("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-15)))
+     (list java-sonatype-spice-parent-pom-15))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/sonatype/plexus-cipher")
     (synopsis "Encryption/decryption Component")
     (description "Plexus-cipher contains a component to deal with encryption
@@ -4740,15 +4785,12 @@ and decryption.")
          (replace 'install
            (install-from-pom "plexus-java/pom.xml")))))
     (propagated-inputs
-     `(("java-asm" ,java-asm)
-       ("java-qdox" ,java-qdox-2-M9)
-       ("java-javax-inject" ,java-javax-inject)
-       ("plexus-parent-pom" ,plexus-parent-pom-4.0)))
+     (list java-asm java-qdox-2-M9 java-javax-inject
+           plexus-parent-pom-4.0))
     (inputs
-     `(("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-plexus-component-annotations))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-junit" ,java-junit)))
+     (list java-plexus-component-metadata java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-languages/plexus-java")
     (synopsis "Shared language features for Java")
     (description "This package contains shared language features of the Java
@@ -4782,7 +4824,7 @@ language, for the plexus project.")
        ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
        ("java-plexus-util" ,java-plexus-utils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-compiler")
     (synopsis "Plexus Compilers component's API to manipulate compilers")
     (description "This package contains the API used by components to manipulate
@@ -4864,12 +4906,10 @@ compilers.")
          (replace 'install
            (install-from-pom "plexus-compiler-manager/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-compiler-pom
+           java-plexus-container-default))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (synopsis "Compiler management for Plexus Compiler component")
     (description "Plexus Compiler is a Plexus component to use different
 compilers through a uniform API.  This component chooses the compiler
@@ -4913,9 +4953,8 @@ implementation to use in a project.")))
          (replace 'install
            (install-from-pom "plexus-compilers/plexus-compiler-javac/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-utils
+           java-plexus-container-default))
     (synopsis "Javac Compiler support for Plexus Compiler component")
     (description "This package contains the Javac Compiler support for Plexus
 Compiler component.")))
@@ -4973,10 +5012,9 @@ packages.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("plexus-components-pom-1.1.20" ,plexus-components-pom-1.1.20)))
+     (list java-plexus-utils plexus-components-pom-1.1.20))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-digest")
     (synopsis "Hash function utilities for Java")
     (description "This package is a plexus component that contains hash
@@ -5051,9 +5089,8 @@ function utilities.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-12)))
+     (list java-plexus-utils java-plexus-cipher
+           java-sonatype-spice-parent-pom-12))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ;; for modello:
@@ -5096,13 +5133,10 @@ This component decrypts a string passed to it.")
        #:jdk ,icedtea-8
        #:test-dir "src/test"))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)))
+     (list java-commons-cli java-plexus-container-default
+           java-plexus-classworlds))
     (native-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)))
+     (list java-plexus-utils java-junit java-guava))
     (home-page "https://codehaus-plexus.github.io/plexus-cli")
     (synopsis "CLI building library for plexus")
     (description "This package is a library to help creating CLI around
@@ -5159,8 +5193,7 @@ which behaves as if all files were just created.</description>\n
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-container-default))
     (home-page "https://github.com/sonatype/sisu-build-api/")
     (synopsis "Base build API for maven")
     (description "This package contains the base build API for maven and
@@ -5204,14 +5237,11 @@ project and determining what files need to be rebuilt.")
                  (("src/test") "modello-core/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-sisu-build-api" ,java-sisu-build-api)))
+     (list java-plexus-utils java-plexus-container-default
+           java-sisu-build-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-guava" ,java-guava)))
+     (list java-junit java-plexus-classworlds java-geronimo-xbean-reflect
+           java-guava))
     (home-page "https://codehaus-plexus.github.io/modello/")
     (synopsis "Framework for code generation from a simple model")
     (description "Modello is a framework for code generation from a simple model.
@@ -5252,7 +5282,7 @@ XSD and documentation.")
                                "build/classes")
              #t)))))
     (inputs
-     `(("java-modello-core" ,java-modello-core)))
+     (list java-modello-core))
     (synopsis "Modello Java Plugin")
     (description "Modello Java Plugin generates Java objects for the model.")))
 
@@ -5282,8 +5312,7 @@ XSD and documentation.")
                  (("src/test") "modello-plugins/modello-plugin-xml/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)))
+     (list java-modello-core java-modello-plugins-java))
     (synopsis "Modello XML Plugin")
     (description "Modello XML Plugin contains shared code for every plugins
 working on XML representation of the model.")))
@@ -5298,10 +5327,8 @@ working on XML representation of the model.")))
        #:tests? #f; no tests
        #:jdk ,icedtea-8))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-compiler-api
+           java-plexus-compiler-javac java-plexus-container-default))
     (synopsis "Modello test package")
     (description "The modello test package contains the basis to create
 Modello generator unit-tests, including sample models and xml files to test
@@ -5327,13 +5354,11 @@ every feature for every plugin.")))
                                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)))
+     (list java-modello-core java-modello-plugins-java
+           java-modello-plugins-xml))
     (native-inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-modello-test" ,java-modello-test)
-       ,@(package-native-inputs java-modello-core)))
+     (modify-inputs (package-native-inputs java-modello-core)
+       (prepend java-xmlunit java-modello-test)))
     (synopsis "Modello XPP3 Plugin")
     (description "The modello XPP3 plugin generates XML readers and writers based
 on the XPP3 API (XML Pull Parser).")))
@@ -5390,9 +5415,9 @@ on the XPP3 API (XML Pull Parser).")))
          (replace 'install
            (install-from-pom "archive/asm.pom")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (propagated-inputs
-     `(("java-org-ow2-parent-pom" ,java-org-ow2-parent-pom-1.3)))
+     (list java-org-ow2-parent-pom-1.3))
     (home-page "https://asm.ow2.io/")
     (synopsis "Very small and fast Java bytecode manipulation framework")
     (description "ASM is an all purpose Java bytecode manipulation and
@@ -5421,7 +5446,7 @@ complex transformations and code analysis tools.")
          (delete 'build)
          (delete 'configure)
          (replace 'install
-           (install-pom-file (assoc-ref %build-inputs "source"))))))
+           ,#~(install-pom-file #$source)))))
     (home-page "https://ow2.org")
     (synopsis "Ow2.org parent pom")
     (description "This package contains the parent pom for projects from ow2.org,
@@ -5472,7 +5497,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)))))
+     (list java-asm-8))))
 
 (define-public java-asm-analysis-8
   (package
@@ -5485,8 +5510,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-tree-8))))
 
 (define-public java-asm-util-8
   (package
@@ -5499,9 +5523,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-analysis" ,java-asm-analysis-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-analysis-8 java-asm-tree-8))))
 
 (define-public java-cglib
   (package
@@ -5531,8 +5553,7 @@ including java-asm.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "cglib") #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-junit" ,java-junit)))
+     (list java-asm java-junit))
     (home-page "https://github.com/cglib/cglib/")
     (synopsis "Java byte code generation library")
     (description "The byte code generation library CGLIB is a high level API
@@ -5558,8 +5579,7 @@ to generate and transform Java byte code.")
        #:source-dir "main/src/"
        #:test-dir "main/src/test/"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "http://objenesis.org/")
     (synopsis "Bypass the constructor when creating an object")
     (description "Objenesis is a small Java library that serves one purpose:
@@ -5620,12 +5640,9 @@ constructor on object instantiation.")
                (delete-file "tests2/EasyMockPropertiesTest.java"))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-asm java-cglib java-objenesis))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://easymock.org/")
     (synopsis "Java library providing mock objects for unit tests")
     (description "EasyMock is a Java library that provides an easy way to use
@@ -5684,10 +5701,7 @@ The jMock library
                (base32
                 "12b7l22g3nrjvf2dzcw3z03fpd2chrgp0d8xkvn8w55rwb57pax6"))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all java-asm java-bsh java-junit))
     (native-inputs
      `(("cglib" ,java-cglib)))
     (arguments
@@ -5728,15 +5742,15 @@ The jMock library
                           (string-append "jmock-legacy/src/test/java/" file))
                #t))))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-jmock" ,java-jmock)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all
+           java-objenesis
+           java-cglib
+           java-jmock
+           java-asm
+           java-bsh
+           java-junit))
     (native-inputs
-     `(("java-jmock-junit4" ,java-jmock-junit4)))))
+     (list java-jmock-junit4))))
 
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
@@ -5787,16 +5801,16 @@ The jMock library
                                          (not (string-suffix? "-sources.jar" name)))))))
                    #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-jmock" ,java-jmock-1)
-       ;; This is necessary because of what seems to be a race condition.
-       ;; This package would sometimes fail to build because hamcrest-core.jar
-       ;; could not be found, even though it is built as part of this package.
-       ;; Adding java-hamcrest-core appears to fix this problem.  See
-       ;; https://debbugs.gnu.org/31390 for more information.
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)
-       ,@(package-inputs java-hamcrest-core)))))
+     (modify-inputs (package-inputs java-hamcrest-core)
+       (prepend java-junit
+                java-jmock-1
+                ;; This is necessary because of what seems to be a race condition.
+                ;; This package would sometimes fail to build because hamcrest-core.jar
+                ;; could not be found, even though it is built as part of this package.
+                ;; Adding java-hamcrest-core appears to fix this problem.  See
+                ;; https://debbugs.gnu.org/31390 for more information.
+                java-hamcrest-core
+                java-easymock)))))
 
 (define-public java-jopt-simple
   (package
@@ -5870,12 +5884,12 @@ overly clever.")
      `(#:build-target "jar"
        #:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest ".*.jar$")))))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest ".*.jar$")))))
        #:phases
        (modify-phases %standard-phases
          ;; We want to build the jar in the build phase and run the tests
@@ -5884,14 +5898,12 @@ overly clever.")
            (lambda _
              (substitute* "build.xml"
                (("name=\"jar\" depends=\"test\"")
-                "name=\"jar\" depends=\"compile\""))
-             #t))
+                "name=\"jar\" depends=\"compile\""))))
          ;; There is no install target.
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/math/")
     (synopsis "Apache Commons mathematics library")
     (description "Commons Math is a library of lightweight, self-contained
@@ -5932,11 +5944,9 @@ available in the Java programming language or Commons Lang.")
              ;; respectively.
              (delete-file-recursively "jmh-archetypes"))))))
     (propagated-inputs
-     `(("java-jopt-simple" ,java-jopt-simple-4)
-       ("java-commons-math3" ,java-commons-math3)))
+     (list java-jopt-simple-4 java-commons-math3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjdk.java.net/projects/code-tools/jmh/")
     (synopsis "Benchmark harness for the JVM")
     (description "JMH is a Java harness for building, running, and analysing
@@ -5960,23 +5970,21 @@ targeting the JVM.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit"))
-             (easymock (assoc-ref %build-inputs "java-easymock")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest "jar$")))
-               (string-append "-Deasymock.jar=" easymock
-                              "/share/java/easymock.jar")))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit"))
+                (easymock #$(this-package-native-input "java-easymock")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest "jar$")))
+                  (string-append "-Deasymock.jar=" easymock
+                                 "/share/java/easymock.jar")))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
            (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-hamcrest-core java-easymock))
     (home-page "https://commons.apache.org/collections/")
     (synopsis "Collections framework")
     (description "The Java Collections Framework is the recognised standard
@@ -6100,19 +6108,18 @@ setter and getter method.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Djunit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Djunit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-javadoc ant-build-javadoc)
          (replace 'install (install-from-pom "pom.xml"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-39)))
+     (list apache-commons-parent-pom-39))
     (home-page "https://commons.apache.org/io/")
     (synopsis "Common useful IO related classes")
     (description "Commons-IO contains utility classes, stream implementations,
@@ -6135,9 +6142,9 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6150,7 +6157,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-exec/")
     (synopsis "Common program execution related classes")
     (description "Commons-Exec simplifies executing external processes.")
@@ -6171,11 +6178,11 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$")))
-             "-Dmaven.compiler.source=1.7"
-             "-Dmaven.compiler.target=1.7")
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$")))
+                "-Dmaven.compiler.source=1.7"
+                "-Dmaven.compiler.target=1.7")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6195,8 +6202,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-commons-lang
   (package
@@ -6228,7 +6234,7 @@ time/FastDateFormatTest.java"
          (replace 'install (install-jars "target"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6274,7 +6280,7 @@ included:
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-48)))
+     (list apache-commons-parent-pom-48))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6344,9 +6350,9 @@ in the @code{java.lang} package.  The following classes are included:
              #t))
          (replace 'install (install-jars "build")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (home-page "https://commons.apache.org/proper/commons-bsf")
     (synopsis "Bean Scripting Framework")
     (description "The Bean Scripting Framework (BSF) is a set of Java classes
@@ -6382,7 +6388,7 @@ these scripting language engines.")
        ("java-jdom" ,java-jdom)
        ("java-commons-beanutils" ,java-commons-beanutils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/jxpath/")
     (synopsis "Simple interpreter of an expression language called XPath.")
     (description "The org.apache.commons.jxpath package defines a simple
@@ -6409,12 +6415,9 @@ contexts, DOM etc, including mixtures thereof.")
        (list "**/PerformanceTest.java")))
     (build-system ant-build-system)
     (inputs
-     `(("java-cglib" ,java-cglib)))
+     (list java-cglib))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-asm" ,java-asm)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-junit java-hamcrest-core java-asm java-objenesis))
     (home-page "https://commons.apache.org/proper/commons-pool/")
     (synopsis "Object-pooling API in Java")
     (description "The commons-pool package provides an object-pooling API
@@ -6443,7 +6446,7 @@ creating new pool implementations.")
        ("java-commons-logging" ,java-commons-logging-minimal)
        ("java-jboss-transaction-api-spec" ,java-jboss-transaction-api-spec)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (build-system ant-build-system)
     (home-page "https://commons.apache.org/proper/commons-dbcp/")
     (synopsis "Database Connection Pool for Java")
@@ -6485,12 +6488,10 @@ reduce that load.")
                (delete-file "admin/servlet/JCSAdminServlet.java"))
              #t)))))
     (propagated-inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-dbcp" ,java-commons-dbcp)))
+     (list java-classpathx-servletapi java-commons-logging-minimal
+           java-commons-httpclient java-commons-dbcp))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-jcs/")
     (synopsis "Distributed caching system in Java")
     (description "JCS is a distributed caching system written in Java.  It
@@ -6608,9 +6609,9 @@ It provides packages in the @code{javax.annotations} namespace.")
              #t))
          (replace 'install (install-from-pom "guava/pom.xml")))))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (propagated-inputs
-     `(("java-guava-parent-pom" ,java-guava-parent-pom)))
+     (list java-guava-parent-pom))
     (home-page "https://github.com/google/guava")
     (synopsis "Google core libraries for Java")
     (description "Guava is a set of core libraries that includes new
@@ -6733,10 +6734,7 @@ used with any logging implementation at runtime.")
                  (("import org.mockito.cglib") "import net.sf.cglib")))
              #t)))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-objenesis java-cglib java-hamcrest-core))
     (home-page "http://mockito.org")
     (synopsis "Mockito is a mock library for Java")
     (description "Mockito is a mocking library for Java which lets you write
@@ -6764,11 +6762,9 @@ it records all mock invocations, including methods arguments.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-lang3" ,java-commons-lang3)))
+     (list java-commons-logging-minimal java-commons-lang3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://hc.apache.org/httpcomponents-core-4.4.x/index.html")
     (synopsis "Low level HTTP transport components")
     (description "HttpCore is a set of low level HTTP transport components
@@ -6790,9 +6786,8 @@ This package provides the blocking I/O model library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-nio") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-hamcrest-core)))
     (description "HttpCore is a set of low level HTTP transport components
 that can be used to build custom client and server side HTTP services with a
 minimal footprint.  HttpCore supports two I/O models: blocking I/O model based
@@ -6812,10 +6807,9 @@ NIO.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-ab") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-commons-cli
+                java-hamcrest-core)))
     (synopsis "Apache HttpCore benchmarking tool")
     (description "This package provides the HttpCore benchmarking tool.  It is
 an Apache AB clone based on HttpCore.")))
@@ -6840,12 +6834,12 @@ an Apache AB clone based on HttpCore.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpclient") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-mockito" ,java-mockito-1)
-       ("java-junit" ,java-junit)))
+     (list java-commons-logging-minimal
+           java-commons-codec
+           java-hamcrest-core
+           java-httpcomponents-httpcore
+           java-mockito-1
+           java-junit))
     (home-page "https://hc.apache.org/httpcomponents-client-ga/")
     (synopsis "HTTP client library for Java")
     (description "Although the @code{java.net} package provides basic
@@ -6866,10 +6860,8 @@ standards and recommendations.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpmime") #t)))))
     (inputs
-     `(("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-httpcomponents-httpclient java-httpcomponents-httpcore
+           java-junit java-hamcrest-core))))
 
 (define-public java-commons-net
   (package
@@ -6890,8 +6882,7 @@ standards and recommendations.")
        #:tests? #f
        #:jar-name "commons-net.jar"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/net/")
     (synopsis "Client library for many basic Internet protocols")
     (description "The Apache Commons Net library implements the client side of
@@ -6918,7 +6909,7 @@ fundamental protocol access, not higher-level abstractions.")
        (modify-phases %standard-phases
          (replace 'install (install-jars "dist")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://www.jcraft.com/jsch/")
     (synopsis "Pure Java implementation of SSH2")
     (description "JSch is a pure Java implementation of SSH2.  JSch allows you
@@ -6961,11 +6952,9 @@ programs.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-xz" ,java-xz)
-       ("apache-commons-parent-pom" ,apache-commons-parent-pom-41)))
+     (list java-xz apache-commons-parent-pom-41))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://commons.apache.org/proper/commons-compress/")
     (synopsis "Java library for working with compressed files")
     (description "The Apache Commons Compress library defines an API for
@@ -7054,7 +7043,7 @@ components.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-core.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "https://www.osgi.org")
     (synopsis "Core module of OSGi framework")
     (description
@@ -7081,8 +7070,7 @@ the OSGi Core module.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-service-event.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)
-       ("java-osgi-core" ,java-osgi-core)))
+     (list java-osgi-annotation java-osgi-core))
     (home-page "https://www.osgi.org")
     (synopsis "OSGi service event module")
     (description
@@ -7109,7 +7097,7 @@ the OSGi @code{org.osgi.service.event} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-osgi.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse Equinox OSGi framework")
     (description "This package provides an implementation of the OSGi Core
@@ -7134,7 +7122,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-common.jar"))
     (inputs
-     `(("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Common Eclipse runtime")
     (description "This package provides the common Eclipse runtime.")
@@ -7158,8 +7146,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-jobs.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse jobs mechanism")
     (description "This package provides the Eclipse jobs mechanism.")
@@ -7183,9 +7170,8 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-registry.jar"))
     (inputs
-     `(("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-jobs java-eclipse-equinox-common
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse extension registry support")
     (description "This package provides support for the Eclipse extension
@@ -7210,10 +7196,8 @@ registry.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-app.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-osgi-service-event" ,java-osgi-service-event)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi java-osgi-service-event))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Equinox application container")
     (description "This package provides the Equinox application container for
@@ -7238,9 +7222,8 @@ Eclipse.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-preferences.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse preferences mechanism")
     (description "This package provides the Eclipse preferences mechanism with
@@ -7265,10 +7248,8 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-contenttype.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry java-eclipse-osgi))
     (home-page "http://www.eclipse.org/")
     (synopsis "Eclipse content mechanism")
     (description "This package provides the Eclipse content mechanism in the
@@ -7293,13 +7274,13 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-runtime.jar"))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-jobs
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core runtime")
     (description "This package provides the Eclipse core runtime with the
@@ -7324,9 +7305,8 @@ module @code{org.eclipse.core.runtime}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-filesystem.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core file system")
     (description "This package provides the Eclipse core file system with the
@@ -7351,11 +7331,9 @@ module @code{org.eclipse.core.filesystem}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-expressions.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core expression language")
     (description "This package provides the Eclipse core expression language
@@ -7380,11 +7358,9 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-variables.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core variables")
     (description "This package provides the Eclipse core variables module
@@ -7409,14 +7385,14 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-ant-core.jar"))
     (inputs
-     `(("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-core-variables" ,java-eclipse-core-variables)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-core-contenttype
+           java-eclipse-core-runtime
+           java-eclipse-core-variables
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Ant build tool core libraries")
     (description "This package provides the ant build tool core libraries with
@@ -7441,16 +7417,16 @@ the module @code{org.eclipse.ant.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-resources.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-expressions" ,java-eclipse-core-expressions)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-ant-core" ,java-eclipse-ant-core)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-core-contenttype
+           java-eclipse-core-expressions
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-runtime
+           java-eclipse-ant-core
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core resource management")
     (description "This package provides the Eclipse core resource management
@@ -7475,10 +7451,8 @@ module @code{org.eclipse.core.resources}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-compare-core.jar"))
     (inputs
-     `(("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-core-runtime java-eclipse-equinox-common
+           java-eclipse-osgi java-icu4j))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core compare support")
     (description "This package provides the Eclipse core compare support
@@ -7503,16 +7477,16 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-team-core.jar"))
     (inputs
-     `(("java-eclipse-compare-core" ,java-eclipse-compare-core)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-compare-core
+           java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse team support core")
     (description "This package provides the Eclipse team support core module
@@ -7537,7 +7511,7 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-commands.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)))
+     (list java-eclipse-equinox-common))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core commands")
     (description "This package provides Eclipse core commands in the module
@@ -7589,9 +7563,8 @@ module @code{org.eclipse.compare.core}.")
                 "Positions.put(category, new ArrayList<Position>());"))
              #t)))))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-core-commands" ,java-eclipse-core-commands)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-equinox-common java-eclipse-core-commands
+           java-icu4j))
     (home-page "http://www.eclipse.org/platform")
     (synopsis "Eclipse text library")
     (description "Platform Text is part of the Platform UI project and
@@ -7634,17 +7607,17 @@ and contributes the Eclipse default text editor.")
                          (find-files "." ".*.(props|properties|rsc)")))
              #t)))))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-eclipse-text" ,java-eclipse-text)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-osgi
+           java-eclipse-text))
     (home-page "https://www.eclipse.org/jdt")
     (synopsis "Java development tools core libraries")
     (description "This package provides the core libraries of the Eclipse Java
@@ -7670,7 +7643,7 @@ development tools.")
        #:jar-name "eclipse-jdt-compiler-apt.jar"
        #:jdk ,openjdk11))
     (inputs
-     `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core)))
+     (list java-eclipse-jdt-core))
     (home-page "https://www.eclipse.org/jdt/apt/")
     (synopsis "Annotation processing tool")
     (description "APT stands for Annotation Processing Tool.  APT provides a
@@ -7716,7 +7689,7 @@ definition intended to be inherited by other packages.")
              (copy-recursively "org.eclipse.lsp4j.debug/src/main/xtend-gen"
                                "org.eclipse.lsp4j.debug/src/main/java"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
      `(("java-gson" ,java-gson-2.8.6)
        ("java-eclipse-lsp4j-generaor" ,java-eclipse-lsp4j-generator)
@@ -7738,7 +7711,7 @@ LSP4J Java bindings for the Debug Server Protocol.")))
        #:tests? #f; no tests
        #:source-dir "org.eclipse.lsp4j.generator/src/main/java"))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)))
+     (list java-eclipse-lsp4j-jsonrpc))
     (synopsis "Eclipse LSP4J Generator")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7754,9 +7727,9 @@ LSP4J code generator for Language Server Protocol classes.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-gson" ,java-gson-2.8.6)))
+     (list java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7772,10 +7745,9 @@ JSON-RPC implementation.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc.debug/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc.debug/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-       ("java-gson" ,java-gson-2.8.6)))
+     (list java-eclipse-lsp4j-jsonrpc java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation (debug protocol)")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7802,9 +7774,9 @@ JSON-RPC implementation's debug protocol.")))
        #:source-dir "org.eclipse.xtext.xbase.lib/src"
        #:test-dir "org.eclipse.xtext.xbase.lib.tests/src"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (home-page "https://www.eclipse.org/Xtext/")
     (synopsis "Eclipse Xbase Runtime Library")
     (description "This package contains runtime libraries for Xbase languages
@@ -7853,8 +7825,7 @@ JavaMail API.")
      `(#:tests? #f ; tests require unpackaged software
        #:jar-name "log4j-api.jar"
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7866,9 +7837,7 @@ JavaMail API.")
          (add-after 'enter-dir 'delete-tests
            (lambda _ (delete-file-recursively "src/test") #t)))))
     (inputs
-     `(("java-osgi-core" ,java-osgi-core)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-osgi-core java-hamcrest-core java-junit))
     (properties '((cpe-name . "log4j")))
     (home-page "https://logging.apache.org/log4j/2.x/")
     (synopsis "API module of the Log4j logging framework for Java")
@@ -7915,8 +7884,7 @@ Java.")
        #:jar-name "log4j-core.jar"
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7964,8 +7932,7 @@ logging framework for Java.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/cli/")
     (synopsis "Command line arguments and options parsing library")
     (description "The Apache Commons CLI library provides an API for parsing
@@ -8022,10 +7989,9 @@ This is a part of the Apache Commons Project.")
                 "return;"))))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-commons-lang3" ,java-commons-lang3)
-       ("java-junit" ,java-junit)))
+     (list java-commons-lang3 java-junit))
     (propagated-inputs
-      `(("apache-commons-parent-pom" ,apache-commons-parent-pom-50)))
+      (list apache-commons-parent-pom-50))
     (home-page "https://commons.apache.org/codec/")
     (synopsis "Common encoders and decoders such as Base64, Hex, Phonetic and URLs")
     (description "The codec package contains simple encoder and decoders for
@@ -8056,7 +8022,7 @@ This is a part of the Apache Commons Project.")
          (replace 'install (install-jars "dist"))
          (add-after 'install 'install-doc (install-javadoc "dist/docs/api")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/daemon/")
     (synopsis "Library to launch Java applications as daemons")
     (description "The Daemon package from Apache Commons can be used to
@@ -8086,8 +8052,7 @@ This is a part of the Apache Commons Project.")
     (build-system ant-build-system)
     (arguments `(#:jar-name "javaewah.jar"))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/lemire/javaewah")
     (synopsis "Compressed alternative to the Java @code{BitSet} class")
     (description "This is a word-aligned compressed variant of the Java
@@ -8145,10 +8110,9 @@ more efficient storage-wise than an uncompressed bitmap (as implemented in the
          (replace 'install
            (install-from-pom "slf4j-api/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-parent" ,java-slf4j-parent)))
+     (list java-slf4j-parent))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple logging facade for Java")
     (description "The Simple Logging Facade for Java (SLF4J) serves as a
@@ -8198,10 +8162,9 @@ time.")
          (replace 'install
            (install-from-pom "slf4j-simple/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-api" ,java-slf4j-api)))
+     (list java-slf4j-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple implementation of simple logging facade for Java")
     (description "SLF4J binding for the Simple implementation, which outputs
@@ -8695,9 +8658,9 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
        #:source-dir "org.abego.treelayout/src/main/java"
        #:test-dir "org.abego.treelayout/src/test"))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (home-page "http://treelayout.sourceforge.net")
     (synopsis "Tree Layout Algorithm in Java")
     (description "TreeLayout creates tree layouts for arbitrary trees.  It is
@@ -8887,14 +8850,14 @@ sources by ANTLR.")
                (invoke "antlr3" "SourceGenTriggers.g"))
              #t)))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-antlr4-runtime" ,java-antlr4-runtime)
-       ("java-icu4j" ,java-icu4j)
-       ("java-jsonp-api" ,java-jsonp-api)
-       ("java-stringtemplate" ,java-stringtemplate)
-       ("java-treelayout" ,java-treelayout)))
+     (list antlr3
+           java-antlr4-runtime
+           java-icu4j
+           java-jsonp-api
+           java-stringtemplate
+           java-treelayout))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (synopsis "Parser and lexer generator in Java")
     (description "ANTLR (ANother Tool for Language Recognition) is a powerful
 parser generator for reading, processing, executing, or translating structured
@@ -8924,7 +8887,7 @@ parse trees.")))
                (chmod "build.xml" #o644)
                #t))))))
     (inputs
-     `(("java-treelayout" ,java-treelayout)))))
+     (list java-treelayout))))
 
 (define-public antlr4-4.1
   (package
@@ -9103,7 +9066,7 @@ the runtime library of ANTLR.")))
                 "dir=\"${test.home}\""))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))))
+     (list java-junit))))
 
 (define-public java-microemulator-cldc
   (package
@@ -9516,7 +9479,7 @@ and service platform for the Java programming language.")
      `(#:jar-name "osgi-service-log.jar"
        #:tests? #f)); no tests
     (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)))
+     (list java-osgi-framework))
     (home-page "https://www.osgi.org")
     (synopsis "Provides methods for bundles to write messages to the log")
     (description
@@ -10167,8 +10130,7 @@ Processor.  It also includes the default implementation of handler types
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core))
     (home-page "https://github.com/FasterXML/jackson-databind")
     (synopsis "Data-binding functionality and tree-model for the Jackson Data Processor")
     (description "This package contains the general-purpose data-binding
@@ -10216,11 +10178,10 @@ configuration.")
              (copy-recursively "jaxb/src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "Jaxb annotations jackson module")
     (description "This package is the jaxb annotations module for jackson.")
@@ -10261,13 +10222,10 @@ configuration.")
                  (("@projectartifactid@") "jackson-module-mrbean")))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-fasterxml-jackson-annotations"
-        ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-asm java-fasterxml-jackson-annotations
+           java-fasterxml-jackson-core java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "POJO type materialization for Java")
     (description "This package implements POJO type materialization.
@@ -10331,10 +10289,8 @@ of deserialization.")
                  (("@projectartifactid@") "jackson-dataformat-yaml")))
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
-       ("java-snakeyaml" ,java-snakeyaml)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind java-snakeyaml))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -10563,9 +10519,9 @@ the subsequent value resolution at any given level.")
              #t))
          (replace 'install (install-jars "dist")))))
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/nhatminhle/cofoja")
     (synopsis "Contracts for Java")
     (description "Contracts for Java, or Cofoja for short, is a contract
@@ -10678,12 +10634,12 @@ the dependency is said to be unsatisfied, and the application is broken.")
          (replace 'install
            (install-from-pom "core/pom.xml")))))
     (propagated-inputs
-     `(("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-guava" ,java-guava)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice-parent-pom" ,java-guice-parent-pom)))
+     (list java-aopalliance
+           java-asm
+           java-cglib
+           java-guava
+           java-javax-inject
+           java-guice-parent-pom))
     (home-page "https://github.com/google/guice")
     (synopsis "Lightweight dependency injection framework")
     (description "Guice is a lightweight dependency injection framework for
@@ -10892,11 +10848,9 @@ annotations.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-bsf" ,java-commons-bsf)))
+     (list java-classpathx-servletapi java-commons-bsf))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("javacc" ,javacc-3)))
+     (list java-junit javacc-3))
     (home-page "http://beanshell.org/")
     (synopsis "Lightweight Scripting for Java")
     (description "BeanShell is a small, free, embeddable Java source
@@ -10981,15 +10935,15 @@ those in Perl and JavaScript.")
          "**/MessageFormatter_format_Test.java"
          "**/internal/*/*_assert*_Test.java")))
     (inputs
-     `(("java-fest-util" ,java-fest-util)))
+     (list java-fest-util))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-fest-test" ,java-fest-test)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-mockito" ,java-mockito-1)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)))
+     (list java-junit
+           java-fest-test
+           java-hamcrest-core
+           java-mockito-1
+           java-cglib
+           java-objenesis
+           java-asm))
     (home-page "https://github.com/alexruiz/fest-assert-2.x")
     (synopsis "FEST fluent assertions")
     (description "FEST-Assert provides a fluent interface for assertions.")
@@ -11113,9 +11067,7 @@ to use.")
                        "org.testng.TestNG" "-testclass"
                        "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))
       (native-inputs
-       `(("java-testng" ,java-testng)
-         ("java-fest-util" ,java-fest-util)
-         ("java-fest-assert" ,java-fest-assert)))
+       (list java-testng java-fest-util java-fest-assert))
       (home-page "https://github.com/neilalexander/jnacl")
       (synopsis "Java implementation of NaCl")
       (description "Pure Java implementation of the NaCl: Networking and
@@ -11219,11 +11171,9 @@ configuration and string construction.")
                (invoke "java" "javacc" "Parser.jj"))
              #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("javacc" ,javacc-4)))
+     (list java-junit java-hamcrest-core javacc-4))
     (home-page "https://commons.apache.org/proper/commons-jexl/")
     (synopsis "Java Expression Language ")
     (description "JEXL is a library intended to facilitate the implementation
@@ -11309,7 +11259,7 @@ algorithms and xxHash hashing algorithm.")
          (replace 'install
            (install-jars "build/artifacts/jdk1.5/jars")))))
     (inputs
-     `(("java-javax-mail" ,java-javax-mail)))
+     (list java-javax-mail))
     (native-inputs
      `(("unzip" ,unzip)
        ("junit" ,java-junit)
@@ -11383,7 +11333,7 @@ message queues or resource locking.")
            (lambda _
              (delete-file "src/main/java/module-info.java"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/conversant/disruptor")
     (synopsis "High performance intra-thread communication")
     (description "Conversant Disruptor is the highest performing intra-thread
@@ -11411,8 +11361,7 @@ particularly simple design.")
        #:source-dir "jctools-core/src/main/java"
        #:test-dir "jctools-core/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-all" ,java-hamcrest-all)))
+     (list java-junit java-hamcrest-all))
     (home-page "https://github.com/JCTools/JCTools")
     (synopsis "Concurrency tools for Java")
     (description "This library implements concurrent data structures that are
@@ -11510,7 +11459,7 @@ streams, etc.")
        #:source-dir "powermock-reflect/src/main/java"
        #:test-dir "powermock-reflect/src/test"))
     (inputs
-     `(("java-objenesis" ,java-objenesis)))
+     (list java-objenesis))
     (native-inputs
      `(("junit" ,java-junit)
        ("cglib" ,java-cglib)
@@ -11754,7 +11703,7 @@ protocol-independent framework to build mail and messaging applications.")
          "**/RouterSpecTest.java"
          "**/ProxyTest.java")))
     (inputs
-     `(("java-jnacl" ,java-jnacl)))
+     (list java-jnacl))
     (native-inputs
      `(("java-hamcrest-core" ,java-hamcrest-core)
        ("junit" ,java-junit)))
@@ -11792,8 +11741,7 @@ protocol-independent framework to build mail and messaging applications.")
          ;; Undeterministic failure, seems to affect mostly ci
          "**/GarbageCollectedMemoryPoolTest.java")))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-lz4" ,java-lz4)))
+     (list java-slf4j-api java-lz4))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-all)
@@ -11886,7 +11834,7 @@ outputting XML data from Java code.")
        ("log4j-core" ,java-log4j-core)
        ("logging" ,java-commons-logging-minimal)))
     (propagated-inputs
-     `(("java-geronimo-parent-pom" ,java-geronimo-parent-pom)))
+     (list java-geronimo-parent-pom))
     (native-inputs
      `(("junit" ,java-junit)))
     (home-page "https://geronimo.apache.org/maven/xbean/3.6/xbean-reflect/")
@@ -12002,7 +11950,7 @@ public Bundle getBundle()"))
        #:source-dir "xbean-asm-util/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs '())))
 
 (define-public java-geronimo-xbean-finder
@@ -12014,15 +11962,14 @@ public Bundle getBundle()"))
        #:source-dir "xbean-finder/src/main/java"
        #:test-dir "xbean-finder/src/test"))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-bundleutils" ,java-geronimo-xbean-bundleutils)
-       ("java-geronimo-xbean-asm-util" ,java-geronimo-xbean-asm-util)
-       ("java-osgi-service-packageadmin" ,java-osgi-service-packageadmin)
-       ("java-osgi-framework" ,java-osgi-framework)))
+     (list java-slf4j-api
+           java-asm
+           java-geronimo-xbean-bundleutils
+           java-geronimo-xbean-asm-util
+           java-osgi-service-packageadmin
+           java-osgi-framework))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-gson
   (package
@@ -12041,8 +11988,7 @@ public Bundle getBundle()"))
        #:source-dir "gson/src/main/java"
        #:test-dir "gson/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/google/gson")
     (synopsis "Java serialization/deserialization library from/to JSON")
     (description "Gson is a Java library that can be used to convert Java
@@ -12125,9 +12071,7 @@ including pre-existing objects that you do not have source-code of.")
          (replace 'install
            (install-from-pom "hawtjni-runtime/pom.xml")))))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-finder" ,java-geronimo-xbean-finder)))
+     (list java-commons-cli java-asm java-geronimo-xbean-finder))
     (home-page "https://fusesource.github.io/hawtjni/")
     (synopsis "JNI code generator")
     (description "HawtJNI is a code generator that produces the JNI code needed
@@ -12192,7 +12136,7 @@ that is part of the SWT Tools project.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hawtjni" ,java-hawtjni)))
+     (list java-hawtjni))
     (home-page "https://fusesource.github.io/jansi/")
     (synopsis "Native library for jansi")
     (description "This package provides the native library for jansi, a small
@@ -12303,10 +12247,9 @@ sequences to format your console output which works on every platform.")
          (replace 'install
            (install-from-pom "jansi/pom.xml")))))
     (propagated-inputs
-     `(("java-jansi-native" ,java-jansi-native)))
+     (list java-jansi-native))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-jboss-el-api-spec
   (package
@@ -12334,7 +12277,7 @@ sequences to format your console output which works on every platform.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/jboss/jboss-el-api_spec")
     (synopsis "JSR-341 expression language 3.0 API")
     (description "This package contains an implementation of the JSR-341
@@ -12405,13 +12348,10 @@ specific events.")
          (replace 'install
            (install-from-pom "api/pom.xml")))))
     (propagated-inputs
-     `(("java-javax-inject" ,java-javax-inject)
-       ("java-jboss-el-api-spec" ,java-jboss-el-api-spec)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)
-       ("java-weld-parent-pom" ,java-weld-parent-pom)))
+     (list java-javax-inject java-jboss-el-api-spec
+           java-jboss-interceptors-api-spec java-weld-parent-pom))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-testng java-hamcrest-core))
     (home-page "http://cdi-spec.org/")
     (synopsis "Contexts and Dependency Injection APIs")
     (description "Java-cdi-api contains the required APIs for Contexts and
@@ -12438,10 +12378,9 @@ Dependency Injection (CDI).")
        ;; Contains only interfaces and base classes (no test)
        #:test-exclude (list "**/test*/**.java")))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.joda.org/joda-convert/")
     (synopsis "Conversion between Objects and Strings")
     (description "Joda-Convert provides a small set of classes to aid
@@ -12505,11 +12444,9 @@ wider problem of Object to Object transformation.")
              (copy-recursively "src/test/resources" "build/test-classes")
              #t)))))
     (inputs
-     `(("java-joda-convert" ,java-joda-convert)))
+     (list java-joda-convert))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("tzdata" ,tzdata)))
+     (list java-junit java-hamcrest-core tzdata))
     (home-page "https://www.joda.org/joda-time/")
     (synopsis "Replacement for the Java date and time classes")
     (description "Joda-Time is a replacement for the Java date and time
@@ -12558,8 +12495,7 @@ classes prior to Java SE 8.")
             #t))
          (replace 'install (install-jars "build")))))
     (inputs
-     `(("java-apache-xml-commons-resolver" ,java-apache-xml-commons-resolver)
-       ("java-jaxp" ,java-jaxp)))
+     (list java-apache-xml-commons-resolver java-jaxp))
     (home-page "https://xerces.apache.org/xerces2-j/")
     (synopsis "Validating XML parser for Java with DOM level 3 support")
     (description "The Xerces2 Java parser is the reference implementation of
@@ -12646,7 +12582,7 @@ generator for Java.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://jline.github.io")
     (synopsis "Console input handling library")
     (description "JLine is a Java library for handling console input.  It is
@@ -12669,23 +12605,22 @@ features that bring it on par with the Z shell line editor.")
      `(#:jdk ,icedtea-8
        ,@(package-arguments java-jline)))
     (inputs
-     `(("java-jansi" ,java-jansi-1)
-       ("java-jansi-native" ,java-jansi-native)))
-    (native-inputs
-     `(("java-powermock-modules-junit4" ,java-powermock-modules-junit4)
-       ("java-powermock-modules-junit4-common" ,java-powermock-modules-junit4-common)
-       ("java-powermock-api-easymock" ,java-powermock-api-easymock)
-       ("java-powermock-api-support" ,java-powermock-api-support)
-       ("java-powermock-core" ,java-powermock-core)
-       ("java-powermock-reflect" ,java-powermock-reflect)
-       ("java-easymock" ,java-easymock)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-cglib" ,java-cglib)
-       ("java-junit" ,java-junit)
-       ("java-hawtjni" ,java-hawtjni)))))
+     (list java-jansi-1 java-jansi-native))
+    (native-inputs
+     (list java-powermock-modules-junit4
+           java-powermock-modules-junit4-common
+           java-powermock-api-easymock
+           java-powermock-api-support
+           java-powermock-core
+           java-powermock-reflect
+           java-easymock
+           java-jboss-javassist
+           java-objenesis
+           java-asm
+           java-hamcrest-core
+           java-cglib
+           java-junit
+           java-hawtjni))))
 
 (define-public java-jline-terminal
   (package
@@ -12732,7 +12667,7 @@ features that bring it on par with the Z shell line editor.")
                         (string-append build "/jar/" jar-name)
                         (find-files ".")))))))))
     (inputs
-     `(("ncurses" ,ncurses))); infocmp
+     (list ncurses)); infocmp
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine Terminal API and implementations")
     (description "JLine is a Java library for handling console input.  It is
@@ -12770,10 +12705,9 @@ This package includes the @var{Terminal} API and implementations.")
              ;; conflicts with build directory generated by ant-build-system
              (delete-file "build"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-easymock))
     (inputs
-     `(("java-jline-terminal" ,java-jline-terminal)))
+     (list java-jline-terminal))
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine line reader")
     (description "JLine is a Java library for handling console input.  It is
@@ -12842,8 +12776,7 @@ against expected outcomes.")
        #:source-dir "xmlunit-legacy/src/main/java"
        #:test-dir "xmlunit-legacy/src/test"))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))
+     (list java-xmlunit java-junit))
     (native-inputs
      `(("java-mockito-1" ,java-mockito-1)))))
 
@@ -12875,8 +12808,7 @@ against expected outcomes.")
              (copy-recursively (assoc-ref inputs "resources") "test-resources")
              #t)))))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))))
+     (list java-xmlunit java-junit))))
 
 (define-public java-openchart2
   (package
@@ -12908,9 +12840,7 @@ against expected outcomes.")
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list unzip java-junit java-hamcrest-core))
     (home-page "https://approximatrix.com/products/openchart2/")
     (synopsis "Simple plotting for Java")
     (description "Openchart2 provides a simple, yet powerful, interface for
@@ -13001,12 +12931,12 @@ authentication, HTTP state management, and HTTP connection management.")
                  "commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/hdfs"))
              #t)))))
     (inputs
-     `(("java-commons-collections4" ,java-commons-collections4)
-       ("java-commons-compress" ,java-commons-compress)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-net" ,java-commons-net)
-       ("java-jsch" ,java-jsch)))
+     (list java-commons-collections4
+           java-commons-compress
+           java-commons-httpclient
+           java-commons-logging-minimal
+           java-commons-net
+           java-jsch))
     (home-page "https://commons.apache.org/proper/commons-vfs/")
     (synopsis "Java file system library")
     (description "Commons VFS provides a single API for accessing various
@@ -13080,7 +13010,7 @@ from ORO, Inc.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                ;; Since we removed the bundled ant.jar, give the correct path
-               (("lib/ant.jar") (string-append (assoc-ref inputs "ant") "/lib/ant.jar"))
+               (("lib/ant.jar") (search-input-file inputs "/lib/ant.jar"))
                ;; We removed generated native libraries. We can only rebuild one
                ;; so don't fail if we can't find a native library for another architecture.
                (("zipfileset") "zipfileset erroronmissingarchive=\"false\""))
@@ -13099,12 +13029,9 @@ from ORO, Inc.")
          (replace 'install
            (install-jars "build")))))
     (inputs
-     `(("libffi" ,libffi)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)))
+     (list libffi libx11 libxt))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list gcc-7 java-junit java-hamcrest-core))
     (home-page "https://github.com/java-native-access/jna")
     (synopsis "Access to native shared libraries from Java")
     (description "JNA provides Java programs easy access to native shared
@@ -13134,8 +13061,7 @@ Java method invocation.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "nbproject/project.properties"
                (("../../build/jna.jar")
-                (string-append (assoc-ref inputs "java-native-access")
-                               "/share/java/jna.jar"))
+                (search-input-file inputs "/share/java/jna.jar"))
                (("../../lib/hamcrest-core-.*.jar")
                 (car (find-files (assoc-ref inputs "java-hamcrest-core")
                                  "jar$")))
@@ -13146,7 +13072,7 @@ Java method invocation.")
          (replace 'install
            (install-jars "dist")))))
     (inputs
-     `(("java-native-access" ,java-native-access)))
+     (list java-native-access))
     (synopsis "Cross-platform mappings for jna")
     (description "java-native-access-platform has cross-platform mappings
 and mappings for a number of commonly used platform functions, including a
@@ -13186,7 +13112,7 @@ will be allowed to use these programs for authentication.")
        #:source-dir "jsch-agent-proxy-sshagent/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "Proxy to ssh-agent")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13201,8 +13127,7 @@ ssh-agent.")))
        #:source-dir "jsch-agent-proxy-usocket-jna/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)))
+     (list java-jsch-agentproxy-core java-native-access))
     (synopsis "USocketFactory implementation using JNA")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13217,9 +13142,8 @@ USocketFactory using @dfn{JNA} (Java Native Access).")))
        #:source-dir "jsch-agent-proxy-pageant/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)
-       ("java-native-access-platform" ,java-native-access-platform)))
+     (list java-jsch-agentproxy-core java-native-access
+           java-native-access-platform))
     (synopsis "Proxy to pageant")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13234,7 +13158,7 @@ pageant.")))
        #:source-dir "jsch-agent-proxy-usocket-nc/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "USocketFactory implementation using netcat")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13249,11 +13173,9 @@ USocketFactory using netcat.")))
        #:source-dir "jsch-agent-proxy-connector-factory/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-sshagent" ,java-jsch-agentproxy-sshagent)
-       ("java-jsch-agentproxy-usocket-jna" ,java-jsch-agentproxy-usocket-jna)
-       ("java-jsch-agentproxy-pageant" ,java-jsch-agentproxy-pageant)
-       ("java-jsch-agentproxy-usocket-nc" ,java-jsch-agentproxy-usocket-nc)))
+     (list java-jsch-agentproxy-core java-jsch-agentproxy-sshagent
+           java-jsch-agentproxy-usocket-jna java-jsch-agentproxy-pageant
+           java-jsch-agentproxy-usocket-nc))
     (synopsis "Connector factory for jsch agent proxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a connector factory.")))
@@ -13267,8 +13189,7 @@ and Pageant included in Putty. This component contains a connector factory.")))
        #:source-dir "jsch-agent-proxy-jsch/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch java-jsch-agentproxy-core))
     (synopsis "JSch integration library for agentproxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a library to use
@@ -13346,18 +13267,18 @@ jsch-agent-proxy with JSch.")))
                (chmod ivy #o755)
                #t))))))
     (inputs
-     `(("java-bouncycastle" ,java-bouncycastle)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-commons-collections" ,java-commons-collections)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-lang" ,java-commons-lang)
-       ("java-commons-vfs" ,java-commons-vfs)
-       ("java-jakarta-oro" ,java-jakarta-oro)
-       ("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-connector-factory" ,java-jsch-agentproxy-connector-factory)
-       ("java-jsch-agentproxy-jsch" ,java-jsch-agentproxy-jsch)
-       ("java-junit" ,java-junit)))
+     (list java-bouncycastle
+           java-commons-cli
+           java-commons-collections
+           java-commons-httpclient
+           java-commons-lang
+           java-commons-vfs
+           java-jakarta-oro
+           java-jsch
+           java-jsch-agentproxy-core
+           java-jsch-agentproxy-connector-factory
+           java-jsch-agentproxy-jsch
+           java-junit))
     (home-page "https://ant.apache.org/ivy")
     (synopsis "Dependency manager for the Java programming language")
     (description "Ivy is a tool for managing (recording, tracking, resolving
@@ -13398,20 +13319,19 @@ and reporting) project dependencies.  It is characterized by the following:
          (replace 'install
            (install-from-pom "org.eclipse.sisu.inject/pom.xml")))))
     (propagated-inputs
-     `(("java-guice" ,java-guice)
-       ("java-sisu-inject-parent-pom" ,java-sisu-inject-parent-pom)))
-    (inputs
-     `(("java-guice-servlet" ,java-guice-servlet)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)
-       ("java-junit" ,java-junit)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-jsr305" ,java-jsr305)
-       ("java-jsr250" ,java-jsr250)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-osgi-framework" ,java-osgi-framework)
-       ("java-osgi-util-tracker" ,java-osgi-util-tracker)
-       ("java-testng" ,java-testng)))
+     (list java-guice java-sisu-inject-parent-pom))
+    (inputs
+     (list java-guice-servlet
+           java-javax-inject
+           java-javaee-servletapi
+           java-junit
+           java-slf4j-api
+           java-jsr305
+           java-jsr250
+           java-cdi-api
+           java-osgi-framework
+           java-osgi-util-tracker
+           java-testng))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Classpath scanning, auto-binding, and dynamic auto-wiring")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13501,23 +13421,23 @@ OSGi Service Registry is a goal of this project.")
          (replace 'install
            (install-from-pom "org.eclipse.sisu.plexus/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-sisu-plexus-parent-pom" ,java-sisu-plexus-parent-pom)))
-    (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice" ,java-guice)
-       ("java-guava" ,java-guava)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)))
-    (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-plexus-classworlds
+           java-plexus-utils
+           java-plexus-component-annotations
+           java-cdi-api
+           java-eclipse-sisu-inject
+           java-sisu-plexus-parent-pom))
+    (inputs
+     (list java-osgi-framework
+           java-slf4j-api
+           java-javax-inject
+           java-guice
+           java-guava
+           java-aopalliance
+           java-asm
+           java-cglib))
+    (native-inputs
+     (list java-junit))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Plexus support for the sisu container")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13585,10 +13505,9 @@ and @code{ISimpleCompiler} interfaces.")
              (chdir "janino")
              #t)))))
     (inputs
-     `(("java-commons-compiler" ,java-commons-compiler)))
+     (list java-commons-compiler))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (description "Janino is a Java compiler.  Janino can compile a set of
 source files to a set of class files like @code{javac}, but also compile a
 Java expression, block, class body or source file in memory, load the bytecode
@@ -13686,11 +13605,10 @@ This module lays the groundwork for the other two modules.")
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-logback-core" ,java-logback-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ,@(package-inputs java-logback-core)))
+     (modify-inputs (package-inputs java-logback-core)
+       (prepend java-logback-core java-slf4j-api)))
     (native-inputs
-     `(("groovy" ,groovy)))
+     (list groovy))
     (description "Logback is intended as a successor to the popular log4j project.
 This module can be assimilated to a significantly improved version of log4j.
 Moreover, @code{logback-classic} natively implements the slf4j API so that you
@@ -13730,10 +13648,8 @@ such as log4j or @code{java.util.logging} (JUL).")))
                       (find-files "." "\\.properties$")))
              #t)))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-classpathx-servletapi java-javaewah java-jsch
+           java-slf4j-api))
     (home-page "https://eclipse.org/jgit/")
     (synopsis "Java library implementing the Git version control system")
     (description "JGit is a lightweight, pure Java library implementing the
@@ -13768,9 +13684,7 @@ network protocols, and core version control algorithms.")
                  (("wordinbits") "WORD_IN_BITS"))
                #t))))))
     (inputs
-     `(("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))))
+     (list java-javaewah java-jsch java-slf4j-api))))
 
 (define-public abcl
   (package
@@ -13789,7 +13703,7 @@ network protocols, and core version control algorithms.")
          "abcl-fix-build-xml.patch"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (arguments
      `(#:build-target "abcl.jar"
        #:test-target "abcl.test"
@@ -13884,7 +13798,7 @@ and allows building a Java object model for JSON text using API classes
                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-jsonp-api" ,java-jsonp-api)))
+     (list java-jsonp-api))
     (description "JSON Processing (JSON-P) is a Java API to process (e.g.
 parse, generate, transform and query) JSON messages.  This package contains
 a reference implementation of that API.")))
@@ -13924,7 +13838,7 @@ a reference implementation of that API.")))
                (string-append (assoc-ref outputs "out") "/share/doc/java-xmp"))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.adobe.com/devnet/xmp.html")
     (synopsis "Extensible Metadat Platform (XMP) support in Java")
     (description "Adobe's Extensible Metadata Platform (XMP) is a labeling
@@ -13981,7 +13895,7 @@ library and the API is similar.")
                                "spi/Messages_ru.properties")))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://args4j.kohsuke.org/")
     (synopsis "Command line parser library")
     (description "Args4j is a small Java class library that makes it easy to
@@ -14014,10 +13928,9 @@ parse command line options/arguments in your CUI application.")
                (("/java\">") "\">"))
              #t)))))
     (propagated-inputs
-     `(("java-xmp" ,java-xmp)))
+     (list java-xmp))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (home-page "https://github.com/drewnoakes/metadata-extractor")
     (synopsis "Extract metadata from image and video files")
     (description "Metadata-extractor is a straightforward Java library for
@@ -14064,7 +13977,7 @@ IPTC, XMP, ICC and more formats.")
          (replace 'install
            (install-jars "dist")))))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "https://github.com/blackears/svgSalamander")
     (synopsis "SVG engine for Java")
     (description "SVG Salamander is an SVG engine for Java that's designed
@@ -14093,8 +14006,7 @@ rich interactive menus to charts and graphcs to complex animations.")
        #:source-dir "src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)))
+     (list java-cdi-api java-jboss-interceptors-api-spec))
     (home-page "https://github.com/jboss/jboss-transaction-api_spec")
     (synopsis "Generic transaction management API in Java")
     (description "Java-jboss-transaction-api-spec implements the Transactions
@@ -14235,11 +14147,9 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
          (replace 'install
            (install-jars "build/jar")))))
     (inputs
-     `(("java-guava" ,java-guava)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-jsonp-api" ,java-jsonp-api)))
+     (list java-guava java-jboss-javassist java-jsonp-api))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "http://javaparser.org/")
     (synopsis "Parser for Java")
     (description
@@ -14323,15 +14233,14 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                                                       "/test-model/pcal")
                                        "\\.cfg$"))))
              (replace 'install
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let* ((share (string-append %output "/share/java"))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((share (string-append (assoc-ref outputs "out") "/share/java"))
                         (jar-name "tla2tools.jar"); set in project.properties
                         (jar (string-append ,tlatools
                                             "/dist/" jar-name))
                         (java-cp (string-append share "/" jar-name))
-                        (bin (string-append %output "/bin"))
-                        (java (string-append (assoc-ref inputs "jdk")
-                                             "/bin/java")))
+                        (bin (string-append (assoc-ref outputs "out") "/bin"))
+                        (java (search-input-file inputs "/bin/java")))
                    (install-file jar share)
                    (mkdir-p bin)
                    ;; Generate wrapper scripts for bin/, which invoke common
@@ -14356,16 +14265,15 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                       ("tlc2" . "tlc2.TLC")
                       ("tlc2-repl" . "tlc2.REPL"))))))))))
       (native-inputs
-       `(("java-junit" ,java-junit)
-         ("java-easymock" ,java-easymock)))
+       (list java-junit java-easymock))
       (inputs
-       `(("java-javax-mail" ,java-javax-mail)
-         ("java-gson" ,java-gson-2.8.6)
-         ("java-jline-terminal" ,java-jline-terminal)
-         ("java-jline-reader" ,java-jline-reader)
-         ("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-         ("java-eclipse-lsp4j-jsonrpc-debug" ,java-eclipse-lsp4j-jsonrpc-debug)
-         ("java-eclipse-lsp4j-debug" ,java-eclipse-lsp4j-debug)))
+       (list java-javax-mail
+             java-gson-2.8.6
+             java-jline-terminal
+             java-jline-reader
+             java-eclipse-lsp4j-jsonrpc
+             java-eclipse-lsp4j-jsonrpc-debug
+             java-eclipse-lsp4j-debug))
       (home-page "https://lamport.azurewebsites.net/tla/tools.html")
       (synopsis "TLA+ tools (analyzer, TLC, TLATeX, PlusCal translator)")
       (description "TLA+ is a high-level language for modeling programs and
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index 6d4efe2c92..74a1e6b9be 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -80,14 +81,13 @@
          (use-modules (guix build utils))
          (chdir (assoc-ref %build-inputs "source"))
          (let ((target (string-append %output "/share/javascript/context-menu")))
-           (apply invoke (string-append (assoc-ref %build-inputs "esbuild")
-                                        "/bin/esbuild")
+           (apply invoke (search-input-file %build-inputs "/bin/esbuild")
                   "--bundle"
                   "--tsconfig=tsconfig.json"
                   (string-append "--outdir=" target)
                   (find-files "ts" "\\.ts$"))))))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/zorkow/context-menu")
     (synopsis "Generic context menu")
     (description "This package provides a reimplementation of the MathJax
@@ -209,8 +209,7 @@ be able to view it naturally and easily.")))
        (begin
          (use-modules (guix build utils))
          (chdir (assoc-ref %build-inputs "source"))
-         (let ((esbuild (string-append (assoc-ref %build-inputs "esbuild")
-                                       "/bin/esbuild"))
+         (let ((esbuild (search-input-file %build-inputs "/bin/esbuild"))
                (target (string-append %output "/share/javascript/commander")))
            (invoke esbuild
                    "--bundle"
@@ -220,7 +219,7 @@ be able to view it naturally and easily.")))
                    (string-append "--outfile=" target "/index.min.js")
                    "index.js")))))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/tj/commander.js")
     (synopsis "Library for node.js command-line interfaces")
     (description "Commander.js aims to be the complete solution for node.js
@@ -251,8 +250,7 @@ command-line interfaces.  ")
          (begin
            (use-modules (guix build utils))
            (chdir (assoc-ref %build-inputs "source"))
-           (let ((esbuild (string-append (assoc-ref %build-inputs "esbuild")
-                                         "/bin/esbuild"))
+           (let ((esbuild (search-input-file %build-inputs "/bin/esbuild"))
                  (target (string-append %output "/share/javascript/xmldom-sre")))
              (invoke esbuild
                      "--bundle"
@@ -261,7 +259,7 @@ command-line interfaces.  ")
                      (string-append "--outfile=" target "/dom-parser.min.js")
                      "dom-parser.js")))))
       (native-inputs
-       `(("esbuild" ,esbuild)))
+       (list esbuild))
       (home-page "https://github.com/zorkow/xmldom/")
       (synopsis "DOM parser and XML serializer")
       (description "This is a fork of the xmldom library.  It allows the use
@@ -430,7 +428,7 @@ detection.")
      `(#:javascript-files '("media/js/dataTables.bootstrap.js"
                             "media/js/jquery.dataTables.js")))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://datatables.net")
     (synopsis "DataTables plug-in for jQuery")
     (description "DataTables is a table enhancing plug-in for the jQuery
@@ -580,7 +578,7 @@ external server.")
              (string-append "prefix=" (assoc-ref %outputs "out")))
        #:tests? #f))                    ; no tests
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (home-page "https://mujs.com/")
     (synopsis "JavaScript interpreter written in C")
     (description "MuJS is a lightweight Javascript interpreter designed for
@@ -637,12 +635,31 @@ Javascript and a small built-in standard library with C library wrappers.")
                 "19szwxzvl2g65fw95ggvb8h0ma5bd9vvnnccn59hwnc4dida1x4n"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; No tests.
+     `(#:tests? #f                      ; No tests.
        #:make-flags (list "-f" "Makefile.sharedlibrary"
                           (string-append "INSTALL_PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (delete 'configure)
+         ;; At least another major GNU/Linux distribution carries their own
+         ;; .pc file with this package.
+         (add-after 'install 'install-pkg-config
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (pkg-config-dir (string-append out "/lib/pkgconfig")))
+               (mkdir-p pkg-config-dir)
+               (with-output-to-file (string-append pkg-config-dir "/duktape.pc")
+                 (lambda _
+                   (format #t "prefix=~@*~a~@
+                               libdir=${prefix}/lib~@
+                               includedir=${prefix}/include~@
+
+                               Name: duktape~@
+                               Description: Embeddable Javascript engine~@
+                               Version: ~a~@
+                               Libs: -L${libdir} -lduktape~@
+                               Cflags: -I${includedir}~%"
+                           out ,version)))))))))
     (home-page "https://duktape.org/")
     (synopsis "Small embeddable Javascript engine")
     (description "Duktape is an embeddable Javascript engine, with a focus on
diff --git a/gnu/packages/jemalloc.scm b/gnu/packages/jemalloc.scm
index c4b87b540d..2e25780257 100644
--- a/gnu/packages/jemalloc.scm
+++ b/gnu/packages/jemalloc.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2021 Ryan Sundberg <ryan@arctype.co>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,7 @@
 (define-module (gnu packages jemalloc)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
   #:use-module ((guix licenses) #:select (bsd-2))
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -29,10 +31,10 @@
   #:use-module (gnu packages perl)
   #:use-module (guix build-system gnu))
 
-(define-public jemalloc
+(define-public jemalloc-4.5.0
   (package
     (name "jemalloc")
-    (version "5.2.1")
+    (version "4.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -40,7 +42,7 @@
                     version "/jemalloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "1xl7z0vwbn5iycg7amka9jd6hxd8nmfk7nahi4p9w2bnw9f0wcrl"))))
+                "10373xhpc10pgmai9fkc1z0rs029qlcb3c0qfnvkbwdlcibdh2cl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -52,13 +54,14 @@
              (substitute* "Makefile.in"
                (("\\$\\(srcroot\\)test/unit/pages.c \\\\") "\\"))
              #t)))
-       ,@(if (any (cute string-prefix? <> (or (%current-target-system)
-                                              (%current-system)))
-                 '("x64_64" "i686"))
-           ;; Transparent huge pages are only enabled by default on Intel processors
-           '()
-           '(#:configure-flags (list "--disable-thp")))))
-    (inputs `(("perl" ,perl)))
+       #:configure-flags
+       '(,@(match (%current-system)
+             ((or "i686-linux" "x86_64-linux")
+              '())
+             ("powerpc-linux"
+              (list "--disable-thp" "CPPFLAGS=-maltivec"))
+             (_
+              (list "--disable-thp"))))))
     ;; Install the scripts to a separate output to avoid referencing Perl and
     ;; Bash in the default output, saving ~75 MiB on the closure.
     (outputs '("out" "bin"))
@@ -69,10 +72,10 @@
 fragmentation avoidance and scalable concurrency support.")
     (license bsd-2)))
 
-(define-public jemalloc-4.5.0
+(define-public jemalloc
   (package
-    (inherit jemalloc)
-    (version "4.5.0")
+    (inherit jemalloc-4.5.0)
+    (version "5.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -80,5 +83,12 @@ fragmentation avoidance and scalable concurrency support.")
                     version "/jemalloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "10373xhpc10pgmai9fkc1z0rs029qlcb3c0qfnvkbwdlcibdh2cl"))))
-    (inputs '())))
+                "1xl7z0vwbn5iycg7amka9jd6hxd8nmfk7nahi4p9w2bnw9f0wcrl"))))
+    (arguments
+      (substitute-keyword-arguments (package-arguments jemalloc-4.5.0)
+        ;; Disable the thread local storage model in jemalloc 5 to prevent
+        ;; shared libraries linked to libjemalloc from crashing on dlopen()
+        ;; https://github.com/jemalloc/jemalloc/issues/937
+        ((#:configure-flags base-configure-flags '())
+         `(cons "--disable-initial-exec-tls" ,base-configure-flags))))
+    (inputs (list perl))))
diff --git a/gnu/packages/jose.scm b/gnu/packages/jose.scm
index 3ac7921315..9e0787bce7 100644
--- a/gnu/packages/jose.scm
+++ b/gnu/packages/jose.scm
@@ -41,10 +41,8 @@
                (base32
                 "09c2kn9cjqkgx4g0rf6c2k3ng9970r468c9z7067j8kyf7ksywp2"))))
     (build-system meson-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("jansson" ,jansson)
-              ("zlib" ,zlib)
-              ("libcrypto" ,openssl)))
+    (native-inputs (list pkg-config))
+    (inputs (list jansson zlib openssl))
     (home-page "https://github.com/latchset/jose")
     (synopsis "Object Signing and Encryption")
     (description "C-language implementation of Javascript Object Signing and
diff --git a/gnu/packages/jrnl.scm b/gnu/packages/jrnl.scm
index 85d3863e05..45f9dab148 100644
--- a/gnu/packages/jrnl.scm
+++ b/gnu/packages/jrnl.scm
@@ -45,16 +45,16 @@
         (base32 "1bjjyfc3fnsy0h299s3jj42wnigj43xdyp5ppi1cvkqbwl369935"))))
     (build-system python-build-system)
     (native-inputs
-     `(("behave" ,behave)))
+     (list behave))
     (inputs
-     `(("python" ,python)
-       ("python-keyring" ,python-keyring)
-       ("python-pycrypto" ,python-pycrypto)
-       ("python-pytz" ,python-pytz)
-       ("python-tzlocal" ,python-tzlocal)
-       ("python-six" ,python-six)
-       ("python-dateutil" ,python-dateutil)
-       ("python-parsedatetime" ,python-parsedatetime)))
+     (list python
+           python-keyring
+           python-pycrypto
+           python-pytz
+           python-tzlocal
+           python-six
+           python-dateutil
+           python-parsedatetime))
     (home-page "https://maebert.github.io/jrnl/")
     (synopsis "Personal journal application")
     (description
diff --git a/gnu/packages/julia-jll.scm b/gnu/packages/julia-jll.scm
index 3f2b0c1dec..594c36b6ce 100644
--- a/gnu/packages/julia-jll.scm
+++ b/gnu/packages/julia-jll.scm
@@ -91,9 +91,9 @@
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Bzip2_jll.jl")
     (synopsis "Bzip2 binary wrappers")
     (description "This Julia module provides a wrapper for the @code{Bzip2}
@@ -128,19 +128,19 @@ compression program.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("cairo" ,cairo)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-fontconfig-jll" ,julia-fontconfig-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-glib-jll" ,julia-glib-jll)
-       ("julia-libpng-jll" ,julia-libpng-jll)
-       ("julia-lzo-jll" ,julia-lzo-jll)
-       ("julia-pixman-jll" ,julia-pixman-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list cairo))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-fontconfig-jll
+           julia-freetype2-jll
+           julia-glib-jll
+           julia-libpng-jll
+           julia-lzo-jll
+           julia-pixman-jll
+           julia-xorg-libxext-jll
+           julia-xorg-libxrender-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Cairo_jll.jl")
     (synopsis "Cairo library wrappers")
     (description "This package provides a wrapper for the cairo library.")
@@ -179,7 +179,7 @@ compression program.")
     (inputs                             ;required by artifacts
      `(("gfortran:lib" ,gfortran "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/CompilerSupportLibraries_jll.jl")
     (synopsis "Internal wrappers")
     (description "This package provides compiler support for libraries.  It is
@@ -218,9 +218,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Expat_jll.jl")
     (synopsis "Expat library wrappers")
     (description "This package provides a wrapper for the expat library.")
@@ -254,22 +254,22 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-fribidi-jll" ,julia-fribidi-jll)
-       ("julia-lame-jll" ,julia-lame-jll)
-       ("julia-libass-jll" ,julia-libass-jll)
-       ("julia-libfdk-aac-jll" ,julia-libfdk-aac-jll)
-       ("julia-libvorbis-jll" ,julia-libvorbis-jll)
-       ("julia-openssl-jll" ,julia-openssl-jll)
-       ("julia-opus-jll" ,julia-opus-jll)
-       ("julia-ogg-jll" ,julia-ogg-jll)
-       ("julia-x264-jll" ,julia-x264-jll)
-       ("julia-x265-jll" ,julia-x265-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list ffmpeg))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-freetype2-jll
+           julia-fribidi-jll
+           julia-lame-jll
+           julia-libass-jll
+           julia-libfdk-aac-jll
+           julia-libvorbis-jll
+           julia-openssl-jll
+           julia-opus-jll
+           julia-ogg-jll
+           julia-x264-jll
+           julia-x265-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/FFMPEG_jll.jl")
     (synopsis "ffmpeg library wrappers")
     (description "This package provides a wrapper for ffmpeg.")
@@ -307,12 +307,12 @@ build tree Yggdrasil.")
     (inputs
      `(("fontconfig" ,fontconfig)))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-expat-jll" ,julia-expat-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-libuuid-jll" ,julia-libuuid-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-expat-jll
+           julia-freetype2-jll
+           julia-libuuid-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Fontconfig_jll.jl")
     (synopsis "Fontconfig library wrappers")
     (description "This package provides a wrapper for the fontconfig library.")
@@ -349,11 +349,9 @@ build tree Yggdrasil.")
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-bzip2-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/FreeType2_jll.jl")
     (synopsis "Freetype2 binary wrappers")
     (description "This Julia module provides a wrapper for the freetype font
@@ -388,9 +386,9 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("fribidi" ,fribidi)))
+     (list fribidi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/FriBidi_jll.jl")
     (synopsis "Fribidi library wrappers")
     (description "This package provides a wrapper for the fribidi library.")
@@ -428,10 +426,8 @@ rendering library.")
     (inputs
      `(("gettext" ,gettext-minimal)))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)))
+     (list julia-jllwrappers julia-compilersupportlibraries-jll
+           julia-libiconv-jll julia-xml2-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Gettext_jll.jl")
     (synopsis "Gettext library wrappers")
     (description "This package provides a wrapper for the gettext library.")
@@ -467,14 +463,14 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("glfw" ,glfw)))
+     (list glfw))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libglvnd-jll" ,julia-libglvnd-jll)
-       ("julia-xorg-libxcursor-jll" ,julia-xorg-libxcursor-jll)
-       ("julia-xorg-libxinerama-jll" ,julia-xorg-libxinerama-jll)
-       ("julia-xorg-libxrandr-jll" ,julia-xorg-libxrandr-jll)
-       ("julia-xorg-libxi-jll" ,julia-xorg-libxi-jll)))
+     (list julia-jllwrappers
+           julia-libglvnd-jll
+           julia-xorg-libxcursor-jll
+           julia-xorg-libxinerama-jll
+           julia-xorg-libxrandr-jll
+           julia-xorg-libxi-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/GLFW_jll.jl")
     (synopsis "Glfw library wrappers")
     (description "This package provides a wrapper for the glfw library.")
@@ -510,15 +506,15 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-gettext-jll" ,julia-gettext-jll)
-       ("julia-libffi-jll" ,julia-libffi-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-libmount-jll" ,julia-libmount-jll)
-       ("julia-pcre-jll" ,julia-pcre-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers
+           julia-gettext-jll
+           julia-libffi-jll
+           julia-libiconv-jll
+           julia-libmount-jll
+           julia-pcre-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Glib_jll.jl")
     (synopsis "Glib library wrappers")
     (description "This package provides a wrapper for the glib library.")
@@ -554,20 +550,20 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("gr-framework" ,gr-framework)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-cairo-jll" ,julia-cairo-jll)
-       ("julia-ffmpeg-jll" ,julia-ffmpeg-jll)
-       ("julia-fontconfig-jll" ,julia-fontconfig-jll)
-       ("julia-glfw-jll" ,julia-glfw-jll)
-       ("julia-jpegturbo-jll" ,julia-jpegturbo-jll)
-       ("julia-libpng-jll" ,julia-libpng-jll)
-       ("julia-libtiff-jll" ,julia-libtiff-jll)
-       ("julia-pixman-jll" ,julia-pixman-jll)
-       ("julia-qt5base-jll" ,julia-qt5base-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list gr-framework))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-bzip2-jll
+           julia-cairo-jll
+           julia-ffmpeg-jll
+           julia-fontconfig-jll
+           julia-glfw-jll
+           julia-jpegturbo-jll
+           julia-libpng-jll
+           julia-libtiff-jll
+           julia-pixman-jll
+           julia-qt5base-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/GR_jll.jl")
     (synopsis "GR framework library wrappers")
     (description "This package provides a wrapper for the GR framework.")
@@ -604,9 +600,9 @@ rendering library.")
                 ;; There's a Julia file for each platform, override them all
                 (find-files "src/wrappers/" "\\.jl$"))))))))
     (inputs
-     `(("gumbo-parser" ,gumbo-parser)))
+     (list gumbo-parser))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Gumbo_jll.jl")
     (synopsis "Gumbo HTML parsing library wrappers")
     (description "This package provides a wrapper for Gumbo HTML parsing library.")
@@ -643,13 +639,10 @@ rendering library.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-jpegturbo-jll" ,julia-jpegturbo-jll)
-       ("julia-libpng-jll" ,julia-libpng-jll)
-       ("julia-libtiff-jll" ,julia-libtiff-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-jpegturbo-jll julia-libpng-jll
+           julia-libtiff-jll julia-zlib-jll))
     (inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://github.com/JuliaBinaryWrappers/ImageMagick_jll.jl")
     (synopsis "Imagemagick library wrappers")
     (description "This package provides a wrapper for Imagemagick.")
@@ -692,7 +685,7 @@ rendering library.")
              #t)))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-preferences" ,julia-preferences)))
+     (list julia-preferences))
     (home-page "https://github.com/JuliaPackaging/JLLWrappers.jl")
     (synopsis "Julia macros used by JLL packages")
     (description "This package contains Julia macros that enable JLL packages
@@ -729,9 +722,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)))
+     (list libjpeg-turbo))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/JpegTurbo_jll.jl")
     (synopsis "Libjpeg-turbo library wrappers")
     (description "This package provides a wrapper for the libjpeg-turbo library.")
@@ -765,9 +758,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("lame" ,lame)))
+     (list lame))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/LAME_jll.jl")
     (synopsis "Lame library wrappers")
     (description "This package provides a wrapper for the lame audio encoder.")
@@ -801,13 +794,10 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libass" ,libass)))
+     (list libass))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-bzip2-jll" ,julia-bzip2-jll)
-       ("julia-freetype2-jll" ,julia-freetype2-jll)
-       ("julia-fribidi-jll" ,julia-fribidi-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-bzip2-jll julia-freetype2-jll
+           julia-fribidi-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/libass_jll.jl")
     (synopsis "Libass library wrappers")
     (description "This package provides a wrapper for libass.")
@@ -841,9 +831,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libfdk" ,libfdk)))
+     (list libfdk))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/libfdk_aac_jll.jl")
     (synopsis "FDK library wrappers")
     (description "This package provides a wrapper for the libfdk audio library.")
@@ -878,9 +868,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libffi_jll.jl")
     (synopsis "Libffi library wrappers")
     (description "This package provides a wrapper for the libffi library.")
@@ -916,10 +906,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libgpg-error-jll" ,julia-libgpg-error-jll)))
+     (list julia-jllwrappers julia-libgpg-error-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libgcrypt_jll.jl")
     (synopsis "libgcrypt library wrappers")
     (description "This package provides a wrapper for the libgcrypt library.")
@@ -953,11 +942,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libglvnd" ,libglvnd)))
+     (list libglvnd))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll julia-xorg-libxext-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libglvnd_jll.jl")
     (synopsis "Libglvnd library wrappers")
     (description "This package provides a wrapper for the libglvnd library.")
@@ -993,9 +980,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libgpg_error_jll.jl")
     (synopsis "libgpg-error library wrappers")
     (description "This package provides a wrapper for the libgpg-error library.")
@@ -1031,9 +1018,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libiconv" ,libiconv)))
+     (list libiconv))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libiconv_jll.jl")
     (synopsis "Libiconv library wrappers")
     (description "This package provides a wrapper for the libiconv library.")
@@ -1069,9 +1056,9 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libmount_jll.jl")
     (synopsis "Libmount library wrappers")
     (description "This package provides a wrapper for the libmount library
@@ -1106,10 +1093,9 @@ from util-linux.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/LibPNG_jll.jl")
     (synopsis "Libpng library wrappers")
     (description "This package provides a wrapper for the libpng library.")
@@ -1147,9 +1133,9 @@ from util-linux.")
                 (find-files "src/wrappers/" "\\.jl$"))
                #t)))))
       (inputs
-       `(("libsass" ,libsass)))
+       (list libsass))
       (propagated-inputs
-       `(("julia-jllwrappers" ,julia-jllwrappers)))
+       (list julia-jllwrappers))
       (home-page "https://github.com/JuliaBinaryWrappers/libsass_jll.jl")
       (synopsis "Julia wrapper for libsass")
       (description "This package provides a wrapper for libsass.  It is an
@@ -1186,12 +1172,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libtiff" ,libtiff)))
+     (list libtiff))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-jpegturbo-jll" ,julia-jpegturbo-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)
-       ("julia-zstd-jll" ,julia-zstd-jll)))
+     (list julia-jllwrappers julia-jpegturbo-jll julia-zlib-jll
+           julia-zstd-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Libtiff_jll.jl")
     (synopsis "Libtiff library wrappers")
     (description "This package provides a wrapper for libtiff")
@@ -1227,9 +1211,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("util-linux" ,util-linux "lib")))
+     (list `(,util-linux "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Libmount_jll.jl")
     (synopsis "Libuuid library wrappers")
     (description "This package provides a wrapper for the libuuid library from util-linux.")
@@ -1263,10 +1247,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libvorbis" ,libvorbis)))
+     (list libvorbis))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-ogg-jll" ,julia-ogg-jll)))
+     (list julia-jllwrappers julia-ogg-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/libvorbis_jll.jl")
     (synopsis "Libvorbis library wrappers")
     (description
@@ -1303,9 +1286,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("lzo" ,lzo)))
+     (list lzo))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/LZO_jll.jl")
     (synopsis "LZO library wrappers")
     (description "This package provides a wrapper for the lzo library.")
@@ -1341,8 +1324,8 @@ build tree Yggdrasil.")
               ;; There's a Julia file for each platform, override them all
               (find-files "src/wrappers/" "\\.jl$"))
              #t)))))
-    (inputs `(("mbedtls-apache" ,mbedtls-apache)))
-    (propagated-inputs `(("julia-jllwrappers" ,julia-jllwrappers)))
+    (inputs (list mbedtls-apache))
+    (propagated-inputs (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/MbedTLS_jll.jl")
     (synopsis "Apache's mbed TLS binary wrappers")
     (description "This Julia module provides @code{mbed TLS} libraries and
@@ -1377,9 +1360,9 @@ wrappers.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libogg" ,libogg)))
+     (list libogg))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Ogg_jll.jl")
     (synopsis "Libogg library wrappers")
     (description "This package provides a wrapper for the libogg library.")
@@ -1417,10 +1400,9 @@ wrappers.")
                 (find-files "src/wrappers/" "\\.jl$"))
                #t)))))
       (inputs
-       `(("openspecfun" ,openspecfun)))
+       (list openspecfun))
       (propagated-inputs
-       `(("julia-jllwrappers" ,julia-jllwrappers)
-         ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)))
+       (list julia-jllwrappers julia-compilersupportlibraries-jll))
       (home-page "https://github.com/JuliaBinaryWrappers/OpenSpecFun_jll.jl")
       (synopsis "Internal wrappers")
       (description "This package provides a wrapper for OpenSpecFun.  It is an
@@ -1457,9 +1439,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/OpenSSL_jll.jl")
     (synopsis "Openssl library wrappers")
     (description "This package provides a wrapper for the openssl library.")
@@ -1493,9 +1475,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("opus" ,opus)))
+     (list opus))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Opus_jll.jl")
     (synopsis "Opus library wrappers")
     (description "This package provides a wrapper for the opus audio library.")
@@ -1531,9 +1513,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/PCRE_jll.jl")
     (synopsis "PCRE library wrappers")
     (description "This package provides a wrapper for the pcre library.")
@@ -1569,9 +1551,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("pixman" ,pixman)))
+     (list pixman))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Pixman_jll.jl")
     (synopsis "Pixman library wrappers")
     (description "This package provides a wrapper for the pixman library.")
@@ -1607,22 +1589,22 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
-    (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libglvnd-jll" ,julia-libglvnd-jll)
-       ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)
-       ("julia-fontconfig-jll" ,julia-fontconfig-jll)
-       ("julia-glib-jll" ,julia-glib-jll)
-       ("julia-openssl-jll" ,julia-openssl-jll)
-       ("julia-xkbcommon-jll" ,julia-xkbcommon-jll)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-xcb-util-image-jll" ,julia-xorg-xcb-util-image-jll)
-       ("julia-xorg-xcb-util-keysyms-jll" ,julia-xorg-xcb-util-keysyms-jll)
-       ("julia-xorg-xcb-util-renderutil-jll" ,julia-xorg-xcb-util-renderutil-jll)
-       ("julia-xorg-xcb-util-wm-jll" ,julia-xorg-xcb-util-wm-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list qtbase-5))
+    (propagated-inputs
+     (list julia-jllwrappers
+           julia-libglvnd-jll
+           julia-compilersupportlibraries-jll
+           julia-fontconfig-jll
+           julia-glib-jll
+           julia-openssl-jll
+           julia-xkbcommon-jll
+           julia-xorg-libxcb-jll
+           julia-xorg-libxext-jll
+           julia-xorg-xcb-util-image-jll
+           julia-xorg-xcb-util-keysyms-jll
+           julia-xorg-xcb-util-renderutil-jll
+           julia-xorg-xcb-util-wm-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Qt5Base_jll.jl")
     (synopsis "Qtbase library wrappers")
     (description "This package provides a wrapper for the qtbase library.")
@@ -1656,12 +1638,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("wayland" ,wayland)))
+     (list wayland))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-expat-jll" ,julia-expat-jll)
-       ("julia-libffi-jll" ,julia-libffi-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)))
+     (list julia-jllwrappers julia-expat-jll julia-libffi-jll
+           julia-xml2-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Wayland_jll.jl")
     (synopsis "Wayland library wrappers")
     (description "This package provides a wrapper for the wayland library.")
@@ -1695,10 +1675,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("wayland-protocols" ,wayland-protocols)))
+     (list wayland-protocols))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-wayland-jll" ,julia-wayland-jll)))
+     (list julia-jllwrappers julia-wayland-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Wayland_protocols_jll.jl")
     (synopsis "Wayland-protocols library wrappers")
     (description "This package provides a wrapper for the wayland-protocols library.")
@@ -1737,9 +1716,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$"))))))))
     (inputs
-     `(("libx264" ,libx264)))
+     (list libx264))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/x264_jll.jl")
     (synopsis "x264 library wrappers")
     (description "This package provides a wrapper for the x264 video library.")
@@ -1773,9 +1752,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("x265" ,x265)))
+     (list x265))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/x265_jll.jl")
     (synopsis "x265 library wrappers")
     (description "This package provides a wrapper for the x265 video library.")
@@ -1809,13 +1788,11 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxkbcommon" ,libxkbcommon)))
+     (list libxkbcommon))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-xkeyboard-config-jll" ,julia-xorg-xkeyboard-config-jll)
-       ("julia-wayland-jll" ,julia-wayland-jll)
-       ("julia-wayland-protocols-jll" ,julia-wayland-protocols-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll
+           julia-xorg-xkeyboard-config-jll julia-wayland-jll
+           julia-wayland-protocols-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/xkbcommon_jll.jl")
     (synopsis "Libxkbcommon library wrappers")
     (description "This package provides a wrapper for the libxkbcommon library.")
@@ -1851,11 +1828,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers julia-libiconv-jll julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/XML2_jll.jl")
     (synopsis "XML2 library wrappers")
     (description "This package provides a wrapper for the libxml2 library.")
@@ -1889,10 +1864,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libpthread-stubs" ,libpthread-stubs)))
+     (list libpthread-stubs))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xslt-jll" ,julia-xslt-jll)))
+     (list julia-jllwrappers julia-xslt-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libpthread_stubs_jll.jl")
     (synopsis "Libpthread-stubs library wrappers")
     (description "This package provides a wrapper for the libpthread-stubs library.")
@@ -1926,11 +1900,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)
-       ("julia-xorg-xtrans-jll" ,julia-xorg-xtrans-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll julia-xorg-xtrans-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libX11_jll.jl")
     (synopsis "LibX11 library wrappers")
     (description "This package provides a wrapper for the libx11 library.")
@@ -1964,9 +1936,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxau" ,libxau)))
+     (list libxau))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXau_jll.jl")
     (synopsis "Libxau library wrappers")
     (description "This package provides a wrapper for the libxau library.")
@@ -2000,13 +1972,11 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxau-jll" ,julia-xorg-libxau-jll)
-       ("julia-xorg-libpthread-stubs-jll" ,julia-xorg-libpthread-stubs-jll)
-       ("julia-xorg-libxdmcp-jll" ,julia-xorg-libxdmcp-jll)
-       ("julia-xslt-jll" ,julia-xslt-jll)))
+     (list julia-jllwrappers julia-xorg-libxau-jll
+           julia-xorg-libpthread-stubs-jll julia-xorg-libxdmcp-jll
+           julia-xslt-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libxcb_jll.jl")
     (synopsis "Libxcb library wrappers")
     (description "This package provides a wrapper for the libxcb library.")
@@ -2040,11 +2010,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxcursor" ,libxcursor)))
+     (list libxcursor))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxfixes-jll" ,julia-xorg-libxfixes-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)))
+     (list julia-jllwrappers julia-xorg-libxfixes-jll
+           julia-xorg-libxrender-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXcursor_jll.jl")
     (synopsis "Libxcursor library wrappers")
     (description "This package provides a wrapper for the libxcursor library.")
@@ -2078,9 +2047,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxdmcp" ,libxdmcp)))
+     (list libxdmcp))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXdmcp_jll.jl")
     (synopsis "Libxdmcp library wrappers")
     (description "This package provides a wrapper for the libxdmcp library.")
@@ -2114,10 +2083,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxext" ,libxext)))
+     (list libxext))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXext_jll.jl")
     (synopsis "LibXext library wrappers")
     (description "This package provides a wrapper for the libxext library.")
@@ -2151,10 +2119,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxfixes" ,libxfixes)))
+     (list libxfixes))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXfixes_jll.jl")
     (synopsis "Libxfixes library wrappers")
     (description "This package provides a wrapper for the libxfixes library.")
@@ -2188,11 +2155,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxi" ,libxi)))
+     (list libxi))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxfixes-jll" ,julia-xorg-libxfixes-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll
+           julia-xorg-libxfixes-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXi_jll.jl")
     (synopsis "Libxi library wrappers")
     (description "This package provides a wrapper for the libxi library.")
@@ -2226,10 +2192,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxinerama" ,libxinerama)))
+     (list libxinerama))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXinerama_jll.jl")
     (synopsis "Libxinerama library wrappers")
     (description "This package provides a wrapper for the libxinerama library.")
@@ -2263,10 +2228,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxkbfile" ,libxkbfile)))
+     (list libxkbfile))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libxkbfile_jll.jl")
     (synopsis "Libxkbfile library wrappers")
     (description "This package provides a wrapper for the libxkbfile library.")
@@ -2300,11 +2264,10 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxext-jll" ,julia-xorg-libxext-jll)
-       ("julia-xorg-libxrender-jll" ,julia-xorg-libxrender-jll)))
+     (list julia-jllwrappers julia-xorg-libxext-jll
+           julia-xorg-libxrender-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXrandr_jll.jl")
     (synopsis "Libxrandr library wrappers")
     (description "This package provides a wrapper for the libxrandr library.")
@@ -2338,10 +2301,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxrender" ,libxrender)))
+     (list libxrender))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libx11-jll" ,julia-xorg-libx11-jll)))
+     (list julia-jllwrappers julia-xorg-libx11-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_libXrender_jll.jl")
     (synopsis "libXrender library wrappers")
     (description "This package provides a wrapper for the libXrender library.")
@@ -2375,10 +2337,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util" ,xcb-util)))
+     (list xcb-util))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxcb-jll" ,julia-xorg-libxcb-jll)))
+     (list julia-jllwrappers julia-xorg-libxcb-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_jll.jl")
     (synopsis "Xcb-util library wrappers")
     (description "This package provides a wrapper for the xcb-util library.")
@@ -2412,10 +2373,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-image" ,xcb-util-image)))
+     (list xcb-util-image))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_image_jll.jl")
     (synopsis "Xcb-util-image library wrappers")
     (description "This package provides a wrapper for the xcb-util-image library.")
@@ -2449,10 +2409,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list xcb-util-keysyms))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_keysyms_jll.jl")
     (synopsis "Xcb-util-keysyms library wrappers")
     (description "This package provides a wrapper for the xcb-util-keysyms library.")
@@ -2486,10 +2445,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-renderutil" ,xcb-util-renderutil)))
+     (list xcb-util-renderutil))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_renderutil_jll.jl")
     (synopsis "Xcb-util-renderutil library wrappers")
     (description "This package provides a wrapper for the xcb-util-renderutil library.")
@@ -2523,10 +2481,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xcb-util-wm" ,xcb-util-wm)))
+     (list xcb-util-wm))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xcb-util-jll" ,julia-xorg-xcb-util-jll)))
+     (list julia-jllwrappers julia-xorg-xcb-util-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xcb_util_wm_jll.jl")
     (synopsis "Xcb-util-wm library wrappers")
     (description "This package provides a wrapper for the xcb-util-wm library.")
@@ -2560,10 +2517,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xkbcomp" ,xkbcomp)))
+     (list xkbcomp))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-libxkbfile-jll" ,julia-xorg-libxkbfile-jll)))
+     (list julia-jllwrappers julia-xorg-libxkbfile-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xkbcomp_jll.jl")
     (synopsis "xkbcomp library wrappers")
     (description "This package provides a wrapper for the xkbcomp library.")
@@ -2597,10 +2553,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xkeyboard-config" ,xkeyboard-config)))
+     (list xkeyboard-config))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-xorg-xkbcomp-jll" ,julia-xorg-xkbcomp-jll)))
+     (list julia-jllwrappers julia-xorg-xkbcomp-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xkeyboard_config_jll.jl")
     (synopsis "Xkeyboard-config library wrappers")
     (description "This package provides a wrapper for the xkeyboard-config library.")
@@ -2634,9 +2589,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("xtrans" ,xtrans)))
+     (list xtrans))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Xorg_xtrans_jll.jl")
     (synopsis "xtrans library wrappers")
     (description "This package provides a wrapper for the xtrans library.")
@@ -2672,14 +2627,14 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("libxslt" ,libxslt)))
+     (list libxslt))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)
-       ("julia-libgcrypt-jll" ,julia-libgcrypt-jll)
-       ("julia-libgpg-error-jll" ,julia-libgpg-error-jll)
-       ("julia-libiconv-jll" ,julia-libiconv-jll)
-       ("julia-xml2-jll" ,julia-xml2-jll)
-       ("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-jllwrappers
+           julia-libgcrypt-jll
+           julia-libgpg-error-jll
+           julia-libiconv-jll
+           julia-xml2-jll
+           julia-zlib-jll))
     (home-page "https://github.com/JuliaBinaryWrappers/XSLT_jll.jl")
     (synopsis "Xslt library wrappers")
     (description "This package provides a wrapper for the libxslt library.")
@@ -2715,9 +2670,9 @@ build tree Yggdrasil.")
                ;; There's a Julia file for each platform, override them all
                (find-files "src/wrappers/" "\\.jl$")))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Zlib_jll.jl")
     (synopsis "Zlib library wrappers")
     (description "This package provides a wrapper for Zlib.")
@@ -2755,7 +2710,7 @@ build tree Yggdrasil.")
     (inputs
      `(("zstd:lib" ,zstd "lib")))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Zstd_jll.jl")
     (synopsis "Zstd library wrappers")
     (description "This package provides a wrapper for the zstd library.")
@@ -2793,7 +2748,7 @@ build tree Yggdrasil.")
     (inputs
      `(("sundials" ,sundials-julia)))
     (propagated-inputs
-     `(("julia-jllwrappers" ,julia-jllwrappers)))
+     (list julia-jllwrappers))
     (home-page "https://github.com/JuliaBinaryWrappers/Sundials_jll.jl")
     (synopsis "SUndials library wrappers")
     (description "This package provides a wrapper for the sundials library.")
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index e4be7efdd2..2ad1c4cd5d 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -48,7 +48,7 @@
         (base32 "0083pwdyxjb04i330ir9pc8kmp4bwk59lx1jgc9qi05y8j7xzbp0"))))
     (build-system julia-build-system)
     (inputs                             ;required for tests
-     `(("julia-unitful" ,julia-unitful)))
+     (list julia-unitful))
     (home-page "https://github.com/JuliaGPU/Adapt.jl")
     (synopsis "General framework for fast Fourier transforms (FFTs)")
     (description "This package allows multiple FFT packages to co-exist with
@@ -137,6 +137,8 @@ ANSI escape codes to another format.")
         (sha256
          (base32 "1g0kyzcdykgs247j72jpc2qqall696jwgb3hnn4cxmbi8bkf7wpk"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (home-page "https://github.com/JuliaTesting/Aqua.jl")
     (synopsis "Automated quality assurance for Julia packages")
     (description "@acronym{Aqua.jl, Auto QUality Assurance for Julia packages},
@@ -157,17 +159,21 @@ provides functions to run a few automatable checks for Julia packages.")
         (sha256
          (base32 "0cmldnzvdgmfnrnrzgj6v1mfr2rvk5096392rwmhd3iyx7v0pq33"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Unexpected failures for i686, e.g.,
+     ;; Expression: @inferred(ArrayInterface.size(Rnr)) === (StaticInt(4),)
+     ;; Evaluated: (static(2),) === (static(4),)
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-ifelse" ,julia-ifelse)
-       ("julia-requires" ,julia-requires)
-       ("julia-static" ,julia-static)))
+     (list julia-ifelse julia-requires julia-static))
     (native-inputs
-     `(("julia-aqua" ,julia-aqua)
-       ("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockbandedmatrices" ,julia-blockbandedmatrices)
-       ("julia-ifelse" ,julia-ifelse)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-aqua
+           julia-bandedmatrices
+           julia-blockbandedmatrices
+           julia-ifelse
+           julia-offsetarrays
+           julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/ArrayInterface.jl")
     (synopsis "Base array interface primitives")
     (description "The purpose of this library is to solidify extensions to the
@@ -194,7 +200,7 @@ no issues with the upgrade.")
          (base32 "05q62pks8j23pgbrfny072rrwzrz6q19l68srnjxxv39ncmdmrvg"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-fillarrays))
     (home-page "https://github.com/JuliaMatrices/ArrayLayouts.jl")
     (synopsis "Array layouts and general fast linear algebra")
     (description "This package implements a trait-based framework for describing
@@ -218,7 +224,7 @@ much wider class of matrix types than Julia's in-built @code{StridedArray}.")
          (base32 "00x85lnfln7xkfnirpplzyi8r6q92nfqwya8il156bf7b1pa20gk"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-woodburymatrices" ,julia-woodburymatrices)))
+     (list julia-woodburymatrices))
     (home-page "https://github.com/timholy/AxisAlgorithms.jl")
     (synopsis "Filtering and linear algebra routines for multidimensional arrays")
     (description "@code{AxisAlgorithms} is a collection of filtering and linear
@@ -242,12 +248,9 @@ axis (dimension).")
          (base32 "03kzan1lm4fxfhzv1xjg3ysf6y7nagcc61vfz15kvdrp1dqxlynk"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-rangearrays" ,julia-rangearrays)
-       ("julia-intervalsets" ,julia-intervalsets)
-       ("julia-itertools" ,julia-itertools)))
+     (list julia-rangearrays julia-intervalsets julia-itertools))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays julia-unitful))
     (home-page "http://juliaarrays.github.io/AxisArrays.jl/latest/")
     (synopsis "Arrays where each dimension can have a named axis with values")
     (description "This package for the Julia language provides an array type
@@ -273,10 +276,9 @@ axes, allowing column names or interval selections.")
          (base32 "0rlfj9gr9ss621v5kw5b06206yaak21s2vq9vk7r8a7p2ylncism"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-arraylayouts julia-fillarrays))
     (native-inputs
-     `(("julia-genericlinearalgebra" ,julia-genericlinearalgebra)))
+     (list julia-genericlinearalgebra))
     (home-page "https://github.com/JuliaMatrices/BandedMatrices.jl")
     (synopsis "Julia package for representing banded matrices")
     (description "This package supports representing banded matrices by only
@@ -297,7 +299,26 @@ the entries on the bands.")
        (sha256
         (base32 "1xz3kdrphp4b158pg7dwkiry49phs2fjjpdvk1hjpww5ykxacks8"))))
     (build-system julia-build-system)
-    (propagated-inputs `(("julia-json" ,julia-json)))
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-tests-i686
+                 (lambda _
+                   (substitute* "test/GroupsTests.jl"
+                     (("@test sprint\\(show, g1\\)")
+                      "@test_broken sprint(show, g1)")
+                     (("@test sprint\\(show, g1; context = :boundto => 1\\)")
+                      "@test_broken sprint(show, g1; context = :boundto => 1)")
+                     (("@test sprint\\(show, g1; context = :limit => false\\)")
+                      "@test_broken sprint(show, g1; context = :limit => false)")
+                     (("@test @test_deprecated") "@test_broken"))
+                   (substitute* "test/ExecutionTests.jl"
+                     ;; Evaluated: 12 == 8
+                     (("@test @ballocated\\(Ref\\(1\\)\\)")
+                      "@test_broken @ballocated(Ref(1))"))))))
+           '(%standard-phases))))
+    (propagated-inputs (list julia-json))
     (home-page "https://github.com/JuliaCI/BenchmarkTools.jl")
     (synopsis "Benchmarking framework for the Julia language")
     (description "@code{BenchmarkTools.jl} makes performance tracking of Julia
@@ -319,13 +340,19 @@ benchmarks as well as comparing benchmark results.")
         (sha256
          (base32 "1by26036fk9mawmcgqxpwizgbs398v9p6vrbsgg7h6llqn3q9iw1"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/test_blockarrays.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-arraylayouts julia-fillarrays))
     (native-inputs
-     `(("julia-lazyarrays" ,julia-lazyarrays)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-lazyarrays julia-offsetarrays julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/BlockArrays.jl")
     (synopsis "BlockArrays for Julia")
     (description "A block array is a partition of an array into blocks or
@@ -356,11 +383,8 @@ access to the full matrix to use in in for example a linear solver.")
          (base32 "10n1r6kmmv2wa307jfg9y2m6p16j8hngjp3fjavpbdy1r5haasm9"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockarrays" ,julia-blockarrays)
-       ("julia-fillarrays" ,julia-fillarrays)
-       ("julia-matrixfactorizations" ,julia-matrixfactorizations)))
+     (list julia-arraylayouts julia-bandedmatrices julia-blockarrays
+           julia-fillarrays julia-matrixfactorizations))
     (home-page "https://github.com/JuliaMatrices/BlockBandedMatrices.jl")
     (synopsis "Block-banded matrices and banded-block-banded matrices")
     (description "This package supports representing block-banded and
@@ -384,7 +408,7 @@ A @code{BlockBandedMatrix} is a subtype of @code{BlockMatrix} of
          (base32 "1l5608ma2ys7v2gpcqbiv9mwfc6yrlqkihrfx1pf7fgv5llhd4fn"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-dataframes" ,julia-dataframes)))
+     (list julia-dataframes))
     (home-page "https://github.com/JuliaIO/BSON.jl")
     (synopsis "Binary JSON serialisation format")
     (description "@code{BSON.jl} is a Julia package for working with the Binary
@@ -413,7 +437,7 @@ structures.")
      '(#:tests? #f
        #:julia-package-name "BufferedStreams"
        #:julia-package-uuid "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d"))
-    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (propagated-inputs (list julia-compat))
     (home-page "https://github.com/BioJulia/BufferedStreams.jl")
     (synopsis "Fast composable IO streams")
     (description "@code{BufferedStreams.jl} provides buffering for IO
@@ -460,14 +484,14 @@ methods.")
         (base32 "1bcfylxdaizgasnmlkjjkf4dgfvy2y9ycnphw2d0z6mm9vx3n04x"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-pooledarrays" ,julia-pooledarrays)))
+     (list julia-pooledarrays))
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-json" ,julia-json)
-       ("julia-json3" ,julia-json3)
-       ("julia-missings" ,julia-missings)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-structtypes" ,julia-structtypes)))
+     (list julia-dataapi
+           julia-json
+           julia-json3
+           julia-missings
+           julia-recipesbase
+           julia-structtypes))
     (home-page "https://github.com/JuliaData/CategoricalArrays.jl")
     (synopsis "Arrays for working with categorical data")
     (description "This package provides tools for working with categorical
@@ -490,15 +514,11 @@ variables, both with unordered (nominal variables) and ordered categories
         (base32 "0if93pd3b3scg2x3gmk1cbwjk0ax1n792vy8c38y3xl7jpd5cb70"))))
     (build-system julia-build-system)
     (inputs                             ;required for test
-     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)
-       ("julia-finitedifferences" ,julia-finitedifferences)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-chainrulestestutils julia-finitedifferences julia-nanmath
+           julia-specialfunctions))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-compat" ,julia-compat)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-requires" ,julia-requires)))
+     (list julia-chainrulescore julia-compat julia-reexport
+           julia-requires))
     (home-page "https://github.com/JuliaDiff/ChainRules.jl")
     (synopsis "Common utilities for automatic differentiation")
     (description "The is package provides a variety of common utilities that
@@ -521,10 +541,9 @@ execute forward-, reverse-, and mixed-mode primitives.")
         (base32 "1866xv30h1bi7f2m993nljzf58wwmv8zlgn6ffn9j3wckch1nfpb"))))
     (build-system julia-build-system)
     (inputs                             ;required for tests
-     `(("julia-benchmarktools" ,julia-benchmarktools)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-benchmarktools julia-staticarrays))
     (propagated-inputs
-     `(("julia-compat" ,julia-compat)))
+     (list julia-compat))
     (home-page "https://github.com/JuliaDiff/ChainRulesCore.jl")
     (synopsis "Common utilities used by downstream automatic differentiation tools")
     (description "The package provides a light-weight dependency for defining
@@ -546,9 +565,7 @@ sensitivities for functions without the need to depend on ChainRules itself.")
         (base32 "1vlkyp72d514gyb4k3yhjl1g7f24ncmz61j56p4sdi9f76rk9fx9"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-compat" ,julia-compat)
-       ("julia-finitedifference" ,julia-finitedifferences)))
+     (list julia-chainrulescore julia-compat julia-finitedifferences))
     (home-page "https://github.com/JuliaDiff/ChainRulesTestUtils.jl")
     (synopsis "Common utilities used by downstream automatic differentiation tools")
     (description "This package is designed to help in testing
@@ -587,8 +604,7 @@ dependencies, while keeping @code{ChainRulesCore.jl} as light-weight as possible
                          (find-files out "\\.gz$"))
                #t))))))
     (propagated-inputs
-     `(("julia-zlib-jll" ,julia-zlib-jll)
-       ("julia-transcodingstreams" ,julia-transcodingstreams)))
+     (list julia-zlib-jll julia-transcodingstreams))
     (home-page "https://github.com/JuliaIO/CodecZlib.jl")
     (synopsis "Zlib codecs for @code{TranscodingStreams.jl}")
     (description "This package provides zlib codecs for
@@ -610,9 +626,7 @@ dependencies, while keeping @code{ChainRulesCore.jl} as light-weight as possible
         (base32 "0kx3hq7rf8p5zx6ly9k5j90zijmc7yrwmy96cgkl2ibdfbnhmya3"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-colortypes julia-fixedpointnumbers julia-reexport))
     (home-page "https://github.com/JuliaGraphics/Colors.jl")
     (synopsis "Tools for dealing with color")
     (description "This package provides a wide array of functions for dealing
@@ -636,10 +650,8 @@ color scales for graphics.")
          (base32 "0kpjhmqd5cj8dh8bmh9b5g6bscyp7h23hzpr2s93pnrp57q1wvhq"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-colors julia-colortypes julia-fixedpointnumbers
+           julia-staticarrays))
     (home-page "https://github.com/JuliaGraphics/ColorSchemes.jl")
     (synopsis "Colorschemes, colormaps, gradients, and palettes")
     (description "This package provides a collection of colorschemes.")
@@ -660,9 +672,9 @@ color scales for graphics.")
         (base32 "0n7h70caqv7yd0khjhn90iax62r73mcif8qzkwj5b4q46li1r8ih"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+     (list julia-fixedpointnumbers))
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)))
+     (list julia-documenter))
     (home-page "https://github.com/JuliaGraphics/ColorTypes.jl")
     (synopsis "Basic color types and constructor")
     (description "This minimalistic package serves as the foundation for
@@ -686,11 +698,9 @@ with.")
          (base32 "02gk7f5g5wjxdasbjf8bvv1m7clksh7mw1xmygjdirjz1q0d6dwi"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-tensorcore" ,julia-tensorcore)))
+     (list julia-colortypes julia-specialfunctions julia-tensorcore))
     (native-inputs
-     `(("julia-colors" ,julia-colors)))
+     (list julia-colors))
     (home-page "https://github.com/JuliaGraphics/ColorVectorSpace.jl")
     (synopsis "Treat colors as n-vectors for the purposes of arithmetic")
     (description "This package is an add-on to @code{ColorTypes.jl} and provides
@@ -734,7 +744,7 @@ focusing mostly (as of now) on enumerative combinatorics and permutations.")
         (base32 "0mgy90kk8ksv3l720kkk04gnhn4aqhh2dj4sp3x8yy3limngfjay"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (home-page "https://github.com/rdeits/CommonSubexpressions.jl")
     (synopsis "@code{@@cse} macro for Julia")
     (description "This package provides the @code{@@cse} macro, which performs
@@ -783,8 +793,7 @@ way.")
          (add-after 'link-depot 'fix-tests
            (lambda _
              (substitute* "test/runtests.jl"
-               (("option.toml") "test/option.toml"))
-             #t))
+               (("option.toml") "test/option.toml"))))
          (add-after 'link-depot 'dont-use-exproniconlite
            (lambda _
              (substitute* '("Project.toml"
@@ -793,12 +802,15 @@ way.")
                (("ExproniconLite") "Expronicon"))
              (substitute* "Project.toml"
                (("55351af7-c7e9-48d6-89ff-24e801d99491")
-                "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636"))
-             #t)))))
+                "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636"))))
+         ,@(if (target-64bit?)
+             '()
+             '((add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-crayons" ,julia-crayons)
-       ("julia-expronicon" ,julia-expronicon)
-       ("julia-orderedcollections" ,julia-orderedcollections)))
+     (list julia-crayons julia-expronicon julia-orderedcollections))
     (home-page "https://configurations.rogerluo.dev/stable/")
     (synopsis "Tools for options and configurations in Julia")
     (description "@code{Configurations.jl} provides a macro @code{@@option} to
@@ -841,11 +853,9 @@ for construction of objects.")
          (base32 "15zbkn32v7xlz7559s0r5a0vkwmjwsswxaqpzijly4lky4jnp33d"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-staticarrays))
     (native-inputs
-    `(("julia-documenter" ,julia-documenter)
-      ("julia-forwarddiff" ,julia-forwarddiff)
-      ("julia-unitful" ,julia-unitful)))
+    (list julia-documenter julia-forwarddiff julia-unitful))
     (home-page "https://github.com/JuliaGeometry/CoordinateTransformations.jl")
     (synopsis "Coordinate transformations in Julia")
     (description "@code{CoordinateTransformations} is a Julia package to manage
@@ -935,23 +945,23 @@ dependency on it.")
                 (string-append "test_nowarn " test)))
              #t)))))
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-invertedindices" ,julia-invertedindices)
-       ("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)
-       ("julia-missings" ,julia-missings)
-       ("julia-pooledarrays" ,julia-pooledarrays)
-       ("julia-prettytables" ,julia-prettytables)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-sortingalgorithms" ,julia-sortingalgorithms)
-       ("julia-tables" ,julia-tables)
-       ("julia-tabletraits" ,julia-tabletraits)))
+     (list julia-dataapi
+           julia-invertedindices
+           julia-iteratorinterfaceextensions
+           julia-missings
+           julia-pooledarrays
+           julia-prettytables
+           julia-reexport
+           julia-sortingalgorithms
+           julia-tables
+           julia-tabletraits))
     (native-inputs
-     `(("julia-categoricalarrays" ,julia-categoricalarrays)
-       ("julia-combinatorics" ,julia-combinatorics)
-       ("julia-datastructures" ,julia-datastructures)
-       ("julia-datavalues" ,julia-datavalues)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-categoricalarrays
+           julia-combinatorics
+           julia-datastructures
+           julia-datavalues
+           julia-offsetarrays
+           julia-unitful))
     (home-page "https://dataframes.juliadata.org/stable/")
     (synopsis "In-memory tabular data")
     (description "This package provides a set of tools for working with tabular
@@ -975,9 +985,21 @@ Julia from R or Python.")
        (sha256
         (base32 "0hdqp8ipsqdw5bqqkdvz4j6n67x80sj5azr9vzyxwjfsgkfbnk2l"))))
     (propagated-inputs
-     `(("julia-compat" ,julia-compat)
-       ("julia-orderedcollections" ,julia-orderedcollections)))
+     (list julia-compat julia-orderedcollections))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   ;; The evaluation returns the correct value,
+                   ;; Evaluated: "Accumulator(1 => 3, 3 => 4)"
+                   ;; but, for some reasons, is considered as failed.
+                   (substitute* "test/test_accumulator.jl"
+                     (("@test sprint\\(show,Accumulator\\(1 => 3, 3 => 4\\)\\)")
+                      "@test_broken sprint(show, Accumulator(1 => 3, 3 => 4))"))))))
+           '(%standard-phases))))
     (home-page "https://github.com/JuliaCollections/DataStructures.jl")
     (synopsis "Julia module providing different data structures")
     (description "This package implements a variety of data structures,
@@ -1033,7 +1055,7 @@ without having to take direct dependencies.")
                ((".*DataValue\\(method\\(f.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-datavalueinterfaces" ,julia-datavalueinterfaces)))
+     (list julia-datavalueinterfaces))
     (home-page "https://github.com/queryverse/DataValues.jl")
     (synopsis "Missing values for Julia")
     (description "This package provides the type @code{DataValue} that is used
@@ -1078,7 +1100,7 @@ dictionaries where values associated with a particular key may change,
          (base32 "1mm43hm8hd6sgmkkpqhbqhvap7mpkjwzmz5algxi6manp580gkr5"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-indexing" ,julia-indexing)))
+     (list julia-indexing))
     (home-page "https://github.com/andyferris/Dictionaries.jl")
     (synopsis "Alternative interface for dictionaries in Julia")
     (description "This package provides an alternative interface for
@@ -1112,10 +1134,9 @@ dictionaries in Julia, for improved productivity and performance.")
                (("test dist\\(z, x") "test_nowarn dist(z, x")
                (("test dist\\(z, y") "test_nowarn dist(z, y")))))))
     (propagated-inputs
-     `(("julia-statsapi" ,julia-statsapi)))
+     (list julia-statsapi))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays julia-unitful))
     (home-page "https://github.com/JuliaStats/Distances.jl")
     (synopsis "Julia package for evaluating distances (metrics) between vectors")
     (description "A Julia package for evaluating distances(metrics) between
@@ -1185,10 +1206,8 @@ valuable enough at this time.")
                ((".*Main\\.examples_html_mathjax3_doc.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-ansicoloredprinters" ,julia-ansicoloredprinters)
-       ("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-iocapture" ,julia-iocapture)
-       ("julia-json" ,julia-json)))
+     (list julia-ansicoloredprinters julia-docstringextensions
+           julia-iocapture julia-json))
     (inputs
      `(("python" ,python-wrapper)))
     (native-inputs
@@ -1231,7 +1250,7 @@ valuable enough at this time.")
     (inputs
      ;; We don't want to propagate the bootstrap version.
      ;; Cycle with Documenter.jl in later versions.
-     `(("julia-documenter" ,julia-documenter-bootstrap)))
+     (list julia-documenter-bootstrap))
     (home-page "https://github.com/JuliaDocs/DocumenterMarkdown.jl")
     (synopsis "Documenter's Markdown")
     (description "This package enables the Markdown / MkDocs backend of
@@ -1259,11 +1278,9 @@ valuable enough at this time.")
      ;; Cycle with Documenter.jl in later versions.
      `(("julia-documenter" ,julia-documenter-bootstrap)))
     (propagated-inputs
-     `(("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-gumbo" ,julia-gumbo)
-       ("julia-sass" ,julia-sass)))
+     (list julia-docstringextensions julia-gumbo julia-sass))
     (native-inputs
-     `(("julia-example" ,julia-example)))
+     (list julia-example))
     (home-page "https://github.com/JuliaDocs/DocumenterTools.jl")
     (synopsis "Extra tools for setting up Documenter.jl")
     (description "This package contains utilities for setting up documentation
@@ -1284,7 +1301,7 @@ generation with @code{Documenter.jl}.")
        (sha256
         (base32 "1w6p3yxajvclax5b9g7cr2jmbc7lvr5nk4gq0aljxdycdq1d2y3v"))))
     (propagated-inputs
-     `(("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-staticarrays))
     (build-system julia-build-system)
     (home-page "https://github.com/JuliaDiff/DiffResults.jl")
     (synopsis "In-place differentiation methods of primal values at multi-order")
@@ -1306,8 +1323,7 @@ be passed to in-place differentiation methods instead of an output buffer.")
        (sha256
         (base32 "0cwjvj4gma7924fm3yas0nf0jlnwwx4v7fi79ii3s290lkdldzfl"))))
     (propagated-inputs
-     `(("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-nanmath julia-specialfunctions))
     (build-system julia-build-system)
     (home-page "https://github.com/JuliaDiff/DiffRules.jl")
     (synopsis "Primitive differentiation rules")
@@ -1360,9 +1376,7 @@ stressing the robustness of differentiation tools.")
                ;; Seems to not play nicely with SpecialFunctions
                ((".*isempty.*") "")))))))
     (propagated-inputs
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-calculus julia-nanmath julia-specialfunctions))
     (home-page "https://github.com/JuliaDiff/DualNumbers.jl")
     (synopsis "Represent dual numbers and for perform dual algebra")
     (description "The @code{DualNumbers} Julia package defines the @code{Dual}
@@ -1394,7 +1408,7 @@ combinations of dual numbers with predefined Julia numeric types.")
                ;; Seems to not play nicely with Julia-1.6.
                ((".*basic.jl.*") "")))))))
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)))
+     (list julia-arrayinterface))
     (home-page "https://github.com/ChrisRackauckas/EllipsisNotation.jl")
     (synopsis "Elipsis notation implementation")
     (description "This implements the notation @code{..} for indexing arrays.
@@ -1446,9 +1460,9 @@ before (or after)\".")
                ;; This test tries to access the Julia package registry.
                ((".*expand\\.jl.*") "")))))))
     (propagated-inputs
-     `(("julia-mlstyle" ,julia-mlstyle)))
+     (list julia-mlstyle))
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)))
+     (list julia-documenter))
     (home-page "https://expronicon.rogerluo.dev/dev/")
     (synopsis "Collective tools for metaprogramming on Julia Expr")
     (description "This package provides a collection of tools for
@@ -1492,8 +1506,7 @@ performant tooling without requiring additional package dependencies.")
          (base32 "1ldxbp0kq3ip67x7sp82dz56aq4p5i0chspbgx2zgskr6jcbjj1b"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-ffmpeg-jll" ,julia-ffmpeg-jll)
-       ("julia-x264-jll" ,julia-x264-jll)))
+     (list julia-ffmpeg-jll julia-x264-jll))
     (home-page "https://github.com/JuliaIO/FFMPEG.jl")
     (synopsis "Julia Package for ffmpeg")
     (description "This package is made to be included into packages that just
@@ -1537,11 +1550,9 @@ need the ffmpeg binaries + executables, and don't want the overhead of
              (substitute* "test/runtests.jl"
                ((".*test_mimesave.*") "")))))))
     (propagated-inputs
-     `(("julia-requires" ,julia-requires)))
+     (list julia-requires))
     (native-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-filepathsbase" ,julia-filepathsbase)
-       ("julia-http" ,julia-http)))
+     (list julia-colortypes julia-filepathsbase julia-http))
     (home-page "https://github.com/JuliaIO/FileIO.jl")
     (synopsis "Main Package for IO, loading all different kind of files")
     (description "@code{FileIO} aims to provide a common framework for detecting
@@ -1588,7 +1599,7 @@ working with filesystem paths in Julia.")
         (base32 "1sx96pzrgyh8k7x2w8vmyi6cazlmp7rg1n7wbl47qfzqjggka6kz"))))
     (build-system julia-build-system)
     (inputs                             ;required by tests
-     `(("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-staticarrays))
     (home-page "https://github.com/JuliaArrays/FillArrays.jl")
     (synopsis "Lazy matrix representation")
     (description "This package lazily represents matrices filled with
@@ -1621,13 +1632,10 @@ following types: @code{Eye}, @code{Fill}, @code{Ones}, @code{Zeros},
              (setenv "GROUP" "Core")
              #t)))))
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-arrayinterface julia-requires julia-staticarrays))
     (native-inputs
-     `(("julia-bandedmatrices" ,julia-bandedmatrices)
-       ("julia-blockbandedmatrices" ,julia-blockbandedmatrices)
-       ("julia-safetestsets" ,julia-safetestsets)))
+     (list julia-bandedmatrices julia-blockbandedmatrices
+           julia-safetestsets))
     (home-page "https://github.com/JuliaDiff/FiniteDiff.jl")
     (synopsis "Calculations of gradients, Jacobians, and Hessians")
     (description "This package is for calculating derivatives, gradients,
@@ -1650,12 +1658,21 @@ types and sparsity.")
        (sha256
         (base32 "09nsf9cgk49yrvprflnhd9h5rrgs280rgj8sad3csghxdx6jqk5c"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   ;; Machine Precision incorrectly handled
+                   (substitute* "test/methods.jl"
+                     (("@test central_fdm\\(15, 5, adapt=2\\)\\(exp, 1.0\\)")
+                      "@test_broken central_fdm(15, 5, adapt=2)(exp, 1.0)"))))))
+           '(%standard-phases))))
     (inputs
-     `(("julia-benchmarktools" ,julia-benchmarktools)))
+     (list julia-benchmarktools))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-richardson" ,julia-richardson)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-chainrulescore julia-richardson julia-staticarrays))
     (home-page "https://github.com/JuliaDiff/FiniteDifferences.jl")
     (synopsis "Estimates derivatives with finite differences")
     (description "This package calculates approximate derivatives numerically
@@ -1685,7 +1702,7 @@ using finite difference.")
                ;; A deprecation warning is not thrown
                (("@test_logs.*:warn" all) (string-append "# " all)))
              #t)))))
-    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (propagated-inputs (list julia-compat))
     (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
     (synopsis "Fixed point types for Julia")
     (description "@code{FixedPointNumbers.jl} implements fixed-point number
@@ -1731,16 +1748,21 @@ c-style numerical formatting.")
        (sha256
         (base32 "1vb46x8mcn61g1l14qrk22c043khg2ml4q1ci7h4k2v34f2ak5fs"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Unexpected and non-deterministic failures for i686, e.g.,
+     ;; Expression: dual_isapprox(FDNUM ^ PRIMAL, exp(PRIMAL * log(FDNUM)))
+     ;; ERROR: LoadError: LoadError: There was an error during testing
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (inputs                             ;required for tests
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-difftests" ,julia-difftests)))
+     (list julia-calculus julia-difftests))
     (propagated-inputs
-     `(("julia-commonsubexpressions" ,julia-commonsubexpressions)
-       ("julia-diffresults" ,julia-diffresults)
-       ("julia-diffrules" ,julia-diffrules)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-commonsubexpressions
+           julia-diffresults
+           julia-diffrules
+           julia-nanmath
+           julia-specialfunctions
+           julia-staticarrays))
     (home-page "https://github.com/JuliaDiff/ForwardDiff.jl")
     (synopsis "Methods to take multidimensional derivatives")
     (description "This package implements methods to take derivatives,
@@ -1851,7 +1873,7 @@ update step.")
              (substitute* "test/runtests.jl"
                ((".*lapack.*") "")))))))
     (native-inputs
-     `(("julia-quaternions" ,julia-quaternions)))
+     (list julia-quaternions))
     (home-page "https://github.com/JuliaLinearAlgebra/GenericLinearAlgebra.jl")
     (synopsis "Generic numerical linear algebra")
     (description "The purpose of this package is partly to extend linear algebra
@@ -1918,21 +1940,23 @@ matrices the Schur form is often more useful.")
            (lambda _
              (substitute* '("Project.toml"
                             "src/GeometryBasics.jl")
-               ((".*EarCut.*") ""))
-             #t))
+               ((".*EarCut.*") ""))))
          (add-after 'link-depot 'skip-incompatible-test
            (lambda _
              (substitute* "test/runtests.jl"
                (("@testset.*MetaT and heterogeneous data.*" all)
-                (string-append all "return\n")))
-             #t)))))
+                (string-append all "return\n")))))
+         ,@(if (target-64bit?)
+             '()
+             '((add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-itertools" ,julia-itertools)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-structarrays" ,julia-structarrays)
-       ("julia-tables" ,julia-tables)))
+     (list julia-itertools julia-staticarrays julia-structarrays
+           julia-tables))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaGeometry/GeometryBasics.jl")
     (synopsis "Basic Geometry Types")
     (description "This package aims to offer a standard set of Geometry types,
@@ -1957,7 +1981,7 @@ finite elements analysis, Geo applications, and general geometry manipulations
          (base32 "18zxa1w2wmrf44c5l10qbh99zjdp7h94gxlymh47cf5kj5fc4xmx"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-gr-jll" ,julia-gr-jll)))
+     (list julia-gr-jll))
     (home-page "https://github.com/jheinen/GR.jl")
     (synopsis "Plotting for Julia based on GR")
     (description "This module provides a Julia interface to GR, a framework for
@@ -1979,8 +2003,7 @@ visualisation applications.")
          (base32 "10h1s09v7qkvrjr6l678zamb1p248n8jv4rrwkf8g7d2bpfz9amn"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-nanmath" ,julia-nanmath)))
+     (list julia-colors julia-nanmath))
     (home-page "https://github.com/JuliaGraphics/Graphics.jl")
     (synopsis "Base graphics in Julia")
     (description "@code{Graphics.jl} is an abstraction layer for graphical
@@ -2002,8 +2025,7 @@ operations in Julia.")
         (base32 "1g22dv3v7caakspv3pdahnqn937fzzsg9y87rj72hid9g8lxl1gm"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-abstracttrees" ,julia-abstracttrees)
-       ("julia-gumbo-jll" ,julia-gumbo-jll)))
+     (list julia-abstracttrees julia-gumbo-jll))
     (home-page "https://github.com/JuliaWeb/Gumbo.jl")
     (synopsis "Julia wrapper around Google's gumbo C library for parsing HTML")
     (description "@code{Gumbo.jl} is a Julia wrapper around Google's gumbo
@@ -2055,13 +2077,10 @@ library for parsing HTML.")
                 (string-append all "return\n")))
              #t)))))
     (propagated-inputs
-     `(("julia-inifile" ,julia-inifile)
-       ("julia-mbedtls" ,julia-mbedtls)
-       ("julia-uris" ,julia-uris)))
+     (list julia-inifile julia-mbedtls julia-uris))
     ;; required for tests
     (inputs
-     `(("julia-json" ,julia-json)
-       ("julia-bufferedstreams" ,julia-bufferedstreams)))
+     (list julia-json julia-bufferedstreams))
     (home-page "https://juliaweb.github.io/HTTP.jl/")
     (synopsis "HTTP support for Julia")
     (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
@@ -2083,7 +2102,7 @@ implementing both a client and a server.")
          (base32 "0jvl4xn8f8k70sn473li5q62wbiycl5qi25b5k456h3a0j1lbiml"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaArrays/IdentityRanges.jl")
     (synopsis "Ranges that preserve indices of views")
     (description "@code{IdentityRanges} are Julia-language a helper type for
@@ -2129,12 +2148,10 @@ conditional ifelse.  It is similar to @code{Core.ifelse} but it is extendable.")
          (base32 "15zqxani1jjh8849s7rdps6b6prqdwv8yxx893y536vkpk7i07qd"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-simpletraits" ,julia-simpletraits)))
+     (list julia-axisarrays julia-imagecore julia-reexport
+           julia-simpletraits))
     (native-inputs
-     `(("julia-unitful" ,julia-unitful)))
+     (list julia-unitful))
     (home-page "https://github.com/JuliaImages/ImageAxes.jl")
     (synopsis "Julia package for giving \"meaning\" to the axes of an image")
     (description "This small package supports the representation of images as
@@ -2159,8 +2176,7 @@ such arrays easy via traits.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-imagecore" ,julia-imagecore)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-imagecore julia-reexport))
     ;(native-inputs
     ; `(("julia-imagemagick" ,julia-imagemagick)
     ;   ("julia-offsetarrays" ,julia-offsetarrays)
@@ -2190,16 +2206,16 @@ dependencies.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-abstractffts" ,julia-abstractffts)
-       ("julia-colors" ,julia-colors)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-graphics" ,julia-graphics)
-       ("julia-mappedarrays" ,julia-mappedarrays)
-       ("julia-mosaicviews" ,julia-mosaicviews)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-paddedviews" ,julia-paddedviews)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-abstractffts
+           julia-colors
+           julia-colorvectorspace
+           julia-fixedpointnumbers
+           julia-graphics
+           julia-mappedarrays
+           julia-mosaicviews
+           julia-offsetarrays
+           julia-paddedviews
+           julia-reexport))
     ;(native-inputs
     ; `(("julia-aqua" ,julia-aqua)
     ;   ("julia-colorvectorspace" ,julia-colorvectorspace)
@@ -2232,10 +2248,7 @@ of packages designed to support image processing and computer vision.")
     (arguments
      `(#:tests? #f))    ; Cycle with ReferenceTests.jl.
     (propagated-inputs
-     `(("julia-crayons" ,julia-crayons)
-       ("julia-imagebase" ,julia-imagebase)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-requires" ,julia-requires)))
+     (list julia-crayons julia-imagebase julia-imagecore julia-requires))
     ;(native-inputs
     ; `(("julia-coordinatetransformations" ,julia-coordinatetransformations)
     ;   ("julia-imagemagick" ,julia-imagemagick)
@@ -2281,18 +2294,16 @@ be downscaled to fit into the size of your active terminal session.")
                (("test (B == map)" _ test) (string-append "test_nowarn " test)))
              #t)))))
     (propagated-inputs
-     `(("julia-fileio" ,julia-fileio)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-imagemagick-jll" ,julia-imagemagick-jll)))
+     (list julia-fileio julia-imagecore julia-imagemagick-jll))
     (native-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-imagemetadata" ,julia-imagemetadata)
-       ("julia-imageshow" ,julia-imageshow)
-       ("julia-imagetransformations" ,julia-imagetransformations)
-       ("julia-indirectarrays" ,julia-indirectarrays)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-zipfile" ,julia-zipfile)))
+     (list julia-colors
+           julia-colorvectorspace
+           julia-imagemetadata
+           julia-imageshow
+           julia-imagetransformations
+           julia-indirectarrays
+           julia-offsetarrays
+           julia-zipfile))
     (home-page "https://github.com/JuliaIO/ImageMagick.jl")
     (synopsis "Thin wrapper for ImageMagick")
     (description "This package provides a wrapper around ImageMagick version 6.
@@ -2314,14 +2325,10 @@ It was split off from @code{Images.jl} to make image I/O more modular.")
          (base32 "0iv154ms370xgcr56bwsjl13iwmy671cbxjl9ld5yfj85pclcwi1"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-imageaxes" ,julia-imageaxes)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-indirectarrays" ,julia-indirectarrays)))
+     (list julia-axisarrays julia-imageaxes julia-imagecore
+           julia-indirectarrays))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-simpletraits" ,julia-simpletraits)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-offsetarrays julia-simpletraits julia-unitful))
     (home-page "https://github.com/JuliaImages/ImageMetadata.jl")
     (synopsis "Julia package for images having metadata")
     (description "@code{ImageMetadata} is a simple package providing utilities
@@ -2348,11 +2355,8 @@ information about the detector used to acquire the image.")
     (arguments
      `(#:tests? #f))    ; cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-fileio" ,julia-fileio)
-       ("julia-imagebase" ,julia-imagebase)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-stackviews" ,julia-stackviews)))
+     (list julia-fileio julia-imagebase julia-imagecore
+           julia-offsetarrays julia-stackviews))
     ;(native-inputs
     ; `(("julia-imagedistances" ,julia-imagedistances)
     ;   ("julia-imagemagick" ,julia-imagemagick)
@@ -2383,15 +2387,15 @@ inline presentation of greyscale or color images.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageMagick.jl.
     (propagated-inputs
-     `(("julia-axisalgorithms" ,julia-axisalgorithms)
-       ("julia-colorvectorspace" ,julia-colorvectorspace)
-       ("julia-coordinatetransformations" ,julia-coordinatetransformations)
-       ("julia-identityranges" ,julia-identityranges)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-interpolations" ,julia-interpolations)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-rotations" ,julia-rotations)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-axisalgorithms
+           julia-colorvectorspace
+           julia-coordinatetransformations
+           julia-identityranges
+           julia-imagecore
+           julia-interpolations
+           julia-offsetarrays
+           julia-rotations
+           julia-staticarrays))
     ;(native-inputs
     ; `(("julia-imagemagick" ,julia-imagemagick)
     ;   ("julia-referencetests" ,julia-referencetests)
@@ -2438,9 +2442,7 @@ out of dictionaries, tuples, etc, extending this ability beyond
          (base32 "0l0jq0jnr9z3k431ni82xycq7mqapgxrbrx4yyk6lycvi41ipm4s"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-mappedarrays" ,julia-mappedarrays)))
+     (list julia-colors julia-fixedpointnumbers julia-mappedarrays))
     (home-page "https://github.com/JuliaArrays/IndirectArrays.jl")
     (synopsis "Julia implementation of indexed arrays")
     (description "An @code{IndirectArray} is one that encodes data using a
@@ -2474,9 +2476,9 @@ indexed images, sometimes called \"colormap images\" or \"paletted images.\"")
                ((".*infextendedtime.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-requires" ,julia-requires)))
+     (list julia-requires))
     (native-inputs
-     `(("julia-compat" ,julia-compat)))
+     (list julia-compat))
     (home-page "https://docs.juliahub.com/Infinity/")
     (synopsis "Representation of infinity in Julia")
     (description "This package provides representations for infinity and
@@ -2517,19 +2519,23 @@ interfaces with @file{.ini} files.")
         (sha256
          (base32 "1236c20k388qlh7k74mhf7hkbn0vf7ss8b1rgh1a6aj0234ayfnc"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f
+       ;; XXXX: Unexpected failures for i686, e.g.,
+       ;; Got exception outside of a @test
+       ;; OverflowError: 96908232 * 106943408 overflowed for type Int32
+       ;; Disable as stopgap.
+       #:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-axisalgorithms" ,julia-axisalgorithms)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-ratios" ,julia-ratios)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-woodburymatrices" ,julia-woodburymatrices)))
+     (list julia-axisalgorithms
+           julia-offsetarrays
+           julia-ratios
+           julia-requires
+           julia-staticarrays
+           julia-woodburymatrices))
     (native-inputs
-     `(("julia-dualnumbers" ,julia-dualnumbers)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-unitful" ,julia-unitful)
-       ("julia-zygote" ,julia-zygote)))
+     (list julia-dualnumbers julia-forwarddiff julia-offsetarrays
+           julia-unitful julia-zygote))
     (home-page "https://github.com/JuliaMath/Interpolations.jl")
     (synopsis "Continuous interpolation of discrete datasets")
     (description "This package implements a variety of interpolation schemes for
@@ -2551,10 +2557,24 @@ and exceptional performance.")
         (sha256
          (base32 "0gsz89cd3iygbl5qr389k9vwpg7w1nk0s90g25nsmk34y9hifxag"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     ;; For some reason, the output is correct but the test
+                     ;; is considered as failed:
+                     ;; Expression: duration(ClosedInterval(A, B)) ≡ 60
+                     ;; Evaluated: 60 ≡ 60
+                     (("@test duration\\(ClosedInterval")
+                      "@test_broken duration(ClosedInterval"))))))
+           '(%standard-phases))))
     (propagated-inputs
-     `(("julia-ellipsisnotation" ,julia-ellipsisnotation)))
+     (list julia-ellipsisnotation))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaMath/IntervalSets.jl")
     (synopsis "Interval Sets for Julia")
     (description "This package is intended to implement a \"minimal\" foundation
@@ -2578,7 +2598,7 @@ unambiguously define the @code{..} and @code{±} operators.")
          (base32 "1179z20yxnkyziip7gn26wr1g3k3ssl1ci7pig3khc900f62di46"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/mbauman/InvertedIndices.jl")
     (synopsis "Index type that allows for inverted selections")
     (description "This package just exports one type: the @code{InvertedIndex},
@@ -2622,9 +2642,9 @@ as a string together with the return value.")
         (base32 "11334fcg2slpwcj0raxf457brhf7pxglgxc6cy8q58ggrpxqfqql"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)))
+     (list julia-documenter))
     (home-page "https://github.com/FluxML/IRTools.jl")
     (synopsis "Simple and flexible IR format")
     (description "This package provides a simple and flexible IR format,
@@ -2707,10 +2727,8 @@ extensions to the iterator interface.")
         (base32 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-parsers" ,julia-parsers)
-       ("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-datastructures julia-fixedpointnumbers julia-parsers
+           julia-offsetarrays))
     (home-page "https://github.com/JuliaIO/JSON.jl")
     (synopsis "JSON parsing and printing library for Julia")
     (description "@code{JSON.jl} is a pure Julia module which supports parsing
@@ -2732,8 +2750,7 @@ and printing JSON documents.")
          (base32 "11z5maz7v50wd99id8z7838higza0cllh2amkdkrlskbri3v2f17"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-parsers" ,julia-parsers)
-       ("julia-structtypes" ,julia-structtypes)))
+     (list julia-parsers julia-structtypes))
     (home-page "https://github.com/quinnj/JSON3.jl")
     (synopsis "JSON package for Julia")
     (description "This package provides another JSON package for Julia, with a
@@ -2755,7 +2772,7 @@ focus on speed and slick struct mapping.")
          (base32 "117z27krcf8fydgp6mb0pgn75r4gng9qs7v90qb4bqzsry3faadp"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)))
+     (list julia-documenter))
     (home-page "https://github.com/stevengj/LaTeXStrings.jl")
     (synopsis "Input and display of LaTeX equation strings")
     (description "This is a small package to make it easier to type LaTeX
@@ -2776,14 +2793,20 @@ equations in string literals in the Julia language.")
         (sha256
          (base32 "17rhlrmgfvdw8w62pg32ikr9j4xy2ylr7mx7ar0hnpzryv929rp5"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/multests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)
-       ("julia-fillarrays" ,julia-fillarrays)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-matrixfactorizations" ,julia-matrixfactorizations)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-arraylayouts julia-fillarrays julia-macrotools
+           julia-matrixfactorizations julia-staticarrays))
     (native-inputs
-     `(("julia-tracker" ,julia-tracker)))
+     (list julia-tracker))
     (home-page "https://github.com/JuliaArrays/LazyArrays.jl")
     (synopsis "Lazy arrays and linear algebra")
     (description "This package supports lazy analogues of array operations like
@@ -2806,9 +2829,9 @@ implementation of matrix-free methods for iterative solvers.")
          (base32 "0rvms3mmq8a1viqlyzdgs2ccddcy6j0c677dlb8m5nk6hkiwr16n"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-docstringextensions" ,julia-docstringextensions)))
+     (list julia-docstringextensions))
     (native-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/JuliaStats/LogExpFunctions.jl")
     (synopsis "Special functions based on @code{log} and @code{exp}")
     (description "Various special functions based on log and exp moved from
@@ -2852,12 +2875,19 @@ that let you do deep transformations of code.")
         (sha256
          (base32 "0l5adird8m1cmnsxwhzi5hcr7q9bm1rf7a6018zc7kcn2yxdshy3"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* "test/runtests.jl"
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+     (list julia-fixedpointnumbers))
     (native-inputs
-     `(("julia-colortypes" ,julia-colortypes)
-       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
-       ("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-colortypes julia-fixedpointnumbers julia-offsetarrays))
     (home-page "https://github.com/JuliaArrays/MappedArrays.jl")
     (synopsis "Lazy in-place transformations of arrays")
     (description "This package implements \"lazy\" in-place elementwise
@@ -2894,7 +2924,7 @@ comes from the fact that @code{M == map(f, A)}.")
                (("test String") "test_nowarn String"))
              #t)))))
     (propagated-inputs
-     `(("julia-arraylayouts" ,julia-arraylayouts)))
+     (list julia-arraylayouts))
     (home-page "https://github.com/JuliaMatrices/MatrixFactorizations.jl")
     (synopsis "Julia package to contain non-standard matrix factorizations")
     (description "A Julia package to contain non-standard matrix factorizations.
@@ -2926,7 +2956,7 @@ may include other factorizations such as the LQ factorization.")
              (substitute* "test/runtests.jl"
                (("testhost =") "return #"))
              #t)))))
-    (propagated-inputs `(("julia-mbedtls-jll" ,julia-mbedtls-jll)))
+    (propagated-inputs (list julia-mbedtls-jll))
     (home-page "https://github.com/JuliaLang/MbedTLS.jl")
     (synopsis "Apache's mbed TLS library wrapper")
     (description "@code{MbedTLS.jl} provides a wrapper around the @code{mbed
@@ -2948,13 +2978,9 @@ TLS} and cryptography C library for Julia.")
          (base32 "05p3f0gr4sv4maq8cix5fi8ldq0zagswqsd43xn6fhy046f936mz"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-requires" ,julia-requires)))
+     (list julia-calculus julia-recipesbase julia-requires))
     (native-inputs
-     `(("julia-quadgk" ,julia-quadgk)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-unitful" ,julia-unitful)))
+     (list julia-quadgk julia-specialfunctions julia-unitful))
     (home-page "https://juliaphysics.github.io/Measurements.jl/stable/")
     (synopsis "Error propagation calculator and library")
     (description "@code{Measurements.jl} is an error propagation calculator and
@@ -3005,7 +3031,7 @@ resolving them into absolute units.")
      '(#:julia-package-name "Media"
        #:julia-package-uuid "e89f7d12-3494-54d1-8411-f7d8b9ae1f27"))
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (home-page "https://github.com/JunoLab/Media.jl")
     (synopsis "Unified measure and coordinates types")
     (description "This package provides a display system which enables the
@@ -3028,7 +3054,7 @@ displayed where.")
         (base32 "0k9jqgp285qhckldvvsmfk6s69dcr8s74m2fijgm2vxjj2gqjs1n"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-jive" ,julia-jive)))
+     (list julia-jive))
     (home-page "https://github.com/wookay/Millboard.jl")
     (synopsis "Displaying data in tables for Julia")
     (description
@@ -3051,7 +3077,7 @@ format to arrange into rows and columns of cells.")
          (base32 "1k481rm5lahmjyh34j177d4n10svgr0wm7ps5m3ar3xx6nr26ad5"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)))
+     (list julia-dataapi))
     (home-page "https://github.com/JuliaData/Missings.jl")
     (synopsis "Additional missing value support for Julia")
     (description "This package provides additional functionality for working
@@ -3073,7 +3099,7 @@ with @code{missing} values in Julia.")
          (base32 "0h1cd7cr4c4cnpqyj3180113gdbvcc047lqphp8a8gq5smp3c059"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     (home-page "https://thautwarm.github.io/MLStyle.jl/latest/")
     (synopsis "Julia functional programming infrastructures")
     (description "This package provides consistent and extensible functional
@@ -3095,8 +3121,7 @@ programming infrastructures, and metaprogramming facilities.")
          (base32 "1cg2is83bjmrchmmxcgx57k8c9b9vlamrw38v4fdhbb6d4six5cg"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-compat" ,julia-compat)
-       ("julia-exprtools" ,julia-exprtools)))
+     (list julia-compat julia-exprtools))
     (home-page "https://github.com/invenia/Mocking.jl")
     (synopsis "Overload Julia function calls")
     (description "The purpose of this package is to allow Julia function calls
@@ -3120,9 +3145,7 @@ to be temporarily overloaded for the purpose of testing.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageCore.jl
     (propagated-inputs
-     `(("julia-mappedarrays" ,julia-mappedarrays)
-       ("julia-paddedviews" ,julia-paddedviews)
-       ("julia-stackviews" ,julia-stackviews)))
+     (list julia-mappedarrays julia-paddedviews julia-stackviews))
     ;(native-inputs
     ; `(("julia-colorvectorspace" ,julia-colorvectorspace)
     ;   ("julia-imagecore" ,julia-imagecore)))
@@ -3169,8 +3192,24 @@ Julia, with type-driven, overloadable packing/unpacking functionality.")
         (sha256
          (base32 "1isyj8h4nx96cr6892d154v8pw1nhr7mjyz5bd6ffr2mkzb2bq4f"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/utilities.jl"
+                     ;; Non-deterministic returned value, e.g.,
+                     ;;    Expression: n == @allocated(f())
+                     ;;    Evaluated: 240 == 120
+                     ;; and for some other values:
+                     ;;    Got correct result, please change to @test
+                     ;; so @test_broken is not enough.
+                     (("@test n == @allocated f\\(\\)")
+                      " "))))))
+           '(%standard-phases))))
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (home-page "https://github.com/jump-dev/MutableArithmetics.jl")
     (synopsis "Interface for arithmetics on mutable types in Julia")
     (description "MutableArithmetics is a Julia package which allows:
@@ -3216,12 +3255,9 @@ still being completely generic
          (base32 "0n8qh5a2ghjx1j70zxn0hmh8gzpa46kmjg8di879y9974bfk0f98"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-diffresults" ,julia-diffresults)
-       ("julia-finitediff" ,julia-finitediff)
-       ("julia-forwarddiff" ,julia-forwarddiff)))
+     (list julia-diffresults julia-finitediff julia-forwarddiff))
     (native-inputs
-     `(("julia-optimtestproblems" ,julia-optimtestproblems)
-       ("julia-recursivearraytools" ,julia-recursivearraytools)))
+     (list julia-optimtestproblems julia-recursivearraytools))
     (home-page "https://github.com/JuliaNLSolvers/NLSolversBase.jl")
     (synopsis "Optimization and equation solver software in JuliaNLSolvers")
     (description "This package aims at establishing common ground for Optim.jl,
@@ -3254,13 +3290,9 @@ interface to interact with these types.")
                (("&& CUDA\\.functional\\(\\)") ""))
              (setenv "NNLIB_TEST_CUDA" "false"))))))
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-requires" ,julia-requires)))
+     (list julia-adapt julia-chainrulescore julia-requires))
     (native-inputs
-     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)
-       ("julia-stablerngs" ,julia-stablerngs)
-       ("julia-zygote" ,julia-zygote)))
+     (list julia-chainrulestestutils julia-stablerngs julia-zygote))
     (home-page "https://github.com/FluxML/NNlib.jl")
     (synopsis "Neural Network primitives with multiple backends")
     (description "This package will provide a library of functions useful for
@@ -3328,7 +3360,7 @@ which they were added to the collection.")
         (base32 "0j5a8ar8yc0j9h87gwfyrcqm23wpyv5yv5gn8vzilpg4vr0fiasc"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)))
+     (list julia-adapt))
     ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
     (arguments '(#:tests? #f))
     (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
@@ -3353,9 +3385,9 @@ languages like Fortran.")
          (base32 "0ran2vj6ahlzib0g77y7g0jhavy3k9s2mqq23ybpgp9z677wf26h"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)))
+     (list julia-documenter))
     (home-page "https://github.com/JuliaArrays/PaddedViews.jl")
     (synopsis "Add virtual padding to the edges of an array")
     (description "@code{PaddedViews} provides a simple wrapper type,
@@ -3380,8 +3412,7 @@ Multiple arrays may be \"promoted\" to have common indices using the
          (base32 "0b8lawi7kcws4axfsdf023gyxca15irl648ciyi1kw3wghz3pfi2"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-orderedcollections" ,julia-orderedcollections)
-       ("julia-unpack" ,julia-unpack)))
+     (list julia-orderedcollections julia-unpack))
     (home-page "https://github.com/mauro3/Parameters.jl")
     (synopsis "Numerical-model parameter helpers")
     (description "This package contains types with default field values, keyword
@@ -3449,8 +3480,7 @@ actual computation.")
          (base32 "1fd27w9z1vhz0d1bzrs5vcavpb5r5jviyh27d9c4ka37phz4xvmh"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-plotutils" ,julia-plotutils)
-       ("julia-requires" ,julia-requires)))
+     (list julia-plotutils julia-requires))
     (home-page "https://github.com/JuliaPlots/PlotThemes.jl")
     (synopsis "Themes for the Julia plotting package Plots.jl")
     (description
@@ -3472,11 +3502,9 @@ actual computation.")
          (base32 "12aw5gkkcfhpczv2w510k65w1j0hjnh825ihimi223v8plsi5105"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-colorschemes" ,julia-colorschemes)
-       ("julia-reexport" ,julia-reexport)))
+     (list julia-colors julia-colorschemes julia-reexport))
     (native-inputs
-     `(("julia-stablerngs" ,julia-stablerngs)))
+     (list julia-stablerngs))
     (home-page "https://github.com/JuliaPlots/PlotUtils.jl")
     (synopsis "Helper algorithms for building plotting components")
     (description "This package contains generic helper algorithms for building
@@ -3498,7 +3526,7 @@ plotting components.")
          (base32 "0qdwvf1p5z6z0q4s4hn85ysd8wq47zy6hlzddc5ijvhk86ccqlrr"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)))
+     (list julia-dataapi))
     (home-page "https://github.com/JuliaData/PooledArrays.jl")
     (synopsis "Pooled representation of arrays in Julia")
     (description "This package provides a pooled representation of arrays for
@@ -3520,8 +3548,7 @@ purposes of compression when there are few unique elements.")
          (base32 "1wxy6ak7f3hvibcgc8q88cgkf9zvi649mmjy1zlkx1qk80hgvz23"))))
     (build-system julia-build-system)
     (native-inputs
-     `(("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-reversediff" ,julia-reversediff)))
+     (list julia-forwarddiff julia-reversediff))
     (home-page "https://github.com/timholy/PositiveFactorizations.jl")
     (synopsis "Positive-definite \"approximations\" to matrices")
     (description "@code{PositiveFactorizations} is a package for computing a
@@ -3580,10 +3607,7 @@ everything from run time algorithm choice to code generation at compile time.")
                ((".*colors\\.jl.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-crayons" ,julia-crayons)
-       ("julia-formatting" ,julia-formatting)
-       ("julia-reexport" ,julia-reexport)
-       ("julia-tables" ,julia-tables)))
+     (list julia-crayons julia-formatting julia-reexport julia-tables))
     (home-page "https://github.com/ronisbr/PrettyTables.jl")
     (synopsis "Print data in formatted tables")
     (description "This package has the purpose to print data in matrices in a
@@ -3650,12 +3674,11 @@ human-readable format.")
              (setenv "JULIA_PKGEVAL" "true")
              #t)))))
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)
-       ("julia-versionparsing" ,julia-versionparsing)))
+     (list julia-macrotools julia-versionparsing))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/JuliaPy/PyCall.jl")
     (synopsis "Call Python functions from the Julia language")
     (description "This package provides the ability to directly call and fully
@@ -3680,12 +3703,12 @@ share large data structures between Julia and Python without copying them.")
          (base32 "007zs0imfgs69f30pp2a3rc93kl0qiq7qjx6ig35z4wzkmps4skd"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)
-       ("julia-latexstrings" ,julia-latexstrings)
-       ("julia-pycall" ,julia-pycall)
-       ("julia-versionparsing" ,julia-versionparsing)
-       ;; python-matplotlib is expected to be available at runtime.
-       ("python-matplotlib" ,python-matplotlib)))
+     (list julia-colors
+           julia-latexstrings
+           julia-pycall
+           julia-versionparsing
+           ;; python-matplotlib is expected to be available at runtime.
+           python-matplotlib))
     (home-page "https://github.com/JuliaPy/PyPlot.jl")
     (synopsis "Plotting for Julia based on matplotlib.pyplot")
     (description "This package provides a Julia interface to the Matplotlib
@@ -3709,7 +3732,7 @@ Julia with little or no overhead (arrays are passed without making a copy).")
          (base32 "1hy0629yai6xflgxaflk9764lzr1lzhlghimxk1aqi212q9c6n33"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     (home-page "https://github.com/JuliaMath/QuadGK.jl")
     (synopsis "Adaptive 1d numerical Gauss–Kronrod integration")
     (description "This package provides support for one-dimensional numerical
@@ -3744,11 +3767,11 @@ arbitrary normed vector spaces (e.g. matrix-valued integrands).")
                  (("libquadmath.so.0" lib) (string-append gcclib "/lib/" lib)))
                #t))))))
     (propagated-inputs
-     `(("julia-requires" ,julia-requires)))
+     (list julia-requires))
     (inputs
      `(("gcc:lib" ,gcc "lib")))
     (native-inputs
-     `(("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-specialfunctions))
     (home-page "https://github.com/JuliaMath/Quadmath.jl")
     (synopsis "Float128 and libquadmath for the Julia language")
     (description "This is a Julia interface to @code{libquadmath}, providing a
@@ -3771,7 +3794,7 @@ format.")
          (base32 "1zhynyvchc50hywws2jznpkwydr3njh8cv84d2ylyabhcwwmil9s"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dualnumbers" ,julia-dualnumbers)))
+     (list julia-dualnumbers))
     (home-page "https://github.com/JuliaGeometry/Quaternions.jl")
     (synopsis "Quaternion and dual-quaternion functionality")
     (description "Quaternions are best known for their suitability as
@@ -3794,9 +3817,8 @@ extension of complex numbers.")
          (base32 "06zm4cbn3x49lbpgshhdfvvmgz066qkc8q0d57igm5p8bcp6js22"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)
-       ("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)
-       ("julia-tableshowutils" ,julia-tableshowutils)))
+     (list julia-datastructures julia-iteratorinterfaceextensions
+           julia-tableshowutils))
     (home-page "https://github.com/queryverse/QueryOperators.jl")
     (synopsis "Query operators for Julia")
     (description "This package contains the underlying query operators that are
@@ -3885,9 +3907,7 @@ more complex visualizations.")
     (arguments
      `(#:tests? #f))    ; Cycle with Plots.jl.
     (propagated-inputs
-     `(("julia-nanmath" ,julia-nanmath)
-       ("julia-plotutils" ,julia-plotutils)
-       ("julia-recipesbase" ,julia-recipesbase)))
+     (list julia-nanmath julia-plotutils julia-recipesbase))
     (home-page "http://juliaplots.org/RecipesPipeline.jl/dev/")
     (synopsis "Utilities for processing recipes")
     (description "This package was factored out of @code{Plots.jl} to allow any
@@ -3915,13 +3935,13 @@ recipes to full specifications for a plot.")
     (arguments
      `(#:tests? #f))    ; Cycle with OrdinaryDiffEq.jl.
     (propagated-inputs
-     `(("julia-arrayinterface" ,julia-arrayinterface)
-       ("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-docstringextensions" ,julia-docstringextensions)
-       ("julia-recipesbase" ,julia-recipesbase)
-       ("julia-requires" ,julia-requires)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-zygoterules" ,julia-zygoterules)))
+     (list julia-arrayinterface
+           julia-chainrulescore
+           julia-docstringextensions
+           julia-recipesbase
+           julia-requires
+           julia-staticarrays
+           julia-zygoterules))
     ;(native-inputs
     ; `(("julia-forwarddiff" ,julia-forwarddiff)
     ;   ("julia-nlsolve" ,julia-nlsolve)
@@ -3970,11 +3990,8 @@ recursive arrays like arrays of arrays.")
     (arguments
      `(#:tests? #f))    ; Cycle with ImageCore.jl through ImageMagick.jl.
     (propagated-inputs
-     `(("julia-deepdiffs" ,julia-deepdiffs)
-       ("julia-distances" ,julia-distances)
-       ("julia-fileio" ,julia-fileio)
-       ("julia-imagecore" ,julia-imagecore)
-       ("julia-imageinterminal" ,julia-imageinterminal)))
+     (list julia-deepdiffs julia-distances julia-fileio julia-imagecore
+           julia-imageinterminal))
     ;(native-inputs
     ; `(("julia-csvfiles" ,julia-csvfiles)
     ;   ("julia-dataframes" ,julia-dataframes)
@@ -4005,10 +4022,12 @@ package can help create and update if need be.")
        (sha256
         (base32 "03hyfy7c0ma45b0y756j76awi3az2ii4bz4s8cxm3xw9yy1z7b01"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (inputs                             ;required for test
-     `(("julia-example" ,julia-example)))
+     (list julia-example))
     (propagated-inputs
-     `(("julia-colors" ,julia-colors)))
+     (list julia-colors))
     (home-page "https://github.com/JuliaPackaging/Requires.jl/")
     (synopsis "Faster package loader")
     (description "This package make loading packages faster, maybe.  It
@@ -4031,18 +4050,23 @@ can be avoided.")
         (sha256
          (base32 "1wrr6sqj2xl9grkvdp88rw3manxy9vbx28zq2wssya5ns1xabsnl"))))
     (build-system julia-build-system)
+    (arguments
+     ;; XXXX: Test suite failing for i686, e.g.,
+     ;; Expression: hash(tr_float, hash(1)) === hash(v_float, hash(1))
+     ;; MethodError: no method matching decompose(::ReverseDiff.TrackedReal{Float64, Float64, Nothing})
+     ;; Disable as stopgap.
+     `(#:tests? ,(not (target-x86-32?))))
     (propagated-inputs
-     `(("julia-diffresults" ,julia-diffresults)
-       ("julia-diffrules" ,julia-diffrules)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-functionwrappers" ,julia-functionwrappers)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-diffresults
+           julia-diffrules
+           julia-forwarddiff
+           julia-functionwrappers
+           julia-macrotools
+           julia-nanmath
+           julia-specialfunctions
+           julia-staticarrays))
     (native-inputs
-     `(("julia-difftests" ,julia-difftests)
-       ("julia-fillarrays" ,julia-fillarrays)))
+     (list julia-difftests julia-fillarrays))
     (home-page "https://github.com/JuliaDiff/ReverseDiff.jl")
     (synopsis "Reverse Mode Automatic Differentiation for Julia")
     (description "@code{ReverseDiff.jl} is a fast and compile-able tape-based
@@ -4096,11 +4120,9 @@ other power series in @code{h}.")
            (base32 "01wwqbdmj61yiz7rkmams4xg7gb9hbmg325173846ky4b9x1wb19"))))
       (build-system julia-build-system)
       (propagated-inputs
-       `(("julia-staticarrays" ,julia-staticarrays)))
+       (list julia-staticarrays))
       (native-inputs
-       `(("julia-benchmarktools" ,julia-benchmarktools)
-         ("julia-forwarddiff" ,julia-forwarddiff)
-         ("julia-unitful" ,julia-unitful)))
+       (list julia-benchmarktools julia-forwarddiff julia-unitful))
       (home-page "https://github.com/JuliaGeometry/Rotations.jl")
       (synopsis "Julia implementations for different rotation parameterisations")
       (description "This package implements various 3D rotation parameterizations
@@ -4131,7 +4153,7 @@ through matrix-vector multiplication.")
        `(#:julia-package-name "SafeTestsets"
          #:julia-package-uuid "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"))
       (native-inputs
-       `(("julia-staticarrays" ,julia-staticarrays)))
+       (list julia-staticarrays))
       (home-page "https://github.com/YingboMa/SafeTestsets.jl")
       (synopsis "Julia's testset in a module")
       (description "This package contains the testset from Julia, packaged into
@@ -4153,7 +4175,7 @@ a loadable module.")
          (base32 "0y7kkkj717h5cj659ssry89i5r64symr6pvhr6vv4qmaxrnjxj92"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-libsass-jll" ,julia-libsass-jll)))
+     (list julia-libsass-jll))
     (home-page "https://github.com/piever/Sass.jl")
     (synopsis "Compile scss and sass file to css")
     (description "This package provides a simple Julian API to use the
@@ -4224,7 +4246,7 @@ in @code{Gadfly}, @code{Plots} and @code{Makie} to label axes and keys.")
          (base32 "1qvmkqcvhc2nilvkk36szccxdlcv9ls2i0ksxgl2yfjr3b3qlr05"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (home-page "https://github.com/mauro3/SimpleTraits.jl")
     (synopsis "Simple Traits for Julia")
     (description "This package provides a macro-based implementation of traits.
@@ -4274,7 +4296,7 @@ beginners.")
     (arguments
      `(#:tests? #f))    ; cycle with StatsBase.jl
     (propagated-inputs
-     `(("julia-datastructures" ,julia-datastructures)))
+     (list julia-datastructures))
     ;(native-inputs
     ; `(("julia-statsbase" ,julia-statsbase)))
     (home-page "https://github.com/JuliaCollections/SortingAlgorithms.jl")
@@ -4299,11 +4321,10 @@ timsort and radixsort.")
         (base32 "0nfpnglx7zl9g20w2mgfkg17hcw9ri0shaq2rwplj0ij5pwz8yf0"))))
     (build-system julia-build-system)
     (inputs
-     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)))
+     (list julia-chainrulestestutils))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-logexpfunctions" ,julia-logexpfunctions)
-       ("julia-openspecfun-jll" ,julia-openspecfun-jll)))
+     (list julia-chainrulescore julia-logexpfunctions
+           julia-openspecfun-jll))
     (home-page "https://github.com/JuliaMath/SpecialFunctions.jl")
     (synopsis "Special mathematical functions")
     (description "This package provides special mathematical functions,
@@ -4327,8 +4348,7 @@ polygamma functions.")
          (base32 "1qzaqvk57b0s5krzn8bxkzmr5kz6hi9dm3jbf2sl7z4vznsgbn9x"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dictionaries" ,julia-dictionaries)
-       ("julia-indexing" ,julia-indexing)))
+     (list julia-dictionaries julia-indexing))
     (home-page "https://github.com/JuliaData/SplitApplyCombine.jl")
     (synopsis "Split-apply-combine strategies for Julia")
     (description "@code{SplitApplyCombine.jl} provides high-level, generic tools
@@ -4384,10 +4404,9 @@ some performance improvements).")
                ((".*doctest.*") ""))
              #t)))))
     (propagated-inputs
-     `(("julia-offsetarrays" ,julia-offsetarrays)))
+     (list julia-offsetarrays))
     (native-inputs
-    `(("julia-aqua" ,julia-aqua)
-      ("julia-documenter" ,julia-documenter)))
+    (list julia-aqua julia-documenter))
     (home-page "https://github.com/JuliaArrays/StackViews.jl")
     (synopsis "No more catcat")
     (description "StackViews provides only one array type: @code{StackView}.
@@ -4415,9 +4434,9 @@ There are multiple ways to understand @code{StackView}:
          (base32 "19k7h47zhz3zz28i0l4b3cc0r07pzp8kf35z0yammpy361b644l2"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-ifelse" ,julia-ifelse)))
+     (list julia-ifelse))
     (native-inputs
-     `(("julia-aqua" ,julia-aqua)))
+     (list julia-aqua))
     (home-page "https://github.com/SciML/Static.jl")
     (synopsis "Static types useful for dispatch and generated functions")
     (description "Static.jl defines a limited set of statically parameterized
@@ -4439,7 +4458,7 @@ types and a common interface that is shared between them.")
         (base32 "041mijzgzm8r61a3gwspr2wcxjikqksvj2rbnl4gmcy41alqmx79"))))
     (build-system julia-build-system)
     (inputs
-     `(("julia-benchmarktools" ,julia-benchmarktools)))
+     (list julia-benchmarktools))
     (home-page "https://github.com/JuliaArrays/StaticArrays.jl")
     (synopsis "Statically sized arrays")
     (description "This package provides a framework for implementing
@@ -4487,13 +4506,10 @@ dependency on it.")
          (base32 "02y4pm5yvg713a2pn970bbcfkrn2h133rxbxk1da18svhqw3czhi"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-datastructures" ,julia-datastructures)
-       ("julia-missings" ,julia-missings)
-       ("julia-sortingalgorithms" ,julia-sortingalgorithms)
-       ("julia-statsapi" ,julia-statsapi)))
+     (list julia-dataapi julia-datastructures julia-missings
+           julia-sortingalgorithms julia-statsapi))
     (native-inputs
-     `(("julia-stablerngs" ,julia-stablerngs)))
+     (list julia-stablerngs))
     (home-page "https://github.com/JuliaStats/StatsBase.jl")
     (synopsis "Basic statistics for Julia")
     (description "StatsBase.jl is a Julia package that provides basic support
@@ -4517,7 +4533,7 @@ ranking, covariances, sampling, and empirical density estimation.")
          (base32 "0n5707wplbibzhhv1xmshvc025d7xk6mnikclc3hvq5cdc0gy9f7"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-distances" ,julia-distances)))
+     (list julia-distances))
     (home-page "https://github.com/matthieugomez/StringDistances.jl")
     (synopsis "String Distances in Julia")
     (description "This package provides string distances in Julia.  Distances
@@ -4540,16 +4556,21 @@ applied to any distance.")
         (sha256
          (base32 "0rjcpyjwzg70n87q5r9c5i1qzigavncslxssm3rk5a3y549py56v"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-64bit?)
+           '(%standard-phases)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'fix-tests-int32-i686
+                 (lambda _
+                   (substitute* '("src/utils.jl"
+                                  "test/runtests.jl")
+                     (("Int64") "Int32")))))))))
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-staticarrays" ,julia-staticarrays)
-       ("julia-tables" ,julia-tables)))
+     (list julia-dataapi julia-staticarrays julia-tables))
     (native-inputs
-     `(("julia-documenter" ,julia-documenter)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-pooledarrays" ,julia-pooledarrays)
-       ("julia-typedtables" ,julia-typedtables)
-       ("julia-weakrefstrings" ,julia-weakrefstrings)))
+     (list julia-documenter julia-offsetarrays julia-pooledarrays
+           julia-typedtables julia-weakrefstrings))
     (home-page "https://github.com/JuliaArrays/StructArrays.jl")
     (synopsis "Efficient implementation of struct arrays in Julia")
     (description "This package introduces the type @code{StructArray} which is
@@ -4638,13 +4659,10 @@ the @code{Pluto.jl} tabular data import functionality.")
          (base32 "1sqqagzqvav8b1rv5ywwbgy9ixvlmipq95fkwfwn0m8769i8jwzb"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-datavalueinterfaces" ,julia-datavalueinterfaces)
-       ("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)
-       ("julia-tabletraits" ,julia-tabletraits)))
+     (list julia-dataapi julia-datavalueinterfaces
+           julia-iteratorinterfaceextensions julia-tabletraits))
     (native-inputs
-     `(("julia-datavalues" ,julia-datavalues)
-       ("julia-queryoperators" ,julia-queryoperators)))
+     (list julia-datavalues julia-queryoperators))
     (home-page "https://github.com/JuliaData/Tables.jl")
     (synopsis "Interface for tables in Julia")
     (description "The @code{Tables.jl} package provides simple, yet powerful
@@ -4669,8 +4687,7 @@ interface functions for working with all kinds tabular data.")
            (base32 "0gp3hpj3jvzfhkp9r345vfic2j2n2s60729wv38hwn75csp74cg5"))))
       (build-system julia-build-system)
       (propagated-inputs
-       `(("julia-datavalues" ,julia-datavalues)
-         ("julia-json" ,julia-json)))
+       (list julia-datavalues julia-json))
       (home-page "https://github.com/queryverse/TableShowUtils.jl")
       (synopsis "Implement show for TableTraits.jl types")
       (description "This package provides some common helper functions that make
@@ -4693,7 +4710,7 @@ participate in the @code{TableTraits.jl} ecosystem.")
          (base32 "08ssb2630wm6j8f2qa985mn2vfibfm5kjcn4ayl2qkhfcyp8daw4"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-iteratorinterfaceextensions" ,julia-iteratorinterfaceextensions)))
+     (list julia-iteratorinterfaceextensions))
     (home-page "https://github.com/queryverse/TableTraits.jl")
     (synopsis "Traits for Julia tables")
     (description "TableTraits defines a generic interface for tabular data.")
@@ -4739,11 +4756,8 @@ dimensions}.")
     (arguments
      `(#:tests? #f))    ; cycle with ImageMagick.jl
     (propagated-inputs
-     `(("julia-axisarrays" ,julia-axisarrays)
-       ("julia-colortypes" ,julia-colortypes)
-       ("julia-fileio" ,julia-fileio)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-stringdistances" ,julia-stringdistances)))
+     (list julia-axisarrays julia-colortypes julia-fileio
+           julia-offsetarrays julia-stringdistances))
     ;(native-inputs
     ; `(("julia-colors" ,julia-colors)
     ;   ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
@@ -4775,16 +4789,16 @@ package.")
         (patches (search-patches "julia-tracker-16-compat.patch"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-diffrules" ,julia-diffrules)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-macrotools" ,julia-macrotools)
-       ("julia-nanmath" ,julia-nanmath)
-       ("julia-nnlib" ,julia-nnlib)
-       ("julia-requires" ,julia-requires)
-       ("julia-specialfunctions" ,julia-specialfunctions)))
+     (list julia-adapt
+           julia-diffrules
+           julia-forwarddiff
+           julia-macrotools
+           julia-nanmath
+           julia-nnlib
+           julia-requires
+           julia-specialfunctions))
     (native-inputs
-     `(("julia-pdmats" ,julia-pdmats)))
+     (list julia-pdmats))
     (home-page "https://github.com/FluxML/Tracker.jl")
     (synopsis "Operator overloading reverse-mode automatic differentiator")
     (description "@code{Tracker.jl} previously provided @code{Flux.jl} with
@@ -4834,9 +4848,7 @@ which are:
          (base32 "0nk6zhqvl2r8yhjdhb59kxq0srd3vy4ysg4d8rszj9a43dnn3w3i"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-adapt" ,julia-adapt)
-       ("julia-splitapplycombine" ,julia-splitapplycombine)
-       ("julia-tables" ,julia-tables)))
+     (list julia-adapt julia-splitapplycombine julia-tables))
     (home-page "https://github.com/JuliaData/TypedTables.jl")
     (synopsis "Column-based storage for data analysis in Julia")
     (description "@code{TypedTables.jl} provides two column-based storage
@@ -4892,7 +4904,7 @@ types, modules, and dictionaries.")
                 (string-append out "/share/julia/loadpath/URIs/test")))
              #t)))))
     ;; required for tests
-    (inputs `(("julia-json" ,julia-json)))
+    (inputs (list julia-json))
     (home-page "https://github.com/JuliaWeb/URIs.jl")
     (synopsis "URI parsing in Julia")
     (description "@code{URIs.jl} is a Julia package that allows parsing and
@@ -4914,8 +4926,10 @@ working with @acronym{URIs,Uniform Resource Identifiers}, as defined in RFC
        (sha256
         (base32 "10qwscd15dnmvx116dwvg99m7kmwgmj5ahdkq7psiq48lcc554gq"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:parallel-tests? #f))
     (propagated-inputs
-     `(("julia-constructionbase" ,julia-constructionbase)))
+     (list julia-constructionbase))
     (home-page "https://painterqubits.github.io/Unitful.jl/stable/")
     (synopsis "Physical units in Julia")
     (description "This package supports SI units and also many other unit
@@ -4962,8 +4976,7 @@ useful in order to support @code{VersionNumber} comparisons applied to
          (base32 "14h1vdnc3rx87w6v2rr59lgb4kai2hd1wzqpxhmzsi8karg2z219"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-dataapi" ,julia-dataapi)
-       ("julia-parsers" ,julia-parsers)))
+     (list julia-dataapi julia-parsers))
     (home-page "https://github.com/JuliaData/WeakRefStrings.jl")
     (synopsis "Efficient string representation and transfer in Julia")
     (description "This package provides a minimal String type for Julia that
@@ -4984,6 +4997,16 @@ allows for efficient string representation and transfer")
         (sha256
          (base32 "04yykivi8zrbryxlmb0p5xa6lma8iq22r5s863117dnnqj5gaffd"))))
     (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       ,@(if (target-x86-32?)
+           '((modify-phases %standard-phases
+               (add-after 'unpack 'remove-failing-test-i686
+                 (lambda _
+                   (substitute* "test/woodbury.jl"
+                     (("@test logdet\\(W\\)")
+                      "@test_broken logdet(W)"))))))
+           '(%standard-phases))))
     (home-page "https://github.com/timholy/WoodburyMatrices.jl")
     (synopsis "Support for the Woodbury matrix identity for Julia")
     (description "This package provides support for the Woodbury matrix identity
@@ -5009,7 +5032,7 @@ inaccuracy in the result.")
           "15bm3ki5mb9nvqs2byznrryq0bilnjcvsfy3k05hxhk9vapilw7k"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-zlib-jll" ,julia-zlib-jll)))
+     (list julia-zlib-jll))
     (home-page "https://github.com/fhs/ZipFile.jl")
     (synopsis "Read/Write ZIP archives in Julia")
     (description "This module provides support for reading and writing ZIP
@@ -5031,7 +5054,7 @@ archives in Julia.")
         (base32 "07i2mf6rr5b8i6l82qgwl5arsb5pwyyzyfasgnszhdqllk9501bs"))))
     (build-system julia-build-system)
     (propagated-inputs
-     `(("julia-macrotools" ,julia-macrotools)))
+     (list julia-macrotools))
     (home-page "https://github.com/FluxML/ZygoteRules.jl")
     (synopsis "Add minimal custom gradients to Zygote")
     (description "Minimal package which enables to add custom gradients to
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 33242a08a4..0bdac66175 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,26 +55,6 @@
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
-(define libuv-julia
-  (let ((commit "fb3e3364c33ae48c827f6b103e05c3f0e78b79a9")
-        (revision "3"))
-    ;; When upgrading Julia, also upgrade this.  Get the commit from
-    ;; https://github.com/JuliaLang/julia/blob/v1.6.1/deps/libuv.version
-    (package
-      (inherit libuv)
-      (name "libuv-julia")
-      (version (git-version "2.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/JuliaLang/libuv")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1kqpn19d20aka30h6q5h8lnzyp0vw0xzgx0wm4w2r5j6yf76m2hr"))))
-      (home-page "https://github.com/JuliaLang/libuv"))))
-
 (define libunwind-julia
   ;; The Julia projects requires their patched version.
   ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
@@ -90,147 +71,30 @@
         (base32
          "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
        (patches
-        (list
-         (julia-patch "libunwind-prefer-extbl"
-                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
-         (julia-patch "libunwind-static-arm"
-                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
-         (julia-patch "libunwind-cfa-rsp"
-                      "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z")))))
+        (append
+            ;; Fix linker issue for i686-linux because GCC10 changed default
+            ;; (see '-fno-common' option).
+            (search-patches "libunwind-julia-fix-GCC10-fno-common.patch")
+            (list
+             (julia-patch "libunwind-prefer-extbl"
+                          "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+             (julia-patch "libunwind-static-arm"
+                          "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
+             (julia-patch "libunwind-cfa-rsp"
+                          "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z"))))))
     (home-page "https://github.com/JuliaLang/tree/master/deps/")))
 
 (define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
                  "/deps/patches/" name ".patch"))
 
-(define (julia-patch name sha)
+(define-public (julia-patch name sha)
   (let ((version "1.6.1"))
     (origin (method url-fetch)
             (uri (julia-patch-url version name))
             (sha256 (base32 sha))
             (file-name name))))
 
-(define llvm-julia
-  (package
-    (inherit llvm-11)
-    (name "llvm-julia")
-    (source (origin
-              (inherit (package-source llvm-11))
-              ;; Those patches are inside the Julia source repo.
-              ;; They are _not_ Julia specific (https://github.com/julialang/julia#llvm)
-              ;; but they are required to build Julia.
-              ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
-              (patches
-               (map (match-lambda
-                      ((name hash)
-                       (julia-patch name hash)))
-                    (list
-                     '("llvm-D27629-AArch64-large_model_6.0.1"
-                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-                     '("llvm8-D34078-vectorize-fdiv"
-                       "19spqc3xsazn1xs9gpcgv9ldadfkv49rmc5khl7sf1dlmhgi4602")
-                     '("llvm-7.0-D44650"
-                       "1h55kkmkiisfj6sk956if2bcj9s0v6n5czn8dxb870vp5nccj3ir")
-                     '("llvm7-symver-jlprefix"
-                       "00ng32x6xhm9czczirn5r1q1mc1myad44fqhi061hwh1vb46dwgm")
-                     '("llvm-6.0-DISABLE_ABI_CHECKS"
-                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-                     '("llvm9-D50010-VNCoercion-ni"
-                       "1s1d3sjsiq4vxg7ncy5cz56zgy5vcq6ls3iqaiqkvr23wyryqmdx")
-                     '("llvm7-revert-D44485"
-                       "0f59kq3p3mpwsbmskypbi4zn01l6ig0x7v2rjp08k2r8z8m6fa8n")
-                     '("llvm-11-D75072-SCEV-add-type"
-                       "176xi1lnbnv2rcs05ywhyb7pd0xgmibayvwzksksg44wg2dh8mbx")
-                     '("llvm-julia-tsan-custom-as"
-                       "0awh40kf6lm4wn1nsjd1bmhfwq7rqj811szanp2xkpspykw9hg9s")
-                     '("llvm-D80101"
-                       "1gsdwmgmpbignvqyxcnlprj899259p3dvdznlncd84ss445qgq3j")
-                     '("llvm-D84031"
-                       "0nks9sbk7p0r5gyr0idrmm93a5fmdai8kihz9532dx4zhcvvqbjc")
-                     '("llvm-10-D85553"
-                       "1zjq7j9q2qp56hwkc8yc8f0z7kvam3j7hj8sb7qyd77r255ff78l")
-                     '("llvm-10-unique_function_clang-sa"
-                       "1jys9w2zqk3dasnxqh0qz5ij7rxi6mkgq9pqjsclmamr5169zyan")
-                     ;'("llvm-D88630-clang-cmake"
-                     ;  "0rs6s71nqnjkny7i69gqazhqj5jqfdr0bkxs2v5a55sfx8fa1k54")
-                     '("llvm-11-D85313-debuginfo-empty-arange"
-                       "1f672d5385xpgb8yrim8d3b7wg2z1l81agnshm1q61kdvjixqx32")
-                     '("llvm-11-D90722-rtdyld-absolute-relocs"
-                       "0kmnai229yyxkmpk9lxd180mcnhk2i8d87k2sg89gc8as18w10r6")
-                     '("llvm-invalid-addrspacecast-sink"
-                       "1n1b7j4s80vj7x5377aj9vyphmxx1q6bm0chhkxp6zsy3mx3g2ry")
-                     '("llvm-11-D92906-ppc-setjmp"
-                       "0cmd4dsblp7a8m03j16dqxws0ijh55zf4jzzxmj341qxa1gamdp9")
-                     '("llvm-11-PR48458-X86ISelDAGToDAG"
-                       "0vwzvlhsdazhxg4gj8g2f00a4f8qc5cgac23w575xk3pgba1jh6y")
-                     '("llvm-11-D93092-ppc-knownbits"
-                       "1748bypsc7c9lbs3fnkv0kwvch6bn85kj98j4jdaz254ig0wa6xj")
-                     '("llvm-11-D93154-globalisel-as"
-                       "1k5wd4z3pa7zj0gyjkif7viqj906dhqlbb7dc95gig40nbxv6zpj")
-                     '("llvm-11-ppc-half-ctr"
-                       "0piywisfz6cmw3133kz7vzhiqflq2y7igakqxlym0gi8pqylv7w9")
-                     '("llvm-11-ppc-sp-from-bp"
-                       "1wmg3485cx5f9pbykyl3jibk1wwv4w1x30hl4jyfndzr2yh8azf9")
-                     '("llvm-rGb498303066a6-gcc11-header-fix"
-                       "0hkd4rwhvh8g2yh13g29wiwnjpv2yd1hdyiv1ryw8izl25bz9c67")
-                     '("llvm-11-D94813-mergeicmps"
-                       "0cmy0ywkgyrdcvr9bd6pd912lyd4gcsrib4z0v05dwgcdxhk7y29")
-                     '("llvm-11-D94980-CTR-half"
-                       "1yf8cxib3z8hz7zi9n6v2g2c6vpfr4slq9hpx8m8yq8f1jbyw3fw")
-                     '("llvm-11-D94058-sext-atomic-ops"
-                       "1x6p6k6q651z5jcqxx8vj17cxnv196mka7mwn7dpp6c23lwgfdpb")
-                     '("llvm-11-D96283-dagcombine-half"
-                       "0lv4iq2f8qrcz1xyxfic3bcr5p0aqam3a7c6pp6fnw3riixm096k"))))
-              (patch-flags '("-p1"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments llvm-11)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-round-two
-             ;; We have to do the patching in two rounds because we can't
-             ;; pass '-p1' and '-p2' in the source field.
-             (lambda* (#:key inputs #:allow-other-keys)
-               (map (lambda (patchname)
-                      (invoke "patch" patchname "-p2"))
-                    (list "llvm-11-AArch64-FastIsel-bug"
-                          "llvm-11-D97435-AArch64-movaddrreg"
-                          "llvm-11-D97571-AArch64-loh"
-                          "llvm-11-aarch64-addrspace"))))))
-       ((#:build-type _) "Release")
-       ((#:configure-flags flags)
-        `(list
-           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
-           ;; Julia insists on it, nothing more.  This reduces build times and
-           ;; disk usage.
-           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
-           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
-
-           "-DLLVM_INSTALL_UTILS=ON"
-           "-DLLVM_BUILD_TESTS=ON"
-           "-DLLVM_ENABLE_FFI=ON"
-           "-DLLVM_ENABLE_RTTI=ON"
-           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
-           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
-           ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
-           "-DLLVM_ENABLE_DUMP=ON"
-           "-DLLVM_LINK_LLVM_DYLIB=ON"
-           "-DLLVM_VERSION_SUFFIX:STRING=jl"))))
-    (inputs
-     (append
-       (package-inputs llvm-11)
-       `(("llvm-11-AArch64-FastIsel-bug"
-          ,(julia-patch "llvm-11-AArch64-FastIsel-bug"
-                        "1m2vddj1mw4kbij8hbrx82piyy6bvr2x7wwdnlxfaqcm72ipzyh9"))
-         ("llvm-11-D97435-AArch64-movaddrreg"
-          ,(julia-patch "llvm-11-D97435-AArch64-movaddrreg"
-                        "10jnavq9ljkj7j2gqj2zd1pwqpqb5zs3zp9h96pmz0djbmxwa86y"))
-         ("llvm-11-D97571-AArch64-loh"
-          ,(julia-patch "llvm-11-D97571-AArch64-loh"
-                        "128zcbg1w1j7hngsf7z1a7alc6lig6l2rqgjp6i8nk3k3f842v6n"))
-         ("llvm-11-aarch64-addrspace"
-          ,(julia-patch "llvm-11-aarch64-addrspace"
-                        "0ckbzgfirxrf2d5bpinpngp7gnilbjrk0cbdfyl3h6f5v6i6xj6m")))))))
-
 (define-public libwhich
   (package
     (name "libwhich")
@@ -264,7 +128,7 @@
              #t)))))
     (native-inputs
      ;; used for tests
-     `(("zlib" ,zlib)))
+     (list zlib))
     (build-system gnu-build-system)
     (home-page "https://github.com/vtjnash/libwhich")
     (synopsis "Like @code{which}, for dynamic libraries")
@@ -285,7 +149,8 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (base32
                 "1515x8fs25l3f9csbmd1v4nm041zvjnvigy6s5iidy4yrkwdx4r5"))
               (patches
-               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"
+                               "julia-allow-parallel-build.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -331,8 +196,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (("(install: .*) \\$\\(BUILDROOT\\)/doc/_build/html/en/index.html" _ line)
                 (string-append line "\n"))
                (("src ui doc deps")
-                "src ui deps"))
-             #t))
+                "src ui deps"))))
          (add-after 'unpack 'use-system-libwhich
            (lambda* (#:key inputs #:allow-other-keys)
              ;; don't build it
@@ -341,15 +205,13 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              ;; call our version
              (substitute* "base/Makefile"
                (("\\$\\$\\(build_depsbindir\\)/libwhich")
-                (string-append (assoc-ref inputs "libwhich") "/bin/libwhich")))
-             #t))
+                (search-input-file inputs "/bin/libwhich")))))
          (add-after 'unpack 'change-number-of-precompile-statements
            (lambda _
              ;; Remove nss-certs drops the number of statements below 1200,
              ;; causing the build to fail prematurely.
              (substitute* "contrib/generate_precompile.jl"
-               (("1200") "1100"))
-             #t))
+               (("1200") "1100"))))
          ;; For some reason libquadmath is unavailable on this architecture.
          ;; https://github.com/JuliaLang/julia/issues/41613
          ,@(if (target-aarch64?)
@@ -387,14 +249,11 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
 
              (substitute* "base/Makefile"
                (("\\$\\(build_includedir\\)/uv/errno.h")
-                (string-append (assoc-ref inputs "libuv")
-                               "/include/uv/errno.h")))
-             #t))
+                (search-input-file inputs "/include/uv/errno.h")))))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
-               (("/bin/sh") (which "sh")))
-             #t))
+               (("/bin/sh") (which "sh")))))
          (add-before 'build 'shared-objects-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((jlpath
@@ -458,26 +317,37 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                   (to "suitesparse" "libsuitesparseconfig"))
                  (((from "libumfpack")) (to "suitesparse" "libumfpack")))
                (substitute* (jlpath "Zlib")
-                 (((from "libz")) (to "zlib" "libz"))))
-              #t))
+                 (((from "libz")) (to "zlib" "libz"))))))
+         (add-after 'unpack 'enable-parallel-tests
+           (lambda* (#:key parallel-tests? #:allow-other-keys)
+             (setenv "JULIA_CPU_THREADS" (if parallel-tests?
+                                             (number->string (parallel-job-count))
+                                             "1"))
+             (format #t "JULIA_CPU_THREADS environment variable set to ~a~%"
+                     (getenv "JULIA_CPU_THREADS"))))
          (add-after 'unpack 'adjust-test-suite
            (lambda* (#:key inputs #:allow-other-keys)
-             (let (;(pcre2 (assoc-ref inputs "pcre2"))
+             (let ((pcre2 (assoc-ref inputs "pcre2"))
                    (mbedtls-apache (assoc-ref inputs "mbedtls"))
                    (mpfr (assoc-ref inputs "mpfr"))
+                   (gmp (assoc-ref inputs "gmp"))
+                   (nghttp2 (assoc-ref inputs "libnghttp2"))
                    (suitesparse (assoc-ref inputs "suitesparse")))
                ;; Some tests only check to see if the input is the correct version.
-               ;(substitute* "stdlib/PCRE2_jll/test/runtests.jl"
-               ;  (("10.36.0") ,(package-version pcre2)))
+               (substitute* "stdlib/PCRE2_jll/test/runtests.jl"
+                 (("10.36.0") ,(package-version pcre2)))
                (substitute* "stdlib/MbedTLS_jll/test/runtests.jl"
                  (("2.24.0") ,(package-version mbedtls-apache)))
                (substitute* "stdlib/MPFR_jll/test/runtests.jl"
                  (("4.1.0") ,(package-version mpfr)))
+               (substitute* "stdlib/GMP_jll/test/runtests.jl"
+                 (("6.2.0") ,(package-version gmp)))
+               (substitute* "stdlib/nghttp2_jll/test/runtests.jl"
+                 (("1.41.0") ,(package-version nghttp2)))
                (substitute* "stdlib/SuiteSparse_jll/test/runtests.jl"
                  (("5004") ,(string-replace-substring
                               (version-major+minor
-                                (package-version suitesparse)) "." "0")))
-               #t)))
+                                (package-version suitesparse)) "." "0"))))))
          (add-before 'check 'disable-broken-tests
            (lambda _
              ;; disabling REPL tests because they require a stdin
@@ -490,8 +360,8 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              ;; Dates/io tests fail on master when networking is unavailable
              ;; https://github.com/JuliaLang/julia/issues/34655
              (substitute* "stdlib/Dates/test/io.jl"
-               (("\"Dates.Date") "\"Date")
-               (("\"Dates.Time") "\"Time"))
+               (("using Dates") "import Dates
+using Dates: @dateformat_str, Date, DateTime, DateFormat, Time"))
              ;; Upstream bug I found when packaging
              ;; https://github.com/JuliaLang/julia/issues/35785
              (substitute* "test/file.jl"
@@ -515,7 +385,19 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
              (substitute* "test/cmdlineargs.jl"
                (("test v\\[3") "test_broken v[3")
                (("test isempty\\(v\\[3") "test_broken isempty(v[3"))
-             #t))
+             ;; These tests randomly fails because they depend on CPU.
+             (substitute* "stdlib/LinearAlgebra/test/matmul.jl"
+               ;; Fixed in v1.6.4 (see:
+               ;; https://github.com/JuliaLang/julia/blob/v1.6.4/
+               ;; stdlib/LinearAlgebra/test/matmul.jl#L155).
+               (("@test mul\\!\\(C, vf, transpose\\(vf\\), 2, 3\\)\
+ == 2vf\\*vf' \\.\\+ 3C0")
+                "@test mul!(C, vf, transpose(vf), 2, 3) ≈ 2vf*vf' .+ 3C0"))
+             (substitute* "test/math.jl"
+               ;; @test_broken cannot be used because if the test randomly
+               ;; passes, then it also raises an error.
+               (("@test isinf\\(log1p\\(-one\\(T\\)\\)\\)")
+                " "))))
          (add-before 'install 'symlink-libraries
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((link
@@ -536,8 +418,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (link "zlib" "usr/lib/julia/" "libz\\.so")
                (link "libunwind" "usr/lib/julia/" "libunwind\\.so")
                (symlink (string-append (assoc-ref inputs "p7zip") "/bin/7z")
-                        "usr/libexec/7z")
-               #t)))
+                        "usr/libexec/7z"))))
          (add-after 'install 'symlink-llvm-utf8proc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -552,8 +433,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                         (find-files (string-append (assoc-ref inputs pkgname)
                                                    "/lib") pred)))))
                (link "llvm" "libLLVM-11jl\\.so")
-               (link "utf8proc" "libutf8proc\\.so")
-               #t)))
+               (link "utf8proc" "libutf8proc\\.so"))))
          (add-after 'install 'make-wrapper
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -564,8 +444,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                    `("JULIA_LOAD_PATH" ":" prefix
                      ("" "$JULIA_LOAD_PATH"))
                    `("JULIA_DEPOT_PATH" ":" prefix
-                     ("" "$JULIA_DEPOT_PATH"))))
-               #t))))
+                     ("" "$JULIA_DEPOT_PATH"))))))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -641,7 +520,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
        ("gfortran:lib" ,gfortran "lib")
        ("gmp" ,gmp)
        ("lapack" ,lapack)
-       ("libgit2" ,libgit2)
+       ("libgit2" ,libgit2-1.1)
        ("libnghttp2" ,nghttp2 "lib")
        ("libssh2" ,libssh2)
        ("libunwind" ,libunwind-julia)
@@ -652,9 +531,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
        ("openblas" ,openblas)
        ("openlibm" ,openlibm)
        ("p7zip" ,p7zip)
-       ;; pcre2-10.35 has a bug with the JIT regex parser:
-       ;; https://github.com/JuliaLang/julia/issues/40231#issuecomment-812753324
-       ("pcre2" ,pcre2-10.36)
+       ("pcre2" ,pcre2)
        ("suitesparse" ,suitesparse)
        ("utf8proc" ,utf8proc-2.6.1)
        ("wget" ,wget)
diff --git a/gnu/packages/jupyter.scm b/gnu/packages/jupyter.scm
index 0de7ad998a..56ced35204 100644
--- a/gnu/packages/jupyter.scm
+++ b/gnu/packages/jupyter.scm
@@ -58,15 +58,10 @@
                 "1bk3as5yw9y5nmq6l15nr46aby34phmvsx9kxgqnm5pd5q2b5h57"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil python-jupyter-core python-pyzmq
+           python-traitlets))
     (native-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-ipykernel python-ipython python-mock python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter protocol implementation")
     (description
@@ -88,17 +83,14 @@ protocol} to be used by both clients and kernels.")
                 "0i7a78dn89ca8h0a42giyxwcmk6y4wrdr7q8h2ax9vybb84c795q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-jupyter-protocol" ,python-jupyter-protocol)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil
+           python-entrypoints
+           python-jupyter-core
+           python-jupyter-protocol
+           python-pyzmq
+           python-traitlets))
     (native-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-ipykernel python-ipython python-mock python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Discover, launch, and communicate with Jupyter kernels")
     (description
@@ -140,9 +132,8 @@ launching and using Jupyter kernels.")
                                               "\\.py$"))
                         #t))))))
     (propagated-inputs
-     `(("python-jupyter-kernel-mgmt" ,python-jupyter-kernel-mgmt)
-       ("python-jupyter-protocol" ,python-jupyter-protocol)
-       ("python-jsonschema" ,python-jsonschema)))
+     (list python-jupyter-kernel-mgmt python-jupyter-protocol
+           python-jsonschema))
     (synopsis "Test Jupyter kernels")
     (description
      "@code{jupyter_kernel_test} is a tool for testing Jupyter kernels.  It
@@ -170,21 +161,20 @@ Messaging Protocol}.")
                            "-DDISABLE_ARCH_NATIVE=ON" ;no '-march=native'
                            "-DBUILD_TESTING=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; The following inputs are used by the test suite.
-       ("googletest" ,googletest)
-       ("python-pytest" ,python-pytest)
-       ("python" ,python-3)
-       ("python-jupyter-kernel-test" ,python-jupyter-kernel-test)
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list pkg-config
+           ;; The following inputs are used by the test suite.
+           googletest
+           python-pytest
+           python-3
+           python-jupyter-kernel-test
+           python-jupyter-client))
     (inputs
-     `(("xtl" ,xtl)
-       ("json-modern-cxx" ,json-modern-cxx)
-       ("cppzmq" ,cppzmq)
-       ("zeromq" ,zeromq)
-       ("openssl" ,openssl)
-       ("util-linux" ,util-linux "lib")))         ;libuuid
+     (list xtl
+           json-modern-cxx
+           cppzmq
+           zeromq
+           openssl
+           `(,util-linux "lib")))         ;libuuid
     (home-page "https://quantstack.net/xeus")
     (synopsis "C++ implementation of the Jupyter Kernel protocol")
     (description
@@ -212,7 +202,7 @@ alternative Python kernel for Jupyter.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; there are no tests
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (home-page "https://jupyter.org")
     (synopsis "Pygments theme using JupyterLab CSS variables")
     (description
@@ -233,17 +223,11 @@ the JupyterLab CSS variables.")
          "0r015c0m713d19asmpimsw6bk2sqv2lpd2nccgjzjdj5h1crg0bg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-deprecation" ,python-deprecation)
-       ("python-packaging" ,python-packaging)
-       ("python-setuptools" ,python-setuptools)
-       ("python-tomlkit" ,python-tomlkit)
-       ("python-wheel" ,python-wheel)))
+     (list python-deprecation python-packaging python-setuptools
+           python-tomlkit python-wheel))
     (native-inputs
-     `(("python-pypa-build" ,python-pypa-build)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pypa-build python-coverage python-pytest
+           python-pytest-cov python-pytest-mock))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter packaging utilities")
     (description "This package provides tools to help build and install
@@ -286,31 +270,31 @@ JavaScript build steps.")
                          ;; Integration tests require a server.
                          "-m" "not integration_test"))))))))
     (propagated-inputs
-     `(("python-anyio" ,python-anyio)
-       ("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)
-       ("python-prometheus-client" ,python-prometheus-client)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests-unixsocket" ,python-requests-unixsocket)
-       ("python-send2trash" ,python-send2trash)
-       ("python-terminado" ,python-terminado)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-anyio
+           python-argon2-cffi
+           python-ipython-genutils
+           python-jinja2
+           python-jupyter-client
+           python-jupyter-core
+           python-nbconvert
+           python-nbformat
+           python-prometheus-client
+           python-pyzmq
+           python-requests-unixsocket
+           python-send2trash
+           python-terminado
+           python-tornado-6
+           python-traitlets
+           python-websocket-client))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-console-scripts" ,python-pytest-console-scripts)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-tornasync" ,python-pytest-tornasync)
-       ("python-requests" ,python-requests)))
+     (list python-coverage
+           python-ipykernel
+           python-pytest
+           python-pytest-console-scripts
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-tornasync
+           python-requests))
     (home-page "https://jupyter.org")
     (synopsis "Core services, APIs, and REST endpoints for Jupyter web applications")
     (description
@@ -331,8 +315,7 @@ endpoints—to Jupyter web applications.")
          "0y7vhhas3qndiypcpcfnhrj9n92v2w4hdc86nn620s9h9nl2j6jw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-jupyter-packaging" ,python-jupyter-packaging)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-jupyter-packaging python-setuptools))
     (home-page "https://github.com/jupyter-widgets/ipywidgets")
     (synopsis "Interactive widgets for Jupyter Notebooks")
     (description "ipywidgets, also known as jupyter-widgets or simply widgets,
@@ -355,31 +338,28 @@ are interactive HTML widgets for Jupyter notebooks and the IPython kernel.")
     ;; nbconvert.
     (arguments '(#:tests? #false))
     (propagated-inputs
-     `(("python-async-generator" ,python-async-generator)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-nbformat" ,python-nbformat)
-       ("python-nest-asyncio" ,python-nest-asyncio)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-async-generator python-jupyter-client python-nbformat
+           python-nest-asyncio python-traitlets))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-bumpversion" ,python-bumpversion)
-       ("python-check-manifest" ,python-check-manifest)
-       ("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ;; ("python-ipykernel" ,python-ipykernel)
-       ;; ("python-ipython" ,python-ipython)
-       ;; ("python-ipywidgets" ,python-ipywidgets)
-       ("python-mypy" ,python-mypy)
-       ("python-pip" ,python-pip)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools" ,python-setuptools)
-       ("python-testpath" ,python-testpath)
-       ("python-tox" ,python-tox)
-       ("python-twine" ,python-twine)
-       ("python-wheel" ,python-wheel)
-       ("python-xmltodict" ,python-xmltodict)))
+     (list python-black
+           python-bumpversion
+           python-check-manifest
+           python-codecov
+           python-coverage
+           python-flake8
+           ;; ("python-ipykernel" ,python-ipykernel)
+           ;; ("python-ipython" ,python-ipython)
+           ;; ("python-ipywidgets" ,python-ipywidgets)
+           python-mypy
+           python-pip
+           python-pytest
+           python-pytest-cov
+           python-setuptools
+           python-testpath
+           python-tox
+           python-twine
+           python-wheel
+           python-xmltodict))
     (home-page "https://jupyter.org")
     (synopsis "Client library for executing notebooks")
     (description
@@ -420,28 +400,26 @@ nix-shell-wrapper|repo2docker-entrypoint)")
                       (let* ((out (assoc-ref outputs "doc"))
                              (doc (string-append out "/share/doc/"
                                                  ,name)))
-                        (setenv "PYTHONPATH"
+                        (setenv "GUIX_PYTHONPATH"
                                 (string-append (getcwd) ":"
-                                               (getenv "PYTHONPATH")))
+                                               (getenv "GUIX_PYTHONPATH")))
                         (with-directory-excursion "docs"
                           (invoke  "make" "html")
                           (copy-recursively "build/html"
                                             (string-append doc "/html")))))))))
     (inputs
-     `(("python-traitlets" ,python-traitlets)
-       ("python-toml" ,python-toml)
-       ("python-semver" ,python-semver)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-requests" ,python-requests)
-       ("python-json-logger" ,python-json-logger)
-       ("python-jinja2" ,python-jinja2)
-       ("python-escapism" ,python-escapism)
-       ("python-docker" ,python-docker)))
+     (list python-traitlets
+           python-toml
+           python-semver
+           python-ruamel.yaml
+           python-requests
+           python-json-logger
+           python-jinja2
+           python-escapism
+           python-docker))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-recommonmark" ,python-recommonmark)
-       ("python-sphinxcontrib-autoprogram" ,python-sphinxcontrib-autoprogram)
-       ("python-pydata-sphinx-theme" ,python-pydata-sphinx-theme)))
+     (list python-sphinx python-recommonmark
+           python-sphinxcontrib-autoprogram python-pydata-sphinx-theme))
     (home-page "https://repo2docker.readthedocs.io/en/latest/index.html#")
     (synopsis "Generate docker images from repositories")
     (description
@@ -484,11 +462,9 @@ Docker registry.")
               (invoke "python" "-m" "bash_kernel.install" "--prefix" out)
               #t))))))
    (inputs
-     `(("bash" ,bash)))
+     (list bash))
    (propagated-inputs
-     `(("python-pexpect" ,python-pexpect)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list python-pexpect python-ipykernel python-jupyter-client))
    (home-page "https://github.com/takluyver/bash_kernel")
    (synopsis "Jupyter kernel for Bash")
    (description "A bash shell kernel for Jupyter.")
@@ -525,14 +501,10 @@ Docker registry.")
                  (string-append "--InstallKernelSpec.prefix=" out))
                #t))))))
     (native-inputs
-     `(("python-traitlets" ,python-traitlets)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-notebook" ,python-notebook)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-html5lib" ,python-html5lib-0.9)))
+     (list python-traitlets python-jupyter-client python-notebook
+           python-ipykernel python-html5lib-0.9))
     (propagated-inputs
-     `(("python-sparqlwrapper" ,python-sparqlwrapper)
-       ("python-pygments" ,python-pygments)))
+     (list python-sparqlwrapper python-pygments))
     (home-page "https://github.com/paulovn/sparql-kernel")
     (synopsis "Jupyter kernel for SPARQL")
     (description "This module installs a Jupyter kernel for SPARQL.  It allows
@@ -553,19 +525,17 @@ a notebook.")
          "0krfc95yjlhjdmrsladhy6lpf4xs1zw49nmkyl4pkykndglvwa1m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jupyter-client" ,python-jupyter-client)
-       ("python-jupyter-server" ,python-jupyter-server)
-       ("python-nbclient" ,python-nbclient)
-       ("python-nbconvert" ,python-nbconvert)))
+     (list python-jupyter-client python-jupyter-server python-nbclient
+           python-nbconvert))
     (native-inputs
-     `(("python-ipywidgets" ,python-ipywidgets)
-       ("python-jupyter-packaging" ,python-jupyter-packaging)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-tornasync" ,python-pytest-tornasync)
-       ("python-setuptools" ,python-setuptools)
-       ("python-tornado" ,python-tornado-6)))
+     (list python-ipywidgets
+           python-jupyter-packaging
+           python-matplotlib
+           python-mock
+           python-pytest
+           python-pytest-tornasync
+           python-setuptools
+           python-tornado-6))
     (home-page "https://github.com/voila-dashboards/voila")
     (synopsis "Render live Jupyter notebooks with interactive widgets")
     (description
diff --git a/gnu/packages/kawa.scm b/gnu/packages/kawa.scm
index 9550a01720..49a3ca6e16 100644
--- a/gnu/packages/kawa.scm
+++ b/gnu/packages/kawa.scm
@@ -48,7 +48,7 @@
                  `("JAVA_HOME" ":" = (,(assoc-ref inputs "icedtea"))))
                #t))))))
     (inputs
-     `(("icedtea" ,icedtea-8 "jdk")))
+     (list `(,icedtea-8 "jdk")))
     (home-page "https://www.gnu.org/software/kawa/")
     (synopsis "Java framework and implementation of Scheme, Elisp, and more")
     (description
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 6a48dc229a..65937f8970 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -33,6 +33,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
@@ -167,11 +168,9 @@ common build settings used in software produced by the KDE community.")
     (native-inputs
      ;; TODO: Think about adding pulseaudio. Is it required for sound?
      ;; TODO: Add building the super experimental QML support
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:configure-flags
        '("-DCMAKE_CXX_FLAGS=-fPIC"
@@ -206,17 +205,15 @@ common build settings used in software produced by the KDE community.")
                 "1wk1ip2w7fkh65zk6rilj314dna0hgsv2xhjmpr5w08xa8sii1y5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libxml2" ,libxml2)))
+     (list qtbase-5
+           phonon
+           qtbase-5
+           qtx11extras
+           gstreamer
+           gst-plugins-base
+           libxml2))
     (arguments
      `(#:configure-flags
        '( "-DPHONON_BUILD_PHONON4QT5=ON")))
@@ -256,9 +253,9 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.")
              (substitute* "autotests/CMakeLists.txt"
                ((".*providertest.cpp") "")))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Open Collaboration Service client library")
     (description "Attica is a Qt library that implements the Open
@@ -288,18 +285,17 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/")
                 "1kqhps4qyvqm0qmk7fb3w41bib898amipchf8csdzacw4bzpri9k"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
+     (list dbus extra-cmake-modules))
     (inputs
      ;; TODO: qtdeclarative (yields one failing test)
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
-     `(#:configure-flags
-       (list (string-append
-              "-DUDEV_RULES_INSTALL_DIR=" %output "/lib/udev/rules.d"))
-       ;; TODO: Make tests pass: DBUS_FATAL_WARNINGS=0 still yields 7/8 tests
-       ;; failing.  When running after install, tests hang.
-       #:tests? #f))
+     (list #:configure-flags
+           #~(list (string-append
+                    "-DUDEV_RULES_INSTALL_DIR=" #$output "/lib/udev/rules.d"))
+           ;; TODO: Make tests pass: DBUS_FATAL_WARNINGS=0 still yields 7/8 tests
+           ;; failing.  When running after install, tests hang.
+           #:tests? #f))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QML wrapper for BlueZ")
     (description "bluez-qt is a Qt-style library for accessing the bluez
@@ -321,11 +317,9 @@ Bluetooth stack.  It is used by the KDE Bluetooth stack, BlueDevil.")
                 "0lqglrjgjb4ralgmr7lb9k7acmn8q4jm18s4p3gbgd9iswyqgsbm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("fdupes" ,fdupes)
-       ("libxml2" ,libxml2)))
+     (list extra-cmake-modules fdupes libxml2))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Default KDE Plasma 5 icon theme")
     (description "Breeze provides a freedesktop.org compatible icon theme.
@@ -352,17 +346,15 @@ It is the default icon theme for the KDE Plasma 5 desktop.")
     (arguments
      `(#:tests? #f)) ; has no test target
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (propagated-inputs
      ;; kapidox is a python programm
      ;; TODO: check if doxygen has to be installed, the readme does not
      ;; mention it. The openSuse .rpm lists doxygen, graphviz, graphviz-gd,
      ;; and python-xml.
-     `(("python" ,python)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python python-jinja2 python-pyyaml))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Doxygen Tools")
     (description "This framework contains scripts and data for building API
@@ -392,12 +384,9 @@ documentation.")
                 "0z8asn357pdbv4g9g0x18p72wskca1qanxljyix7wzc5rsi63wzm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("qtbase" ,qtbase-5)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2 qtbase-5 xz zlib))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Qt 5 addon providing access to numerous types of archives")
     (description "KArchive provides classes for easy reading, creation and
@@ -426,12 +415,9 @@ GZip format, via a subclass of QIODevice.")
                 "1y1f8gc1g9yn9kgmn53f1zvkizasfs667dfin3fyci657r5qwpw2"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("tzdata" ,tzdata-for-tests)))
+     (list extra-cmake-modules perl tzdata-for-tests))
     (inputs
-     `(("libical" ,libical)
-       ("qtbase" ,qtbase-5)))
+     (list libical qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -457,9 +443,8 @@ GZip format, via a subclass of QIODevice.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "Europe/Prague")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library for interfacing with calendars")
     (description "This library provides access to and handling of calendar
@@ -487,11 +472,9 @@ and the older vCalendar.")
                 "0y9n2a5n18pasdmrp0xb84hla9l27yj2x3k4p1c041sd9nkwixpk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gperf" ,gperf)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules gperf qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "String encoding and manipulating library")
     (description "KCodecs provide a collection of methods to manipulate
@@ -523,13 +506,10 @@ Internet).")
                 "1s3h4hfpw7c0894cifj66bj1yhx8g94ckvl71jm7qqsb5x5h6y9n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("inetutils" ,inetutils)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list dbus extra-cmake-modules inetutils qttools
+           xorg-server-for-tests))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -588,13 +568,11 @@ propagate their changes to their respective configuration files.")
                 "10a7zys3limsawl7lk9ggymk3msk2bp0y8hp0jmsvk3l405pd1ps"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)
-       ;; TODO: FAM: File alteration notification http://oss.sgi.com/projects/fam
-       ("xorg-server" ,xorg-server-for-tests))) ; for the tests
+     (list extra-cmake-modules qttools shared-mime-info
+           ;; TODO: FAM: File alteration notification http://oss.sgi.com/projects/fam
+           xorg-server-for-tests)) ; for the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -646,13 +624,9 @@ many more.")
               (patches (search-patches "kdbusaddons-kinit-file-name.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("kinit" ,kinit-bootstrap))) ;; kinit-bootstrap: kinit package which does not depend on kdbusaddons.
+     (list qtbase-5 qtx11extras kinit-bootstrap)) ;; kinit-bootstrap: kinit package which does not depend on kdbusaddons.
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -690,11 +664,10 @@ as well as an API to create KDED modules.")
                 "0wadknnf472rqg2xnqzs5v23qzqfr336wj6d96yg2ayqm0chbppy"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("avahi" ,avahi) ; alternativly dnssd could be used
-       ("qtbase" ,qtbase-5)))
+     (list avahi ; alternativly dnssd could be used
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Network service discovery using Zeroconf")
     (description "KDNSSD is a library for handling the DNS-based Service
@@ -717,16 +690,14 @@ infrastructure.")
                 "1h6pgg89gvxl8gw7wmkabyqqrzad5pxyv5lsmn1fl4ir8lcc5q2l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("boost" ,boost)
-       ("graphviz" ,graphviz)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5
+           boost
+           graphviz
+           kiconthemes
+           kparts
+           qtsvg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list pkg-config extra-cmake-modules kdoctools))
     (home-page "https://apps.kde.org/en/kgraphviewer")
     (synopsis "Graphviz dot graph viewer for KDE")
     (description "KGraphViewer is a Graphviz DOT graph file viewer, aimed to
@@ -752,11 +723,9 @@ replace the other outdated Graphviz tools.")
     ;; python-sip, clang-python, libclang.  Requires python-2 in all cases for
     ;; clang-python.
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Utilities for graphical user interfaces")
     (description "The KDE GUI addons provide utilities for graphical user
@@ -787,11 +756,9 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.")
                  (display "[testDefaultRegions]\n*\n")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://invent.kde.org/frameworks/kholidays")
     (synopsis "Library for regional holiday information")
     (description "This library provides a C++ API that determines holiday and
@@ -816,11 +783,9 @@ other special events for a geographical region.")
      `(("gettext" ,gettext-minimal)
        ("python" ,python)))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)))
+     (list qtbase-5 qtdeclarative qtscript))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -856,12 +821,10 @@ translation scripting.")
                 "0vbxs80a8kh2xbxclx8zwl7acynsasa7i0cs171fxr26d0dmmhm5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("libxscrnsaver" ,libxscrnsaver) ; X-Screensaver based poller, fallback mode
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list libxscrnsaver ; X-Screensaver based poller, fallback mode
+           qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Reporting of idle time of user and system")
     (description "KIdleTime is a singleton reporting information on idle time.
@@ -888,19 +851,18 @@ or user activity.")
     (properties `((upstream-name . "kirigami2")))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ;; TODO: Find a way to activate this optional include without
-       ;; introducing a recursive dependency.
-       ;;("plasma-frameworks" ,plasma-framework) ;; Tier 3!
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ;; Run-time dependency
-       ("qtgraphicaleffects" ,qtgraphicaleffects)))
+     (list kwindowsystem
+           ;; TODO: Find a way to activate this optional include without
+           ;; introducing a recursive dependency.
+           ;;("plasma-frameworks" ,plasma-framework) ;; Tier 3!
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols2
+           qtsvg
+           ;; Run-time dependency
+           qtgraphicaleffects))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QtQuick components for mobile user interfaces")
     (description "Kirigami is a set of high level QtQuick components looking
@@ -923,10 +885,9 @@ of applications that follow the Kirigami Human Interface Guidelines.")
                 "0x7y5shg2pp490hvmkz81b8j01cha9j1001q34m7pnyf0n3zknzc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Set of item models extending the Qt model-view framework")
     (description "KItemModels provides the following models:
@@ -974,10 +935,9 @@ model to observers
                 "04vlmkvc3y5h7cpb6kdv9gha5axxkimhqh44mdg2ncyn4sas6j68"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Set of item views extending the Qt model-view framework")
     (description "KItemViews includes a set of views, which can be used with
@@ -1000,10 +960,9 @@ to flat and hierarchical lists.")
                 "1wj4n2a8iz9ml1y0012xkpsx3dfp5gl2dn80sifrzvkxjxrhwach"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Data plotting library")
     (description "KPlotWidget is a QWidget-derived class that provides a virtual
@@ -1028,13 +987,11 @@ pixel units.")
                 "12jn7lqsp86329spai7n1n8i65nwhxh8gp33wkq543h7w3i2a3jb"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("qttools" ,qttools)
-       ;; Optional, for compile-time validation of syntax definition files:
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list extra-cmake-modules perl qttools
+           ;; Optional, for compile-time validation of syntax definition files:
+           qtxmlpatterns))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1077,13 +1034,9 @@ integration with a custom editor as well as a ready-to-use
                 "0hrpbfzixjpnfy9q5x66q1fff0p7n80rrs127zzdv68pyi6456ry"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtwayland" ,qtwayland)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list qtbase-5 qtwayland wayland wayland-protocols))
     (arguments
      `(#:tests? #f ; FIXME tests require weston to run
                    ; weston requires wayland flags in mesa
@@ -1118,11 +1071,9 @@ represented by a QPoint or a QSize.")
                 "03l37lh219np7pqfa56r2v7n5s5xg4rjq005qng4b5izd95ri56j"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list extra-cmake-modules qttools xorg-server-for-tests))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1155,12 +1106,12 @@ configuration pages, message boxes, and password requests.")
                 "0a68cj0bsl5a9sxfd969khznycrn9p6grp2b08hqacxqdknzs0wh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("dbus" ,dbus) ; for the tests
-       ("openbox" ,openbox) ; for the tests
-       ("qttools" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests))) ; for the tests
+     (list extra-cmake-modules
+           pkg-config
+           dbus ; for the tests
+           openbox ; for the tests
+           qttools
+           xorg-server-for-tests)) ; for the tests
     (inputs
      `(("libxrender" ,libxrender)
        ("qtbase" ,qtbase-5)
@@ -1218,14 +1169,12 @@ lower level classes for interaction with the X Windowing System.")
                 "0ydq1l823jgp0yrrpqi1zdk5dsg65ydk1x082qwsa9a0vzs0np3x"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules dbus pkg-config))
     (propagated-inputs
      ;; Headers contain #include <ModemManager/ModemManager.h>
-     `(("modem-manager" ,modem-manager)))
+     (list modem-manager))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1256,15 +1205,13 @@ messages.")
                 "1h2kdw5vs7mn3n7bvqwm36a48ra9iap6384kanz14zjbankj04c1"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules dbus pkg-config))
     (propagated-inputs
      ;; Headers contain #include <NetworkManager.h> and
      ;;                 #include <libnm/NetworkManager.h>
-     `(("network-manager" ,network-manager)))
+     (list network-manager))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1295,10 +1242,9 @@ which are used in DBus communication.")
                 "1rjsnz0g7zyzgii26sk370adb6jcyvr2lm8qi23fvqimifngqm2c"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("fdupes" ,fdupes)))
+     (list extra-cmake-modules fdupes))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Oxygen provides the standard icon theme for the KDE desktop")
     (description "Oxygen icon theme for the KDE desktop")
@@ -1319,11 +1265,9 @@ which are used in DBus communication.")
         (base32 "1qflivvb593d2npc218xkdn3w5zvl7x8v1b52ydnggsxzbgkqvb4"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("libdmtx" ,libdmtx)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5))) ;; TODO: rethink: nix propagates this
+     (list libdmtx qrencode qtbase-5)) ;; TODO: rethink: nix propagates this
     (home-page "https://api.kde.org/frameworks/prison/html/index.html")
     (synopsis "Barcode generation abstraction layer")
     (description "Prison is a Qt-based barcode abstraction layer/library and
@@ -1343,13 +1287,9 @@ provides uniform access to generation of barcodes with data.")
                 "1i0ql68kxv9jxs24rsd3s7jhjid3f2fq56fj4wbp16zb4wd14099"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("pulseaudio" ,pulseaudio)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtbase" ,qtbase-5)))
+     (list glib pulseaudio qtdeclarative qtbase-5))
     (home-page "https://invent.kde.org/libraries/pulseaudio-qt/")
     (synopsis "Qt bindings for PulseAudio")
     (description
@@ -1376,17 +1316,16 @@ libpulse.")
                 "1n47cl082zqdw6ykil04rw6bws4fn1m8wfx4vxv1aqj9warbdks3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfigwidgets" ,kconfigwidgets) ; optional
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes) ; optional
-       ("kirigami" ,kirigami)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols2" ,qtquickcontrols2)))
+     (list kauth
+           kconfigwidgets ; optional
+           kcoreaddons
+           kiconthemes ; optional
+           kirigami
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols2))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "QtQuickControls2 style that integrates with the desktop")
     (description "This is a style for QtQuickControls2 which is using
@@ -1417,11 +1356,7 @@ feel.")
              (setenv "DBUS_FATAL_WARNINGS" "0")
              (invoke "dbus-launch" "ctest" "."))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("flex" ,flex)
-       ("qttools" ,qttools)))
+     (list bison dbus extra-cmake-modules flex qttools))
     (inputs
      `(("qtbase" ,qtbase-5)
        ("qtdeclarative" ,qtdeclarative)
@@ -1449,13 +1384,11 @@ system.")
                 "0b88h5fw1n8zyrg0vq3lj2jbjjyh0mk64lj6ab3643kxzqxbn30w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("hunspell" ,hunspell)
-       ;; TODO: hspell (for Hebrew), Voikko (for Finish)
-       ("qtbase" ,qtbase-5)))
+     (list hunspell
+           ;; TODO: hspell (for Hebrew), Voikko (for Finish)
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Multi-language spell checker")
     (description "Sonnet is a plugin-based spell checking library for Qt-based
@@ -1478,9 +1411,9 @@ ASpell and HUNSPELL.")
                 "0y1q0wy073lf11g4jrp4bdw4kpj4ibqfscsxj6zlh8ban9zlf389"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Helper for multithreaded programming")
     (description "ThreadWeaver is a helper for multithreaded programming.  It
@@ -1508,26 +1441,26 @@ uses a job-based interface to queue tasks and execute them in an efficient way."
                 "1whsp0f87lrcn61s9rfhy0aj68hm6zgfa38mq6frlkcjksi0z1vn"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("boost" ,boost)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list extra-cmake-modules))
+    (inputs
+     (list boost
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           qtbase-5
+           qtdeclarative
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Core components for the KDE Activity concept")
     (description "KActivities provides the infrastructure needed to manage a
@@ -1553,13 +1486,9 @@ with other frameworks.")
                 "0nmdz7ra3hpg0air4lfkzilv7cwx3zxs29k7sh8l3i1fs3qpjwxm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list dbus extra-cmake-modules qttools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("polkit-qt" ,polkit-qt)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons polkit-qt qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1600,12 +1529,9 @@ utilities.")
                 "1pjgya8wi28jx63hcdi9v5f5487gzbkw2j1iganhd7bhcb8s7zpy"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig kwidgetsaddons qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Powerful autocompletion framework and widgets")
     (description "This framework helps implement autocompletion in Qt-based
@@ -1628,16 +1554,12 @@ integrated it into your application's other widgets.")
                 "182ma11z3kqxq3cwy7kwprfqkb9bcmn44w7k9vixbid4pv5wa0lb"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("xorg-server" ,xorg-server))) ; for the tests
+     (list extra-cmake-modules xorg-server)) ; for the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
-     `(;; As required by KF5ContactsConfig.cmake.
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)))
+     (list ;; As required by KF5ContactsConfig.cmake.
+           kcodecs kconfig kcoreaddons ki18n))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1647,8 +1569,7 @@ integrated it into your application's other widgets.")
              ;; Xvfb doesn't have proper glx support and needs a pixeldepth
              ;; of 24 bit to avoid "libGL error: failed to load driver: swrast"
              ;;                    "Could not initialize GLX"
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://community.kde.org/Frameworks")
@@ -1674,12 +1595,9 @@ localized country name to ISO 3166-1 alpha 2 code mapping and vice verca.
                 "11sy9hrjpvybqi53qjrnncy9mzifrb3vqxi2d12ldjzqyqd8pirp"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcoreaddons kwindowsystem qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Graceful handling of application crashes")
     (description "KCrash provides support for intercepting and handling
@@ -1701,17 +1619,17 @@ application crashes.")
                 "0g0k83np2xaxk05spf14h5fvzy0n7kbcwx1sa9wjh570f6jx87am"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("qtbase" ,qtbase-5)))
+     (list docbook-xml
+           docbook-xsl
+           karchive
+           ki18n
+           libxml2
+           libxslt
+           perl
+           perl-uri
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1775,20 +1693,20 @@ from DocBook files.")
        ("pkg-config" ,pkg-config)
        ("python-2" ,python-2)))
     (inputs
-     `(("attr" ,attr)
-       ;; TODO: EPub http://sourceforge.net/projects/ebook-tools
-       ("karchive" ,karchive)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtbase" ,qtbase-5)
-       ;; Required run-time packages
-       ("catdoc" ,catdoc)
-       ;; Optional run-time packages
-       ("exiv2" ,exiv2)
-       ("ffmpeg" ,ffmpeg)
-       ("poppler-qt5" ,poppler-qt5)
-       ("taglib" ,taglib)))
+     (list attr
+           ;; TODO: EPub http://sourceforge.net/projects/ebook-tools
+           karchive
+           kcoreaddons
+           ki18n
+           qtmultimedia
+           qtbase-5
+           ;; Required run-time packages
+           catdoc
+           ;; Optional run-time packages
+           exiv2
+           ffmpeg
+           poppler-qt5
+           taglib))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Extract metadata from different fileformats")
     (description "KFileMetaData provides a simple library for extracting the
@@ -1812,12 +1730,11 @@ by applications to write metadata.")
                 "0pk4b725wapzdxv1mm6ddqcl6z8ffcpr32i5vrhrin8awi5gx13s"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("karchive" ,karchive) ; for Krita and OpenRaster images
-       ("openexr" ,openexr-2) ; for OpenEXR high dynamic-range images
-       ("qtbase" ,qtbase-5)))
+     (list karchive ; for Krita and OpenRaster images
+           openexr-2 ; for OpenEXR high dynamic-range images
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1866,13 +1783,9 @@ formats.")
                 "13kdczzyyh17hf6vlhh4li5bn4yq5bab5xa8mm63r9rynxihgclf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcoreaddons kwidgetsaddons qtbase-5 qtx11extras))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Widgets for showing progress of asynchronous jobs")
     (description "KJobWIdgets provides widgets for showing progress of
@@ -1894,20 +1807,18 @@ asynchronous jobs.")
                 "01bn23xw2n53h9nl99lm3cjnqs8s66bmwkzf6fkpg9rzkykizbyc"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus qttools))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)
-       ;; TODO: Think about adding dbusmenu-qt5 from
-       ;; https://launchpad.net/libdbusmenu-qt
-       ("qtx11extras" ,qtx11extras)))
+     (list kcodecs
+           kconfig
+           kcoreaddons
+           kwindowsystem
+           phonon
+           qtbase-5
+           qtspeech
+           ;; TODO: Think about adding dbusmenu-qt5 from
+           ;; https://launchpad.net/libdbusmenu-qt
+           qtx11extras))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1944,14 +1855,14 @@ covers feedback and persistent events.")
                                        "kpackage-fix-KF5PackageMacros.cmake.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list karchive
+           kconfig
+           kcoreaddons
+           kdoctools
+           ki18n
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2002,12 +1913,11 @@ were traditional plugins.")
                 "1hp6iilr2asf2269linfazjv4yjg7rsi8wydxx53yyr99r0bgmah"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ;; TODO: utempter, for managing UTMP entries
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons ki18n
+           ;; TODO: utempter, for managing UTMP entries
+           qtbase-5))
     (arguments
      `(#:tests? #f ; FIXME: 1/1 tests fail.
        #:phases
@@ -2049,10 +1959,9 @@ and communicating with them using a pty.")
              (substitute* "autotests/convertertest.cpp"
                (("const int numThreads = 2") "const int numThreads = 0")))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Converting physical units")
     (description "KUnitConversion provides functions to convert values in
@@ -2076,10 +1985,9 @@ gallons).")
                 "1n3x8s1z4kd30xirfr07hi87vwhk4rilb5kslcjcgp5n9c0imcpv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "RSS/Atom parser library")
     (description "@code{syndication} supports RSS (0.9/1.0, 0.91..2.0) and
@@ -2109,29 +2017,27 @@ between feed formats.")
                 "1cf5pp9hn3pqypwyzh63ksasap3n7qz6n3y2xgb83ss3fra90pjf"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kfilemetadata" ,kfilemetadata)))
-    (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kidletime" ,kidletime)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("lmdb" ,lmdb)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kcoreaddons kfilemetadata))
+    (native-inputs
+     (list dbus extra-cmake-modules))
+    (inputs
+     (list kbookmarks
+           kcompletion
+           kconfig
+           kcrash
+           kdbusaddons
+           kidletime
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           lmdb
+           qtbase-5
+           qtdeclarative
+           solid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2183,13 +2089,9 @@ maintaining an index of the contents of your files.")
                 "1cnfdnxkw9hwbqdzdygp2vzwxqwqhxyipzwdcgar0clgnf7zi7wx"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("boost" ,boost)
-       ("kactivities" ,kactivities)
-       ("kconfig" ,kconfig)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list boost kactivities kconfig qtbase-5 qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Access usage statistics collected by the activity manager")
     (description "The KActivitiesStats library provides a querying mechanism for
@@ -2213,19 +2115,18 @@ by which applications, and what documents have been linked to which activity.")
                 "1i5vcyvyc9whmflbcg2kc562ch93yscfic1c1n9z347g26jmgras"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kwidgetsaddons" ,kwidgetsaddons)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kwidgetsaddons))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kauth
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2256,10 +2157,9 @@ using the XBEL format.")
                 "08f4yr546brl1dppp0khvsw9ihmh9a7rp505913pdhi0sklaiimz"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfigwidgets" ,kconfigwidgets)
-       ("kservice" ,kservice)))
+     (list kconfigwidgets kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2275,20 +2175,20 @@ using the XBEL format.")
                 (string-append a " KCM plugin\" << mod.service()->library() << \":\"" c)))
              #t)))))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kpackage" ,kpackage)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list kauth
+           kcodecs
+           kconfig
+           kcoreaddons
+           kdeclarative
+           kguiaddons
+           kiconthemes
+           kitemviews
+           ki18n
+           kpackage
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtdeclarative))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Utilities for KDE System Settings modules")
     (description "KCMUtils provides various classes to work with KCModules.
@@ -2310,20 +2210,16 @@ KCModules can be created with the KConfigWidgets framework.")
                 "195dw7nyr3fp78y3vfnyjh0hwgwk46f80wdcm8dck5rkscl3v9xz"))))
     (build-system qt-build-system)
     (propagated-inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kwidgetsaddons" ,kwidgetsaddons)))
+     (list kauth kcodecs kconfig kwidgetsaddons))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ;; todo: PythonModuleGeneration
-       ("qtbase" ,qtbase-5)
-       ("qttools" ,qttools)))
+     (list kcoreaddons
+           kguiaddons
+           ki18n
+           ;; todo: PythonModuleGeneration
+           qtbase-5
+           qttools))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2357,34 +2253,31 @@ their settings.")
                 "1vq9pkrb0zsphi2sfx7cyy1kb6pklzjkmqdf5202z8vydlkc4549"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kpackage" ,kpackage)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libepoxy" ,libepoxy)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kconfig kpackage))
+    (native-inputs
+     (list extra-cmake-modules pkg-config xorg-server-for-tests))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcoreaddons
+           kglobalaccel
+           kguiaddons
+           kiconthemes
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libepoxy
+           qtbase-5
+           qtdeclarative
+           solid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2392,8 +2285,7 @@ their settings.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server, setting
              ;; QT_QPA_PLATFORM=offscreen does not suffice.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t)))))
     (home-page "https://community.kde.org/Frameworks")
@@ -2420,16 +2312,16 @@ that offer bindings to some of the Frameworks.")
                 "0zqd33vy4ny7g9as3bhd75qi1chz1nlqq133pgw8kjanvghwwnk9"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kinit" ,kinit)
-       ("kservice" ,kservice)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdoctools
+           kinit
+           kservice
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Central daemon of KDE work spaces")
     (description "KDED stands for KDE Daemon.  KDED runs in the background and
@@ -2453,26 +2345,25 @@ started on demand.")
                 "0dr6gcag2yzx8fvxis4x403jrcisywds95cywmiyz3pb5727cak2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdoctools" ,kdoctools)
-       ("qtbase" ,qtbase-5)
-       ;; optional:
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("kio" ,kio)
-       ("kplotting" ,kplotting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kdewebkit" ,kdewebkit)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kconfig
+           kcoreaddons
+           kdoctools
+           qtbase-5
+           ;; optional:
+           kcompletion
+           kconfigwidgets
+           kiconthemes
+           kitemviews
+           kio
+           kplotting
+           ktextwidgets
+           kdewebkit
+           kwidgetsaddons
+           kxmlgui
+           qtwebkit
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Integrating KDE frameworks widgets with Qt Designer")
     (description "This framework provides plugins for Qt Designer that allow it
@@ -2496,15 +2387,11 @@ ini-style description files.")
                 "17k29g7jwgqj5xdmr509438b9sq65zx8khdr4viybjf5xpi0cf5m"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kpty" ,kpty)))
+     (list kpty))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kservice" ,kservice)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig kcoreaddons ki18n kservice qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "User interface for running shell commands with root privileges")
     (description "KDESU provides functionality for building GUI front ends for
@@ -2527,18 +2414,17 @@ with su and ssh respectively.")
                 "0y9ja3znkvzdbjfs91dwr4cmvl9fk97zpz2lkf0f9zhm2nw6q008"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwallet" ,kwallet)
-       ("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)))
+     (list kconfig
+           kcoreaddons
+           kio
+           kjobwidgets
+           kparts
+           kservice
+           kwallet
+           qtbase-5
+           qtwebkit))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Integration for QtWebKit")
     (description "This library provides KDE integration of the HTML rendering
@@ -2560,14 +2446,11 @@ engine WebKit via QtWebKit.")
                 "11v1srn3nii4j7cn4f19qvdw96pczwxhanzxlg4a9gf8kmnp5gxr"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kservice" ,kservice)))
+     (list kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("qtbase" ,qtbase-5)))
+     (list karchive kconfig kcoreaddons qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2600,20 +2483,18 @@ emoticons coming from different providers.")
                 "0hmqigc8myiwwh7m6y2cm4vn0d3kmrhia179hyb84vpvvn3lm93z"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config qttools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxcb" ,libxcb)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)))
+     (list kconfig
+           kcrash
+           kcoreaddons
+           kdbusaddons
+           kservice
+           kwindowsystem
+           libxcb
+           qtbase-5
+           qtx11extras
+           xcb-util-keysyms))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Global desktop keyboard shortcuts")
     (description "KGlobalAccel allows you to have global accelerators that are
@@ -2636,21 +2517,19 @@ window does not need focus for them to be activated.")
                 "09bqpf3drqyfc81vgab9bsh1wm5qbzdwqjlczhax38660nnvh0r9"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules qttools shared-mime-info))
     (inputs
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("ki18n" ,ki18n)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list karchive
+           kauth
+           kcodecs
+           kcoreaddons
+           kconfig
+           kconfigwidgets
+           ki18n
+           kitemviews
+           kwidgetsaddons
+           qtbase-5
+           qtsvg))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2703,32 +2582,31 @@ in applications using the KDE Frameworks.")
             (variable "KDEINIT5_LIBRARY_PATH")
             (files '("lib/")))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libcap" ,libcap) ; to install start_kdeinit with CAP_SYS_RESOURCE
-       ("plasma-framework" ,plasma-framework)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list extra-cmake-modules pkg-config))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdoctools
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kparts
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libcap ; to install start_kdeinit with CAP_SYS_RESOURCE
+           plasma-framework
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library to speed up start of applications on KDE workspaces")
     (description "Kdeinit is a process launcher similar to init used for booting
@@ -2755,20 +2633,18 @@ consumption.")
               (patches (search-patches "kio-search-smbd-on-PATH.patch"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kconfig" ,kconfig)
-       ("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("solid" ,solid)))
-    (native-inputs
-     `(("dbus" ,dbus)
-       ("qttools" ,qttools)
-       ("extra-cmake-modules" ,extra-cmake-modules)))
+     (list kbookmarks
+           kconfig
+           kcompletion
+           kcoreaddons
+           kitemviews
+           kjobwidgets
+           kservice
+           kwindowsystem
+           kxmlgui
+           solid))
+    (native-inputs
+     (list dbus qttools extra-cmake-modules))
     (inputs
      `(;; TODO:  LibACL , <ftp://oss.sgi.com/projects/xfs/cmd_tars>
        ("krb5" ,mit-krb5)
@@ -2848,31 +2724,29 @@ KIO enabled infrastructure.")
                 "1hpxj4nawh57w8l64gjplb5mk5fpxiffm4x49kg75m637rxy19fq"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("attica" ,attica)
-       ("kservice" ,kservice)
-       ("kxmlgui" ,kxmlgui)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kjobwidgets" ,kjobwidgets)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list attica kservice kxmlgui))
+    (native-inputs
+     (list extra-cmake-modules))
+    (inputs
+     (list karchive
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kiconthemes
+           kjobwidgets
+           ktextwidgets
+           kwidgetsaddons
+           qtbase-5
+           qtdeclarative
+           solid
+           sonnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2904,26 +2778,26 @@ specification.")
                 "1d483qrgyamwsqvcl70klv1g8744hn8z1h2j3qfydcvlwz8jy0gj"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           knotifications
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           phonon
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Configuration dialog for desktop notifications")
     (description "KNotifyConfig provides a configuration dialog for desktop
@@ -2956,29 +2830,26 @@ notifications which can be embedded in your application.")
                         (("partloadertest\\.cpp") ""))
                       #t)))))
     (propagated-inputs
-     `(("kio" ,kio)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("shared-mime-info" ,shared-mime-info)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list kio ktextwidgets kxmlgui))
+    (native-inputs
+     (list extra-cmake-modules shared-mime-info))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           qtbase-5
+           solid
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Plugin framework for user interface components")
     (description "This library implements the framework for KDE parts, which are
@@ -3000,16 +2871,16 @@ widgets with a user-interface defined in terms of actions.")
                 "1dhvly19pj9lx78g7mc89scibzmra1vhv4zz33222zidkbrf9ryl"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list kconfig
+           kcoreaddons
+           kitemviews
+           ki18n
+           kservice
+           kwidgetsaddons
+           qtbase-5
+           qtdeclarative))
     (arguments
      `(#:tests? #f)) ; FIXME: 1/3 tests fail.
     (home-page "https://community.kde.org/Frameworks")
@@ -3036,45 +2907,44 @@ to easily extend the contacts collection.")
                 "0fhb26vi9z1mky79kq12qq4g4ghz3530cx84n5l3sdgkd6nfsyqf"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("plasma-framework" ,plasma-framework)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-
-       ;; For tests.
-       ("dbus" ,dbus)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kpackage" ,kpackage)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)
-       ("threadweaver" ,threadweaver)))
+     (list plasma-framework))
+    (native-inputs
+     (list extra-cmake-modules
+           ;; For tests.
+           dbus))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kpackage
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           qtbase-5
+           qtdeclarative
+           solid
+           threadweaver))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths-for-test
            ;; This test tries to access paths like /home, /usr/bin and /bin/ls
            ;; which don't exist in the build-container. Change to existing paths.
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "autotests/runnercontexttest.cpp"
                (("/home\"") "/tmp\"") ;; single path-part
                (("//usr/bin\"") (string-append (getcwd) "\"")) ;; multiple path-parts
-               (("/bin/ls" path)
-                (string-append (assoc-ref %build-inputs "coreutils") path)))))
+               (("/bin/ls")
+                (search-input-file inputs "/bin/ls")))))
          (add-before 'check 'check-setup
            (lambda _
              (setenv "HOME" (getcwd))
@@ -3112,18 +2982,11 @@ typed.")
                 "0g49p5331f7dl46rvi43akmjm1jx70w9797j6d17jy7z9s9sqikw"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)))
+     (list kconfig kcoreaddons))
     (native-inputs
-     `(("bison" ,bison)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("flex" ,flex)))
+     (list bison extra-cmake-modules flex))
     (inputs
-     `(("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcrash kdbusaddons kdoctools ki18n qtbase-5))
     (arguments
      `(#:tests? #f ; FIXME: 6/10 tests fail.
        #:phases
@@ -3171,39 +3034,38 @@ types or handled by application specific code.")
                 "0k10yj1ia1w1mznj4g5nvp65p226zcvgwxc85ycn2w8lbkknidf7"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kparts" ,kparts)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(;; TODO: editor-config
-       ("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libgit2" ,libgit2)
-       ("perl" ,perl)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list kparts))
+    (native-inputs
+     (list extra-cmake-modules pkg-config))
+    (inputs
+     (list ;; TODO: editor-config
+           karchive
+           kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kguiaddons
+           kiconthemes
+           kio
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libgit2
+           perl
+           qtbase-5
+           qtdeclarative
+           qtscript
+           qtxmlpatterns
+           solid
+           sonnet))
     (arguments
      `(#:tests? #f ; FIXME: 2/54 tests fail: Cannot find fontdirectory qtbase/lib/font
        #:phases
@@ -3252,24 +3114,22 @@ library.")
                 "1609rlwba674kr9whawk93vb1b14b5ly7wvir7kjyjp4j715f47w"))))
     (build-system qt-build-system)
     (propagated-inputs
-     `(("ki18n" ,ki18n)
-       ("sonnet" ,sonnet)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)))
+     (list ki18n sonnet))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list kauth
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kiconthemes
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           qtspeech))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Text editing widgets")
     (description "KTextWidgets provides widgets for displaying and editing text.
@@ -3292,26 +3152,26 @@ It supports rich text as well as plain text.")
                 "1ps6ywcirv7xcisvwfcpvk53wm7m8y5lrz4nhkm36rizrdglw19r"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("gpgme" ,gpgme)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kiconthemes" ,kiconthemes)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libgcrypt" ,libgcrypt)
-       ("phonon" ,phonon)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list extra-cmake-modules))
+    (inputs
+     (list gpgme
+           kauth
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           kdoctools
+           kiconthemes
+           ki18n
+           knotifications
+           kservice
+           kwidgetsaddons
+           kwindowsystem
+           libgcrypt
+           phonon
+           qgpgme
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Safe desktop-wide storage for passwords")
     (description "This framework contains an interface to KWallet, a safe
@@ -3334,25 +3194,23 @@ the passwords on KDE work spaces.")
                 "0cvzcq2dcz89c0ffhvfb820hfmqa87mfdbjvrqjwdysc9lr8zx8f"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
-    (inputs
-     `(("attica" ,attica)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("sonnet" ,sonnet)))
+     (list kconfig kconfigwidgets))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    (inputs
+     (list attica
+           kauth
+           kcodecs
+           kcoreaddons
+           kglobalaccel
+           kiconthemes
+           kitemviews
+           ki18n
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           sonnet))
     (arguments
      `(#:tests? #f ; FIXME: 1/5 tests fail.
        #:phases
@@ -3387,25 +3245,25 @@ descriptions for integrating actions from plugins.")
                 "1cmfv2w9yfi8jhj5nawfz7kw8jbr1k5cr3n5xv3z59pg2vazsx8b"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kio" ,kio)))
-    (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
-    (inputs
-     `(("kauth" ,kauth)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kitemviews" ,kitemviews)
-       ("ki18n" ,ki18n)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list kio))
+    (native-inputs
+     (list extra-cmake-modules))
+    (inputs
+     (list kauth
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kitemviews
+           ki18n
+           kjobwidgets
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           solid))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "XML-RPC client")
     (description "This library contains simple XML-RPC Client support.  It is a
@@ -3431,11 +3289,9 @@ setUrl, setUserAgent and call.")
               (patches (search-patches "plasma-framework-fix-KF5PlasmaMacros.cmake.patch"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("kpackage" ,kpackage)
-       ("kservice" ,kservice)))
+     (list kpackage kservice))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("kactivities" ,kactivities)
        ("karchive" ,karchive)
@@ -3501,17 +3357,17 @@ script engines.")
                 "1pxlx2hgj42zsisws8f486n8sg0vn5a5mhb85prifwkaw0rqzgah"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(;;TODO: ("kaccounts" ,kaccounts)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("knotifications" ,knotifications)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list ;;TODO: ("kaccounts" ,kaccounts)
+           kconfig
+           kcoreaddons
+           knotifications
+           ki18n
+           kio
+           kirigami
+           qtbase-5
+           qtdeclarative))
     (arguments
      `(#:tests? #f  ;; seem to require network; don't find QTQuick components
        #:phases
@@ -3574,8 +3430,7 @@ need.")
                 "1lvccvhhkzdv1hw627kw3ds18gfq4bxdhlvh959piqxq5gh9d2n0"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     ;; TODO: Optional packages not yet in Guix: packagekitqt5, AppStreamQt
     (inputs
      `(("kconfig" ,kconfig)
@@ -3631,54 +3486,54 @@ workspace.")
         (base32 "0imkibjlfc0jshdzr05fz5dy2xmfhvgsfan9b1r35spwsn5qkawx"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("docbook-xml" ,docbook-xml-4.4) ; optional
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)
-       ("kjobwidgets" ,kjobwidgets) ;; required for running the tests
-       ("strace" ,strace)
-       ("tzdata" ,tzdata-for-tests)))
+     (list dbus
+           docbook-xml-4.4 ; optional
+           extra-cmake-modules
+           perl
+           perl-uri
+           pkg-config
+           shared-mime-info
+           kjobwidgets ;; required for running the tests
+           strace
+           tzdata-for-tests))
     (propagated-inputs
      ;; These are required to be installed along with this package, see
      ;; lib64/cmake/KF5KDELibs4Support/KF5KDELibs4SupportConfig.cmake
-     `(("karchive" ,karchive)
-       ("kauth" ,kauth)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("kdoctools" ,kdoctools)
-       ("kemoticons" ,kemoticons)
-       ("kguiaddons" ,kguiaddons)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kitemmodels" ,kitemmodels)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kunitconversion" ,kunitconversion)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)))
-    (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kded" ,kded)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libsm" ,libsm)
-       ("networkmanager-qt" ,networkmanager-qt)
-       ("openssl" ,openssl)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("qtx11extras" ,qtx11extras)))
+     (list karchive
+           kauth
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdesignerplugin
+           kdoctools
+           kemoticons
+           kguiaddons
+           kiconthemes
+           kinit
+           kitemmodels
+           knotifications
+           kparts
+           ktextwidgets
+           kunitconversion
+           kwindowsystem
+           qtbase-5))
+    (inputs
+     (list kcompletion
+           kconfig
+           kded
+           kglobalaccel
+           ki18n
+           kio
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           libsm
+           networkmanager-qt
+           openssl
+           qtsvg
+           qttools
+           qtx11extras))
     ;; FIXME: Use Guix ca-bundle.crt in etc/xdg/ksslcalist and
     ;; share/kf5/kssl/ca-bundle.crt
     ;; TODO: NixOS has nix-kde-include-dir.patch to change std-dir "include"
@@ -3697,8 +3552,8 @@ workspace.")
            (lambda* (#:key inputs tests? #:allow-other-keys)
              (setenv "HOME" (getcwd))
              (setenv "TZDIR"    ; KDateTimeTestsome needs TZDIR
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))
              ;; Make Qt render "offscreen", required for tests
              (setenv "QT_QPA_PLATFORM" "offscreen")
              ;; enable debug output
@@ -3747,32 +3602,31 @@ http://community.kde.org/Frameworks/Porting_Notes should help with this.")
         (base32 "1jh0g6xv57hyclnh54x0f72lby1gvlisan23y7mzlqf67aky52s5"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)))
-    (inputs
-     `(("giflib" ,giflib)
-       ("gperf" ,gperf)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("openssl" ,openssl)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sonnet" ,sonnet)))
+     (list extra-cmake-modules perl))
+    (inputs
+     (list giflib
+           gperf
+           karchive
+           kcodecs
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kio
+           kjs
+           knotifications
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libjpeg-turbo
+           libpng
+           openssl
+           phonon
+           qtbase-5
+           qtx11extras
+           sonnet))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 HTML widget and component")
     (description "KHTML is a web rendering engine, based on the KParts
@@ -3798,13 +3652,9 @@ technology and using KJS for JavaScript support.")
         (base32 "0s3n0pdz59p5v967zrxcas3lb94k5bv9vi8058fi0l20nwwlcgh5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools perl pkg-config))
     (inputs
-     `(("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)))
+     (list pcre qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 support for Javascript scripting in Qt
 applications")
@@ -3831,14 +3681,9 @@ support.")
         (base32 "0976faazhxhhi1wpvpcs8hwb2knz0z7j44v3ay3hw73rq4p3bipm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kjs" ,kjs)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list ki18n kjs qtbase-5 qtsvg))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 embedded Javascript engine for Qt")
     (description "KJSEmbed provides a method of binding Javascript objects to
@@ -3860,19 +3705,17 @@ QObjects, so you can script your applications.")
         (base32 "0lrm4y727nhwaivl37zpmnrwx048gfhyjw19m6q5z9p37lk43jja"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcompletion
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           kparts
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 plugin interface for media player features")
     (description "KMediaPlayer builds on the KParts framework to provide a
@@ -3898,19 +3741,17 @@ KParts instead.")
         (base32 "12b527l12rcf421p613ydbacilp9v9iy90ma35w21sdf9a15k675"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kcompletion
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kparts
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtscript))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "KDE Frameworks 5 solution for application scripting")
     (description "Kross is a scripting bridge for the KDE Development Platform
diff --git a/gnu/packages/kde-internet.scm b/gnu/packages/kde-internet.scm
index 223e1aab7a..4e08bd5337 100644
--- a/gnu/packages/kde-internet.scm
+++ b/gnu/packages/kde-internet.scm
@@ -64,36 +64,34 @@
         (base32 "0zm4nkpmvd181xlkis7ydzx54p3vn0zgpdzgh54f1hsjy6ahsq16"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("attica" ,attica)
-       ("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdewebkit" ,kdewebkit)
-       ("kemoticons" ,kemoticons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ;; TODO: telepathy
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("purpose" ,purpose)
-       ("qca" ,qca)
-       ("qoauth" ,qoauth)
-       ("qtbase" ,qtbase-5)
-       ("qtnetworkauth" ,qtnetworkauth)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list attica
+           kcmutils
+           kconfigwidgets
+           kcoreaddons
+           kdewebkit
+           kemoticons
+           kglobalaccel
+           kguiaddons
+           ki18n
+           kio
+           knotifications
+           knotifyconfig
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kxmlgui
+           ;; TODO: telepathy
+           oxygen-icons ; default icon set
+           purpose
+           qca
+           qoauth
+           qtbase-5
+           qtnetworkauth
+           qtwebkit
+           sonnet))
     (home-page "https://kde.org/applications/internet/org.kde.choqok")
     (synopsis "Micro-Blogging Client")
     (description "Choqok is a fast, efficient and simple to use micro-blogging
@@ -127,43 +125,41 @@ Other notable features include:
         (base32 "1swx58wcig8zq8ibhczhcw7l8mqjm7pq8zca9gmny9kda5q04f5m"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("gpgme" ,gpgme)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdelibs4support" ,kdelibs4support) ;; KLocale
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgcrypt" ,libgcrypt)
-       ("libktorrent" ,libktorrent)
-       ;; TODO: libmms
-       ;; TODO: LibKWorkspace - plasma-workspace?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ))
+     (list boost
+           gmp
+           gpgme
+           kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdelibs4support ;; KLocale
+           kdoctools
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           knotifications
+           knotifyconfig
+           kparts
+           kservice
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgcrypt
+           libktorrent
+           ;; TODO: libmms
+           ;; TODO: LibKWorkspace - plasma-workspace?
+           oxygen-icons ; default icon set
+           qca
+           qgpgme
+           qtbase-5))
     (home-page "http://www.kde.org/")
     (synopsis "Versatile and user-friendly download manager")
     (description "KGet is an advanced download manager with support for
@@ -188,35 +184,34 @@ This package is part of the KDE networking module.")
         (base32 "19qqq9s8k0cl71ib33xn07f26j5ji2g4336jk65im6452cf1dv27"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kemoticons" ,kemoticons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidletime" ,kidletime)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qca" ,qca)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list karchive
+           kbookmarks
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kemoticons
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kidletime
+           kio
+           kitemviews
+           knotifications
+           knotifyconfig
+           kparts
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qca
+           solid
+           sonnet))
     (home-page "https://kde.org/applications/internet/org.kde.konversations")
     (synopsis "Graphical Internet Relay Chat (IRC) client for KDE")
     (description "Konversation is a graphical Internet Relay Chat client (IRC)
@@ -259,54 +254,52 @@ Features are:
         (base32 "149gi9hkyl825kf046iqkam3gkzfwdc2sihbf8gs6njachzvb81y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("expat" ,expat)
-       ("glib" ,glib)
-       ("gpgme" ,gpgme)
-       ("jsoncpp" ,jsoncpp)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdelibs4support" ,kdelibs4support)
-       ("kdnssd" ,kdnssd)
-       ("kemoticons" ,kemoticons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kjs" ,kjs)
-       ;; TODO? kleopatra (additionally to libkleo)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktexteditor" ,ktexteditor)
-       ("kwallet" ,kwallet)
-       ;; TODO: Libgadu
-       ("libidn" ,libidn)
-       ("libkleo" ,libkleo)
-       ;; TODO: LibMeanwhile
-       ("libotr" ,libotr)
-       ("libsrtp" ,libsrtp)
-       ("libxml2" ,libxml2)
-       ("libxstl" ,libxslt)
-       ;; TODO: Mediastreamer
-       ("openssl" ,openssl)
-       ("ortp" ,ortp)
-       ("phonon" ,phonon)
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("speex" ,speex)
-       ("v4l-utils" ,v4l-utils)
-       ;; TODO: Xmms
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           boost
+           expat
+           glib
+           gpgme
+           jsoncpp
+           kcmutils
+           kconfig
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdelibs4support
+           kdnssd
+           kemoticons
+           khtml
+           ki18n
+           kidentitymanagement
+           kjs
+           ;; TODO? kleopatra (additionally to libkleo)
+           knotifyconfig
+           kparts
+           kpimtextedit
+           ktexteditor
+           kwallet
+           ;; TODO: Libgadu
+           libidn
+           libkleo
+           ;; TODO: LibMeanwhile
+           libotr
+           libsrtp
+           libxml2
+           libxslt
+           ;; TODO: Mediastreamer
+           openssl
+           ortp
+           phonon
+           qca
+           qgpgme
+           qtbase-5
+           speex
+           v4l-utils
+           ;; TODO: Xmms
+           zlib))
     ;; TODO: enable video support
     (home-page "https://kde.org/applications/internet/org.kde.kopete")
     (synopsis "Instant messaging and chat application")
@@ -337,28 +330,27 @@ This package is part of the KDE networking module.")
         (base32 "1hp23k3nsrcxpv2qiynjgm71zn3l6ds00cpd4frc68szgiblrw9r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("freerdp" ,freerdp)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libssh2" ,libssh)
-       ;; TODO: libvnc{server,client} - is not tigervnc-{server,client}
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kbookmarks
+           freerdp
+           kcmutils
+           kcompletion
+           kconfig
+           kdnssd
+           ki18n
+           kiconthemes
+           knotifications
+           knotifyconfig
+           knotifyconfig
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libssh
+           ;; TODO: libvnc{server,client} - is not tigervnc-{server,client}
+           oxygen-icons ; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/internet/org.kde.krdc")
     (synopsis "Remote desktop client")
     (description "KRDC is a client application that allows you to view or even
@@ -382,42 +374,41 @@ This package is part of the KDE networking module.")
         (base32 "0kwd0npxfg4mdh7f3xadd2zjlqalpb1jxk61505qpcgcssijf534"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("karchive" ,karchive)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdewebkit" ,kdewebkit)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kplotting" ,kplotting)
-       ("kross" ,kross)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgcrypt" ,libgcrypt)
-       ("libktorrent" ,libktorrent)
-       ;; TODO: LibKWorkspace -> plasma-workspace?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtwebkit" ,qtwebkit)
-       ("solid" ,solid)
-       ("syndication" ,syndication)
-       ("taglib" ,taglib)))
+     (list boost
+           gmp
+           karchive
+           kcmutils
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdewebkit
+           kdnssd
+           ki18n
+           kiconthemes
+           kio
+           knotifications
+           knotifyconfig
+           kparts
+           kplotting
+           kross
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgcrypt
+           libktorrent
+           ;; TODO: LibKWorkspace -> plasma-workspace?
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qtscript
+           qtwebkit
+           solid
+           syndication
+           taglib))
     (home-page "https://kde.org/applications/internet/org.kde.ktorrent")
     (synopsis "BitTorrent client")
     (description "KTorrent is a BitTorrent application by KDE which allows you
@@ -439,15 +430,15 @@ a full-featured client for BitTorrent.")
         (base32 "0981ci2kr20v4fk11h57rqya0brgslfazpgq1yk5yqiwyqqm49r2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kpimcommon" ,kpimcommon)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kconfig
+           ki18n
+           kio
+           kpimcommon
+           ktextwidgets
+           kwidgetsaddons
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; 2/7 tests fail (due to network issues?)
     (home-page "https://invent.kde.org/pim/libgravatar")
@@ -472,18 +463,18 @@ unnecessary network operations.")
         (base32 "0051zh8bb4p9wmcfn5ql987brhsaiw9880xdck7b5dm1a05mri2w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("karchive" ,karchive)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("libgcrypt" ,libgcrypt)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list boost
+           gmp
+           karchive
+           kcrash
+           ki18n
+           kio
+           libgcrypt
+           qca
+           qtbase-5
+           solid))
     (home-page "https://invent.kde.org/network/libktorrent")
     (synopsis "BitTorrent protocol library for C++ / Qt 5 / KDE Frameworks")
     (description "The KTorrent library supports connectivity to HTTP and UDP
diff --git a/gnu/packages/kde-multimedia.scm b/gnu/packages/kde-multimedia.scm
index 21ca996246..7537ac1ddd 100644
--- a/gnu/packages/kde-multimedia.scm
+++ b/gnu/packages/kde-multimedia.scm
@@ -24,6 +24,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
@@ -58,20 +59,19 @@
         (base32 "0qlnxxbayqhz25jbvzis27jw2zbw1pmacp8rv7v5wa7zfqn3kmyk"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("cdparanoia" ,cdparanoia)
-       ("flac" ,flac)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("libkcddb" ,libkcddb)
-       ("libkcompactdisc" ,libkcompactdisc)
-       ("libvorbis" ,libvorbis)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)))
+     (list cdparanoia
+           flac
+           kcmutils
+           kconfig
+           ki18n
+           kio
+           libkcddb
+           libkcompactdisc
+           libvorbis
+           phonon
+           qtbase-5))
     (home-page "https://kde.org/applications/multimedia/org.kde.kio_audiocd")
     (synopsis "Transparent audio CD integration for applications using the KDE
 Platform")
@@ -98,27 +98,26 @@ This package is part of the KDE multimedia module.")
         (base32 "1sssg20a1vpwk816lp5jgwahilaswb9f3hgfqvc73il4g11ky1xj"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("phonon-backend-gstreamer" ,phonon-backend-gstreamer)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kjobwidgets
+           knotifications
+           kparts
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           phonon-backend-gstreamer
+           qtbase-5
+           solid))
     (home-page "https://kde.org/applications/multimedia/org.kde.dragonplayer")
     (synopsis "Simple video player")
     (description "Dragon Player is a multimedia player where the focus is on
@@ -144,41 +143,38 @@ This package is part of the KDE multimedia module.")
         (base32 "02450lsnbd37fms1i2bb9qc9wir4vym6qqd9p5hr6a6s6qwfs6qf"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)
-       ("xorg-server" , xorg-server-for-tests)))
+     (list extra-cmake-modules pkg-config dbus kdoctools
+           xorg-server-for-tests))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("baloo" ,baloo)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kcmutils" ,kcmutils)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kfilemetadata" ,kfilemetadata)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("kmediaplayer" ,kmediaplayer)
-       ("kparts" ,kparts)
-       ("kpackage" ,kpackage)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects) ; not listed as dependency
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ;; TODO: upnpqt https://gitlab.com/homeautomationqt/upnp-player-qt
-       ("vlc" ,vlc)))
+     (list kconfig
+           baloo
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kcmutils
+           kdbusaddons
+           kdeclarative
+           kfilemetadata
+           ki18n
+           kio
+           kirigami
+           kmediaplayer
+           kparts
+           kpackage
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects ; not listed as dependency
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qtx11extras
+           ;; TODO: upnpqt https://gitlab.com/homeautomationqt/upnp-player-qt
+           vlc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -186,8 +182,7 @@ This package is part of the KDE multimedia module.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The test suite requires a running X server, setting
              ;; QT_QPA_PLATFORM=offscreen does not suffice.
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t))
          (replace 'check
@@ -219,14 +214,9 @@ its own database.  You can build and play your own playlist.")
         (base32 "17l50z33a1h5zkrrfkb261yi2hms66qj36l1mndq7mvs97y2ggmc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list ffmpeg kconfig ki18n kio qtbase-5))
     (home-page "https://kde.org/applications/multimedia/org.kde.ffmpegthumbs")
     (synopsis "Video thumbnail generator for KDE using ffmpeg")
     (description "
@@ -250,31 +240,31 @@ This package is part of the KDE multimedia module.")
         (base32 "06vsh7knyhcbcbf632jhldbqpzfkdyils2l8dbcdw5nj5hhgzzmr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("phonon-backend-gstreamer" ,phonon-backend-gstreamer)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("taglib" ,taglib)))
+     (list kcoreaddons
+           kcompletion
+           kconfig
+           kcrash
+           kdbusaddons
+           kdoctools
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kjobwidgets
+           kio
+           knotifications
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ; default icon set
+           phonon
+           phonon-backend-gstreamer
+           qtbase-5
+           qtsvg
+           taglib))
     (home-page "https://kde.org/applications/multimedia/org.kde.juk")
     (synopsis "Music jukebox / music player")
     (description "JuK is a powerful music player capable of managing a large
@@ -308,11 +298,11 @@ This package is part of the KDE multimedia module.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-absolute-library-paths
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Set absolute paths for dlopened libraries. We can’t use k3b’s
              ;; runpath as they are loaded by the Qt library.
-             (let ((libcdio-paranoia (assoc-ref %build-inputs "libcdio-paranoia"))
-                   (libdvdcss (assoc-ref %build-inputs "libdvdcss")))
+             (let ((libcdio-paranoia (assoc-ref inputs "libcdio-paranoia"))
+                   (libdvdcss (assoc-ref inputs "libdvdcss")))
                (substitute* "libk3b/tools/k3bcdparanoialib.cpp"
                  (("\"(cdio_cdda|cdio_paranoia)\"" _ library)
                   (string-append "\"" libcdio-paranoia "/lib/" library "\"")))
@@ -321,60 +311,58 @@ This package is part of the KDE multimedia module.")
                   (string-append "\"" libdvdcss "/lib/" library "\""))))
              #t))
          (add-after 'qt-wrap 'wrap-path
-           (lambda _
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Set paths to backend programs.
-             (wrap-program (string-append (assoc-ref %outputs "out") "/bin/k3b")
+             (wrap-program (string-append (assoc-ref outputs "out") "/bin/k3b")
                `("PATH" ":" prefix
                  ,(map (lambda (input)
-                         (string-append (assoc-ref %build-inputs input) "/bin"))
+                         (string-append (assoc-ref inputs input) "/bin"))
                        '("cdrdao" "dvd+rw-tools" "libburn" "sox"))))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("cdrdao" ,cdrdao)
-       ("dvd+rw-tools" ,dvd+rw-tools)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("karchive" ,karchive)
-       ("kcmutils" ,kcmutils)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kfilemetadata" ,kfilemetadata)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("lame" ,lame)
-       ("libburn" ,libburn)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libdvdcss" ,libdvdcss)
-       ("libdvdread" ,libdvdread)
-       ;; TODO: LibFuzzer
-       ("libiconv" ,libiconv)
-       ("libkcddb" ,libkcddb)
-       ("libmad" ,libmad)
-       ("libmpcdec" ,libmpcdec)
-       ;;("libmusicbrainz" ,libmusicbrainz) ; wants old version 2
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)
-       ("shared-mime-info" ,shared-mime-info)
-       ("solid" ,solid)
-       ("sox" ,sox)
-       ("taglib" ,taglib)
-       ("zlib" ,zlib)))
+     (list cdrdao
+           dvd+rw-tools
+           ffmpeg
+           flac
+           karchive
+           kcmutils
+           kconfig
+           kcoreaddons
+           kfilemetadata
+           ki18n
+           kiconthemes
+           kio
+           kjobwidgets
+           knewstuff
+           knotifications
+           knotifyconfig
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           lame
+           libburn
+           libcdio-paranoia
+           libdvdcss
+           libdvdread
+           ;; TODO: LibFuzzer
+           libiconv
+           libkcddb
+           libmad
+           libmpcdec
+           ;;("libmusicbrainz" ,libmusicbrainz) ; wants old version 2
+           libsamplerate
+           libsndfile
+           libvorbis
+           oxygen-icons ; default icon set
+           qtbase-5
+           qtwebkit
+           shared-mime-info
+           solid
+           sox
+           taglib
+           zlib))
     (home-page "https://kde.org/applications/multimedia/org.kde.k3b")
     (synopsis "Sophisticated CD/DVD burning application")
     (description "K3b is CD-writing software which intends to be feature-rich
@@ -400,25 +388,23 @@ available CD drives.")
         (base32 "10dnhr9v2jlki44i3gmjagky66ybixmv6f29z5imk9clgddrlyfr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("eudev" ,eudev)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("v4l-utils" ,v4l-utils) ; libdvbv5
-       ("vlc" ,vlc)))
+     (list eudev
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kio
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxscrnsaver
+           oxygen-icons ; default icon set
+           qtbase-5
+           qtx11extras
+           solid
+           v4l-utils ; libdvbv5
+           vlc))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -458,28 +444,28 @@ autoloading of subtitle files for use while playing video.")
        ("kdoctools" ,kdoctools)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("purpose" ,purpose)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2) ; not listed as dependency
-       ("qtx11extras" ,qtx11extras)))
+     (list gstreamer
+           gst-plugins-base
+           kconfig
+           ki18n
+           kio
+           kirigami
+           knotifications
+           kparts
+           oxygen-icons ; default icon set
+           purpose
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2 ; not listed as dependency
+           qtx11extras))
     (arguments
-     `(#:tests? #f ; test program gets built, but is not found
-       #:configure-flags
-       (list (string-append "-DCMAKE_CXX_FLAGS=-I"
-                            (assoc-ref %build-inputs "gst-plugins-base")
-                            "/include/gstreamer-1.0"))))
+     (list #:tests? #f ; test program gets built, but is not found
+           #:configure-flags
+           #~(list (string-append "-DCMAKE_CXX_FLAGS=-I"
+                                  #$(this-package-input "gst-plugins-base")
+                                  "/include/gstreamer-1.0"))))
     (home-page "https://kde.org/applications/multimedia/org.kde.kamoso")
     (synopsis "Take pictures and videos out of your webcam")
     (description "Kamoso is a simple and friendly program to use your
@@ -500,31 +486,30 @@ camera.  Use it to take pictures and make videos to share.")
        (base32 "1na52ypp57wqrc6pl1khinx9i6fidv1k97nnxcy8zb4l7d5sh1nd"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glib" ,glib)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libcanberra" ,libcanberra)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("plasma-framework" ,plasma-framework)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list alsa-lib
+           glib
+           kconfigwidgets
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcrash
+           kdbusaddons
+           kdoctools
+           kglobalaccel
+           ki18n
+           kiconthemes
+           knotifications
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libcanberra
+           oxygen-icons ; default icon set
+           plasma-framework
+           pulseaudio
+           qtbase-5
+           solid))
     (home-page "https://kde.org/applications/multimedia/org.kde.kmix")
     (synopsis "Volume control and mixer")
     (description "KMix is an audio device mixer, used to adjust volume, select
@@ -550,37 +535,36 @@ This package is part of the KDE multimedia module.")
                  "kmplayer-upstream_Fix-build-with-Qt-5.9.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdelibs4support" ,kdelibs4support)
-       ("ki18n" ,ki18n)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kmediaplayer" ,kmediaplayer)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libxcb" ,libxcb) ;; FIXME: why does cmake not find XEVIE and XPRINT?
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("cairo" ,cairo)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-errors" ,xcb-util-errors)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list kconfig
+           kcoreaddons
+           kdelibs4support
+           ki18n
+           kinit
+           kio
+           kparts
+           kmediaplayer
+           kwidgetsaddons
+           libxcb ;; FIXME: why does cmake not find XEVIE and XPRINT?
+           oxygen-icons ; default icon set
+           phonon
+           qtbase-5
+           cairo
+           qtsvg
+           qtx11extras
+           xcb-util
+           xcb-util-cursor
+           xcb-util-errors
+           xcb-util-image
+           xcb-util-keysyms
+           xcb-util-wm))
     (arguments
-     `(#:configure-flags
-       (list (string-append
-              "-DCMAKE_CXX_FLAGS=-I"
-              (assoc-ref %build-inputs "qtx11extras") "/include/qt5"))))
+     (list #:configure-flags
+           #~(list (string-append
+                    "-DCMAKE_CXX_FLAGS=-I"
+                    #$(this-package-input "qtx11extras")
+                    "/include/qt5"))))
     (home-page "https://kde.org/applications/multimedia/org.kde.kmplayer")
     (synopsis "Media player using mplayer/phonon as backend")
     (description "Kmplayer can play all the audio/video supported by
@@ -613,38 +597,35 @@ Some features:
         (base32 "0ysa873pc2gip95cxr8yv7ifd9qql5zg6h67i9n9q3iqa6v58iyw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("librsvg" ,librsvg)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules librsvg pkg-config kdoctools))
     (inputs
-     `(("also-lib" ,alsa-lib)
-       ("audiofile" ,audiofile)
-       ("flac" ,flac)
-       ("id3lib" ,id3lib)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libmad" ,libmad)
-       ("libsamplerate" ,libsamplerate)
-       ("libvorbis" ,libvorbis)
-       ("opus" ,opus)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           audiofile
+           flac
+           id3lib
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libmad
+           libsamplerate
+           libvorbis
+           opus
+           oxygen-icons ; default icon set
+           pulseaudio
+           qtbase-5
+           qtmultimedia
+           zlib))
     (home-page "https://kde.org/applications/multimedia/org.kde.kwave")
     (synopsis "Sound editor for KDE")
     (description "Kwave is a sound editor designed for the KDE Desktop
@@ -690,16 +671,15 @@ Its features include:
         (base32 "1fwryaj8ldmsqhl5qxjda8by9i7xlb97r8p9rqzckw697hkfhs0h"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libmusicbrainz" ,libmusicbrainz)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kconfig
+           ki18n
+           kio
+           kwidgetsaddons
+           libmusicbrainz
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ; Most tests require network
     (home-page "https://invent.kde.org/multimedia/libkcddb")
@@ -721,14 +701,14 @@ Its features include:
         (base32 "0iy4i0hxqsrnndd4iqkww7v1rqry7kvi5paxdw5qjfffwn8kcsbx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list alsa-lib
+           kcoreaddons
+           ki18n
+           phonon
+           qtbase-5
+           solid))
     (home-page "https://invent.kde.org/multimedia/libkcompactdisc")
     (synopsis "KDE library for playing & ripping CDs")
     (description "The KDE Compact Disc library provides an API for
diff --git a/gnu/packages/kde-pim.scm b/gnu/packages/kde-pim.scm
index a4011e8d3a..dd18a95062 100644
--- a/gnu/packages/kde-pim.scm
+++ b/gnu/packages/kde-pim.scm
@@ -58,30 +58,28 @@
                  "akonadi-not-relocatable.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules qttools shared-mime-info))
     (inputs
-     `(("boost" ,boost)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ;; Do NOT add mysql or postgresql to the inputs. Otherwise the binaries
-       ;; and wrapped files will refer to them, even if the user choices none
-       ;; of these.  Executables are searched on $PATH then.
-       ("qtbase" ,qtbase-5)
-       ("sqlite" ,sqlite)))
+     (list boost
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kitemviews
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libxml2
+           libxslt
+           ;; Do NOT add mysql or postgresql to the inputs. Otherwise the binaries
+           ;; and wrapped files will refer to them, even if the user choices none
+           ;; of these.  Executables are searched on $PATH then.
+           qtbase-5
+           sqlite))
     (arguments
      `(#:tests? #f ;; TODO 135/167 tests fail
        #:configure-flags '("-DDATABASE_BACKEND=SQLITE") ; lightweight
@@ -90,10 +88,10 @@
        #:phases
        (modify-phases (@ (guix build qt-build-system) %standard-phases)
          (add-before 'configure 'add-definitions
-           (lambda _
-             (let ((out (assoc-ref %outputs "out"))
-                   (mysql (assoc-ref %build-inputs "mysql"))
-                   (pgsql (assoc-ref %build-inputs "postgresql")))
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let ((out   (assoc-ref outputs "out"))
+                   (mysql (assoc-ref inputs "mysql"))
+                   (pgsql (assoc-ref inputs "postgresql")))
                (with-output-to-file "CMakeLists.txt.new"
                  (lambda _
                    (display
@@ -131,28 +129,28 @@ programs.")
         (base32 "1mq76qyd3jcngb2yfanpn7qvklzllza399fxwii0mqppp1vmnb2b"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksmtp" ,ksmtp)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalutils
+           kcodecs
+           kcontacts
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmailtransport
+           kmime
+           kpimtextedit
+           ksmtp
+           ktextwidgets
+           kwallet
+           qtbase-5))
     (arguments
      `(#:tests? #f))  ;; TODO: 1/1 test fails
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
@@ -174,32 +172,32 @@ collection and item views.")
         (base32 "0igggarnl99s5pl73dgrpha4lf7vnr000iy69vcwmqs5lxb7cyli"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kauth" ,kauth)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kmime" ,kmime)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("prison" ,prison)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           boost
+           kauth
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kmime
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           prison
+           kio
+           qtbase-5
+           solid
+           sonnet))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (synopsis "Akonadi contacts access library")
     (description "Akonadi Contacts is a library that effectively bridges the
@@ -225,23 +223,22 @@ to list and filter contacts.")
         (base32 "1wd776ia3z22a79biq04y4m83n8xpvfmyg8bcsslr7lmc3avdg8w"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxslt" ,libxslt) ;; xslt for generating interface descriptions
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules libxslt ;; xslt for generating interface descriptions
+           shared-mime-info))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           boost
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (arguments
      `(#:phases
@@ -278,13 +275,9 @@ with emails through Akonadi easier.")
         (base32 "04y293kjrmjjcbb7fkjl7hl4vrks4cjjxnvc6ibzyv81rn6cdhh2"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("kcodecs" ,kcodecs)
-       ("ki18n" ,ki18n)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi kcodecs ki18n kmime qtbase-5))
     (home-page "https://api.kde.org/kdepim/akonadi/html/index.html")
     (synopsis "Akonadi notes access library")
     (description "Akonadi Notes is a library that effectively bridges the
@@ -307,27 +300,26 @@ wrapping notes into KMime::Message objects.")
         (base32 "1h5p44y244gzf7ndzw7afrvq9c76ybp8ddvg82p3lzjh02rrvd50"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-
-       ;; For tests.
-       ("dbus" ,dbus)))
+     (list extra-cmake-modules
+           ;; For tests.
+           dbus))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("krunner" ,krunner)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("xapian" ,xapian)))
+     (list akonadi
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcmutils
+           kcontacts
+           kcrash
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           krunner
+           kwindowsystem
+           qtbase-5
+           xapian))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-failing-test
@@ -364,35 +356,35 @@ Akonadi PIM data server.  It uses Xapian for indexing and querying.")
     (properties `((upstream-name . "incidenceeditor")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kdiagram" ,kdiagram)
-       ("keventviews" ,keventviews)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallat" ,kwallet)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcodecs
+           kcontacts
+           kdbusaddons
+           kdepim-apps-libs
+           kdiagram
+           keventviews
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kldap
+           kmailtransport
+           kmime
+           kpimtextedit
+           ktextwidgets
+           kwallet
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/incidenceeditor")
     (synopsis "KDE PIM library for editing incidences")
     (description "This library provides an incidence editor for KDE PIM.")
@@ -412,42 +404,42 @@ Akonadi PIM data server.  It uses Xapian for indexing and querying.")
         (base32 "1vpdhdj87ai2sxjn2jk3mh6bzfr1n3yzydnkgv7nc8v1m2fdawap"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("prison" ,prison)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           kcalendarcore
+           kcmutils
+           kcompletion
+           kcontacts
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           kdoctools
+           ki18n
+           kiconthemes
+           kimap
+           kio
+           kitemmodels
+           kmime
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           libkdepim
+           libkleo
+           oxygen-icons ; default icon set, required for tests
+           prison
+           qgpgme
+           qtbase-5))
     (home-page "https://kontact.kde.org/components/kaddressbook.html")
     (synopsis "Address Book application to manage your contacts")
     (description "KAddressBook stores all the personal details of your family,
@@ -469,26 +461,26 @@ CalDAV server.")
         (base32 "0g0bm4zzzcpl2pqqf609349zagwrgj6a4ibxpgg4zf21aacdq8bi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           boost
+           kcalendarcore
+           kcalutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           kholidays
+           ki18n
+           kidentitymanagement
+           kio
+           kitemmodels
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO: TZ setup
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -510,15 +502,15 @@ calendar data.")
         (base32 "0pi3axs58wsz5vq6vyisz73s24q739zplwrblyvkcm16nll4mvhk"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcalendarcore" ,kcalendarcore)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlrpcclient" ,kxmlrpcclient)
-       ("qtbase" ,qtbase-5)
-       ("syndication" ,syndication)))
+     (list kcalendarcore
+           kcoreaddons
+           ki18n
+           kio
+           kxmlrpcclient
+           qtbase-5
+           syndication))
     ;; Note: Some tests take up to 90 sec.
     (home-page "https://invent.kde.org/pim/kblog")
     (synopsis "Client-side support library for web application remote blogging
@@ -545,31 +537,30 @@ one of the APIs mentioned above.")
     (properties `((upstream-name . "calendarsupport")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcompletion" ,kcompletion)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kguiaddons" ,kguiaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-mime
+           boost
+           kcalendarcore
+           kcalutils
+           kcompletion
+           kdbusaddons
+           kdepim-apps-libs
+           kguiaddons
+           kholidays
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmime
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/stable/calendarsupport/")
     (synopsis "Calendar Support library for KDE PIM")
     (description "The Calendar Support library provides helper utilities for
@@ -590,23 +581,22 @@ calendaring applications.")
         (base32 "0v268w8vhgqxq1nwv9b9cy4h7zqgjrv19r44g3zc9w5j76ivix86"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxml2" ,libxml2))) ;; xmllint required for tests
+     (list extra-cmake-modules libxml2)) ;; xmllint required for tests
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qtbase" ,qtbase-5)))
+     (list grantlee
+           kcalendarcore
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kpimtextedit
+           ktextwidgets
+           kwidgetsaddons
+           oxygen-icons ; default icon set, required for tests
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO: seem to pull in some wrong theme
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -629,13 +619,9 @@ functions for accessing calendar data using the kcalcore API.")
         (base32 "0445gl4xm0h39igkxgb6vmq5iaa04wkgrgbs7nfd0zwngk8xaidn"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list kcoreaddons ki18n kio qtbase-5 qtxmlpatterns))
     (home-page "https://invent.kde.org/frameworks/kdav")
     (synopsis "DAV protocol implementation with KJobs")
     (description "This is a DAV protocol implementation with KJobs.  Calendars
@@ -657,30 +643,30 @@ supported using GroupDAV or CardDAV.")
         (base32 "0m9qrfjs97anh9h6ibggx23ddlm1zkxjap2iyf3gf672ip01fvci"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libkleo" ,libkleo)
-       ("prison" ,prison)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           ki18n
+           kimap
+           kio
+           kitemmodels
+           kmime
+           kpimcommon
+           kservice
+           kwidgetsaddons
+           libkleo
+           prison
+           qgpgme
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/kdepim-apps-libs")
     (synopsis "KDE PIM mail related libraries and data files")
     (description "This package provides mail related libraries and data files
@@ -701,53 +687,49 @@ for KDE PIM.")
         (base32 "1in4x4wvgclkni72cfkw9jx35d0qd0jmfwybm3ksx5qx5sbki9gg"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)
-       ("libxslt" ,libxslt)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules dbus kdoctools libxslt shared-mime-info))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("kalarmcal" ,kalarmcal)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdav" ,kdav)
-       ("kholidays" ,kholidays)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmailtransport" ,kmailtransport)
-       ("kmbox" ,kmbox)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kross" ,kross)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkgapi" ,libkgapi)
-       ;; TODO: libkolab
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtnetworkauth" ,qtnetworkauth)
-       ("qtspeech" ,qtspeech)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           boost
+           cyrus-sasl
+           kalarmcal
+           kcalendarcore
+           kcalutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdav
+           kholidays
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kmailtransport
+           kmbox
+           kmime
+           knotifications
+           knotifyconfig
+           kpimcommon
+           kpimtextedit
+           kross
+           ktextwidgets
+           kwallet
+           kwindowsystem
+           libkgapi
+           ;; TODO: libkolab
+           qca
+           qtbase-5
+           qtdeclarative
+           qtnetworkauth
+           qtspeech
+           qtwebchannel
+           qtwebengine
+           qtxmlpatterns))
     (arguments
       ;; TODO: 5/45 tests fail for quite different reasons, even with
       ;; "offscreen" and dbus
@@ -759,10 +741,9 @@ for KDE PIM.")
                       ;; found during one of the compilation steps without
                       ;; this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "akonadi-mime")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/kdepim-runtime")
     (synopsis "Runtime components for Akonadi KDE")
     (description "This package contains Akonadi agents written using KDE
@@ -788,36 +769,35 @@ package.")
     (properties `((upstream-name . "eventviews")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdiagram" ,kdiagram)
-       ("kguiaddons" ,kguiaddons)
-       ("kholidays" ,kholidays)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdiagram
+           kguiaddons
+           kholidays
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kio
+           kitemmodels
+           kmime
+           kpimtextedit
+           kservice
+           ktextwidgets
+           kxmlgui
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/eventviews")
     (synopsis "KDE PIM library for creating events")
     (description "This library provides an event creator for KDE PIM.")
@@ -837,33 +817,32 @@ package.")
         (base32 "03d3gsbara7ga2cyrhafkw11qq9cj804h9vpvxl4wd2a9c90snkh"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)  ;; TODO: Remove after gpgme uses fixed path
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules gnupg ;; TODO: Remove after gpgme uses fixed path
+           kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           boost
+           gpgme
+           karchive
+           kcodecs
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kjobwidgets
+           knotifications
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kgpg")
     (synopsis "Graphical front end for GNU Privacy Guard")
     (description "Kgpg manages cryptographic keys for the GNU Privacy Guard,
@@ -885,19 +864,19 @@ cryptography to the contents of the clipboard.")
         (base32 "0flp9p9hlr1zfgvsy5i1nq55p7bvnhqxkxbif1lyw0cq6iblxhgr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kemoticons" ,kemoticons)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kemoticons
+           kiconthemes
+           kio
+           kpimtextedit
+           ktextwidgets
+           kxmlgui
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -924,14 +903,14 @@ cryptography to the contents of the clipboard.")
         (base32 "1x22wfzqp92mn1fy2xl89k9yjfk2vgcva0fd30i9rrqj4aw2rsma"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list cyrus-sasl
+           kcoreaddons
+           ki18n
+           kio
+           kmime
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for handling IMAP")
     (description "This library provides a job-based API for interacting with
@@ -955,16 +934,11 @@ easier to do so.")
         (base32 "0whlp586ycsx0qf0nr81avwscpq62w5js46z7vayy0dxkhrhfayr"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n kio kwidgetsaddons qtbase-5))
     (propagated-inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("openldap" ,openldap)))
+     (list cyrus-sasl openldap))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for accessing LDAP")
     (description " This is a library for accessing LDAP with a convenient Qt
@@ -985,34 +959,32 @@ protocol for querying and modifying directory services running over TCP/IP. ")
         (base32 "1m50nzb2m27fkb8z3k34cv4zi2akr0fx8zn7lk5swhg49sgrip6n"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("dbus" ,dbus)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)  ;; TODO: Remove after gpgme uses fixed path
-       ("kdoctools" ,kdoctools)))
+     (list dbus extra-cmake-modules gnupg ;; TODO: Remove after gpgme uses fixed path
+           kdoctools))
     (inputs
-     `(("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libassuan" ,libassuan)
-       ("libkleo" ,libkleo)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gpgme
+           kcmutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           kmime
+           knotifications
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libassuan
+           libkleo
+           oxygen-icons ;; default icon set
+           qgpgme
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1043,67 +1015,65 @@ and retrieving certificates from LDAP servers.")
        (patches (search-patches "kmail-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules dbus kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kbookmarks" ,kbookmarks)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailcommon" ,kmailcommon)
-       ("kmailtransport" ,kmailtransport)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("ktnef" ,ktnef)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgravatar" ,libgravatar)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("libksieve" ,libksieve)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           gpgme
+           kbookmarks
+           kcalendarcore
+           kcalutils
+           kcmutils
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           kguiaddons
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailcommon
+           kmailtransport
+           kmessagelib
+           kmime
+           kmime
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           ktnef
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgravatar
+           libkdepim
+           libkleo
+           libksieve
+           oxygen-icons ; default icon set, required for tests
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           sonnet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1138,50 +1108,47 @@ manager from KDE.")
     (properties `((upstream-name . "mailcommon")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("gnupg" ,gnupg)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules dbus gnupg qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("karchive" ,karchive)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kldap" ,kldap)
-       ("kmailimporter" ,kmailimporter)
-       ("kmailtransport" ,kmailtransport)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("libxslt" ,libxslt)
-       ("phonon" ,phonon)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           gpgme
+           karchive
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kldap
+           kmailimporter
+           kmailtransport
+           kmessagelib
+           kmime
+           kpimcommon
+           kpimtextedit
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           libkleo
+           libxslt
+           phonon
+           qgpgme
+           qtbase-5))
     (arguments
      `(#:tests? #f))  ;; TODO: 4/56 tests fail, even with "offscreen" and dbus
     (home-page "https://invent.kde.org/pim/mailcommon")
@@ -1205,24 +1172,24 @@ dealing with email.")
     (properties `((upstream-name . "mailimporter")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kmime" ,kmime)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-mime
+           boost
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kdbusaddons
+           ki18n
+           kio
+           kitemmodels
+           kmime
+           kxmlgui
+           libkdepim
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/mailimporter")
     (synopsis "KDE mail importer library")
     (description "This package provides libraries for importing mails other
@@ -1243,27 +1210,26 @@ e-mail client programs into KMail and KDE PIM.")
         (base32 "1swqlgzxzlqffm119sbhszy9lr93m8lzwygr0q4raa660b6yiavm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("ki18n" ,ki18n)
-       ("kitemmodels" ,kitemmodels)
-       ("kio" ,kio)
-       ("kmime" ,kmime)
-       ("ksmtp" ,ksmtp)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("libkgapi" ,libkgapi)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-mime
+           boost
+           cyrus-sasl
+           kcalendarcore
+           kcmutils
+           kcontacts
+           kdbusaddons
+           kconfigwidgets
+           ki18n
+           kitemmodels
+           kio
+           kmime
+           ksmtp
+           ktextwidgets
+           kwallet
+           libkgapi
+           qtbase-5))
     (arguments
      `(#:tests? #f)) ;; TODO - 3/3 tests fail, require drkonqi
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -1285,11 +1251,9 @@ mail transport.")
         (base32 "03cny38v4y1lmcrs6d34hbj9assqgf51rqryf5rdzkiaq79c1krc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kmime" ,kmime)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs kmime qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Library for handling mbox mailboxes")
     (description "This is a library for handling mailboxes in mbox format,
@@ -1310,61 +1274,59 @@ using a Qt/KMime C++ API.")
     (properties `((upstream-name . "messagelib")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("gnupg" ,gnupg)
-       ("libxml2" ,libxml2)))
+     (list extra-cmake-modules gnupg libxml2))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("karchive" ,karchive)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmbox" ,kmbox)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libgravatar" ,libgravatar)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("qca" ,qca)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("qtwebkit" ,qtwebkit)
-       ("sonnet" ,sonnet)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           gpgme
+           grantlee
+           grantleetheme
+           karchive
+           kcalendarcore
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kdbusaddons
+           kdepim-apps-libs
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailtransport
+           kmbox
+           kmime
+           knewstuff
+           kpimcommon
+           kpimtextedit
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libgravatar
+           libkdepim
+           libkleo
+           qca
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           qtwebkit
+           sonnet))
     (arguments
      `(#:tests? #f     ;TODO many test fail for quite different reasons
        #:phases (modify-phases %standard-phases
@@ -1373,10 +1335,9 @@ using a Qt/KMime C++ API.")
                       ;; FIXME: One of the compilation steps fail to find
                       ;; <Libkdepim/MultiplyingLine> without this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "libkdepim")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/messagelib")
     (synopsis "KDE PIM messaging libraries")
     (description "This package provides several libraries for messages,
@@ -1398,11 +1359,9 @@ kwebengineviewer.")
         (base32 "1dkdxfr1ry10qyql5sp1ai4li11f0ncf9hipg27j59y70mlyrl2r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs ki18n qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1436,51 +1395,50 @@ information in non-ASCII character sets.")
         (base32 "13h4n7fb5p6g1f5kmw6pblpd76j904psm30s3a5d3kykni57dijx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxslt" ,libxslt)))
+     (list extra-cmake-modules libxslt))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdnssd" ,kdnssd)
-       ("kdoctools" ,kdoctools)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kmime" ,kmime)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           grantlee
+           grantleetheme
+           kcalendarcore
+           kcalutils
+           kcmutils
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdnssd
+           kdoctools
+           kglobalaccel
+           kiconthemes
+           kimap
+           kitemmodels
+           kitemviews
+           kmime
+           kmime
+           knewstuff
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           kxmlgui
+           libkdepim
+           oxygen-icons ; default icon set, required for tests
+           qtbase-5
+           qtx11extras))
     (home-page "https://kontact.kde.org/components/knotes.html")
     (synopsis "Note-taking utility")
     (description "KNotes lets you write the computer equivalent of sticky
@@ -1509,15 +1467,15 @@ Features:
         (base32 "0s1qm1wjkvbb1film94r7g88d8vgh26bm0hm6gpyqv5bazw5qx3j"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kparts" ,kparts)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons
+           ki18n
+           kiconthemes
+           kparts
+           kwindowsystem
+           kxmlgui
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
     (synopsis "Kontact interface library")
     (description " This library provides the glue necessary for
@@ -1537,58 +1495,55 @@ application \"Parts\" to be embedded as a Kontact component (or plugin).")
         (base32 "04lz3ldrr0lpy9zpsg9ja1i9gxzlcjpqcwn3g7l4jjdky4frcr2r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("dbus" ,dbus)
-       ("qttools" ,qttools)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules dbus qttools kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-calendar" ,akonadi-calendar)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-notes" ,akonadi-notes)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcalendarsupport" ,kcalendarsupport)
-       ("kcalutils" ,kcalutils)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdepim-apps-libs" ,kdepim-apps-libs)
-       ("keventviews" ,keventviews)
-       ("kholidays" ,kholidays)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kincidenceeditor" ,kincidenceeditor)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("kontactinterface" ,kontactinterface)
-       ("kparts" ,kparts)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("oxygen-icons" ,oxygen-icons) ; default icon set, required for tests
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-calendar
+           akonadi-contacts
+           akonadi-mime
+           akonadi-notes
+           akonadi-search
+           boost
+           kcalendarcore
+           kcalendarsupport
+           kcalutils
+           kcmutils
+           kcodecs
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdepim-apps-libs
+           keventviews
+           kholidays
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kincidenceeditor
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmailtransport
+           kmime
+           knewstuff
+           knotifications
+           kontactinterface
+           kparts
+           kpimcommon
+           kpimtextedit
+           kservice
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           oxygen-icons ; default icon set, required for tests
+           phonon
+           qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1640,11 +1595,9 @@ and exchanging calendar data, vCalendar and iCalendar.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcontacts" ,kcontacts)
-       ("kpeople" ,kpeople)
-       ("qtbase" ,qtbase-5)))
+     (list kcontacts kpeople qtbase-5))
     (home-page "https://invent.kde.org/pim/kpeoplevcard")
     (synopsis "Expose vCard contacts to KPeople")
     (description
@@ -1666,44 +1619,43 @@ Virtual Contact File}) files to the KPeople contact management library.")
     (properties `((upstream-name . "pimcommon")))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("karchive" ,karchive)
-       ("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("grantlee" ,grantlee)
-       ;; TODO: ("kaccounts" ,kaccounts)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami) ;; run-time dependency
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libkdepim" ,libkdepim)
-       ("libxslt" ,libxslt)
-       ("purpose" ,purpose)
-       ("qtbase" ,qtbase-5)
-       ("qtwebengine" ,qtwebengine)))
+     (list karchive
+           akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           grantlee
+           ;; TODO: ("kaccounts" ,kaccounts)
+           kcodecs
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kimap
+           kio
+           kirigami ;; run-time dependency
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kmime
+           knewstuff
+           kpimtextedit
+           kservice
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libkdepim
+           libxslt
+           purpose
+           qtbase-5
+           qtwebengine))
     (arguments
      `(#:tests? #f)) ;; TODO tests hang
     (home-page "https://invent.kde.org/pim/pimcommon")
@@ -1725,25 +1677,24 @@ Virtual Contact File}) files to the KPeople contact management library.")
         (base32 "0j6d4sv405c3x0ww75qsww94apidsb8aaqf59akhv96zmv0vx5wy"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kcodecs" ,kcodecs)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("kemoticons" ,kemoticons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)
-       ("sonnet" ,sonnet)))
+     (list grantlee
+           kcodecs
+           kconfigwidgets
+           kcoreaddons
+           kdesignerplugin
+           kemoticons
+           ki18n
+           kiconthemes
+           kio
+           ksyntaxhighlighting
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtspeech
+           sonnet))
     (arguments
      `(#:tests? #f)) ;; TODO - test suite hangs
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/")
@@ -1767,15 +1718,15 @@ text in the text edit to all kinds of markup, like HTML or BBCODE.")
         (base32 "1xyaahibm0dc3qdwiak5yqa66szxaxnylvqxi6k21ayvzn2vxbhx"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list cyrus-sasl
+           kcodecs
+           kconfig
+           kcoreaddons
+           ki18n
+           kio
+           qtbase-5))
     (arguments
      `(#:tests? #f ;; TODO: does not find sasl mechs
        #:phases
@@ -1807,16 +1758,16 @@ standard protocols for e-mail transmission.")
         (base32 "0cn5p32w2kas56yyc15c22kll4hd02lvvxz2n6cz1wda8alspj19"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kcalendarcore" ,kcalendarcore)
-       ("kcalutils" ,kcalutils)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list kcalendarcore
+           kcalutils
+           kcodecs
+           kconfig
+           kcontacts
+           kcoreaddons
+           ki18n
+           qtbase-5))
     (home-page "https://api.kde.org/stable/kdepimlibs-apidocs/ktnef/html/")
     (synopsis "Library for handling mail attachments using TNEF format")
     (description "Ktnef is a library for handling data in the TNEF
@@ -1839,35 +1790,34 @@ and allows one to view/extract message formatted text in Rich Text Format.")
         (base32 "0bask561laxgkgm3rxfpyxqs6jx1l9xjk058lhycq0pik6vwhdha"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("akonadi-search" ,akonadi-search)
-       ("boost" ,boost)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcontacts" ,kcontacts)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdesignerplugin" ,kdesignerplugin)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kldap" ,kldap)
-       ("kmime" ,kmime)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           akonadi-search
+           boost
+           kcmutils
+           kcodecs
+           kcalendarcore
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcontacts
+           kcoreaddons
+           kdbusaddons
+           kdesignerplugin
+           ki18n
+           kiconthemes
+           kio
+           kitemmodels
+           kitemviews
+           kjobwidgets
+           kldap
+           kmime
+           kwallet
+           kwidgetsaddons
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/libkdepim")
     (synopsis "Libraries for common KDE PIM apps")
     (description "This package provided libraries for common KDE PIM apps.")
@@ -1887,20 +1837,19 @@ and allows one to view/extract message formatted text in Rich Text Format.")
         (base32 "0nvd5fqrvyb7c3g7rf1lxbbv38q9sqnhd6irgx7awwgw92inxky4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("ki18n" ,ki18n)
-       ("kcontacts" ,kcontacts)
-       ("kcalendarcore" ,kcalendarcore)
-       ("kio" ,kio)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)))
+     (list cyrus-sasl
+           ki18n
+           kcontacts
+           kcalendarcore
+           kio
+           kwallet
+           kwindowsystem
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine))
     (arguments
      `(#:tests? #f)) ;; TODO 6/48 tests fail
     (home-page "https://invent.kde.org/pim/libkgapi")
@@ -1923,24 +1872,22 @@ various Google services.")
         (base32 "0rijpmqyx4mrr7csik3vkfcra7kfywk6yz548fmq3ha8wa9ax8fv"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules kdoctools qttools))
     (inputs
-     `(("boost" ,boost)
-       ("gpgme" ,gpgme)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kitemmodels" ,kitemmodels)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kpimtextedit" ,kpimtextedit)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)))
+     (list boost
+           gpgme
+           kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           ki18n
+           kitemmodels
+           kwidgetsaddons
+           kwindowsystem
+           kpimtextedit
+           qgpgme
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/libkleo")
     (synopsis "KDE PIM cryptographic library")
     (description "@code{libkleo} is a library for Kleopatra and other parts of
@@ -1962,31 +1909,30 @@ KDE using certificate-based crypto.")
        (patches (search-patches "libksieve-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidentitymanagement" ,kidentitymanagement)
-       ("kimap" ,kimap)
-       ("kio" ,kio)
-       ("kmailtransport" ,kmailtransport)
-       ("kmime" ,kmime)
-       ("knewstuff" ,knewstuff)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkdepim" ,libkdepim)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)))
+     (list akonadi
+           cyrus-sasl
+           karchive
+           ki18n
+           kiconthemes
+           kidentitymanagement
+           kimap
+           kio
+           kmailtransport
+           kmime
+           knewstuff
+           kpimcommon
+           kpimtextedit
+           ksyntaxhighlighting
+           ktextwidgets
+           kwallet
+           kwindowsystem
+           libkdepim
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/kde-plasma.scm b/gnu/packages/kde-plasma.scm
index b7a2b14f65..5621d8ea35 100644
--- a/gnu/packages/kde-plasma.scm
+++ b/gnu/packages/kde-plasma.scm
@@ -25,6 +25,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system qt)
   #:use-module (gnu packages compression)
@@ -60,23 +61,22 @@
     ;; - kwin-style-breeze
     ;; - qml-module-qtquick-controls-styles-breeze - QtQuick style
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kcmutils" ,kcmutils) ; optional
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kde-frameworkintegration" ,kde-frameworkintegration) ; optional
-       ("kdecoration" ,kdecoration)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes) ; for optional kde-frameworkintegration
-       ("kpackage" ,kpackage)
-       ("kwayland" ,kwayland) ; optional
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative) ; optional
-       ("qtx11extras" ,qtx11extras)))
+     (list kcmutils ; optional
+           kconfigwidgets
+           kcoreaddons
+           kde-frameworkintegration ; optional
+           kdecoration
+           kguiaddons
+           ki18n
+           kiconthemes ; for optional kde-frameworkintegration
+           kpackage
+           kwayland ; optional
+           kwindowsystem
+           qtbase-5
+           qtdeclarative ; optional
+           qtx11extras))
     (home-page "https://invent.kde.org/plasma/breeze")
     (synopsis "Default KDE Plasma theme")
     (description "Artwork, styles and assets for the Breeze visual style for
@@ -96,10 +96,9 @@ the Plasma Desktop.  Breeze is the default theme for the KDE Plasma desktop.")
                 "0pn8n7zyb0adzjnn92vmbcf7pmpss60k9k1rk5llamj016xzfgnf"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)))
+     (list ki18n qtbase-5))
     (home-page "https://invent.kde.org/plasma/kdecoration")
     (synopsis "Plugin based library to create window decorations")
     (description "KDecoration is a library to create window decorations.
@@ -120,14 +119,9 @@ manager which re-parents a Client window to a window decoration frame.")
                 "1k2va2v9051f71w78dn3gihk642iyy5yzrkcfnp97fag8g6dpisi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)))
+     (list kcoreaddons ki18n kwallet kwidgetsaddons qtbase-5))
     (home-page "https://invent.kde.org/plasma/ksshaskpass")
     (synopsis "Front-end for ssh-add using kwallet")
     (description "Ksshaskpass is a front-end for @code{ssh-add} which stores the
@@ -154,8 +148,7 @@ call it if it is not associated to a terminal.")
        (modify-phases %standard-phases
          (add-before 'check 'check-setup
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                   "/bin/Xvfb :1 -screen 0 640x480x24 &"))
+             (system "Xvfb :1 -screen 0 640x480x24 &")
              (setenv "DISPLAY" ":1")
              #t))
          (delete 'check)
@@ -168,11 +161,9 @@ call it if it is not associated to a terminal.")
                    (invoke "dbus-launch" "ctest" ".")))
              #t)))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("dbus" ,dbus)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list extra-cmake-modules pkg-config
+           ;; For tests.
+           dbus xorg-server-for-tests))
     (inputs
      `(("kcmutils" ,kcmutils)
        ("kcrash" ,kcrash)
@@ -215,14 +206,11 @@ call it if it is not associated to a terminal.")
         (base32 "0rf1pm0yyc069f4n5s9ipdx4glzfr9zvv5cbrmn4q9i4v6z1qd8i"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ;; For testing.
-       ("dbus" ,dbus)))
+     (list extra-cmake-modules
+           ;; For testing.
+           dbus))
     (inputs
-     `(("kwayland" ,kwayland)
-       ("libxrandr" ,libxrandr)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwayland libxrandr qtbase-5 qtx11extras))
     (arguments
      '(#:tests? #f)) ; FIXME: 55% tests passed, 5 tests failed out of 11
     (home-page "https://community.kde.org/Solid/Projects/ScreenManagement")
@@ -244,8 +232,7 @@ basic needs and easy to configure for those who want special setups.")
        (sha256
         (base32 "1kd0h3p8bf9k5pqp0frhr81pa0yyrpkckg9zznirk9p1v88v7bfq"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
      `(("kconfigwidgets" ,kconfigwidgets)
        ("kiconthemes" ,kiconthemes)
@@ -270,21 +257,22 @@ basic needs and easy to configure for those who want special setups.")
        ("zlib" ,zlib)))
     (build-system qt-build-system)
     (arguments
-     `(#:configure-flags
-       `(,(string-append "-DKDE_INSTALL_DATADIR="
-                         (assoc-ref %outputs "out") "/share"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-cmakelists
-           (lambda _
-             ;; TODO: Verify: This should no longer be necessary, since
-             ;; KF5AuthConfig.cmake.in contains this already.
-             (substitute* "processcore/CMakeLists.txt"
-               (("KAUTH_HELPER_INSTALL_DIR") "KDE_INSTALL_LIBEXECDIR"))))
-         (replace 'check
-           (lambda _
-             ;; TODO: Fix this failing test-case
-             (invoke "ctest" "-E" "processtest"))))))
+     (list #:configure-flags
+           #~`(,(string-append "-DKDE_INSTALL_DATADIR="
+                               #$output "/share"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'patch-cmakelists
+                 (lambda _
+                   ;; TODO: Verify: This should no longer be necessary, since
+                   ;; KF5AuthConfig.cmake.in contains this already.
+                   (substitute* "processcore/CMakeLists.txt"
+                     (("KAUTH_HELPER_INSTALL_DIR")
+                      "KDE_INSTALL_LIBEXECDIR"))))
+               (replace 'check
+                 (lambda _
+                   ;; TODO: Fix this failing test-case
+                   (invoke "ctest" "-E" "processtest"))))))
     (home-page "https://userbase.kde.org/KSysGuard")
     (synopsis "Network enabled task and system monitoring")
     (description "KSysGuard can obtain information on system load and
diff --git a/gnu/packages/kde-systemtools.scm b/gnu/packages/kde-systemtools.scm
index 86f169e819..3fab9089f3 100644
--- a/gnu/packages/kde-systemtools.scm
+++ b/gnu/packages/kde-systemtools.scm
@@ -49,34 +49,31 @@
         (base32 "0xr5s0s40i2bsfjfapvpa7dxh9s4604cxirg97xcaacd6fdvhpds"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("ruby" ,ruby)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list extra-cmake-modules kdoctools ruby ruby-test-unit))
     (inputs
-     `(("baloo" ,baloo)
-       ("baloo-widgets" ,baloo-widgets)
-       ("kactivities" ,kactivities)
-       ("kbookmarks" ,kbookmarks)
-       ("kcmutils" ,kcmutils)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwindowsystem" ,kwindowsystem)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("phonon" ,phonon)
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)))
+     (list baloo
+           baloo-widgets
+           kactivities
+           kbookmarks
+           kcmutils
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kinit
+           kio
+           knewstuff
+           knotifications
+           kparts
+           ktextwidgets
+           kwindowsystem
+           oxygen-icons ;; default icon set
+           phonon
+           qtbase-5
+           solid))
     (arguments
      `(#:tests? #f)) ;; TODO: 4/15 tests fail even with offscreen
     (home-page "https://kde.org/applications/system/org.kde.dolphin")
@@ -108,15 +105,15 @@ The main features of Dolphin are:
         (base32 "12g44s6g7ma6avp15l45l42qyzbglswvahm2wji79zdls5vjnz7r"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("dolphin" ,dolphin)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("ktexteditor" ,ktexteditor)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list dolphin
+           ki18n
+           kio
+           ktexteditor
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "http://www.kde.org/")
     (synopsis "VCS-Plugins for Dolphin")
     (description "This package contains plugins that offer integration in
@@ -136,28 +133,27 @@ Dolphin with the version control systems: Bzr, Git, Mercurial, Subversion.")
         (base32 "0wxzjragvjcfc7c4qja8wzpshhaywficj7f7wkmppzybcsxwn9qb"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("grantlee" ,grantlee)
-       ("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kdbusaddons" ,kdbusaddons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxml2" ,libxml2)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("xapian" ,xapian)))
+     (list grantlee
+           karchive
+           kbookmarks
+           kcodecs
+           kconfig
+           kcoreaddons
+           kdbusaddons
+           khtml
+           ki18n
+           kinit
+           kio
+           kjs
+           kparts
+           kservice
+           kwindowsystem
+           libxml2
+           oxygen-icons ;; default icon set
+           qtbase-5
+           xapian))
     (arguments
      `(#:tests? #f)) ;; 1/1 test fails
     (home-page "https://kde.org/applications/system/org.kde.Help")
@@ -186,35 +182,34 @@ document meta data file.")
         (base32 "0ckr7bjkyaw0gr5kx569jfnhkhwmlk4lqk41ng61qwxlb4bsdbdm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kinit" ,kinit)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kglobalaccel" ,kglobalaccel)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kbookmarks
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kinit
+           kio
+           knewstuff
+           kglobalaccel
+           knotifications
+           knotifyconfig
+           kparts
+           kpty
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtscript))
     (arguments
      `(#:tests? #f)) ;; TODO: 2/15 tests fail even with HOME, offscreen, SHELL, debus
     (home-page "http://www.kde.org/")
@@ -241,31 +236,29 @@ This package is part of the KDE base applications module.")
         (base32 "092ijn88jpmgk2zwz37vzf35jisl234mc3krc9jl7bd955akx51k"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("knotifications" ,knotifications)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libvnc" ,libvnc)
-       ("libxcb" ,libxcb)
-       ("libxtst" ,libxtst)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("pipewire" ,pipewire)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("xcb-util-image" ,xcb-util-image)
-       ("zlib" ,zlib)))
+     (list kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kdnssd
+           ki18n
+           knotifications
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           libvnc
+           libxcb
+           libxtst
+           oxygen-icons ;; default icon set
+           pipewire-0.3
+           qtbase-5
+           qtx11extras
+           xcb-util-image
+           zlib))
     (home-page "https://kde.org/applications/internet/org.kde.krfb")
     (synopsis "Desktop Sharing utility")
     (description "KDE Desktop Sharing is a server application that allows you
@@ -293,23 +286,22 @@ This package is part of the KDE networking module.")
         (base32 "1826h89ynvlxdwzyqil2d79cvynglww6fax7qp41wxasgarxhsni"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
      ;; Not including Journald since this is not used in guix
-     `(("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/system/org.kde.ksystemlog")
     (synopsis "System log viewer")
     (description "This program is developed for being used by beginner users,
@@ -333,29 +325,29 @@ This package is part of the KDE administration module.")
                 "02pal9xx1wbpw7dimvs2aw1xnyjqlvbjlybkkfhf8x7c6m1r63aa"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("breeze-icons" ,breeze-icons)
-       ("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kglobalaccel" ,kglobalaccel)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("konsole" ,konsole)
-       ("kparts" ,kparts)
-       ("kwayland" ,kwayland)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list breeze-icons
+           karchive
+           kconfig
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           kglobalaccel
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           knotifications
+           knotifyconfig
+           konsole
+           kparts
+           kwayland
+           kwidgetsaddons
+           kwindowsystem
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (home-page "https://www.kde.org/applications/system/yakuake/")
     (synopsis "Quad-style terminal emulator for KDE")
     (description "Yakuake is a drop-down terminal emulator based on KDE Konsole
diff --git a/gnu/packages/kde-utils.scm b/gnu/packages/kde-utils.scm
index 47e25409ee..2b3a0dd15e 100644
--- a/gnu/packages/kde-utils.scm
+++ b/gnu/packages/kde-utils.scm
@@ -77,35 +77,32 @@
                            (string-append p "/bin"))
                          (list lrzip lzop p7zip unzip zip zstd))))))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("kdoctools" ,kdoctools)
-       ("xorg-server" ,xorg-server)))
+     (list extra-cmake-modules pkg-config kdoctools xorg-server))
     (inputs
-     `(("breeze-icons" ,breeze-icons)
-       ("karchive" ,karchive)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("khtml" ,khtml)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kitemmodels" ,kitemmodels)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libarchive" ,libarchive)
-       ("libzip" ,libzip)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)
-       ;; Command line tools used by Ark.
-       ("lrzip" ,lrzip)
-       ("lzop" ,lzop)
-       ("p7zip" ,p7zip)
-       ("unzip" ,unzip)
-       ("zip" ,zip)
-       ("zstd" ,zstd)))
+     (list breeze-icons
+           karchive
+           kconfig
+           kcrash
+           kdbusaddons
+           khtml
+           ki18n
+           kio
+           kitemmodels
+           kparts
+           kpty
+           kservice
+           kwidgetsaddons
+           libarchive
+           libzip
+           qtbase-5
+           zlib
+           ;; Command line tools used by Ark.
+           lrzip
+           lzop
+           p7zip
+           unzip
+           zip
+           zstd))
     (home-page "https://apps.kde.org/en/ark")
     (synopsis "Graphical archiving tool")
     (description "Ark is a graphical file compression/decompression utility
@@ -126,30 +123,29 @@ well as CD-ROM images.")
         (base32 "0nrby307syrqlxrf9lwdzc9c15ifw47418qwszqwg345ma2pww7i"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kactivities" ,kactivities)
-       ("kconfig" ,kconfig)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kitemmodels" ,kitemmodels)
-       ("threadweaver" ,threadweaver)
-       ("knewstuff" ,knewstuff)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("kparts" ,kparts)
-       ("ktexteditor" ,ktexteditor)
-       ("kwallet" ,kwallet)
-       ("plasma-framework" ,plasma-framework)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kactivities
+           kconfig
+           kcrash
+           kdbusaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kitemmodels
+           threadweaver
+           knewstuff
+           kio
+           kjobwidgets
+           kparts
+           ktexteditor
+           kwallet
+           plasma-framework
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtscript))
     (arguments
      `(#:tests? #f ;; 2/7 tests fail
        #:phases
@@ -193,15 +189,14 @@ Kate's features include:
        (base32 "18lk8i2r90gvw8q5j179xgpniih92mwk06krk7w4jv98yinqf6m5"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ;; TODO: QAccessibilityClient - libqaccessibilityclien
-       ("qtbase" ,qtbase-5)))
+     (list ki18n
+           kio
+           kxmlgui
+           oxygen-icons ;; default icon set
+           ;; TODO: QAccessibilityClient - libqaccessibilityclien
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kmag")
     (synopsis "Screen magnifier tool")
     (description "You can use KMagnifier to magnify a part of the screen just
@@ -224,23 +219,22 @@ artists to web-designers to people with low vision.")
         (base32 "01j6bx8zihns4ip8maj0gb3w3bhx1ha2ljhfmsm6lcyay531ay98"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knotifications" ,knotifications)
-       ("kxmlgui" ,kxmlgui)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libxtst" ,libxtst)
-       ("libxt" ,libxt)
-       ("phonon" ,phonon)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kcoreaddons
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           knotifications
+           kxmlgui
+           kwindowsystem
+           libxtst
+           libxt
+           phonon
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kmousetool")
     (synopsis "Automatic mouse click and mouse manipulation tool for the
 disabled")
@@ -263,21 +257,20 @@ whom pressing buttons hurts.")
         (base32 "1afgxlys9mvmc3rd33g7gchfb0ylx83x3x0a0qf3dra6cpgsgcg7"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("qtspeech" ,qtspeech)))
+     (list kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kio
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           qtspeech))
     (home-page "https://kde.org/applications/utilities/org.kde.kmouth")
     (synopsis "Type-and-say frontend for speech synthesizers")
     (description "KMouth is a program which enables persons that cannot speak
@@ -303,19 +296,18 @@ sentences to be re-spoken.")
         (base32 "05hs8729a3aqjpwmn2xdf2sriacrll4sj4ax3lm4s1ravj09n9bm"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           ki18n
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.kronometer")
     (synopsis "Simple stopwatch application")
     (description "Kronometer is a stopwatch application.  It features the
@@ -337,31 +329,30 @@ to save the times and resume them later.")
         (base32 "02b1jz5a7cjr13v6c7fczrhs1xmg1krnva5fxk8x2bf4nd1rm8s1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("knotifications" ,knotifications)
-       ("kparts" ,kparts)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)
-       ("solid" ,solid)
-       ("zlib" ,zlib)))
+     (list karchive
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfig
+           kcoreaddons
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           knotifications
+           kparts
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5
+           solid
+           zlib))
     (home-page "https://www.krusader.org")
     (synopsis "Twin-panel (commander-style) file manager")
     (description "Krusader is a simple, easy, yet powerful,
@@ -392,14 +383,9 @@ great on your desktop.")
         (base32 "1q6blvcqz6hxdfrkdi0fplmz7rmk3im56kpp68r0yrivhx3hn8sc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("ktexteditor" ,ktexteditor)
-       ("imagemagick" ,imagemagick)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list ktexteditor imagemagick qtbase-5 qtx11extras))
     (home-page "https://kde.org/applications/en/graphics/org.kde.kxstitch")
     (synopsis "Create and print cross stitch patterns")
     (description
@@ -421,30 +407,27 @@ either be created or generated from a image.")
         (base32 "03wsv83l1cay2dpcsksad124wzan7kh8zxdw1h0yicn398kdbck4"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("qttools" ,qttools)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules kdoctools qttools shared-mime-info))
     (inputs
-     `(("kbookmarks" ,kbookmarks)
-       ("kcmutils" ,kcmutils)
-       ("kcodecs" ,kcodecs)
-       ("kcrash" ,kcrash)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)))
+     (list kbookmarks
+           kcmutils
+           kcodecs
+           kcrash
+           kcompletion
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kparts
+           kservice
+           kwidgetsaddons
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qca
+           qtbase-5
+           qtscript))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -483,25 +466,24 @@ redone.")
         (base32 "0yjv5awngi2hk6xzlwzmj92i6qppnfc0inqdp16rd8gzfpw7xqqw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kidletime" ,kidletime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kidletime
+           knotifications
+           knotifyconfig
+           ktextwidgets
+           kwindowsystem
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.rsibreak")
     (synopsis "Assists in the Recovery and Prevention of Repetitive Strain
 Injury")
@@ -524,33 +506,32 @@ remind you to take a break now and then.")
         (base32 "0hz6nfd845bykf78s4g2qs77szl96gy6g8rpg44pqd39a0k0xbh7"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kauth" ,kauth)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcompletion" ,kcompletion)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwallet" ,kwallet)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("libsmbclient" ,samba)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("plasma-framework" ,plasma-framework)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("solid" ,solid)))
+     (list kauth
+           kconfig
+           kconfigwidgets
+           kcompletion
+           kcoreaddons
+           kcrash
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kjobwidgets
+           knotifications
+           knotifyconfig
+           ktextwidgets
+           kwallet
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           samba
+           oxygen-icons ;; default icon set
+           plasma-framework
+           qtbase-5
+           qtdeclarative
+           solid))
     (home-page "https://kde.org/applications/utilities/org.kde.smb4k")
     (synopsis "Samba (SMB) share advanced browser")
     (description "Smb4K is an network neighborhood browser for the KDE
@@ -596,21 +577,20 @@ Features:
         (base32 "1az3c2khnh51bbmqpamj4p26d3a0ff4l5rd3vcrylg94mk7wgh59"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kactivities-stats" ,kactivities-stats)
-       ("kbookmarks" ,kbookmarks)
-       ("kcrash" ,kcrash)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kxmlgui" ,kxmlgui)
-       ("oxygen-icons" ,oxygen-icons) ;; default icon set
-       ("qtbase" ,qtbase-5)))
+     (list kactivities-stats
+           kbookmarks
+           kcrash
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kio
+           ktextwidgets
+           kxmlgui
+           oxygen-icons ;; default icon set
+           qtbase-5))
     (home-page "https://kde.org/applications/utilities/org.kde.sweeper")
     (synopsis "Temporary file and history cleaner")
     (description "
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index bf0cfd44e0..851a3495b7 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018, 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
@@ -57,10 +57,12 @@
   #:use-module (gnu packages ebook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages geo)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gps)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde-frameworks)
@@ -74,6 +76,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages tls)
@@ -97,13 +100,9 @@
         (base32 "1x4v79vhvc5ixkbsf3jyjz5ig1lf78rfw3r7g3llpb4j1kcp3wh0"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("baloo" ,baloo)
-       ("kconfig" ,kconfig)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list baloo kconfig ki18n kio qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -132,15 +131,14 @@ This package contains GUI widgets for baloo.")
     (build-system qt-build-system)
     (arguments `(#:tests? #f))  ; unexpected error in the test suite.
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("libxml2" ,libxml2))) ;; xmllint required for tests
+     (list extra-cmake-modules libxml2)) ;; xmllint required for tests
     (inputs
-     `(("grantlee" ,grantlee)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("knewstuff" ,knewstuff)
-       ("qtbase" ,qtbase-5)))
+     (list grantlee
+           kguiaddons
+           ki18n
+           kiconthemes
+           knewstuff
+           qtbase-5))
     (home-page "https://invent.kde.org/pim/grantleetheme")
     (synopsis "Library providing Grantlee theme support")
     (description "This library provides Grantlee theme support.")
@@ -173,40 +171,39 @@ This package contains GUI widgets for baloo.")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("akonadi" ,akonadi)
-       ("akonadi-contacts" ,akonadi-contacts)
-       ("akonadi-mime" ,akonadi-mime)
-       ("boost" ,boost)
-       ("breeze-icons" ,breeze-icons)
-       ("gpgme" ,gpgme)
-       ("grantlee" ,grantlee)
-       ("grantleetheme" ,grantleetheme)
-       ("kcmutils" ,kcmutils)
-       ("kcontacts" ,kcontacts)
-       ("kcrash" ,kcrash)
-       ("kimap" ,kimap)
-       ("kitemmodels" ,kitemmodels)
-       ("kmessagelib" ,kmessagelib)
-       ("kmime" ,kmime)
-       ("knotifications" ,knotifications)
-       ("knotifyconfig" ,knotifyconfig)
-       ("kontactinterface" ,kontactinterface)
-       ("kpimcommon" ,kpimcommon)
-       ("kpimtextedit" ,kpimtextedit)
-       ("kqtquickcharts" ,kqtquickcharts)
-       ("ktexteditor" ,ktexteditor)
-       ("kuserfeedback" ,kuserfeedback)
-       ("libkdepim" ,libkdepim)
-       ("libkleo" ,libkleo)
-       ("qgpgme" ,qgpgme)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("syndication" ,syndication)))
+     (list akonadi
+           akonadi-contacts
+           akonadi-mime
+           boost
+           breeze-icons
+           gpgme
+           grantlee
+           grantleetheme
+           kcmutils
+           kcontacts
+           kcrash
+           kimap
+           kitemmodels
+           kmessagelib
+           kmime
+           knotifications
+           knotifyconfig
+           kontactinterface
+           kpimcommon
+           kpimtextedit
+           kqtquickcharts
+           ktexteditor
+           kuserfeedback
+           libkdepim
+           libkleo
+           qgpgme
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           syndication))
     (home-page "https://apps.kde.org/en/akregator")
     (synopsis "KDE Feed Reader")
     (description
@@ -234,40 +231,38 @@ browser for easy news reading.")
           (base32 "0lpspak5djkbn2xbmmbxls258310g45n3a08sghkjl08bx6ilvc9"))))
       (build-system qt-build-system)
       (native-inputs
-       `(("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)
-         ("qttools" ,qttools)))
+       (list extra-cmake-modules pkg-config qttools))
       (inputs
-       `(("breeze" ,breeze) ; make dark them available easily
-         ("breeze-icons" ,breeze-icons) ; recommended icon set
-         ("ffmpeg" ,ffmpeg)
-         ("frei0r-plugins" ,frei0r-plugins)
-         ("karchive" ,karchive)
-         ("kcrash" ,kcrash)
-         ("kdbusaddons" ,kdbusaddons)
-         ("kdeclarative" ,kdeclarative)
-         ("kdoctools" ,kdoctools)
-         ("kfilemetadata" ,kfilemetadata)
-         ("kguiaddons" ,kguiaddons)
-         ("kiconthemes" ,kiconthemes)
-         ("knewstuff" ,knewstuff)
-         ("knotifications" ,knotifications)
-         ("knotifyconfig" ,knotifyconfig)
-         ("kparts" ,kparts)
-         ("kplotting" ,kplotting)
-         ("mlt" ,mlt)
-         ("purpose" ,purpose)
-         ("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtgraphicaleffects" ,qtgraphicaleffects)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtnetworkauth" ,qtnetworkauth)
-         ("qtquickcontrols" ,qtquickcontrols)
-         ("qtquickcontrols2" ,qtquickcontrols2)
-         ("qtscript" ,qtscript)
-         ("qtsvg" ,qtsvg)
-         ("qtwebkit" ,qtwebkit)
-         ("shared-mime-info" ,shared-mime-info)))
+       (list breeze ; make dark them available easily
+             breeze-icons ; recommended icon set
+             ffmpeg
+             frei0r-plugins
+             karchive
+             kcrash
+             kdbusaddons
+             kdeclarative
+             kdoctools
+             kfilemetadata
+             kguiaddons
+             kiconthemes
+             knewstuff
+             knotifications
+             knotifyconfig
+             kparts
+             kplotting
+             mlt
+             purpose
+             qtbase-5
+             qtdeclarative
+             qtgraphicaleffects
+             qtmultimedia
+             qtnetworkauth
+             qtquickcontrols
+             qtquickcontrols2
+             qtscript
+             qtsvg
+             qtwebkit
+             shared-mime-info))
       (arguments
        ;; XXX: there is a single test that spawns other tests and
        ;; 1/3 tests failed and 1/327 assertions failed.  It seems
@@ -315,10 +310,7 @@ projects.")
          (base32 "02ip5r67hjfpywkm3mz86n6wbqcr7996ifzfd2fyzsvm4998hi4y"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules pkg-config shared-mime-info qttools))
     (inputs
      `(("boost" ,boost)
        ("clang" ,clang)
@@ -408,9 +400,9 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
        (sha256
         (base32 "1kfab4p717acbdkcdi41d98vwch7v431gb2qi6s38hmclsf8bf8g"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (build-system cmake-build-system)
     (home-page "https://kde.org")
     (synopsis "Parser generator library for KDevplatform")
@@ -436,11 +428,9 @@ for some KDevelop language plugins (Ruby, PHP, CSS...).")
                  "kdiagram-Fix-missing-link-libraries.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (home-page "https://invent.kde.org/graphics/kdiagram")
     (synopsis "Libraries for creating business diagrams")
     (description "This package provides libraries for integrating business
@@ -488,51 +478,51 @@ illustrate project schedules.")
                          qt)))
                #t))))))
     (native-inputs
-     `(("curl" ,curl)
-       ("eigen" ,eigen)
-       ("extra-cmake-modules" ,extra-cmake-modules)
-       ("gettext-minimal" ,gettext-minimal)
-       ("kitemmodels" ,kitemmodels)
-       ("pkg-config" ,pkg-config)
-       ("qwt" ,qwt)
-       ("vc" ,vc)))
+     (list curl
+           eigen
+           extra-cmake-modules
+           gettext-minimal
+           kitemmodels
+           pkg-config
+           qwt
+           vc))
     (inputs
-     `(("boost" ,boost)
-       ("exiv2" ,exiv2)
-       ("fftw" ,fftw)
-       ("gsl" ,gsl)
-       ("ilmbase" ,ilmbase)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kwindowsystem" ,kwindowsystem)
-       ("kxmlgui" ,kxmlgui)
-       ("lcms" ,lcms)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libraw" ,libraw-0.18)
-       ("libtiff" ,libtiff)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxi" ,libxi)
-       ("openexr" ,openexr-2)
-       ("perl" ,perl)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("quazip" ,quazip-0)
-       ("zlib" ,zlib)))
+     (list boost
+           exiv2
+           fftw
+           gsl
+           ilmbase
+           karchive
+           kcompletion
+           kconfig
+           kcoreaddons
+           kcrash
+           kguiaddons
+           ki18n
+           kiconthemes
+           kio
+           kitemviews
+           kwidgetsaddons
+           kwindowsystem
+           kxmlgui
+           lcms
+           libjpeg-turbo
+           libpng
+           libraw-0.18
+           libtiff
+           libx11
+           libxcb
+           libxi
+           openexr-2
+           perl
+           poppler-qt5
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtsvg
+           qtx11extras
+           quazip-0
+           zlib))
     (home-page "https://krita.org")
     (synopsis "Digital painting application")
     (description
@@ -555,20 +545,18 @@ features include brush stabilizers, brush engines and wrap-around mode.")
         (base32 "0v8z6r9gngzckvqyxjm9kp7hilwfqibyk2f9vag9l98ar0iwr97q"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list extra-cmake-modules pkg-config shared-mime-info))
     (inputs
-     `(("karchive" ,karchive)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kparts" ,kparts)
-       ("kdiagram" ,kdiagram)
-       ("kgraphviewer" ,kgraphviewer)
-       ("kio" ,kio)
-       ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list karchive
+           kcoreaddons
+           kparts
+           kdiagram
+           kgraphviewer
+           kio
+           ki18n
+           qtbase-5
+           qtsvg
+           qtxmlpatterns))
     (home-page "https://apps.kde.org/en/massif-visualizer")
     (synopsis "Visualize massif data generated by Valgrind")
     (description
@@ -590,16 +578,15 @@ compressed massif files can also be opened transparently.")
         (sha256
          (base32 "0m8m7sgpf2f4nxpaaymyvihlk0pcyblyd99mcbibrnyr5kzkzzdc"))))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kcodecs" ,kcodecs)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcodecs
+           kconfig
+           kcoreaddons
+           ki18n
+           kio
+           kxmlgui
+           qtbase-5))
     (build-system cmake-build-system)
     (home-page "https://kde.org")
     (synopsis "Library to compare files and strings, used in Kompare and KDevelop")
@@ -623,10 +610,9 @@ used in KDE development tools Kompare and KDevelop.")
          (base32 "0rvvf97la95lah67jcj0p06n4br0pc2mri0q1hn4x522hndqybjn"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)))
+     (list openssl qtbase-5))
     (home-page "https://userbase.kde.org/QCA")
     (synopsis "Libraries for the Qt Cryptographic Architecture")
     (description "The Qt Cryptographic Architecture (QCA) provides a
@@ -650,16 +636,15 @@ cards.")
                 "0jsig7algmab9h0fb09my0axjqzw83zgscamhzl8931lribs6idm"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules pkg-config))
     (inputs
-     `(("kauth" ,kauth)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("qtbase" ,qtbase-5)
-       ("qca" ,qca)
-       ("util-linux" ,util-linux "lib")))
+     (list kauth
+           kcoreaddons
+           ki18n
+           kwidgetsaddons
+           qtbase-5
+           qca
+           `(,util-linux "lib")))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Library for managing partitions")
     (description "Library for managing partitions.")
@@ -681,10 +666,9 @@ cards.")
     (arguments
      `(#:tests? #f)) ; both tests fail, require display
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)))
+     (list extra-cmake-modules qttools))
     (home-page "https://techbase.kde.org/Projects/Snorenotify")
     (synopsis "Qt notification framework")
     (description "Snorenotify is a multi platform Qt notification framework.
@@ -709,17 +693,13 @@ different notification systems.")
     (arguments
      `(#:configure-flags '("-DBUILD_TESTING=ON"
                            "-DKDE_INSTALL_LIBEXECDIR=libexec")
-       #:phases (modify-phases %standard-phases
-                  (add-after 'set-paths 'extend-CPLUS_INCLUDE_PATH
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      ;; FIXME: <kcmutils_version.h> is not found during one
-                      ;; of the compilation steps without this hack.
-                      (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "kcmutils")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH")
-                                                 "")))
-                      #t)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-include-header
+           (lambda _
+             (substitute* "plugins/runcommand/runcommandplugin.cpp"
+               (("<kcmutils_version.h>")
+                "<KF5/kcmutils_version.h>")))))
        #:tests? #f)) ; tests fail hard in our build environment
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -728,27 +708,27 @@ different notification systems.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kdbusaddons" ,kdbusaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kirigami" ,kirigami)
-       ("knotifications" ,knotifications)
-       ("kpeople" ,kpeople)
-       ("kpeoplevcard" ,kpeoplevcard)
-       ("kwayland" ,kwayland)
-       ("libfakekey" ,libfakekey)
-       ("pulseaudio-qt" ,pulseaudio-qt)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtx11extras" ,qtx11extras)))
+     (list kcmutils
+           kconfigwidgets
+           kdbusaddons
+           ki18n
+           kiconthemes
+           kio
+           kirigami
+           knotifications
+           kpeople
+           kpeoplevcard
+           kwayland
+           libfakekey
+           pulseaudio-qt
+           qca
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtx11extras))
     (home-page "https://community.kde.org/KDEConnect")
     (synopsis "Enable your devices to communicate with each other")
     (description "KDE Connect is a project that enables all your devices to
@@ -804,39 +784,39 @@ communicate with each other.  Here's a few things KDE Connect can do:
        ("python" ,python-wrapper)
        ("qttools" ,qttools)))
     (inputs
-     `(("breeze" ,breeze) ;for dark themes
-       ("breeze-icons" ,breeze-icons) ;for icons
-       ("gsl" ,gsl)
-       ("karchive" ,karchive)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kcrash" ,kcrash)
-       ("kdoctools" ,kdoctools)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knewstuff" ,knewstuff)
-       ("kparts" ,kparts)
-       ("kservice" ,kservice)
-       ("ksyntaxhighlighting" ,ksyntaxhighlighting)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kuserfeedback" ,kuserfeedback)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("shared-mime-info" ,shared-mime-info)
-       ;; Optional.
-       ("cfitsio" ,cfitsio)
-       ("fftw" ,fftw)
-       ("hdf5" ,hdf5)
-       ("libcerf" ,libcerf)
-       ("lz4" ,lz4)
-       ("netcdf" ,netcdf)
-       ("qtserialport" ,qtserialport)
-       ("zlib" ,zlib)))
+     (list breeze ;for dark themes
+           breeze-icons ;for icons
+           gsl
+           karchive
+           kcompletion
+           kconfig
+           kconfigwidgets
+           kcoreaddons
+           kcrash
+           kdoctools
+           ki18n
+           kiconthemes
+           kio
+           knewstuff
+           kparts
+           kservice
+           ksyntaxhighlighting
+           ktextwidgets
+           kuserfeedback
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5
+           qtsvg
+           shared-mime-info
+           ;; Optional.
+           cfitsio
+           fftw
+           hdf5
+           libcerf
+           lz4
+           netcdf
+           qtserialport
+           zlib))
     (home-page "https://labplot.kde.org/")
     (synopsis "Interactive graphing and analysis of scientific data")
     (description "LabPlot is a tool for interactive graphing and analysis of
@@ -859,10 +839,9 @@ to perform data analysis.")
           "1wxp35mf9zlpgzi4msdl86b2krdq2ipqw371gyx23r7j84vdyxi3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://phabricator.kde.org/source/kqtquickcharts/")
     (synopsis "Interactive charts for Qt Quick")
     (description
@@ -883,19 +862,18 @@ charts.")
                 "0ba67hs4vlb3qyvdzhnpmf8p62df12s8aqw4hzf9vnxff3qix5k1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("kcmutils" ,kcmutils)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcoreaddons" ,kcoreaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("knotifications" ,knotifications)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("qtbase" ,qtbase-5)))
+     (list kcmutils
+           kconfigwidgets
+           kcoreaddons
+           ki18n
+           kiconthemes
+           kio
+           knotifications
+           kwidgetsaddons
+           kxmlgui
+           qtbase-5))
     (home-page "https://kde.org/applications/system/kdk")
     (synopsis "View Disk Usage")
     (description "KDiskFree displays the available file devices (hard drive
@@ -917,17 +895,9 @@ unmount drives and view them in a file manager.")
                 "0fx17s6fj1pxl1mgfrqhchk8sihkbji1x8y3nhb1r0971wzd1nsc"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("qttools" ,qttools)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules perl python qttools kdoctools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("karchive" ,karchive)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("kdbusaddons" ,kdbusaddons)))
+     (list qtbase-5 karchive ki18n kio kdbusaddons))
     ;; Note: The 'hotshot2calltree' and 'pprof2calltree' scripts depend on
     ;; Python and PHP, respectively.  These are optional and we ignore them
     ;; for now.
@@ -959,39 +929,95 @@ Python, PHP, and Perl.")
        (base32 "1xsrrvhwjwi5aajcaxydmzc69i4yx6shs8ly8vr85njc188ycg13"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcodecs" ,kcodecs)
-       ("kcompletion" ,kcompletion)
-       ("kconfigwidgets" ,kconfigwidgets)
-       ("kcrash" ,kcrash)
-       ("kdbusaddons" ,kdbusaddons)
-       ("kdeclarative" ,kdeclarative)
-       ("kdnssd" ,kdnssd)
-       ("kglobalaccel" ,kglobalaccel)
-       ("kguiaddons" ,kguiaddons)
-       ("ki18n" ,ki18n)
-       ("kiconthemes" ,kiconthemes)
-       ;("kio" ,kio)
-       ("kitemviews" ,kitemviews)
-       ("kjobwidgets" ,kjobwidgets)
-       ("knewstuff" ,knewstuff)
-       ("kservice" ,kservice)
-       ("ktextwidgets" ,ktextwidgets)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("kxmlgui" ,kxmlgui)
-       ("libsndfile" ,libsndfile)
-       ("openal" ,openal)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list karchive
+           kbookmarks
+           kcodecs
+           kcompletion
+           kconfigwidgets
+           kcrash
+           kdbusaddons
+           kdeclarative
+           kdnssd
+           kglobalaccel
+           kguiaddons
+           ki18n
+           kiconthemes
+           ;("kio" ,kio)
+           kitemviews
+           kjobwidgets
+           knewstuff
+           kservice
+           ktextwidgets
+           kwidgetsaddons
+           kxmlgui
+           libsndfile
+           openal
+           qtbase-5
+           qtdeclarative
+           qtsvg))
     (home-page "https://games.kde.org/")
     (synopsis "Runtime library for kdegames")
     (description "Runtime library for kdegames")
     (license (list license:gpl2+  license:fdl1.2+))))
 
+(define-public marble-qt
+  (package
+    (name "marble-qt")
+    (version "21.08.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://invent.kde.org/education/marble.git/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15gqym45z0gjzdc4ypfj0fki96c3dad4ygsi6lfr8yvwsx8swrb6"))))
+    (build-system qt-build-system)
+    (arguments
+     ;; FIXME: libmarblewidget-qt5.so.28 not found.  Also enable the
+     ;; corresponding configure flag to build tests.
+     `(#:tests? #f
+       #:configure-flags
+       (list "-DBUILD_MARBLE_TOOLS=YES" ; file conversion tools
+             "-DBUILD_TOUCH=YES"
+             "-DBUILD_MARBLE_TESTS=FALSE")))
+    (native-inputs
+     (list extra-cmake-modules qttools))
+    ;; One optional dependency missing: libwlocate.
+    (inputs
+     (list gpsd
+           kcoreaddons
+           kcrash
+           kdoctools
+           ki18n
+           kio
+           knewstuff
+           kparts
+           krunner
+           kwallet
+           perl
+           phonon
+           protobuf
+           qtbase-5
+           qtdeclarative
+           qtlocation
+           qtserialport
+           qtsvg
+           ;; ("qtwebengine" ,qtwebengine) ; FIXME: not found by CMake
+           shapelib
+           shared-mime-info
+           zlib))
+    (home-page "https://marble.kde.org/")
+    (synopsis "Virtual globe and world atlas")
+    (description "Marble is similar to a desktop globe.  At closer scale it
+becomes a world atlas, while OpenStreetMap takes the user to street level.  It
+supports searching for places of interest, viewing Wikipedia articles,
+creating routes by drag and drop and more.")
+    (license license:lgpl2.1+)))
+
 (define-public okular
   (package
     (name "okular")
@@ -1012,46 +1038,44 @@ Python, PHP, and Perl.")
        #:configure-flags
        (list "-DBUILD_TESTING=OFF")))
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)
-       ("pkg-config" ,pkg-config)))
+     (list extra-cmake-modules kdoctools pkg-config))
     (inputs
-     `(("ebook-tools" ,ebook-tools)
-       ("breeze-icons" ,breeze-icons)
-       ("discount" ,discount)
-       ("djvulibre" ,djvulibre)
-       ("kactivities" ,kactivities)
-       ("khtml" ,khtml)
-       ("chmlib" ,chmlib)
-       ("kdegraphics-mobipocket" ,kdegraphics-mobipocket)
-       ("karchive" ,karchive)
-       ("kbookmarks" ,kbookmarks)
-       ("kcompletion" ,kcompletion)
-       ("kconfig" ,kconfig)
-       ("qtbase" ,qtbase-5)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("kirigami" ,kirigami)
-       ("purpose" ,purpose)
-       ("freetype" ,freetype)
-       ("kiconthemes" ,kiconthemes)
-       ("kio" ,kio)
-       ("kparts" ,kparts)
-       ("kpty" ,kpty)
-       ("qtspeech" ,qtspeech)
-       ("kwallet" ,kwallet)
-       ("kwindowsystem" ,kwindowsystem)
-       ("libkexiv2" ,libkexiv2)
-       ("libspectre" ,libspectre)
-       ("libzip" ,libzip)
-       ("phonon" ,phonon)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qca" ,qca)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)
-       ("threadweaver" ,threadweaver)
-       ("kcrash" ,kcrash)
-       ("kjs" ,kjs)))
+     (list ebook-tools
+           breeze-icons
+           discount
+           djvulibre
+           kactivities
+           khtml
+           chmlib
+           kdegraphics-mobipocket
+           karchive
+           kbookmarks
+           kcompletion
+           kconfig
+           qtbase-5
+           libjpeg-turbo
+           libtiff
+           kirigami
+           purpose
+           freetype
+           kiconthemes
+           kio
+           kparts
+           kpty
+           qtspeech
+           kwallet
+           kwindowsystem
+           libkexiv2
+           libspectre
+           libzip
+           phonon
+           poppler-qt5
+           qca
+           qtdeclarative
+           qtsvg
+           threadweaver
+           kcrash
+           kjs))
     (home-page "https://kde.org/applications/graphics/okular/")
     (synopsis "Document viewer")
     (description
@@ -1073,11 +1097,9 @@ a variety of formats, including PDF, PostScript, DejaVu, and EPub.")
                 "1smjvblx0jcv3afs2sr4qcmvhqd44iw24hvr9fppa3nxhrmjwmlk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("kdoctools" ,kdoctools)))
+     (list extra-cmake-modules kdoctools))
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("qtbase" ,qtbase-5)))
+     (list gettext-minimal qtbase-5))
     (home-page "https://kde.org/applications/development")
     (synopsis "Tools for translating DocBook XML files with Gettext")
     (description "This is a collection of tools that facilitate translating
@@ -1099,10 +1121,9 @@ PO template files.")
         (base32 "0fm880lp9g60zgrkjyh4jxws6x0s77l9ia4f8pza3w8sxcbbswk5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list kio qtbase-5))
     (home-page "https://apps.kde.org/en/kdegraphics_mobipocket")
     (synopsis "KDE thumbnailer for Mobipocket files")
     (description "This package provides a KDE plugin that shows thumbnails of
@@ -1122,10 +1143,9 @@ Mobipocket e-books in Dolphin and other KDE apps.")
         (base32 "0k0iinf7s8qlk3fwvq7iic1b4zn2gm65rfd58q7d3wb1i1j2hjjk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("exiv2" ,exiv2)
-       ("qtbase" ,qtbase-5)))
+     (list exiv2 qtbase-5))
     (home-page "https://invent.kde.org/graphics/libkexiv2")
     (synopsis "Manipulate the metadata of images")
     (description "Libkexiv2 wraps the Exiv2 library, allowing to manipulate
@@ -1145,13 +1165,9 @@ picture metadata as EXIF/IPTC and XMP.")
         (base32 "1qck5jyc4psslpibhki8sz8aj0hsnx8z791vzyn10lmdzn71vx8c"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)))
+     (list extra-cmake-modules))
     (inputs
-     `(("kdbusaddons" ,kdbusaddons)
-       ("kdnssd" ,kdnssd)
-       ("ki18n" ,ki18n)
-       ("kio" ,kio)
-       ("qtbase" ,qtbase-5)))
+     (list kdbusaddons kdnssd ki18n kio qtbase-5))
     (home-page "https://kde.org/applications/internet/org.kde.zeroconf_ioslave")
     (synopsis "DNS-SD Service Discovery Monitor")
     (description "Adds an entry to Dolphin's Network page to show local
@@ -1176,20 +1192,17 @@ or Bonjour by other projects).")
         (base32 "1dwx9fscnfp3zsxdir774skn8xvad2dvscnaaw3ji6mrnkmm6bss"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("extra-cmake-modules" ,extra-cmake-modules)
-       ("qttools" ,qttools)
-       ;; For optional component "Survey target expression parser"
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ;; For syntax checking and unit tests of PHP server code
-       ;;("php" ,php)
-       ;;("phpunit" ,phpunit)
-       ))
+     (list extra-cmake-modules
+           qttools
+           ;; For optional component "Survey target expression parser"
+           bison
+           flex
+           ;; For syntax checking and unit tests of PHP server code
+           ;;("php" ,php)
+           ;;("phpunit" ,phpunit)
+           ))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtcharts qtdeclarative qtsvg))
     (arguments
      `(#:tests? #f))  ;; 4/17 fail
     (home-page "https://api.kde.org/frameworks/kuserfeedback/html/")
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 92cc84b673..717d43190c 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -10,6 +10,8 @@
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +31,7 @@
 (define-module (gnu packages kerberos)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages perl)
@@ -41,19 +44,20 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu))
 
 (define-public mit-krb5
   (package
     (name "mit-krb5")
-    (replacement mit-krb5-1.18.4)
-    (version "1.18")
+    (version "1.19.2")
     (source (origin
               (method url-fetch)
               (uri (list
@@ -63,15 +67,15 @@
                     (string-append "https://kerberos.org/dist/krb5/"
                                    (version-major+minor version)
                                    "/krb5-" version ".tar.gz")))
-              (patches (search-patches "mit-krb5-qualify-short-hostnames.patch"
-                                       "mit-krb5-hurd.patch"))
+              (patches (search-patches "mit-krb5-hurd.patch"))
               (sha256
                (base32
-                "121c5xsy3x0i4wdkrpw62yhvji6virbh6n30ypazkp0isws3k4bk"))))
+                "0snz1jm2w4dkk65zcz953jmmv9mqa30fanch2bk8r3rs9vp3yi8h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)))
+     (list bison perl tcl))                   ;required for some tests
+    (inputs
+     (list openssl))
     (arguments
      `(;; XXX: On 32-bit systems, 'kdb5_util' hangs on an fcntl/F_SETLKW call
        ;; while running the tests in 'src/tests'. Also disable tests when
@@ -95,20 +99,14 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source-directory
            (lambda _
-             (chdir "src")
-             #t))
+             (chdir "src")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (let ((perl (assoc-ref (or native-inputs inputs) "perl")))
                (substitute* "plugins/kdb/db2/libdb2/test/run.test"
                  (("/bin/cat") (string-append perl "/bin/perl"))
                  (("D/bin/sh") (string-append "D" (which "sh")))
-                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin"))))
-
-             ;; avoid service names since /etc/services is unavailable
-             (substitute* "tests/resolve/Makefile"
-               (("-p telnet") "-p 23"))
-             #t)))))
+                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin")))))))))
     (synopsis "MIT Kerberos 5")
     (description
      "Massachusetts Institute of Technology implementation of Kerberos.
@@ -120,28 +118,6 @@ cryptography.")
     (home-page "https://web.mit.edu/kerberos/")
     (properties '((cpe-name . "kerberos")))))
 
-(define-public mit-krb5-1.18.4
-  ;; Hide the package to avoid displaying the confusing "1.1a" version in the
-  ;; user interface.
-  (hidden-package
-    (package
-      (inherit mit-krb5)
-      ; version 1.18.4
-      (version "1.1a")
-      (source (origin
-                (method url-fetch)
-                (uri (list
-                       (string-append "https://web.mit.edu/kerberos/dist/krb5/"
-                                      "1.18"
-                                      "/krb5-1.18.4.tar.gz")
-                       (string-append "https://kerberos.org/dist/krb5/"
-                                      "1.18"
-                                      "/krb5-1.18.4.tar.gz")))
-                (patches (search-patches "mit-krb5-hurd.patch"))
-                (sha256
-                  (base32
-                    "1j4zm5npv3yxrwrsdwlxias0ycj4qfxzgnz0h9zffla7b4pmw236")))))))
-
 (define-public shishi
   (package
     (name "shishi")
@@ -171,14 +147,14 @@ cryptography.")
              (("^install-data-hook:")
               "install-data-hook:\nx:\n"))
             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libidn" ,libidn)
-       ("linux-pam" ,linux-pam-1.2)
-       ("zlib" ,zlib)
-       ("libgcrypt" ,libgcrypt)
-       ("libtasn1" ,libtasn1)))
+     (list gnutls
+           libidn
+           linux-pam-1.2
+           zlib
+           libgcrypt
+           libtasn1))
     (home-page "https://www.gnu.org/software/shishi/")
     (synopsis "Implementation of the Kerberos 5 network security system")
     (description
@@ -208,34 +184,72 @@ After installation, the system administrator should generate keys using
                   (substitute* "configure"
                     (("User=.*$") "User=Guix\n")
                     (("Host=.*$") "Host=GNU")
-                    (("Date=.*$") "Date=2019\n"))
-                  #t))))
+                    (("Date=.*$") "Date=2019\n"))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags (list
-                          ;; Avoid 7 MiB of .a files.
-                          "--disable-static"
+     `(#:configure-flags
+       ,#~(list
+           ;; Avoid 7 MiB of .a files.
+           "--disable-static"
 
-                          ;; Do not build libedit.
-                          (string-append
-                           "--with-readline-lib="
-                           (assoc-ref %build-inputs "readline") "/lib")
-                          (string-append
-                           "--with-readline-include="
-                           (assoc-ref %build-inputs "readline") "/include")
+           ;; Do not build libedit.
+           (string-append
+            "--with-readline-lib="
+            (assoc-ref %build-inputs "readline") "/lib")
+           (string-append
+            "--with-readline-include="
+            (assoc-ref %build-inputs "readline") "/include")
 
-                          ;; Do not build sqlite.
-                          (string-append
-                           "--with-sqlite3="
-                           (assoc-ref %build-inputs "sqlite")))
+           ;; Do not build sqlite.
+           (string-append
+            "--with-sqlite3="
+            (assoc-ref %build-inputs "sqlite"))
 
+           #$@(if (%current-target-system)
+                  ;; The configure script is too pessimistic.
+                  ;; Setting this also resolves a linking error.
+                  #~("ac_cv_func_getpwnam_r_posix=yes"
+                     ;; Allow 'slc' and 'asn1_compile' to be found.
+                     (string-append "--with-cross-tools="
+                                    #+(file-append this-package
+                                                   "/libexec/heimdal")))
+                  #~()))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    (lambda _
-                      (substitute* '("appl/afsutil/pagsh.c"
-                                     "tools/Makefile.in")
-                        (("/bin/sh") (which "sh")))
-                      #t))
+                    ;; TODO(core-updates): Unconditionally use the
+                    ;; %current-target-system branch.
+                    (,(if (%current-target-system)
+                          'lambda*
+                          'lambda)
+                     ,(if (%current-target-system)
+                          '(#:key inputs #:allow-other-keys)
+                          '_)
+                     ,@(if (%current-target-system)
+                           `((substitute* "configure"
+                               ;; The e2fsprogs input is included for libcom_err,
+                               ;; let's use it even if cross-compiling.
+                               (("test \"\\$\\{krb_cv_com_err\\}\" = \"yes\"")
+                                ":")
+                               ;; Our 'compile_et' is not in --with-cross-tools,
+                               ;; which confuses heimdal.
+                               (("ac_cv_prog_COMPILE_ET=\\$\\{with_cross_tools\\}compile_et")
+                                "ac_cv_PROG_COMPILE_ET=compile_et")))
+                           '())
+                     ,@(if (%current-target-system)
+                           '((substitute* '("appl/afsutil/pagsh.c" "appl/su/su.c")
+                               (("/bin/sh")
+                                (search-input-file inputs "bin/sh"))
+                               ;; Use the cross-compiled bash instead of the
+                               ;; native bash (XXX shouldn't _PATH_BSHELL point
+                               ;; to a cross-compiled bash?).
+                               (("_PATH_BSHELL")
+                                (string-append
+                                 "\"" (search-input-file inputs "bin/sh") "\"")))
+                             (substitute* '("tools/Makefile.in")
+                               (("/bin/sh") (which "sh"))))
+                           '((substitute* '("appl/afsutil/pagsh.c"
+                                            "tools/Makefile.in")
+                               (("/bin/sh") (which "sh")))))))
                   (add-before 'check 'pre-check
                     (lambda _
                       ;; For 'getxxyyy-test'.
@@ -245,17 +259,19 @@ After installation, the system administrator should generate keys using
                       ;; FIXME: figure out why 'kdc' tests fail.
                       (with-output-to-file "tests/db/have-db.in"
                         (lambda ()
-                          (format #t "#!~a~%exit 1~%" (which "sh"))))
-                      #t)))
+                          (format #t "#!~a~%exit 1~%" (which "sh")))))))
        ;; Tests fail when run in parallel.
        #:parallel-tests? #f))
-    (native-inputs `(("e2fsprogs" ,e2fsprogs)     ;for 'compile_et'
-                     ("texinfo" ,texinfo)
-                     ("unzip" ,unzip)))           ;for tests
-    (inputs `(("readline" ,readline)
-              ("bdb" ,bdb)
-              ("e2fsprogs" ,e2fsprogs)            ;for libcom_err
-              ("sqlite" ,sqlite)))
+    (native-inputs (list e2fsprogs ;for 'compile_et'
+                         texinfo
+                         unzip ;for tests
+                         perl))
+    (inputs (list readline
+                  bash-minimal
+                  bdb
+                  e2fsprogs ;for libcom_err
+                  mit-krb5
+                  sqlite))
     (home-page "http://www.h5l.org/")
     (synopsis "Kerberos 5 network authentication")
     (description
diff --git a/gnu/packages/key-mon.scm b/gnu/packages/key-mon.scm
index 884bef042f..e7b549d184 100644
--- a/gnu/packages/key-mon.scm
+++ b/gnu/packages/key-mon.scm
@@ -44,9 +44,7 @@
      `(#:python ,python-2                    ;uses the Python 2 'print' syntax
        #:tests? #f))                         ;no tests
     (inputs
-     `(("python2-xlib" ,python2-xlib)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-rsvg" ,python2-rsvg)))
+     (list python2-xlib python2-pygtk python2-rsvg))
     (home-page "https://code.google.com/p/key-mon")
     (synopsis "Show keyboard and mouse status")
     (description
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index 1e50624696..fc8c5b124e 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -257,10 +257,8 @@ generator library for C++.")
     (arguments
      '(#:configure-flags '("SH=sh")))
     (native-inputs
-     `(("ghostscript" ,ghostscript) ; ps2pdf
-       ("groff" ,groff)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list ghostscript ; ps2pdf
+           groff libtool which))
     (synopsis "fuzzy comparison of strings")
     (description
      "The fstrcmp project provides a library that is used to make fuzzy
@@ -349,8 +347,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.")
 
              (substitute* "xbmc/platform/linux/LinuxTimezone.cpp"
                (("/usr/share/zoneinfo")
-                (string-append (assoc-ref inputs "tzdata")
-                               "/share/zoneinfo")))
+                (search-input-directory inputs "share/zoneinfo")))
 
              ;; Don't phone home to check for updates.
              (substitute* "system/addon-manifest.xml"
@@ -500,9 +497,7 @@ plug-in system.")
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system trivial-build-system)
       (inputs
-       `(("bash"        ,bash)
-         ("curl"        ,curl)
-         ("mps-youtube" ,mps-youtube)))
+       (list bash curl mps-youtube))
       (arguments
        `(#:modules ((guix build utils))
          #:builder
@@ -510,8 +505,8 @@ plug-in system.")
            (use-modules (guix build utils))
            (copy-recursively (assoc-ref %build-inputs "source") ".")
            (substitute* "kodi-cli"
-             (("/bin/bash") (string-append (assoc-ref %build-inputs "bash")
-                                           "/bin/bash"))
+             (("/bin/bash")
+              (search-input-file %build-inputs "/bin/bash"))
              (("output=\\$\\((curl)" all curl)
               (string-append "output=$("
                              (assoc-ref %build-inputs "curl")
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index 4d0705d9e3..6a0f1af2fa 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -131,8 +131,7 @@
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "configure.ac"
                (("/usr/share/anthy/anthy.dic")
-                (string-append (assoc-ref inputs "anthy")
-                               "/share/anthy/anthy.dic")))
+                (search-input-file inputs "/share/anthy/anthy.dic")))
              (substitute* "configure.ac"
                (("/usr/bin:\\$GTK3_LIBDIR/libgtk-3-0")
                 (string-append (assoc-ref inputs "gtk+:bin")
@@ -195,7 +194,7 @@
        ("xkbcommon" ,libxkbcommon)
        ("xklavier" ,libxklavier)))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Lightweight input method framework")
     (description "Nimf is a lightweight, fast and extensible input method
 framework.  This package provides a fork of the original nimf project, that
@@ -322,8 +321,7 @@ Random Cage Fighting Birds, Cool Music etc.")
        ("python" ,python-wrapper)
        ("texinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("sqlite" ,sqlite)))
+     (list ncurses sqlite))
     (synopsis "Chinese phonetic input method")
     (description "Chewing is an intelligent phonetic (Zhuyin/Bopomofo) input
 method, one of the most popular choices for Traditional Chinese users.")
@@ -411,7 +409,7 @@ Marburg.")
        ("makeinfo" ,texinfo)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
      `(("liblouis" ,liblouis)
        ("liblouis:bin" ,liblouis "bin")))
@@ -475,7 +473,7 @@ languages.")
          "015ximzdp42v824llwlg2pd77vd0d172lb4xs55q9f9zhqf6s5qx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-words2nums" ,perl-lingua-en-words2nums)))
+     (list perl-lingua-en-words2nums))
     (home-page "https://metacpan.org/release/Lingua-EN-FindNumber")
     (synopsis "Locate (written) numbers in English text")
     (description "This module provides a regular expression for finding
@@ -496,7 +494,7 @@ manipulating such numbers.")
         (base32
          "0j8d1f1wvmgc11d71pc8xp8fv5a1nb2yfw1dgd19xhscn1klpvzw"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect")
     (synopsis "Convert singular to plural")
     (description "Lingua::EN::Inflect provides plural inflections,
@@ -520,7 +518,7 @@ provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
          "1gxccynkaqav43ww43jp4rzkyr36x97jd03yb5f6yx0jhn1k7yv6"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-inflect" ,perl-lingua-en-inflect)))
+     (list perl-lingua-en-inflect))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect-Number")
     (synopsis "Force number of words to singular or plural")
     (description "This module extends the functionality of Lingua::EN::Inflect
@@ -542,13 +540,11 @@ converting a word to singular or plural.")
          "1a6y1l2pjim2242wcpgz066di4pbzfgsjjdl7vg5a5wzm48qj1am"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-test-nowarnings))
     (propagated-inputs
-     `(("perl-lingua-en-findnumber" ,perl-lingua-en-findnumber)
-       ("perl-lingua-en-inflect" ,perl-lingua-en-inflect)
-       ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
-       ("perl-lingua-en-number-isordinal" ,perl-lingua-en-number-isordinal)
-       ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)))
+     (list perl-lingua-en-findnumber perl-lingua-en-inflect
+           perl-lingua-en-inflect-number perl-lingua-en-number-isordinal
+           perl-lingua-en-tagger))
     (home-page "https://metacpan.org/release/Lingua-EN-Inflect-Phrase")
     (synopsis "Inflect short English phrases")
     (description "This module attempts to pluralize or singularize short
@@ -569,10 +565,9 @@ English phrases.")
          "1mhqjvh2ad30gjab5b3a6mbr4aysyrscp4wp42yy5x6001a6km98"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-try-tiny perl-test-fatal))
     (propagated-inputs
-     `(("perl-lingua-en-findnumber" ,perl-lingua-en-findnumber)))
+     (list perl-lingua-en-findnumber))
     (home-page "https://metacpan.org/release/Lingua-EN-Number-IsOrdinal")
     (synopsis "Detect if English number is ordinal or cardinal")
     (description "This module will tell you if a number, either in words or as
@@ -593,10 +588,8 @@ digits, is a cardinal or ordinal number.")
          "0nrnkvsf9f0a7lp82sanmy89ms2nqq1lvjqicvsagsvzp513bl5b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-memoize-expirelru" ,perl-memoize-expirelru)
-       ("perl-lingua-stem" ,perl-lingua-stem)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)))
+     (list perl-memoize-expirelru perl-lingua-stem perl-html-parser
+           perl-html-tagset))
     (home-page "https://metacpan.org/release/Lingua-EN-Tagger")
     (synopsis "Part-of-speech tagger for English natural language processing")
     (description "This module is a probability based, corpus-trained tagger
@@ -662,16 +655,16 @@ Moreira, V. and Huyck, C.")
          "12avh2mnnc7llmmshrr5bgb473fvydxnlqrqbl2815mf2dp4pxcg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-lingua-pt-stemmer" ,perl-lingua-pt-stemmer)
-       ("perl-lingua-stem-fr" ,perl-lingua-stem-fr)
-       ("perl-lingua-stem-it" ,perl-lingua-stem-it)
-       ("perl-lingua-stem-ru" ,perl-lingua-stem-ru)
-       ("perl-lingua-stem-snowball-da" ,perl-lingua-stem-snowball-da)
-       ("perl-snowball-norwegian" ,perl-snowball-norwegian)
-       ("perl-snowball-swedish" ,perl-snowball-swedish)
-       ("perl-text-german" ,perl-text-german)))
+     (list perl-lingua-pt-stemmer
+           perl-lingua-stem-fr
+           perl-lingua-stem-it
+           perl-lingua-stem-ru
+           perl-lingua-stem-snowball-da
+           perl-snowball-norwegian
+           perl-snowball-swedish
+           perl-text-german))
     (home-page "https://metacpan.org/release/Lingua-Stem")
     (synopsis "Stemming of words in various languages")
     (description "This routine applies stemming algorithms to its parameters,
@@ -768,7 +761,7 @@ Lingua::Stem::Snowball::Se.")
         (base32
          "0675v45bbsh7vr7kpf36xs2q79g02iq1kmfw22h20xdk4rzqvkqx"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Snowball-Norwegian")
     (synopsis "Porters stemming algorithm for Norwegian")
     (description "Lingua::Stem::Snowball::No is a perl port of the norwegian
@@ -788,7 +781,7 @@ stemmer at http://snowball.tartarus.org.")
         (base32
          "0agwc12jk5kmabnpsplw3wf4ii5w1zb159cpin44x3srb0sr5apg"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Snowball-Swedish")
     (synopsis "Porters stemming algorithm for Swedish")
     (description "Lingua::Stem::Snowball::Se is a perl port of the swedish
@@ -809,9 +802,8 @@ stemmer at http://snowball.sourceforge.net.")
          "12nw7h2yiybhdw0vnnpc7bif8ylhsn6kqf6s39dsrf9h54iq9yrs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
-       ("perl-text-unidecode" ,perl-text-unidecode)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-lingua-en-inflect-phrase perl-text-unidecode
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/String-ToIdentifier-EN")
     (synopsis "Convert strings to English program identifiers")
     (description "This module provides a utility method, \"to_identifier\" for
@@ -893,10 +885,9 @@ extensions in EXTS."
                 "candidates"))
              #t)))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (home-page "https://tegaki.github.io/")
     (synopsis
      "Chinese and Japanese Handwriting Recognition (Recognition engine)")
@@ -946,8 +937,7 @@ suitable for both the desktop and mobile devices.")
     (inputs '())
     (native-inputs '())
     (propagated-inputs
-     `(("python2-tegaki-wagomu" ,python2-tegaki-wagomu)
-       ("python2-zinnia" ,python2-zinnia)))
+     (list python2-tegaki-wagomu python2-zinnia))
     (synopsis
      "Chinese and Japanese Handwriting Recognition (Base python library)")
     (license (list license:gpl2+        ; all files except...
@@ -976,17 +966,16 @@ suitable for both the desktop and mobile devices.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "tegakigtk/fakekey.py"
                  (("libX11.so.6" so)
-                  (string-append (assoc-ref inputs "libx11") "/lib/" so))
+                  (search-input-file inputs
+                                     (string-append "/lib/" so)))
                  (("libXtst.so.6" so)
-                  (string-append (assoc-ref inputs "libxtst") "/lib/" so)))
-               #t))))))
+                  (search-input-file inputs
+                                     (string-append "/lib/" so))))))))))
     (inputs ; required for sending key strokes
-     `(("libx11" ,libx11)
-       ("libxtst" ,libxtst)))
+     (list libx11 libxtst))
     (native-inputs '()) ; override inherited inputs
     (propagated-inputs
-     `(("python2-pygtk" ,python2-pygtk)
-       ("python2-tegaki-python" ,python2-tegaki-python)))
+     (list python2-pygtk python2-tegaki-python))
     (synopsis "Chinese and Japanese Handwriting Recognition (Base UI library)")
     (license license:gpl2+)))
 
@@ -1008,7 +997,7 @@ suitable for both the desktop and mobile devices.")
      (substitute-keyword-arguments (package-arguments python2-tegaki-wagomu)
        ((#:phases _) '%standard-phases)))
     (inputs
-     `(("python2-tegaki-pygtk" ,python2-tegaki-pygtk)))
+     (list python2-tegaki-pygtk))
     ;; override inherited inputs
     (native-inputs '())
     (propagated-inputs '())
@@ -1097,7 +1086,7 @@ suitable for both the desktop and mobile devices.")
     ;; override inherited inputs
     (inputs '())
     (native-inputs
-     `(("python2-tegaki-tools" ,python2-tegaki-tools)))
+     (list python2-tegaki-tools))
     (propagated-inputs '())
     (native-search-paths
      (list (search-path-specification
@@ -1362,7 +1351,7 @@ noun phrases, verb phrases, etc.).")
        ("jack" ,jack-1)
        ("publesaudio" ,pulseaudio)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.fon.hum.uva.nl/praat/")
     (synopsis "Doing phonetics by computer")
     (description "Praat is a tool to perform phonetics tasks.  It can do speech
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index 2b68b87fb9..0d53e746af 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -11,11 +11,12 @@
 # <https://lists.gnu.org/archive/html/guile-devel/2016-03/msg00000.html>.
 
 unset GUILE_LOAD_COMPILED_PATH
+unset GUILE_SYSTEM_COMPILED_PATH
 main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
 exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
 !#
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
diff --git a/gnu/packages/lean.scm b/gnu/packages/lean.scm
index cc593291fd..6ac7f1668a 100644
--- a/gnu/packages/lean.scm
+++ b/gnu/packages/lean.scm
@@ -40,7 +40,7 @@
                 "09mklc1p6ms1jayg2f89hqfmhca3h5744lli936l38ypn1d00sxx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:build-type "Release"           ; default upstream build type
        ;; XXX: Test phases currently fail on 32-bit sytems.
diff --git a/gnu/packages/lego.scm b/gnu/packages/lego.scm
index 6d4e243054..19a4a5eba0 100644
--- a/gnu/packages/lego.scm
+++ b/gnu/packages/lego.scm
@@ -113,11 +113,9 @@ restrictions that stem from limitations of the standard RCX firmware.")
                 "1ifbxngkbmg6d8vv08amxbnfvlyjdwzykrjp98lbwvgb0b843ygq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))           ; for lrelease
+     (list qttools))           ; for lrelease
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 zlib))
     (arguments
      '(#:tests? #f
        #:phases
diff --git a/gnu/packages/less.scm b/gnu/packages/less.scm
index 56d40978b8..e23b5d0c24 100644
--- a/gnu/packages/less.scm
+++ b/gnu/packages/less.scm
@@ -45,7 +45,7 @@
        (sha256
         (base32 "044fl3izmsi8n1vqzsqdp65q0qyyn5kmsg4sk7id0mxzx15zbbba"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://www.gnu.org/software/less/")
     (synopsis "Paginator for terminals")
     (description
@@ -84,15 +84,14 @@ text editors.")
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "lesspipe.sh"
                         (("tput colors")
-                         (string-append (assoc-ref inputs "ncurses")
-                                        "/bin/tput colors"))
+                         (string-append (search-input-file inputs "/bin/tput")
+                                        " colors"))
                         (("file -")
-                         (string-append (assoc-ref inputs "file")
-                                        "/bin/file -"))))))))
+                         (string-append (search-input-file inputs "/bin/file")
+                                        " -"))))))))
     (inputs
-     `(("file" ,file)
-       ("ncurses" ,ncurses)))  ; for tput
-    (native-inputs `(("perl" ,perl)))
+     (list file ncurses))  ; for tput
+    (native-inputs (list perl))
     (home-page "https://github.com/wofr06/lesspipe")
     (synopsis "Input filter for less")
     (description "To browse files, the excellent viewer @code{less} can be
diff --git a/gnu/packages/lesstif.scm b/gnu/packages/lesstif.scm
index 6326cd3a22..8f017f41be 100644
--- a/gnu/packages/lesstif.scm
+++ b/gnu/packages/lesstif.scm
@@ -39,10 +39,9 @@
             "1qzpxjjf7ri1jzv71mvq5m9g8hfaj5yzwp30rwxlm6n2b24a6jpb"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("printproto" ,printproto)))
+     (list printproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libxt" ,libxt)))
+      (list libxext libxt))
     (home-page "http://lesstif.sourceforge.net/")
     (synopsis "Clone of the Motif toolkit for the X window system")
     (description "Clone of the Motif toolkit for the X window system.")
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index e263ba2efc..337aa6840a 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -82,7 +82,7 @@
        ("udev" ,eudev)
        ("sound-theme-freedesktop" ,sound-theme-freedesktop)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -122,7 +122,7 @@ null) and is designed to be portable.")
                (base32
                 "054abv4gmfk9maw93fis0bf605rc56dah7ys5plc4pphxqh8nlfb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("intltool" ,intltool)))
+    (native-inputs (list intltool))
     (synopsis "Audio samples for use as a desktop sound theme")
     (description
      "This package provides audio samples that can be used by libcanberra as
@@ -149,7 +149,7 @@ sounds for various system events.")
     (arguments
      `(#:tests? #f)) ;No tests included.
     (propagated-inputs
-     `(("libcanberra" ,libcanberra)))
+     (list libcanberra))
     (synopsis "Ctypes wrapper for the libcanberra API")
     (description
      "Pycanberra is a basic Python wrapper for libcanberra.")
diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
index e47d66cfa7..9dc851e823 100644
--- a/gnu/packages/libdaemon.scm
+++ b/gnu/packages/libdaemon.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,8 +18,10 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages libdaemon)
+  #:use-module (gnu packages autotools)
   #:use-module (guix licenses)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
 
@@ -45,21 +48,34 @@
                "0d5qlq5ab95wh1xc87rqrh1vx6i8lddka1w3f1zcqvcqdxgyn8zx"))
              (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
-    (arguments
-     (if (%current-target-system)
-         ;; The 'setpgrp' test cannot provide an answer when cross-compiling,
-         ;; so provide the right one for glibc.
-         `(#:configure-flags (list "ac_cv_func_setpgrp_void=yes"
-
-                                   ;; TODO: Move this globally on the next
-                                   ;; rebuild cycle.
-                                   ;; Set a valid localstatedir for the
-                                   ;; benefit of the default
-                                   ;; 'daemon_pid_file_proc', used by the
-                                   ;; Hurd's console client.
-                                   "--localstatedir=/var"))
+    (native-inputs
+     (if (and=> (%current-target-system) target-aarch64?)
+         `(("config" ,config)) ; for config.sub
          '()))
+    (arguments
+     `(,@(if (%current-target-system)
+             ;; The 'setpgrp' test cannot provide an answer when cross-compiling,
+             ;; so provide the right one for glibc.
+             `(#:configure-flags (list "ac_cv_func_setpgrp_void=yes"
 
+                                       ;; TODO: Move this globally on the next
+                                       ;; rebuild cycle.
+                                       ;; Set a valid localstatedir for the
+                                       ;; benefit of the default
+                                       ;; 'daemon_pid_file_proc', used by the
+                                       ;; Hurd's console client.
+                                       "--localstatedir=/var"))
+             '())
+       ,@(if (and=> (%current-target-system) target-aarch64?)
+             `(#:phases
+               (modify-phases %standard-phases
+                 (add-before 'configure 'update-config.sub
+                   (lambda _
+                     ;; Replace outdated config.sub such that aarch64
+                     ;; will be recognised as an architecture.
+                     (delete-file "config.sub")
+                     (symlink (which "config.sub") "config.sub")))))
+             '())))
     ;; XXX: Stale URL, missing replacement.  See <http://bugs.gnu.org/18639>.
     (home-page "http://0pointer.de/lennart/projects/libdaemon/")
 
diff --git a/gnu/packages/libedit.scm b/gnu/packages/libedit.scm
index e02c72fdac..f04d3aafe4 100644
--- a/gnu/packages/libedit.scm
+++ b/gnu/packages/libedit.scm
@@ -40,7 +40,7 @@
        (base32 "0wch48nml28jj6ild889745dsg2agm7mpvrmbl1gi98nw6vjrf6v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://thrysoee.dk/editline/")
     (synopsis "NetBSD Editline library")
     (description
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index c55b0d89d1..b3a5cd915e 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -28,6 +28,7 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (gnu packages autotools)
@@ -41,7 +42,7 @@
 (define-public libevent
   (package
     (name "libevent")
-    (version "2.1.11")
+    (version "2.1.12")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -49,16 +50,17 @@
                     version "-stable/libevent-" version "-stable.tar.gz"))
               (sha256
                (base32
-                "0g988zqm45sj1hlhhz4il5z4dpi5dl74hzjwzl4md37a09iaqnx6"))))
+                "1fq30imk8zd26x8066di3kpc5zyfc5z6frr3zll685zcx4dxxrlj"))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
      ;; This skips some of the tests which fail on armhf and aarch64.
-     '(#:configure-flags '("--disable-libevent-regress")))
+     '(#:configure-flags '("--disable-libevent-regress"
+                           "--disable-openssl")))
     (inputs
      `(("python" ,python-wrapper)))     ;for 'event_rpcgen.py'
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://libevent.org/")
     (synopsis "Event notification library")
     (description
@@ -76,7 +78,7 @@ loop.")
 (define-public libev
   (package
     (name "libev")
-    (version "4.31")
+    (version "4.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dist.schmorp.de/libev/Attic/libev-"
@@ -84,7 +86,7 @@ loop.")
                                   ".tar.gz"))
               (sha256
                (base32
-                "0nkfqv69wfyy2bpga4d53iqydycpik8jp8x6q70353hia8mmv1gd"))))
+                "1sjs4324is7fp21an4aas2z4dwsvs6z4xwrmp72vwpq1s6wbfzjh"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -102,26 +104,22 @@ limited support for fork events.")
 (define-public libuv
   (package
     (name "libuv")
-    (version "1.35.0")
+    (version "1.41.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dist.libuv.org/dist/v" version
                                   "/libuv-v" version ".tar.gz"))
               (sha256
                (base32
-                "0126mfmaw3s92dsga60sydgwjmzwg9cd36n127pydmisah17v50f"))))
+                "0zb818sjwnxn5yv3qvkxaprjf037yqmjipk5i3a8rg1q4izhrnv5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")
        ;; XXX: Some tests want /dev/tty, attempt to make connections, etc.
        #:tests? #f))
-    ;; TODO replace with autoconf on core-updates
-    (native-inputs `(("autoconf" ,autoconf-wrapper)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-
-                     ;; libuv.pc is installed only when pkg-config is found.
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list autoconf automake libtool
+                         ;; libuv.pc is installed only when pkg-config is found.
+                         pkg-config))
     (home-page "https://github.com/libuv/libuv")
     (synopsis "Library for asynchronous I/O")
     (description
@@ -150,6 +148,27 @@ resolution, asynchronous file system operations, and threading primitives.")
                 "0wpb9pz3r8nksnrf4zbixj2kk9whr7abi45ydrwyv2js2ljrc4j3"))))
     (properties '((hidden? . #t)))))
 
+(define-public libuv-julia
+  (let ((commit "fb3e3364c33ae48c827f6b103e05c3f0e78b79a9")
+        (revision "3"))
+    ;; When upgrading Julia, also upgrade this.  Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.6.1/deps/libuv.version
+    (package
+      (inherit libuv)
+      (name "libuv-julia")
+      (version (git-version "2.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/JuliaLang/libuv")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1kqpn19d20aka30h6q5h8lnzyp0vw0xzgx0wm4w2r5j6yf76m2hr"))))
+      (home-page "https://github.com/JuliaLang/libuv")
+      (properties '((hidden? . #t))))))
+
 (define-public perl-anyevent
   (package
     (name "perl-anyevent")
@@ -163,15 +182,15 @@ resolution, asynchronous file system operations, and threading primitives.")
                 "11drlj8r02czhjgzkb39axnr8zzyp506r043xfmf93q9kilfmgjh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-async-interrupt" ,perl-async-interrupt)
-       ("perl-ev" ,perl-ev)
-       ("perl-guard" ,perl-guard)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-net-ssleay" ,perl-net-ssleay)
-       ("perl-task-weaken" ,perl-task-weaken)))
+     (list perl-async-interrupt
+           perl-ev
+           perl-guard
+           perl-json
+           perl-json-xs
+           perl-net-ssleay
+           perl-task-weaken))
     (home-page "https://metacpan.org/release/AnyEvent")
     (synopsis
      "API for I/O, timer, signal, child process and completion events")
@@ -216,7 +235,7 @@ not rely on XS.")
      `(("libev-source" ,(package-source libev))
        ("perl-canary-stability" ,perl-canary-stability)))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/EV")
     (synopsis "Perl interface to libev")
     (description
@@ -240,11 +259,9 @@ and still be faster than other event loops currently supported in Perl.")
          "1qwb284z4ig3xzy21m1b3w8bkb8k6l2ij6cjz93znn2j6qs42pwp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-simple))
     (propagated-inputs
-     `(("perl-anyevent" ,perl-anyevent)
-       ("perl-data-sexpression" ,perl-data-sexpression)))
+     (list perl-anyevent perl-data-sexpression))
     (arguments
      ;; Tests seem to fail because they try to start a server.
      `(#:tests? #f))
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index d62a1588c1..286620882d 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -2,11 +2,11 @@
 ;;; Copyright © 2012, 2013, 2014, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
-;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 John Doe <dftxbs3e@free.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -51,45 +51,15 @@
                               name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))))
+                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))
+              (patches (search-patches "libffi-3.3-powerpc-fixes.patch"
+                                       "libffi-float128-powerpc64le.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Prevent the build system from passing -march and -mtune to the
        ;; compiler.  See "ax_cc_maxopt.m4" and "ax_gcc_archflag.m4".
-       #:configure-flags '("--enable-portable-binary" "--without-gcc-arch")
-
-       ;; TODO: Inline patches on next rebuild cycle.
-       ,@(if (string-prefix? "powerpc-" (or (%current-target-system)
-                                            (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())
-       ,@(if (string-prefix? "powerpc64le-" (or (%current-target-system)
-                                                (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch2
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc64le-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())))
-    (inputs
-     (cond
-      ((string-prefix? "powerpc-" (or (%current-target-system)
-                                        (%current-system)))
-       `(("powerpc-patch" ,@(search-patches
-                             "libffi-3.3-powerpc-fixes.patch"))))
-      ((string-prefix? "powerpc64le-" (or (%current-target-system)
-                                          (%current-system)))
-       `(("powerpc64le-patch" ,@(search-patches
-                                 "libffi-float128-powerpc64le.patch"))))
-      (else '())))
+       #:configure-flags '("--enable-portable-binary"
+                           "--without-gcc-arch")))
     (outputs '("out" "debug"))
     (synopsis "Foreign function call interface library")
     (description
@@ -121,27 +91,16 @@ conversions for values passed between the two languages.")
        (base32 "0v080s7vlrjz9z823x2yh36yc8drwpvvir6w8wfkkzd7k2z5qihs"))))
     (build-system python-build-system)
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs ; required at run-time
-     `(("python-pycparser" ,python-pycparser)))
+     (list python-pycparser))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
              ;; XXX The "normal" approach of setting CC and friends does
              ;; not work here.  Is this the correct way of doing things?
              (substitute* "testing/embedding/test_basic.py"
@@ -152,8 +111,7 @@ conversions for values passed between the two languages.")
                                "linker_so='gcc -shared')")))
              (substitute* "testing/cffi0/test_ownlib.py"
                (("\"cc testownlib") "\"gcc testownlib"))
-             (invoke "py.test" "-v" "c/" "testing/")
-             #t))
+             (invoke "py.test" "-v" "c/" "testing/")))
          (add-before 'check 'patch-paths-of-dynamically-loaded-libraries
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Shared libraries should be referred by their absolute path as
@@ -176,8 +134,7 @@ conversions for values passed between the two languages.")
                   (format #f "lib_m = ['~a']" libm)))
                (substitute* "c/test_c.py"
                  (("find_and_load_library\\(['\"]{1}c['\"]{1}")
-                  (format #f "find_and_load_library('~a'" libc)))
-               #t))))))
+                  (format #f "find_and_load_library('~a'" libc)))))))))
     (home-page "https://cffi.readthedocs.io/")
     (synopsis "Foreign function interface for Python")
     (description "Foreign Function Interface for Python calling C code.")
@@ -273,11 +230,9 @@ project.")
                  (format #t "test suite not run~%"))
              #t)))))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+     (list ruby-rake-compiler ruby-rspec ruby-rubygems-tasks))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (synopsis "Ruby foreign function interface library")
     (description "Ruby-FFI is a Ruby extension for programmatically loading
 dynamic libraries, binding functions within them, and calling those functions
diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm
index bbb98ff1f4..e39e0b3d71 100644
--- a/gnu/packages/libftdi.scm
+++ b/gnu/packages/libftdi.scm
@@ -39,7 +39,7 @@
                 "0x0vncf6i92slgrn0h7ghkskqbglbs534220qa84d0qg114zndpc"))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("libusb" ,libusb))) ; required by libftdi1.pc
+     (list libusb)) ; required by libftdi1.pc
     (home-page "https://www.intra2net.com/en/developer/libftdi/")
     (synopsis "FTDI USB driver with bitbang mode")
     (description
diff --git a/gnu/packages/libidn.scm b/gnu/packages/libidn.scm
index 8731ed3f83..7c8b77f6fb 100644
--- a/gnu/packages/libidn.scm
+++ b/gnu/packages/libidn.scm
@@ -1,10 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,14 +34,14 @@
 (define-public libidn
   (package
    (name "libidn")
-   (version "1.35")
+   (version "1.37")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/libidn/libidn-" version
                                 ".tar.gz"))
             (sha256
              (base32
-              "07pyy0afqikfq51z5kbzbj9ldbd12mri0zvx0mfv3ds6bc0g26pi"))))
+              "1hljls9rkilh04dwiwg388wk8djkac8idijrdysqq2nqbh6rg3iw"))))
    (build-system gnu-build-system)
    ;; FIXME: No Java and C# libraries are currently built.
    (arguments
@@ -59,18 +60,16 @@ Java libraries.")
 (define-public libidn2
   (package
     (name "libidn2")
-    (version "2.3.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/libidn/" name "-" version
-                                  ".tar.lz"))
+                                  ".tar.gz"))
               (sha256
                (base32
-                "14yw4w37ya6rcqa7h6p44x6711dwgq2j22xg6k79ybbf04sj88kb"))))
-    (native-inputs
-     `(("lzip" ,lzip)))
+                "0b8gsksj2g9f4iywwdma3v4jcg7i9rqvdxfmclwvbf1n72a89xla"))))
     (inputs
-     `(("libunistring" ,libunistring)))
+     (list libunistring))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
diff --git a/gnu/packages/libphidget.scm b/gnu/packages/libphidget.scm
index 765b0df9e9..edeeb5b408 100644
--- a/gnu/packages/libphidget.scm
+++ b/gnu/packages/libphidget.scm
@@ -38,7 +38,7 @@
             (sha256
              (base32 "07w54dmr75vq2imngfy66nk1sxlvkzhl2p6g362q0a02f099jy0f"))))
    (build-system gnu-build-system)
-   (inputs `(("libusb" ,libusb)))
+   (inputs (list libusb))
    (outputs '("out" "debug"))
    (home-page "https://www.phidgets.com/")
    (license lgpl3+)
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 0dcdf46ff1..b17a144f7c 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -100,11 +100,9 @@
          "17q84mhy4rb3masvjw24x549irdjmccnc8n04xh58v9l7hxn8v22"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("mdds" ,mdds)
-       ("python" ,python)
-       ("spdlog" ,spdlog)))
+     (list mdds python spdlog))
     (home-page "https://gitlab.com/ixion/ixion")
     (synopsis "General purpose formula parser and interpreter")
     (description "Ixion is a library for calculating the results of formula
@@ -129,12 +127,9 @@ their dependencies automatically upon calculation.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ixion" ,ixion)
-       ("mdds" ,mdds)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list ixion mdds python zlib))
     (home-page "https://gitlab.com/orcus/orcus")
     (synopsis "File import filter library for spreadsheet documents")
     (description "Orcus is a library that provides a collection of standalone
@@ -186,7 +181,7 @@ CSV, CSS and XML.")
                    "None)]\n")))
                #t))))))
     (inputs
-     `(("libreoffice" ,libreoffice)))
+     (list libreoffice))
     (home-page "http://dag.wiee.rs/home-made/unoconv/")
     (synopsis "Convert between any document format supported by LibreOffice")
     (description
@@ -215,13 +210,11 @@ All required fonts must be installed on the converting system.")
                "1cj76cz4mqcy2mgv9l5xlc95bypyk8zbq0ls9cswqrs2y0lhfgwk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs                  ; Referenced by .la files
-     `(("boost" ,boost)))
+     (list boost))
     (arguments
      ;; avoid triggering configure errors by simple inclusion of boost headers
      `(#:configure-flags '("--disable-werror"
@@ -249,12 +242,11 @@ spreadsheets and presentations.")
     (arguments
      `(#:configure-flags '("--disable-werror")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs
-     `(("librevenge" ,librevenge))) ; in Requires field of .pkg
+     (list librevenge)) ; in Requires field of .pkg
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://libwpd.sourceforge.net/")
     (synopsis "Library for importing WordPerfect documents")
     (description "Libwpd is a C++ library designed to help process
@@ -272,20 +264,23 @@ into other word processors.")
         (uri (string-append "mirror://sourceforge/libebook/libe-book-"
                             version "/libe-book-" version ".tar.xz"))
         (sha256
-          (base32
-            "1yg1vws1wggzhjw672bpgh2x541g5i9wryf67g51m0r79zrqz3by"))))
+         (base32
+          "1yg1vws1wggzhjw672bpgh2x541g5i9wryf67g51m0r79zrqz3by"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; This can be removed with the next release.
+            ;; Needed for icu4c compatibility >= 68.0.
+            (substitute* "src/lib/EBOOKCharsetConverter.cpp"
+              (("TRUE, TRUE, &status")
+              "true, true, &status"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit gperf pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("liblangtag" ,liblangtag)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list icu4c liblangtag librevenge libxml2))
     (inputs
-      `(("boost" ,boost)))
+      (list boost))
     (arguments
      ;; avoid triggering configure errors by simple inclusion of boost headers
      `(#:configure-flags '("--disable-werror")))
@@ -313,13 +308,11 @@ ZVR (simple compressed text format).")
          "1b8mc9zzrqypj1v9zdy3ybc48pw0rfr06cyi7n6grvybjjwq9q03"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("boost" ,boost)))
+     (list libxml2 boost))
     (propagated-inputs         ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (home-page "https://sourceforge.net/projects/libepubgen/")
     (synopsis "EPUB generator library for librevenge")
     (description "libepubgen is an EPUB generator for librevenge.  It supports
@@ -340,13 +333,11 @@ way--presentation and vector drawing interfaces.")
                "074x159immf139szkswv2zapnq75p7xk10dbha2p9193hgwggcwr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs
-     `(("libwpd" ,libwpd))) ; in Requires field of .pkg
+     (list libwpd)) ; in Requires field of .pkg
     (inputs
-     `(("perl" ,perl)
-       ("zlib" ,zlib)))
+     (list perl zlib))
     (home-page "http://libwpg.sourceforge.net/")
     (synopsis "Library and tools for the WordPerfect Graphics format")
     (description "The libwpg project provides a library and tools for
@@ -367,15 +358,11 @@ working with graphics in the WPG (WordPerfect Graphics) format.")
         "18h0a2gsfxvlv03nlcfvw9bzsflq5sin9agq6za103hr0ab8vcfp"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("curl" ,curl)
-       ("libxml2" ,libxml2)))
+     (list curl libxml2))
     (inputs
-     `(("boost" ,boost)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)))
+     (list boost cyrus-sasl openssl))
     (arguments
      `(#:configure-flags
         (list
@@ -409,15 +396,11 @@ as Alfresco or Nuxeo.")
                "1vbfrmnvib3cym0yyyabnd8xpx4f7wp20vnn09s6dln347fajqz7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen gperf perl pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list librevenge libxml2))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libabw")
     (synopsis "Library for parsing the AbiWord format")
     (description "Libabw is a library that parses the file format of
@@ -437,16 +420,11 @@ AbiWord documents.")
                "1m6dirmyhqwnrpv80z97x5k5hdh4kh8a8zlq3smbjrilc6fj8rjn"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("lcms" ,lcms)
-       ("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list icu4c lcms librevenge zlib))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libcdr")
     (synopsis "Library for parsing the CorelDRAW format")
     (description "Libcdr is a library that parses the file format of
@@ -468,19 +446,11 @@ CorelDRAW documents of all versions.")
     (arguments
      `(#:configure-flags '("--with-mdds=1.5")))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("liblangtag" ,liblangtag)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list liblangtag librevenge libxml2 zlib))
     (inputs
-     `(("boost" ,boost)
-       ("glm" ,glm)
-       ("mdds" ,mdds)))
+     (list boost glm mdds))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libetonyek")
     (synopsis "Library for parsing the Apple Keynote format")
     (description "Libetonyek is a library that parses the file format of
@@ -500,10 +470,9 @@ Apple Keynote documents.  It currently supports Keynote versions 2 to 5.")
          (base32 "1g9kwxx60q0hpwvs66ys1cb9qg54hfvbivadwli8sfpc085a44hz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list libtool pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (home-page "https://bitbucket.org/tagoh/liblangtag")
     (synopsis "Library to access tags for identifying languages")
     (description "Liblangtag implements an interface to work with tags
@@ -545,7 +514,8 @@ library primarily intended for language guessing.")
                "1b1lvqh68rwij1yvmxy02hsmh7i74ma5767mk8mg5nx6chajshhf"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     '(#:configure-flags '("--disable-werror")
+       #:phases (modify-phases %standard-phases
                   (add-before 'build 'adjust-for-ICU-65
                     (lambda _
                       ;; Fix build with ICU 65 and later.  Taken from this
@@ -556,17 +526,11 @@ library primarily intended for language guessing.")
                          (string-append all ";\n")))
                       #t)))))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf perl pkg-config))
     (inputs
-     `(("icu4c" ,icu4c)
-       ("lcms" ,lcms)))
+     (list icu4c lcms))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list librevenge zlib))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libfreehand")
     (synopsis "Library for parsing the FreeHand format")
     (description "Libfreehand is a library that parses the file format of
@@ -583,17 +547,22 @@ Aldus/Macromedia/Adobe FreeHand documents.")
       (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
                           name "-" version ".tar.xz"))
       (sha256 (base32
-               "1fhkn013gzg59f4z7rldpbi0nj7lgdqzxanspsqa6axvmahw2dpg"))))
+               "1fhkn013gzg59f4z7rldpbi0nj7lgdqzxanspsqa6axvmahw2dpg"))
+      (modules '((guix build utils)))
+      (snippet
+       '(begin
+          ;; This can be removed with the next release.
+          ;; https://gerrit.libreoffice.org/c/libmspub/+/73814
+          (substitute* "src/lib/MSPUBMetaData.h"
+            (("include <vector>" all)
+             (string-append all "\n#include <cstdint>")))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list icu4c librevenge zlib))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libmspub")
     (synopsis "Library for parsing the Microsoft Publisher format")
     (description "Libmspub is a library that parses the file format of
@@ -638,13 +607,11 @@ Java.")
     (arguments
      `(#:configure-flags '("--disable-werror")))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libpagemaker")
     (synopsis "Library for parsing the PageMaker format")
     (description "Libpagemaker is a library that parses the file format of
@@ -665,17 +632,11 @@ created by PageMaker version 6.x and 7.")
                "0k7adcbbf27l7n453cca1m6s9yj6qvb5j6bsg2db09ybf3w8vbwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen gperf perl pkg-config))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
-     `(("icu4c" ,icu4c)
-       ("librevenge" ,librevenge)
-       ("libxml2" ,libxml2)))
+     (list icu4c librevenge libxml2))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libvisio")
     (synopsis "Library for parsing the Microsoft Visio format")
     (description "Libvisio is a library that parses the file format of
@@ -695,14 +656,11 @@ Microsoft Visio documents of all versions.")
                "0986c5gw4vdfz7bcmpdfz07inba5wxsx4f6xvndknqj6zlkh082m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list boost libxml2 zlib))
     (arguments
      ;; Avoid triggering configure errors by simple inclusion of Boost headers.
      `(#:configure-flags '("--disable-werror")))
@@ -727,13 +685,11 @@ text documents, vector drawings, presentations and spreadsheets.")
        (base32 "1bx5xnw8sk5h26x2z7hfac7hfbm68zqg0jilp15qr0pwxqsf4wmj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs                  ; in Requires field of .pc file
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "https://sourceforge.net/p/libmwaw/wiki/Home/")
     (synopsis "Import library for some old Macintosh text documents")
     (description "Libmwaw contains some import filters for old Macintosh
@@ -754,10 +710,9 @@ spreadsheet documents.")
                 "1ny8411273k2bq7mnpmcvri3rd46b2j67wfypqkp3y8nhanv0kzr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("librevenge" ,librevenge)
-       ("zlib" ,zlib)))
+     (list librevenge zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/fosnola/libstaroffice")
     (synopsis "Provides LibreOffice support for old StarOffice documents")
     (description "@code{libstaroffice} is an import filter for the document formats
@@ -777,13 +732,11 @@ from the old StarOffice (.sdc, .sdw, ...).")
                "1nsfacqp5sfkyayw7q0wp68lidksd1wjdix8qmsbf0vdl19gn6p2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (propagated-inputs                  ; in Requires field of .pkg
-     `(("librevenge" ,librevenge)))
+     (list librevenge))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (home-page "http://libwps.sourceforge.net/")
     (synopsis "Import library for Microsoft Works text documents")
     (description "Libwps is a library for importing files in the Microsoft
@@ -806,15 +759,9 @@ Works word processor file format.")
     ;; A harmless 'sign-compare' error pops up on i686 so disable '-Werror'.
     '(#:configure-flags '("--disable-werror")))
    (inputs
-    `(("boost" ,boost)
-      ("icu4c" ,icu4c)
-      ("libpng" ,libpng)
-      ("librevenge" ,librevenge)
-      ("zlib" ,zlib)))
+    (list boost icu4c libpng librevenge zlib))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit doxygen pkg-config))
     (home-page "https://wiki.documentfoundation.org/DLP/Libraries/libzmf")
     (synopsis "Parses file format of Zoner Callisto/Draw documents")
     (description "Libzmf is a library that parses the file format of Zoner
@@ -838,11 +785,9 @@ Zoner Draw version 4 and 5.")
           "0qxlkd012r45ppd21kldbq9k5ac5nmxz290z6m2kch9l56v768k1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (native-search-paths (list (search-path-specification
                                 (variable "DICPATH")
                                 (files '("share/hunspell")))))
@@ -871,7 +816,7 @@ word compounding or character encoding.")
                (base32
                 "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9"))))
     (build-system trivial-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -943,7 +888,7 @@ library.")
                 "14mzf8glxkp2775dcqisb1zv6r8ncm3bvzl46q352rwyl2dg1c59"))))
 
     (build-system trivial-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -955,8 +900,8 @@ library.")
                           (myspell  (string-append out "/share/myspell"))
                           (doc      (string-append out "/share/doc/"
                                                    ,name))
-                          (unzip (string-append (assoc-ref %build-inputs "unzip")
-                                                "/bin/unzip")))
+                          (unzip (search-input-file %build-inputs
+                                                    "/bin/unzip")))
                      (invoke unzip "-j" "-o" (assoc-ref %build-inputs "source"))
                      (invoke unzip "-j" "-o" "pl_PL.zip")
                      (for-each (cut install-file <> hunspell)
@@ -1002,9 +947,7 @@ library.")
                #t))))
        #:tests? #f))        ; no tests
     (native-inputs
-     `(("hunspell" ,hunspell)
-       ("ispell" ,ispell)
-       ("perl" ,perl)))
+     (list hunspell ispell perl))
     (synopsis "Hunspell dictionary for German (de_DE)")
     (description "This package provides a dictionary for the Hunspell
 spell-checking library.")
@@ -1025,7 +968,7 @@ spell-checking library.")
                "01ap9pr6zzzbp4ky0vy7i1983fwyqy27pl0ld55s30fdxka3ciih"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://hunspell.sourceforge.net/")
     (synopsis "Hyphenation library")
     (description "Hyphen is a hyphenation library using TeX hyphenation
@@ -1047,10 +990,9 @@ patterns, which are pre-processed by a perl script.")
                "0prh19wy1c74kmzkkavm9qslk99gz8h8wmjvwzjc6lf8v2az708y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("hunspell" ,hunspell)
-       ("perl" ,perl)))
+     (list hunspell perl))
     (home-page "http://hunspell.sourceforge.net/")
     (synopsis "Thesaurus")
     (description "MyThes is a simple thesaurus that uses a structured text
@@ -1072,14 +1014,11 @@ and to return information on pronunciations, meanings and synonyms.")
                 "0p4lb84m05wqd8qr8ni9sp80ivlm83ffn0nxiv4m42hj22qvcdz1"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("icu4c" ,icu4c)
-       ("zlib" ,zlib)))
+     (list boost icu4c zlib))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (propagated-inputs
-     `(("librevenge" ,librevenge))) ; mentioned in Requires field
+     (list librevenge)) ; mentioned in Requires field
     (home-page "https://www.libreoffice.org")
     (synopsis "Library and tools for the QuarkXPress file format")
     (description "libqxp is a library and a set of tools for reading and
@@ -1228,10 +1167,7 @@ converting QuarkXPress file format.  It supports versions 3.1 to 4.1.")
              (substitute* '("shell/source/unix/exec/shellexec.cxx"
                             "shell/source/unix/misc/senddoc.sh")
                (("/usr/bin/xdg-open")
-                (string-append (assoc-ref inputs "xdg-utils")
-                               "/bin/xdg-open")))
-
-             #t))
+                (search-input-file inputs "/bin/xdg-open")))))
          (add-after 'install 'reset-zip-timestamps
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
index 927a12f4cf..627447e876 100644
--- a/gnu/packages/libsigsegv.scm
+++ b/gnu/packages/libsigsegv.scm
@@ -26,14 +26,14 @@
 (define-public libsigsegv
   (package
    (name "libsigsegv")
-   (version "2.12")
+   (version "2.13")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/libsigsegv/libsigsegv-"
                   version ".tar.gz"))
             (sha256
-             (base32 "1dlhqf4igzpqayms25lkhycjq1ccavisx8cnb3y4zapbkqsszq9s"))))
+             (base32 "06c1qjiv69hjvbq06mcxdi5hzfadhy28sa83zxspqpxhfr0ywy5y"))))
    (build-system gnu-build-system)
    (home-page "https://www.gnu.org/software/libsigsegv/")
    (synopsis "Library for handling page faults")
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 8da6984249..db7ae86cc7 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Christopher Howard <christopher@librehacker.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,9 +93,9 @@ devices on various operating systems.")
         "0nn5icrfm9lkhzw1xjvaks9bq3w6mjg86ggv3fn7kgi4nfvg8kj0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://libusb.info")
     (synopsis "Compatibility shim for libusb")
     (description
@@ -151,7 +152,7 @@ version of libusb to run with newer libusb.")
                (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
                #t)))))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (native-inputs
        `(("jdk" ,icedtea "jdk")))
       (home-page "https://github.com/usb4java/libusb4java/")
@@ -211,10 +212,7 @@ with usb4java.")
                   (string-append "assumeUsbTestsEnabled();" line))))
              #t)))))
     (inputs
-     `(("libusb4java" ,libusb4java)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list libusb4java java-commons-lang3 java-junit java-hamcrest-core))
     (home-page "http://usb4java.org/")
     (synopsis "USB library for Java")
     (description
@@ -257,7 +255,7 @@ implementing @code{javax.usb} (JSR-80).")
                                    "^libusb.*\\.so\\..*"))
                  "\"")))
              #t)))))
-    (propagated-inputs `(("libusb" ,libusb)))
+    (propagated-inputs (list libusb))
     (home-page "https://github.com/vpelletier/python-libusb1")
     (synopsis "Pure-python wrapper for libusb-1.0")
     (description "Libusb is a library that gives applications easy access to
@@ -297,7 +295,7 @@ wrapper for accessing libusb-1.0.")
                  "\"")))
              #t)))))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (home-page "https://pyusb.github.io/pyusb/")
     (synopsis "Python bindings to the libusb library")
     (description
@@ -332,10 +330,7 @@ wrapper for accessing libusb-1.0.")
                                          "50-capablerobot-usbhub.rules"))
                #t))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-construct" ,python-construct)
-       ("python-pyusb" ,python-pyusb)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-click python-construct python-pyusb python-pyyaml))
     (home-page
      "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
     (synopsis
@@ -367,13 +362,9 @@ I2C and SPI devices attached to the USB Hub.")
        ;; 'large.test' and 'largecmp.test'.
        #:parallel-tests? #f))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython))) ; to build Python bindings
+     (list autoconf automake libtool pkg-config python-cython)) ; to build Python bindings
     (home-page "https://libimobiledevice.org/")
     (synopsis "C library to handle Apple Property List files")
     (description "This package provides a small portable C library to handle
@@ -394,8 +385,7 @@ Apple Property List files in binary or XML.")
                 "084vg570g1qb506jd7axg6c080mfsmbf52v3lngzlknsaf2q0snc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libplist" ,libplist)))
+     (list pkg-config libplist))
     (home-page "https://libimobiledevice.org/")
     (synopsis "Library to multiplex connections from and to iOS devices")
     (description "This package provides a client library to multiplex
@@ -420,14 +410,11 @@ connections from and to iOS devices by connecting to a socket provided by a
     (arguments
      '(#:configure-flags '("PYTHON_VERSION=3")))
     (propagated-inputs
-     `(("openssl" ,openssl)
-       ("libplist" ,libplist)
-       ("libusbmuxd" ,libusbmuxd)))
+     (list openssl libplist libusbmuxd))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (home-page "https://libimobiledevice.org/")
     (synopsis "Protocol library and tools to communicate with Apple devices")
     (description "libimobiledevice is a software library that talks the
@@ -451,10 +438,9 @@ music and video to the device.")
                (base32
                 "11wdv44qwia77sh38n36809ysaib52rwd4fvqwb5ybsbz4p70l1m"))))
     (inputs
-     `(("fuse" ,fuse)
-       ("libimobiledevice" ,libimobiledevice)))
+     (list fuse libimobiledevice))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (home-page "https://libimobiledevice.org/")
     (synopsis "Mount iOS devices")
@@ -475,11 +461,9 @@ iOS devices and access their contents.")
                (base32
                 "17idzpxrvkbff0jpynf35df95lh7wsm8vndynp63bxib2w09gv60"))))
     (inputs
-     `(("libplist" ,libplist)
-       ("libusb" ,libusb)
-       ("libimobiledevice" ,libimobiledevice)))
+     (list libplist libusb libimobiledevice))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (home-page "https://libimobiledevice.org/")
     (synopsis "Multiplex connections over USB to an iOS device")
@@ -502,12 +486,12 @@ over USB.")
                "0a1jlf5b2c2vylkvdd3cxjs20a96jlbrdyx7rwai5rzmcdpszd6y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (propagated-inputs
      ;; libmtp.pc refers to all these.
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -543,17 +527,14 @@ proposed for standardization.")
      '(#:configure-flags
        (let ((libid3tag (assoc-ref %build-inputs "libid3tag")))
          (list
+          "CFLAGS=-fcommon"
           ;; libid3tag provides no .pc file, so pkg-config fails to find them.
           (string-append "ID3TAG_CFLAGS=-I" libid3tag "/include")
           (string-append "ID3TAG_LIBS=-L" libid3tag "/lib -lid3tag -lz")))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("flac" ,flac)
-       ("libvorbis" ,libvorbis)
-       ("libid3tag" ,libid3tag)
-       ("libmtp" ,libmtp)))
+     (list gtk+ flac libvorbis libid3tag libmtp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://gmtp.sourceforge.net/")
     (synopsis "Simple graphical MTP client")
     (description "gMTP is a simple graphical client for the Media Transfer Protocol
@@ -576,13 +557,9 @@ devices.")
         (base32 "1nr4z4b10vpbh3ss525r7spz4i43zim2ba5qzfl15dgdxshxxivb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libusb" ,libusb)
-       ("udev" ,eudev)))
+     (list libusb eudev))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/libusb/hidapi")
     (synopsis "HID API library")
     (description
@@ -637,11 +614,9 @@ HID-Class devices.")
                      (string-append "--prefix=" (assoc-ref outputs "out"))
                      "--single-version-externally-managed" "--root=/"))))))
     (inputs
-     `(("hidapi" ,hidapi)
-       ("libusb" ,libusb)
-       ("eudev" ,eudev)))
+     (list hidapi libusb eudev))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/trezor/cython-hidapi")
     (synopsis "Cython interface to hidapi")
     (description "This package provides a Cython interface to @code{hidapi}.")
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index bc9ca7238d..79ad3df4c8 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -51,11 +51,9 @@
         (base32 "0kznpv628jrndn4nw646f6pl7yqvmacwljlygvsjfdkyh0i4sr2k"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-regexp-pattern" ,perl-regexp-pattern)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-regexp-pattern perl-test-exception))
     (propagated-inputs
-     `(("perl-strictures" ,perl-strictures-2)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-strictures-2 perl-try-tiny))
     (home-page "https://metacpan.org/release/Regexp-Pattern-License")
     (synopsis "Regular expressions for legal licenses")
     (description "Regexp::Pattern::License provides a hash of regular
@@ -79,9 +77,9 @@ Regexp::Pattern is a convention for organizing reusable regex patterns.")
          "0fzymv065nn3glwnw34nkyadzw2dh4rcz8avmki4zrnk4k45m01a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-number-range" ,perl-number-range)))
+     (list perl-number-range))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)))
+     (list perl-exporter-tiny))
     (home-page "https://metacpan.org/release/String-Copyright")
     (synopsis "Representation of text-based copyright statements")
     (description "String::Copyright Parses common styles of copyright
@@ -103,10 +101,9 @@ statements and serializes in normalized format.")
          "128pbm9pf5drakm9bpkifc1zg8f005xabfwzg21nc03m5mhfligb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-try-tiny))
     (propagated-inputs
-     `(("perl-data-section" ,perl-data-section)
-       ("perl-text-template" ,perl-text-template)))
+     (list perl-data-section perl-text-template))
     (home-page "https://metacpan.org/release/Software-License")
     (synopsis "Templated software licenses")
     (description "This package provides templated software licenses.")
@@ -126,14 +123,14 @@ statements and serializes in normalized format.")
                 "12l83zf85zagpagizmzy3bwkc659sbzqf18cycx8g4h6d3mc5kqw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-regexp-pattern" ,perl-regexp-pattern)
-       ("perl-software-license" ,perl-software-license)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-roo" ,perl-test-roo)
-       ("perl-test-script" ,perl-test-script)
-       ("perl-universal-require" ,perl-universal-require)
-       ("perl-number-range" ,perl-number-range)
-       ("perl-sub-quote" ,perl-sub-quote)))
+     (list perl-regexp-pattern
+           perl-software-license
+           perl-test-requires
+           perl-test-roo
+           perl-test-script
+           perl-universal-require
+           perl-number-range
+           perl-sub-quote))
     (propagated-inputs
      `(("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
        ("perl-moo" ,perl-moo-2)
@@ -179,15 +176,14 @@ belonging to various licenses.")
         (base32 "00gqpw124lz6kf3gi6m2i1bnxp3k5n3id0bgqff0bj08jga7pj49"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (inputs
-     `(("python-binaryornot" ,python-binaryornot)
-       ("python-boolean.py" ,python-boolean.py)
-       ("python-debian" ,python-debian)
-       ("python-jinja2" ,python-jinja2)
-       ("python-license-expression" ,python-license-expression)
-       ("python-requests" ,python-requests)))
+     (list python-binaryornot
+           python-boolean.py
+           python-debian
+           python-jinja2
+           python-license-expression
+           python-requests))
     (home-page "https://reuse.software/")
     (synopsis "Provide and verify copyright and licensing information")
     (description
@@ -230,7 +226,7 @@ designed to be simple.")
                 "\"filenames\": [\"CMakeLists.txt\"], \n        \"extensions\": [],"))
              #t)))))
     (propagated-inputs
-     `(("python-regex" ,python-regex)))
+     (list python-regex))
     (home-page "https://github.com/johann-petrak/licenseheaders")
     (synopsis "Add or change license headers for all files in a directory")
     (description
diff --git a/gnu/packages/lighting.scm b/gnu/packages/lighting.scm
index 4718795a8a..5850da84d8 100644
--- a/gnu/packages/lighting.scm
+++ b/gnu/packages/lighting.scm
@@ -54,15 +54,14 @@
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("bison" ,bison)
-         ("cppunit" ,cppunit)
-         ("flex" ,flex)
-         ("pkg-config" ,pkg-config)
-
-         ;; For git repository bootstrapping.
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list bison
+             cppunit
+             flex
+             pkg-config
+             ;; For git repository bootstrapping.
+             autoconf
+             automake
+             libtool))
       (inputs
        `(("libftdi" ,libftdi)
          ("libmicrohttpd" ,libmicrohttpd)
@@ -70,7 +69,7 @@
          ("libuuid" ,util-linux "lib")
          ("zlib" ,zlib)))
       (propagated-inputs
-       `(("protobuf" ,protobuf)))       ; for pkg-config --libs libola
+       (list protobuf))       ; for pkg-config --libs libola
       (arguments
        `( ;; G++ >= 4.8 macro expansion tracking requires lots of memory, causing
          ;; build to fail on low memory systems.  We disable that with the
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 1c60e767b0..285ecb58fd 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -122,7 +122,7 @@
                   (string-append out "/share/BCUnit/Examples")
                   (string-append doc "/share/BCUnit/Examples"))))))))
       (inputs
-       `(("ncurses" ,ncurses)))
+       (list ncurses))
       (synopsis "Belledonne Communications Unit Testing Framework")
       (description "BCUnit is a fork of the defunct project CUnit, with
 several fixes and patches applied.  It is a unit testing framework for
@@ -235,7 +235,7 @@ Communications software like belle-sip, mediastreamer2 and linphone.")
                 ;; name, so have it match.
                 (string-append tester "/share/belr_tester"))))))))
     (inputs
-     `(("bctoolbox" ,bctoolbox)))
+     (list bctoolbox))
     (synopsis "Belledonne Communications Language Recognition Library")
     (description "Belr is Belledonne Communications' language recognition
 library, written in C++11.  It parses text inputs formatted according to a
@@ -293,8 +293,7 @@ IETF.")
                                                      "/bin/belcard_tester")))
                  (invoke belcard_tester))))))))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belr" ,belr)))
+     (list bctoolbox belr))
     (synopsis "Belledonne Communications VCard Library")
     (description "Belcard is a C++ library to manipulate VCard standard
 format.")
@@ -445,7 +444,7 @@ such as conferencing.")
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)))
     (inputs
-     `(("bctoolbox" ,bctoolbox)))
+     (list bctoolbox))
     (synopsis "Belledonne Communications RTP Library")
     (description "oRTP is a C library implementing the RTP protocol.  It
 implements the RFC 3550 standard.")
@@ -552,9 +551,7 @@ including both ARM and x86.")
                                ;;"HTTP stack"
                                "Object"))))))))
     (inputs
-     `(("avahi" ,avahi)
-       ("bctoolbox" ,bctoolbox)
-       ("zlib" ,zlib)))
+     (list avahi bctoolbox zlib))
     (synopsis "Belledonne Communications SIP Library")
     (description "Belle-sip is a modern library implementing SIP transport,
 transaction and dialog layers.  It is written in C, with an object-oriented
@@ -721,9 +718,7 @@ including media capture, encoding and decoding, and rendering.")
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belle-sip" ,belle-sip)
-       ("soci" ,soci)))
+     (list bctoolbox belle-sip soci))
     (synopsis "Belledonne Communications Encryption Library")
     (description "LIME is an encryption library for one-to-one and group
 instant messaging, allowing users to exchange messages privately and
@@ -851,21 +846,20 @@ and video calls or instant messaging capabilities to an application.")
                (symlink (string-append liblinphone "/share/belr/grammars")
                         grammar-dest)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("belcard" ,belcard)
-       ("belr" ,belr)
-       ("liblinphone" ,liblinphone)
-       ("mediastreamer2" ,mediastreamer2)
-       ("ortp" ,ortp)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)))
+     (list bctoolbox
+           belcard
+           belr
+           liblinphone
+           mediastreamer2
+           ortp
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg))
     (synopsis "Desktop client for the Linphone SIP softphone")
     (description "Linphone is a SIP softphone for voice and video over IP calling
 (VoIP) and instant messaging.  Amongst its features are:
@@ -911,10 +905,7 @@ and video calls or instant messaging capabilities to an application.")
          #:configure-flags
          (list "-DENABLE_STATIC=NO")))  ; Not required
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("openh264" ,openh264)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 openh264 ortp))
       (synopsis "Media Streamer H.264 Codec")
       (description "MsOpenH264 is an  H.264 encoder/decoder plugin for
  mediastreamer2 based on the openh264 library.")
@@ -942,9 +933,7 @@ and video calls or instant messaging capabilities to an application.")
          #:configure-flags
          (list "-DENABLE_STATIC=NO")))  ; Not required
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 ortp))
       (synopsis "Media Streamer SILK Codec")
       (description "MSSILK is a plugin of MediaStreamer, adding support for AMR
 codec.  It is based on the Skype's SILK implementation.")
@@ -995,9 +984,7 @@ codec.  It is based on the Skype's SILK implementation.")
                "1maqychrgwy0z4zypa03qp726l2finw64z6cymdzhd58ql3p1lvm"))))
          ("python" ,python-wrapper)))
       (inputs
-       `(("bctoolbox" ,bctoolbox)
-         ("mediastreamer2" ,mediastreamer2)
-         ("ortp" ,ortp)))
+       (list bctoolbox mediastreamer2 ortp))
       (synopsis "Media Streamer WebRTC Codec")
       (description "MSWebRTC is a plugin of MediaStreamer, adding support for
 WebRTC codec.  It includes features from WebRTC, such as, iSAC and AECM.")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 1e51dd8d83..2e659836e2 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017, 2018, 2020, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
-;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2019, 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
@@ -52,7 +52,13 @@
 ;;; Copyright © 2020 pukkamustard <pukkamustard@posteo.net>
 ;;; Copyright © 2021 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;; Copyright © 2021 Olivier Dion <olivier.dion@polymtl.ca>
+;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,6 +82,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -144,10 +151,10 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages swig)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
@@ -542,14 +549,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                      ,@(if (version>=? version "4.16")
                            `(("flex" ,flex)
                              ("bison" ,bison))
-                           '())
-                     ,@(if (version>=? version "5.3")
-                           `(("rsync" ,rsync))
                            '())))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
-                  (srfi srfi-1))
+                  (srfi srfi-1)
+                  (ice-9 match))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -560,32 +565,37 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                               (%current-system))))
                    (defconfig ,(system->defconfig
                                 (or (%current-target-system)
-                                    (%current-system)))))
+                                    (%current-system))))
+                   (make-target ,(if (version>=? version "5.3")
+                                     "headers"
+                                     "headers_check")))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
                (invoke "make" defconfig)
-               (invoke "make" "mrproper" "headers_check"))))
+               (invoke "make" "mrproper" make-target))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (invoke "make"
-                       (string-append "INSTALL_HDR_PATH=" out)
-                       "headers_install")
+
+               ;; Mimic the quiet_cmd_headers_install target to avoid a
+               ;; dependency on rsync.
+               (for-each (lambda (file)
+                           (let ((destination (string-append
+                                               out "/include/"
+                                               ;; Drop the 'usr/include' prefix.
+                                               (match (string-split file #\/)
+                                                 ((_ _ path ...)
+                                                  (string-join path "/"))))))
+                             (format #t "`~a' -> `~a'~%" file destination)
+                             (install-file file (dirname destination))))
+                         (find-files "usr/include" "\\.h$"))
 
                (mkdir (string-append out "/include/config"))
                (call-with-output-file
                    (string-append out
                                   "/include/config/kernel.release")
                  (lambda (p)
-                   (format p "~a-default~%" ,version)))
-
-               ;; Remove the '.install' and '..install.cmd' files; the
-               ;; latter contains store paths, which pulls in bootstrap
-               ;; binaries in the build environment, and prevents bit
-               ;; reproducibility for the bootstrap binaries.
-               (for-each delete-file (find-files out "\\.install"))
-
-               #t))))
+                   (format p "~a-default~%" ,version)))))))
        #:allowed-references ()
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
@@ -630,11 +640,11 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 
 ;; The following package is used in the early bootstrap, and thus must be kept
 ;; stable and with minimal build requirements.
-(define-public linux-libre-headers-5.4.20
-  (make-linux-libre-headers "5.4.20" "gnu"
-                            "1qxhf6dmcwjblzx8fgn6vr10p38xw10iwh6d1y1v1mxb25y30b47"))
+(define-public linux-libre-headers-5.10.35
+  (make-linux-libre-headers "5.10.35" "gnu"
+                            "0q2rnchad55d49f3rajrkazz0fcjv1irwrdb1hwjnl01fzm2gjk3"))
 
-(define-public linux-libre-headers linux-libre-headers-5.4.20)
+(define-public linux-libre-headers linux-libre-headers-5.10.35)
 
 
 ;;;
@@ -804,15 +814,18 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
          (add-after 'unpack 'patch-/bin/pwd
            (lambda _
              (substitute* (find-files "." "^Makefile(\\.include)?$")
-               (("/bin/pwd") "pwd"))
-             #t))
+               (("/bin/pwd") "pwd"))))
          (replace 'configure
            (lambda* (#:key inputs native-inputs target #:allow-other-keys)
-             ;; Avoid introducing timestamps
+             ;; Avoid introducing timestamps.
              (setenv "KCONFIG_NOTIMESTAMP" "1")
              (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
 
-             ;; Set ARCH and CROSS_COMPILE
+             ;; Other variables useful for reproducibility.
+             (setenv "KBUILD_BUILD_USER" "guix")
+             (setenv "KBUILD_BUILD_HOST" "guix")
+
+             ;; Set ARCH and CROSS_COMPILE.
              (let ((arch ,(system->linux-architecture
                            (or (%current-target-system)
                                (%current-system)))))
@@ -883,8 +896,7 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
                  (false-if-file-not-found
                   (delete-file (string-append moddir "/" version "/build")))
                  (false-if-file-not-found
-                  (delete-file (string-append moddir "/" version "/source"))))
-               #t))))
+                  (delete-file (string-append moddir "/" version "/source"))))))))
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
     (synopsis "100% free redistribution of a cleaned Linux kernel")
@@ -1153,7 +1165,8 @@ It has been modified to remove all non-free binary blobs.")
                   %default-extra-linux-options))))
     (package
       (inherit base-linux-libre)
-      (inputs `(("cpio" ,cpio) ,@(package-inputs base-linux-libre))))))
+      (inputs (modify-inputs (package-inputs base-linux-libre)
+                (prepend cpio))))))
 
 
 
@@ -1580,12 +1593,11 @@ rules, which need to be installed separately.")
 
     (build-system gnu-build-system)
     (native-inputs
-     `(("flex" ,flex)
-
-       ;; TODO: optional dependencies
-       ;; ("libxcrypt" ,libxcrypt)
-       ;; ("cracklib" ,cracklib)
-       ))
+     (list flex
+           ;; TODO: optional dependencies
+           ;; ("libxcrypt" ,libxcrypt)
+           ;; ("cracklib" ,cracklib)
+           ))
     (arguments
      `(;; Most users, such as `shadow', expect the headers to be under
        ;; `security'.
@@ -1662,9 +1674,9 @@ at login.  Local and dynamic reconfiguration are its key features.")
                  (invoke "python" "-m" "pamela" "-a" "`whoami`"))
                #t))))))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/minrk/pamela")
     (synopsis "PAM interface using ctypes")
     (description "This package provides a PAM interface using @code{ctypes}.")
@@ -1685,12 +1697,9 @@ at login.  Local and dynamic reconfiguration are its key features.")
                 "1bf91gi6zmfzzmczxm7pajxdlgnikasvg5xsd3j0a368rcr7lf9l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnupg" ,gnupg)
-       ("linux-pam" ,linux-pam)))
+     (list gnupg linux-pam))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:tests? #f ;no tests suite
        #:configure-flags
@@ -1793,7 +1802,7 @@ deviation, and minimum and maximum values.  It can show a nice histogram too.")
                 "ac_cv_func_malloc_0_nonnull=yes"
                 "ac_cv_func_realloc_0_nonnull=yes"))
              '())))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://gitlab.com/psmisc/psmisc")
     (synopsis "Small utilities that use the proc file system")
     (description
@@ -1805,7 +1814,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.35.1")
+    (version "2.37.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -1813,7 +1822,7 @@ providing the system administrator with some help in common tasks.")
                                   "util-linux-" version ".tar.xz"))
               (sha256
                (base32
-                "1yfpy6bkab4jw61mpx48gfy24yrqp4a7arvpis8csrkk53fkxpnr"))
+                "0xkb7vw2040zi4m0sbhs5qn5l8nrq4xsf4sdxf3cy9mpachd8jwf"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -1831,7 +1840,10 @@ providing the system administrator with some help in common tasks.")
                "static"))       ;2.9 MiB static .a libraries
     (arguments
      `(#:configure-flags (list "--disable-use-tty-group"
-                               "--enable-fs-paths-default=/run/current-system/profile/sbin"
+                               (string-append
+                                "--enable-fs-paths-default="
+                                "/run/setuid-programs"
+                                ":/run/current-system/profile/sbin")
                                ;; Don't try to chown root:root mount and umount
                                "--disable-makeinstall-chown"
                                "--localstatedir=/var"
@@ -1857,44 +1869,45 @@ providing the system administrator with some help in common tasks.")
                         ;; libraries below $exec_prefix when $libdir does not
                         ;; match any of the "usual" locations.  Fix that.
                         (("usrlib_execdir='\\$\\{exec_prefix\\}'\\$libdir")
-                         "usrlib_execdir=$libdir"))
-                      #t))
+                         "usrlib_execdir=$libdir"))))
                   (add-before 'build 'set-umount-file-name
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Tell 'eject' the right file name of 'umount'.
                       (let ((out (assoc-ref outputs "out")))
                         (substitute* "sys-utils/eject.c"
                           (("\"/bin/umount\"")
-                           (string-append "\"" out "/bin/umount\"")))
-                        #t)))
+                           (string-append "\"" out "/bin/umount\""))))))
                   (add-before 'check 'pre-check
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out"))
-                            (net (assoc-ref inputs "net-base")))
+                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                      (let ((services (search-input-file (or native-inputs inputs)
+                                                         "etc/services")))
                         ;; Change the test to refer to the right file.
                         (substitute* "tests/ts/misc/mcookie"
                           (("/etc/services")
-                           (string-append net "/etc/services")))
+                           services))
 
                         ;; The C.UTF-8 locale does not exist in our libc.
                         (substitute* "tests/ts/column/invalid-multibyte"
-                          (("C\\.UTF-8") "en_US.utf8"))
-                        #t)))
-                  ;; TODO: Remove the conditional on the next rebuild cycle.
-                  ,@(if (string-prefix? "arm" (%current-system))
-                        '((add-before 'check 'disable-setarch-test
-                            (lambda _
-                              ;; The setarch tests are unreliable in QEMU's
-                              ;; user-mode emulation, which is our primary
-                              ;; method of building ARMv7 packages.
-                              ;; <https://github.com/karelzak/util-linux/issues/601>
-                              (substitute* "tests/ts/misc/setarch"
-                                (("ts_init_subtest.*" all)
-                                 (string-append
-                                  all "\n"
-                                  "ts_skip \"setarch tests are unreliable under QEMU\"")))
-                              #t)))
-                        '())
+                          (("C\\.UTF-8") "en_US.utf8")))))
+                  (add-before 'check 'disable-setarch-test
+                    (lambda _
+                      ;; The setarch tests are unreliable in QEMU's user-mode
+                      ;; emulation, which is our primary method of building
+                      ;; ARMv7 packages.  See
+                      ;; <https://github.com/karelzak/util-linux/issues/601>.
+                      (substitute* "tests/ts/misc/setarch"
+                        (("ts_init_subtest.*" all)
+                         (string-append
+                          all "\n"
+                          "ts_skip \"setarch tests are unreliable under QEMU\"")))))
+                  (add-before 'check 'disable-lsns-test
+                    (lambda _
+                      ;; The lsns tests can fail due to ioctl(_, NS_GET_USERNS)
+                      ;; returning ENOTTY, indicating this kernel does not
+                      ;; support user namespaces.  Curiously, this test can fail
+                      ;; on i686 even if the same test passes on x86_64 on the
+                      ;; same machine.  See <https://issues.guix.gnu.org/49933>.
+                      (delete-file "tests/ts/lsns/ioctl_ns")))
                   (add-after 'install 'move-static-libraries
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib    (assoc-ref outputs "lib"))
@@ -1913,9 +1926,7 @@ providing the system administrator with some help in common tasks.")
                           ;; files so that Libtool does the right thing when both
                           ;; the shared and static library is available.
                           (substitute* (find-files "lib" "\\.la$")
-                            (("old_library=.*") "old_library=''\n")))
-
-                        #t)))
+                            (("old_library=.*") "old_library=''\n"))))))
                   (add-after 'install 'adjust-pkg-config-files
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib (assoc-ref outputs "lib")))
@@ -1923,18 +1934,14 @@ providing the system administrator with some help in common tasks.")
                         ;; the pkg-config files to avoid a cyclic reference on "out".
                         (substitute* (find-files (string-append lib "/lib/pkgconfig")
                                                  "\\.pc$")
-                          (("^(exec_)?prefix=.*") "")))
-                        #t)))))
-    (inputs `(("zlib" ,zlib)
-              ("ncurses" ,ncurses)
-
-              ;; XXX: This is so that the 'pre-check' phase can find it.
-              ,@(if (%current-target-system)
-                    `(("net-base" ,net-base))
-                    '())))
+                          (("^(exec_)?prefix=.*") ""))))))))
+    (inputs
+     (list file                         ;for libmagic
+           ncurses
+           zlib))
     (native-inputs
-     `(("perl" ,perl)
-       ("net-base" ,net-base)))         ;for tests
+     (list net-base                     ;for tests
+           perl))
     (home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
     (synopsis "Collection of utilities for the Linux kernel")
     (description "Util-linux is a diverse collection of Linux kernel
@@ -2025,8 +2032,7 @@ by Robert Shea and Robert Anton Wilson.")
        #:parallel-build? #f
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (home-page "http://users.telenet.be/geertu/Linux/fbdev/")
     (synopsis "Show and modify Linux frame buffer settings")
     (description
@@ -2071,7 +2077,7 @@ parameters.")
                                     '("^kill" "^uptime"))))
               (for-each delete-file dup)
               #t))))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://gitlab.com/procps-ng/procps/")
     (synopsis "Utilities that give information about processes")
     (description
@@ -2113,14 +2119,9 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
                              (rename-file old new)))
                          (list "bin/lsusb.py"))))))))
     (inputs
-     `(("eudev" ,eudev)
-       ("libusb" ,libusb)
-       ("python" ,python)))
+     (list eudev libusb python))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "http://www.linux-usb.org/")
     (synopsis
      "Tools for working with USB devices, such as lsusb")
@@ -2145,7 +2146,7 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
      `(("automake" ,automake)
        ("autoreconf" ,autoconf)
        ("libtool" ,libtool)))
-    (inputs `(("eudev" ,eudev)))
+    (inputs (list eudev))
     (home-page (package-home-page linux-libre))
     (synopsis "Utilities for sharing USB devices over IP networks")
     (description
@@ -2163,7 +2164,7 @@ module.")
 (define-public e2fsprogs
   (package
     (name "e2fsprogs")
-    (version "1.45.6")
+    (version "1.46.4")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2172,15 +2173,14 @@ module.")
                    "e2fsprogs-" version ".tar.xz"))
              (sha256
               (base32
-               "0mj2yizwygs7xww8jfy5mxjn8ww4pvc0b1hg1p2vsnirailsx9zz"))))
+               "04wp77fg842dhribgn0xvbd77idh0n7a839ga4bwy78v7i9l445i"))))
     (build-system gnu-build-system)
-    (inputs `(("util-linux" ,util-linux "lib")))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)       ;for the libext2fs Info manual
-
-                     ;; For tests.
-                     ("perl" ,perl)
-                     ("procps" ,procps)))
+    (inputs (list `(,util-linux "lib")))
+    (native-inputs (list pkg-config
+                         texinfo ;for the libext2fs Info manual
+                         ;; For tests.
+                         perl
+                         procps))
     (arguments
      '(;; util-linux is the preferred source for some of the libraries and
        ;; commands, so disable them (see, e.g.,
@@ -2214,8 +2214,7 @@ module.")
                 "INSTALL_SYMLINK = sh"))
              (substitute* (find-files "." "^Makefile.in$")
                (("#!/bin/sh")
-                (string-append "#!" (which "sh"))))
-             #t))
+                (string-append "#!" (which "sh"))))))
            (add-after 'install 'install-libs
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -2230,8 +2229,7 @@ module.")
                  (let ((archives (find-files lib "\\.a$")))
                    (for-each (lambda (file)
                                (chmod file #o666))
-                             archives))
-                 #t))))))
+                             archives))))))))
     (home-page "http://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
     (description
@@ -2258,7 +2256,7 @@ module.")
     (build-system trivial-build-system)
     (source #f)
     (inputs
-     `(("e2fsprogs" ,e2fsprogs/static)))
+     (list e2fsprogs/static))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -2267,8 +2265,7 @@ module.")
                       (ice-9 ftw)
                       (srfi srfi-26))
 
-         (let ((e2fsck (string-append (assoc-ref %build-inputs "e2fsprogs")
-                                      "/sbin/e2fsck"))
+         (let ((e2fsck (search-input-file %build-inputs "/sbin/e2fsck"))
                (bin    (string-append (assoc-ref %outputs "out") "/sbin")))
            (mkdir-p bin)
            (with-directory-excursion bin
@@ -2297,7 +2294,7 @@ from the e2fsprogs package.  It is meant to be used in initrds.")
          "1x0r7ylxlp9lbj3d7sqf6j2a222dwy2nfpff05jd6mkh4ihxvyd1"))
        (patches (search-patches "extundelete-e2fsprogs-1.44.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("e2fsprogs" ,e2fsprogs)))
+    (inputs (list e2fsprogs))
     (home-page "http://extundelete.sourceforge.net/")
     (synopsis "Recover deleted files from ext2/3/4 partitions")
     (description
@@ -2343,7 +2340,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
 (define-public strace
   (package
     (name "strace")
-    (version "5.8")
+    (version "5.13")
     (home-page "https://strace.io")
     (source (origin
              (method url-fetch)
@@ -2351,27 +2348,32 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
                                  "/strace-" version ".tar.xz"))
              (sha256
               (base32
-               "1abs3svkg9985f4jrxx34sj1dcpsf95vv1a0g01c777zgygncjnz"))))
+               "0mmns22bjjvakxj29si0x4dcylcgy26llpcimkb0llcxif439k2s"))
+             (patches (search-patches "strace-readlink-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/sh
            (lambda _
-             (substitute* "strace.c"
+             (substitute* "src/strace.c"
                (("/bin/sh") (which "sh")))
              #t))
          (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; XXX These hang forever even if the test time-out is extended.
              (substitute* "tests/Makefile.in"
-               (("^\tstrace-DD?D?\\.test \\\\.*") ""))
+               ;; XXX: These hang forever even if the test time-out is
+               ;; extended.
+               (("^\tstrace-DD?D?\\.test \\\\.*") "")
+               (("^\tpidns-cache.test \\\\.*") "")
+               (("^\t.*--pidns-translation.test \\\\.*") ""))
              #t)))
-       ;; Don't fail if the architecture doesn't support different personalities.
+       ;; Don't fail if the architecture doesn't support different
+       ;; personalities.
        #:configure-flags '("--enable-mpers=check")
        ;; See <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32459>.
        #:parallel-tests? #f))           ; undeterministic failures
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (synopsis "System call tracer for Linux")
     (description
      "strace is a system call tracer, i.e. a debugging tool which prints out a
@@ -2402,24 +2404,95 @@ an executed process and the signals received by that process.  It can also
 intercept and print the system calls executed by the program.")
     (license license:gpl2+)))
 
+(define-public alsa-ucm-conf
+  (package
+    (name "alsa-ucm-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "0h6kzi1cfdqyxp4pwpqh5wb89c8s9wrgix315bvamffwfxf56frc"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("ucm" "share/alsa/ucm")
+         ("ucm2" "share/alsa/ucm2"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture Use Case Manager")
+    (description
+     "This package contains Advanced Linux Sound Architecture Use Case Manager
+configuration of audio input/output names and routing for specific audio
+hardware.")
+    (license license:bsd-3)))
+
+(define-public alsa-topology-conf
+  (package
+    (name "alsa-topology-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "01zdg6q4s6d01k39z96wi4vbhrfw1i2g4yi5dijwfk6a5vjfdq2m"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("topology" "share/alsa/topology"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture libraries")
+    (description
+     "This package contains Advanced Linux Sound Architecture topology
+configuration files that can be used for specific audio hardware.")
+    (license license:bsd-3)))
+
 (define-public alsa-lib
   (package
     (name "alsa-lib")
     (version "1.2.4")
     (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
-                   version ".tar.bz2"))
-             (sha256
-              (base32
-               "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
-                                              "/lib"))))
-    (home-page "https://www.alsa-project.org/")
+                                              "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'pre-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((ucm
+                     (string-append (assoc-ref inputs "alsa-ucm-conf")))
+                    (topology
+                     (string-append (assoc-ref inputs "alsa-topology-conf")))
+                    (alsa
+                     (string-append (assoc-ref outputs "out") "/share/alsa"))
+                    (ucm-share
+                     (string-append ucm "/share/alsa/ucm"))
+                    (ucm2-share
+                     (string-append ucm "/share/alsa/ucm2"))
+                    (topology-share
+                     (string-append topology "/share/alsa/topology")))
+               (mkdir-p alsa)
+               (symlink ucm-share (string-append alsa "/ucm"))
+               (symlink ucm2-share (string-append alsa "/ucm2"))
+               (symlink topology-share (string-append alsa "/topology")))
+             #t)))))
+    (inputs
+     (list alsa-ucm-conf alsa-topology-conf))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
     (synopsis "The Advanced Linux Sound Architecture libraries")
     (description
      "The Advanced Linux Sound Architecture (ALSA) provides audio and
@@ -2467,10 +2540,7 @@ MIDI functionality to the Linux-based operating system.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("libsamplerate" ,libsamplerate)
-       ("ncurses" ,ncurses)
-       ("alsa-lib" ,alsa-lib)
-       ("xmlto" ,xmlto)))
+     (list libsamplerate ncurses alsa-lib xmlto))
     (home-page "http://www.alsa-project.org/")
     (synopsis "Utilities for the Advanced Linux Sound Architecture (ALSA)")
     (description
@@ -2532,14 +2602,14 @@ MIDI functionality to the Linux-based operating system.")
                          (find-files out ".*pulse\\.(la|so)"))
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("speex" ,speex) ; libspeexdsp resampling plugin
-       ("libsamplerate" ,libsamplerate) ; libsamplerate resampling plugin
-       ("ffmpeg" ,ffmpeg) ; libavcodec resampling plugin, a52 plugin
-       ("pulseaudio" ,pulseaudio))) ; PulseAudio plugin
+     (list alsa-lib
+           jack-1
+           speex ; libspeexdsp resampling plugin
+           libsamplerate ; libsamplerate resampling plugin
+           ffmpeg ; libavcodec resampling plugin, a52 plugin
+           pulseaudio)) ; PulseAudio plugin
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.alsa-project.org/")
     (synopsis "Plugins for the Advanced Linux Sound Architecture (ALSA)")
     (description
@@ -2567,12 +2637,9 @@ external rate conversion.")
         (base32 "1w6qx3sxzkv80shk21f63rq41c84irpx68k62m2cv629n1mwj2f1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list pkg-config flex bison))
     (inputs
-     `(("libmnl" ,libmnl)
-       ("libnftnl" ,libnftnl)))
+     (list libmnl libnftnl/fixed))
     (arguments
      '(#:tests? #f       ; no test suite
        #:configure-flags ; add $libdir to the RUNPATH of executables
@@ -2672,8 +2739,7 @@ name.")
                "0apxgmkhsk3vxn9q3libxn3dgrdljrxyy4mli2gk49m7hi3na7xp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("iptables" ,iptables)))
+     (list perl iptables))
     (synopsis "Ethernet bridge frame table administration")
     (home-page "https://ebtables.netfilter.org/")
     (description
@@ -2733,9 +2799,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
        ("iptables" ,iptables)
        ("libmnl" ,libmnl)))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list bison flex pkg-config))
     ;; For tests.
     ;; ("libmnl" ,libmnl)
     ;; ("util-linux" ,util-linux)
@@ -2831,10 +2895,10 @@ network hardware types (plipconfig, slattach) and advanced aspects of IP
 configuration (iptunnel, ipmaddr).")
       (license license:gpl2+))))
 
-(define-public libcap-2.31
+(define-public libcap
   (package
     (name "libcap")
-    (version "2.31")
+    (version "2.51")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2842,24 +2906,35 @@ configuration (iptunnel, ipmaddr).")
                    "libcap2/libcap-" version ".tar.xz"))
              (sha256
               (base32
-               "0ikwm0kngrqa4ci80lqnrkk17kg09q7dxrz28y0gm5qw3vj8s266"))))
-    (build-system gnu-build-system)
-    (arguments '(#:phases
-                 (modify-phases %standard-phases
-                   (replace 'configure
-                            ;; Add $libdir to the RUNPATH of executables.
-                            (lambda _
-                              (substitute* "Make.Rules"
-                                (("LDFLAGS := #-g")
-                                 (string-append "LDFLAGS := -Wl,-rpath="
-                                                %output "/lib")))
-                              #t)))
+               "1ych13qc1mvzv8iscbims5b317vxcmy5ffpmfy98zk7bgamz62b6"))))
+    (build-system gnu-build-system)
+    (arguments `(#:phases
+                 ,#~(modify-phases %standard-phases
+                      (replace 'configure
+                        ;; Add $libdir to the RUNPATH of executables.
+                        (lambda _
+                          (substitute* "Make.Rules"
+                            (("LDFLAGS \\?= #-g")
+                             (string-append "LDFLAGS ?= -Wl,-rpath="
+                                            ;; TODO(core-updates): Use #$output
+                                            ;; unconditionally.
+                                            #$(if (%current-target-system)
+                                                  #~#$output
+                                                  '%output)
+                                            "/lib"))))))
                  #:test-target "test"
-                 #:make-flags (list "lib=lib"
-                                    (string-append "prefix="
-                                                   (assoc-ref %outputs "out"))
-                                    "RAISE_SETFCAP=no")))
-    (native-inputs `(("perl" ,perl)))
+                 #:make-flags
+                 (list "lib=lib"
+                       (string-append "prefix=" (assoc-ref %outputs "out"))
+                       "RAISE_SETFCAP=no"
+                       ;; Tell the makefile to use TARGET-gcc and friends
+                       ;; when cross-compiling.
+                       ,@(if (%current-target-system)
+                             `(,(string-append "CROSS_COMPILE="
+                                               (%current-target-system) "-")
+                               "BUILD_CC=gcc")
+                             '()))))
+    (native-inputs (list perl))
     (supported-systems (delete "i586-gnu" %supported-systems))
     (home-page "https://sites.google.com/site/fullycapable/")
     (synopsis "Library for working with POSIX capabilities")
@@ -2870,37 +2945,6 @@ Linux-based operating systems.")
     ;; License is BSD-3 or GPLv2, at the user's choice.
     (license license:gpl2)))
 
-;; libcap 2.31 has problems with newer kernels, so provide this newer variant.
-;; Keep the old libcap around to avoid rebuilding 'coreutils' and 'avahi'.
-;; To be merged with libcap on the next rebuild cycle.
-(define-public libcap
-  (package
-    (inherit libcap-2.31)
-    (version "2.45")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://kernel.org/linux/libs/security/linux-privs/"
-                    "libcap2/libcap-" version ".tar.xz"))
-              (sha256
-               (base32
-                "11ijmi7jik9iw6pdszc6bylhggghr8cza03bcrbhbqf0cpvkjrnn"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments libcap-2.31)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'configure
-             (lambda _
-               ;; Add $libdir to the RUNPATH of executables.
-               (substitute* "Make.Rules"
-                 (("LDFLAGS \\?= #-g")
-                  (string-append "LDFLAGS ?= -Wl,-rpath="
-                                 %output "/lib")))
-               #t))))))))
-
-(define-deprecated libcap/next libcap)
-(export libcap/next)
-
 (define-public bridge-utils
   (package
     (name "bridge-utils")
@@ -2915,8 +2959,7 @@ Linux-based operating systems.")
     (build-system gnu-build-system)
 
     ;; The tarball lacks all the generated files.
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)))
+    (native-inputs (list autoconf automake))
     (arguments
      '(#:tests? #f))                    ; no 'check' target
 
@@ -2997,7 +3040,7 @@ configuration and monitoring interfaces.")
                     `(("python-2" ,python-2)))
                    ((string=? python "python3")
                     `(("python-3" ,python-3))))))
-      (propagated-inputs `(("libnl" ,libnl)))
+      (propagated-inputs (list libnl))
       (outputs '("out"))
       (arguments
        `(#:modules ((guix build gnu-build-system)
@@ -3034,8 +3077,8 @@ configuration and monitoring interfaces.")
                (base32
                 "12ddd6vh6vs97135bnlyr0szv7hvpbnmfh48584frzab0z0725ph"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libnl" ,libnl)))
+    (native-inputs (list pkg-config))
+    (inputs (list libnl))
     (arguments
      `(#:make-flags
        (let* ((target ,(%current-target-system))
@@ -3092,11 +3135,7 @@ devices.  It replaces @code{iwconfig}, which is deprecated.")
                  (("/usr/sbin/hciconfig") "hciconfig"))
                #t))))))
     (inputs
-     `(("kmod" ,kmod)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)
-       ("pciutils" ,pciutils)
-       ("zlib" ,zlib)))
+     (list kmod libnl ncurses pciutils zlib))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3126,7 +3165,10 @@ settings.")
                (base32
                 "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (arguments
+     ;; Allow compilation with GCC 10.
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
+    (inputs (list ncurses))
     (home-page "http://www.jpj.net/~trevor/aumix.html")
     (synopsis "Audio mixer for X and the console")
     (description
@@ -3156,7 +3198,7 @@ the command line or a script.")
              #t)))
        ;; There are currently no checks in the package.
        #:tests? #f))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (home-page "http://guichaz.free.fr/iotop/")
     (synopsis
      "Displays the IO activity of running processes")
@@ -3180,8 +3222,7 @@ processes currently causing I/O.")
               (patches (search-patches "fuse-overlapping-headers.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("util-linux" ,util-linux)))
+     (list bash-minimal util-linux))
     (arguments
      '(#:configure-flags (list (string-append "MOUNT_FUSE_PATH="
                                               (assoc-ref %outputs "out")
@@ -3202,11 +3243,12 @@ processes currently causing I/O.")
              ;; it refers to the right ones.
              (substitute* '("lib/mount_util.c" "util/mount_util.c")
                (("/bin/(u?)mount" _ maybe-u)
-                (string-append (assoc-ref inputs "util-linux")
-                               "/bin/" maybe-u "mount")))
-             (substitute* "util/mount.fuse.c"
-               (("/bin/sh" command)
-                (string-append (assoc-ref inputs "bash-minimal") command)))
+                (search-input-file inputs
+                                   (string-append "bin/"
+                                                  maybe-u "mount"))))
+             (substitute* '("util/mount.fuse.c")
+               (("/bin/sh")
+                (search-input-file inputs "/bin/sh")))
 
              ;; This hack leads libfuse to search for 'fusermount' in
              ;; $PATH, where it may find a setuid-root binary, instead of
@@ -3228,6 +3270,66 @@ user-space processes.")
     (license (list license:lgpl2.1                ;library
                    license:gpl2+))))              ;command-line utilities
 
+(define-public fuse-3
+  (package
+    (inherit fuse)
+    (name "fuse")
+    (version "3.10.5")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://github.com/libfuse/libfuse/releases/"
+                              "download/fuse-" version
+                              "/fuse-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0rlnnsiw614qcmgy8xz67044gqc1pbvvf2yxjv44lh27bm487qmj"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       ,#~(list
+           (string-append "-Dudevrulesdir=" #$output "/udev/rules.d")
+           "-Duseroot=false")
+       #:tests? #f
+       #:phases
+       ,#~(modify-phases %standard-phases
+            (add-after 'unpack 'set-file-names
+              (lambda* (#:key inputs #:allow-other-keys)
+                ;; libfuse calls out to mount(8) and umount(8).  Make sure
+                ;; it refers to the right ones.
+                (substitute* '("lib/mount_util.c")
+                  (("/bin/(u?)mount" _ maybe-u)
+                   (search-input-file inputs
+                                      (string-append "bin/"
+                                                     maybe-u "mount"))))
+                (substitute* '("util/mount.fuse.c")
+                  (("/bin/sh")
+                   (search-input-file inputs "/bin/sh")))
+
+                ;; This hack leads libfuse to search for 'fusermount' in
+                ;; $PATH, where it may find a setuid-root binary, instead of
+                ;; trying solely $out/sbin/fusermount and failing because
+                ;; it's not setuid.
+                (substitute* "lib/meson.build"
+                  (("-DFUSERMOUNT_DIR=[[:graph:]]+")
+                   "-DFUSERMOUNT_DIR=\"/var/empty\"'"))))
+            (add-after 'unpack 'fix-install
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* '("util/meson.build")
+                  (("install_helper.sh") "true"))
+               (substitute* '("util/meson.build")
+                  (("fuseconf_path = .*")
+                   "fuseconf_path = '/etc/fuse.conf'"))))
+            (add-before 'configure 'set-paths
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let ((dummy-init.d
+                       (string-append (getcwd) "/etc/init.d")))
+                  (setenv "MOUNT_FUSE_PATH"
+                          (string-append #$output "/sbin"))
+                  (setenv "UDEV_RULES_PATH"
+                          (string-append #$output
+                                         "/lib/udev/rules.d"))))))))))
+
 (define-public unionfs-fuse
   (package
     (name "unionfs-fuse")
@@ -3243,8 +3345,8 @@ user-space processes.")
                 "1yigh8z1q6iq6yjyq7kl7vpbpjnxjld32apvjaw2bl44pqqg56hh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("python" ,python)))
-    (inputs `(("fuse" ,fuse)))
+     (list python))
+    (inputs (list fuse))
     (arguments
      ;; The tests were never actually run ("collected 0 items"), but in recent
      ;; versions of pytest that causes an error.
@@ -3325,10 +3427,9 @@ UnionFS-FUSE additionally supports copy-on-write.")
                 "00fir2iykdx11g8nv5gijg0zjrp2g3ldypnv0yi6lq3h5pg5v13h"))))
     (build-system gnu-build-system)
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)))
+     (list fuse glib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/libfuse/sshfs")
     (synopsis "Mount remote file systems over SSH")
     (description
@@ -3355,9 +3456,8 @@ file system is as easy as logging into the server with an SSH client.")
        (sha256
         (base32 "1cy5b6qril9c3ry6fv7ir87s8iyy5vxxmbyx90dm86fbra0vjaf5"))))
     (build-system gnu-build-system)
-    (inputs `(("fuse" ,fuse)
-              ("libarchive" ,libarchive)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list fuse libarchive))
+    (native-inputs (list pkg-config))
     (home-page "https://www.cybernoia.de/software/archivemount.html")
     (synopsis "Tool for mounting archive files with FUSE")
     (description "archivemount is a FUSE-based file system for Unix variants,
@@ -3478,8 +3578,7 @@ NUMA performance on your system.")
                              `("PATH" ":" prefix (,bin))))
                          '("unicode_start" "unicode_stop"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf pkg-config))
     (inputs
      `(("bzip2" ,bzip2)
        ("gzip" ,gzip)
@@ -3552,9 +3651,7 @@ for systems using the Linux kernel.  This includes commands such as
                 "1m8avqccrhm38krlhp88a7v949f3hrzx060bbrr5dp5qw2nmw9j2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments
      `(#:configure-flags
        (list "--disable-static")))
@@ -3568,7 +3665,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
 (define-public kmod
   (package
     (name "kmod")
-    (version "27")
+    (version "29")
     (source (origin
               (method url-fetch)
               (uri
@@ -3576,16 +3673,19 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
                               "kmod-" version ".tar.xz"))
               (sha256
                (base32
-                "035wzfzjx4nwidk747p8n085mgkvy531ppn16krrajx2dkqzply1"))
+                "0am54mi5rk72g5q7k6l6f36gw3r9vwgjmyna43ywcjhqmakyx00b"))
               (patches (search-patches "kmod-module-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config
+           ;; For tests.
+           zstd))
     (inputs
      `(("xz" ,xz)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ("zstd-lib" ,zstd "lib")))
     (arguments
-     `(#:configure-flags '("--with-xz" "--with-zlib"
+     `(#:configure-flags '("--with-xz" "--with-zlib" "--with-zstd"
                            "--disable-test-modules")
        #:phases
        (modify-phases %standard-phases
@@ -3661,8 +3761,8 @@ from the module-init-tools project.")
                             (string-append "PREFIX=" prefix)
                             (string-append "SYSCONFDIR=" prefix "/etc")))
        #:test-target "test"))
-    (native-inputs `(("go" ,go)           ;for the test suite
-                     ("pandoc" ,pandoc))) ;to generate the manpage
+    (native-inputs (list go ;for the test suite
+                         pandoc)) ;to generate the manpage
     (home-page "https://github.com/rfjakob/earlyoom")
     (synopsis "Simple out of memory (OOM) daemon for the Linux kernel")
     (description "Early OOM is a minimalist out of memory (OOM) daemon that
@@ -3758,8 +3858,8 @@ to the in-kernel OOM killer.")
      ;; When linked against libblkid, eudev can populate /dev/disk/by-label
      ;; and similar; it also installs the '60-persistent-storage.rules' file,
      ;; which contains the rules to do that.
-     `(("util-linux" ,util-linux "lib")           ;for blkid
-       ("kmod" ,kmod)))
+     (list `(,util-linux "lib") ;for blkid
+           kmod))
     (outputs '("out" "static"))
     (home-page "https://wiki.gentoo.org/wiki/Project:Eudev")
     (synopsis "Userspace device management")
@@ -3821,7 +3921,7 @@ devices that can inject events directly into the input subsystem.")
                 "0wcmppa7092b33wb8vc782day5phf90pc25cn1x7rk0rlw565z36"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("boost" ,boost)
        ("libevdev" ,libevdev)
@@ -3860,8 +3960,7 @@ devices that can inject events directly into the input subsystem.")
                 "0s49vbg3j4rwh78i8rx8qr7myql09p7b3lhrjl0p7dd98xp6ann6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevdev" ,libevdev)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list libevdev yaml-cpp))
     (arguments
      `(#:make-flags (list ,(string-append "CC=" (cc-for-target))
                           ,(string-append "CXX=" (cxx-for-target))
@@ -3913,8 +4012,7 @@ one to send arbitrary keycodes when a given key is tapped or held.")
               (patches (search-patches "lvm2-static-link.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("procps" ,procps)))                       ;tests use 'pgrep'
+     (list pkg-config procps))                       ;tests use 'pgrep'
     (inputs
      `(("libaio" ,libaio)
        ("udev" ,eudev)))
@@ -4023,9 +4121,7 @@ mapper.  Kernel components are part of Linux-libre.")
      `(("automake" ,automake)
        ("autoreconf" ,autoconf)))
     (inputs
-     `(("boost" ,boost)
-       ("expat" ,expat)
-       ("libaio" ,libaio)))
+     (list boost expat libaio))
     (synopsis "Tools for manipulating the metadata of device-mapper targets")
     (description "A suite of tools for manipulating the metadata of the
 dm-thin, dm-cache and dm-era device-mapper targets.")
@@ -4158,9 +4254,8 @@ interface.")
                        (string-append "REG_BIN=" regdb
                                       "/lib/crda/regulatory.bin")
                        "all_noverify"))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("wireless-regdb" ,wireless-regdb)))
-    (inputs `(("libnl" ,libnl)))
+    (native-inputs (list pkg-config wireless-regdb))
+    (inputs (list libnl))
     (home-page
      "https://wireless.wiki.kernel.org/en/developers/Regulatory/CRDA")
     (synopsis "Central regulatory domain agent (CRDA) for WiFi")
@@ -4256,14 +4351,8 @@ country-specific regulations for the wireless spectrum.")
         (base32 "1ipf6wjx037sqyhy0r5jh4983h216anq9l68ckn2x5c3qc4wfmzn"))
        (patches (search-patches "lm-sensors-hwmon-attrs.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("rrdtool" ,rrdtool)
-              ("perl" ,perl)
-              ("kmod" ,kmod)
-              ("gnuplot" ,gnuplot)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("flex" ,flex)
-                     ("bison" ,bison)
-                     ("which" ,which)))
+    (inputs (list rrdtool perl kmod gnuplot))
+    (native-inputs (list pkg-config flex bison which))
     (outputs '("lib"                    ; avoid perl in closure
                "out"))
     (arguments
@@ -4290,27 +4379,28 @@ country-specific regulations for the wireless spectrum.")
              (substitute* '("prog/pwm/pwmconfig"
                             "prog/pwm/fancontrol")
                (("gnuplot")
-                (string-append (assoc-ref inputs "gnuplot")
-                               "/bin/gnuplot"))
+                (search-input-file inputs "/bin/gnuplot"))
                (("cat ")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cat "))
+                (string-append (search-input-file inputs "/bin/cat")
+                               " "))
                (("e?grep " match)
-                (string-append (assoc-ref inputs "grep")
-                               "/bin/" match))
+                (string-append (search-input-file inputs
+                                                  (string-append
+                                                   "/bin/"
+                                                   (string-trim-right match)))
+                               " "))
                (("sed -e")
-                (string-append (assoc-ref inputs "sed")
-                               "/bin/sed -e"))
+                (string-append (search-input-file inputs "/bin/sed")
+                               " -e"))
                (("cut -d")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/cut -d"))
+                (string-append (search-input-file inputs "/bin/cut")
+                               " -d"))
                (("sleep ")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/sleep "))
+                (string-append (search-input-file inputs "/bin/sleep")
+                               " "))
                (("readlink -f")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/readlink -f")))
-             #t)))))
+                (string-append (search-input-file inputs "/bin/readlink")
+                               " -f"))))))))
     (home-page "https://hwmon.wiki.kernel.org/lm_sensors")
     (synopsis "Utilities to read temperature/voltage/fan sensors")
     (description
@@ -4361,7 +4451,7 @@ create a firmware image suitable for the Linux kernel, and more.")
        ;; No configure script.
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://jdelvare.nerim.net/devel.html#i2ctools")
     (synopsis "I2C tools for Linux")
     (description
@@ -4386,7 +4476,7 @@ SMBus access.")
     (build-system gnu-build-system)
     (inputs `(("lm-sensors" ,lm-sensors "lib")
               ("gtk" ,gtk+-2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4817,9 +4907,9 @@ protocol in question.")
                 "0lsv46jdqvdx5hx92v0z2cz3yh6212pz9gk0k3513sbaa04zzcbw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libraw1394" ,libraw1394))) ; required by libavc1394.pc
+     (list libraw1394)) ; required by libavc1394.pc
     (home-page "https://sourceforge.net/projects/libavc1394/")
     (synopsis "AV/C protocol library for IEEE 1394")
     (description
@@ -4841,9 +4931,9 @@ the 1394 Trade Association.  AV/C stands for Audio/Video Control.")
                 "17ph458zya2l8dr2xwqnzy195qd9swrir31g78qkgb3g4xz2rq6i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libraw1394" ,libraw1394))) ; required by libiec61883.pc
+     (list libraw1394)) ; required by libiec61883.pc
     (home-page "https://ieee1394.wiki.kernel.org/index.php/Main_Page")
     (synopsis "Isochronous streaming media library for IEEE 1394")
     (description
@@ -5018,12 +5108,9 @@ arrays when needed.")
              #t))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("valgrind" ,valgrind)
-
-       ;; For tests.
-       ("cmocka" ,cmocka)))
+     (list perl pkg-config valgrind
+           ;; For tests.
+           cmocka))
     (inputs
      `(("json-c" ,json-c)
        ("libaio" ,libaio)
@@ -5136,9 +5223,9 @@ event traces from the kernel (via the relaying through the debug file system).")
                 "1liig5856crb331dps18mp0s13zbkv7yh007zqhq97m94fcddfhc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsndfile" ,libsndfile)))
+     (list libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.kernel.org/pub/linux/bluetooth/")
     (synopsis "Bluetooth subband audio codec")
     (description
@@ -5149,7 +5236,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
 (define-public bluez
   (package
     (name "bluez")
-    (version "5.55")
+    (version "5.61")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5157,7 +5244,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "124v9s4y1s7s6klx5vlmzpk1jlr4x84ch7r7scm7x2f42dqp2qw8"))))
+                "0fs2kjsdhylxniqhii63i85fjszbqbz3iddwmgz4nmbr472xdbw3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -5198,17 +5285,14 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                  (("hid2hci --method")
                   (string-append out "/lib/udev/hid2hci --method"))
                  (("/sbin/udevadm")
-                  (string-append (assoc-ref inputs "eudev") "/bin/udevadm")))
+                  (search-input-file inputs "/bin/udevadm")))
                #t))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
+       ("rst2man" ,python-docutils)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("glib" ,glib)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("libical" ,libical)
-       ("readline" ,readline)))
+     (list glib dbus eudev libical readline))
     (home-page "http://www.bluez.org/")
     (synopsis "Linux Bluetooth protocol stack")
     (description
@@ -5230,9 +5314,9 @@ is flexible, efficient and uses a modular implementation.")
                 "1lz00q8g4590mrdqmf13ba1s9zrqq645ymgm5p9y99ad0qv22r87"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://github.com/relan/exfat")
     (synopsis "Mount exFAT file systems")
     (description
@@ -5253,11 +5337,9 @@ write access to exFAT devices.")
                 "127xql52dcdhmh7s5m9xc6q39jdlj3zhbjar1j821kb6gl3jw94b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fuse" ,fuse)
-       ("glib" ,glib)
-       ("zlib" ,zlib)))
+     (list fuse glib zlib))
     (home-page "https://sourceforge.net/projects/fuseiso/")
     (synopsis "Mount ISO file system images")
     (description
@@ -5306,12 +5388,12 @@ Ridge, Joliet, and zisofs.")
                                               (assoc-ref %outputs "out")
                                               "/lib"))))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list texinfo
+           bison
+           flex
+           autoconf
+           automake
+           libtool))
     (home-page "https://www.nico.schottelius.org/software/gpm/")
     (synopsis "Mouse support for the Linux console")
     (description
@@ -5453,7 +5535,7 @@ from the btrfs-progs package.  It is meant to be used in initrds.")
                (install-file "cramfsck" (string-append out "/sbin")))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Tools to manage Cramfs file systems")
     (description "Cramfs is a Linux file system designed to be simple, small,
 and to compress things well.  It is used on a number of embedded systems and
@@ -5476,7 +5558,7 @@ blocks and random block placement.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)))
+     (list btrfs-progs))
     (arguments
      `(#:tests? #f                      ; No tests.
        #:make-flags
@@ -5520,7 +5602,8 @@ obviously it can be shared with files outside our set).")
 
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'install 'install-headers
            (lambda* (#:key outputs #:allow-other-keys)
@@ -5530,10 +5613,7 @@ obviously it can be shared with files outside our set).")
                (install-file "mkfs/f2fs_format_utils.h" out-include)
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("libuuid" ,util-linux "lib")
        ("libselinux" ,libselinux)))
@@ -5627,7 +5707,7 @@ disks and SD cards.  This package provides the userland utilities.")
              (chmod fsck #o555))
            #t))))
     (inputs
-     `(("f2fs-tools-static" ,f2fs-tools/static)))
+     (list f2fs-tools/static))
     (home-page (package-home-page f2fs-tools/static))
     (synopsis "Statically-linked fsck.f2fs command from f2fs-tools")
     (description "This package provides statically-linked fsck.f2fs command taken
@@ -5713,10 +5793,9 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
                   (string-append out directory)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libatasmart" ,libatasmart)
-       ("yaml-cpp" ,yaml-cpp)))
+     (list libatasmart yaml-cpp))
     (home-page "https://github.com/vmatare/thinkfan")
     (synopsis "Simple fan control program")
     (description
@@ -5772,7 +5851,7 @@ from userspace.")
                          (list "battery_asl" "examples" "README.md"))
                #t))))))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://github.com/teleshoes/tpacpi-bat")
     (synopsis "ThinkPad battery charge controller")
     (description
@@ -5816,7 +5895,7 @@ supported.")
                #t)))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page (package-home-page linux-libre))
     (synopsis "Monitor and test the Linux thermal subsystem in real time")
     (description
@@ -5857,7 +5936,7 @@ by hand is no trivial task: @command{tmon} aims to make it understandable.")
              #t))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libcap" ,libcap)))
+     (list libcap))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page (package-home-page linux-libre))
     (synopsis "Report x86 processor frequency and idle statistics")
@@ -5894,11 +5973,12 @@ invocations of itself.")
                              "@sbindir@"))
                           #t))))
     (build-system gnu-build-system)
-    (inputs `(("util-linux" ,util-linux) ; libuuid
-              ("fuse" ,fuse)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list util-linux ; libuuid
+                  fuse))
+    (native-inputs (list pkg-config))
     (arguments
      '(#:configure-flags (list "--disable-static"
+                               "--disable-ldconfig" ;not necessary
                                "--exec-prefix=${prefix}"
                                "--with-fuse=external" ;use our own FUSE
                                "--enable-mount-helper"
@@ -6065,7 +6145,7 @@ The following service daemons are also provided:
                             "src/raw_ethernet_send_lat.c")
                (("/usr/include/netinet/ip.h") "netinet/ip.h"))
              #t)))))
-    (inputs `(("rdma-core" ,rdma-core)))
+    (inputs (list rdma-core))
     (home-page "https://github.com/linux-rdma/perftest/")
     (synopsis "Open Fabrics Enterprise Distribution (OFED) Performance Tests")
     (description "This is a collection of tests written over uverbs intended for
@@ -6104,9 +6184,7 @@ The collection contains a set of bandwidth and latency benchmark such as:
                            "--without-pkcs11"
                            "--without-rtlsdr")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
      `(("libsysfs" ,sysfsutils)
        ("openssl" ,openssl)))
@@ -6150,7 +6228,7 @@ from that to the system kernel's @file{/dev/random} machinery.")
                             "PACKAGE_BUGREPORT=bug-guix@gnu.org"))
        #:tests? #f)) ;no tests
     (native-inputs `(("gettext" ,gettext-minimal)))
-    (inputs `(("pciutils" ,pciutils)))
+    (inputs (list pciutils))
     (home-page (package-home-page linux-libre))
     (synopsis "CPU frequency and voltage scaling tools for Linux")
     (description
@@ -6286,9 +6364,8 @@ not as a replacement for it.")
                  (("/sbin/dmsetup")
                   (string-append lvm2 "/sbin/dmsetup")))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("perl" ,perl)                   ; for pod2man
-       ("pkg-config" ,pkg-config)))
+     (list intltool perl ; for pod2man
+           pkg-config))
     (inputs
      `(("keyutils" ,keyutils)
        ("linux-pam" ,linux-pam)
@@ -6327,7 +6404,7 @@ native Linux file system, and has been part of the Linux kernel since version
                                          (assoc-ref %outputs "out")
                                          "/lib/libnfsidmap"))))
     (native-inputs
-     `(("autoconf" ,autoconf)))         ; 0.27 still needs autoheader
+     (list autoconf))         ; 0.27 still needs autoheader
     (home-page
      "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
     (synopsis "NFSv4 support library for name/ID mapping")
@@ -6427,8 +6504,7 @@ exceeded.")
     (arguments
      '(#:configure-flags '("--enable-unit-tests")))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
      `(("acl" ,acl)                     ; extended attributes (xattr)
        ("libuuid" ,util-linux "lib")
@@ -6468,8 +6544,7 @@ of flash storage.")
                       ;; run under QEMU user-mode emulation.  Just skip it.
                       (delete-file "tests/52-basic-load.tests"))))))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("which" ,which)))
+     (list gperf which))
     (synopsis "Interface to Linux's seccomp syscall filtering mechanism")
     (description "The libseccomp library provides an easy to use, platform
 independent, interface to the Linux Kernel's syscall filtering mechanism.  The
@@ -6511,10 +6586,7 @@ developers.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libpciaccess" ,libpciaccess)
-       ("libxcb" ,libxcb)
-       ("ncurses" ,ncurses)))
+     (list libdrm libpciaccess libxcb ncurses))
     (home-page "https://github.com/clbr/radeontop/")
     (synopsis "Usage monitor for AMD Radeon graphics")
     (description "RadeonTop monitors resource consumption on supported AMD
@@ -6559,9 +6631,9 @@ under OpenGL graphics workloads.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("popt" ,popt)))
+     (list popt))
     (home-page "https://github.com/rhboot/efivar")
     (synopsis "Tool and library to manipulate EFI variables")
     (description "This package provides a library and a command line
@@ -6595,10 +6667,9 @@ interface to the variable facility of UEFI boot firmware.")
                           "EFIDIR=gnu")
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efivar" ,efivar)
-       ("popt" ,popt)))
+     (list efivar popt))
     (home-page "https://github.com/rhinstaller/efibootmgr")
     (synopsis "Modify the Extensible Firmware Interface (EFI) boot manager")
     (description
@@ -6660,7 +6731,8 @@ monitoring tools for Linux.  These include @code{mpstat}, @code{iostat},
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-udev-rules-absolute-path-bins
            (lambda* (#:key inputs #:allow-other-keys)
@@ -6675,8 +6747,7 @@ monitoring tools for Linux.  These include @code{mpstat}, @code{iostat},
                 "90-backlight.rules" (string-append out "/lib/udev/rules.d"))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://haikarainen.github.io/light/")
     (synopsis "GNU/Linux application to control backlights")
     (description
@@ -6723,9 +6794,9 @@ set the screen to be pitch black at a value of 0 (or higher).
                (("/bin/") "/run/current-system/profile/bin/"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("elogind" ,elogind)))
+     (list elogind))
     (synopsis "Backlight and LED brightness control")
     (description
      "This program allows you read and control device brightness.  Devices
@@ -6750,7 +6821,7 @@ interface in sysfs, which can be accomplished with the included udev rules.")
        (sha256
         (base32 "0bnsz9bw9rj1apl80jwz39zj5mnlps3jbckihvl8bbdbrbhj6p06"))))
     (native-inputs
-     `(("shellcheck" ,shellcheck)))
+     (list shellcheck))
     (inputs
      `(("bash" ,bash)
        ("dbus" ,dbus)
@@ -6927,9 +6998,9 @@ re-use code and to avoid re-inventing the wheel.")
         (base32 "0z4khm2mnys9mcl8ckwf19cw20jgrv8650nfncy3xcgs2k2aa23m"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (home-page "https://www.netfilter.org/projects/libnftnl/index.html")
     (synopsis "Netlink programming interface to the Linux nf_tables subsystem")
     (description "Libnftnl is a userspace library providing a low-level netlink
@@ -6938,6 +7009,24 @@ libnftnl has been previously known as libnftables.  This library is currently
 used by nftables.")
     (license license:gpl2+)))
 
+;; This is used in iptables, which contributes to rust.  We're pinning this
+;; variant to avoid accidental rebuilds of rust.
+(define-public libnftnl/fixed
+  (package (inherit libnftnl)
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://netfilter.org/libnftnl/"
+                           "libnftnl-" version ".tar.bz2"))
+       (sha256
+        (base32 "1xblq1cbcxhr6qmjpy98i1qdza148idgz99vbhjc7s4vzvfizc4h"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libmnl))))
+
 (define-public nftables
   (package
     (name "nftables")
@@ -6956,13 +7045,8 @@ used by nftables.")
                  '("--disable-man-doc"  ; FIXME: needs docbook2x
                    "--disable-static"
                    "--with-cli=readline")))
-    (inputs `(("gmp" ,gmp)
-              ("libmnl" ,libmnl)
-              ("libnftnl" ,libnftnl)
-              ("readline" ,readline)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("bison" ,bison)
-                     ("flex" ,flex)))
+    (inputs (list gmp libmnl libnftnl readline))
+    (native-inputs (list pkg-config bison flex))
     (home-page "https://www.nftables.org")
     (synopsis "Userspace utility for Linux packet filtering")
     (description "nftables is the project that aims to replace the existing
@@ -7096,15 +7180,14 @@ userspace queueing component and the logging subsystem.")
                           (mkdir-p man1)
                           (copy-file "doc/proot/man.1"
                                      (string-append man1 "/proot.1"))))))))
-      (native-inputs `(("which" ,which)
-                       ;; For 'mcookie', used by some of the tests.
-                       ("util-linux" ,util-linux)
-                       ("coreutils" ,coreutils)
-                       ("pkg-config" ,pkg-config)
-                       ;; For rst2man, used to generate the manual page.
-                       ("python-docutils" ,python-docutils)))
-      (inputs `(("libarchive" ,libarchive)
-                ("talloc" ,talloc)))
+      (native-inputs (list which
+                           ;; For 'mcookie', used by some of the tests.
+                           util-linux
+                           coreutils
+                           pkg-config
+                           ;; For rst2man, used to generate the manual page.
+                           python-docutils))
+      (inputs (list libarchive talloc))
       (home-page "https://github.com/proot-me/PRoot")
       (synopsis "Unprivileged chroot, bind mount, and binfmt_misc")
       (description
@@ -7167,7 +7250,7 @@ available in the kernel Linux.")
                       ;; reset-gzip-timestamps phase does not error out.
                       (substitute* "Makefile"
                         (("-m 444") "-m 644")))))))
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "http://www.etallen.com/cpuid.html")
     (synopsis "Dump x86 CPUID processor information")
@@ -7193,11 +7276,9 @@ NexGen, Rise, and SiS CPUs.")
           "1pm68agkhrwgrplrfrnbwdcvx5lrivdmqw8pb5gdmm3xppnryji1"))))
     (build-system gnu-build-system)
     (inputs
-     `(("file" ,file)
-       ("fuse" ,fuse)
-       ("libmtp" ,libmtp)))
+     (list file fuse libmtp))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/JasonFerrara/jmtpfs")
     (synopsis "Use a FUSE file system to access data over MTP")
     (description "jmtpfs uses FUSE (file system in userspace) to provide access
@@ -7220,15 +7301,11 @@ the MTP device as a file system.")
       (base32 "00d7q0h4qjc8lg435lq77lp2fx6ikm5piq90m81mr1dqqna1g6pz"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-
-      ;; For tests.
-      ("check" ,check)
-      ("groff" ,groff)))
+    (list pkg-config
+          ;; For tests.
+          check groff))
    (inputs
-    `(("expat" ,expat)
-      ("libcap" ,libcap)
-      ("libselinux" ,libselinux)))
+    (list expat libcap libselinux))
    (synopsis "Utility to show process environment")
    (description
     "Procenv is a command-line tool that displays as much detail about
@@ -7296,6 +7373,11 @@ libraries, which are often integrated directly into libfabric.")
     (arguments
      '(#:make-flags `("PSM_USE_SYS_UUID=1" "CC=gcc" "WERROR="
                       ,(string-append "INSTALL_PREFIX=" %output)
+                      ,(string-append "CFLAGS=-Wall -fpic -fPIC -D_GNU_SOURCE"
+                                      " -funwind-tables -O3 -g3"
+                                      " -DPSM_USE_SYS_UUID"
+                                      " -Wno-strict-aliasing -DNVALGRIND"
+                                      " -fcommon")
                       ,(string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
        #:tests? #f
        #:phases (modify-phases %standard-phases
@@ -7440,10 +7522,9 @@ emulates the behaviour of Gunnar Monell's older fbgrab utility.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("linux-pam" ,linux-pam)))
+     (list linux-pam))
     (home-page "https://sourceforge.net/projects/libcg/")
     (synopsis "Control groups management tools")
     (description "Control groups is Linux kernel method for process resource
@@ -7522,8 +7603,7 @@ privileges.")
                       (invoke "make" "install")
                       #t)))))
     (inputs
-     `(("rdma-core" ,rdma-core)
-       ("numactl" ,numactl)))
+     (list rdma-core numactl))
     (synopsis "Intel Performance Scaled Messaging 2 (PSM2) library")
     (description
      "This package is low-level user-level Intel's communications interface.
@@ -7622,8 +7702,7 @@ management tools in userspace.")
     (arguments
      `(#:import-path "github.com/vishvananda/netlink"))
     (native-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-netns" ,go-netns)))
+     (list go-golang-org-x-sys go-netns))
     (home-page "https://github.com/vishvananda/netlink")
     (synopsis "Simple netlink library for Go")
     (description "The netlink package provides a simple netlink library for
@@ -7806,8 +7885,7 @@ from the xfsprogs package.  It is meant to be used in initrds.")
                     "byteswap_fix.diff"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://github.com/jeremie-koenig/genext2fs")
     (synopsis "Generate ext2 file system as a normal user")
     (description "This package provides a program to generate an ext2
@@ -7902,11 +7980,7 @@ the superuser to make device nodes.")
        ("sharutils" ,sharutils)
        ("xz" ,xz)))
     (inputs
-     `(("acl" ,acl)
-       ("libcap" ,libcap)
-       ("util-linux" ,util-linux)
-       ("sed" ,sed)
-       ("coreutils" ,coreutils)))
+     (list acl libcap util-linux sed coreutils))
     (synopsis "Run commands in an environment with fake root privileges")
     (description
      "@command{fakeroot} runs a command in an environment where it appears to
@@ -7922,34 +7996,42 @@ without using the archiver.")
     (license license:gpl3+)))
 
 (define-public fakechroot
-  (package
-    (name "fakechroot")
-    (version "2.20.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/dex4er/fakechroot/releases/download/"
-                    version "/fakechroot-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1aijkd0b45wav25v01qhw8zxwa3pl0nnp9fabmmy1nlx7hr09gas"))))
-    (build-system gnu-build-system)
-    (arguments
-     ;; XXX: The tests heavily assume they run on an FHS system so for now
-     ;; skip them.
-     '(#:tests? #f
-       #:configure-flags '("--disable-static")))
-    (synopsis "Emulate @code{chroot} by overriding file system calls")
-    (description
-     "@command{fakechroot} runs a command in an environment were is additional
+  ;; XXX: Build from the change submitted at
+  ;; <https://github.com/dex4er/fakechroot/pull/85> to allow compilation
+  ;; against glibc 2.33.  Switch back to the official repository on the next
+  ;; release.
+  (let ((commit "e7c1f3a446e594a4d0cce5f5d499c9439ce1d5c5")
+        (revision "0"))
+    (package
+      (name "fakechroot")
+      (version (git-version "2.20.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lipnitsk/fakechroot")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0gac6a6djx3nf343vd33sr5qqngz8ss3aij54zl8x9wb47pc11kb"))))
+      (build-system gnu-build-system)
+      (arguments
+       ;; XXX: The tests heavily assume they run on an FHS system so for now
+       ;; skip them.
+       '(#:tests? #f
+         #:configure-flags '("--disable-static")))
+      (native-inputs (list autoconf automake libtool perl))
+      (synopsis "Emulate @code{chroot} by overriding file system calls")
+      (description
+       "@command{fakechroot} runs a command in an environment were is additional
 possibility to use @code{chroot} command without root privileges.  This is
 useful for allowing users to create own chrooted environment with possibility
 to install another packages without need for root privileges.
 
 It works by providing @file{libfakechroot.so}, a shared library meant to be
 set as @code{LD_PRELOAD} to override the C library file system functions.")
-    (home-page "https://github.com/dex4er/fakechroot/")
-    (license license:lgpl2.1+)))
+      (home-page "https://github.com/dex4er/fakechroot/")
+      (license license:lgpl2.1+))))
 
 (define-public inputattach
   (package
@@ -7972,10 +8054,8 @@ set as @code{LD_PRELOAD} to override the C library file system functions.")
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
              (with-directory-excursion "inputattach"
-               (invoke (string-append (assoc-ref inputs "gcc")
-                                      "/bin/gcc")
-                       "-O2" "-o" "inputattach" "inputattach.c"))
-             #t))
+               (invoke "gcc" "-O2" "-o" "inputattach"
+                       "inputattach.c"))))
          (delete 'check)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
@@ -8005,22 +8085,23 @@ types and interfaces and translates so that the X server can use them.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc"))))
+                "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc"))
+              (patches (search-patches "pipewire-0.2.7-fno-common.patch"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags '("-Dsystemd=false")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libva" ,libva)
-       ("sbc" ,sbc)
-       ("sdl2" ,sdl2)))
+     (list alsa-lib
+           dbus
+           eudev
+           ffmpeg
+           gstreamer
+           gst-plugins-base
+           libva
+           sbc
+           sdl2))
     (home-page "https://pipewire.org/")
     (synopsis "Server and user space API to deal with multimedia pipelines")
     (description
@@ -8038,7 +8119,7 @@ of Linux application development.")
   (package
     (inherit pipewire)
     (name "pipewire")
-    (version "0.3.29")
+    (version "0.3.40")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8047,20 +8128,23 @@ of Linux application development.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "16jjxcnahxqfcawz77ywx837ybhwzcivn7hgqb9cmlp1y2syy8gk"))))
+                "1c6gni23l5w3ghwqnfs712kjj6l1825f0ib8a6r2xc1ymr0sx3kr"))))
     (arguments
      '(#:configure-flags
        (list (string-append "-Dudevrulesdir=" (assoc-ref %outputs "out")
                             "/lib/udev/rules.d")
-             "-Dsystemd=disabled")
+             "-Dsystemd=disabled"
+             "-Dsession-managers=[]")
        #:phases
        (modify-phases %standard-phases
          ;; Skip shrink-runpath, otherwise validate-runpath fails.
          (delete 'shrink-runpath))))
     (inputs
      (append (package-inputs pipewire)
-             `(("bluez" ,bluez)
+             `(("avahi" ,avahi)
+               ("bluez" ,bluez)
                ("jack" ,jack-2)
+               ("ldacbt" ,ldacbt)
                ("pulseaudio" ,pulseaudio)
                ("vulkan-loader" ,vulkan-loader)
                ("vulkan-headers" ,vulkan-headers))))))
@@ -8090,7 +8174,7 @@ of Linux application development.")
                (("/usr/bin/dbus-daemon") (which "dbus-daemon")))
              #t)))))
     (inputs
-     `(("dbus" ,dbus)))
+     (list dbus))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("libtool" ,libtool)
@@ -8118,11 +8202,9 @@ platforms, it is not limited to resource-constrained systems.")
                 "0l0p6y2zrd9hgd015dhafjmpcj7waz762n6wf5ws1xlwcwrwkr2l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("liburcu" ,liburcu)
-       ("numactl" ,numactl)))
+     (list liburcu numactl))
     (native-inputs
-     `(("python" ,python-3)
-       ("pkg-config", pkg-config)))
+     (list python-3 pkg-config))
     (home-page "https://lttng.org/")
     (synopsis "LTTng userspace tracer libraries")
     (description "The user space tracing library, liblttng-ust, is the LTTng
@@ -8169,12 +8251,9 @@ to ring buffers shared with a consumer daemon.")
     ;; bindings.  We don't put it in the inputs, because the rest of the tools
     ;; can work without it.
     (inputs
-     `(("liburcu" ,liburcu)
-       ("popt" ,popt)
-       ("numactl" ,numactl)))
+     (list liburcu popt numactl))
     (propagated-inputs
-     `(("kmod" ,kmod)
-       ("module-init-tools" ,module-init-tools)))
+     (list kmod module-init-tools))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("perl" ,perl)
@@ -8224,13 +8303,13 @@ line for tracing control, a @code{lttng-ctl} library for tracing control and a
              (setenv "BABELTRACE_DEV_MODE" "1")
              (setenv "BABELTRACE_MINIMAL_LOG_LEVEL" "TRACE"))))))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     ;; NOTE - elfutils is used for the LTTng debug information filter
     ;; component class.  This can be moved to `native-inputs` if
     ;; `--enable-debug-info` is replaced by `--disable-debug-info` in
     ;; `#:configure-flags`.
     (propagated-inputs
-     `(("elfutils" ,elfutils)))
+     (list elfutils))
     ;; NOTE - python-3 is set here for generating the bindings.  Users need to
     ;; install python-3 in their profile in order to use these bindings.
     (native-inputs
@@ -8266,6 +8345,11 @@ bindings, and the command-line tool @command{babeltrace2}.")
     (arguments
      ;; There are no automated tests.
      '(#:tests? #f))
+    ;; This variant of binutils is used for the 64 bit support needed to
+    ;; assemble the `purgatory/arch/i386/compat_x86_64.S' program on i686-linux.
+    (native-inputs (list (make-ld-wrapper "ld-wrapper"
+                                          #:binutils binutils-next)
+                         binutils-next))
     (home-page "https://projects.horms.net/projects/kexec/")
     (synopsis "Tools for booting directly into different kernels")
     (description "This package provides the @code{kexec} program and ancillary
@@ -8323,11 +8407,10 @@ persistent over reboots.")
          "0ilnnm4q22f8fagwp8kb37licy4ks861i2iqh2djsypqhnxvx3fv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In Requires.private of libbpf.pc.
-     `(("libelf" ,libelf)
-       ("zlib" ,zlib)))
+     (list libelf zlib))
     (arguments
      `(#:tests? #f                      ; no tests
        #:make-flags
@@ -8367,8 +8450,7 @@ headers.")
          "1367c0bzrpclvjvmk0sxgi49rh7j2f9izqk5a7g3yvawh1fmvvjh"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
      `(("clang-toolchain" ,clang-toolchain)
        ("libbpf" ,(package-source libbpf))
@@ -8415,7 +8497,7 @@ headers.")
                 (lambda (python-executable)
                   (format #t "Wrapping: ~A.~%" python-executable)
                   (wrap-program python-executable
-                    `("PYTHONPATH" ":" prefix
+                    `("GUIX_PYTHONPATH" ":" prefix
                       (,(string-append lib
                                        "/python"
                                        ,(version-major+minor
@@ -8449,14 +8531,9 @@ and above.")
        (patches (search-patches "bpftrace-disable-bfd-disasm.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("bcc" ,bcc)
-       ("clang-toolchain" ,clang-toolchain)
-       ("elfutils" ,elfutils)
-       ("libbpf" ,libbpf)
-       ("linux-libre-headers" ,linux-libre-headers)))
+     (list bcc clang-toolchain elfutils libbpf linux-libre-headers))
     (arguments
      `(#:tests? #f ;Tests require googletest sources.
        #:configure-flags
@@ -8517,9 +8594,9 @@ receiving.  It is dedicated to the PL011 UART of the Raspberry Pi.")
         (base32 "0l8pcaym6057hq3a4zwnk53p5y6xg1m3d3c83wn18h5nmnm4am8a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags '("--disable-static"
                            "--with-kmod=no")))
@@ -8593,13 +8670,10 @@ kernel side implementation.")
         (base32 "1ygaw69pfz2hfzw9cqzg9rfnjzrdbfkwsiinz6qs2h56dssjz0y9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lz4" ,lz4)
-       ("libuuid" ,util-linux "lib")))
+     (list lz4
+           `(,util-linux "lib")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/")
     (synopsis "User-space tools for the EROFS file system")
     (description
@@ -8621,10 +8695,8 @@ provides user-space tools for creating EROFS file systems.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "12ih96jwmr7imp9zyckf9zjqqm5ra1kv5fj6kbw71y6yl31069dz"))))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)))
-    (inputs `(("sqlite" ,sqlite)))
+    (native-inputs (list autoconf automake libtool))
+    (inputs (list sqlite))
     (arguments
      `(#:configure-flags
        (list "--enable-all"
@@ -8675,12 +8747,12 @@ through standard log mechanisms like syslog.")
           "--enable-bindings-cxx"
           "--enable-bindings-python")))
     (native-inputs
-      `(("automake" ,automake)
-        ("autoconf" ,autoconf)
-        ("libtool" ,libtool)
-        ("autoconf-archive" ,autoconf-archive)
-        ("pkg-config" ,pkg-config)
-        ("python" ,python-3)))
+      (list automake
+            autoconf
+            libtool
+            autoconf-archive
+            pkg-config
+            python-3))
     (synopsis "Interact with the Linux GPIO character device")
     (description
      "This package provides a C library with C++/Python bindings and
diff --git a/gnu/packages/lirc.scm b/gnu/packages/lirc.scm
index f840f49a23..11cee04edd 100644
--- a/gnu/packages/lirc.scm
+++ b/gnu/packages/lirc.scm
@@ -85,8 +85,7 @@
                (("^varimage_DATA =.*") "varimage_DATA =\n"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libxslt" ,libxslt)))
+     (list pkg-config libxslt))
     (inputs
      `(("libx11" ,libx11)
        ("libusb-compat" ,libusb-compat)
@@ -123,9 +122,9 @@ on just one button press.")
            "13s9zqyfh871ls1aha47rhmk13b4mcyfckcn2sw70bvc26832gk6"))))
       (build-system python-build-system)
       (inputs
-       `(("lirc" ,lirc)))
+       (list lirc))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (arguments
        `(#:tests? #f         ; the only tests that exist are interactive
          #:phases
diff --git a/gnu/packages/lisp-check.scm b/gnu/packages/lisp-check.scm
index a66a7ba47e..1cdd7d8300 100644
--- a/gnu/packages/lisp-check.scm
+++ b/gnu/packages/lisp-check.scm
@@ -78,11 +78,9 @@
           (base32 "1kbjwpniffdpv003igmlz5r0vy65m7wpfnhg54fhwirp1227hgg7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("optima" ,sbcl-optima)))
+       (list sbcl-alexandria sbcl-closer-mop sbcl-optima))
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (home-page "https://github.com/arclanguage/Clamp")
       (synopsis "Randomized specification-based testing for Common Lisp")
       (description
@@ -120,9 +118,9 @@ designed to embed randomized tests in whatever framework you like.")
        '(#:asd-files '("checkl.asd")
          #:tests? #f))
       (native-inputs
-       `(("sbcl-fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("sbcl-marshal" ,sbcl-marshal)))
+       (list sbcl-marshal))
       (home-page "https://github.com/rpav/CheckL/")
       (synopsis "Dynamic testing for Common Lisp")
       (description
@@ -156,11 +154,9 @@ against the last run.")
           (base32 "0f40wikcf783jx26ip0nnhwjjfjvjiw7njqsqrb6kaphc8bgw0i1"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-alexandria sbcl-closer-mop sbcl-trivia))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/Ferada/cl-mock")
       (synopsis "Mocking functions for Common Lisp testing")
       (description
@@ -315,8 +311,7 @@ that of Eos has not.  Thus, Eos is now deprecated in favor of FiveAM.")
            "1k8i2kq57201bvy3zfpsxld530hd104dgbglxigqb6i408c1a7aw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-alexandria sbcl-trivial-gray-streams))
       (synopsis "Simple and powerful test framework for Common Lisp")
       (description "A Common Lisp test framework that treasures your failures,
 logical continuation of Stefil.  It focuses on interactive debugging.")
@@ -347,9 +342,8 @@ logical continuation of Stefil.  It focuses on interactive debugging.")
        (sha256
         (base32 "04mh5plmlb15jbq3dkd8b9jl1dmbbg4hnd3k7859vpf6s12k5p4j"))))
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("net.didierverna.asdf-flv" ,sbcl-net.didierverna.asdf-flv)
-       ("trivial-backtrace" ,sbcl-trivial-backtrace)))
+     (list sbcl-alexandria sbcl-net.didierverna.asdf-flv
+           sbcl-trivial-backtrace))
     (build-system asdf-build-system/sbcl)
     (synopsis "Common Lisp testing framework")
     (description "FiveAM is a simple (as far as writing and running tests
@@ -381,9 +375,9 @@ interactive development model in mind.")
          (file-name (git-file-name "hu.dwim.stefil" version))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("asdf:cl-hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+       (list sbcl-hu.dwim.asdf))
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "http://dwim.hu/project/hu.dwim.stefil")
       (synopsis "Simple test framework")
       (description "Stefil is a simple test framework for Common Lisp,
@@ -413,7 +407,7 @@ with a focus on interactive development.")
           (base32 "10a78032vnf12kjjpfmq9ign38cad237ycyq37dwnx922nxjjaj4"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (home-page "https://github.com/foretspaisibles/cl-kaputt")
       (synopsis "Simple interactive test framework for Common Lisp")
       (description
@@ -527,10 +521,8 @@ testing.  It is an extension of the library written by Chris Riesbeck.")
            "1rsqy8y0jqll6xn9a593848f5wvd5ribv4csry1ly0hmdhfnqzlp"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-interpol" ,sbcl-cl-interpol)
-         ("iterate" ,sbcl-iterate)
-         ("symbol-munger" ,sbcl-symbol-munger)))
+       (list sbcl-alexandria sbcl-cl-interpol sbcl-iterate
+             sbcl-symbol-munger))
       (synopsis "Test Framework for Common Lisp")
       (description
        "LISP-UNIT2 is a Common Lisp library that supports unit testing in the
@@ -562,8 +554,7 @@ by Chris Riesbeck.")
         (base32 "1hf3r6pqbnd9vsd1i24qmz928kia72hdgmiafiwb6jw1hmj3r6ga"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("closer-mop" ,sbcl-closer-mop)
-        ("org-sampler" ,sbcl-org-sampler)))
+      (list sbcl-closer-mop sbcl-org-sampler))
      (home-page "https://github.com/jphmrst/cl-nst")
      (synopsis "Unit testing for Common Lisp")
      (description
@@ -595,8 +586,7 @@ by Chris Riesbeck.")
            "1mvsm3r0r6a2bg75nw0q7n9vlby3ch45qjl7hnb5k1z2n5x5lh60"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)))
+       (list sbcl-documentation-utils sbcl-form-fiddle))
       (synopsis "Extensible and cross-compatible testing framework for Common Lisp")
       (description
        "Parachute is a simple-to-use and extensible testing framework.
@@ -628,10 +618,8 @@ Each test can contain a bunch of test forms that make up its body.")
          (file-name (git-file-name "prove" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-colors" ,sbcl-cl-colors)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-ansi-text" ,sbcl-cl-ansi-text)))
+       (list sbcl-alexandria sbcl-cl-colors sbcl-cl-ppcre
+             sbcl-cl-ansi-text))
       (synopsis "Yet another unit testing framework for Common Lisp")
       (description
        "This project was originally called @command{cl-test-more}.
@@ -699,9 +687,7 @@ tester module.")
          "07ala4l2fncxf540fzxj3h5mhi9i4wqllhj0rqk8m2ljl5zbz89q"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("dissect" ,sbcl-dissect)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-bordeaux-threads sbcl-dissect sbcl-trivial-gray-streams))
     (home-page "https://github.com/fukamachi/rove")
     (synopsis
      "Yet another common lisp testing library")
@@ -761,10 +747,7 @@ This is intended to be a successor of Prove.")
           (base32 "1fqqa7lhf28qg60ji9libkylkcy747x576qpjn1y7c945j2fxmnm"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("local-time" ,sbcl-local-time)
-         ("osicat" ,sbcl-osicat)
-         ("rutils" ,sbcl-rutils)))
+       (list sbcl-cl-ppcre sbcl-local-time sbcl-osicat sbcl-rutils))
       (home-page "https://github.com/vseloved/should-test")
       (synopsis "Minimal yet feature-rich Common Lisp test framework")
       (description
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index e25d0f5488..760ac80000 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -122,7 +122,7 @@
      (file-name (git-file-name name version))))
    (build-system asdf-build-system/sbcl)
    (native-inputs
-    `(("rt" ,sbcl-rt)))
+    (list sbcl-rt))
    (synopsis "Collection of portable utilities for Common Lisp")
    (description
     "Alexandria is a collection of portable utilities.  It does not contain
@@ -154,15 +154,15 @@ portable between implementations.")
         (base32 "1z1blj05q71vzh323qwyn9p3xs7v0mq2yhwfyzza5libp37wqm3c"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("cffi" ,sbcl-cffi)
-        ("claw" ,sbcl-claw)
-        ("dissect" ,sbcl-dissect)
-        ("local-time" ,sbcl-local-time)
-        ("log4cl" ,sbcl-log4cl)
-        ("split-sequence" ,sbcl-split-sequence)
-        ("static-vectors" ,sbcl-static-vectors)
-        ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+      (list sbcl-alexandria
+            sbcl-cffi
+            sbcl-claw
+            sbcl-dissect
+            sbcl-local-time
+            sbcl-log4cl
+            sbcl-split-sequence
+            sbcl-static-vectors
+            sbcl-trivial-gray-streams))
      (home-page "https://github.com/borodust/bodge-utilities")
      (synopsis "Common Lisp utilities library for CL-BODGE")
      (description
@@ -193,7 +193,7 @@ collection.")
           (base32 "148hjikqk8v2m30mj15xh89zni6szf9z3prav580qk9dqr8djjdr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/borodust/bodge-queue")
       (synopsis "Simple queue for Common Lisp")
       (description "This Common Lisp library provides a simple FIFO
@@ -224,7 +224,7 @@ implementation with no external dependencies.")
           (base32 "1ljc8yj32lmd1d60446rzl9m0r1ar15gdzacsf6blw1kny8xlrsr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (synopsis "Common Lisp utility library")
       (description
        "This is a Common Lisp library providing various utilities.")
@@ -356,7 +356,7 @@ or cl-launch for portable processing of command-line arguments.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        ;; Tests only.
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (inputs
        `(("cl+ssl" ,sbcl-cl+ssl)
          ("flexi-streams" ,sbcl-flexi-streams)
@@ -407,7 +407,7 @@ Features:
           (base32 "1kninxwvvih9nhh7a9y8lfgi7pdr76675y1clw4ss17vz8fbim5p"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
        ;; NOTE: (Sharlatan-20210202T231437+0000): Due to the age of this library
        ;; tests use some deprecated functionality and keep failing.
@@ -438,8 +438,8 @@ timeouts.")
                (base32 "19i443fz3488v1pbbr9x24y8h8vlyhny9vj6c9jk5prm702awrp6"))
               (file-name
                (git-file-name "bordeaux-threads" version))))
-    (inputs `(("alexandria" ,sbcl-alexandria)))
-    (native-inputs `(("fiveam" ,sbcl-fiveam)))
+    (inputs (list sbcl-alexandria))
+    (native-inputs (list sbcl-fiveam))
     (build-system asdf-build-system/sbcl)
     (synopsis "Portable shared-state concurrency library for Common Lisp")
     (description "BORDEAUX-THREADS is a proposed standard for a minimal
@@ -577,7 +577,7 @@ grammar.")
         (base32 "0dwvr29diqzcg5n6jvbk2rnd90i05l7n828hhw99khmqd0kz7xsi"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-flexi-streams))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -646,7 +646,7 @@ compatible with ANSI-compliant Common Lisp implementations.")
         (base32 "1y2gq2sckspnq8118bix55p2j43dk9qn3p8a2rplp1ip2qxqbb1i"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("parse" ,sbcl-parse)))
+      (list sbcl-parse))
      (home-page "https://github.com/massung/re")
      (synopsis "Lua-style Pattern Matching for Common Lisp")
      (description
@@ -714,7 +714,7 @@ within.")
      `(#:asd-systems
        '("uax-15")))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
      `(("cl-ppcre" ,sbcl-cl-ppcre)
        ("split-sequence" ,sbcl-split-sequence)))
@@ -746,9 +746,9 @@ RFC7564.")
                 "0ykx2s9lqfl74p1px0ik3l2izd1fc9jd1b4ra68s5x34rvjy0hza"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-flexi-streams))
     (inputs
-     `(("cl-ppcre" ,sbcl-cl-ppcre)))
+     (list sbcl-cl-ppcre))
     (home-page "http://weitz.de/cl-unicode/")
     (synopsis "Portable Unicode library for Common Lisp")
     (description "CL-UNICODE is a portable Unicode library Common Lisp, which
@@ -766,8 +766,7 @@ ANSI-compliant Common Lisp implementations.")
   (package (inherit sbcl-cl-ppcre)
     (name "sbcl-cl-ppcre-unicode")
     (inputs
-     `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-cl-unicode" ,sbcl-cl-unicode)))
+     (list sbcl-cl-ppcre sbcl-cl-unicode))
     (arguments
      `(#:tests? #f ; tests fail with "Component :CL-PPCRE-TEST not found"
        #:phases
@@ -868,7 +867,7 @@ anti-aliased vectorial paths.")
        '(#:tests? #f           ; spatial-trees.test requires spatial-trees.nns
          #:test-asd-file "spatial-trees.test.asd"))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/rpav/spatial-trees")
       (synopsis "Dynamic index data structures for spatially-extended data")
       (description
@@ -931,8 +930,7 @@ a sequence (or chain) of such elements.")
           (base32 "0w6igiav35a65h6r4p1g6dw2i7mw0s06mviw31768r6z62l1ny1v"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("iterate" ,sbcl-iterate)
-         ("zpb-ttf" ,sbcl-zpb-ttf)))
+       (list sbcl-iterate sbcl-zpb-ttf))
       (home-page "https://github.com/mbattyani/cl-pdf")
       (synopsis "Common Lisp library for generating PDF files")
       (description
@@ -963,7 +961,7 @@ files.")
        (file-name (string-append "clx-" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiasco" ,sbcl-fiasco)))
+     (list sbcl-fiasco))
     (home-page "https://www.cliki.net/portable-clx")
     (synopsis "X11 client library for Common Lisp")
     (description "CLX is an X11 client library for Common Lisp.  The code was
@@ -1002,12 +1000,12 @@ from other CLXes around the net.")
              #t))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("clx" ,sbcl-clx)
-         ("zpb-ttf" ,sbcl-zpb-ttf)
-         ("cl-vectors" ,sbcl-cl-vectors)
-         ("cl-fad" ,sbcl-cl-fad)
-         ("cl-store" ,sbcl-cl-store)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-clx
+             sbcl-zpb-ttf
+             sbcl-cl-vectors
+             sbcl-cl-fad
+             sbcl-cl-store
+             sbcl-trivial-features))
       (home-page "https://github.com/l04m33/clx-truetype")
       (synopsis "Antialiased TrueType font rendering using CLX and XRender")
       (description "CLX-TrueType is pure common lisp solution for
@@ -1043,9 +1041,9 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (add-after 'create-asdf-configuration 'build-image
              (lambda* (#:key outputs #:allow-other-keys)
                (build-image (string-append
-                             (assoc-ref %outputs "image")
+                             (assoc-ref outputs "image")
                              "/bin/slynk")
-                            %outputs
+                            outputs
                             #:dependencies '("slynk"
                                              "slynk/arglists"
                                              "slynk/fancy-inspector"
@@ -1154,7 +1152,7 @@ else @code{parse-number} signals an error of type @code{invalid-number}.")
          "1lqsbhrkfl0yif46aymvb7l3nb9wdcmj4jyw485blj32jb4famzn"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (home-page "https://common-lisp.net/project/iterate/")
     (synopsis "Iteration construct for Common Lisp")
     (description "@code{iterate} is an iteration construct for Common Lisp.
@@ -1193,11 +1191,8 @@ It is similar to the @code{CL:LOOP} macro, with these distinguishing marks:
            "0k39y3c93jgxpr7gwz7w0d8yknn1fdnxrjhd03057lvk5w8js27a"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-parse-js" ,sbcl-parse-js)
-         ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-         ("sbcl-cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
-         ("sbcl-parse-number" ,sbcl-parse-number)
-         ("sbcl-iterate" ,sbcl-iterate)))
+       (list sbcl-parse-js sbcl-cl-ppcre sbcl-cl-ppcre-unicode
+             sbcl-parse-number sbcl-iterate))
       (home-page "https://github.com/mishoo/cl-uglify-js")
       (synopsis "JavaScript compressor library for Common Lisp")
       (description "This is a Common Lisp version of UglifyJS, a JavaScript
@@ -1269,8 +1264,7 @@ compressor.  It works on data produced by @code{parse-js} to generate a
          (chmod script #o755)
          #t)))
     (inputs
-     `(("sbcl" ,sbcl)
-       ("sbcl-cl-uglify-js" ,sbcl-cl-uglify-js)))
+     (list sbcl sbcl-cl-uglify-js))
     (synopsis "JavaScript compressor")))
 
 (define-public sbcl-cl-strings
@@ -1382,10 +1376,9 @@ documentation system, explicit development support, etc.")
           (base32 "0lkvv4xdpv4cv1y2bqillmabx8sdb2y4l6pbinq6mjh33w2brpvb"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("tests:cl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-trivial-features))
       (home-page "https://common-lisp.net/project/babel/")
       (synopsis "Charset encoding and decoding library")
       (description "Babel is a charset encoding and decoding library, not unlike
@@ -1449,8 +1442,7 @@ to DeRemer and Pennello, which is used by Bison and lalr.scm (not lalr.cl).")
            "1qs1bv3m0ki8l5czhsflxcryh22r9d9g9a3a3b0cr0pl954q5rld"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-bordeaux-threads sbcl-trivial-garbage))
       (synopsis "Futures promises synchronization mechanism for Common Lisp")
       (description
        "Eager Future2 is a Common Lisp library that provides composable
@@ -1542,7 +1534,7 @@ and macros, primarily for software projects written in CL by the author.")
           (base32 "0s57wvvlvshp1gcp9i9d3qcmqhswnxps3i0y7wbb0v8i1a3p46m4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("1am" ,sbcl-1am)))
+       (list sbcl-1am))
       (home-page "https://github.com/sjl/cl-pcg")
       (synopsis "Permuted congruential generators in Common Lisp")
       (description
@@ -1573,9 +1565,7 @@ pure Common Lisp.")
           (base32 "1ldpsbp3qrfzvknclsxj3sdyms1jf9ad20dvh4w0kw3zgahn2nr5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-pcg" ,sbcl-cl-pcg)
-         ("golden-utils" ,sbcl-golden-utils)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-cl-pcg sbcl-golden-utils sbcl-ironclad))
       (home-page "https://git.mfiano.net/mfiano/seedable-rng")
       (synopsis "Common Lisp random number generator")
       (description
@@ -1654,10 +1644,9 @@ several blockable channels.)")
            "08bmf3pi7n5hadpmqqkg65cxcj6kbvm997wcs1f53ml1nb79d9z8"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("jpl-queues" ,sbcl-jpl-queues)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-jpl-queues sbcl-bordeaux-threads))
       (native-inputs
-       `(("eager-future2" ,sbcl-eager-future2)))
+       (list sbcl-eager-future2))
       (synopsis "Thread-safe message-passing channels in Common Lisp")
       (description
        "Calispel is a Common Lisp library for thread-safe message-passing
@@ -1708,11 +1697,9 @@ libraries such as Bordeaux-Threads and Eager Future.")
          (file-name (git-file-name "esrap" version))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-with-current-source-form"
-          ,sbcl-trivial-with-current-source-form)))
+       (list sbcl-alexandria sbcl-trivial-with-current-source-form))
       (synopsis "Common Lisp packrat parser")
       (description
        "This is a packrat parser for Common Lisp.
@@ -1752,7 +1739,7 @@ In addition to regular Packrat / Parsing Grammar / TDPL features ESRAP supports:
        (file-name (git-file-name "split-sequence" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (synopsis "Member of the Common Lisp Utilities family of programs")
     (description
      "Splits sequence into a list of subsequences delimited by objects
@@ -1778,8 +1765,7 @@ satisfying the test.")
              version ".tgz"))
        (sha256
         (base32
-         "06mf8wn95yf5swhmzk4vp0xr4ylfl33dgfknkabbkd8n6jns8gcf"))
-       (file-name (string-append "colorize" version "-checkout"))))
+         "06mf8wn95yf5swhmzk4vp0xr4ylfl33dgfknkabbkd8n6jns8gcf"))))
     (build-system asdf-build-system/sbcl)
     (synopsis "Common Lisp library for encoding text in various web-savvy encodings")
     (description
@@ -1810,9 +1796,7 @@ satisfying the test.")
          (file-name (git-file-name "colorize" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("html-encode" ,sbcl-html-encode)))
+       (list sbcl-alexandria sbcl-split-sequence sbcl-html-encode))
       (synopsis "Common Lisp for syntax highlighting")
       (description
        "@command{colorize} is a Lisp library for syntax highlighting
@@ -1887,7 +1871,7 @@ for parsing, and grammar based on @command{peg-markdown}.")
        (file-name (string-append "cl-fad" version "-checkout"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+     (list sbcl-bordeaux-threads))
     (synopsis "Portable pathname library for Common Lisp")
     (description
      "CL-FAD (for \"Files and Directories\") is a thin layer atop Common
@@ -1921,7 +1905,7 @@ Common Lisp.")
           (base32 "0yyp9z6iwx476whz0n1rpjznjyqqhlylhzwpgg5xx92lxmskl752"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (home-page "https://github.com/cbaggers/fn")
       (synopsis "Macros for lambda brevity")
       (description
@@ -1955,7 +1939,7 @@ than the body of the lambda.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        ;; Tests only.
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis
        "Common Lisp library for accessing octet-addressed blocks of data")
       (description
@@ -1998,10 +1982,9 @@ also be supported.")
     (build-system asdf-build-system/sbcl)
     (native-inputs
      ;; Tests only.
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("flexi-streams" ,sbcl-flexi-streams)))
+     (list sbcl-bordeaux-threads sbcl-flexi-streams))
     (synopsis "Cryptographic toolkit written in Common Lisp")
     (description
      "Ironclad is a cryptography library written entirely in Common Lisp.
@@ -2063,7 +2046,7 @@ readtables, which is akin to package namespacing in Common Lisp.")
         (base32 "0i4rqz5cv7d7c2w81x5lwy05s6fbi3zikf4k5kpi3bkx3cabwdxj"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("parse-number" ,sbcl-parse-number)))
+     (list sbcl-parse-number))
     (home-page "http://common-lisp.net/project/py-configparser/")
     (synopsis "ConfigParser Python module functionality for Common Lisp")
     (description "The py-configparser package implements the ConfigParser
@@ -2096,7 +2079,7 @@ values in other options.")
          (file-name (git-file-name "pythonic-string-reader" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (home-page "https://github.com/smithzvk/pythonic-string-reader")
       (synopsis "Read table modification inspired by Python's three quote strings")
       (description "This piece of code sets up some reader macros that make it
@@ -2257,7 +2240,7 @@ project.")
        (file-name (git-file-name "anaphora" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (synopsis "The anaphoric macro collection from Hell")
     (description
      "Anaphora is the anaphoric macro collection from Hell: it includes many
@@ -2289,10 +2272,9 @@ new fiends in addition to old friends like @command{aif} and
          (file-name (git-file-name "let-plus" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)))
+       (list sbcl-alexandria sbcl-anaphora))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Destructuring extension of let*")
       (description
        "This library implements the let+ macro, which is a dectructuring
@@ -2331,8 +2313,7 @@ not counting tests)
          (file-name (git-file-name "cl-colors" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("let-plus" ,sbcl-let-plus)))
+       (list sbcl-alexandria sbcl-let-plus))
       (synopsis "Simple color library for Common Lisp")
       (description
        "This is a very simple color library for Common Lisp, providing
@@ -2372,10 +2353,9 @@ This library is no longer supported by its author.")
          (file-name (git-file-name "cl-ansi-text" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-colors2" ,sbcl-cl-colors2)))
+       (list sbcl-alexandria sbcl-cl-colors2))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "ANSI terminal color implementation for Common Lisp")
       (description
        "@command{cl-ansi-text} provides utilities which enable printing to an
@@ -2412,7 +2392,7 @@ named color.")
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests don't find "proc-parse-test", why?
        `(#:tests? #f))
@@ -2450,7 +2430,7 @@ pattern-matching-like, but a char-by-char procedural parser.")
        ;; FIXME: https://github.com/soemraws/parse-float/issues/12
        `(#:asd-systems '("parse-float" "parse-float-tests")))
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
       (home-page "https://github.com/soemraws/parse-float")
@@ -2496,7 +2476,7 @@ values from a string in Common Lisp.")
       ;; TODO: Tests are not evaluated properly.
       (native-inputs
        ;; For testing:
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (arguments
        `(#:tests? #f
          #:phases
@@ -2537,7 +2517,7 @@ utilities that make it even easier to manipulate text in Common Lisp.  It has
           (base32 "0gq2rsr0aihs0z20v4zqvmdl4szq53b52rh97pvnmwrlbn4mapmd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("ptester" ,sbcl-ptester)))
+       (list sbcl-ptester))
       (home-page "http://puri.kpe.io/")
       (synopsis "Portable URI Library")
       (description
@@ -2569,15 +2549,15 @@ Lisp programs.  It parses URI according to the RFC 2396 specification.")
            "06gw5wxcpdclb6a5i5k9lbmdlyqsp182czrm9bm1cpklzbj0ihrl"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("asdf-finalizers" ,sbcl-asdf-finalizers)
-         ("babel" ,sbcl-babel)
-         ("chipz" ,sbcl-chipz)
-         ("cl+ssl" ,sbcl-cl+ssl)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("ironclad" ,sbcl-ironclad)
-         ("salza2" ,sbcl-salza2)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-asdf-finalizers
+             sbcl-babel
+             sbcl-chipz
+             sbcl-cl+ssl
+             sbcl-flexi-streams
+             sbcl-ironclad
+             sbcl-salza2
+             sbcl-trivial-gray-streams
+             sbcl-usocket))
       (home-page "https://github.com/qitab/qmynd")
       (synopsis "QITAB MySQL Native Driver for Common Lisp")
       (description "QMyND, the QITAB MySQL Native Driver, is a MySQL client
@@ -2646,7 +2626,7 @@ non-consing thread safe queues and fibonacci priority queues.")
           (base32 "0k2f1771wd9kdrcasldy1r00k5bdgi9fd07in52zmjggc0i7dd80"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/3b/glsl-packing/")
       (synopsis "Common Lisp utilities to calculate OpenGL layouts")
       (description
@@ -2708,9 +2688,7 @@ from GLSL as data.")
           (base32 "0bhxxnv7ldkkb18zdxyz2rj2a3iawzq2kcp7cn5i91iby7n0082x"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("glsl-symbols" ,sbcl-glsl-spec)))
+       (list sbcl-alexandria sbcl-documentation-utils sbcl-glsl-spec))
       (home-page "https://github.com/cbaggers/rtg-math")
       (synopsis "Common Lisp library of game-related math functions")
       (description
@@ -2741,16 +2719,16 @@ for making realtime graphics in Lisp.")
           (base32 "1p9x1wj576x5d31yvls9r1avkjkyhri7kyxbjfkg9z93a1w18j9z"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("fn" ,sbcl-fn)
-         ("glsl-spec" ,sbcl-glsl-spec)
-         ("named-readtables" ,sbcl-named-readtables)
-         ("parse-float" ,sbcl-parse-float)
-         ("vas-string-metrics" ,sbcl-vas-string-metrics)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-cl-ppcre
+             sbcl-documentation-utils
+             sbcl-fn
+             sbcl-glsl-spec
+             sbcl-named-readtables
+             sbcl-parse-float
+             sbcl-vas-string-metrics))
       (home-page "https://github.com/cbaggers/varjo")
       (synopsis "Lisp to GLSL Language Translator")
       (description
@@ -2851,8 +2829,7 @@ package.")
          (file-name (git-file-name "cffi-c-ref" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)))
+       (list sbcl-alexandria sbcl-cffi))
       (synopsis "Streamlined access to foreign memory")
       (description
        "This Common Lisp library provides macros to access foreign memory.")
@@ -2980,9 +2957,7 @@ Redis data structure store.")
            "0c22lqarrpbq82dg1sb3y6mp6w2faczp34ymzhnmff88yfq1xzsf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("anaphora" ,sbcl-anaphora)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-ppcre sbcl-anaphora sbcl-named-readtables))
       (home-page "https://common-lisp.net/project/parenscript/")
       (synopsis "Translator from a subset of Common Lisp to JavaScript")
       (description
@@ -3040,7 +3015,7 @@ JavaScript.
            "0fx3m3x3s5ji950yzpazz4s0img3l6b3d6l3jrfjv0lr702496lh"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/hankhero/cl-json")
       (synopsis "JSON encoder and decoder for Common-Lisp")
       (description
@@ -3106,7 +3081,7 @@ precisely controls the behavior of the parser via Common Lisp restarts.")
         (base32 "0122jicfg7pca1wxw8zak1n92h5friqy60988ns0ysksj3fphw9n"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (home-page "https://common-lisp.net/project/trivial-garbage/")
     (synopsis "Portable GC-related APIs for Common Lisp")
     (description "@command{trivial-garbage} provides a portable API to
@@ -3165,7 +3140,7 @@ Lisp implementations.")
            "04vix0gmqsj91lm975sx7jhlnz5gq1xf9jp873mp7c8frc5dk1jj"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("bordeaux-threads" ,sbcl-bordeaux-threads)
          ("cairo" ,cairo)
@@ -3408,7 +3383,7 @@ Lisp, featuring:
       (arguments
        '(#:asd-systems '("markup")))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-str" ,sbcl-cl-str)
@@ -3533,7 +3508,7 @@ Lisp (from GBBopen project).")
          "0x746wr2324l6bn7skqzgkzcbj5kd0zp2ck0c8rldrw0rzabg826"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("rt" ,sbcl-rt)))
+     (list sbcl-rt))
     (inputs
      `(("bordeaux-threads" ,sbcl-bordeaux-threads)
        ("split-sequence" ,sbcl-split-sequence)))
@@ -3616,7 +3591,7 @@ This XML parser implementation has the following limitations:
          "02z7k163d51v0pzk8mn1xb6h5s6x64gjqkslhwm3a5x26k2gfs11"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("s-xml" ,sbcl-s-xml)))
+     (list sbcl-s-xml))
     (home-page "https://common-lisp.net/project/s-xml-rpc/")
     (synopsis "Implementation of XML-RPC in Common Lisp for both client and server")
     (description
@@ -3675,9 +3650,9 @@ client and server.")
            "0apkgqrscylw3hhm5x2vs0z3hz6h7zd7dl5y3wr2zl8qjpvpc80k"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("xclip" ,xclip)))
+       (list xclip))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -3715,7 +3690,7 @@ client and server.")
         (base32 "1mbaqiwj5034iw6jzw30jyhwzp1pvhnz1zcy0lns0z5j2h9ldapw"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("sbcl-lift" ,sbcl-lift)))
+      (list sbcl-lift))
      (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -3805,7 +3780,7 @@ RFC 1321 by R. Rivest, published April 1992.")
   (package
     (inherit (sbcl-package->ecl-package sbcl-md5))
     (inputs
-     `(("flexi-streams" ,ecl-flexi-streams)))))
+     (list ecl-flexi-streams))))
 
 (define-public sbcl-cl+ssl
   (let ((commit "701e645081e6533a3f0f0b3ac86389d6f506c4b5")
@@ -3833,14 +3808,14 @@ RFC 1321 by R. Rivest, published April 1992.")
                   (string-append
                    (assoc-ref inputs "openssl") "/lib/" all))))))))
       (inputs
-       `(("openssl" ,openssl)
-         ("sbcl-cffi" ,sbcl-cffi)
-         ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-         ("sbcl-bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("sbcl-trivial-garbage" ,sbcl-trivial-garbage)
-         ("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-trivial-features" ,sbcl-trivial-features)))
+       (list openssl
+             sbcl-cffi
+             sbcl-trivial-gray-streams
+             sbcl-flexi-streams
+             sbcl-bordeaux-threads
+             sbcl-trivial-garbage
+             sbcl-alexandria
+             sbcl-trivial-features))
       (home-page "https://common-lisp.net/project/cl-plus-ssl/")
       (synopsis "Common Lisp bindings to OpenSSL")
       (description
@@ -3873,7 +3848,7 @@ Development into CL+SSL was done by David Lichteblau.")
           (base32 "06gx04mah5nc8w78s0j8628divbf1s5w7af8w7pvzb2d5mgvrbd2"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (home-page "http://files.kpe.io/kmrcl/")
       (synopsis "General utilities for Common Lisp programs")
       (description
@@ -3904,8 +3879,7 @@ Rosenberg's Common Lisp packages.")
           (base32 "12jj54h0fs6n237cvnp8v6hn0imfksammq22ys6pi0gwz2w47rbj"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs                    ; For tests.
-       `(("sbcl-ptester" ,sbcl-ptester)
-         ("sbcl-kmrcl" ,sbcl-kmrcl)))
+       (list sbcl-ptester sbcl-kmrcl))
       (home-page "http://files.kpe.io/cl-base64/")
       (synopsis
        "Common Lisp package to encode and decode base64 with URI support")
@@ -3937,7 +3911,7 @@ encoding table that uses only URI-compatible characters.")
         (base32 "0jzn3nyb3f22gm983rfk99smqs3mhb9ivjmasvhq9qla5cl9pyhd"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-trivial-gray-streams))
     (home-page "https://edicl.github.io/chunga/")
     (synopsis "Portable chunked streams for Common Lisp")
     (description
@@ -3970,7 +3944,7 @@ defined in RFC 2616.")
            "0sc8nji9q1df04lhsiwsjy1a35996bibl31w5hp5sh8q6sa122dy"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "https://edicl.github.io/cl-who/")
       (synopsis "Yet another Lisp markup language")
       (description
@@ -4005,7 +3979,7 @@ as good or bad as the next one.")
            "0plx4rs39zbs4gjk77h4a2q11zpy75fh9v8hnxrvsf8fnakajhwg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "http://method-combination.net/lisp/chipz/")
       (synopsis
        "Common Lisp library for decompressing deflate, zlib, gzip, and bzip2
@@ -4040,16 +4014,16 @@ the format used by the popular compression tool bzip2.")
          "1wf2zivfvhsh6zvd6wcwfd67bm8s8a1p2fismszc8xb819dqk9yl"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("sbcl-puri" ,sbcl-puri)
-       ("sbcl-cl-base64" ,sbcl-cl-base64)
-       ("sbcl-chunga" ,sbcl-chunga)
-       ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-       ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-chipz" ,sbcl-chipz)
-       ("sbcl-usocket" ,sbcl-usocket)
-       ("sbcl-cl+ssl" ,sbcl-cl+ssl)))
+     (list sbcl-puri
+           sbcl-cl-base64
+           sbcl-chunga
+           sbcl-flexi-streams
+           sbcl-cl-ppcre
+           sbcl-chipz
+           sbcl-usocket
+           sbcl-cl+ssl))
     (native-inputs
-     `(("sbcl-fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://edicl.github.io/drakma/")
     (synopsis "HTTP client written in Common Lisp")
     (description
@@ -4079,19 +4053,18 @@ sockets, SSL, continuable uploads, file uploads, cookies, and more.")
         (base32 "1z0m45lp6rv59g69l44gj3q3d2bmjlhqzpii0vgkniam21dcimy9"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("sbcl-cl-who" ,sbcl-cl-who)
-       ("sbcl-drakma" ,sbcl-drakma)))
+     (list sbcl-cl-who sbcl-drakma))
     (inputs
-     `(("sbcl-chunga" ,sbcl-chunga)
-       ("sbcl-cl-base64" ,sbcl-cl-base64)
-       ("sbcl-cl-fad" ,sbcl-cl-fad)
-       ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-flexi-streams" ,sbcl-flexi-streams)
-       ("sbcl-cl+ssl" ,sbcl-cl+ssl)
-       ("sbcl-md5" ,sbcl-md5)
-       ("sbcl-rfc2388" ,sbcl-rfc2388)
-       ("sbcl-trivial-backtrace" ,sbcl-trivial-backtrace)
-       ("sbcl-usocket" ,sbcl-usocket)))
+     (list sbcl-chunga
+           sbcl-cl-base64
+           sbcl-cl-fad
+           sbcl-cl-ppcre
+           sbcl-flexi-streams
+           sbcl-cl+ssl
+           sbcl-md5
+           sbcl-rfc2388
+           sbcl-trivial-backtrace
+           sbcl-usocket))
     (home-page "https://edicl.github.io/hunchentoot/")
     (synopsis "Web server written in Common Lisp")
     (description
@@ -4155,7 +4128,7 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
           (base32 "1wq1gs9jjd5m6iwrv06c2d7i5dvqsfjcljgbspfbc93cg5xahk4n"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/m2ym/cl-annot")
       (synopsis "Python-like Annotation Syntax for Common Lisp.")
       (description
@@ -4294,11 +4267,9 @@ addition, removal, and random selection.")
      ;; "quri">.
      '(#:asd-systems '("quri-test"
                        "quri")))
-    (native-inputs `(("sbcl-prove" ,sbcl-prove)))
-    (inputs `(("sbcl-babel" ,sbcl-babel)
-              ("sbcl-split-sequence" ,sbcl-split-sequence)
-              ("sbcl-cl-utilities" ,sbcl-cl-utilities)
-              ("sbcl-alexandria" ,sbcl-alexandria)))
+    (native-inputs (list sbcl-prove))
+    (inputs (list sbcl-babel sbcl-split-sequence sbcl-cl-utilities
+                  sbcl-alexandria))
     (home-page "https://github.com/fukamachi/quri")
     (synopsis "Yet another URI library for Common Lisp")
     (description
@@ -4333,11 +4304,9 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; by #<SYSTEM "myway">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-        ("sbcl-quri" ,sbcl-quri)
-        ("sbcl-map-set" ,sbcl-map-set)))
+      (list sbcl-cl-ppcre sbcl-quri sbcl-map-set))
      (home-page "https://github.com/fukamachi/myway")
      (synopsis "Sinatra-compatible URL routing library for Common Lisp")
      (description "My Way is a Sinatra-compatible URL routing library.")
@@ -4370,7 +4339,7 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; required by #<SYSTEM "xsubseq">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (home-page "https://github.com/fukamachi/xsubseq")
      (synopsis "Efficient way to use \"subseq\"s in Common Lisp")
      (description
@@ -4405,10 +4374,9 @@ effieiently.")
        ;; found, required by #<SYSTEM "smart-buffer">. Why?
        `(#:tests? #f))
       (native-inputs
-       `(("sbcl-prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("sbcl-xsubseq" ,sbcl-xsubseq)
-         ("sbcl-flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-xsubseq sbcl-flexi-streams))
       (home-page "https://github.com/fukamachi/smart-buffer")
       (synopsis "Smart octets buffer")
       (description
@@ -4446,11 +4414,8 @@ depending on content size.")
        `(("sbcl-prove" ,sbcl-prove)
          ("cl-syntax" ,sbcl-cl-syntax)))
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-proc-parse" ,sbcl-proc-parse)
-         ("sbcl-xsubseq" ,sbcl-xsubseq)
-         ("sbcl-smart-buffer" ,sbcl-smart-buffer)
-         ("sbcl-cl-utilities" ,sbcl-cl-utilities)))
+       (list sbcl-alexandria sbcl-proc-parse sbcl-xsubseq
+             sbcl-smart-buffer sbcl-cl-utilities))
       (home-page "https://github.com/fukamachi/fast-http")
       (synopsis "HTTP request/response parser for Common Lisp")
       (description
@@ -4479,10 +4444,9 @@ Lisp.")
        (sha256
         (base32 "079qa20lhanzsz1qf4iags91n0ziylbjgbcymm5a5qj7yryas4fw"))))
     (native-inputs
-     `(("sbcl-fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("sbcl-alexandria" ,sbcl-alexandria)
-       ("sbcl-cffi" ,sbcl-cffi)))
+     (list sbcl-alexandria sbcl-cffi))
     (build-system asdf-build-system/sbcl)
     (home-page "https://github.com/sionescu/static-vectors")
     (synopsis "Allocate SIMPLE-ARRAYs in static memory")
@@ -4550,12 +4514,9 @@ Only minimal changes required to make your CLOS objects serializable.")
       '(#:tests? #f
         #:asd-files '("fast-io.asd")))
      (native-inputs
-      `(("sbcl-fiveam" ,sbcl-fiveam)
-        ("sbcl-checkl" ,sbcl-checkl)))
+      (list sbcl-fiveam sbcl-checkl))
      (inputs
-      `(("sbcl-alexandria" ,sbcl-alexandria)
-        ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)
-        ("sbcl-static-vectors" ,sbcl-static-vectors)))
+      (list sbcl-alexandria sbcl-trivial-gray-streams sbcl-static-vectors))
      (home-page "https://github.com/rpav/fast-io")
      (synopsis "Fast octet-vector/stream I/O for Common Lisp")
      (description
@@ -4591,12 +4552,9 @@ streams (though primarily the former, while wrapping the latter).")
       ;; required by #<SYSTEM "jonathan">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-        ("sbcl-fast-io" ,sbcl-fast-io)
-        ("sbcl-proc-parse" ,sbcl-proc-parse)
-        ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)))
+      (list sbcl-cl-syntax sbcl-fast-io sbcl-proc-parse sbcl-cl-ppcre))
      (home-page "https://rudolph-miller.github.io/jonathan/overview.html")
      (synopsis "JSON encoder and decoder")
      (description
@@ -4632,11 +4590,9 @@ CCL.")
       ;; found, required by #<SYSTEM "http-body">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove" ,sbcl-prove)))
+      (list sbcl-prove))
      (inputs
-      `(("sbcl-fast-http" ,sbcl-fast-http)
-        ("sbcl-jonathan" ,sbcl-jonathan)
-        ("sbcl-quri" ,sbcl-quri)))
+      (list sbcl-fast-http sbcl-jonathan sbcl-quri))
      (home-page "https://github.com/fukamachi/http-body")
      (synopsis "HTTP POST data parser")
      (description
@@ -4672,8 +4628,7 @@ multipart/form-data.")
       ;; tests aren't working for some reason.
       `(#:tests? #f))
      (inputs
-      `(("sbcl-fast-io" ,sbcl-fast-io)
-        ("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+      (list sbcl-fast-io sbcl-trivial-gray-streams))
      (home-page "https://github.com/fukamachi/circular-streams")
      (synopsis "Circularly readable streams for Common Lisp")
      (description
@@ -4705,7 +4660,7 @@ reset to 0 and you're able to read it again.")
           (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("circular-streams" ,sbcl-circular-streams)
          ("http-body" ,sbcl-http-body)
@@ -4756,7 +4711,7 @@ performance and simplicity in mind.")
         (base32 "0wld28xx20k0ysgg6akic5lg4vkjd0iyhv86m388xfrv8xh87wii"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+      (list sbcl-hu.dwim.stefil))
      (home-page "https://common-lisp.net/project/local-time/")
      (synopsis "Time manipulation library for Common Lisp")
      (description
@@ -4786,11 +4741,9 @@ Long Painful History of Time\".")
         (base32 "0rzrl9is2v1aqbm0sym0qx3blnpd0bl13dkkmll6mb3983k2mkax"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("lisp-unit" ,sbcl-lisp-unit)))
+     (list sbcl-lisp-unit))
     (inputs
-     `(("cl-interpol" ,sbcl-cl-interpol)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("local-time" ,sbcl-local-time)))
+     (list sbcl-cl-interpol sbcl-cl-ppcre sbcl-local-time))
     (home-page "https://github.com/chaitanyagupta/chronicity")
     (synopsis "Natural language date and time parser for Common Lisp")
     (description
@@ -4821,9 +4774,9 @@ by Ruby's @code{Chronic}.")
           (base32 "00kcm17q5plpzdj1qwg83ldhxksilgpcdkf3m9azxcdr968xs9di"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("sbcl-cl-fad" ,sbcl-cl-fad)))
+       (list sbcl-cl-fad))
       (home-page "https://shinmera.github.io/trivial-mimes/")
       (synopsis "Tiny Common Lisp library to detect mime types in files")
       (description
@@ -4880,13 +4833,10 @@ mime-type of a file.")
                  fasl-files)
                #t)))))
       (native-inputs
-       `(("sbcl-prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-         ("sbcl-myway" ,sbcl-myway)
-         ("sbcl-lack" ,sbcl-lack)
-         ("sbcl-alexandria" ,sbcl-alexandria)
-         ("sbcl-babel" ,sbcl-babel)))
+       (list sbcl-cl-syntax sbcl-myway sbcl-lack sbcl-alexandria
+             sbcl-babel))
       (home-page "https://8arrow.org/ningle/")
       (synopsis "Super micro framework for Common Lisp")
       (description
@@ -5038,9 +4988,9 @@ theory accurate to internal-time-units-per-second.")
           (base32 "0166d9aip366pbpdk5gsi2f6xad6q61lssxgbrypa8zslwjn8736"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-bordeaux-threads))
       (home-page "https://github.com/7max/log4cl")
       (synopsis "Common Lisp logging framework, modeled after Log4J")
       (description
@@ -5130,11 +5080,8 @@ by either a symbol or a keyword.")
           (base32 "0r51ydj5v7afi2jrlscbhxprv13d9vzg5316g1yzwaxc1kzsdsw6"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("dissect" ,sbcl-dissect)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("local-time" ,sbcl-local-time)
-         ("piping" ,sbcl-piping)))
+       (list sbcl-bordeaux-threads sbcl-dissect sbcl-documentation-utils
+             sbcl-local-time sbcl-piping))
       (home-page "https://shinmera.github.io/verbose/")
       (synopsis "Logging framework using the piping library")
       (description
@@ -5167,9 +5114,9 @@ by either a symbol or a keyword.")
           (base32
            "0d6dzbb45jh0rx90wgs6v020k2xa87mvzas3mvfzvivjvqqlpryq"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("sbcl-usocket" ,sbcl-usocket)))
+       (list sbcl-usocket))
       (synopsis "Find open ports programmatically in Common Lisp")
       (description "This is a small Common Lisp library that finds an open
 port within a range.")
@@ -5200,14 +5147,14 @@ port within a range.")
          (modules '((guix build utils)))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (inputs
-       `(("sbcl-trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-trivial-garbage))
       (propagated-inputs
        ;; This package doesn't do anything without python available
-       `(("python" ,python)
-         ;; For multi-dimensional array support
-         ("python-numpy" ,python-numpy)))
+       (list python
+             ;; For multi-dimensional array support
+             python-numpy))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -5258,7 +5205,7 @@ the CFFI approach used by burgled-batteries, but has the same goal.")
           (base32 "0q9b07spmhg1b576cnnacvkf7zr3mab2rdydfylbn92y9mms9vyj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-arguments" ,sbcl-trivial-arguments)))
+       (list sbcl-trivial-arguments))
       (synopsis "Scheme style syntax/macros/functions for Common Lisp")
       (description
        "Schemeish implements several useful Scheme constructs for Common Lisp.
@@ -5356,9 +5303,7 @@ high-level way.  This library provides such operators.")
                   ""))
                #t)))))
       (native-inputs
-       `(("sbcl-cl-fad" ,sbcl-cl-fad)
-         ("sbcl-lift" ,sbcl-lift)
-         ("sbcl-cl-quickcheck" ,sbcl-cl-quickcheck)))
+       (list sbcl-cl-fad sbcl-lift sbcl-cl-quickcheck))
       (inputs
        `(("python" ,python)
          ("sbcl-cffi" ,sbcl-cffi)
@@ -5396,7 +5341,7 @@ CPython implementation of Python) and Common Lisp.")
            "0hd0kr91795v77akpbcyqiss9p0p7ypa9dznrllincnmgvsxlmf0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("sbcl-lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Macro that generalizes @code{multiple-value-bind} etc.")
       (description
        "Bind extends the idea of of let and destructing to provide a uniform
@@ -5436,7 +5381,7 @@ whole lot more into a single form.")
       (arguments
        `(#:test-asd-file "test/fare-utils-test.asd"))
       (native-inputs
-       `(("sbcl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (synopsis "Collection of utilities and data structures")
       (description
        "fare-utils is a small collection of utilities.  It contains a lot of
@@ -5469,8 +5414,7 @@ basic everyday functions and macros.")
            "0maxs8392953fhnaa6zwnm2mdbhxjxipp4g4rvypm06ixr6pyv1c"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("close-mop" ,sbcl-closer-mop)
-         ("fare-utils" ,sbcl-fare-utils)))
+       (list sbcl-closer-mop sbcl-fare-utils))
       (home-page "https://github.com/fare/fare-mop")
       (synopsis "General purpose Common Lisp utilities using the MOP")
       (description
@@ -5504,13 +5448,10 @@ great for REPL interaction and debugging.")
           (base32 "02qx37zzk5j4xmwh77k2qa2wvnzvaj6qml5dh2q7b6b1ljvgcj4m"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (inputs
-       `(("alexandira" ,sbcl-alexandria)
-         ("fare-mop" ,sbcl-fare-mop)
-         ("fare-quasiquote" ,sbcl-fare-quasiquote)
-         ("fare-utils" ,sbcl-fare-utils)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-alexandria sbcl-fare-mop sbcl-fare-quasiquote
+             sbcl-fare-utils sbcl-trivia))
       (home-page "https://github.com/fare/inferior-shell")
       (synopsis "Spawn local or remote processes and shell pipes")
       (description
@@ -5579,7 +5520,7 @@ UTF-8 has is that it doesn't depend on any other libraries.")
         (base32
          "00nbr3mffxhlq14gg9d16pa6691s4qh35inyw76v906s77khm5a2"))))
     (inputs
-     `(("split-sequence" ,sbcl-split-sequence)))
+     (list sbcl-split-sequence))
     (synopsis "IDNA string encoding and decoding routines for Common Lisp")
     (description "This Common Lisp library provides string encoding and
 decoding routines for IDNA, the International Domain Names in Applications.")
@@ -5608,9 +5549,9 @@ decoding routines for IDNA, the International Domain Names in Applications.")
         (base32
          "1hw1v1lw26rifyznpnj1csphha9jgzwpiic16ni3pvs6hcsni9rz"))))
     (inputs
-     `(("trivial-features" ,sbcl-trivial-features)))
+     (list sbcl-trivial-features))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (synopsis "Efficient endianness conversion for Common Lisp")
     (description "This Common Lisp library provides optimized byte-swapping
 primitives.  The library can change endianness of unsigned integers of length
@@ -5682,8 +5623,8 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
       (inherit parent)
       (propagated-inputs
        ;; Need header to compile.
-       `(("libfixposix" ,libfixposix)
-         ,@(package-propagated-inputs parent))))))
+       (modify-inputs (package-propagated-inputs parent)
+         (prepend libfixposix))))))
 
 (define-public ecl-iolib
   (sbcl-package->ecl-package sbcl-iolib))
@@ -5707,7 +5648,7 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
           (base32
            "1xyj49j9x3lc84cv3dhbf9ja34ywjk1c46dklx425fxw9mkwm83m"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "IEEE 754 binary representation for floats in Common Lisp")
       (description "This is a Common Lisp library that converts
 floating point values to IEEE 754 binary representation.")
@@ -5764,9 +5705,7 @@ Closure is a reference to the web browser it was originally written for.")
            "13kif7rf3gqdycsk9zq0d7y0g9y81krkl0z87k0p2fkbjfgrph37"))))
       (build-system asdf-build-system/sbcl)
     (inputs
-     `(("closure-common" ,sbcl-closure-common)
-       ("puri" ,sbcl-puri)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-closure-common sbcl-puri sbcl-trivial-gray-streams))
     (synopsis "Common Lisp XML parser")
     (description "CXML implements a namespace-aware, validating XML 1.0
 parser as well as the DOM Level 2 Core interfaces.  Two parser interfaces are
@@ -5798,11 +5737,8 @@ offered, one SAX-like, the other similar to StAX.")
            "1rld038hmvm0whaffkszd5ks7mg44z1vfbgddal434df8sgspzql"))))
       (build-system asdf-build-system/sbcl)
     (inputs
-     `(("cxml" ,sbcl-cxml)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("yacc" ,sbcl-cl-yacc)
-       ("parse-number" ,sbcl-parse-number)
-       ("cl-base64" ,sbcl-cl-base64)))
+     (list sbcl-cxml sbcl-cl-ppcre sbcl-cl-yacc sbcl-parse-number
+           sbcl-cl-base64))
     (synopsis "Relax NG for Closure XML (CXML)")
     (description "An implementation of Relax NG schema validation written in
 Common Lisp, including support for compact syntax, DTD Compatibility, and the
@@ -5879,7 +5815,7 @@ cookie headers, cookie creation, cookie jar creation and more.")
          ("cl-ppcre" ,sbcl-cl-ppcre)
          ("local-time" ,sbcl-local-time)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests fail because cl-cookie depends on cl-cookie-test.
        `(#:tests? #f))
@@ -5985,7 +5921,7 @@ neat APIs and connection-pooling.  It is meant to supersede Drakma.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "lisp-namespace.test.asd"
         ;; XXX: Component LISP-NAMESPACE-ASD::LISP-NAMESPACE.TEST not found
@@ -6053,7 +5989,7 @@ and it exports symbols from implementation-specific packages.")
           (base32
            "1i305n0wfmpac63ni4i3vixnnkl8daw5ncxy0k3dv92krgx6qzhp"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp environment introspection portability layer")
       (description "This library is a small interface to portable but
 nonstandard introspection of Common Lisp environments.  It is intended to
@@ -6104,7 +6040,7 @@ can and/or provide reasonable defaults.")
          ("introspect-environment" ,sbcl-introspect-environment)
          ("trivia.trivial" ,sbcl-trivia.trivial)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "type-i.test.asd"))
       (synopsis "Type inference utility on unary predicates for Common Lisp")
@@ -6145,7 +6081,7 @@ the return type of a function.")
        `(("alexandria" ,sbcl-alexandria)
          ("closer-mop" ,sbcl-closer-mop)))
       (native-inputs
-       `(("eos" ,sbcl-eos)))
+       (list sbcl-eos))
       (arguments
        ;; XXX: Circular dependencies: tests depend on optima.ppcre which depends on optima.
        `(#:tests? #f
@@ -6359,7 +6295,7 @@ various string metrics in Common Lisp:
        ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
        ("cl-change-case" ,sbcl-cl-change-case)))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (arguments
      `(#:asd-systems '("str")
        #:test-asd-file "str.test.asd"))
@@ -6397,8 +6333,7 @@ arrows.")
           (base32
            "0w4rqvrgdgk3fwfq3kx4r7wwdr2bv3b6n3bdqwsiriw9psqzpz2s"))))
       (inputs
-       `(("cxml" ,sbcl-cxml)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cxml sbcl-cl-ppcre))
       (synopsis "Concise, regexp-like pattern matching on streaming XML for Common Lisp")
       (description "CXML does an excellent job at parsing XML elements, but what
 do you do when you have a XML file that's larger than you want to fit in
@@ -6436,14 +6371,14 @@ power of CXML is available when necessary.")
            "0fw2q866yddbf23nk9pxphm9gsasx35vjyss82xzvndnjmzlqfl5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("babel" ,sbcl-babel)
-         ("iolib" ,sbcl-iolib)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("cl-xmlspam" ,sbcl-cl-xmlspam)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-alexandria
+             sbcl-trivial-garbage
+             sbcl-babel
+             sbcl-iolib
+             sbcl-ieee-floats
+             sbcl-flexi-streams
+             sbcl-cl-xmlspam
+             sbcl-ironclad))
       (synopsis "D-Bus client library for Common Lisp")
       (description "This is a Common Lisp library that publishes D-Bus
 objects as well as send and notify other objects connected to a bus.")
@@ -6474,12 +6409,10 @@ objects as well as send and notify other objects connected to a bus.")
           (base32
            "0bg3l0a28lw5gqqjp6p6b5nhwqk46sgkb7184w5qbfngw1hk8x9y"))))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("let-plus" ,sbcl-let-plus)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("closer-mop" ,sbcl-closer-mop)))
+       (list sbcl-alexandria sbcl-let-plus sbcl-trivial-garbage
+             sbcl-closer-mop))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Hooks extension point mechanism (as in Emacs) for Common Lisp")
       (description "A hook, in the present context, is a certain kind of
 extension point in a program that allows interleaving the execution of
@@ -6575,8 +6508,7 @@ extension-points via the concept of hooks.")
           (base32
            "1fh8r7kf8s3hvqdg6b71b8p7w3v2kkga9bw8j3qqdxhzr6anpm0b"))))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-bordeaux-threads sbcl-usocket))
       (synopsis "Common Lisp abstraction layer over platform dependent functionality")
       (description "@code{s-sysdeps} is an abstraction layer over platform
 dependent functionality.  This simple package is used as a building block in a
@@ -6617,10 +6549,9 @@ number of other open source projects.
           (base32
            "050h6hwv8f16b5v6fzba8zmih92hgaaq27i2x9wv1iib41gbia3r"))))
       (inputs
-       `(("s-sysdeps" ,sbcl-s-sysdeps)
-         ("s-xml" ,sbcl-s-xml)))
+       (list sbcl-s-sysdeps sbcl-s-xml))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Implementation of object prevalence for Common Lisp")
       (description "This Common Lisp library implements object prevalence (see
 @url{https://en.wikipedia.org/wiki/System_prevalence}).  It allows
@@ -6727,7 +6658,7 @@ discontiguous ranges of time.")
            "0xpa86pdzlnf4v5g64j3ifaplx71sx2ha8b7vvakswi652679ma0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (synopsis "Core of the metatilities Common Lisp library")
       (description
        "Metatilities-base is the core of the metatilities Common Lisp library
@@ -6759,7 +6690,7 @@ which implements a set of utilities.")
            "18s6jfq11n8nv9k4biz32pm1s7y9zl054ry1gmdbcf39nisy377y"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (inputs
        `(("metatilities-base" ,sbcl-metatilities-base)))
       (arguments
@@ -6810,7 +6741,7 @@ decisions becomes significantly easier.")
           (base32 "103mry04j2k9vznsxm7wcvccgxkil92cdrv52miwcmxl8daa4jiz"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("xlunit" ,sbcl-xlunit)))
+       (list sbcl-xlunit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-containers" ,sbcl-cl-containers)
@@ -6896,8 +6827,7 @@ system.")
           (base32 "18ig7rvxcra69437g0i8sxyv7c5dg26jqnx1rc2f9pxmihdprgk8"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-alexandria sbcl-fiveam))
       (synopsis "Binary search tree for Common Lisp")
       (description
        "BST is a Common Lisp library for working with binary search trees that
@@ -6926,9 +6856,9 @@ can contain any kind of values.")
         (base32 "1hffh98bv4w5yrchagzwqrc43d2p473pvw7ka4kyyvhrr52dk2f8"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-trivial-gray-streams))
     (synopsis "In-memory octet streams for Common Lisp")
     (description
      "CL-octet-streams is a library implementing in-memory octet
@@ -6960,7 +6890,7 @@ cl-plumbing libraries.")
           (base32 "09lp7li35h4jkls0448fj1sh6pjslr1w7ranbc4szjr8g0c2bdry"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("cl-octet-streams" ,sbcl-cl-octet-streams)
@@ -6973,7 +6903,7 @@ cl-plumbing libraries.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/lzlib.lisp"
                  (("liblz\\.so")
-                  (string-append (assoc-ref inputs "lzlib") "/lib/liblz.so")))
+                  (search-input-file inputs "/lib/liblz.so")))
                #t)))))
       (synopsis "Common Lisp library for lzip (de)compression")
       (description
@@ -7006,9 +6936,9 @@ compression/decompression using bindings to the lzlib C library.")
            "0b1cf6c12qx5cy1fw2z42jgh566rp3l8nv5qf0qqc569s7bgmrh4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-bordeaux-threads))
       (synopsis "Portable channel-based concurrency for Common Lisp")
       (description "Common Lisp library for channel-based concurrency.  In
 a nutshell, you create various threads sequentially executing tasks you need
@@ -7041,7 +6971,7 @@ threads.")
            "194srkg8nrym19c6i7zbnkzshc1qhqa82m53qnkirz9fw928bqxr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Common Lisp library to serialize data")
       (description
        "CL-STORE is a portable serialization package which should give you the
@@ -7072,10 +7002,9 @@ ability to store all Common Lisp data types into streams.")
           (base32 "0r0bgb46q4gy72l78s7djkxq8ibb4bb3yh9brsry5lih7br8lhi0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("introspect-environment" ,sbcl-introspect-environment)))
+       (list sbcl-alexandria sbcl-introspect-environment))
       (home-page "https://github.com/markcox80/specialization-store")
       (synopsis "Different type of generic function for Common Lisp")
       (description
@@ -7120,7 +7049,7 @@ function.")
          ("glib" ,glib)
          ("gobject-introspection" ,gobject-introspection)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -7128,11 +7057,10 @@ function.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/init.lisp"
                  (("libgobject-2\\.0\\.so")
-                  (string-append (assoc-ref inputs "glib") "/lib/libgobject-2.0.so"))
+                  (search-input-file inputs "/lib/libgobject-2.0.so"))
                  (("libgirepository-1\\.0\\.so")
-                  (string-append (assoc-ref inputs "gobject-introspection")
-                                 "/lib/libgirepository-1.0.so")))
-               #t)))))
+                  (search-input-file inputs
+                                     "/lib/libgirepository-1.0.so"))))))))
       (synopsis "Common Lisp bindings to GObject Introspection")
       (description
        "This library is a bridge between Common Lisp and GObject
@@ -7168,7 +7096,7 @@ of C+GObject libraries without the need of writing dedicated bindings.")
        `(#:asd-files '("cl-slug-test.asd" "cl-slug.asd")
          #:asd-systems '("cl-slug-test" "cl-slug")))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("ppcre" ,sbcl-cl-ppcre)))
       (home-page "https://github.com/EuAndreh/cl-slug")
@@ -7298,7 +7226,7 @@ special variables, especially in the presence of threads.")
            "17pp86c9zs4y7i1sh7q9gbfw9iqv6655k7fz8qbj9ly1ypgxp4qs"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Size of a file in bytes in Common Lisp")
       (description
        "The canonical way to determine the size of a file in bytes, using Common Lisp,
@@ -7336,7 +7264,7 @@ size of a file in bytes, using system calls when possible.")
            "191hnn4b5j4i3crydmlzbm231kj0h7l8zj6mzj69r1npbzkas4bd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Portable macroexpand-all for Common Lisp")
       (description
        "This library provides a macroexpand-all function that calls the
@@ -7463,7 +7391,7 @@ supplement, not a competitor, to Alexandria.")
            "042k9vkssrqx9nhp14wdzm942zgdxvp35mba0p2syz98i75im2yy"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (synopsis "Clojure-like arrow macros for Common Lisp")
       (description
        "This library implements the @code{->} and @code{->>} macros from
@@ -7494,9 +7422,9 @@ Clojure, as well as several expansions on the idea.")
           (base32 "0gvbpyff4siifp3cp86cpr9ksmakn66fx21f3h0hpn647zl07nj7"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("chanl" ,sbcl-chanl)))
+       (list sbcl-chanl))
       (synopsis "Common Lisp library to evaluate some forms in parallel")
       (description "This is a simple Common Lisp library to evaluate some
 forms in parallel.")
@@ -7523,7 +7451,7 @@ forms in parallel.")
          "163hb07p2nxz126rpq3cj5dyala24n0by5i5786n2qcr1w0bak4i"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("xlunit" ,sbcl-xlunit)))
+     (list sbcl-xlunit))
     (arguments
      `(#:test-asd-file "cl-heap-tests.asd"))
     (synopsis "Heap and priority queue data structures for Common Lisp")
@@ -7558,8 +7486,7 @@ binary heap and a Fibonacci heap) as well as an efficient priority queue.")
            "0rv9bl8xrad5wfcg5zs1dazvnpmvqz6297lbn8bywsrcfnlf7h98"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-alexandria sbcl-named-readtables))
       (synopsis "Reader macros for partial application and composition")
       (description
        "This Common Lisp library provides reader macros for concise expression
@@ -7589,8 +7516,7 @@ of function partial application and composition.")
          "0479rbjgbj80jpk5bby18inlv1kfp771a82rlcq5psrz65qqa9bj"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-alexandria sbcl-trivial-gray-streams))
     (synopsis "Common Lisp JSON parser/encoder")
     (description
      "YASON is a Common Lisp library for encoding and decoding data in the
@@ -7623,7 +7549,7 @@ JSON interchange format.")
            "1qpij4xh8bqwc2myahpilcbh916v7vg0acz2fij14d3y0jm02h0g"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-heap" ,sbcl-cl-heap)
@@ -7701,7 +7627,7 @@ results.")
            "098qhkqskmmrh4wix34mawf7p5c87yql28r51r75yjxj577k5idq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-trivial-indent))
       (synopsis "Few simple tools to document Common Lisp libraries")
       (description
        "This is a small library to help you with managing the Common Lisp
@@ -7733,7 +7659,7 @@ docstrings for your library.")
            "0pn45c9rbxlnhn5nvhqz6kyv0nlirwxpg4j27niwdq80yxzsn51f"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://github.com/sirherrbatka/documentation-utils-extensions")
       (synopsis "Set of extensions for documentation-utils")
       (description
@@ -7773,7 +7699,7 @@ for more information.")
            "041iznc9mpfyrl0sv5893ys9pbb2pvbn9g3clarqi7gsfj483jln"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (synopsis "Utilities to destructure Common Lisp lambda forms")
       (description
        "Often times we need to destructure a form definition in a Common Lisp
@@ -7806,9 +7732,9 @@ macro.  This library provides a set of simple utilities to help with that.")
            "0zhwfbpr53vs1ii4sx75dz2k9yhh1xpwdqqpg8nmfndxkmhpbi3x"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (synopsis "Tiny collection of array and vector utilities for Common Lisp")
       (description
        "A miniature toolkit that contains some useful shifting/popping/pushing
@@ -7841,8 +7767,7 @@ functions for arrays and vectors.  Originally from Plump.")
            "1w4wz7f6dc2ckdq9wq9r5014bg2nxjifj9yz1zzn41r8h1h5xfcd"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-array-utils sbcl-documentation-utils))
       (synopsis "Lenient XML / XHTML / HTML parser for Common Lisp")
       (description
        "Plump is a parser for HTML/XML-like documents, focusing on being
@@ -7893,7 +7818,7 @@ your own classes.")
          ("trivial-garbage" ,sbcl-trivial-garbage)
          ("trivial-utf-8" ,sbcl-trivial-utf-8)))
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (arguments
        '(#:asd-systems '("antik-base"
                          "foreign-array")
@@ -7954,7 +7879,7 @@ computer known.")
            "0z5nypfk26hxihb08p085644afawicrgb4xvadh3lmrn46qbjfn4"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("antik-base" ,sbcl-antik-base)
@@ -8040,10 +7965,9 @@ intending to program in Lisp.")
            "1kr00zf62m7la7rxa2m5w49r9cyzamc106hvjcc8ffmi7a4jw490"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-unicode" ,sbcl-cl-unicode)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-unicode sbcl-named-readtables))
       (native-inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (synopsis "String interpolation for Common Lisp")
       (description
        "CL-INTERPOL is a library for Common Lisp which modifies the
@@ -8127,7 +8051,7 @@ and camel-case rules.")
          ("cl-interpol" ,sbcl-cl-interpol)
          ("iterate" ,sbcl-iterate)))
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (synopsis "Common lisp library for comma-separated values")
       (description
        "This is a Common Lisp library providing functions to read/write CSV
@@ -8159,9 +8083,9 @@ from/to strings, streams and files.")
            "0vww1x3yilb3bjwg6k184vaj4vxyxw4vralhnlm6lk4xac67kc9z"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-trivial-features))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp library for running external programs")
       (description
        "EXTERNAL-PROGRAM enables running programs outside the Lisp
@@ -8194,7 +8118,7 @@ sacrificing much in the way of power.")
         (base32 "0mr47l57m276dbpap7irr4fcnk5fgknhf6mgv4043s8h73amk5qh"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("cl-fad" ,sbcl-cl-fad)))
+      (list sbcl-cl-fad))
      (inputs
       `(("alexandria" ,sbcl-alexandria)
         ("antik" ,sbcl-antik)
@@ -8215,8 +8139,7 @@ sacrificing much in the way of power.")
             (lambda* (#:key inputs #:allow-other-keys)
               (substitute* "hdf-cffi/hdf-cffi.lisp"
                 (("/usr/lib/i386-linux-gnu/hdf5/serial/libhdf5.so")
-                 (string-append (assoc-ref inputs "hdf5")
-                                "/lib/libhdf5.so")))
+                 (search-input-file inputs "/lib/libhdf5.so")))
               (substitute* "gsl-cffi/gsl-cffi.lisp"
                 (("define-foreign-library gsl-cffi" all)
                  (string-append all " (:unix "
@@ -8251,8 +8174,7 @@ visualization.")
                   "0pvsc9fmybx7rxd0kmzq4shi6hszdpwdc1sfy7jwyfxf8n3hnv4p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-cl-fad sbcl-trivial-gray-streams))
       (synopsis "Common Lisp library for tar and cpio archives")
       (description
        "This is a Common Lisp library to read and write disk-based file
@@ -8350,9 +8272,7 @@ for Common Lisp.")
                      #t))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("misc-extensions" ,sbcl-misc-extensions)
-         ("mt19937" ,sbcl-mt19937)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-misc-extensions sbcl-mt19937 sbcl-named-readtables))
       (synopsis "Functional set-theoretic collections library")
       (description
        "FSet is a functional set-theoretic collections library for Common Lisp.
@@ -8391,10 +8311,9 @@ may contain sets, maps may be keyed by sets, etc.")
            "1zf8zvb0i6jm3hhfks4w74hibm6avgc6f9s1qwgjrn2bcik8lrvz"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)))
+       (list sbcl-alexandria sbcl-closer-mop))
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Delimited continuations for Common Lisp")
       (description
        "This is a library that implements delimited continuations by
@@ -8429,7 +8348,7 @@ transforming Common Lisp code to continuation passing style.")
        `(("alexandria" ,sbcl-alexandria)
          ("cl-cont" ,sbcl-cl-cont)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        `(;; TODO: Fix the tests. They fail with:
          ;; "Component CL-COROUTINE-ASD::CL-COROUTINE-TEST not found"
@@ -8546,9 +8465,7 @@ has a small codebase that's easy to understand and use.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "lib.lisp"
                  (("/usr/lib/libuv.so")
-                  (string-append (assoc-ref inputs "libuv")
-                                 "/lib/libuv.so")))
-               #t))
+                  (search-input-file inputs "/lib/libuv.so")))))
            (add-after 'fix-paths 'fix-system-definition
              (lambda _
                (substitute* "cl-libuv.asd"
@@ -8606,12 +8523,9 @@ has a small codebase that's easy to understand and use.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/ssl/package.lisp"
                  (("libcrypto\\.so")
-                  (string-append (assoc-ref inputs "openssl")
-                                 "/lib/libcrypto.so"))
+                  (search-input-file inputs "/lib/libcrypto.so"))
                  (("libssl\\.so")
-                  (string-append (assoc-ref inputs "openssl")
-                                 "/lib/libssl.so")))
-               #t)))))
+                  (search-input-file inputs "/lib/libssl.so"))))))))
       (synopsis "Asynchronous operations for Common Lisp")
       (description
        "Cl-async is a library for general purpose, non-blocking programming in
@@ -8643,10 +8557,9 @@ Common Lisp.  It uses the libuv library as backend.")
            "0xfds5yaya64arzr7w1x38karyz11swzbhxx1afldpradj9dh19c"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("vom" ,sbcl-vom)))
+       (list sbcl-vom))
       (native-inputs
-       `(("cl-async" ,sbcl-cl-async)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-cl-async sbcl-fiveam))
       (synopsis "Promise implementation for Common Lisp")
       (description
        "This is a standalone promise implementation for Common Lisp.  It is
@@ -8678,10 +8591,9 @@ the successor to the now-deprecated cl-async-future project.")
            "0z0sc7qlzzxk99f4l26zp6rai9kv0kj0f599sxai5s44p17zbbvh"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("blackbird" ,sbcl-blackbird)))
+       (list sbcl-blackbird))
       (native-inputs
-       `(("cl-async" ,sbcl-cl-async)
-         ("eos" ,sbcl-eos)))
+       (list sbcl-cl-async sbcl-eos))
       (synopsis "Futures implementation for Common Lisp")
       (description
        "This is futures implementation for Common Lisp.  It plugs in nicely
@@ -8716,7 +8628,7 @@ to cl-async.")
        `(("cl-async-future" ,sbcl-cl-async-future)
          ("cl-cont" ,sbcl-cl-cont)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        `(;; TODO: Fix the tests. They fail with:
          ;; "The function BLACKBIRD::PROMISE-VALUES is undefined"
@@ -8760,7 +8672,7 @@ possible.")
           (base32 "17jrng8jb05d64ggyd11hp308c2fl5drvf9g175blgrkkl8l4mf8"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       (list sbcl-lisp-unit))
       (synopsis "Common Lisp library for base32 encoding and decoding")
       (description
        "This package provides functions for base32 encoding and decoding as
@@ -8791,8 +8703,7 @@ defined in RFC4648.")
           (base32 "0r27pidjaxbm7k1rr90nnajwl5xm2kp65g1fv0fva17lzy45z1mp"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cl-octet-streams" ,sbcl-cl-octet-streams)
-         ("fiveam" ,sbcl-fiveam)))
+       (list sbcl-cl-octet-streams sbcl-fiveam))
       (synopsis "Common Lisp library for Z85 encoding and decoding")
       (description
        "This package provides functions to encode or decode byte vectors or
@@ -8822,8 +8733,7 @@ ZeroMQ.")
         (base32 "13l2q4mskzilya9xh5wy2xvy30lwn104bd8wrq6ifds56r82iy3x"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("tk" ,tk)))
+     (list imagemagick tk))
     (arguments
      `(#:asd-systems '("ltk"
                        "ltk-mw"
@@ -8879,7 +8789,7 @@ in pure Common Lisp and does not require any Tk knowledge for its usage.")
           (base32 "1kg50f76bfpfxcv4dfivq1n9a0xlsra2ajb0vd68lxwgbidgyc2y"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (synopsis "Common Lisp macros for generating lexical analyzers")
       (description
        "This is a Common Lisp library providing a set of macros for generating
@@ -8911,10 +8821,9 @@ be used with @code{cl-yacc}.")
           (base32 "0hlyf4h5chkjdp9armla5w4kw5acikk159sym7y8c4jbjp9x47ih"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("clunit2" ,sbcl-clunit2)))
+       (list sbcl-clunit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (synopsis "Color library for Common Lisp")
       (description
        "This is a very simple color library for Common Lisp, providing:
@@ -9105,11 +9014,9 @@ ones.")
         (base32 "1p48lxdibnps5rpyh5cmnk0vc77bmmxb32qdzfz93zadr8wwas10"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("chipz" ,sbcl-chipz)
-       ("flexi-streams" ,sbcl-flexi-streams)
-       ("parachute" ,sbcl-parachute)))
+     (list sbcl-chipz sbcl-flexi-streams sbcl-parachute))
     (inputs
-     `(("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-trivial-gray-streams))
     (synopsis "Common Lisp library for zlib, deflate and gzip compression")
     (description
      "Salza2 is a Common Lisp library for creating compressed data in the zlib,
@@ -9141,10 +9048,9 @@ respectively.")
           (base32 "1n9aszaif3yh8prs5r8v51fbj4r5jd1a048mivd5yij3hplkm82b"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("golden-utils" ,sbcl-golden-utils)
-         ("specialization-store" ,sbcl-specialization-store)))
+       (list sbcl-golden-utils sbcl-specialization-store))
       (home-page "https://git.mfiano.net/mfiano/origin")
       (synopsis "Common Lisp graphics math library")
       (description
@@ -9175,9 +9081,7 @@ performance and correctness.")
           (base32 "0vyczbcwskrygrf1hgrsnk0jil8skmvf1kiaalw5jps4fjrfdkw0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("babel" ,sbcl-babel)
-         ("chipz" ,sbcl-chipz)
-         ("iterate" ,sbcl-iterate)))
+       (list sbcl-babel sbcl-chipz sbcl-iterate))
       (synopsis "PNG decoder for Common Lisp")
       (description "This is a Common Lisp library for reading PNG images.")
       (home-page "https://github.com/Ramarren/png-read")
@@ -9246,7 +9150,7 @@ read/write Bit Map Font (BMF) into text, JSON and XML.")
         (base32 "0b3ag3jhl3z7kdls3ahdsdxsfhhw5qrizk769984f4wkxhb69rcm"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("salza2" ,sbcl-salza2)))
+     (list sbcl-salza2))
     (synopsis "PNG encoder for Common Lisp")
     (description "This is a Common Lisp library for creating PNG images.")
     (home-page "https://www.xach.com/lisp/zpng/")
@@ -9273,9 +9177,9 @@ read/write Bit Map Font (BMF) into text, JSON and XML.")
         (base32 "1l5k131dchbf6cj8a8xqa731790p01p3qa1kdy2wa9dawy3ymkxr"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("lisp-unit" ,sbcl-lisp-unit)))
+     (list sbcl-lisp-unit))
     (inputs
-     `(("zpng" ,sbcl-zpng)))
+     (list sbcl-zpng))
     (synopsis "QR code encoder for Common Lisp")
     (description
      "This Common Lisp library provides function to make QR codes and to save
@@ -9318,7 +9222,7 @@ them as PNG files.")
        `(("cffi" ,sbcl-cffi)
          ("hdf5" ,hdf5-1.10)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "hdf5-cffi.test.asd"
          ;; Tests depend on hdf5-cffi.examples.asd in addition to hdf5-cffi.asd,
@@ -9507,7 +9411,7 @@ the elements in compound type specifier, e.g. @code{dimensions} in
        `(("trivia" ,sbcl-trivia)
          ("alexandria" ,sbcl-alexandria)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:test-asd-file "type-r.test.asd")))))
 
@@ -9547,7 +9451,7 @@ correctly.")
          ("introspect-environment" ,sbcl-introspect-environment)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-systems '("trivialib.type-unify")
          #:test-asd-file "trivialib.type-unify.test.asd")))))
@@ -9575,9 +9479,9 @@ correctly.")
           (base32 "0nhqamn3qgg38i6aw2pshffdwr2hzslycg8ficmn333gw0h9rf4g"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("ptester" ,sbcl-ptester)))
+       (list sbcl-ptester))
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (home-page "https://common-lisp.net/project/cl-unification/")
       (synopsis "Unification framework for Common Lisp")
       (description
@@ -9632,7 +9536,7 @@ code.  The main target of this macro is speed.")
          ("trivial-cltl2" ,sbcl-trivial-cltl2)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("specialized-function.asd")
          #:test-asd-file "specialized-function.test.asd")))))
@@ -9672,7 +9576,7 @@ additional form that is considered as a candidate for a constant.")
          ("iterate" ,sbcl-iterate)
          ("lisp-namespace" ,sbcl-lisp-namespace)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("constantfold.asd")
          #:test-asd-file "constantfold.test.asd")))))
@@ -9713,7 +9617,7 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
          ("iterate" ,sbcl-iterate)
          ("type-r" ,sbcl-type-r)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("gtype.asd")
          #:test-asd-file "gtype.test.asd")))))
@@ -9753,7 +9657,7 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
          ;; bigger than the default one. Disable them for now.
          #:tests? #f))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-randist" ,sbcl-cl-randist)
@@ -9840,8 +9744,7 @@ lightweight messaging kernel.")
           (base32 "0la4dbcda78x29szanylccrsljqrn9d1mhh569sqkyp44ni5fv91"))
          (file-name (git-file-name name version))))
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("plump" ,sbcl-plump)))
+       (list sbcl-array-utils sbcl-plump))
       (build-system asdf-build-system/sbcl)
       (synopsis "DOM tree searching engine based on CSS selectors")
       (description "CLSS is a DOM traversal engine based on CSS
@@ -9872,12 +9775,9 @@ selectors.  It makes use of the Plump-DOM and is used by lQuery.")
           (base32 "0520mcpxc2d6fdm8z61arpgd2z38kan7cf06qs373n5r64rakz6w"))
          (file-name (git-file-name name version))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("plump" ,sbcl-plump)
-         ("clss" ,sbcl-clss)))
+       (list sbcl-array-utils sbcl-form-fiddle sbcl-plump sbcl-clss))
       (build-system asdf-build-system/sbcl)
       (synopsis "Library to allow jQuery-like HTML/DOM manipulation")
       (description "@code{lQuery} is a DOM manipulation library written in
@@ -9912,7 +9812,7 @@ approach to templating.")
           (base32 "0dg5ynx2ww94d0qfwrdrm7plkn43h64hs4iiq9mj2s1s4ixnp3lr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("mariadb-lib" ,mariadb "lib")))
@@ -9955,7 +9855,7 @@ approach to templating.")
         (base32 "137jci4hn4vlxf48y39k0di27kc89kvxy3brmn3vl9xq56sy6mhz"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
      `(("alexandria" ,sbcl-alexandria)
        ("bordeaux-threads" ,sbcl-bordeaux-threads)
@@ -10278,10 +10178,7 @@ interfaces as well as a functional and an object oriented interface.")
     (native-inputs
      `(("rt" ,cl-rt)))
     (inputs
-     `(("mysql" ,mysql)
-       ("postgresql" ,postgresql)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list mysql postgresql sqlite zlib))
     (propagated-inputs
      `(("cffi" ,cl-cffi)
        ("md5" ,cl-md5)
@@ -10324,8 +10221,7 @@ interfaces as well as a functional and an object oriented interface.")
           (base32 "00bv1aj89q5vldmq92zp2364jq312zjq2mbd3iyz1s2b4widzhl7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (synopsis "Purely functional data structure library in Common Lisp")
       (description
        "Sycamore is a fast, purely functional data structure library in Common Lisp.
@@ -10466,10 +10362,9 @@ multiple checkers, including Aspell and Hunspell.")
           (base32 "0qmk341zzcsbf8sq0w9ix3r080zg4ri6vzxym63lhdjfzwz3y8if"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)))
+       (list sbcl-cl-ppcre sbcl-cl-ppcre-unicode))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert Common Lisp strings between camelCase, PascalCase and more")
       (description
@@ -10540,10 +10435,8 @@ tie modules together in functionality, hook into each other and so on.")
           (base32 "12kjvin8hxidwkzfb7inqv5b6g5qzcssnj9wc497v2ixc56fqdz7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("closer-mop" ,sbcl-closer-mop)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("modularize" ,sbcl-modularize)
-         ("trivial-arguments" ,sbcl-trivial-arguments)))
+       (list sbcl-closer-mop sbcl-lambda-fiddle sbcl-modularize
+             sbcl-trivial-arguments))
       (home-page "https://shinmera.github.io/modularize-hooks/")
       (synopsis "Generic hooks and triggers extension for Modularize")
       (description
@@ -10574,10 +10467,8 @@ define and trigger hooks, which other modules can hook on to.")
           (base32 "0bjf4wy39cwf75m7vh0r7mmcchs09yz2lrbyap98hnq8blq70fhc"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("modularize" ,sbcl-modularize)
-         ("trivial-arguments" ,sbcl-trivial-arguments)
-         ("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-lambda-fiddle sbcl-modularize sbcl-trivial-arguments
+             sbcl-trivial-indent))
       (home-page "https://shinmera.github.io/modularize-interfaces/")
       (synopsis "Programmatical interfaces extension for Modularize")
       (description
@@ -10611,7 +10502,7 @@ compliance control.")
       (inputs
        `(("closer-mop" ,sbcl-closer-mop)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -10647,11 +10538,9 @@ MOP easier to use.")
           (base32 "18g137iqf86i247c9cg7d86b8k9cfq3yv272l73fsv734qpnv0g9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-cffi sbcl-trivial-features))
       (native-inputs
-       `(("rt" ,sbcl-rt)))
+       (list sbcl-rt))
       (synopsis "Operating system interface for Common Lisp")
       (description
        "Osicat is a lightweight operating system interface for Common Lisp on
@@ -10685,7 +10574,7 @@ accompaniment to the standard ANSI facilities.")
       (arguments
        `(#:asd-systems '("xembed")))
       (inputs
-       `(("sbcl-clx" ,sbcl-clx)))
+       (list sbcl-clx))
       (synopsis "CL(x) xembed protocol implementation ")
       (description "CL(x) xembed protocol implementation")
       ;; MIT License
@@ -10800,8 +10689,7 @@ Streams in ICDE’05.")
            "0jnyp2kibcf5cwi60l6grjrj8wws9chasjvsw7xzwyym2lyid46f"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ironclad" ,sbcl-ironclad)
-         ("trivial-utf-8" ,sbcl-trivial-utf-8)))
+       (list sbcl-ironclad sbcl-trivial-utf-8))
       (home-page "https://github.com/dardoria/uuid")
       (synopsis
        "Common Lisp implementation of UUIDs according to RFC4122")
@@ -10832,7 +10720,7 @@ Streams in ICDE’05.")
            "0rmsjkgjl90gl6ssvgd60hb0d5diyhsiyypvw9hbc0ripvbmk5r5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (home-page "https://shinmera.github.io/dissect/")
       (synopsis
        "Introspection library for the call stack and restarts")
@@ -10893,15 +10781,15 @@ learn about each of the parameters.")
           (base32 "1i1crdsf2nbyxxpvjgrwmwpjxn6a4drbcmqs4q4shfi8zyap7vng"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-package-locks" ,sbcl-cl-package-locks)
-         ("cl-syntax" ,sbcl-cl-syntax)
-         ("iterate" ,sbcl-iterate)
-         ("optima" ,sbcl-optima)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-types" ,sbcl-trivial-types)))
+       (list sbcl-alexandria
+             sbcl-cl-package-locks
+             sbcl-cl-syntax
+             sbcl-iterate
+             sbcl-optima
+             sbcl-split-sequence
+             sbcl-trivial-types))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (home-page "https://github.com/fukamachi/sxql")
       (synopsis "SQL generator for Common Lisp")
       (description "SQL generator for Common Lisp.")
@@ -11033,7 +10921,7 @@ weight, temperature, names of physical quantitites, etc.")
           (base32
            "1639msyagsswj85gc0wd90jgh8588j3qg5q70by9s2brf2q6w4lh"))))
       (inputs
-       `(("acclimation" ,sbcl-acclimation)))
+       (list sbcl-acclimation))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/robert-strandh/Clump")
       (synopsis "Collection of tree implementations for Common Lisp")
@@ -11073,8 +10961,7 @@ sequences of objects.")
            "1bcg13g7qb3dr8z50aihdjqa6miz5ivlc9wsj2csgv1km1mak2kj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("acclimation" ,sbcl-acclimation)
-         ("clump" ,sbcl-clump)))
+       (list sbcl-acclimation sbcl-clump))
       (home-page "https://github.com/robert-strandh/cluffer")
       (synopsis "Common Lisp library providing a protocol for text-editor buffers")
       (description "Cluffer is a library for representing the buffer of a text
@@ -11107,9 +10994,9 @@ implementations of those protocols for different purposes.")
            "0284aj84xszhkhlivaigf9qj855fxad3mzmv3zfr0qzb5k0nzwrg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (synopsis "LibSVM data format reader for Common Lisp")
       (description
        "This Common Lisp library provides a fast reader for data in LibSVM
@@ -11141,7 +11028,7 @@ format.")
            "1lfq04lnxivx59nq5dd02glyqsqzf3vdn4s9b8wnaln5fs8g2ph9"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("cl-libsvm-format" ,sbcl-cl-libsvm-format)
          ("cl-store" ,sbcl-cl-store)))
@@ -11422,7 +11309,7 @@ non-RLE encoded forms of the files.")
           (base32 "072v417vmcnvmyh8ddq9vmwwrizm7zwz9dpzi14qy9nsw8q649zw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/gigamonkey/monkeylib-binary-data")
       (synopsis "Common Lisp library for reading and writing binary data")
       (description
@@ -11509,7 +11396,7 @@ wrappers of deflate streams.  It currently does not handle compression.")
           (base32 "0f8darhairgxnb5bzqcny7nh7ss3471bdzix5rzcyiwdbr5kymjl"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -11561,7 +11448,7 @@ with other libraries which may also use Freetype.")
           (base32 "0458bllabcdjghfrqx6aki49c9qmvfmkk8jl75cfpi7q0i12kh95"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/slyrus/opticl-core")
       (synopsis "Core classes and pixel access macros for Opticl")
       (description
@@ -11592,14 +11479,14 @@ macros for the Opticl image processing library.")
           (base32 "0qsn9hpd8j2kp43dk05j8dczz9zppdff5rrclbp45n3ksk9inw8i"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("cl-jpeg" ,sbcl-cl-jpeg)
-         ("com.gigamonkeys.binary-data" ,sbcl-com.gigamonkeys.binary-data)
-         ("deflate" ,sbcl-deflate)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("opticl-core" ,sbcl-opticl-core)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-cl-jpeg
+             sbcl-com.gigamonkeys.binary-data
+             sbcl-deflate
+             sbcl-flexi-streams
+             sbcl-ieee-floats
+             sbcl-opticl-core))
       (home-page "https://github.com/slyrus/retrospectiff")
       (synopsis "Common Lisp library for TIFF images")
       (description
@@ -11630,13 +11517,10 @@ in the TIFF (Tagged Image File Format) format.")
           (base32 "0qd0xp20i1pcfn12kkapv9pirb6hd4ns7kz4zf1mmjwykpsln96q"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("parachute" ,sbcl-parachute)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria sbcl-cffi sbcl-parachute
+             sbcl-trivial-features))
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-cffi sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/mmap/")
       (synopsis "File memory mapping for Common Lisp")
       (description
@@ -11670,12 +11554,12 @@ than a few Kb.")
           (base32 "0kvvlvf50jhhw1s510f3clpr1a68632bq6d698yxcrx722igcrg4"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cffi" ,sbcl-cffi)
-         ("mmap" ,sbcl-mmap)
-         ("nibbles" ,sbcl-nibbles)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cffi
+             sbcl-mmap
+             sbcl-nibbles
+             sbcl-trivial-features))
       (home-page "https://github.com/3b/3bz")
       (synopsis "Deflate decompression for Common Lisp")
       (description
@@ -11777,7 +11661,7 @@ both from files on disk, or streams in memory.")
           (base32 "03rirnnhhisjbimlmpi725h1d3x0cfv00r57988am873dyzawmm1"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-jpeg" ,sbcl-cl-jpeg)
@@ -11819,8 +11703,7 @@ and saving 2-dimensional pixel-based images.")
           (base32 "1xjly8i62z72hfhlnz5kjd9i8xhrwckc7avyizxvhih67pkjmsx0"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)
-         ("pkg-config" ,pkg-config)))
+       (list sbcl-fiveam pkg-config))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)
@@ -11861,13 +11744,10 @@ and saving 2-dimensional pixel-based images.")
                                  "/share/fonts/truetype/")))
                (substitute* "Extensions/fontconfig/src/functions.lisp"
                  (("libfontconfig\\.so")
-                  (string-append (assoc-ref inputs "fontconfig")
-                                 "/lib/libfontconfig.so")))
+                  (search-input-file inputs "/lib/libfontconfig.so")))
                (substitute* "Extensions/harfbuzz/src/functions.lisp"
                  (("libharfbuzz\\.so")
-                  (string-append (assoc-ref inputs "harfbuzz")
-                                 "/lib/libharfbuzz.so")))
-               #t))
+                  (search-input-file inputs "/lib/libharfbuzz.so")))))
            (add-after 'unpack 'fix-build
              (lambda _
                ;; The cffi-grovel system does not get loaded automatically,
@@ -11909,10 +11789,9 @@ specification}, a toolkit for writing GUIs in Common Lisp.")
           (base32 "1xwwlhik1la4fp984qnx2dqq24v012qv4x0y49sngfpwg7n0ya7y"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-alexandria sbcl-cl-ppcre))
       (home-page "https://github.com/AccelerationNet/cl-inflector")
       (synopsis "Library to pluralize/singularize English and Portuguese words")
       (description
@@ -11944,13 +11823,13 @@ Inflector module.")
           (base32 "1wjdnf4vr9z7lcfc49kl43g6l2i23q9n81siy494k17d766cdvqa"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("local-time" ,sbcl-local-time)
-         ("md5" ,sbcl-md5)
-         ("split-sequence" ,sbcl-split-sequence)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cl-ppcre
+             sbcl-ieee-floats
+             sbcl-local-time
+             sbcl-md5
+             sbcl-split-sequence))
       (home-page "https://github.com/dimitri/cl-ixf")
       (synopsis "Parse IBM IXF file format")
       (description
@@ -11979,10 +11858,9 @@ Inflector module.")
         (base32 "1dir0s70ca3hagxv9x15zq4p4ajgl7jrcgqsza2n2y7iqbxh0dwi"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("metabang-bind" ,sbcl-metabang-bind)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (list sbcl-metabang-bind sbcl-trivial-gray-streams))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://github.com/chaitanyagupta/qbase64")
     (synopsis "Base64 encoder and decoder for Common Lisp")
     (description "@code{qbase64} provides a fast and flexible base64 encoder
@@ -12040,8 +11918,7 @@ LispWorks library that are used in software such as ContextL.")
           (base32 "0gk1izx6l6g48nypmnm9r6mzjx0jixqjj2kc6klf8a88rr5xd226"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("closer-mop" ,sbcl-closer-mop)
-         ("lw-compat" ,sbcl-lw-compat)))
+       (list sbcl-closer-mop sbcl-lw-compat))
       (home-page "https://github.com/pcostanza/contextl")
       (synopsis "Context-oriented programming for Common Lisp")
       (description "ContextL is a CLOS extension for Context-Oriented
@@ -12075,7 +11952,7 @@ overview article about COP which also contains some ContextL examples:
           (base32 "06zkdw3scnaw0d4nmsgkv7pi7sw00dikdgfgsqmbqfbz2yrsdabk"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+       (list sbcl-hu.dwim.asdf))
       (home-page "http://dwim.hu/project/hu.dwim.common-lisp")
       (synopsis "Redefine some standard Common Lisp names")
       (description "This library is a redefinition of the standard Common Lisp
@@ -12104,14 +11981,14 @@ package that includes a number of renames and shadows. ")
         (base32 "12l1rr6w9m99w0b5gc6hv58ainjfhbc588kz6vwshn4gqsxyzbhp"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+     (list sbcl-hu.dwim.asdf))
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("hu.dwim.common-lisp" ,sbcl-hu.dwim.common-lisp)
-       ("iterate" ,sbcl-iterate)
-       ("metabang-bind" ,sbcl-metabang-bind)))
+     (list sbcl-alexandria
+           sbcl-anaphora
+           sbcl-closer-mop
+           sbcl-hu.dwim.common-lisp
+           sbcl-iterate
+           sbcl-metabang-bind))
     (home-page "http://dwim.hu/")
     (synopsis "Common Lisp library shared by other hu.dwim systems")
     (description "This package contains a support library for other
@@ -12142,11 +12019,11 @@ hu.dwim systems.")
           (base32 "19ipds9r71qymfdp4izg0l7zmvinp06adr8rdalhaq7v7mzpg83z"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `( ;; These 2 inputs are only needed tests which are disabled, see below.
-         ;; ("hu.dwim.common" ,sbcl-hu.dwim.common)
-         ;; Need cl- package for the :hu.dwim.stefil+hu.dwim.def+swank system.
-         ;; ("hu.dwim.stefil" ,cl-hu.dwim.stefil)
-         ("hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+       (list ;; These 2 inputs are only needed tests which are disabled, see below.
+             ;; ("hu.dwim.common" ,sbcl-hu.dwim.common)
+             ;; Need cl- package for the :hu.dwim.stefil+hu.dwim.def+swank system.
+             ;; ("hu.dwim.stefil" ,cl-hu.dwim.stefil)
+             sbcl-hu.dwim.asdf))
       (arguments
        `(#:test-asd-file "hu.dwim.defclass-star.test.asd"
          ;; Tests require a circular dependency: hu.dwim.stefil -> hu.dwim.def
@@ -12268,7 +12145,7 @@ can separate configuration system from an implementation.")
           (base32 "1a9kivpy9j2grf1c6gdjk7fwcdlvvq67p3m98jyfhiyzj7axjymd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-package-locks" ,sbcl-cl-package-locks)
@@ -12345,7 +12222,7 @@ like Ruby's ActiveRecord.
          ("cl-interpol" ,sbcl-cl-interpol)
          ("split-sequence" ,sbcl-split-sequence)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; Tests passes but the phase fails with
        ;; Component KEBAB-ASD::KEBAB-TEST not found, required by #<SYSTEM "kebab">.
@@ -12395,7 +12272,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
          ("kebab" ,sbcl-kebab)
          ("log4cl" ,sbcl-log4cl)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (arguments
        ;; TODO: Tests fail with
        ;; While evaluating the form starting at line 22, column 0
@@ -12433,8 +12310,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
           (base32 "0k2i3d4k9cpci235mwfm0c5a4yqfkijr716bjv7cdlpzx88lazm9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)))
+       (list sbcl-alexandria sbcl-babel))
       (synopsis "Percent Encoding (aka URL Encoding) Common Lisp library")
       (description "This library provides trivial percent encoding and
 decoding functions for URLs.")
@@ -12464,7 +12340,7 @@ decoding functions for URLs.")
           (base32 "1xcm31n7afh5316lwz8iqbjx7kn5lw0l11arg8mhdmkx42aj4gkk"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (synopsis "Templating system for Common Lisp")
       (description "A mixture of features from eRuby and HTML::Template.  You
 could name it \"Yet Another LSP\" (LispServer Pages) but it's a bit more than
@@ -12628,7 +12504,7 @@ processing.")
          (sha256
           (base32 "1lmvfml2ldbb1wkhm25jqqk2bhwsz52hhcgljbnzj1xr8xhc3anp"))))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/rpgoldman/xmls")
       (synopsis "Non-validating XML parser for Common Lisp")
@@ -12695,9 +12571,9 @@ Common Lisp.")
           (base32 "1b2yl6lf6vis17y4n5s505p7ica96bdafcl6vydy1hg50fy33nfr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ppcre" ,sbcl-cl-ppcre)))
+       (list sbcl-cl-ppcre))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/BnMcGn/html-entities/")
       (synopsis "Encode and decode entities in HTML with Common Lisp")
       (description "Html-entities is a Common Lisp library that lets you
@@ -12726,16 +12602,16 @@ encode and decode entities in HTML.")
           (base32 "16k19zjkhh7r64vjq371k5jwjs7cdfjz83flh561n4h4v1z89fps"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("iterate" ,sbcl-iterate)
-         ("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("drakma" ,sbcl-drakma)
-         ("html-entities" ,sbcl-html-entities)
-         ("yason" ,sbcl-yason)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("do-urlencode" ,sbcl-do-urlencode)))
+       (list sbcl-bordeaux-threads
+             sbcl-iterate
+             sbcl-alexandria
+             sbcl-anaphora
+             sbcl-cl-ppcre
+             sbcl-drakma
+             sbcl-html-entities
+             sbcl-yason
+             sbcl-flexi-streams
+             sbcl-do-urlencode))
       (home-page "https://github.com/tkych/quicksearch/")
       (synopsis "Search Engine Interface for Common Lisp packages")
       (description "Quicksearch is a search-engine-interface for Common Lisp.
@@ -12770,8 +12646,7 @@ function @code{?} is abbreviation wrapper for @code{quicksearch}.")
           (base32 "1xpnyzksk2xld64b6lw6rw0gn5zxlb77jwna59sd4yl7kxhxlfpf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-alexandria sbcl-trivia))
       (home-page "https://github.com/alex-gutev/agutil/")
       (synopsis "Collection of Common Lisp utilities")
       (description "A collection of Common Lisp utility functions and macros
@@ -12833,11 +12708,9 @@ directly.")
           (base32 "1si68n1j6rpns8jw6ksqjpb937pdl30v7xza8rld7j5vh0jhy2yi"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("symbol-munger" ,sbcl-symbol-munger)))
+       (list sbcl-alexandria sbcl-closer-mop sbcl-symbol-munger))
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (home-page "https://github.com/AccelerationNet/collectors/")
       (synopsis "Common lisp library providing collector macros")
       (description "A small collection of common lisp macros to make
@@ -12865,12 +12738,9 @@ collecting values easier.")
         (base32 "10jxj043d2dw5vc0i0lz0lsa4qszn8him5is8jdhl4nsyfcazmky"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("collectors" ,sbcl-collectors)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-alexandria sbcl-anaphora sbcl-collectors sbcl-optima))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (home-page "https://github.com/alex-gutev/cl-environments")
     (synopsis "Implements the Common Lisp standard environment access API")
     (description
@@ -12902,16 +12772,16 @@ environment access API.")
         (base32 "1602vx6ybp0n8mbrrp6q8397fkkyvhrqpahc302pjdb57qildajz"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (inputs
-     `(("agutil" ,sbcl-agutil)
-       ("alexandria" ,sbcl-alexandria)
-       ("anaphora" ,sbcl-anaphora)
-       ("arrows" ,sbcl-arrows)
-       ("cl-environments" ,sbcl-cl-environments)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("iterate" ,sbcl-iterate)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-agutil
+           sbcl-alexandria
+           sbcl-anaphora
+           sbcl-arrows
+           sbcl-cl-environments
+           sbcl-closer-mop
+           sbcl-iterate
+           sbcl-optima))
     (home-page "https://github.com/alex-gutev/static-dispatch")
     (synopsis "Static generic function dispatch for Common Lisp")
     (description "Static dispatch is a Common Lisp library, inspired by
@@ -12950,14 +12820,14 @@ and comparison operations when used heavily in numeric code.")
          "17kdjqmm2ib347b8lqm3k4kca2j53kr0azb6h7m0v5i157ibndsw"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("agutil" ,sbcl-agutil)
-       ("anaphora" ,sbcl-anaphora)
-       ("arrows" ,sbcl-arrows)
-       ("cl-environments" ,sbcl-cl-environments)
-       ("introspect-environment" ,sbcl-introspect-environment)
-       ("optima" ,sbcl-optima)))
+     (list sbcl-agutil
+           sbcl-anaphora
+           sbcl-arrows
+           sbcl-cl-environments
+           sbcl-introspect-environment
+           sbcl-optima))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (home-page "https://github.com/alex-gutev/cl-form-types")
     (synopsis "determining the types of Common Lisp forms")
     (description "This library provides functions for determining the value
@@ -13002,7 +12872,7 @@ Macros and symbol-macros are fully expanded and all special forms, except
        ("static-dispatch" ,sbcl-static-dispatch)
        ("trivia" ,sbcl-trivia)))
     (native-inputs
-     `(("prove" ,sbcl-prove)))
+     (list sbcl-prove))
     (arguments
      ;; Tests fail because SBCL head size is not high enough.
      ;; https://github.com/alex-gutev/generic-cl/issues/6
@@ -13039,7 +12909,7 @@ objects, which is extensible to user-defined types.")
           (base32 "0lzljvf343xb6mlh6lni2i27hpm5qd376522mk6hr2pa20vd6rdq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/rpav/defpackage-plus")
       (synopsis "Extensible @code{DEFPACKAGE} variant with version support")
       (description
@@ -13112,10 +12982,8 @@ applications with foreign library dependencies that run some kind of GUI.")
           (base32 "062cnb2dwli6pw3zvv46jfxyxdzcbzwsck5pa6nw03qf1j1hyg3k"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)))
+       (list sbcl-bordeaux-threads sbcl-closer-mop sbcl-form-fiddle
+             sbcl-lambda-fiddle))
       (home-page "https://github.com/Shinmera/deeds")
       (synopsis "Extensible Event Delivery System")
       (description
@@ -13203,13 +13071,13 @@ package.")
           (base32 "146yv0hc4hmk72562ssj2d41143pp84dcbd1h7f4nx1c7hf2bb0d"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("cl-json" ,sbcl-cl-json)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("claw-support" ,sbcl-claw-support)
-         ("local-time" ,sbcl-local-time)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-cffi
+             sbcl-cl-json
+             sbcl-cl-ppcre
+             sbcl-claw-support
+             sbcl-local-time
+             sbcl-trivial-features))
       (home-page "https://github.com/borodust/claw")
       (synopsis "Autowrapper for Common Lisp")
       (description
@@ -13241,9 +13109,7 @@ and lean bindings to C libraries.")
           (base32 "01df3kyf2qs3czi332dnz2s35x2j0fq46vgmsw7wjrrvnqc22mk5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("claw" ,sbcl-claw)))
+       (list sbcl-alexandria sbcl-cffi sbcl-claw))
       (home-page "https://github.com/borodust/claw-utils")
       (synopsis "Utilities for easier autowrapping")
       (description
@@ -13274,10 +13140,9 @@ autowrapping with @code{claw}.")
           (base32 "0ip49hhq32w80qsc7jmspyda5r2rsszvw0mk2r3341cld78sz9ya"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("clunit2" ,sbcl-clunit2)))
+       (list sbcl-alexandria sbcl-clunit2))
       (inputs
-       `(("let-plus" ,sbcl-let-plus)))
+       (list sbcl-let-plus))
       (synopsis "Simple array operations library for Common Lisp")
       (description
        "This library is a collection of functions and macros for manipulating
@@ -13310,17 +13175,17 @@ Common Lisp arrays and performing numerical calculations with them.")
          (patches (search-patches "sbcl-clml-fix-types.patch"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandia" ,sbcl-alexandria)
-         ("array-operations" ,sbcl-array-operations)
-         ("cl-fad" ,sbcl-cl-fad)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("drakma" ,sbcl-drakma)
-         ("introspect-environment" ,sbcl-introspect-environment)
-         ("iterate" ,sbcl-iterate)
-         ("lparallel" ,sbcl-lparallel)
-         ("parse-number" ,sbcl-parse-number)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-alexandria
+             sbcl-array-operations
+             sbcl-cl-fad
+             sbcl-cl-ppcre
+             sbcl-drakma
+             sbcl-introspect-environment
+             sbcl-iterate
+             sbcl-lparallel
+             sbcl-parse-number
+             sbcl-split-sequence
+             sbcl-trivial-garbage))
       (synopsis "Common Lisp machine learning library")
       (description
        "CLML (Common Lisp Machine Learning) is a high performance and large
@@ -13348,7 +13213,7 @@ scale statistical machine learning package")
           (base32 "1rvyh0srgd81kvbzmq4ysd9y6c0qdwh23naqxc9asw1vh7fq08x1"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and UTM or UPS")
       (description
@@ -13381,9 +13246,9 @@ Polar Stereographic).")
           (base32 "0ckvn4hg3wwivzavhfashb6fap4a1q10l8krhbng8bdb54ac10sz"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("utm-ups" ,sbcl-utm-ups)))
+       (list sbcl-utm-ups))
       (synopsis
        "Convert coordinates between latitude/longitude and MGRS")
       (description
@@ -13415,7 +13280,7 @@ latitude/longitude and MGRS.")
           (base32 "02p990zprhjvifmsfk8yh3frvz6xyw26ikzxvzglqdixbal36nr3"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and Maidenhead")
       (description
@@ -13447,7 +13312,7 @@ latitude/longitude and Maidenhead locator system.")
           (base32 "1lnfhp6z6kc8l605zp4siyjiw74y1h4bdq3jfizi084v505wxhgr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis
        "Convert coordinates between latitude/longitude and Open Location Code")
       (description
@@ -13505,7 +13370,7 @@ latitude/longitude and Open Location Code.")
           (base32 "1ph3xjqilvinvgr9q3w47zxqyz1sqnq030nlx7kgkkv8j3bnqk7a"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-regex" ,sbcl-regex)))
+       (list sbcl-regex))
       (home-page "https://github.com/sharplispers/clawk")
       (synopsis "Common Lisp AWK")
       (description
@@ -13582,7 +13447,7 @@ not so easy to copy (ssyntax, argument destructuring, etc.).")
           (base32 "08mpkl5ij5sjfsyn8pq2kvsvpvyvr7ha1r8g1224fa667b8k2q85"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (home-page "http://common-lisp.net/project/trivial-shell/")
       (synopsis "Common Lisp access to the shell")
       (description
@@ -13612,8 +13477,7 @@ It's independent of the implementation and operating system.")
           (base32 "012ry02djnqyvvs61wbbqj3saz621w2l9gczrywdxhi5p4ycx318"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-shell" ,sbcl-trivial-shell)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-trivial-shell sbcl-named-readtables))
       (home-page "https://github.com/Neronus/Clesh")
       (synopsis "Embed shell code in Common Lisp")
       (description
@@ -13645,8 +13509,7 @@ backtick.  It has been forked from SHELISP.")
           (base32 "04wnxcgk40x8p0gxnz9arv1a5wasdqrdxa8c4p5v7r2mycfps6jj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("trivial-timeout" ,sbcl-trivial-timeout)))
+       (list sbcl-bordeaux-threads sbcl-trivial-timeout))
       (home-page "https://github.com/rpav/trivial-channels")
       (synopsis "Common Lisp simple thread-safe channels with timeout")
       (description
@@ -13675,7 +13538,7 @@ backtick.  It has been forked from SHELISP.")
           (base32 "06f46zr3gp3wlm2kgxna24qd2gpr1v89x9fynh1x5vrw6c6hqjcv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("drakma" ,sbcl-drakma)))
+       (list sbcl-drakma))
       (home-page "https://github.com/eudoxia0/trivial-download/")
       (synopsis "Download files from Common Lisp")
       (description
@@ -13704,8 +13567,7 @@ from Common Lisp.  It provides a progress bar.")
         (base32 "0lkraw0dwh4is4x5sp5rjrw6f93m0gr9849abrbi12s25ws7jbw4"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("osicat" ,sbcl-osicat)
-       ("prove" ,sbcl-prove)))
+     (list sbcl-osicat sbcl-prove))
     (home-page "https://github.com/cbeo/gtwiwtg/")
     (synopsis "Naive generators for Common Lisp")
     (description
@@ -13736,8 +13598,7 @@ and understandable.")
           (base32 "1ldb4qhmx431n3lsq71ynwb9ybazbfqd55icjbhi06mj52ngndir"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("documentation-utils-extensions" ,sbcl-documentation-utils-extensions)))
+       (list sbcl-bordeaux-threads sbcl-documentation-utils-extensions))
       (home-page "https://github.com/sirherrbatka/cl-progress-bar/")
       (synopsis "Progress bars in Common Lisp")
       (description
@@ -13798,12 +13659,9 @@ whichever package you switch to.")
           (base32 "0n369n6b7y1m49biccnnr7svymjdsk8sksrkqrn3mj21vgv7s7bg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cffi-grovel" ,sbcl-cffi)
-         ("rove" ,sbcl-rove)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-cffi sbcl-rove sbcl-cl-ppcre sbcl-bordeaux-threads))
       (inputs
-       `(("cffi" ,sbcl-cffi)))
+       (list sbcl-cffi))
       (home-page "https://github.com/fukamachi/supertrace")
       (synopsis "Improved Common Lisp tracing for debugging and profiling")
       (description
@@ -13833,7 +13691,7 @@ for debugging and profiling real world applications.")
           (base32 "0fbzqbpm2ixz85555krl36kbbbjyn699vdj6k383khi3g9y629fa"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "http://shinmera.github.io/trivial-benchmark/")
       (synopsis "Easy to use benchmarking system for Common Lisp")
       (description
@@ -13866,9 +13724,7 @@ even by adding additional statistical @code{compute}ations. ")
           (base32 "17kai1anbkk5dj5sbrsin2fc019cmcbglb900db60v38myj0y0wf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("parenscript" ,sbcl-parenscript)
-         ("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-cl-ppcre sbcl-parenscript sbcl-named-readtables))
       (home-page "https://github.com/ahungry/glyphs/")
       (synopsis "Reduce Common Lisp verbosity")
       (description
@@ -13898,12 +13754,12 @@ Lisp, inspired by BODOL (@url{https://github.com/bodil/BODOL}).")
       (base32 "186v95wgsj2hkxdw2jl9x1w4fddjclp7arp0rrd9vf5ly8h8sbf3"))))
    (build-system asdf-build-system/sbcl)
    (inputs
-    `(("drakma" ,sbcl-drakma)
-      ("alexandria" ,sbcl-alexandria)
-      ("cxml" ,sbcl-cxml)
-      ("ironclad" ,sbcl-ironclad)
-      ("puri" ,sbcl-puri)
-      ("cl-base64" ,sbcl-cl-base64)))
+    (list sbcl-drakma
+          sbcl-alexandria
+          sbcl-cxml
+          sbcl-ironclad
+          sbcl-puri
+          sbcl-cl-base64))
    (synopsis "Work with Amazon S3 and Amazon CloudFront from Common Lisp")
    (description "This is ZS3, a library for working with Amazon's Simple Storage
 Service (S3) and CloudFront service from Common Lisp.")
@@ -13974,7 +13830,7 @@ library are feedforward neural networks trained using backpropagation.")
           (base32 "1774jy8hzbi6nih3sq6vchk66f7g8w86dwgpbvljyfzcnkcaz6ql"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("cl-octet-streams" ,sbcl-cl-octet-streams)
@@ -13986,9 +13842,7 @@ library are feedforward neural networks trained using backpropagation.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/libzstd.lisp"
                  (("libzstd\\.so")
-                  (string-append (assoc-ref inputs "zstd-lib")
-                                 "/lib/libzstd.so")))
-               #t)))))
+                  (search-input-file inputs "/lib/libzstd.so"))))))))
       (synopsis "Common Lisp library for Zstandard (de)compression")
       (description
        "This Common Lisp library provides functions for Zstandard
@@ -14124,7 +13978,7 @@ bringing dynamism to class definition.")
           (base32 "0p6ysa92fk34bhxpw7bycbfgw150fv11z9x8jr9xb4lh8cm2hvp6"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("ppcre" ,sbcl-cl-ppcre)
@@ -14171,10 +14025,7 @@ determination library using @emph{magic} numbers.")
           (base32 "16ag48sswgimr1fzr582vhym4s03idpd4lkydw5s58lv80ibpim8"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("serapeum" ,sbcl-serapeum)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("unicode" ,sbcl-cl-unicode)))
+       (list sbcl-alexandria sbcl-serapeum sbcl-cl-ppcre sbcl-cl-unicode))
       (home-page "https://github.com/ruricolist/cl-shlex")
       (synopsis "Common Lisp lexical analyzer for shell-like syntaxes")
       (description
@@ -14261,15 +14112,14 @@ be usable from multi-threaded programs.")
           (base32 "1c46q9lmzqv14z80d3fwdawgn3pn4922x31fyqvsvbcjm4hd16fb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("osicat" ,sbcl-osicat)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-cffi
+             sbcl-osicat
+             sbcl-cl-ppcre
+             sbcl-split-sequence
+             sbcl-trivial-features))
       (native-inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("prove" ,sbcl-prove)))
+       (list sbcl-cl-fad sbcl-prove))
       (home-page "https://github.com/fourier/ppath")
       (synopsis "Common Lisp's implementation of the Python's os.path module")
       (description
@@ -14304,9 +14154,9 @@ corresponding OS system functions are called.")
           (base32 "0v6h8lk17iqv1qkxgqjyzn8gi6v0hvq2vmfbb01md3zjvjqxn6lr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("named-readtables" ,sbcl-named-readtables)))
+       (list sbcl-named-readtables))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/williamyaoh/trivial-escapes")
       (synopsis "C-style escape directives for Common Lisp")
       (description
@@ -14338,12 +14188,10 @@ It provides four readtables.  The default one lets you write strings like this:
           (base32 "0ha36bhg474vr76vfhr13szc8cfdj1ickg92k1icz791bqaqg67p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("command-line-arguments" ,sbcl-command-line-arguments)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-alexandria sbcl-command-line-arguments
+             sbcl-trivial-gray-streams))
       (native-inputs
-       `(("trivial-escapes" ,sbcl-trivial-escapes)
-         ("rove" ,sbcl-rove)))
+       (list sbcl-trivial-escapes sbcl-rove))
       (home-page "https://github.com/yitzchak/cl-indentify")
       (synopsis "Code beautifier for Common Lisp")
       (description
@@ -14373,7 +14221,7 @@ source files.")
           (base32 "1lyrglc3h1if44gxd9cwv90wa90nrdjvb7fry39b1xn8ywdfa7di"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("acclimation" ,sbcl-acclimation)))
+       (list sbcl-acclimation))
       (home-page "https://github.com/s-expressionists/Concrete-Syntax-Tree")
       (synopsis "Parse Common Lisp code into a concrete syntax tree")
       (description
@@ -14418,7 +14266,7 @@ the origin.")
        ("closer-mop" ,sbcl-closer-mop)
        ("concrete-syntax-tree" ,sbcl-concrete-syntax-tree)))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
+     (list sbcl-fiveam))
     (arguments
      '(#:asd-systems '("eclector"
                        "eclector-concrete-syntax-tree")))
@@ -14494,7 +14342,7 @@ objects themselves.")
           (base32 "00p5c053kmgq4ks6l9mxsqz6g3bjcybvkvj0bh3r90qgpkaawm1p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/system-locale/")
       (synopsis "Get the system's locale and language settings in Common Lisp")
       (description
@@ -14525,7 +14373,7 @@ display messages in the user's native language.")
           (base32 "0py176ibmsc01n5r0q1bs1ykqf5jwdbh8kx0j1a814l9y51241v0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/language-codes/")
       (synopsis "Map ISO language codes to language names in Common Lisp")
       (description
@@ -14555,9 +14403,8 @@ language name mapping.")
           (base32 "13y5jskx8n2b7kimpfarr8v777w3b7zj5swg1b99nj3hk0843ixw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("language-codes" ,sbcl-language-codes)
-         ("system-locale" ,sbcl-system-locale)))
+       (list sbcl-documentation-utils sbcl-language-codes
+             sbcl-system-locale))
       (home-page "https://shinmera.github.io/multilang-documentation/")
       (synopsis "Add multiple languages support to Common Lisp documentation")
       (description
@@ -14618,25 +14465,25 @@ and @code{doseq*}.")
           (base32 "0si69xfzi769dprwfy7gp1x3bl7lxz6d4n98sa26w9r41wvay5ja"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-indentify" ,sbcl-cl-indentify)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("dissect" ,sbcl-dissect)
-         ("eclector" ,sbcl-eclector)
-         ("ironclad" ,sbcl-ironclad)
-         ("iterate" ,sbcl-iterate)
-         ("multilang-documentation" ,sbcl-multilang-documentation)
-         ("puri" ,sbcl-puri)
-         ("pzmq" ,sbcl-pzmq)
-         ("shasht" ,sbcl-shasht)
-         ("static-vectors" ,sbcl-static-vectors)
-         ("trivial-do" ,sbcl-trivial-do)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
-         ("trivial-mimes" ,sbcl-trivial-mimes)))
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-bordeaux-threads
+             sbcl-cl-base64
+             sbcl-cl-indentify
+             sbcl-closer-mop
+             sbcl-dissect
+             sbcl-eclector
+             sbcl-ironclad
+             sbcl-iterate
+             sbcl-multilang-documentation
+             sbcl-puri
+             sbcl-pzmq
+             sbcl-shasht
+             sbcl-static-vectors
+             sbcl-trivial-do
+             sbcl-trivial-garbage
+             sbcl-trivial-gray-streams
+             sbcl-trivial-mimes))
       (home-page "https://yitzchak.github.io/common-lisp-jupyter/")
       (synopsis "Common Lisp kernel for Jupyter")
       (description
@@ -14735,7 +14582,7 @@ adaptations.")
           (base32 "1kdxfnhh9fz34j8qs7pn7mwjz3v33q4v9nh0hqkyzraq5xs2j3f4"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-trivial-features))
       (home-page "https://github.com/snmsts/daemon")
       (synopsis "Daemonize Common Lisp processes")
       (description
@@ -14765,9 +14612,7 @@ on UNIX like platforms.")
           (base32 "0n8q818ry2shggjfhp8gjby8v5mla9pg97c5g19pcglpnwim7a74"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-cffi sbcl-documentation-utils sbcl-trivial-features))
       (home-page "https://shinmera.github.io/file-attributes/")
       (synopsis "Access to common file attributes in Common Lisp")
       (description
@@ -14834,7 +14679,7 @@ sequences based on the Python difflib module.")
           (base32 "1varnijivzd4jpimn1cz8p5ks713zzha5cgl4vmb0xr8ahravwzb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-difflib" ,sbcl-cl-difflib)))
+       (list sbcl-cl-difflib))
       (home-page "https://github.com/wiseman/cl-html-diff")
       (synopsis "Generate a human-readable diff of two HTML documents")
       (description
@@ -14865,10 +14710,8 @@ HTML documents.")
           (base32 "02vpjaq38d6laaqmsana9f13c38xzr0xwy05fcfkmzdhh0kllpkv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-         ("sbcl-documentation-utils" ,sbcl-documentation-utils)
-         ("sbcl-drakma" ,sbcl-drakma)
-         ("sbcl-yason" ,sbcl-yason)))
+       (list sbcl-cl-ppcre sbcl-documentation-utils sbcl-drakma
+             sbcl-yason))
       (synopsis "Common Lisp client library for Mastodon instances")
       (description
        "This is a Common Lisp library implementing the full v1 REST API
@@ -14942,7 +14785,7 @@ the ncurses terminal library.")
           (base32 "0my1fsgi2rjaqkpk934f2bjy63pmnj7faza3fzvnk6k3l66y19nk"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "Common Lisp library to make histograms")
       (description "This is a Common Lisp library to make histograms using
 UTF-8 block characters.")
@@ -14972,13 +14815,10 @@ UTF-8 block characters.")
           (base32 "1knd3n4mpzkc97i1znbas32pscd30416isvmx2pjmgvar6k93pl5"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("lisp-unit2" ,sbcl-lisp-unit2)))
+       (list sbcl-lisp-unit2))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("interpol" ,sbcl-cl-interpol)
-         ("iterate" ,sbcl-iterate)))
+       (list sbcl-alexandria sbcl-anaphora sbcl-closer-mop
+             sbcl-cl-interpol sbcl-iterate))
       (synopsis
        "Common lisp library to unify access to dictionary-like structures")
       (description
@@ -15010,7 +14850,7 @@ dictionary-like data structures.")
           (base32 "1agkrj3ymskzc3c7pxbrj123d1kygjqcls145m0ap3i07q96hh1r"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sxql" ,sbcl-sxql)))
+       (list sbcl-sxql))
       (synopsis "Build and compose SXQL queries dynamically")
       (description
        "This is a Common Lisp library to build and compose SXQL queries
@@ -15041,9 +14881,7 @@ dynamically.")
           (base32 "1mdhfkk61djj39vgnns5y1cssd12h0m1cfwd21m8xpa2l3rqvmgf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)
-         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)))
+       (list sbcl-alexandria sbcl-babel sbcl-cl-ppcre-unicode))
       (synopsis "Internationalisation framework for Common Lisp")
       (description
        "This is a Gettext-style internationalisation framework for Common
@@ -15074,9 +14912,7 @@ Lisp.")
           (base32 "0c0m0ar04jn7qf2v8c4sivamlzki03r13rnxy8b3n27rh9r6hgin"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-base64" ,sbcl-cl-base64)
-         ("flexi-stream" ,sbcl-flexi-streams)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-cl-base64 sbcl-flexi-streams sbcl-ironclad))
       (synopsis "Collection of common cryptography functions")
       (description
        "This is a collection of common cryptography functions for Common
@@ -15107,13 +14943,9 @@ Lisp.")
           (base32 "04if61wigylsmn996rbfl8ylsd0d9hzdmg7p2wiglncibjzcl5k9"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("json-streams" ,sbcl-json-streams)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("stefil" ,sbcl-stefil)))
+       (list sbcl-json-streams sbcl-split-sequence sbcl-stefil))
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("flexi-stream" ,sbcl-flexi-streams)
-         ("string-case" ,sbcl-string-case)))
+       (list sbcl-cl-ppcre sbcl-flexi-streams sbcl-string-case))
       (synopsis "HTML5 parser for Common Lisp")
       (description "This a Common Lisp library to parse HTML5 documents.")
       (home-page "https://github.com/rotatef/cl-html5-parser")
@@ -15142,10 +14974,9 @@ Lisp.")
           (base32 "0q1lh3sa6mkjr5gcdkgimkpc29rgf9cjhv90f61h8ridj28grq0h"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam"   ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("anaphora" ,sbcl-anaphora)
-         ("babel" ,sbcl-babel)))
+       (list sbcl-anaphora sbcl-babel))
       (synopsis "RFC 3986 percent-encoding library")
       (description
        "This is a Common Lisp library providing RFC 3986 percent-encoding.")
@@ -15175,9 +15006,7 @@ Lisp.")
         (base32 "0vza9gj9q42nzb5v8aj22lmn4aqx9vrddsb5a343nbwfz89hbh9x"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("cffi" ,sbcl-cffi)
-        ("cl-ppcre" ,sbcl-cl-ppcre)))
+      (list sbcl-alexandria sbcl-cffi sbcl-cl-ppcre))
      (home-page "https://notabug.org/cage/cl-mount-info.git")
      (synopsis "Library to get information about mounted filesystems")
      (description
@@ -15214,7 +15043,7 @@ related C functions to get information about the mounted file system.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/unix/cl-diskspace-list-all-disks-with-df.lisp"
                  (("grep")
-                  (string-append (assoc-ref inputs "grep") "/bin/grep")))
+                  (search-input-file inputs "/bin/grep")))
                (substitute* "src/unix/cl-diskspace-list-all-disks-with-df.lisp"
                  (("/bin/df")
                   (which "df")))
@@ -15251,7 +15080,7 @@ line tool @code{df} and get disk space information using @code{statvfs}.")
         (base32 "0sdaff9hpsx7bpkkkqavmxmrrlc2d61gmqjjgn8xchncng4a0rf8"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("cffi" ,sbcl-cffi)))
+     (list sbcl-cffi))
     (home-page "https://github.com/muyinliu/cl-cpus")
     (synopsis "Common Lisp feature to get number of CPUs")
     (description
@@ -15433,8 +15262,7 @@ immediately loaded.")
         (base32 "0r3vnl9lywn4ksy34apcv6j825qp7l1naddawr14v4lwacndb80v"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("bodge-utilities" ,sbcl-bodge-utilities)
-        ("rtg-math" ,sbcl-rtg-math)))
+      (list sbcl-bodge-utilities sbcl-rtg-math))
      (home-page "https://github.com/borodust/bodge-math")
      (synopsis "Common Lisp core math utilities of BODGE library collection")
      (description
@@ -15465,10 +15293,9 @@ immediately loaded.")
          (base32 "02nd1x6y1akp1ymv1y4z9ympwbnpd1drwi4f86xbjszxqff6jyj8"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("trivial-features" ,sbcl-trivial-features)))
+      (list sbcl-trivial-features))
      (inputs
-      `(("cffi" ,sbcl-cffi)
-        ("sbcl-alexandria" ,sbcl-alexandria)))
+      (list sbcl-cffi sbcl-alexandria))
      (home-page "https://github.com/borodust/bodge-blobs-support")
      (synopsis "Common Lisp utilities for blob packages")
      (description
@@ -15510,7 +15337,7 @@ compiled foreign library collection.")
       '(#:tests? #f
         #:asd-files '("cl-conspack.asd")))
      (native-inputs
-      `(("checkl" ,sbcl-checkl)))
+      (list sbcl-checkl))
      (inputs
       `(("alexandria" ,sbcl-alexandria)
         ("closer-mop" ,sbcl-closer-mop)
@@ -15554,14 +15381,13 @@ compiled foreign library collection.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "gl/library.lisp"
                  (("libGL.so" all)
-                  (string-append (assoc-ref inputs "mesa") "/lib/" all)))
+                  (search-input-file inputs "/lib/libGL.so")))
                (substitute* "glu/library.lisp"
                  (("libGLU.so" all)
-                  (string-append (assoc-ref inputs "glu") "/lib/" all)))
+                  (search-input-file inputs "/lib/libGLU.so")))
                (substitute* "glut/library.lisp"
                  (("libglut.so" all)
-                  (string-append (assoc-ref inputs "freeglut") "/lib/" all)))
-               #t)))))
+                  (search-input-file inputs "/lib/libglut.so"))))))))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -15599,12 +15425,12 @@ OpenGL (Mesa), GLU and GLUT (FreeGLUT) APIs using CFFI.")
           (base32 "0w1i734gkdkziin74ql2nhx7jdjxx02ylssaa6qdrvnj4br1124a"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("cl-opengl" ,sbcl-cl-opengl)
-         ("glsl-packing" ,sbcl-glsl-packing)
-         ("golden-utils" ,sbcl-golden-utils)
-         ("static-vectors" ,sbcl-static-vectors)
-         ("varjo" ,sbcl-varjo)))
+       (list sbcl-cffi
+             sbcl-cl-opengl
+             sbcl-glsl-packing
+             sbcl-golden-utils
+             sbcl-static-vectors
+             sbcl-varjo))
       (home-page "https://git.mfiano.net/mfiano/shadow")
       (synopsis "Management system for OpenGL shader programs")
       (description
@@ -15638,9 +15464,7 @@ buffer object types (UBO, SSBO currently).")
           (base32 "04vyh2j00zdpb8ryxr8g81wjcmqlz9wrn55r3cypcj4qg970r5wi"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("golden-utils" ,sbcl-golden-utils)
-         ("shadow" ,sbcl-shadow)
-         ("varjo" ,sbcl-varjo)))
+       (list sbcl-golden-utils sbcl-shadow sbcl-varjo))
       (home-page "https://git.mfiano.net/mfiano/umbra")
       (synopsis "Common Lisp library of reusable GPU shader functions")
       (description
@@ -15704,15 +15528,15 @@ abstract, final and singleton classes.")
           (base32 "1j3d12vyyn7y9nz2an4xmaa5si0jbxbwq7y61hq2b7vk376zvw18"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiasco" ,sbcl-fiasco)))
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("float-features" ,sbcl-float-features)
-         ("fset" ,sbcl-fset)
-         ("global-vars" ,sbcl-global-vars)
-         ("json-streams" ,sbcl-json-streams)
-         ("serapeum" ,sbcl-serapeum)
-         ("trivia" ,sbcl-trivia)))
+       (list sbcl-fiasco))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-float-features
+             sbcl-fset
+             sbcl-global-vars
+             sbcl-json-streams
+             sbcl-serapeum
+             sbcl-trivia))
       (home-page "https://coalton-lang.github.io")
       (synopsis "Dialect of ML in Common Lisp")
       (description
@@ -15744,8 +15568,7 @@ allows one to gradually make their programs safer.")
           (base32 "13kkajkva2shm19fvn4yashsw18l6imv2rmy3hmpcky7g5ay7bv3"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("lquery" ,sbcl-lquery)))
+       (list sbcl-array-utils sbcl-lquery))
       (home-page "https://shinmera.github.io/clip/")
       (synopsis "Common Lisp HTML templating engine")
       (description
@@ -15779,7 +15602,7 @@ lQuery.")
           (base32 "1zm4bf6gajpgmhr7zwf7600zlaf8fs1fcyzabqsh2ma2crkgqdxq"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (home-page "https://shinmera.github.io/pathname-utils/")
       (synopsis "Collection of utilities to help with pathname operations")
       (description
@@ -15811,11 +15634,8 @@ handling the accessing of files on the underlying system however.")
         (base32 "0pnqflgz410zydc1ivwnd8hcl24bgr7x12yjzr7g4lq3ibc8y97b"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("documentation-utils" ,sbcl-documentation-utils)
-        ("fast-io" ,sbcl-fast-io)
-        ("ieee-floats" ,sbcl-ieee-floats)
-        ("static-vectors" ,sbcl-static-vectors)
-        ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (list sbcl-documentation-utils sbcl-fast-io sbcl-ieee-floats
+            sbcl-static-vectors sbcl-trivial-garbage))
      (home-page "https://shirakumo.github.io/terrable/")
      (synopsis "Parser library for Terragen TER terrain files")
      (description
@@ -15877,7 +15697,7 @@ color palette for a GUI or web page.")
           (base32 "099h0rrdzxnlmn8avi72mg2dl0kccp7w01b2p9nwyy4b8yr32cir"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-flexi-streams))
       (home-page "https://github.com/eugeneia/cl-qprint/")
       (synopsis "Implementation of the quoted-printable encoding")
       (description
@@ -15910,11 +15730,9 @@ described in RFC 2045 (see @url{http://tools.ietf.org/html/rfc2045}).")
           (base32 "0qn8if0fj6vzc897pqqqs0m1y107gmzqngpqhqmwrcsp1ckj5k0v"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ppcre" ,sbcl-cl-ppcre)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-qprint" ,sbcl-cl-qprint)))
+       (list sbcl-cl-ppcre sbcl-cl-base64 sbcl-cl-qprint))
       (native-inputs
-       `(("rove" ,sbcl-rove)))
+       (list sbcl-rove))
       (home-page "https://github.com/eugeneia/cl-qprint/")
       (synopsis "Read and print MIME content in Common Lisp")
       (description
@@ -15990,14 +15808,10 @@ in Common Lisp.")
         (base32 "15vrp1kayhjb5c1vc9x8wlm8rimk73vpa7yc101cf0gsg1fjazl6"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("ppcre" ,sbcl-cl-ppcre)))
+     (list sbcl-alexandria sbcl-cl-ppcre))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("cl-csv" ,sbcl-cl-csv)
-       ("parse-float" ,sbcl-parse-float)
-       ("lispbuilder-sdl" ,sbcl-lispbuilder-sdl)
-       ("lparallel" ,sbcl-lparallel)))
+     (list sbcl-fiveam sbcl-cl-csv sbcl-parse-float sbcl-lispbuilder-sdl
+           sbcl-lparallel))
     (home-page "https://github.com/privet-kitty/dufy")
     (synopsis "Color library for Common Lisp")
     (description
@@ -16088,10 +15902,9 @@ for Common Lisp.")
           (base32 "0ncsxrybnx0pjsndv3j8w4lphlpcsld8sxg3c5b46fb3a8nd4ssf"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
-       `(("clsql" ,sbcl-clsql)
-         ("ironclad" ,sbcl-ironclad)))
+       (list sbcl-clsql sbcl-ironclad))
       (home-page "https://github.com/charje/cl-authentic")
       (synopsis "User/password management for Common Lisp applications")
       (description "Authentic provides a light-weight and extendible
@@ -16123,9 +15936,9 @@ confirmation tokens, and user authentication.")
           (base32 "0qc7m5brhpwi531rgmlaj1c609by533a1ia5hv8f90ilm8ksmw3l"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/3d-vectors/")
       (synopsis "Utility library implementing 2D, 3D, and 4D vectors")
       (description
@@ -16157,10 +15970,9 @@ offers them both in non-modifying and modifying versions where applicable.")
           (base32 "10q9c96gqzq6k8n89agy0khgimmnsn4s69171m3vhghqa2yv5n6v"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (inputs
-       `(("3d-vectors" ,sbcl-3d-vectors)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-3d-vectors sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/3d-matrices/")
       (synopsis "Utility library implementing 2x2, 3x3, 4x4 and NxM matrices")
       (description
@@ -16235,10 +16047,8 @@ application fail and be unable to do so using its standard UI.")
           (base32 "0as5796yazchq1qkna3srxlz5v7cf7ffny9cbqi41wsa2s20vbh9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("parse-float" ,sbcl-parse-float)
-         ("trivial-indent" ,sbcl-trivial-indent)))
+       (list sbcl-cl-ppcre sbcl-documentation-utils sbcl-parse-float
+             sbcl-trivial-indent))
       (home-page "https://shirakumo.github.io/glsl-toolkit/")
       (synopsis "Parser for OpenGL Shader Language source files")
       (description
@@ -16269,9 +16079,7 @@ allow to wrangle OpenGL Shader Language (GLSL) source files.")
           (base32 "1ls1pij7dvb65g4nam7nvik1218jvfk5iplr48vy290fw3lq7v98"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("dissect" ,sbcl-dissect)))
+       (list sbcl-array-utils sbcl-bordeaux-threads sbcl-dissect))
       (home-page "https://shinmera.github.io/simple-tasks/")
       (synopsis "Simple task scheduling framework")
       (description "This is a task scheduling framework for Common Lisp.")
@@ -16300,9 +16108,7 @@ allow to wrangle OpenGL Shader Language (GLSL) source files.")
           (base32 "0bw1887i7396lqg75qvmgjfzz4xbiq9w5dp8wxdgrcsm0qwlraw7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("simple-tasks" ,sbcl-simple-tasks)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-bordeaux-threads sbcl-simple-tasks sbcl-trivial-features))
       (home-page "https://shinmera.github.io/trivial-main-thread/")
       (synopsis "Compatibility library to run things in the main thread")
       (description
@@ -16399,10 +16205,9 @@ all kind of typesetting applications.")
           (base32 "01mh20s5gj0lajq45anxji77ykq1wcg72mn1y9a1k8i7q1ainjlr"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("parachute" ,sbcl-parachute)))
+       (list sbcl-alexandria sbcl-parachute))
       (inputs
-       `(("trivial-do" ,sbcl-trivial-do)))
+       (list sbcl-trivial-do))
       (home-page "https://yitzchak.github.io/shasht/")
       (synopsis "Common Lisp JSON reading and writing library")
       (description
@@ -16469,9 +16274,8 @@ Common Lisp.")
            (add-after 'unpack 'patch-libev-lib-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/lev.lisp"
-                 (("libev.so" all)
-                  (string-append (assoc-ref inputs "libev")
-                                        "/lib/" all))))))))
+                 (("libev.so" _)
+                  (search-input-file inputs "/lib/libev.so"))))))))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("libev" ,libev)))
@@ -16563,8 +16367,7 @@ is built on top of the @code{libev} event library.")
           (base32 "0cia3721im04q73dfkd688d8splgpz03qa4h8s3r39kar4w3xll2"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("cl-quickcheck" ,sbcl-cl-quickcheck)
-         ("flexi-streams" ,sbcl-flexi-streams)))
+       (list sbcl-cl-quickcheck sbcl-flexi-streams))
       (home-page "https://github.com/rotatef/json-streams")
       (synopsis "Common Lisp library for reading and writing JSON")
       (description
@@ -16612,7 +16415,7 @@ building block for higher level libraries.")
        ;;
        `(#:tests? #f))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cl-ppcre" ,sbcl-cl-ppcre)
          ("collectors" ,sbcl-collectors)
@@ -16647,11 +16450,9 @@ or GOLDEN-UTILS.")
           (base32 "1pzhamgni6k5hi6bbvlb3dm659pcllrrr3vhhn3rpjn238zxg5ar"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("stefil" ,sbcl-stefil)))
+       (list sbcl-stefil))
       (inputs
-       `(("flexi-streams" ,sbcl-flexi-streams)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("yacc" ,sbcl-cl-yacc)))
+       (list sbcl-flexi-streams sbcl-split-sequence sbcl-cl-yacc))
       (home-page "https://github.com/rotatef/gettext")
       (synopsis "Common Lisp implementation of Gettext")
       (description
@@ -16773,11 +16574,9 @@ CL-I18N and CL-L10N.")
           (base32 "1ybznf4y5lda6bn163jcvj281qzhm24dfcwhbgxmm5n6f27gdccl"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("let-plus" ,sbcl-let-plus)))
+       (list sbcl-alexandria sbcl-anaphora sbcl-let-plus))
       (home-page "https://github.com/tpapp/cl-slice")
       (synopsis "Array slices for Common Lisp")
       (description
@@ -16807,22 +16606,22 @@ CL-I18N and CL-L10N.")
           (base32 "1lk2ypm3sacf60h96a7hv9jwjlxkl4k40yzdalmqdg548vrd1jjm"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
-      (inputs
-       `(("access" ,sbcl-access)
-         ("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("babel" ,sbcl-babel)
-         ("cl-locale" ,sbcl-cl-locale)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-slice" ,sbcl-cl-slice)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("gettext" ,sbcl-gettext)
-         ("iterate" ,sbcl-iterate)
-         ("local-time" ,sbcl-local-time)
-         ("parser-combinators" ,sbcl-parser-combinators)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("trivial-backtrace" ,sbcl-trivial-backtrace)))
+       (list sbcl-fiveam))
+      (inputs
+       (list sbcl-access
+             sbcl-alexandria
+             sbcl-anaphora
+             sbcl-babel
+             sbcl-cl-locale
+             sbcl-cl-ppcre
+             sbcl-cl-slice
+             sbcl-closer-mop
+             sbcl-gettext
+             sbcl-iterate
+             sbcl-local-time
+             sbcl-parser-combinators
+             sbcl-split-sequence
+             sbcl-trivial-backtrace))
       (home-page "https://mmontone.github.io/djula/")
       (synopsis "Common Lisp port of the Django templating language")
       (description
@@ -16853,9 +16652,7 @@ Django with a syntax similar to Python Jinja2.")
           (base32 "1akz9ggh33x2cq3h0f1cd0p632v1mbagv3dzsb0r10bwg9lh3nmv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)))
+       (list sbcl-documentation-utils sbcl-form-fiddle sbcl-lambda-fiddle))
       (home-page "https://shinmera.github.io/for/")
       (synopsis "Extensible iteration macro library")
       (description
@@ -16888,12 +16685,12 @@ require code-walking and is easier to extend.")
           (base32 "00nm3sjngbflj2gd5q0xs2m136w4kix6krww23nk64pkkyq2fs86"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("3d-vectors" ,sbcl-3d-vectors)
-         ("array-utils" ,sbcl-array-utils)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("for" ,sbcl-for)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-3d-vectors
+             sbcl-array-utils
+             sbcl-documentation-utils
+             sbcl-for
+             sbcl-lambda-fiddle
+             sbcl-trivial-garbage))
       (home-page "https://shinmera.github.io/flare/")
       (synopsis "Easy particle systems with fine grained control")
       (description
@@ -16925,8 +16722,7 @@ any existing or future application.")
           (base32 "08vsvqv3768bwb2y8mwxbw5wyqzzwqr7rd004r6gafdgf9p9mcx3"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-bordeaux-threads sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/simple-inferiors/")
       (synopsis "Common Lisp library to use inferior processes")
       (description
@@ -16959,10 +16755,8 @@ running into parallelism problems when having to change directory.")
           (base32 "181aqpj4zkfk1aavj5jw8rym6gw4ma3gd64z2h5fpryabgmwk236"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("simple-inferiors" ,sbcl-simple-inferiors)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-simple-inferiors sbcl-lambda-fiddle sbcl-cl-ppcre
+             sbcl-documentation-utils))
       (home-page "https://shinmera.github.io/legit/")
       (synopsis "Interface to the git binary")
       (description
@@ -17046,8 +16840,8 @@ and even allows the generic visualisation of graphs in this format.")
            (add-after 'unpack 'patch-glfw-lib-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "glfw-bindings.lisp"
-                 (("libglfw.so.3" all)
-                  (string-append (assoc-ref inputs "glfw") "/lib/" all))))))))
+                 (("libglfw.so.3" _)
+                  (search-input-file inputs "/lib/libglfw.so.3"))))))))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
@@ -17141,7 +16935,7 @@ coverage.")
         ("split-sequence" ,sbcl-split-sequence)
         ("varjo" ,sbcl-varjo)))
      (propagated-inputs
-      `(("quickproject" ,sbcl-quickproject)))
+      (list sbcl-quickproject))
      (home-page "https://github.com/cbaggers/cepl")
      (synopsis "Development playground to work with OpenGL")
      (description
@@ -17181,11 +16975,8 @@ window it creates as just another output for your graphics, analogous to how
         (base32 "1hfmh4vj271jdilir97qs6nqbi5nmn5alyls0w3d3xxqwi6ffqjs"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("bordeaux-threads" ,sbcl-bordeaux-threads)
-        ("log4cl" ,sbcl-log4cl)
-        ("closer-mop" ,sbcl-closer-mop)
-        ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (list sbcl-alexandria sbcl-bordeaux-threads sbcl-log4cl
+            sbcl-closer-mop sbcl-trivial-garbage))
      (home-page "https://stmx.org/")
      (synopsis "High performance Transactional Memory for Common Lisp")
      (description
@@ -17233,7 +17024,7 @@ resolving the tension between granularity and concurrency.")
         (base32 "0hqikgzic7kjq2n1d924yldfm30qz67cmsk6gghi9cbmxkwdlwp8"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
-      `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+      (list sbcl-hu.dwim.stefil))
      (home-page "https://github.com/phoe/binding-arrows")
      (synopsis "Threading macros based on binding anonymous variables")
      (description
@@ -17270,9 +17061,9 @@ impossible to merge back upstream.")
           (base32 "0mp5jdqq0aamdhgnvw149cqqi3zg7dkkibp25qi4rafw1fnpd40z"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-documentation-utils))
       (native-inputs
-       `(("parachute" ,sbcl-parachute)))
+       (list sbcl-parachute))
       (home-page "https://shinmera.github.io/atomics/")
       (synopsis "Common Lisp portability layer for atomic operations")
       (description
@@ -17307,9 +17098,9 @@ implementations offer.")
            "0251r0mpjm0y3qsm4lm7ncvrkxvgwc53spdm1p2mpayhvkkqqsws"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("babel" ,sbcl-babel)))
+       (list sbcl-babel))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (synopsis "32-bit version of Murmurhash3 for Common Lisp")
       (description
        "This Common Lisp package offers an implementation of the 32-bit
@@ -17340,9 +17131,9 @@ non-crytographic hashing algorithm.")
           (base32 "1ycbd73ykfj5j9sdhlzamyv18qbjj6xqf7fhm4fa0nsyr6sr3rf5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-murmurhash" ,sbcl-cl-murmurhash)))
+       (list sbcl-cl-murmurhash))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/danshapero/cl-hamt")
       (synopsis "Dictionary & set data structure using hash array-mapped tries")
       (description
@@ -17375,19 +17166,18 @@ Common Lisp based on the hash array-mapped trie data structure.")
         (base32 "1bfz7z8v417dvsp1jz76ir3ihcs8g7zis2d56xx1dpzqzjd95g7z"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("lparallel" ,sbcl-lparallel)
-       ("cl-speedy-queue" ,sbcl-cl-speedy-queue)
-       ("log4cl" ,sbcl-log4cl)
-       ("str" ,sbcl-cl-str)
-       ("blackbird" ,sbcl-blackbird)
-       ("cl-hamt" ,sbcl-cl-hamt)
-       ("binding-arrows" ,sbcl-binding-arrows)
-       ("atomics" ,sbcl-atomics)))
+     (list sbcl-alexandria
+           sbcl-bordeaux-threads
+           sbcl-lparallel
+           sbcl-cl-speedy-queue
+           sbcl-log4cl
+           sbcl-cl-str
+           sbcl-blackbird
+           sbcl-cl-hamt
+           sbcl-binding-arrows
+           sbcl-atomics))
     (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("mock" ,sbcl-cl-mock)))
+     (list sbcl-fiveam sbcl-cl-mock))
     (home-page "https://mdbergmann.github.io/cl-gserver/index.html")
     (synopsis "Actor framework for easy access to state and async operations")
     (description
@@ -17429,7 +17219,7 @@ computing and event based message handling.")
        ;;   #<SYSTEM "assoc-utils">
        `(#:tests? #f))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (home-page "https://github.com/fukamachi/assoc-utils")
       (synopsis "Utilities for manipulating association lists in Common Lisp")
       (description
@@ -17474,7 +17264,7 @@ lists in Common Lisp.")
          ("cl-ppcre" ,sbcl-cl-ppcre)
          ("named-readtables" ,sbcl-named-readtables)))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (home-page "https://github.com/thephoeron/let-over-lambda")
       (synopsis "Macros from Let Over Lambda")
       (description
@@ -17505,10 +17295,9 @@ from the Let Over Lambda book, including community updates.")
           (base32 "0q8jhp040cvpppyn820mm6a550yfxyr1lar298x13c42mm807f4f"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("assoc-utils" ,sbcl-assoc-utils)
-         ("let-over-lambda" ,sbcl-let-over-lambda)))
+       (list sbcl-assoc-utils sbcl-let-over-lambda))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/ailisp/flute")
       (synopsis "HTML5 generation library in Common Lisp")
       (description
@@ -17703,41 +17492,41 @@ joysticks, and other such HID devices.")
           (base32 "1vpv9nrpq93fz1c5cyi1hazaaz9ijbrf1l7zwp7gammndr5v028r"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("trivial-features" ,sbcl-trivial-features)))
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("3d-matrices" ,sbcl-3d-matrices)
-         ("3d-vectors" ,sbcl-3d-vectors)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("cl-gamepad" ,sbcl-cl-gamepad)
-         ("cl-jpeg" ,sbcl-cl-jpeg)
-         ("cl-opengl" ,sbcl-cl-opengl)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-tga" ,sbcl-cl-tga)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("deploy" ,sbcl-deploy)
-         ("fast-io" ,sbcl-fast-io)
-         ("flare" ,sbcl-flare)
-         ("float-features" ,sbcl-float-features)
-         ("flow" ,sbcl-flow)
-         ("for" ,sbcl-for)
-         ("form-fiddle" ,sbcl-form-fiddle)
-         ("glsl-toolkit" ,sbcl-glsl-toolkit)
-         ("ieee-floats" ,sbcl-ieee-floats)
-         ("jsown" ,sbcl-jsown)
-         ("lambda-fiddle" ,sbcl-lambda-fiddle)
-         ("lquery" ,sbcl-lquery)
-         ("messagebox" ,sbcl-messagebox)
-         ("mmap" ,sbcl-mmap)
-         ("pathname-utils" ,sbcl-pathname-utils)
-         ("pngload" ,sbcl-pngload)
-         ("retrospectiff" ,sbcl-retrospectiff)
-         ("static-vectors" ,sbcl-static-vectors)
-         ("terrable" ,sbcl-terrable)
-         ("trivial-garbage" ,sbcl-trivial-garbage)
-         ("trivial-indent" ,sbcl-trivial-indent)
-         ("verbose" ,sbcl-verbose)
-         ("zpng" ,sbcl-zpng)))
+       (list sbcl-trivial-features))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-3d-matrices
+             sbcl-3d-vectors
+             sbcl-bordeaux-threads
+             sbcl-cl-gamepad
+             sbcl-cl-jpeg
+             sbcl-cl-opengl
+             sbcl-cl-ppcre
+             sbcl-cl-tga
+             sbcl-closer-mop
+             sbcl-deploy
+             sbcl-fast-io
+             sbcl-flare
+             sbcl-float-features
+             sbcl-flow
+             sbcl-for
+             sbcl-form-fiddle
+             sbcl-glsl-toolkit
+             sbcl-ieee-floats
+             sbcl-jsown
+             sbcl-lambda-fiddle
+             sbcl-lquery
+             sbcl-messagebox
+             sbcl-mmap
+             sbcl-pathname-utils
+             sbcl-pngload
+             sbcl-retrospectiff
+             sbcl-static-vectors
+             sbcl-terrable
+             sbcl-trivial-garbage
+             sbcl-trivial-indent
+             sbcl-verbose
+             sbcl-zpng))
       (home-page "https://github.com/Shirakumo/trial")
       (synopsis "Common Lisp game engine")
       (description
@@ -17814,12 +17603,9 @@ developing library for Common Lisp.")
           (base32 "1jsqjr6sf86hcdvnjp4gd10qv0r7kfkr9hmda85irb5lha4q9n7w"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("parachute" ,sbcl-parachute)))
+       (list sbcl-alexandria sbcl-parachute))
       (inputs
-       `(("array-utils" ,sbcl-array-utils)
-         ("closer-mop" ,sbcl-closer-mop)
-         ("documentation-utils" ,sbcl-documentation-utils)))
+       (list sbcl-array-utils sbcl-closer-mop sbcl-documentation-utils))
       (home-page "https://shirakumo.github.io/alloy/")
       (synopsis
        "Common Lisp user interface protocol and toolkit implementation")
@@ -17852,7 +17638,7 @@ integrate Alloy into a target backend.")
         (base32 "1dg029in14928qfxvfshyxmdwhzskzhxx3na0zy98ybx69b21qla"))))
      (build-system asdf-build-system/sbcl)
      (inputs
-      `(("iterate" ,sbcl-iterate)))
+      (list sbcl-iterate))
      (home-page "https://github.com/jphmrst/cl-org-sampler")
      (synopsis "Extracting Common Lisp docstrings as Emacs Org-mode documents")
      (description
@@ -17983,16 +17769,16 @@ functions allow Lisp programs to explore the web.")
           (base32 "0ll1s9w29yhhgqssgiw58fcapw4n040gkvpz4sxwv3q2v60rbidj"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("chipz" ,sbcl-chipz)
-         ("chunga" ,sbcl-chunga)
-         ("cl+ssl" ,sbcl-cl+ssl)
-         ("cl-binding-arrows" ,sbcl-binding-arrows)
-         ("cl-str" ,sbcl-cl-str)
-         ("cl-usocket" ,sbcl-usocket)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("rutils" ,sbcl-rutils)
-         ("salza2" ,sbcl-salza2)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list sbcl-chipz
+             sbcl-chunga
+             sbcl-cl+ssl
+             sbcl-binding-arrows
+             sbcl-cl-str
+             sbcl-usocket
+             sbcl-flexi-streams
+             sbcl-rutils
+             sbcl-salza2
+             sbcl-trivial-garbage))
       (home-page "https://github.com/charje/cl-yxorp")
       (synopsis
        "Reverse proxy server written in and configurable in Common Lisp")
@@ -18060,9 +17846,7 @@ language).")
           (base32 "0wv3j13fj73gigriw5r9vi920hz05ld7zllsvbxdxvmyfy9k1kly"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("aserve" ,sbcl-aserve)
-         ("kmrcl" ,sbcl-kmrcl)
-         ("xmls" ,sbcl-xmls)))
+       (list sbcl-aserve sbcl-kmrcl sbcl-xmls))
       (home-page "https://github.com/nsrahmad/cl-rss")
       (synopsis "Common Lisp RSS processor")
       (description
@@ -18092,7 +17876,7 @@ RSS feeds data via HTTP.  Currently, it supports RSS versions 0.90,
           (base32 "15zs7mc422ycp1cvcxmirif1dq15mlmv8vzd6l6nzn4qgmph9wz0"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/scymtym/trivial-with-current-source-form")
       (synopsis "Help producing better errors for macro users")
       (description
@@ -18127,10 +17911,8 @@ concept of a source-form to report where the error or warning is located.")
           (base32 "1h8m2npdzd2cpnl75pvv4yvvfwxa7kl6qvalc9s0y4yws0kaih3i"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandia" ,sbcl-alexandria)
-         ("trivial-macroexpand-all" ,sbcl-trivial-macroexpand-all)
-         ("trivial-with-current-source-form"
-          ,sbcl-trivial-with-current-source-form)))
+       (list sbcl-alexandria sbcl-trivial-macroexpand-all
+             sbcl-trivial-with-current-source-form))
       (home-page "https://github.com/charje/tailrec")
       (synopsis "Macro to optimize a Common Lisp function for tail recursion")
       (description "Just wrap your Common Lisp function in this macro call and
@@ -18161,10 +17943,7 @@ is not tail recursive.")
           (base32 "1bajb09crzadkirdpd6jrpcc55irjd4sxzavygr25l85pafyhniw"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-str" ,sbcl-cl-str)
-         ("global-vars" ,sbcl-global-vars)
-         ("plump" ,sbcl-plump)
-         ("tailrec" ,sbcl-tailrec)))
+       (list sbcl-cl-str sbcl-global-vars sbcl-plump sbcl-tailrec))
       (home-page
        "https://github.com/interactive-ssr/client/blob/master/main.org")
       (synopsis "The core functionality for ISSR server modules")
@@ -18198,15 +17977,15 @@ and DOM cleaning, to ensure that all remote DOMs are the same.")
           (base32 "1012jc068qdd8df6mmbn8vmmqlniqm5j2jbyrraw3yz8c13c8280"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("arrows" ,sbcl-arrows)
-         ("cl-base64" ,sbcl-cl-base64)
-         ("cl-str" ,sbcl-cl-str)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("global-vars" ,sbcl-global-vars)
-         ("ironclad" ,sbcl-ironclad)
-         ("parse-float" ,sbcl-parse-float)
-         ("usocket" ,sbcl-usocket)))
+       (list sbcl-alexandria
+             sbcl-arrows
+             sbcl-cl-base64
+             sbcl-cl-str
+             sbcl-flexi-streams
+             sbcl-global-vars
+             sbcl-ironclad
+             sbcl-parse-float
+             sbcl-usocket))
       (home-page "https://github.com/charJe/portal")
       (synopsis "Portable Websocket Server for Common Lisp")
       (description
@@ -18240,13 +18019,13 @@ customizable errors.")
           (base32 "0826qrvk64pjspdklns29dv3zhzfhd6k42fq030xajv8a7hkcxda"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-base64" ,sbcl-cl-base64)
-         ("cl-str" ,sbcl-cl-str)
-         ("hunchentoot" ,sbcl-hunchentoot)
-         ("issr-core" ,sbcl-issr-core)
-         ("jonathan" ,sbcl-jonathan)
-         ("plump" ,sbcl-plump)
-         ("portal" ,sbcl-portal)))
+       (list sbcl-cl-base64
+             sbcl-cl-str
+             sbcl-hunchentoot
+             sbcl-issr-core
+             sbcl-jonathan
+             sbcl-plump
+             sbcl-portal))
       (home-page "https://github.com/interactive-ssr/hunchenissr")
       (synopsis "Interactive Server Side Rendering backend for Hunchentoot")
       (description
@@ -18279,10 +18058,8 @@ Javascript.")
           (base32 "1xyqacihxwk4vnffqlg93czmalscglp6sh3bwy3qwb7hdxv6yxz6"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("cl-unification" ,sbcl-cl-unification)
-         ("hunchenissr" ,sbcl-hunchenissr)))
+       (list sbcl-alexandria sbcl-cl-ppcre sbcl-cl-unification
+             sbcl-hunchenissr))
       (home-page "https://github.com/interactive-ssr/hunchenissr-routes")
       (synopsis "Enable path variables when using Hunchenissr")
       (description
@@ -18343,15 +18120,15 @@ bound to whatever value was in the same place in the URL (as a string).")
           (base32 "0jllnsi2ibw0gax9szpdrjxvw9qqibydpdbnkf683yfb1d5jlci1"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("global-vars" ,sbcl-global-vars)
-         ("parenscript" ,sbcl-parenscript)
-         ("cl-markdown" ,sbcl-cl-markdown)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("serapeum" ,sbcl-serapeum)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-alexandria
+             sbcl-global-vars
+             sbcl-parenscript
+             sbcl-cl-markdown
+             sbcl-cl-ppcre
+             sbcl-serapeum
+             sbcl-trivial-gray-streams))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/ruricolist/spinneret")
       (synopsis "Common Lisp HTML5 generator")
       (description
@@ -18404,9 +18181,9 @@ semantics in Lisp and Parenscript.
           (base32 "10mxm6q62cfpv3hw2w8k968ba8a1xglqdkwlkqs4l4nby3b11aaq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("split-sequence" ,sbcl-split-sequence)))
+       (list sbcl-split-sequence))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/eudoxia0/path-parse")
       (synopsis "Parse the PATH environment variable in Common Lisp")
       (description
@@ -18447,9 +18224,10 @@ variable portably in Common Lisp.")
          ("libxml2" ,libxml2)
          ("libxslt" ,libxslt)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (arguments
-       `(#:phases
+       `(#:tests? #f ; FIXME: Tests get stuck indefinitly
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -18523,10 +18301,9 @@ child nodes enumeration, etc.
           (base32 "01gvshpxil0ggjgfmgcymbgmpsfaxy6aggm0bywkn40rck3038vb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+       (list sbcl-alexandria sbcl-bordeaux-threads))
       (native-inputs
-       `(("hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+       (list sbcl-hu.dwim.stefil))
       (home-page "https://github.com/nikodemus/pileup")
       (synopsis "Simple thread-safe binary heap implementation for Common Lisp")
       (description
@@ -18558,9 +18335,7 @@ for Common Lisp.")
           (base32 "1dpbzhycg50snl3j01c8dh8gdvhfhz0hnfl54xy55a3wbr3m6rp7"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("documentation-utils" ,sbcl-documentation-utils)
-         ("local-time" ,sbcl-local-time)
-         ("plump" ,sbcl-plump)))
+       (list sbcl-documentation-utils sbcl-local-time sbcl-plump))
       (home-page "https://shinmera.github.io/feeder/")
       (synopsis "RSS, Atom and general feed parsing and generating")
       (description
@@ -18607,7 +18382,7 @@ formats within this framework.")
          ("puri" ,sbcl-puri)
          ("split-sequence" ,sbcl-split-sequence)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (home-page "https://github.com/archimag/cl-routes")
       (synopsis "Rails routes system for Common Lisp")
       (description
@@ -18668,7 +18443,7 @@ provides a method for determining which capabilities a terminal
           (base32 "0y31za8xr8734p2pf8mrw1jd1fksh2d4y1p12wwjyn8hxxsvsx1w"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("closer-mop" ,sbcl-closer-mop)))
+       (list sbcl-closer-mop))
       (home-page "https://github.com/sharplispers/conium")
       (synopsis "Portability library for debugger- and compiler-related tasks")
       (description
@@ -18699,10 +18474,9 @@ tasks in Common Lisp.  It is fork of SWANK-BACKEND.")
           (base32 "1212wbadms9jzrqgarpj3d9xh9w4dab8jhx4k2aryqgf116zs42h"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cffi" ,sbcl-cffi)
-         ("osicat" ,sbcl-osicat)))
+       (list sbcl-cffi sbcl-osicat))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/eudoxia0/terminal-size")
       (synopsis "Get the size of the terminal from Common Lisp")
       (description
@@ -18779,9 +18553,9 @@ previous commands.")
           (base32 "01ma0cwirxarwwmdwflnh8kmysmr2smh5kyvzhb2074ljxg8yq2p"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/pnathan/generic-comparability")
       (synopsis "Implementation of cdr-8")
       (description
@@ -18816,7 +18590,7 @@ the CDR-8 standard.")
            "06pvmackyhq03rjmihpx6w63m6cy8wx78ll5xpwwvd85bgrqq817"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (inputs
        `(("cffi" ,sbcl-cffi)
          ("libyaml" ,libyaml)))
@@ -18860,16 +18634,11 @@ For a YAML parser and emitter using this, check out cl-yaml.")
           (base32 "1izjg0v6rf7dh069bbnnr67l30lsqj86wdk7y9ggbgiwh6v9j185"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-libyaml" ,sbcl-cl-libyaml)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("parse-number" ,sbcl-parse-number)))
+       (list sbcl-alexandria sbcl-cl-libyaml sbcl-cl-ppcre
+             sbcl-parse-number))
       (native-inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("fiveam" ,sbcl-fiveam)
-         ("generic-comparability" ,sbcl-generic-comparability)
-         ("trivial-benchmark" ,sbcl-trivial-benchmark)
-         ("yason" ,sbcl-yason)))
+       (list sbcl-cl-fad sbcl-fiveam sbcl-generic-comparability
+             sbcl-trivial-benchmark sbcl-yason))
       (home-page "https://github.com/eudoxia0/cl-yaml")
       (synopsis "YAML parser for Common Lisp")
       (description
@@ -18900,10 +18669,7 @@ libyaml.")
           (base32 "0hhh7xn6q12rviayfihg1ym6x6csa0pdjgb88ykqbrz2rs3pgpz5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("osicat" ,sbcl-osicat)
-         ("terminfo" ,sbcl-terminfo)))
+       (list sbcl-alexandria sbcl-cffi sbcl-osicat sbcl-terminfo))
       (home-page "https://github.com/sharplispers/linedit")
       (synopsis "Readline-style line-editor for Common Lisp")
       (description
@@ -18934,8 +18700,7 @@ provides customizable line-editing for Common Lisp programs.")
           (base32 "1giafck8qfvb688kx5bn9g32rfc12jjywg8vdav36aqbd6lxf5z5"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-ppcre" ,sbcl-cl-ppcre)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-cl-ppcre sbcl-trivial-gray-streams))
       (home-page "https://github.com/froydnj/diff")
       (synopsis "Common Lisp library for computing differences between files")
       (description
@@ -18990,7 +18755,7 @@ diffs, \"context\" format diffs, and \"vdelta\" format binary diffs.")
          ("cl-fad" ,sbcl-cl-fad)
          ("cl-ppcre" ,sbcl-cl-ppcre)))
       (native-inputs
-       `(("trivial-timeout" ,sbcl-trivial-timeout)))
+       (list sbcl-trivial-timeout))
       (home-page "https://github.com/sharplispers/montezuma")
       (synopsis "Full-text indexing and search for Common Lisp")
       (description
@@ -19100,9 +18865,7 @@ higher-level lispier interface.")
           (base32 "0ydlirfk4dbpqqjwwph99v5swcrhd8v9g8q24fvs35wn2vm08lh1"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("split-sequence" ,sbcl-split-sequence)))
+       (list sbcl-alexandria sbcl-cffi sbcl-split-sequence))
       (home-page "https://github.com/jasom/clinenoise")
       (synopsis "Port of linenoise to Common Lisp")
       (description
@@ -19133,7 +18896,7 @@ terminals.")
           (base32 "19290zw2b64k78wr62gv30pp7cmqg07q85vfwjknaffjdd73xwi1"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("sbcl-alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/kingcons/trivial-raw-io")
       (synopsis "Trivial portability for raw *nix IO in Common Lisp")
       (description
@@ -19165,10 +18928,9 @@ Lisp.")
           (base32 "11c4krpq5x55qkchx6ykcnb455ssb4r3jjywx3c3irfrkj733ybp"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("trivial-raw-io" ,sbcl-trivial-raw-io)))
+       (list sbcl-alexandria sbcl-trivial-raw-io))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/eudoxia0/terminal-keypress")
       (synopsis "Read keyboard events in the terminal from Common Lisp")
       (description
@@ -19325,11 +19087,9 @@ This package provides the text-based interface for Chemboy.")
           (base32 "05qx4jrkxqbqi72cxgswbpnifbdvp9mh7apc7566v522899bh0hb"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("ironclad" ,sbcl-ironclad)
-         ("trivial-utf-8" ,sbcl-trivial-utf-8)
-         ("split-sequence" ,sbcl-split-sequence)))
+       (list sbcl-ironclad sbcl-trivial-utf-8 sbcl-split-sequence))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/eudoxia0/cl-pass")
       (synopsis "Password hashing and verification library")
       (description
@@ -19359,10 +19119,9 @@ This package provides the text-based interface for Chemboy.")
           (base32 "127pm9h4rm4w9aadw5yvamnfzhk2rr69kchx10rf9k7sk7izqqfk"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-fad" ,sbcl-cl-fad)
-         ("path-parse" ,sbcl-path-parse)))
+       (list sbcl-cl-fad sbcl-path-parse))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (home-page "https://github.com/eudoxia0/which")
       (synopsis "The which command in Common Lisp")
       (description
@@ -19393,13 +19152,10 @@ command in Common Lisp.")
           (base32 "15ihsxxs76xnldmqfsbxybckqjwrxwcpphgghiwzr2mnbqjpdqkh"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("anaphora" ,sbcl-anaphora)
-         ("alexandria" ,sbcl-alexandria)
-         ("array-operations" ,sbcl-array-operations)
-         ("cl-slice" ,sbcl-cl-slice)
-         ("let-plus" ,sbcl-let-plus)))
+       (list sbcl-anaphora sbcl-alexandria sbcl-array-operations
+             sbcl-cl-slice sbcl-let-plus))
       (native-inputs
-       `(("clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (home-page "https://github.com/tpapp/cl-num-utils")
       (synopsis "Numerical utilities for Common Lisp")
       (description
@@ -19460,7 +19216,7 @@ Lisp, including:
          ("lapack" ,lapack)
          ("let-plus" ,sbcl-let-plus)))
       (native-inputs
-       `(("clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (home-page "https://github.com/tpapp/lla")
       (synopsis "Linear algebra library for Common Lisp")
       (description
@@ -19537,17 +19293,17 @@ to serve as a building block for such an interface.")
           (base32 "0jn80xphyvyp2v72acr6b8a2f6dw06myr5vrjfl14brsvks7wr89"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("anaphora" ,sbcl-anaphora)
-         ("array-operations" ,sbcl-array-operations)
-         ("cl-num-utils" ,sbcl-cl-num-utils)
-         ("cl-rmath" ,sbcl-cl-rmath)
-         ("cl-slice" ,sbcl-cl-slice)
-         ("gsll" ,sbcl-gsll)
-         ("let-plus" ,sbcl-let-plus)
-         ("lla" ,sbcl-lla)))
+       (list sbcl-alexandria
+             sbcl-anaphora
+             sbcl-array-operations
+             sbcl-cl-num-utils
+             sbcl-cl-rmath
+             sbcl-cl-slice
+             sbcl-gsll
+             sbcl-let-plus
+             sbcl-lla))
       (native-inputs
-       `(("clunit" ,sbcl-clunit)))
+       (list sbcl-clunit))
       (home-page "https://github.com/tpapp/cl-random")
       (synopsis "Random variates for Common Lisp")
       (description
@@ -19579,8 +19335,7 @@ density, distribution and quantiles for these distributions.")
           (base32 "0w51dqixh277k6sl8bqvvp1400y6kd1l5h3d9q2f40l9bpxy8gjx"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cl-random" ,sbcl-cl-random)
-         ("mgl-pax" ,sbcl-mgl-pax)))
+       (list sbcl-cl-random sbcl-mgl-pax))
       (home-page "https://melisgl.github.io/mgl-gpr/")
       (synopsis "Common Lisp library of evolutionary algorithms")
       (description
@@ -19641,13 +19396,9 @@ information is taken from @url{https://publicsuffix.org}.")
           (base32 "00c8hq7vzgb89ab3q7mrp60x743kiqmsk1g51ynhxlqhph2bnslf"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("local-time" ,sbcl-local-time)
-         ("ppcre" ,sbcl-cl-ppcre)
-         ("serapeum" ,sbcl-serapeum)))
+       (list sbcl-alexandria sbcl-local-time sbcl-cl-ppcre sbcl-serapeum))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)
-         ("cffi" ,sbcl-cffi)))
+       (list sbcl-fiveam sbcl-cffi))
       (home-page "https://github.com/ruricolist/cl-strftime")
       (synopsis "Common Lisp compiler for the strftime language")
       (description
@@ -19721,7 +19472,7 @@ for tasks like parmenantly save something when exiting Lisp.")
                   "prove"))
                #t)))))
       (native-inputs
-       `(("prove" ,sbcl-prove)))
+       (list sbcl-prove))
       (home-page "https://github.com/eudoxia0/cl-base58")
       (synopsis "Implementation of base58 for Common Lisp")
       (description
@@ -19812,7 +19563,7 @@ decimals, and hexadecimal notation.")
       (propagated-inputs
        `(("quickproject" ,sbcl-quickproject)))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)))
+       (list sbcl-fiveam))
       (arguments
        `(#:asd-files '("overlord.asd")
          #:phases
@@ -19866,10 +19617,7 @@ is available in a separate repository.  See
           (base32 "1fb03fgnzrvh22lw1jdg04pmyja5fib5n42rzwp5mhr829yvxkvp"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("cxml" ,sbcl-cxml)
-         ("parse-number" ,sbcl-parse-number)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("yacc" ,sbcl-cl-yacc)))
+       (list sbcl-cxml sbcl-parse-number sbcl-cl-ppcre sbcl-cl-yacc))
       (home-page "https://github.com/sharplispers/xpath/")
       (synopsis "Implementation of the XML Path Language (XPath) Version 1.0")
       (description
@@ -19900,19 +19648,16 @@ Version 1.0.")
           (base32 "1vxdb1cjjqi986f72bggnw1s4yzv12g4li7vn4y49b6lphshr8lm"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("babel" ,sbcl-babel)
-         ("named-readtables" ,sbcl-named-readtables)
-         ("serapeum" ,sbcl-serapeum)
-         ("quri" ,sbcl-quri)
-         ("flexi-streams" ,sbcl-flexi-streams)
-         ("split-sequence" ,sbcl-split-sequence)
-         ("alexandria" ,sbcl-alexandria)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+       (list sbcl-babel
+             sbcl-named-readtables
+             sbcl-serapeum
+             sbcl-quri
+             sbcl-flexi-streams
+             sbcl-split-sequence
+             sbcl-alexandria
+             sbcl-trivial-gray-streams))
       (native-inputs
-       `(("fiveam" ,sbcl-fiveam)
-         ("cxml" ,sbcl-cxml)
-         ("cxml-rng" ,sbcl-cxml-rng)
-         ("xpath" ,sbcl-xpath)))
+       (list sbcl-fiveam sbcl-cxml sbcl-cxml-rng sbcl-xpath))
       (home-page "https://github.com/ruricolist/fxml")
       (synopsis "XML parser and serializer in Common Lisp")
       (description
@@ -20069,7 +19814,7 @@ well as standard genetic algorithms.")
          ("parse-number" ,sbcl-parse-number)
          ("puri" ,sbcl-puri)))
       (native-inputs
-       `(("lift" ,sbcl-lift)))
+       (list sbcl-lift))
       (home-page "https://github.com/archimag/data-sift")
       (synopsis
        "Common Lisp library for validation and transformation of string data")
@@ -20147,7 +19892,7 @@ library inspired by @code{cl-data-format-validation} and WTForms validators.")
           (base32 "1vyklyh99712zsll4qi0m4mm8yb1nz04403vl8i57bjv5p5max49"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (home-page "https://github.com/jorgetavares/zsort")
       (synopsis "Collection of portable sorting algorithms in Common Lisp")
       (description
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 95443a3573..8c1a5f90a0 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
@@ -48,6 +48,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
@@ -67,20 +68,21 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages m4)
-  #:use-module (gnu packages maths)
-  #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages libffcall)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libsigsegv)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages tex)
-  #:use-module (gnu packages tls)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
   #:use-module (ice-9 match))
@@ -129,33 +131,52 @@ Definition Facility.")
     (license license:expat)))
 
 (define-public gcl
-  (let ((commit "d3335e2b3deb63f930eb0328e9b05377744c9512")
-        (revision "2")) ;Guix package revision
+  (let ((commit "ff7ef981765cc0efdb4b1db27c292f5c11a72753")
+        (revision "3")) ;Guix package revision
     (package
       (name "gcl")
-      (version (string-append "2.6.12-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "2.6.12" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://git.savannah.gnu.org/r/gcl.git")
                (commit commit)))
-         (file-name (string-append "gcl-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
-          (base32 "05v86lhvsby05nzvcd3c4k0wljvgdgd0i6arzd2fx1yd67dl6fgj"))))
+          (base32 "0z64fxxcaial2i1s1hms8r095dm1ff3wd8ivwdx894a3yln9c0an"))))
       (build-system gnu-build-system)
       (arguments
        `(#:parallel-build? #f  ; The build system seems not to be thread safe.
          #:test-target "ansi-tests/test_results"
-         #:configure-flags '("--enable-ansi") ; required for use by the maxima package
-         #:make-flags (list
-                       (string-append "GCL_CC=" (assoc-ref %build-inputs "gcc")
-                                      "/bin/gcc")
-                       (string-append "CC=" (assoc-ref %build-inputs "gcc")
-                                      "/bin/gcc"))
+         #:configure-flags ,#~(list
+                               "--enable-ansi" ; required by the maxima package
+                               (string-append "CFLAGS=-I"
+                                              #$(this-package-input "libtirpc")
+                                              "/include/tirpc")
+                               (string-append "LDFLAGS=-L"
+                                              #$(this-package-input "libtirpc")
+                                              "/lib")
+                               "LIBS=-ltirpc")
+         #:make-flags ,#~(list
+                          (string-append "GCL_CC=" #$gcc "/bin/gcc")
+                          (string-append "CC="#$gcc "/bin/gcc"))
          #:phases
          (modify-phases %standard-phases
+           (add-after 'unpack 'realpath-workaround
+             ;; Calls to the realpath function can set errno even if the return
+             ;; value of the function indicates that there is no error, which
+             ;; make massert consider that there was an error.
+             (lambda _
+               (substitute* "gcl/o/main.c"
+                 (("massert\\(realpath\\(s,o\\)\\);" all)
+                  "massert((realpath(s, o) != NULL) && ((errno = 0) == 0));"))))
+           (add-after 'unpack 'fix-makefile
+             ;; The "final" target doesn't exist.
+             (lambda _
+               (substitute* "gcl/makefile"
+                 (("\\$\\(MAKE\\) -C \\$\\(PORTDIR\\) final")
+                  "$(MAKE) -C $(PORTDIR)"))))
            (add-before 'configure 'pre-conf
              (lambda* (#:key inputs #:allow-other-keys)
                (chdir "gcl")
@@ -210,11 +231,9 @@ Definition Facility.")
            ;; https://www.ma.utexas.edu/pipermail/maxima/2008/009769.html
            (delete 'strip))))
       (inputs
-       `(("gmp" ,gmp)
-         ("readline" ,readline)))
+       (list bash-minimal gmp libtirpc readline))
       (native-inputs
-       `(("m4" ,m4)
-         ("texinfo" ,texinfo)))
+       (list m4 texinfo))
       (home-page "https://www.gnu.org/software/gcl/")
       (synopsis "A Common Lisp implementation")
       (description "GCL is an implementation of the Common Lisp language.  It
@@ -239,9 +258,7 @@ interface to the Tk widget system.")
     (build-system gnu-build-system)
     ;; src/configure uses 'which' to confirm the existence of 'gzip'.
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)
-       ("which" ,which)
-       ("texinfo" ,texinfo)))
+     (list cl-asdf which texinfo))
     ;; When ECL is embedded in a program that wants to use Common Lisp as an
     ;; extension language, libgmp, libatomic-ops, libgc and libffi must be
     ;; present when compiling the program because they are required by ECL's
@@ -249,10 +266,7 @@ interface to the Tk widget system.")
     ;; Therefore we put these libraries in 'propagated-inputs' instead
     ;; of 'inputs'.
     (propagated-inputs
-     `(("gmp" ,gmp)
-       ("libatomic-ops" ,libatomic-ops)
-       ("libgc" ,libgc)
-       ("libffi" ,libffi)))
+     (list gmp libatomic-ops libgc libffi))
     (arguments
      `(#:configure-flags '("--without-rt")
        ;; FIXME: As of version 20.4.24, we pass 17995 tests and fail 7.
@@ -342,11 +356,8 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
         (base32 "0k2dmgl0miz3767iks4p0mvp6xw0ysyxhjpklyh11j010rmh6hqb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)))
-    (inputs `(("libffcall" ,libffcall)
-              ("ncurses" ,ncurses)
-              ("readline" ,readline)
-              ("libsigsegv" ,libsigsegv)))
+     (list cl-asdf))
+    (inputs (list libffcall ncurses readline libsigsegv))
     (arguments
      `(#:configure-flags '(,@(if (string-prefix? "armhf-linux"
                                                  (or (%current-system)
@@ -447,7 +458,7 @@ an interpreter, a compiler, a debugger, and much more.")
        ("ed" ,ed)
        ("inetutils" ,inetutils)         ;for hostname(1)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo)))
        ("which" ,which)
        ("zlib" ,zlib)))
     (arguments
@@ -519,10 +530,6 @@ an interpreter, a compiler, a debugger, and much more.")
                  (("\\(deftest grent\\.[12]" all)
                   (string-append "#+nil ;disabled by Guix\n" all))))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
@@ -642,8 +649,7 @@ statistical profiler, a code coverage tool, and many other extensions.")
                 "0x4bjx6cxsjvxyagijhlvmc7jkyxifdvz5q5zvz37028va65243c")
                (_ "0ll017ajcfsyx8f7zsy4394y8xxvz40iz0gcsmznp0n3mf0xi67c"))))))))
     (native-inputs
-     `(("cl-asdf" ,cl-asdf)
-       ("m4" ,m4)))
+     (list cl-asdf m4))
     (arguments
      `(#:tests? #f                      ;no 'check' target
        #:modules ((ice-9 match)
@@ -772,7 +778,7 @@ interface.")
                                "X_EXTRA_LIBS=-lfontconfig"
                                "--with-x")
        #:tests? #f)) ; No make check.
-    (native-inputs `(("intltool" ,intltool)))
+    (native-inputs (list intltool))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("sdl" ,sdl)
@@ -838,9 +844,9 @@ libraries for Machine Learning, Neural Nets and statistical estimation.")
                  (install-file "mdli" bin)
                  #t))))))
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (inputs
-       `(("libgc" ,libgc)))
+       (list libgc))
       (synopsis "Interpreter for the MIT Design Language (MDL)")
       (description "MDL (the MIT Design Language) is a descendant of Lisp.  It
 was originally developed in 1971 on the PDP-10 computer under the Incompatible
@@ -1108,8 +1114,7 @@ including a built-in database engine and a GUI system.")
        (inherit picolisp32)
        (name "picolisp")
        (native-inputs
-        `(("picolisp32" ,picolisp32)
-          ("which" ,which)))
+        (list picolisp32 which))
        (arguments
         (substitute-keyword-arguments (package-arguments picolisp32)
           ((#:system _ "") (%current-system))
@@ -1209,12 +1214,11 @@ assembler, PEG) is less than 1MB.")
        (modify-phases %standard-phases
          (add-before 'install 'fix-utils-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((coreutils (string-append (assoc-ref inputs "coreutils") "/bin/"))
-                    (cat (string-append coreutils "cat"))
-                    (paste (string-append coreutils "paste"))
-                    (sort (string-append coreutils "sort"))
-                    (basename (string-append coreutils "basename"))
-                    (sed (string-append (assoc-ref inputs "sed") "/bin/sed")))
+             (let* ((cat (search-input-file inputs "/bin/cat"))
+                    (paste (search-input-file inputs "/bin/paste"))
+                    (sort (search-input-file inputs "/bin/sort"))
+                    (basename (search-input-file inputs "/bin/basename"))
+                    (sed (search-input-file inputs "/bin/sed")))
                (substitute* "lisp-repl-core-dumper"
                  (("\\$\\(basename") (string-append "$(" basename))
                  (("\\<cat\\>") cat)
@@ -1252,7 +1256,7 @@ and make for REPLs that start blazing fast.
         (base32 "020ipjfqa3l8skd97cj5kq837wgpj28ygfxnkv64cnjrlbnzh161"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("sbcl" ,sbcl)))
+     (list sbcl))
     (arguments
      `(#:tests? #f
        #:make-flags
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 617dfb6974..051bbfeab5 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -16,9 +16,12 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +42,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix memoization)
   #:use-module (guix utils)
@@ -51,7 +55,9 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages bootstrap)           ;glibc-dynamic-linker
+  #:use-module (gnu packages check)               ;python-lit
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages julia)               ;julia-patch
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages lua)
@@ -64,7 +70,10 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages xml)
-  #:export (system->llvm-target))
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+  #:export (make-lld-wrapper
+            system->llvm-target))
 
 (define* (system->llvm-target #:optional
                               (system (or (and=> (%current-target-system)
@@ -107,7 +116,7 @@ as \"x86_64-linux\"."
     (build-system cmake-build-system)
     (native-inputs (package-native-inputs llvm))
     (inputs
-     `(("llvm" ,llvm)))
+     (list llvm))
     (arguments
      `(;; Don't use '-g' during the build to save space.
        #:build-type "Release"
@@ -177,8 +186,7 @@ given PATCHES.  When TOOLS-EXTRA is given, it must point to the
              `(("clang-tools-extra" ,tools-extra))
              '())))
     (propagated-inputs
-     `(("llvm" ,llvm)
-       ("clang-runtime" ,clang-runtime)))
+     (list llvm clang-runtime))
     (arguments
      `(#:configure-flags
        (list "-DCLANG_INCLUDE_TESTS=True"
@@ -492,20 +500,37 @@ output), and Binutils.")
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
     (native-inputs
-     `(("python" ,python)
+     `(("python" ,python-wrapper)
        ("perl"   ,perl)))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (propagated-inputs
-     `(("zlib" ,zlib)))                 ;to use output from llvm-config
+     (list zlib))                 ;to use output from llvm-config
     (arguments
-     `(#:configure-flags '("-DCMAKE_SKIP_BUILD_RPATH=FALSE"
-                           "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
-                           "-DBUILD_SHARED_LIBS:BOOL=TRUE"
-                           "-DLLVM_ENABLE_FFI:BOOL=TRUE"
-                           "-DLLVM_REQUIRES_RTTI=1" ; For some third-party utilities
-                           "-DLLVM_INSTALL_UTILS=ON") ; Needed for rustc.
-
+     ;; TODO(core-updates): Unconditionally use quasiquote
+     `(#:configure-flags
+       ,#~(#$(if (%current-target-system)
+                 #~quasiquote
+                 #~quote)
+           ;; These options are required for cross-compiling LLVM according to
+           ;; https://llvm.org/docs/HowToCrossCompileLLVM.html.
+           (#$@(if (%current-target-system)
+                   #~(,(string-append "-DLLVM_TABLEGEN="
+                                      #+(file-append this-package
+                                                     "/bin/llvm-tblgen"))
+                      #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
+                                       (%current-target-system))
+                      #$(string-append "-DLLVM_TARGET_ARCH="
+                                       (system->llvm-target))
+                      #$(string-append "-DLLVM_TARGETS_TO_BUILD="
+                                       (system->llvm-target)))
+                   #~())
+            "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
+            "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
+            "-DBUILD_SHARED_LIBS:BOOL=TRUE"
+            "-DLLVM_ENABLE_FFI:BOOL=TRUE"
+            "-DLLVM_REQUIRES_RTTI=1" ; For some third-party utilities
+            "-DLLVM_INSTALL_UTILS=ON")) ; Needed for rustc.
        ;; Don't use '-g' during the build, to save space.
        #:build-type "Release"
        #:phases
@@ -571,11 +596,7 @@ of programming tools as well as libraries with equivalent functionality.")
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))
-    (native-inputs
-     `(;; TODO: Switch to Python 3 in the next rebuild cycle.
-       ("python" ,python-2)
-       ("perl"   ,perl)))))
+        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))))
 
 (define-public clang-runtime-11
   (clang-runtime-from-llvm
@@ -601,23 +622,23 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public llvm-10
   (package
     (inherit llvm-11)
-    (version "10.0.0")
+    (version "10.0.1")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "1pwgm6cr0xr5a0hrbqs1zvsvvjvy0yq1y47c96804wcs795s90yz"))))))
+        "1wydhbp9kyjp5y0rc627imxgkgqiv3dfirbqil9dgpnbaw5y7n65"))))))
 
 (define-public clang-runtime-10
   (clang-runtime-from-llvm
    llvm-10
-   "0x9c531k6ww21s2mkdwqx1vbdjmx6d4wmfb8gdbj0wqa796sczba"))
+   "1yjqjri753w0fzmxcyz687nvd97sbc9rsqrxzpq720na47hwh3fr"))
 
 (define-public clang-10
   (clang-from-llvm llvm-10 clang-runtime-10
-                   "08fbxa2a0kr3ni35ckppj0kyvlcyaywrhpqwcdrdy0z900mhcnw8"
+                   "091bvcny2lh32zy8f3m9viayyhb2zannrndni7325rl85cwgr6pr"
                    #:patches '("clang-10.0-libc-search-path.patch")
                    #:tools-extra
                    (origin
@@ -626,7 +647,7 @@ of programming tools as well as libraries with equivalent functionality.")
                                              (package-version llvm-10)))
                      (sha256
                       (base32
-                       "074ija5s2jsdn0k035r2dzmryjmqxdnyg4xwvaqych2bazv8rpxc")))))
+                       "06n1yp638rh24xdxv9v2df0qajxbjz4w59b7dd4ky36drwmpi4yh")))))
 
 (define-public clang-toolchain-10
   (make-clang-toolchain clang-10))
@@ -825,6 +846,8 @@ of programming tools as well as libraries with equivalent functionality.")
      (origin
        (method url-fetch)
        (uri (llvm-uri "llvm" version))
+       (patches
+        (search-patches "llvm-3.6-fix-build-with-gcc-10.patch"))
        (sha256
         (base32
          "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn"))))))
@@ -859,14 +882,13 @@ of programming tools as well as libraries with equivalent functionality.")
              (add-after 'unpack 'find-rpc-includes
                (lambda* (#:key inputs #:allow-other-keys)
                  (setenv "CPATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPATH") "")))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPATH") "")))
                  (setenv "CPLUS_INCLUDE_PATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                 #t))))))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))))))))
       (inputs
        `(("libtirpc" ,libtirpc)
          ("llvm" ,llvm-3.5))))))
@@ -961,9 +983,9 @@ of programming tools as well as libraries with equivalent functionality.")
     (native-inputs
      ;; Note: check <https://bugs.llvm.org/show_bug.cgi?id=49228> to see
      ;; whether this is still necessary.
-     `(("libunwind-headers" ,libunwind-headers)))
+     (list libunwind-headers))
     (inputs
-     `(("llvm" ,llvm-12)))
+     (list llvm-12))
     (arguments
      `(#:build-type "Release"
        ;; TODO: Tests require the lit tool, which isn't installed by the LLVM
@@ -975,6 +997,46 @@ of programming tools as well as libraries with equivalent functionality.")
 components which highly leverage existing libraries in the larger LLVM Project.")
     (license license:asl2.0))) ; With LLVM exception
 
+(define* (make-lld-wrapper lld #:key lld-as-ld?)
+  "Return a LLD wrapper.  When LLD-AS-LD? is true, create a 'ld' symlink that
+points to 'lld'."
+  (package
+    (name (if lld-as-ld? "lld-as-ld-wrapper" "lld-wrapper"))
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (inputs (list (make-ld-wrapper "ld.lld-wrapper" #:binutils lld
+                                   #:linker "ld.lld")
+                  (make-ld-wrapper "lld-wrapper" #:binutils lld #:linker
+                                   "lld")))
+    (arguments
+     (list #:builder
+           #~(let ((ld.lld (string-append #$(this-package-input
+                                             "ld.lld-wrapper")
+                                          "/bin/ld.lld"))
+                   (lld (string-append #$(this-package-input "lld-wrapper")
+                                       "/bin/lld")))
+               (mkdir #$output)
+               (mkdir (string-append #$output "/bin"))
+               (symlink ld.lld (string-append #$output "/bin/ld.lld"))
+               (symlink lld (string-append #$output "/bin/lld"))
+               (when #$lld-as-ld?
+                 (symlink ld.lld (string-append #$output "/bin/ld"))))))
+    (synopsis "LLD linker wrapper")
+    (description "This is a linker wrapper for LLD; like @code{ld-wrapper}, it
+wraps the linker to add any missing @code{-rpath} flags, and to detect any
+misuse of libraries outside of the store.")
+    (home-page "https://www.gnu.org/software/guix/")
+    (license license:gpl3+)))
+
+;;; A LLD wrapper suitable to use with -fuse-ld and GCC or with Clang.
+(define-public lld-wrapper
+  (make-lld-wrapper lld))
+
+;;; A LLD wrapper that can be used as a (near) drop-in replacement to GNU ld.
+(define-public lld-as-ld-wrapper
+  (make-lld-wrapper lld #:lld-as-ld? #t))
+
 (define-public lldb
   (package
     (name "lldb")
@@ -989,8 +1051,7 @@ components which highly leverage existing libraries in the larger LLVM Project."
     (arguments
      `(#:configure-flags '("-DCMAKE_CXX_COMPILER=clang++")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (inputs
      `(("clang" ,clang-12)
        ("llvm" ,llvm-12)
@@ -1039,8 +1100,7 @@ which highly leverage existing libraries in the larger LLVM project.")
                        (getenv "CPLUS_INCLUDE_PATH"))
                #t))))))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)))
+     (list clang llvm))
     (home-page "https://libcxx.llvm.org")
     (synopsis "C++ standard library")
     (description
@@ -1061,8 +1121,7 @@ use with Clang, targeting C++11, C++14 and above.")
         (base32
          "0rzw4qvxp6qx4l4h9amrq02gp7hbg8lw4m0sy3k60f50234gnm3n"))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)))))
+     (list clang-6 llvm-6))))
 
 (define-public libcxxabi-6
   (package
@@ -1113,9 +1172,7 @@ use with Clang, targeting C++11, C++14 and above.")
                (install-file "../libcxxabi/include/__cxxabi_config.h" include-dir)
                (install-file "../libcxxabi/include/cxxabi.h" include-dir)))))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)
-       ("libcxx" ,libcxx-6)))
+     (list clang-6 llvm-6 libcxx-6))
     (home-page "https://libcxxabi.llvm.org")
     (synopsis "C++ standard library support")
     (description
@@ -1151,9 +1208,7 @@ standard C++ library.")
                        "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
                        (getenv "CPLUS_INCLUDE_PATH"))))))))
     (native-inputs
-     `(("clang" ,clang-6)
-       ("llvm" ,llvm-6)
-       ("libcxxabi" ,libcxxabi-6)))))
+     (list clang-6 llvm-6 libcxxabi-6))))
 
 (define-public libclc
   (package
@@ -1183,9 +1238,7 @@ standard C++ library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "libclc") #t)))))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)
-       ("python" ,python)))
+     (list clang llvm python))
     (home-page "https://libclc.llvm.org")
     (synopsis "Libraries for the OpenCL programming language")
     (description
@@ -1214,12 +1267,9 @@ requirements according to version 1.1 of the OpenCL specification.")
                            "-DOPENMP_TEST_CXX_COMPILER=clang++")
        #:test-target "check-libomp"))
     (native-inputs
-     `(("clang" ,clang)
-       ("llvm" ,llvm)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list clang llvm perl pkg-config))
     (inputs
-     `(("hwloc" ,hwloc "lib")))
+     (list `(,hwloc "lib")))
     (home-page "https://openmp.llvm.org")
     (synopsis "OpenMP run-time support library")
     (description
@@ -1232,14 +1282,14 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
 (define-public python-llvmlite
   (package
     (name "python-llvmlite")
-    (version "0.34.0")
+    (version "0.37.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "llvmlite" version))
        (sha256
         (base32
-         "0qqzs6h34002ig2jn31vk08q9hh5kn84lhmv4bljz3yakg8y0gph"))))
+         "05avhsvdcqh8wfpblx16qslfq3masqcbkfyn8p3c13h1rmqbi4k3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1258,69 +1308,124 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.")
                                                    "binding/libllvmlite.so")))
                (substitute* "llvmlite/binding/ffi.py"
                  (("_lib_name = get_library_name\\(\\)")
-                  (format #f "_lib_name = ~s" libllvmlite.so)))
-               #t)))
+                  (format #f "_lib_name = ~s" libllvmlite.so))))))
          (add-after 'unpack 'skip-failing-tests
            (lambda _
              (substitute* "llvmlite/tests/test_binding.py"
                (("    def test_libm\\(self\\).*" all)
-                (string-append "    @unittest.skip('Fails on Guix')\n" all)))
-             #t))
+                (string-append "    @unittest.skip('Fails on Guix')\n" all)))))
          (add-before 'build 'set-compiler/linker-flags
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((llvm (assoc-ref inputs "llvm")))
                ;; Refer to ffi/Makefile.linux.
                (setenv "CPPFLAGS" "-fPIC")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath="
-                                                llvm "/lib"))
-               #t))))))
+                                                llvm "/lib"))))))))
     (inputs
-     `(("llvm"
-        ,(let* ((patches-commit "061ab39e1d4591f3aa842458252a19ad01858167")
-                (patch-uri (lambda (name)
-                             (string-append
-                              "https://raw.githubusercontent.com/numba/"
-                              "llvmlite/" patches-commit "/conda-recipes/"
-                              name)))
-                (patch-origin (lambda (name hash)
-                                (origin
-                                  (method url-fetch)
-                                  (uri (patch-uri name))
-                                  (sha256 (base32 hash)))))
-                (arch-independent-patches
-                 (list
-                  (patch-origin
-                   "partial-testing.patch"
-                   "1cwy4jsmijd838q0bylxl77vrwrb7ksijfly5062ay32303jmj86")
-                  (patch-origin
-                   "0001-Revert-Limit-size-of-non-GlobalValue-name.patch"
-                   "0n4k7za0smx6qwdipsh6x5lm7bfvzzb3p9r8q1zq1dqi4na21295"))))
-           (if (string=? "aarch64-linux" (%current-system))
-               (package
-                 (inherit llvm-9)
-                 (source
-                  (origin
-                    (inherit (package-source llvm-9))
-                    (patches
-                     `(,(patch-origin
-                         "intel-D47188-svml-VF_LLVM9.patch"
-                         "1f9ld7wc8bn4gbvdsmk07w1rq371h42vy05rxsq9a22f57rljqbd")
-                       ,@arch-independent-patches
-                       ,@(origin-patches (package-source llvm-9)))))))
-               (package
-                 (inherit llvm-10)
-                 (source
-                  (origin
-                    (inherit (package-source llvm-10))
-                    (patches
-                     `(,(patch-origin
-                         "intel-D47188-svml-VF.patch"
-                         "0n46qjwfl7i12bl7wp0cyxl277axfvaaz5lxx5kdlgwjcpa582dg")
-                       ,(patch-origin
-                         "expect-fastmath-entrypoints-in-add-TLI-mappings.ll.patch"
-                         "0jxhjkkwwi1cy898l2n57l73ckpw0v73lqnrifp7r1mwpsh624nv")
-                       ,@arch-independent-patches
-                       ,@(origin-patches (package-source llvm-10))))))))))))
+     (list (let* ((patches-commit
+                                 "a4a19e8af2c5ef9b9901f20193e4be070726da97") (
+                                                                          patch-uri (
+                                                                                lambda (
+                                                                                  name)
+                                                                                  (
+                                                                                  string-append
+                                                                                               "https://raw.githubusercontent.com/numba/"
+                                                                                               "llvmlite/"
+                                                                                               patches-commit
+                                                                                               "/conda-recipes/"
+                                                                                               name)))
+                                                                          (
+                                                                          patch-origin (
+                                                                                      lambda (
+                                                                                           name
+                                                                                             hash)
+                                                                                           (
+                                                                                           origin (
+                                                                                                 method
+                                                                                                      url-fetch)
+                                                                                                 (
+                                                                                                 uri (
+                                                                                                    patch-uri
+                                                                                                            name))
+                                                                                                 (
+                                                                                                 sha256 (
+                                                                                                       base32
+                                                                                                            hash)))))
+                                                                          (
+                                                                          arch-independent-patches (
+                                                                                                  list (
+                                                                                                     patch-origin
+                                                                                                               "partial-testing.patch"
+                                                                                                               "0g3nkci87knvmn7piqhmh4bcc65ff8r921cvfcibyiv65klv3syg")
+                                                                                                     (
+                                                                                                     patch-origin
+                                                                                                                 "0001-Revert-Limit-size-of-non-GlobalValue-name.patch"
+                                                                                                                 "0n4k7za0smx6qwdipsh6x5lm7bfvzzb3p9r8q1zq1dqi4na21295"))))
+                 (package (inherit llvm-11)
+                          (source (origin (inherit (package-source
+                                                                   llvm-11))
+                                          (patches (if (string=?
+                                                                 "aarch64-linux"
+                                                                 (
+                                                                 %current-system))
+                                                       `(,(patch-origin
+                                                                     "intel-D47188-svml-VF_LLVM9.patch"
+                                                                     "0gnnlfxr8p1a7ls93hzcpfqpa8r0icypfwj8l9cmkslq5sz8p64r") (
+                                                                                                                           unquote-splicing
+                                                                                                                                         arch-independent-patches)
+                                                                                                                           (
+                                                                                                                           unquote-splicing (
+                                                                                                                                           origin-patches (
+                                                                                                                                                        package-source
+                                                                                                                                                                    llvm-11))))
+                                                       `(,(patch-origin
+                                                                     "intel-D47188-svml-VF.patch"
+                                                                     "0gnnlfxr8p1a7ls93hzcpfqpa8r0icypfwj8l9cmkslq5sz8p64r") ,(
+                                                                                                                           patch-origin
+                                                                                                                                   "expect-fastmath-entrypoints-in-add-TLI-mappings.ll.patch"
+                                                                                                                                   "0jxhjkkwwi1cy898l2n57l73ckpw0v73lqnrifp7r1mwpsh624nv")
+                                                                                                                           (
+                                                                                                                           unquote-splicing
+                                                                                                                                           arch-independent-patches)
+                                                                                                                           (
+                                                                                                                           unquote-splicing (
+                                                                                                                                           origin-patches (
+                                                                                                                                                        package-source
+                                                                                                                                                                    llvm-11))))))))
+                          (arguments (substitute-keyword-arguments (
+                                                                   package-arguments
+                                                                                  llvm-11)
+                                                                   ((#:phases
+                                                                             phases) `(
+                                                                                    modify-phases ,
+                                                                                              phases
+                                                                                              (
+                                                                                              add-after '
+                                                                                                       unpack
+                                                                                                       '
+                                                                                                       patch-round-two
+                                                                                                       ;; We have to do the patching in two rounds because we can't
+                                                                                                       ;; pass '-p1' and '-p2' in the source field.
+                                                                                                       (
+                                                                                                       lambda* (
+                                                                                                              #:key
+                                                                                                                  inputs
+                                                                                                                  #:allow-other-keys)
+                                                                                                              (
+                                                                                                              invoke
+                                                                                                                    "patch"
+                                                                                                                    (
+                                                                                                                    assoc-ref
+                                                                                                                             inputs
+                                                                                                                             "llvm_11_consecutive_registers")
+                                                                                                                    "-p2")))))))
+                          (native-inputs `(("llvm_11_consecutive_registers" ,(
+                                                                          patch-origin
+                                                                               "llvm_11_consecutive_registers.patch"
+                                                                               "04msd34dnpr3lpss0pam3mckwnvzrab266z6sml1hya0akv0m3f3")) (
+                                                                                                                                    unquote-splicing (
+                                                                                                                                                package-native-inputs
+                                                                                                                                                                llvm-11))))))))
     (home-page "https://llvmlite.pydata.org")
     (synopsis "Wrapper around basic LLVM functionality")
     (description
@@ -1354,7 +1459,7 @@ setup(name=\"clang\", packages=[\"clang\"])\n")))))
                         (substitute* "clang/cindex.py"
                           (("libclang\\.so")
                            (string-append clang "/lib/libclang.so")))))))))
-    (inputs `(("clang" ,clang)))
+    (inputs (list clang))
     (synopsis "Python bindings to libclang")))
 
 (define-public python-clang-10
@@ -1372,7 +1477,7 @@ setup(name=\"clang\", packages=[\"clang\"])\n")))))
     (name "emacs-clang-format")
     (build-system emacs-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1396,7 +1501,7 @@ C/C++/Obj-C code according to a set of style options, see
     (name "emacs-clang-rename")
     (build-system emacs-build-system)
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1412,6 +1517,11 @@ C/C++/Obj-C code according to a set of style options, see
     (description "This package renames every occurrence of a symbol at point
 using @code{clang-rename}.")))
 
+
+;;;
+;;; LLVM variants.
+;;;
+
 (define make-ocaml-llvm
   ;; Make it a memoizing procedure so its callers below don't end up defining
   ;; two equal-but-not-eq "ocaml-llvm" packages for the default LLVM.
@@ -1438,15 +1548,11 @@ using @code{clang-rename}.")))
              (lambda _
                (invoke "cmake" "-P" "bindings/ocaml/cmake_install.cmake"))))))
       (inputs
-       `(("llvm" ,llvm)))
+       (list llvm))
       (native-inputs
-       `(("ocaml" ,ocaml)
-         ("ocaml-findlib" ,ocaml-findlib)
-         ("ocaml-ounit" ,ocaml-ounit)
-         ("python" ,python)))
+       (list ocaml ocaml-findlib ocaml-ounit python))
       (propagated-inputs
-       `(("ocaml-integers" ,ocaml-integers)
-         ("ocaml-ctypes" ,ocaml-ctypes)))
+       (list ocaml-integers ocaml-ctypes))
       (synopsis "OCaml bindings to LLVM")
       (description "This package contains the OCaml bindings distributed with
 LLVM."))))
@@ -1455,3 +1561,310 @@ LLVM."))))
 (define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9))
 (define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10))
 (define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11))
+
+(define-public llvm-julia
+  (package
+    (inherit llvm-11)
+    (name "llvm-julia")
+    (properties `((hidden? . #t)
+                  ,@(package-properties llvm-11)))
+    (source (origin
+              (inherit (package-source llvm-11))
+              ;; Those patches are inside the Julia source repo.
+              ;; They are _not_ Julia specific (https://github.com/julialang/julia#llvm)
+              ;; but they are required to build Julia.
+              ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
+              (patches
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm8-D34078-vectorize-fdiv"
+                       "19spqc3xsazn1xs9gpcgv9ldadfkv49rmc5khl7sf1dlmhgi4602")
+                     '("llvm-7.0-D44650"
+                       "1h55kkmkiisfj6sk956if2bcj9s0v6n5czn8dxb870vp5nccj3ir")
+                     '("llvm7-symver-jlprefix"
+                       "00ng32x6xhm9czczirn5r1q1mc1myad44fqhi061hwh1vb46dwgm")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm9-D50010-VNCoercion-ni"
+                       "1s1d3sjsiq4vxg7ncy5cz56zgy5vcq6ls3iqaiqkvr23wyryqmdx")
+                     '("llvm7-revert-D44485"
+                       "0f59kq3p3mpwsbmskypbi4zn01l6ig0x7v2rjp08k2r8z8m6fa8n")
+                     '("llvm-11-D75072-SCEV-add-type"
+                       "176xi1lnbnv2rcs05ywhyb7pd0xgmibayvwzksksg44wg2dh8mbx")
+                     '("llvm-julia-tsan-custom-as"
+                       "0awh40kf6lm4wn1nsjd1bmhfwq7rqj811szanp2xkpspykw9hg9s")
+                     '("llvm-D80101"
+                       "1gsdwmgmpbignvqyxcnlprj899259p3dvdznlncd84ss445qgq3j")
+                     '("llvm-D84031"
+                       "0nks9sbk7p0r5gyr0idrmm93a5fmdai8kihz9532dx4zhcvvqbjc")
+                     '("llvm-10-D85553"
+                       "1zjq7j9q2qp56hwkc8yc8f0z7kvam3j7hj8sb7qyd77r255ff78l")
+                     '("llvm-10-unique_function_clang-sa"
+                       "1jys9w2zqk3dasnxqh0qz5ij7rxi6mkgq9pqjsclmamr5169zyan")
+                     ;'("llvm-D88630-clang-cmake"
+                     ;  "0rs6s71nqnjkny7i69gqazhqj5jqfdr0bkxs2v5a55sfx8fa1k54")
+                     '("llvm-11-D85313-debuginfo-empty-arange"
+                       "1f672d5385xpgb8yrim8d3b7wg2z1l81agnshm1q61kdvjixqx32")
+                     '("llvm-11-D90722-rtdyld-absolute-relocs"
+                       "0kmnai229yyxkmpk9lxd180mcnhk2i8d87k2sg89gc8as18w10r6")
+                     '("llvm-invalid-addrspacecast-sink"
+                       "1n1b7j4s80vj7x5377aj9vyphmxx1q6bm0chhkxp6zsy3mx3g2ry")
+                     '("llvm-11-D92906-ppc-setjmp"
+                       "0cmd4dsblp7a8m03j16dqxws0ijh55zf4jzzxmj341qxa1gamdp9")
+                     '("llvm-11-PR48458-X86ISelDAGToDAG"
+                       "0vwzvlhsdazhxg4gj8g2f00a4f8qc5cgac23w575xk3pgba1jh6y")
+                     '("llvm-11-D93092-ppc-knownbits"
+                       "1748bypsc7c9lbs3fnkv0kwvch6bn85kj98j4jdaz254ig0wa6xj")
+                     '("llvm-11-D93154-globalisel-as"
+                       "1k5wd4z3pa7zj0gyjkif7viqj906dhqlbb7dc95gig40nbxv6zpj")
+                     '("llvm-11-ppc-half-ctr"
+                       "0piywisfz6cmw3133kz7vzhiqflq2y7igakqxlym0gi8pqylv7w9")
+                     '("llvm-11-ppc-sp-from-bp"
+                       "1wmg3485cx5f9pbykyl3jibk1wwv4w1x30hl4jyfndzr2yh8azf9")
+                     '("llvm-rGb498303066a6-gcc11-header-fix"
+                       "0hkd4rwhvh8g2yh13g29wiwnjpv2yd1hdyiv1ryw8izl25bz9c67")
+                     '("llvm-11-D94813-mergeicmps"
+                       "0cmy0ywkgyrdcvr9bd6pd912lyd4gcsrib4z0v05dwgcdxhk7y29")
+                     '("llvm-11-D94980-CTR-half"
+                       "1yf8cxib3z8hz7zi9n6v2g2c6vpfr4slq9hpx8m8yq8f1jbyw3fw")
+                     '("llvm-11-D94058-sext-atomic-ops"
+                       "1x6p6k6q651z5jcqxx8vj17cxnv196mka7mwn7dpp6c23lwgfdpb")
+                     '("llvm-11-D96283-dagcombine-half"
+                       "0lv4iq2f8qrcz1xyxfic3bcr5p0aqam3a7c6pp6fnw3riixm096k"))))
+              (patch-flags '("-p1"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments llvm-11)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-round-two
+             ;; We have to do the patching in two rounds because we can't
+             ;; pass '-p1' and '-p2' in the source field.
+             (lambda* (#:key inputs #:allow-other-keys)
+               (map (lambda (patchname)
+                      (invoke "patch" patchname "-p2"))
+                    (list "llvm-11-AArch64-FastIsel-bug"
+                          "llvm-11-D97435-AArch64-movaddrreg"
+                          "llvm-11-D97571-AArch64-loh"
+                          "llvm-11-aarch64-addrspace"))))))
+       ((#:build-type _) "Release")
+       ((#:configure-flags flags)
+        `(list
+           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
+           ;; Julia insists on it, nothing more.  This reduces build times and
+           ;; disk usage.
+           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
+           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
+
+           "-DLLVM_INSTALL_UTILS=ON"
+           "-DLLVM_BUILD_TESTS=ON"
+           "-DLLVM_ENABLE_FFI=ON"
+           "-DLLVM_ENABLE_RTTI=ON"
+           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
+           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
+           ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
+           "-DLLVM_ENABLE_DUMP=ON"
+           "-DLLVM_LINK_LLVM_DYLIB=ON"
+           "-DLLVM_VERSION_SUFFIX:STRING=jl"))))
+    (inputs
+     (append
+       (package-inputs llvm-11)
+       `(("llvm-11-AArch64-FastIsel-bug"
+          ,(julia-patch "llvm-11-AArch64-FastIsel-bug"
+                        "1m2vddj1mw4kbij8hbrx82piyy6bvr2x7wwdnlxfaqcm72ipzyh9"))
+         ("llvm-11-D97435-AArch64-movaddrreg"
+          ,(julia-patch "llvm-11-D97435-AArch64-movaddrreg"
+                        "10jnavq9ljkj7j2gqj2zd1pwqpqb5zs3zp9h96pmz0djbmxwa86y"))
+         ("llvm-11-D97571-AArch64-loh"
+          ,(julia-patch "llvm-11-D97571-AArch64-loh"
+                        "128zcbg1w1j7hngsf7z1a7alc6lig6l2rqgjp6i8nk3k3f842v6n"))
+         ("llvm-11-aarch64-addrspace"
+          ,(julia-patch "llvm-11-aarch64-addrspace"
+                        "0ckbzgfirxrf2d5bpinpngp7gnilbjrk0cbdfyl3h6f5v6i6xj6m")))))))
+
+(define %cling-version "0.9")
+
+(define llvm-cling             ;LLVM 9 with approximately 10 patches for cling
+  (let ((base llvm-9))
+    (package/inherit base
+      (name "llvm-cling")
+      (source
+       (origin
+         (inherit (package-source base))
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://root.cern/git/llvm.git")
+               (commit (string-append "cling-v" %cling-version))))
+         (file-name (git-file-name "llvm-cling" %cling-version))
+         (sha256
+          (base32
+           "0y3iwv3c9152kybmdrwvadggjs163r25h7rmlxzr3hfpr463pnwf"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; The source is missing an include directive (see:
+          ;; https://github.com/vgvassilev/cling/issues/219).
+          '(substitute* "utils/benchmark/src/benchmark_register.h"
+             (("^#include <vector>.*" all)
+              (string-append all "#include <limits>\n"))))))
+      (outputs '("out"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:configure-flags _ ''())
+          '(list "-DLLVM_PARALLEL_LINK_JOBS=1" ;cater to smaller build machines
+                 ;; Only enable compiler support for the host architecture to
+                 ;; save on build time.
+                 "-DLLVM_TARGETS_TO_BUILD=host;NVPTX"
+                 "-DLLVM_INSTALL_UTILS=ON"
+                 "-DLLVM_ENABLE_RTTI=ON"
+                 "-DLLVM_ENABLE_FFI=ON"
+                 "-DLLVM_BUILD_LLVM_DYLIB=ON"
+                 "-DLLVM_LINK_LLVM_DYLIB=ON"))
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (delete 'shared-lib-workaround)
+             (delete 'install-opt-viewer))))))))
+
+(define clang-cling-runtime
+  (let ((base clang-runtime-9))
+    (package/inherit base
+      (name "clang-cling-runtime")
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'install 'delete-static-libraries
+               ;; This reduces the size from 22 MiB to 4 MiB.
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (for-each delete-file (find-files out "\\.a$")))))))))
+      (inputs (modify-inputs (package-inputs base)
+                (replace "llvm" llvm-cling))))))
+
+(define clang-cling              ;modified clang 9 with ~ 60 patches for cling
+  (let ((base clang-9))
+    (package/inherit base
+      (name "clang-cling")
+      (source
+       (origin
+         (inherit (package-source base))
+         (method git-fetch)
+         (uri (git-reference
+               (url "http://root.cern/git/clang.git")
+               (commit (string-append "cling-v" %cling-version))))
+         (file-name (git-file-name "clang-cling" %cling-version))
+         (sha256
+          (base32
+           "128mxkwghss6589wvm6amzv183aq88rdrnfxjiyjcji5hx84vpby"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'install 'delete-static-libraries
+               ;; This reduces the size by half, from 220 MiB to 112 MiB.
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (for-each delete-file (find-files out "\\.a$")))))))))
+      (propagated-inputs
+       (modify-inputs (package-propagated-inputs base)
+         (replace "llvm" llvm-cling)
+         (replace "clang-runtime" clang-cling-runtime))))))
+
+(define-public cling
+  ;; The tagged v0.9 release doesn't build, so use the latest commit.
+  (let ((commit "d78d1a03fedfd2bf6d2b6ff295aca576d98940df")
+        (revision "1")
+        (version* "0.9"))
+    (package
+      (name "cling")
+      (version (git-version version* revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "http://root.cern/git/cling.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0lsbxv21b4qw11xkw9iipdpca64jjwwqxm0qf5v2cgdlibf8m8n9"))
+                ;; Patch submitted upstream here:
+                ;; https://github.com/root-project/cling/pull/433.
+                (patches (search-patches "cling-use-shared-library.patch"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:build-type "Release"         ;keep the build as lean as possible
+         #:tests? #f                    ;FIXME: 78 tests fail (out of ~200)
+         #:test-target "check-cling"
+         #:configure-flags
+         (list (string-append "-DCLING_CXX_PATH="
+                              (assoc-ref %build-inputs "gcc") "/bin/g++")
+               ;; XXX: The AddLLVM.cmake module expects LLVM_EXTERNAL_LIT to
+               ;; be a Python script, not a shell executable.
+               (string-append "-DLLVM_EXTERNAL_LIT="
+                              (assoc-ref %build-inputs "python-lit")
+                              "/bin/.lit-real"))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'set-version
+             (lambda _
+               (make-file-writable "VERSION")
+               (call-with-output-file "VERSION"
+                 (lambda (port)
+                   (format port "~a~%" ,version)))))
+           (add-after 'unpack 'patch-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "lib/Interpreter/CIFactory.cpp"
+                 (("\bsed\b")
+                  (which "sed"))
+                 ;; This ensures that the default C++ library used by Cling is
+                 ;; that of the compiler that was used to build it, rather
+                 ;; than that of whatever g++ happens to be on PATH.
+                 (("ReadCompilerIncludePaths\\(CLING_CXX_RLTV")
+                  (string-append "ReadCompilerIncludePaths(\""
+                                 (assoc-ref inputs "gcc") "/bin/g++\""))
+                 ;; Cling uses libclang's CompilerInvocation::GetResourcesPath
+                 ;; to resolve Clang's library prefix, but this fails on Guix
+                 ;; because it is relative to the output of cling rather than
+                 ;; clang (see:
+                 ;; https://github.com/root-project/cling/issues/434).  Fully
+                 ;; shortcut the logic in this method to return the correct
+                 ;; static location.
+                 (("static std::string getResourceDir.*" all)
+                  (string-append all
+                                 "    return std::string(\""
+                                 (assoc-ref inputs "clang-cling")
+                                 "/lib/clang/" ,(package-version clang-cling)
+                                 "\");")))
+               ;; Check for the 'lit' command for the tests, not 'lit.py'
+               ;; (see: https://github.com/root-project/cling/issues/432).
+               (substitute* "CMakeLists.txt"
+                 (("lit.py")
+                  "lit"))))
+           (add-after 'unpack 'adjust-lit.cfg
+             ;; See: https://github.com/root-project/cling/issues/435.
+             (lambda _
+               (substitute* "test/lit.cfg"
+                 (("config.llvm_tools_dir \\+ '")
+                  "config.cling_obj_root + '/bin"))))
+           (add-after 'install 'delete-static-libraries
+             ;; This reduces the size from 17 MiB to 5.4 MiB.
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (for-each delete-file (find-files out "\\.a$"))))))))
+      (native-inputs
+       (list python python-lit))
+      (inputs
+       (list clang-cling llvm-cling))
+      (home-page "https://root.cern/cling/")
+      (synopsis "Interactive C++ interpreter")
+      (description "Cling is an interactive C++17 standard compliant
+interpreter, built on top of LLVM and Clang.  Cling can be used as a
+read-eval-print loop (REPL) to assist with rapid application development.
+Here's how to print @samp{\"Hello World!\"} using @command{cling}:
+
+@example
+cling '#include <stdio.h>' 'printf(\"Hello World!\\n\");'
+@end example")
+      (license license:lgpl2.1+))))     ;for the combined work
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index 06a1905479..7e07f4dd67 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,7 +77,7 @@ staying as close to their API as is reasonable.")
 (define-public glog
   (package
     (name "glog")
-    (version "0.4.0")
+    (version "0.5.0")
     (home-page "https://github.com/google/glog")
     (source (origin
               (method git-fetch)
@@ -84,24 +85,12 @@ staying as close to their API as is reasonable.")
                                   (commit (string-append "v" version))))
               (sha256
                (base32
-                "1xd3maiipfbxmhc9rrblc5x52nxvkwxp14npg31y5njqvkvzax9b"))
+                "17014q25c99qyis6l3fwxidw6222bb269fdlr74gn7pzmzg4lvg3"))
               (file-name (git-file-name name version))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-signal-tests
-                    (lambda _
-                      ;; XXX: This test fails on non x86_64.  See e.g.
-                      ;; https://github.com/google/glog/issues/219 and
-                      ;; https://github.com/google/glog/issues/256.
-                      (substitute* "Makefile"
-                        (("\tsignalhandler_unittest_sh") "\t$(EMPTY)"))
-                      #t)))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)                             ;for tests
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list perl ;for tests
+           autoconf automake libtool))
     (synopsis "C++ logging library")
     (description
      "Google glog is a library that implements application-level logging.
@@ -124,10 +113,8 @@ command line.")
          "0wl2wm6p3pc0vkk33s7rzgcfvs9cwxfmlz997pdfhlw72r00l7s5"))))
     (build-system python-build-system)
     (inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-sockjs-tornado" ,python-sockjs-tornado)
-       ("python-tornado-http-auth" ,python-tornado-http-auth)
-       ("python-tornado" ,python-tornado)))
+     (list python-pyyaml python-sockjs-tornado python-tornado-http-auth
+           python-tornado))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -179,7 +166,7 @@ commands, displaying the results via a web interface.")
              #t))
          (delete 'configure))           ; no configure script
        #:tests? #f)) ; no test suite (make check just runs cppcheck)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "https://vanheusden.com/multitail/")
     (synopsis "Monitor multiple log files")
     (description
diff --git a/gnu/packages/logo.scm b/gnu/packages/logo.scm
index cf70910656..347c52e753 100644
--- a/gnu/packages/logo.scm
+++ b/gnu/packages/logo.scm
@@ -37,7 +37,7 @@
          "0cpyj1ji6hjy7zzz05672f0j6fr0mwpc1y3sq36hhkv2fkpidw22"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/lout.scm b/gnu/packages/lout.scm
index ac66b4ecfc..a9323fc4bb 100644
--- a/gnu/packages/lout.scm
+++ b/gnu/packages/lout.scm
@@ -38,7 +38,7 @@
     (build-system gnu-build-system)     ; actually, just a makefile
     (outputs '("out" "doc"))
     (native-inputs
-     `(("ghostscript" ,ghostscript)))
+     (list ghostscript))
     (arguments
      `(#:modules ((guix build utils)
                   (guix build gnu-build-system)
diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm
index b317902ee7..98bcdab468 100644
--- a/gnu/packages/lsof.scm
+++ b/gnu/packages/lsof.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,79 +32,76 @@
 
 (define-public lsof
   (package
-   (name "lsof")
-   (version "4.94.0")
-   (source
-    (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://github.com/lsof-org/lsof")
-            (commit version)))
-      (file-name (git-file-name name version))
-      (sha256
-       (base32 "0yxv2jg6rnzys49lyrz9yjb4knamah4xvlqj596y6ix3vm4k3chp"))
-      (patches (search-patches "lsof-fatal-test-failures.patch"))))
-   (build-system gnu-build-system)
-   (native-inputs
-    `(("groff" ,groff)                  ; for soelim
-      ("perl" ,perl)))
-   (arguments
-    `(#:phases
-      (modify-phases %standard-phases
-        (replace 'configure
-          (lambda _
-            (setenv "LSOF_CC" ,(cc-for-target))
-            (setenv "LSOF_MAKE" "make")
+    (name "lsof")
+    (version "4.94.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lsof-org/lsof")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0yxv2jg6rnzys49lyrz9yjb4knamah4xvlqj596y6ix3vm4k3chp"))
+       (patches (search-patches "lsof-fatal-test-failures.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list groff ; for soelim
+           perl))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (setenv "LSOF_CC" ,(cc-for-target))
+             (setenv "LSOF_MAKE" "make")
 
-            ;; By default, the makefile captures the output of 'uname -a'.
-            ;; Provide a fixed output instead to make builds reproducible.
-            (setenv "LSOF_SYSINFO"
-                    (string-append "GNU/" (utsname:sysname (uname))
-                                   " (GNU Guix)"))
+             ;; By default, the makefile captures the output of 'uname -a'.
+             ;; Provide a fixed output instead to make builds reproducible.
+             (setenv "LSOF_SYSINFO"
+                     (string-append "GNU/" (utsname:sysname (uname))
+                                    " (GNU Guix)"))
 
-            (invoke "./Configure" "linux")
-            #t))
-        (add-after 'configure 'patch-timestamps
-          (lambda _
-            (substitute* "Makefile"
-              (("`date`") "`date --date=@1`"))
-            #t))
-        (add-after 'build 'build-man-page
-          (lambda _
-            (with-output-to-file "lsof.8"
-              (lambda _ (invoke "soelim" "Lsof.8")))
-            #t))
-        (add-before 'check 'disable-failing-tests
-          (lambda _
-            (substitute* "tests/Makefile"
-              ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’.
-              (("(STDTST=.*) LTsock" _ prefix) prefix)
-              ;; Fails without access to a remote NFS server.
-              (("(OPTTST=.*) LTnfs"  _ prefix) prefix))
-            #t))
-        (replace 'check
-          (lambda* (#:key tests? #:allow-other-keys)
-            (when tests?
-              (with-directory-excursion "tests"
-                ;; Tests refuse to run on ‘unvalidated’ platforms.
-                (make-file-writable "TestDB")
-                (invoke "./Add2TestDB")
+             (invoke "./Configure" "linux")))
+         (add-after 'configure 'patch-timestamps
+           (lambda _
+             (substitute* "Makefile"
+               (("`date`") "`date --date=@1`"))))
+         (add-after 'build 'build-man-page
+           (lambda _
+             (with-output-to-file "lsof.8"
+               (lambda _ (invoke "soelim" "Lsof.8")))))
+         (add-before 'check 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/Makefile"
+               ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’.
+               (("(STDTST=.*) LTsock" _ prefix) prefix)
+               ;; LTnfs fails without access to a remote NFS server, and LTlock
+               ;; fails when run on a Btrfs file system (see:
+               ;; https://github.com/lsof-org/lsof/issues/152).
+               (("OPTTST=[[:space:]]*LTbigf LTdnlc LTlock LTnfs")
+                "OPTTST = LTbigf LTdnlc"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "tests"
+                 ;; Tests refuse to run on ‘unvalidated’ platforms.
+                 (make-file-writable "TestDB")
+                 (invoke "./Add2TestDB")
 
-                ;; The ‘standard’ tests suggest running ‘optional’ ones as well.
-                (invoke "make" "standard" "optional")))
-            #t))
-        (replace 'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (install-file "lsof" (string-append out "/bin"))
-              (install-file "lsof.8" (string-append out "/share/man/man8")))
-            #t)))))
-   (synopsis "Display information about open files")
-   (description
-    "Lsof stands for LiSt Open Files, and it does just that.
+                 ;; The ‘standard’ tests suggest running ‘optional’ ones as well.
+                 (invoke "make" "standard" "optional")))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (install-file "lsof" (string-append out "/bin"))
+               (install-file "lsof.8" (string-append out "/share/man/man8"))))))))
+    (synopsis "Display information about open files")
+    (description
+     "Lsof stands for LiSt Open Files, and it does just that.
 It lists information about files that are open by the processes running
 on the system.")
-   (license (license:fsf-free
-             "file://00FAQ"
-             "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
-   (home-page "https://people.freebsd.org/~abe/")))
+    (license (license:fsf-free
+              "file://00FAQ"
+              "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
+    (home-page "https://people.freebsd.org/~abe/")))
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 2d43bc979c..85def0d8f6 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -73,7 +73,7 @@
              (patches (search-patches "lua-pkgconfig.patch"
                                       "lua-liblua-so.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
+    (inputs (list readline))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -229,8 +229,7 @@ some projects.")))
              (invoke "lua" "tests/test.lua")
              (invoke "lua" "tests/test-lom.lua"))))))
     (inputs
-     `(("lua" ,lua)
-       ("expat" ,expat)))
+     (list lua expat))
     (home-page "https://matthewwild.co.uk/projects/luaexpat/")
     (synopsis "SAX XML parser based on the Expat library")
     (description "LuaExpat is a SAX XML parser based on the Expat library.")
@@ -273,7 +272,7 @@ some projects.")))
                (invoke "lua" "test/testsrvr.lua"))
              (invoke "lua" "test/testclnt.lua"))))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/")
     (synopsis "Socket library for Lua")
     (description "LuaSocket is a Lua extension library that is composed by two
@@ -323,7 +322,7 @@ handy.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (home-page "https://keplerproject.github.io/luafilesystem/index.html")
     (synopsis "File system library for Lua")
     (description "LuaFileSystem is a Lua library developed to complement the
@@ -379,8 +378,7 @@ directory structure and file attributes.")
                            (find-files "." "^[0-9].*\\.lua$"))))
              #t)))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (home-page "https://25thandclement.com/~william/projects/luaossl.html")
     (synopsis "OpenSSL bindings for Lua")
     (description "The luaossl extension module for Lua provides comprehensive,
@@ -427,8 +425,7 @@ binds OpenSSL's bignum, message digest, HMAC, cipher, and CSPRNG interfaces.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (propagated-inputs
      `(("lua-socket"
         ,(make-lua-socket
@@ -531,12 +528,11 @@ secure session between the peers.")
 
                (apply invoke "make" "check" make-flags)))))))
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)))
+     (list lua openssl))
     (propagated-inputs
-     `(("lua-ossl" ,lua-ossl)))
+     (list lua-ossl))
     (home-page "https://25thandclement.com/~william/projects/cqueues.html")
     (synopsis "Event loop for Lua using continuation queues")
     (description "The cqueues extension module for Lua implements an event loop
@@ -568,9 +564,9 @@ to be non-intrusive, composable, and embeddable within existing applications.")
         (base32 "0qc2d1riyr4b5a0gnsmdw2lz5pw65s4ac60hc34w3mmk9l6yg6nl"))))
     (build-system trivial-build-system)
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (propagated-inputs
-     `(("lua-filesystem" ,lua-filesystem)))
+     (list lua-filesystem))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -608,9 +604,9 @@ standard libraries.")
         (base32 "1h0cf7bp4am54r0j8lhjs2l1c7q5vz74ba0jvw9qdbaqimls46g8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (propagated-inputs
-     `(("lua-penlight" ,lua-penlight)))
+     (list lua-penlight))
     (arguments
      `(#:tests? #f                 ;tests must run after installation.
        #:phases
@@ -698,8 +694,8 @@ describing the commented declarations and functions.")
              (setenv "DISPLAY" ":1")
              #t)))))
     (native-inputs
-     `(("dbus" ,dbus)                   ;tests use 'dbus-run-session'
-       ("pkg-config" ,pkg-config)))
+     (list dbus ;tests use 'dbus-run-session'
+           pkg-config))
     (inputs
      `(("cairo" ,cairo)
        ("glib" ,glib)
@@ -752,7 +748,7 @@ Notable examples are GTK+, GStreamer and Webkit.")
                              (string-append out "/share/lua/" lua-version))
                #t))))
        #:test-target "test"))
-    (inputs `(("lua" ,lua)))
+    (inputs (list lua))
     (synopsis "Pattern-matching library for Lua")
     (description
      "LPeg is a pattern-matching library for Lua, based on Parsing Expression
@@ -804,8 +800,7 @@ Grammars (PEGs).")
                                     (or (getenv "CPATH") "")))
              #t)))))
     (inputs
-     `(("lua" ,lua)
-       ("libuv" ,libuv)))
+     (list lua libuv))
     (native-inputs
      `(("lua-compat"
         ,(origin
@@ -857,7 +852,7 @@ Grammars (PEGs).")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (inputs `(("lua" ,lua)))
+    (inputs (list lua))
     (home-page "https://bitop.luajit.org/index.html")
     (synopsis "Bitwise operations on numbers for Lua")
     (description
@@ -918,8 +913,7 @@ on numbers.")
                (chdir "./runner")
                (invoke "./test_runner")))))))
     (native-inputs
-     `(("lua" ,lua)
-       ("pkg-config" ,pkg-config)))
+     (list lua pkg-config))
     (home-page "https://github.com/jeremyong/Selene")
     (synopsis "Lua C++11 bindings")
     (description
@@ -1125,8 +1119,7 @@ shell command executions.")
               "1999bgrh52124a5g4qizav3x257ff2brjr855srpm1jv1nxzbygv"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      ;; Tests are disabled for now due to an issue that affecs guix:
+    `(;; Tests are disabled for now due to an issue that affecs guix:
       ;; <https://gitlab.com/emilua/emilua/-/issues/22>
       #:configure-flags
       (list "-Denable_http=true"
@@ -1134,26 +1127,26 @@ shell command executions.")
             "-Denable_manpages=false"
             "-Dversion_suffix=-guix1")))
    (native-inputs
-    `(("gcc" ,gcc-10) ; gcc-7 is too old for our C++17 needs
-      ("luajit-lua52-openresty" ,luajit-lua52-openresty)
-      ("pkg-config" ,pkg-config)
-      ("re2c" ,re2c)
-      ("xxd" ,xxd)))
+    (list gcc-10 ; gcc-7 is too old for our C++17 needs
+          luajit-lua52-openresty
+          pkg-config
+          re2c
+          xxd))
    (inputs
-    `(("boost" ,boost)
-      ("boost-static" ,boost-static)
-      ("fmt" ,fmt-7)
-      ;; LuaJIT has a 2GiB addressing limit[1] that has been fixed on OpenResty
-      ;; fork. Emilua is severely affected by this limit, so the upstream package
-      ;; is avoided. Emilua also depends on the -DLUAJIT_ENABLE_LUA52COMPAT
-      ;; configure flag[2] for some features to work (e.g. __pairs on HTTP
-      ;; headers).
-      ;;
-      ;; [1] <http://hacksoflife.blogspot.com/2012/12/integrating-luajit-with-x-plane-64-bit.html>
-      ;; [2] <http://luajit.org/extensions.html#lua52>
-      ("luajit-lua52-openresty" ,luajit-lua52-openresty)
-      ("ncurses" ,ncurses)
-      ("openssl" ,openssl)))
+    (list boost
+          boost-static
+          fmt-7
+          ;; LuaJIT has a 2GiB addressing limit[1] that has been fixed on OpenResty
+          ;; fork. Emilua is severely affected by this limit, so the upstream package
+          ;; is avoided. Emilua also depends on the -DLUAJIT_ENABLE_LUA52COMPAT
+          ;; configure flag[2] for some features to work (e.g. __pairs on HTTP
+          ;; headers).
+          ;;
+          ;; [1] <http://hacksoflife.blogspot.com/2012/12/integrating-luajit-with-x-plane-64-bit.html>
+          ;; [2] <http://luajit.org/extensions.html#lua52>
+          luajit-lua52-openresty
+          ncurses
+          openssl))
    (native-search-paths
     (list
      (search-path-specification
@@ -1193,11 +1186,11 @@ enabled.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "fennel"
                (("/usr/bin/env .*lua")
-                (string-append (assoc-ref inputs "lua") "/bin/lua")))))
+                (search-input-file inputs "/bin/lua")))))
          (delete 'check)
          (add-after 'install 'check
            (assoc-ref %standard-phases 'check)))))
-    (inputs `(("lua" ,lua)))
+    (inputs (list lua))
     (home-page "https://fennel-lang.org/")
     (synopsis "Lisp that compiles to Lua")
     (description
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index f81d7af3c4..e3cdd6a1c6 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -6,9 +6,10 @@
 ;;; Copyright © 2017 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 ison <ison@airmail.cc>
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,14 +77,13 @@
                (base32
                 "1rfira3lx8v6scz1aq69925j4vslpp36bmgrrzcfby2c60q2c155"))))
     (build-system gnu-build-system)
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("glib"       ,glib "bin") ; for gtester
-                     ("libtool"    ,libtool)
-                     ("menu-cache" ,menu-cache)
-                     ("pkg-config" ,pkg-config)
-                     ("vala"       ,vala)))
+    (inputs (list glib gtk+-2))
+    (native-inputs (list intltool
+                         `(,glib "bin") ; for gtester
+                         libtool
+                         menu-cache
+                         pkg-config
+                         vala))
     (synopsis "File management support (core library)")
     (description "LibFM provides file management functions built on top of
 Glib/GIO giving a higher-level API.")
@@ -94,10 +94,8 @@ Glib/GIO giving a higher-level API.")
   (package (inherit libfm)
     (name "libfm-extra")
     (arguments '(#:configure-flags '("--with-extra-only")))
-    (inputs `(("glib" ,glib)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("libtool"    ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list glib))
+    (native-inputs (list intltool libtool pkg-config))
     (synopsis "File management support (extra library)")
     (description "This package contains a stand-alone library which extends the
 libFM file management library.")))
@@ -114,9 +112,8 @@ libFM file management library.")))
        (sha256
         (base32 "0f4bjaamfxxdr9civvy55pa6vv9dx1hjs522gjbbgx7yp1cdh8kj"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE GTK+ theme switcher")
     (description "LXAppearance is a desktop-independent GTK+ theme switcher
 able to change themes, icons, and fonts used by GTK+ applications.")
@@ -148,10 +145,8 @@ able to change themes, icons, and fonts used by GTK+ applications.")
                (("(\"|')xrandr\"" _ match)
                 (string-append match (which "xrandr") "\"")))
              #t)))))
-    (inputs `(("gtk+" ,gtk+-2)
-              ("xrandr" ,xrandr)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 xrandr))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE monitor configuration tool")
     (description "LXRandR is a very basic monitor configuration tool.  It
 relies on the X11 resize-and-rotate (RandR) extension but doesn't aim to be a
@@ -175,9 +170,8 @@ or external monitor.")
                (base32
                 "0b2fxg8jjjpk219gh7qa18g45365598nd2bq7rrq0bdvqjdxy5i2"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE task manager")
     (description "LXTask is a lightweight task manager derived from Xfce task
 manager with all dependencies on Xfce removed.  LXTask is based on the GTK+
@@ -198,10 +192,8 @@ toolkit.  It allows users to monitor and control of running processes.")
                (base32
                 "1124pghrhnx6q4391ri8nvi6bsmvbj1dx81an08mird8jf2b2rii"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+-2)
-              ("vte"  ,vte/gtk+-2)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 vte/gtk+-2))
+    (native-inputs (list intltool pkg-config))
     (synopsis "LXDE terminal emulator")
     (description "LXTerminal is a VTE-based terminal emulator.  It supports
 multiple tabs and has only minimal dependencies thus being completely
@@ -225,7 +217,9 @@ performance, all instances of the terminal are sharing a single process.")
     (build-system gnu-build-system)
     (inputs `(("glib"  ,glib)
               ("libfm" ,libfm-extra)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-fcommon")))
     (synopsis "LXDE implementation of the freedesktop menu's cache")
     (description "Menu-cache is a library creating and utilizing caches to
 speed up the access to freedesktop.org defined application menus.")
@@ -245,15 +239,11 @@ speed up the access to freedesktop.org defined application menus.")
                (base32
                 "1xqc2k2jh165mm81xg0ghxx0ml1s3rhh4ndvbzkcri4kfhj7pjql"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+"   ,gtk+-2)
-              ("gvfs"   ,gvfs)          ; for trash and mount support
-              ("libfm"  ,libfm)
-              ("libx11" ,libx11)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("libtool"    ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+-2 gvfs ; for trash and mount support
+                  libfm libx11))
+    (native-inputs (list intltool libtool pkg-config))
     (propagated-inputs
-     `(("lxmenu-data" ,lxmenu-data)))   ; for "Open With..." application list
+     (list lxmenu-data))   ; for "Open With..." application list
     (synopsis "LXDE file manager")
     (description "PCMan is a lightweight GTK+ based file manager, compliant
 with freedesktop.org standard.")
@@ -293,33 +283,33 @@ with freedesktop.org standard.")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("bash" ,bash)
-       ("btrfs-progs" ,btrfs-progs)
-       ("cairo" ,cairo)
-       ("coreutils" ,coreutils)
-       ("curlftpfs" ,curlftpfs)
-       ("e2fsprogs" ,e2fsprogs)
-       ("eudev" ,eudev)
-       ("fakeroot" ,fakeroot)
-       ("ffmpegthumbnailer" ,ffmpegthumbnailer)
-       ("fsarchiver" ,fsarchiver)
-       ("fuseiso" ,fuseiso)
-       ("glib" ,glib)
-       ("gphotofs" ,gphotofs)
-       ("gtk+" ,gtk+)
-       ("ifuse" ,ifuse)
-       ("jmtpfs" ,jmtpfs)
-       ("ktsuss" ,ktsuss)
-       ("libx11" ,libx11)
-       ("lsof" ,lsof)
-       ("ntfs-3g" ,ntfs-3g)
-       ("pango" ,pango)
-       ("procps" ,procps)
-       ("shared-mime-info" ,shared-mime-info)
-       ("startup-notification" ,startup-notification)
-       ("udevil" ,udevil)
-       ("util-linux" ,util-linux)
-       ("wget" ,wget)))
+     (list bash
+           btrfs-progs
+           cairo
+           coreutils
+           curlftpfs
+           e2fsprogs
+           eudev
+           fakeroot
+           ffmpegthumbnailer
+           fsarchiver
+           fuseiso
+           glib
+           gphotofs
+           gtk+
+           ifuse
+           jmtpfs
+           ktsuss
+           libx11
+           lsof
+           ntfs-3g
+           pango
+           procps
+           shared-mime-info
+           startup-notification
+           udevil
+           util-linux
+           wget))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -370,8 +360,7 @@ with freedesktop.org standard.")
                #t)))
          (add-after 'patch-share-dirs 'patch-mime-dirs
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((mime (string-append (assoc-ref inputs "shared-mime-info")
-                                         "/share/mime")))
+             (let* ((mime (search-input-directory inputs "/share/mime")))
                (with-directory-excursion "src"
                  (substitute* '("mime-type/mime-type.c" "ptk/ptk-file-menu.c")
                    (("/usr(/local)?/share/mime") mime)))
@@ -398,10 +387,9 @@ with freedesktop.org standard.")
                 "terminal_su=/run/setuid-programs/su")
                (("#graphical_su=/usr/bin/gksu")
                 (string-append "graphical_su="
-                               (string-append (assoc-ref inputs "ktsuss")
-                                              "/bin/ktsuss"))))
-             #t)))
+                               (search-input-file inputs "/bin/ktsuss")))))))
        #:configure-flags (list
+                          "CFLAGS=-fcommon"
                           (string-append "--with-preferable-sudo="
                                          (assoc-ref %build-inputs "ktsuss")
                                          "/bin/ktsuss")
@@ -434,8 +422,7 @@ customizable menu system, and Bash integration.")
          "1f5sh2dvb3pdnjlcsyzq9543ck2jsqizkx3204cr22zm5s6j3qwz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (synopsis "Freedesktop.org desktop menus for LXDE")
     (description
      "Lxmenu-data provides files required to build freedesktop.org
@@ -457,7 +444,7 @@ menu spec-compliant desktop menus for LXDE.")
          "0v4i6x86fr2hbx4fb2si7y2qzmj7h6hcjwaifnin18r8kwwvgl73"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "LXDE default icon theme based on nuoveXT2")
     (description
      "Lxde-icon-theme provides an default icon theme for LXDE.")
@@ -489,14 +476,11 @@ menu spec-compliant desktop menus for LXDE.")
                                           "/bin/lxsession")))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("lxmenu-data" ,lxmenu-data)
-       ("lxde-icon-theme" ,lxde-icon-theme)))
+     (list pkg-config intltool lxmenu-data lxde-icon-theme))
     (inputs
-     `(("lxsession" ,lxsession)
-       ;; ("lxlock" ,lxlock) ;for 'lxde-screenlock.desktop'
-       ))
+     (list lxsession
+           ;; ("lxlock" ,lxlock) ;for 'lxde-screenlock.desktop'
+           ))
     (synopsis "Common files of the LXDE Desktop")
     (description
      "Lxde-common provides common files of the LXDE Desktop.")
@@ -517,10 +501,9 @@ menu spec-compliant desktop menus for LXDE.")
          "123f3yn4rp1w5b3n5aj3ad9snkxab29qkrs7bcvf5bx4cn57g3sf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+-2" ,gtk+-2)))
+     (list gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (synopsis "Tool for mouse and keyboard configuration in LXDE")
     (description
      "Lxinput provides a small program to configure keyboard and mouse
@@ -567,14 +550,13 @@ in LXDE.")
      `(("gtk+-2" ,gtk+-2)
        ("polkit" ,polkit)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("docbook-xsl" ,docbook-xsl)
-       ("vala" ,vala)
-
-       ;; For bootstrapping.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config
+           intltool
+           docbook-xsl
+           vala
+           ;; For bootstrapping.
+           autoconf
+           automake))
     (synopsis "Lightweight X11 session manager")
     (description
      "Lxsession provides an lightweight X11 session manager.")
@@ -618,14 +600,9 @@ in LXDE.")
        ("libx11" ,libx11)
        ("wireless-tools" ,wireless-tools)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("docbook-xml" ,docbook-xml)
-       ("gettext-minimal" ,gettext-minimal)))
+     (list pkg-config intltool docbook-xml gettext-minimal))
     (propagated-inputs
-     `(("lxmenu-data" ,lxmenu-data)
-       ("libfm" ,libfm)
-       ("menu-cache" ,menu-cache)))
+     (list lxmenu-data libfm menu-cache))
     (synopsis "X11 Desktop panel for LXDE")
     (description
      "Lxpanel provides an X11 desktop panel for LXDE.")
@@ -643,23 +620,23 @@ in LXDE.")
      ;; TODO:
      ;; lxshortcut, lxsession-edit
      ;; lxappearance-obconf
-     `(("menu-cache" ,menu-cache)
-       ("gpicview" ,gpicview)
-       ("leafpad" ,leafpad)
-       ("lxappearance" ,lxappearance)
-       ("lxde-icon-theme" ,lxde-icon-theme)
-       ("lxde-common" ,lxde-common)
-       ("lxmenu-data" ,lxmenu-data)
-       ("lxpanel" ,lxpanel)
-       ("lxrandr" ,lxrandr)
-       ("lxsession" ,lxsession)
-       ("libfm" ,libfm)
-       ("libfm-extra" ,libfm-extra)
-       ("lxtask" ,lxtask)
-       ("lxterminal" ,lxterminal)
-       ("pcmanfm" ,pcmanfm)
-       ("openbox" ,openbox)
-       ("obconf" ,obconf)))
+     (list menu-cache
+           gpicview
+           leafpad
+           lxappearance
+           lxde-icon-theme
+           lxde-common
+           lxmenu-data
+           lxpanel
+           lxrandr
+           lxsession
+           libfm
+           libfm-extra
+           lxtask
+           lxterminal
+           pcmanfm
+           openbox
+           obconf))
     (synopsis "Lightweight X11 Desktop Environment")
     (description
      "LXDE, which stands for Lightweight X11 Desktop Environment, is a
diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm
index 391d83b7c4..a0a3a0f15b 100644
--- a/gnu/packages/lxqt.scm
+++ b/gnu/packages/lxqt.scm
@@ -88,9 +88,9 @@
      ;; XXX: Tests require a dbus session and some icons.
      '(#:tests? #f))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "https://launchpad.net/libdbusmenu-qt")
     (synopsis "Qt implementation of the DBusMenu spec")
     (description "This library provides a Qt implementation of the DBusMenu
@@ -115,7 +115,7 @@ and import their menus over DBus.")
                            "--disable-static")))
     (native-inputs
      ;; For testing.
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.i-scream.org/libstatgrab/")
     (synopsis "Provides access to statistics about the system")
     (description "libstatgrab is a library that provides cross platform access
@@ -148,13 +148,12 @@ to statistics about the system on which it's run.")
        '("-DLXQT_DATA_DIR=/run/current-system/profile/share"
          "-DLXQT_ETC_XDG_DIR=/run/current-system/profile/etc/xdg")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("glib" ,glib)))
+     (list pkg-config glib))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
      ;; Dependent projects require Perl via the CMake files.
-     `(("perl" ,perl)))
+     (list perl))
     (synopsis "LXQt Build tools")
     (description
      "Lxqt-build-tools is providing several tools needed to build LXQt
@@ -188,12 +187,9 @@ itself as well as other components maintained by the LXQt project.")
              #t)))))
     (propagated-inputs
      ;; required by Qt5XdgIconLoader.pc
-     `(("glib" ,glib)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list glib qtbase-5 qtsvg))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)))
+     (list lxqt-build-tools pkg-config))
     (home-page "https://github.com/lxqt/libqtxdg")
     (synopsis "Qt implementation of freedesktop.org xdg specifications")
     (description "Libqtxdg implements the freedesktop.org xdg specifications
@@ -231,15 +227,14 @@ in Qt.")
                                "/share/lxqt/translations")))
              #t)))))
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libqtxdg" ,libqtxdg)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("polkit-qt" ,polkit-qt)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           libqtxdg
+           libxscrnsaver
+           polkit-qt
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (home-page "https://lxqt-project.org")
     (synopsis "Core utility library for all LXQt components")
     (description "liblxqt provides the basic libraries shared by the
@@ -260,9 +255,9 @@ components of the LXQt desktop environment.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)))
+     (list lxqt-build-tools))
     (home-page "https://lxqt-project.org")
     (synopsis "Library used to query system info and statistics")
     (description "libsysstat is a library to query system information like CPU
@@ -285,15 +280,14 @@ and memory usage or network traffic.")
         (base32 "04riqf2xgbcnq67l5zb0dfnnmc4a2zljx8zfn3jlvxirnd73l0zm"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -328,15 +322,14 @@ LXQt and the system it's running on.")
         (base32 "07fkn3zmpfxjzzsv1hyv50sx0359n10lxjil35qn266nz165wj43"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("polkit-qt" ,polkit-qt)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           polkit-qt
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -375,27 +368,25 @@ the operating system LXQt is running on.")
         (base32 "0nr43d6fyc5zg4b3iwpca2cy58ry8q0rahrk6ixm7wrvmaiwkh93"))))
     (build-system cmake-build-system)
     (inputs
-     `(("eudev" ,eudev)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("libxcursor" ,libxcursor)
-       ("libxi" ,libxi)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("xf86-input-libinput" ,xf86-input-libinput)
-       ("xkeyboard-config" ,xkeyboard-config)
-       ("zlib" ,zlib)))
+     (list eudev
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           libxcursor
+           libxi
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid
+           xf86-input-libinput
+           xkeyboard-config
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     ;; XXX: This is a workaround so libkscreen can find the backends as we
     ;; dont have a way specify them. We may want to  patch like Nix does.
     (propagated-inputs
-     `(("libkscreen" ,libkscreen)))
+     (list libkscreen))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -448,16 +439,14 @@ configuration of both LXQt and the underlying operating system.")
         (base32 "0pnyqiqhaawrnyvw3ljp850d911abaalnl4rgvl2xyzybvlhki4h"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -496,15 +485,14 @@ as a whole and are not limited to distinct applications.")
         (base32 "1dyal7brmfnydfgb6lpxnqww8fj5gzixs7s3wf5nn2ihsz1wm4nk"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no test target
        #:phases
@@ -542,15 +530,14 @@ according to the Desktop Notifications Specification.")
         (base32 "0gdcy8c21sbfrlfz9c3zqw4dvdwf309flkjgqanwwl9i8hr26chr"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -581,36 +568,33 @@ of other programs.")
         (base32 "1k2cfs1mhad486kh93vbxma3jpjksp4hzjv1xmp1g5alb5dgnc0q"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("kguiaddons" ,kguiaddons)
-       ("libdbusmenu-qt" ,libdbusmenu-qt)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("libstatgrab" ,libstatgrab)
-       ("libsysstat" ,libsysstat)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxrender" ,libxrender)
-       ("lm-sensors" ,lm-sensors "lib")
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)
-       ("xcb-util" ,xcb-util)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list alsa-lib
+           kguiaddons
+           libdbusmenu-qt
+           liblxqt
+           libqtxdg
+           libstatgrab
+           libsysstat
+           libxcomposite
+           libxdamage
+           libxkbcommon
+           libxrender
+           `(,lm-sensors "lib")
+           lxqt-globalkeys
+           pcre
+           pulseaudio
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid
+           xcb-util
+           xkeyboard-config))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (propagated-inputs
      ;; Propagating KWINDOWSYSTEM so that the list of opened applications
      ;; shows up in lxqt-panel's taskbar plugin.
-     `(("kwindowsystem" ,kwindowsystem)
-       ("lxmenu-data" ,lxmenu-data)))
+     (list kwindowsystem lxmenu-data))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -656,19 +640,16 @@ of other programs.")
         (base32 "119bjhx208g7wxmr8r0ajb3wl6vagq1aks6zz07df4bgjs3nnpli"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("pcre" ,pcre)
-       ("polkit-qt" ,polkit-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           pcre
+           polkit-qt
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("polkit" ,polkit)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config polkit lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no test target
        #:phases
@@ -705,18 +686,17 @@ LXQt.")
         (base32 "00njx8a8cs0zzpz798qc9j16k7i4y0ydy1xmmcq9yv0wawh4gqck"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kidletime" ,kidletime)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("solid" ,solid)))
+     (list kidletime
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           lxqt-globalkeys
+           qtbase-5
+           qtsvg
+           qtx11extras
+           solid))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -755,15 +735,14 @@ when laptop batteries are low on power.")
         (base32 "14c6abxfg3vda333wrvb5lk45c45hnb66jclbs3vsmrjxdb13vv5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libdbusmenu-qt" ,libdbusmenu-qt)
-       ("libfm-qt" ,libfm-qt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list libdbusmenu-qt
+           libfm-qt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -793,19 +772,17 @@ Qt with LXQt.")
         (base32 "0n53jbvkmp4vgi21a720gsvi407m4ybqk8xrpnm5f48yjr88r9i4"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("muparser" ,muparser)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           lxqt-globalkeys
+           muparser
+           pcre
+           qtbase-5
+           qtsvg
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -842,19 +819,17 @@ allows for launching applications or shutting down the system.")
         (base32 "0iwwfyngpbhs2dwvbw0cci0bf3qbqcpjjw7h5vm46nimvgp8q1fr"))))
     (build-system cmake-build-system)
     (inputs
-     `(("eudev" ,eudev)
-       ("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("procps" ,procps)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("xdg-user-dirs" ,xdg-user-dirs)))
+     (list eudev
+           kwindowsystem
+           liblxqt
+           libqtxdg
+           procps
+           qtbase-5
+           qtsvg
+           qtx11extras
+           xdg-user-dirs))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      `(#:tests? #f
        #:phases
@@ -914,17 +889,15 @@ for the LXQt desktop environment.")
         (base32 "02s38m0ywp0gjkjczvrc4r1ignshbajlj084xd61d3rcm7vahhic"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("sudo" ,sudo)))
+     (list kwindowsystem
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtsvg
+           qtx11extras
+           sudo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -956,7 +929,7 @@ permissions of other users including root.")
         (base32 "0kmvcz6rxghxxgb0m264zbvycc1zjma8mr4cpwg5kyrzb47rdw9z"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)))
+     (list lxqt-build-tools))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -996,18 +969,16 @@ for LXQt.")
     (arguments
      '(#:tests? #f))                    ; no tests
     (inputs
-     `(("glib" ,glib)
-       ("libexif" ,libexif)
-       ("libfm" ,libfm)
-       ("libxcb" ,libxcb)
-       ("menu-cache" ,menu-cache)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list glib
+           libexif
+           libfm
+           libxcb
+           menu-cache
+           pcre
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (home-page "https://lxqt-project.org")
     (synopsis "Qt binding for libfm")
     (description "libfm-qt is the Qt port of libfm, a library providing
@@ -1027,13 +998,9 @@ components to build desktop file managers which belongs to LXDE.")
         (base32 "1axs7dnh2z08ygy28iipfbgfck15k2i2pwlf0v8d8axjrmavzb3l"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libfm-qt" ,libfm-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list libfm-qt qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("lxqt-build-tools" ,lxqt-build-tools)))
+     (list pkg-config qttools lxqt-build-tools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -1069,12 +1036,9 @@ LXDE.")
         (base32 "0haarzhndjp0wndfhcdy6zl2whpdn3w0qzr3rr137kfqibc58lvx"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libconfig" ,libconfig)
-       ("qtbase" ,qtbase-5)))
+     (list libconfig qtbase-5))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools pkg-config qttools))
     (arguments
      '(#:tests? #f                      ; no tests
        #:phases
@@ -1104,15 +1068,9 @@ manager Compton.")
         (base32 "0g6hs41xfw2ghhwpj0rqr2ciri0x9v984689yrnmnvah88zlya1f"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libexif" ,libexif)
-       ("libfm-qt" ,libfm-qt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list libexif libfm-qt qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1134,20 +1092,18 @@ image viewer.")
         (base32 "0hlbivdbiw7wjhwrp8qfmq50ks19v0q21m3pyjj0k2na7nv9d3a5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("imlib2" ,imlib2)
-       ("libsm" ,libsm)
-       ("librsvg" ,librsvg)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("openbox" ,openbox)
-       ("pango" ,pango)
-       ("pcre" ,pcre)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list imlib2
+           libsm
+           librsvg
+           libxft
+           libxml2
+           openbox
+           pango
+           pcre
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools pkg-config qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1169,15 +1125,9 @@ window manager OpenBox.")
         (base32 "0w51dpjayav78lmhw966fz3gvypkmv64xgsd7x5rqs8am39lq9vc"))))
     (build-system cmake-build-system)
     (inputs
-     `(("glib" ,glib)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list glib pcre pulseaudio qtbase-5 qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list pkg-config lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1199,15 +1149,14 @@ window manager OpenBox.")
         (base32 "0zg0czrh3dlbnl5smxamhkdbj1g0szm47w1c0fwpaplgc1vv5lfq"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libxrender" ,libxrender)
-       ("liblxqt" ,liblxqt)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem
+           libxrender
+           liblxqt
+           libqtxdg
+           qtbase-5
+           qtx11extras))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1229,11 +1178,9 @@ processes currently in existence, much like code{top} or code{ps}.")
         (base32 "10lv475qj0x3c3vl4yhjyr6y10qj5pq8n5pal5k24f6pf7xv412f"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("utf8proc" ,utf8proc)))
+     (list qtbase-5 utf8proc))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1254,12 +1201,9 @@ processes currently in existence, much like code{top} or code{ps}.")
         (base32 "0rfv7a6ncm8fs8aicinh9l29w4636gxzcqz735jmch2r41v9i1d9"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("qtermwidget" ,qtermwidget)))
+     (list qtbase-5 qtx11extras qtermwidget))
     (native-inputs
-     `(("lxqt-build-tools" ,lxqt-build-tools)
-       ("qttools" ,qttools)))
+     (list lxqt-build-tools qttools))
     (arguments
      '(#:tests? #f))                      ; no tests
     (home-page "https://lxqt-project.org")
@@ -1281,15 +1225,9 @@ QTermWidget.")
         (base32 "0cilzw7rz5m2klzpax7rrs5rr6whfda2svwzsn2jvmrirmh5by7r"))))
     (build-system cmake-build-system)
     (inputs
-     `(("kwindowsystem" ,kwindowsystem)
-       ("libqtxdg" ,libqtxdg)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list kwindowsystem libqtxdg qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("qttools" ,qttools)))
+     (list pkg-config perl qttools))
     (arguments
      '(#:tests? #f))                    ; no tests
     (home-page "https://lxqt-project.org")
@@ -1312,15 +1250,9 @@ easily publishing them on internet image hosting services.")
           (base32 "0fzgq7cyr7hx8qmq84xfgbsdx04mc1r7vzq5mz79j7bp2ysh134z"))))
     (build-system cmake-build-system)
     (inputs
-      `(("glib" ,glib)
-        ("json-glib" ,json-glib)
-        ("libfm-qt" ,libfm-qt)
-        ("qtbase" ,qtbase-5)
-        ("qtx11extras" ,qtx11extras)))
+      (list glib json-glib libfm-qt qtbase-5 qtx11extras))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("lxqt-build-tools" ,lxqt-build-tools)
-        ("qttools" ,qttools)))
+      (list pkg-config lxqt-build-tools qttools))
     (arguments
       '(#:tests? #f))
     (home-page "https://lxqt-project.org")
@@ -1349,12 +1281,12 @@ like @command{tar} and @command{zip}.")
            (base32 "087641idpg7n8yhh5biis4wv52ayw3rddirwqb34bf5fwj664pw9"))))
       (build-system cmake-build-system)
       (inputs
-        `(("kwindowsystem" ,kwindowsystem)
-          ("qtbase" ,qtbase-5)
-          ("qtsvg" ,qtsvg)
-          ("liblxqt" ,liblxqt)
-          ("qtx11extras" ,qtx11extras)
-          ("libqtxdg" ,libqtxdg)))
+        (list kwindowsystem
+              qtbase-5
+              qtsvg
+              liblxqt
+              qtx11extras
+              libqtxdg))
       (native-inputs
         `(("lxqt-build-tools" ,lxqt-build-tools)
           ("qtlinguist" ,qttools)))
@@ -1394,41 +1326,41 @@ desktop.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     `(;; XDG
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("xdg-user-dirs" ,xdg-user-dirs)
-       ("xdg-utils" ,xdg-utils)
-       ;; Base
-       ;; TODO: qtsvg is needed for lxqt apps to display icons. Maybe it
-       ;; should be added to their propagated-inputs?
-       ("qtsvg" ,qtsvg)
-       ;; Core
-       ("lxqt-about" ,lxqt-about)
-       ("lxqt-admin" ,lxqt-admin)
-       ("lxqt-config" ,lxqt-config)
-       ("lxqt-globalkeys" ,lxqt-globalkeys)
-       ("lxqt-notificationd" ,lxqt-notificationd)
-       ("lxqt-openssh-askpass" ,lxqt-openssh-askpass)
-       ("lxqt-panel" ,lxqt-panel)
-       ("lxqt-policykit" ,lxqt-policykit)
-       ("lxqt-powermanagement" ,lxqt-powermanagement)
-       ("lxqt-qtplugin" ,lxqt-qtplugin)
-       ("lxqt-runner" ,lxqt-runner)
-       ("lxqt-session" ,lxqt-session)
-       ("lxqt-sudo" ,lxqt-sudo)
-       ("lxqt-themes" ,lxqt-themes)
-       ("pcmanfm-qt" ,pcmanfm-qt)
-       ;; Extra
-       ("picom" ,picom)
-       ("font-dejavu" ,font-dejavu)
-       ("lximage-qt" ,lximage-qt)
-       ("obconf-qt" ,obconf-qt)
-       ("openbox" ,openbox)
-       ("oxygen-icons" ,oxygen-icons)
-       ("pavucontrol-qt" ,pavucontrol-qt)
-       ("qps" ,qps)
-       ("qterminal" ,qterminal)))
+     (list ;; XDG
+           desktop-file-utils
+           hicolor-icon-theme
+           xdg-user-dirs
+           xdg-utils
+           ;; Base
+           ;; TODO: qtsvg is needed for lxqt apps to display icons. Maybe it
+           ;; should be added to their propagated-inputs?
+           qtsvg
+           ;; Core
+           lxqt-about
+           lxqt-admin
+           lxqt-config
+           lxqt-globalkeys
+           lxqt-notificationd
+           lxqt-openssh-askpass
+           lxqt-panel
+           lxqt-policykit
+           lxqt-powermanagement
+           lxqt-qtplugin
+           lxqt-runner
+           lxqt-session
+           lxqt-sudo
+           lxqt-themes
+           pcmanfm-qt
+           ;; Extra
+           picom
+           font-dejavu
+           lximage-qt
+           obconf-qt
+           openbox
+           oxygen-icons
+           pavucontrol-qt
+           qps
+           qterminal))
     (synopsis "The Lightweight Qt Desktop Environment")
     (description "LXQt is a lightweight Qt desktop environment.")
     (home-page "https://lxqt-project.org")
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 3185c15aea..3bcc6d3df4 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -16,7 +16,7 @@
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -141,20 +141,28 @@ sparsely connected networks.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no "check" target
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (replace
-                   'install             ; no ‘install’ target
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let* ((out (assoc-ref outputs "out"))
-                            (bin (string-append out "/bin/")))
-                       (mkdir-p bin)
-                       (for-each (lambda (file)
-                                   (copy-file file (string-append bin file)))
-                                 '("svm-train"
-                                   "svm-predict"
-                                   "svm-scale")))
-                     #t)))))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'build-lib
+           (lambda _
+             (invoke "make" "lib")))
+         (replace 'install              ; no ‘install’ target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin/"))
+                    (lib (string-append out "/lib/"))
+                    (inc (string-append out "/include/libsvm")))
+               (mkdir-p bin)
+               (for-each (lambda (file)
+                           (copy-file file (string-append bin file)))
+                         '("svm-train"
+                           "svm-predict"
+                           "svm-scale"))
+               (mkdir-p lib)
+               (install-file "libsvm.so.2" lib)
+               (mkdir-p inc)
+               (install-file "svm.h" inc)))))))
     (home-page "https://www.csie.ntu.edu.tw/~cjlin/libsvm/")
     (synopsis "Library for Support Vector Machines")
     (description
@@ -193,7 +201,7 @@ classification.")
                          (string-append site "libsvm.so.2")))
             #t)))))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Python bindings of libSVM")))
 
 (define-public ghmm
@@ -222,20 +230,7 @@ classification.")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'enter-dir
-             (lambda _ (chdir "ghmm") #t))
-           (delete 'check)
-           (add-after 'install 'check
-             (assoc-ref %standard-phases 'check))
-           (add-before 'check 'fix-PYTHONPATH
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((python-version (python-version
-                                      (assoc-ref inputs "python"))))
-                 (setenv "PYTHONPATH"
-                         (string-append (getenv "PYTHONPATH")
-                                        ":" (assoc-ref outputs "out")
-                                        "/lib/python" python-version
-                                        "/site-packages")))
-               #t))
+             (lambda _ (chdir "ghmm")))
            (add-after 'enter-dir 'fix-runpath
              (lambda* (#:key outputs #:allow-other-keys)
                (substitute* "ghmmwrapper/setup.py"
@@ -246,8 +241,7 @@ classification.")
                                  line
                                  "\"-Wl,-rpath="
                                  (assoc-ref outputs "out")
-                                 "/lib\", ")))
-               #t))
+                                 "/lib\", ")))))
            (add-after 'enter-dir 'disable-broken-tests
              (lambda _
                (substitute* "tests/Makefile.am"
@@ -267,18 +261,17 @@ classification.")
                    line indent)
                   (string-append indent
                                  "@unittest.skip(\"Disabled by Guix\")\n"
-                                 line)))
-               #t)))))
+                                 line))))))))
       (inputs
        `(("python" ,python-2) ; only Python 2 is supported
          ("libxml2" ,libxml2)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("dejagnu" ,dejagnu)
-         ("swig" ,swig)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config
+             dejagnu
+             swig
+             autoconf
+             automake
+             libtool))
       (home-page "http://ghmm.org")
       (synopsis "Hidden Markov Model library")
       (description
@@ -303,9 +296,10 @@ training, HMM clustering, HMM mixtures.")
                 "15xlax3z31lsn62vlg94hkm75nm40q4679amnfg13jm8m2bnhy5m"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-blast")))
+     `(#:configure-flags (list "--enable-blast"
+                               "CFLAGS=-fcommon")))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://micans.org/mcl/")
     (synopsis "Clustering algorithm for graphs")
     (description
@@ -341,7 +335,7 @@ networks) based on simulation of (stochastic) flow in graphs.")
              (substitute* "setup.ml"
                (("LDFLAGS=-fPIC")
                 (string-append "LDFLAGS=-fPIC\"; \"SHELL=" (which "sh")))
-               (("-std=c89") "-std=gnu99")
+               (("-std=c89") "-std=gnu99 -fcommon")
 
                ;; This is a mutable string, which is no longer supported.  Use
                ;; a byte buffer instead.
@@ -354,14 +348,14 @@ networks) based on simulation of (stochastic) flow in graphs.")
                ((" s;")
                 " s);"))
              (substitute* "myocamlbuild.ml"
-               (("std=c89") "std=gnu99"))
+               (("std=c89") "std=gnu99 -fcommon"))
              ;; Since we build with a more recent OCaml, we have to use C99 or
              ;; later.  This causes problems with the old C code.
              (substitute* "src/impala/matrix.c"
                (("restrict") "restrict_"))
              #t)))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (home-page "https://github.com/fhcrc/mcl")
     (synopsis "OCaml wrappers around MCL")
     (description
@@ -402,10 +396,7 @@ algorithm.")
          (add-before 'configure 'set-CXXFLAGS
            (lambda _ (setenv "CXXFLAGS" "-fpermissive "))))))
     (inputs
-     `(("boost" ,boost)
-       ("gsl" ,gsl)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list boost gsl libxml2 zlib))
     (native-inputs
      `(("gfortran" ,gfortran)
        ("gfortran:lib" ,gfortran "lib")))
@@ -575,8 +566,7 @@ optimizing, and searching weighted finite-state transducers (FSTs).")
        ("lzo" ,lzo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("rxcpp" ,rxcpp)))
+     (list pkg-config rxcpp))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -653,22 +643,18 @@ in terms of new algorithms.")
                       (invoke "make" "install"
                               "-C" ".setuptools-cmake-build"))))))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("googletest" ,googletest)
-       ("pybind11" ,pybind11)
-       ("python-coverage" ,python-coverage)
-       ("python-nbval" ,python-nbval)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list cmake
+           googletest
+           pybind11
+           python-coverage
+           python-nbval
+           python-pytest
+           python-pytest-runner))
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-protobuf" ,python-protobuf)
-       ("python-six" ,python-six)
-       ("python-tabulate" ,python-tabulate)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
+     (list python-numpy python-protobuf python-six python-tabulate
+           python-typing-extensions))
     (home-page "https://onnx.ai/")
     (synopsis "Open Neural Network Exchange")
     (description
@@ -705,17 +691,12 @@ standard data types.")
     (build-system python-build-system)
     (arguments (package-arguments onnx))          ;reuse build system tweaks
     (native-inputs
-     `(("cmake" ,cmake)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-nbval" ,python-nbval)
-       ("python-coverage" ,python-coverage)))
+     (list cmake python-pytest python-pytest-runner python-nbval
+           python-coverage))
     (inputs
-     `(("onnx" ,onnx)
-       ("protobuf" ,protobuf)
-       ("pybind11" ,pybind11)))
+     (list onnx protobuf pybind11))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (synopsis "Library to optimize ONNX models")
     (description
      "This package provides a C++ and Python library for performing arbitrary
@@ -754,7 +735,7 @@ with a single function call.")
            (lambda _
              (invoke "ctest"))))))
     (native-inputs
-     `(("catch" ,catch-framework)))
+     (list catch-framework))
     (home-page "http://reactivex.io/")
     (synopsis "Reactive Extensions for C++")
     (description
@@ -859,7 +840,7 @@ than 8 bits, and at the end only some significant 8 bits are kept.")
                              '("meta" "profiling" "public" "fixedpoint"
                                "eight_bit_int_gemm" "internal")))))))))
       (native-inputs
-       `(("unzip" ,unzip)))
+       (list unzip))
       (properties '((hidden? . #t))))))
 
 (define-public dlib
@@ -922,9 +903,9 @@ than 8 bits, and at the end only some significant 8 bits are kept.")
                  (invoke "./dtest" "--runall"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("libnsl" ,libnsl)))
+     (list pkg-config
+           ;; For tests.
+           libnsl))
     (inputs
      `(("giflib" ,giflib)
        ("lapack" ,lapack)
@@ -946,7 +927,7 @@ computing environments.")
 (define-public python-scikit-learn
   (package
     (name "python-scikit-learn")
-    (version "0.24.2")
+    (version "1.0.1")
     (source
      (origin
        (method git-fetch)
@@ -956,7 +937,7 @@ computing environments.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hm92biqwwc87bqnr56lwa5bz77lr7k9q21rdwksnfzq3vsdp2nm"))))
+         "07k92y78sk4074vh5hp8y63pwl592wgl8azrfp0q84chxk8igfx9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -964,14 +945,17 @@ computing environments.")
          (add-after 'build 'build-ext
            (lambda _ (invoke "python" "setup.py" "build_ext" "--inplace")))
          (replace 'check
-           (lambda _
-             ;; Restrict OpenBLAS threads to prevent segfaults while testing!
-             (setenv "OPENBLAS_NUM_THREADS" "1")
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Restrict OpenBLAS threads to prevent segfaults while testing!
+               (setenv "OPENBLAS_NUM_THREADS" "1")
 
-             ;; Some tests require write access to $HOME.
-             (setenv "HOME" "/tmp")
+               ;; Some tests require write access to $HOME.
+               (setenv "HOME" "/tmp")
 
-             (invoke "pytest" "sklearn" "-m" "not network")))
+               (invoke "pytest" "sklearn" "-m" "not network"
+                       ;; This test tries to access the internet.
+                       "-k" "not test_load_boston_alternative"))))
          (add-before 'reset-gzip-timestamps 'make-files-writable
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure .gz files are writable so that the
@@ -980,16 +964,12 @@ computing environments.")
                (for-each make-file-writable
                          (find-files out "\\.gz$"))))))))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pandas" ,python-pandas) ;for tests
-       ("python-cython" ,python-cython)))
+     (list python-pytest python-pandas ;for tests
+           python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-threadpoolctl" ,python-threadpoolctl)
-       ("python-scipy" ,python-scipy)
-       ("python-joblib" ,python-joblib)))
+     (list python-numpy python-threadpoolctl python-scipy python-joblib))
     (home-page "https://scikit-learn.org/")
     (synopsis "Machine Learning in Python")
     (description
@@ -1014,16 +994,35 @@ data analysis.")
                 (sha256
                  (base32
                   "08zbzi8yx5wdlxfx9jap61vg1malc9ajf576w7a0liv6jvvrxlpj"))))
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'build 'build-ext
+             (lambda _ (invoke "python" "setup.py" "build_ext" "--inplace")))
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 ;; Restrict OpenBLAS threads to prevent segfaults while testing!
+                 (setenv "OPENBLAS_NUM_THREADS" "1")
+
+                 ;; Some tests require write access to $HOME.
+                 (setenv "HOME" "/tmp")
+
+                 (invoke "pytest" "sklearn" "-m" "not network"
+                         "-k"
+                         (string-append
+                          ;; This test tries to access the internet.
+                          "not test_load_boston_alternative"
+                          ;; This test fails for unknown reasons
+                          " and not test_rank_deficient_design"))))))))
       (inputs
-       `(("openblas" ,openblas)))
+       (list openblas))
       (native-inputs
-       `(("python2-pytest" ,python2-pytest)
-         ("python2-pandas" ,python2-pandas) ;for tests
-         ("python2-cython" ,python2-cython)))
+       (list python2-pytest python2-pandas ;for tests
+             python2-cython))
       (propagated-inputs
-       `(("python2-numpy" ,python2-numpy)
-         ("python2-scipy" ,python2-scipy)
-         ("python2-joblib" ,python2-joblib))))))
+       (list python2-numpy python2-scipy python2-joblib)))))
 
 (define-public python-threadpoolctl
   (package
@@ -1047,7 +1046,7 @@ data analysis.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/joblib/threadpoolctl")
     (synopsis "Python helpers for common threading libraries")
     (description "Thread-pool Controls provides Python helpers to limit the
@@ -1067,13 +1066,10 @@ for scientific computing and data science (e.g. BLAS and OpenMP).")
         (base32 "0w87c2v0li2rdbx6qfc2lb6y6bxpdy3jwfgzfs1kcr4d1chj5zfr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-llvmlite" ,python-llvmlite)
-       ("python-numba" ,python-numba)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-joblib python-llvmlite python-numba python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/lmcinnes/pynndescent")
     (synopsis "Nearest neighbor descent for approximate nearest neighbors")
     (description
@@ -1110,14 +1106,12 @@ for k-neighbor-graph construction and approximate nearest neighbor search.")
              (setenv "NUMBA_CACHE_DIR" "/tmp")
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("fftw" ,fftw)))
+     (list fftw))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pynndescent" ,python-pynndescent)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-pynndescent python-scikit-learn
+           python-scipy))
     (home-page "https://github.com/pavlin-policar/openTSNE")
     (synopsis "Extensible, parallel implementations of t-SNE")
     (description
@@ -1139,12 +1133,9 @@ visualizing high-dimensional data sets.")
     (build-system python-build-system)
     ;; Pandas is only needed to run the tests.
     (native-inputs
-     `(("python-pandas" ,python-pandas)))
+     (list python-pandas))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-joblib" ,python-joblib)))
+     (list python-numpy python-scipy python-scikit-learn python-joblib))
     (home-page "https://epistasislab.github.io/scikit-rebate/")
     (synopsis "Relief-based feature selection algorithms for Python")
     (description "Scikit-rebate is a scikit-learn-compatible Python
@@ -1170,10 +1161,10 @@ standard feature selection algorithms.")
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools" ,python-setuptools) ;build fails without this
-       ("python-wheel" ,python-wheel)))
+     (list python-setuptools ;build fails without this
+           python-wheel))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/CyberAgent/cmaes")
     (synopsis "CMA-ES implementation for Python")
     (description "This package provides provides an implementation of the
@@ -1199,11 +1190,9 @@ Covariance Matrix Adaptation Evolution Strategy (CMA-ES) for Python.")
       (version version)
       (build-system python-build-system)
       (native-inputs
-       `(("python-nose" ,python-nose)
-         ("python-pytest" ,python-pytest)))
+       (list python-nose python-pytest))
       (propagated-inputs
-       `(("python-future" ,python-future)
-         ("python-numpy" ,python-numpy)))
+       (list python-future python-numpy))
       (arguments
        `(#:phases (modify-phases %standard-phases
                     (replace 'check
@@ -1237,13 +1226,11 @@ main intended application of Autograd is gradient-based optimization.")
                 "0jlvyn7k81dzrh9ij3zw576wbgiwmmr26rzpdxjn1dbpc3njpvzi"))
               (file-name (git-file-name name version))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-nose))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-scipy))
     (arguments
      `(#:configure-flags
        '("-DUSE_MPI=ON")
@@ -1284,8 +1271,7 @@ the following advantages:
                 "04bwzk6ifgnz3fmzid8b7avxf9n5pnx9xcjm61nkjng1vv0bpj8x"))
               (file-name (git-file-name name version))))
     (inputs
-     `(("boost" ,boost)
-       ("zlib" ,zlib)))
+     (list boost zlib))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-boost="
@@ -1328,17 +1314,14 @@ interactive learning.")
      `(#:tests? #f ; some test files are missing
        #:python ,python-2)) ; only Python 2.7 is supported
     (propagated-inputs
-     `(("python2-numpy" ,python2-numpy)
-       ("python2-scipy" ,python2-scipy)
-       ("python2-matplotlib" ,python2-matplotlib)
-       ("python2-pandas" ,python2-pandas)
-       ("python2-scikit-learn" ,python2-scikit-learn)
-       ("python2-pysnptools" ,python2-pysnptools)))
+     (list python2-numpy
+           python2-scipy
+           python2-matplotlib
+           python2-pandas
+           python2-scikit-learn
+           python2-pysnptools))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-cython" ,python2-cython)
-       ("python2-mock" ,python2-mock)
-       ("python2-nose" ,python2-nose)))
+     (list unzip python2-cython python2-mock python2-nose))
     (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
     (synopsis "Perform genome-wide association studies on large data sets")
     (description
@@ -1377,20 +1360,20 @@ association studies (GWAS) on extremely large data sets.")
                                            " and not test_quadratic1"
                                            " and not test_twoarms"))))))))
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-future" ,python-future)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-cloudpickle
+           python-future
+           python-networkx
+           python-numpy
+           python-scipy
+           python-six
+           python-tqdm))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-ipython" ,python-ipython)
-       ("python-ipyparallel" ,python-ipyparallel)
-       ("python-nose" ,python-nose)
-       ("python-pymongo" ,python-pymongo)
-       ("python-pytest" ,python-pytest)))
+     (list python-black
+           python-ipython
+           python-ipyparallel
+           python-nose
+           python-pymongo
+           python-pytest))
     (home-page "https://hyperopt.github.io/hyperopt/")
     (synopsis "Library for hyperparameter optimization")
     (description "Hyperopt is a Python library for serial and parallel
@@ -1489,21 +1472,21 @@ discrete, and conditional dimensions.")
                                (string-append lib "/gstreamer-1.0"))
                  #t))))))
       (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("gfortran" ,gfortran "lib")
-         ("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("jack" ,jack-1)
-         ("openblas" ,openblas)
-         ("openfst" ,openfst)
-         ("portaudio" ,portaudio)
-         ("python" ,python)))
+       (list alsa-lib
+             `(,gfortran "lib")
+             glib
+             gstreamer
+             jack-1
+             openblas
+             openfst
+             portaudio
+             python))
       (native-inputs
-       `(("glib" ,glib "bin")             ; glib-genmarshal
-         ("grep" ,grep)
-         ("sed" ,sed)
-         ("pkg-config" ,pkg-config)
-         ("which" ,which)))
+       (list `(,glib "bin") ; glib-genmarshal
+             grep
+             sed
+             pkg-config
+             which))
       (home-page "https://kaldi-asr.org/")
       (synopsis "Speech recognition toolkit")
       (description "Kaldi is an extensible toolkit for speech recognition
@@ -1563,11 +1546,7 @@ written in C++.")
                  (install-file "libgstkaldinnet2onlinedecoder.so" lib)
                  #t))))))
       (inputs
-       `(("glib" ,glib)
-         ("gstreamer" ,gstreamer)
-         ("jansson" ,jansson)
-         ("openfst" ,openfst)
-         ("kaldi" ,kaldi)))
+       (list glib gstreamer jansson openfst kaldi))
       (native-inputs
        `(("bash" ,bash)
          ("glib:bin" ,glib "bin")       ; glib-genmarshal
@@ -1647,7 +1626,7 @@ automatically.")
                  (let* ((server (string-append bin "/kaldi-gst-server"))
                         (client (string-append bin "/kaldi-gst-client"))
                         (worker (string-append bin "/kaldi-gst-worker"))
-                        (PYTHONPATH (getenv "PYTHONPATH"))
+                        (PYTHONPATH (getenv "GUIX_PYTHONPATH"))
                         (GST_PLUGIN_PATH (string-append
                                           (assoc-ref inputs "gst-kaldi-nnet2-online")
                                           "/lib/gstreamer-1.0:${GST_PLUGIN_PATH}"))
@@ -1656,7 +1635,7 @@ automatically.")
                                   (lambda _
                                     (format #t
                                             "#!~a
-export PYTHONPATH=~a
+export GUIX_PYTHONPATH=~a
 export GST_PLUGIN_PATH=~a
 exec ~a ~a/~a \"$@\"~%"
                                             (which "bash") PYTHONPATH GST_PLUGIN_PATH
@@ -1750,7 +1729,7 @@ Python.")
                   ((guix build python-build-system)
                    #:select (python-version)))
        #:imported-modules (,@%cmake-build-system-modules
-                            (guix build python-build-system))
+                           (guix build python-build-system))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'set-source-file-times-to-1980
@@ -1780,10 +1759,9 @@ Python.")
              ;; https://github.com/tensorflow/tensorflow/issues/34197
              (substitute* (find-files "tensorflow/python" ".*\\.cc$")
                (("(nullptr,)(\\ +/. tp_print)" _ _ tp_print)
-                (string-append "NULL,   " tp_print)))
-             #t))
+                (string-append "NULL,   " tp_print)))))
          (add-after 'python3.7-compatibility 'chdir
-           (lambda _ (chdir "tensorflow/contrib/cmake") #t))
+           (lambda _ (chdir "tensorflow/contrib/cmake")))
          (add-after 'chdir 'disable-downloads
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "external" "\\.cmake$")
@@ -1798,36 +1776,31 @@ Python.")
                  ;; Sqlite
                  (("include\\(sqlite\\)") "")
                  (("\\$\\{sqlite_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "sqlite")
-                                 "/lib/libsqlite3.so"))
+                  (search-input-file inputs "/lib/libsqlite3.so"))
                  (("sqlite_copy_headers_to_destination") "")
 
                  ;; PNG
                  (("include\\(png\\)") "")
                  (("\\$\\{png_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "libpng")
-                                 "/lib/libpng16.so"))
+                  (search-input-file inputs "/lib/libpng16.so"))
                  (("png_copy_headers_to_destination") "")
 
                  ;; JPEG
                  (("include\\(jpeg\\)") "")
                  (("\\$\\{jpeg_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "libjpeg")
-                                 "/lib/libjpeg.so"))
+                  (search-input-file inputs "/lib/libjpeg.so"))
                  (("jpeg_copy_headers_to_destination") "")
 
                  ;; GIF
                  (("include\\(gif\\)") "")
                  (("\\$\\{gif_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "giflib")
-                                 "/lib/libgif.so"))
+                  (search-input-file inputs "/lib/libgif.so"))
                  (("gif_copy_headers_to_destination") "")
 
                  ;; lmdb
                  (("include\\(lmdb\\)") "")
                  (("\\$\\{lmdb_STATIC_LIBRARIES\\}")
-                  (string-append (assoc-ref inputs "lmdb")
-                                 "/lib/liblmdb.so"))
+                  (search-input-file inputs "/lib/liblmdb.so"))
                  (("lmdb_copy_headers_to_destination") "")
 
                  ;; Protobuf
@@ -1879,8 +1852,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                (("tf_core_cpu grpc") "tf_core_cpu"))
 
              ;; This directory is a dependency of many targets.
-             (mkdir-p "protobuf")
-             #t))
+             (mkdir-p "protobuf")))
          (add-after 'configure 'unpack-third-party-sources
            (lambda* (#:key inputs #:allow-other-keys)
              ;; This is needed to configure bundled packages properly.
@@ -1920,8 +1892,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                     "re2"))
 
              (rename-file "../build/cub/src/cub/cub-1.8.0/"
-                          "../build/cub/src/cub/cub/")
-             #t))
+                          "../build/cub/src/cub/cub/")))
          (add-after 'unpack 'fix-python-build
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (mkdir-p "protobuf-src")
@@ -1932,9 +1903,6 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                      "-C" "eigen-src" "--strip-components=1")
 
              (substitute* "tensorflow/contrib/cmake/tf_python.cmake"
-               ;; Ensure that all Python dependencies can be found at build time.
-               (("PYTHONPATH=\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/tf_python" m)
-                (string-append m ":" (getenv "PYTHONPATH")))
                ;; Take protobuf source files from our source package.
                (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/protobuf/src/protobuf/src/google")
                 (string-append (getcwd) "/protobuf-src/src/google")))
@@ -1946,7 +1914,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                 (string-append (getcwd) "/eigen-src/"))
                ;; Take Eigen headers from our own package.
                (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/external/eigen_archive")
-                (string-append (assoc-ref inputs "eigen") "/include/eigen3")))
+                (search-input-directory inputs "/include/eigen3")))
 
              ;; Correct the RUNPATH of ops libraries generated for Python.
              ;; TODO: this doesn't work :(
@@ -1960,21 +1928,22 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                 (string-append "set_target_properties(${_AT_TARGET} PROPERTIES \
 COMPILE_FLAGS ${target_compile_flags} \
 INSTALL_RPATH_USE_LINK_PATH TRUE \
-INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))
-             #t))
+INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))))
          (add-after 'build 'build-pip-package
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key outputs parallel-build? #:allow-other-keys)
              (setenv "LDFLAGS"
                      (string-append "-Wl,-rpath="
                                     (assoc-ref outputs "out") "/lib"))
-             (invoke "make" "tf_python_build_pip_package")
-             #t))
+             (invoke "make" "-j" (if parallel-build?
+                                     (number->string (parallel-job-count))
+                                     "1")
+                     "tf_python_build_pip_package")))
          (add-after 'build-pip-package 'install-python
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (wheel (car (find-files "../build/tf_python/dist/" "\\.whl$")))
                    (python-version (python-version
-                                     (assoc-ref inputs "python"))))
+                                    (assoc-ref inputs "python"))))
                (invoke "python" "-m" "pip" "install" wheel
                        (string-append "--prefix=" out))
 
@@ -1983,8 +1952,7 @@ INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))
                 (string-append
                  out "/lib/python" python-version
                  "/site-packages/tensorflow/contrib/"
-                 "seq2seq/python/ops/lib_beam_search_ops.so"))
-               #t))))))
+                 "seq2seq/python/ops/lib_beam_search_ops.so"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("protobuf:native" ,protobuf-3.6) ; protoc
@@ -2244,7 +2212,7 @@ advanced research.")
                       (install-file file target-dir)))
                   (find-files "." "\\.h$")))))))))
     (inputs
-     `(("abseil-cpp" ,abseil-cpp)
+     `(("abseil-cpp" ,abseil-cpp-20200923.3)
        ("eigen" ,eigen-for-tensorflow-lite)
        ("flatbuffers" ,flatbuffers)
        ("python" ,python)))
@@ -2364,7 +2332,7 @@ learning libraries.")
      `(("googletest" ,googletest)
        ("python" ,python-wrapper)))
     (inputs
-     `(("dmlc-core" ,dmlc-core)))
+     (list dmlc-core))
     (home-page "https://xgboost.ai/")
     (synopsis "Gradient boosting (GBDT, GBRT or GBM) library")
     (description
@@ -2434,14 +2402,11 @@ in a fast and accurate way.")
                         ;; "'['./runexp.sh']' returned non-zero exit status 1"
                         " and not test_cli_binary_classification"))))))))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-scikit-learn" ,python-scikit-learn)))
+     (list python-pandas python-pytest python-scikit-learn))
     (inputs
-     `(("xgboost" ,xgboost)))
+     (list xgboost))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-scipy))
     (synopsis "Python interface for the XGBoost library")))
 
 (define-public python-iml
@@ -2457,12 +2422,9 @@ in a fast and accurate way.")
          "1k8szlpm19rcwcxdny9qdm3gmaqq8akb4xlvrzyz8c2d679aak6l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("ipython" ,python-ipython)
-       ("numpy" ,python-numpy)
-       ("pandas" ,python-pandas)
-       ("scipy" ,python-scipy)))
+     (list python-ipython python-numpy python-pandas python-scipy))
     (native-inputs
-     `(("nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/interpretable-ml/iml")
     (synopsis "Interpretable Machine Learning (iML) package")
     (description "Interpretable ML (iML) is a set of data type objects,
@@ -2487,13 +2449,10 @@ project, and it will potentially also do the same for the Lime project.")
     ;; The tests require Keras, but this package is needed to build Keras.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)))
+     (list python-h5py python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-pytest python-pytest-cov python-pytest-pep8
+           python-pytest-xdist))
     (home-page "https://github.com/keras-team/keras-applications")
     (synopsis "Reference implementations of popular deep learning models")
     (description
@@ -2514,15 +2473,14 @@ models for use with the Keras deep learning framework.")
          "1r98nm4k1svsqjyaqkfk23i31bl1kcfcyp7094yyj3c43phfp3as"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-six))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("tensorflow" ,tensorflow)))
+     (list python-pandas
+           python-pillow
+           python-pytest
+           python-pytest-cov
+           python-pytest-xdist
+           tensorflow))
     (home-page "https://github.com/keras-team/keras-preprocessing/")
     (synopsis "Data preprocessing and augmentation for deep learning models")
     (description
@@ -2552,51 +2510,57 @@ with image data, text data, and sequence data.")
              (delete-file "keras/backend/theano_backend.py")
              (delete-file "keras/backend/cntk_backend.py")
              (delete-file "tests/keras/backend/backend_test.py")
-
              ;; FIXME: This doesn't work because Tensorflow is missing the
              ;; coder ops library.
-             (delete-file "tests/keras/test_callbacks.py")
-             #t))
+             (delete-file "tests/keras/test_callbacks.py")))
          (replace 'check
-           (lambda _
-             ;; These tests attempt to download data files from the internet.
-             (delete-file "tests/integration_tests/test_datasets.py")
-             (delete-file "tests/integration_tests/imagenet_utils_test.py")
-             ;; Backport https://github.com/keras-team/keras/pull/12479.
-             (substitute* "tests/keras/engine/test_topology.py"
-               (("np.ones\\(\\(3, 2\\)\\)")
-                "1."))
-             (invoke "python" "-m" "pytest"
-                     ;; The following test fail only in the build container;
-                     ;; skip it.
-                     "-k" "not test_selu"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; These tests attempt to download data files from the internet.
+               (delete-file "tests/integration_tests/test_datasets.py")
+               (delete-file "tests/integration_tests/imagenet_utils_test.py")
+               ;; Backport https://github.com/keras-team/keras/pull/12479.
+               (substitute* "tests/keras/engine/test_topology.py"
+                 (("np.ones\\(\\(3, 2\\)\\)")
+                  "1."))
+               (invoke "python" "-m" "pytest" "tests"
+                       "-p" "no:pep8"
+                       ;; FIXME: python-build-system lacks PARALLEL-TESTS?
+                       "-n" (number->string (parallel-job-count))
+                       "-k"
+                       (string-append
+                        ;; The following test fails only in the build
+                        ;; container; skip it.
+                        "not test_selu "
+                        ;; The following test was found flaky and removed in
+                        ;; recent versions.
+                        "and not test_stateful_metrics"))))))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-keras-applications" ,python-keras-applications)
-       ("python-keras-preprocessing" ,python-keras-preprocessing)
-       ("python-numpy" ,python-numpy)
-       ("python-pydot" ,python-pydot)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)
-       ("tensorflow" ,tensorflow)
-       ("graphviz" ,graphviz)))
+     (list python-h5py
+           python-keras-applications
+           python-keras-preprocessing
+           python-numpy
+           python-pydot
+           python-pyyaml
+           python-scipy
+           python-six
+           tensorflow
+           graphviz))
     (native-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-timeout" ,python-pytest-timeout)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-sphinx" ,python-sphinx)
-       ("python-requests" ,python-requests)))
+     (list python-pandas
+           python-pytest
+           python-pytest-cov
+           python-pytest-pep8
+           python-pytest-timeout
+           python-pytest-xdist
+           python-sphinx
+           python-requests))
     (home-page "https://github.com/keras-team/keras")
     (synopsis "High-level deep learning framework")
     (description "Keras is a high-level neural networks API, written in Python
 and capable of running on top of TensorFlow.  It was developed with a focus on
 enabling fast experimentation.  Use Keras if you need a deep learning library
 that:
-
 @itemize
 @item Allows for easy and fast prototyping (through user friendliness,
   modularity, and extensibility).
@@ -2625,9 +2589,9 @@ that:
            "1crmqgybzkgkpbmcx16912gsl5qsj49swa0ikx6mhqgph0chrh11"))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("googletest" ,googletest)))
+       (list googletest))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (arguments
        `(#:configure-flags '("-DBUILD_TEST=1")
          #:phases
@@ -2657,13 +2621,9 @@ These include a barrier, broadcast, and allreduce.")
          "02ada2yy6km6zgk2836kg1c97yrcpalvan34p8c57446finnpki1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-nose" ,python-nose)))
+     (list python-joblib python-nose))
     (propagated-inputs
-     `(("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)))
+     (list python-numba python-numpy python-scikit-learn python-scipy))
     (home-page "https://github.com/lmcinnes/umap")
     (synopsis
      "Uniform Manifold Approximation and Projection")
@@ -2712,16 +2672,14 @@ instead it provides low-level performance primitives leveraged in leading deep
 learning frameworks, such as PyTorch, Caffe2, MXNet, tiny-dnn, Caffe, Torch,
 and Darknet.")
       (inputs
-       `(("cpuinfo" ,cpuinfo)
-         ("fp16" ,fp16)
-         ("fxdiv" ,fxdiv)
-         ("psimd" ,psimd)
-         ("pthreadpool" ,pthreadpool)
-         ("googletest" ,googletest)))
+       (list cpuinfo
+             fp16
+             fxdiv
+             psimd
+             pthreadpool
+             googletest))
       (native-inputs
-       `(("python" ,python)
-         ("python-peachpy" ,python-peachpy)
-         ("python-six" ,python-six)))
+       (list python python-peachpy python-six))
       (license license:bsd-2))))
 
 (define-public xnnpack
@@ -2755,13 +2713,13 @@ and Darknet.")
          ;;   another target with the same name already exists.
          #:tests? #f))
       (inputs
-       `(("cpuinfo" ,cpuinfo)
-         ("pthreadpool" ,pthreadpool)
-         ("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)
-         ("fxdiv" ,fxdiv)
-         ("fp16" ,fp16)
-         ("psimd" ,psimd)))
+       (list cpuinfo
+             pthreadpool
+             googletest
+             googlebenchmark
+             fxdiv
+             fp16
+             psimd))
       (synopsis "Optimized floating-point neural network inference operators")
       (description
        "XNNPACK is a highly optimized library of floating-point neural network
@@ -2836,13 +2794,10 @@ TensorFlow.js, PyTorch, and MediaPipe.")
                     (lambda* (#:key inputs outputs tests? #:allow-other-keys)
                       ;; Run the test suite following the instructions in
                       ;; 'CONTRIBUTING.md'.  XXX: Unfortunately this doesn't
-                      ;; work, unless you set PYTHONPATH presumably.
+                      ;; work, unless you set GUIX_PYTHONPATH presumably.
                       (when tests?
-                        (let ((python-site (site-packages inputs outputs)))
-                          (setenv "PYTHONPATH"
-                                  (string-append python-site ":"
-                                                 (getenv "PYTHONPATH")))
-                          (invoke "python" "test/run_test.py")))))
+                        (add-installed-pythonpath inputs outputs)
+                        (invoke "python" "test/run_test.py"))))
                   (add-after 'install 'remove-test-executables
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       ;; Remove test executables, but keep other executables
@@ -2855,39 +2810,40 @@ TensorFlow.js, PyTorch, and MediaPipe.")
 
        ;; XXX: Tests attempt to download data such as
        ;; <https://raw.githubusercontent.com/pytorch/test-infra/master/stats/slow-tests.json>.
+       ;; We're also missing some Python modules, such as expecttest.
        #:tests? #f))
     (native-inputs
-     `(("cmake" ,cmake)
-       ("ninja" ,ninja)))
+     (list cmake ninja))
     (inputs
-     `(("eigen" ,eigen)
-       ;; ("fmt" ,fmt)
-       ("fp16" ,fp16)
-       ("gemmlowp" ,gemmlowp)
-       ("googletest" ,googletest)
-       ("googlebenchmark" ,googlebenchmark)
-       ("gloo" ,gloo)
-       ("nnpack" ,nnpack)
-       ("openblas" ,openblas)
-       ("openmpi" ,openmpi)
-       ("pthreadpool" ,pthreadpool)
-       ("protobuf" ,protobuf)
-       ("pybind11" ,pybind11)
-       ("sleef" ,sleef)
-       ("xnnpack" ,xnnpack)
-       ("zstd" ,zstd)))
+     (list eigen
+           ;; ("fmt" ,fmt)
+           fp16
+           gemmlowp
+           googletest
+           googlebenchmark
+           gloo
+           nnpack
+           openblas
+           openmpi
+           pthreadpool
+           protobuf
+           pybind11
+           sleef
+           xnnpack
+           zstd))
     (propagated-inputs
-     `(("python-astunparse" ,python-astunparse)
-       ("python-numpy" ,python-numpy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-cffi" ,python-cffi)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-future" ,python-future)
-       ("python-six" ,python-six)
-       ("python-requests" ,python-requests)
-       ("onnx" ,onnx)                       ;propagated for its Python modules
-       ("onnx-optimizer" ,onnx-optimizer)
-       ("cpuinfo" ,cpuinfo)))
+     (list python-astunparse
+           python-click
+           python-numpy
+           python-pyyaml
+           python-cffi
+           python-typing-extensions
+           python-future
+           python-six
+           python-requests
+           onnx ;propagated for its Python modules
+           onnx-optimizer
+           cpuinfo))
     (home-page "https://pytorch.org/")
     (synopsis "Python library for tensor computation and deep neural networks")
     (description
@@ -2926,13 +2882,10 @@ Note: currently this package does not provide GPU support.")
                (with-directory-excursion (string-append (assoc-ref outputs "out") "/lib")
                  (invoke "python" "-m" "pytest"))))))))
     (propagated-inputs
-     `(("python-cython" ,python-cython)
-       ("python-numpy" ,python-numpy)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-numpy python-scikit-learn python-scipy
+           python-setuptools-scm))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/hmmlearn/hmmlearn")
     (synopsis "Hidden Markov Models with scikit-learn like API")
     (description
diff --git a/gnu/packages/magic-wormhole.scm b/gnu/packages/magic-wormhole.scm
index 465e6aced6..a498eb8117 100644
--- a/gnu/packages/magic-wormhole.scm
+++ b/gnu/packages/magic-wormhole.scm
@@ -48,15 +48,15 @@
               (("test_log_http") "disabled_test_log_http"))
             #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-autobahn" ,python-autobahn)
-       ("python-idna" ,python-idna)
-       ("python-service-identity" ,python-service-identity)
-       ("python-six" ,python-six)
-       ("python-treq" ,python-treq)
-       ("python-twisted" ,python-twisted)))
+     (list python-attrs
+           python-autobahn
+           python-idna
+           python-service-identity
+           python-six
+           python-treq
+           python-twisted))
     (home-page "https://github.com/warner/magic-wormhole-mailbox-server")
     (synopsis "Magic-Wormhole central mailbox server")
     (description "This package provides the main server that Magic-Wormhole
@@ -89,11 +89,9 @@ connection, or through a transit-relay.")
                          (find-files "docs/"))
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-tox" ,python-tox)))
+     (list python-mock python-pyflakes python-tox))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)))
+     (list python-twisted))
     (home-page
       "https://github.com/warner/magic-wormhole-transit-relay")
     (synopsis "Magic-Wormhole relay server")
@@ -128,22 +126,22 @@ together, allowing them to pretend they have a direct connection.")
                (install-file "docs/wormhole.1" man))
              #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ;; XXX These are required for the test suite but end up being referenced
-       ;; by the built package.
-       ;; https://bugs.gnu.org/25235
-       ("magic-wormhole-mailbox-server" ,magic-wormhole-mailbox-server)
-       ("magic-wormhole-transit-relay" ,magic-wormhole-transit-relay)))
+     (list python-mock
+           ;; XXX These are required for the test suite but end up being referenced
+           ;; by the built package.
+           ;; https://bugs.gnu.org/25235
+           magic-wormhole-mailbox-server
+           magic-wormhole-transit-relay))
     (propagated-inputs
-     `(("python-autobahn" ,python-autobahn)
-       ("python-click" ,python-click)
-       ("python-hkdf" ,python-hkdf)
-       ("python-humanize" ,python-humanize)
-       ("python-pynacl" ,python-pynacl)
-       ("python-spake2" ,python-spake2)
-       ("python-tqdm" ,python-tqdm)
-       ("python-twisted" ,python-twisted)
-       ("python-txtorcon" ,python-txtorcon)))
+     (list python-autobahn
+           python-click
+           python-hkdf
+           python-humanize
+           python-pynacl
+           python-spake2
+           python-tqdm
+           python-twisted
+           python-txtorcon))
     (home-page "https://github.com/warner/magic-wormhole")
     (synopsis "Securely transfer data between computers")
     (description "Magic-Wormhole is a library and a command-line tool named
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index e52b48a2d6..c069e9e928 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -40,6 +40,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Benoit Joly <benoit@benoitj.ca>
 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
@@ -214,8 +215,7 @@
        ("automake" ,automake)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (home-page "https://abook.sourceforge.io/")
     (synopsis "Text-based address book")
     (description
@@ -239,18 +239,15 @@ mail client.")
          "0dvm6acl32dv8bixx9z50gzwfp6kj4kxnn1j3dcwjlp7sasjp41s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)
-       ("m4" ,m4)))                     ;for the test suite
+     (list automake autoconf gettext-minimal m4))                     ;for the test suite
     (inputs
-     `(("gdbm" ,gdbm)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("gsasl" ,gsasl)
-       ("guile" ,guile-3.0)
-       ("libgcrypt" ,libgcrypt)         ;gnutls support depends on libgcrypt
-       ("libgpg-error" ,libgpg-error)))
+     (list gdbm
+           gnutls
+           gpgme
+           gsasl
+           guile-3.0
+           libgcrypt ;gnutls support depends on libgcrypt
+           libgpg-error))
     (outputs '("out" "debug"))
     (synopsis "SMTP message submission daemon")
     (description "Anubis is a daemon that sits between the Mail User
@@ -358,17 +355,17 @@ example, modify the message headers or body, or encrypt or sign the message.")
        ("texinfo" ,texinfo)
        ("dejagnu" ,dejagnu)))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("gsasl" ,gsasl)
-       ("gnutls" ,gnutls)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)
-       ("linux-pam" ,linux-pam)
-       ("libltdl" ,libltdl)
-       ("gdbm" ,gdbm)
-       ;; Required for SEARCH CHARSET.
-       ("libiconv" ,libiconv)
-       ("libunistring" ,libunistring)))
+     (list guile-3.0
+           gsasl
+           gnutls
+           ncurses
+           readline
+           linux-pam
+           libltdl
+           gdbm
+           ;; Required for SEARCH CHARSET.
+           libiconv
+           libunistring))
     (home-page "https://mailutils.org")
     (synopsis "Utilities and library for reading and serving mail")
     (description
@@ -417,11 +414,10 @@ software.  GNU Mailutils provides the following commands:
       (arguments
        `(#:import-path "gitlab.com/shackra/goimapnotify"))
       (propagated-inputs
-       `(("go-github-com-emersion-go-imap" ,go-github-com-emersion-go-imap)
-         ("go-github-com-emersion-go-imap-idle" ,go-github-com-emersion-go-imap-idle)
-         ("go-github-com-emersion-go-sasl" ,go-github-com-emersion-go-sasl)
-         ("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)
-         ("go-golang-org-x-text" ,go-golang-org-x-text)))
+       (list go-github-com-emersion-go-imap
+             go-github-com-emersion-go-imap-idle
+             go-github-com-emersion-go-sasl go-github-com-sirupsen-logrus
+             go-golang-org-x-text))
       (synopsis "Execute scripts on IMAP mailbox changes.")
       (description
        "Script to execute scripts on IMAP mailbox changes (new/deleted/updated
@@ -434,8 +430,8 @@ messages) using IDLE.  Implemented in Go.")
     (inherit mailutils)
     (name "guile2.2-mailutils")
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs mailutils))))))
+     (modify-inputs (package-inputs mailutils)
+       (replace "guile" guile-2.2)))))
 
 (define-public nullmailer
   (package
@@ -499,9 +495,9 @@ messages) using IDLE.  Implemented in Go.")
              #t)))))
     (native-inputs
      ;; For tests.
-     `(("daemontools" ,daemontools)))   ; for svc
+     (list daemontools))   ; for svc
     (inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (home-page "https://untroubled.org/nullmailer/")
     (synopsis "Simple relay-only mail transfer agent")
     (description
@@ -532,7 +528,7 @@ to run without any changes.")
         (base32 "001394gxji89hfh6jcdrmv9ndimdsz7bndd55i516c8lfc9mwyjz"))))
     (build-system gnu-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ssl="
@@ -570,14 +566,14 @@ aliasing facilities to work just as they would on normal mail.")
              (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("gdbm" ,gdbm)
-       ("gpgme" ,gpgme)
-       ("libidn2" ,libidn2)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("sqlite" ,sqlite)))
+     (list cyrus-sasl
+           gdbm
+           gpgme
+           libidn2
+           ncurses
+           openssl
+           perl
+           sqlite))
     (arguments
      `(#:configure-flags '("--enable-smtp"
                            "--enable-imap"
@@ -615,19 +611,19 @@ operating systems.")
         (base32 "1ad05k98z9r317k2hhxbgdic00iha5r0k0f8224anz60i9kc78w5"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("gdbm" ,gdbm)
-       ("gpgme" ,gpgme)
-       ("ncurses" ,ncurses)
-       ("gnutls" ,gnutls)
-       ("openssl" ,openssl)             ; for S/MIME
-       ("perl" ,perl)
-       ("kyotocabinet" ,kyotocabinet)
-       ("libxslt" ,libxslt)
-       ("libidn2" ,libidn2)
-       ("libxml2" ,libxml2)
-       ("lmdb" ,lmdb)
-       ("notmuch" ,notmuch)))
+     (list cyrus-sasl
+           gdbm
+           gpgme
+           ncurses
+           gnutls
+           openssl ; for S/MIME
+           perl
+           kyotocabinet
+           libxslt
+           libidn2
+           libxml2
+           lmdb
+           notmuch))
     (native-inputs
      `(("automake" ,automake)
        ("gettext-minimal" ,gettext-minimal)
@@ -726,15 +722,12 @@ It adds a large amount of new and improved features to mutt.")
                 "0i3xfc84qn1z99i70q68kbnp9rmgqrnprqb418ba52s6g9j9dsia"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gnupg" ,gnupg)                 ; for tests only
-       ("gobject-introspection" ,gobject-introspection)))
-    (inputs `(("glib" ,glib)
-              ("gpgme" ,gpgme)
-              ("zlib" ,zlib)))
+     (list pkg-config gnupg ; for tests only
+           gobject-introspection vala))
+    (inputs (list glib gpgme zlib))
     (arguments
      `(#:configure-flags
-         (list "--enable-introspection=yes")
+         (list "--enable-introspection=yes" "--enable-vapigen=yes")
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -911,19 +904,19 @@ mailpack.  What can alterMIME do?
          (add-after 'install 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gnupg" ,gnupg)
-       ("ninja" ,ninja)
-       ("pkg-config" ,pkg-config)
-       ("ronn" ,ronn)
-       ("w3m" ,w3m)
-       ("xorg-server" ,xorg-server)))
+     (list glib-networking
+           gsettings-desktop-schemas
+           gnupg
+           ninja
+           pkg-config
+           ronn
+           w3m
+           xorg-server))
     (inputs
      `(("boost" ,boost)
        ("gmime" ,gmime)
        ("gobject-introspection" ,gobject-introspection) ; it is referenced
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("libpeas" ,libpeas)
        ("libsass" ,libsass)
        ("notmuch" ,notmuch)
@@ -932,7 +925,7 @@ mailpack.  What can alterMIME do?
        ("python-pygobject" ,python-pygobject)
        ("webkitgtk" ,webkitgtk)))
     (propagated-inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme))) ; Required for the thread view
+     (list adwaita-icon-theme)) ; Required for the thread view
     (home-page "https://astroidmail.github.io/")
     (synopsis "GTK frontend to the notmuch mail system")
     (description
@@ -1021,7 +1014,7 @@ MIME-encoded email package.")
                    (("/usr") ""))       ; This allows the man page to install.
                  #t))))))
       (native-inputs
-       `(("python" ,python)))           ; for tests
+       (list python))           ; for tests
       (synopsis "MIME type associations for file types")
       (description
        "This package provides MIME type associations for file types.")
@@ -1050,8 +1043,8 @@ MIME-encoded email package.")
                (("GREP=/bin/grep")
                 (string-append "GREP=" (which "grep") "\n")))
              #t)))))
-    (native-inputs `(("flex" ,flex)))
-    (inputs `(("bdb" ,bdb)))
+    (native-inputs (list flex))
+    (inputs (list bdb))
     (home-page "https://bogofilter.sourceforge.io/")
     (synopsis "Mail classifier based on a Bayesian filter")
     (description
@@ -1081,11 +1074,9 @@ and corrections.  It is based on a Bayesian filter.")
                   "0nzh5dcc559jfw4yy12gc98s17w82b15zxikspc6apd8filmk9xg"))))
       (build-system python-build-system)
       (native-inputs
-       `(("asciidoc" ,asciidoc)))
+       (list asciidoc))
       (inputs
-       `(("python-distro" ,python-distro)
-         ("python-imaplib2" ,python-imaplib2)
-         ("python-rfc6555" ,python-rfc6555)))
+       (list python-distro python-imaplib2 python-rfc6555))
       (arguments
        `(;; Tests require a modifiable IMAP account.
          #:tests? #f
@@ -1126,10 +1117,10 @@ repository and Maildir/IMAP as LOCAL repository.")
                (base32
                 "0ixzyq33l6j34410kqav3lwn2wx171zvqd3irvns2jvhrbww8i6g"))))
     (native-inputs
-     `(("emacs" ,emacs)))
+     (list emacs))
     (propagated-inputs
-     `(("ruby-sqlite3" ,ruby-sqlite3) ; optional for the database of messages
-       ("ruby" ,ruby))) ; to set GEM_PATH so ruby-sqlite3 is found at runtime
+     (list ruby-sqlite3 ; optional for the database of messages
+           ruby)) ; to set GEM_PATH so ruby-sqlite3 is found at runtime
     (build-system gnu-build-system)
     (arguments
      (let ((elisp-dir "/share/emacs/site-lisp")
@@ -1184,10 +1175,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
        ("emacs" ,emacs-minimal)
        ("tzdata" ,tzdata-for-tests)))   ; for mu/test/test-mu-query.c
     (inputs
-     `(("xapian" ,xapian)
-       ("guile" ,guile-3.0)
-       ("glib" ,glib)
-       ("gmime" ,gmime)))
+     (list xapian guile-3.0 glib gmime))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -1221,8 +1209,7 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; For mu/test/test-mu-query.c
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))))
+                     (search-input-directory inputs "share/zoneinfo"))))
          (add-after 'install 'install-emacs-autoloads
            (lambda* (#:key outputs #:allow-other-keys)
              (emacs-generate-autoloads
@@ -1278,18 +1265,17 @@ attachments, create new maildirs, and so on.")
              "def _test_save_named_query"))
           #t)))))
     (native-inputs
-     `(("procps" ,procps)
-       ("python-mock" ,python-mock)))
+     (list procps python-mock))
     (inputs
-     `(("gnupg" ,gnupg)
-       ("python-magic" ,python-magic)
-       ("python-configobj" ,python-configobj)
-       ("python-twisted" ,python-twisted)
-       ("python-service-identity" ,python-service-identity)
-       ("python-urwid" ,python-urwid)
-       ("python-urwidtrees" ,python-urwidtrees)
-       ("python-gpg" ,python-gpg)
-       ("python-notmuch2" ,python-notmuch2)))
+     (list gnupg
+           python-magic
+           python-configobj
+           python-twisted
+           python-service-identity
+           python-urwid
+           python-urwidtrees
+           python-gpg
+           python-notmuch2))
     (home-page "https://github.com/pazz/alot")
     (synopsis "Command-line MUA using Notmuch")
     (description
@@ -1319,11 +1305,8 @@ Notmuch.")
          (file-name (string-append name "-" version "-checkout"))))
       (build-system python-build-system)
       (inputs
-       `(("python-notmuch" ,python-notmuch)
-         ("python-pygobject" ,python-pygobject)
-         ("gobject-introspection" ,gobject-introspection)
-         ("libnotify" ,libnotify)
-         ("gtk+" ,gtk+)))
+       (list python-notmuch python-pygobject gobject-introspection
+             libnotify gtk+))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1332,7 +1315,7 @@ Notmuch.")
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin/notifymuch")))
                  (wrap-program bin
-                   `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                   `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                    `("GI_TYPELIB_PATH" ":" prefix
                      (,(getenv "GI_TYPELIB_PATH")
                       ,(string-append out "/lib/girepository-1.0")))))
@@ -1401,11 +1384,7 @@ invoking @command{notifymuch} from the post-new hook.")
        ("man" ,man-db)
        ("perl" ,perl)))
     (inputs
-     `(("glib" ,glib)
-       ("gmime" ,gmime)
-       ("talloc" ,talloc)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list glib gmime talloc xapian zlib))
     (home-page "https://notmuchmail.org/")
     (synopsis "Thread-based email index, search, and tagging")
     (description
@@ -1420,7 +1399,7 @@ ing, and tagging large collections of email messages.")
     (build-system emacs-build-system)
     (native-inputs '())
     (inputs
-     `(("notmuch" ,notmuch)))
+     (list notmuch))
     (arguments
      `(#:exclude (cons* "make-deps.el" "rstdoc.el" %default-exclude)
        #:phases
@@ -1468,10 +1447,9 @@ system.")))
                                   (assoc-ref outputs "out") "/bin")))
                         (install-file "notmuch-addrlookup" bin)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("notmuch" ,notmuch)))
+     (list glib notmuch))
     (home-page "https://github.com/aperezdc/notmuch-addrlookup-c")
     (synopsis "Address lookup tool for Notmuch")
     (description "This is an address lookup tool using a Notmuch database,
@@ -1486,7 +1464,7 @@ useful for email address completion.")
     ;; bindings are distributed via the notmuch release tarball.
     (source (package-source notmuch))
     (build-system python-build-system)
-    (inputs `(("notmuch" ,notmuch)))
+    (inputs (list notmuch))
     (arguments
      `(#:tests? #f  ; no "test" target
        #:phases
@@ -1517,7 +1495,7 @@ and search library.")
   (package
     (inherit python-notmuch)
     (name "python-notmuch2")
-    (propagated-inputs `(("python-cffi" ,python-cffi)))
+    (propagated-inputs (list python-cffi))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1541,13 +1519,9 @@ and search library.")
         (base32 "1s799kx16nm5ry1fcqcc0grgxrwnnp4cnzd0hzwbkvc5v2sf6g8b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
-     `(("libcrypto" ,openssl)
-       ("notmuch" ,notmuch)
-       ("sqlite" ,sqlite)
-       ("xapian" ,xapian)))
+     (list openssl notmuch sqlite xapian))
     (home-page "http://www.muchsync.org/")
     (synopsis "Synchronize notmuch mail across machines")
     (description
@@ -1599,19 +1573,13 @@ useful features.")
              (sha256
                (base32 "0g7an003simfdn7ihg9yjv7hl2czsmjsndjrp39i7cad8icixscn"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list autoconf automake libtool pkg-config))
     (propagated-inputs
      ;; 'libetpan-config --libs' returns '-lssl -lcrypto -lsasl2', so these
      ;; libraries need to be propagated.
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)))
+     (list cyrus-sasl openssl))
     (inputs
-     `(("curl" ,curl)
-       ("expat" ,expat)
-       ("zlib" ,zlib)))
+     (list curl expat zlib))
     (arguments
       '(#:configure-flags
         '("--disable-static" "--disable-db")))
@@ -1685,16 +1653,16 @@ compresses it.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/procmime.c"
                (("/usr/share/mime/globs")
-                (string-append (assoc-ref inputs "shared-mime-info")
-                               "/share/mime/globs"))))))))
+                (search-input-directory inputs
+                                        "/share/mime/globs"))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ;;("docbook-utils" ,docbook-utils)
-       ("flex" ,flex)
-       ("gettext-minimal" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list bison
+           ;;("docbook-utils" ,docbook-utils)
+           flex
+           gettext-minimal
+           gobject-introspection
+           intltool
+           pkg-config))
     (inputs
      `(("bogofilter" ,bogofilter)
        ("cairo" ,cairo)
@@ -1705,7 +1673,7 @@ compresses it.")
        ("enchant" ,enchant)
        ("expat" ,expat)
        ("fontconfig" ,fontconfig)
-       ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("ghostscript" ,ghostscript)
        ("glib" ,glib)
        ("gnupg" ,gnupg)
@@ -1740,7 +1708,7 @@ compresses it.")
        ;;("webkitgtk" ,webkitgtk)
        ("ytnef" ,ytnef)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "GTK-based Email client")
     (description "Claws-Mail is an email client (and news reader) based on GTK+.
 The appearance and interface are designed to be familiar to new users coming
@@ -1763,12 +1731,9 @@ addons which can add many functionalities to the base client.")
         (base32 "0ssj8izcw1fywihlip6wljd9i41w23cy0vp69sz4v1vn26cf389l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libsecret" ,libsecret)
-       ("gnutls" ,gnutls)
-       ("zlib" ,zlib)
-       ("gsasl" ,gsasl)))
+     (list libsecret gnutls zlib gsasl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://marlam.de/msmtp/")
     (arguments
      `(#:configure-flags (list "--with-libgsasl"
@@ -1831,9 +1796,7 @@ delivery.")
        ("libxt" ,libxt)
        ("libxaw" ,libxaw)))
     (native-inputs
-     `(("pcre" ,pcre "bin")
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list `(,pcre "bin") perl pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1926,24 +1889,20 @@ facilities for checking incoming mail.")
         (base32 "1f525bvpjvi4rnwqjsqaqrbdii08sqmc1v8xq03m19w1vk6cqrqw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("clucene" ,clucene)
-       ("icu4c" ,icu4c)
-       ("libsodium" ,libsodium)         ; extra password algorithms
-       ("libstemmer" ,libstemmer)
-       ;; FIXME: The 'test-backtrace' tests fail on arm when using glibc's
-       ;; backtrace_symbol() function so fallback to using libunwind.
-       ,@(if (target-arm?)
-          `(("libunwind" ,libunwind))
-          '())
-       ("linux-pam" ,linux-pam)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           clucene
+           icu4c
+           libsodium ; extra password algorithms
+           libstemmer
+           libunwind
+           linux-pam
+           lz4
+           openssl
+           sqlite
+           zlib
+           `(,zstd "lib")))
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
                            "--localstatedir=/var"
@@ -2030,9 +1989,9 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
                     (string-append ".executable = \"" libexec
                                    "/managesieve-login\"")))))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("dovecot" ,dovecot)))
+       (list dovecot))
       (home-page "https://pigeonhole.dovecot.org")
       (synopsis "Dovecot Sieve mail filtering plug-in and ManageSieve service")
       (description
@@ -2071,13 +2030,9 @@ scripts to prevent embarrassing errors later on.")
         (search-patches "dovecot-trees-support-dovecot-2.3.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("dovecot" ,dovecot)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf libtool dovecot pkg-config))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (arguments
      `(#:tests? #f ;No tests exist.
        #:configure-flags (list (string-append "--with-dovecot="
@@ -2122,13 +2077,9 @@ using libsodium sealed boxes.
            "13h07l7xy713zchnj2p9fhvq7fdl4zy1ai94li3ygkqjjj8hrgas"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("automake" ,automake)
-         ("autoconf" ,autoconf)
-         ("libtool" ,libtool)
-         ("dovecot" ,dovecot)
-         ("pkg-config" ,pkg-config)))
+       (list automake autoconf libtool dovecot pkg-config))
       (inputs
-       `(("libsodium" ,libsodium)))
+       (list libsodium))
       (arguments
        `(#:tests? #f ;No tests exist.
          #:configure-flags (list (string-append "--with-dovecot="
@@ -2154,12 +2105,9 @@ hashing scheme (such as scrypt) plug-in for @code{Dovecot}.")
                 "1zq0wwvmqsl9y71546dr0aygzn9gjjfiw19hlcq87s929y4p6ckw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("bdb" ,bdb)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list bdb cyrus-sasl openssl zlib))
     (home-page "https://isync.sourceforge.io/")
     (synopsis "Mailbox synchronization program")
     (description
@@ -2180,9 +2128,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
         (base32 "1z01wbflg49nbgzl81x260cp8x6qr7xdpz3dkrg82m1fwa9742q4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-simple" ,perl-email-simple)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-email-simple perl-module-pluggable perl-mro-compat))
     (home-page "https://metacpan.org/release/Email-Abstract")
     (synopsis "Interface to mail representations")
     (description "Email::Abstract provides module writers with the ability to
@@ -2282,13 +2228,13 @@ identify a message uniquely.")
          "0z1k3i0lzp2k421gc8f3wq0jbqflkbw2xqd2k7n7pmv56417kvk8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-address" ,perl-email-address)
-       ("perl-email-messageid" ,perl-email-messageid)
-       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
-       ("perl-email-mime-encodings" ,perl-email-mime-encodings)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-email-address
+           perl-email-messageid
+           perl-email-mime-contenttype
+           perl-email-mime-encodings
+           perl-email-simple
+           perl-mime-types
+           perl-module-runtime))
     (home-page "https://metacpan.org/release/Email-MIME")
     (synopsis "MIME message handling")
     (description "Email::MIME is an extension of the Email::Simple module, to
@@ -2311,7 +2257,7 @@ message.  Headers are decoded from MIME encoding.")
          "042kxhs3bp1ab9z0mbr1wy21ld4lxd6v2a2mmrashqnsn2075fws"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Email-MIME-ContentType")
     (synopsis "Parse MIME Content-Type headers")
     (description "Email::MIME::ContentType parses a MIME Content-Type
@@ -2332,7 +2278,7 @@ header.")
          "0p5b8g9gh35m8fqrpx60g4bp98rvwd02n5b0vm9wh7mk0xah8wac"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Email-MIME-Encodings")
     (synopsis "Unified interface to MIME encoding and decoding")
     (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
@@ -2351,18 +2297,18 @@ header.")
         (base32 "0yfssp3rqdx1dmgvnygarzgkpkhqm28r5sd0gh87ksk8yxndhjql"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (propagated-inputs
-     `(("perl-email-abstract" ,perl-email-abstract)
-       ("perl-email-address" ,perl-email-address)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-throwable" ,perl-throwable)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-email-abstract
+           perl-email-address
+           perl-email-simple
+           perl-list-moreutils
+           perl-module-runtime
+           perl-moo
+           perl-moox-types-mooselike
+           perl-sub-exporter
+           perl-throwable
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Email-Sender")
     (synopsis "Perl library for sending email")
     (description "Email::Sender replaces the old and sometimes problematic
@@ -2383,7 +2329,7 @@ Email::Send library.")
          "1m4brbjvalyp5kjqslqv4155dzwg977shxin208i7lc8236n6pyq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-email-date-format" ,perl-email-date-format)))
+     (list perl-email-date-format))
     (home-page "https://metacpan.org/release/Email-Simple")
     (synopsis "Parsing of RFC 2822 messages")
     (description "Email::Simple provides simple parsing of RFC 2822 message
@@ -2405,7 +2351,7 @@ format and headers.")
         (base32 "1bhh8hlsl9597x0bnfl563k2c09b61qnkb9mfyqcmzlq63m1zw5y"))))
     (build-system meson-build-system)
     (propagated-inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "http://www.stafford.uklinux.net/libesmtp/")
     (synopsis "Library for sending mail via remote hosts using SMTP")
     (description
@@ -2445,13 +2391,9 @@ be expected from a simple client.")
                    (lambda _ (invoke "autoreconf" "-vfi"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list bison flex autoconf automake libtool))
     (inputs
-     `(("libesmtp" ,libesmtp)))
+     (list libesmtp))
     (home-page "https://sourceforge.net/projects/esmtp/")
     (synopsis "Relay-only mail transfer agent (MTA)")
     (description "Esmtp is a simple relay-only mail transfer agent built using
@@ -2474,9 +2416,7 @@ compatibility shims for the @command{sendmail}, @command{mailq}, and
                (base32 "196fs1z8y7p12wmqn1bylzz94szl58yv2aby3p30nmwjnyv8rch6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("tdb" ,tdb)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list tdb openssl zlib))
     (home-page "https://github.com/nicm/fdm")
     (synopsis "Mail Retrieval Agent (MRA) and Mail Delivery Agent (MDA)")
     (description "fdm is a program designed to fetch mail from POP3
@@ -2527,7 +2467,7 @@ deliver it in various ways.")
     ;; file system are performed during 'make install'.  However, these
     ;; are performed before the actual build process.
     (build-system gnu-build-system)
-    (inputs `(("exim" ,exim)))
+    (inputs (list exim))
     (home-page "http://www.procmail.org/")
     (synopsis "Versatile mail delivery agent (MDA)")
     (description "Procmail is a mail delivery agent (MDA) featuring support
@@ -2561,13 +2501,10 @@ maintained.")
                (copy-recursively "misc/zsh" zsh)
                #t))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-configobj" ,python-configobj)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-unidecode" ,python-unidecode)
-       ("python-vobject" ,python-vobject)))
+     (list python-atomicwrites python-configobj python-ruamel.yaml
+           python-unidecode python-vobject))
     (synopsis "Console address book using CardDAV")
     (description "Khard is an address book for the console.  It creates, reads,
 modifies and removes CardDAV address book entries at your local machine.  For
@@ -2591,9 +2528,7 @@ Khard can also be used from within the email client @command{mutt}.")
         (base32 "0qk1rfgfm5drj4iyniiabrasrpqv570vzhgz66lwgb67y4amkjv1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-net-dns-resolver-programmable"
-        ,perl-net-dns-resolver-programmable)))
+     (list perl-module-build perl-net-dns-resolver-programmable))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2605,10 +2540,7 @@ Khard can also be used from within the email client @command{mutt}.")
                                                "/sbin'")))
              #t)))))
     (inputs
-     `(("perl-error" ,perl-error)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-netaddr-ip" ,perl-netaddr-ip)
-       ("perl-uri" ,perl-uri)))
+     (list perl-error perl-net-dns perl-netaddr-ip perl-uri))
     (home-page "https://metacpan.org/release/Mail-SPF")
     (synopsis "Perl implementation of Sender Policy Framework")
     (description "Mail::SPF is the Sender Policy Framework implemented
@@ -2629,7 +2561,7 @@ in Perl.")
                 "1g1wym9vcbhldwvi4w5pl0fhd4jh2icj975awf4wr5xmkli9mxbz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Mail-AuthenticationResults")
     (synopsis "Object Oriented Authentication-Results Headers")
     (description "Mail::AuthenticationResults parses the message header field
@@ -2653,14 +2585,11 @@ Authentication-Results header seen in the wild.")
                 "1x8v4pa0447c1xqri1jn96i8vlyjpl6jmz63nb1vifbp16yi3zxb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
-       ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
-       ("perl-mailtools" ,perl-mailtools)
-       ("perl-net-dns" ,perl-net-dns)))
+     (list perl-crypt-openssl-rsa perl-mail-authenticationresults
+           perl-mailtools perl-net-dns))
     (native-inputs
-     `(("perl-net-dns-resolver-mock" ,perl-net-dns-resolver-mock)
-       ("perl-test-requiresinternet" ,perl-test-requiresinternet)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-net-dns-resolver-mock perl-test-requiresinternet
+           perl-yaml-libyaml))
     (home-page "https://metacpan.org/release/Mail-DKIM")
     (synopsis "Signs/verifies Internet mail with DKIM/DomainKey signatures")
     (description "Mail::DKIM is a Perl module that implements the new Domain
@@ -2721,17 +2650,17 @@ DKIM and/or DomainKeys.")
                               "perl-timedate"))
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-crypt-openssl-rsa" ,perl-crypt-openssl-rsa)
-       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-mailtools" ,perl-mailtools)
-       ("perl-mail-authenticationresults" ,perl-mail-authenticationresults)
-       ("perl-mail-dkim" ,perl-mail-dkim)
-       ("perl-mime-tools" ,perl-mime-tools)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-socket6" ,perl-socket6)
-       ("perl-timedate" ,perl-timedate)))
+     (list perl
+           perl-crypt-openssl-rsa
+           perl-io-socket-inet6
+           perl-mailtools
+           perl-mail-authenticationresults
+           perl-mail-dkim
+           perl-mime-tools
+           perl-net-dns
+           perl-net-server
+           perl-socket6
+           perl-timedate))
     (home-page "http://dkimproxy.sourceforge.net/")
     (synopsis "SMTP proxy to sign and verify Internet mail with DKIM headers")
     (description
@@ -2780,9 +2709,8 @@ existing mail server.  With Postfix, the proxies can operate as either
              (patch-shebang "mb2md" (list (string-append perl "/bin")))
              (chmod "mb2md" #o555))
            #t))))
-    (native-inputs `(("gzip" ,gzip)))
-    (inputs `(("perl" ,perl)
-              ("perl-timedate" ,perl-timedate)))
+    (native-inputs (list gzip))
+    (inputs (list perl perl-timedate))
     (home-page "http://batleth.sapienti-sat.org/projects/mb2md/")
     (synopsis "Mbox to maildir converter")
     (description
@@ -2805,7 +2733,7 @@ converts them to maildir format directories.")
         (base32 "1bir977vnqs76g8jgv1yivqw0wk2kn56l3l5r4w2ipix3fir138y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
      `(#:tests? #f                   ; XXX: Upstream tests appear to be broken
        #:make-flags (list (string-append "CC=" ,(cc-for-target))
@@ -2854,9 +2782,9 @@ easily (one at a time).")
         (base32 "1yc7lsdy9gvlslvljqg34kvcaf4wvrwlvj6h5awkzlp6x9qva3l7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://marlam.de/mpop/")
     (synopsis "POP3 mail client")
     (description "mpop is a small and fast POP3 client suitable as a
@@ -2979,8 +2907,7 @@ define(`confINST_DEP', `')
        ;; require root privileges
        #:tests? #f))
     (inputs
-     `(("m4" ,m4)
-       ("perl" ,perl)))
+     (list m4 perl))
     (home-page "http://sendmail.org")
     (synopsis
      "Highly configurable Mail Transfer Agent (MTA)")
@@ -3023,6 +2950,7 @@ transfer protocols.")
              (let ((out (assoc-ref outputs "out"))
                    (path (getenv "PERL5LIB")))
                (wrap-script (string-append out "/bin/sieve-connect")
+                 #:guile (search-input-file inputs "bin/guile")
                  `("PERL5LIB" ":" = (,path)))
                #t))))))
     (inputs
@@ -3068,15 +2996,14 @@ from the Cyrus IMAP project.")
         (base32 "05sd7bmq29ibnqbl2z53hiyprfxzf0qydfdaixs68rz55wqhbgsi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("bdb" ,bdb)
-       ("libasr" ,libasr)
-       ("libevent" ,libevent)
-       ("libressl" ,libressl)           ; recommended, and supports e.g. ECDSA
-       ("linux-pam" ,linux-pam)
-       ("zlib" ,zlib)))
+     (list bdb
+           libasr
+           libevent
+           libressl ; recommended, and supports e.g. ECDSA
+           linux-pam
+           zlib))
     (native-inputs
-     `(("bison" ,bison)
-       ("groff" ,groff)))               ; for man pages
+     (list bison groff))               ; for man pages
     (arguments
      `(#:configure-flags
        (list "--localstatedir=/var"
@@ -3148,7 +3075,7 @@ to esoteric or niche requirements.")
                 "1b1mx71bvmv92lbm08wr2p60g3qhikvv3n15zsr6dcwbk9aqahzq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libressl" ,libressl)
        ("libevent" ,libevent)
@@ -3225,9 +3152,9 @@ for OpenSMTPD to extend its functionality.")
                (("-o \\$\\{...OWN\\} -g \\$\\{...GRP\\}") ""))))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("mandoc" ,mandoc)))           ; silently installs empty man page without
+     (list mandoc))           ; silently installs empty man page without
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://imperialat.at/dev/libopensmtpd/")
     (synopsis "OpenSMTPd filter C API")
     (description
@@ -3265,13 +3192,12 @@ writing OpenSMTPd filters.")
                (("-o \\$\\{...OWN\\} -g \\$\\{...GRP\\}") ""))))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("mandoc" ,mandoc)))           ; silently installs empty man page without
+     (list mandoc))           ; silently installs empty man page without
     (inputs
-     `(("libevent" ,libevent)
-       ("libopensmtpd" ,libopensmtpd)
-       ;; XXX Our OpenSMTPd package uses libressl, but this package currently
-       ;; supports HAVE_ED25519 only with openssl.  Switch back when possible.
-       ("openssl" ,openssl)))
+     (list libevent libopensmtpd
+           ;; XXX Our OpenSMTPd package uses libressl, but this package currently
+           ;; supports HAVE_ED25519 only with openssl.  Switch back when possible.
+           openssl))
     (home-page "http://imperialat.at/dev/filter-dkimsign/")
     (synopsis "OpenSMTPd filter for signing mail with DKIM")
     (description
@@ -3303,7 +3229,7 @@ messages with @acronym{DKIM, DomainKeys Identified Mail} (RFC 4871).")
                     (libexec (string-append out "/libexec/opensmtpd")))
                (setenv "GOBIN" libexec)))))))
     (native-inputs
-     `(("opensmtpd" ,opensmtpd)))
+     (list opensmtpd))
     (home-page "https://github.com/poolpOrg/filter-rspamd")
     (synopsis "OpenSMTPd filter to request an Rspamd analysis")
     (description
@@ -3324,30 +3250,30 @@ an SMTP transaction before a message is committed to queue.")
          (base32 "0a5ckbf8hc3y28b7p5psp0d4bxk601jlr5pd3hhh545xd8d9f0dg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("gunicorn" ,gunicorn)
-       ("python-aiosmtpd" ,python-aiosmtpd)
-       ("python-alembic" ,python-alembic)
-       ("python-atpublic" ,python-atpublic)
-       ("python-authheaders" ,python-authheaders)
-       ("python-authres" ,python-authres)
-       ("python-click" ,python-click)
-       ("python-dateutil" ,python-dateutil)
-       ("python-dnspython" ,python-dnspython)
-       ("python-falcon" ,python-falcon)
-       ("python-flufl-bounce" ,python-flufl-bounce)
-       ("python-flufl-i18n" ,python-flufl-i18n)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-lazr-config" ,python-lazr-config)
-       ("python-passlib" ,python-passlib)
-       ("python-requests" ,python-requests)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-zope-component" ,python-zope-component)
-       ("python-zope-configuration" ,python-zope-configuration)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list gunicorn
+           python-aiosmtpd
+           python-alembic
+           python-atpublic
+           python-authheaders
+           python-authres
+           python-click
+           python-dateutil
+           python-dnspython
+           python-falcon
+           python-flufl-bounce
+           python-flufl-i18n
+           python-flufl-lock
+           python-importlib-resources
+           python-lazr-config
+           python-passlib
+           python-requests
+           python-sqlalchemy
+           python-zope-component
+           python-zope-configuration
+           python-zope-event
+           python-zope-interface))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://www.list.org")
     (synopsis "Mailing list manager")
     (description
@@ -3361,19 +3287,19 @@ filtering, digest delivery, and more.")
 (define-public python-mailmanclient
   (package
     (name "python-mailmanclient")
-    (version "3.3.1")
+    (version "3.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "mailmanclient" version))
        (sha256
         (base32
-         "0pjgzpvhdb6ql8asb20xr8d01m646zpghmcp9fmscks0n1k4di4g"))))
+         "0ppqnv84v7npgjykhqdy5c38vanz4l0qw871kpsl27z4fm365zlj"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f)) ; Requires mailman running
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     ;(native-inputs
     ; `(("mailman" ,mailman)
     ;   ("python-falcon" ,python-falcon)
@@ -3402,8 +3328,7 @@ the GNU Mailman 3 REST API.")
            (base32
             "0fdfs5g3pf30v2i7w18pdkv9xnfxmfcv66mzv56dck0a1igq07m3"))))
       (propagated-inputs
-       `(("python2-six" ,python2-six)
-         ("python2-httplib2" ,python2-httplib2))))))
+       (list python2-six python2-httplib2)))))
 
 (define-public mlmmj
   (package
@@ -3419,9 +3344,9 @@ the GNU Mailman 3 REST API.")
          "0hpj10qad821ci11si8xc2qnmkzfn90y13s43fm4fca38f0qjp8w"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl))) ; For "contrib/web/"
+     (list perl)) ; For "contrib/web/"
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        ;; mlmmj-receive-strip is a replacement for mlmmj-receive
@@ -3467,14 +3392,14 @@ installation on systems where resources are limited.  Its features include:
 (define-public python-django-mailman3
   (package
     (name "python-django-mailman3")
-    (version "1.3.4")
+    (version "1.3.7")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "django-mailman3" version))
         (sha256
          (base32
-          "1yrm7wpjy34xai72vn2vkhc9131cdrbqy08rrabf36kynj5vcdvy"))))
+          "1dzycnwdr1gavs1dgmcv1lz24x0fkp8y864fy52fgbz72d6c5a3f"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -3486,13 +3411,10 @@ installation on systems where resources are limited.  Its features include:
              (invoke "django-admin" "test"
                      "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-django" ,python-django)
-       ("python-django-allauth" ,python-django-allauth)
-       ("python-django-gravatar2" ,python-django-gravatar2)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-pytz" ,python-pytz)))
+     (list python-django python-django-allauth python-django-gravatar2
+           python-mailmanclient python-pytz))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://gitlab.com/mailman/django-mailman3")
     (synopsis "Django library to help interaction with Mailman")
     (description
@@ -3503,34 +3425,21 @@ interacting with Mailman.")
 (define-public python-mailman-hyperkitty
   (package
     (name "python-mailman-hyperkitty")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "mailman-hyperkitty" version))
         (sha256
          (base32
-          "1lfqa9admhvdv71f528jmz2wl0i5cv77v6l64px2pm4zqr9ckkjx"))
-        (patches
-          (list
-            (origin
-              ;; see: https://gitlab.com/mailman/mailman-hyperkitty/issues/17
-              ;; fixes test_archive_message_unserializable
-              (method url-fetch)
-              (uri "https://salsa.debian.org/mailman-team/mailman-hyperkitty/raw/debian/1.1.0-9/debian/patches/0002-Skip-the-test_archive_message_unserializable.patch")
-              (sha256
-               (base32
-                "0p1fwm46c4bl81lvsg3kjhn2r1lwgkpgxamb3xyqn7h9qdrw10hw")))))))
+          "1ni6vf1yi14c0l895fk278x4na7ymhpkl1q0vnpzbkzplpa7200i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-requests python-zope-interface))
     (inputs
-     `(("mailman" ,mailman)))
+     (list mailman))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-nose2" ,python-nose2)))
+     (list python-mock python-nose python-nose2))
     (home-page "https://gitlab.com/mailman/mailman-hyperkitty/")
     (synopsis "Mailman archiver plugin for HyperKitty")
     (description
@@ -3543,44 +3452,46 @@ which sends emails to HyperKitty, the official Mailman3 web archiver.")
 (define-public python-hyperkitty
   (package
     (name "python-hyperkitty")
-    (version "1.3.3")
+    (version "1.3.5")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "HyperKitty" version))
         (sha256
          (base32
-          "0p85r9q6mn5as5b39xp9hkkipnk0156acx540n2ygk3qb3jd4a5n"))))
+          "11lz1s2p8n43h1cdr9l5dppsigg8qdppckdwdndzn7a8r8mj4sc2"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
              (invoke "example_project/manage.py" "test"
-                     "--settings=hyperkitty.tests.settings_test"))))))
+                     "--settings=hyperkitty.tests.settings_test"
+                     "--pythonpath=."))))))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-django" ,python-django-2.2)
-       ("python-django-compressor" ,python-django-compressor)
-       ("python-django-extensions" ,python-django-extensions)
-       ("python-django-gravatar2" ,python-django-gravatar2)
-       ("python-django-haystack" ,python-django-haystack)
-       ("python-django-mailman3" ,python-django-mailman3)
-       ("python-django-q" ,python-django-q)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-flufl-lock" ,python-flufl-lock)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-networkx" ,python-networkx)
-       ("python-pytz" ,python-pytz)
-       ("python-robot-detection" ,python-robot-detection)))
+     (list python-dateutil
+           python-django
+           python-django-compressor
+           python-django-extensions
+           python-django-gravatar2
+           python-django-haystack
+           python-django-mailman3
+           python-django-q
+           python-djangorestframework
+           python-flufl-lock
+           python-mailmanclient
+           python-mistune-next
+           python-networkx
+           python-pytz
+           python-robot-detection))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-elasticsearch" ,python-elasticsearch)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-whoosh" ,python-whoosh)))
+     (list python-beautifulsoup4
+           python-elasticsearch
+           python-isort
+           python-lxml
+           python-mock
+           python-whoosh))
     (home-page "https://gitlab.com/mailman/hyperkitty")
     (synopsis "Web interface to access GNU Mailman v3 archives")
     (description
@@ -3613,15 +3524,10 @@ some configuration.")
                  #t))))
        #:tests? #f)) ; Tests try to run a mailman instance to test against.
     (inputs
-     `(("python-django" ,python-django)
-       ("python-django-mailman3" ,python-django-mailman3)
-       ("python-mailmanclient" ,python-mailmanclient)
-       ("python-readme-renderer" ,python-readme-renderer)))
+     (list python-django python-django-mailman3 python-mailmanclient
+           python-readme-renderer))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-beautifulsoup4 python-isort python-mock python-vcrpy))
     (home-page "https://gitlab.com/mailman/postorius")
     (synopsis "Web user interface for GNU Mailman")
     (description
@@ -3679,10 +3585,7 @@ on the fly.  Both programs are written in C and are very fast.")
         (base32 "131i2b1yxhnbqkfk4kky40pfanqw2c5lcgbnjhfqp5cvpawpk2ai"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-net-dns" ,perl-net-dns)
-       ("perl-net-ssleay" ,perl-net-ssleay)
-       ("perl-socket6" ,perl-socket6))) ; used by perl-io-socket-inet6
+     (list perl-io-socket-inet6 perl-net-dns perl-net-ssleay perl-socket6)) ; used by perl-io-socket-inet6
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -3776,15 +3679,15 @@ operators and scripters.")
              (substitute* "pico/blddate.c"
                (("%02d-%s-%d") "1970-01-01")))))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("gnutls" ,gnutls)
-       ("openldap" ,openldap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("mit-krb5" ,mit-krb5)
-       ("aspell" ,aspell)
-       ("tcl" ,tcl)
-       ("linux-pam" ,linux-pam)))
+     (list ncurses
+           openssl
+           gnutls
+           openldap
+           cyrus-sasl
+           mit-krb5
+           aspell
+           tcl
+           linux-pam))
     (home-page "https://repo.or.cz/alpine.git")
     (synopsis "Alternatively Licensed Program for Internet News and Email")
     (description
@@ -3822,30 +3725,27 @@ tools and applications:
          "--with-compface"
          "--with-ldap")))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("enchant" ,enchant)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gmime" ,gmime)
-       ("gnutls" ,gnutls)
-       ("gpgme" ,gpgme)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview)
-       ("gtkspell3" ,gtkspell3)
-       ("libassuan" ,libassuan)         ; in gpgme.pc Requires
-       ("libcanberra" ,libcanberra)
-       ("libesmtp" ,libesmtp)
-       ("libical" ,libical)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("openldap" ,openldap)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+     (list cyrus-sasl
+           enchant
+           gdk-pixbuf
+           gmime
+           gnutls
+           gpgme
+           gtk+
+           gtksourceview
+           gtkspell3
+           libassuan ; in gpgme.pc Requires
+           libcanberra
+           libesmtp
+           libical
+           libnotify
+           libsecret
+           openldap
+           sqlite
+           webkitgtk))
     (native-inputs
-     `(("compface" ,compface)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list compface
+           `(,glib "bin") intltool pkg-config yelp-tools))
     (home-page "https://pawsa.fedorapeople.org/balsa")
     (synopsis "E-mail client for GNOME")
     (description "Balsa is a highly configurable and robust mail client for
@@ -3867,13 +3767,9 @@ the use of a local MTA such as Sendmail.")
          "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff"))))
     (build-system python-build-system)
     (inputs
-     `(("notmuch" ,notmuch)
-       ("python-chardet" ,python-chardet)
-       ("python-dkimpy" ,python-dkimpy)
-       ("python-notmuch" ,python-notmuch)))
+     (list notmuch python-chardet python-dkimpy python-notmuch))
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-freezegun python-setuptools-scm))
     (home-page "https://github.com/afewmail/afew")
     (synopsis "Initial tagging script for notmuch mail")
     (description "afew is an initial tagging script for notmuch mail.  It
@@ -3907,19 +3803,17 @@ killed threads.")
                                             "/bin/gpg\"")))
              #t)))))
     (inputs
-     `(("gmime" ,gmime-2.6)
-       ("gnupg" ,gnupg)
-       ("gnutls" ,gnutls)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("libnotify" ,libnotify)
-       ("libsecret" ,libsecret)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list gmime-2.6
+           gnupg
+           gnutls
+           gtk+
+           gtkspell3
+           libnotify
+           libsecret
+           libxml2
+           zlib))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
-       ("itstool" ,itstool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal itstool pkg-config))
     (build-system gnu-build-system)
     (home-page "http://pan.rebelbase.com/")
     (synopsis "Pan newsreader")
@@ -3952,9 +3846,7 @@ PGP handling, multiple servers, and secure connections.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("lua" ,lua)
-       ("pcre2" ,pcre2)
-       ("openssl" ,openssl)))
+     (list lua pcre2 openssl))
     (home-page "https://github.com/lefcha/imapfilter")
     (synopsis "IMAP mail filtering utility")
     (description "IMAPFilter is a mail filtering utility.  It connects
@@ -3976,7 +3868,7 @@ servers.  The 4rev1 and 4 versions of IMAP are supported.")
          (base32 "0sqaplcrz0lj40x20s2mv3gkzsmawpi9h2kx0rmk342k5240il81"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urwid" ,python-urwid)))
+     (list python-urwid))
     (home-page "https://github.com/firecat53/urlscan")
     (synopsis "View/select the URLs in an email message or file")
     (description
@@ -4004,8 +3896,7 @@ It is a replacement for the @command{urlview} program.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (arguments `(#:parallel-tests? #f)) ;tests are side-effect'y
     (home-page "https://github.com/verdammelt/tnef")
     (synopsis "Unpack @code{application/ms-tnef} attachments")
@@ -4067,9 +3958,7 @@ It is a replacement for the @command{urlview} program.")
          ("guile" ,guile-3.0)
          ("mailutils" ,mailutils)))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (home-page "https://git.elephly.net/software/mumi.git")
       (synopsis "Debbugs web interface")
       (description "Mumi is a Debbugs web interface.")
@@ -4092,9 +3981,7 @@ It is a replacement for the @command{urlview} program.")
                                        "ytnef-CVE-2021-3404.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/Yeraze/ytnef/")
     (synopsis "TNEF stream reader for winmail.dat files")
     (description "This package provides a TNEF stream reader library and
@@ -4119,7 +4006,7 @@ related tools to process winmail.dat files.")
           (base32 "0hxz8i70v1xgv30zjclfvmjqszn073c7i8nwmswi2lr6vd7cklvp"))))
       (build-system gnu-build-system)
       (inputs
-       `(("libgit2" ,libgit2)))
+       (list libgit2))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -4189,39 +4076,37 @@ Git and exports them in maildir format or to an MDA through a pipe.")
                     ;; 'git' is invoked in various files of the PublicInbox
                     ;; perl module.
                     `("PATH" ":" prefix
-                      (,(string-append (assoc-ref inputs "git") "/bin")))))
+                      (,(dirname (search-input-file inputs "/bin/git"))))))
                 (find-files (string-append out "/bin"))))
              #t)))))
     (native-inputs
-     `(("xapian" ,xapian)
-       ;; For testing.
-       ("lsof" ,lsof)
-       ("openssl" ,openssl)))
+     (list xapian
+           ;; For testing.
+           lsof openssl))
     (inputs
-     `(("git" ,git)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-dbi" ,perl-dbi)
-       ("perl-email-address-xs" ,perl-email-address-xs)
-       ("perl-email-mime-contenttype" ,perl-email-mime-contenttype)
-       ("perl-email-mime" ,perl-email-mime)
-       ("perl-email-simple" ,perl-email-simple)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-plack-middleware-deflater" ,perl-plack-middleware-deflater)
-       ("perl-plack-middleware-reverseproxy" ,perl-plack-middleware-reverseproxy)
-       ("perl-plack" ,perl-plack)
-       ("perl-search-xapian" ,perl-search-xapian)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-uri-escape" ,perl-uri-escape)
-       ("perl-inline-c" ,perl-inline-c)
-       ("perl-parse-recdescent" ,perl-parse-recdescent)
-       ("perl-linux-inotify2" ,perl-linux-inotify2)
-       ;; FIXME: Perl modules are unable to find the config file for highlight
-       ;; https://issues.guix.gnu.org/48033#4
-       ;; ("highlight" ,highlight)
-
-       ;; For testing.
-       ("perl-ipc-run" ,perl-ipc-run)
-       ("perl-xml-feed" ,perl-xml-feed)))
+     (list git
+           perl-dbd-sqlite
+           perl-dbi
+           perl-email-address-xs
+           perl-email-mime-contenttype
+           perl-email-mime
+           perl-email-simple
+           perl-net-server
+           perl-plack-middleware-deflater
+           perl-plack-middleware-reverseproxy
+           perl-plack
+           perl-search-xapian
+           perl-timedate
+           perl-uri-escape
+           perl-inline-c
+           perl-parse-recdescent
+           perl-linux-inotify2
+           ;; FIXME: Perl modules are unable to find the config file for highlight
+           ;; https://issues.guix.gnu.org/48033#4
+           ;; ("highlight" ,highlight)
+           ;; For testing.
+           perl-ipc-run
+           perl-xml-feed))
     (home-page "https://public-inbox.org/README.html")
     (synopsis "Archive mailing lists in Git repositories")
     (description
@@ -4243,17 +4128,17 @@ IMAP, Atom feeds or HTML archives.")
                 "0j9y5vdzch251s264diw9clrn88dn20bqqkwfmis9l7m8vmwasqd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bogofilter" ,bogofilter)
-       ("compface" ,compface)
-       ("gnupg" ,gnupg-1)
-       ("gpgme" ,gpgme)
-       ("gtk+-2.0" ,gtk+-2)
-       ("gtkspell" ,gtkspell3)
-       ("libnsl" ,libnsl)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)))
+     (list bogofilter
+           compface
+           gnupg-1
+           gpgme
+           gtk+-2
+           gtkspell3
+           libnsl
+           openldap
+           openssl))
     (home-page "https://sylpheed.sraoss.jp/en/")
     (synopsis "Lightweight GTK+ email client")
     (description
@@ -4324,12 +4209,11 @@ and Conformance}
            (lambda _
              (invoke "python" "test.py"))))))
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)))
+     (list python-dnspython))
     (native-inputs
-     `(("python-authres" ,python-authres)
-       ("python-pynacl" ,python-pynacl)))
+     (list python-authres python-pynacl))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://launchpad.net/dkimpy")
     (synopsis "DKIM (DomainKeys Identified Mail)")
     (description "Python module that implements @dfn{DKIM} (DomainKeys
@@ -4352,10 +4236,8 @@ the RFC 8617 Authenticated Received Chain (ARC) protocol.")
           "14k6i72k5f8dyvps8vc0aq0cczc8lvqpgjfjzsy6qqychjvjcmwk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-authres" ,python-authres)
-       ("python-dkimpy" ,python-dkimpy)
-       ("python-dnspython" ,python-dnspython)
-       ("python-publicsuffix2" ,python-publicsuffix2)))
+     (list python-authres python-dkimpy python-dnspython
+           python-publicsuffix2))
     (home-page "https://github.com/ValiMail/authentication-headers")
     (synopsis "Library wrapping email authentication header verification and generation")
     (description
@@ -4393,10 +4275,9 @@ DKIM and ARC sign messages and output the corresponding signature headers.")
            (lambda _
              (invoke "python" "-m" "nose2" "-v"))))))
     (native-inputs
-     `(("python-flufl-testing" ,python-flufl-testing)
-       ("python-nose2" ,python-nose2)))
+     (list python-flufl-testing python-nose2))
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)))
+     (list python-atpublic))
     (home-page "https://aiosmtpd.readthedocs.io/")
     (synopsis "Asyncio based SMTP server")
     (description
@@ -4440,19 +4321,19 @@ on RFC 3501 and original @code{imaplib} module.")
     (arguments
      '(#:configure-flags '("-DENABLE_LUAJIT=ON")))
     (inputs
-     `(("openssl" ,openssl)
-       ("glib" ,glib)
-       ("ragel" ,ragel)
-       ("luajit" ,luajit)
-       ("sqlite" ,sqlite)
-       ("file" ,file)
-       ("icu4c" ,icu4c)
-       ("pcre" ,pcre)
-       ("zlib" ,zlib)
-       ("perl" ,perl)
-       ("libsodium" ,libsodium)))
+     (list openssl
+           glib
+           ragel
+           luajit
+           sqlite
+           file
+           icu4c
+           pcre
+           zlib
+           perl
+           libsodium))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Spam filtering system")
     (description "Rspamd is an advanced spam filtering system that
 allows evaluation of messages by a number of rules including regular
@@ -4494,12 +4375,9 @@ undelete email messages from Outlook Express .dbx files.")
          "0hhbbb8ddsgjhv9y1xd8s9ixlhdnjmhw12v06jwx4j6vpgp1na9x"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("libgsf" ,libgsf)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list boost libgsf python zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.five-ten-sg.com/libpst/")
     (synopsis "")
     (description "The Libpst utilities include @code{readpst} which can
@@ -4607,7 +4485,7 @@ ex-like commands on it.")
          (add-after 'emacs-build 'validate-compiled-autoloads
            (assoc-ref emacs:%standard-phases 'validate-compiled-autoloads)))))
     (inputs
-     `(("tre" ,tre)))
+     (list tre))
     (native-inputs
      `(("emacs" ,emacs-minimal)))
     (home-page "http://crm114.sourceforge.net/")
@@ -4649,8 +4527,7 @@ means--it's all programmable).")
                                    indent match)))
                  (invoke "python" "-m" "unittest"))))))))
     (inputs
-     `(("python-feedparser" ,python-feedparser)
-       ("python-html2text" ,python-html2text)))
+     (list python-feedparser python-html2text))
     (home-page "https://github.com/rss2email/rss2email")
     (synopsis "Converts RSS/Atom newsfeeds to email")
     (description "The RSS2email program (@command{r2e}) fetches RSS/Atom news
@@ -4679,9 +4556,7 @@ feeds, converts them into emails, and sends them.")
           (base32
            "1cxpkiaajhq1gjsg47r2b5xgck0r63pvkyrkm7af8c8dw7fyn64f"))))
       (inputs
-       `(("go-golang-org-x-oauth2" ,go-golang-org-x-oauth2)
-         ("go-cloud-google-com-go-compute-metadata"
-          ,go-cloud-google-com-go-compute-metadata)))
+       (list go-golang-org-x-oauth2 go-cloud-google-com-go-compute-metadata))
       (build-system go-build-system)
       (arguments
        '(#:unpack-path "github.com/google/gmail-oauth2-tools"
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index cdcb1dcaa2..4ea97368a9 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -1,11 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018, 2019, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,13 +24,14 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages make-bootstrap)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix memoization)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system gnu)
-  #:use-module ((gnu packages) #:select (search-patch))
+  #:use-module ((gnu packages) #:select (search-patch search-patches))
   #:use-module (gnu packages base)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages bash)
@@ -72,8 +74,10 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (package
       (inherit base)
       (source (origin (inherit (package-source base))
-                      (patches (cons (search-patch "glibc-bootstrap-system.patch")
-                                     (origin-patches (package-source base))))))
+                      (patches (append (search-patches
+                                        "glibc-bootstrap-system.patch"
+                                        "glibc-static-nss.patch")
+                                   (origin-patches (package-source base))))))
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:configure-flags flags)
@@ -83,6 +87,12 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                   "--enable-static-nss"
                   ,flags))))
 
+      ;; Make sure to build glibc with the same compiler version as the rest
+      ;; of the bootstrap.  Otherwise it fails to statically link on aarch64.
+      (native-inputs
+       `(("gcc" ,gcc-7)
+         ,@(package-native-inputs base)))
+
       ;; Remove the 'debug' output to allow bit-reproducible builds (when the
       ;; 'debug' output is used, ELF files end up with a .gnu_debuglink, which
       ;; includes a CRC of the corresponding debugging symbols; those symbols
@@ -203,8 +213,17 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                   (("^xz_LDADD =")
                                    "xz_LDADD = -all-static"))
                                 #t)))))))
-        (gawk (package (inherit gawk)
-                (source (origin (inherit (package-source gawk))
+        (gawk (package
+                (inherit gawk)
+                (source (origin
+                          (inherit (package-source gawk))
+                          (modules '((guix build utils)))
+                          (snippet
+                           ;; Do not build 'getopt.c' since that leads to a
+                           ;; link failure due to duplicate symbols with
+                           ;; 'libc.a'.
+                           '(substitute* "support/Makefile.in"
+                              (("getopt\\.\\$\\(OBJEXT\\)") "")))
                           (patches (cons (search-patch "gawk-shell.patch")
                                          (origin-patches
                                           (package-source gawk))))))
@@ -213,7 +232,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                    ;; plug-in mechanism just fail on static builds:
                    ;;
                    ;; ./fts.awk:1: error: can't open shared library `filefuncs' for reading (No such file or directory)
-                   #:tests? #f
+                   ;;
+                   ;; Therefore disable extensions support.
+                   #:configure-flags (list "--disable-extensions")
 
                    ,@(substitute-keyword-arguments (package-arguments gawk)
                        ((#:phases phases)
@@ -260,19 +281,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                        (delete 'fix-egrep-and-fgrep)))))))
         (finalize (compose static-package
                            package-with-relocatable-glibc)))
-    `(,@(map (match-lambda
-              ((name package)
-               (list name (finalize package))))
-             `(("tar" ,tar)
-               ("gzip" ,gzip)
-               ("bzip2" ,bzip2)
-               ("xz" ,xz)
-               ("patch" ,patch)
-               ("coreutils" ,coreutils)
-               ("sed" ,sed)
-               ("grep" ,grep)
-               ("gawk" ,gawk)))
-      ("bash" ,static-bash))))
+    (append (map finalize
+                 (list tar gzip bzip2 xz patch coreutils sed grep gawk))
+        (list static-bash))))
 
 (define %static-binaries
   (package
@@ -317,7 +328,10 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
             ;; same name as the input.
             (for-each (match-lambda
                        ((name . dir)
-                        (let ((source (string-append dir "/bin/" name)))
+                        (let* ((name   (if (string-prefix? "bash" name)
+                                           "bash"
+                                           name))
+                               (source (string-append dir "/bin/" name)))
                           (format #t "copying ~s...~%" source)
                           (copy-file source
                                      (string-append bin "/" name)))))
@@ -362,7 +376,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                 (out (assoc-ref %outputs "out")))
            (copy-linux-headers out in)
            #t))))
-    (inputs `(("linux-libre-headers" ,linux-libre-headers)))))
+    (inputs (list linux-libre-headers))))
 
 (define %binutils-static
   ;; Statically-linked Binutils.
@@ -374,10 +388,6 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                              (package-arguments binutils))
                                   ((#:configure-flags flags _ ...)
                                    flags)))
-       #:make-flags ,(match (memq #:make-flags (package-arguments binutils))
-                       ((#:make-flags flags _ ...)
-                        flags)
-                       (_ ''()))
        #:strip-flags '("--strip-all")
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'all-static
@@ -395,32 +405,31 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define %binutils-static-stripped
   ;; The subset of Binutils that we need.
-  (package (inherit %binutils-static)
+  (package
+    (inherit %binutils-static)
     (name (string-append (package-name %binutils-static) "-stripped"))
     (build-system trivial-build-system)
     (outputs '("out"))
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (let* ((in  (assoc-ref %build-inputs "binutils"))
-                (out (assoc-ref %outputs "out"))
-                (bin (string-append out "/bin")))
-           (mkdir-p bin)
-           (for-each (lambda (file)
-                       (let ((target (string-append bin "/" file)))
-                         (format #t "copying `~a'...~%" file)
-                         (copy-file (string-append in "/bin/" file)
-                                    target)
-                         (remove-store-references target)))
-                     '("ar" "as" "ld" "nm"  "objcopy" "objdump"
-                       "ranlib" "readelf" "size" "strings" "strip"))
-           #t))))
-    (inputs `(("binutils" ,%binutils-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (let* ((in  #$%binutils-static)
+                      (out #$output)
+                      (bin (string-append out "/bin")))
+                 (mkdir-p bin)
+                 (for-each (lambda (file)
+                             (let ((target (string-append bin "/" file)))
+                               (format #t "copying `~a'...~%" file)
+                               (copy-file (string-append in "/bin/" file)
+                                          target)
+                               (remove-store-references target)))
+                           '("ar" "as" "ld" "nm"  "objcopy" "objdump"
+                             "ranlib" "readelf" "size" "strings" "strip"))))))))
 
 (define (%glibc-stripped)
   ;; GNU libc's essential shared libraries, dynamic linker, and headers,
@@ -441,7 +450,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                (assoc-ref %build-inputs "kernel-headers")))))
       (inputs `(("kernel-headers"
                  ,(if (or (and (%current-target-system)
-                               (hurd-triplet? (%current-target-system)))
+                               (target-hurd? (%current-target-system)))
                           (string-suffix? "-hurd" (%current-system)))
                       gnumach-headers
                       linux-libre-headers))
@@ -533,66 +542,64 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define %gcc-stripped
   ;; The subset of GCC files needed for bootstrap.
-  (package (inherit gcc-7)
+  (package
+    (inherit gcc-7)
     (name "gcc-stripped")
     (build-system trivial-build-system)
     (source #f)
     (outputs '("out"))                            ;only one output
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (srfi srfi-1)
-                      (srfi srfi-26)
-                      (guix build utils))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (let* ((out        (assoc-ref %outputs "out"))
-                (bindir     (string-append out "/bin"))
-                (libdir     (string-append out "/lib"))
-                (includedir (string-append out "/include"))
-                (libexecdir (string-append out "/libexec"))
-                (gcc        (assoc-ref %build-inputs "gcc")))
-           (copy-recursively (string-append gcc "/bin") bindir)
-           (for-each remove-store-references
-                     (find-files bindir ".*"))
-
-           (copy-recursively (string-append gcc "/lib") libdir)
-           (for-each remove-store-references
-                     (remove (cut string-suffix? ".h" <>)
-                             (find-files libdir ".*")))
-
-           (copy-recursively (string-append gcc "/libexec")
-                             libexecdir)
-           (for-each remove-store-references
-                     (find-files libexecdir ".*"))
-
-           ;; Starting from GCC 4.8, helper programs built natively
-           ;; (‘genchecksum’, ‘gcc-nm’, etc.) rely on C++ headers.
-           (copy-recursively (string-append gcc "/include/c++")
-                             (string-append includedir "/c++"))
-
-           ;; For native builds, check whether the binaries actually work.
-           ,@(if (%current-target-system)
-                 '()
-                 '((for-each (lambda (prog)
-                               (invoke (string-append gcc "/bin/" prog)
-                                       "--version"))
-                             '("gcc" "g++" "cpp"))))
-
-           #t))))
-    (inputs `(("gcc" ,%gcc-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (srfi srfi-1)
+                            (srfi srfi-26)
+                            (guix build utils))
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (let* ((out        #$output)
+                      (bindir     (string-append out "/bin"))
+                      (libdir     (string-append out "/lib"))
+                      (includedir (string-append out "/include"))
+                      (libexecdir (string-append out "/libexec"))
+                      (gcc        #$%gcc-static))
+                 (copy-recursively (string-append gcc "/bin") bindir)
+                 (for-each remove-store-references
+                           (find-files bindir ".*"))
+
+                 (copy-recursively (string-append gcc "/lib") libdir)
+                 (for-each remove-store-references
+                           (remove (cut string-suffix? ".h" <>)
+                                   (find-files libdir ".*")))
+
+                 (copy-recursively (string-append gcc "/libexec")
+                                   libexecdir)
+                 (for-each remove-store-references
+                           (find-files libexecdir ".*"))
+
+                 ;; Starting from GCC 4.8, helper programs built natively
+                 ;; (‘genchecksum’, ‘gcc-nm’, etc.) rely on C++ headers.
+                 (copy-recursively (string-append gcc "/include/c++")
+                                   (string-append includedir "/c++"))
+
+                 ;; For native builds, check whether the binaries actually work.
+                 #$@(if (%current-target-system)
+                        '()
+                        '((for-each (lambda (prog)
+                                      (invoke (string-append gcc "/bin/" prog)
+                                              "--version"))
+                                    '("gcc" "g++" "cpp"))))))))))
 
 ;; Two packages: first build static, bare minimum content.
 (define %mescc-tools-static
   ;; A statically linked MesCC Tools.
   (package
-    (inherit mescc-tools-0.5.2)
+    (inherit mescc-tools)
     (name "mescc-tools-static")
     (arguments
      `(#:system "i686-linux"
-       ,@(substitute-keyword-arguments (package-arguments mescc-tools-0.5.2)
+       ,@(substitute-keyword-arguments (package-arguments mescc-tools)
            ((#:make-flags flags)
             `(cons "CC=gcc -static" ,flags)))))))
 
@@ -605,52 +612,47 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (name (string-append (package-name %mescc-tools-static) "-stripped"))
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let* ((in  (assoc-ref %build-inputs "mescc-tools"))
-                (out (assoc-ref %outputs "out"))
-                (bin (string-append out "/bin")))
-           (mkdir-p bin)
-           (for-each (lambda (file)
-                       (let ((target (string-append bin "/" file)))
-                         (format #t "copying `~a'...~%" file)
-                         (copy-file (string-append in "/bin/" file)
-                                    target)
-                         (remove-store-references target)))
-                     '( "M1" "blood-elf" "hex2"))
-           #t))))
-    (inputs `(("mescc-tools" ,%mescc-tools-static)))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let* ((in  #$%mescc-tools-static)
+                      (out #$output)
+                      (bin (string-append out "/bin")))
+                 (mkdir-p bin)
+                 (for-each (lambda (file)
+                             (let ((target (string-append bin "/" file)))
+                               (format #t "copying `~a'...~%" file)
+                               (copy-file (string-append in "/bin/" file)
+                                          target)
+                               (remove-store-references target)))
+                           '( "M1" "blood-elf" "hex2"))))))))
 
 ;; Two packages: first build static, bare minimum content.
 (define-public %mes-minimal
   ;; A minimal Mes without documentation.
-  (let ((triplet "i686-unknown-linux-gnu"))
-    (package
-      (inherit mes-0.19)
-      (name "mes-minimal")
-      (native-inputs
-       `(("guile" ,guile-2.2)))
-      (arguments
-       `(#:system "i686-linux"
-         #:strip-binaries? #f
-         #:configure-flags '("--mes")
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'patch-shebangs)
-           (add-after 'install 'strip-install
-             (lambda _
-               (let* ((out (assoc-ref %outputs "out"))
-                      (share (string-append out "/share")))
-                 (delete-file-recursively (string-append out "/lib/guile"))
-                 (delete-file-recursively (string-append share "/guile"))
-                 (delete-file-recursively (string-append share "/mes/scaffold"))
-
-                 (for-each delete-file
-                           (find-files
-                            (string-append share "/mes/lib")
-                            "\\.(h|c)")))))))))))
+  (package
+    (inherit mes)
+    (name "mes-minimal")
+    (native-inputs (list guile-3.0))
+    (arguments
+     `(#:system "i686-linux"
+       #:strip-binaries? #f
+       #:configure-flags '("--mes")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'patch-shebangs)
+         (add-after 'install 'strip-install
+           (lambda _
+             (let* ((out (assoc-ref %outputs "out"))
+                    (share (string-append out "/share")))
+               (delete-file-recursively (string-append out "/lib/guile"))
+               (delete-file-recursively (string-append share "/guile"))
+
+               (for-each delete-file
+                         (find-files
+                          (string-append share "/mes/lib")
+                          "\\.(h|c)"))))))))))
 
 ;; next remove store references.
 (define %mes-minimal-stripped
@@ -660,21 +662,20 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (name (string-append (package-name %mes-minimal) "-stripped"))
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((in  (assoc-ref %build-inputs "mes"))
-               (out (assoc-ref %outputs "out")))
-
-           (copy-recursively in out)
-           (for-each (lambda (dir)
-                       (for-each remove-store-references
-                                 (find-files (string-append out "/" dir)
-                                             ".*")))
-                     '("bin" "share/mes"))
-           #t))))
-    (inputs `(("mes" ,%mes-minimal)))))
+     (list #:modules '((guix build utils))
+           #:allowed-references '()
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let ((in  #$%mes-minimal)
+                     (out #$output))
+
+                 (copy-recursively in out)
+                 (for-each (lambda (dir)
+                             (for-each remove-store-references
+                                       (find-files (string-append out "/" dir)
+                                                   ".*")))
+                           '("bin" "share/mes"))))))))
 
 (define* (make-guile-static guile patches)
   (package-with-relocatable-glibc
@@ -692,25 +693,22 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
       (outputs (delete "debug" (package-outputs guile)))
 
       (inputs
-       `(("libunistring:static" ,libunistring "static")
-         ,@(package-inputs guile)))
+       (modify-inputs (package-inputs guile)
+         (prepend `(,libunistring "static"))))
 
       (propagated-inputs
-       `(("bdw-gc" ,libgc/static-libs)
-         ,@(alist-delete "bdw-gc"
-                         (package-propagated-inputs guile))))
+       (modify-inputs (package-propagated-inputs guile)
+         (replace "bdw-gc" libgc/static-libs)))
       (arguments
        (substitute-keyword-arguments (package-arguments guile)
          ((#:configure-flags flags '())
           ;; When `configure' checks for ltdl availability, it
           ;; doesn't try to link using libtool, and thus fails
           ;; because of a missing -ldl.  Work around that.
-
-          ;; XXX: On ARMv7, disable JIT: it causes crashes with 3.0.2,
-          ;; possibly related to <https://bugs.gnu.org/40737>.
-          (if (target-arm32?)
-              ''("LDFLAGS=-ldl" "--disable-jit")
-              ''("LDFLAGS=-ldl")))
+          `(list "LDFLAGS=-ldl" "--enable-mini-gmp"
+                 ,@(if (hurd-target?)
+                       '("--disable-jit")
+                       '())))
          ((#:phases phases '%standard-phases)
           `(modify-phases ,phases
 
@@ -757,44 +755,41 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (build-system trivial-build-system)
     (arguments
      ;; The end result should depend on nothing but itself.
-     `(#:allowed-references ("out")
-       #:modules ((guix build utils))
-       #:builder
-       (let ((version ,(version-major+minor (package-version static-guile))))
-         (use-modules (guix build utils))
-
-         (let* ((in     (assoc-ref %build-inputs "guile"))
-                (out    (assoc-ref %outputs "out"))
-                (guile1 (string-append in "/bin/guile"))
-                (guile2 (string-append out "/bin/guile")))
-           (mkdir-p (string-append out "/share/guile/" version))
-           (copy-recursively (string-append in "/share/guile/" version)
-                             (string-append out "/share/guile/" version))
-
-           (mkdir-p (string-append out "/lib/guile/" version "/ccache"))
-           (copy-recursively (string-append in "/lib/guile/" version "/ccache")
-                             (string-append out "/lib/guile/" version "/ccache"))
-
-           (mkdir (string-append out "/bin"))
-           (copy-file guile1 guile2)
-
-           ;; Verify that the relocated Guile works.
-           ,@(if (%current-target-system)
-                 '()
-                 '((invoke guile2 "--version")))
-
-           ;; Strip store references.
-           (remove-store-references guile2)
-
-           ;; Verify that the stripped Guile works.  If it aborts, it could be
-           ;; that it tries to open iconv descriptors and fails because libc's
-           ;; iconv data isn't available (see `guile-default-utf8.patch'.)
-           ,@(if (%current-target-system)
-                 '()
-                 '((invoke guile2 "--version")))
-
-           #t))))
-    (inputs `(("guile" ,static-guile)))
+     (list #:allowed-references '("out")
+           #:modules '((guix build utils))
+           #:builder
+           #~(let ((version #$(version-major+minor (package-version static-guile))))
+               (use-modules (guix build utils))
+
+               (let* ((in     #$static-guile)
+                      (out    #$output)
+                      (guile1 (string-append in "/bin/guile"))
+                      (guile2 (string-append out "/bin/guile")))
+                 (mkdir-p (string-append out "/share/guile/" version))
+                 (copy-recursively (string-append in "/share/guile/" version)
+                                   (string-append out "/share/guile/" version))
+
+                 (mkdir-p (string-append out "/lib/guile/" version "/ccache"))
+                 (copy-recursively (string-append in "/lib/guile/" version "/ccache")
+                                   (string-append out "/lib/guile/" version "/ccache"))
+
+                 (mkdir (string-append out "/bin"))
+                 (copy-file guile1 guile2)
+
+                 ;; Verify that the relocated Guile works.
+                 #$@(if (%current-target-system)
+                        '()
+                        '((invoke guile2 "--version")))
+
+                 ;; Strip store references.
+                 (remove-store-references guile2)
+
+                 ;; Verify that the stripped Guile works.  If it aborts, it could be
+                 ;; that it tries to open iconv descriptors and fails because libc's
+                 ;; iconv data isn't available (see `guile-default-utf8.patch'.)
+                 #$@(if (%current-target-system)
+                        '()
+                        '((invoke guile2 "--version")))))))
     (outputs '("out"))
     (synopsis "Minimal statically-linked and relocatable Guile")))
 
@@ -809,37 +804,35 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
 (define (tarball-package pkg)
   "Return a package containing a tarball of PKG."
-  (package (inherit pkg)
+  (package
+    (inherit pkg)
     (name (string-append (package-name pkg) "-tarball"))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("xz" ,xz)))
-    (inputs `(("input" ,pkg)))
+    (native-inputs (list tar xz))
     (arguments
-     (let ((name    (package-name pkg))
-           (version (package-version pkg)))
-       `(#:modules ((guix build utils))
-         #:builder
-         (begin
-           (use-modules (guix build utils))
-           (let ((out   (assoc-ref %outputs "out"))
-                 (input (assoc-ref %build-inputs "input"))
-                 (tar   (assoc-ref %build-inputs "tar"))
-                 (xz    (assoc-ref %build-inputs "xz")))
-             (mkdir out)
-             (set-path-environment-variable "PATH" '("bin") (list tar xz))
-             (with-directory-excursion input
-               (invoke "tar" "cJvf"
-                       (string-append out "/"
-                                      ,name "-" ,version
-                                      "-"
-                                      ,(or (%current-target-system)
-                                           (%current-system))
-                                      ".tar.xz")
-                       "."
-                       ;; avoid non-determinism in the archive
-                       "--sort=name" "--mtime=@0"
-                       "--owner=root:0" "--group=root:0")))))))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils))
+               (let ((out   #$output)
+                     (input #$pkg)
+                     (tar   #+(this-package-native-input "tar"))
+                     (xz    #+(this-package-native-input "xz")))
+                 (mkdir out)
+                 (set-path-environment-variable "PATH" '("bin") (list tar xz))
+                 (with-directory-excursion input
+                   (invoke "tar" "cJvf"
+                           (string-append out "/"
+                                          #$(package-name pkg) "-"
+                                          #$(package-version pkg)
+                                          "-"
+                                          #$(or (%current-target-system)
+                                                (%current-system))
+                                          ".tar.xz")
+                           "."
+                           ;; avoid non-determinism in the archive
+                           "--sort=name" "--mtime=@0"
+                           "--owner=root:0" "--group=root:0"))))))))
 
 (define %bootstrap-binaries-tarball
   ;; A tarball with the statically-linked bootstrap binaries.
@@ -882,36 +875,38 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (source #f)
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (let ((out (assoc-ref %outputs "out")))
-         (use-modules (guix build utils)
-                      (ice-9 match)
-                      (srfi srfi-26))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (mkdir out)
-         (chdir out)
-         (for-each (match-lambda
-                    ((name . directory)
-                     (for-each (lambda (file)
-                                 (format #t "~a -> ~a~%" file out)
-                                 (symlink file (basename file)))
-                               (find-files directory "\\.tar\\."))))
-                   %build-inputs)
-         #t)))
-    (inputs `(("guile-tarball" ,%guile-bootstrap-tarball)
-              ,@(match (or (%current-target-system) (%current-system))
-                  ((or "i686-linux" "x86_64-linux")
-                   `(("bootstrap-mescc-tools" ,%mescc-tools-bootstrap-tarball)
-                     ("bootstrap-mes" ,%mes-bootstrap-tarball)
-                     ("bootstrap-linux-libre-headers"
-                      ,%linux-libre-headers-bootstrap-tarball)))
-                  (_ `(("gcc-tarball" ,%gcc-bootstrap-tarball)
-                       ("binutils-tarball" ,%binutils-bootstrap-tarball)
-                       ("glibc-tarball" ,(%glibc-bootstrap-tarball))
-                       ("coreutils&co-tarball" ,%bootstrap-binaries-tarball))))))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils)
+                            (ice-9 match)
+                            (srfi srfi-26))
+
+               (define out #$output)
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (mkdir out)
+               (chdir out)
+               (for-each (match-lambda
+                           ((name . directory)
+                            (for-each (lambda (file)
+                                        (format #t "~a -> ~a~%" file out)
+                                        (symlink file (basename file)))
+                                      (find-files directory "\\.tar\\."))))
+                         %build-inputs))))
+    (inputs
+     (append (list %guile-bootstrap-tarball)
+         (match (or (%current-target-system) (%current-system))
+           ((or "i686-linux" "x86_64-linux")
+            (list %mescc-tools-bootstrap-tarball
+                  %mes-bootstrap-tarball
+                  %linux-libre-headers-bootstrap-tarball))
+           (_
+            (list %gcc-bootstrap-tarball
+                  %binutils-bootstrap-tarball
+                  (%glibc-bootstrap-tarball)
+                  %bootstrap-binaries-tarball)))))
     (synopsis "Tarballs containing all the bootstrap binaries")
     (description synopsis)
     (home-page #f)
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 7db3da2bb7..53ffc4ac62 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -8,6 +8,8 @@
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +38,7 @@
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages less)
   #:use-module (gnu packages perl)
@@ -50,10 +53,9 @@
     (source
      (origin
        (method url-fetch)
-       (uri
-        (string-append "https://sourceforge.net/projects/xmltoman/files/"
-                       "xmltoman/xmltoman-" version ".tar.gz/xmltoman-"
-                       version ".tar.gz/download"))
+       (uri (string-append "mirror://sourceforge/xmltoman/xmltoman/"
+                           "xmltoman-" version ".tar.gz/"
+                           "xmltoman-" version ".tar.gz"))
        (sha256
         (base32 "1c0lvzr7kdy63wbn1jv6s126ds7add3pxqb0vlxd3v5a2sir91wl"))))
     (build-system gnu-build-system)
@@ -67,8 +69,7 @@
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("perl" ,perl)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list perl perl-xml-parser))
     (synopsis "XML to Man converter")
     (description "XMLtoMan and XMLMantoHTML are two small scripts to convert xml
 to man pages in groff format or html.  It features the usual man page items such
@@ -198,18 +199,16 @@ a flexible and convenient way.")
                   (guix build utils)
                   (srfi srfi-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("groff" ,groff)))   ;needed at build time (troff, grops, soelim, etc.)
+     (list pkg-config flex groff))   ;needed at build time (troff, grops, soelim, etc.)
     (inputs
-     `(("gdbm" ,gdbm)
-       ("groff-minimal" ,groff-minimal)
-       ("less" ,less)
-       ("libpipeline" ,libpipeline)
-       ;; FIXME: 4.8 and later can use libseccomp, but it causes test
-       ;; failures in the build chroot.
-       ;;("libseccomp" ,libseccomp)
-       ("util-linux" ,util-linux)))
+     (list gdbm
+           groff-minimal
+           less
+           libpipeline
+           ;; FIXME: 4.8 and later can use libseccomp, but it causes test
+           ;; failures in the build chroot.
+           ;;("libseccomp" ,libseccomp)
+           util-linux))
     (native-search-paths
      (list (search-path-specification
             (variable "MANPATH")
@@ -252,8 +251,8 @@ the traditional flat-text whatis databases.")
                         (("^PREFIX=.*")
                          (string-append "PREFIX=" (assoc-ref outputs "out")
                                         "\n"))))))))
-    (native-inputs `(("perl" ,perl)))             ;used to run tests
-    (inputs `(("zlib" ,zlib)))
+    (native-inputs (list perl))             ;used to run tests
+    (inputs (list zlib))
     (native-search-paths
      (list (search-path-specification
             (variable "MANPATH")
@@ -307,9 +306,11 @@ Linux kernel and C library interfaces employed by user-space programs.")
     (license license:gpl2+)))
 
 (define-public help2man
+  ;; TODO: Manual pages for languages not available from the implicit
+  ;; input "locales" contain the original (English) text.
   (package
     (name "help2man")
-    (version "1.47.13")
+    (version "1.48.3")
     (source
      (origin
       (method url-fetch)
@@ -317,18 +318,28 @@ Linux kernel and C library interfaces employed by user-space programs.")
                           version ".tar.xz"))
       (sha256
        (base32
-        "08q5arxz4j4pyx5q4712c2rn7p7dw7as9xg38yvmsh1c3ynvpy5p"))))
+        "1b58s40dh2lflrkgbyxg1s48p8icb5a5yzp9ch83kg9zchygyqc3"))))
     (build-system gnu-build-system)
     (arguments `(;; There's no `check' target.
-                 #:tests? #f))
+                 #:tests? #f
+                 #:phases
+                 (modify-phases %standard-phases
+                   (add-after 'unpack 'patch-help2man-with-perl-gettext
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (let ((lib (assoc-ref inputs "perl-gettext"))
+                             (fmt "use lib '~a/lib/perl5/site_perl';~%~a"))
+                         (substitute* "help2man.PL"
+                           (("^use Locale::gettext.*$" load)
+                            (format #f fmt lib load))))
+                       #t)))))
     (inputs
      `(("perl" ,perl)
-       ;; TODO: Add these optional dependencies.
-       ;; ("perl-LocaleGettext" ,perl-LocaleGettext)
-       ;; ("gettext" ,gettext-minimal)
-       ))
+       ,@(if (%current-target-system)
+             '()
+             `(("perl-gettext" ,perl-gettext)))))
     (native-inputs
-     `(("perl" ,perl)))
+     `(("perl" ,perl)
+       ("gettext" ,gettext-minimal)))
     (home-page "https://www.gnu.org/software/help2man/")
     (synopsis "Automatically generate man pages from program --help")
     (description
@@ -385,7 +396,7 @@ in C99.")
        #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("gawk" ,gawk)))
+     (list gawk))
     (home-page "https://github.com/mvertes/txt2man")
     (synopsis "Convert text to man page")
     (description "Txt2man converts flat ASCII text to man page format.")
diff --git a/gnu/packages/markup.scm b/gnu/packages/markup.scm
index 06e653a1c9..cee3207ee5 100644
--- a/gnu/packages/markup.scm
+++ b/gnu/packages/markup.scm
@@ -93,8 +93,7 @@ processing library written in C.")
          (let ((source (assoc-ref %build-inputs "source"))
                (out    (assoc-ref %outputs "out"))
                (perlbd (string-append (assoc-ref %build-inputs "perl") "/bin"))
-               (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                      "/bin/unzip")))
+               (unzip  (search-input-file %build-inputs "/bin/unzip")))
            (mkdir-p out)
            (with-directory-excursion out
              (invoke unzip source)
@@ -106,8 +105,8 @@ processing library written in C.")
              (patch-shebang "bin/markdown" (list perlbd))
              (delete-file-recursively "Markdown_1.0.1"))
            #t))))
-    (native-inputs `(("unzip" ,unzip)))
-    (inputs `(("perl" ,perl)))
+    (native-inputs (list unzip))
+    (inputs (list perl))
     (home-page "http://daringfireball.net/projects/markdown")
     (synopsis "Text-to-HTML conversion tool")
     (description
@@ -140,7 +139,7 @@ convert it to structurally valid XHTML (or HTML).")
                        (string-append "PREFIX=" out)
                        (string-append "MANDIR=" out "/share/man"))))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://kristaps.bsd.lv/lowdown/")
     (synopsis "Simple Markdown translator")
     (description "Lowdown is a Markdown translator producing HTML5,
@@ -185,7 +184,7 @@ roff documents in the ms and man formats, LaTeX, gemini, and terminal output.")
                        (string-append "--prefix=" out)
                        "--shared")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Markdown processing library, written in C")
     (description
      "Discount is a markdown implementation, written in C.  It provides a
@@ -223,7 +222,7 @@ roff documents in the ms and man formats, LaTeX, gemini, and terminal output.")
                       "/lib")))
              #t)))))
     (inputs
-     `(("discount" ,discount)))
+     (list discount))
     (home-page
      "https://metacpan.org/release/Text-Markdown-Discount")
     (synopsis
@@ -263,7 +262,7 @@ implementation.
     (build-system cmake-build-system)
     (arguments
      '(#:test-target "test"))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (synopsis "CommonMark Markdown reference implementation")
     (description "CommonMark is a strongly defined, highly compatible
 specification of Markdown.  cmark is the C reference implementation of
diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm
index 4847bbeed9..8a8e2e7786 100644
--- a/gnu/packages/mastodon.scm
+++ b/gnu/packages/mastodon.scm
@@ -57,12 +57,10 @@
                (add-installed-pythonpath inputs outputs)
                (invoke "py.test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-requests" ,python-requests)
-       ("python-urwid" ,python-urwid)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-beautifulsoup4 python-requests python-urwid
+           python-wcwidth))
     (home-page "https://github.com/ihabunek/toot/")
     (synopsis "Mastodon CLI client")
     (description "Interact with Mastodon social network from the command line.
@@ -122,14 +120,14 @@ Features include:
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib-networking" ,glib-networking)
-       ("gtk+" ,gtk+)
-       ("json-glib" ,json-glib)
-       ("libgee" ,libgee)
-       ("libhandy" ,libhandy)
-       ("libsoup" ,libsoup)
-       ("vala" ,vala-0.50)
-       ("xdg-utils" ,xdg-utils)))
+     (list glib-networking
+           gtk+
+           json-glib
+           libgee
+           libhandy
+           libsoup
+           vala
+           xdg-utils))
     (home-page "https://github.com/bleakgrey/tootle")
     (synopsis "GTK3 client for Mastodon")
     (description "Tootle is a GTK client for Mastodon.  It provides a clean,
@@ -150,24 +148,24 @@ seamlessly with your desktop environment.")
           "1vikvkzcij2gd730cssigxi38vlmzqmwdy58r3y2cwsxifnxpz9a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blurhash" ,python-blurhash)
-       ("python-dateutil" ,python-dateutil)
-       ("python-decorator" ,python-decorator)
-       ("python-magic" ,python-magic)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-blurhash
+           python-dateutil
+           python-decorator
+           python-magic
+           python-pytz
+           python-requests
+           python-six))
     (native-inputs
-     `(("python-blurhash" ,python-blurhash)
-       ("python-cryptography" ,python-cryptography)
-       ("python-http-ece" ,python-http-ece)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-vcr" ,python-pytest-vcr)
-       ("python-requests-mock" ,python-requests-mock)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-blurhash
+           python-cryptography
+           python-http-ece
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner
+           python-pytest-vcr
+           python-requests-mock
+           python-vcrpy))
     (home-page "https://github.com/halcy/Mastodon.py")
     (synopsis "Python wrapper for the Mastodon API")
     (description
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index ede37fe5d9..dd6baa42b6 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Guy Fleury Iteriteka <hoonandon@gmail.com>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -106,23 +107,23 @@ MATE applications.")
         (base32 "0fni41p3kraxwjnx9l5mdspng0zib1gfdxwlaiyq31mh4g79yjyj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin") ; glib-gettextize
-       ("polkit" ,polkit))) ; for ITS rules
+     (list pkg-config
+           yelp-tools
+           gettext-minimal
+           `(,glib "bin") ; glib-gettextize
+           polkit)) ; for ITS rules
     (inputs
-     `(("gtk+" ,gtk+)
-       ("glib" ,glib)
-       ("dbus-glib" ,dbus-glib)
-       ("libgnome-keyring" ,libgnome-keyring)
-       ("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("libnotify" ,libnotify)
-       ("mate-panel" ,mate-panel)
-       ("libxrandr" ,libxrandr)
-       ("libcanberra" ,libcanberra)
-       ("upower" ,upower)))
+     (list gtk+
+           glib
+           dbus-glib
+           libgnome-keyring
+           cairo
+           dbus
+           libnotify
+           mate-panel
+           libxrandr
+           libcanberra
+           upower))
     (home-page "https://mate-desktop.org/")
     (synopsis "Power manager for MATE")
     (description
@@ -145,9 +146,7 @@ actions.")
          "0a2lz61ivwwcdznmwlmgjr6ipr9sdl5g2czbagnpxkwz8f3m77na"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("icon-naming-utils" ,icon-naming-utils)))
+     (list pkg-config intltool icon-naming-utils))
     (home-page "https://mate-desktop.org/")
     (synopsis "The MATE desktop environment icon theme")
     (description
@@ -207,10 +206,8 @@ from Mint-X-F and Faenza-Fresh icon packs.")
         (base32 "051g2vq817g84yrqzf7hjcqr4xrghnw1rprjd6jf5mhhzmwcas6n"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gdk-pixbuf" ,gdk-pixbuf)       ; gdk-pixbuf+svg isn't needed
-       ("gtk" ,gtk+-2)))
+     (list pkg-config intltool gdk-pixbuf ; gdk-pixbuf+svg isn't needed
+           gtk+-2))
     (home-page "https://mate-desktop.org/")
     (synopsis
      "Official themes for the MATE desktop")
@@ -234,19 +231,16 @@ themes for both gtk+-2 and gtk+-3.")
         (base32 "1nd1dn8mm1z6x4r68a25q4vzys1a6fmbzc94ss1z1n1872pczs6i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("yelp-tools" ,yelp-tools)
-       ("gtk-doc" ,gtk-doc)))
+     (list pkg-config
+           intltool
+           `(,glib "bin")
+           gobject-introspection
+           yelp-tools
+           gtk-doc))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxrandr" ,libxrandr)
-       ("iso-codes" ,iso-codes)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+ libxrandr iso-codes startup-notification))
     (propagated-inputs
-     `(("dconf" ,dconf))) ; mate-desktop-2.0.pc
+     (list dconf)) ; mate-desktop-2.0.pc
     (home-page "https://mate-desktop.org/")
     (synopsis "Library with common API for various MATE modules")
     (description
@@ -277,21 +271,17 @@ desktop and the mate-about program.")
           (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "data/check-timezones.sh"
               (("/usr/share/zoneinfo/zone.tab")
-               (string-append (assoc-ref inputs "tzdata")
-                              "/share/zoneinfo/zone.tab")))
-            #t)))))
+               (search-input-file inputs "/share/zoneinfo/zone.tab"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
        ("dconf" ,dconf)
        ("glib:bin" ,glib "bin")))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("tzdata" ,tzdata)))
+     (list gtk+ tzdata))
     (propagated-inputs
       ;; both of these are requires.private in mateweather.pc
-     `(("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)))
+     (list libsoup-minimal-2 libxml2))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE library for weather information from the Internet")
     (description
@@ -312,21 +302,21 @@ the MATE desktop environment.")
         (base32 "0qmyhxmarwkxad8k1m9q1iwx70zhfp6zc2mh74nv26nj4gr3h3am"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libxml2" ,libxml2)
-       ("yelp-tools" ,yelp-tools)))
+     (list pkg-config
+           intltool
+           itstool
+           gobject-introspection
+           libxml2
+           yelp-tools))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("vte" ,vte)))
+     (list dconf
+           gtk+
+           libice
+           libsm
+           libx11
+           mate-desktop
+           pango
+           vte))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE Terminal Emulator")
     (description
@@ -369,17 +359,10 @@ configurations (profiles).")
                   (string-append "Exec=" out "/bin/mate-session\n")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("libxcomposite" ,libxcomposite)
-       ("xtrans" ,xtrans)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool libxcomposite xtrans
+           gobject-introspection))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("dbus-glib" ,dbus-glib)
-       ("elogind" ,elogind)
-       ("libsm" ,libsm)
-       ("mate-desktop" ,mate-desktop)))
+     (list gtk+ dbus-glib elogind libsm mate-desktop))
     (home-page "https://mate-desktop.org/")
     (synopsis "Session manager for MATE")
     (description
@@ -400,28 +383,26 @@ configuration program to choose applications starting on login.")
         (base32 "0n1ywr3ir5p536s7azdbw2mh40ylqlpx3a74mjrivbms1rpjxyab"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("dconf" ,dconf)
-       ("fontconfig" ,fontconfig)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmatekbd" ,libmatekbd)
-       ("libmatemixer" ,libmatemixer)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxklavier" ,libxklavier)
-       ("mate-desktop" ,mate-desktop)
-       ("nss" ,nss)
-       ("polkit" ,polkit)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           dbus
+           dbus-glib
+           dconf
+           fontconfig
+           gtk+
+           libcanberra
+           libmatekbd
+           libmatemixer
+           libnotify
+           libx11
+           libxext
+           libxi
+           libxklavier
+           mate-desktop
+           nss
+           polkit
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Settings Daemon for MATE")
     (description
@@ -441,13 +422,9 @@ configuration program to choose applications starting on login.")
         (base32 "1n6rq7k66zvfd6sb7h92xihh021w9hysfa4yd1mzjcbb7c62ybqx"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("glib" ,glib)
-       ("pulseaudio" ,pulseaudio)
-       ("alsa-lib" ,alsa-lib)))
+     (list glib pulseaudio alsa-lib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Mixer library for the MATE desktop")
     (description
@@ -469,16 +446,14 @@ sound systems.")
         (base32 "17mcxfkvl14p04id3n5kbhpjwjq00c8wmbyciyy2hm7kwdln6zx8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libx11" ,libx11)
-       ("libxklavier" ,libxklavier)))
+     (list cairo
+           (librsvg-for-system)
+           glib
+           gtk+
+           libx11
+           libxklavier))
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE keyboard configuration library")
     (description
@@ -512,9 +487,7 @@ MATE desktop environment.")
                  (string-append out "/lib/girepository-1.0/")))
               #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (inputs
      `(("glib" ,glib)
        ("python" ,python-2)))
@@ -539,36 +512,36 @@ assorted menu related utility programs.")
         (base32 "0h70i4x3bk017pgv4zn280682wm58vwdjm7kni91ni8rmblnnvyp"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("libxslt" ,libxslt)
-       ("yelp-tools" ,yelp-tools)
-       ("scrollkeeper" ,scrollkeeper)
-       ("gettext" ,gettext-minimal)
-       ("docbook-xml" ,docbook-xml)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config
+           intltool
+           libxslt
+           yelp-tools
+           scrollkeeper
+           gettext-minimal
+           docbook-xml
+           gobject-introspection))
     (inputs
-     `(("atk" ,atk)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("gucharmap" ,gucharmap)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("libgtop" ,libgtop)
-       ("libmateweather" ,libmateweather)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("polkit" ,polkit) ; either polkit or setuid
-       ("python" ,python-2)
-       ("upower" ,upower)
-       ("wireless-tools" ,wireless-tools)))
+     (list atk
+           dbus
+           dbus-glib
+           glib
+           gucharmap
+           gtk+
+           gtksourceview-3
+           libgtop
+           libmateweather
+           libnotify
+           libx11
+           libxml2
+           libwnck
+           mate-panel
+           pango
+           polkit ; either polkit or setuid
+           python-2
+           upower
+           wireless-tools))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)))
+     (list python-pygobject))
     (home-page "https://mate-desktop.org/")
     (synopsis "Various applets for the MATE Panel")
     (description
@@ -611,21 +584,18 @@ Interactive Weather Information Network (IWIN).
         (base32 "118i4w2i2g3hfgbfn3hjzjkfq8vjj6049r7my3vna9js23b7ab92"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gettext" ,gettext-minimal)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gettext-minimal gobject-introspection))
     (inputs
-     `(("cairo" ,cairo)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libmatemixer" ,libmatemixer)
-       ("libxml2" ,libxml2)
-       ("mate-applets" ,mate-applets)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           gtk+
+           libcanberra
+           libmatemixer
+           libxml2
+           mate-applets
+           mate-desktop
+           mate-panel
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Multimedia related programs for the MATE desktop")
     (description
@@ -672,32 +642,28 @@ mate-volume-control, a MATE volume control application and applet.")
                   (string-append out "/lib/girepository-1.0/")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("xtrans" ,xtrans)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool itstool xtrans gobject-introspection))
     (inputs
-     `(("dconf" ,dconf)
-       ("cairo" ,cairo)
-       ("dbus-glib" ,dbus-glib)
-       ("gtk-layer-shell" ,gtk-layer-shell)
-       ("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libice" ,libice)
-       ("libmateweather" ,libmateweather)
-       ("librsvg" ,librsvg)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("libxau" ,libxau)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("libwnck" ,libwnck)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-menus" ,mate-menus)
-       ("pango" ,pango)
-       ("tzdata" ,tzdata)
-       ("wayland" ,wayland)))
+     (list dconf
+           cairo
+           dbus-glib
+           gtk-layer-shell
+           gtk+
+           libcanberra
+           libice
+           libmateweather
+           (librsvg-for-system)
+           libsm
+           libx11
+           libxau
+           libxml2
+           libxrandr
+           libwnck
+           mate-desktop
+           mate-menus
+           pango
+           tzdata
+           wayland))
     (home-page "https://mate-desktop.org/")
     (synopsis "Panel for MATE")
     (description
@@ -710,7 +676,7 @@ infamous 'Wanda the Fish'.")
 (define-public atril
   (package
     (name "atril")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
@@ -718,7 +684,7 @@ infamous 'Wanda the Fish'.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1xd49j4qwrlg2nh2zvspf91yk033dp8a58dy9azqg2yz4bcvywxb"))))
+         "0967gxw7h2qh2kpwl0jgv58hicz6aa92kr12mnykbpikad25s95y"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--with-openjpeg="
@@ -762,6 +728,7 @@ infamous 'Wanda the Fish'.")
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk-doc" ,gtk-doc)
+       ("texlive-bin" ,texlive-bin) ;synctex
        ("xmllint" ,libxml2)
        ("zlib" ,zlib)))
     (inputs
@@ -788,14 +755,14 @@ infamous 'Wanda the Fish'.")
        ("libgxps" ,libgxps)
        ("libjpeg" ,libjpeg-turbo)
        ("libxml2" ,libxml2)
-       ("dogtail" ,python2-dogtail)
+       ("dogtail" ,python-dogtail)
        ("shared-mime-info" ,shared-mime-info)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("libgnome-keyring" ,libgnome-keyring)
        ("libarchive" ,libarchive)
        ("marco" ,marco)
-       ("openjpeg" ,openjpeg-1)
+       ("openjpeg" ,openjpeg)
        ("pango" ,pango)
        ;;("texlive" ,texlive)
        ;; TODO:
@@ -842,15 +809,15 @@ infamous 'Wanda the Fish'.")
        ("xorg-server" ,xorg-server)
        ("gobject-introspection" ,gobject-introspection)))
     (inputs
-     `(("exempi" ,exempi)
-       ("gtk+" ,gtk+)
-       ("gvfs" ,gvfs)
-       ("libexif" ,libexif)
-       ("libnotify" ,libnotify)
-       ("libsm" ,libsm)
-       ("libxml2" ,libxml2)
-       ("mate-desktop" ,mate-desktop)
-       ("startup-notification" ,startup-notification)))
+     (list exempi
+           gtk+
+           gvfs
+           libexif
+           libnotify
+           libsm
+           libxml2
+           mate-desktop
+           startup-notification))
     (native-search-paths
      (list (search-path-specification
             (variable "CAJA_EXTENSIONDIR")
@@ -900,17 +867,17 @@ icons on the MATE desktop.  It works on local and remote file systems.")
        ("libxml2" ,libxml2)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("attr" ,attr)
-       ("brasero" ,brasero)
-       ("caja" ,caja)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("gajim" ,gajim) ;runtime only?
-       ("gtk+" ,gtk+)
-       ("graphicsmagick" ,graphicsmagick)
-       ("mate-desktop" ,mate-desktop)
-       ("pidgin" ,pidgin) ;runtime only?
-       ("startup-notification" ,startup-notification)))
+     (list attr
+           brasero
+           caja
+           dbus
+           dbus-glib
+           gajim ;runtime only?
+           gtk+
+           graphicsmagick
+           mate-desktop
+           pidgin ;runtime only?
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Extensions for the File manager Caja")
     (description
@@ -946,13 +913,13 @@ icons on the MATE desktop.  It works on local and remote file systems.")
                            (string-append out "/sbin")))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("yelp-tools" ,yelp-tools)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("xorgproto" ,xorgproto)
-       ("xmodmap" ,xmodmap)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config
+           intltool
+           yelp-tools
+           desktop-file-utils
+           xorgproto
+           xmodmap
+           gobject-introspection))
     (inputs
      `(("atk" ,atk)
        ("cairo" ,cairo)
@@ -983,8 +950,7 @@ icons on the MATE desktop.  It works on local and remote file systems.")
        ("polkit" ,polkit)
        ("startup-notification" ,startup-notification)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg) ; mate-slab.pc
-       ("librsvg" ,librsvg))) ; mate-slab.pc
+     (list (librsvg-for-system)))        ;mate-slab.pc
     (home-page "https://mate-desktop.org/")
     (synopsis "MATE Desktop configuration tool")
     (description
@@ -1005,32 +971,32 @@ of various aspects of your desktop.")
         (base32 "109b41pjrc1b4slw6sx1lakdhrc46x829vczzk4bz3j15kcszg54"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("itstool" ,itstool)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("libxft" ,libxft)
-       ("libxml2" ,libxml2)
-       ("zenity" ,zenity)))
+     (list pkg-config
+           intltool
+           itstool
+           glib
+           gobject-introspection
+           libxft
+           libxml2
+           zenity))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libcanberra" ,libcanberra)
-       ("libgtop" ,libgtop)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxdamage" ,libxdamage)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+
+           libcanberra
+           libgtop
+           libice
+           libsm
+           libx11
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxext
+           libxfixes
+           libxinerama
+           libxrandr
+           libxrender
+           mate-desktop
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Window manager for the MATE desktop")
     (description
@@ -1071,7 +1037,7 @@ for use with MATE or as a standalone window manager.")
        ("yelp-tools" ,yelp-tools)
        ("yelp-xsl" ,yelp-xsl)))
     (inputs
-     `(("yelp" ,yelp)))
+     (list yelp))
     (home-page "https://mate-desktop.org/")
     (synopsis "User Documentation for Mate software")
     (description
@@ -1093,17 +1059,14 @@ sessions, panels, menus, file management, and preferences.")
         (base32 "0imdimq5d5rjq8mkjcrsd683a2bn9acmhc0lmvyw71y0040inbaw"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal intltool pkg-config yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("libcanberra" ,libcanberra)
-       ("pango" ,pango)))
+     (list atk
+           glib
+           gtk+
+           libxml2
+           libcanberra
+           pango))
     (home-page "https://mate-desktop.org/")
     (synopsis "Calculator for MATE")
     (description
@@ -1124,7 +1087,7 @@ sessions, panels, menus, file management, and preferences.")
          "0b9yx68p9l867bqsl9z2g4wrs8p396ls673jgaliys5snmk8n8dn"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)))
+     (list intltool))
     (home-page "https://mate-desktop.org/")
     (synopsis "Calculator for MATE")
     (description
@@ -1146,19 +1109,17 @@ can be used as backgrounds in the MATE Desktop environment.")
          "1bmk9gq5gcqkvfppa7i1hqfph8sajc3xs189s4ha97g0ifwd98a8"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libfakekey" ,libfakekey)
-       ("libwnck" ,libwnck)
-       ("libxtst" ,libxtst)
-       ("libx11" ,libx11)
-       ("mate-panel" ,mate-panel)
-       ("xorgproto" ,xorgproto)))
+     (list cairo
+           glib
+           gtk+
+           libfakekey
+           libwnck
+           libxtst
+           libx11
+           mate-panel
+           xorgproto))
     (home-page "https://mate-desktop.org/")
     (synopsis "Tool for MATE on Netbooks")
     (description
@@ -1213,29 +1174,29 @@ Re-decorates windows on un-maximise.
        ("which" ,which)
        ("xorgproto" ,xorgproto)))
     (inputs
-     `(("cairo" ,cairo)
-       ("dconf" ,dconf)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libglade" ,libglade)
-       ("libmatekbd" ,libmatekbd)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxklavier" ,libxklavier)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libxxf86vm" ,libxxf86vm)
-       ("linux-pam" ,linux-pam)
-       ("mate-desktop" ,mate-desktop)
-       ("mate-menus" ,mate-menus)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)))
+     (list cairo
+           dconf
+           dbus
+           dbus-glib
+           glib
+           gtk+
+           (librsvg-for-system)
+           libcanberra
+           libglade
+           libmatekbd
+           libnotify
+           libx11
+           libxext
+           libxklavier
+           libxrandr
+           libxrender
+           libxscrnsaver
+           libxxf86vm
+           linux-pam
+           mate-desktop
+           mate-menus
+           pango
+           startup-notification))
     (home-page "https://mate-desktop.org/")
     (synopsis "Screensaver for MATE")
     (description
@@ -1257,29 +1218,29 @@ can be used as backgrounds in the MATE Desktop environment.")
          "1b16n1628gcsym5mph6lr9x5xm4rgkxsa8xwr2wlx8g2gw2775i1"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("pkg-config" ,pkg-config)
-       ("scrollkeeper" ,scrollkeeper)
-       ("xorgproto" ,xorgproto)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal
+           gtk-doc
+           intltool
+           libice
+           libsm
+           pkg-config
+           scrollkeeper
+           xorgproto
+           yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libgtop" ,libgtop)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("mate-panel" ,mate-panel)
-       ("pango" ,pango)
-       ("udisks" ,udisks)
-       ("zlib" ,zlib)))
+     (list atk
+           cairo
+           glib
+           gtk+
+           (librsvg-for-system)
+           libcanberra
+           libgtop
+           libx11
+           libxext
+           mate-panel
+           pango
+           udisks
+           zlib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Utilities for the MATE Desktop")
     (description
@@ -1309,41 +1270,40 @@ can be used as backgrounds in the MATE Desktop environment.")
         (base32 "0dralsc0dvs0l38cysdhx6kiaiqlb8qi6g9xz2cm6mjqyq3d3f9f"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list gettext-minimal
+           gtk-doc
+           gobject-introspection
+           intltool
+           pkg-config
+           yelp-tools))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("dconf" ,dconf)
-       ("dbus" ,dbus)
-       ("dbus-glib" ,dbus-glib)
-       ("exempi" ,exempi)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("libexif" ,libexif)
-       ("libjpeg" ,libjpeg-turbo)
-       ("librsvg" ,librsvg)
-       ("lcms" ,lcms)
-       ("mate-desktop" ,mate-desktop)
-       ("pango" ,pango)
-       ("shared-mime-info" ,shared-mime-info)
-       ("startup-notification" ,startup-notification)
-       ("zlib" ,zlib)))
+     (list atk
+           cairo
+           dconf
+           dbus
+           dbus-glib
+           exempi
+           glib
+           gtk+
+           libcanberra
+           libx11
+           libxext
+           libpeas
+           libxml2
+           libexif
+           libjpeg-turbo
+           (librsvg-for-system)
+           lcms
+           mate-desktop
+           pango
+           shared-mime-info
+           startup-notification
+           zlib))
     (home-page "https://mate-desktop.org/")
     (synopsis "Eye of MATE")
     (description
      "Eye of MATE is the Image viewer for the MATE Desktop.")
-    (license (list license:gpl2))))
+    (license license:gpl2)))
 
 (define-public engrampa
   (package
@@ -1380,17 +1340,17 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (inputs
-     `(("caja" ,caja)
-       ("file" ,file)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("json-glib" ,json-glib)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libsm" ,libsm)
-       ("packagekit" ,packagekit)
-       ("pango" ,pango)))
+     (list caja
+           file
+           glib
+           gtk+
+           (librsvg-for-system)
+           json-glib
+           libcanberra
+           libx11
+           libsm
+           packagekit
+           pango))
     (home-page "https://mate-desktop.org/")
     (synopsis "Archive Manager for MATE")
     (description
@@ -1422,24 +1382,24 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("pkg-config" ,pkg-config)
        ("yelp-tools" ,yelp-tools)))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("enchant" ,enchant-1.6)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("iso-codes" ,iso-codes)
-       ("libcanberra" ,libcanberra)
-       ("libx11" ,libx11)
-       ("libsm" ,libsm)
-       ("libpeas" ,libpeas)
-       ("libxml2" ,libxml2)
-       ("libice" ,libice)
-       ("packagekit" ,packagekit)
-       ("pango" ,pango)
-       ("python" ,python)
-       ("scrollkeeper" ,scrollkeeper)))
+     (list atk
+           cairo
+           enchant-1.6
+           glib
+           gtk+
+           gtksourceview-3
+           gdk-pixbuf
+           iso-codes
+           libcanberra
+           libx11
+           libsm
+           libpeas
+           libxml2
+           libice
+           packagekit
+           pango
+           python
+           scrollkeeper))
     (home-page "https://mate-desktop.org/")
     (synopsis "Text Editor for MATE")
     (description
@@ -1459,25 +1419,21 @@ can be used as backgrounds in the MATE Desktop environment.")
         (base32 "1i2r4lw6xsk972yp15g5hm8p8xx9pp6jmcvvzbdq80xyx3x898qz"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("yelp-tools" ,yelp-tools)))
+     (list autoconf gettext-minimal intltool pkg-config yelp-tools))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)
-       ("gtkmm" ,gtkmm)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("libsigc++" ,libsigc++)
-       ("libcanberra" ,libcanberra)
-       ("libxml2" ,libxml2)
-       ("libwnck" ,libwnck)
-       ("libgtop" ,libgtop)
-       ("librsvg" ,librsvg)
-       ("polkit" ,polkit)))
+     (list cairo
+           glib
+           glibmm
+           gtkmm-3
+           gtk+
+           gdk-pixbuf
+           libsigc++
+           libcanberra
+           libxml2
+           libwnck
+           libgtop
+           (librsvg-for-system)
+           polkit))
     (home-page "https://mate-desktop.org/")
     (synopsis "System Monitor for MATE")
     (description
@@ -1499,18 +1455,14 @@ MATE Desktop to monitor your system resources and usage.")
          "1450bqzlnvwy3xa98lj102j2cf7piqbxcd1cy2zp41rdl8ri3gvn"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal gtk-doc intltool libtool pkg-config))
     (inputs
-     `(("accountsservice" ,accountsservice)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("polkit" ,polkit)))
+     (list accountsservice
+           glib
+           gobject-introspection
+           gtk+
+           gdk-pixbuf
+           polkit))
     (home-page "https://mate-desktop.org/")
     (synopsis "DBus specific service for MATE")
     (description
@@ -1535,7 +1487,7 @@ used to bring up authentication dialogs.")
             (union-build (assoc-ref %outputs "out")
                          directories)
             #t)))))
-    (native-inputs `(("desktop-file-utils" ,desktop-file-utils)))
+    (native-inputs (list desktop-file-utils))
     (inputs
      ;; TODO: Add more packages
      `(("at-spi2-core"              ,at-spi2-core)
@@ -1582,7 +1534,7 @@ used to bring up authentication dialogs.")
        ("zenity"                    ,zenity)))
     (propagated-inputs
      ;; Default font that applications such as IceCat require.
-     `(("font-dejavu"             ,font-dejavu)))
+     (list font-dejavu))
     (synopsis "The MATE desktop environment")
     (home-page "https://mate-desktop.org/")
     (description
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 83f31c1396..3bac086666 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014 Mathieu Lirzin <mathieu.lirzin@openmailbox.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015–2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
-;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Eric Brown <brown@fastmail.com>
 ;;; Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
@@ -48,6 +48,7 @@
 ;;; Copyright © 2021 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,6 +73,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix build-system cmake)
@@ -84,6 +86,7 @@
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -144,6 +147,7 @@
   #:use-module (gnu packages scheme)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
@@ -164,9 +168,10 @@
               (sha256 (base32
                        "1q1887ryqdr9sn0522hc7p16kqwlxxyz5dkmma8ar2nxplhgll7q"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+)
-              ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list gtk+ libxml2))
+    (native-inputs (list pkg-config))
+    (arguments
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Natural deduction first-order logic interface")
     (description "Aris is a program for performing logical proofs.  It supports
 propositional and predicate logic, as well as Boolean algebra and
@@ -190,11 +195,9 @@ beginners.")
                (base32 "1lniw4bsb5qs5ybf018qllf95pzixb1q3lvybzl4k3xz8zpkrm6k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
-     `(("cunit" ,cunit)
-       ("pkg-config" ,pkg-config)))
+     (list cunit pkg-config))
     (synopsis "Terminal based bit manipulator in ncurses")
     (description "Bitwise is a multi base interactive calculator supporting
 dynamic base conversion and bit manipulation.  It's a handy tool for low level
@@ -222,7 +225,7 @@ Some of the features include:
                      "092412jzxy6wdvpk96pfj499hpmaww8xllavbvlqspfpr7ips9id"))))
    (build-system gnu-build-system)
    (inputs
-    `(("fortran" ,gfortran)))
+    (list gfortran))
    (synopsis "Visualizing and demonstrating convolution")
    (description
     "GNU C-Graph is a tool for demonstrating the theory of convolution.
@@ -335,12 +338,12 @@ triangulations.")
              (setenv "CVXOPT_BUILD_GSL" "1")
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("glpk" ,glpk)
-       ("gsl" ,gsl)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)
-       ("suitesparse" ,suitesparse)))
+     (list fftw
+           glpk
+           gsl
+           lapack
+           openblas
+           suitesparse))
     (home-page "https://www.cvxopt.org")
     (synopsis "Python library for convex optimization")
     (description
@@ -376,8 +379,8 @@ programming language.")
                      (let* ((out (assoc-ref outputs "out"))
                             (bin (string-append out "/bin")))
                        (wrap-program (string-append bin "/units_cur")
-                         `("PYTHONPATH" ":" prefix
-                           ,(search-path-as-string->list (getenv "PYTHONPATH"))))
+                         `("GUIX_PYTHONPATH" ":" prefix
+                           ,(search-path-as-string->list (getenv "GUIX_PYTHONPATH"))))
                        #t))))))
    (synopsis "Conversion between thousands of scales")
    (description
@@ -426,7 +429,7 @@ routines that have been extracted from the V8 JavaScript engine.")
                (base32
                 "194pzs1mlsj4ww6v37qq3961h5hckm5h805cv0r14xj3g9wfx2sk"))))
     (build-system gnu-build-system)
-    (inputs `(("tcl" ,tcl)))                      ;for 'tclsh'
+    (inputs (list tcl))                      ;for 'tclsh'
     (synopsis "Local search for universal constants and scientific values")
     (description
      "GNU Dionysus is a convenient system for quickly retrieving the values of
@@ -515,46 +518,56 @@ precision floating point numbers.")
 (define-public gsl
   (package
     (name "gsl")
-    (version "2.6")
+    (version "2.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gsl/gsl-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1a460zj9xmbgvcymkdhqh313c4l29mn9cffbi5vf33x3qygk70mp"))))
+                "0av04cpblphvvs3kl5rwphniarml503501vrpqw31rd0bmwg7fzg"))))
     (build-system gnu-build-system)
     (arguments
      (let ((system (%current-system)))
-       (cond
-        ((or (string-prefix? "aarch64" system)
-             (string-prefix? "powerpc" system))
-         ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        ((string-prefix? "i686" system)
-         ;; There are rounding issues with these tests on i686:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "linalg/test.c"
-                            ((".*gsl_test\\(test_LU_decomp.*") "\n")
-                            ((".*gsl_test\\(test_LUc_decomp.*") "\n")
-                            ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
-                            ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_all.*") "\n")
-                            ((".*test_float.*") "\n")
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        (else '()))))
+       `(#:configure-flags (list "--disable-static") ;halves package size
+         #:phases
+         (modify-phases %standard-phases
+           ,@(cond
+              ((or (string-prefix? "aarch64" system)
+                   (string-prefix? "powerpc" system))
+               ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_complex.*") "\n"))))))
+
+              ((string-prefix? "i686" system)
+               ;; There are rounding issues with these tests on i686:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "linalg/test.c"
+                       ((".*gsl_test\\(test_LU_decomp.*") "\n")
+                       ((".*gsl_test\\(test_LUc_decomp.*") "\n")
+                       ((".*gsl_test\\(test_QR_decomp_r.*") "\n")
+                       ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
+                       ((".*gsl_test\\(test_pcholesky_solve.*") "\n")
+                       ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_all.*") "\n")
+                       ((".*test_float.*") "\n")
+                       ((".*test_complex.*") "\n"))
+
+                     ;; XXX: These tests abort with:
+                     ;; gsl: cholesky.c:645: ERROR: matrix is not positive definite
+                     (substitute* '("multifit_nlinear/test.c"
+                                    "multilarge_nlinear/test.c")
+                       (("gsl_ieee_env_setup.*" all)
+                        (string-append "exit (77);\n" all)))))))
+
+              (else '()))))))
     (home-page "https://www.gnu.org/software/gsl/")
     (synopsis "Numerical library for C and C++")
     (description
@@ -565,6 +578,15 @@ differential equations, linear algebra, Fast Fourier Transforms and random
 numbers.")
     (license license:gpl3+)))
 
+;; TODO: Merge back into the gsl package as a separate output.
+(define-public gsl-static
+  (package/inherit gsl
+    (name "gsl-static")
+    (arguments
+     `(,@(package-arguments gsl)
+        #:configure-flags (list "--disable-shared")
+        #:make-flags (list "CFLAGS=-fPIC")))))
+
 (define-public sleef
   (package
     (name "sleef")
@@ -596,10 +618,7 @@ numbers.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("openssl" ,openssl)))
+     (list fftw gmp mpfr openssl))
     (home-page "https://sleef.org/")
     (synopsis "SIMD library for evaluating elementary functions and DFT")
     (description
@@ -623,7 +642,7 @@ It can utilize SIMD instructions that are available on modern processors.")
         "05bgxidxj8d9xdp82niy7cy36w181cxq7p8vc3y2ixshpgp1642a"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:configure-flags '("--with-gmp"
                            "--disable-static")))
@@ -667,10 +686,9 @@ LP/MIP solver is included in the package.")
         (base32 "0rj92x6p9m3la5gasjbj7sa569im527ffmka5y2sv1amgd3fflrh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,(@ (gnu packages base) which)))) ; for the tests
+     (list (@ (gnu packages base) which))) ; for the tests
     (inputs
-     `(("glpk" ,glpk)
-       ("gmp" ,gmp)))
+     (list glpk gmp))
     (home-page "http://www.4ti2.de/")
     (synopsis "Mathematical tool suite for problems on linear spaces")
     (description
@@ -694,7 +712,7 @@ integer programming problems and computes Markov bases for statistics.")
         "00zdgiqb91vx6gd2103h3ijij0llspsxc6zz3iw2bll39fvkl4xq"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "https://www.inf.ethz.ch/personal/fukudak/cdd_home/index.html")
     (synopsis "Library for convex hulls and extreme rays of polyhedra")
     (description
@@ -720,7 +738,7 @@ computing convex hulls.")
          "05kq3hzam31dlmkccv3v358r478kpvx76mw37ka12c6ypwv5dsnk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:tests? #f                      ; no check phase
        #:make-flags `("CC=gcc"
@@ -759,7 +777,7 @@ be solved.")
         (base32 "1ic2q7kvxpqmgxlishygvx8d00i4wn51vkq4fyac44ahhf6c3kwd"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://jugit.fz-juelich.de/mlz/libcerf")
     (synopsis "Library for complex error functions")
     (description
@@ -782,7 +800,7 @@ Dawson, Faddeeva, and Voigt functions.")
          "1aq0qc1y27iw9grhgnyji3290wwfznsrk3sg6ynqpxwjdda53h4m"))))
     (build-system gnu-build-system)
     (inputs
-     `(("lrslib" ,lrslib)))
+     (list lrslib))
     (arguments
      `(#:tests? #f                      ; no check phase
        #:phases
@@ -827,14 +845,9 @@ halfspaces) or by their double description with both representations.")
                 "0l7as5z6xvbxly8alam9s4kws70952qq35a6vkljzayi4b9gbklx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("eigen" ,eigen)
-       ("lapack" ,lapack)
-       ("fortran" ,gfortran)))
+     (list eigen lapack gfortran))
     (synopsis "Fortran subroutines for solving eigenvalue problems")
     (description
      "ARPACK-NG is a collection of Fortran77 subroutines designed to solve
@@ -916,15 +929,15 @@ problems in numerical linear algebra.")
         "0nnap9q1mv14g57dl3vkvxrdr10k5w7zzyxs6rgxhia8q8mphgqb"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon -O2")
+       #:phases
        (modify-phases %standard-phases
          ;; These tests use a lot of stack variables and segfault without
          ;; lifting resource limits.
          (add-after 'unpack 'disable-broken-tests
            (lambda _
              (substitute* "TESTING/CMakeLists.txt"
-               (("add_lapack_test.* xeigtstz\\)") ""))
-             #t))
+               (("add_lapack_test.* xeigtstz\\)") ""))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -946,8 +959,7 @@ problems in numerical linear algebra.")
                                            "\\.h$")))
                (copy-recursively (string-append "../clapack-"
                                                 ,version "-CMAKE/INCLUDE")
-                                 (string-append out "/include"))
-               #t))))))
+                                 (string-append out "/include"))))))))
     (home-page "https://www.netlib.org/clapack/")
     (synopsis "Numerical linear algebra library for C")
     (description
@@ -961,7 +973,7 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
 (define-public scalapack
   (package
     (name "scalapack")
-    (version "2.0.2")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
@@ -969,8 +981,8 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
                            version ".tgz"))
        (sha256
         (base32
-         "0p1r61ss1fq0bs8ynnx7xq4wwsdvs32ljvwjnx6yxr8gd6pawx0c"))
-       (patches (search-patches "scalapack-blacs-mpi-deprecations.patch"))))
+         "19i0h9vdc3zsy58r6fy1vs2kz2l7amifkz0cf926j90xz1n23nb1"))
+       (patches (search-patches "scalapack-gcc-10-compilation.patch"))))
     (build-system cmake-build-system)
     (inputs
      `(("mpi" ,openmpi)
@@ -980,7 +992,15 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
      `(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES")
        #:phases (modify-phases %standard-phases
                   (add-before 'check 'mpi-setup
-		    ,%openmpi-setup))))
+		    ,%openmpi-setup)
+                  (add-after 'unpack 'skip-faulty-test
+                    (lambda _
+                      ;; FIXME: Skip these two tests that fail to complete for
+                      ;; unknown reasons:
+                      ;; <https://github.com/Reference-ScaLAPACK/scalapack/issues/43>.
+                      (substitute* "TESTING/CMakeLists.txt"
+                        (("^add_test\\(x[sd]hseqr.*" all)
+                         (string-append "# " all "\n"))))))))
     (home-page "http://www.netlib.org/scalapack/")
     (synopsis "Library for scalable numerical linear algebra")
     (description
@@ -1003,11 +1023,7 @@ singular value problems.")
        (sha256
         (base32 "1fp7rbhjmz2w63r72kicf8lfszzimz2csfx868fracw167hpaz75"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)
-              ("cairo" ,cairo)
-              ("pango" ,pango)
-              ("gd" ,gd)
-              ("lua" ,lua)))
+    (inputs (list readline cairo pango gd lua))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("texlive" ,texlive-tiny)))
@@ -1042,7 +1058,7 @@ plotting engine by third-party applications like Octave.")
        (sha256
         (base32 "11wqmd443b4nksdbzp1msdws3av948nmwq1xz80w6hka3ss2aigd"))))
     (native-inputs
-     `(("fortran" ,gfortran)))
+     (list gfortran))
     (build-system gnu-build-system)
     (synopsis "General Cartographic Transformation Package (GCTP)")
     (description
@@ -1071,9 +1087,7 @@ computations.")
                                 "hdf4-tirpc.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list gfortran bison flex))
     (inputs
      `(("zlib" ,zlib)
        ("libjpeg" ,libjpeg-turbo)
@@ -1081,6 +1095,8 @@ computations.")
     (arguments
      `(#:parallel-tests? #f
        #:configure-flags (list "--enable-shared"
+                               "FCFLAGS=-fallow-argument-mismatch"
+                               "FFLAGS=-fallow-argument-mismatch"
                                (string-append "CPPFLAGS=-I"
                                               (assoc-ref %build-inputs "libtirpc")
                                               "/include/tirpc"))
@@ -1114,7 +1130,7 @@ computations.")
              ;; .so-files.  We truncate the hashes to avoid
              ;; unnecessary store references to those compilers:
              (substitute* "libhdf4.settings"
-               (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+               (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
                 (string-append prefix (string-take hash 10) "...")))
              #t))
          (add-after 'install 'provide-absolute-libjpeg-reference
@@ -1170,10 +1186,9 @@ incompatible with HDF5.")
       (patches (search-patches "hdf5-config-date.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("perl" ,perl)))                 ;part of the test machinery needs Perl
+     (list gfortran perl))                 ;part of the test machinery needs Perl
     (outputs '("out"       ; core library
                "fortran")) ; fortran interface
     (arguments
@@ -1363,9 +1378,9 @@ extremely large and complex data collections.")
        #:make-flags
        (list (string-append "HDFLIB=" (assoc-ref %build-inputs "hdf4") "/lib")
              (string-append "HDF5LIB=" (assoc-ref %build-inputs "hdf5") "/lib")
-             (string-append "ZLIB=" (assoc-ref %build-inputs "zlib") "/lib/libz.so")
+             (string-append "ZLIB=" (search-input-file %build-inputs "/lib/libz.so"))
              (string-append "JPEGLIB="
-                            (assoc-ref %build-inputs "libjpeg") "/lib/libjpeg.so")
+                            (search-input-file %build-inputs "/lib/libjpeg.so"))
              "LLEXT=so")
 
        #:phases
@@ -1382,16 +1397,20 @@ extremely large and complex data collections.")
                             "hdf/hdf5lib/exceptions/Makefile.in"
                             "hdf/hdflib/Makefile.in")
                (("\\$\\(TOP\\)/lib/slf4j-api-1\\.7\\.5\\.jar")
-                (string-append (assoc-ref inputs "slf4j-api")
-                               "/share/java/slf4j-api.jar")))
+                ;; 'slf4j-api-X.Y.Z.jar' is installed in a Maven-style
+                ;; directory, so use 'find-files' to find it.
+                (car (find-files (assoc-ref inputs "slf4j-api")
+                                 "^slf4j-api.*\\.jar$"))))
              ;; Replace outdated config.sub and config.guess:
              (with-directory-excursion "config"
                (for-each (lambda (file)
                            (install-file
-                            (string-append (assoc-ref inputs "automake")
-                                           "/share/automake-"
-                                           ,(version-major+minor (package-version automake))
-                                           "/" file) "."))
+                            (search-input-file inputs
+                                               (string-append
+                                                "/share/automake-"
+                                                ,(version-major+minor (package-version automake))
+                                                "/" file))
+                            "."))
                          '("config.sub" "config.guess")))
 
              ;; Fix embedded version number
@@ -1409,8 +1428,9 @@ extremely large and complex data collections.")
                     (testjars
                      (append
                        (map (lambda (i)
-                              (string-append (assoc-ref inputs i)
-                                             "/share/java/" i ".jar"))
+                              (car (find-files (assoc-ref inputs i)
+                                               (string-append "^" i
+                                                              ".*\\.jar$"))))
                             '("slf4j-api" "slf4j-simple"))
                        (list
                          (car (find-files (assoc-ref inputs "junit") "jar$"))
@@ -1423,11 +1443,9 @@ extremely large and complex data collections.")
                               "test/hdf5lib/junit.sh.in"
                               "examples/runExample.sh.in")
                  (("/usr/bin/test")
-                  (string-append (assoc-ref inputs "coreutils")
-                                 "/bin/test"))
+                  (search-input-file inputs "/bin/test"))
                  (("/usr/bin/uname")
-                  (string-append (assoc-ref inputs "coreutils")
-                                 "/bin/uname"))
+                  (search-input-file inputs "/bin/uname"))
                  (("CLASSPATH=[^\n]*")
                   (string-append "CLASSPATH=" class-path)))
                (setenv "CLASSPATH" class-path))
@@ -1467,7 +1485,7 @@ implemented in C.")
                                 "hdf-eos2-fortrantests.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
      `(("hdf4" ,hdf4-alt) ; assume most HDF-EOS2 users won't use the HDF4 netCDF API
        ;; XXX: These inputs are really dependencies of hdf4.
@@ -1505,12 +1523,10 @@ System (Grid, Point and Swath).")
                                        "hdf-eos5-fix-szip.patch"
                                        "hdf-eos5-fortrantests.patch"))))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system gnu-build-system)
     (inputs
-     `(("hdf5" ,hdf5-1.8)
-       ("zlib" ,zlib)
-       ("gctp" ,gctp)))
+     (list hdf5-1.8 zlib gctp))
     (arguments
      `(#:configure-flags '("--enable-install-include" "--enable-shared"
                            "CC=h5cc -Df2cFortran" "LIBS=-lgctp")
@@ -1587,8 +1603,7 @@ Swath).")
                (("ExternalProject_Add\\(project_blosc") "message("))
              #t)))))
     (inputs
-     `(("c-blosc" ,c-blosc)
-       ("hdf5" ,hdf5-1.10)))
+     (list c-blosc hdf5-1.10))
     (home-page "https://github.com/Blosc/hdf5-blosc")
     (synopsis "Filter for HDF5 using the Blosc compressor")
     (description "This is a filter for HDF5 that uses the Blosc compressor; by
@@ -1609,7 +1624,7 @@ Blosc-compressed datasets.")
         (base32
          "1gm76jbwhz9adbxgn14zx8cj33dmjdr2g5xcy0m9c2gakp8w59kj"))))
     (build-system gnu-build-system)
-    (inputs `(("hdf5" ,hdf5-1.8)))                ;h5cc for tests
+    (inputs (list hdf5-1.8))                ;h5cc for tests
     (home-page "https://www.hdfgroup.org/products/hdf5_tools/h5check.html")
     (synopsis "HDF5 format checker")
     (description "@code{h5check} is a validation tool for verifying that an
@@ -1630,8 +1645,7 @@ HDF5 file is encoded according to the HDF File Format Specification.")
          "14ddy2xnb6sgp4hiax9v5sv4pr4l4dd4ps76nfha3nrpr1ikhcqm"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Tests require googletest *sources*
-    (inputs `(("lapack" ,lapack)
-              ("fftw" ,fftw)))
+    (inputs (list lapack fftw))
     ;; FIXME: Even though the fonts are available dvips complains:
     ;; "Font cmmi10 not found; characters will be left blank."
     (native-inputs
@@ -1661,12 +1675,17 @@ similar to MATLAB, GNU Octave or SciPy.")
        (sha256
         (base32
          "1a2fpp15a2rl1m50gcvvzd9y6bavl6vjf9zzf63sz5gdmq06yiqf"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Make sure this variable is defined only once.  Failing to do so
+        ;; would break builds of 'netcdf-parallel-openmpi' with a
+        ;; multiple-definition link error with GCC 10.
+        '(substitute* "ncdump/ocprint.c"
+           (("^int ocdebug") "static int ocdebug")))
        (patches (search-patches "netcdf-date-time.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)))
+     (list m4 doxygen graphviz))
     (inputs
      `(("hdf4" ,hdf4-alt)
        ("hdf5" ,hdf5)
@@ -1694,7 +1713,7 @@ similar to MATLAB, GNU Octave or SciPy.")
              ;; filenames to avoid unnecessary references to the corresponding
              ;; store items.
              (substitute* "libnetcdf.settings"
-               (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
+               (("(/gnu/store/)([0-9A-Za-z]*)" all prefix hash)
                 (string-append prefix (string-take hash 10) "...")))
              #t)))
 
@@ -1743,11 +1762,13 @@ sharing of scientific data.")
                 "0x4acvfhbsx1q79dkkwrwbgfhm0w5ngnp4zj5kk92s1khihmqfhj"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:parallel-tests? #f))
+     `(#:configure-flags '("FCFLAGS=-fallow-argument-mismatch"
+                           "FFLAGS=-fallow-argument-mismatch")
+       #:parallel-tests? #f))
     (inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Fortran interface for the netCDF library")
     (description (package-description netcdf))
     (home-page (package-home-page netcdf))
@@ -1782,8 +1803,8 @@ sharing of scientific data.")
                  (("libnlopt")
                   (string-append out "/lib/libnlopt")))
                #t))))))
-    (inputs `(("guile" ,guile-2.0)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list guile-2.0))
+    (native-inputs (list pkg-config))
     (home-page "http://ab-initio.mit.edu/wiki/")
     (synopsis "Library for nonlinear optimization")
     (description "NLopt is a library for nonlinear optimization, providing a
@@ -1823,11 +1844,10 @@ online as well as original implementations of various other algorithms.")
                                           after "\n")))
                         #t))))))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
      ;; TODO: Maybe add dependency on COIN-MUMPS, ASL, and HSL.
-     `(("lapack" ,lapack)))                    ;for both libblas and liblapack
+     (list lapack))                    ;for both libblas and liblapack
     (home-page "https://www.coin-or.org")
     (synopsis "Large-scale nonlinear optimizer")
     (description
@@ -1971,7 +1991,7 @@ interfaces.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (delete-file (string-append
                            (site-packages inputs outputs)
-                           "PyNomad-0.0.0-py"
+                           "/PyNomad-0.0.0-py"
                            (python-version (assoc-ref inputs "python"))
                            ".egg-info"))
              #t)))))
@@ -2001,10 +2021,9 @@ the result of costly computer simulations.")
                '(delete-file-recursively "ThirdParty"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (home-page "https://www.coin-or.org")
     (synopsis "Branch-and-cut solver")
     (description
@@ -2032,10 +2051,9 @@ executable.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (home-page "https://www.coin-or.org")
     (synopsis "Linear programming solver")
     (description
@@ -2107,9 +2125,7 @@ and quadratic objectives using the Simplex algorithm.")
          (add-after 'fix-rpath 'check
            (assoc-ref %standard-phases 'check)))))
     (native-inputs
-     `(("patchelf" ,patchelf)
-       ("perl" ,perl)
-       ("sed" ,sed)))
+     (list patchelf perl sed))
     (home-page "https://www.gecode.org")
     (synopsis "Toolkit for developing constraint-based systems")
     (description "Gecode is a C++ toolkit for developing constraint-based
@@ -2177,7 +2193,7 @@ systems and applications.  It provides a modular and extensible solver.")
                              (string-append static "/include"))
                #t))))))
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (native-inputs
      `(("lapack" ,lapack)
        ("openblas" ,openblas)
@@ -2277,7 +2293,7 @@ between aspif and smodels format or to a human-readable text format.")
              (rename-file "cmake/ClaspConfig.cmake.in"
                           "cmake/clasp-config.cmake.in"))))))
     (inputs
-     `(("libpotassco" ,libpotassco)))
+     (list libpotassco))
     (home-page "https://potassco.org/")
     (synopsis "Answer set solver")
     (description "clasp is an answer set solver for (extended) normal and
@@ -2342,8 +2358,7 @@ satisfiability checking (SAT).")
                                "propagator" "propgator-sequence-mining"
                                "symbol" "visitor"))))))))))
     (inputs
-     `(("clasp" ,clasp)
-       ("libpotassco" ,libpotassco)))
+     (list clasp libpotassco))
     (native-inputs
      `(("clasp-src" ,(package-source clasp))))
     (home-page "https://potassco.org/")
@@ -2377,9 +2392,9 @@ satisfiability checking (SAT).")
                         (("set\\(LIB_SUFFIX \"64\"\\)")
                          "set(LIB_SUFFIX \"\")")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("glog" ,glog)))                           ;for #include <glog/glog.h>
+     (list glog))                           ;for #include <glog/glog.h>
     (inputs
      `(("eigen" ,eigen)
        ("blas" ,openblas)
@@ -2446,19 +2461,19 @@ can solve two kinds of problems:
        ("texinfo" ,texinfo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ;; The following inputs are not actually used in the build process.
-       ;; However, the ./configure gratuitously tests for their existence and
-       ;; assumes that programs not present at build time are also not, and
-       ;; can never be, available at run time!  If these inputs are therefore
-       ;; not present, support for them will be built out.  However, Octave
-       ;; will still run without them, albeit without the features they
-       ;; provide.
-       ("less" ,less)
-       ("ghostscript" ,ghostscript)
-       ("gnuplot" ,gnuplot)))
+     (list gfortran
+           pkg-config
+           perl
+           ;; The following inputs are not actually used in the build process.
+           ;; However, the ./configure gratuitously tests for their existence and
+           ;; assumes that programs not present at build time are also not, and
+           ;; can never be, available at run time!  If these inputs are therefore
+           ;; not present, support for them will be built out.  However, Octave
+           ;; will still run without them, albeit without the features they
+           ;; provide.
+           less
+           ghostscript
+           gnuplot))
     ;; Octave code uses this variable to detect directories holding multiple CA
     ;; certificates to verify peers with.  This is required for the networking
     ;; functions that require encryption to work properly.
@@ -2503,7 +2518,7 @@ script files.")
        ,@(package-inputs octave-cli)))
     (native-inputs
      `(("qttools" , qttools) ;for lrelease
-       ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi
+       ("texlive" ,(texlive-updmap.cfg (list texlive-epsf))) ; for texi2dvi
        ,@(package-native-inputs octave-cli)))
     (arguments
      (substitute-keyword-arguments (package-arguments octave-cli)
@@ -2545,12 +2560,12 @@ script files.")
                         (assoc-ref %outputs "out"))
               "-UCMAKE_INSTALL_RPATH")))
     (inputs
-      `(("freetype" ,freetype)
-        ("glu" ,glu)
-        ("libxmu" ,libxmu)
-        ("mesa" ,mesa)
-        ("tcl" ,tcl)
-        ("tk" ,tk)))
+      (list freetype
+            glu
+            libxmu
+            mesa
+            tcl
+            tk))
     (native-inputs
       `(("python" ,python-wrapper)))
     (home-page "https://github.com/tpaviot/oce")
@@ -2629,17 +2644,17 @@ Open CASCADE library.")
               "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
               "-UCMAKE_INSTALL_LIBDIR")))
     (inputs
-     `(("doxygen" ,doxygen)
-       ;("freeimage" ,freeimage)
-       ("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("mesa" ,mesa)
-       ("tbb" ,tbb)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list doxygen
+           ;("freeimage" ,freeimage)
+           freetype
+           glu
+           libxext
+           libxi
+           libxmu
+           mesa
+           tbb-2020
+           tcl
+           tk))
     ;; TODO: build Overview documentation and add 'doc' output.
     (home-page "https://www.opencascade.com")
     (synopsis "Libraries for 3D modeling and numerical simulation")
@@ -2690,17 +2705,17 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
           #t))))
     (build-system cmake-build-system)
     (propagated-inputs
-     `(("fltk" ,fltk)
-       ("gfortran" ,gfortran)
-       ("glu" ,glu)
-       ("gmp" ,gmp)
-       ("hdf5" ,hdf5)
-       ("lapack" ,lapack)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("mesa" ,mesa)
-       ("metis" ,metis)
-       ("opencascade-occt" ,opencascade-occt)))
+     (list fltk
+           gfortran
+           glu
+           gmp
+           hdf5
+           lapack
+           libx11
+           libxext
+           mesa
+           metis
+           opencascade-occt))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("libxft" ,libxft)
@@ -2788,19 +2803,18 @@ ASCII text files using Gmsh's own scripting language.")
                    ,(list (string-append (assoc-ref inputs "qtsvg")
                                          "/lib/qt5/plugins/"))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;;("python-astropy" ,python-astropy) ;; FIXME: Package this.
-       ("qttools" ,qttools)
-       ("python-sip" ,python-sip-4)))
+     (list pkg-config
+           ;;("python-astropy" ,python-astropy) ;; FIXME: Package this.
+           qttools python-sip-4))
     (inputs
-     `(("ghostscript" ,ghostscript) ;optional, for EPS/PS output
-       ("python-dbus" ,python-dbus)
-       ("python-h5py" ,python-h5py) ;optional, for HDF5 data
-       ("python-pyqt" ,python-pyqt)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list ghostscript ;optional, for EPS/PS output
+           python-dbus
+           python-h5py ;optional, for HDF5 data
+           python-pyqt
+           qtbase-5
+           qtsvg))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://veusz.github.io/")
     (synopsis "Scientific plotting package")
     (description
@@ -2839,7 +2853,7 @@ September 2004}")
 (define-public petsc
   (package
     (name "petsc")
-    (version "3.11.2")
+    (version "3.16.1")
     (source
      (origin
       (method url-fetch)
@@ -2847,89 +2861,92 @@ September 2004}")
       (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
                           "petsc-lite-" version ".tar.gz"))
       (sha256
-       (base32 "1645nwwcp9bcnfnxikk480mhbbacdvhsay2c401818hk97dqj5nx"))))
+       (base32 "0sm03vpg010q9icidiq587n325m0598cj6hab2rdv85nwyygg74h"))))
     (outputs '("out"                    ; libraries and headers
                "examples"))             ; ~30MiB of examples
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python-2)))
+     (list python which))
     (inputs
-     `(("gfortran" ,gfortran)
-       ("openblas" ,openblas)
-       ("superlu" ,superlu)
-       ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
-       ;; leaving out opengl, as configuration seems to only be for mac
-       ))
+     (list gfortran openblas superlu
+           ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
+           ;; leaving out opengl, as configuration seems to only be for mac
+           ))
     (arguments
-     `(#:test-target "test"
-       #:parallel-build? #f             ; build is parallel by default
-       #:configure-flags
-       `("--with-mpi=0"
-         "--with-openmp=1"
-         "--with-openblas=1"
-         "--with-superlu=1")
-       #:make-flags
-       ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
-       ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
-       (list (format #f "MAKE_NP=~a" (parallel-job-count)))
-       #:phases
-       (modify-phases %standard-phases
-        (replace 'configure
-          ;; PETSc's configure script is actually a python script, so we can't
-          ;; run it with bash.
-          (lambda* (#:key outputs (configure-flags '())
-                          #:allow-other-keys)
-            (let* ((prefix (assoc-ref outputs "out"))
-                   (flags `(,(string-append "--prefix=" prefix)
-                            ,@configure-flags)))
-              (format #t "build directory: ~s~%" (getcwd))
-              (format #t "configure flags: ~s~%" flags)
-              (apply invoke "./configure" flags))))
-        (add-after 'configure 'clean-local-references
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (substitute* (find-files "." "^petsc(conf|machineinfo).h$")
-                ;; Prevent build directory from leaking into compiled code
-                (((getcwd)) out)
-                ;; Scrub timestamp for reproducibility
-                ((".*Libraries compiled on.*") ""))
-              (substitute* (find-files "." "petscvariables")
-                ;; Do not expose build machine characteristics, set to defaults.
-                (("MAKE_NP = [:digit:]+") "MAKE_NP = 2")
-                (("NPMAX = [:digit:]+") "NPMAX = 2"))
-              #t)))
-        (add-after 'install 'clean-install
-          ;; Try to keep installed files from leaking build directory names.
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              (substitute* (map (lambda (file)
-                                  (string-append out "/lib/petsc/conf/" file))
-                                '("petscvariables"))
-                (((getcwd)) out))
-              ;; Make compiler references point to the store
-              (substitute* (string-append out "/lib/petsc/conf/petscvariables")
-                (("= (gcc|g\\+\\+|gfortran)" _ compiler)
-                 (string-append "= " (which compiler))))
-              ;; PETSc installs some build logs, which aren't necessary.
-              (for-each (lambda (file)
-                          (let ((f (string-append out "/lib/petsc/conf/" file)))
-                            (when (file-exists? f)
-                              (delete-file f))))
-                        '("configure.log" "make.log" "gmake.log"
-                          "test.log" "error.log" "RDict.db"
-                          "PETScBuildInternal.cmake"
-                          ;; Once installed, should uninstall with Guix
-                          "uninstall.py"))
-              #t)))
-        (add-after 'install 'move-examples
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (examples (assoc-ref outputs "examples"))
-                   (exdir (string-append out "/share/petsc/examples"))
-                   (exdir' (string-append examples "/share/petsc/examples")))
-              (copy-recursively exdir exdir')
-              (delete-file-recursively exdir)
-              #t))))))
+     (list
+      #:test-target "test"
+      #:parallel-build? #f             ; build is parallel by default
+      #:configure-flags
+      #~(list "--with-mpi=0"
+              "--with-openmp=1"
+              "--with-openblas=1"
+              (string-append "--with-openblas-dir="
+                             #$(this-package-input "openblas"))
+              "--with-superlu=1")
+      #:make-flags
+      ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
+      ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
+      #~(list (format #f "MAKE_NP=~a" (parallel-job-count)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'configure
+            ;; PETSc's configure script is actually a python script, so we can't
+            ;; run it with bash.
+            (lambda* (#:key outputs (configure-flags '())
+                      #:allow-other-keys)
+              (let* ((prefix (assoc-ref outputs "out"))
+                     (flags `(,(string-append "--prefix=" prefix)
+                              ,@configure-flags)))
+                (format #t "build directory: ~s~%" (getcwd))
+                (format #t "configure flags: ~s~%" flags)
+                (apply invoke "./configure" flags)
+
+                ;; Generate test scripts with the right shebang.
+                (substitute* "config/example_template.py"
+                  (("#!/usr/bin/env bash")
+                   (string-append "#!" (which "bash")))))))
+          (add-after 'configure 'clean-local-references
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (substitute* (find-files "." "^petsc(conf|machineinfo).h$")
+                  ;; Prevent build directory from leaking into compiled code
+                  (((getcwd)) out)
+                  ;; Scrub timestamp for reproducibility
+                  ((".*Libraries compiled on.*") ""))
+                (substitute* (find-files "." "petscvariables")
+                  ;; Do not expose build machine characteristics, set to defaults.
+                  (("MAKE_NP = [:digit:]+") "MAKE_NP = 2")
+                  (("NPMAX = [:digit:]+") "NPMAX = 2")))))
+          (add-after 'install 'clean-install
+            ;; Try to keep installed files from leaking build directory names.
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (substitute* (map (lambda (file)
+                                    (string-append out "/lib/petsc/conf/" file))
+                                  '("petscvariables"))
+                  (((getcwd)) out))
+                ;; Make compiler references point to the store
+                (substitute* (string-append out "/lib/petsc/conf/petscvariables")
+                  (("= (gcc|g\\+\\+|gfortran)" _ compiler)
+                   (string-append "= " (which compiler))))
+                ;; PETSc installs some build logs, which aren't necessary.
+                (for-each (lambda (file)
+                            (let ((f (string-append out "/lib/petsc/conf/" file)))
+                              (when (file-exists? f)
+                                (delete-file f))))
+                          '("configure.log" "make.log" "gmake.log"
+                            "test.log" "error.log" "RDict.db"
+                            "PETScBuildInternal.cmake"
+                            ;; Once installed, should uninstall with Guix
+                            "uninstall.py")))))
+          (add-after 'install 'move-examples
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (examples (assoc-ref outputs "examples"))
+                     (exdir (string-append out "/share/petsc/examples"))
+                     (exdir' (string-append examples "/share/petsc/examples")))
+                (copy-recursively exdir exdir')
+                (delete-file-recursively exdir)))))))
     (home-page "https://www.mcs.anl.gov/petsc")
     (synopsis "Library to solve PDEs")
     (description "PETSc, pronounced PET-see (the S is silent), is a suite of
@@ -2939,16 +2956,18 @@ scientific applications modeled by partial differential equations.")
               "https://www.mcs.anl.gov/petsc/documentation/copyright.html"))))
 
 (define-public petsc-complex
-  (package (inherit petsc)
+  (package
+    (inherit petsc)
     (name "petsc-complex")
     (arguments
      (substitute-keyword-arguments (package-arguments petsc)
        ((#:configure-flags cf)
-        `(cons "--with-scalar-type=complex" ,cf))))
+        #~(cons "--with-scalar-type=complex" #$cf))))
     (synopsis "Library to solve PDEs (with complex scalars)")))
 
 (define-public petsc-openmpi
-  (package (inherit petsc)
+  (package
+    (inherit petsc)
     (name "petsc-openmpi")
     (inputs
      `(("hdf5" ,hdf5-parallel-openmpi)
@@ -2962,55 +2981,56 @@ scientific applications modeled by partial differential equations.")
     (arguments
      (substitute-keyword-arguments (package-arguments petsc)
        ((#:configure-flags cf)
-        ``("--with-hypre=1"
-           "--with-mpiexec=mpirun"
-           "--with-metis=1"
-           "--with-mumps=1"
-           "--with-scalapack=1"
-           "--with-ptscotch=1"
-           ,(string-append "--with-mpi-dir="
-                           (assoc-ref %build-inputs "openmpi"))
-           ,(string-append "--with-hdf5-include="
-                           (assoc-ref %build-inputs "hdf5") "/include")
-           ,(string-append "--with-hdf5-lib="
-                           (assoc-ref %build-inputs "hdf5") "/lib/libhdf5.a")
-           ,@(delete "--with-mpi=0" ,cf)))
+        #~`("--with-hypre=1"
+            "--with-mpiexec=mpirun"
+            "--with-metis=1"
+            "--with-mumps=1"
+            "--with-scalapack=1"
+            "--with-ptscotch=1"
+            ,(string-append "--with-mpi-dir="
+                            #$(this-package-input "openmpi"))
+            ,(string-append "--with-hdf5-include="
+                            #$(this-package-input "hdf5") "/include")
+            ,(string-append "--with-hdf5-lib="
+                            #$(this-package-input "hdf5") "/lib/libhdf5.a")
+            ,@(delete "--with-mpi=0" #$cf)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'configure 'mpi-setup
-             ,%openmpi-setup)))))
+        #~(modify-phases #$phases
+            (add-before 'configure 'mpi-setup
+              #$%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with MUMPS and MPI support)")))
 
 (define-public petsc-complex-openmpi
-  (package (inherit petsc-complex)
+  (package
+    (inherit petsc-complex)
     (name "petsc-complex-openmpi")
     (inputs
-     `(("openmpi" ,openmpi)
-       ,@(package-inputs petsc-complex)))
+     (modify-inputs (package-inputs petsc-complex)
+       (prepend openmpi)))
     (arguments
      (substitute-keyword-arguments (package-arguments petsc-complex)
        ((#:configure-flags cf)
-        ``("--with-mpiexec=mpirun"
-           ,(string-append "--with-mpi-dir="
-                           (assoc-ref %build-inputs "openmpi"))
-           ,@(delete "--with-mpi=0" ,cf)))
+        #~`("--with-mpiexec=mpirun"
+            ,(string-append "--with-mpi-dir="
+                            #$(this-package-input "openmpi"))
+            ,@(delete "--with-mpi=0" #$cf)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'configure 'mpi-setup
-             ,%openmpi-setup)))))
+        #~(modify-phases #$phases
+            (add-before 'configure 'mpi-setup
+              #$%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
 
 (define-public python-petsc4py
   (package
     (name "python-petsc4py")
-    (version "3.11.0")
+    (version "3.16.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "petsc4py" version))
         (sha256
           (base32
-           "1rm1qj5wlkhxl39by9n78lh3gbmii31wsnb8j1rr5hvfr5xgbx2q"))
+           "0pxr6qa7p0pmpq0av29lx8lzlrdcfdzj87ynixzr8dn42y13a662"))
         (modules '((guix build utils)))
         (snippet
          '(begin
@@ -3034,7 +3054,7 @@ scientific applications modeled by partial differential equations.")
          (add-before 'check 'mpi-setup
            ,%openmpi-setup))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
      `(("petsc" ,petsc-openmpi)
        ("python-numpy" ,python-numpy)))
@@ -3075,7 +3095,7 @@ savings are consistently > 5x.")
 (define-public slepc
   (package
     (name "slepc")
-    (version "3.11.1")
+    (version "3.16.1")
     (source
      (origin
        (method url-fetch)
@@ -3083,16 +3103,17 @@ savings are consistently > 5x.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1yq84q9wannc8xwapxpay4ypdd675picwi395hhsdvng9q6hf5j8"))))
+         "1ysfm77s5fcissv3q0k5d65mlp93zi4anqg62q3cd25dn66sva5i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python-2)
+     `(("python" ,python)
+       ("which" ,which)
        ("petsc:examples" ,petsc "examples"))) ;for gmakegen.py script
     (inputs
      `(("arpack" ,arpack-ng)
        ("gfortran" ,gfortran)))
     (propagated-inputs
-     `(("petsc" ,petsc)))
+     (list petsc))
     (arguments
      `(#:parallel-build? #f             ;build is parallel by default
        #:configure-flags
@@ -3147,7 +3168,9 @@ as well as other related problems such as the singular value decomposition.
 The emphasis of the software is on methods and techniques appropriate for
 problems in which the associated matrices are sparse, for example, those
 arising after the discretization of partial differential equations.")
-    (license license:bsd-2)))
+    (license license:bsd-2)
+    (properties
+     `((release-monitoring-url . "http://slepc.upv.es/download/")))))
 
 (define-public slepc-complex
   (package (inherit slepc)
@@ -3168,10 +3191,10 @@ arising after the discretization of partial differential equations.")
 	     ,%openmpi-setup)))))
     (inputs
      `(("mpi" ,openmpi)
-       ("arpack" ,arpack-ng-openmpi)
        ,@(alist-delete "arpack" (package-inputs slepc))))
     (propagated-inputs
      `(("petsc" ,petsc-openmpi)
+       ("arpack" ,arpack-ng-openmpi)
        ,@(alist-delete "petsc" (package-propagated-inputs slepc))))
     (synopsis "Scalable library for eigenproblems (with MPI support)")))
 
@@ -3186,14 +3209,14 @@ arising after the discretization of partial differential equations.")
 (define-public python-slepc4py
   (package
     (name "python-slepc4py")
-    (version "3.11.0")
+    (version "3.16.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "slepc4py" version))
         (sha256
           (base32
-            "1ksp08kxf4wg408b9nn39z3qfhy643j22d4rfbl30vzxk2rxh4lq"))))
+            "0fq997y73ymvcvdrxycp450pxwdgnqaw62gv9rwncfgsfplkvs9w"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -3235,8 +3258,7 @@ bindings to almost all functions of SLEPc.")
         (base32 "1s9hyknfvhj86g3giayyf3dxzg23iij0rs7bdvj075v9qbyhqn9b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "http://us.metamath.org/")
     (synopsis "Proof verifier based on a minimalistic formalism")
     (description
@@ -3367,12 +3389,9 @@ book.")
                     (string-append gecode "/bin/fzn-gecode"))
                    (newline port)))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("cbc" ,cbc)
-       ("gecode" ,gecode)
-       ("zlib" ,zlib)))
+     (list cbc gecode zlib))
     (home-page "https://www.minizinc.org")
     (synopsis "High-level constraint modeling language")
     (description "MiniZinc is a high-level modeling language for constraint
@@ -3439,7 +3458,7 @@ SCALAP       = -Wl,-rpath=$(SCALAPDIR) -Wl,-rpath='$$ORIGIN' -L$(SCALAPDIR) -lsc
 LIBOTHERS    = -pthread
 CDEFS        = -DAdd_
 PIC          = -fPIC
-OPTF         = -O2 -DALLOW_NON_INIT $(PIC)
+OPTF         = -O2 -DALLOW_NON_INIT -fallow-argument-mismatch $(PIC)
 OPTL         = -O2 $(PIC)
 OPTC         = -O2 $(PIC)
 INCS         = $(INCSEQ)
@@ -3566,8 +3585,7 @@ sparse system of linear equations A x = b using Gaussian elimination.")
          "1aapydwwkydbwgz07n7ma3a5jy9n3v0shy6q6j8mi4wr3crhx45a"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-nokogiri ruby-rspec))
     (synopsis "AsciiMath parsing and conversion library")
     (description
      "A pure Ruby AsciiMath parsing and conversion library.  AsciiMath is an
@@ -3620,7 +3638,7 @@ void mc64ad_ (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
                  #t)))))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("tcsh" ,tcsh)))
+     (list tcsh))
     (inputs
      `(("blas" ,openblas)
        ("gfortran" ,gfortran)))
@@ -3683,7 +3701,7 @@ void mc64ad_dist (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
                                 "superlu-dist-awpm-grid.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("tcsh" ,tcsh)))
+     (list tcsh))
     (inputs
      `(("gfortran" ,gfortran)
        ("blas" ,openblas)
@@ -3748,11 +3766,9 @@ implemented in ANSI C, and MPI for communications.")
                                "scotch-integer-declarations.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("flex" ,flex)
-       ("bison" ,bison)
-       ("gfortran" ,gfortran)))
+     (list flex bison gfortran))
     (outputs '("out" "metis"))
     (arguments
      `(#:make-flags (list (string-append "prefix=" %output))
@@ -3888,9 +3904,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch)
     (name "scotch-shared")
     (native-inputs
-     `(("gcc" ,gcc)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list gcc flex bison))
     (arguments
      (substitute-keyword-arguments (package-arguments scotch)
        ((#:phases scotch-shared-phases)
@@ -3946,7 +3960,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch)
     (name "pt-scotch")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))           ;Headers include MPI headers
+     (list openmpi))           ;Headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch)
        ((#:phases scotch-phases)
@@ -3970,7 +3984,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch32)
     (name "pt-scotch32")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))                     ;headers include MPI headers
+     (list openmpi))                     ;headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch32)
        ((#:phases scotch32-phases)
@@ -3993,7 +4007,7 @@ YACC = bison -pscotchyy -y -b y
   (package (inherit scotch-shared)
     (name "pt-scotch-shared")
     (propagated-inputs
-     `(("openmpi" ,openmpi)))           ;Headers include MPI headers
+     (list openmpi))           ;Headers include MPI headers
     (arguments
      (substitute-keyword-arguments (package-arguments scotch-shared)
        ((#:phases scotch-shared-phases)
@@ -4112,10 +4126,9 @@ processor cores.")
      `(#:configure-flags
        (list "--disable-static")))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list glib gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.gnu.org/software/gsegrafix/")
     (synopsis "GNOME application to create scientific and engineering plots")
     (description
@@ -4142,25 +4155,20 @@ to BMP, JPEG or PNG image formats.")
        (patches (search-patches "maxima-defsystem-mkdir.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gcl" ,gcl)
+     `(("bash" ,bash-minimal)
        ("gnuplot" ,gnuplot)                       ;for plots
+       ("sbcl" ,sbcl)
        ("sed" ,sed)
        ("tk" ,tk)))                               ;Tcl/Tk is used by 'xmaxima'
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("perl" ,perl)
-       ("python" ,python)))
+     (list texinfo perl python))
     (arguments
      `(#:configure-flags
-       (list "--enable-gcl"
-             (string-append "--with-posix-shell="
-                            (assoc-ref %build-inputs "bash")
-                            "/bin/sh")
-             (string-append "--with-wish="
-                            (assoc-ref %build-inputs "tk")
-                            "/bin/wish"
-                            (let ((v ,(package-version tk)))
-                              (string-take v (string-index-right v #\.)))))
+       ,#~(list "--enable-sbcl"
+                (string-append "--with-sbcl=" #$sbcl "/bin/sbcl")
+                (string-append "--with-posix-shell=" #$bash-minimal "/bin/sh")
+                (string-append "--with-wish=" #$tk "/bin/wish"
+                               #$(version-major+minor (package-version tk))))
        ;; By default Maxima attempts to write temporary files to
        ;; '/tmp/nix-build-maxima-*', which won't exist at run time.
        ;; Work around that.
@@ -4169,13 +4177,12 @@ to BMP, JPEG or PNG image formats.")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
+             (let* ((sed (search-input-file inputs "/bin/sed"))
                     (coreutils (assoc-ref inputs "coreutils"))
                     (dirname (string-append coreutils "/bin/dirname"))
                     (head (string-append coreutils "/bin/head"))
-                    (perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
-                    (python (string-append (assoc-ref inputs "python")
-                                           "/bin/python3")))
+                    (perl (search-input-file inputs "/bin/perl"))
+                    (python (search-input-file inputs "/bin/python3")))
                (substitute* "src/maxima.in"
                  (("sed ") (string-append sed " "))
                  (("dirname") dirname)
@@ -4198,7 +4205,7 @@ to BMP, JPEG or PNG image formats.")
              (invoke "sh" "-c"
                      (string-append
                       "./maxima-local "
-                      "--lisp=gcl "
+                      "--lisp=sbcl "
                       "--batch-string=\"run_testsuite();\" "
                       "| grep -q \"No unexpected errors found\""))))
          ;; Make sure the doc and emacs files are found in the
@@ -4209,8 +4216,7 @@ to BMP, JPEG or PNG image formats.")
              (let* ((gnuplot (assoc-ref inputs "gnuplot"))
                     (out (assoc-ref outputs "out"))
                     (datadir (string-append out "/share/maxima/" ,version))
-                    (binutils (string-append (assoc-ref inputs "binutils")
-                                             "/bin")))
+                    (binutils (dirname (search-input-file inputs "/bin/as"))))
                (with-directory-excursion out
                  (mkdir-p "share/emacs")
                  (mkdir-p "share/doc")
@@ -4259,12 +4265,12 @@ point numbers.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("maxima" ,maxima)
-       ;; Runtime support.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("gtk+" ,gtk+)
-       ("shared-mime-info" ,shared-mime-info)))
+     (list wxwidgets
+           maxima
+           ;; Runtime support.
+           adwaita-icon-theme
+           gtk+
+           shared-mime-info))
     (arguments
      `(#:tests? #f                      ; tests fail non-deterministically
        #:phases
@@ -4376,16 +4382,17 @@ parts of it.")
 (define-public openblas
   (package
     (name "openblas")
-    (version "0.3.9")
+    (version "0.3.18")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20"
-                           version "%20version.tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xianyi/OpenBLAS")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "14iz9xnrb9xiwgj84j94mc74gg0zn2vsy9fmsijxxma1n7dck4w3"))))
+         "17zdd8asylz2w71hczrz5y344p6d5ds1jn4901maw7zcp3dbk63g"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -4402,6 +4409,7 @@ parts of it.")
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "SHELL=bash"
              "MAKE_NB_JOBS=0"           ;use jobserver for submakes
+             "NO_STATIC=1"              ;avoid a 67 MiB static archive
 
              ;; This is the maximum number of threads OpenBLAS will ever use (that
              ;; is, if $OPENBLAS_NUM_THREADS is greater than that, then NUM_THREADS
@@ -4417,20 +4425,18 @@ parts of it.")
              ,@(let ((system (or (%current-target-system) (%current-system))))
                  (cond
                   ((or (string-prefix? "x86_64" system)
-                       (string-prefix? "i686" system))
-                   '("DYNAMIC_ARCH=1"))
+                       (string-prefix? "i686" system)
+                       (string-prefix? "powerpc64le" system)
+                       (string-prefix? "aarch64" system))
+                   ;; Dynamic older enables a few extra CPU architectures that
+                   ;; were released before 2010.
+                   '("DYNAMIC_ARCH=1" "DYNAMIC_OLDER=1" "TARGET=GENERIC"))
                   ;; On some of these architectures the CPU can't be detected.
-                  ((string-prefix? "powerpc64le" system)
-                   '("DYNAMIC_ARCH=1"
-                     "TARGET=GENERIC"))
                   ;; On MIPS we force the "SICORTEX" TARGET, as for the other
                   ;; two available MIPS targets special extended instructions
                   ;; for Loongson cores are used.
                   ((string-prefix? "mips" system)
                    '("TARGET=SICORTEX"))
-                  ;; On aarch64 force the generic 'armv8-a' target
-                  ((string-prefix? "aarch64" system)
-                   '("TARGET=ARMV8"))
                   ;; Failed to detect CPU.
                   ((string-prefix? "armhf" system)
                    '("TARGET=ARMV7"))
@@ -4444,8 +4450,7 @@ parts of it.")
              ;; Get libgfortran found when building in utest.
              (setenv "FEXTRALIB"
                      (string-append "-L" (assoc-ref inputs "fortran-lib")
-                                    "/lib"))
-             #t)))))
+                                    "/lib")))))))
     (inputs
      `(("fortran-lib" ,gfortran "lib")))
     (native-inputs
@@ -4483,8 +4488,7 @@ parts of it.")
                 "05ifil6jj9424sr8kmircl8k4bmxnl3y12a79vwj1kxxva5gz50g"))
               (file-name (git-file-name "blis" version))))
     (native-inputs
-     `(("python" ,python)
-       ("perl" ,perl)))
+     (list python perl))
     (build-system gnu-build-system)
     (arguments
      `(#:modules
@@ -4704,11 +4708,7 @@ Fresnel integrals, and similar related functions as well.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("tbb" ,tbb)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("metis" ,metis)))
+     (list tbb openblas gmp mpfr metis))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("m4" ,m4)))
@@ -4735,6 +4735,7 @@ packages.")
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/math-atlas/Stable/"
                                   version "/atlas" version ".tar.bz2"))
+              (patches (search-patches "atlas-gfortran-compat.patch"))
               (sha256
                (base32
                 "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
@@ -4924,7 +4925,7 @@ Version: ~a
 Cflags: -I${includedir}~%" out ,(version-prefix version 3)))))
                         #t))))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://glm.g-truc.net/")
     (synopsis "OpenGL Mathematics library")
     (description "OpenGL Mathematics (GLM) is a header-only C++ mathematics
@@ -5190,10 +5191,8 @@ A unique design feature of Trilinos is its focus on packages.")
      ;; Anyway, they are meant to be used at build time, so rather than adding
      ;; the interpreters here, any package depending on them should just add
      ;; the requisite interpreter to its native inputs.
-     `(("boost" ,boost)
-       ("hdf5" ,hdf5)
-       ("suitesparse" ,suitesparse)     ; For UMFPACK.
-       ("tbb" ,tbb)))
+     (list boost hdf5 suitesparse ; For UMFPACK.
+           tbb))
     (arguments
      `(#:build-type "DebugRelease" ; Supports only Debug, Release and DebugRelease.
        ;; The tests take too long and must be explicitly enabled with "make
@@ -5271,7 +5270,7 @@ in finite element programs.")
     (build-system cmake-build-system)
     (outputs '("out"))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("hdf5" ,hdf5)
        ;; FIXME: 'mkoctfile' fails with a linker error:
@@ -5324,8 +5323,7 @@ FLANN is written in C++ and contains bindings for C, Octave and Python.")
             "1vi8dl6rccqiq1apmpwawyg2ywx6a1ic1d3cvkf2hlwk1z11fb0f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("mpfr" ,mpfr)
-       ("readline" ,readline)))
+     (list mpfr readline))
     (home-page "http://w-calc.sourceforge.net/index.php")
     (synopsis "Flexible command-line scientific calculator")
     (description "Wcalc is a very capable calculator.  It has standard functions
@@ -5353,10 +5351,7 @@ evaluates expressions using the standard order of operations.")
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("qtbase" ,qtbase-5)
                      ("qttools" ,qttools)))
-    (inputs `(("libx11" ,libx11)
-              ("zlib" ,zlib)
-              ("libpng" ,libpng)
-              ("gsl" ,gsl)))
+    (inputs (list libx11 zlib libpng gsl))
     ;; The upstream project file ("XaoS.pro") and the Makefile it generates are
     ;; not enough for this package to install properly.  These phases fix that.
     (arguments
@@ -5410,7 +5405,7 @@ set.")
 (define-public hypre
   (package
     (name "hypre")
-    (version "2.15.1")
+    (version "2.20.0")
     (source
      (origin
        (method git-fetch)
@@ -5419,28 +5414,55 @@ set.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lvh4ybqkriyqfg2zmic6mrg1981qv1i9vry1fdgsabn81hb71g4"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Remove use of __DATE__ and __TIME__ for reproducibility;
-           ;; substitute the release date.
-           (substitute* "src/utilities/HYPRE_utilities.h"
-             (("Date Compiled: .*$")
-              "Date Compiled: Oct 19 2018 15:23:00 +0000\"\n"))
-           #t))))
+        (base32 "14iqjwg5sv1qjn7c2cfv0xxmn9rwamjrhh9hgs8fjbywcbvrkjdi"))))
     (build-system gnu-build-system)
-    (outputs '("out"                    ; 6.1 MiB of headers and libraries
-               "doc"))                  ; 4.8 MiB of documentation
+    (outputs '("out"                    ;5.3 MiB of headers and libraries
+               "doc"))                  ;12 MiB of documentation
     (native-inputs
      `(("doc++" ,doc++)
-       ("netpbm" ,netpbm)
-       ("perl" ,perl)                   ; needed to run 'ppmquant' during tests
-       ("texlive" ,(texlive-union (list texlive-xypic
-                                        texlive-cm
-                                        texlive-latex-hyperref
-                                        texlive-bibtex)))
-       ("ghostscript" ,ghostscript)))
+       ("doxygen" ,doxygen)
+       ("python" ,python)
+       ("python-breathe" ,python-breathe)
+       ("python-sphinx" ,python-sphinx)
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                             texlive-amsfonts
+                                             texlive-bibtex
+                                             texlive-caption
+                                             texlive-cm
+                                             texlive-etoolbox
+                                             texlive-jknappen
+                                             texlive-sectsty
+                                             texlive-tex-gyre
+                                             texlive-wasy
+                                             texlive-xcolor
+                                             texlive-xypic
+                                             texlive-generic-listofitems
+                                             texlive-generic-ulem
+                                             texlive-latex-capt-of
+                                             texlive-latex-cmap
+                                             texlive-latex-colortbl
+                                             texlive-latex-etoc
+                                             texlive-latex-fancyhdr
+                                             texlive-latex-fancyvrb
+                                             texlive-latex-float
+                                             texlive-latex-fncychap
+                                             texlive-latex-framed
+                                             texlive-latex-geometry
+                                             texlive-latex-hanging
+                                             texlive-hyperref
+                                             texlive-latex-multirow
+                                             texlive-latex-natbib
+                                             texlive-latex-needspace
+                                             texlive-latex-newunicodechar
+                                             texlive-latex-parskip
+                                             texlive-latex-stackengine
+                                             texlive-latex-tabulary
+                                             texlive-latex-titlesec
+                                             texlive-latex-tocloft
+                                             texlive-latex-upquote
+                                             texlive-latex-varwidth
+                                             texlive-wasysym
+                                             texlive-latex-wrapfig)))))
     (inputs
      `(("blas" ,openblas)
        ("lapack" ,lapack)))
@@ -5456,12 +5478,6 @@ set.")
                            "--with-blas")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'set-HOME
-           (lambda _
-             ;; FIXME: texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
-             #t))
          (add-before 'configure 'chdir-src
            (lambda _ (chdir "src")))
          (replace 'configure
@@ -5476,7 +5492,7 @@ set.")
                                           configure-flags)))))))
          (add-after 'build 'build-docs
            (lambda _
-             (invoke "make" "-Cdocs" "pdf" "html")))
+             (invoke "make" "-C" "docs")))
          (replace 'check
            (lambda _
              (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib"))
@@ -5487,8 +5503,7 @@ set.")
                            (when (positive? size)
                              (error (format #f "~a size ~d; error indication~%"
                                             filename size)))))
-                       (find-files "test" ".*\\.err$"))
-             #t))
+                       (find-files "test" ".*\\.err$"))))
          (add-after 'install 'install-docs
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Custom install because docs/Makefile doesn't honor ${docdir}.
@@ -5497,10 +5512,9 @@ set.")
                (with-directory-excursion "docs"
                  (for-each (lambda (base)
                              (install-file (string-append base ".pdf") docdir)
-                             (copy-recursively base docdir)) ; html docs
-                           '("HYPRE_usr_manual"
-                             "HYPRE_ref_manual")))
-               #t))))))
+                             (copy-recursively (string-append base "-html")
+                                               (string-append docdir "/" base)))
+                           '("usr-manual" "ref-manual")))))))))
     (home-page "https://computing.llnl.gov/projects\
 /hypre-scalable-linear-solvers-multigrid-methods")
     (synopsis "Library of solvers and preconditioners for linear equations")
@@ -5547,8 +5561,7 @@ structured and unstructured grid problems.")))
          "0vr8c1mz1k6mz0sgh6n3scl5c3a71iqmy5fnydrgq504icj4vym4"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("hdf5" ,hdf5-1.8)))
+     (list zlib hdf5-1.8))
     (home-page "http://matio.sourceforge.net/")
     (synopsis "Library for reading and writing MAT files")
     (description "Matio is a library for reading and writing MAT files.  It
@@ -5638,7 +5651,7 @@ instruction sets.  Thus, an application written with Vc can be compiled for:
            "1rllzcfwc042c336mhq262a8ha90x6afq30kvk60r7i4761j4yjm"))))
       (build-system gnu-build-system)
       (inputs
-       `(("openlibm" ,openlibm)))
+       (list openlibm))
       (arguments
        `(#:tests? #f ; no tests
          #:phases
@@ -5700,9 +5713,8 @@ Longest Commons Subsequence of a set of strings.")
              (invoke "./configure"
                      (string-append "--prefix="
                                     (assoc-ref outputs "out"))))))))
-    (inputs `(("scm" ,scm)))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (inputs (list scm))
+    (native-inputs (list unzip texinfo))
     (synopsis "Symbolic mathematics system")
     (description "GNU JACAL is an interactive symbolic mathematics program based on
 Scheme.  It manipulate and simplify a range of mathematical expressions such
@@ -5830,9 +5842,9 @@ theories} (SMT) solver.  It provides a C/C++ API, as well as Python bindings.")
        ("ocaml" ,ocaml)
        ("ocaml-findlib" ,ocaml-findlib)))
     (propagated-inputs
-     `(("ocaml-zarith" ,ocaml-zarith)))
+     (list ocaml-zarith))
     (inputs
-     `(("z3" ,z3)))))
+     (list z3))))
 
 (define-public elpa
   (package
@@ -5940,7 +5952,7 @@ symmetric matrices.")
     (build-system cmake-build-system)
     (home-page "https://github.com/elemental/Elemental")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (inputs
      `(("blas" ,openblas)
        ("gfortran:lib" ,gfortran "lib")
@@ -5993,10 +6005,7 @@ reduction.")
                (base32
                 "1xgx3cd57vc7gbjic24j1q2za6j3ybz6nk4afvvpbwsf33xnlf4v"))))
     (inputs
-     `(("boost" ,boost)
-       ("glu" ,glu)
-       ("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list boost glu mesa qtbase-5))
     (build-system cmake-build-system)
     (synopsis "Toolset for the mCRL2 formal specification language")
     (description
@@ -6014,7 +6023,7 @@ analysed.")
     (inherit mcrl2)
     (name "mcrl2-minimal")
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (arguments
      '(#:configure-flags '("-DMCRL2_ENABLE_GUI_TOOLS=OFF")))))
 
@@ -6111,7 +6120,8 @@ and comparisons are supported.")
        ("blas" ,openblas)
        ("suitesparse" ,suitesparse)))   ;TODO: Add hypre
     (arguments
-     `(#:configure-flags `("-DEXAMPLES_ENABLE_C:BOOL=ON"
+     `(#:configure-flags `("-DCMAKE_C_FLAGS=-O2 -g -fcommon"
+                           "-DEXAMPLES_ENABLE_C:BOOL=ON"
                            "-DEXAMPLES_ENABLE_CXX:BOOL=ON"
                            "-DEXAMPLES_ENABLE_F77:BOOL=ON"
                            "-DEXAMPLES_ENABLE_F90:BOOL=ON"
@@ -6131,6 +6141,9 @@ and comparisons are supported.")
     (description "SUNDIALS is a family of software packages implemented with
 the goal of providing robust time integrators and nonlinear solvers that can
 easily be incorporated into existing simulation codes.")
+    (properties
+     '((release-monitoring-url
+        . "https://computing.llnl.gov/projects/sundials/sundials-software")))
     (license license:bsd-3)))
 
 (define-public sundials-openmpi
@@ -6174,8 +6187,8 @@ easily be incorporated into existing simulation codes.")
         (base32
          "0nx4sqhmi126m14myzm7syv2053harav9snl0a247wnkcgs5rxrv"))))
     (inputs
-     `(("lapack" ,lapack)
-       ,@(package-inputs sundials)))
+     (modify-inputs (package-inputs sundials)
+       (prepend lapack)))
     (arguments
      (substitute-keyword-arguments (package-arguments sundials)
        ((#:configure-flags flags '())
@@ -6253,14 +6266,9 @@ linear algebra primitives specifically targeting graph analytics.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("gmp" ,gmp)
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("superlu" ,superlu)))
+     (list gmp metis openblas python superlu))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6291,14 +6299,11 @@ Differences} (FD).")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("python" ,python)))
+     (list dune-common
+           ;; Optional
+           openblas gmp python))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6333,10 +6338,9 @@ This package contains the basic DUNE geometry classes.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)))
+     (list dune-common))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6368,17 +6372,16 @@ This package contains the DUNE UG grid classes.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("gmp" ,gmp)
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)))
+     (list dune-common
+           dune-geometry
+           gmp
+           metis
+           openblas
+           python))
     (propagated-inputs
-     `(("dune-uggrid" ,dune-uggrid)))
+     (list dune-uggrid))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6424,17 +6427,16 @@ This package contains the basic DUNE grid classes.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("metis" ,metis)
-       ("suitesparse" ,suitesparse)
-       ("superlu" ,superlu)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)
-       ("python" ,python)))
+     (list dune-common
+           ;; Optional
+           metis
+           suitesparse
+           superlu
+           openblas
+           gmp
+           python))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "DUNE, the Distributed and Unified Numerics Environment is a
@@ -6482,15 +6484,14 @@ aggregation-based algebraic multigrid.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ;; Optional
-       ("metis" ,metis)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-geometry
+           ;; Optional
+           metis
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment") ; TODO
     (description "This DUNE module provides interface and implementation for
@@ -6535,19 +6536,18 @@ assemble global function spaces on finite-element grids.")
                      (string-append (assoc-ref inputs "dune-grid") "/share"))
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ;; Optional
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)
-       ("zlib" ,zlib)))
+     (list dune-common
+           dune-geometry
+           dune-grid
+           ;; Optional
+           metis
+           openblas
+           python
+           superlu
+           gmp
+           zlib))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "ALUGrid is an adaptive, loadbalancing, unstructured
@@ -6577,16 +6577,15 @@ cubes.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ;; Optional
-       ("metis" ,metis)
-       ("openblas" ,openblas)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-geometry
+           dune-grid
+           ;; Optional
+           metis
+           openblas
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "http://numerik.mi.fu-berlin.de/dune-subgrid/index.php")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "The dune-subgrid module marks elements of
@@ -6617,16 +6616,15 @@ provides the full grid interface including adaptive mesh refinement.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("python" ,python)
-       ("metis" ,metis)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           ;; Optional
+           openblas
+           python
+           metis
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "TypeTree is a template library for constructing and
@@ -6662,20 +6660,19 @@ operating on statically typed trees of objects.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "build_tests" make-flags))))))
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-istl" ,dune-istl)
-       ("dune-localfunctions" ,dune-localfunctions)
-       ("dune-grid" ,dune-grid)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-typetree" ,dune-typetree)
-       ("openblas" ,openblas)
-       ("metis" ,metis)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-istl
+           dune-localfunctions
+           dune-grid
+           dune-geometry
+           dune-typetree
+           openblas
+           metis
+           python
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Distributed and Unified Numerics Environment")
     (description "The dune-functions module provides an abstraction layer for
@@ -6701,23 +6698,22 @@ implemented as callable objects, and bases of finite element spaces.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f)) ; XXX: the tests cannot be compiled
     (inputs
-     `(("dune-common" ,dune-common)
-       ("dune-istl" ,dune-istl)
-       ("dune-localfunctions" ,dune-localfunctions)
-       ("dune-geometry" ,dune-geometry)
-       ("dune-grid" ,dune-grid)
-       ("dune-typetree" ,dune-typetree)
-       ("dune-functions" ,dune-functions)
-       ;; Optional
-       ("openblas" ,openblas)
-       ("eigen" ,eigen)
-       ("metis" ,metis)
-       ("python" ,python)
-       ("superlu" ,superlu)
-       ("gmp" ,gmp)))
+     (list dune-common
+           dune-istl
+           dune-localfunctions
+           dune-geometry
+           dune-grid
+           dune-typetree
+           dune-functions
+           ;; Optional
+           openblas
+           eigen
+           metis
+           python
+           superlu
+           gmp))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)))
+     (list gfortran pkg-config))
     (home-page "https://dune-project.org/")
     (synopsis "Differential equations solver toolbox")
     (description "PDELab is a partial differential equations solver toolbox
@@ -6791,7 +6787,7 @@ built on top of DUNE, the Distributed and Unified Numerics Environment.")
         (base32 "0h4xj6pyyac79ka5ibqjilfa3s9j3yxnzgpwc57b54kfh2bj3447"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python2" ,python-2)))
+     (list python-2))
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
@@ -6882,7 +6878,7 @@ management via the GIMPS project's Primenet server.")
                          (append '("formats.txt" "README" "schreier.txt")
                                  (find-files "." "\\.pdf$")))))))))
     (inputs
-     `(("gmp" ,gmp)))                   ;for sumlines
+     (list gmp))                   ;for sumlines
     (home-page "https://pallini.di.uniroma1.it/")
     (synopsis "Library for graph automorphisms")
     (description "@code{nauty} (No AUTomorphisms, Yes?) is a set of
@@ -6913,10 +6909,9 @@ compiled against the nauty library.")
          "1j5aji1g2vmdvc0gqz45n2ll2l2f6czca04wiyfl5g3sm3a6vhvb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)))
+     (list m4))
     (inputs
-     `(("glpk" ,glpk)
-       ("gmp" ,gmp)))
+     (list glpk gmp))
     (home-page "https://www.bugseng.com/parma-polyhedra-library")
     (synopsis
      "Parma Polyhedra Library for computations with polyhedra")
@@ -6952,8 +6947,8 @@ functions.")
        (base32
         "0vh7cd1915bjqzkdp3sk25ngy8cq624mkh8c53c5bnzk357kb0fk"))))
     (build-system cmake-build-system)
-    (inputs `(("qtbase" ,qtbase-5)))
-    (native-inputs `(("qttools" ,qttools)))
+    (inputs (list qtbase-5))
+    (native-inputs (list qttools))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7035,14 +7030,14 @@ researchers and developers alike to get started on SAT.")
        ("doxygen" ,doxygen)
        ("file" ,file)))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("libxml2" ,libxml2)
-       ("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("gnuplot" ,gnuplot)
-       ("readline" ,readline)
-       ("libiconv" ,libiconv)))
+     (list gmp
+           mpfr
+           libxml2
+           curl
+           icu4c
+           gnuplot
+           readline
+           libiconv))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7078,19 +7073,19 @@ cli.")
         (base32 "1nrx7gp6f1yalbdda1gb97azhbr4xclq2xf08vvbvsk8jfd6fd2v"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)
-       ("file" ,file)))
+     (list pkg-config
+           intltool
+           automake
+           autoconf
+           libtool
+           file))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("libqalculate" ,libqalculate)
-       ("libxml2" ,libxml2)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)))
+     (list gmp
+           mpfr
+           libqalculate
+           libxml2
+           glib
+           gtk+))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7155,21 +7150,11 @@ numeric differences and differences in numeric formats.")
                 "0pfsiddnk26f384wbazfpgzh1n1ibf3xq101q74mxvczi7z0a791"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("coq" ,coq)
-       ("ocaml" ,ocaml)
-       ("which" ,which)))
+     (list autoconf automake coq ocaml which))
     (propagated-inputs
-     `(("camlzip" ,camlzip)
-       ("ocaml-graph" ,ocaml-graph)
-       ("ocaml-menhir" ,ocaml-menhir)
-       ("ocaml-num" ,ocaml-num)
-       ("ocaml-zarith" ,ocaml-zarith)))
+     (list camlzip ocaml-graph ocaml-menhir ocaml-num ocaml-zarith))
     (inputs
-     `(("coq-flocq" ,coq-flocq)
-       ("emacs-minimal" ,emacs-minimal)
-       ("zlib" ,zlib)))
+     (list coq-flocq emacs-minimal zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7225,18 +7210,17 @@ of C, Java, or Ada programs.")
        (modify-phases %standard-phases
          (add-before 'configure 'export-shell
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
-                                                   "/bin/sh"))
-             #t)))))
+             (setenv "CONFIG_SHELL"
+                     (search-input-file inputs "/bin/sh")))))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (propagated-inputs
-     `(("ocaml-biniou" ,ocaml-biniou)
-       ("ocaml-easy-format" ,ocaml-easy-format)
-       ("ocaml-graph" ,ocaml-graph)
-       ("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-zarith" ,ocaml-zarith)
-       ("why3" ,why3)))
+     (list ocaml-biniou
+           ocaml-easy-format
+           ocaml-graph
+           ocaml-yojson
+           ocaml-zarith
+           why3))
     (native-search-paths
      (list (search-path-specification
             (variable "FRAMAC_SHARE")
@@ -7280,8 +7264,7 @@ projects up to the certification of critical software.")
              (invoke "make" "-j" (number->string (parallel-job-count))
                      "blitz-doc"))))))
     (native-inputs
-     `(("python" ,python)
-       ("texinfo" ,texinfo)))
+     (list python texinfo))
     (synopsis "C++ template class library for multidimensional arrays")
     (description "Blitz++ is a C++ template class library that provides
 high-performance multidimensional array containers for scientific computing.")
@@ -7309,8 +7292,7 @@ high-performance multidimensional array containers for scientific computing.")
                 (patches (search-patches "fxdiv-system-libraries.patch"))))
       (build-system cmake-build-system)
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list googletest googlebenchmark))
       (synopsis
        "C++ library for division via fixed-point multiplication by inverse")
       (description
@@ -7362,11 +7344,9 @@ when an application performs repeated divisions by the same divisor.")
                                                                    file))))
                                     (find-files include "\\.py$"))))))))
       (native-inputs
-       `(("python-wrapper" ,python-wrapper)))
+       (list python-wrapper))
       (inputs
-       `(("psimd" ,psimd)
-         ("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list psimd googletest googlebenchmark))
       (synopsis "C++ library for half-precision floating point formats")
       (description
        "This header-only C++ library implements conversion to and from
diff --git a/gnu/packages/matrix.scm b/gnu/packages/matrix.scm
index 5300185b67..8cdfa38b32 100644
--- a/gnu/packages/matrix.scm
+++ b/gnu/packages/matrix.scm
@@ -49,11 +49,9 @@
          "1mgjd0ymf9mvqjkvgx3xjhxap7rzdmpa21wfy0cxbw2xcswcrqyw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-pytest-runner python-responses))
     (home-page
      "https://github.com/matrix-org/matrix-python-sdk")
     (synopsis "Client-Server SDK for Matrix")
@@ -76,9 +74,7 @@
      ;; tests require synapse, creating a circular dependency.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)
-       ("python-ldap3" ,python-ldap3)
-       ("python-service-identity" ,python-service-identity)))
+     (list python-twisted python-ldap3 python-service-identity))
     (home-page "https://github.com/matrix-org/matrix-synapse-ldap3")
     (synopsis "LDAP3 auth provider for Synapse")
     (description
@@ -100,51 +96,50 @@ an LDAP server.")
     (build-system python-build-system)
     ;; TODO Run tests with ‘PYTHONPATH=. trial3 tests’.
     (propagated-inputs
-     `(("python-simplejson" ,python-simplejson) ; not attested but required
-       ;; requirements (synapse/python_dependencies.py)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-frozendict" ,python-frozendict)
-       ("python-unpaddedbase64" ,python-unpaddedbase64)
-       ("python-canonicaljson" ,python-canonicaljson)
-       ("python-signedjson" ,python-signedjson)
-       ("python-pynacl" ,python-pynacl)
-       ("python-idna" ,python-idna)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)
-       ("python-treq" ,python-treq)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-daemonize" ,python-daemonize)
-       ("python-bcrypt" ,python-bcrypt)
-       ("python-pillow" ,python-pillow)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-pymacaroons" ,python-pymacaroons)
-       ("python-msgpack" ,python-msgpack)
-       ("python-phonenumbers" ,python-phonenumbers)
-       ("python-six" ,python-six)
-       ("python-prometheus-client" ,python-prometheus-client)
-       ("python-attrs" ,python-attrs)
-       ("python-netaddr" ,python-netaddr)
-       ("python-jinja2" ,python-jinja2)
-       ("python-bleach" ,python-bleach)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ;; conditional requirements (synapse/python_dependencies.py)
-       ;;("python-hiredis" ,python-hiredis)
-       ("python-matrix-synapse-ldap3" ,python-matrix-synapse-ldap3)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-jinja2" ,python-jinja2)
-       ("python-txacme" ,python-txacme)
-       ("python-pysaml2" ,python-pysaml2)
-       ("python-lxml" ,python-lxml)
-       ("python-packaging" ,python-packaging)
-       ;; sentry-sdk, jaeger-client, and opentracing could be included, but
-       ;; all are monitoring aids and not essential.
-       ("python-pyjwt" ,python-pyjwt)))
+     (list python-simplejson ; not attested but required
+           ;; requirements (synapse/python_dependencies.py)
+           python-jsonschema
+           python-frozendict
+           python-unpaddedbase64
+           python-canonicaljson
+           python-signedjson
+           python-pynacl
+           python-idna
+           python-service-identity
+           python-twisted
+           python-treq
+           python-pyopenssl
+           python-pyyaml
+           python-pyasn1
+           python-pyasn1-modules
+           python-daemonize
+           python-bcrypt
+           python-pillow
+           python-sortedcontainers
+           python-pymacaroons
+           python-msgpack
+           python-phonenumbers
+           python-six
+           python-prometheus-client
+           python-attrs
+           python-netaddr
+           python-jinja2
+           python-bleach
+           python-typing-extensions
+           ;; conditional requirements (synapse/python_dependencies.py)
+           ;;("python-hiredis" ,python-hiredis)
+           python-matrix-synapse-ldap3
+           python-psycopg2
+           python-jinja2
+           python-txacme
+           python-pysaml2
+           python-lxml
+           python-packaging
+           ;; sentry-sdk, jaeger-client, and opentracing could be included, but
+           ;; all are monitoring aids and not essential.
+           python-pyjwt))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-parameterized" ,python-parameterized)))
+     (list python-mock python-parameterized))
     (home-page "https://github.com/matrix-org/synapse")
     (synopsis "Matrix reference homeserver")
     (description "Synapse is a reference \"homeserver\" implementation of
@@ -207,20 +202,20 @@ homeserver and generally help bootstrap the ecosystem.")
             (base32
              "152prkndk53pfxm4in4xak4hwzyaxlbp6wv2zbk2xpzgyy9bvn3s"))))))
     (propagated-inputs
-     `(("python-aiofiles" ,python-aiofiles)
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-aiohttp-socks" ,python-aiohttp-socks)
-       ("python-atomicwrites" ,python-atomicwrites-1.4)
-       ("python-cachetools" ,python-cachetools)
-       ("python-future" ,python-future)
-       ("python-h11" ,python-h11)
-       ("python-h2" ,python-h2)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-logbook" ,python-logbook)
-       ("python-olm" ,python-olm)
-       ("python-peewee" ,python-peewee)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-unpaddedbase64" ,python-unpaddedbase64)))
+     (list python-aiofiles
+           python-aiohttp
+           python-aiohttp-socks
+           python-atomicwrites-1.4
+           python-cachetools
+           python-future
+           python-h11
+           python-h2
+           python-jsonschema
+           python-logbook
+           python-olm
+           python-peewee
+           python-pycryptodome
+           python-unpaddedbase64))
     (home-page "https://github.com/poljar/matrix-nio")
     (synopsis
      "Python Matrix client library, designed according to sans I/O principles")
@@ -261,22 +256,20 @@ fledged batteries-included asyncio layer using aiohttp.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "tests")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-faker" ,python-faker)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-aioresponses" ,python-aioresponses)))
+     (list python-pytest python-faker python-pytest-aiohttp
+           python-aioresponses))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-appdirs" ,python-appdirs)
-       ("python-attrs" ,python-attrs)
-       ("python-cachetools" ,python-cachetools)
-       ("python-click" ,python-click)
-       ("python-janus" ,python-janus)
-       ("python-keyring" ,python-keyring)
-       ("python-logbook" ,python-logbook)
-       ("python-matrix-nio" ,python-matrix-nio)
-       ("python-peewee" ,python-peewee)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)))
+     (list python-aiohttp
+           python-appdirs
+           python-attrs
+           python-cachetools
+           python-click
+           python-janus
+           python-keyring
+           python-logbook
+           python-matrix-nio
+           python-peewee
+           python-prompt-toolkit))
     (home-page "https://github.com/matrix-org/pantalaimon")
     (synopsis "Matrix proxy daemon that adds E2E encryption capabilities")
     (description
diff --git a/gnu/packages/maven-parent-pom.scm b/gnu/packages/maven-parent-pom.scm
index 84af3a1c53..a47fbfa8c1 100644
--- a/gnu/packages/maven-parent-pom.scm
+++ b/gnu/packages/maven-parent-pom.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2020, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
@@ -321,14 +322,15 @@ other projects as their parent pom.")
                  (base32
                   "0yl2hbwz2kn1hll1i00ddzn8f89bfdcjwdifz0pj2j15k1gjch7v"))))
       (arguments
-       `(#:tests? #f
+       (list
+         #:tests? #f
          #:phases
-         (modify-phases %standard-phases
-           (delete 'unpack)
-           (delete 'configure)
-           (delete 'build)
-           (replace 'install
-             (install-pom-file (assoc-ref %build-inputs "source")))))))))
+         #~(modify-phases %standard-phases
+             (delete 'unpack)
+             (delete 'configure)
+             (delete 'build)
+             (replace 'install
+               (install-pom-file #$(package-source this-package)))))))))
 
 (define* (make-plexus-parent-pom version hash #:optional parent)
   (hidden-package
@@ -495,7 +497,7 @@ tool.  This package contains the Maven parent POM.")
            (replace 'install
              (install-pom-file "pom.xml")))))
       (propagated-inputs
-       `(("maven-parent-pom" ,maven-parent-pom-22)))
+       (list maven-parent-pom-22))
       (home-page "https://github.com/apache/maven-plugins")
       (synopsis "Maven parent pom for maven plugins projects")
       (description "This package contains the parent pom for maven plugins.")
@@ -516,14 +518,15 @@ tool.  This package contains the Maven parent POM.")
                   "11skhrjgrrs6z5rw1w39ap1pzhrc99g0czip10kz7wsavg746ibm"))))
       (build-system ant-build-system)
       (arguments
-       `(#:tests? #f
+       (list
+         #:tests? #f
          #:phases
-         (modify-phases %standard-phases
-           (delete 'unpack)
-           (delete 'build)
-           (delete 'configure)
-           (replace 'install
-             (install-pom-file (assoc-ref %build-inputs "source"))))))
+         #~(modify-phases %standard-phases
+             (delete 'unpack)
+             (delete 'build)
+             (delete 'configure)
+             (replace 'install
+               (install-pom-file #$(package-source this-package))))))
       (propagated-inputs
        `(("maven-parent-pom-27" ,maven-parent-pom-27)))
       (home-page "https://apache.org/maven")
diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm
index f7cb168f47..479746639a 100644
--- a/gnu/packages/maven.scm
+++ b/gnu/packages/maven.scm
@@ -65,7 +65,7 @@
        ("java-mockito-1" ,java-mockito-1)
        ("java-objenesis" ,java-objenesis)))
     (propagated-inputs
-     `(("maven-resolver-parent-pom" ,maven-resolver-parent-pom)))
+     (list maven-resolver-parent-pom))
     (home-page "https://github.com/apache/maven-resolver")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -103,7 +103,7 @@
          (replace 'install
            (install-from-pom "maven-resolver-spi/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)))
+     (list maven-resolver-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -118,8 +118,7 @@ for repository system implementations and repository connectors.")))
        #:test-dir "maven-resolver-test-util/src/test"
        #:jdk ,icedtea-8))
     (inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)))
+     (list maven-resolver-api maven-resolver-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -137,11 +136,9 @@ ease testing of the repository system.")))
          (replace 'install
            (install-from-pom "maven-resolver-util/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)))
+     (list maven-resolver-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))
+     (list java-junit java-hamcrest-core maven-resolver-test-util))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -167,14 +164,10 @@ ease usage of the repository system.")))
          (replace 'install
            (install-from-pom "maven-resolver-connector-basic/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list maven-resolver-api maven-resolver-spi maven-resolver-util
+           java-slf4j-api))
     (native-inputs
-     `(("java-javax-inject" ,java-javax-inject)
-       ("java-junit" ,java-junit)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))
+     (list java-javax-inject java-junit maven-resolver-test-util))
     (synopsis "Maven repository connector implementation")
     (description "This package contains a repository connector implementation
 for repositories using URI-based layouts.")))
@@ -224,17 +217,16 @@ for repositories using URI-based layouts.")))
          (replace 'install
            (install-from-pom "maven-resolver-impl/pom.xml")))))
     (propagated-inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice" ,java-guice)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("maven-resolver-parent-pom" ,maven-resolver-parent-pom)))
+     (list maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-guice
+           java-slf4j-api
+           maven-resolver-parent-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)))))
+     (list java-junit maven-resolver-test-util))))
 
 (define-public maven-resolver-transport-wagon
   (package
@@ -308,14 +300,14 @@ for repositories using URI-based layouts.")))
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("maven-resolver-test-util" ,maven-resolver-test-util)
-       ("java-guava" ,java-guava)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-guice" ,java-guice)))
+     (list java-junit
+           java-hamcrest-core
+           maven-resolver-test-util
+           java-guava
+           java-cglib
+           java-asm
+           java-aopalliance
+           java-guice))
     (synopsis "Transport implementation for Maven")
     (description "This package contains a transport implementation based on
 Maven Wagon, for use in Maven.")))
@@ -347,8 +339,8 @@ Maven Wagon, for use in Maven.")))
          (add-before 'install 'install-parent (install-pom-file "pom.xml"))
          (replace 'install (install-from-pom "aether-api/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-forge-parent-pom" ,java-sonatype-forge-parent-pom-6)))
-    (native-inputs `(("java-junit" ,java-junit)))
+     (list java-sonatype-forge-parent-pom-6))
+    (native-inputs (list java-junit))
     (home-page "https://github.com/sonatype/sonatype-aether")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -366,7 +358,7 @@ Maven Wagon, for use in Maven.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-spi/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)))
+     (list java-sonatype-aether-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -380,8 +372,7 @@ for repository system implementations and repository connectors.")))
        #:source-dir "aether-test-util/src/main/java"
        #:test-dir "aether-test-util/src/test"))
     (inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-spi" ,java-sonatype-aether-spi)))
+     (list java-sonatype-aether-api java-sonatype-aether-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -398,10 +389,9 @@ ease testing of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)))
+     (list java-sonatype-aether-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-sonatype-aether-test-util" ,java-sonatype-aether-test-util)))
+     (list java-junit java-sonatype-aether-test-util))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -437,16 +427,15 @@ ease usage of the repository system.")))
              #t))
          (replace 'install (install-from-pom "aether-impl/pom.xml")))))
     (propagated-inputs
-     `(("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-spi" ,java-sonatype-aether-spi)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-sonatype-aether-api
+           java-sonatype-aether-spi
+           java-sonatype-aether-util
+           java-plexus-component-annotations
+           java-plexus-container-default
+           java-slf4j-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-sonatype-aether-test-util" ,java-sonatype-aether-test-util)))))
+     (list java-junit java-plexus-component-metadata
+           java-sonatype-aether-test-util))))
 
 ;; Again, this old version is required by some maven plugins
 (define-public java-eclipse-aether-api
@@ -471,7 +460,7 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (add-before 'install 'install-parent (install-pom-file "pom.xml"))
          (replace 'install (install-from-pom "aether-api/pom.xml")))))
-    (native-inputs `(("java-junit" ,java-junit)))
+    (native-inputs (list java-junit))
     (home-page "https://github.com/sonatype/sonatype-aether")
     (synopsis "Maven repository system API")
     (description "This package contains the API for the maven repository system.")
@@ -489,7 +478,7 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-spi/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)))
+     (list java-eclipse-aether-api))
     (synopsis "Maven repository system SPI")
     (description "This package contains the service provider interface (SPI)
 for repository system implementations and repository connectors.")))
@@ -506,8 +495,7 @@ for repository system implementations and repository connectors.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-spi" ,java-eclipse-aether-spi)))
+     (list java-eclipse-aether-api java-eclipse-aether-spi))
     (synopsis "Utility classes for testing the maven repository system")
     (description "This package contains a collection of utility classes to
 ease testing of the repository system.")))
@@ -524,10 +512,9 @@ ease testing of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-util/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)))
+     (list java-eclipse-aether-api))
     (native-inputs
-     `(("java-eclipse-aether-test-util" ,java-eclipse-aether-test-util)
-       ("java-junit" ,java-junit)))
+     (list java-eclipse-aether-test-util java-junit))
     (synopsis "Utility classes for the maven repository system")
     (description "This package contains a collection of utility classes to
 ease usage of the repository system.")))
@@ -544,16 +531,15 @@ ease usage of the repository system.")))
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "aether-impl/pom.xml")))))
     (propagated-inputs
-     `(("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-spi" ,java-eclipse-aether-spi)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-guice" ,java-guice)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-eclipse-aether-api
+           java-eclipse-aether-spi
+           java-eclipse-aether-util
+           java-javax-inject
+           java-eclipse-sisu-inject
+           java-guice
+           java-slf4j-api))
     (native-inputs
-     `(("java-eclipse-aether-test-util" ,java-eclipse-aether-test-util)
-       ("java-junit" ,java-junit)))))
+     (list java-eclipse-aether-test-util java-junit))))
 
 (define-public maven-shared-utils
   (package
@@ -591,10 +577,7 @@ ease usage of the repository system.")))
        ("java-plexus-container-default" ,java-plexus-container-default)
        ("maven-parent-pom-30" ,maven-parent-pom-30)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-commons-lang3" ,java-commons-lang3)))
+     (list unzip java-junit java-hamcrest-core java-commons-lang3))
     (home-page "https://maven.apache.org/shared/maven-shared-utils/")
     (synopsis "Plexus-util replacement for maven")
     (description "This project aims to be a functional replacement for
@@ -622,10 +605,9 @@ replacement with improvements.")
          (replace 'install
            (install-from-pom "maven-plugin-annotations/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-tools-parent-pom" ,maven-plugin-tools-parent-pom)))
+     (list maven-artifact maven-plugin-tools-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/plugin-tools/maven-plugin-annotations/")
     (synopsis "Java 5 annotations to use in Mojos")
     (description "This package contains Java 5 annotations for use in Mojos.")
@@ -669,9 +651,7 @@ replacement with improvements.")
      `(("java-plexus-utils" ,java-plexus-utils)
        ("maven-wagon-parent-pom" ,maven-wagon-parent-pom)))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list unzip java-junit java-easymock))
     (home-page "https://maven.apache.org/wagon")
     (synopsis "Transport abstraction for Maven")
     (description "Maven Wagon is a transport abstraction that is used in Maven's
@@ -752,8 +732,7 @@ classes used in multiple maven-wagon components.")))
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -836,12 +815,12 @@ Test Compatibility Kit.")))
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-commons-io" ,java-commons-io)
-       ("java-jsoup" ,java-jsoup)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           java-commons-io
+           java-jsoup
+           maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -908,12 +887,12 @@ wagon providers supporting HTTP.")))
                (("src/test") "wagon-providers/wagon-http/src/test"))
              #t)))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("maven-wagon-http-shared" ,maven-wagon-http-shared)
-       ("maven-wagon-tck-http" ,maven-wagon-tck-http)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)))
+     (list java-plexus-utils
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           maven-wagon-http-shared
+           maven-wagon-tck-http
+           maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
        ("java-plexus-component-metadata" ,java-plexus-component-metadata)
@@ -1062,11 +1041,9 @@ tool.  This package contains the Maven pom file, used by all maven components.")
          (replace 'install
            (install-from-pom "maven-artifact/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils java-commons-lang3 maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the Maven Artifact classes, providing the
 @code{Artifact} interface, with its @code{DefaultArtifact} implementation.  The
@@ -1097,29 +1074,27 @@ and compares versions:")))
              #t))
          (replace 'install (install-from-pom "maven-model/pom.xml")))))
     (propagated-inputs
-     `(("java-commons-lang3" ,java-commons-lang3)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-commons-lang3 java-plexus-utils maven-pom))
     (native-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ;; for modello:
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ;; modello plugins:
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)
-       ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)
-       ;; for tests
-       ("java-junit" ,java-junit)))
+     (list java-modello-core
+           ;; for modello:
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-guice
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-classworlds
+           java-guava
+           java-geronimo-xbean-reflect
+           java-sisu-build-api
+           ;; modello plugins:
+           java-modello-plugins-java
+           java-modello-plugins-xml
+           java-modello-plugins-xpp3
+           ;; for tests
+           java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the model for Maven @dfn{POM} (Project Object Model),
 so really just plain Java objects.")))
@@ -1145,9 +1120,9 @@ so really just plain Java objects.")))
              #t))
          (replace 'install (install-from-pom "maven-builder-support/pom.xml")))))
     (propagated-inputs
-     `(("maven-pom" ,maven-pom)))
+     (list maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains a support library for descriptor builders (model,
 setting, toolchains)")))
@@ -1175,28 +1150,27 @@ setting, toolchains)")))
              #t))
          (replace 'install (install-from-pom "maven-settings/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils maven-pom))
     (native-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ;; for modello:
-       ;("container" ,java-plexus-container-default)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ;; modello plugins:
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)
-       ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)))
+     (list java-modello-core
+           ;; for modello:
+           ;("container" ,java-plexus-container-default)
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-guice
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-classworlds
+           java-plexus-utils
+           java-guava
+           java-geronimo-xbean-reflect
+           java-sisu-build-api
+           ;; modello plugins:
+           java-modello-plugins-java
+           java-modello-plugins-xml
+           java-modello-plugins-xpp3))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains strictly the model for Maven settings, that is
 simply plain java objects.")))
@@ -1221,15 +1195,14 @@ simply plain java objects.")))
              #t))
          (replace 'install (install-from-pom "maven-settings-builder/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-settings" ,maven-settings)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils
+           java-plexus-interpolation
+           java-plexus-sec-dispatcher
+           maven-builder-support
+           maven-settings
+           maven-pom))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-junit java-plexus-component-annotations))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the effective model builder, with profile activation,
 inheritance, interpolation, @dots{}")))
@@ -1265,12 +1238,12 @@ inheritance, interpolation, @dots{}")))
          (replace 'install
            (install-from-pom "maven-model-builder/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-interpolation
+           java-plexus-utils
+           maven-artifact
+           maven-builder-support
+           maven-model
+           maven-pom))
     (native-inputs
      `(("java-junit" ,java-junit)
        ("java-guava" ,java-guava)
@@ -1314,8 +1287,7 @@ inheritance, interpolation, @dots{}")))
          (replace 'install
            (install-from-pom "maven-repository-metadata/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("maven-pom" ,maven-pom)))
+     (list java-plexus-utils maven-pom))
     (native-inputs
      `(("modello" ,java-modello-core)
        ;; for modello:
@@ -1361,18 +1333,18 @@ so really just plain objects.")))
          (replace 'install
            (install-from-pom "maven-resolver-provider/pom.xml")))))
     (propagated-inputs
-     `(("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-impl" ,maven-resolver-impl)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-guice" ,java-guice)
-       ("java-javax-inject" ,java-javax-inject)))))
+     (list maven-model
+           maven-model-builder
+           maven-resolver-spi
+           maven-resolver-api
+           maven-resolver-impl
+           maven-resolver-util
+           maven-builder-support
+           maven-repository-metadata
+           java-plexus-utils
+           java-plexus-component-annotations
+           java-guice
+           java-javax-inject))))
 
 (define-public maven-plugin-api
   (package
@@ -1874,20 +1846,20 @@ logging support.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-settings" ,maven-settings)
-       ("maven-settings-builder" ,maven-settings-builder)
-       ("maven-core" ,maven-core)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-wagon-file" ,maven-wagon-file)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)))
+     (list maven-artifact
+           maven-repository-metadata
+           maven-builder-support
+           maven-model
+           maven-model-builder
+           maven-settings
+           maven-settings-builder
+           maven-core
+           maven-wagon-provider-api
+           maven-wagon-file
+           maven-resolver-api
+           maven-resolver-util
+           maven-resolver-spi
+           java-plexus-interpolation))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ("java-plexus-utils" ,java-plexus-utils)
@@ -2000,59 +1972,58 @@ layer for plugins that need to keep Maven2 compatibility.")))
                (copy-recursively "apache-maven/src/conf" conf))
              #t)))))
     (inputs
-     `(("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-embedder" ,maven-embedder)
-       ("maven-core" ,maven-core)
-       ("maven-compat" ,maven-compat)
-       ("maven-builder-support" ,maven-builder-support)
-       ("maven-model" ,maven-model)
-       ("maven-model-builder" ,maven-model-builder)
-       ("maven-settings" ,maven-settings)
-       ("maven-settings-builder" ,maven-settings-builder)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-repository-metadata" ,maven-repository-metadata)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-spi" ,maven-resolver-spi)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("maven-resolver-impl" ,maven-resolver-impl)
-       ("maven-resolver-connector-basic" ,maven-resolver-connector-basic)
-       ("maven-resolver-provider" ,maven-resolver-provider)
-       ("maven-resolver-transport-wagon" ,maven-resolver-transport-wagon)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-wagon-file" ,maven-wagon-file)
-       ("maven-wagon-http" ,maven-wagon-http)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("maven-wagon-http-shared" ,maven-wagon-http-shared)
-       ("maven-wagon-tck-http" ,maven-wagon-tck-http)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-guice" ,java-guice)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-guava" ,java-guava)
-       ("java-jansi" ,java-jansi)
-       ("java-jsr250" ,java-jsr250)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-commons-io" ,java-commons-io)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ;; TODO: replace with maven-slf4j-provider
-       ("java-slf4j-simple" ,java-slf4j-simple)))
-    (propagated-inputs
-     `(("coreutils" ,coreutils)
-       ("which" ,which)))
+     (list java-plexus-classworlds
+           maven-artifact
+           maven-embedder
+           maven-core
+           maven-compat
+           maven-builder-support
+           maven-model
+           maven-model-builder
+           maven-settings
+           maven-settings-builder
+           maven-plugin-api
+           maven-repository-metadata
+           maven-shared-utils
+           maven-resolver-api
+           maven-resolver-spi
+           maven-resolver-util
+           maven-resolver-impl
+           maven-resolver-connector-basic
+           maven-resolver-provider
+           maven-resolver-transport-wagon
+           maven-wagon-provider-api
+           maven-wagon-file
+           maven-wagon-http
+           java-commons-logging-minimal
+           java-httpcomponents-httpclient
+           java-httpcomponents-httpcore
+           maven-wagon-http-shared
+           maven-wagon-tck-http
+           java-eclipse-sisu-plexus
+           java-guice
+           java-aopalliance
+           java-cglib
+           java-asm
+           java-eclipse-sisu-inject
+           java-javax-inject
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-plexus-interpolation
+           java-plexus-sec-dispatcher
+           java-plexus-cipher
+           java-guava
+           java-jansi
+           java-jsr250
+           java-cdi-api
+           java-commons-cli
+           java-commons-io
+           java-commons-lang3
+           java-slf4j-api
+           ;; TODO: replace with maven-slf4j-provider
+           java-slf4j-simple))
+    (propagated-inputs
+     (list coreutils which))
     (description "Apache Maven is a software project management and comprehension
 tool.  Based on the concept of a project object model: builds, dependency
 management, documentation creation, site publication, and distribution
@@ -2227,8 +2198,8 @@ reporting or the build process.")))
             (_ input)))
         (package-propagated-inputs maven-model-builder)))
     (native-inputs
-     `(("java-plexus-container-default" ,java-plexus-container-default)
-       ,@(package-native-inputs maven-plugin-api)))))
+     (modify-inputs (package-native-inputs maven-plugin-api)
+       (prepend java-plexus-container-default)))))
 
 (define-public maven-3.0-repository-metadata
   (package
@@ -2279,7 +2250,7 @@ reporting or the build process.")))
        ("java-plexus-utils" ,java-plexus-utils)
        ("maven-pom" ,maven-3.0-pom)))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)))))
+     (list java-plexus-component-metadata))))
 
 (define-public maven-3.0-core
   (package
@@ -2360,23 +2331,23 @@ reporting or the build process.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-model" ,maven-3.0-model)
-       ("maven-settings" ,maven-3.0-settings)
-       ("maven-settings-builder" ,maven-3.0-settings-builder)
-       ("maven-repository-metadata" ,maven-3.0-repository-metadata)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-model-builder" ,maven-3.0-model-builder)
-       ("maven-aether-provider" ,maven-3.0-aether-provider)
-       ("java-sonatype-aether-impl" ,java-sonatype-aether-impl)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
-       ("maven-pom" ,maven-3.0-pom)))))
+     (list maven-3.0-model
+           maven-3.0-settings
+           maven-3.0-settings-builder
+           maven-3.0-repository-metadata
+           maven-3.0-artifact
+           maven-3.0-model-builder
+           maven-3.0-aether-provider
+           java-sonatype-aether-impl
+           java-sonatype-aether-api
+           java-sonatype-aether-util
+           java-plexus-interpolation
+           java-plexus-utils
+           java-plexus-classworlds
+           java-plexus-component-annotations
+           java-plexus-container-default
+           java-plexus-sec-dispatcher
+           maven-3.0-pom))))
 
 (define-public maven-3.0-compat
   (package
@@ -2396,24 +2367,24 @@ reporting or the build process.")))
                   #t))
               (delete 'build-tests))))))
     (propagated-inputs
-     `(("maven-model" ,maven-3.0-model)
-       ("maven-model-builder" ,maven-3.0-model-builder)
-       ("maven-settings" ,maven-3.0-settings)
-       ("maven-settings-builder" ,maven-3.0-settings-builder)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-aether-provider" ,maven-3.0-aether-provider)
-       ("maven-repository-metadata" ,maven-3.0-repository-metadata)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-sonatype-aether-impl" ,java-sonatype-aether-impl)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("maven-pom" ,maven-3.0-pom)))))
+     (list maven-3.0-model
+           maven-3.0-model-builder
+           maven-3.0-settings
+           maven-3.0-settings-builder
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-3.0-aether-provider
+           maven-3.0-repository-metadata
+           java-sonatype-aether-api
+           java-sonatype-aether-util
+           java-sonatype-aether-impl
+           java-plexus-utils
+           java-plexus-interpolation
+           java-eclipse-sisu-plexus
+           java-plexus-component-annotations
+           java-plexus-container-default
+           maven-wagon-provider-api
+           maven-3.0-pom))))
 
 (define-public maven-shared-utils-3.0
   (package
@@ -2427,9 +2398,8 @@ reporting or the build process.")))
                (base32
                 "0qm8y85kip2hyhnhlkqgj0rhmf83z07s7l7gzsfl5dzl3kvp8nal"))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-21)
-       ,@(package-propagated-inputs maven-shared-utils)))))
+     (modify-inputs (package-propagated-inputs maven-shared-utils)
+       (prepend maven-3.0-core maven-components-parent-pom-21)))))
 
 (define-public maven-shared-utils-3.1
   (package
@@ -2470,17 +2440,15 @@ reporting or the build process.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-3.0-artifact)
-       ("maven-compat" ,maven-3.0-compat)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-wagon-provider-api" ,maven-wagon-provider-api)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-22)))
+     (list maven-3.0-artifact
+           maven-3.0-compat
+           maven-3.0-plugin-api
+           maven-shared-utils
+           maven-wagon-provider-api
+           java-plexus-utils
+           maven-components-parent-pom-22))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list unzip java-junit java-easymock))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2524,11 +2492,8 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-io" ,maven-shared-io)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-components-parent-pom" ,maven-components-parent-pom-22)))
+     (list maven-3.0-plugin-api maven-shared-io maven-shared-utils
+           java-plexus-utils maven-components-parent-pom-22))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ;; modello plugins:
@@ -2572,9 +2537,7 @@ Maven project dependencies.")
        ("java-plexus-utils" ,java-plexus-utils)
        ("maen-parent-pom" ,maven-parent-pom-33)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-assertj" ,java-assertj)
-       ("unzip" ,unzip)))
+     (list java-junit java-assertj unzip))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2602,17 +2565,13 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-3.0-core java-plexus-component-annotations
+           maven-parent-pom-30))
     (inputs
-     `(("java-sonatype-aether-api"  ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)
-       ("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)))
+     (list java-sonatype-aether-api java-sonatype-aether-util
+           java-eclipse-aether-api java-eclipse-aether-util))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)))
+     (list unzip java-junit))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2649,19 +2608,18 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-3.0-artifact)
-       ("maven-model" ,maven-3.0-model)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-parent-pom" ,maven-parent-pom-33)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-sonatype-aether-util" ,java-sonatype-aether-util)))
+     (list maven-3.0-artifact
+           maven-3.0-model
+           maven-3.0-core
+           maven-3.0-plugin-api
+           maven-shared-utils
+           maven-parent-pom-33
+           java-sonatype-aether-api
+           java-sonatype-aether-util))
     (inputs
-     `(("maven-resolver-api" ,maven-resolver-api)
-       ("maven-resolver-util" ,maven-resolver-util)))
+     (list maven-resolver-api maven-resolver-util))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
    (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2691,12 +2649,10 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "enforcer-api/pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-jsr305" ,java-jsr305)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))
+     (list maven-plugin-api java-plexus-container-default java-jsr305
+           maven-enforcer-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/shared/maven-dependency-tree")
     (synopsis "Tree-based API for resolution of Maven project dependencies")
     (description "This package provides a tree-based API for resolution of
@@ -2741,18 +2697,18 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "enforcer-rules/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("maven-enforcer-api" ,maven-enforcer-api)
-       ("maven-resolver-util" ,maven-resolver-util)
-       ("java-bsh" ,java-bsh)
-       ("maven-dependency-tree" ,maven-dependency-tree)
-       ("maven-compat" ,maven-3.0-compat)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))))
+     (list maven-artifact
+           maven-plugin-api
+           maven-core
+           maven-common-artifact-filters
+           java-commons-codec
+           java-commons-lang3
+           maven-enforcer-api
+           maven-resolver-util
+           java-bsh
+           maven-dependency-tree
+           maven-3.0-compat
+           maven-enforcer-parent-pom))))
 
 (define-public maven-enforcer-plugin
   (package
@@ -2774,14 +2730,14 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "maven-enforcer-plugin/pom.xml")))))
     (propagated-inputs
-     `(("maven-artifact" ,maven-artifact)
-       ("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-enforcer-api" ,maven-enforcer-api)
-       ("maven-enforcer-rules" ,maven-enforcer-rules)
-       ("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("maven-enforcer-parent-pom" ,maven-enforcer-parent-pom)))))
+     (list maven-artifact
+           maven-plugin-api
+           maven-core
+           java-plexus-utils
+           maven-enforcer-api
+           maven-enforcer-rules
+           maven-plugin-annotations
+           maven-enforcer-parent-pom))))
 
 (define-public maven-artifact-transfer
   (package
@@ -2818,21 +2774,20 @@ Maven project dependencies.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-sonatype-aether-api" ,java-sonatype-aether-api)
-       ("java-eclipse-aether-api" ,java-eclipse-aether-api)
-       ("java-eclipse-aether-util" ,java-eclipse-aether-util)
-       ("java-eclipse-aether-impl" ,java-eclipse-aether-impl)))
+     (list java-commons-codec
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-common-artifact-filters
+           java-plexus-component-annotations
+           java-plexus-utils
+           java-slf4j-api
+           java-plexus-classworlds
+           java-sonatype-aether-api
+           java-eclipse-aether-api
+           java-eclipse-aether-util
+           java-eclipse-aether-impl))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (home-page "https://maven.apache.org/shared/maven-artifact-transfer")
     (synopsis "API to install, deploy and resolve artifacts in Maven")
     (description "This package contains an API to install, deploy and resolve
@@ -2882,10 +2837,9 @@ artifacts in Maven 3.")
        ("maven-plugins-pom-23" ,maven-plugins-pom-23)
        ("java-plexus-digest" ,java-plexus-digest)))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list maven-plugin-annotations java-slf4j-api))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/plugin/maven-install-plugin")
     (synopsis "Maven's install plugin")
     (description "The Install Plugin is used during the install phase to add
@@ -2951,14 +2905,14 @@ build are stored.  By default, it is located within the user's home directory
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-core" ,maven-3.0-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("java-sisu-build-api" ,java-sisu-build-api)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-3.0-core
+           maven-shared-utils
+           java-plexus-utils
+           java-plexus-interpolation
+           java-sisu-build-api
+           maven-parent-pom-30))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
      `(("unzip" ,unzip)
        ("java-assertj" ,java-assertj)
@@ -3004,17 +2958,16 @@ projects.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("maven-filtering" ,maven-filtering)
-       ("java-plexus-interpolation" ,java-plexus-interpolation)
-       ("maven-parent-pom" ,maven-parent-pom-31)))
+     (list maven-plugin-api
+           maven-core
+           java-plexus-utils
+           maven-filtering
+           java-plexus-interpolation
+           maven-parent-pom-31))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-commons-io" ,java-commons-io)))
+     (list maven-plugin-annotations java-commons-io))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list java-plexus-component-metadata))
     (home-page "https://maven.apache.org/plugins/maven-resources-plugin")
     (synopsis "Maven plugin to collect and install resources")
     (description "The Resources Plugin handles the copying of project resources
@@ -3068,14 +3021,10 @@ unit tests.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-core" ,maven-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("maven-parent-pom" ,maven-parent-pom-30)))
+     (list maven-plugin-api maven-core maven-shared-utils
+           java-plexus-component-annotations maven-parent-pom-30))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (home-page "https://maven.apache.org/shared/maven-shared-incremental")
     (synopsis "Maven Incremental Build support utilities")
     (description "This package contains various utility classes and plexus
@@ -3121,19 +3070,18 @@ components for supporting incremental build functionality in maven plugins.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-plugin-api" ,maven-plugin-api)
-       ("maven-artifact" ,maven-artifact)
-       ("maven-core" ,maven-core)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("maven-shared-incremental" ,maven-shared-incremental)
-       ("java-plexus-java" ,java-plexus-java)
-       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-manager" ,java-plexus-compiler-manager)
-       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
-       ("maven-parent-pom" ,maven-parent-pom-33)))
+     (list maven-plugin-api
+           maven-artifact
+           maven-core
+           maven-shared-utils
+           maven-shared-incremental
+           java-plexus-java
+           java-plexus-compiler-api
+           java-plexus-compiler-manager
+           java-plexus-compiler-javac
+           maven-parent-pom-33))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("java-commons-io" ,java-commons-io)))
+     (list maven-plugin-annotations java-commons-io))
     (home-page "https://maven.apache.org/plugins/maven-compiler-plugin")
     (synopsis "Compiler plugin for Maven")
     (description "The Compiler Plugin is used to compile the sources of your
@@ -3172,9 +3120,9 @@ AspectJ, .NET, and C#.")
          (replace 'install
            (install-from-pom "surefire-logger-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://maven.apache.org/surefire/surefire-logger-api")
     (synopsis "Interfaces and Utilities related only to internal SureFire Logger API")
     (description "This package contains interfaces and utilities that are
@@ -3220,7 +3168,7 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-pom-file "pom.xml")))))
     (propagated-inputs
-     `(("maven-parent-pom" ,maven-parent-pom-33)))))
+     (list maven-parent-pom-33))))
 
 (define-public java-surefire-api
   (package
@@ -3276,15 +3224,12 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-from-pom "surefire-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-logger-api" ,java-surefire-logger-api)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)))
+     (list java-surefire-logger-api java-commons-codec
+           java-surefire-parent-pom maven-shared-utils-3.1))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)))
+     (list unzip java-jarjar))
     (synopsis "Maven SureFire API")
     (description "This package contains the API to use Maven SureFire.")))
 
@@ -3306,12 +3251,10 @@ internal to the SureFire Logger API.  It is designed to have no dependency.")
          (replace 'install
            (install-from-pom "surefire-booter/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-commons-io" ,java-commons-io)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api java-commons-lang3 java-commons-io
+           java-surefire-parent-pom))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (synopsis "API and Facilities used by forked tests running in JVM sub-process")
     (description "SureFire runs tests inside a forked JVM subprocess.  This
 package contains an API and facilities used inside that forked JVM.")))
@@ -3329,10 +3272,9 @@ package contains an API and facilities used inside that forked JVM.")))
          (replace 'install
            (install-from-pom "surefire-extensions-api/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api java-surefire-parent-pom))
     (inputs
-     `(("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-plexus-component-annotations))
     (synopsis "Extension API for Maven SureFire")
     (description "Surefire is a test framework project.  This is the aggregator
 POM in Apache Maven Surefire project.")))
@@ -3383,14 +3325,10 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-java5/pom.xml")))))
     (propagated-inputs
-     `(("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list maven-shared-utils-3.1 java-surefire-api
+           java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)
-       ("java-junit" ,java-junit)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list unzip java-jarjar java-junit java-fest-assert))
     (synopsis "Common java5 facilities for Maven SureFire")
     (description "This package contains shared Java 5 code for all providers.")))
 
@@ -3407,13 +3345,9 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-junit3/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit java-surefire-api java-surefire-parent-pom))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list unzip java-junit java-fest-assert))
     (synopsis "Shared JUnit3 provider code for Maven SureFire")
     (description "This package contains shared code for all JUnit providers.")))
 
@@ -3430,12 +3364,12 @@ POM in Apache Maven Surefire project.")))
          (replace 'install
            (install-from-pom "surefire-providers/common-junit4/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-common-java5" ,java-surefire-common-java5)
-       ("java-surefire-common-junit3" ,java-surefire-common-junit3)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit
+           java-surefire-api
+           java-surefire-common-java5
+           java-surefire-common-junit3
+           maven-shared-utils-3.1
+           java-surefire-parent-pom))
     (synopsis "Shared JUnit4 provider code for Maven SureFire")
     (description "This package contains shared code for all JUnit providers,
 starting from JUnit 4.")))
@@ -3509,19 +3443,13 @@ starting from JUnit 4.")))
          (replace 'install
            (install-from-pom "surefire-providers/surefire-junit4/pom.xml")))))
     (propagated-inputs
-     `(("java-junit" ,java-junit)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-junit java-surefire-parent-pom))
     (inputs
-     `(("java-surefire-common-junit4" ,java-surefire-common-junit4)
-       ("java-surefire-common-junit3" ,java-surefire-common-junit3)
-       ("java-surefire-common-java5" ,java-surefire-common-java5)
-       ("java-surefire-api" ,java-surefire-api)))
+     (list java-surefire-common-junit4 java-surefire-common-junit3
+           java-surefire-common-java5 java-surefire-api))
     (native-inputs
-     `(("java-jarjar" ,java-jarjar)
-       ("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-fest-assert" ,java-fest-assert)))
+     (list java-jarjar unzip java-junit java-hamcrest-all
+           java-fest-assert))
     (synopsis "SureFire JUnit 4.0+ runner")
     (description "This package contains the runner for tests run on a forked
 JVM, using JUnit 4.0 or later.")))
@@ -3591,25 +3519,24 @@ JVM, using JUnit 4.0 or later.")))
          (replace 'install
            (install-from-pom "maven-surefire-common/pom.xml")))))
     (propagated-inputs
-     `(("java-surefire-api" ,java-surefire-api)
-       ("java-surefire-extensions-api" ,java-surefire-extensions-api)
-       ("java-surefire-booter" ,java-surefire-booter)
-       ("maven-core" ,maven-core)
-       ("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("maven-common-artifact-filters" ,maven-common-artifact-filters)
-       ("maven-artifact-transfer" ,maven-artifact-transfer)
-       ("java-plexus-java" ,java-plexus-java)
-       ("java-jansi" ,java-jansi)
-       ("java-commons-io" ,java-commons-io)
-       ("java-commons-lang3" ,java-commons-lang3)
-       ("java-commons-compress" ,java-commons-compress)
-       ("maven-shared-utils" ,maven-shared-utils-3.1)
-       ("java-surefire-parent-pom" ,java-surefire-parent-pom)))
+     (list java-surefire-api
+           java-surefire-extensions-api
+           java-surefire-booter
+           maven-core
+           maven-plugin-annotations
+           maven-common-artifact-filters
+           maven-artifact-transfer
+           java-plexus-java
+           java-jansi
+           java-commons-io
+           java-commons-lang3
+           java-commons-compress
+           maven-shared-utils-3.1
+           java-surefire-parent-pom))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-jarjar" ,java-jarjar)))
+     (list unzip java-jarjar))
     (synopsis "API used in Surefire and Failsafe MOJO")
     (description "This package contains an API used in SureFire and Failsafe
 MOJO.")))
@@ -3635,11 +3562,9 @@ MOJO.")))
          (replace 'install
            (install-from-pom "maven-surefire-plugin/pom.xml")))))
     (propagated-inputs
-     `(("maven-surefire-common" ,maven-surefire-common)
-       ("maven-core" ,maven-core)))
+     (list maven-surefire-common maven-core))
     (native-inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)
-       ("unzip" ,unzip)))
+     (list maven-plugin-annotations unzip))
     (synopsis "SureFire Maven plugin that runs tests.")
     (description "The Surefire Plugin is used during the test phase of the
 build lifecycle to execute the unit tests of an application.  It generates
@@ -3675,16 +3600,16 @@ reports in two different file formats, plain text and xml.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("maven-archiver" ,maven-archiver)
-       ("maven-artifact" ,maven-3.0-artifact)
-       ("maven-core" ,maven-3.0-core)
-       ("maven-plugin-api" ,maven-3.0-plugin-api)
-       ("maven-file-management" ,maven-file-management)
-       ("maven-shared-utils" ,maven-shared-utils)
-       ("java-plexus-archiver" ,java-plexus-archiver)
-       ("java-plexus-utils" ,java-plexus-utils)))
+     (list maven-archiver
+           maven-3.0-artifact
+           maven-3.0-core
+           maven-3.0-plugin-api
+           maven-file-management
+           maven-shared-utils
+           java-plexus-archiver
+           java-plexus-utils))
     (inputs
-     `(("maven-plugin-annotations" ,maven-plugin-annotations)))
+     (list maven-plugin-annotations))
     (home-page "https://maven.apache.org/plugins/maven-jar-plugin")
     (synopsis "Jar builder plugin for Maven")
     (description "This plugin provides the capability to build jars.  If you
diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm
index e07191e344..7bde8a5e78 100644
--- a/gnu/packages/mc.scm
+++ b/gnu/packages/mc.scm
@@ -47,15 +47,14 @@
       (sha256
        (base32 "1x2g5ahgzg951y4ldbsgkv8icni2mgh3p2wsds0j16gsbwi5kgii"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("aspell" ,aspell)
-              ("check" ,check)
-              ("glib" ,glib)
-              ("gpm" ,gpm)
-              ("libssh2" ,libssh2)
-              ("ncurses" ,ncurses)
-              ("unzip" ,unzip)))
+    (native-inputs (list perl pkg-config))
+    (inputs (list aspell
+                  check
+                  glib
+                  gpm
+                  libssh2
+                  ncurses
+                  unzip))
     (arguments
      `(#:configure-flags
        '("--with-screen=ncurses" "--enable-aspell")
diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm
index d0cfb8f7a3..c0b9c815a5 100644
--- a/gnu/packages/mcrypt.scm
+++ b/gnu/packages/mcrypt.scm
@@ -44,9 +44,7 @@
                  "mcrypt-CVE-2012-4527.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("libmcrypt" ,libmcrypt)
-       ("libmhash" ,libmhash)))
+     (list zlib libmcrypt libmhash))
     (home-page "http://mcrypt.sourceforge.net/")
     (synopsis "Replacement for the popular Unix crypt command")
     (description
@@ -98,7 +96,7 @@ XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more.")
                                "libmhash-hmac-fix-uaf.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ;for tests
+     (list perl))                 ;for tests
     (home-page "http://mhash.sourceforge.net/")
     (synopsis "Thread-safe hash library")
     (description
diff --git a/gnu/packages/medical.scm b/gnu/packages/medical.scm
index 6c298707f5..6c9cc757eb 100644
--- a/gnu/packages/medical.scm
+++ b/gnu/packages/medical.scm
@@ -49,9 +49,7 @@
               (("/usr") (assoc-ref outputs "out")))
             #t)))))
    (inputs
-    `(("python-pyqt+qscintilla" ,python-pyqt+qscintilla)
-      ("python-mysqlclient" ,python-mysqlclient)
-      ("qscintilla" ,qscintilla)))
+    (list python-pyqt+qscintilla python-mysqlclient qscintilla))
    (home-page "https://openmolar.com/om1")
    (synopsis "Dental practice management software")
    (description "Openmolar is a dental practice management suite.  Its
diff --git a/gnu/packages/mercury.scm b/gnu/packages/mercury.scm
index 5a2c85a79b..fe02b34a97 100644
--- a/gnu/packages/mercury.scm
+++ b/gnu/packages/mercury.scm
@@ -244,8 +244,6 @@ separate compilation, and numerous optimization/time trade-offs.")
            ;; Eventually we need to add inputs for Java, Erlang,
            ;; C#, etc. in order to enable these extra grades.
            (native-inputs
-            `(("mercury-minimal" ,mercury-minimal)
-              ("autoconf" ,autoconf)
-              ("automake" ,automake)
-              ,@(package-native-inputs mercury-minimal)))
+            (modify-inputs (package-native-inputs mercury-minimal)
+              (prepend mercury-minimal autoconf automake)))
            (synopsis "Pure logic programming language")))
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index 1d1dd189b0..07e63384ff 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -57,8 +57,7 @@
                (base32
                 "0lkd9lyspvhxlfs0496gsllwinh62jk9wij6gpadvx9gwz6yavd9"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     (synopsis "LALR(1) Parser Generator in Guile")
     (description
      "NYACC is an LALR(1) parser generator implemented in Guile.
@@ -93,10 +92,8 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                     (("^DOCDIR =.*")
                      "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
                   #t))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2))))
 
 (define-public nyacc
   (package
@@ -117,8 +114,7 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                      "GUILE_GLOBAL_SITE=\
 $prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION\n"))
                   #t))))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (description
      "@acronym{NYACC, Not Yet Another Compiler Compiler} is set of Guile modules
 for generating parsers and lexical analyzers.  It provides sample parsers,
@@ -153,69 +149,39 @@ parsers to allow execution with Guile as extension languages.")))
               (sha256
                (base32
                 "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"))))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (inputs (list guile-3.0))))
 
-(define-public mes-0.19
-  ;; Mes used for bootstrap.
+(define-public mes
   (package
     (name "mes")
-    (version "0.19")
+    (version "0.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/mes/"
                                   "mes-" version ".tar.gz"))
               (sha256
                (base32
-                "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
-    (build-system gnu-build-system)
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools-0.5.2)
-       ("nyacc" ,nyacc-0.86)))
+                "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
+    (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
+    (propagated-inputs (list mescc-tools nyacc-1.00.2))
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(let ((target-system (or (%current-target-system)
+     (append (list guile-3.0)
+         (let ((target-system (or (%current-target-system)
                                   (%current-system))))
            (cond
             ((string-prefix? "x86_64-linux" target-system)
              ;; Use cross-compiler rather than #:system "i686-linux" to get
              ;; MesCC 64 bit .go files installed ready for use with Guile.
-             `(("i686-linux-binutils" ,(cross-binutils "i686-unknown-linux-gnu"))
-               ("i686-linux-gcc" ,(cross-gcc "i686-unknown-linux-gnu"))))
+             (list (cross-binutils "i686-unknown-linux-gnu")
+                   (cross-gcc "i686-unknown-linux-gnu")))
             (else
              '())))
-       ("graphviz" ,graphviz)
-       ("help2man" ,help2man)
-       ("perl" ,perl)                 ; build-aux/gitlog-to-changelog
-       ("texinfo" ,texinfo)))
+       (list graphviz help2man
+             perl                               ;build-aux/gitlog-to-changelog
+             texinfo)))
+    (build-system gnu-build-system)
     (arguments
      `(#:strip-binaries? #f))  ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-    (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
-    (description
-     "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed
-bootstrap to Guix and aims to help create full source bootstrapping for
-GNU/Linux distributions.  It consists of a mutual self-hosting Scheme
-interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with
-Guile.")
-    (home-page "https://www.gnu.org/software/mes/")
-    (license gpl3+)))
-
-(define-public mes
-  (package
-    (inherit mes-0.19)
-    (version "0.23")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mes/"
-                                  "mes-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
-    (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools)
-       ("nyacc" ,nyacc-1.00.2)))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -226,180 +192,80 @@ Guile.")
            (search-path-specification
             (variable "MES_PREFIX")
             (separator #f)
-            (files '("")))))))
+            (files '("")))))
+    (synopsis "Scheme interpreter and C compiler for full source bootstrapping")
+    (description
+     "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed
+bootstrap to Guix and aims to help create full source bootstrapping for
+GNU/Linux distributions.  It consists of a mutual self-hosting Scheme
+interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with
+Guile.")
+    (home-page "https://www.gnu.org/software/mes/")
+    (license gpl3+)))
 
-(define-public mes-rb5
-  ;; This is the Reproducible-Builds summit 5's Mes, also built on Debian
-  ;; GNU/Linux and NixOS to produce the same, bit-for-bit identical result.
+(define-public mescc-tools
   (package
-    (inherit mes)
-    (name "mes-rb5")
-    (version "0.22")
+    (name "mescc-tools")
+    (version "1.2.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mes/"
-                                  "mes-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.savannah.nongnu.org/r/mescc-tools.git")
+                    (commit (string-append "Release_" version))
+                    (recursive? #t)))             ;for M2libc
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0p1jsrrmcbc0zrvbvnjbb6iyxr0in71km293q8qj6gnar6bw09av"))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (inputs '())
-    (propagated-inputs '())
-    (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("grep" ,grep)
-       ("guile" ,guile-2.2)
-       ("gzip" ,gzip)
-       ("libc" ,glibc)
-       ("locales" ,glibc-utf8-locales)
-       ("make" ,gnu-make)
-       ("mes" ,mes)
-       ("mescc-tools" ,mescc-tools)
-       ("nyacc" ,nyacc-0.99)
-       ("sed" ,sed)
-       ("tar" ,tar)))
-    (supported-systems '("i686-linux"))
+                "1xkn5sspfxldy4wm8fq8gd8kwn46578zhfl12c16pq74x21zb198"))))
+    (build-system gnu-build-system)
+    (supported-systems '("i686-linux" "x86_64-linux"
+                         "armhf-linux" "aarch64-linux"
+                         "powerpc64le-linux"))
     (arguments
-     `(#:implicit-inputs? #f
-       #:strip-binaries? #f    ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 popen)
-                  (ice-9 rdelim))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'setenv
-           (lambda _
-             (setenv "AR" "mesar")
-             (setenv "CC" "mescc")
-             (setenv "GUILD" "true")
-             (setenv "SCHEME" "mes")
-             (setenv "LC_ALL" "en_US.UTF-8")
-             #t))
-         (replace 'configure
-           (lambda _
-             (let ((out (assoc-ref %outputs "out")))
-               (invoke "sh" "configure.sh"
-                       (string-append "--prefix=" out)
-                       "--host=i686-unkown-linux-gnu"
-                       "--with-courage"))))
-         (replace 'build
-           (lambda _
-             (invoke "sh" "bootstrap.sh")))
-         (replace 'check
-           (lambda _
-             (copy-file "bin/mes-mescc" "bin/mes-mescc-0.21")
-             (system* "sed" "-i" "s/0\\.22/0\\.21/" "bin/mes-mescc-0.21")
-             (let ((sha256sum
-                    (read-delimited
-                     " "
-                     (open-pipe* OPEN_READ "sha256sum" "bin/mes-mescc-0.21"))))
-               (unless
-                   (equal?
-                    sha256sum
-                    "9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb")
-                 (throw 'error "mes checksum failure"))
-               #t)))
-         (replace 'install
-           (lambda _
-             (invoke "sh" "install.sh"))))))))
-
-(define-public mescc-tools-0.5.2
-  ;; Mescc-tools used for bootstrap.
-  (let ((commit "bb062b0da7bf2724ca40f9002b121579898d4ef7")
-        (revision "0")
-        (version "0.5.2"))
-    (package
-      (name "mescc-tools")
-      (version (git-version version revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://git.savannah.nongnu.org/r/mescc-tools.git")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1nc6rnax66vmhqsjg0kgx23pihdcxmww6v325ywf59vsq1jqjvff"))))
-      (build-system gnu-build-system)
-      (supported-systems '("i686-linux" "x86_64-linux"))
-      (arguments
-       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-         #:test-target "test"
-         #:phases (modify-phases %standard-phases
-                    (delete 'configure))))
-      (synopsis "Tools for the full source bootstrapping process")
-      (description
-       "Mescc-tools is a collection of tools for use in a full source
+     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (native-inputs (list which))
+    (synopsis "Tools for the full source bootstrapping process")
+    (description
+     "Mescc-tools is a collection of tools for use in a full source
 bootstrapping process.  It consists of the M1 macro assembler, the hex2
 linker, the blood-elf symbol table generator, the kaem shell, exec_enable and
 get_machine.")
     (home-page "https://savannah.nongnu.org/projects/mescc-tools")
-    (license gpl3+))))
+    (license gpl3+)))
 
-(define-public mescc-tools
+(define-public m2-planet
   (package
-    (inherit mescc-tools-0.5.2)
-    (name "mescc-tools")
-    (version "0.7.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "http://git.savannah.nongnu.org/cgit/mescc-tools.git/snapshot/"
-             name "-Release_" version
-             ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1p1ijia4rm3002f5sypidl9v5gq0mlch9b0n61rpxkdsaaxjqax3"))))
-    (supported-systems '("armhf-linux" "aarch64-linux"
-                         "i686-linux" "x86_64-linux"))
+    (name "m2-planet")
+    (version "1.8.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/oriansj/m2-planet")
+                    (commit (string-append "Release_" version))
+                    (recursive? #t)))             ;for M2libc
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0525fhijrjljgaabmgsjy8yk2pmh5zf8lwa44wpvkjc18knl7nza"))))
+    (native-inputs (list mescc-tools))
+    (build-system gnu-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments mescc-tools-0.5.2)
-       ((#:make-flags _)
-        `(list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-               "CC=gcc"))
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-prefix
-             (lambda _
-               (substitute* "sha256.sh"
-                 (("/usr/bin/sha256sum") (which "sha256sum")))
-               #t))))))))
-
-(define-public m2-planet
-  (let ((commit "b87ddb0051b168ea45f8d49a610dcd069263336a")
-        (revision "2"))
-    (package
-      (name "m2-planet")
-      (version (string-append "1.4.0-" revision "." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/oriansj/m2-planet")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0yyc0fcbbxi9jqa1n76x0rwspdrwmc8g09jlmsw9c35nflrhmz8q"))))
-      (native-inputs
-       `(("mescc-tools" ,mescc-tools)))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-         #:tests? #f
-         #:phases (modify-phases %standard-phases
-                    (delete 'bootstrap)
-                    (delete 'configure))))
-      (synopsis "The PLAtform NEutral Transpiler")
-      (description
-       "M2-Planet, the PLAtform NEutral Transpiler, when combined with
+     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                          ,(string-append "CC=" (cc-for-target)))
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'bootstrap)
+                  (delete 'configure))))
+    (synopsis "The PLAtform NEutral Transpiler")
+    (description
+     "M2-Planet, the PLAtform NEutral Transpiler, when combined with
 mescc-tools, compiles a subset of the C language into working binaries with
 introspective steps in between.  It is self-hosting and for bootstrapping it
 also has an implementation in the M1 macro assembly language.  M2-Planet is
 built as Phase-5 of the full source bootstrapping process and is capable of
 building GNU Mes.")
-      (home-page "https://github.com/oriansj/m2-planet")
-      (license gpl3+))))
+    (home-page "https://github.com/oriansj/m2-planet")
+    (license gpl3+)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 0ac5ac4c01..ea7a74263b 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
@@ -174,8 +174,7 @@
                  ;; Use absolute path of 'xdg-open' program.
                  (("xdg-open") xdg-open))))))))
     (inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("xdg-utils" ,xdg-utils)))
+     (list go-github-com-pkg-errors xdg-utils))
     (home-page "https://roob.re/omemo-wget")
     (synopsis "Program to download and decrypt @code{aesgcm://} URLs")
     (description "OMEMO-wget is a tool to handle cryptographic URLs, generated
@@ -286,7 +285,7 @@ Its design goals are simplicity and stability.")
        ("gtk-doc" ,gtk-doc)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (propagated-inputs
      `(("glib" ,glib)
        ("libxml" ,libxml2)
@@ -314,26 +313,25 @@ user interfaces in a fast and easy way.  It is based on GLib and ncurses.")
         (base32 "1s16cripy5w9k12534qb012iwc5m9qcjyrywgsziyn3kl3i0aa8h"))))
     (build-system gnu-build-system)
     (arguments
+     ;; 'test/manual/userconfig.h' contains definitions in lieu of
+     ;; declarations, hence '-fcommon'.
      `(#:configure-flags
-       (list
-        "--disable-static")
+       (list "--disable-static" "CFLAGS=-O2 -g -fcommon")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-shebangs
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "protobufgen.sh"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash")
-                               "/bin/sh")))
-             #t)))))
+                (search-input-file inputs "/bin/sh"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bash" ,bash)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           bash
+           doxygen
+           libtool
+           perl
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("expat" ,expat)
@@ -342,7 +340,7 @@ user interfaces in a fast and easy way.  It is based on GLib and ncurses.")
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("gnutls" ,gnutls)))
+     (list gnutls))
     (synopsis "Library for handling the protocol of Gadu-Gadu")
     (description "LibGadu is library for handling Gadu-Gadu instant messenger
 protocol.  The library is written in C and aims to be operating system and
@@ -377,11 +375,7 @@ environment independent.")
              (delete-file "Makefile.in")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool perl pkg-config))
     (synopsis "SILC ToolKit")
     (description "SILC (Secure Internet Live Conferencing) is a modern and secure
 conferencing protocol.  It provides all the common conferencing services like
@@ -423,10 +417,9 @@ conferencing.")
                               "tst_qxmpptransfermanager")
                         "|"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("qtbase" ,qtbase-5)))
+     (list gstreamer qtbase-5))
     (home-page "https://github.com/qxmpp-project/qxmpp")
     (synopsis "XMPP client and server library")
     (description
@@ -453,13 +446,9 @@ framework.  It builds XMPP clients complying with the XMPP Compliance Suites
         (base32 "1k1gvmx1ikm0y1mdmm495rzkb00pl170jfaf2dy0n5aiiknkk7q3"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake doxygen libtool pkg-config))
     (propagated-inputs
-     `(("glib" ,glib)))
+     (list glib))
     (synopsis "Library for Lotus Instant Messaging")
     (description "Meanwhile is a library for connecting to a LIM (Lotus Instant
 Messaging, formerly Lotus Sametime, formerly VPBuddy) community.  It uses a
@@ -495,19 +484,17 @@ TCP sessions from existing clients.")
                 "'CC', 'gcc'"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)))
+     (list pkg-config python-setuptools python-sphinx))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("python-potr" ,python-potr)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pygments" ,python-pygments)
-       ("python-pyinotify" ,python-pyinotify)
-       ;("python" ,python)
-       ("python-qrcode" ,python-qrcode)
-       ("python-slixmpp" ,python-slixmpp)))
+     (list python-mpd2
+           python-potr
+           python-pyasn1
+           python-pyasn1-modules
+           python-pygments
+           python-pyinotify
+           ;("python" ,python)
+           python-qrcode
+           python-slixmpp))
     (synopsis "Console Jabber/XMPP Client")
     (description "Poezio is a free console XMPP client (the protocol on which
 the Jabber IM network is built).
@@ -536,11 +523,11 @@ powerful, standard and open protocol.")
         (search-patches "libotr-test-auth-fix.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))                 ; for the test suite
+     (list perl))                 ; for the test suite
     (inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (propagated-inputs
-     `(("libgcrypt" ,libgcrypt)))    ; libotr headers include gcrypt.h
+     (list libgcrypt))    ; libotr headers include gcrypt.h
     (synopsis "Off-the-Record (OTR) Messaging Library and Toolkit")
     (description "OTR allows you to have private conversations over instant
 messaging by providing: (1) Encryption: No one else can read your instant
@@ -576,10 +563,9 @@ your private keys, no previous conversation is compromised.")
    `(;; Required for proper linking and for tests to run.
      #:configure-flags '("-DBUILD_SHARED_LIBS=on" "-DBUILD_TESTING=1")))
   (build-system cmake-build-system)
-  (inputs `( ;; Required for tests:
-            ("check" ,check)
-            ("openssl" ,openssl)))
-  (native-inputs `(("pkg-config" ,pkg-config)))
+  (inputs (list ;; Required for tests:
+                check openssl))
+  (native-inputs (list pkg-config))
   (home-page "https://github.com/WhisperSystems/libsignal-protocol-c")
   (synopsis "Implementation of a ratcheting forward secrecy protocol")
   (description "libsignal-protocol-c is an implementation of a ratcheting
@@ -616,12 +602,8 @@ end-to-end encryption.")
                         (setenv "CC" "gcc")
                         (setenv "PREFIX" out)))))
        #:parallel-tests? #f))
-    (native-inputs `(("cmocka" ,cmocka)
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("glib" ,glib)
-              ("libgcrypt" ,libgcrypt)
-              ("libsignal-protocol-c" ,libsignal-protocol-c)
-              ("sqlite" ,sqlite)))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list glib libgcrypt libsignal-protocol-c sqlite))
     (synopsis "Client library for libsignal-protocol-c")
     (description "This is a client library for @code{libsignal-protocol-c}.
 It implements the necessary interfaces using @code{libgcrypt} and
@@ -652,12 +634,8 @@ It implements the necessary interfaces using @code{libgcrypt} and
                         (setenv "CC" "gcc")
                         (setenv "PREFIX" out)))))
        #:parallel-tests? #f))
-    (native-inputs `(("cmocka" ,cmocka)
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("glib" ,glib)
-              ("libgcrypt" ,libgcrypt)
-              ("minixml" ,minixml)
-              ("sqlite" ,sqlite)))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list glib libgcrypt minixml sqlite))
     (synopsis "OMEMO C library")
     (description "This library implements @acronym{OMEMO, OMEMO Multi-End
 Message and Object Encryption} of XMPP (XEP-0384) in C.")
@@ -675,14 +653,10 @@ Message and Object Encryption} of XMPP (XEP-0384) in C.")
               (sha256
                (base32 "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ;; Note: Change to 'check' for versions > 3.6.
-                     ("check" ,check-0.12)))
-    (inputs `(("glib" ,glib)
-              ("libotr" ,libotr)
-              ("gnutls" ,gnutls)
-              ("python" ,python)
-              ("perl" ,perl)))
+    (native-inputs (list pkg-config
+                         ;; Note: Change to 'check' for versions > 3.6.
+                         check-0.12))
+    (inputs (list glib libotr gnutls python perl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -761,14 +735,14 @@ identi.ca and status.net).")
              (let ((sh (which "sh")))
                (substitute* "autogen.sh" (("/bin/sh") sh))
                (setenv "CONFIG_SHELL" sh)))))))
-    (inputs `(("glib" ,glib)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("texinfo" ,texinfo)
-                     ("libtool" ,libtool)
-                     ("bitlbee" ,bitlbee) ; needs bitlbee headers
-                     ("bash" ,bash)))
+    (inputs (list glib))
+    (native-inputs (list pkg-config
+                         autoconf
+                         automake
+                         texinfo
+                         libtool
+                         bitlbee ; needs bitlbee headers
+                         bash))
     (synopsis "Discord plugin for Bitlbee")
     (description "Bitlbee-discord is a plugin for Bitlbee which provides
 access to servers running the Discord protocol.")
@@ -812,11 +786,8 @@ access to servers running the Discord protocol.")
          #:make-flags (list "CC=gcc"
                             ,(string-append "PLUGIN_VERSION=" version))
          #:tests? #f))
-      (inputs `(("glib" ,glib)
-                ("json-glib" ,json-glib)
-                ("discount" ,discount)
-                ("pidgin" ,pidgin)))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (inputs (list glib json-glib discount pidgin))
+      (native-inputs (list pkg-config))
       (synopsis "Purple plug-in to access Mattermost instant messaging")
       (description
        "Purple-Mattermost is a plug-in for Purple, the instant messaging library
@@ -873,7 +844,8 @@ used by Pidgin and Bitlbee, among others, to access
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (wrap-program (string-append bin "/hexchat")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))))))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH"))))))))))
     (synopsis "Graphical IRC client")
     (description
      "HexChat lets you connect to multiple IRC networks at once.  The main
@@ -898,10 +870,7 @@ dictionaries.  HexChat can be extended with multiple addons.")
               (patches (search-patches "ngircd-handle-zombies.patch"))))
     (build-system gnu-build-system)
     ;; Needed for the test suite.
-    (native-inputs `(("procps" ,procps)
-                     ("expect" ,expect)
-                     ("inetutils" ,inetutils)
-                     ("openssl" ,openssl)))
+    (native-inputs (list procps expect inetutils openssl))
     ;; XXX Add libident.
     (inputs `(("zlib" ,zlib)
               ("libwrap" ,tcp-wrappers)
@@ -1019,8 +988,7 @@ authentication.")
        ("tcl" ,tcl)
        ("tk" ,tk)))
     (propagated-inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)))
+     (list glib gtk+-2))
     (arguments
      `(#:configure-flags
        (list
@@ -1081,17 +1049,15 @@ many popular chat protocols.")
         (base32 "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libotr" ,libotr)
-       ("perl" ,perl)
-       ("pidgin" ,pidgin)))
+     (list glib
+           gtk+-2
+           libgcrypt
+           libgpg-error
+           libotr
+           perl
+           pidgin))
     (home-page "https://otr.cypherpunks.ca/")
     (synopsis "Off-the-Record Messaging plugin for Pidgin")
     (description "Pidgin-OTR is a plugin that adds support for OTR to the Pidgin
@@ -1140,12 +1106,12 @@ control of your private keys, no previous conversation is compromised.")
        ("googletest-source" ,(package-source googletest))
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("zlib" ,zlib)))
+     (list cyrus-sasl
+           icu4c
+           openssl
+           perl
+           python
+           zlib))
     (home-page "https://wiki.znc.in/ZNC")
     (synopsis "IRC network bouncer")
     (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}.  It can
@@ -1167,15 +1133,15 @@ simultaneously and therefore appear under the same nickname on IRC.")
         (base32 "1s2phiipq7ks8vrd93p96dzd5wgmgg8q9h2rxsnh2gg7iy06gj9c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")))
+     (list `(,glib "bin")))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("libsoup" ,libsoup)
-       ("python-gssapi" ,python-gssapi)
-       ("python-idna" ,python-idna)
-       ("python-precis-i18n" ,python-precis-i18n)
-       ("python-pygobject" ,python-pygobject)))
+     (list glib
+           glib-networking
+           libsoup
+           python-gssapi
+           python-idna
+           python-precis-i18n
+           python-pygobject))
     (synopsis "Non-blocking XMPP Module")
     (description "Python-nbxmpp is a Python library that provides a way for
 Python applications to use the XMPP network.  This library was initially a fork
@@ -1250,7 +1216,7 @@ of xmpppy.")
          "share/gajim/plugins")))
       ;; Gajim needs to use the propagated inputs of its plugins.
       (search-path-specification
-       (variable "PYTHONPATH")
+       (variable "GUIX_PYTHONPATH")
        (files
         (list
          (string-append
@@ -1296,7 +1262,7 @@ of xmpppy.")
        ("python-pygobject" ,python-pygobject)
        ("python-pyopenssl" ,python-pyopenssl)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Fully-featured XMPP client")
     (description "Gajim aims to be an easy to use and fully-featured XMPP chat
 client.  It is extensible via plugins, supports end-to-end encryption (OMEMO
@@ -1330,10 +1296,8 @@ and OpenPGP) and available in 29 languages.")
            (copy-recursively source share)
            #t))))
     (propagated-inputs
-     `(("python-axolotl" ,python-axolotl)
-       ("python-axolotl-curve25519" ,python-axolotl-curve25519)
-       ("python-cryptography" ,python-cryptography)
-       ("python-qrcode" ,python-qrcode)))
+     (list python-axolotl python-axolotl-curve25519 python-cryptography
+           python-qrcode))
     (synopsis "Gajim OMEMO plugin")
     (description "Gajim-OMEMO is a plugin that adds support for the OMEMO
 Encryption to Gajim.  OMEMO is an XMPP Extension Protocol (XEP) for secure
@@ -1368,9 +1332,7 @@ multi-client end-to-end encryption.")
            (copy-recursively source share)
            #t))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-gnupg" ,python-gnupg)
-       ("python-gpg" ,python-gpg)))
+     (list python-cryptography python-gnupg python-gpg))
     (synopsis "Gajim OpenPGP plugin")
     (description "Gajim-OpenPGP is a plugin that adds support for the OpenPGP
 Encryption to Gajim.")
@@ -1423,7 +1385,7 @@ Encryption to Gajim.")
      ;; NOTE: Commented-out lines are to be enabled in v0.3.0.
      `(("atk" ,atk)
        ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
        ("gpgme" ,gpgme)
@@ -1439,7 +1401,7 @@ Encryption to Gajim.")
        ("libgee" ,libgee)
        ("libnice" ,libnice)
        ("libsignal-protocol-c" ,libsignal-protocol-c)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ;;("libsrtp" ,libsrtp)             ;for calls support
        ("pango" ,pango)
        ("qrencode" ,qrencode)
@@ -1523,14 +1485,14 @@ default.")
                              `("PATH" ":" prefix ,path)))
                          (find-files bin ".*"))))))))
     (inputs
-     `(("libidn" ,libidn)
-       ("openssl" ,openssl)
-       ("lua" ,lua-5.2)
-       ("lua5.2-bitop" ,lua5.2-bitop)
-       ("lua5.2-expat" ,lua5.2-expat)
-       ("lua5.2-socket" ,lua5.2-socket)
-       ("lua5.2-filesystem" ,lua5.2-filesystem)
-       ("lua5.2-sec" ,lua5.2-sec)))
+     (list libidn
+           openssl
+           lua-5.2
+           lua5.2-bitop
+           lua5.2-expat
+           lua5.2-socket
+           lua5.2-filesystem
+           lua5.2-sec))
     (home-page "https://prosody.im/")
     (synopsis "Jabber (XMPP) server")
     (description "Prosody is a modern XMPP communication server.  It aims to
@@ -1624,15 +1586,9 @@ and prevent message loss.")
       (build-system gnu-build-system)
       (arguments `(#:tests? #f)) ; FIXME: tests hang, some fail.
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("check" ,check)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool check pkg-config))
       (inputs
-       `(("libsodium" ,libsodium)
-         ("opus" ,opus)
-         ("libvpx" ,libvpx)))
+       (list libsodium opus libvpx))
       (synopsis "Library for the Tox encrypted messenger protocol")
       (description
        "C library implementation of the Tox encrypted messenger protocol.")
@@ -1661,11 +1617,9 @@ and prevent message loss.")
                      ; for now.
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libsodium" ,libsodium)
-       ("opus" ,opus)
-       ("libvpx" ,libvpx)))
+     (list libsodium opus libvpx))
     (home-page "https://tox.chat")
     (synopsis "Library for the Tox encrypted messenger protocol")
     (description
@@ -1697,8 +1651,7 @@ messenger protocol.")
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (substitute* "../source/src/xlib/gtk.c"
                          (("libgtk-3.so")
-                         (string-append (assoc-ref inputs "gtk+")
-                                        "/lib/libgtk-3.so")))))
+                          (search-input-file inputs "/lib/libgtk-3.so")))))
         (add-after 'install 'wrap-program
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (wrap-program (string-append (assoc-ref outputs "out")
@@ -1721,8 +1674,7 @@ messenger protocol.")
       ("openal" ,openal)
       ("v4l-utils" ,v4l-utils)))
    (native-inputs
-    `(("check" ,check)
-      ("pkg-config" ,pkg-config)))
+    (list check pkg-config))
    (synopsis "Lightweight Tox client")
    (description
     "uTox is a lightweight Tox client.  Tox is a distributed and secure
@@ -1770,22 +1722,22 @@ instant messenger with audio and video chat capabilities.")
                    ,(list (string-append (assoc-ref inputs "qtsvg")
                                          "/lib/qt5/plugins/"))))))))))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("filteraudio" ,filteraudio)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("libsodium" ,libsodium)
-       ("c-toxcore" ,c-toxcore)
-       ("libvpx" ,libvpx)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("libx11" ,libx11)
-       ("libexif" ,libexif)
-       ("sqlite" ,sqlite)
-       ("openal" ,openal)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("sqlcipher" ,sqlcipher)))
+     (list ffmpeg
+           filteraudio
+           glib
+           gtk+-2
+           libsodium
+           c-toxcore
+           libvpx
+           libxscrnsaver
+           libx11
+           libexif
+           sqlite
+           openal
+           qrencode
+           qtbase-5
+           qtsvg
+           sqlcipher))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qmake" ,qttools)))
@@ -1810,7 +1762,7 @@ connect with friends and family without anyone else listening in.")
          "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://ytalk.ourproject.org")
     (synopsis "Multi-user chat program")
     (description "Ytalk is a replacement for the BSD talk program.  Its main
@@ -1832,11 +1784,9 @@ with several different talk daemons at the same time.")
         (base32 "1jgrd07qr9jvbb5hcmhrqz4w4lvwc51m30jls1fgxf1f5az6455f"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libidn" ,libidn)
-       ("gnutls" ,gnutls)
-       ("zlib" ,zlib)))
+     (list libidn gnutls zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Portable high-level Jabber/XMPP library for C++")
     (description
      "gloox is a full-featured Jabber/XMPP client library,
@@ -1861,10 +1811,9 @@ into existing applications.")
          "0vsjclglkwgbyd9m5ad642fyysxw2x725nhq4r2m9pvqaq6s5yf2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("perl-curses" ,perl-curses)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list perl-curses perl-io-socket-ssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1936,9 +1885,7 @@ for @uref{https://torproject.org,tor} router) and many more.")
                 "14q89fxap05ajkfn20rnhc6b1h4i3i2adyr7y6hs5zqwb2lcmc1p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("netcat" ,netcat)
-       ("procps" ,procps)))
+     (list perl netcat procps))
     (arguments
      `(#:make-flags
        (list "CC=gcc"
@@ -1990,10 +1937,9 @@ including psyced.")
        ("krb5" ,mit-krb5)
        ("libidn" ,libidn)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("check" ,check)
-       ("glib" ,glib "bin")             ; gtester
-       ("gtk-doc" ,gtk-doc)))
+     (list pkg-config check
+           `(,glib "bin") ; gtester
+           gtk-doc))
     (home-page "https://mcabber.com/")
     (description
      "Loudmouth is a lightweight and easy-to-use C library for programming
@@ -2024,14 +1970,14 @@ protocol allows.")
         "--enable-enchant"
         "--enable-aspell")))
     (inputs
-     `(("gpgme" ,gpgme)
-       ("libotr" ,libotr)
-       ("aspell" ,aspell)
-       ("enchant" ,enchant-1.6)
-       ("libidn" ,libidn)
-       ("glib" ,glib)
-       ("ncurses" ,ncurses)
-       ("loudmouth" ,loudmouth)))
+     (list gpgme
+           libotr
+           aspell
+           enchant-1.6
+           libidn
+           glib
+           ncurses
+           loudmouth))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -2058,7 +2004,9 @@ support, and more.")
                 "1rmrn7a1bb7vm26yaklrvx008a9qhwc32s57dwrlf40lv9gffwny"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "CFLAGS=-fcommon")
+       #:phases
        (modify-phases %standard-phases
          ;; For 'system' commands in Scheme code.
          (add-after 'install 'wrap-program
@@ -2074,17 +2022,14 @@ support, and more.")
                          (list bash coreutils less))))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
+     (list autoconf automake pkg-config texinfo))
     (inputs
-     `(("bash" ,bash)
-       ("glib" ,glib)
-       ("guile" ,guile-2.0)
-       ("less" ,less)
-       ("loudmouth" ,loudmouth)
-       ("readline" ,readline)))
+     (list bash
+           glib
+           guile-2.0
+           less
+           loudmouth
+           readline))
     (synopsis "Extensible console-based Jabber client")
     (description
      "GNU Freetalk is a command-line Jabber/XMPP chat client.  It notably uses
@@ -2118,13 +2063,9 @@ is also scriptable and extensible via Guile.")
                (("'\\^xmpp_'") "'.'"))
              #t)))))
     (inputs
-     `(("expat" ,expat)
-       ("openssl" ,openssl)))
+     (list expat openssl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "C library for writing XMPP clients")
     (description "Libmesode is a fork of libstrophe for use with Profanity
 XMPP Client.  In particular, libmesode provides extra TLS functionality such as
@@ -2157,13 +2098,9 @@ manual SSL certificate verification.")
                (("'\\^xmpp_'") "'.'"))
              #t)))))
     (inputs
-     `(("expat" ,expat)
-       ("openssl" ,openssl)))
+     (list expat openssl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "C library for writing XMPP clients")
     (description "Libstrophe is a minimal XMPP library written in C.  It has
 almost no external dependencies, only an XML parsing library (expat or libxml
@@ -2199,12 +2136,12 @@ are both supported).")
         "--enable-omemo"
         "--enable-icons-and-clipboard")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("cmocka" ,cmocka)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           autoconf-archive
+           automake
+           cmocka
+           libtool
+           pkg-config))
     (inputs
      `(("curl" ,curl)
        ("expat" ,expat)
@@ -2242,7 +2179,7 @@ using ncurses and libmesode, inspired by Irssi.")
          "0b9wa0h3xc31wpqlvgxgnvqp5wgx3kwsf5s9432m5cj8ycx6zcmv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      `(#:configure-flags
        (list (string-append "--libdir="
@@ -2294,21 +2231,21 @@ building the IRC clients and bots.")
              (setenv "ENABLE_PYTHON" "1")
              #t)))))
     (inputs
-     `(("c-toxcore" ,c-toxcore)
-       ("curl" ,curl)
-       ("freealut" ,freealut)
-       ("gdk-pixbuf" ,gdk-pixbuf)       ; for libnotify.pc
-       ("libconfig" ,libconfig)
-       ("libnotify" ,libnotify)
-       ("libpng" ,libpng)
-       ("libvpx" ,libvpx)
-       ("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("openal" ,openal)
-       ("python" ,python)
-       ("qrencode" ,qrencode)))
+     (list c-toxcore
+           curl
+           freealut
+           gdk-pixbuf ; for libnotify.pc
+           libconfig
+           libnotify
+           libpng
+           libvpx
+           libx11
+           ncurses
+           openal
+           python
+           qrencode))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/JFreegman/toxic")
     (synopsis "Tox chat client using ncurses")
     (description "Toxic is a console-based instant messaging client, using
@@ -2331,8 +2268,7 @@ notifications, and Python scripting support.")
         (base32 "0gkwr3yw6k2m0j8cc085b5p2q788rf5nhp1p5hc5d55pc7mci2qs"))))
     (build-system cmake-build-system)
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)))
+     (list qtbase-5 qtmultimedia))
     (arguments
      `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")
        #:tests? #f))                    ; no tests
@@ -2372,16 +2308,15 @@ QMatrixClient project.")
              #t)))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("json-modern-cxx" ,json-modern-cxx)
-       ("libolm" ,libolm)
-       ("libsodium" ,libsodium)
-       ("openssl" ,openssl)
-       ("spdlog" ,spdlog)
-       ("zlib" ,zlib)))
+     (list boost
+           json-modern-cxx
+           libolm
+           libsodium
+           openssl
+           spdlog
+           zlib))
     (native-inputs
-     `(("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)))
+     (list googletest pkg-config))
     (home-page "https://github.com/Nheko-Reborn/mtxclient")
     (synopsis "Client API library for the Matrix protocol")
     (description "@code{mtxclient} is a C++ library that implements client API
@@ -2500,15 +2435,15 @@ notification, emojis, E2E encryption, and voip calls.")
         (base32 "1q9ddz4rs02a0w3lwrsjnh59khv38cq9f0kv09vnwvazvayn87ck"))))
     (build-system qt-build-system)
     (inputs
-     `(("libqmatrixclient" ,libqmatrixclient)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("xdg-utils" ,xdg-utils)))
+     (list libqmatrixclient
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qttools
+           xdg-utils))
     (arguments
      `(#:tests? #f))                    ; no tests
     (home-page "https://matrix.org/docs/projects/client/quaternion.html")
@@ -2545,19 +2480,18 @@ QMatrixClient project.")
              (when tests?
                (invoke "pytest" "hangups")))))))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-appdirs" ,python-appdirs)
-       ("python-async-timeout" ,python-async-timeout)
-       ("python-configargparse" ,python-configargparse)
-       ("python-mechanicalsoup" ,python-mechanicalsoup)
-       ("python-protobuf" ,python-protobuf-3.6)
-       ("python-readlike" ,python-readlike)
-       ("python-reparser" ,python-reparser)
-       ("python-requests" ,python-requests)
-       ("python-urwid" ,python-urwid)))
+     (list python-aiohttp
+           python-appdirs
+           python-async-timeout
+           python-configargparse
+           python-mechanicalsoup
+           python-protobuf-3.6
+           python-readlike
+           python-reparser
+           python-requests
+           python-urwid))
     (native-inputs
-     `(("python-httpretty" ,python-httpretty)
-       ("python-pytest" ,python-pytest)))
+     (list python-httpretty python-pytest))
     (home-page "https://hangups.readthedocs.io/")
     (synopsis "Instant messaging client for Google Hangouts")
     (description
@@ -2608,12 +2542,12 @@ messaging that aren’t available to clients that connect over XMPP.")
        ("gettext" ,gettext-minimal)
        ("which" ,which)))
     (inputs
-     `(("pidgin" ,pidgin)
-       ("libgcrypt" ,libgcrypt)
-       ("libwebp" ,libwebp)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("zlib" ,zlib)))
+     (list pidgin
+           libgcrypt
+           libwebp
+           glib
+           gtk+-2
+           zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2686,11 +2620,7 @@ replacement.")
                  (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}/mtproto.cpp") ""))
                #t)))))
       (native-inputs
-       `(("gperf" ,gperf)
-         ("openssl" ,openssl)
-         ("zlib" ,zlib)
-         ("php" ,php)
-         ("doxygen" ,doxygen)))
+       (list gperf openssl zlib php doxygen))
       (synopsis "Cross-platform library for building Telegram clients")
       (description "Tdlib is a cross-platform library for creating custom
 Telegram clients following the official Telegram API.  It can be easily used
@@ -2728,8 +2658,7 @@ support for high performance Telegram Bot creation.")
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("modem-manager" ,modem-manager)
-       ("pidgin" ,pidgin)))
+     (list modem-manager pidgin))
     (synopsis "Libpurple plugin for SMS via ModemManager")
     (description "Plugin for libpurple to allow sending SMS using ModemManager.")
     (home-page "https://source.puri.sm/Librem5/purple-mm-sms")
@@ -2765,17 +2694,16 @@ support for high performance Telegram Bot creation.")
                                           "/lib/purple-2\n")))
                         (setenv "CC" "gcc")))))
        #:parallel-tests? #f))
-    (native-inputs `(("cmocka" ,cmocka)
-                     ("pkg-config" ,pkg-config)))
-    (inputs `(("axc" ,axc)
-              ("glib" ,glib)
-              ("libgcrypt" ,libgcrypt)
-              ("libomemo" ,libomemo)
-              ("libsignal-protocol-c" ,libsignal-protocol-c)
-              ("libxml2" ,libxml2)
-              ("minixml" ,minixml)
-              ("pidgin" ,pidgin)
-              ("sqlite" ,sqlite)))
+    (native-inputs (list cmocka pkg-config))
+    (inputs (list axc
+                  glib
+                  libgcrypt
+                  libomemo
+                  libsignal-protocol-c
+                  libxml2
+                  minixml
+                  pidgin
+                  sqlite))
     (synopsis "OMEMO Encryption for libpurple")
     (description "Purple-lurch plugin adds end-to-end encryption support
 through the Double Ratchet (Axolotl) algorithm, to @code{libpurple}
@@ -2808,12 +2736,9 @@ asynchronicity.")
           (lambda _ (chdir "cpp"))))))
    (build-system cmake-build-system)
    (native-inputs
-    `(("googletest" ,googletest)
-      ("pkg-config" ,pkg-config)))
+    (list googletest pkg-config))
    (inputs
-    `(("boost" ,boost)
-      ("protobuf" ,protobuf)
-      ("icu4c" ,icu4c)))
+    (list boost protobuf icu4c))
    (synopsis "Library for parsing and using phone numbers")
    (description
     "This package provides a C++ library for parsing, formatting, and
@@ -2849,18 +2774,17 @@ validating international phone numbers.")
       ("glib:bin" ,glib "bin")
       ("pkg-config" ,pkg-config)))
    (inputs
-    `(("feedbackd" ,feedbackd)
-      ("folks" ,folks)
-      ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-      ("libgcrypt" ,libgcrypt)
-      ("libgee" ,libgee)
-      ("libhandy" ,libhandy-0.0)
-      ("pidgin" ,pidgin)
-      ("purple-mm-sms" ,purple-mm-sms)
-      ("sqlite" ,sqlite)))
+    (list feedbackd
+          folks
+          gsettings-desktop-schemas
+          libgcrypt
+          libgee
+          libhandy-0.0
+          pidgin
+          purple-mm-sms
+          sqlite))
    (propagated-inputs
-    `(("adwaita-icon-theme" ,adwaita-icon-theme)
-      ("evolution-data-server" ,evolution-data-server)))
+    (list adwaita-icon-theme evolution-data-server))
    (synopsis "Mobile client for XMPP and SMS messaging")
    (description "Chatty is a chat program for XMPP and SMS.  It works on mobile
 as well as on desktop platforms.  It's based on libpurple and ModemManager.")
@@ -2881,7 +2805,7 @@ as well as on desktop platforms.  It's based on libpurple and ModemManager.")
          "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
     (build-system cmake-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "Message broker")
     (description "This package provides Eclipse Mosquitto, a message broker
 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.  Mosquitto
@@ -2927,11 +2851,9 @@ as phones, embedded computers or microcontrollers.")
                   "\"../build"))
                #t)))))
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtwebchannel" ,qtwebchannel)))
+       (list qtbase-5 qtdeclarative qtwebchannel))
       (propagated-inputs
-       `(("qtwebengine" ,qtwebengine)))
+       (list qtwebengine))
       (home-page "https://movim.eu/")
       (synopsis "Desktop Application for Movim")
       (description
@@ -3094,27 +3016,19 @@ designed for experienced users.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'cd-to-zulip-dir
-           (lambda _
-             (chdir "zulip")
-             #t))
+           (lambda _ (chdir "zulip")))
          (replace 'check
            (lambda* (#:key inputs outputs tests? #:allow-other-keys)
              (let ((test-zulip "../tools/test-zulip"))
                (when tests?
                  (add-installed-pythonpath inputs outputs)
-                 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
                  (patch-shebang test-zulip)
-                 (invoke test-zulip))
-               #t))))))
+                 (invoke test-zulip))))))))
     (propagated-inputs
-     `(("python-matrix-client" ,python-matrix-client)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-matrix-client python-pyopenssl python-requests
+           python-six))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-distro" ,python-distro)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-distro python-pytest))
     (home-page "https://github.com/zulip/python-zulip-api")
     (synopsis "Zulip's API Python bindings")
     (description
@@ -3156,17 +3070,15 @@ designed for experienced users.")
                (invoke "pytest"))
              #t)))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-urwid" ,python-urwid)
-       ("python-urwid-readline" ,python-urwid-readline)
-       ("python-zulip" ,python-zulip)))
+     (list python-beautifulsoup4
+           python-lxml
+           python-mypy-extensions
+           python-urwid
+           python-urwid-readline
+           python-zulip))
     (native-inputs
-     `(("python-distro" ,python-distro)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-distro python-pytest python-pytest-cov
+           python-pytest-mock))
     (home-page "https://github.com/zulip/zulip-terminal")
     (synopsis "Zulip's official terminal client")
     (description "This package contains Zulip's official terminal client.")
@@ -3218,10 +3130,9 @@ API.  Mattermost is not required.")
         (string-append "CC=" ,(cc-for-target))
         (string-append "PREFIX=" %output))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("universal-ctags" ,universal-ctags)))
+     (list pkg-config universal-ctags))
     (inputs
-     `(("libressl" ,libressl)))
+     (list libressl))
     (home-page "https://code.causal.agency/june/pounce")
     (synopsis "Simple multi-client TLS-only IRC bouncer")
     (description
@@ -3275,7 +3186,7 @@ a number of clients.")
                          "import sys\n"
                          (map (lambda (path)
                                 (string-append "sys.path.append('" path "')\n"))
-                              (string-split (getenv "PYTHONPATH") #\:)))))
+                              (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
                ;; Install script.
                (mkdir-p weechat-python)
                (copy-file "main.py"
@@ -3285,12 +3196,10 @@ a number of clients.")
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-matrix-nio" ,python-matrix-nio)
-       ("python-pygments" ,python-pygments)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-webcolors" ,python-webcolors)))
+     (list python-matrix-nio python-pygments python-pyopenssl
+           python-webcolors))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/poljar/weechat-matrix")
     (synopsis "Weechat Matrix protocol script")
     (description "@code{weechat-matrix} is a Python plugin for Weechat that lets
@@ -3325,7 +3234,7 @@ Weechat communicate over the Matrix protocol.")
                        all
                        (map (lambda (path)
                               (string-append "sys.path.append('" path "')\n"))
-                            (string-split (getenv "PYTHONPATH") #\:)))))
+                            (string-split (getenv "GUIX_PYTHONPATH") #\:)))))
              ;; Install script.
              (install-file "wee_slack.py"
                            (string-append (assoc-ref outputs "out")
@@ -3335,9 +3244,9 @@ Weechat communicate over the Matrix protocol.")
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-websocket-client" ,python-websocket-client)))
+     (list python-websocket-client))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/wee-slack/wee-slack")
     (synopsis "Weechat Slack script")
     (description "@code{weechat-wee-slack} is a WeeChat native client for
diff --git a/gnu/packages/microcom.scm b/gnu/packages/microcom.scm
index 36d6bf21b7..265d09e6bc 100644
--- a/gnu/packages/microcom.scm
+++ b/gnu/packages/microcom.scm
@@ -39,9 +39,8 @@
               (sha256
                (base32 "060q42lf1bx403smxm97cz8r4ksq942mq5z708vavy6syv3fkap4"))))
     (build-system gnu-build-system)
-    (inputs `(("readline" ,readline)))
-    (native-inputs `(("automake" ,automake)
-                     ("autoconf" ,autoconf)))
+    (inputs (list readline))
+    (native-inputs (list automake autoconf))
     (home-page  "https://git.pengutronix.de/?p=tools/microcom.git")
     (synopsis "Minimalistic serial line terminal program")
  (description "Microcom is a minimalistic terminal program for accessing
diff --git a/gnu/packages/minetest.scm b/gnu/packages/minetest.scm
index 7959b42c3f..f48addf247 100644
--- a/gnu/packages/minetest.scm
+++ b/gnu/packages/minetest.scm
@@ -116,7 +116,7 @@
             (variable "MINETEST_MOD_PATH")
             (files '("share/minetest/mods")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("coreutils" ,coreutils)
        ("curl" ,curl)
@@ -136,7 +136,7 @@
        ("openal" ,openal)
        ("sqlite" ,sqlite)))
     (propagated-inputs
-     `(("minetest-data" ,minetest-data)))
+     (list minetest-data))
     (synopsis "Infinite-world block sandbox game")
     (description
      "Minetest is a sandbox construction game.  Players can create and destroy
@@ -226,7 +226,7 @@ as swords and tools made of different materials.  It also adds copper rails.")
     (propagated-inputs
      ;; basic_materials:silver_wire cannot be crafted without
      ;; moreores:silver_ingot.
-     `(("minetest-moreores" ,minetest-moreores)))
+     (list minetest-moreores))
     (home-page (minetest-topic 21000))
     (synopsis "Some \"basic\" materials and items for other Minetest mods to use")
     (description
@@ -253,7 +253,7 @@ like steel bars and chains, wire, plastic strips and sheets, and more.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-unifieddyes" ,minetest-unifieddyes)))
+     (list minetest-unifieddyes))
     (home-page (minetest-topic 2411))
     (synopsis "Painted wood in Minetest")
     (description
@@ -311,8 +311,7 @@ special items, intending to make an interesting adventure.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)
-       ("minetest-unifieddyes" ,minetest-unifieddyes)))
+     (list minetest-basic-materials minetest-unifieddyes))
     (home-page (minetest-topic 2041))
     (synopsis "Home decor mod for Minetest")
     (description
@@ -431,7 +430,7 @@ add some mobs, a mod like e.g. @code{mobs_animal} provided by the
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-mobs" ,minetest-mobs)))
+     (list minetest-mobs))
     (home-page "https://notabug.org/TenPlus1/mobs_animal")
     (synopsis "Add animals to Minetest")
     (description
@@ -457,7 +456,7 @@ bunnies, chickens, cows, kittens, rats, sheep, warthogs, penguins and pandas.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-basic-materials))
     (home-page (minetest-topic 2155))
     (synopsis "Pipes, item-transport tubes and related devices for Minetest")
     (description
@@ -489,8 +488,7 @@ breakers simulate a player punching a node.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-pipeworks" ,minetest-pipeworks)
-       ("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-pipeworks minetest-basic-materials))
     (home-page (minetest-topic 2538))
     (synopsis "Machinery and automation for Minetest")
     (description
@@ -554,7 +552,7 @@ arrow and bow, but @code{minetest-throwing-arrows} does.")
          (file-name (git-file-name name version))))
       (build-system minetest-mod-build-system)
       (propagated-inputs
-       `(("minetest-throwing" ,minetest-throwing)))
+       (list minetest-throwing))
       (home-page (minetest-topic 16365))
       (synopsis "Arrows and bows for Minetest")
       (description
@@ -603,7 +601,7 @@ to and from the file system.")
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-basic-materials" ,minetest-basic-materials)))
+     (list minetest-basic-materials))
     (home-page (minetest-topic 2178))
     (synopsis
      "Unified Dyes expands the standard dye set of Minetest to up to 256 colours")
@@ -707,7 +705,7 @@ stopping before signals.
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
     (propagated-inputs
-     `(("minetest-advtrains" ,minetest-advtrains)))
+     (list minetest-advtrains))
     (home-page
      "http://advtrains.de/wiki/doku.php?id=usage:trains:basic_trains")
     (synopsis "Collection of basic trains for the Advanced Trains mod")
diff --git a/gnu/packages/moe.scm b/gnu/packages/moe.scm
index 6d16d1a7cc..819a6298e3 100644
--- a/gnu/packages/moe.scm
+++ b/gnu/packages/moe.scm
@@ -38,8 +38,8 @@
        (base32
         "1yg2ln2mm6gzv61cxnv60dw1cr5bl2dhkjy685jrd3aabb7wpyqf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
-    (inputs `(("ncurses" ,ncurses)))
+    (native-inputs (list lzip))
+    (inputs (list ncurses))
     (home-page "https://www.gnu.org/software/moe/moe.html")
     (synopsis "Modeless, multiple-buffer, user-friendly 8-bit text editor")
     (description
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index f71daaee8a..b3e20760e2 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -56,6 +56,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rrdtool)
@@ -86,7 +87,7 @@
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("zlib" ,zlib)
        ("libpng-apng" ,libpng)
@@ -181,8 +182,7 @@ etc. via a Web interface.  Features include:
              (string-append "--with-libpcre="
                             (assoc-ref %build-inputs "pcre")))))
     (inputs
-     `(("libiconv" ,libiconv)
-       ("pcre" ,pcre)))
+     (list libiconv pcre))
     (home-page "https://www.zabbix.com/")
     (synopsis "Distributed monitoring solution (client-side agent)")
     (description "This package provides a distributed monitoring
@@ -235,14 +235,14 @@ solution (client-side agent)")
                                (assoc-ref %build-inputs "zlib"))
                 ,flags))))
     (inputs
-     `(("curl" ,curl)
-       ("libevent" ,libevent)
-       ("gnutls" ,gnutls)
-       ("postgresql" ,postgresql)
-       ("zlib" ,zlib)
-       ("net-snmp" ,net-snmp)
-       ("curl" ,curl)
-       ,@(package-inputs zabbix-agentd)))
+     (modify-inputs (package-inputs zabbix-agentd)
+       (prepend curl
+                libevent
+                gnutls
+                postgresql
+                zlib
+                net-snmp
+                curl)))
     (synopsis "Distributed monitoring solution (server-side)")
     (description "This package provides a distributed monitoring
 solution (server-side)")))
@@ -313,11 +313,10 @@ through a text-based interface.")
                           (invoke "python" "setup.py" "nosetests")
                           (format #t "test suite not run~")))))))
     (native-inputs
-     `(;; For tests.
-       ("python-httpretty" ,python-httpretty)
-       ("python-nose" ,python-nose)))
+     (list ;; For tests.
+           python-httpretty python-nose))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (synopsis "Python interface to the Zabbix API")
     (description
      "@code{pyzabbix} is a Python module for working with the Zabbix API.")
@@ -337,8 +336,7 @@ through a text-based interface.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no tests
     (inputs
-     `(("libpcap" ,libpcap)
-       ("zlib" ,zlib)))
+     (list libpcap zlib))
     (home-page "https://unix4lyfe.org/darkstat/")
     (synopsis "Network statistics gatherer")
     (description
@@ -358,15 +356,16 @@ HTTP.  Features:
 (define-public python-whisper
   (package
     (name "python-whisper")
-    (version "1.0.2")
+    (version "1.1.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "whisper" version))
        (sha256
         (base32
-         "1v1bi3fl1i6p4z4ki692bykrkw6907dn3mfq0151f70lvi3zpns3"))))
+         "1bk29w09zcpsv8hp0g0al7nwrxa07z0ycls3mbh83wfavk83aprl"))))
     (build-system python-build-system)
+    (native-inputs (list python-six))
     (home-page "http://graphiteapp.org/")
     (synopsis "Fixed size round-robin style database for Graphite")
     (description "Whisper is one of three components within the Graphite
@@ -396,10 +395,7 @@ historical data.")
          (add-after 'unpack 'do-not-install-to-/opt
            (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
     (propagated-inputs
-     `(("python-cachetools" ,python-cachetools)
-       ("python-txamqp" ,python-txamqp)
-       ("python-urllib3" ,python-urllib3)
-       ("python-whisper" ,python-whisper)))
+     (list python-cachetools python-txamqp python-urllib3 python-whisper))
     (home-page "http://graphiteapp.org/")
     (synopsis "Backend data caching and persistence daemon for Graphite")
     (description "Carbon is a backend data caching and persistence daemon for
@@ -435,15 +431,15 @@ and persisting them to disk using the Whisper time-series library.")
          (add-after 'unpack 'do-not-install-to-/opt
            (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
     (propagated-inputs
-     `(("python-cairocffi" ,python-cairocffi)
-       ("python-pytz" ,python-pytz)
-       ("python-whisper" ,python-whisper)
-       ("python-django" ,python-django-2.2)
-       ("python-django-tagging" ,python-django-tagging)
-       ("python-scandir" ,python-scandir)
-       ("python-urllib3" ,python-urllib3)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-txamqp" ,python-txamqp)))
+     (list python-cairocffi
+           python-pytz
+           python-whisper
+           python-django-2.2
+           python-django-tagging
+           python-scandir
+           python-urllib3
+           python-pyparsing
+           python-txamqp))
     (home-page "https://graphiteapp.org/")
     (synopsis "Scalable realtime graphing system")
     (description "Graphite is a scalable real-time graphing system that does
@@ -466,7 +462,7 @@ demand.")
      '(;; No included tests.
        #:tests? #f))
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)))
+     (list python-twisted))
     (home-page
      "https://github.com/prometheus/client_python")
     (synopsis "Python client for the Prometheus monitoring system")
@@ -535,12 +531,9 @@ written in Go with pluggable metric collectors.")
                                             "/lib/udev/rules.d"))
                #t)))))
       (inputs
-       `(("python-prometheus-client" ,python-prometheus-client)
-         ("python-pyudev" ,python-pyudev)))
+       (list python-prometheus-client python-pyudev))
       (native-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-pytest-mock" ,python-pytest-mock)
-         ("python-pytest-runner" ,python-pytest-runner)))
+       (list python-pytest python-pytest-mock python-pytest-runner))
       (home-page "https://github.com/yrro/temper-exporter")
       (synopsis "Prometheus exporter for PCSensor TEMPer sensor devices")
       (description
@@ -563,10 +556,7 @@ devices.")
                 "1yz65jsbgdx4cmy16x24wz5di352lvyi7fp6jm90bhgl1vpzxlsx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)))
+     (list autoconf automake gettext-minimal libtool))
     (synopsis "File system monitor")
     (description "This package provides a file system monitor.")
     (home-page "https://github.com/emcrisostomo/fswatch")
@@ -595,14 +585,9 @@ devices.")
                       ;; Required because of patched sources.
                       (invoke "autoreconf" "-vfi"))))))
     (inputs
-     `(("rrdtool" ,rrdtool)
-       ("curl" ,curl)
-       ("libyajl" ,libyajl)))
+     (list rrdtool curl libyajl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://collectd.org/")
     (synopsis "Collect system and application performance metrics periodically")
     (description
@@ -628,7 +613,7 @@ future system load (i.e., capacity planning).")
                (base32
                 "0jw6yij8va0f292g4xkf9lp9sxkzfgv67ajw49g3vq42q47ld7cv"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (arguments '(#:tests? #f)) ;; No included tests.
     (home-page "http://www.maier-komor.de/hostscope.html")
     (properties `((release-monitoring-url . ,home-page)))
diff --git a/gnu/packages/mono.scm b/gnu/packages/mono.scm
index 9e5b428969..6a7afbafbf 100644
--- a/gnu/packages/mono.scm
+++ b/gnu/packages/mono.scm
@@ -147,7 +147,7 @@ Java.")
          "1vr5l09i5i91n9qzky7ab9wwvgdidvrbw26y8llip0z4qdf4w7mq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glib" ,glib)
        ("cairo" ,cairo)
diff --git a/gnu/packages/moreutils.scm b/gnu/packages/moreutils.scm
index 8a31a0f676..8738418a21 100644
--- a/gnu/packages/moreutils.scm
+++ b/gnu/packages/moreutils.scm
@@ -43,14 +43,9 @@
     (build-system gnu-build-system)
     ;; For building the manual pages.
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.4)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list docbook-xml-4.4 docbook-xsl libxml2 libxslt))
     (inputs
-     `(("perl" ,perl)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-time-duration" ,perl-time-duration)))
+     (list perl perl-timedate perl-time-duration))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 3555958f2a..ef5db3ebd2 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -154,7 +155,7 @@ This package contains the library.")
                            Libs: -L${libdir} -lid3tag -lz~@
                            Cflags: -I${includedir}~%"
                           out ,version)))))))))
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (synopsis "Library for reading ID3 tags")
    (description
     "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various
@@ -179,7 +180,7 @@ versions of ID3v2.")
             (patches (search-patches "id3lib-CVE-2007-4460.patch"
                                      "id3lib-UTF16-writing-bug.patch"))))
    (build-system gnu-build-system)
-   (inputs `(("zlib" ,zlib)))
+   (inputs (list zlib))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -234,7 +235,7 @@ a highly stable and efficient implementation.")
                                          (assoc-ref inputs "zlib")
                                          "/lib -lz\")")))
                        #t)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://taglib.org")
     (synopsis "Library to access audio file meta-data")
     (description
@@ -296,10 +297,9 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
              #t)))
         #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("ncurses" ,ncurses)))
+     (list gtk+-2 ncurses))
     (home-page "https://www.ibiblio.org/mp3info/")
     (synopsis "MP3 technical info viewer and ID3 1.x tag editor")
     (description
@@ -322,15 +322,15 @@ pre-defined or user-specifiable output format.")
              (base32
               "1p1mn2hsmj5cp40fnc8g1yfvk72p8pjxi866gjdkgjsqrr7xdvih"))))
    (build-system gnu-build-system)
-   (inputs `(("flac" ,flac)
-             ("libid3tag" ,libid3tag)
-             ("libmad" ,libmad)
-             ("libogg" ,libogg)
-             ("libltdl" ,libltdl)
-             ("libvorbis" ,libvorbis)
-             ("pcre" ,pcre)))
+   (inputs (list flac
+                 libid3tag
+                 libmad
+                 libogg
+                 libltdl
+                 libvorbis
+                 pcre))
    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
    (synopsis "Library for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
@@ -356,8 +356,8 @@ This package contains the library.")
              (base32
               "1aiv20gypb6r84qabz8gblk8vi42cg3x333vk2pi3fyqvl82phry"))))
    (build-system gnu-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)))
-   (inputs `(("libmp3splt" ,libmp3splt)))
+   (native-inputs (list pkg-config))
+   (inputs (list libmp3splt))
    (synopsis "Utility for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
@@ -387,10 +387,9 @@ This package contains the binary.")
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--with-default-audio=pulse")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (home-page "https://www.mpg123.org/")
     (synopsis "Console MP3 player and decoder library")
     (description
@@ -412,7 +411,8 @@ command-line tool as well as a C library, libmpg123.")
               (base32
                "0ki8mh76bbmdh77qsiw682dvi8y468yhbdabqwg05igmwc1wqvq5"))
              (patches
-              (search-patches "mpg321-CVE-2019-14247.patch"))))
+              (search-patches "mpg321-CVE-2019-14247.patch"
+                              "mpg321-gcc-10.patch"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-alsa")))
     (inputs
@@ -481,18 +481,11 @@ use with CD-recording software).")
             (patches (search-patches "ripperx-missing-file.patch"))))
    (build-system gnu-build-system)
    (propagated-inputs
-    `(("gs-fonts" ,gs-fonts)
-      ("cdparanoia" ,cdparanoia)
-      ("flac" ,flac)
-      ("lame" ,lame)
-      ("vorbis-tools" ,vorbis-tools)))
+    (list font-ghostscript cdparanoia flac lame vorbis-tools))
    (inputs
-    `(("glib" ,glib)
-      ("gtk+" ,gtk+-2)
-      ("id3lib" ,id3lib)
-      ("taglib" ,taglib)))
+    (list glib gtk+-2 id3lib taglib))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (synopsis "GTK program to rip and encode CD audio tracks")
    (description
     "RipperX is a GTK program to rip CD audio tracks and encode them to the
@@ -544,7 +537,9 @@ format.")
            (lambda _
              (substitute* "Makefile"
                (("CC[[:blank:]]*:=.*")
-                "CC := gcc\n"))))
+                "CC := gcc\n"))
+
+             (setenv "CFLAGS" "-fcommon -g")))  ;allow compilation with GCC 10
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -577,10 +572,7 @@ compression format (.mpc files).")
     (arguments
      `(#:tests? #f))    ; the required test data contains copyrighted material
     (propagated-inputs
-     `(("python-grako" ,python-grako)
-       ("python-magic" ,python-magic)
-       ("python-pathlib" ,python-pathlib)
-       ("python-six" ,python-six)))
+     (list python-grako python-magic python-pathlib python-six))
     (synopsis "MP3 tag ID3 metadata editor")
     (description "eyeD3 is a Python tool for working with audio files,
 specifically mp3 files containing ID3 metadata (i.e. song info).  It provides a
@@ -611,8 +603,7 @@ command-line tool.")
     (inputs
      ;; requires one of FFmpeg (prefered), FFTW3 or vDSP
      ;; use the same ffmpeg version as for acoustid-fingerprinter
-     `(("ffmpeg" ,ffmpeg)
-       ("boost" ,boost)))
+     (list ffmpeg boost))
     (home-page "https://acoustid.org/chromaprint")
     (synopsis "Audio fingerprinting library")
     (description "Chromaprint is a library for calculating audio
@@ -633,8 +624,7 @@ is to provide an accurate identifier for record tracks.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; there is no "audiofile" fixture
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/sampsyo/audioread")
     (synopsis "Decode audio files using whichever backend is available")
     (description
@@ -669,10 +659,9 @@ FFmpeg, etc.")
                 (string-append "'" (assoc-ref inputs "chromaprint")
                                "/bin/fpcalc'")))
              #t)))))
-    (inputs `(("chromaprint" ,chromaprint)))
+    (inputs (list chromaprint))
     (propagated-inputs
-     `(("python-audioread" ,python-audioread)
-       ("python-requests" ,python-requests)))
+     (list python-audioread python-requests))
     (home-page "https://github.com/beetbox/pyacoustid")
     (synopsis "Bindings for Chromaprint acoustic fingerprinting")
     (description
@@ -705,10 +694,9 @@ fingerprinting library and the Acoustid API.")
            (lambda _
              (setenv "PYTAGLIB_CYTHONIZE" "1"))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("taglib" ,taglib)))
+     (list taglib))
     (home-page
      "https://github.com/supermihi/pytaglib")
     (synopsis
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index e99dd49adc..596931500c 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
-;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2020, 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Noah Evans <noah@nevans.me>
@@ -88,13 +88,11 @@
                 "0z979qcjc0dqmpn3q9j174a29akx3zmavz6q6hg31hrrx5l3yy8q"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For building HTML documentation.
-       ("doxygen" ,doxygen)
-
-       ;; For tests.
-       ("check" ,check)))
+     (list pkg-config
+           ;; For building HTML documentation.
+           doxygen
+           ;; For tests.
+           check))
     (arguments
      `(#:configure-flags
        (list "-Ddocumentation=true"
@@ -120,33 +118,30 @@ interfacing MPD in the C, C++ & Objective C languages.")
                 "0m67wibxc6n6438h2va59n51wwwbwhbdj9635cnpc3wqvlq9sd9g"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-next ; Requires Meson >= 0.56.0
-       #:configure-flags '("-Ddocumentation=enabled")))
-    (inputs `(("ao" ,ao)
-              ("alsa-lib" ,alsa-lib)
-              ("avahi" ,avahi)
-              ("boost" ,boost)
-              ("curl" ,curl)
-              ("ffmpeg" ,ffmpeg)
-              ("flac" ,flac)
-              ("fmt" ,fmt)
-              ("glib" ,glib)
-              ("icu4c" ,icu4c)
-              ;; The LAME decoder comes from FFmpeg, but is added here so that
-              ;; configure picks up the LAME encoder.
-              ("lame" ,lame)
-              ("libid3tag" ,libid3tag)
-              ("libmpdclient" ,libmpdclient)
-              ("libsamplerate" ,libsamplerate)
-              ("libsndfile" ,libsndfile)
-              ("libvorbis" ,libvorbis)
-              ("opus" ,opus)
-              ("pulseaudio" ,pulseaudio)
-              ("sqlite" ,sqlite)
-              ("zlib" ,zlib)))
-    (native-inputs `(("cmake" ,cmake)
-                     ("pkg-config" ,pkg-config)
-                     ("python-sphinx" ,python-sphinx)))
+     `(#:configure-flags '("-Ddocumentation=enabled")))
+    (inputs (list ao
+                  alsa-lib
+                  avahi
+                  boost
+                  curl
+                  ffmpeg
+                  flac
+                  fmt
+                  glib
+                  icu4c
+                  ;; The LAME decoder comes from FFmpeg, but is added here so that
+                  ;; configure picks up the LAME encoder.
+                  lame
+                  libid3tag
+                  libmpdclient
+                  libsamplerate
+                  libsndfile
+                  libvorbis
+                  opus
+                  pulseaudio
+                  sqlite
+                  zlib))
+    (native-inputs (list cmake pkg-config python-sphinx))
     ;; Missing optional inputs:
     ;;   libyajl
     ;;   libcdio_paranoia
@@ -190,10 +185,9 @@ protocol.")
                (base32
                 "15hjpzqs83v1zx49x8nkpwy9hpl1jxd55z1w50vm82gm32zcqh2g"))))
     (build-system meson-build-system)
-    (inputs `(("libmpdclient" ,libmpdclient)))
+    (inputs (list libmpdclient))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)))
+     (list pkg-config python-sphinx))
     (synopsis "Music Player Daemon client")
     (description "MPC is a minimalist command line interface to MPD, the music
 player daemon.")
@@ -220,10 +214,7 @@ player daemon.")
        ;; '$out/share/man/man/man1'.
        (list (string-append "-Dmandir=" (assoc-ref %outputs "out")
                             "/share"))))
-    (inputs `(("boost" ,boost)
-              ("pcre" ,pcre)
-              ("libmpdclient" ,libmpdclient)
-              ("ncurses" ,ncurses)))
+    (inputs (list boost pcre libmpdclient ncurses))
     (native-inputs `(("gettext" ,gettext-minimal) ; for xgettext
                      ("pkg-config" ,pkg-config)
                      ("python-sphinx" ,python-sphinx)))
@@ -246,15 +237,15 @@ terminal using ncurses.")
                (base32
                 "06rs734n120jp51hr0fkkhxrm7zscbhpdwls0m5b5cccghazdazs"))))
     (build-system gnu-build-system)
-    (inputs `(("libmpdclient" ,libmpdclient)
-              ("boost"  ,boost)
-              ("readline" ,readline)
-              ("ncurses" ,ncurses)
-              ("taglib" ,taglib)
-              ("icu4c" ,icu4c)
-              ("curl" ,curl)))
+    (inputs (list libmpdclient
+                  boost
+                  readline
+                  ncurses
+                  taglib
+                  icu4c
+                  curl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:configure-flags
        '("BOOST_LIB_SUFFIX=" "--with-taglib" "--enable-clock")))
@@ -278,11 +269,8 @@ sort playlists, and a local file system browser.")
                (base32
                 "0s66zqscb44p88cl3kcv5jkjcqsskcnrv7xgrjhzrchf2kcpwf53"))))
     (build-system meson-build-system)
-    (inputs `(("boost" ,boost)
-              ("curl" ,curl)
-              ("libgcrypt" ,libgcrypt)
-              ("libmpdclient" ,libmpdclient)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list boost curl libgcrypt libmpdclient))
+    (native-inputs (list pkg-config))
     (synopsis "MPD client for track scrobbling")
     (description "mpdscribble is a Music Player Daemon client which submits
 information about tracks being played to a scrobbler, such as Libre.FM.")
@@ -306,8 +294,7 @@ information about tracks being played to a scrobbler, such as Libre.FM.")
          (replace 'check
            (lambda _ (invoke "python" "-m" "pytest" "mpd/tests.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/Mic92/python-mpd2")
     (synopsis "Python MPD client library")
     (description "Python-mpd2 is a Python library which provides a client
@@ -350,12 +337,12 @@ interface for the Music Player Daemon.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gobject-introspection" ,gobject-introspection)
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-mpd2
+           gtk+
+           gsettings-desktop-schemas
+           gobject-introspection
+           adwaita-icon-theme
+           python-pygobject))
     (synopsis "Elegant client for the Music Player Daemon")
     (description "Sonata is an elegant graphical client for the Music Player
 Daemon (MPD).  It supports playlists, multiple profiles (connecting to different
@@ -376,8 +363,8 @@ MPD servers, search and multimedia key support.")
               (sha256
                (base32
                 "11aa95cg0yca2m2d00sar6wr14g3lc7cfm9bin1h7lk7asdm8azp"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libmpdclient" ,libmpdclient)))
+    (native-inputs (list pkg-config))
+    (inputs (list libmpdclient))
     (build-system meson-build-system)
     (home-page "https://github.com/joshkunz/ashuffle")
     (synopsis "Automatic library-wide shuffle for mpd")
@@ -408,15 +395,12 @@ other MPD frontends.")
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out         (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH")))
+                   (python-path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/mpDris2")
-                 `("PYTHONPATH" ":" prefix (,python-path)))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path)))
                #t))))))
     (inputs
-     `(("python-mpd2" ,python-mpd2)
-       ("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)
-       ("python" ,python)))             ; Sets PYTHONPATH.
+     (list python-mpd2 python-dbus python-pygobject python))             ; Sets GUIX_PYTHONPATH.
     ;; For bootstrapping.
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -446,19 +430,19 @@ support")
     (arguments
      `(#:tests? #f)) ; No test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("eudev" ,eudev)
-       ("ffmpeg" ,ffmpeg)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libebur128" ,libebur128)
-       ("libmtp" ,libmtp)
-       ("mpg123" ,mpg123)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)
-       ("taglib" ,taglib)
-       ("zlib" ,zlib)))
+     (list eudev
+           ffmpeg
+           libcdio-paranoia
+           libebur128
+           libmtp
+           mpg123
+           qtbase-5
+           qtmultimedia
+           qtsvg
+           taglib
+           zlib))
     (synopsis "Graphical MPD Client")
     (description "Cantata is a graphical client for the Music Player Daemon
 (MPD), using the Qt5 toolkit.  Its user interface is highly customizable,
@@ -489,11 +473,7 @@ artists along with albumart.")
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("avahi" ,avahi)
-       ("dconf" ,dconf)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)))
+     (list avahi dconf gsettings-desktop-schemas gtk+ python-pygobject))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
@@ -507,9 +487,8 @@ artists along with albumart.")
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/mcg")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t)))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (synopsis "Covergrid for the MPD")
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 77711c90ff..91e6704fbe 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -89,9 +89,9 @@
              '())))
     (propagated-inputs
      ;; hwloc.pc lists it in 'Requires.private'.
-     `(("libpciaccess" ,libpciaccess)))
+     (list libpciaccess))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags '("--localstatedir=/var")
        #:phases
@@ -232,8 +232,7 @@ bind processes, and much more.")
        ("valgrind" ,valgrind)
        ("slurm" ,slurm)))              ;for PMI support (launching via "srun")
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list pkg-config perl))
     (outputs '("out" "debug"))
     (arguments
      `(#:configure-flags `("--enable-mpi-ext=affinity" ;cr doesn't work
@@ -263,12 +262,11 @@ bind processes, and much more.")
                   (add-after 'unpack 'find-opensm-headers
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "C_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
-                      #t))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))))
                   (add-before 'build 'remove-absolute
                     (lambda _
                       ;; Remove compiler absolute file names (OPAL_FC_ABSOLUTE
@@ -359,8 +357,7 @@ software vendors, application developers and computer science researchers.")
                  (lambda* (#:key inputs #:allow-other-keys)
                    (substitute* "ompi/mpi/java/c/Makefile.in"
                      (("\\$\\(top_builddir\\)/ompi/lib@OMPI_LIBMPI_NAME@.la")
-                      (string-append (assoc-ref inputs "openmpi") "/lib/libmpi.la")))
-                   #t))
+                      (search-input-file inputs "/lib/libmpi.la")))))
                (add-after 'install 'strip-jar-timestamps
                  (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))))
     (synopsis "Java bindings for MPI")))
@@ -424,7 +421,7 @@ only provides @code{MPI_THREAD_FUNNELED}.")))
                 "unittest.skipMPI('openmpi')"))
              #t)))))
     (inputs
-     `(("openmpi" ,openmpi)))
+     (list openmpi))
     (home-page "https://bitbucket.org/mpi4py/mpi4py/")
     (synopsis "Python bindings for the Message Passing Interface standard")
     (description "MPI for Python (mpi4py) provides bindings of the Message
@@ -459,9 +456,7 @@ arrays) that expose a buffer interface.")
              `(("ucx" ,ucx))
              '())))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)
-       ("gfortran" ,gfortran)))
+     (list perl which gfortran))
     (outputs '("out" "debug"))
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 7861e2f589..9dbe8ee179 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -39,7 +39,7 @@
 (define-public gmp
   (package
    (name "gmp")
-   (version "6.2.0")
+   (version "6.2.1")
    (source (origin
             (method url-fetch)
             (uri
@@ -47,10 +47,10 @@
                             version ".tar.xz"))
             (sha256
              (base32
-              "09hmg8k63mbfrx1x3yy6y1yzbbq85kw5avbibhcgrg9z3ganr3i5"))
+              "1wml97fdmpcynsbw9yl77rj29qibfp652d0w3222zlfx5j8jjj7x"))
             (patches (search-patches "gmp-faulty-test.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("m4" ,m4)))
+   (native-inputs (list m4))
    (outputs '("out" "debug"))
    (arguments
     `(#:parallel-tests? #f ; mpz/reuse fails otherwise
@@ -114,16 +114,16 @@ It is aimed at use in, for example, cryptography and computational algebra.")
 (define-public mpfr
   (package
    (name "mpfr")
-   (version "4.0.2")
+   (version "4.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/mpfr/mpfr-" version
                                 ".tar.xz"))
             (sha256 (base32
-                     "12m3amcavhpqygc499s3fzqlb8f2j2rr7fkqsm10xbjfc04fffqx"))))
+                     "0zwaanakrqjf84lfr5hfsdr7hncwv9wj0mchlr7cmxigfgqs760c"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
-   (propagated-inputs `(("gmp" ,gmp)))            ; <mpfr.h> refers to <gmp.h>
+   (propagated-inputs (list gmp))            ; <mpfr.h> refers to <gmp.h>
    (synopsis "C library for arbitrary-precision floating-point arithmetic")
    (description
     "GNU@tie{}@acronym{MPFR, Multiple Precision Floating-Point Reliably} is a C
@@ -135,18 +135,18 @@ correct rounding.")
 (define-public mpc
   (package
    (name "mpc")
-   (version "1.1.0")
+   (version "1.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/mpc/mpc-" version ".tar.gz"))
             (sha256
               (base32
-                "0biwnhjm3rx3hc0rfpvyniky4lpzsvdcwhmcn7f0h4iw2hwcb1b9"))))
+                "0n846hqfqvmsmim7qdlms0qr86f1hck19p12nq3g3z2x74n3sl0p"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
-   (propagated-inputs `(("gmp" ,gmp)              ; <mpc.h> refers to both
-                        ("mpfr" ,mpfr)))
+   (propagated-inputs (list gmp ; <mpc.h> refers to both
+                            mpfr))
    (synopsis "C library for arbitrary-precision complex arithmetic")
    (description
     "GNU@tie{}@acronym{MPC, Multiple Precision Complex library} is a C library
@@ -176,8 +176,8 @@ precision and correctly rounds the results.")
        ("libtool" ,libtool)
        ("texinfo" ,texinfo)))
     (propagated-inputs
-     `(("gmp" ,gmp)                     ; <mpfi.h> refers to both
-       ("mpfr" ,mpfr)))
+     (list gmp ; <mpfi.h> refers to both
+           mpfr))
     (home-page "https://gforge.inria.fr/projects/mpfi/")
     (synopsis "C library for arbitrary-precision interval arithmetic")
     (description
@@ -204,8 +204,8 @@ multiple-precision arithmetic.")
        (sha256
         (base32 "1cdmvb4hsa161rfdjqyhd9sb3fcr43p3a6nsj7cb4kn9f94qmjpj"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("gmp" ,gmp)   ; <mpfi.h> refers to both
-                         ("mpfr" ,mpfr)))
+    (propagated-inputs (list gmp ; <mpfi.h> refers to both
+                             mpfr))
     (arguments
      `(#:parallel-build? #f))
     (synopsis "C++ package for real arithmetic based on the Real-RAM concept")
@@ -232,7 +232,7 @@ error.  Additionally, iRRAM uses the concept of multi-valued functions.")
         (base32 "1lq609rsp6zpg7zda75lyxzzk1fabzp4jn88j7xfk84mdgjgzh9h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (arguments
      `(#:configure-flags `("--disable-enable_fma" ;weird :/
                            "--enable-shared"
@@ -272,7 +272,7 @@ and numerical quadrature programs are included.")
     (arguments
      `(#:configure-flags (list "--disable-static")))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "https://www.ginac.de/CLN/")
     (synopsis "Library for arbitrary precision computations")
     (description "CLN is a C++ library for efficient computations with all
@@ -295,7 +295,7 @@ classes and elementary, logical and transcendental functions.")
                 "0f0pmiaskh89sp0q933pafxb914shpaj5ad8sb5rzk1wv8d7mja7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (arguments
      `(#:make-flags (list "-f" "makefile.shared"
                           (string-append "LIBPATH=" %output "/lib")
@@ -403,13 +403,14 @@ multiplies.")
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "CFLAGS += -DLTM_DESC -DUSE_LTM"
-             (string-append "EXTRALIBS=" (assoc-ref %build-inputs "libtommath")
-                            "/lib/libtommath.so")
+             (string-append "EXTRALIBS="
+                            (search-input-file %build-inputs
+                                               "/lib/libtommath.so"))
              (string-append "CC=" ,(cc-for-target)))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (inputs
-     `(("libtommath" ,libtommath)))
+     (list libtommath))
     (home-page "https://www.libtom.net/LibTomCrypt/")
     (synopsis "Cryptographic toolkit")
     (description "LibTomCrypt is a fairly comprehensive, modular and portable
@@ -462,7 +463,7 @@ number generators, public key cryptography and a plethora of other routines.")
        #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "CC=gcc")))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://www.libtom.net/LibTomMath/")
     (synopsis "Portable number theoretic multiple-precision integer library")
     (description "LibTomMath is a portable number theoretic multiple-precision
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 9d2fad853e..1882f7ae8d 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2018 nee <nee.git@hidamari.blue>
 ;;; Copyright © 2018, 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Gabriel Hondet <gabrielhondet@gmail.com>
 ;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
@@ -241,39 +241,39 @@
        ("glib:bin" ,glib "bin")         ; for gdbus-codegen
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("dbus" ,dbus)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ;; Plugin dependencies
-       ("alsa-lib" ,alsa-lib)
-       ("curl" ,curl)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("fluidsynth" ,fluidsynth)
-       ("lame" ,lame)
-       ("libbs2b" ,libbs2b)
-       ("libcddb" ,libcddb)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libcue" ,libcue)
-       ("libnotify" ,libnotify)
-       ("libogg" ,libogg)
-       ("libopenmpt" ,libopenmpt)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("libvorbis" ,libvorbis)
-       ("libxcomposite" ,libxcomposite)
-       ("libxml2" ,libxml2)
-       ("libxrender" ,libxrender)
-       ("lirc" ,lirc)
-       ("jack" ,jack-1)
-       ("mesa" ,mesa)
-       ("mpg123" ,mpg123)
-       ("neon" ,neon)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl2" ,sdl2)
-       ("soxr" ,soxr)
-       ("wavpack" ,wavpack)))
+     (list dbus
+           qtbase-5
+           qtmultimedia
+           ;; Plugin dependencies
+           alsa-lib
+           curl
+           faad2
+           ffmpeg
+           flac
+           fluidsynth
+           lame
+           libbs2b
+           libcddb
+           libcdio-paranoia
+           libcue
+           libnotify
+           libogg
+           libopenmpt
+           libsamplerate
+           libsndfile
+           libvorbis
+           libxcomposite
+           libxml2
+           libxrender
+           lirc
+           jack-1
+           mesa
+           mpg123
+           neon
+           pulseaudio
+           sdl2
+           soxr
+           wavpack))
     (home-page "https://audacious-media-player.org")
     (synopsis "Modular and skinnable audio player")
     (description
@@ -346,11 +346,9 @@ more.")
                (chmod (string-append out "/share/Aria/score") #o555)
                #t))))))
     (inputs
-     `(("wxwidgets" ,wxwidgets)
-       ("glib" ,glib)
-       ("alsa-lib" ,alsa-lib)))
+     (list wxwidgets glib alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://ariamaestosa.sourceforge.net/")
     (synopsis "MIDI sequencer and editor")
     (description
@@ -429,27 +427,27 @@ score, keyboard, guitar, drum and controller views.")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("boost" ,boost)
-       ("chromaprint" ,chromaprint)
-       ("fftw" ,fftw)
-       ("glib" ,glib)
-       ("glu" ,glu)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-libav" ,gst-libav)
-       ("libcdio" ,libcdio)
-       ("libmygpo-qt" ,libmygpo-qt)
-       ;; TODO: Package libgpod.
-       ("libmtp" ,libmtp)
-       ("libxml2" ,libxml2)
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sqlite" ,sqlite)
-       ("sparsehash" ,sparsehash)
-       ("taglib" ,taglib)))
+     (list boost
+           chromaprint
+           fftw
+           glib
+           glu
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gst-libav
+           libcdio
+           libmygpo-qt
+           ;; TODO: Package libgpod.
+           libmtp
+           libxml2
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtx11extras
+           sqlite
+           sparsehash
+           taglib))
     (home-page "https://clementine-player.org")
     (synopsis "Music player and library organizer")
     (description "Clementine is a multiplatform music player.  It is inspired
@@ -524,24 +522,24 @@ playing your music.")
        ("qtlinguist" ,qttools)
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("chromaprint" ,chromaprint)
-       ("dbus" ,dbus)
-       ("fftw" ,fftw)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("libcdio" ,libcdio)
-       ("libmtp" ,libmtp)
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("sqlite" ,sqlite)
-       ("taglib" ,taglib)))
+     (list alsa-lib
+           boost
+           chromaprint
+           dbus
+           fftw
+           glib
+           gnutls
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           libcdio
+           libmtp
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtx11extras
+           sqlite
+           taglib))
     (home-page "https://www.strawberrymusicplayer.org/")
     (synopsis "Music player and library organizer")
     (description "Strawberry is a music player and music collection organizer.
@@ -588,26 +586,26 @@ It is a fork of Clementine aimed at music collectors and audiophiles.")
     ;; - DISCID_LIBS, apparently different from cd-discid which is included in
     ;;   Guix.  See <http://sourceforge.net/projects/discid/>
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("flac" ,flac)
-       ("jack" ,jack-1)
-       ("libcddb" ,libcddb)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libcue" ,libcue)
-       ("libmad" ,libmad)
-       ("libmodplug" ,libmodplug)
-       ("libmpcdec" ,libmpcdec)
-       ("libsamplerate" ,libsamplerate)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("opusfile" ,opusfile)
-       ("pulseaudio" ,pulseaudio)
-       ("wavpack" ,wavpack)))
+     (list alsa-lib
+           ao
+           faad2
+           ffmpeg
+           flac
+           jack-1
+           libcddb
+           libcdio-paranoia
+           libcue
+           libmad
+           libmodplug
+           libmpcdec
+           libsamplerate
+           libvorbis
+           ncurses
+           opusfile
+           pulseaudio
+           wavpack))
      (home-page "https://cmus.github.io/")
      (synopsis "Small console music player")
      (description "Cmus is a small and fast console music player.  It supports
@@ -635,7 +633,7 @@ many input formats and provides a customisable Vi-style user interface.")
              ;; Replace hard-coded diff file name.
              (substitute* "tests/integration.c"
                (("/usr/bin/diff")
-                (string-append (assoc-ref inputs "diffutils") "/bin/diff")))
+                (search-input-file inputs "/bin/diff")))
              ;; Denemo's documentation says to use this command to run its
              ;; test suite.
              (invoke "make" "-C" "tests" "check")))
@@ -643,8 +641,7 @@ many input formats and provides a customisable Vi-style user interface.")
            ;; This phase sets the default path for lilypond to its current
            ;; location in the store.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((lilypond (string-append (assoc-ref inputs "lilypond")
-                                             "/bin/lilypond")))
+             (let* ((lilypond (search-input-file inputs "/bin/lilypond")))
                (substitute* "src/core/prefops.c"
                  (("g_string_new \\(\"lilypond\"\\);")
                   (string-append "g_string_new (\""
@@ -659,22 +656,22 @@ many input formats and provides a customisable Vi-style user interface.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("aubio" ,aubio)
-       ("evince" ,evince)
-       ("fftw" ,fftw)
-       ("fluidsynth" ,fluidsynth)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("guile" ,guile-2.0)
-       ("librsvg" ,librsvg)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("lilypond" ,lilypond)
-       ("portaudio" ,portaudio)
-       ("portmidi" ,portmidi)
-       ("rubberband" ,rubberband)))
+     (list alsa-lib
+           aubio
+           evince
+           fftw
+           fluidsynth
+           glib
+           gtk+
+           gtksourceview-3
+           guile-2.0
+           librsvg
+           libsndfile
+           libxml2
+           lilypond
+           portaudio
+           portmidi
+           rubberband))
     (synopsis "Graphical music notation, front-end to GNU Lilypond")
     (description
      "GNU Denemo is a music notation editor that provides a convenient
@@ -729,7 +726,7 @@ settings (aliasing, linear interpolation and cubic interpolation).")
        ((#:configure-flags flags)
         `(cons "-DBUILD_ALLEGRO4=ON" ,flags))))
     (inputs
-     `(("allegro" ,allegro-4)))))
+     (list allegro-4))))
 
 (define-public hydrogen
   (package
@@ -761,18 +758,18 @@ settings (aliasing, linear interpolation and cubic interpolation).")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
-       ("lash" ,lash)
-       ("libarchive" ,libarchive)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("lrdf" ,lrdf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           jack-1
+           ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
+           lash
+           libarchive
+           liblo
+           libsndfile
+           lrdf
+           pulseaudio
+           qtbase-5
+           qtxmlpatterns
+           zlib))
     (home-page "http://www.hydrogen-music.org")
     (synopsis "Drum machine")
     (description
@@ -800,16 +797,16 @@ enable professional yet simple and intuitive pattern-based drum programming.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("flac" ,flac)
-       ("gtk+" ,gtk+)
-       ("id3lib" ,id3lib)
-       ("libid3tag" ,libid3tag)
-       ("libvorbis" ,libvorbis)
-       ("opusfile" ,opusfile)
-       ("speex" ,speex)
-       ("taglib" ,taglib)
-       ("wavpack" ,wavpack)
-       ("yelp" ,yelp)))
+     (list flac
+           gtk+
+           id3lib
+           libid3tag
+           libvorbis
+           opusfile
+           speex
+           taglib
+           wavpack
+           yelp))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1094,12 +1091,9 @@ audio and video).")
       (modify-phases %standard-phases
         (delete 'configure))))
    (inputs
-    `(("cairo" ,cairo)
-      ("libx11" ,libx11)
-      ("lv2" ,lv2)
-      ("fluidsynth" ,fluidsynth)))
+    (list cairo libx11 lv2 fluidsynth))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://github.com/brummer10/Fluida.lv2")
    (synopsis "Fluidsynth as an LV2 audio plugin")
    (description "Fluida is an audio plugin in the LV2 format that acts as
@@ -1159,14 +1153,14 @@ a frontend for fluidsynth.")
                                 (string-append share "/Surge"))
               #t))))))
    (inputs
-    `(("cairo" ,cairo)
-      ("libxkbcommon" ,libxkbcommon)
-      ("python" ,python)
-      ("xcb-util" ,xcb-util)
-      ("xcb-util-cursor" ,xcb-util-cursor)
-      ("xcb-util-keysyms" ,xcb-util-keysyms)))
+    (list cairo
+          libxkbcommon
+          python
+          xcb-util
+          xcb-util-cursor
+          xcb-util-keysyms))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://surge-synthesizer.github.io/")
    (synopsis "Synthesizer plugin")
    (description
@@ -1206,14 +1200,14 @@ engine (except effects) that can be used for layering or split patches.")
                (("Options") "Variables"))
              #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("libsamplerate" ,libsamplerate)
-       ("liblo" ,liblo)
-       ("rubberband" ,rubberband)))
+     (list boost
+           jack-1
+           libsndfile
+           libsamplerate
+           liblo
+           rubberband))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://das.nasophon.de/klick/")
     (synopsis "Metronome for JACK")
     (description
@@ -1256,12 +1250,9 @@ you to define complex tempo maps for entire songs or performances.")
              ;; TODO Work out how to run the spec/providers Python tests
              #t)))))
     (inputs
-     `(("glib" ,glib)
-       ("curl" ,curl)
-       ("sqlite" ,sqlite)))
+     (list glib curl sqlite))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("check" ,check)))
+     (list pkg-config check))
     (home-page "https://github.com/sahib/glyr")
     (synopsis "Search engine for music related metadata")
     (description
@@ -1311,9 +1302,7 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
                                "/bin/klick'")))
              #t)))))
     (inputs
-     `(("klick" ,klick)
-       ("python2-pyliblo" ,python2-pyliblo)
-       ("python2-pygtk" ,python2-pygtk)))
+     (list klick python2-pyliblo python2-pygtk))
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (home-page "http://das.nasophon.de/gtklick/")
@@ -1338,20 +1327,20 @@ interface.  It is implemented as a frontend to @code{klick}.")
         (base32 "04lcjzfhddbyskxr2068z609y6x0s2gjx1wl78w0dkxdi459zrn9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("cunit" ,cunit)
-       ("glib" ,glib "bin")             ; for glib-compile-resources
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf
+           automake
+           cunit
+           `(,glib "bin") ; for glib-compile-resources
+           intltool
+           libtool
+           pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("gtk+" ,gtk+)
-       ("jack" ,jack-2)
-       ("json-c" ,json-c)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           fftw
+           gtk+
+           jack-2
+           json-c
+           pulseaudio))
     (home-page "http://lingot.nongnu.org/")
     (synopsis "Accurate & configurable musical instrument tuner")
     (description
@@ -1412,15 +1401,13 @@ frequency.")
                                  (not (string-suffix? ".lv2" name))))))
                #t))))))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("jack" ,jack-1)                 ; for the standalone JACK application
-       ("libsamplerate" ,libsamplerate)
-       ("mesa" ,mesa)
-       ("libsndfile" ,libsndfile)))
+     (list fftwf
+           jack-1 ; for the standalone JACK application
+           libsamplerate
+           mesa
+           libsndfile))
     (native-inputs
-     `(("ladspa" ,ladspa)
-       ("lv2" ,lv2)
-       ("pkg-config" ,pkg-config)))
+     (list ladspa lv2 pkg-config))
     (synopsis "Sample slicer audio plugin")
     (description
      "Ninjas 2 is a rewrite of the Ninjas sample slicer audio plugin.
@@ -1453,23 +1440,22 @@ and auto-mapping slices to MIDI note numbers.")
                             "/share/fonts/opentype/"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'use-texlive-union
-           (lambda _
-             ;; FIXME: fonts are not found and have to be generated in HOME.
-             (setenv "HOME" "/tmp")
-             ;; The test for the "lh" package fails, even though it is among
-             ;; the inputs.
-             (substitute* "configure"
-               (("TEX_FIKPARM=.*") "TEX_FIKPARM=found\n"))
-             #t))
          (add-after 'unpack 'fix-path-references
            (lambda _
              (substitute* "scm/backend-library.scm"
                (("\\(search-executable '\\(\"gs\"\\)\\)")
                 (string-append "\"" (which "gs") "\""))
                (("\"/bin/sh\"")
-                (string-append "\"" (which "sh") "\"")))
-             #t))
+                (string-append "\"" (which "sh") "\"")))))
+         (add-after 'fix-path-references 'adjust-to-API-change
+           (lambda _
+             (substitute* '("Documentation/pictures/GNUmakefile"
+                            "stepmake/stepmake/tex-rules.make")
+               ((".*-c .setpdfwrite.*") ""))
+             (substitute* "scm/backend-library.scm"
+               (("\"-c.setpdfwrite\"") ""))
+             (substitute* "scm/framework-ps.scm"
+               (("\".setpdfwrite ") "\""))))
          (add-before 'configure 'prepare-configuration
            (lambda _
              (substitute* "configure"
@@ -1480,14 +1466,12 @@ and auto-mapping slices to MIDI note numbers.")
                ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
                (("20110222") "19700101"))
              (setenv "out" "www")
-             (setenv "conf" "www")
-             #t))
+             (setenv "conf" "www")))
          (add-after 'install 'install-info
            (lambda _
              (invoke "make"
                      "-j" (number->string (parallel-job-count))
-                     "conf=www" "install-info")
-             #t)))))
+                     "conf=www" "install-info"))))))
     (inputs
      `(("guile" ,guile-1.8)
        ("font-dejavu" ,font-dejavu)
@@ -1506,9 +1490,9 @@ and auto-mapping slices to MIDI note numbers.")
        ("gettext" ,gettext-minimal)
        ("imagemagick" ,imagemagick)
        ("netpbm" ,netpbm)               ;for pngtopnm
-       ("texlive" ,(texlive-union (list texlive-metapost
-                                        texlive-generic-epsf
-                                        texlive-latex-lh
+       ("texlive" ,(texlive-updmap.cfg (list texlive-metapost
+                                        texlive-epsf
+                                        texlive-lh
                                         texlive-latex-cyrillic)))
        ("texinfo" ,texinfo)
        ("texi2html" ,texi2html-1.82)
@@ -1549,10 +1533,8 @@ Guile.")
                ;; See: https://github.com/cuthbertLab/music21/issues/1164
                (invoke "python" "-m" "music21.stream.tests")))))))
     (propagated-inputs
-      `(("python-chardet" ,python-chardet)
-        ("python-joblib" ,python-joblib)
-        ("python-more-itertools" ,python-more-itertools)
-        ("python-webcolors" ,python-webcolors)))
+      (list python-chardet python-joblib python-more-itertools
+            python-webcolors))
     (home-page "https://web.mit.edu/music21/")
     (synopsis "Toolkit for Computational Musicology")
     (description
@@ -1586,22 +1568,19 @@ listeners answer questions about music quickly and simply.")
                (invoke "python" "-m" "pytest" "tests")
                #t))))))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)))
+     (list python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-sphinx-autodoc-typehints))
     (inputs
-     `(("lilypond" ,lilypond)))
+     (list lilypond))
     (propagated-inputs
-     `(("python-ply" ,python-ply)
-       ("python-quicktions" ,python-quicktions)
-       ("python-roman" ,python-roman)
-       ("python-six" ,python-six)
-       ("python-uqbar" ,python-uqbar)))
+     (list python-ply python-quicktions python-roman python-six
+           python-uqbar))
     (home-page "https://abjad.github.io")
     (synopsis "Python API for building LilyPond files")
     (description
@@ -1640,17 +1619,17 @@ typographic detail of symbols on the page.")
                (invoke "python" "-m" "pytest" ".")
                #t))))))
     (native-inputs
-     `(("lilypond" ,lilypond)
-       ("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)))
+     (list abjad))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad rhythm-maker extension package")
     (description
@@ -1682,17 +1661,17 @@ and manipulating rhythms such as accelerandi, taleas, and more.")
                (invoke "python" "-m" "pytest" "tests")
                #t))))))
     (native-inputs
-     `(("lilypond" ,lilypond)
-       ("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)))
+     (list abjad))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad quantization extension, based on Paul Nauert's Q-Grids")
     (description
@@ -1729,18 +1708,17 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
                (invoke "jupyter" "nbconvert" "--to=html"
                "--ExecutePreprocessor.enabled=True" "tests/test.ipynb")))))))
     (native-inputs
-     `(("lilypond" ,lilypond)
-       ("python-black" ,python-black)
-       ("python-flake8" ,python-flake8)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-helpers-namespace" ,python-pytest-helpers-namespace)))
+     (list lilypond
+           python-black
+           python-flake8
+           python-iniconfig
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-cov
+           python-pytest-helpers-namespace))
     (propagated-inputs
-     `(("abjad" ,abjad)
-       ("jupyter" ,jupyter)))
+     (list abjad jupyter))
     (home-page "https://abjad.github.io")
     (synopsis "Abjad IPython Extension")
     (description
@@ -1777,12 +1755,9 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
                      '()))
          #:python ,python-2))
       (inputs
-       `(("jack" ,jack-1)
-         ("libsigc++" ,libsigc++)
-         ("liblo" ,liblo)
-         ("ntk" ,ntk)))
+       (list jack-1 libsigc++ liblo ntk))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://non.tuxfamily.org/wiki/Non%20Sequencer")
       (synopsis "Pattern-based MIDI sequencer")
       (description
@@ -1802,11 +1777,9 @@ transport is rolling.")
         `(cons "--project=session-manager"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/nsm/")
     (synopsis "Audio session management")
     (description
@@ -1824,13 +1797,9 @@ communicate with the session management daemon.")
         `(cons "--project=mixer"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("ladspa" ,ladspa)
-       ("lrdf" ,lrdf)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo ladspa lrdf ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/wiki/Non%20Mixer")
     (synopsis "Modular digital audio mixer")
     (description
@@ -1850,12 +1819,9 @@ studio.")
         `(cons "--project=timeline"
                (delete "--project=sequencer" ,flags)))))
     (inputs
-     `(("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("libsndfile" ,libsndfile)
-       ("ntk" ,ntk)))
+     (list jack-1 liblo libsndfile ntk))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://non.tuxfamily.org/wiki/Non%20Timeline")
     (synopsis "Modular digital audio timeline arranger")
     (description
@@ -1884,13 +1850,9 @@ complete studio.")
                   "07k7rccqqg7lnygkh97a200l1i6s1rl92n01v0q6n4257sinir6f"))))
       (build-system gnu-build-system)
       (inputs
-       `(("liblo" ,liblo)
-         ("gtkmm" ,gtkmm)
-         ("alsa-lib" ,alsa-lib)
-         ("libxml++" ,libxml++-2)))
+       (list liblo gtkmm-3 alsa-lib libxml++-2))
       (native-inputs
-       `(("glib:bin" ,glib "bin")
-         ("pkg-config" ,pkg-config)))
+       (list `(,glib "bin") pkg-config))
       (home-page "https://github.com/onkelDead/tascam-gtk")
       (synopsis "GTK+ based application to control Tascam US-16x08 DSP mixer")
       (description "This is a mixer application to control the Tascam US-16x08
@@ -1922,11 +1884,9 @@ device supports.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("lv2" ,lv2)
-       ("libx11" ,libx11)))
+     (list cairo lv2 libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/sjaehn/BSEQuencer")
     (synopsis "Multi-channel MIDI step sequencer LV2 plugin")
     (description
@@ -1989,9 +1949,7 @@ B.Choppr is the successor of B.Slizr.")
        (sha256
         (base32 "00fgax8aqqggs54pjpagw5pc30kgxaghh8mrzpqwhs06cnchcam9"))))
     (inputs
-     `(("cairo" ,cairo)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)))
+     (list cairo libsndfile lv2))
     (synopsis "Pattern-controlled audio stream/sample re-sequencer LV2 plugin")
     (description "B.Jumblr is a pattern-controlled audio stream / sample
 re-sequencer LV2 plugin.")
@@ -2093,9 +2051,9 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'solfege' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/solfege")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
      `(("python" ,python-2)
@@ -2104,11 +2062,11 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
        ("gtk" ,gtk+)
        ("lilypond" ,lilypond)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("txt2man" ,txt2man)
-       ("libxml2" ,libxml2) ; for tests
-       ("ghostscript" ,ghostscript)
-       ("texinfo" ,texinfo-5)))
+     (list pkg-config
+           txt2man
+           libxml2 ; for tests
+           ghostscript
+           texinfo-5))
     (home-page "https://www.gnu.org/software/solfege/")
     (synopsis "Ear training")
     (description
@@ -2153,8 +2111,7 @@ your own lessons.")
        ("timidity" ,timidity++)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("doctest" ,doctest)
-       ("pkg-config" ,pkg-config)))
+     (list doctest pkg-config))
     (home-page "https://github.com/powertab/powertabedito")
     (synopsis "Guitar tablature editor")
     (description
@@ -2196,12 +2153,9 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
                                    ".*\\.gz$"))
              #t)))))
     (inputs
-     `(("lilv" ,lilv)
-       ("lv2" ,lv2)
-       ("jalv" ,jalv)
-       ("gtkmm" ,gtkmm-2)))
+     (list lilv lv2 jalv gtkmm-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/brummer10/jalv_select")
     (synopsis "GUI to select LV2 plugins and run them with jalv")
     (description
@@ -2331,15 +2285,14 @@ perform creative live mixes with digital music files.")
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://synthv1.sourceforge.io")
     (synopsis "Polyphonic subtractive synthesizer")
     (description
@@ -2363,16 +2316,15 @@ oscillators and stereo effects.")
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           libsndfile
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://drumkv1.sourceforge.io")
     (synopsis "Drum-kit sampler synthesizer with stereo effects")
     (description
@@ -2396,16 +2348,15 @@ effects.")
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("libsndfile" ,libsndfile)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           libsndfile
+           alsa-lib
+           non-session-manager
+           liblo
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://samplv1.sourceforge.io")
     (synopsis "Polyphonic sampler synthesizer with stereo effects")
     (description
@@ -2429,16 +2380,15 @@ effects.")
     (arguments
      `(#:tests? #f))                    ; there are no tests
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("alsa-lib" ,alsa-lib)
-       ("non-session-manager" ,non-session-manager)
-       ("liblo" ,liblo)
-       ("fftwf" ,fftwf)
-       ("qtbase" ,qtbase-5)))
+     (list jack-1
+           lv2
+           alsa-lib
+           non-session-manager
+           liblo
+           fftwf
+           qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://padthv1.sourceforge.io")
     (synopsis "Polyphonic additive synthesizer")
     (description
@@ -2474,22 +2424,21 @@ special variant of additive synthesis.")
                 (string-append (assoc-ref inputs "which") "/bin/which")))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+-2)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)
-       ;; External commands invoked at run time.
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list alsa-lib
+           gtk+-2
+           jack-1
+           libsndfile
+           lv2
+           ;; External commands invoked at run time.
+           unzip
+           which))
     (propagated-inputs
      ;; avoid runtime error:
      ;; GLib-GIO-ERROR **: 22:14:48.344: Settings schema
      ;;   'org.gnome.desktop.interface' is not installed
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+     (list gsettings-desktop-schemas))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://amsynth.github.io")
     (synopsis "Analog modeling synthesizer")
     (description
@@ -2536,15 +2485,14 @@ reverb effects.")
            (lambda _ (setenv "CC" "gcc") #t))
          (delete 'configure))))
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("zita-convolver" ,zita-convolver)
-       ("glu" ,glu)
-       ("ftgl" ,ftgl)
-       ("font-bitstream-vera" ,font-bitstream-vera)))
+     (list jack-1
+           lv2
+           zita-convolver
+           glu
+           ftgl
+           font-bitstream-vera))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)))
+     (list help2man pkg-config))
     (home-page "http://setbfree.org")
     (synopsis "Tonewheel organ")
     (description
@@ -2634,12 +2582,9 @@ mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
                (("ldd `which bristol` | grep jack") "echo guix"))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("libx11" ,libx11)))
+     (list alsa-lib jack-1 liblo libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://bristol.sourceforge.net/")
     (synopsis "Synthesizer emulator")
     (description
@@ -2764,8 +2709,7 @@ is subjective.")
                (chmod (string-append bin "/tuxguitar") #o555)
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("java-swt" ,java-swt)))
+     (list alsa-lib java-swt))
     (home-page "http://tuxguitar.com.ar/")
     (synopsis "Multitrack tablature editor and player")
     (description
@@ -2814,9 +2758,7 @@ export.")
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("tk" ,tk)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)))
+     (list tk alsa-lib jack-1))
     (home-page "https://puredata.info")
     (synopsis "Visual programming language for artistic performances")
     (description
@@ -2916,9 +2858,9 @@ main purpose is to liberate raw audio rendering from audio and MIDI drivers.")
                            Cflags: -I${includedir}~%"
                            out ,version)))))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)))
+     (list alsa-lib))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://portmedia.sourceforge.net/portmidi/")
     (synopsis "Library for MIDI I/O")
     (description
@@ -2949,11 +2891,9 @@ using a system-independent interface.")
                (("TODO =.*") "TODO = \"\"\n"))
              #t)))))
     (inputs
-     `(("portmidi" ,portmidi)
-       ("alsa-lib" ,alsa-lib)))
+     (list portmidi alsa-lib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("unzip" ,unzip)))
+     (list python-cython unzip))
     (home-page "http://portmedia.sourceforge.net/portmidi/")
     (synopsis "Python bindings to PortMidi")
     (description
@@ -2976,14 +2916,14 @@ using a system-independent interface.")
     (arguments
      `(#:tests? #f))                    ;no tests included
     (inputs
-     `(("lilypond" ,lilypond)
-       ("poppler" ,poppler)
-       ("portmidi" ,portmidi)
-       ("python-ly" ,python-ly)
-       ("python-poppler-qt5" ,python-poppler-qt5)
-       ("python-pyportmidi" ,python-pyportmidi)
-       ("python-pyqt" ,python-pyqt)
-       ("python-sip" ,python-sip)))
+     (list lilypond
+           poppler
+           portmidi
+           python-ly
+           python-poppler-qt5
+           python-pyportmidi
+           python-pyqt
+           python-sip))
     (home-page "https://www.frescobaldi.org/")
     (synopsis "LilyPond sheet music text editor")
     (description
@@ -3020,16 +2960,13 @@ browser.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qttools" ,qttools)
-       ("alsa-lib" ,alsa-lib)))
+     (list qtbase-5 qtsvg qttools alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("libxslt" ,libxslt)             ; for xsltproc
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("graphviz" ,graphviz))) ; for dot
+     (list pkg-config
+           libxslt ; for xsltproc
+           docbook-xsl
+           doxygen
+           graphviz)) ; for dot
     (home-page "https://drumstick.sourceforge.io/")
     (synopsis "C++ MIDI library")
     (description
@@ -3067,15 +3004,10 @@ backends, including ALSA, OSS, Network and FluidSynth.")
                                "/manpages/docbook.xsl")))
              #t)))))
     (inputs
-     `(("drumstick" ,drumstick)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)))
+     (list drumstick qtbase-5 qtsvg qtx11extras))
     (native-inputs
-     `(("libxslt" ,libxslt) ;for xsltproc
-       ("docbook-xsl" ,docbook-xsl)
-       ("qttools" ,qttools)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt ;for xsltproc
+           docbook-xsl qttools pkg-config))
     (home-page "https://vmpk.sourceforge.io/")
     (synopsis "Virtual MIDI piano keyboard")
     (description
@@ -3114,17 +3046,17 @@ instrument or MIDI file player.")
                (string-append flag " -msse -msse2 -mfpmath=sse")))
             #t)))))
     (inputs
-     `(("liblo" ,liblo)
-       ("ntk" ,ntk)
-       ("mesa" ,mesa)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("fftw" ,fftw)
-       ("minixml" ,minixml)
-       ("libxpm" ,libxpm)
-       ("zlib" ,zlib)))
+     (list liblo
+           ntk
+           mesa
+           alsa-lib
+           jack-1
+           fftw
+           minixml
+           libxpm
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://zynaddsubfx.sf.net/")
     (synopsis "Software synthesizer")
     (description
@@ -3180,7 +3112,7 @@ capabilities, custom envelopes, effects, etc.")
        ("cairo" ,cairo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://yoshimi.sourceforge.net/")
     (synopsis "Multi-paradigm software synthesizer")
     (description
@@ -3203,10 +3135,9 @@ improves on support for JACK features, such as JACK MIDI.")
                 "1zs5yy124bymfyapsnljr6rv2lnn5inwchm0xnwiw44b2d39l8hn"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libuuid" ,util-linux "lib")
-       ("libsndfile" ,libsndfile)))
+     (list `(,util-linux "lib") libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://linuxsampler.org/libgig/")
     (synopsis "C++ library for working with Gigasampler (.gig) files")
     (description
@@ -3233,11 +3164,9 @@ on the library.")
          "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("jack" ,jack-1)
-       ("lash" ,lash)
-       ("gtk+" ,gtk+-2)))
+     (list jack-1 lash gtk+-2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://jack-keyboard.sourceforge.net/")
     (synopsis "Virtual MIDI keyboard")
     (description "Jack-keyboard is a virtual MIDI keyboard, a program that
@@ -3266,15 +3195,14 @@ allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("jack" ,jack-1)
-       ("libogg" ,libogg)
-       ("liblo" ,liblo)
-       ("lame" ,lame)
-       ("libsndfile" ,libsndfile)))
+     (list gtk+-2
+           jack-1
+           libogg
+           liblo
+           lame
+           libsndfile))
     (home-page "https://github.com/kmatheussen/jack_capture")
     (synopsis "Program for recording sound files with JACK")
     (description "This is a program for recording sound files with JACK.  It
@@ -3312,15 +3240,13 @@ can connect to any JACK port and record the output into a stereo WAV file.")
              ;; Fix reference to dlopened libraries.
              (substitute* "jackselect/alsainfo.py"
                (("libasound.so.2")
-                (string-append (assoc-ref inputs "alsa-lib")
-                               "/lib/libasound.so.2")))
-             #t))
+                (search-input-file inputs "/lib/libasound.so.2")))))
          (replace 'build
            (assoc-ref python:%standard-phases 'build))
          (add-after 'install 'wrap
            (assoc-ref python:%standard-phases 'wrap)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("python" ,python-wrapper)
@@ -3352,11 +3278,10 @@ you to switch between different audio setups with just two mouse clicks.")
        (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
       (patches (search-patches "cursynth-wave-rand.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
     ;; prevents us from using pulseaudio
-    (inputs `(("ncurses" ,ncurses)
-              ("alsa" ,alsa-lib)))
+    (inputs (list ncurses alsa-lib))
     (home-page "https://www.gnu.org/software/cursynth/")
     (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
     (description "GNU cursynth is a polyphonic synthesizer that runs
@@ -3378,11 +3303,9 @@ computer's keyboard.")
                 "0z8wd5yvxdmw1h1rj6km9h01xd4xmp4d86gczlix7hsc7zrf0wil"))))
     (build-system gnu-build-system)
     (inputs
-     `(("minixml" ,minixml)
-       ("jack" ,jack-1)
-       ("alsa-lib" ,alsa-lib)))
+     (list minixml jack-1 alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://aj-snapshot.sourceforge.net/")
     (synopsis "Snapshot connections between ALSA and JACK clients")
     (description "Aj-snapshot is a small program that can be used to make
@@ -3424,8 +3347,7 @@ from the command line.")
        ("liblo" ,liblo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "https://qtractor.org/")
     (synopsis "Audio/MIDI multi-track sequencer")
     (description
@@ -3467,7 +3389,7 @@ follows a traditional multi-track tape recorder control paradigm.")
        ("lv2" ,lv2)
        ("lvtk" ,lvtk)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/blablack/ams-lv2")
     (synopsis "Port of Alsa Modular Synth internal modules into LV2")
     (description "This set of LV2 plugins is a port of the internal modules
@@ -3498,15 +3420,17 @@ and hold, etc.")
                             "/include/"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
+         (delete 'configure)
+         (add-before 'build 'target-specific-glib-API-version
+           (lambda _
+             ;; See https://github.com/brummer10/gxtuner/pull/21
+             (setenv "CFLAGS"
+                     "-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_54\
+ -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_54"))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("jack" ,jack-1)
-       ("fftwf" ,fftwf)
-       ("cairo" ,cairo)
-       ("zita-resampler" ,zita-resampler)))
+     (list gtk+ jack-1 fftwf cairo zita-resampler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/brummer10/gxtuner")
     (synopsis "Guitar tuner")
     (description "GXtuner is a simple guitar tuner for JACK with an
@@ -3547,12 +3471,12 @@ analogue-like user interface.")
                   "lib"))
                #t)))))
       (inputs
-       `(("lilv" ,lilv)
-         ("fftw" ,fftw)
-         ("fftwf" ,fftwf)
-         ("lv2" ,lv2)
-         ("jack" ,jack-1)
-         ("readline" ,readline)))
+       (list lilv
+             fftw
+             fftwf
+             lv2
+             jack-1
+             readline))
       (native-inputs
        `(("pkg-config" ,pkg-config)
          ("python" ,python-2)))
@@ -3585,14 +3509,11 @@ socket or command line.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "curseradio/curseradio.py"
                (("/usr/bin/mpv")
-                (string-append (assoc-ref inputs "mpv") "/bin/mpv")))
-             #t)))))
+                (search-input-file inputs "/bin/mpv"))))))))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list python-lxml python-requests python-pyxdg))
     (inputs
-     `(("mpv" ,mpv)))
+     (list mpv))
     (home-page "https://github.com/chronitis/curseradio")
     (synopsis "Command-line Internet radio player")
     (description "Curseradio is a Curses-based radio player that uses a
@@ -3619,13 +3540,9 @@ tune-in sender list from @url{http://opml.radiotime.com}.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (inputs
-     `(("ao" ,ao)
-       ("curl" ,curl)
-       ("libgcrypt" ,libgcrypt)
-       ("json-c" ,json-c)
-       ("ffmpeg" ,ffmpeg)))
+     (list ao curl libgcrypt json-c ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://6xq.net/pianobar/")
     (synopsis "Console-based pandora.com player")
     (description "pianobar is a console-based music player for the
@@ -3668,10 +3585,7 @@ event-based scripts for scrobbling, notifications, etc.")
      `(("gettext" ,gettext-minimal)
        ("python-dateutil" ,python-dateutil)))
     (inputs
-     `(("chromaprint" ,chromaprint)
-       ("python-discid" ,python-discid)
-       ("python-pyqt" ,python-pyqt)
-       ("python-mutagen" ,python-mutagen)))
+     (list chromaprint python-discid python-pyqt python-mutagen))
     (home-page "https://picard.musicbrainz.org/")
     (synopsis "Graphical music tagging application")
     (description
@@ -3691,9 +3605,7 @@ formats, looking up tracks through metadata and audio fingerprints.")
                 "1qdk6i8gyhbi1c4j5jmbfpac3q8sff2ysri1pnp7nb9wzcp615v3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-flake8" ,python-flake8)))
+     (list python-pytest python-hypothesis python-flake8))
     (home-page "https://mutagen.readthedocs.io/")
     (synopsis "Read and write audio tags")
     (description "Mutagen is a Python module to handle audio metadata.  It
@@ -3718,8 +3630,7 @@ streams on an individual packet/page level.")
          "0ipb001j19s9wvssmrj8wz0nrkbl0k3zr3dgzyp1bd9cjc6vklnp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mutagen" ,python-mutagen)
-       ("python-six" ,python-six)))
+     (list python-mutagen python-six))
     (home-page "https://github.com/beetbox/mediafile")
     (synopsis "Read and write audio file tags")
     (description
@@ -3764,8 +3675,7 @@ MusicBrainz database.")
          "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-discid" ,python-discid)
-       ("python-musicbrainzngs" ,python-musicbrainzngs)))
+     (list python-discid python-musicbrainzngs))
     (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
     (synopsis "Submit ISRCs from CDs to MusicBrainz")
     (description "@code{isrcsubmit} is a tool to extract @dfn{International
@@ -3821,11 +3731,8 @@ detailed track info including timbre, pitch, rhythm and loudness information.
     ;; https://github.com/pylast/pylast/issues/105
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-flaky" ,python-flaky)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-coverage python-pytest python-flaky python-pyyaml
+           python-setuptools-scm))
     (home-page "https://github.com/pylast/pylast")
     (synopsis "Python interface to Last.fm and Libre.fm")
     (description "A Python interface to Last.fm and other API-compatible
@@ -3849,10 +3756,7 @@ websites such as Libre.fm.")
                   "0j7qivaa04bpdz3anmgci5833dgiyfqqwq9fdrpl9m68b34gl773"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("eyed3" ,eyed3)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("youtube-dl" ,youtube-dl)))
+     (list python-requests eyed3 python-beautifulsoup4 youtube-dl))
     (arguments
      '(#:modules ((guix build python-build-system)
                   (guix build utils)
@@ -3909,40 +3813,40 @@ websites such as Libre.fm.")
                  `("GI_TYPELIB_PATH" ":" prefix (,types)))
                #t))))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("python-flask" ,python-flask)
-       ("python-mock" ,python-mock)
-       ("python-py7zr" ,python-py7zr)
-       ("python-pytest" ,python-pytest-6)
-       ("python-responses" ,python-responses)))
+     (list gobject-introspection
+           python-flask
+           python-mock
+           python-py7zr
+           python-pytest-6
+           python-responses))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gstreamer" ,gstreamer)
-       ("python-confuse" ,python-confuse)
-       ("python-jellyfish" ,python-jellyfish)
-       ("python-mediafile" ,python-mediafile)
-       ("python-munkres" ,python-munkres)
-       ("python-musicbrainzngs" ,python-musicbrainzngs)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-unidecode" ,python-unidecode)
-       ;; Optional dependencies for plugins. Some of these are also required by tests.
-       ("python-beautifulsoup4" ,python-beautifulsoup4) ; For lyrics.
-       ("python-discogs-client" ,python-discogs-client) ; For discogs.
-       ("python-mpd2" ,python-mpd2) ; For mpdstats.
-       ("python-mutagen" ,python-mutagen) ; For scrub.
-       ("python-langdetect" ,python-langdetect) ; For lyrics.
-       ("python-pillow" ,python-pillow) ; For fetchart, embedart, thumbnails.
-       ("python-pyacoustid" ,python-pyacoustid) ; For chroma.
-       ("python-pygobject" ,python-pygobject) ; For bpd, replaygain.
-       ("python-pylast" ,python-pylast) ; For lastgenre, lastimport.
-       ("python-pyxdg" ,python-pyxdg) ; For thumbnails.
-       ("python-rarfile" ,python-rarfile) ; For import.
-       ("python-reflink" ,python-reflink) ; For reflink.
-       ("python-requests" ,python-requests)
-       ("python-requests-oauthlib" ,python-requests-oauthlib))) ; For beatport.
+     (list bash-minimal
+           gst-plugins-base
+           gst-plugins-good
+           gstreamer
+           python-confuse
+           python-jellyfish
+           python-mediafile
+           python-munkres
+           python-musicbrainzngs
+           python-pyyaml
+           python-six
+           python-unidecode
+           ;; Optional dependencies for plugins. Some of these are also required by tests.
+           python-beautifulsoup4 ; For lyrics.
+           python-discogs-client ; For discogs.
+           python-mpd2 ; For mpdstats.
+           python-mutagen ; For scrub.
+           python-langdetect ; For lyrics.
+           python-pillow ; For fetchart, embedart, thumbnails.
+           python-pyacoustid ; For chroma.
+           python-pygobject ; For bpd, replaygain.
+           python-pylast ; For lastgenre, lastimport.
+           python-pyxdg ; For thumbnails.
+           python-rarfile ; For import.
+           python-reflink ; For reflink.
+           python-requests
+           python-requests-oauthlib)) ; For beatport.
     (home-page "https://beets.io")
     (synopsis "Music organizer")
     (description "The purpose of beets is to get your music collection
@@ -3968,11 +3872,8 @@ your music.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are no tests
     (propagated-inputs
-     `(("beets" ,beets)
-       ("python-isodate" ,python-isodate)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list beets python-isodate python-beautifulsoup4 python-requests
+           python-six))
     (home-page "https://github.com/unrblt/beets-bandcamp")
     (synopsis "Bandcamp plugin for beets")
     (description
@@ -4016,7 +3917,7 @@ using the beets FetchArt plugin.")
        ("zlib" ,zlib)
        ("zziplib" ,zziplib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Music tracker for working with .MOD/.XM module files")
     (description "MilkyTracker is a music application for creating .MOD and .XM
     module files.  It attempts to recreate the module replay and user experience of
@@ -4054,14 +3955,10 @@ using the beets FetchArt plugin.")
          (add-before 'configure 'link-libm
            (lambda _ (setenv "LIBS" "-lm") #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("python" ,python)))
+     (list autoconf automake python))
     (inputs
-     `(("alsa-lib" ,alsa-lib)           ; for asound dependency
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("sdl" ,sdl)))
+     (list alsa-lib ; for asound dependency
+           libx11 libxext sdl))
     (home-page "http://schismtracker.org")
     (synopsis "Oldschool sample-based music composition tool")
     (description
@@ -4133,7 +4030,7 @@ with a number of bugfixes and changes to improve IT playback.")
        ("libsigc++" ,libsigc++)
        ("ncurses" ,ncurses)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://essej.net/sooperlooper/")
     (synopsis "Live looping sampler")
     (description
@@ -4157,28 +4054,28 @@ available memory.")
                 "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("curl" ,curl)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg-3.4)
-       ("file" ,file)
-       ("jack" ,jack-1)
-       ("libid3tag" ,libid3tag)
-       ("libltdl" ,libltdl)
-       ("libmodplug" ,libmodplug)
-       ("libmpcdec" ,libmpcdec)
-       ("libmad" ,libmad)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("sasl" ,cyrus-sasl)
-       ("speex" ,speex)
-       ("taglib" ,taglib)
-       ("wavpack" ,wavpack)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           curl
+           faad2
+           ffmpeg-3.4
+           file
+           jack-1
+           libid3tag
+           libltdl
+           libmodplug
+           libmpcdec
+           libmad
+           libogg
+           libvorbis
+           ncurses
+           openssl
+           cyrus-sasl
+           speex
+           taglib
+           wavpack
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Console audio player designed to be powerful and easy to use")
     (description
      "Music on Console is a console audio player that supports many file
@@ -4241,7 +4138,7 @@ standard MIDI file with the csvmidi program.")
                (("install : all") "install :"))
              #t)))))
     (inputs
-     `(("lv2" ,lv2)))
+     (list lv2))
     (home-page "https://github.com/brummer10/GxGuvnor.lv2")
     (synopsis "Overdrive/distortion pedal simulation")
     (description "This package provides the LV2 plugin \"GxGuvnor\", a
@@ -4267,10 +4164,9 @@ simulation of an overdrive or distortion pedal for guitars.")
                   "0firap073ldw4nrykkd7jvyyj0jbl1nslxyzjj4kswazp99x7d9h"))
                 (file-name (string-append name "-" version "-checkout"))))
       (inputs
-       `(("lv2" ,lv2)
-         ("gtk+" ,gtk+-2)))
+       (list lv2 gtk+-2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
       (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
       (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
@@ -4511,11 +4407,9 @@ a simulation of an analog Wah pedal with switchless activation."))))
       (build-system cmake-build-system)
       (arguments '(#:tests? #f)) ; there are no tests
       (inputs
-       `(("fftw" ,fftw)
-         ("libsamplerate" ,libsamplerate)
-         ("lv2" ,lv2)))
+       (list fftw libsamplerate lv2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://github.com/ssj71/rkrlv2")
       (synopsis "Rakarrack effects ported to LV2 plugins")
       (description "This package provides the Rakarrack effects as LV2
@@ -4551,7 +4445,7 @@ maintainer these will get merged into the original project.")
          (modify-phases %standard-phases
            (delete 'configure))))
       (inputs
-       `(("lv2" ,lv2)))
+       (list lv2))
       (home-page "https://github.com/moddevices/mod-utilities")
       (synopsis "LV2 utility plugins")
       (description "This package provides LV2 audio utility plugins, such as
@@ -4616,22 +4510,21 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.")
                                    out "/lib" "\"]," line))))
                #t)))))
       (inputs
-       `(("boost" ,boost)
-         ("python-rdflib" ,python-rdflib)
-         ("python" ,python)
-         ("jack" ,jack-1)
-         ("lv2" ,lv2)
-         ("lilv" ,lilv)
-         ("raul" ,raul-devel)
-         ("ganv" ,ganv)
-         ("suil" ,suil)
-         ("serd" ,serd)
-         ("sord" ,sord)
-         ("sratom" ,sratom)
-         ("gtkmm" ,gtkmm-2)))
+       (list boost
+             python-rdflib
+             python
+             jack-1
+             lv2
+             lilv
+             raul-devel
+             ganv
+             suil
+             serd
+             sord
+             sratom
+             gtkmm-2))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("python-pygments" ,python-pygments)))
+       (list pkg-config python-pygments))
       (home-page "https://drobilla.net/software/ingen")
       (synopsis "Modular audio processing system")
       (description "Ingen is a modular audio processing system for JACK and
@@ -4661,14 +4554,9 @@ develop custom plugins for use in other applications without programming.")
      `(#:configure-flags
        (list "--enable-qt5")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("liblo" ,liblo)
-       ("lv2" ,lv2)))
+     (list qtbase-5 alsa-lib jack-1 liblo lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://qmidiarp.sourceforge.net/")
     (synopsis "MIDI arpeggiator")
     (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
@@ -4692,11 +4580,9 @@ modules running in parallel.")
      `(#:configure-flags
        (list "--enable-qt5")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("alsa-lib" ,alsa-lib)))
+     (list qtbase-5 alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (home-page "http://alsamodular.sourceforge.net/")
     (synopsis "MIDI event router and filter")
     (description "QMidiRoute is a MIDI event router and filter.  MIDI note,
@@ -4720,12 +4606,9 @@ defined as tabs in the main control surface.")
               (patches (search-patches "seq24-rename-mutex.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtkmm" ,gtkmm-2)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("lash" ,lash)))
+     (list gtkmm-2 alsa-lib jack-1 lash))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://edge.launchpad.net/seq24/")
     (synopsis "Real-time MIDI sequencer")
     (description "Seq24 is a real-time MIDI sequencer.  It was created to
@@ -4744,9 +4627,7 @@ provide a very simple interface for editing and playing MIDI loops.")
                 "1zmib0i9jicv9fyphgkcrk418qmpv3l4p38ibl31sh237ki5xqw9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-oauthlib" ,python-oauthlib)
-       ("python-requests" ,python-requests)))
+     (list python-dateutil python-oauthlib python-requests))
     (home-page "https://github.com/joalla/discogs_client")
     (synopsis "Python client for the Discogs API")
     (description "This is the continuation of the official Discogs API
@@ -4757,9 +4638,6 @@ change user data such as profile information, collections and wantlists,
 inventory, and orders.")
     (license license:bsd-2)))
 
-(define-public python2-discogs-client
-  (package-with-python2 python-discogs-client))
-
 (define-public libsmf
   (package
     (name "libsmf")
@@ -4795,11 +4673,9 @@ inventory, and orders.")
                          (find-files lib "\\.a$"))
                #t))))))
     (inputs
-     `(("readline" ,readline)
-       ("glib" ,glib)))
+     (list readline glib))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (home-page "http://libsmf.sourceforge.net/")
     (synopsis "Standard MIDI File format library")
     (description
@@ -4913,9 +4789,9 @@ audio samples and various soft sythesizers.  It can receive input from a MIDI ke
     (arguments
      `(#:configure-flags '("--enable-shared")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; Fails with default gcc (#include <filesystem> not found).
-       ("gcc" ,gcc-9)))
+     (list pkg-config
+           ;; Fails with default gcc (#include <filesystem> not found).
+           gcc-9))
     (inputs
      `(("jack" ,jack-2)
        ("lv2" ,lv2)
@@ -4958,7 +4834,7 @@ standalone JACK client and an LV2 plugin is also available.")
              "-DSFIZZ_TESTS=ON"
              "-DSFIZZ_USE_SYSTEM_ABSEIL=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("abseil-cpp" ,abseil-cpp)
        ("glib" ,glib)
@@ -5033,8 +4909,7 @@ includes LV2 plugins and a JACK standalone client.")
        ("qtsvg" ,qtsvg)
        ("qtxmlpatterns" ,qtxmlpatterns)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (synopsis "Music composition and notation software")
     (description
      "MuseScore is a music score typesetter.  Its main purpose is the creation
@@ -5082,27 +4957,27 @@ sample library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "src"))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dssi" ,dssi)
-       ("fluidsynth" ,fluidsynth)
-       ("glib" ,glib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lash" ,lash)
-       ("libinstpatch" ,libinstpatch)
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("lilv" ,lilv)
-       ("lrdf" ,lrdf)
-       ("lv2" ,lv2)
-       ("pcre" ,pcre)
-       ("pulseaudio" ,pulseaudio) ; required by rtaudio
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("rtaudio" ,rtaudio)
-       ("rubberband" ,rubberband)
-       ("sord" ,sord)))
+     (list alsa-lib
+           dssi
+           fluidsynth
+           glib
+           jack-1
+           ladspa
+           lash
+           libinstpatch
+           liblo
+           libsamplerate
+           libsndfile
+           lilv
+           lrdf
+           lv2
+           pcre
+           pulseaudio ; required by rtaudio
+           qtbase-5
+           qtsvg
+           rtaudio
+           rubberband
+           sord))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -5191,14 +5066,14 @@ ALSA, Pulseaudio, JACK, OSSv4 and CoreAudio.")
                 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
-       ("liblo" ,liblo)))
+     (list alsa-lib
+           jack-1
+           ladspa
+           libsamplerate
+           libsndfile
+           liblo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Audio plugin API for soft synths and effects")
     (description "DSSI is a plugin API for software instruments with user
 interfaces, permitting them to be hosted in-process by audio applications.
@@ -5275,25 +5150,24 @@ specification and header.")
              (setenv "HOME" "/tmp/foo")
              (setenv "XDG_RUNTIME_DIR" "/tmp/foo"))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bash" ,bash)
-       ("dssi" ,dssi)
-       ("flac" ,flac)
-       ("fftwf" ,fftwf)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("lilypond" ,lilypond)
-       ("lrdf" ,lrdf)
-       ("qtbase" ,qtbase-5)
-       ("tar" ,tar)
-       ("lirc" ,lirc)
-       ("wavpack" ,wavpack)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           bash
+           dssi
+           flac
+           fftwf
+           jack-1
+           ladspa
+           liblo
+           libsamplerate
+           lilypond
+           lrdf
+           qtbase-5
+           tar
+           lirc
+           wavpack
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))           ;for qtlinguist
+     (list pkg-config qttools))           ;for qtlinguist
     (synopsis "Music composition and editing environment based around a MIDI
 sequencer")
     (description "Rosegarden is a music composition and editing environment
@@ -5318,11 +5192,9 @@ notation and includes basic support for digital audio.")
     (build-system meson-build-system)
     (arguments '(#:tests? #f))          ; no test target
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list jack-1 lv2 mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
     (synopsis "Simple JACK patch bay")
     (description "PatchMatrix is a patch bay for the JACK audio connection
@@ -5361,12 +5233,9 @@ OSC connections.")
                        "-a" "lv2synth.cpp"
                        "-o" "main.cpp" "main.dsp")))))))
     (inputs
-     `(("boost" ,boost)
-       ("lv2" ,lv2)
-       ("ntk" ,ntk)))
+     (list boost lv2 ntk))
     (native-inputs
-     `(("faust" ,faust)
-       ("pkg-config" ,pkg-config)))
+     (list faust pkg-config))
     (home-page "http://openavproductions.com/sorcer/")
     (synopsis "Wavetable LV2 plugin synth")
     (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
@@ -5389,12 +5258,9 @@ the electronic or dubstep genre.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f)) ; there are no tests
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("drumstick" ,drumstick)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib drumstick pulseaudio qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
     (synopsis "MIDI synthesizer library")
     (description "This project is a real time General MIDI synthesizer based
@@ -5417,14 +5283,14 @@ soundfonts, using embedded samples instead.")
                 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("dssi" ,dssi)
-       ("liblo" ,liblo)
-       ("fftwf" ,fftwf)
-       ("gtk+" ,gtk+-2)
-       ("ladspa" ,ladspa)
-       ("alsa-lib" ,alsa-lib)))
+     (list dssi
+           liblo
+           fftwf
+           gtk+-2
+           ladspa
+           alsa-lib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://smbolton.com/whysynth.html")
     (synopsis "DSSI software synthesizer")
     (description "WhySynth is a versatile softsynth which operates as a plugin
@@ -5478,7 +5344,7 @@ ISRCs and the MCN (=UPC/EAN) from disc.")
          "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
     (build-system python-build-system)
     (inputs
-     `(("libdiscid" ,libdiscid)))
+     (list libdiscid))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5518,15 +5384,18 @@ Recording Code} (ISRC) can be extracted.}")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "src/CMakeLists.txt"
+               (("\\*.inc") ""))))
          (replace 'check
            (lambda _
              ;; requires network connections
              ;; (invoke "tests/mbtest")
              (invoke "tests/ctest")
              #t)))))
-    (inputs `(("neon" ,neon)
-              ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list neon libxml2))
+    (native-inputs (list pkg-config))
     (home-page "https://musicbrainz.org/doc/libmusicbrainz")
     (synopsis "MusicBrainz client library")
     (description "The MusicBrainz Client Library (libmusicbrainz), also known as
@@ -5547,9 +5416,8 @@ MusicBrainz lookup capabilities to their applications.")
                (base32
                 "1azc91jnwa3gdmy9pc8mflakgvsvf69ywwlqllxmdzwpk386w2xs"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("which" ,which)))
-    (inputs `(("libdiscid" ,libdiscid)))
+    (native-inputs (list pkg-config which))
+    (inputs (list libdiscid))
     (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
     (synopsis "Perl interface to the MusicBrainz libdiscid library")
     (description
@@ -5575,9 +5443,9 @@ compact disc (CDDA) identifiers.")
      ;; Tests try to connect to http://musicbrainz.org.
      '(#:tests? #f))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-mojolicious" ,perl-mojolicious)))
+     (list perl-mojolicious))
     (home-page "https://metacpan.org/release/WebService-MusicBrainz")
     (synopsis "Web service API to the MusicBrainz database")
     (description
@@ -5600,14 +5468,14 @@ at @code{musicbrainz.org}.")
         (base32 "1l9iqz6vxrrxapv7s110g360bqxksir4dcqd8w0l4lhmnfmz3vnk"))))
     (build-system trivial-build-system)
     (inputs
-     `(("bash" ,bash)                   ; for the wrapped program
-       ("perl" ,perl)
-       ("perl-www-mechanize" ,perl-www-mechanize)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
-       ;; 500 Can't verify SSL peers without knowing which Certificate
-       ;; Authorities to trust".
-       ("perl-mozilla-ca" ,perl-mozilla-ca)))
+     (list bash ; for the wrapped program
+           perl
+           perl-www-mechanize
+           perl-lwp-protocol-https
+           ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
+           ;; 500 Can't verify SSL peers without knowing which Certificate
+           ;; Authorities to trust".
+           perl-mozilla-ca))
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
@@ -5663,20 +5531,19 @@ console music players.")
            "1afkbqhzn6da7zaf5ab7dvyqj1izqhzprwfb4hw448fllda9bdvk"))))
       (build-system go-build-system)
       (native-inputs
-       `(("lua" ,lua)
-         ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-         ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
-         ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)
-         ("go-gitlab-com-ambrevar-damerau" ,go-gitlab-com-ambrevar-damerau)
-         ("go-gitlab-com-ambrevar-golua-unicode" ,go-gitlab-com-ambrevar-golua-unicode)
-         ("go-github-com-mgutz-ansi" ,go-github-com-mgutz-ansi)
-         ("go-github-com-michiwend-gomusicbrainz" ,go-github-com-michiwend-gomusicbrainz)
-         ("go-github-com-stevedonovan-luar" ,go-github-com-stevedonovan-luar)
-         ("go-github-com-wtolson-go-taglib" ,go-github-com-wtolson-go-taglib)
-         ("go-github-com-yookoala-realpath" ,go-github-com-yookoala-realpath)))
+       (list lua
+             go-github-com-mattn-go-isatty
+             go-github-com-mattn-go-colorable
+             go-github-com-aarzilli-golua
+             go-gitlab-com-ambrevar-damerau
+             go-gitlab-com-ambrevar-golua-unicode
+             go-github-com-mgutz-ansi
+             go-github-com-michiwend-gomusicbrainz
+             go-github-com-stevedonovan-luar
+             go-github-com-wtolson-go-taglib
+             go-github-com-yookoala-realpath))
       (inputs
-       `(("chromaprint" ,chromaprint)
-         ("ffmpeg" ,ffmpeg)))
+       (list chromaprint ffmpeg))
       (arguments
        `(#:import-path "gitlab.com/ambrevar/demlo"
          #:phases
@@ -5772,13 +5639,13 @@ discard bad quality ones.
                          '("qtmultimedia"))))
                #t))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("jack" ,jack-1)
-       ("portaudio" ,portaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtsvg" ,qtsvg)))
+     (list alsa-lib
+           fftw
+           jack-1
+           portaudio
+           qtbase-5
+           qtmultimedia
+           qtsvg))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("hicolor-icon-theme" ,hicolor-icon-theme)
@@ -5812,10 +5679,9 @@ with error and volume history, and advanced features.")
        `(#:python ,python-2
          #:tests? #f))                     ; no "check" target
       (inputs
-       `(("jack" ,jack-1)
-         ("ncurses" ,ncurses)))
+       (list jack-1 ncurses))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (home-page "https://fuzzle.org/~petern/mloop.html")
       (synopsis "Live MIDI looper")
       (description "mloop is a live MIDI looping system, using jack-midi.
@@ -5846,24 +5712,23 @@ easier to perform.  Features include:
                 "19kbhq99bkimx3aqrdzln0vlr4slkpx6kq66j731jvqyq76nlkp5"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("grilo" ,grilo)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gtk+" ,gtk+)
-       ("libcddb" ,libcddb)
-       ("libcdio" ,libcdio)
-       ("libcdio-paranoia" ,libcdio-paranoia)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libpeas" ,libpeas)
-       ("libsoup" ,libsoup)
-       ("sqlite" ,sqlite)
-       ("taglib" ,taglib)))
+     (list glib
+           grilo
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gtk+
+           libcddb
+           libcdio
+           libcdio-paranoia
+           libgudev
+           libnotify
+           libpeas
+           libsoup
+           sqlite
+           taglib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5897,7 +5762,7 @@ complete without obstructing your daily work.")
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dintrospection=false" "-Dgtk-doc=false")))
-    (inputs `(("python-pygobject" ,python-pygobject)))
+    (inputs (list python-pygobject))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
@@ -5936,11 +5801,9 @@ for integration into status line generators or other command-line tools.")
                (("-msse2 -mfpmath=sse") ""))
              #t)))))
     (inputs
-     `(("cairo" ,cairo)
-       ("libsndfile" ,libsndfile)))
+     (list cairo libsndfile))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "http://openavproductions.com/artyfx/")
     (synopsis "Audio effect LV2 plugin bundle")
     (description "ArtyFX is an LV2 plugin bundle of artistic real-time audio
@@ -5974,15 +5837,15 @@ and reverb.")
          (delete 'configure))           ; no configure script
        #:test-target "test"))
     (inputs
-     `(("cairo" ,cairo)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libsndfile" ,libsndfile)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list cairo
+           hicolor-icon-theme
+           jack-1
+           ladspa
+           libsndfile
+           lv2
+           mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Audio plugin collection")
     (description "LSP (Linux Studio Plugins) is a collection of audio
 plugins available as LADSPA/LV2 plugins and as standalone JACK
@@ -6006,13 +5869,9 @@ applications.")
          "08gjfx7vrsx9zvj04j8cr3vscxmq6jr2hbdi6dfgp1l1dnnpxsgq"))))
     (build-system meson-build-system)
     (inputs
-     `(("glu" ,glu)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("sratom" ,sratom)))
+     (list glu libx11 mesa sratom))
     (native-inputs
-     `(("flex" ,flex)
-       ("pkg-config" ,pkg-config)))
+     (list flex pkg-config))
     (synopsis "Investigative LV2 plugin bundle")
     (description "The Sherlock plugin bundle contains LV2 plugins for
 visualizing LV2 atom, MIDI and OSC events.  They can be used for monitoring
@@ -6051,8 +5910,7 @@ and debugging of event signal flows inside plugin graphs.")
        ("cairo" ,cairo)
        ("gtk" ,gtk+-2)))
     (native-inputs
-     `(("faust" ,faust)
-       ("pkg-config" ,pkg-config)))
+     (list faust pkg-config))
     (home-page "https://foo-yc20.codeforcode.com/")
     (synopsis "Implementation of Yamaha YC-20 combo organ from 1969")
     (description "This is a Faust implementation of a 1969 designed Yamaha
@@ -6089,15 +5947,14 @@ as a whole to realisticly reproduce the features and flaws of the real deal.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xxd" ,xxd)))
+     (list pkg-config xxd))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("mesa" ,mesa)))
+     (list cairo
+           fftw
+           fftwf
+           jack-1
+           lv2
+           mesa))
     (synopsis "Realtime graphical spectrum analyzer")
     (description "Spectacle is a real-time spectral analyzer using the
 short-time Fourier transform, available as LV2 audio plugin and JACK client.")
@@ -6132,24 +5989,20 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("fftwf" ,fftwf)
-       ("ftgl" ,ftgl)
-       ("glib" ,glib)
-       ("glu" ,glu)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)
-       ("libltc" ,libltc)
-       ("libsamplerate" ,libsamplerate)
-       ("libx11" ,libx11)
-       ("pango" ,pango)
-       ("zita-convolver" ,zita-convolver)))
+     (list cairo
+           fftwf
+           ftgl
+           glib
+           glu
+           hicolor-icon-theme
+           jack-1
+           libltc
+           libsamplerate
+           libx11
+           pango
+           zita-convolver))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("liblo" ,liblo)
-       ("lv2" ,lv2)
-       ("font-dejavu" ,font-dejavu)
-       ("pkg-config" ,pkg-config)))
+     (list help2man liblo lv2 font-dejavu pkg-config))
     (synopsis "Collection of LV2/JACK audio/MIDI processing plugins")
     (description "x42-plugins is a collection of over 80 cross-platform LV2
 audio and MIDI plugins that can also run as standalone JACK applications.")
@@ -6187,16 +6040,14 @@ audio and MIDI plugins that can also run as standalone JACK applications.")
              (setenv "CC" "gcc") #t))
          (delete 'configure))))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("jack" ,jack-1)                 ;for the standalone JACK application
-       ("liblo" ,liblo)
-       ("libsamplerate" ,libsamplerate)
-       ("mesa" ,mesa)
-       ("zita-convolver" ,zita-convolver)))
+     (list fftwf
+           jack-1 ;for the standalone JACK application
+           liblo
+           libsamplerate
+           mesa
+           zita-convolver))
     (native-inputs
-     `(("ladspa" ,ladspa)
-       ("lv2" ,lv2)
-       ("pkg-config" ,pkg-config)))
+     (list ladspa lv2 pkg-config))
     (synopsis "Collection of audio processing plugins")
     (description
      "Zam plugins is a collection of audio processing plugins in the LADSPA,
@@ -6229,18 +6080,16 @@ ZaMultiComp, ZaMultiCompX2 and ZamSynth.")
              (string-append "-DCMAKE_INSTALL_PREFIX="
                             (assoc-ref %outputs "out")))))
     (inputs
-     `(("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("jack" ,jack-1)                 ;for the standalone JACK application
-       ("libsndfile" ,libsndfile)
-       ("libx11" ,libx11)
-       ("redkite" ,redkite)
-       ("rapidjson" ,rapidjson)))
+     (list hicolor-icon-theme
+           jack-1 ;for the standalone JACK application
+           libsndfile
+           libx11
+           redkite
+           rapidjson))
     (native-inputs
-     `(("lv2" ,lv2)
-       ;; Fails with default gcc (#include <filesystem> not found).
-       ("gcc" ,gcc-9)
-       ("pkg-config" ,pkg-config)
-       ("sord" ,sord)))
+     (list lv2
+           ;; Fails with default gcc (#include <filesystem> not found).
+           gcc-9 pkg-config sord))
     (synopsis "Percussion synthesizer")
     (description "Geonkick is a synthesizer that can synthesize elements
 of percussion such as kicks, snares, hit-hats, shakers, claps and sticks.
@@ -6275,16 +6124,16 @@ It can also play and mix samples.")
       (modify-phases %standard-phases
         (delete 'configure))))
    (inputs
-    `(("alsa-lib" ,alsa-lib)
-      ("cairo" ,cairo)
-      ("fluidsynth" ,fluidsynth)
-      ("jack" ,jack-1)
-      ("liblo" ,liblo)
-      ("libsigc++" ,libsigc++)
-      ("libsmf" ,libsmf)
-      ("libx11" ,libx11)))
+    (list alsa-lib
+          cairo
+          fluidsynth
+          jack-1
+          liblo
+          libsigc++
+          libsmf
+          libx11))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://github.com/brummer10/Mamba")
    (synopsis "Virtual MIDI keyboard and MIDI file player/recorder for JACK")
    (description "Mamba is a virtual MIDI keyboard and MIDI file
@@ -6317,14 +6166,12 @@ ones.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("cairo" ,cairo)
-       ("liblo" ,liblo)                 ; for dssi plugins
-       ("jack" ,jack-1)                 ; for standalone applications
-       ("mesa" ,mesa)))
+     (list cairo
+           liblo ; for dssi plugins
+           jack-1 ; for standalone applications
+           mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("dssi" ,dssi)
-       ("lv2" ,lv2)))
+     (list pkg-config dssi lv2))
     (home-page "https://github.com/DISTRHO/DPF-Plugins")
     (synopsis "Audio plugin collection")
     (description "Collection of audio plugins built with the DISTRHO Plugin
@@ -6367,14 +6214,9 @@ Soul Force), MVerb, Nekobi, and ProM.")
            (lambda _
              (setenv "CC" "gcc"))))))
     (inputs
-     `(("cairo" ,cairo)
-       ("dssi" ,dssi)
-       ("glu" ,glu)
-       ("mesa" ,mesa)
-       ("pango" ,pango)))
+     (list cairo dssi glu mesa pango))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "https://x42-plugins.com/x42/x42-avldrums")
     (synopsis "Drum sample player LV2 plugin dedicated to the AVLinux Drumkits")
     (description "AVLdrums is a drum sample player LV2 plugin dedicated to Glen
@@ -6396,7 +6238,9 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))))
+            "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))
+        ;; Apply GCC 9 fixes from https://github.com/mtytel/helm/pull/233
+        (patches (search-patches "helm-fix-gcc-9-build.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f  ; no "check" target
@@ -6433,8 +6277,7 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
        ("jack" ,jack-1)
        ("mesa" ,mesa)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("lv2" ,lv2)))
+     (list pkg-config lv2))
     (home-page "https://tytel.org/helm/")
     (synopsis "Polyphonic synth with lots of modulation")
     (description "Helm is a cross-platform polyphonic synthesizer available standalone
@@ -6461,7 +6304,6 @@ and as an LV2 plugin.")
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
-      #:meson ,meson-0.55
       #:configure-flags
       `("-Dtests=true"
         "-Dmanpage=true"
@@ -6498,9 +6340,8 @@ and as an LV2 plugin.")
       ("xdg-utils" ,xdg-utils)
       ("zstd" ,zstd "lib")))
    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("help2man" ,help2man)
-       ("glib" ,glib "bin"))) ; for 'glib-compile-resources'
+     (list pkg-config help2man
+           `(,glib "bin"))) ; for 'glib-compile-resources'
    (synopsis "Digital audio workstation focusing on usability")
    (description "Zrythm is a digital audio workstation designed to be
 featureful and easy to use.  It offers unlimited automation options, LV2
@@ -6554,11 +6395,9 @@ plugin support, JACK support and chord assistance.")
                                  (not (string-suffix? ".so" name))
                                  (not (string-suffix? ".lv2" name))))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("jack" ,jack-1)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)))
+     (list jack-1 libx11 mesa))
     (home-page "https://michaelwillis.github.io/dragonfly-reverb/")
     (synopsis "Concert hall reverb and room reverb effects")
     (description
@@ -6584,12 +6423,9 @@ as JACK standalone applications.")
          "1rkm2xajmyik6289b20rp5a5br9f3sh1xk8nb1bs6qpmcrfirgbs"))))
     (build-system meson-build-system)
     (inputs
-      `(("guile" ,guile-2.2)
-        ("libsndfile" ,libsndfile)
-        ("lv2" ,lv2)
-        ("ztoolkit-rsvg" ,ztoolkit-rsvg)))
+      (list guile-2.2 libsndfile lv2 ztoolkit-rsvg))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Audio plugin collection")
     (description "ZPlugins is a collection of audio DSP plugins intended
 to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
@@ -6618,12 +6454,9 @@ to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
     (arguments
      `(#:tests? #f))                    ; no tests included
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("glib" ,glib)
-       ("jack" ,jack-1)
-       ("lv2" ,lv2)))
+     (list alsa-lib glib jack-1 lv2))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ssj71/reMID.lv2")
     (synopsis
      "MIDI-controlled implementation of the SID 6581 chip used in the
@@ -6662,11 +6495,9 @@ control of the chip.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure target
     (inputs
-     `(("cairo" ,cairo)
-       ("jack" ,jack-1)
-       ("mesa" ,mesa)))
+     (list cairo jack-1 mesa))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/linuxmao-org/VL1-emulator")
     (synopsis "Emulator of Casio VL-Tone VL1")
     (description "The VL1-Emulator is an emulator of Casio VL-Tone VL1,
@@ -6758,9 +6589,9 @@ plugin and a standalone JACK application.")
                               "/lib/lv2")
                        "install"))))))
       (inputs
-        `(("lv2" ,lv2)))
+        (list lv2))
       (native-inputs
-        `(("pkg-config" ,pkg-config)))
+        (list pkg-config))
       (synopsis "Audio plugin collection")
       (description "TAP (Tom's Audio Processing) plugins is a collection of
   audio effect plugins originally released as LADSPA plugins.  This package
@@ -6814,11 +6645,9 @@ plugin and a standalone JACK application.")
                                  (not (string-suffix? ".lv2" name))))))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-      `(("jack" ,jack-1)
-        ("lv2" ,lv2)
-        ("mesa" ,mesa)))
+      (list jack-1 lv2 mesa))
     (synopsis "Waveshaper plugin")
     (description "Wolf Shaper is a waveshaper plugin with a graph editor.
 It is provided as an LV2 plugin and as a standalone Jack application.")
@@ -6896,14 +6725,14 @@ It is provided as an LV2 plugin and as a standalone Jack application.")
                                    (not (string-suffix? ".lv2" name))))))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-        `(("cairo" ,cairo)
-          ("glu" ,glu)
-          ("jack" ,jack-1)
-          ("lv2" ,lv2)
-          ("mesa" ,mesa)
-          ("pango" ,pango)))
+        (list cairo
+              glu
+              jack-1
+              lv2
+              mesa
+              pango))
       (synopsis "Audio plugin collection")
       (description "Shiru plugins is a collection of audio plugins created
   by Shiru, ported to LV2 by the Linux MAO project using the DISTRHO plugin
@@ -6934,18 +6763,18 @@ It is provided as an LV2 plugin and as a standalone Jack application.")
                (substitute* (string-append bin "a2j")
                  (("a2j_control") (string-append bin "a2j_control")))
                (wrap-program (string-append bin "a2j_control")
-                `("PYTHONPATH" prefix (,(getenv "PYTHONPATH"))))
+                `("PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (build-system meson-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bash-minimal" ,bash-minimal)   ; for wrap-program
-       ("dbus" ,dbus)
-       ("jack" ,jack-1)
-       ("python" ,python)
-       ("python-dbus" ,python-dbus)))
+     (list alsa-lib
+           bash-minimal ; for wrap-program
+           dbus
+           jack-1
+           python
+           python-dbus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "ALSA sequencer to JACK MIDI bridging")
     (description
      "@code{a2jmidid} is a daemon that implements automatic bridging of ALSA
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index 3710d4ff11..cd694f53f0 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -39,8 +39,7 @@
        (base32 "0ds9qas1zxvvx8qbpjmh4yk4gdg3cgs3ly27krcp6a5vlk6vhzbm"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gettext" ,gettext-minimal)
-       ("ncurses" ,ncurses)))
+     (list gettext-minimal ncurses))
     (home-page "https://www.nano-editor.org/")
     (synopsis "Small, user-friendly console text editor")
     (description
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index 9faa7131d3..d6e4522bf0 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -37,7 +37,7 @@
                (base32
                 "1m0gk09jaz114piidiw8fkg0id5l6nhz1cg5nlaf1yl3l595g49b"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (synopsis "Ncurses-based disk usage analyzer")
     (description
      "Ncdu is a disk usage analyzer with an ncurses interface, aimed to be
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index 2e63565591..311a681d09 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
@@ -36,16 +36,17 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages linux)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (ice-9 match))
 
 (define-public ncurses
   (package
     (name "ncurses")
-    (version "6.2")
+    (version "6.2.20210619")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/ncurses/ncurses-"
-                                  (car (string-split version #\-))
+                                  (version-major+minor version)
                                   ".tar.gz"))
               (sha256
                (base32
@@ -57,8 +58,7 @@
      (let ((patch-makefile-phase
             '(lambda _
                (for-each patch-makefile-SHELL
-                         (find-files "." "Makefile.in"))
-               #t))
+                         (find-files "." "Makefile.in"))))
            (configure-phase
             ;; The 'configure' script does not understand '--docdir', so we must
             ;; override that and use '--mandir' instead.
@@ -74,18 +74,20 @@
                         (if target
                             (cons (string-append "--host=" target)
                                   configure-flags)
-                            configure-flags))
-                 #t)))
+                            configure-flags)))))
            (apply-rollup-patch-phase
             ;; Ncurses distributes "stable" patchsets to be applied on top
             ;; of the release tarball.  These are only available as shell
             ;; scripts(!) so we decompress and apply them in a phase.
             ;; See <https://invisible-mirror.net/archives/ncurses/6.1/README>.
             '(lambda* (#:key inputs native-inputs #:allow-other-keys)
-               (copy-file (assoc-ref (or native-inputs inputs) "rollup-patch")
-                          (string-append (getcwd) "/rollup-patch.sh.bz2"))
-               (invoke "bzip2" "-d" "rollup-patch.sh.bz2")
-               (invoke "sh" "rollup-patch.sh")))
+               (let ((rollup-patch (assoc-ref (or native-inputs inputs)
+                                              "rollup-patch")))
+                 (when rollup-patch
+                   (copy-file rollup-patch
+                              (string-append (getcwd) "/rollup-patch.sh.bz2"))
+                   (invoke "bzip2" "-d" "rollup-patch.sh.bz2")
+                   (invoke "sh" "rollup-patch.sh")))))
            (remove-shebang-phase
             '(lambda _
                ;; To avoid retaining a reference to the bootstrap Bash via the
@@ -98,8 +100,7 @@
                  (("@SHELL@ \\$0")
                   "$0")
                  (("mandir=.*$")
-                  "mandir=share/man"))
-               #t))
+                  "mandir=share/man"))))
            (post-install-phase
             `(lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -156,13 +157,12 @@
                                            (when (file-exists? packagew.pc)
                                              (symlink packagew.pc package.pc))))
                                        '())))
-                             '("curses" "ncurses" "form" "panel" "menu")))
-                 #t))))
+                             '("curses" "ncurses" "form" "panel" "menu")))))))
        `(#:configure-flags
          ,(cons*
            'quasiquote
            `(("--with-shared" "--without-debug" "--enable-widec"
-              
+
               "--enable-pc-files"
               ,(list 'unquote '(string-append "--with-pkg-config-libdir="
                                               (assoc-ref %outputs "out")
@@ -195,6 +195,8 @@
               ,@(if (target-mingw?) '("--enable-term-driver") '()))))
          #:tests? #f                  ; no "check" target
          #:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'apply-rollup-patch
+                      ,apply-rollup-patch-phase)
                     (replace 'configure ,configure-phase)
                     (add-after 'install 'post-install
                       ,post-install-phase)
@@ -206,6 +208,17 @@
      `(,@(if (%current-target-system)
              `(("self" ,this-package))            ;for `tic'
              '())
+       ("rollup-patch"
+        ,(origin
+           (method url-fetch)
+           (uri (match (string-split (version-major+minor+point version) #\.)
+                  ((major minor point)
+                   (string-append "https://invisible-mirror.net/archives"
+                                  "/ncurses/" major "." minor "/ncurses-"
+                                  major "." minor "-" point "-patch.sh.bz2"))))
+           (sha256
+            (base32
+             "1b6522cvi4066bgh9lp93q8lk93zcjjssvnw1512z447xvazy2y6"))))
        ("pkg-config" ,pkg-config)))
     (native-search-paths
      (list (search-path-specification
@@ -248,7 +261,7 @@ ncursesw library provides wide character support.")
                 "0riqmp2xl2j2yxx69nyg8jbm2fyi5fp4clcf6zi5jfm3irn3l8y9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Curses widgets")
     (description "Dialog is a script-interpreter which provides a set of
 curses widgets, such as dialog boxes.")
@@ -269,7 +282,7 @@ curses widgets, such as dialog boxes.")
          "0r6xd9wr0c25rr28zixhqipak575zqsfb7r7f2693i9il1dpj554"))))
     (build-system perl-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:make-maker-flags (list "PANELS" "MENUS")
        #:phases
@@ -328,8 +341,8 @@ of your system.")
                     (lib (string-append out "/lib")))
                ;; Some programs look for libstfl.so.0.
                (symlink "libstfl.so" (string-append lib "/libstfl.so.0"))))))))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list ncurses))
+    (native-inputs (list swig))
     (home-page "http://www.clifford.at/stfl/")
     (synopsis "Structured terminal forms library")
     (description "Stfl is a library which implements a curses-based widget
diff --git a/gnu/packages/netpbm.scm b/gnu/packages/netpbm.scm
index 96025661ca..5f3dcdb8ea 100644
--- a/gnu/packages/netpbm.scm
+++ b/gnu/packages/netpbm.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -132,8 +132,7 @@
              (display (string-append "LDFLAGS += -Wl,-rpath=" %output "/lib") f)
              (close-port f))
 
-           (let ((rgb (string-append (assoc-ref inputs "xorg-rgb")
-                                     "/share/X11/rgb.txt")))
+           (let ((rgb (search-input-file inputs "/share/X11/rgb.txt")))
              (substitute* "config.mk"
                (("/usr/share/netpbm/rgb.txt") rgb))
 
@@ -143,8 +142,7 @@
                (("\"%s/gs\"")
                 "\"%s/gsc\"")
                (("/usr/bin/gs")
-                (string-append (assoc-ref inputs "ghostscript") "/bin/gsc"))))
-           #t))
+                (search-input-file inputs "/bin/gsc"))))))
        (add-before 'check 'setup-check
          (lambda _
            ;; install temporarily into /tmp/netpbm
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index 7f85f54fbf..27bd9efc60 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2021 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -62,8 +62,8 @@
                                     (find-files "." "\\.a$")))
                         #t))))))
     (outputs '("out" "debug" "static"))
-    (native-inputs `(("m4" ,m4)))
-    (propagated-inputs `(("gmp" ,gmp)))
+    (native-inputs (list m4))
+    (propagated-inputs (list gmp))
     (home-page "https://www.lysator.liu.se/~nisse/nettle/")
     (synopsis "C library for low-level cryptographic functionality")
     (description
@@ -73,43 +73,21 @@ cryptographic toolkits for object-oriented languages or in applications
 themselves.")
     (license gpl2+)))
 
-(define-public nettle-3.5
+(define-public nettle
   ;; This version is not API-compatible with version 2.  In particular, lsh
   ;; cannot use it yet.  So keep it separate.
   (package (inherit nettle-2)
-    (version "3.5.1")
-    (replacement nettle-3.5/fixed)
+    (version "3.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/nettle/nettle-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "06clvkdfxhlbagn4afssylmn5vrak59dlmnvy8b2xc31hycs3k3m"))))
+                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))
     (arguments
      (substitute-keyword-arguments (package-arguments nettle-2)
        ((#:configure-flags flags)
         ;; Build "fat" binaries where the right implementation is chosen
         ;; at run time based on CPU features (starting from 3.1.)
         `(cons "--enable-fat" ,flags))))))
-
-(define nettle-3.5/fixed
-  (package-with-extra-patches
-   nettle-3.5
-   (search-patches "nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch"
-                   "nettle-3.5-CVE-2021-3580-pt1.patch"
-                   "nettle-3.5-CVE-2021-3580-pt2.patch")))
-
-(define-public nettle-3.7
-  (package (inherit nettle-3.5)
-    (version "3.7.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/nettle/nettle-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))))
-
-;;; Upgrading Nettle on master would cause 10000+ packages to be rebuilt.
-(define-public nettle nettle-3.5)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 739bd1a35a..1ec1586fb3 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2017, 2021 Stefan Reichör <stefan@xsteve.at>
@@ -43,7 +43,10 @@
 ;;; Copyright © 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Justin Veilleux <terramorpha@cock.li>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Milkey Mouse <milkeymouse@meme.institute>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -160,12 +163,12 @@
         (base32 "10ndzkip8blgkw572n3dicl6mgjaa7kygwn3vls80liq92vf1sa9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python-wrapper
+           which))
     (home-page "https://github.com/sctplab/usrsctp/")
     (synopsis "SCTP user-land implementation")
     (description "UsrSCTP is a portable SCTP userland stack.  SCTP is a message
@@ -187,10 +190,9 @@ runs on top of IP or UDP, and supports both v4 and v6 versions.")
         (base32 "0kmlqk04sgkshsll4r9w3k0rvrgz0gpk987618r50khwl484zss6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("libressl" ,libressl)))
+     (list libressl))
     (home-page "https://github.com/axel-download-accelerator/axel")
     (synopsis "Light command line download accelerator")
     (description
@@ -265,65 +267,79 @@ Android, and ChromeOS.")
     (license license:lgpl2.1+)))
 
 (define-public libnice
-  (package
-    (name "libnice")
-    (version "0.1.18")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://libnice.freedesktop.org/releases/"
-                       name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1x3kj9b3dy9m2h6j96wgywfamas1j8k2ca43k5v82kmml9dx5asy"))))
-    (build-system meson-build-system)
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
-       #:configure-flags
-       (list
-        "-Dgtk_doc=enabled")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'disable-failing-test
-           (lambda _
-             (substitute* "tests/meson.build"
-               ;; ‘test-set-port-range.c:66:main: assertion failed:
-               ;; (nice_agent_gather_candidates (agent, stream1))’
-               (("'test-set-port-range'") "#"))
-             #t))
-         (add-after 'install 'move-docs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share"))
-               (rename-file
-                (string-append out "/share/gtk-doc")
-                (string-append doc "/share/gtk-doc"))
-               #t))))))
-    (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libnsl" ,libnsl)))
-    (propagated-inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gnutls" ,gnutls)))
-    (synopsis "GLib ICE implementation")
-    (description "LibNice is a library that implements the Interactive
+  ;; The latest release is old and randomly fails tests with GStreamer 1.18.5,
+  ;; such as: "test-bind: ../libnice-0.1.18/stun/tests/test-bind.c:234:
+  ;; bad_responses: Assertion `len >= 20' failed"
+  (let ((revision "0")
+        (commit "47a96334448838c43d7e72f4ef51b317befbfae1"))
+    (package
+      (name "libnice")
+      (version (git-version "0.1.18" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.freedesktop.org/libnice/libnice")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "19ypjazslmsb9vqs2wyyzvi72h5jbn16dbng7pxh485djdrmgcg4"))))
+      (build-system meson-build-system)
+      (outputs '("out" "doc"))
+      (arguments
+       `(#:glib-or-gtk? #t           ; To wrap binaries and/or compile schemas
+         #:configure-flags
+         (list
+          "-Dgtk_doc=enabled")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'disable-failing-tests
+             (lambda _
+               (substitute* "tests/meson.build"
+                 ;; ‘test-set-port-range.c:66:main: assertion failed:
+                 ;; (nice_agent_gather_candidates (agent, stream1))’
+                 (("'test-set-port-range'" all)
+                  (string-append "# " all))
+                 ;; The following test is disabled as it fails in a
+                 ;; nondeterministic fashion (see:
+                 ;; https://gitlab.freedesktop.org/libnice/libnice/-/issues/151).
+                 (("'test-bsd'" all)
+                  (string-append "# " all)))
+               (substitute* "stun/tests/meson.build"
+                 ;; test-bind.c:234: bad_responses: Assertion `len >= 20'
+                 ;; failed (see:
+                 ;; https://gitlab.freedesktop.org/libnice/libnice/-/issues/150).
+                 (("'bind', ")
+                  ""))))
+           (add-after 'install 'move-docs
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (assoc-ref outputs "doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (rename-file
+                  (string-append out "/share/gtk-doc")
+                  (string-append doc "/share/gtk-doc"))))))))
+      (native-inputs
+       `(("glib:bin" ,glib "bin")
+         ("gobject-introspection" ,gobject-introspection)
+         ("graphviz" ,graphviz)
+         ("gtk-doc" ,gtk-doc/stable)
+         ("pkg-config" ,pkg-config)))
+      (inputs
+       (list gstreamer gst-plugins-base libnsl))
+      (propagated-inputs
+       (list glib glib-networking gnutls))
+      (synopsis "GLib ICE implementation")
+      (description "LibNice is a library that implements the Interactive
 Connectivity Establishment (ICE) standard (RFC 5245 & RFC 8445).  It provides a
 GLib-based library, libnice, as well as GStreamer elements to use it.")
-    (home-page "https://libnice.freedesktop.org/")
-    (license
-     ;; This project is dual-licensed.
-     (list
-      license:lgpl2.1+
-      license:mpl1.1))))
+      (home-page "https://libnice.freedesktop.org/")
+      (license
+       ;; This project is dual-licensed.
+       (list
+        license:lgpl2.1+
+        license:mpl1.1)))))
 
 (define-public rtmpdump
   ;; There are no tags in the repository, and the project is unlikely to
@@ -372,8 +388,7 @@ GLib-based library, libnice, as well as GStreamer elements to use it.")
                   "CRYPTO=GNUTLS"))))
            (delete 'configure))))
       (inputs
-       `(("gnutls" ,gnutls)
-         ("zlib" ,zlib)))
+       (list gnutls zlib))
       (synopsis "Tools and library for handling RTMP streams")
       (description "RTMPdump is a toolkit for RTMP streams.  All forms of RTMP are
 supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.")
@@ -401,7 +416,7 @@ supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.")
         (base32 "1n6pgrcs8gwrcq5fch1q3yk3jipjwrf21s9a13fbjrl903g5zzv9"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ;no tests
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (synopsis "Network load monitor")
     (description
      "Slurm is a network load monitor.  It shows real-time traffic statistics
@@ -437,7 +452,7 @@ from any network device in any of three ASCII graph formats.")
        ("pkg-config" ,pkg-config)
        ("tclsh" ,tcl)))
     (propagated-inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (synopsis "Secure Reliable Transport")
     (description "SRT is a transport technology that optimizes streaming
 performance across unpredictable networks, such as the Internet.")
@@ -478,12 +493,9 @@ performance across unpredictable networks, such as the Internet.")
         (base32 "1jfq58j365mlgssavyw5wcal42n0xjkr40vmj9b8w265wgs28j20"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("linux-headers" ,linux-libre-headers)))
+     (list linux-libre-headers))
     (synopsis
      "@acronym{SCTP, Stream Control Transmission Protocol} helpers for Linux")
     (description
@@ -512,7 +524,7 @@ It also includes some SCTP-related helper utilities.")
         (base32 "14h2qlmfi24bizhvvqkfqfa78pzm3911ibrzy9k94i97xy1978dy"))))
     (build-system python-build-system)
     (inputs
-     `(("lksctp-tools" ,lksctp-tools)))
+     (list lksctp-tools))
     (arguments
      `(#:tests? #f  ;; tests require network
        #:phases
@@ -549,7 +561,7 @@ SCTP-aware kernel (most are).")
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc/" ,name "-" ,version))))
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (home-page "https://www.zeroflux.org/projects/knock")
     (synopsis "Small port-knock daemon")
     (description "@command{knockd} is a port-knock daemon.  It listens to all traffic on
@@ -669,24 +681,24 @@ systems with no further dependencies.")
                               "blueman-manager.in" "blueman-mechanism.in"
                               "blueman-rfcomm-watcher.in" "blueman-sendto.in"
                               "blueman-services.in" "blueman-tray.in")
-                 (("@PYTHON@") (string-append (assoc-ref inputs "python")
-                                              "/bin/python"
-                                              ,(version-major+minor
-                                                (package-version python))))))))
+                 (("@PYTHON@")
+                  (search-input-file inputs
+                                     (string-append
+                                      "/bin/python"
+                                      ,(version-major+minor
+                                        (package-version python)))))))))
          ;; Fix loading of external programs.
          (add-after 'unpack 'patch-external-programs
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("blueman/main/NetConf.py"
                             "blueman/main/PPPConnection.py")
                (("/usr/sbin/bluetoothd")
-                (string-append (assoc-ref inputs "bluez")
-                               "/libexec/bluetooth/bluetoothd"))
+                (search-input-directory inputs
+                                        "/libexec/bluetooth/bluetoothd"))
                (("/sbin/iptables")
-                (string-append (assoc-ref inputs "iptables")
-                               "/sbin/iptables"))
+                (search-input-file inputs "/sbin/iptables"))
                (("/usr/sbin/pppd")
-                (string-append (assoc-ref inputs "ppp")
-                               "/sbin/pppd")))))
+                (search-input-file inputs "/sbin/pppd")))))
          ;; Fix loading of pulseaudio libraries.
          (add-after 'unpack 'patch-pulseaudio-libraries
            (lambda* (#:key inputs #:allow-other-keys)
@@ -711,7 +723,7 @@ systems with no further dependencies.")
                (for-each
                 (lambda (program)
                   (wrap-program program
-                    `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,lib))
+                    `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,lib))
                     `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
                 (append
                  (map (lambda (prog) (string-append bin prog))
@@ -729,7 +741,7 @@ systems with no further dependencies.")
     (inputs
      `(("bluez" ,bluez)
        ("dbus" ,dbus)
-       ("gdkpixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("gtk+" ,gtk+)
        ("iproute2" ,iproute)
@@ -913,7 +925,7 @@ useful for making transparent firewalls.")
                 "1sbmqqvni3ss9wyay6ik5v81kxffkra80mh4ypgj74g82iba5b1z"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))          ; no test suite
-    (inputs `(("openssl" ,openssl)))
+    (inputs (list openssl))
     (home-page "http://www.dest-unreach.org/socat/")
     (synopsis
      "Open bidirectional communication channels from the command line")
@@ -943,8 +955,8 @@ or server shell scripts with network connections.")
                 "1qxnbpyly00kml3sjan9iqg6pqacsi3yqq66x25w455cwkjc2h72"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
-    (inputs `(("openssl" ,openssl)))
+     (list which))
+    (inputs (list openssl))
     (home-page "http://www.maier-komor.de/mbuffer.html")
     (synopsis
      "Swiss army knife for data stream buffering (network aware)")
@@ -974,7 +986,17 @@ or server shell scripts with network connections.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0p9ilj4v96q32klavx0phw9va21fjp8vpk11nbh6v2ppxnnxfhwm"))))
+                "0p9ilj4v96q32klavx0phw9va21fjp8vpk11nbh6v2ppxnnxfhwm"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; 'sys_errlist' & co. are gone in glibc 2.33; work around it.
+               '(substitute* "percent_m.c"
+                  (("sys_errlist\\[errno\\]")
+                   "strerror (errno)")
+                  (("errno < sys_nerr")
+                   "(1)")
+                  (("errno >= sys_nerr")
+                   "(0)")))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1083,7 +1105,7 @@ more.")
     (arguments
      '(#:configure-flags '("--enable-drafts")))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://zeromq.org")
     (synopsis "High-level C bindings for ØMQ")
     (description
@@ -1112,9 +1134,9 @@ between different versions of ØMQ.")
        #:tests? #f
        #:configure-flags '("-DCPPZMQ_BUILD_TESTS=OFF")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (home-page "https://zeromq.org")
     (synopsis "C++ bindings for the ØMQ messaging library")
     (description
@@ -1186,7 +1208,7 @@ written in the C programming language.")
     (native-inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("zlib" ,zlib))) ; in the Libs.private field of rdkafka.pc
+     (list zlib)) ; in the Libs.private field of rdkafka.pc
     (home-page "https://github.com/edenhill/librdkafka")
     (synopsis "Apache Kafka C/C++ client library")
     (description
@@ -1227,9 +1249,9 @@ receiving NDP messages.")
                 "0v8i592vwjypf111w0lfvaxdwhzybp6w600g28m9rm490c8xcvv8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libmnl" ,libmnl)))
+     (list libmnl))
     (home-page "https://www.kernel.org/pub/software/network/ethtool/")
     (synopsis "Display or change Ethernet device settings")
     (description
@@ -1271,7 +1293,7 @@ Ethernet devices.")
                       (copy-file "ifstatus"
                                  (string-append bin "/ifstatus")))
                     #t)))))
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://ifstatus.sourceforge.net/graphic/index.html")
     (synopsis "Text based network interface status monitor")
     (description
@@ -1321,9 +1343,7 @@ intended as a substitute for the PPPStatus and EthStatus projects.")
        ("libxml2" ,libxml2)          ;for XML_CATALOG_FILES
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("libcap" ,libcap)
-       ("libidn2" ,libidn2)
-       ("openssl" ,openssl)))
+     (list libcap libidn2 openssl))
     (synopsis "Collection of network utilities")
     (description
      "This package contains a variety of tools for dealing with network
@@ -1363,7 +1383,7 @@ discover MTU along the way.
                (base32
                 "1rb9skch2kgqzigf19x8bzk211jdfjfdkrcvaqyj89jy2pkm3h61"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://www.roland-riegel.de/nload/")
     (synopsis "Realtime console network usage monitor")
     (description
@@ -1407,10 +1427,8 @@ test_parse_format_ipv(4(|_listen_all|_mapped_ipv6)|6)\\);")
        #:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "prefix=" (assoc-ref %outputs "out")))
        #:test-target "test"))
-    (inputs `(("net-tools" ,net-tools)
-              ("zlib" ,zlib)))
-    (native-inputs `(("check" ,check-0.14)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list net-tools zlib))
+    (native-inputs (list check-0.14 pkg-config))
     (home-page "https://code.kryo.se/iodine/")
     (synopsis "Tunnel IPv4 data through a DNS server")
     (description "Iodine tunnels IPv4 data through a DNS server.  This
@@ -1447,7 +1465,7 @@ and up to 1 Mbit/s downstream.")
              (setenv "HAVE_ICONV" "1")
              #t)))))
     (inputs
-     `(("libidn2" ,libidn2)))
+     (list libidn2))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)
@@ -1597,18 +1615,12 @@ round-robin fashion.")
                    (invoke "rst2man.py" "gandicli.man.rst")))
                #t))))))
     (native-inputs
-     `(("python-docutils" ,python-docutils)   ; for rst2man.py
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-tox" ,python-tox)))
+     (list python-docutils ; for rst2man.py
+           python-pytest python-pytest-cov python-tox))
     (propagated-inputs
-     `(("openssh" ,openssh)))           ; used by gandi/cli/modules/iass.py
+     (list openssh))           ; used by gandi/cli/modules/iass.py
     (inputs
-     `(("openssl" ,openssl)
-       ("python-click" ,python-click)
-       ("python-ipy" ,python-ipy)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list openssl python-click python-ipy python-pyyaml python-requests))
     (home-page "https://cli.gandi.net")
     (synopsis "Command-line interface to the Gandi.net Web API")
     (description
@@ -1685,9 +1697,7 @@ transmission protocol (SCTP) in a Go application.")
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("fftw" ,fftw)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list fftw ncurses openssl))
     (arguments
      `(#:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "DESTDIR=" (assoc-ref %outputs "out"))
@@ -1717,7 +1727,7 @@ application stack itself.")
        (sha256
         (base32 "0cw8299a080m42slsimz31xs0gjnh833gpbj2dsr4hkcinrn4iyd"))))
     (build-system python-build-system)
-    (inputs `(("curl" ,curl)))
+    (inputs (list curl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1764,20 +1774,18 @@ TCP connection, TLS handshake and so on) in the terminal.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "test-suite/testheaders.sh"
                (("/bin/true")
-                (string-append (assoc-ref inputs "coreutils")
-                               "/bin/true"))))))))
+                (search-input-file inputs "/bin/true"))))))))
     (inputs
-     `(("perl" ,perl)
-       ("openldap" ,openldap)
-       ("linux-pam" ,linux-pam)
-       ("libcap" ,libcap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("expat" ,expat)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)))
+     (list perl
+           openldap
+           linux-pam
+           libcap
+           cyrus-sasl
+           expat
+           libxml2
+           openssl))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (synopsis "Web caching proxy")
     (description "Squid is a caching proxy for the Web supporting HTTP, HTTPS,
 FTP, and more.  It reduces bandwidth and improves response times by caching and
@@ -1809,10 +1817,9 @@ reusing frequently-requested web pages.")
                 "true"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (synopsis "Console based live network and disk I/O bandwidth monitor")
     (description "Bandwidth Monitor NG is a small and simple console based
 live network and disk I/O bandwidth monitor.")
@@ -1832,22 +1839,19 @@ live network and disk I/O bandwidth monitor.")
         (base32 "0ix2k64qg7x3w0bzdsbk1m50kcpq1ws59g3zkwiafvpwdr4gs2sg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list autoconf automake libtool pkg-config which))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libnl" ,libnl)
-       ("libpcap" ,libpcap)
-       ("ethtool" ,ethtool)
-       ("pcre" ,pcre)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list libgcrypt
+           libnl
+           libpcap
+           ethtool
+           pcre
+           sqlite
+           zlib))
     (arguments
      `(#:configure-flags
-       (list "--with-experimental=yes"  ; build wesside-ng, etc.
+       (list "CFLAGS=-fcommon"
+             "--with-experimental=yes"  ; build wesside-ng, etc.
              "--with-gcrypt")           ; openssl's the default
        #:phases (modify-phases %standard-phases
                   (add-before 'bootstrap 'patch-evalrev
@@ -1860,8 +1864,8 @@ live network and disk I/O bandwidth monitor.")
                       #t))
                   (add-after 'build 'absolutize-tools
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((ethtool (string-append (assoc-ref inputs "ethtool")
-                                                    "/sbin/ethtool")))
+                      (let ((ethtool (search-input-file inputs
+                                                        "/sbin/ethtool")))
                         (substitute* "scripts/airmon-ng"
                           (("ethtool ")
                            (string-append ethtool " ")))
@@ -1939,10 +1943,9 @@ non-existing entropy of some access points.")
                #t))))
        #:tests? #f))                    ; there are no tests
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (propagated-inputs
-     `(("aircrack-ng" ,aircrack-ng)
-       ("pixiewps" ,pixiewps)))
+     (list aircrack-ng pixiewps))
     (home-page "https://github.com/t6x/reaver-wps-fork-t6x/")
     (synopsis "Attack tool for Wi-Fi Protected Setup")
     (description "Reaver performs a brute force attack against an access
@@ -1964,9 +1967,9 @@ reconfigured.")
         (base32 "0x4bvirmf0kphks19jwgva00zz73zx344218dfaiv8gigrw3yg4m"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-tcp" ,perl-test-tcp)))
+     (list perl-test-tcp))
     (propagated-inputs
-     `(("perl-sys-syscall" ,perl-sys-syscall)))
+     (list perl-sys-syscall))
     (home-page "https://metacpan.org/release/Danga-Socket")
     (synopsis "Event loop and event-driven async socket base class")
     (description
@@ -1990,9 +1993,9 @@ loop.")
         (base32 "074adrlvkiahj1fdc9nvb95dpfyjzm2jzhi90m8xaw4bw5ipcbzy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-netaddr-ip" ,perl-netaddr-ip)))
+     (list perl-netaddr-ip))
     (home-page "https://metacpan.org/release/Data-Validate-IP")
     (synopsis "IPv4 and IPv6 validation methods")
     (description
@@ -2020,7 +2023,7 @@ private (reserved).")
        (base32 "05f6rzvvmm6xd0p100k5y9kczdzqgala09ra8bccc18n6y74l0h0"))))
   (build-system perl-build-system)
   (inputs
-    `(("perl-digest-hmac" ,perl-digest-hmac)))
+    (list perl-digest-hmac))
   (home-page "https://www.net-dns.org/")
   (synopsis
     "Perl Interface to the Domain Name System")
@@ -2077,8 +2080,8 @@ definitions and structure manipulators for Perl.")
        (search-patches "perl-net-dns-resolver-programmable-fix.patch"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
-  (inputs `(("perl-net-dns" ,perl-net-dns)))
+    (list perl-module-build))
+  (inputs (list perl-net-dns))
   (home-page
     "https://metacpan.org/release/Net-DNS-Resolver-Programmable")
   (synopsis
@@ -2101,7 +2104,7 @@ offline emulation of DNS.")
                 "0m3rxpkv1b9121srvbqkrgzg4m8mnydiydqv34in1i1ixwrl6jn9"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-net-dns" ,perl-net-dns)))
+     (list perl-net-dns))
     (home-page "https://metacpan.org/release/Net-DNS-Resolver-Mock")
     (synopsis "Mock DNS Resolver object for testing")
     (description
@@ -2167,8 +2170,7 @@ It is intended primarily for use in testing.")
              (("-lnsl") ""))
            #t)))))
   (inputs
-    `(("perl-net-cidr-lite" ,perl-net-cidr-lite)
-      ("perl-socket6" ,perl-socket6)))
+    (list perl-net-cidr-lite perl-socket6))
   (home-page
     "https://metacpan.org/release/Net-Patricia")
   (synopsis
@@ -2214,10 +2216,8 @@ It is intended primarily for use in testing.")
           "1fqypz6qa5rw2d5y2zq7f49frwra0aln13nhq5gi514j2zx21q45"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)
-      ("perl-test-pod" ,perl-test-pod)
-      ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
-  (propagated-inputs `(("perl-socket6" ,perl-socket6)))
+    (list perl-module-build perl-test-pod perl-test-pod-coverage))
+  (propagated-inputs (list perl-socket6))
   (arguments `(;; Need network socket API
                #:tests? #f))
   (home-page
@@ -2242,16 +2242,20 @@ sockets in Perl.")
                 "01cbgz6lc3v59sldqk96l1281kp2qxnsa2qwlf2ikvjlyr1gi2dw"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("dbus" ,dbus)
-       ("zlib" ,zlib)))
+     (list dbus zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-                  (lambda _
-                    (invoke "ctest" "-E" "url-test"))))))
+           ;; TODO(core-updates): Make this unconditional.
+           ,(if (%current-target-system)
+                '(lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "ctest" "-E" "url-test")))
+                '(lambda _
+                   (invoke "ctest" "-E" "url-test")))))))
     (synopsis "Library providing automatic proxy configuration management")
     (description "Libproxy handles the details of HTTP/HTTPS proxy
 configuration for applications across all scenarios.  Applications using
@@ -2306,7 +2310,7 @@ HTTP proxies.")
         (base32 "1p6f9mby86af6cs7pv6h48032ip9g32c05cb7d9mimam8lchz3x3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Network communication layer on top of UDP")
     (description
      "ENet's purpose is to provide a relatively thin, simple and robust network
@@ -2333,18 +2337,15 @@ library remains flexible, portable, and easily embeddable.")
         (base32 "19h32dn0076p3s7dn35qi5yp2xvnxw9sqphppmn72vyb8caxvw1z"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(;; Test dependencies.
-       ("lcov" ,lcov)
-       ("perl" ,perl)
-       ("perl-conf-libconfig" ,perl-conf-libconfig)
-       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
-       ("perl-socket6" ,perl-socket6)
-       ("psmisc" ,psmisc)))             ; for ‘killall’
+     (list ;; Test dependencies.
+           lcov
+           perl
+           perl-conf-libconfig
+           perl-io-socket-inet6
+           perl-socket6
+           psmisc))             ; for ‘killall’
     (inputs
-     `(("libcap" ,libcap)
-       ("libconfig" ,libconfig)
-       ("pcre" ,pcre)
-       ("tcp-wrappers" ,tcp-wrappers)))
+     (list libcap libconfig pcre tcp-wrappers))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2433,8 +2434,7 @@ the bandwidth, loss, and other parameters.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)
-       ("ncurses" ,ncurses)))
+     (list libpcap ncurses))
     (arguments
      `(#:make-flags `(,,(string-append "CC=" (cc-for-target))
                       ,(string-append "PREFIX=" %output)
@@ -2475,11 +2475,8 @@ gone wild and are suddenly taking up your bandwidth.")
                        (assoc-ref %build-inputs "ncurses") "/lib")
         (string-append "--with-tlslib=GnuTLS"))))
     (build-system gnu-build-system)
-    (inputs `(("gnutls" ,gnutls)
-              ("libxml2" ,libxml2)
-              ("ncurses" ,ncurses)
-              ("zlib" ,zlib)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list gnutls libxml2 ncurses zlib))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/nzbget/nzbget")
     (synopsis "Usenet binary file downloader")
     (description
@@ -2560,9 +2557,7 @@ ps --no-header -p $1 -o state= | grep -qv '^Z$'"
        ("procps" ,procps)
        ("util-linux" ,util-linux)))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("libcap-ng" ,libcap-ng)
-       ("openssl" ,openssl)))
+     (list bash-minimal libcap-ng openssl))
     (synopsis "Virtual network switch")
     (home-page "https://www.openvswitch.org/")
     (description
@@ -2681,9 +2676,9 @@ enabled due to license conflicts between the BSD advertising clause and the GPL.
                (install-file "DESIGN.md" misc)
                #t))))))
     (native-inputs
-     `(("procps" ,procps))) ; `ps` is used by the test suite.
+     (list procps)) ; `ps` is used by the test suite.
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://www.tarsnap.com/spiped.html")
     (synopsis "Create secure pipes between sockets")
     (description "Spiped (pronounced \"ess-pipe-dee\") is a utility for creating
@@ -2709,11 +2704,8 @@ does not use SSH and requires a pre-shared symmetric key.")
               (patches
                (search-patches "quagga-reproducible-build.patch"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)
-                     ("dejagnu" ,dejagnu)))
-    (inputs `(("readline" ,readline)
-              ("c-ares" ,c-ares)))
+    (native-inputs (list pkg-config perl dejagnu))
+    (inputs (list readline c-ares))
     (synopsis "Routing Software Suite")
     (description "Quagga is a routing software suite, providing implementations
 of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms.
@@ -2762,9 +2754,7 @@ updates to the zebra daemon.")
                  #t))))))
       ;; TODO Add libnetfilter-queue once packaged.
       (inputs
-       `(("libpcap" ,libpcap)
-         ("openssl" ,openssl)
-         ("perl" ,perl)))
+       (list libpcap openssl perl))
       (home-page "https://github.com/vanhauser-thc/thc-ipv6")
       (synopsis "IPv6 security research toolkit")
       (description "The THC IPv6 Toolkit provides command-line tools and a library
@@ -2788,11 +2778,9 @@ newer and only works on Ethernet network interfaces.")
          "0ylzriv4pwh76344abzl1w219x188gshbycbna35gsyfp09c7z82"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libconfuse" ,libconfuse)
-       ("libnl" ,libnl)
-       ("ncurses" ,ncurses)))
+     (list libconfuse libnl ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Bandwidth monitor")
     (description "bmon is a monitoring and debugging tool to capture
 networking-related statistics and prepare them visually in a human-friendly
@@ -2827,9 +2815,8 @@ interface and a programmable text output for scripting.")
              (apply invoke "make" "-C" "doc" "doc"
                     make-flags))))))
     (native-inputs
-     `(;; To build the documentation, Doxygen and Perl is required.
-       ("doxygen" ,doxygen)
-       ("perl" ,perl)))
+     (list ;; To build the documentation, Doxygen and Perl is required.
+           doxygen perl))
     (home-page "https://github.com/libnet/libnet")
     (synopsis "Framework for low-level network packet construction")
     (description
@@ -2853,8 +2840,7 @@ can be whipped up with little effort.")
         (base32 "1glxvlqskcmjkxlqk9i12hcfaxb389cx2n8ji7776gmix3aq4z1z"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libcap" ,libcap)
-       ("ncurses" ,ncurses)))
+     (list libcap ncurses))
     (arguments
      `(#:tests? #f))                    ; tests require network access
     (home-page "https://www.bitwizard.nl/mtr/")
@@ -2907,15 +2893,9 @@ displays the results in real time.")
          "--enable-webserver"
          "--with-denoise-level=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext-minimal" ,gettext-minimal)
-       ("perl" ,perl)))
+     (list autoconf automake gettext-minimal perl))
     (inputs
-     `(("zlib" ,zlib)
-       ("crypto++" ,crypto++)
-       ("libpng" ,libpng)
-       ("wxwidgets-gtk2" ,wxwidgets-gtk2)))
+     (list zlib crypto++ libpng wxwidgets-gtk2))
     (home-page "https://amule.org/")
     (synopsis "Peer-to-peer client for the eD2K and Kademlia networks")
     (description
@@ -2939,9 +2919,7 @@ remotely.")
                (base32
                 "13596507ma1474cjqzxym5jlvcshvw7sjhw80rdz788gyz6kz90b"))))
     (build-system gnu-build-system)
-    (inputs `(("zeromq" ,zeromq)
-              ("czmq" ,czmq)
-              ("libsodium" ,libsodium)))
+    (inputs (list zeromq czmq libsodium))
     (synopsis "Framework for proximity-based peer-to-peer applications")
     (description "Zyre provides reliable group messaging over local area
 networks using zeromq.  It has these key characteristics:
@@ -2974,9 +2952,7 @@ networks using zeromq.  It has these key characteristics:
                 "17z2y2r9xkixhr9bxr50m77fh710afl30s7jdhbxrvf56vmal2jr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://git.pengutronix.de/cgit/tools/libsocketcan")
     (synopsis "SocketCAN user-space library")
     (description "This library allows controlling basic functions in SocketCAN
@@ -3036,8 +3012,7 @@ eight bytes) tools
         (base32 "0335kyxdnwnp96sh9p3jq1s87qnfmp5l7hzlcdxbbwfzrb9p8hr0"))))
     (build-system gnu-build-system)
     (inputs
-     `(("boost" ,boost)
-       ("openssl" ,openssl)))
+     (list boost openssl))
     (arguments
      `(#:configure-flags
        (list
@@ -3064,7 +3039,7 @@ asynchronous model using a modern C++ approach.")
         (base32 "02mp5905nz02d7amb4zc77rcrkxmvy8mf5rci7mvy58g24lvbw25"))
        (file-name (git-file-name name version))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3150,17 +3125,12 @@ Features:
                                " -NET")))
              #t)))))
     (inputs
-     `(("libnl" ,libnl)
-       ("ncurses" ,ncurses)             ; for the ‘apps’
-       ("openssl" ,openssl)
-       ("perl" ,perl)))
+     (list libnl ncurses ; for the ‘apps’
+           openssl perl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For tests only.
-       ("net-tools" ,net-tools)
-       ("coreutils" ,coreutils)
-       ("grep" ,grep)))
+     (list pkg-config
+           ;; For tests only.
+           net-tools coreutils grep))
     (home-page "http://www.net-snmp.org/")
     (synopsis "Simple Network Management Protocol library and tools")
     (description "The @dfn{Simple Network Management Protocol} (SNMP) is a
@@ -3207,7 +3177,7 @@ SNMP v3 using both IPv4 and IPv6.")
                  (("\tsetcap cap_net.*$") "")))
              #t)))))
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (home-page "https://github.com/GNS3/ubridge/")
     (synopsis "Bridge for UDP tunnels, Ethernet, TAP and VMnet interfaces")
     (description "uBridge is a simple program to create user-land bridges
@@ -3230,10 +3200,7 @@ Ethernet and TAP interfaces is supported.  Packet capture is also supported.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libpcap" ,libpcap)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libpcap openssl zlib))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -3272,7 +3239,7 @@ packets from wireless devices for use with hashcat or John the Ripper.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/ZerBea/hcxdumptool")
     (synopsis "Small tool to capture packets from wlan devices")
     (description
@@ -3325,9 +3292,7 @@ never see any machines other than the one Dante is running on.")
         (base32 "15j09x36i6zj6innl0w1mfzlc56qmjwrs82my8dsagqa2ikd08ya"))))
     (build-system cmake-build-system)
     (inputs
-     `(("asio" ,asio)
-       ("catch" ,catch-framework)
-       ("openssl" ,openssl)))
+     (list asio catch-framework openssl))
     (arguments
      `(#:configure-flags
        '("-DBUILD_SSL=NO")
@@ -3373,17 +3338,15 @@ communication over HTTP.")
                 "0gb0yc88hdzwm08zdiviay6s08q427za33kfbygib7bdzp2wr2dm"))))
     (build-system cmake-build-system)
     (inputs                             ; TODO: Need to force-keep references on some inputs, e.g. boost.
-     `(("zlib" ,zlib)
-       ("catch2" ,catch-framework2)
-       ("openssl" ,openssl)
-       ("boost" ,boost)
-       ("pcre" ,pcre)
-       ("pcre2" ,pcre2)
-       ("sobjectizer" ,sobjectizer)))
+     (list zlib
+           catch-framework2
+           openssl
+           boost
+           pcre
+           pcre2
+           sobjectizer))
     (propagated-inputs
-     `(("asio" ,asio)
-       ("fmt" ,fmt)
-       ("http-parser" ,http-parser)))
+     (list asio fmt http-parser))
     (arguments
      `(#:configure-flags '("-DRESTINIO_INSTALL=on")
        #:tests? #f ; TODO: The tests are called from the root CMakelist, need RESTINIO_TEST=on.
@@ -3419,24 +3382,24 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
       (outputs '("out" "tools" "debug"))
       (build-system cmake-build-system)
       (inputs
-       `(("argon2" ,argon2)
-         ("nettle" ,nettle-3.7)
-         ("readline" ,readline)
-         ("jsoncpp" ,jsoncpp)
-         ("openssl" ,openssl)             ;required for the DHT proxy
-         ("fmt" ,fmt)))
+       (list argon2
+             nettle
+             readline
+             jsoncpp
+             openssl ;required for the DHT proxy
+             fmt))
       (propagated-inputs
-       `(("gnutls" ,gnutls)               ;included in opendht/crypto.h
-         ("msgpack" ,msgpack)             ;included in several installed headers
-         ("restinio" ,restinio)))         ;included in opendht/http.h
+       (list gnutls ;included in opendht/crypto.h
+             msgpack ;included in several installed headers
+             restinio))         ;included in opendht/http.h
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)
-         ("python" ,python)
-         ("python-cython" ,python-cython)
-         ("libtool" ,libtool)
-         ("cppunit" ,cppunit)))
+       (list autoconf
+             automake
+             pkg-config
+             python
+             python-cython
+             libtool
+             cppunit))
       (arguments
        `(#:imported-modules ((guix build python-build-system) ;for site-packages
                              ,@%cmake-build-system-modules)
@@ -3480,7 +3443,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
                  (rename-file (string-append out "/bin")
                               (string-append tools "/bin"))
                  (wrap-program (string-append tools "/bin/dhtcluster")
-                   `("PYTHONPATH" prefix (,site-packages)))))))))
+                   `("GUIX_PYTHONPATH" prefix (,site-packages)))))))))
       (home-page "https://github.com/savoirfairelinux/opendht/")
       (synopsis "Lightweight Distributed Hash Table (DHT) library")
       (description "OpenDHT provides an easy to use distributed in-memory data
@@ -3522,16 +3485,9 @@ A very simple IM client working over the DHT.
                 "1r7gh5h27ii7d1d0z0x48wx7hs8vvympv3gqvy3cwzg05q5vk9xs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("c-ares" ,c-ares)
-       ("json-c" ,json-c)
-       ("libcap" ,libcap)
-       ("libyang" ,libyang)
-       ("readline" ,readline)))
+     (list c-ares json-c libcap libyang readline))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("python-pytest" ,python-pytest)))
+     (list perl pkg-config python-wrapper python-pytest))
     (home-page "https://frrouting.org/")
     (synopsis "IP routing protocol suite")
     (description "FRRouting (FRR) is an IP routing protocol suite which includes
@@ -3550,11 +3506,9 @@ protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP. ")
                (base32
                 "1xp7f0im1v8pqqx3xqyfkd1nsxk8vnbqgrdrwnwhg8r5xs1xxlhr"))))
     (inputs
-     `(("libssh" ,libssh)
-       ("readline" ,readline)))
+     (list libssh readline))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      `(#:configure-flags '("--localstatedir=/var" "--enable-ipv6")
        #:phases
@@ -3587,9 +3541,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
                 "0ngng9a9ra5w0mp2813yy2ihfibyx10ns6v5icdcp99db608xax7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("dbus" ,dbus)
-       ("ell" ,ell)
-       ("readline" ,readline)))
+     (list dbus ell readline))
     (native-inputs
      `(("pkgconfig" ,pkg-config)
        ("python" ,python)
@@ -3639,9 +3591,8 @@ maximum extent possible.")
     (arguments
      `(#:configure-flags
        (list "-DENABLE_BUILD_TESTS=ON" "-DENABLE_LYD_PRIV=ON")))
-    (propagated-inputs `(("pcre" ,pcre)))
-    (native-inputs `(("cmocka" ,cmocka)
-                     ("pkg-config" ,pkg-config)))
+    (propagated-inputs (list pcre))
+    (native-inputs (list cmocka pkg-config))
     (home-page "https://github.com/CESNET/libyang")
     (synopsis "YANG data modelling language library")
     (description "libyang is a YANG data modelling language parser and toolkit
@@ -3661,9 +3612,9 @@ written (and providing API) in C.  Current implementation covers YANG 1.0 (RFC
      (sha256
       (base32 "1ryqz90av2p5pgmmpi1afmycd18zhpwz1i4f7r0s359jis86xndn"))))
    (inputs
-    `(("libnl" ,libnl)))
+    (list libnl))
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f
@@ -3672,8 +3623,9 @@ written (and providing API) in C.  Current implementation covers YANG 1.0 (RFC
       #:phases (modify-phases %standard-phases (delete 'configure))
       #:make-flags
       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-            (string-append "PKG_CONFIG=" (assoc-ref %build-inputs "pkg-config")
-                           "/bin/pkg-config")
+            (string-append "PKG_CONFIG="
+                           (search-input-file %build-inputs
+                                              "/bin/pkg-config"))
             ,(string-append "CC=" (cc-for-target)))))
    (home-page "https://www.open-mesh.org/projects/batman-adv/wiki/Wiki")
    (synopsis "Management tool for the mesh networking BATMAN protocol")
@@ -3703,14 +3655,10 @@ module @code{batman-adv}, for Layer 2.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (man (string-append out "/share/man")))
-               (invoke "make"
-                       (string-append "PYTHONPATH=" (getenv "PYTHONPATH"))
-                       "doc/pagekite.1")
-               (install-file "doc/pagekite.1" (string-append man "/man1"))
-               #t))))))
+               (invoke "make" "doc/pagekite.1")
+               (install-file "doc/pagekite.1" (string-append man "/man1"))))))))
     (inputs
-     `(("python-six" ,python-six)
-       ("python-socksipychain" ,python-socksipychain)))
+     (list python-six python-socksipychain))
     (home-page "https://pagekite.net/")
     (synopsis "Make localhost servers publicly visible")
     (description
@@ -3883,13 +3831,9 @@ some traces for unprivileged users.")
     (arguments
      `(#:parallel-build? #f))           ; Build fails if #t.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("python" ,python)
-       ("libpcap" ,libpcap)
-       ("wolfssl" ,wolfssl)))
+     (list python libpcap wolfssl))
     (home-page "https://github.com/virtualsquare/vde-2")
     (synopsis "Virtual Distributed Ethernet")
     (description "VDE is a set of programs to provide virtual software-defined
@@ -3931,10 +3875,7 @@ cables.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("lua" ,lua)
-       ("openssl" ,openssl)
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list lua openssl pcre2 zlib))
     (home-page "https://www.haproxy.org/")
     (synopsis "Reliable, high performance TCP/HTTP load balancer")
     (description "HAProxy is a free, very fast and reliable solution offering
@@ -3977,12 +3918,9 @@ thousands of connections is clearly realistic with today's hardware.")
                        "/lib/systemd/system"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("readline" ,readline)))
+     (list libevent libxml2 openssl readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://vincentbernat.github.io/lldpd/")
     (synopsis "Locate neighbors of your network equipment")
     (description
@@ -4052,11 +3990,9 @@ stamps.")
          (base32 "1ljx6vb3lja5p0lr28vmjp27n9d6krlvq49bhqbcm2ns8vxd1vh6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list bison pkg-config which))
     (home-page "https://nbd.sourceforge.io/")
     (synopsis "NBD client and server")
     (description "This package provides the NBD (Network Block Devices)
@@ -4101,43 +4037,27 @@ network.")
              #t)))))
     ;; https://github.com/kardianos/minwinsvc is windows only
     (propagated-inputs
-     `(;;("go-golang-zx2c4-com-wireguard-windows"
-       ;; ,go-golang-zx2c4-com-wireguard-windows)
-       ("go-golang-zx2c4-com-wireguard"
-        ,go-golang-zx2c4-com-wireguard)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-crypto"
-        ,go-golang-org-x-crypto)
-       ("go-netns"
-        ,go-netns)
-       ("go-netlink"
-        ,go-netlink)
-       ("go-github-com-mitchellh-mapstructure"
-        ,go-github-com-mitchellh-mapstructure)
-       ("go-github-com-mattn-go-runewidth"
-        ,go-github-com-mattn-go-runewidth)
-       ("go-github-com-mattn-go-isatty"
-        ,go-github-com-mattn-go-isatty)
-       ("go-github-com-kardianos-minwinsvc"
-        ,go-github-com-kardianos-minwinsvc)
-       ("go-github-com-hjson-hjson-go"
-        ,go-github-com-hjson-hjson-go)
-       ("go-github-com-hashicorp-go-syslog"
-        ,go-github-com-hashicorp-go-syslog)
-       ("go-github-com-gologme-log"
-        ,go-github-com-gologme-log)
-       ("go-github-com-fatih-color"
-        ,go-github-com-fatih-color)
-       ("go-github-com-cheggaaa-pb-v3"
-        ,go-github-com-cheggaaa-pb-v3)
-       ("go-github-com-vividcortex-ewma"
-        ,go-github-com-vividcortex-ewma)
-       ("go-github-com-arceliar-phony"
-        ,go-github-com-arceliar-phony)
-       ("go-github-com-arceliar-ironwood"
-        ,go-github-com-arceliar-ironwood)))
+     (list ;;("go-golang-zx2c4-com-wireguard-windows"
+           ;; ,go-golang-zx2c4-com-wireguard-windows)
+           go-golang-zx2c4-com-wireguard
+           go-golang-org-x-text
+           go-golang-org-x-sys
+           go-golang-org-x-net
+           go-golang-org-x-crypto
+           go-netns
+           go-netlink
+           go-github-com-mitchellh-mapstructure
+           go-github-com-mattn-go-runewidth
+           go-github-com-mattn-go-isatty
+           go-github-com-kardianos-minwinsvc
+           go-github-com-hjson-hjson-go
+           go-github-com-hashicorp-go-syslog
+           go-github-com-gologme-log
+           go-github-com-fatih-color
+           go-github-com-cheggaaa-pb-v3
+           go-github-com-vividcortex-ewma
+           go-github-com-arceliar-phony
+           go-github-com-arceliar-ironwood))
     (home-page "https://yggdrasil-network.github.io/blog.html")
     (synopsis
      "Experiment in scalable routing as an encrypted IPv6 overlay network")
@@ -4182,11 +4102,9 @@ IPv6 Internet connectivity - it also works over IPv4.")
     `(#:tests? #f)) ;; no tests
    (build-system gnu-build-system)
    (inputs
-    `(("libnet" ,libnet)
-      ("libpcap" ,libpcap)))
+    (list libnet libpcap))
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)))
+    (list autoconf automake))
    (synopsis "Network address discovery tool")
    (description "Netdiscover is a network address discovery tool developed
 mainly for wireless networks without a @acronym{DHCP} server.  It also works
@@ -4216,10 +4134,9 @@ on hub/switched networks.  It is based on @acronym{ARP} packets, it will send
            (lambda _
              (chdir "unix"))))))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python))) ; for tests
+     (list pkg-config python)) ; for tests
     (synopsis "Graphical @acronym{SSH, Secure SHell} and telnet client")
     (description "PuTTY is a graphical text terminal client.  It supports
 @acronym{SSH, Secure SHell}, telnet, and raw socket connections with good
diff --git a/gnu/packages/nfs.scm b/gnu/packages/nfs.scm
index 8370107939..ce951543ff 100644
--- a/gnu/packages/nfs.scm
+++ b/gnu/packages/nfs.scm
@@ -126,7 +126,7 @@
        ("libtirpc" ,libtirpc)
        ("python-wrapper" ,python-wrapper))) ;for the Python based tools
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.kernel.org/pub/linux/utils/nfs-utils/")
     (synopsis "Tools for loading and managing Linux NFS mounts")
     (description "The Network File System (NFS) was developed to allow
@@ -167,11 +167,9 @@ disk.  It allows for fast, seamless sharing of files across a network.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (inputs
-     `(("attr" ,attr)))
+     (list attr))
     (home-page "https://linux-nfs.org/wiki/index.php/Main_Page")
     (synopsis "Commandline ACL utilities for the Linux NFSv4 client")
     (description "This package provides the commandline utilities
diff --git a/gnu/packages/nickle.scm b/gnu/packages/nickle.scm
index 2353f37fb6..95b9915414 100644
--- a/gnu/packages/nickle.scm
+++ b/gnu/packages/nickle.scm
@@ -38,7 +38,7 @@
                 "0jy96z01qbrnmsrywn5mfa14615qdix6b8520qd65c6yjyrk8gs0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("readline" ,readline)))
+     (list readline))
     (synopsis "Numeric oriented programming language")
     (description
      "Nickle is a programming language based prototyping environment with
diff --git a/gnu/packages/nicotine.scm b/gnu/packages/nicotine.scm
index c6e99b3dbd..8e194697de 100644
--- a/gnu/packages/nicotine.scm
+++ b/gnu/packages/nicotine.scm
@@ -62,9 +62,7 @@
          (add-after 'glib-or-gtk-wrap 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pytaglib" ,python-pytaglib)))
+     (list gtk+ python-pygobject python-pytaglib))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("gettext" ,gettext-minimal)))
diff --git a/gnu/packages/ninja.scm b/gnu/packages/ninja.scm
index 11ee472d56..4c4a2f37a7 100644
--- a/gnu/packages/ninja.scm
+++ b/gnu/packages/ninja.scm
@@ -31,7 +31,7 @@
 (define-public ninja
   (package
     (name "ninja")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -40,7 +40,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fbzl7mrcrwp527sgkc1npfl3k6bbpydpiq98xcf1a1hkrx0z5x4"))))
+                "0mspq4mvx41qri2v2zlg2y3znx5gfw6d8s3czbcfpr2218qbpz55"))))
     (build-system gnu-build-system)
     (inputs `(("python" ,python-wrapper)))
     (arguments
@@ -51,8 +51,7 @@
              (substitute* "src/subprocess-posix.cc"
                (("/bin/sh") (which "sh")))
              (substitute* "src/subprocess_test.cc"
-               (("/bin/echo") (which "echo")))
-             #t))
+               (("/bin/echo") (which "echo")))))
          (replace 'build
            (lambda _
              (invoke "./configure.py" "--bootstrap")))
@@ -67,8 +66,7 @@
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/ninja")))
                (install-file "ninja" bin)
-               (install-file "doc/manual.asciidoc" doc)
-               #t))))))
+               (install-file "doc/manual.asciidoc" doc)))))))
     (home-page "https://ninja-build.org/")
     (synopsis "Small build system")
     (description
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 98c611f227..9a0be96852 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -118,7 +118,7 @@ architecture supporting plugins.")
              ;; We skip the two tests which are supposed to fail.
              (invoke "bin/node-far" "-v" "test/" "-e" "test.*fail.js"))))))
     (inputs
-     `(("node-oop" ,node-oop)))
+     (list node-oop))
     (home-page "https://github.com/felixge/node-far")
     (synopsis "Node.js test runner")
     (description "This package provides a simple test runner that finds and runs
@@ -223,8 +223,7 @@ while being as light-weight and simple as possible.")
                (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))
              #t)))))
       (native-inputs
-       `(("node-far" ,node-far)
-         ("node-long-stack-traces" ,node-long-stack-traces)))
+       (list node-far node-long-stack-traces))
       (home-page "https://github.com/felixge/node-stack-trace")
       (synopsis "Get v8 stack traces as an array of CallSite objects")
       (description "Get v8 stack traces as an array of CallSite objects.")
@@ -349,7 +348,7 @@ function with browser support.")
          ;; still works as a dependency of node-glob and node-inflight.
          (delete 'configure))))
     (inputs
-     `(("node-wrappy" ,node-wrappy)))
+     (list node-wrappy))
     (home-page "https://github.com/isaacs/once")
     (synopsis "Node.js module to call a function only once")
     (description
@@ -409,7 +408,7 @@ such as rainbows.")
          ;; being missing, as we don't have them packaged yet.
          (delete 'configure))))
     (inputs
-     `(("node-irc-colors" ,node-irc-colors)))
+     (list node-irc-colors))
     (home-page "https://github.com/martynsmith/node-irc")
     (synopsis "IRC client library for Node.js")
     (description "@code{node-irc} is an IRC client library for Node.js.
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index dccf871d2c..6b543acf6f 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -2,13 +2,14 @@
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -217,9 +218,8 @@
                (setenv "CXX" ,(cxx-for-target))
                (setenv "PKG_CONFIG" ,(pkg-config-for-target))
                (apply invoke
-                      (string-append (assoc-ref (or native-inputs inputs)
-                                                "python")
-                                     "/bin/python")
+                      (search-input-file (or native-inputs inputs)
+                                         "/bin/python")
                       "configure" flags))))
          (add-after 'patch-shebangs 'patch-npm-shebang
            (lambda* (#:key outputs #:allow-other-keys)
@@ -256,15 +256,15 @@
             (variable "NODE_PATH")
             (files '("lib/node_modules")))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("c-ares" ,c-ares)
-       ("http-parser" ,http-parser)
-       ("icu4c" ,icu4c)
-       ("libuv" ,libuv)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list bash
+           coreutils
+           c-ares
+           http-parser
+           icu4c
+           libuv
+           `(,nghttp2 "lib")
+           openssl
+           zlib))
     (synopsis "Evented I/O for V8 JavaScript")
     (description "Node.js is a platform built on Chrome's JavaScript runtime
 for easily building fast, scalable network applications.  Node.js uses an
@@ -387,7 +387,7 @@ formats to milliseconds.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (inputs `(("node-ms" ,node-ms-bootstrap)))
+    (inputs (list node-ms-bootstrap))
     (home-page "https://github.com/visionmedia/debug#readme")
     (properties '((hidden? . #t)))
     (synopsis "Small debugging utility")
@@ -443,18 +443,16 @@ Node.js and web browsers.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/bin/esbuild")))
                (invoke esbuild
                        "--platform=node"
                        "--outfile=lib/builder.js"
                        "--bundle"
                        "src/builder.ts")))))))
     (inputs
-     `(("node-binary-search" ,node-binary-search-bootstrap)
-       ("node-debug" ,node-debug-bootstrap)))
+     (list node-binary-search-bootstrap node-debug-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/indutny/llparse-builder#readme")
     (properties '((hidden? . #t)))
     (synopsis "Graph builder for consumption by llparse")
@@ -499,18 +497,16 @@ Node.js and web browsers.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/bin/esbuild")))
                (invoke esbuild
                        "--platform=node"
                        "--outfile=lib/frontend.js"
                        "--bundle"
                        "src/frontend.ts")))))))
     (inputs
-     `(("node-debug" ,node-debug-bootstrap)
-       ("node-llparse-builder" ,node-llparse-builder-bootstrap)))
+     (list node-debug-bootstrap node-llparse-builder-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/indutny/llparse-frontend#readme")
     (properties '((hidden? . #t)))
     (synopsis "Frontend for the llparse compiler")
@@ -554,18 +550,16 @@ Node.js and web browsers.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
-                                           "/bin/esbuild")))
+             (let ((esbuild (search-input-file inputs "/bin/esbuild")))
                (invoke esbuild
                        "--platform=node"
                        "--outfile=lib/api.js"
                        "--bundle"
                        "src/api.ts")))))))
     (inputs
-     `(("node-debug" ,node-debug-bootstrap)
-       ("node-llparse-frontend" ,node-llparse-frontend-bootstrap)))
+     (list node-debug-bootstrap node-llparse-frontend-bootstrap))
     (native-inputs
-     `(("esbuild" ,esbuild)))
+     (list esbuild))
     (home-page "https://github.com/nodejs/llparse#readme")
     (properties '((hidden? . #t)))
     (synopsis "Compile incremental parsers to C code")
@@ -607,10 +601,9 @@ parser definition into a C output.")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key native-inputs inputs #:allow-other-keys)
-             (let ((esbuild (string-append
-                              (assoc-ref (or native-inputs inputs) "esbuild")
-                              "/bin/esbuild")))
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             (let ((esbuild (search-input-file (or native-inputs inputs)
+                                               "/bin/esbuild")))
                (invoke esbuild
                        "--platform=node"
                        "--outfile=bin/generate.js"
@@ -748,9 +741,8 @@ source files.")
                  (setenv "CXX" ,(cxx-for-target))
                  (setenv "PKG_CONFIG" ,(pkg-config-for-target))
                  (apply invoke
-                        (string-append (assoc-ref (or native-inputs inputs)
-                                                  "python")
-                                       "/bin/python3")
+                        (search-input-file (or native-inputs inputs)
+                                           "/bin/python3")
                         "configure" flags))))
            (replace 'patch-files
              (lambda* (#:key inputs #:allow-other-keys)
@@ -823,31 +815,31 @@ source files.")
                  (copy-file (string-append llhttp "/include/llhttp.h")
                             "deps/llhttp/include/llhttp.h"))))))))
     (native-inputs
-     `(;; Runtime dependencies for binaries used as a bootstrap.
-       ("c-ares" ,c-ares-for-node)
-       ("brotli" ,brotli)
-       ("icu4c" ,icu4c-67)
-       ("libuv" ,libuv-for-node)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ;; Regular build-time dependencies.
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("procps" ,procps)
-       ("python" ,python)
-       ("util-linux" ,util-linux)))
+     (list ;; Runtime dependencies for binaries used as a bootstrap.
+           c-ares-for-node
+           brotli
+           icu4c-67
+           libuv-for-node
+           `(,nghttp2 "lib")
+           openssl
+           zlib
+           ;; Regular build-time dependencies.
+           perl
+           pkg-config
+           procps
+           python
+           util-linux))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("c-ares" ,c-ares-for-node)
-       ("icu4c" ,icu4c-67)
-       ("libuv" ,libuv-for-node)
-       ("llhttp" ,llhttp-bootstrap)
-       ("brotli" ,brotli)
-       ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))))
+     (list bash
+           coreutils
+           c-ares-for-node
+           icu4c-67
+           libuv-for-node
+           llhttp-bootstrap
+           brotli
+           `(,nghttp2 "lib")
+           openssl
+           zlib))))
 
 (define-public libnode
   (package/inherit node
diff --git a/gnu/packages/noweb.scm b/gnu/packages/noweb.scm
index 7d8d402b94..d218d8cc68 100644
--- a/gnu/packages/noweb.scm
+++ b/gnu/packages/noweb.scm
@@ -95,7 +95,7 @@
                                            "/share/texmf/tex/latex")))
        #:tests? #f))                              ; no tests
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.cs.tufts.edu/~nr/noweb/")
     (synopsis "Literate programming tool")
     (description
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index e41d016db4..af9003e823 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -3,8 +3,10 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,20 +25,22 @@
 
 (define-module (gnu packages nss)
   #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages sqlite)
-  #:use-module (ice-9 match))
+  #:use-module (gnu packages sqlite))
 
 (define-public nspr
   (package
     (name "nspr")
-    (version "4.29")
+    (version "4.31")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -44,17 +48,37 @@
                    version "/src/nspr-" version ".tar.gz"))
              (sha256
               (base32
-               "10i5x637x0jqmdi47grkzgn56fg6770naa3wrhr4dmsrh3dnna12"))))
+               "1j5b2m8cjlhnnv8sq34587avaagkqvh521w4f95miwgvsn3xlaap"))))
     (build-system gnu-build-system)
+    (inputs
+     ;; For 'compile-et.pl' and 'nspr-config'.
+     (list perl ;for 'compile-et.pl'
+           bash-minimal)) ;for 'nspr-config'
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (arguments
-     `(#:tests? #f ; no check target
-       #:configure-flags (list "--disable-static"
-                               "--enable-64bit"
-                               (string-append "LDFLAGS=-Wl,-rpath="
-                                              (assoc-ref %outputs "out")
-                                              "/lib"))
+     `(;; Prevent the 'native' perl from sneaking into the closure.
+       ;; XXX it would be nice to do the same for 'bash-minimal',
+       ;; but using 'canonical-package' causes loops.
+       ,@(if (%current-target-system)
+             `(#:disallowed-references
+               (,(gexp-input (this-package-native-input "perl") #:native? #t)))
+             '())
+       #:tests? #f ; no check target
+       #:configure-flags
+       (list "--disable-static"
+             "--enable-64bit"
+             (string-append "LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "out") "/lib")
+             ;; Mozilla deviates from Autotools conventions
+             ;; due to historical reasons.  Adjust to Mozilla conventions,
+             ;; otherwise the Makefile will try to use TARGET-gcc
+             ;; as a ‘native’ compiler.
+             ,@(if (%current-target-system)
+                   `(,(string-append "--host="
+                                     (nix-system->gnu-triplet (%current-system)))
+                     ,(string-append "--target=" (%current-target-system)))
+                   '()))
        ;; Use fixed timestamps for reproducibility.
        #:make-flags '("SH_DATE='1970-01-01 00:00:01'"
                       ;; This is epoch 1 in microseconds.
@@ -83,11 +107,12 @@ in the Mozilla clients.")
               (base32
                "0v3zds1id71j5a5si42a658fjz8nv2f6zp6w4gqrqmdr6ksz8sxv"))))))
 
+;;; Note: When updating, verify that the nss-certs package still builds fine
+;;; as it inherits its source from the nss package.
 (define-public nss
   (package
     (name "nss")
-    (version "3.59")
-    (replacement nss/fixed)
+    (version "3.71")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -98,22 +123,21 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))
+                "0ly2l3dv6z5hlxs72h5x6796ni3x1bq60saavaf42ddgv4ax7b4r"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-3.56-pkgconfig.patch"
+                                       "nss-getcwd-nonnull.patch"
                                        "nss-increase-test-timeout.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; Delete the bundled copy of these libraries.
                   (delete-file-recursively "nss/lib/zlib")
-                  (delete-file-recursively "nss/lib/sqlite")
-                  #t))))
+                  (delete-file-recursively "nss/lib/sqlite")))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
-     `(#:parallel-build? #f ; not supported
-       #:make-flags
+     `(#:make-flags
        (let* ((out (assoc-ref %outputs "out"))
               (nspr (string-append (assoc-ref %build-inputs "nspr")))
               (rpath (string-append "-Wl,-rpath=" out "/lib/nss")))
@@ -133,27 +157,27 @@ in the Mozilla clients.")
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
-             (setenv "CC" "gcc")
+             (setenv "CC" ,(cc-for-target))
              ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
-             ,@(match (%current-system)
-                 ((or "x86_64-linux" "aarch64-linux")
-                  `((setenv "USE_64" "1")))
-                 (_
-                  '()))
-             #t))
+             ,@(if (target-64bit?)
+                   `((setenv "USE_64" "1"))
+                   '())))
          (replace 'check
-           (lambda _
-             ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
-             ;; The later requires a working DNS or /etc/hosts.
-             (setenv "DOMSUF" "localdomain")
-             (setenv "USE_IP" "TRUE")
-             (setenv "IP_ADDRESS" "127.0.0.1")
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (begin
+                   ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for
+                   ;; testing.  The latter requires a working DNS or /etc/hosts.
+                   (setenv "DOMSUF" "localdomain")
+                   (setenv "USE_IP" "TRUE")
+                   (setenv "IP_ADDRESS" "127.0.0.1")
 
-             ;; The "PayPalEE.cert" certificate expires every six months,
-             ;; leading to test failures:
-             ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
-             ;; work around that, set the time to roughly the release date.
-             (invoke "faketime" "2020-11-01" "./nss/tests/all.sh")))
+                   ;; The "PayPalEE.cert" certificate expires every six months,
+                   ;; leading to test failures:
+                   ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
+                   ;; work around that, set the time to roughly the release date.
+                   (invoke "faketime" "2021-09-30" "./nss/tests/all.sh"))
+                 (format #t "test suite not run~%"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -174,21 +198,19 @@ in the Mozilla clients.")
                ;; Install other files.
                (copy-recursively "dist/public/nss" inc)
                (copy-recursively (string-append obj "/bin") bin)
-               (copy-recursively (string-append obj "/lib") lib)
-               #t))))))
+               (copy-recursively (string-append obj "/lib") lib)))))))
     (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
-    (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
-    (native-inputs `(("perl" ,perl)
-                     ("libfaketime" ,libfaketime))) ;for tests
+     (list sqlite zlib))
+    (propagated-inputs
+     (list nspr))                 ;required by nss.pc.
+    (native-inputs
+     (list perl libfaketime))   ;for tests
 
     ;; The NSS test suite takes around 48 hours on Loongson 3A (MIPS) when
     ;; another build is happening concurrently on the same machine.
-    (properties '((timeout . 216000)))  ; 60 hours
+    (properties '((timeout . 216000)))  ;60 hours
 
-    (home-page
-     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
+    (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
     (synopsis "Network Security Services")
     (description
      "Network Security Services (@dfn{NSS}) is a set of libraries designed to
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 55b9a73b22..e93e947929 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -80,12 +80,9 @@
                (copy-recursively "examples" (string-append doc "/examples"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libcap" ,libcap)
-       ("libseccomp" ,libseccomp)
-       ("nettle" ,nettle)))
+     (list gnutls libcap libseccomp nettle))
     (home-page "https://chrony.tuxfamily.org/")
     (synopsis "System clock synchronisation service that speaks NTP")
     (description
@@ -147,8 +144,7 @@ time-stamping or reference clock, sub-microsecond accuracy is possible.")
            (rename-file "sntp/libevent:build-aux"
                         "sntp/libevent/build-aux")
            #t))))
-   (native-inputs `(("which" ,which)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list which pkg-config))
    (inputs
     `(("openssl" ,openssl)
       ("libevent" ,libevent)
@@ -207,7 +203,7 @@ computers over a network.")
                (("DESTDIR\\)\\$\\(localstatedir") "TMPDIR"))
              #t)))))
     (inputs
-     `(("libressl" ,libressl))) ; enable TLS time constraints. See ntpd.conf(5).
+     (list libressl)) ; enable TLS time constraints. See ntpd.conf(5).
     (home-page "http://www.openntpd.org/")
     (synopsis "NTP client and server by the OpenBSD Project")
     (description "OpenNTPD is the OpenBSD Project's implementation of a client
diff --git a/gnu/packages/nvi.scm b/gnu/packages/nvi.scm
index b520b32784..f1f461f2b4 100644
--- a/gnu/packages/nvi.scm
+++ b/gnu/packages/nvi.scm
@@ -90,10 +90,9 @@
                           '("config.sub")))
               #t)))))
     (inputs
-      `(("bdb" ,bdb)
-        ("ncurses" ,ncurses)))
+      (list bdb ncurses))
     (native-inputs
-     `(("automake" ,automake))) ;Up to date 'config.guess' and 'config.sub'.
+     (list automake)) ;Up to date 'config.guess' and 'config.sub'.
     (synopsis "The Berkeley Vi Editor")
     (description
       "Vi is the original screen based text editor for Unix systems.  It is
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index c1912d49b7..624637dd8a 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -22,6 +22,8 @@
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +45,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
@@ -88,6 +91,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system ocaml)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -159,7 +163,7 @@
                  (rename-file "miniml/interp/lex.byte" "ocamllex")
                  (install-file "ocamllex" bin)))))))
       (native-inputs
-       `(("guile" ,guile-3.0)))
+       (list guile-3.0))
       (properties
        ;; 10 hours, mostly for arm, more than 1 expected even on x86_64
        `((max-silent-time . 36000)))
@@ -201,19 +205,16 @@ This package produces a native @command{ocamlc} and a bytecode @command{ocamllex
             (files (list "lib/ocaml/site-lib/stubslibs"
                          "lib/ocaml/site-lib/stublibs")))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libiberty" ,libiberty)               ;needed for objdump support
-       ("zlib" ,zlib)))                       ;also needed for objdump support
+     (list libx11 libiberty ;needed for objdump support
+           zlib))                       ;also needed for objdump support
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-/bin/sh-references
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((sh (string-append (assoc-ref inputs "bash")
-                                       "/bin/sh"))
+             (let* ((sh (search-input-file inputs "/bin/sh"))
                     (quoted-sh (string-append "\"" sh "\"")))
                (with-fluids ((%default-port-encoding #f))
                  (for-each
@@ -257,6 +258,7 @@ functional, imperative and object-oriented styles of programming.")
                     "http://caml.inria.fr/pub/distrib/ocaml-"
                     (version-major+minor version)
                     "/ocaml-" version ".tar.xz"))
+              (patches (search-patches "ocaml-4.09-multiple-definitions.patch"))
               (sha256
                (base32
                 "1v3z5ar326f3hzvpfljg4xj8b9lmbrl53fn57yih1bkbx3gr3yzj"))))))
@@ -268,6 +270,7 @@ functional, imperative and object-oriented styles of programming.")
 (define ocaml-4.07-boot
   (package
     (inherit ocaml-4.09)
+    (name "ocaml-boot")
     (version "4.07.1")
     (source (origin
               (method url-fetch)
@@ -278,6 +281,7 @@ functional, imperative and object-oriented styles of programming.")
               (sha256
                (base32
                 "1f07hgj5k45cylj1q3k5mk8yi02cwzx849b1fwnwia8xlcfqpr6z"))
+              (patches (search-patches "ocaml-multiple-definitions.patch"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -404,6 +408,7 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
 (define-public ocaml-4.07
   (package
     (inherit ocaml-4.07-boot)
+    (name "ocaml")
     (arguments
       (substitute-keyword-arguments (package-arguments ocaml-4.09)
         ((#:phases phases)
@@ -453,13 +458,11 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "OCAMLBUILD_PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "OCAMLBUILD_BINDIR=" (assoc-ref %outputs "out")
-                            "/bin")
-             (string-append "OCAMLBUILD_LIBDIR=" (assoc-ref %outputs "out")
-                            "/lib/ocaml/site-lib")
-             (string-append "OCAMLBUILD_MANDIR=" (assoc-ref %outputs "out")
-                            "/share/man"))
+       ,#~(list (string-append "OCAMLBUILD_PREFIX=" #$output)
+                (string-append "OCAMLBUILD_BINDIR=" #$output "/bin")
+                (string-append "OCAMLBUILD_LIBDIR=" #$output
+                               "/lib/ocaml/site-lib")
+                (string-append "OCAMLBUILD_MANDIR=" #$output "/share/man"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))
@@ -528,7 +531,7 @@ archive(byte) = \"com.cma\"
 archive(native) = \"com.cmxa\"")))))
              #t)))))
     (native-inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (home-page "https://github.com/xavierleroy/camlidl")
     (synopsis "Stub code generator for OCaml/C interface")
     (description
@@ -553,7 +556,7 @@ code for interfacing Caml with C from an IDL description of the C functions.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-      `(("ocaml-cppo" ,ocaml-cppo)))
+      (list ocaml-cppo))
     (home-page "https://github.com/ygrek/ocaml-extlib")
     (synopsis "Complete and small extension for OCaml standard library")
     (description "This library adds new functions to OCaml standard library
@@ -575,17 +578,14 @@ for day to day programming.")
           (base32
             "0771lwljqwwn3cryl0plny5a5dyyrj4z6bw66ha5n8yfbpcy8clr"))))
     (build-system ocaml-build-system)
-    (propagated-inputs `(("ocaml-extlib" ,ocaml-extlib)))
+    (propagated-inputs (list ocaml-extlib))
     (native-inputs
-      `(("perl" ,perl)
-        ("ocamlbuild" ,ocamlbuild)
-        ("ocaml-ounit" ,ocaml-ounit)))
+      (list perl ocamlbuild ocaml-ounit))
     (arguments
      `(#:make-flags
-       (list
-         "all" "opt"
-         (string-append "BINDIR=" (assoc-ref %outputs "out")
-                        "/bin"))
+       ,#~(list
+           "all" "opt"
+           (string-append "BINDIR=" #$output "/bin"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -611,7 +611,7 @@ Software distribution.")
                (base32
                 "1gsad5cj03256i36wdjqk5pg51pyd48rpjazf0gfaakrn8lk438g"))))
     (build-system dune-build-system)
-    (propagated-inputs `(("ocaml-cudf" ,ocaml-cudf)))
+    (propagated-inputs (list ocaml-cudf))
     (home-page "https://www.i3s.unice.fr/~cpjm/misc/")
     (synopsis "Upgrade path problem solver")
     (description "Mccs (Multi Criteria CUDF Solver) is a CUDF problem solver.
@@ -644,25 +644,13 @@ underlying solvers like Cplex, Gurobi, Lpsolver, Glpk, CbC, SCIP or WBO.")
     (build-system ocaml-build-system)
     (arguments
      `(#:configure-flags
-       (list (string-append "SHELL="
-                            (assoc-ref %build-inputs "bash")
-                            "/bin/sh"))
+       ,#~(list (string-append "SHELL="
+                               #+(file-append (canonical-package bash-minimal)
+                                              "/bin/sh")))
        #:make-flags
-       (list (string-append "LIBDIR="
-                            (assoc-ref %outputs "out")
-                            "/lib/ocaml/site-lib"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-test-script
-           (lambda _
-             (substitute* "applications/dose-tests.py"
-               (("warning\\(")
-                "from warnings import warn\nwarn(")))))))
+       ,#~(list (string-append "LIBDIR=" #$output "/lib/ocaml/site-lib"))))
     (propagated-inputs
-      `(("ocaml-graph" ,ocaml-graph)
-        ("ocaml-cudf" ,ocaml-cudf)
-        ("ocaml-extlib" ,ocaml-extlib)
-        ("ocaml-re" ,ocaml-re)))
+      (list ocaml-graph ocaml-cudf ocaml-extlib ocaml-re))
     (native-inputs
       `(("perl" ,perl)
         ("python" ,python-2) ; for a test script
@@ -702,13 +690,10 @@ repository-wide uninstallability checks.")
        (modify-phases %standard-phases
          (delete 'configure))
        #:build-flags
-       (list "build" "--lib-dir"
-             (string-append (assoc-ref %outputs "out") "/lib/ocaml/site-lib"))))
+       ,#~(list "build" "--lib-dir"
+                (string-append #$output "/lib/ocaml/site-lib"))))
     (native-inputs
-     `(("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("opam" ,opam)))
+     (list ocaml-findlib ocamlbuild ocaml-topkg opam))
     (home-page "https://erratique.ch/software/down")
     (synopsis "OCaml toplevel (REPL) upgrade")
     (description "Down is an unintrusive user experience upgrade for the
@@ -762,8 +747,8 @@ let () = String.split_on_char ':' (Sys.getenv \"OCAMLPATH\")
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; No tests
-       #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib"))
+       #:make-flags ,#~(list (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
@@ -795,8 +780,7 @@ the opam file format.")
          (add-before 'build 'pre-build
            (lambda* (#:key inputs make-flags #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash"))
-                   (bwrap (string-append (assoc-ref inputs "bubblewrap")
-                                         "/bin/bwrap")))
+                   (bwrap (search-input-file inputs "/bin/bwrap")))
                (substitute* "src/core/opamSystem.ml"
                  (("\"/bin/sh\"")
                   (string-append "\"" bash "/bin/sh\""))
@@ -844,8 +828,9 @@ the opam file format.")
              ;; Ensure we can run the generated build.sh (no /bin/sh)
              (substitute* '("tests/reftests/legacy-local.test"
                             "tests/reftests/legacy-git.test")
-               (("#! ?/bin/sh") (string-append "#!" (assoc-ref inputs "bash")
-                                               "/bin/sh")))
+               (("#! ?/bin/sh")
+                (string-append "#!"
+                               (search-input-file inputs "/bin/sh"))))
              (substitute* "tests/reftests/testing-env"
                (("OPAMSTRICT=1")
                 (string-append "OPAMSTRICT=1\nLIBRARY_PATH="
@@ -880,16 +865,10 @@ the opam file format.")
          ("opam-repo-f372039d" ,(opam-repo "f372039db86a970ef3e662adbfe0d4f5cd980701"
                                            "0ld7fcry6ss6fmrpswvr6bikgx299w97h0gwrjjh7kd7rydsjdws")))))
     (inputs
-     `(("ocaml" ,ocaml)
-       ("ncurses" ,ncurses)
-       ("curl" ,curl)
-       ("bubblewrap" ,bubblewrap)))
+     (list ocaml ncurses curl bubblewrap))
     (propagated-inputs
-     `(("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-dose3" ,ocaml-dose3)
-       ("ocaml-mccs" ,ocaml-mccs)
-       ("ocaml-opam-file-format" ,ocaml-opam-file-format)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-cmdliner ocaml-dose3 ocaml-mccs ocaml-opam-file-format
+           ocaml-re))
     (home-page "http://opam.ocamlpro.com/")
     (synopsis "Package manager for OCaml")
     (description
@@ -915,7 +894,7 @@ Git-friendly development workflow.")
         (base32 "1d9spy3f5ahixm8nxxk086kpslzva669a5scn49am0s7vx4i71kp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (arguments
      `(#:tests? #f  ; XXX TODO figure out how to run the tests
        #:phases
@@ -967,9 +946,9 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
                 "1jwydkb9ldb1sx815c364dxgr569f2rbbzgxbn2kanrybpdbm2gi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (arguments
      `(#:tests? #f                      ; no test suite
        #:make-flags (list (string-append "PREFIX=" %output))
@@ -1073,7 +1052,7 @@ Emacs.")
         (base32 "08kf5apbv15n2kcr3qhyr3rvsf2lg25ackr3x9kfgiiqc0p3sz40"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml" ,ocaml)))
+     (list ocaml))
     (arguments
      `(#:tests? #f)) ; No check target
     (properties `((ocaml4.07-variant . ,(delay (strip-ocaml4.07-variant ocaml-menhir)))))
@@ -1113,7 +1092,7 @@ Knuth’s LR(1) parser construction technique.")
 (define-public lablgtk
   (package
     (name "lablgtk")
-    (version "2.18.10")
+    (version "2.18.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1122,7 +1101,7 @@ Knuth’s LR(1) parser construction technique.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0w8cdfcv2wc19sd3qzj3qq77qc6rbnbynsz02gzbl15kgrvgrfxi"))))
+                "179ipx0c6bpxm4gz0syxgqy09dp5p4x9qsdil7s9jlx8ffg1mm0w"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("ocaml" ,ocaml)
@@ -1131,12 +1110,12 @@ Knuth’s LR(1) parser construction technique.")
     ;; FIXME: Add inputs gtkgl-2.0, libpanelapplet-2.0, gtkspell-2.0,
     ;; and gtk+-quartz-2.0 once available.
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gtksourceview" ,gtksourceview-2)
-       ("libgnomecanvas" ,libgnomecanvas)
-       ("libgnomeui" ,libgnomeui)
-       ("libglade" ,libglade)
-       ("librsvg" ,librsvg)))
+     (list gtk+-2
+           gtksourceview-2
+           libgnomecanvas
+           libgnomeui
+           libglade
+           librsvg))
     (arguments
      `(#:tests? #f ; no check target
 
@@ -1205,7 +1184,8 @@ libpanel, librsvg and quartz.")
      `(("ocaml" ,ocaml-4.09)
        ;; For documentation
        ("ghostscript" ,ghostscript)
-       ("texlive" ,texlive-tiny)
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-fonts-ec texlive-dvips-l3backend)))
        ("hevea" ,hevea)
        ("lynx" ,lynx)
        ("which" ,which)))
@@ -1281,8 +1261,7 @@ to the other.")
                 "00s3sfb02pnjmkax25pcnljcnhcggiliccfz69a72ic7gsjwz1cf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml)))
+     (list m4 ocaml))
     (arguments
      `(#:tests? #f  ; no test suite
        #:parallel-build? #f
@@ -1325,16 +1304,14 @@ compilers that can directly deal with packages.")
     (inherit ocaml-findlib)
     (name "ocaml4.07-findlib")
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml-4.07)))))
+     (list m4 ocaml-4.07))))
 
 (define-public ocaml4.09-findlib
   (package
     (inherit ocaml-findlib)
     (name "ocaml4.09-findlib")
     (native-inputs
-     `(("m4" ,m4)
-       ("ocaml" ,ocaml-4.09)))))
+     (list m4 ocaml-4.09))))
 
 (define-public ocaml-ounit2
   (package
@@ -1351,8 +1328,7 @@ compilers that can directly deal with packages.")
                 "0gxjw1bhmjcjzri6x6psqrkbbyq678b69bqfl9i1zswp7cj2lryg"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("lwt" ,ocaml-lwt)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-lwt ocaml-stdlib-shims))
     (home-page "https://github.com/gildor478/ounit")
     (synopsis "Unit testing framework for OCaml")
     (description "OUnit2 is a unit testing framework for OCaml.  It is similar
@@ -1372,7 +1348,7 @@ to JUnit and other XUnit testing frameworks.")
              (invoke "make" "install-ounit" ,(string-append "version="
                                                             (package-version ocaml-ounit2))))))))
     (propagated-inputs
-     `(("ocaml-ounit2" ,ocaml-ounit2)))
+     (list ocaml-ounit2))
     (home-page "http://ounit.forge.ocamlcore.org")
     (synopsis "Unit testing framework for OCaml")
     (description "Unit testing framework for OCaml.  It is similar to JUnit and
@@ -1396,16 +1372,15 @@ other XUnit testing frameworks.")
                 "16jnn3czxnvyjngnz167x5kw097k7izdqvkix8qvgvhdmgvqm89b"))))
     (build-system ocaml-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (delete 'configure))
        #:install-target "install-findlib"
        #:make-flags
-       (list "all" "allopt"
-             (string-append "INSTALLDIR=" (assoc-ref %outputs "out")
-                            "/lib/ocaml"))))
+       ,#~(list "all" "allopt"
+                (string-append "INSTALLDIR=" #$output "/lib/ocaml"))))
     (home-page "https://github.com/xavierleroy/camlzip")
     (synopsis "Provides easy access to compressed files")
     (description "Provides easy access to compressed files in ZIP, GZIP and
@@ -1452,9 +1427,9 @@ files in these formats.")
                 "1jslm1rv1j0ya818yh23wf3bb6hz7qqj9pn5fwl45y9mqyqa01s9"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:tests? #f ; no test target
        #:phases
@@ -1498,8 +1473,7 @@ for speed and space economy.")
            (lambda _
              (for-each make-file-writable (find-files "." ".")))))))
     (native-inputs
-     `(("ocaml-menhir" ,ocaml-menhir)
-       ("ocaml-odoc" ,ocaml-odoc)))
+     (list ocaml-menhir ocaml-odoc))
     (properties `((upstream-name . "FrontC")
                   (ocaml4.07-variant . ,(delay ocaml4.07-frontc))))
     (home-page "https://www.irit.fr/FrontC")
@@ -1545,9 +1519,8 @@ archive(byte) = \"frontc.cma\"
 archive(native) = \"frontc.cmxa\""))))
                  (symlink (string-append out "/lib/ocaml/frontc")
                           (string-append out "/lib/ocaml/FrontC"))))))
-         #:make-flags (list (string-append "PREFIX="
-                                           (assoc-ref %outputs "out"))
-                            "OCAML_SITE=$(LIB_DIR)/ocaml/")))
+         #:make-flags ,#~(list (string-append "PREFIX=" #$output)
+                               "OCAML_SITE=$(LIB_DIR)/ocaml/")))
       (properties '()))))
 
 (define-public ocaml-qcheck
@@ -1575,10 +1548,9 @@ archive(native) = \"frontc.cmxa\""))))
                (("Pervasives.compare") "compare"))
              #t)))))
     (propagated-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-ounit" ,ocaml-ounit)))
+     (list ocaml-alcotest ocaml-ounit))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-qcheck))))
     (home-page "https://github.com/c-cube/qcheck")
     (synopsis "QuickCheck inspired property-based testing for OCaml")
@@ -1675,10 +1647,10 @@ full_split, cut, rcut, etc..")
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; require odoc
-       #:make-flags (list "release"
-                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib"))
+       #:make-flags ,#~(list "release"
+                             (string-append "PREFIX=" #$output)
+                             (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -1707,7 +1679,7 @@ following a very simple s-expression syntax.")
        ; require ppx_expect
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-csexp" ,ocaml-csexp)))
+     (list ocaml-csexp))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-dune-configurator))))
     (synopsis "Dune helper library for gathering system configuration")
     (description "Dune-configurator is a small library that helps writing
@@ -1738,7 +1710,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
   (package
     (inherit dune-bootstrap)
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)))
+     (list dune-configurator))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-dune))
                   (ocaml4.09-variant . ,(delay ocaml4.09-dune))))))
 
@@ -1746,7 +1718,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
   (package
     (inherit ocaml4.09-dune-bootstrap)
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)))))
+     (list dune-configurator))))
 
 (define-public ocaml4.07-dune
   (package
@@ -1786,7 +1758,7 @@ config.h files for instance.  Among other things, dune-configurator allows one t
              (for-each (lambda (file) (chmod file #o644)) (find-files "." ".*"))
              #t)))))
     (propagated-inputs
-     `(("ocaml-result" ,ocaml-result)))
+     (list ocaml-result))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-csexp))))
     (home-page "https://github.com/ocaml-dune/csexp")
     (synopsis "Parsing and printing of S-expressions in Canonical form")
@@ -1834,9 +1806,7 @@ module of this library is parameterised by the type of S-expressions.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-ppx-derivers ocamlbuild ocaml-result))
     (properties `((upstream-name . "ocaml-migrate-parsetree")
                   ;; OCaml 4.07 packages require version 1.*
                   (ocaml4.07-variant . ,(delay (package-with-ocaml4.07 ocaml-migrate-parsetree-1)))))
@@ -1905,11 +1875,9 @@ ocaml-migrate-parsetree")
                 "0mghsl8b2zd2676mh1r9142hymhvzy9cw8kgkjmirxkn56wbf56b"))))
     (build-system dune-build-system)
     (native-inputs
-     `(("time" ,time)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list time autoconf automake))
     (propagated-inputs
-     `(("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-stdlib-shims))
     (arguments
      `(#:package "bitstring"
        #:tests? #f; Tests fail to build
@@ -1994,8 +1962,7 @@ defined in this library.")
                 "1kzw5cxkizcvh4rgzwgpjlj9hfxfk6yr686bxx6wrbsfs8as371k"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("opam" ,opam)
-       ("ocamlbuild" ,ocamlbuild)))
+     (list opam ocamlbuild))
     (propagated-inputs
      `(("result" ,ocaml-result)))
     (arguments
@@ -2025,8 +1992,7 @@ creation and publication procedures.")
                 "1xxycxhdhaq8p9vhwi93s2mlxjwgm44fcxybx5vghzgbankz9yhm"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("opam" ,opam)
-       ("ocamlbuild" ,ocamlbuild)))
+     (list opam ocamlbuild))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2060,12 +2026,9 @@ library.")
     (build-system dune-build-system)
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-sqlite3))))
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)
-       ("ocaml-odoc" ,ocaml-odoc)))
+     (list dune-configurator ocaml-odoc))
     (native-inputs
-     `(("ocaml-ppx-inline-test" ,ocaml-ppx-inline-test)
-       ("pkg-config" ,pkg-config)
-       ("sqlite" ,sqlite)))
+     (list ocaml-ppx-inline-test pkg-config sqlite))
     (home-page "https://mmottl.github.io/sqlite3-ocaml")
     (synopsis "SQLite3 Bindings for OCaml")
     (description
@@ -2134,8 +2097,7 @@ manipulate such data.")
                 "0syilgk4nzscacsswnvgwqlf0n0lhs221jss8gc8z9igw2x4sgsq"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2187,8 +2149,7 @@ spans without being subject to operating system calendar time adjustments.")
                  (mkdir-p (string-append
                            out "/lib/ocaml/site-lib/calendar"))))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (propagated-inputs
        `(("ocaml" ,ocaml)
          ("ocamlfind" ,ocaml-findlib)))
@@ -2212,13 +2173,13 @@ dates and times.")
                 "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw"))))
     (build-system ocaml-build-system)
     (inputs
-     `(("ocaml-result" ,ocaml-result)))
+     (list ocaml-result))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (arguments
      `(#:tests? #f
-       #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
-                                         "/lib/ocaml/site-lib/cmdliner"))
+       #:make-flags ,#~(list (string-append "LIBDIR=" #$output
+                                            "/lib/ocaml/site-lib/cmdliner"))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -2336,15 +2297,15 @@ immutability.")
      `(#:package "alcotest"
        #:test-target "."))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (propagated-inputs
-     `(("ocaml-astring" ,ocaml-astring)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)
-       ("ocaml-uuidm" ,ocaml-uuidm)
-       ("ocaml-uutf" ,ocaml-uutf)))
+     (list ocaml-astring
+           ocaml-cmdliner
+           ocaml-fmt
+           ocaml-re
+           ocaml-stdlib-shims
+           ocaml-uuidm
+           ocaml-uutf))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-alcotest))))
     (home-page "https://github.com/mirage/alcotest")
     (synopsis "Lightweight OCaml test framework")
@@ -2391,7 +2352,7 @@ simple (yet expressive) query language to select the tests to run.")
      ;; No tests
      `(#:tests? #f))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-cppo))
     (properties `((upstream-name . "ppx_tools")))
     (home-page "https://github.com/alainfrisch/ppx_tools")
     (synopsis "Tools for authors of ppx rewriters and other syntactic tools")
@@ -2413,9 +2374,7 @@ syntactic tools.")
                   "1aj8w79gdd9xnrbz7s5p8glcb4pmimi8jp9f439dqnf6ih3mqb3v"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list ocamlbuild opam ocaml-topkg))
     (arguments
      `(#:tests? #f
        #:build-flags (list "build")
@@ -2447,10 +2406,8 @@ lets the client choose the concrete timeline.")
     (arguments
      `(#:test-target "."))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("which" ,which)))
-    (propagated-inputs `(("openssl" ,openssl)))
+     (list autoconf automake which))
+    (propagated-inputs (list openssl))
     (home-page "https://github.com/savonet/ocaml-ssl/")
     (synopsis "OCaml bindings for OpenSSL")
     (description
@@ -2496,16 +2453,11 @@ for mapping files in memory.  This function is the same as the
     (arguments
      `(#:package "lwt"))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-cppo pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (propagated-inputs
-     `(("ocaml-mmap" ,ocaml-mmap)
-       ("ocaml-ocplib-endian" ,ocaml-ocplib-endian)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-seq" ,ocaml-seq)
-       ("libev" ,libev)))
+     (list ocaml-mmap ocaml-ocplib-endian ocaml-result ocaml-seq libev))
     (home-page "https://github.com/ocsigen/lwt")
     (synopsis "Cooperative threads and I/O in monadic style")
     (description "Lwt provides typed, composable cooperative threads.  These
@@ -2533,8 +2485,7 @@ locks or other synchronization primitives.")
      `(#:package "lwt_react"))
     (properties `((upstream-name . "lwt_react")))
     (propagated-inputs
-     `(("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-react" ,ocaml-react)))))
+     (list ocaml-lwt ocaml-react))))
 
 (define-public ocaml-lwt-log
   (package
@@ -2580,8 +2531,7 @@ ocaml lwt.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("fmt" ,ocaml-fmt)
        ("lwt" ,ocaml-lwt)
@@ -2615,8 +2565,7 @@ message report is decoupled from logging and is handled by a reporter.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)))
@@ -2646,8 +2595,7 @@ file system and is independent from any system library.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)
@@ -2682,9 +2630,7 @@ run command line programs.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("opam" ,opam)))
+     (list ocamlbuild ocaml-topkg opam))
     (home-page "https://erratique.ch/software/xmlm")
     (synopsis "Streaming XML codec for OCaml")
     (description "Xmlm is a streaming codec to decode and encode the XML data
@@ -2710,10 +2656,9 @@ representation of the data.")
      `(#:package "gen"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-odoc" ,ocaml-odoc)))
+     (list ocaml-odoc))
     (native-inputs
-     `(("ocaml-qtest" ,ocaml-qtest)
-       ("ocaml-qcheck" ,ocaml-qcheck)))
+     (list ocaml-qtest ocaml-qcheck))
     (home-page "https://github.com/c-cube/gen/")
     (synopsis "Iterators for OCaml, both restartable and consumable")
     (description "Gen implements iterators of OCaml, that are both restartable
@@ -2757,9 +2702,7 @@ and consumable.")
              (for-each (lambda (file) (chmod file #o644)) (find-files "." ".*"))
              #t)))))
     (propagated-inputs
-     `(("ocaml-gen" ,ocaml-gen)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-uchar" ,ocaml-uchar)))
+     (list ocaml-gen ocaml-ppxlib ocaml-uchar))
     ;; These three files are needed by src/generator/data/dune, but would be
     ;; downloaded using curl at build time.
     (inputs
@@ -2829,8 +2772,7 @@ and consumable.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (home-page "https://github.com/ocaml/uchar")
     (synopsis "Compatibility library for OCaml's Uchar module")
     (description "The uchar package provides a compatibility library for the
@@ -2910,7 +2852,7 @@ string values and to directly encode characters in OCaml Buffer.t values.")
            (file-name (string-append "NormalizationTest-" version ".txt"))
            (sha256
               (base32 "0c93pqdkksf7b7zw8y2w0h9i5kkrsdjmh2cr5clrrhp6mg10rcvw"))))))
-    (propagated-inputs `(("ocaml-uutf" ,ocaml-uutf)))
+    (propagated-inputs (list ocaml-uutf))
     (home-page "https://erratique.ch/software/uunf")
     (synopsis "Unicode text normalization for OCaml")
     (description
@@ -2970,7 +2912,7 @@ without a complete in-memory representation of the data.")
     (arguments
      `(#:test-target "tests"))
     (propagated-inputs
-     `(("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-cmdliner))
     (home-page "https://www.typerex.org/ocp-indent.html")
     (synopsis "Tool to indent OCaml programs")
     (description
@@ -3007,11 +2949,9 @@ This package includes:
     (arguments
      `(#:package "ocp-index"))
     (propagated-inputs
-     `(("ocaml-ocp-indent" ,ocaml-ocp-indent)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-ocp-indent ocaml-re ocaml-cmdliner))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-cppo))
     (home-page "https://www.typerex.org/ocp-index.html")
     (synopsis "Lightweight completion and documentation browsing for OCaml libraries")
     (description "This package includes only the @code{ocp-index} library
@@ -3042,8 +2982,8 @@ and command-line tool.")
              (substitute* "configure"
                (("-/bin/sh") (string-append "-" (which "bash")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs `(("curl" ,curl)))
+     (list pkg-config))
+    (inputs (list curl))
     (home-page "http://ocurl.forge.ocamlcore.org/")
     (synopsis "OCaml bindings for libcurl")
     (description "Client-side URL transfer library, supporting HTTP and a
@@ -3065,9 +3005,7 @@ multitude of other network protocols (FTP/SMTP/RTSP/etc).")
                 "068hwdbpl7vx9jjpxdc6a10zqd8xa55j3xx7ga6fnwrlfsbs2pjj"))))
     (build-system dune-build-system)
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-bos" ,ocaml-bos)
-       ("ocaml-rresult" ,ocaml-rresult)))
+     (list ocaml-alcotest ocaml-bos ocaml-rresult))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-base64))))
     (home-page "https://github.com/mirage/ocaml-base64")
     (synopsis "Base64 encoding for OCaml")
@@ -3153,7 +3091,7 @@ OCaml code.")
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       ,#~(list (string-append "PREFIX=" #$output))
        #:tests? #f ; no test target
        #:phases
        (modify-phases %standard-phases
@@ -3161,7 +3099,7 @@ OCaml code.")
                      (lambda* (#:key outputs #:allow-other-keys)
                        (substitute* "mk/osconfig_unix.mk"
                                     (("CC = cc") "CC = gcc")))))))
-    (native-inputs `(("hevea" ,hevea)))
+    (native-inputs (list hevea))
     (home-page "http://projects.camlcity.org/projects/omake.html")
     (synopsis "Build system designed for scalability and portability")
     (description "Similar to make utilities you may have used, but it features
@@ -3219,12 +3157,9 @@ is used to determine whether the results truly differ.")
                (base32
                 "1h03nkc3vajaijqhj1dy5hw85j2hwwxdkg8rvs2fc00qaf44ad1d"))))
     (build-system ocaml-build-system)
-    (propagated-inputs `(("ocaml-num" ,ocaml-num)))
+    (propagated-inputs (list ocaml-num))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-benchmark" ,ocaml-benchmark)
-       ("ocaml-qcheck" ,ocaml-qcheck)
-       ("ocaml-qtest" ,ocaml-qtest)))
+     (list ocamlbuild ocaml-benchmark ocaml-qcheck ocaml-qtest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3312,8 +3247,7 @@ hierarchy of modules.")
      ;; No tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("dune-configurator" ,dune-configurator)
-       ("pcre" ,pcre)))
+     (list dune-configurator pcre))
     (native-inputs
      `(("pcre:bin" ,pcre "bin")))
     (home-page "https://mmottl.github.io/pcre-ocaml")
@@ -3389,9 +3323,9 @@ compatibility with older compiler to use these new features in their code.")
                 "0aa7p5qymi8p7iqym42yk2akjd1ff81fvaks82nhjc533zl01pnf"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-stdlib-shims))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)))
+     (list ocaml-ounit))
     (home-page "http://ocaml-fileutils.forge.ocamlcore.org")
     (synopsis "Pure OCaml functions to manipulate real file and filename")
     (description "Library to provide pure OCaml functions to manipulate real
@@ -3427,9 +3361,7 @@ file (POSIX like) and filename.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocamlify" ,ocamlify)
-       ("ocamlmod" ,ocamlmod)))
+     (list ocamlbuild ocamlify ocamlmod))
     (home-page "https://oasis.forge.ocamlcore.org")
     (synopsis "Integrates a configure, build, install system in OCaml projects")
     (description "OASIS is a tool to integrate a configure, build and install
@@ -3454,7 +3386,7 @@ build system and allows external tools to analyse your project easily.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (home-page "https://github.com/mjambon/cppo")
     (synopsis "Equivalent of the C preprocessor for OCaml programs")
     (description "Cppo is an equivalent of the C preprocessor for OCaml
@@ -3522,7 +3454,7 @@ standard iterator type starting from 4.07.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-seq" ,ocaml-seq)))
+     (list ocaml-seq))
     (native-inputs
      `(("ounit" ,ocaml-ounit)))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-re))))
@@ -3596,9 +3528,9 @@ big- and little-endian, with their unsafe counter-parts.")
      `(#:package "cstruct"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigarray-compat" ,ocaml-bigarray-compat)))
+     (list ocaml-bigarray-compat))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-alcotest))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-cstruct))))
     (home-page "https://github.com/mirage/ocaml-cstruct")
     (synopsis "Access C structures via a camlp4 extension")
@@ -3700,11 +3632,9 @@ JSON.")
     (arguments '(#:package "uri"
                  #:test-target "."))
     (propagated-inputs
-     `(("ocaml-stringext" ,ocaml-stringext)
-       ("ocaml-angstrom" ,ocaml-angstrom)))
+     (list ocaml-stringext ocaml-angstrom))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)))
+     (list ocaml-ounit ocaml-ppx-sexp-conv))
     (properties `((upstream-name . "uri")
                   (ocaml4.07-variant ,(delay ocaml4.07-uri))))
     (synopsis "RFC3986 URI/URL parsing library")
@@ -3830,7 +3760,7 @@ Format module of the OCaml standard library.")
        #:ocaml ,ocaml-4.07
        #:findlib ,ocaml4.07-findlib))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (propagated-inputs
      `(("ocaml-xmlm" ,(package-with-ocaml4.07 ocaml-xmlm))
        ("ocaml-sedlex" ,(package-with-ocaml4.07 ocaml-sedlex))
@@ -3861,8 +3791,7 @@ tool and piqi-ocaml.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
      `(("cmdliner" ,ocaml-cmdliner)
        ("topkg" ,ocaml-topkg)))
@@ -3892,9 +3821,9 @@ and 4 (random based) according to RFC 4122.")
        (modify-phases %standard-phases
          (add-before 'configure 'set-shell
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
-                                                   "/bin/sh")))))))
-    (inputs `(("lablgtk" ,lablgtk)))
+             (setenv "CONFIG_SHELL"
+                     (search-input-file inputs "/bin/sh")))))))
+    (inputs (list lablgtk))
     (properties `((upstream-name . "ocamlgraph")))
     (home-page "http://ocamlgraph.lri.fr/")
     (synopsis "Graph library for OCaml")
@@ -3917,9 +3846,10 @@ and 4 (random based) according to RFC 4122.")
     (build-system ocaml-build-system)
     (arguments
      `(#:make-flags
-       (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
-             (string-append "SHELL=" (assoc-ref %build-inputs "bash")
-                            "/bin/sh"))
+       ,#~(list (string-append "DESTDIR=" #$output)
+                (string-append "SHELL="
+                               #+(file-append (canonical-package bash-minimal)
+                                              "/bin/sh")))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'make-files-writable
@@ -3930,8 +3860,7 @@ and 4 (random based) according to RFC 4122.")
        #:ocaml ,ocaml-4.07
        #:findlib ,ocaml4.07-findlib))
     (native-inputs
-     `(("which" ,which)
-       ("protobuf" ,protobuf))) ; for tests
+     (list which protobuf)) ; for tests
     (propagated-inputs
      `(("ocaml-num" ,(package-with-ocaml4.07 ocaml-num))
        ("ocaml-piqilib" ,ocaml4.07-piqilib)
@@ -3979,9 +3908,7 @@ XML and Protocol Buffers formats.")
       ("ocaml-uri" ,ocaml4.07-uri)
       ("ocaml-zarith" ,(package-with-ocaml4.07 ocaml-zarith))))
    (inputs
-    `(("gmp" ,gmp)
-      ("llvm" ,llvm-3.8)
-      ("ncurses" ,ncurses)))
+    (list gmp llvm-3.8 ncurses))
    (arguments
     `(#:use-make? #t
       #:phases
@@ -4066,10 +3993,9 @@ library is currently designed for Unicode Standard 3.2.")
                   "04gil5hxm2jax9paw3i24d8zyzhyl5cphzfyryvy2lcrm3c485q0"))))
       (build-system dune-build-system)
       (propagated-inputs
-       `(("ocaml-result" ,ocaml-result)
-         ("ocaml-camomile" ,ocaml-camomile)))
+       (list ocaml-result ocaml-camomile))
       (native-inputs
-       `(("ocaml-ppx-expect" ,ocaml-ppx-expect)))
+       (list ocaml-ppx-expect))
       (properties
        `((upstream-name . "charInfo_width")))
       (synopsis "Determine column width for a character")
@@ -4144,13 +4070,13 @@ capabilities, Zed provides macro recording and cursor management facilities.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-lwt-log" ,ocaml-lwt-log)
-       ("ocaml-react" ,ocaml-react)
-       ("ocaml-zed" ,ocaml-zed)
-       ("ocaml-camomile" ,ocaml-camomile)
-       ("ocaml-lwt-react" ,ocaml-lwt-react)
-       ("ocaml-mew-vi" ,ocaml-mew-vi)))
+     (list ocaml-lwt
+           ocaml-lwt-log
+           ocaml-react
+           ocaml-zed
+           ocaml-camomile
+           ocaml-lwt-react
+           ocaml-mew-vi))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-lambda-term))))
     (synopsis "Terminal manipulation library for OCaml")
     (description "Lambda-Term is a cross-platform library for manipulating the
@@ -4199,13 +4125,10 @@ instead of bindings to a C library.")
     (arguments
      `(#:test-target "."))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-cppo))
     (propagated-inputs
-     `(("ocaml-lambda-term" ,ocaml-lambda-term)
-       ("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-lwt-react" ,ocaml-lwt-react)
-       ("ocaml-camomile" ,ocaml-camomile)
-       ("ocaml-react" ,ocaml-react)))
+     (list ocaml-lambda-term ocaml-lwt ocaml-lwt-react ocaml-camomile
+           ocaml-react))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-utop))))
     (home-page "https://github.com/ocaml-community/utop")
     (synopsis "Improved interface to the OCaml toplevel")
@@ -4292,7 +4215,7 @@ long and size_t whose sizes depend on the host platform.")
     `(("bigarray-compat" ,ocaml-bigarray-compat)
       ("integers" ,ocaml-integers)))
    (inputs
-    `(("libffi" ,libffi)))
+    (list libffi))
    (synopsis "Library for binding to C libraries using pure OCaml")
    (description "Ctypes is a library for binding to C libraries using pure
 OCaml.  The primary aim is to make writing C extensions as straightforward as
@@ -4364,10 +4287,7 @@ OCaml projects that contain C stubs.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-astring" ,ocaml-astring)
-       ("opam" ,opam)
-       ("pkg-config" ,pkg-config)))
+     (list ocamlbuild ocaml-astring opam pkg-config))
     (inputs
      `(("topkg" ,ocaml-topkg)
        ("sdl2" ,sdl2)
@@ -4396,32 +4316,27 @@ cross-platform SDL C library.")
     (inputs
      `(("menhir" ,ocaml-menhir)))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)))
+     (list ocamlbuild))
     (build-system ocaml-build-system)
     (arguments
      `(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda _
-             (invoke "make")
-             #t))
-         (replace 'check
-           (lambda _
-             (invoke "make" "tests")
-             #t))
-         (add-before 'install 'set-binpath
-           ;; Change binary path in the makefile
-           (lambda _
-             (let ((out (assoc-ref %outputs "out")))
-               (substitute* "GNUmakefile"
-                 (("BINDIR = (.*)$")
-                  (string-append "BINDIR = " out "/bin"))))
-             #t))
-         (replace 'install
-           (lambda _
-             (invoke "make" "install")
-             #t)))))
+       ,#~(modify-phases %standard-phases
+            (delete 'configure)
+            (replace 'build
+              (lambda _
+                (invoke "make")))
+            (replace 'check
+              (lambda _
+                (invoke "make" "tests")))
+            (add-before 'install 'set-binpath
+              ;; Change binary path in the makefile
+              (lambda _
+                (substitute* "GNUmakefile"
+                  (("BINDIR = (.*)$")
+                   (string-append "BINDIR = " #$output "/bin")))))
+            (replace 'install
+              (lambda _
+                (invoke "make" "install"))))))
     (synopsis "Proof-checker for the λΠ-calculus modulo theory, an extension of
 the λ-calculus")
     (description "Dedukti is a proof-checker for the λΠ-calculus modulo
@@ -4448,7 +4363,7 @@ developed in other systems.  In particular, it enjoys a minimalistic syntax.")
                   "1842wikq24c8rg0ac84vb1qby9ng1nssxswyyni4kq85lng5lcrp"))
                 (file-name (git-file-name name version))))
       (inputs
-       `(("dedukti" ,dedukti)))
+       (list dedukti))
       (build-system emacs-build-system)
       (arguments
        '(#:phases
@@ -4481,8 +4396,7 @@ Dedukti files.")
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (inputs
-       `(("dedukti-mode" ,emacs-dedukti-mode)
-         ("flycheck-mode" ,emacs-flycheck)))
+       (list emacs-dedukti-mode emacs-flycheck))
       (synopsis "Flycheck integration for the dedukti language")
       (description "This package provides a frontend for Flycheck to perform
 syntax checking on dedukti files.")
@@ -4505,10 +4419,7 @@ syntax checking on dedukti files.")
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
-      `(("ocaml-base" ,ocaml-base)
-        ("ocaml-ppx-assert" ,ocaml-ppx-assert)
-        ("ocaml-stdio" ,ocaml-stdio)
-        ("dune-configurator" ,dune-configurator)))
+      (list ocaml-base ocaml-ppx-assert ocaml-stdio dune-configurator))
     (home-page "https://github.com/janestreet/jst-config")
     (synopsis "Compile-time configuration for Jane Street libraries")
     (description "Defines compile-time constants used in Jane Street libraries
@@ -4545,11 +4456,8 @@ packages.")
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-jane-street-headers" ,ocaml-jane-street-headers)
-       ("ocaml-jst-config" ,ocaml-jst-config)
-       ("ocaml-ppx-base" ,ocaml-ppx-base)
-       ("ocaml-ppx-optcomp" ,ocaml-ppx-optcomp)))
+     (list ocaml-base ocaml-jane-street-headers ocaml-jst-config
+           ocaml-ppx-base ocaml-ppx-optcomp))
     (properties `((upstream-name . "time_now")))
     (home-page
      "https://github.com/janestreet/time_now")
@@ -4578,13 +4486,13 @@ since the start of the Unix epoch.")
     (arguments
      `(#:tests? #f)) ;see home page README for further information
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-compiler-libs" ,ocaml-compiler-libs)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-time-now" ,ocaml-time-now)))
+     (list ocaml-base
+           ocaml-migrate-parsetree
+           ocaml-compiler-libs
+           ocaml-sexplib0
+           ocaml-stdio
+           ocaml-ppxlib
+           ocaml-time-now))
     (properties `((upstream-name . "ppx_inline_test")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-inline-test))))
     (synopsis "Syntax extension for writing in-line tests in ocaml code")
@@ -4647,8 +4555,7 @@ collection.")
            (lambda _
              (invoke "make" "install"))))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("ocaml-findlib" ,ocaml-findlib)))
+     (list ocamlbuild ocaml-findlib))
     (home-page "https://rlepigre.github.io/ocaml-bindlib/")
     (synopsis "OCaml Bindlib library for bound variables")
     (description "Bindlib is a library allowing the manipulation of data
@@ -4676,7 +4583,7 @@ or quantified formulas.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-stdlib-shims" ,ocaml-stdlib-shims)))
+     (list ocaml-stdlib-shims))
     (synopsis "Parsing library based on Earley Algorithm")
     (description "Earley is a parser combinator library base on Earley's
 algorithm.  It is intended to be used in conjunction with an OCaml syntax
@@ -4747,9 +4654,9 @@ than the first one.")
         (add-before 'build 'make-writable
           (lambda _ (for-each make-file-writable (find-files "." ".")))))))
    (inputs
-    `(("ocaml-easy-format" ,ocaml-easy-format)))
+    (list ocaml-easy-format))
    (native-inputs
-    `(("which" ,which)))
+    (list which))
    (synopsis "Data format designed for speed, safety, ease of use and backward
 compatibility")
    (description "Biniou (pronounced \"be new\" is a binary data format
@@ -4778,11 +4685,9 @@ than yojson), with 25-35% space savings.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-biniou" ,ocaml-biniou)
-       ("ocaml-easy-format" ,ocaml-easy-format)))
+     (list ocaml-biniou ocaml-easy-format))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-cppo" ,ocaml-cppo)))
+     (list ocaml-alcotest ocaml-cppo))
     (synopsis "Low-level JSON library for OCaml")
     (description "Yojson is an optimized parsing and printing library for the
 JSON format.  It addresses a few shortcomings of json-wheel including 2x
@@ -4816,10 +4721,7 @@ serializers and deserializers from type definitions.")
              (invoke "dune" "upgrade")
              #t)))))
     (inputs
-     `(("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-astring" ,ocaml-astring)
-       ("ocaml-logs" ,ocaml-logs)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-fmt ocaml-astring ocaml-logs ocaml-cmdliner))
     (synopsis
      "CRAM-testing framework for testing command line applications")
     (description "CRAM is a is functional testing framework for command line
@@ -4846,9 +4748,7 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
     (arguments '(#:package "dot-merlin-reader"
                  #:tests? #f))          ; no tests
     (inputs
-     `(("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-csexp" ,ocaml-csexp)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-yojson ocaml-csexp ocaml-result))
     (home-page "https://ocaml.github.io/merlin/")
     (synopsis "Reads config files for @code{ocaml-merlin}")
     (description "@code{ocaml-dot-merlin-reader} is an external reader for
@@ -4868,13 +4768,10 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
              (when tests?
                (invoke "dune" "runtest" "-p" "merlin,dot-merlin-reader")))))))
     (inputs
-     `(("ocaml-yojson" ,ocaml-yojson)
-       ("ocaml-csexp" ,ocaml-csexp)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-yojson ocaml-csexp ocaml-result))
     (native-inputs
-     `(("ocaml-dot-merlin-reader" ,ocaml-dot-merlin-reader) ; required for tests
-       ("ocaml-mdx" ,ocaml-mdx)
-       ("jq" ,jq)))
+     (list ocaml-dot-merlin-reader ; required for tests
+           ocaml-mdx jq))
     (synopsis "Context sensitive completion for OCaml in Vim and Emacs")
     (description "Merlin is an editor service that provides modern IDE
 features for OCaml.  Emacs and Vim support is provided out-of-the-box.
@@ -4906,10 +4803,9 @@ Atom.")
              (substitute* "src/config/discover.ml"
                (("/usr") (assoc-ref inputs "gsl"))))))))
     (inputs
-     `(("gsl" ,gsl)))
+     (list gsl))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-stdio" ,ocaml-stdio)))
+     (list ocaml-base ocaml-stdio))
     (home-page "https://mmottl.github.io/gsl-ocaml")
     (synopsis "Bindings to the GNU Scientific Library")
     (description
@@ -4932,7 +4828,7 @@ the OCaml language.")
                   "0nzp43hp8pbjqkrxnwp5lgjrabxayf61h18fjaydi0s5faq6f3xh"))))
       (build-system ocaml-build-system)
       (inputs
-       `(("gsl" ,gsl)))
+       `(("gsl" ,gsl-static)))
       (native-inputs
        `(("ocamlbuild" ,ocamlbuild)))
       (arguments '())
@@ -4951,12 +4847,10 @@ the OCaml language.")
                 "10kk80jdmpdvql88sdjsh7vqzlpaphd8vip2lp47aarxjkwjlz1q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("automake" ,automake)
-       ("ocaml" ,ocaml)
-       ("which" ,(@@ (gnu packages base) which))))
+     (list automake ocaml
+           (@@ (gnu packages base) which)))
     (propagated-inputs
-     `(("ocaml-num" ,ocaml-num)
-       ("z3" ,z3)))
+     (list ocaml-num z3))
     (arguments
      `(#:configure-flags (list "--with-z3")
        #:make-flags (list "QUIET=")
@@ -5049,8 +4943,7 @@ that was developed by Jane Street, the largest industrial user of OCaml.")
                 "1nr0ncb8l2mkk8pqzknr7fsqw5kpz8y102kyv5bc0x7c36v0d4zy"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-sexplib0" ,ocaml-sexplib0)
-       ("ocaml-base" ,ocaml-base)))
+     (list ocaml-sexplib0 ocaml-base))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-parsexp))))
     (synopsis "S-expression parsing library")
     (description
@@ -5101,10 +4994,7 @@ parsexp_io.")
                         "12rlnc6fcrjfdn3gs2agi418sj54ighhs6dfll37zcv7mgywblm2"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-num" ,ocaml-num)
-       ("ocaml-parsexp" ,ocaml-parsexp)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base ocaml-num ocaml-parsexp ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-sexplib))))
     (synopsis
      "Library for serializing OCaml values to and from S-expressions")
@@ -5140,7 +5030,7 @@ functionality for parsing and pretty-printing s-expressions.")
           "1hizjxmiqlj2zzkwplzjamw9rbnl0kh44sxgjpzdij99qnfkzylf"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-base))))
     (synopsis
      "Full standard library replacement for OCaml")
@@ -5229,8 +5119,7 @@ is now @code{Ocaml_common.Ast_helper}.")
                         "1hj5hraprqy2i90a690l11yjszvb99j818q3d684ryx6p2lddk0l"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base ocaml-sexplib0))
     (arguments `(#:tests? #f)) ;no tests
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-stdio))))
     (synopsis "Standard IO library for OCaml")
@@ -5268,12 +5157,9 @@ a more consistent API.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-result" ,ocaml-result)))
+     (list ocaml-ppx-derivers ocaml-ppxlib ocaml-result))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)
-       ("ocaml-ounit2" ,ocaml-ounit2)))
+     (list ocaml-cppo ocaml-ounit2))
     (properties `((upstream-name . "ppx_deriving")))
     (home-page "https://github.com/ocaml-ppx/ppx_deriving")
     (synopsis "Type-driven code generation for OCaml")
@@ -5326,14 +5212,14 @@ as part of the same ocaml-migrate-parsetree driver.")
          "0jg5v4pssbl66hn5davpin1i57a0r3r54l96vpz5y99xk5w70xi1"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-compiler-libs" ,ocaml-compiler-libs)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)
-       ("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-sexplib0" ,ocaml-sexplib0)))
+     (list ocaml-base
+           ocaml-compiler-libs
+           ocaml-migrate-parsetree
+           ocaml-stdlib-shims
+           ocaml-ppx-derivers
+           ocaml-stdio
+           ocaml-result
+           ocaml-sexplib0))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-ppxlib))))
     (synopsis
      "Base library and tools for ppx rewriters")
@@ -5405,9 +5291,7 @@ OCaml AST in the OCaml syntax;
      ;; (see https://github.com/janestreet/ppx_compare/issues/10)
      '(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_compare")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-compare))))
     (home-page "https://github.com/janestreet/ppx_compare")
@@ -5448,9 +5332,7 @@ by making sure that you only compare comparable values.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "fieldslib")
                   (ocaml4.07-variant . ,(delay ocaml4.07-fieldslib))))
     (home-page "https://github.com/janestreet/fieldslib")
@@ -5482,9 +5364,7 @@ of a record and create new record values.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "variantslib")
                   (ocaml4.07-variant . ,(delay ocaml4.07-variantslib))))
     (home-page "https://github.com/janestreet/variantslib")
@@ -5526,10 +5406,8 @@ standard library.")
          "1zwirwqry24b48bg7d4yc845hvcirxyymzbw95aaxdcck84d30n8"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-fieldslib" ,ocaml-fieldslib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-fieldslib ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_fields_conv")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-fields-conv))))
     (synopsis "Generation of accessor and iteration functions for ocaml records")
@@ -5566,9 +5444,7 @@ new record values.")
          "0dbri9d00ydi0dw1cavswnqdmhjaaz80vap29ns2lr6mhhlvyjmj"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_sexp_conv")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-sexp-conv))))
     (synopsis "Generation of S-expression conversion functions from type definitions")
@@ -5609,10 +5485,8 @@ definitions.")
          "1p11fiz4m160hs0xzg4g9rxchp053sz3s3d1lyciqixad1xi47a4"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-variantslib" ,ocaml-variantslib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-variantslib ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties
      `((upstream-name . "ppx_variants_conv")
        (ocaml4.07-variant . ,(delay ocaml4.07-ppx-variants-conv))))
@@ -5659,10 +5533,8 @@ variant types.")
          "0c1m65kn27zvwmfwy7kk46ga76yw2a3ik9jygpy1b6nn6pi026w9"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppx-sexp-conv ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_custom_printf")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-custom-printf))))
     (synopsis "Printf-style format-strings for user-defined string conversion")
@@ -5758,11 +5630,8 @@ storage of large amounts of data.")
                 "0x4wgdvhgd8a49bzari52jpkykxpv6ncgp5ncda3xgg0a9r49s8n"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppx-compare ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_hash")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-hash))))
     (home-page "https://github.com/janestreet/ppx_hash")
@@ -5801,9 +5670,7 @@ hash functions from type exrpessions and definitions.")
     (arguments
      `(#:tests? #f)) ; no test suite
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_enumerate")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-enumerate))))
     (home-page "https://github.com/janestreet/ppx_enumerate")
@@ -5873,9 +5740,7 @@ many values).")
      ;; broken tests
      `(#:tests? #f))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-        ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_here")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-here))))
     (home-page "https://github.com/janestreet/ppx_here")
@@ -6023,9 +5888,7 @@ context such as function arguments.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_optional")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-optional))))
     (home-page "https://github.com/janestreet/ppx_optional")
@@ -6063,9 +5926,7 @@ else expression.")
          "1iflgfzs23asw3k6098v84al5zqx59rx2qjw0mhvk56avlx71pkw"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-stdio ocaml-ppxlib))
     (properties `((upstream-name . "ppx_optcomp")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-optcomp))))
     (synopsis "Optional compilation for OCaml")
@@ -6094,9 +5955,7 @@ size, the version of the compiler, ...")
                         "1qcrnd86pbr1di5m6z4ps4p15qawwa02jxwz3xfd82hdbjmdwf1s"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
     (properties `((upstream-name . "ppx_let")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-let))))
     (home-page "https://github.com/janestreet/ppx_let")
@@ -6157,8 +6016,7 @@ position.")
     (build-system dune-build-system)
     (arguments `(#:test-target "tests"))
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-ppxlib))
     (properties `((upstream-name . "ppx_cold")))
     (synopsis "Syntax extension for indicating cold path")
     (description
@@ -6177,13 +6035,13 @@ https://github.com/ocaml/ocaml/issues/8563.")
                         "1l2rr4jz2q5b35ryn2z146z7m9v6k8krp5gpn8ilib66mnz5zx15"))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-cold" ,ocaml-ppx-cold)
-       ("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-here" ,ocaml-ppx-here)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base
+           ocaml-ppx-cold
+           ocaml-ppx-compare
+           ocaml-ppx-here
+           ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_assert")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-assert))))
     (home-page "https://github.com/janestreet/ppx_assert")
@@ -6225,13 +6083,13 @@ useful errors on failure.")
          "1v886rsl93wdmaw61z10q8nqshf8hvlznj9gym2ljrjz4cqyjsa4"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-ppx-here" ,ocaml-ppx-here)
-       ("ocaml-ppx-inline-test" ,ocaml-ppx-inline-test)
-       ("ocaml-stdio" ,ocaml-stdio)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-base
+           ocaml-ppx-here
+           ocaml-ppx-inline-test
+           ocaml-stdio
+           ocaml-ppxlib
+           ocaml-migrate-parsetree
+           ocaml-re))
     (properties `((upstream-name . "ppx_expect")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-expect))))
     (home-page "https://github.com/janestreet/ppx_expect")
@@ -6284,10 +6142,7 @@ to denote the expected output.")
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
-     `(("ocaml-base" ,ocaml-base)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-octavius" ,ocaml-octavius)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-octavius ocaml-ppxlib))
     (properties `((upstream-name . "ppx_js_style")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-js-style))))
     (home-page "https://github.com/janestreet/ppx_js_style")
@@ -6351,14 +6206,14 @@ from type definitions.")
     (arguments
      `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-ppx-compare" ,ocaml-ppx-compare)
-       ("ocaml-ppx-cold" ,ocaml-ppx-cold)
-       ("ocaml-ppx-enumerate" ,ocaml-ppx-enumerate)
-       ("ocaml-ppx-hash" ,ocaml-ppx-hash)
-       ("ocaml-ppx-js-style" ,ocaml-ppx-js-style)
-       ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-       ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-       ("ocaml-ppxlib" ,ocaml-ppxlib)))
+     (list ocaml-ppx-compare
+           ocaml-ppx-cold
+           ocaml-ppx-enumerate
+           ocaml-ppx-hash
+           ocaml-ppx-js-style
+           ocaml-ppx-sexp-conv
+           ocaml-migrate-parsetree
+           ocaml-ppxlib))
     (properties `((upstream-name . "ppx_base")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-base))))
     (home-page "https://github.com/janestreet/ppx_base")
@@ -6725,13 +6580,9 @@ the full Core is not available, such as in Javascript.")
     (arguments
      `(#:package "markup"))
     (propagated-inputs
-     `(("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
-       ("ocaml-uchar" ,ocaml-uchar)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-lwt" ,ocaml-lwt)))
+     (list ocaml-bisect-ppx ocaml-uchar ocaml-uutf ocaml-lwt))
     (native-inputs
-     `(("ocaml-ounit2" ,ocaml-ounit2)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-ounit2 pkg-config))
     (properties
      `((ocaml4.07-variant . ,(delay (package-with-ocaml4.07 ocaml-markup0.8.0)))))
     (synopsis "Error-recovering functional HTML5 and XML parsers and writers")
@@ -6774,8 +6625,7 @@ stream, and convert everything to UTF-8.")
         (base32
          "0aif4abvfmi9xc1pvw5n5rbm6rzkkpsxyvdn0lanr33rjpvkwdlm"))))
     (native-inputs
-     `(("ocaml-ounit" ,ocaml-ounit)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-ounit pkg-config))
     (properties '())))
 
 (define-public ocaml-tyxml
@@ -6794,11 +6644,9 @@ stream, and convert everything to UTF-8.")
          "0bh66wknc7sx2r63kscp0hg6h73dkv6qpkx0cdz2qp7p28pg2ixz"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-re" ,ocaml-re)
-       ("ocaml-seq" ,ocaml-seq)
-       ("ocaml-uutf" ,ocaml-uutf)))
+     (list ocaml-re ocaml-seq ocaml-uutf))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-alcotest))
     (arguments `(#:package "tyxml"))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-tyxml))))
     (home-page "https://github.com/ocsigen/tyxml/")
@@ -6844,8 +6692,7 @@ combinators.")
          "1knglw1b2kjr9jnd8cpfzmm581abxxdcx9l3cd2balg6gnac7qk1"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-ppxlib ocaml-cmdliner))
     (arguments
      ;; Tests require ocamlformat which would lead to circular dependencies
      '(#:tests? #f))
@@ -6912,28 +6759,28 @@ then run the Bisect_ppx report tool on the generated visitation files.")
              (substitute* "test/xref2/with.t/run.t"
                (("#!/bin/sh") (string-append "#!" (which "sh")))))))))
     (inputs
-    `(("ocaml-astring" ,ocaml-astring)
-      ("ocaml-bisect-ppx" ,ocaml-bisect-ppx)
-      ("ocaml-cmdliner" ,ocaml-cmdliner)
-      ("ocaml-fmt" ,ocaml-fmt)
-      ("ocaml-fpath" ,ocaml-fpath)
-      ("ocaml-logs" ,ocaml-logs)
-      ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
-      ("ocaml-odoc-parser" ,ocaml-odoc-parser)
-      ("ocaml-re" ,ocaml-re)
-      ("ocaml-result" ,ocaml-result)
-      ("ocaml-tyxml" ,ocaml-tyxml)))
+    (list ocaml-astring
+          ocaml-bisect-ppx
+          ocaml-cmdliner
+          ocaml-fmt
+          ocaml-fpath
+          ocaml-logs
+          ocaml-migrate-parsetree
+          ocaml-odoc-parser
+          ocaml-re
+          ocaml-result
+          ocaml-tyxml))
   (native-inputs
-    `(("ocaml-alcotest" ,ocaml-alcotest)
-      ("ocaml-bos" ,ocaml-bos)
-      ("ocaml-cppo" ,ocaml-cppo)
-      ("ocaml-findlib" ,ocaml-findlib)
-      ("ocaml-lwt" ,ocaml-lwt)
-      ("ocaml-markup" ,ocaml-markup)
-      ("ocaml-ppx-expect" ,ocaml-ppx-expect)
-      ("ocaml-version" ,ocaml-version)
-      ("ocaml-yojson" ,ocaml-yojson)
-      ("jq" ,jq)))
+    (list ocaml-alcotest
+          ocaml-bos
+          ocaml-cppo
+          ocaml-findlib
+          ocaml-lwt
+          ocaml-markup
+          ocaml-ppx-expect
+          ocaml-version
+          ocaml-yojson
+          jq))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-odoc))))
     (home-page "https://github.com/ocaml/odoc")
     (synopsis "OCaml documentation generator")
@@ -6962,10 +6809,9 @@ complexity of the OCaml module system.")
            "1jlc6dp3v90r1ra7r0jfw0xs8rylwdz9gymw4rd53h0p17cw1wnj"))))
     (build-system dune-build-system)
     (propagated-inputs
-      `(("ocaml-astring" ,ocaml-astring)
-        ("ocaml-result" ,ocaml-result)))
+      (list ocaml-astring ocaml-result))
     (native-inputs
-      `(("ocaml-ppx-expect" ,ocaml-ppx-expect)))
+      (list ocaml-ppx-expect))
     (home-page "https://github.com/ocaml-doc/odoc-parser")
     (synopsis "Parser for ocaml documentation comments")
     (description
@@ -7027,11 +6873,9 @@ language understood by ocamldoc.")
     (arguments
      `(#:test-target "tests"))
     (propagated-inputs
-     `(("fftw" ,fftw)
-       ("fftwf" ,fftwf)))
+     (list fftw fftwf))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)
-       ("ocaml-lacaml" ,ocaml-lacaml)))
+     (list ocaml-cppo ocaml-lacaml))
     (home-page
      "https://github.com/Chris00/fftw-ocaml")
     (synopsis
@@ -7059,10 +6903,7 @@ library FFTW.")
     (arguments
      `(#:tests? #f)) ; No test target.
     (native-inputs
-     `(("openblas" ,openblas)
-       ("lapack" ,lapack)
-       ("ocaml-base" ,ocaml-base)
-       ("ocaml-stdio" ,ocaml-stdio)))
+     (list openblas lapack ocaml-base ocaml-stdio))
     (home-page "https://mmottl.github.io/lacaml/")
     (synopsis
      "OCaml-bindings to BLAS and LAPACK")
@@ -7093,7 +6934,7 @@ convenience functions for vectors and matrices.")
        ("gtk+-2" ,gtk+-2)
        ("lablgtk" ,lablgtk)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/Chris00/ocaml-cairo")
     (synopsis "Binding to Cairo, a 2D Vector Graphics Library")
     (description "Ocaml-cairo2 is a binding to Cairo, a 2D graphics library
@@ -7144,19 +6985,17 @@ variants.")
                 "1w2vx4my9z6n57vjvsa3b9vwkbdzs1kq0cc58rf088qrh2lrx2ba"))))
     (build-system dune-build-system)
     (inputs
-     `(("ocaml-fmt" ,ocaml-fmt)
-       ("ocaml-astring" ,ocaml-astring)
-       ("ocaml-logs" ,ocaml-logs)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-result" ,ocaml-result)
-       ("ocaml-odoc" ,ocaml-odoc)
-       ("ocaml-odoc-parser" ,ocaml-odoc-parser)
-       ("ocaml-version" ,ocaml-version)))
+     (list ocaml-fmt
+           ocaml-astring
+           ocaml-logs
+           ocaml-cmdliner
+           ocaml-re
+           ocaml-result
+           ocaml-odoc
+           ocaml-odoc-parser
+           ocaml-version))
     (native-inputs
-     `(("ocaml-cppo" ,ocaml-cppo)
-       ("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-alcotest" ,ocaml-alcotest)))
+     (list ocaml-cppo ocaml-lwt ocaml-alcotest))
     (home-page
      "https://github.com/realworldocaml/mdx")
     (synopsis
@@ -7215,8 +7054,7 @@ the FParsec library for FSharp by Stephan Tolksdorf.")
      '(#:package "mparser-re"
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-mparser" ,ocaml-mparser)
-       ("ocaml-re" ,ocaml-re)))
+     (list ocaml-mparser ocaml-re))
     (synopsis "MParser plugin for RE-based regular expressions")
     (description "This package provides RE-based regular expressions
 support for Mparser.")))
@@ -7230,8 +7068,7 @@ support for Mparser.")))
      '(#:package "mparser-pcre"
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-mparser" ,ocaml-mparser)
-       ("ocaml-pcre" ,ocaml-pcre)))
+     (list ocaml-mparser ocaml-pcre))
     (synopsis "MParser plugin for PCRE-based regular expressions")
     (description "This package provides PCRE-based regular expressions
 support for Mparser.")))
@@ -7266,14 +7103,14 @@ support for Mparser.")))
                (("\\(name lablgtk3\\)")
                 (string-append "(name lablgtk3)\n(version " ,version ")"))))))))
     (propagated-inputs
-     `(("ocaml-cairo2" ,ocaml-cairo2)))
+     (list ocaml-cairo2))
     (inputs
      `(("camlp5" ,camlp5)
        ("gtk+" ,gtk+)
        ("gtksourceview-3" ,gtksourceview-3)
        ("gtkspell3" ,gtkspell3)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/garrigue/lablgtk")
     (synopsis "OCaml interface to GTK+3")
     (description "LablGtk is an OCaml interface to GTK+ 1.2, 2.x and 3.x.  It
@@ -7317,10 +7154,9 @@ generate OCaml code from .glade files), libpanel, librsvg and quartz.")
     (build-system ocaml-build-system)
     (properties `((upstream-name . "reactiveData")))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)))
+     (list ocamlbuild opam))
     (propagated-inputs
-     `(("ocaml-react" ,ocaml-react)))
+     (list ocaml-react))
     (home-page "https://github.com/ocsigen/reactiveData")
     (synopsis "Declarative events and signals for OCaml")
     (description
@@ -7349,12 +7185,9 @@ client chooses the concrete timeline.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("ocaml-xmlm" ,ocaml-xmlm)))
+     (list ocaml-xmlm))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uucd")
     (synopsis "Unicode character database decoder for OCaml")
     (description "Uucd is an OCaml module to decode the data of the Unicode
@@ -7382,13 +7215,13 @@ representations can be extracted.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)
-       ("ocaml-uucd" ,ocaml-uucd)
-       ("ocaml-uunf" ,ocaml-uunf)
-       ("ocaml-uutf" ,ocaml-uutf)))
+     (list opam
+           ocaml-findlib
+           ocamlbuild
+           ocaml-topkg
+           ocaml-uucd
+           ocaml-uunf
+           ocaml-uutf))
     (home-page "https://erratique.ch/software/uucp")
     (synopsis "Unicode character properties for OCaml")
     (description "Uucp is an OCaml library providing efficient access to a
@@ -7414,14 +7247,9 @@ selection of character properties of the Unicode character database.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (propagated-inputs
-     `(("ocaml-uucp" ,ocaml-uucp)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)))
+     (list ocaml-uucp ocaml-uutf ocaml-cmdliner))
     (native-inputs
-     `(("opam" ,opam)
-       ("ocaml-findlib" ,ocaml-findlib)
-       ("ocamlbuild" ,ocamlbuild)
-       ("ocaml-topkg" ,ocaml-topkg)))
+     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uuseg")
     (synopsis "Unicode text segmentation for OCaml")
     (description "Uuseg is an OCaml library for segmenting Unicode text.  It
@@ -7468,7 +7296,7 @@ that involve memoization and recursion.")
        ;; No separate test suite from dune.
        #:tests? #f))
     (propagated-inputs
-     `(("ocaml-odoc" ,ocaml-odoc)))
+     (list ocaml-odoc))
     (synopsis "Embed build information inside an executable")
     (description "This package allows one to access information about how the
 executable was built, such as the version of the project at which it was built
@@ -7520,25 +7348,23 @@ defined in OCaml 4.12.0.")
        ;; produced format is for test/cli/stdin.t
        #:tests? #f))
     (propagated-inputs
-      `(("ocaml-version" ,ocaml-version)
-        ("ocaml-base" ,ocaml-base)
-        ("ocaml-cmdliner" ,ocaml-cmdliner)
-        ("ocaml-dune-build-info" ,ocaml-dune-build-info)
-        ("ocaml-either" ,ocaml-either)
-        ("ocaml-fix" ,ocaml-fix)
-        ("ocaml-fpath" ,ocaml-fpath)
-        ("ocaml-menhir" ,ocaml-menhir)
-        ("ocaml-odoc" ,ocaml-odoc)
-        ("ocaml-ppxlib" ,ocaml-ppxlib)
-        ("ocaml-re" ,ocaml-re)
-        ("ocaml-odoc-parser" ,ocaml-odoc-parser)
-        ("ocaml-stdio" ,ocaml-stdio)
-        ("ocaml-uuseg" ,ocaml-uuseg)
-        ("ocaml-uutf" ,ocaml-uutf)))
+      (list ocaml-version
+            ocaml-base
+            ocaml-cmdliner
+            ocaml-dune-build-info
+            ocaml-either
+            ocaml-fix
+            ocaml-fpath
+            ocaml-menhir
+            ocaml-odoc
+            ocaml-ppxlib
+            ocaml-re
+            ocaml-odoc-parser
+            ocaml-stdio
+            ocaml-uuseg
+            ocaml-uutf))
     (native-inputs
-      `(("ocaml-alcotest" ,ocaml-alcotest)
-        ("ocaml-ocp-indent" ,ocaml-ocp-indent)
-        ("ocaml-bisect-ppx" ,ocaml-bisect-ppx)))
+      (list ocaml-alcotest ocaml-ocp-indent ocaml-bisect-ppx))
     (home-page "https://github.com/ocaml-ppx/ocamlformat")
     (synopsis "Auto-formatter for OCaml code")
     (description "OCamlFormat is a tool to automatically format OCaml code in
@@ -7564,10 +7390,9 @@ a uniform style.")
     (arguments
      '(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigarray-compat" ,ocaml-bigarray-compat)))
+     (list ocaml-bigarray-compat))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("pkg-config" ,pkg-config)))
+     (list ocaml-alcotest pkg-config))
     (synopsis
      "Bigstring intrinsics and fast blits based on memcpy/memmove")
     (description
@@ -7618,10 +7443,9 @@ OCaml.")
         (base32 "0417xsghj92v3xa5q4dk4nzf2r4mylrx2fd18i7cg3nzja65nia2"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("ocaml-result" ,ocaml-result)
-       ("ocaml-trie" ,ocaml-trie)))
+     (list ocaml-result ocaml-trie))
     (native-inputs
-     `(("ocaml-ppx-expect" ,ocaml-ppx-expect)))
+     (list ocaml-ppx-expect))
     (synopsis "General modal editing engine generator")
     (description
      "This package provides the core modules of Modal Editing Witch, a general
@@ -7644,10 +7468,9 @@ modal editing engine generator.")
           (base32 "0lihbf822k5zasl60w5mhwmdkljlq49c9saayrws7g4qc1j353r8"))))
     (build-system dune-build-system)
     (propagated-inputs
-      `(("ocaml-mew" ,ocaml-mew)
-        ("ocaml-react" ,ocaml-react)))
+      (list ocaml-mew ocaml-react))
     (native-inputs
-     `(("ocaml-ppx-expect" ,ocaml-ppx-expect)))
+     (list ocaml-ppx-expect))
     (properties `((upstream-name . "mew_vi")))
     (synopsis "Modal editing VI-like editing engine generator")
     (description "This module provides a vi-like modal editing engine
@@ -7700,11 +7523,9 @@ OCaml compilers.")
      '(#:package "angstrom"
        #:test-target "."))
     (propagated-inputs
-     `(("ocaml-bigstringaf" ,ocaml-bigstringaf)))
+     (list ocaml-bigstringaf))
     (native-inputs
-     `(("ocaml-alcotest" ,ocaml-alcotest)
-       ("ocaml-ppx-let" ,ocaml-ppx-let)
-       ("ocaml-syntax-shims" ,ocaml-syntax-shims)))
+     (list ocaml-alcotest ocaml-ppx-let ocaml-syntax-shims))
     (synopsis "Parser combinators built for speed and memory-efficiency")
     (description
      "Angstrom is a parser-combinator library that makes it easy to write
@@ -7733,7 +7554,7 @@ Parsers are backtracking by default and support unbounded lookahead.")
          "1q20f8y6ijxbvzik2ns4yl3w54q5z8kd0pby8i8c64a04hvly08m"))))
     (build-system dune-build-system)
     (propagated-inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (synopsis "The OCaml graphics library")
     (description
      "The graphics library provides a set of portable drawing primitives.
@@ -7750,10 +7571,8 @@ up to OCaml 4.08.")
      '(#:package "uri-sexp"
        #:test-target "."))
     (propagated-inputs
-      `(("ocaml-uri" ,ocaml-uri)
-        ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-sexplib0" ,ocaml-sexplib0)))
-    (native-inputs `(("ocaml-ounit" ,ocaml-ounit)))
+      (list ocaml-uri ocaml-ppx-sexp-conv ocaml-sexplib0))
+    (native-inputs (list ocaml-ounit))
     (synopsis "RFC3986 URI/URL parsing library")
     (description "This package adds S-exp support to @code{ocaml-uri}.")))
 
@@ -7776,17 +7595,15 @@ up to OCaml 4.08.")
      '(#:package "cohttp"
        #:test-target "cohttp_test/src"))
     (propagated-inputs
-      `(("ocaml-re" ,ocaml-re)
-        ("ocaml-uri" ,ocaml-uri)
-        ("ocaml-uri-sexp" ,ocaml-uri-sexp)
-        ("ocaml-sexplib0" ,ocaml-sexplib0)
-        ("ocaml-ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
-        ("ocaml-stringext" ,ocaml-stringext)
-        ("ocaml-base64" ,ocaml-base64)))
+      (list ocaml-re
+            ocaml-uri
+            ocaml-uri-sexp
+            ocaml-sexplib0
+            ocaml-ppx-sexp-conv
+            ocaml-stringext
+            ocaml-base64))
     (native-inputs
-      `(("ocaml-fmt" ,ocaml-fmt)
-        ("ocaml-jsonm" ,ocaml-jsonm)
-        ("ocaml-alcotest" ,ocaml-alcotest)))
+      (list ocaml-fmt ocaml-jsonm ocaml-alcotest))
     (home-page "https://github.com/mirage/ocaml-cohttp")
     (synopsis "OCaml library for HTTP clients and servers")
     (description
@@ -7811,22 +7628,20 @@ libraries.")
     (build-system dune-build-system)
     (arguments `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-ppxlib" ,ocaml-ppxlib)
-       ("ocaml-uchar" ,ocaml-uchar)
-       ("ocaml-menhir" ,ocaml-menhir)
-       ("ocaml-reactivedata" ,ocaml-reactivedata)
-       ("ocaml-cmdliner" ,ocaml-cmdliner)
-       ("ocaml-lwt" ,ocaml-lwt)
-       ("ocaml-tyxml" ,ocaml-tyxml)
-       ("ocaml-re" ,ocaml-re)
-       ("ocaml-uutf" ,ocaml-uutf)
-       ("ocaml-graphics" ,ocaml-graphics)
-       ("ocaml-yojson" ,ocaml-yojson)))
+     (list ocaml-ppxlib
+           ocaml-uchar
+           ocaml-menhir
+           ocaml-reactivedata
+           ocaml-cmdliner
+           ocaml-lwt
+           ocaml-tyxml
+           ocaml-re
+           ocaml-uutf
+           ocaml-graphics
+           ocaml-yojson))
     (native-inputs
      ;; for tests
-     `(("node" ,node)
-       ("ocaml-ppx-expect" ,ocaml-ppx-expect)
-       ("ocaml-num" ,ocaml-num)))
+     (list node ocaml-ppx-expect ocaml-num))
     (properties `((upstream-name . "js_of_ocaml")))
     (home-page "https://ocsigen.org/js_of_ocaml/")
     (synopsis "Compiler from OCaml bytecode to Javascript")
@@ -7855,10 +7670,11 @@ browsers and Node.js.")
               #t)))))
     (native-inputs
      `(("which" ,which)
-       ("texlive" ,(texlive-union (list texlive-fonts-ec texlive-preprint
-                                        texlive-latex-hyperref texlive-bibtex)))))
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-fonts-ec texlive-preprint
+                          texlive-hyperref texlive-bibtex)))))
     (propagated-inputs
-     `(("hevea" ,hevea)))
+     (list hevea))
     (home-page "https://www.lri.fr/~filliatr/bibtex2html/")
     (synopsis "BibTeX to HTML translator")
     (description "This package allows you to produce, from a set of
diff --git a/gnu/packages/ocr.scm b/gnu/packages/ocr.scm
index 20501505d8..de321bb53f 100644
--- a/gnu/packages/ocr.scm
+++ b/gnu/packages/ocr.scm
@@ -63,7 +63,7 @@
               (base32
                "0divffvcaim89g4pvqs8kslbcxi475bcl3b4ynphf284k9zfdgx9"))))
     (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
+    (native-inputs (list lzip))
     (home-page "https://www.gnu.org/software/ocrad/")
     (synopsis "Optical character recognition based on feature extraction")
     (description
@@ -269,5 +269,5 @@ that allows us to create any hand-written recognition systems with low-cost.")
              (chdir "zinnia/python")
              #t)))))
     (inputs
-     `(("zinnia" ,zinnia)))))
+     (list zinnia))))
 
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 8b3892d2f0..f1cab94e08 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -37,7 +37,7 @@
 (define-public libtirpc
   (package
     (name "libtirpc")
-    (version "1.2.5")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/libtirpc/libtirpc/"
@@ -45,27 +45,23 @@
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1jl6a5kkw2vrp4gb6pmvf72rqimywvwfb9f7iz2xjg4wgq63bdpk"))))
+                "05zf16ilwwkzv4cccaac32nssrj3rg444n9pskiwbgk6y359an14"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remote-dangling-symlink
-           (lambda _
+         (add-after 'unpack 'adjust-netconfig-reference
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* '("man/netconfig.5"
                             "man/getnetconfig.3t"
                             "man/getnetpath.3t"
                             "man/rpc.3t"
                             "src/getnetconfig.c"
                             "tirpc/netconfig.h")
-               (("/etc/netconfig") (string-append %output "/etc/netconfig")))
-
-             ;; Remove the dangling symlinks since it breaks the
-             ;; 'patch-source-shebangs' file tree traversal.
-             (delete-file "INSTALL")
-             #t)))))
-    (inputs `(("mit-krb5" ,mit-krb5)))
+               (("/etc/netconfig") (string-append (assoc-ref outputs "out")
+                                                  "/etc/netconfig"))))))))
+    (inputs (list mit-krb5))
     (home-page "https://sourceforge.net/projects/libtirpc/")
     (synopsis "Transport-independent Sun/ONC RPC implementation")
     (description
@@ -78,9 +74,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
   (package/inherit libtirpc
     (name "libtirpc-hurd")
     (source (origin (inherit (package-source libtirpc))
-                    (patches (append (origin-patches (package-source libtirpc))
-                                     (search-patches "libtirpc-hurd.patch"
-                                                     "libtirpc-hurd-client.patch")))))
+                    (patches (search-patches "libtirpc-hurd.patch"))))
     (arguments
      (substitute-keyword-arguments (package-arguments libtirpc)
        ((#:configure-flags flags ''())
@@ -107,10 +101,9 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
      `(#:configure-flags
        `("--with-systemdsystemunitdir=no" "--enable-warmstarts")))
     (inputs
-     `(("libnsl" ,libnsl)
-       ("libtirpc" ,libtirpc)))
+     (list libnsl libtirpc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://rpcbind.sourceforge.net/")
     (synopsis "Server to convert RPC program numbers into universal addresses")
     (description
@@ -162,7 +155,7 @@ from the protocol files.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libtirpc" ,libtirpc)))
+     (list libtirpc))
     (synopsis "Public client interface for NIS(YP) and NIS+")
     (description "Libnsl is the public client interface for the Network
 Information Service / Yellow Pages (NIS/YP) and NIS+.  It includes IPv6 support.
diff --git a/gnu/packages/openbox.scm b/gnu/packages/openbox.scm
index 00c93c3864..873592c19e 100644
--- a/gnu/packages/openbox.scm
+++ b/gnu/packages/openbox.scm
@@ -22,6 +22,7 @@
   #:use-module ((guix licenses) #:select (gpl2+))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -47,19 +48,19 @@
                (base32
                 "0vg2y1qddsdxkjv806mzpvmkgzliab8ll4s7zm7ma5jnriamirxb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (propagated-inputs `(("python2-pyxdg" ,python2-pyxdg)))
-    (inputs `(("imlib2" ,imlib2)
-              ("libxml2" ,libxml2)
-              ("librsvg" ,librsvg)
-              ("libsm" ,libsm)
-              ("libxcursor" ,libxcursor)
-              ("libxinerama" ,libxinerama)
-              ("libxml2" ,libxml2)
-              ("libxrandr" ,libxrandr)
-              ("libxft" ,libxft)
-              ("pango" ,pango)
-              ("python-2" ,python-2)))
+    (native-inputs (list pkg-config))
+    (propagated-inputs (list python2-pyxdg))
+    (inputs (list imlib2
+                  libxml2
+                  (librsvg-for-system)
+                  libsm
+                  libxcursor
+                  libxinerama
+                  libxml2
+                  libxrandr
+                  libxft
+                  pango
+                  python-2))
     (synopsis "Box style window manager")
     (description
      "Openbox is a highly configurable, next generation window manager with
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
index 2d5ccf0105..940f52587e 100644
--- a/gnu/packages/opencl.scm
+++ b/gnu/packages/opencl.scm
@@ -109,7 +109,7 @@
     (native-inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (arguments
      `(#:configure-flags (list "-DBUILD_EXAMPLES=OFF" "-DBUILD_TESTS=OFF")
        ;; The regression tests require a lot more dependencies.
@@ -141,7 +141,7 @@
             (variable "OCL_ICD_VENDORS")
             (files '("etc/OpenCL/vendors")))))
     (home-page "https://github.com/KhronosGroup/OpenCL-ICD-Loader")
-    (inputs `(("opencl-headers" ,opencl-headers)))
+    (inputs (list opencl-headers))
     (synopsis "OpenCL Installable Client Driver")
     (description
      "OpenCL defines an Installable Client Driver (ICD) mechanism to allow
@@ -176,9 +176,9 @@ This package contains the Khronos official OpenCL ICD Loader.")
         (base32 "1sfxp6ai83i0vwdg7b05h0k07q6873q1z1avnyksj5zmzdnxya6j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (inputs
-     `(("opencl-icd-loader" ,opencl-icd-loader)))
+     (list opencl-icd-loader))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -213,8 +213,7 @@ the system.")
         ;; There's a suspicious .isa binary file under kernels/.
         ;; Remove it.
         '(for-each delete-file (find-files "." "\\.isa$")))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("python" ,python)))
+    (native-inputs (list pkg-config python))
     (inputs `(("clang@3.7" ,clang-3.7)
               ("clang-runtime@3.7" ,clang-runtime-3.7)
               ("glu" ,glu)
@@ -289,13 +288,10 @@ back-end for the LLVM compiler framework.")
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
+     (list libltdl pkg-config))
     (inputs
-     `(("clang" ,clang)
-       ("hwloc" ,hwloc-2 "lib")
-       ("llvm" ,llvm)
-       ("opencl-icd-loader" ,opencl-icd-loader)))
+     (list clang
+           `(,hwloc-2 "lib") llvm opencl-icd-loader))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_ICD=ON"
@@ -337,8 +333,7 @@ pocl.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; Tests depend on packages not present in Guix.
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-numpy" ,python-numpy)))
+     (list python-appdirs python-numpy))
     (home-page "https://pypi.org/project/pytools/")
     (synopsis "Assorted tools for Python")
     (description
@@ -380,14 +375,9 @@ A lexer, @code{pytools.lex}.
     (arguments
      `(#:tests? #f)) ; Tests cannot find pygpu_language_opencl.cpp
     (inputs
-     `(("opencl-headers" ,opencl-headers)
-       ("pybind11" ,pybind11)
-       ("opencl-icd-loader" ,opencl-icd-loader)))                     ;libOpenCL
+     (list opencl-headers pybind11 opencl-icd-loader))                     ;libOpenCL
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-numpy" ,python-numpy)
-       ("python-pytools" ,python-pytools)
-       ("python-mako" ,python-mako)))
+     (list python-appdirs python-numpy python-pytools python-mako))
     (home-page "http://mathema.tician.de/software/pyopencl")
     (synopsis "Python wrapper for OpenCL")
     (description
diff --git a/gnu/packages/opencog.scm b/gnu/packages/opencog.scm
index cca0b37ead..998d9b47ae 100644
--- a/gnu/packages/opencog.scm
+++ b/gnu/packages/opencog.scm
@@ -54,7 +54,7 @@
       (arguments
        `(#:test-target "tests"))
       (inputs
-       `(("boost" ,boost)))
+       (list boost))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -93,11 +93,7 @@ utilities use for typical programming tasks in multiple OpenCog projects.")
                               (assoc-ref %outputs "out")
                               "/share/guile/site/2.2/"))))
       (inputs
-       `(("boost" ,boost)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)
-         ("postgresql" ,postgresql)))
+       (list boost cogutil gmp guile-2.2 postgresql))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -139,11 +135,7 @@ features not otherwise available.")
                               (assoc-ref %outputs "out")
                               "/share/guile/site/2.2/"))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("boost" ,boost)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace boost cogutil gmp guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -182,12 +174,12 @@ OpenCog framework.")
                          (assoc-ref %outputs "out")
                          "/share/guile/site/2.2/"))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("boost" ,boost)
-         ("cogserver" ,cogserver)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace
+             boost
+             cogserver
+             cogutil
+             gmp
+             guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
@@ -288,10 +280,7 @@ combination.")
                                          "/share/guile/site/2.2/opencog"))))
                #t)))))
       (inputs
-       `(("atomspace" ,atomspace)
-         ("cogutil" ,cogutil)
-         ("gmp" ,gmp)
-         ("guile" ,guile-2.2)))
+       (list atomspace cogutil gmp guile-2.2))
       (native-inputs
        `(("cxxtest" ,cxxtest)
          ("python" ,python-minimal)
diff --git a/gnu/packages/openkinect.scm b/gnu/packages/openkinect.scm
index 89e6c69cfc..e760f18367 100644
--- a/gnu/packages/openkinect.scm
+++ b/gnu/packages/openkinect.scm
@@ -64,9 +64,9 @@
                                (string-append rules-out "51-kinect.rules"))
                  #t))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (inputs
-       `(("libusb" ,libusb)))
+       (list libusb))
       (synopsis "Drivers and libraries for the Xbox Kinect device")
       (description "libfreenect is a userspace driver for the Microsoft Kinect.
 It supports: RGB and Depth Images, Motors, Accelerometer, LED and Audio.")
@@ -106,8 +106,7 @@ It supports: RGB and Depth Images, Motors, Accelerometer, LED and Audio.")
     (inherit libfreenect)
     (name "libfreenect-opencv")
     (inputs
-     `(("libfreenect" ,libfreenect)
-       ("opencv" ,opencv)))
+     (list libfreenect opencv))
     (arguments
      `(#:tests? #f                      ; package has no tests
        #:configure-flags '("-DBUILD_EXAMPLES=OFF"
@@ -124,12 +123,11 @@ library")))
     (inherit libfreenect)
     (name "python-libfreenect")
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("libfreenect" ,libfreenect)))
+     (list libfreenect))
     (propagated-inputs
-     `(("python" ,python)
-       ("python-numpy" ,python-numpy)))
+     (list python python-numpy))
     (arguments
      `(#:tests? #f                      ; package has no tests
        #:configure-flags '("-DBUILD_EXAMPLES=OFF"
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 1f3e775451..b0ce899696 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,8 +62,7 @@
 (define-public openldap
   (package
    (name "openldap")
-   (replacement openldap-2.4.57)
-   (version "2.4.50")
+   (version "2.4.57")
    (source (origin
              (method url-fetch)
              ;; See <http://www.openldap.org/software/download/> for a list of
@@ -78,16 +78,10 @@
                          "openldap-release/openldap-" version ".tgz")))
              (sha256
               (base32
-               "1f46nlfwmys110j36sifm7ah8m8f3s10c3vaiikmmigmifapvdaw"))))
+               "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))
    (build-system gnu-build-system)
-   (inputs `(("bdb" ,bdb-5.3)
-             ("cyrus-sasl" ,cyrus-sasl)
-             ("gnutls" ,gnutls)
-             ("libgcrypt" ,libgcrypt)
-             ("zlib" ,zlib)))
-   (native-inputs `(("libtool" ,libtool)
-                    ("groff" ,groff)
-                    ("bdb" ,bdb-5.3)))
+   (inputs (list bdb-5.3 cyrus-sasl gnutls libgcrypt zlib))
+   (native-inputs (list libtool groff bdb-5.3))
    (arguments
     `(#:tests? #f
       #:configure-flags
@@ -126,27 +120,6 @@
    (license openldap2.8)
    (home-page "https://www.openldap.org/")))
 
-(define-public openldap-2.4.57
-  (package
-    (inherit openldap)
-    (version "2.4.57")
-    (source (origin
-              (method url-fetch)
-              ;; See <http://www.openldap.org/software/download/> for a list of
-              ;; mirrors.
-              (uri (list (string-append
-                          "ftp://mirror.switch.ch/mirror/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")
-                         (string-append
-                          "https://www.openldap.org/software/download/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")
-                         (string-append
-                          "ftp://ftp.dti.ad.jp/pub/net/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")))
-              (sha256
-               (base32
-                "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))))
-
 (define-public nss-pam-ldapd
   (package
     (name "nss-pam-ldapd")
@@ -180,10 +153,7 @@
                 (string-append (assoc-ref outputs "out")
                                "/etc/nslcd.conf.example"))))))))
     (inputs
-     `(("linux-pam" ,linux-pam)
-       ("openldap" ,openldap)
-       ("mit-krb5" ,mit-krb5)
-       ("python" ,python)))
+     (list linux-pam openldap mit-krb5 python))
     (home-page "https://arthurdejong.org/nss-pam-ldapd")
     (synopsis "NSS and PAM modules for LDAP")
     (description "nss-pam-ldapd provides a @dfn{Name Service Switch} (NSS)
@@ -220,12 +190,9 @@ an LDAP server.")
                                       "/etc/openldap/schema/")))
              #t)))))
     (inputs
-     `(("openldap" ,openldap)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("mit-krb5" ,mit-krb5)))
+     (list openldap cyrus-sasl mit-krb5))
     (propagated-inputs
-     `(("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)))
+     (list python-pyasn1 python-pyasn1-modules))
     (home-page "https://www.python-ldap.org/")
     (synopsis "Python modules for implementing LDAP clients")
     (description
@@ -236,20 +203,20 @@ servers from Python programs.")
 (define-public 389-ds-base
   (package
     (name "389-ds-base")
-    (version "1.4.0.31")
+    (version "1.4.4.17")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://releases.pagure.org/389-ds-base/"
-                                  "389-ds-base-" version ".tar.bz2"))
+              (uri (string-append "https://github.com/389ds/389-ds-base/archive/"
+                                  "389-ds-base-" version ".tar.gz"))
               (sha256
                (base32
-                "1rs218iqxyclccsdqb529favdsmz88zw785lsxd9ln43ja3x3l65"))))
+                "0i8m4crbnjjhfb7cq758rd0fxyz36i291yq6fykkprjykz9s3zv4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((srfi srfi-1)
                   (guix build gnu-build-system)
                   ((guix build python-build-system)
-                   #:select (python-version))
+                   #:select (add-installed-pythonpath python-version))
                   (guix build utils))
        #:imported-modules ((guix build python-build-system)
                            ,@%gnu-build-system-modules)
@@ -276,12 +243,17 @@ servers from Python programs.")
            (lambda _
              (substitute* "include/ldaputil/certmap.h"
                (("nss3/cert.h") "nss/cert.h"))
+             (substitute* "src/lib389/lib389/utils.py"
+               (("'/sbin/ip'")
+                (string-append "'" (which "ip") "'")))
              (substitute* "src/lib389/lib389/nss_ssl.py"
                (("'/usr/bin/certutil'")
                 (string-append "'" (which "certutil") "'"))
+               (("'/usr/bin/openssl'")
+                (string-append "'" (which "openssl") "'"))
                (("'/usr/bin/c_rehash'")
-                (string-append "'" (which "perl") "', '" (which "c_rehash") "'")))
-             #t))
+                (string-append "'" (which "perl") "', '"
+                               (which "c_rehash") "'")))))
          (add-after 'unpack 'overwrite-default-locations
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -299,8 +271,7 @@ servers from Python programs.")
                (substitute* '("src/lib389/lib389/instance/setup.py"
                               "src/lib389/lib389/instance/remove.py")
                  (("etc_dirsrv_path = .*")
-                  "etc_dirsrv_path = '/etc/dirsrv/'\n"))
-               #t)))
+                  "etc_dirsrv_path = '/etc/dirsrv/'\n")))))
          (add-after 'unpack 'fix-install-location-of-python-tools
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -309,18 +280,16 @@ servers from Python programs.")
                                 (python-version (assoc-ref inputs "python"))
                                 "/site-packages/")))
                ;; Install directory must be on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH")
-                                      ":" pythondir))
+               (add-installed-pythonpath inputs outputs)
                ;; Install directory must exist.
                (mkdir-p pythondir)
                (substitute* "src/lib389/setup.py"
                  (("/usr") out))
                (substitute* "Makefile.am"
                  (("setup.py install --skip-build" m)
-                  (string-append m " --prefix=" out
-                                 " --root=/ --single-version-externally-managed"))))
-             #t))
+                  (string-append
+                   m " --prefix=" out
+                   " --root=/ --single-version-externally-managed"))))))
          (add-after 'build 'build-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
              ;; Set DETERMINISTIC_BUILD to override the embedded mtime in pyc
@@ -329,27 +298,23 @@ servers from Python programs.")
              ;; Use deterministic hashes for strings, bytes, and datetime
              ;; objects.
              (setenv "PYTHONHASHSEED" "0")
-             (apply invoke "make" "lib389" make-flags)
-             #t))
+             (apply invoke "make" "lib389" make-flags)))
          (add-after 'install 'install-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "lib389-install" make-flags)
-             #t))
+             (apply invoke "make" "lib389-install" make-flags)))
          (add-after 'install-python-tools 'wrap-python-tools
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
                (for-each (lambda (file)
                            (wrap-program (string-append out file)
-                             `("PYTHONPATH" ":" prefix (,path))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("/sbin/dsconf"
                            "/sbin/dscreate"
                            "/sbin/dsctl"
                            "/sbin/dsidm"
                            "/bin/ds-logpipe.py"
-                           "/bin/ds-replcheck"
-                           "/bin/readnsstate")))
-             #t)))))
+                           "/bin/ds-replcheck"))))))))
     (inputs
      `(("bdb" ,bdb)
        ("cracklib" ,cracklib)
@@ -357,6 +322,7 @@ servers from Python programs.")
        ("gnutls" ,gnutls)
        ("httpd" ,httpd)
        ("icu4c" ,icu4c)
+       ("iproute" ,iproute)
        ("libevent" ,libevent)
        ("libselinux" ,libselinux)
        ("linux-pam" ,linux-pam)
@@ -364,7 +330,7 @@ servers from Python programs.")
        ("net-snmp" ,net-snmp)
        ("nspr" ,nspr)
        ("nss" ,nss)
-       ("nss:bin" ,nss "bin") ; for certutil
+       ("nss:bin" ,nss "bin")           ; for certutil
        ("openldap" ,openldap)
        ("openssl" ,openssl)             ; #included by net-snmp
        ("pcre" ,pcre)
@@ -418,9 +384,7 @@ Other features include:
          "013bl6h1m3f7vg1lk89d4vi28wbf31zdcs4f9g8css7ngx63v6px"))))
     (build-system python-build-system)
     (inputs
-     `(("mit-krb5" ,mit-krb5)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openldap" ,openldap)))
+     (list mit-krb5 cyrus-sasl openldap))
     ;; disabling tests, since they require docker and extensive setup
     (arguments `(#:tests? #f))
     (home-page "https://github.com/noirello/bonsai")
@@ -430,4 +394,3 @@ Other features include:
 are mapped to a special Python case-insensitive dictionary, tracking the
 changes of the dictionary to modify the entry on the server easily.")
     (license expat)))
-
diff --git a/gnu/packages/openpgp.scm b/gnu/packages/openpgp.scm
index a5b8f1b09d..40df62a6d7 100644
--- a/gnu/packages/openpgp.scm
+++ b/gnu/packages/openpgp.scm
@@ -46,8 +46,7 @@
                 "179b5jx3mqs9hgsj8cfwk6x8qib60kw9szk9fkz6s1gl3v83mnyx"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-silent-rules")))
-    (inputs `(("gmp" ,gmp)
-              ("libgcrypt" ,libgcrypt)))
+    (inputs (list gmp libgcrypt))
     (synopsis
      "C++ library for creating secure and fair online card games")
     (description
@@ -79,11 +78,7 @@ LibTMCG provides the first practical implementation of such protocols.")
                  '("--enable-silent-rules")
                  ;; https://savannah.nongnu.org/bugs/?58772
                  #:parallel-tests? #f))
-    (inputs `(("bzip2" ,bzip2)
-              ("gmp" ,gmp)
-              ("libgcrypt" ,libgcrypt)
-              ("libtmcg" ,libtmcg)
-              ("zlib" ,zlib)))
+    (inputs (list bzip2 gmp libgcrypt libtmcg zlib))
     (synopsis
      "Distributed Key Generation and Threshold Cryptography for OpenPGP")
     (description
@@ -159,10 +154,7 @@ environments.")
          ("pkg-config" ,pkg-config)
          ("python" ,python)
          ("python2" ,python-2.7)))
-      (inputs `(("botan" ,botan)
-                ("bzip2" ,bzip2)
-                ("json-c" ,json-c)
-                ("zlib" ,zlib)))
+      (inputs (list botan bzip2 json-c zlib))
       (synopsis
        "RFC4880-compliant OpenPGP library written in C++")
       (description
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 1c35fe570f..b0395fd7d0 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -27,6 +27,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
@@ -61,12 +62,9 @@
      ;; python-stestr.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-gitpython" ,python-gitpython)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-gitpython python-pyyaml python-six python-stevedore))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://github.com/PyCQA/bandit")
     (synopsis "Security oriented static analyser for python code")
     (description "Bandit is a tool designed to find common security issues in
@@ -90,14 +88,14 @@ scanning all the files it generates a report.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-cmd2" ,python-cmd2)
-       ("python-prettytable" ,python-prettytable)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-bandit" ,python-bandit)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-cmd2
+           python-prettytable
+           python-pyparsing
+           python-pyyaml
+           python-bandit
+           python-stevedore))
     (home-page "https://opendev.org/openstack/cliff")
     (synopsis "Framework for building command line programs")
     (description "The @code{cliff} framework allows creating multi-level
@@ -120,14 +118,10 @@ formatters, and other extensions.")
            "06c7vyn184y9f0lsrwaz13aq63hdz5fjrd191b8nifx6acsni42f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-pbr python-six python-wrapt))
     (native-inputs
-     `(;; Tests.
-       ("python-subunit" ,python-subunit)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list ;; Tests.
+           python-subunit python-testrepository python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis
      "Find deprecated patterns and strategies in Python code")
@@ -150,20 +144,20 @@ manner.")
          "0fg19rlcky3n1y1ri61xyjp7534yzf8r102z9dw3zqg93f4kj20m"))))
     (build-system python-build-system)
      (propagated-inputs
-     `(("python-flake8" ,python-flake8-3.8)))
+     (list python-flake8-3.8))
     (native-inputs
-     `( ;; Tests
-       ("python-coverage" ,python-coverage)
-       ("python-ddt" ,python-ddt)
-       ("python-dnspython" ,python-dnspython)
-       ("python-fixtures" ,python-fixtures)
-       ("python-eventlet" ,python-eventlet)
-       ("python-mock" ,python-mock)
-       ("python-monotonic" ,python-monotonic)
-       ("python-subunit" ,python-subunit)
-       ("python-stestr" ,python-stestr)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list ;; Tests
+           python-coverage
+           python-ddt
+           python-dnspython
+           python-fixtures
+           python-eventlet
+           python-mock
+           python-monotonic
+           python-subunit
+           python-stestr
+           python-testscenarios
+           python-testtools))
     (home-page "https://github.com/openstack-dev/hacking")
     (synopsis "OpenStack hacking guideline enforcement")
     (description
@@ -186,14 +180,10 @@ guidelines}.")
            "0w58adwv7q9wzvmq9mlrk2asfk73myq9fpwy7mjkzsz3baa95zf5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-pbr" ,python-pbr)))
+     (list python-fixtures python-pbr))
     (native-inputs
-      `(("python-openstackdocstheme" ,python-openstackdocstheme)
-        ("python-sphinx" ,python-sphinx)
-        ("python-subunit" ,python-subunit)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testtools" ,python-testtools)))
+      (list python-openstackdocstheme python-sphinx python-subunit
+            python-testrepository python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis "Mock object framework for Python")
     (description
@@ -218,10 +208,9 @@ with mox as possible, but small enhancements have been made.")
      ;; turn depends on mox3 which depends on this package.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-dulwich" ,python-dulwich)
-       ("python-pbr" ,python-pbr)))
+     (list python-dulwich python-pbr))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://docs.openstack.org/openstackdocstheme/latest/")
     (synopsis "OpenStack Docs Theme")
     (description
@@ -244,15 +233,14 @@ to docs.openstack.org and developer.openstack.org.")
     (arguments
      `(#:tests? #f)) ;; Circular dependency with python-oslotest
     (propagated-inputs
-      `(("python-appdirs" ,python-appdirs)
-        ("python-pyyaml" ,python-pyyaml)))
+      (list python-appdirs python-pyyaml))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ("python-fixtures" ,python-fixtures)
-        ("python-mimeparse" ,python-mimeparse)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testscenarios" ,python-testscenarios)
-        ("python-testtools" ,python-testtools)))
+      (list python-pbr
+            python-fixtures
+            python-mimeparse
+            python-testrepository
+            python-testscenarios
+            python-testtools))
     (home-page "https://www.openstack.org/")
     (synopsis
       "OpenStack Client Configuration Library")
@@ -280,11 +268,9 @@ to docs.openstack.org and developer.openstack.org.")
      ;; when building the package. Skip the tests for now.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-subunit" ,python-subunit)))
+     (list python-subunit))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)
-       ("python-babel" ,python-babel)))
+     (list python-pbr python-testtools python-babel))
     (home-page "https://www.openstack.org/")
     (synopsis "Testr wrapper to provide functionality for OpenStack projects")
     (description
@@ -316,7 +302,7 @@ to docs.openstack.org and developer.openstack.org.")
                             "requirements.txt")
                (("pbr!=2.1.0,>=2.0.0") "pbr>=3.0.0")))))))
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://github.com/dreamhost/stevedore")
     (synopsis "Manage dynamic plugins for Python applications")
     (description
@@ -352,19 +338,16 @@ extensions.")
             (substitute* "tempest_lib/tests/cli/test_execute.py"
               (("/bin/ls") (which "ls"))))))))
     (propagated-inputs
-      `(("python-fixtures" ,python-fixtures)
-        ("python-httplib2" ,python-httplib2)
-        ("python-iso8601" ,python-iso8601)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-oslo.log" ,python-oslo.log)
-        ("python-paramiko" ,python-paramiko)
-        ("python-pbr" ,python-pbr)
-        ("python-six" ,python-six)))
+      (list python-fixtures
+            python-httplib2
+            python-iso8601
+            python-jsonschema
+            python-oslo.log
+            python-paramiko
+            python-pbr
+            python-six))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-mock" ,python-mock)
-        ("python-os-testr" ,python-os-testr)
-        ("python-oslotest" ,python-oslotest)))
+      (list python-babel python-mock python-os-testr python-oslotest))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack functional testing library")
     (description
@@ -390,25 +373,25 @@ common features used in Tempest.")
          "0ymf7jxbq29fifyvkwhfiys1qvljqfxdw8ajwzwaf3yiqidgpxqd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-debtcollector" ,python-debtcollector)
-       ("python-netaddr" ,python-netaddr)
-       ("python-oslo.i18n" ,python-oslo.i18n)
-       ("python-pbr" ,python-pbr)
-       ("python-rfc3986" ,python-rfc3986)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-debtcollector
+           python-netaddr
+           python-oslo.i18n
+           python-pbr
+           python-rfc3986
+           python-six
+           python-stevedore
+           python-pyyaml))
     (native-inputs
-     `(("python-bandit" ,python-bandit)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-openstackdocstheme" ,python-openstackdocstheme)
-       ("python-oslotest" ,python-oslotest)
-       ("python-reno" ,python-reno)
-       ("python-sphinx" ,python-sphinx)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list python-bandit
+           python-coverage
+           python-mock
+           python-openstackdocstheme
+           python-oslotest
+           python-reno
+           python-sphinx
+           python-testrepository
+           python-testscenarios
+           python-testtools))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo Configuration API")
     (description
@@ -437,15 +420,15 @@ common features used in Tempest.")
                          "hacking>=3.0.1"))
                       #t)))))
     (propagated-inputs
-     `(("python-debtcollector" ,python-debtcollector)))
+     (list python-debtcollector))
     (native-inputs
-     `(("python-bandit" ,python-bandit)
-       ("python-coverage" ,python-coverage)
-       ("python-fixtures" ,python-fixtures)
-       ("python-hacking" ,python-hacking)
-       ("python-oslotest" ,python-oslotest)
-       ("python-pbr" ,python-pbr)
-       ("python-stestr" ,python-stestr)))
+     (list python-bandit
+           python-coverage
+           python-fixtures
+           python-hacking
+           python-oslotest
+           python-pbr
+           python-stestr))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo context library")
     (description
@@ -467,15 +450,14 @@ pipeline and used by various modules such as logging.")
          "0kjcdw4bk3mi4vqmqwhhq053kxbbbj05si6nwxd1pzx33z067ky3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-six" ,python-six)))
+     (list python-babel python-six))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ;; Tests
-       ("python-mock" ,python-mock)
-       ("python-mox3" ,python-mox3)
-       ("python-oslotest" ,python-oslotest)
-       ("python-testscenarios" ,python-testscenarios)))
+     (list python-pbr
+           ;; Tests
+           python-mock
+           python-mox3
+           python-oslotest
+           python-testscenarios))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo internationalization (i18n) library")
     (description
@@ -497,23 +479,20 @@ in an application or library.")
           "0h7hplf1h8k24v75m3mq1jlrl74x5ynyr4hwgffsg5campxnza4x"))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-dateutil" ,python-dateutil)
-     ("python-debtcollector" ,python-debtcollector)
-     ("python-monotonic" ,python-monotonic)
-     ("python-oslo.config" ,python-oslo.config)
-     ("python-oslo.context" ,python-oslo.context)
-     ("python-oslo.i18n" ,python-oslo.i18n)
-     ("python-oslo.utils" ,python-oslo.utils)
-     ("python-oslo.serialization" ,python-oslo.serialization)
-     ("python-pbr" ,python-pbr)
-     ("python-pyinotify" ,python-pyinotify)
-     ("python-six" ,python-six)))
+   (list python-dateutil
+         python-debtcollector
+         python-monotonic
+         python-oslo.config
+         python-oslo.context
+         python-oslo.i18n
+         python-oslo.utils
+         python-oslo.serialization
+         python-pbr
+         python-pyinotify
+         python-six))
   (native-inputs
-    `(("python-mock" ,python-mock)
-      ("python-oslotest" ,python-oslotest)
-      ("python-subunit" ,python-subunit)
-      ("python-testrepository" ,python-testrepository)
-      ("python-testtools" ,python-testtools)))
+    (list python-mock python-oslotest python-subunit
+          python-testrepository python-testtools))
   (home-page "https://launchpad.net/oslo")
   (synopsis "Python logging library of the Oslo project")
   (description
@@ -535,17 +514,12 @@ handlers and support for context specific logging (like resource id’s etc).")
          "08bxkp98c617y58x630xq44iiffm7f0f3cwh6zbnlkgq0zgh7jk1"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-msgpack" ,python-msgpack)
-        ("python-netaddr" ,python-netaddr)
-        ("python-oslo.utils" ,python-oslo.utils)
-        ("python-six" ,python-six)
-        ("python-pytz" ,python-pytz)))
+      (list python-msgpack python-netaddr python-oslo.utils python-six
+            python-pytz))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-mock" ,python-mock)
-        ("python-oslo.i18n" ,python-oslo.i18n)
-        ("python-oslotest" ,python-oslotest)))
+      (list python-pbr
+            ;; Tests.
+            python-mock python-oslo.i18n python-oslotest))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo serialization library")
     (description
@@ -572,10 +546,7 @@ in transmittable and storable formats, such as JSON and MessagePack.")
              ;; reno expects a git repo
              (invoke "git" "init"))))))
     (propagated-inputs
-      `(("python-dulwich" ,python-dulwich)
-        ("python-pbr" ,python-pbr)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-six" ,python-six)))
+      (list python-dulwich python-pbr python-pyyaml python-six))
     (native-inputs
       `(("python-testtools" ,python-testtools)
         ("python-testscenarios" ,python-testscenarios)
@@ -613,13 +584,10 @@ and building documentation from them.")
                 "hacking!=0.13.0,>=0.12.0"))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-hacking" ,python-hacking)
-       ("python-openstackdocstheme" ,python-openstackdocstheme)
-       ("python-pbr" ,python-pbr)
-       ("python-reno" ,python-reno)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-hacking python-openstackdocstheme python-pbr
+           python-reno python-sphinx))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack sphinx extensions and theme")
     (description "This package provides themes and extensions for Sphinx
@@ -642,10 +610,7 @@ documentation from the OpenStack project.")
      ;; The tests are disabled to avoid a circular dependency with oslo.config.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-six" ,python-six)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-six python-subunit python-testtools))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo test framework")
     (description "The Oslo Test framework provides common fixtures, support
@@ -665,27 +630,27 @@ for debugging, and better support for mocking results.")
            "1ipjcgg9z697wmibhcbg5lqpk5gafakdx4qkff3w255zr0mvw04r"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-debtcollector" ,python-debtcollector)
-        ("python-oslo.i18n" ,python-oslo.i18n)
-        ("python-iso8601" ,python-iso8601)
-        ("python-monotonic" ,python-monotonic)
-        ("python-netaddr" ,python-netaddr)
-        ("python-netifaces" ,python-netifaces)
-        ("python-pyparsing" ,python-pyparsing)
-        ("python-pytz" ,python-pytz)
-        ("python-six" ,python-six)))
+      (list python-debtcollector
+            python-oslo.i18n
+            python-iso8601
+            python-monotonic
+            python-netaddr
+            python-netifaces
+            python-pyparsing
+            python-pytz
+            python-six))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-bandit" ,python-bandit)
-        ("python-ddt" ,python-ddt)
-        ("python-fixtures" ,python-fixtures)
-        ("python-oslo.config" ,python-oslo.config)
-        ("python-oslotest" ,python-oslotest)
-        ("python-mock" ,python-mock)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testscenarios" ,python-testscenarios)
-        ("python-testtools" ,python-testtools)))
+      (list python-pbr
+            ;; Tests.
+            python-bandit
+            python-ddt
+            python-fixtures
+            python-oslo.config
+            python-oslotest
+            python-mock
+            python-testrepository
+            python-testscenarios
+            python-testtools))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo utility library")
     (description
@@ -731,19 +696,19 @@ handling.")
        ("python-testtools" ,python-testtools)
        ("python-webob" ,python-webob)))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-debtcollector" ,python-debtcollector)
-       ("python-iso8601" ,python-iso8601)
-       ("python-netaddr" ,python-netaddr)
-       ("python-oslo.config" ,python-oslo.config)
-       ("python-oslo.i18n" ,python-oslo.i18n)
-       ("python-oslo.serialization" ,python-oslo.serialization)
-       ("python-oslo.utils" ,python-oslo.utils)
-       ("python-pbr" ,python-pbr)
-       ("python-prettytable" ,python-prettytable)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-babel
+           python-debtcollector
+           python-iso8601
+           python-netaddr
+           python-oslo.config
+           python-oslo.i18n
+           python-oslo.serialization
+           python-oslo.utils
+           python-pbr
+           python-prettytable
+           python-requests
+           python-six
+           python-stevedore))
     (home-page "https://www.openstack.org/")
     (synopsis "Client Library for OpenStack Identity")
     (description
@@ -768,20 +733,19 @@ LDAP.")
           "1j33l4z9vqh0scfncl4fxg01zr1hgqxhhai6gvcih1gccqm4nd7p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-sphinx" ,python-sphinx)
-       ;; The folloing packages are needed for the tests.
-       ("python-coverage" ,python-coverage)
-       ("python-discover" ,python-discover)
-       ("python-hacking" ,python-hacking)
-       ("python-mock" ,python-mock)
-       ("python-oslosphinx" ,python-oslosphinx)
-       ("python-keystoneclient" ,python-keystoneclient)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list python-pbr
+           python-sphinx
+           ;; The folloing packages are needed for the tests.
+           python-coverage
+           python-discover
+           python-hacking
+           python-mock
+           python-oslosphinx
+           python-keystoneclient
+           python-testrepository
+           python-testtools))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page "https://www.openstack.org/")
     (synopsis "OpenStack Object Storage API Client Library")
     (description
@@ -823,12 +787,11 @@ permanence.")
                          (list git openssh)))))
              #t)))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (inputs
-     `(("git" ,git)
-       ("openssh" ,openssh)))
+     (list git openssh))
     (home-page "https://docs.openstack.org/infra/git-review/")
     (synopsis "Command-line tool for Gerrit")
     (description
diff --git a/gnu/packages/orange.scm b/gnu/packages/orange.scm
index bedbad7e60..efdafe3d45 100644
--- a/gnu/packages/orange.scm
+++ b/gnu/packages/orange.scm
@@ -54,14 +54,14 @@
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-cachecontrol" ,python-cachecontrol)
-       ("python-commonmark" ,python-commonmark)
-       ("python-dictdiffer" ,python-dictdiffer)
-       ("python-docutils" ,python-docutils)
-       ("python-pyqt" ,python-pyqt)
-       ("python-qasync" ,python-qasync)
-       ("python-requests" ,python-requests)))
+     (list python-anyqt
+           python-cachecontrol
+           python-commonmark
+           python-dictdiffer
+           python-docutils
+           python-pyqt
+           python-qasync
+           python-requests))
     (home-page "https://github.com/biolab/orange-canvas-core")
     (synopsis "Core component of Orange Canvas")
     (description
@@ -93,11 +93,8 @@ data-mining application.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-orange-canvas-core"
-        ,python-orange-canvas-core)
-       ("python-pyqtgraph" ,python-pyqtgraph)))
+     (list python-anyqt python-matplotlib python-orange-canvas-core
+           python-pyqtgraph))
     (home-page "https://github.com/biolab/orange-widget-base")
     (synopsis "Base Widget for Orange Canvas")
     (description
@@ -146,40 +143,38 @@ GUI based workflow.  It is primarily used in the Orange framework.")
                                          "/lib/qt5/plugins/")))))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("python-anyqt" ,python-anyqt)
-       ("python-baycomp" ,python-baycomp)
-       ("python-bottleneck" ,python-bottleneck)
-       ("python-chardet" ,python-chardet)
-       ("python-httpx" ,python-httpx)
-       ("python-joblib" ,python-joblib)
-       ("python-keyring" ,python-keyring)
-       ("python-keyrings.alt" ,python-keyrings.alt)
-       ("python-louvain" ,python-louvain)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-opentsne" ,python-opentsne)
-       ("python-orange-canvas-core"
-        ,python-orange-canvas-core)
-       ("python-orange-widget-base"
-        ,python-orange-widget-base)
-       ("python-pandas" ,python-pandas)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyqtgraph" ,python-pyqtgraph)
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-serverfiles" ,python-serverfiles)
-       ("python-xlrd" ,python-xlrd)
-       ("python-xlsxwriter" ,python-xlsxwriter)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("xdg-utils" ,xdg-utils)))
+     (list python-anyqt
+           python-baycomp
+           python-bottleneck
+           python-chardet
+           python-httpx
+           python-joblib
+           python-keyring
+           python-keyrings.alt
+           python-louvain
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-openpyxl
+           python-opentsne
+           python-orange-canvas-core
+           python-orange-widget-base
+           python-pandas
+           python-pyqt
+           python-pyqtgraph
+           python-pyqtwebengine
+           python-pyyaml
+           python-requests
+           python-scikit-learn
+           python-scipy
+           python-serverfiles
+           python-xlrd
+           python-xlsxwriter
+           qtbase-5
+           qtsvg
+           xdg-utils))
     (home-page "https://orangedatamining.com/")
     (synopsis "Component-based data mining framework")
     (description
@@ -199,7 +194,7 @@ data analysis, data mining and data visualization.")
         (base32 "1qgbzgnaxj4wsp2rdas53qxsh0j7xpibq25w6lviwyaqwwrgq42y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/biolab/serverfiles")
     (synopsis "Utility to access files on a HTTP server and store them locally")
     (description
diff --git a/gnu/packages/orpheus.scm b/gnu/packages/orpheus.scm
index d981be279c..7a69d99954 100644
--- a/gnu/packages/orpheus.scm
+++ b/gnu/packages/orpheus.scm
@@ -45,13 +45,13 @@
       (patches (search-patches "orpheus-cast-errors-and-includes.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libvorbis" ,libvorbis)
-       ("vorbis-tools" ,vorbis-tools)
-       ("mpg321" ,mpg321)
-       ;; TODO: add ghttp
-       ("libxml2" ,libxml2)
-       ("which" ,which)))
+     (list ncurses
+           libvorbis
+           vorbis-tools
+           mpg321
+           ;; TODO: add ghttp
+           libxml2
+           which))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -76,12 +76,9 @@
              ;; To avoid propagating the mpg321 and vorbis-tools inputs, we can
              ;; make the orpheus application execute the needed players from the
              ;; store.
-             (let ((ogg123 (string-append (assoc-ref inputs "vorbis-tools")
-                                          "/bin/ogg123"))
-                   (mpg321 (string-append (assoc-ref inputs "mpg321")
-                                          "/bin/mpg321"))
-                   (which  (string-append (assoc-ref inputs "which")
-                                          "/bin/which")))
+             (let ((ogg123 (search-input-file inputs "/bin/ogg123"))
+                   (mpg321 (search-input-file inputs "/bin/mpg321"))
+                   (which  (search-input-file inputs "/bin/which")))
                (substitute* "src/orpheusconf.cc"
                  (("ogg123") ogg123)
                  (("which")  which)
diff --git a/gnu/packages/ots.scm b/gnu/packages/ots.scm
index 73dd5e4832..e527bf277e 100644
--- a/gnu/packages/ots.scm
+++ b/gnu/packages/ots.scm
@@ -66,10 +66,7 @@
                (("shrext_cmds") "shrext"))
              #t)))))
     (inputs
-      `(("glib" ,glib)
-        ("popt" ,popt)
-        ("libxml2" ,libxml2)
-        ("zlib" ,zlib)))
+      (list glib popt libxml2 zlib))
     (native-inputs
       `(("glib:bin" ,glib "bin")
         ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 6a51e7eb9b..081ff92ec5 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -19,6 +19,7 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages package-management)
+  #:use-module (gnu artwork)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages attr)
@@ -69,6 +71,7 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages hurd)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages less)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages linux)
@@ -84,6 +87,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -104,6 +108,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
@@ -480,15 +485,12 @@ the Nix package manager.")
 
     ;; Use a minimum set of dependencies.
     (native-inputs
-     (fold alist-delete (package-native-inputs guix)
-           '("po4a" "graphviz" "help2man")))
+     (modify-inputs (package-native-inputs guix)
+       (delete "po4a" "graphviz" "help2man")))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("guile-git" ,guile-git)
-       ("guile-json" ,guile-json-3)
-       ("guile-gcrypt" ,guile-gcrypt)
-       ,@(fold alist-delete (package-inputs guix)
-               '("boot-guile" "boot-guile/i686" "util-linux"))))
+     (modify-inputs (package-inputs guix)
+       (delete "boot-guile" "boot-guile/i686" "util-linux")
+       (prepend gnutls guile-git guile-json-3 guile-gcrypt)))
 
     (propagated-inputs '())
 
@@ -537,13 +539,11 @@ the Nix package manager.")
      (inherit guix)
      (name "guix-minimal")
      (native-inputs
-      (fold alist-delete
-            (package-native-inputs guix)
-            '("guile-ssh")))
+      (modify-inputs (package-native-inputs guix)
+        (delete "guile-ssh")))
      (propagated-inputs
-      (fold alist-delete
-            (package-propagated-inputs guix)
-            '("guile-ssh"))))))
+      (modify-inputs (package-propagated-inputs guix)
+        (delete "guile-ssh"))))))
 
 (define (source-file? file stat)
   "Return true if FILE is likely a source file, false if it is a typical
@@ -585,6 +585,64 @@ out) and returning a package that uses that as its 'source'."
                                 #:recursive? #t
                                 #:select? (force select?))))))))
 
+(define-public guix-icons
+  (package
+    (inherit guix)
+    (name "guix-icons")
+    (version "0.1")
+    (source %artwork-repository)
+    (build-system trivial-build-system)
+    (native-inputs
+     (list imagemagick))
+    (inputs
+     '())
+    (arguments
+     `(#:modules ((guix build utils)
+                  (gnu build svg))
+       #:builder
+       ,(with-extensions (list guile-rsvg guile-cairo)
+          #~(begin
+              (use-modules (guix build utils)
+                           (gnu build svg))
+              (let* ((logo (string-append #$source "/logo/Guix.svg"))
+                     (logo-white
+                      (string-append #$source
+                                     "/logo/Guix-horizontal-white.svg"))
+                     (theme "hicolor")
+                     (category "apps")
+                     (sizes '(16 24 32 48 64 72 96 128 256 512 1024))
+                     (icons
+                      (string-append #$output "/share/icons/" theme))
+                     (scalable-dir
+                      (string-append icons "/scalable/" category)))
+                (setenv "XDG_CACHE_HOME" (getcwd))
+
+                ;; Create the scalable icon files.
+                (mkdir-p scalable-dir)
+                (copy-file logo
+                           (string-append scalable-dir "/guix-icon.svg"))
+                (copy-file logo-white
+                           (string-append scalable-dir
+                                          "/guix-white-icon.svg"))
+
+                ;; Create the fixed dimensions icon files.
+                (for-each
+                 (lambda (size)
+                   (let* ((dimension
+                           (format #f "~ax~a" size size))
+                          (file
+                           (string-append icons "/" dimension "/" category
+                                          "/guix-icon.png")))
+                     (mkdir-p (dirname file))
+                     (svg->png logo file
+                               #:width size
+                               #:height size)))
+                 sizes))))))
+    (synopsis "GNU Guix icons")
+    (description "This package contains GNU Guix icons organized according to
+the Icon Theme Specification.  They can be used by applications querying the
+GTK icon cache for instance.")))
+
 
 ;;;
 ;;; Other tools.
@@ -616,18 +674,18 @@ out) and returning a package that uses that as its 'source'."
                       (string-append "sysconfdir=" etc)
                       (string-append "profiledir=" etc "/profile.d")
                       make-flags)))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("boost" ,boost)
-              ("brotli" ,brotli)
-              ("bzip2" ,bzip2)
-              ("curl" ,curl)
-              ("editline" ,editline)
-              ("libgc" ,libgc)
-              ("libseccomp" ,libseccomp)
-              ("libsodium" ,libsodium)
-              ("openssl" ,openssl)
-              ("sqlite" ,sqlite)
-              ("xz" ,xz)))
+    (native-inputs (list pkg-config))
+    (inputs (list boost
+                  brotli
+                  bzip2
+                  curl
+                  editline
+                  libgc
+                  libseccomp
+                  libsodium
+                  openssl
+                  sqlite
+                  xz))
     (home-page "https://nixos.org/nix/")
     (synopsis "The Nix package manager")
     (description
@@ -652,12 +710,10 @@ sub-directory.")
                 "0jrxy12ywn7smdzdnvwzjw77l6knx6jkj2rckgykg1dpf6bdkm89"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (native-inputs
-     `(("perl-test-simple" ,perl-test-simple)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-io-stringy" ,perl-io-stringy)))
+     (list perl-test-simple perl-test-output perl-capture-tiny
+           perl-io-stringy))
     (home-page "https://www.gnu.org/software/stow/")
     (synopsis "Managing installed software packages")
     (description
@@ -713,20 +769,20 @@ features of Stow with some extensions.")
                                                nss "/lib/nss"))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python" ,python)
-       ("xz" ,xz)
-       ("bdb" ,bdb)
-       ("popt" ,popt)
-       ("nss" ,nss)
-       ("nspr" ,nspr)
-       ("libarchive" ,libarchive)
-       ("libgcrypt" ,libgcrypt)
-       ("file" ,file)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)
-       ("cpio" ,cpio)))
+     (list python
+           xz
+           bdb
+           popt
+           nss
+           nspr
+           libarchive
+           libgcrypt
+           file
+           bzip2
+           zlib
+           cpio))
     (home-page "https://rpm.org/")
     (synopsis "The RPM Package Manager")
     (description
@@ -756,17 +812,14 @@ transactions from C or Python.")
          "1vyk0g0gci4z9psisb8h50zi3j1nwfdg1jw3j76cxv0brln0v3fw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-clyent" ,python-clyent)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-clyent python-nbformat python-pyyaml python-requests))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-dateutil" ,python-dateutil)
-       ("python-freezegun" ,python-freezegun)
-       ("python-mock" ,python-mock)
-       ("python-pillow" ,python-pillow)
-       ("python-pytz" ,python-pytz)))
+     (list python-coverage
+           python-dateutil
+           python-freezegun
+           python-mock
+           python-pillow
+           python-pytz))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -822,16 +875,12 @@ environments.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "tests"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-six python-tqdm))
     (inputs
-     `(("libarchive" ,libarchive)))
+     (list libarchive))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-mock" ,python-mock)))
+     (list python-cython python-pytest python-pytest-cov
+           python-pytest-mock python-mock))
     (home-page "https://conda.io")
     (synopsis "Create and extract conda packages of various formats")
     (description
@@ -951,22 +1000,22 @@ extracting, creating, and converting between formats.")
                                     "/bin/conda")
                      "init"))))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-anaconda-client" ,python-anaconda-client)
-       ("python-conda-package-handling" ,python-conda-package-handling)
-       ("python-cytoolz" ,python-cytoolz)
-       ("python-pycosat" ,python-pycosat)
-       ("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-responses" ,python-responses)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-tqdm" ,python-tqdm)
-       ;; XXX: This is dragged in by libarchive and is needed at runtime.
-       ("zstd" ,zstd)))
+     (list python-anaconda-client
+           python-conda-package-handling
+           python-cytoolz
+           python-pycosat
+           python-pytest
+           python-pyyaml
+           python-requests
+           python-responses
+           python-ruamel.yaml
+           python-tqdm
+           ;; XXX: This is dragged in by libarchive and is needed at runtime.
+           zstd))
     (native-inputs
-     `(("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest-timeout))
     (home-page "https://github.com/conda/conda")
     (synopsis "Cross-platform, OS-agnostic, system-level binary package manager")
     (description
@@ -980,7 +1029,7 @@ written entirely in Python.")
 (define-public conan
   (package
     (name "conan")
-    (version "1.40.2")
+    (version "1.42.0")
     (source
      (origin
        (method git-fetch)               ;no tests in PyPI archive
@@ -990,7 +1039,7 @@ written entirely in Python.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0hp8qs54l4cw043f1kycjwgdr7f388lsyxqcbzfaayr6xg1d3dw0"))))
+         "153npvj81m1c33gfcv2nry7xhyikxnhjns7lvs525f1x20ck6asg"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -999,7 +1048,9 @@ written entirely in Python.")
            (lambda _
              (substitute* "conans/requirements.txt"
                (("node-semver==0.6.1")
-                "node-semver>=0.6.1"))))
+                "node-semver>=0.6.1")
+               (("Jinja2>=2.9, <3")
+                "Jinja2>=2.9"))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((coreutils (assoc-ref inputs "coreutils")))
@@ -1082,31 +1133,31 @@ written entirely in Python.")
                              "and not settings_as_a_dict_conanfile ")
                             "")))))))))
     (propagated-inputs
-     `(("python-bottle" ,python-bottle)
-       ("python-colorama" ,python-colorama)
-       ("python-dateutil" ,python-dateutil)
-       ("python-distro" ,python-distro)
-       ("python-fasteners" ,python-fasteners)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-node-semver" ,python-node-semver)
-       ("python-patch-ng" ,python-patch-ng)
-       ("python-pluginbase" ,python-pluginbase)
-       ("python-pygments" ,python-pygments)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-tqdm" ,python-tqdm)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-bottle
+           python-colorama
+           python-dateutil
+           python-distro
+           python-fasteners
+           python-future
+           python-jinja2
+           python-node-semver
+           python-patch-ng
+           python-pluginbase
+           python-pygments
+           python-pyjwt
+           python-pyyaml
+           python-requests
+           python-six
+           python-tqdm
+           python-urllib3))
     (inputs
-     `(("coreutils" ,coreutils)))       ;for printenv
+     (list coreutils))       ;for printenv
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
-       ("cmake" ,cmake)                 ;requires cmake >= 3.17
+       ("cmake" ,cmake)
        ("git" ,git-minimal)
-       ("meson" ,meson-0.55)
+       ("meson" ,meson)
        ("ninja",ninja)
        ("pkg-config" ,pkg-config)
        ("python-bottle" ,python-bottle)
@@ -1151,11 +1202,7 @@ allow for great power and flexibility.
        #:make-flags
        '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("graphviz" ,graphviz)))
+     (list autoconf automake pkg-config texinfo graphviz))
     (inputs
      (let ((p (package-input-rewriting
                `((,guile-3.0 . ,guile-3.0-latest))
@@ -1373,21 +1420,18 @@ outputs of those builds.")
                                  "guix-jupyter-kernel.scm")))
                #t))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-
-       ;; For testing.
-       ("jupyter" ,jupyter)
-       ("python-ipython" ,python-ipython)
-       ("python-ipykernel" ,python-ipykernel)))
+     (list autoconf
+           automake
+           pkg-config
+           ;; For testing.
+           jupyter
+           python-ipython
+           python-ipykernel))
     (inputs
      `(("guix" ,guix)
        ("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))))
     (propagated-inputs
-     `(("guile-json" ,guile-json-4)
-       ("guile-simple-zmq" ,guile-simple-zmq)
-       ("guile-gcrypt" ,guile-gcrypt)))
+     (list guile-json-4 guile-simple-zmq guile-gcrypt))
     (synopsis "Guix kernel for Jupyter")
     (description
      "Guix-Jupyter is a Jupyter kernel.  It allows you to annotate notebooks
@@ -1415,8 +1459,7 @@ in an isolated environment, in separate namespaces.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
-     `(("glib" ,glib)
-       ("zlib" ,zlib)))
+     (list glib zlib))
     (arguments
      `(#:configure-flags
        ;; XXX This ‘documentation’ is for developers, and fails informatively:
@@ -1444,14 +1487,10 @@ Microsoft cabinet (.@dfn{CAB}) files.")
                 "1skq17qr2ic4qr3779j49byfm8rncwbsq9rj1a33ncn2m7isdwdv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list bison pkg-config))
     (inputs
-     `(("gcab" ,gcab)
-       ("glib" ,glib)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)
-       ("uuid" ,util-linux "lib")))
+     (list gcab glib libgsf libxml2
+           `(,util-linux "lib")))
     (home-page "https://wiki.gnome.org/msitools")
     (synopsis "Windows Installer file manipulation tool")
     (description
@@ -1463,7 +1502,7 @@ for packaging and deployment of cross-compiled Windows applications.")
 (define-public libostree
   (package
     (name "libostree")
-    (version "2021.3")
+    (version "2021.6")
     (source
      (origin
        (method url-fetch)
@@ -1471,7 +1510,7 @@ for packaging and deployment of cross-compiled Windows applications.")
              "https://github.com/ostreedev/ostree/releases/download/v"
              (version-major+minor version) "/libostree-" version ".tar.xz"))
        (sha256
-        (base32 "1cyhr3s7xsgnsais5m4cjwdwcq46naf25r1k042c4n1y1jgs798g"))))
+        (base32 "0cgmnjf4mr4wn4fliq6ncs0q9qwblrlizjfhx57p7m332g5k21p8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1503,7 +1542,7 @@ for packaging and deployment of cross-compiled Windows applications.")
        ("glib" ,glib)
        ("gpgme" ,gpgme)
        ("libarchive" ,libarchive)
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2) ; needs libsoup-2.4
        ("util-linux" ,util-linux)))
     (home-page "https://ostree.readthedocs.io/en/latest/")
     (synopsis "Operating system and container binary deployment and upgrades")
@@ -1548,8 +1587,8 @@ the boot loader configuration.")
         (add-after 'unpack 'fix-tests
           (lambda* (#:key inputs #:allow-other-keys)
             (copy-recursively
-             (string-append (assoc-ref inputs "glibc-utf8-locales")
-                            "/lib/locale/") "/tmp/locale")
+             (search-input-directory inputs "lib/locale")
+             "/tmp/locale")
             (for-each make-file-writable (find-files "/tmp"))
             (substitute* "tests/make-test-runtime.sh"
               (("cp `which.*") "echo guix\n")
@@ -1590,10 +1629,8 @@ cp -r /tmp/locale/*/en_US.*")))
       ("python-pyparsing" ,python-pyparsing)
       ("socat" ,socat)
       ("which" ,which)))
-   (propagated-inputs `(("glib-networking" ,glib-networking)
-                        ("gnupg" ,gnupg)
-                        ("gsettings-desktop-schemas"
-                         ,gsettings-desktop-schemas)))
+   (propagated-inputs (list glib-networking gnupg
+                            gsettings-desktop-schemas))
    (inputs
     `(("appstream-glib" ,appstream-glib)
       ("bubblewrap" ,bubblewrap)
@@ -1605,7 +1642,7 @@ cp -r /tmp/locale/*/en_US.*")))
       ("libarchive" ,libarchive)
       ("libostree" ,libostree)
       ("libseccomp" ,libseccomp)
-      ("libsoup" ,libsoup)
+      ("libsoup" ,libsoup-minimal-2)
       ("libxau" ,libxau)
       ("libxml2" ,libxml2)
       ("p11-kit-next" ,p11-kit-next)
@@ -1652,13 +1689,9 @@ sandboxed desktop applications on GNU/Linux.")
                           `("LD_LIBRARY_PATH" ":" prefix (,(string-append curl "/lib"))))
                         #t))))))
     (native-inputs
-     `(("which" ,which)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list which autoconf automake pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("curl" ,curl)))
+     (list guile-3.0 curl))
     (home-page "https://akkuscm.org/")
     (synopsis "Language package manager for Scheme")
     (description
@@ -1764,15 +1797,9 @@ from R7RS, which allows most R7RS code to run on R6RS implementations.")
                     "testsuite/install.00-init/005-init_ts.exp"
                     "modulecmd-test.tcl"))))))))
     (native-inputs
-      `(("dejagnu" ,dejagnu)
-        ("autoconf" ,autoconf)
-        ("which" ,which)))
+      (list dejagnu autoconf which))
     (inputs
-      `(("tcl" ,tcl)
-        ("less" ,less)
-        ("procps" ,procps)
-        ("coreutils" ,coreutils)
-        ("python" ,python-3)))
+      (list tcl less procps coreutils python-3))
     (home-page "http://modules.sourceforge.net/")
     (synopsis "Shell environment variables and aliases management")
     (description "Modules simplify shell initialization and let users
diff --git a/gnu/packages/pantheon.scm b/gnu/packages/pantheon.scm
index 6e78f45e14..87d292d2c7 100644
--- a/gnu/packages/pantheon.scm
+++ b/gnu/packages/pantheon.scm
@@ -115,7 +115,7 @@ desktop.")
 (define-public sideload
   (package
     (name "sideload")
-    (version "1.1.1")
+    (version "6.0.2")
     (source
      (origin
        (method git-fetch)
@@ -125,27 +125,22 @@ desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0mlc3nm2navzxm8k1rwpbw4w6mv30lmhqybm8jqxd4v8x7my73vq"))))
+         "0abpcawmmv5mgzk2i5n9rlairmjr2v9rg9b8c9g7xa085s496bi9"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:configure-flags (list (string-append "-Dflatpak="
-                                              (assoc-ref %build-inputs "flatpak")
-                                              "/include"))
        #:phases
        (modify-phases %standard-phases
          (add-before 'install 'set-environment-variables
            (lambda _
              ;; Disable compiling schemas and updating desktop databases
-             (setenv "DESTDIR" "/")
-             #t))
+             (setenv "DESTDIR" "/")))
          (add-after 'install 'install-symlinks
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/io.elementary.sideload"))
                     (link (string-append out "/bin/sideload")))
-               (symlink bin link)
-               #t))))))
+               (symlink bin link)))))))
     (inputs
      `(("flatpak" ,flatpak)
        ("glib" ,glib)
@@ -153,13 +148,13 @@ desktop.")
        ("gtk" ,gtk+)
        ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("libgee" ,libgee)
+       ("libhandy" ,libhandy)
        ("libostree" ,libostree)
        ("libxml2" ,libxml2)))
     (propagated-inputs
      ;; Sideload needs these in the environment to fetch data securely from
      ;; Flatpak remotes.
-     `(("gnupg" ,gnupg)
-       ("gpgme" ,gpgme)))
+     (list gnupg gpgme))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 113e04c06f..a31d64f66b 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -99,8 +99,7 @@
                      "echo"
                      ":::" "1" "2" "3"))))))
     (inputs
-     `(("perl" ,perl)
-       ("procps" ,procps)))
+     (list perl procps))
     (home-page "https://www.gnu.org/software/parallel/")
     (synopsis "Build and execute command lines in parallel")
     (description
@@ -152,8 +151,7 @@ execution is also possible.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ;; No tests
     (native-inputs
-     `(("flex" ,flex)
-       ("which" ,which)))
+     (list flex which))
     (home-page "http://www.maier-komor.de/xjobs.html")
     (properties `((release-monitoring-url . ,home-page)))
     (synopsis
@@ -199,13 +197,13 @@ when jobs finish.")
                 #t))))
    ;; FIXME: More optional inputs could be added,
    ;; in particular mysql and gtk+.
-   (inputs `(("freeipmi" ,freeipmi)
-             ("hwloc" ,hwloc-2 "lib")
-             ("json-c" ,json-c)
-             ("linux-pam" , linux-pam)
-             ("munge" ,munge)
-             ("numactl" ,numactl)
-             ("readline" ,readline)))
+   (inputs (list freeipmi
+                 `(,hwloc-2 "lib")
+                 json-c
+                 linux-pam
+                 munge
+                 numactl
+                 readline))
    (native-inputs
     `(("autoconf" ,autoconf)
       ("expect" ,expect)
@@ -319,9 +317,9 @@ by managing a queue of pending work.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; The tests require "bats".
     (inputs
-     `(("slurm" ,slurm)))
+     (list slurm))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://github.com/natefoo/slurm-drmaa")
     (synopsis "Distributed resource management application API for SLURM")
     (description
@@ -364,10 +362,9 @@ cluster/resource management systems.")
                                             value "\n")))
                           #t))))))
       (inputs
-       `(("slurm" ,slurm)))
+       (list slurm))
       (propagated-inputs
-       `(("python-ipython" ,python-ipython)
-         ("python-pandas" ,python-pandas)))
+       (list python-ipython python-pandas))
       (synopsis "Control the SLURM batch scheduler from Jupyter Notebook")
       (description
        "This package implements Jupyter/IPython
@@ -401,9 +398,7 @@ command---e.g., @code{%salloc}, @code{%sbatch}, etc.")
       (build-system cmake-build-system)
       (arguments '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)
-         ("fxdiv" ,fxdiv)))
+       (list googletest googlebenchmark fxdiv))
       (synopsis "Efficient thread pool implementation")
       (description
        "The pthreadpool library implements an efficient and portable thread
@@ -432,8 +427,7 @@ features.")
       (build-system cmake-build-system)
       (arguments '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (inputs
-       `(("googletest" ,googletest)
-         ("googlebenchmark" ,googlebenchmark)))
+       (list googletest googlebenchmark))
       (synopsis "C/C++ library to obtain information about the CPU")
       (description
        "The cpuinfo library provides a C/C++ and a command-line interface to
diff --git a/gnu/packages/pascal.scm b/gnu/packages/pascal.scm
index 0fdbecf05c..af7857f084 100644
--- a/gnu/packages/pascal.scm
+++ b/gnu/packages/pascal.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2017 Kei Kebreau <address@hidden>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,28 +36,32 @@
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match))
 
-(define fpc-bootstrap-i386-3.0.4
+(define %fpc-version "3.2.2")
+(define %fpc-release-date "2021/05/19")
+
+;;; FIXME: Bootstrap properly; these are prebuilt binaries.
+(define fpc-bootstrap-i386
   (origin
     (method url-fetch)
-    (uri
-     "mirror://sourceforge/freepascal/Linux/3.0.4/fpc-3.0.4.i386-linux.tar")
+    (uri (string-append "mirror://sourceforge/freepascal/Linux/"
+                        %fpc-version "/fpc-" %fpc-version ".i386-linux.tar"))
     (sha256
      (base32
-      "05xfgxa6vb0y2ryfsgn21m2kwaxhci6l2zxa3akvlnqminjsjvda"))))
+      "0n4r85dsr86zlk7r4hbd4nj14sda6rwgdgzxg4gj4q981fn80agn"))))
 
-(define fpc-bootstrap-x86_64-3.0.4
+(define fpc-bootstrap-x86_64
   (origin
     (method url-fetch)
-    (uri
-     "mirror://sourceforge/freepascal/Linux/3.0.4/fpc-3.0.4.x86_64-linux.tar")
+    (uri (string-append "mirror://sourceforge/freepascal/Linux/"
+                        %fpc-version "/fpc-" %fpc-version ".x86_64-linux.tar"))
     (sha256
      (base32
-      "0xzxh689iyjfmkqkhcqg9plrjmdx82hbyywyyc7jm0n92fpmp5ky"))))
+      "10qywczzz4qlcmmzxb7axnvwniq76ky130vd8iv6ljskll4c7njs"))))
 
 (define-public fpc
   (package
     (name "fpc")
-    (version "3.2.2")                   ; Update release date below!
+    (version %fpc-version)
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/freepascal/Source/"
@@ -76,26 +82,22 @@
                   (mkdir-p "install")
                   (rename-file "install-doc" "install/doc")
                   (rename-file "install-man" "install/man")
-                  (delete-file "fpcsrc/tests/utils/dosbox/exitcode.exe")
-                  #t))))
+                  (delete-file "fpcsrc/tests/utils/dosbox/exitcode.exe")))))
     (build-system gnu-build-system)
     (supported-systems '("i686-linux" "x86_64-linux"))
     (inputs
-     `(("expat" ,expat)
-       ("glibc" ,glibc)
-       ("ld-wrapper" ,ld-wrapper)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list expat glibc ld-wrapper ncurses zlib))
     (native-inputs
      ;; FPC is built with FPC, so we need bootstrap binaries.
-     `(("fpc-binary"
-        ,(match (or (%current-target-system)
-                    (%current-system))
-          ("i686-linux" fpc-bootstrap-i386-3.0.4)
-          ;("powerpc64le-linux" fpc-bootstrap-ppc64le-3.0.4)
-          ;("powerpc-linux" fpc-bootstrap-ppc-3.0.4)
-          ("x86_64-linux" fpc-bootstrap-x86_64-3.0.4)
-          (_ fpc-bootstrap-x86_64-3.0.4)))))
+     `(("fpc-binary" ,(match (or (%current-target-system)
+                                 (%current-system))
+                       ("i686-linux" fpc-bootstrap-i386)
+                       ;;("powerpc64le-linux" fpc-bootstrap-ppc64le)
+                       ;;("powerpc-linux" fpc-bootstrap-ppc)
+                       ("x86_64-linux" fpc-bootstrap-x86_64)
+                       ;; XXX: Wrong, but innocuous so long
+                       ;; `supported-systems' is kept in sync.
+                       (_ fpc-bootstrap-x86_64)))))
     (arguments
      `(#:tests? #f ; no tests available
        #:phases
@@ -115,7 +117,7 @@
            (add-after 'unpack-bin 'install-bin
              (lambda* (#:key inputs #:allow-other-keys)
                (with-directory-excursion
-                 (string-append fpc-bootstrap-path "/fpc-3.0.4."
+                 (string-append fpc-bootstrap-path "/fpc-" ,version "."
                                 arch "-linux")
                  (let ((binary-tarball
                         (string-append "binary." arch "-linux.tar"))
@@ -131,8 +133,7 @@
            (add-after 'patch-source-shebangs 'patch-inline-shebangs
              (lambda _
                (substitute* "fpcsrc/compiler/cscript.pas"
-                 (("#!/bin/sh") (string-append "#!" (which "sh"))))
-               #t))
+                 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
            (add-before 'build 'patch-release-date
              (lambda _                  ; reproducibility
                (substitute* (list "fpcdocs/prog.tex"
@@ -143,18 +144,16 @@
                                   "fpcsrc/utils/fpcm/fpcmmain.pp"
                                   "fpcsrc/utils/fpcreslipo/fpcreslipo.pp"
                                   "fpcsrc/compiler/version.pas")
-                 (("\\{\\$I(NCLUDE)? %DATE%\\}") "'2020/06/19'"))
-               #t))
+                 (("\\{\\$I(NCLUDE)? %DATE%\\}")
+                  (format #f "'~a'" ,%fpc-release-date)))))
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (substitute* "fpcsrc/compiler/systems/t_linux.pas"
                  ;; Point to the current glibc dynamic linker.
                  (("/lib/ld-linux.so.2")
-                  (string-append (assoc-ref inputs "libc")
-                                 ,(glibc-dynamic-linker)))
+                  (search-input-file inputs ,(glibc-dynamic-linker)))
                  (("/lib64/ld-linux-x86-64.so.2")
-                  (string-append (assoc-ref inputs "libc")
-                                 ,(glibc-dynamic-linker)))
+                  (search-input-file inputs ,(glibc-dynamic-linker)))
                  ; TODO: /lib/ld-linux-armhf.so.3
                  ; TODO: /lib/ld-linux-aarch64.so.1
                  ; TODO: /lib64/ld64.so.2
@@ -167,8 +166,7 @@
                    "if (isdll) then")))
                (substitute* "fpcsrc/compiler/options.pas"
                  (("exepath\\+'../etc/'")
-                  (string-append "'" (assoc-ref outputs "out") "/etc'")))
-               #t))
+                  (string-append "'" (assoc-ref outputs "out") "/etc'")))))
            (replace 'build
              (lambda* (#:key inputs #:allow-other-keys)
                (let* ((fpc-bin (string-append fpc-bootstrap-path "/bin"))
@@ -179,7 +177,7 @@
                  (setenv "PATH"
                         (string-append (getenv "PATH") ":"
                                        fpc-bootstrap-path
-                                       "/lib/fpc/3.0.4"))
+                                       "/lib/fpc/" ,version))
                  (setenv "FPC" fpc)
                  ;; Specify target operating system using "-T" option
                  (invoke fpcmake (string-append "-T" arch "-linux"))
@@ -214,8 +212,8 @@
                       (glibc (assoc-ref inputs "glibc")))
                  (wrap-program fpc
                    `("PATH" ":" prefix (,(string-append ld "/bin")))
-                   `("LIBRARY_PATH" ":" prefix (,(string-append glibc "/lib"))))
-                 #t)))))))
+                   `("LIBRARY_PATH" ":" prefix
+                     (,(string-append glibc "/lib")))))))))))
     ;; fpc invokes gcc, so make sure LIBRARY_PATH et.al are set.
     ;(native-search-paths (package-native-search-paths gcc))
     (home-page "https://www.freepascal.org")
@@ -268,8 +266,7 @@ many useful extensions to the Pascal programming language.")
              (chdir "src")
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("which" ,which)))
+     (list perl which))
     (synopsis "p2c converts Pascal programs to C programs--which you can then
 compile using gcc")
     (description "This package provides @command{p2c}, a program to convert
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 1b8df3ebe3..0ff8608c9c 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -156,20 +156,20 @@ human.")
      `(("asciidoctor" ,ruby-asciidoctor)
        ("qttools" ,qttools)))
     (inputs
-     `(("argon2" ,argon2)
-       ("libgcrypt" ,libgcrypt)
-       ("libsodium" ,libsodium)         ; XC_BROWSER
-       ("libyubikey" ,libyubikey)       ; XC_YUBIKEY
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)
-       ("qrencode" ,qrencode)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtx11extras" ,qtx11extras)
-       ("quazip" ,quazip-0)             ; XC_KEESHARE
-       ("readline" ,readline)
-       ("yubikey-personalization" ,yubikey-personalization) ; XC_YUBIKEY
-       ("zlib" ,zlib)))
+     (list argon2
+           libgcrypt
+           libsodium ; XC_BROWSER
+           libyubikey ; XC_YUBIKEY
+           libxi
+           libxtst
+           qrencode
+           qtbase-5
+           qtsvg
+           qtx11extras
+           quazip-0 ; XC_KEESHARE
+           readline
+           yubikey-personalization ; XC_YUBIKEY
+           zlib))
     (home-page "https://www.keepassxc.org")
     (synopsis "Password manager")
     (description "KeePassXC is a password manager or safe which helps you to
@@ -259,13 +259,9 @@ platforms.")
                (invoke "autoconf")
                #t)))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (inputs
-       `(("libx11" ,libx11)
-         ("libxmu" ,libxmu)
-         ("libxt" ,libxt)
-         ("openssl" ,openssl)))
+       (list libx11 libxmu libxt openssl))
       (home-page "https://github.com/nsd20463/pwsafe")
       (synopsis "CLI password manager")
       (description
@@ -286,7 +282,7 @@ Counterpane's Passwordsafe.")
                 "1l2shrhvcwfzkar9qiwb75nhcqmx25iz55lzmz0c187nbjhqzi9p"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                     (guix build utils)
@@ -309,9 +305,7 @@ Counterpane's Passwordsafe.")
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,ccachedir)))
                #t))))))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("gnupg" ,gnupg)
-       ("xclip" ,xclip)))
+     (list guile-2.2 gnupg xclip))
     (synopsis "GnuPG-based secret manager")
     (description "Shroud is a simple secret manager with a command line
 interface.  The password database is stored as a Scheme s-expression and
@@ -339,12 +333,9 @@ applications, there is xclip integration." )
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
                             "/share/doc",name "-" ,version))))
     (inputs
-     `(("argon2" ,argon2)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)))
+     (list argon2 ncurses openssl))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (synopsis "Yet Another Password Encryption Tool")
     (description "YAPET is a text based password manager using the Blowfish
 encryption algorithm.  Because of its small footprint and very few library
@@ -416,7 +407,7 @@ them out, at the source.")
     (native-inputs
      `(("python" ,python-wrapper)))
     (inputs
-     `(("cracklib" ,cracklib)))
+     (list cracklib))
     (synopsis "Password quality checker")
     (home-page "https://github.com/libpwquality/libpwquality")
     (description
@@ -460,24 +451,17 @@ random passwords that pass the checks.")
                #t)))
          (add-after 'install 'manpage
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; Without this substitution, it fails with
-             ;; ImportError: No module named 'gpg'
-             (substitute* "Makefile"
-               (("PYTHONPATH=.") ""))
              (invoke "make" "assword.1")
              (install-file
               "assword.1"
               (string-append (assoc-ref outputs "out") "/share/man/man1")))))))
     (build-system python-build-system)
     (native-inputs
-     `(("txt2man" ,txt2man)))
+     (list txt2man))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("python-xdo" ,python-xdo)
-       ("python-gpg" ,python-gpg)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ python-xdo python-gpg python-pygobject))
     (propagated-inputs
-     `(("xclip" ,xclip)))
+     (list xclip))
     (home-page "https://finestructure.net/assword/")
     (synopsis "Password manager")
     (description "assword is a simple password manager using GPG-wrapped
@@ -527,11 +511,11 @@ any X11 window.")
              (substitute* "contrib/dmenu/passmenu"
                (("dmenu=dmenu\n")
                 (string-append "dmenu="
-                               (assoc-ref inputs "dmenu") "/bin/dmenu\n"))
+                               (search-input-file inputs "/bin/dmenu")
+                               "\n"))
                (("xdotool=\"xdotool")
                 (string-append "xdotool=\""
-                               (assoc-ref inputs "xdotool") "/bin/xdotool")))
-             #t))
+                               (search-input-file inputs "/bin/xdotool"))))))
          (add-after 'install 'install-passmenu
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -617,13 +601,9 @@ through the pass command.")
              #t)))
        #:test-target "test"))
     (inputs
-     `(("oath-toolkit" ,oath-toolkit)))
+     (list oath-toolkit))
     (native-inputs
-     `(("password-store" ,password-store)
-       ("expect" ,expect)
-       ("git" ,git)
-       ("gnupg" ,gnupg)
-       ("which" ,which)))
+     (list password-store expect git gnupg which))
     (home-page "https://github.com/tadfisher/pass-otp")
     (synopsis "Pass extension for managing one-time-password (OTP) tokens")
     (description
@@ -700,10 +680,9 @@ key URIs using the standard otpauth:// scheme.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (home-page "https://qtpass.org")
     (synopsis "GUI for password manager password-store")
     (description
@@ -740,9 +719,7 @@ encryption.")
            (chmod script #o555)
            (install-file script (string-append out "/bin"))))))
     (propagated-inputs
-     `(("password-store" ,password-store)
-       ("rofi" ,rofi)
-       ("xdotool" ,xdotool)))
+     (list password-store rofi xdotool))
     (home-page "https://github.com/carnager/rofi-pass")
     (synopsis "Rofi frontend for password-store")
     (description "Rofi-pass provides a way to manipulate information stored
@@ -814,13 +791,11 @@ using password-store through rofi interface:
                    (,(string-append gnupg "/bin"))))
                #t))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("gnupg" ,gnupg)
-       ("go-github-com-mattn-go-zglob" ,go-github-com-mattn-go-zglob)
-       ("go-github-com-rifflock-lfshook" ,go-github-com-rifflock-lfshook)
-       ("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list gnupg go-github-com-mattn-go-zglob
+           go-github-com-rifflock-lfshook go-github-com-sirupsen-logrus
+           go-golang-org-x-sys))
     (home-page "https://github.com/browserpass/browserpass-native")
     (synopsis "Browserpass native messaging host")
     (description "Browserpass is a browser extension for pass, a
@@ -897,11 +872,9 @@ winner of the 2015 Password Hashing Competition.")
              (setenv "HOME" (getcwd))
              (invoke "pytest"))))))
     (inputs
-     `(("python-pyxdg" ,python-pyxdg)
-       ("password-store" ,password-store)))
+     (list python-pyxdg password-store))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://github.com/languitar/pass-git-helper")
     (synopsis "Git credential helper interfacing with pass")
     (description "pass-git-helper is a git credential helper which
@@ -926,7 +899,7 @@ between hosts and entries in the password store.")
            "0fvz3v41hnaiv1ggpxanfykyfjq79cwp9qcqqn63vic357w27lgm"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (inputs
        `(("gmp" ,gmp)
          ("libpcap" ,libpcap)
@@ -1030,8 +1003,7 @@ is the community-enhanced, \"jumbo\" version of John the Ripper.")
      ;; to Python 2, which works fine.
      `(#:python ,python-2))
     (propagated-inputs
-     `(("gnupg" ,gnupg)
-       ("pwgen" ,pwgen)))
+     (list gnupg pwgen))
     (home-page "http://www.digip.org/sala/")
     (synopsis "Encrypted plaintext password store")
     (description
@@ -1055,10 +1027,10 @@ by GnuPG's symmetrical encryption.")
     (inputs `(("gtk2" ,gtk+-2)
               ("gnupg" ,gnupg)
               ("libxml2" ,libxml2)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("intltool" ,intltool)))
+    (native-inputs (list pkg-config intltool))
     (arguments
-     `(#:phases
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
            ;; The file po/POTFILES.in ends up missing for some reason in
@@ -1103,10 +1075,8 @@ to use a different password manager.")
           "1m067vvdlc85csbpkp8aw4s3ags7q8s3jszrr32kmj9qhk5c254f"))))
     (build-system python-build-system)
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-docopt" ,python-docopt)
-       ("python-html5lib" ,python-html5lib)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4 python-docopt python-html5lib
+           python-requests))
     (home-page "https://github.com/ddevault/pass-rotate")
     (synopsis "Rotate password on online services")
     (description "pass-rotate is a command line utility and python library for
@@ -1128,7 +1098,7 @@ your online accounts makes it necessary.")
         (base32
          "104z63m7lqbb0sdrxhf9yi15l4a9zwf9m6zs9dbb3gf0nfxl1h9r"))))
     (native-inputs
-     `(("opencl-headers" ,opencl-headers)))
+     (list opencl-headers))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ;no tests
@@ -1158,9 +1128,9 @@ password cracking.")
        (sha256
         (base32 "0kq555kb338691qd7zjmi8vhq4km3apnsl2w63zh0igwzcjx6lx1"))))
     (native-inputs
-     `(("p7zip" ,p7zip)))
+     (list p7zip))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;no tests
@@ -1216,9 +1186,9 @@ group them into chains.")
         (base32 "0yawrlbbklhmvwr99wm7li3r0d5kxvpkwf33a12rji7z0ya5p340"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("lzip" ,lzip)))
+     (list lzip))
     (inputs
-     `(("cryptsetup" ,cryptsetup)))
+     (list cryptsetup))
     (synopsis "LUKS encrypted volume cracker")
     (description
      "This is a cracker for LUKS encrypted volumes.  It can be used either in
@@ -1244,13 +1214,9 @@ try every password contained in a file.")
           (base32 "0lspqyyxbk6h28yxnp7pd5aib161vrkzgasam5jpzn35n1jacx2j"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("libxslt" ,libxslt)
-         ("libxml2" ,libxml2)
-         ("docbook-xsl" ,docbook-xsl)
-         ("docbook-xml" ,docbook-xml)))
+       (list pkg-config libxslt libxml2 docbook-xsl docbook-xml))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -1299,7 +1265,7 @@ encryption algorithm if so desired.")
                   (string-append ":-" tomb "/bin/tomb"))))))
          (delete 'configure))))
     (inputs
-     `(("tomb" ,tomb)))
+     (list tomb))
     (home-page "https://github.com/roddhjav/pass-tomb")
     (synopsis "Pass extension keeping the tree of passwords encrypted")
     (description "Pass-tomb provides a convenient solution to put your
diff --git a/gnu/packages/patches/abseil-cpp-fix-gtest.patch b/gnu/packages/patches/abseil-cpp-fix-gtest.patch
deleted file mode 100644
index 38971448f3..0000000000
--- a/gnu/packages/patches/abseil-cpp-fix-gtest.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-The GTEST_ALLOW_UNINSTANTIATED_PARAMTERIZED_TEST macro was added to googletest
-in commit 0b024bd9 on master. It has been used in an abseil-cpp release before
-a googletest release.
-
---- a/absl/container/internal/unordered_map_modifiers_test.h
-+++ b/absl/container/internal/unordered_map_modifiers_test.h
-@@ -286,7 +286,9 @@ class UniquePtrModifiersTest : public ::testing::Test {
-   }
- };
-
-+#ifdef GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST
- GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(UniquePtrModifiersTest);
-+#endif
-
- TYPED_TEST_SUITE_P(UniquePtrModifiersTest);
-
diff --git a/gnu/packages/patches/agg-2.5-gcc8.patch b/gnu/packages/patches/agg-2.5-gcc8.patch
new file mode 100644
index 0000000000..dfcfc6cd4a
--- /dev/null
+++ b/gnu/packages/patches/agg-2.5-gcc8.patch
@@ -0,0 +1,14 @@
+Taken from: https://gitweb.gentoo.org/repo/gentoo.git/tree/x11-libs/agg/files/agg-2.5-gcc8.patch.
+
+diff -uprN agg-2.5/include/agg_renderer_outline_aa.h agg-2.5-fixed/include/agg_renderer_outline_aa.h
+--- agg-2.5/include/agg_renderer_outline_aa.h	2018-08-25 02:02:52.507254241 +0800
++++ agg-2.5-fixed/include/agg_renderer_outline_aa.h	2018-08-25 02:04:15.291175316 +0800
+@@ -1375,7 +1375,7 @@ namespace agg
+         //---------------------------------------------------------------------
+         void profile(const line_profile_aa& prof) { m_profile = &prof; }
+         const line_profile_aa& profile() const { return *m_profile; }
+-        line_profile_aa& profile() { return *m_profile; }
++        const line_profile_aa& profile() { return *m_profile; }
+ 
+         //---------------------------------------------------------------------
+         int subpixel_width() const { return m_profile->subpixel_width(); }
diff --git a/gnu/packages/patches/atlas-gfortran-compat.patch b/gnu/packages/patches/atlas-gfortran-compat.patch
new file mode 100644
index 0000000000..5b46f5a64d
--- /dev/null
+++ b/gnu/packages/patches/atlas-gfortran-compat.patch
@@ -0,0 +1,37 @@
+Fix build with gfortran 10.
+
+Taken from Debian:
+https://salsa.debian.org/science-team/atlas/-/blob/master/debian/patches/gfortran-10.patch
+
+--- a/interfaces/blas/C/testing/c_dblat1.f
++++ b/interfaces/blas/C/testing/c_dblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. DNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. DASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. DSCALTEST ..
+                CALL DSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
+--- a/interfaces/blas/C/testing/c_sblat1.f
++++ b/interfaces/blas/C/testing/c_sblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. SNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. SASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. SSCALTEST ..
+                CALL SSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
diff --git a/gnu/packages/patches/awesome-4.3-fno-common.patch b/gnu/packages/patches/awesome-4.3-fno-common.patch
new file mode 100644
index 0000000000..62f153d012
--- /dev/null
+++ b/gnu/packages/patches/awesome-4.3-fno-common.patch
@@ -0,0 +1,178 @@
+Taken from: https://github.com/awesomeWM/awesome/commit/d256d9055095f27a33696e0aeda4ee20ed4fb1a0
+Author: Reiner Herrmann <reiner@reiner-h.de>
+
+--- a/common/lualib.c
++++ b/common/lualib.c
+@@ -20,6 +20,8 @@
+ #include "common/lualib.h"
+ #include "luaa.h"
+ 
++lua_CFunction lualib_dofunction_on_error;
++
+ void luaA_checkfunction(lua_State *L, int idx)
+ {
+     if(!lua_isfunction(L, idx))
+--- a/common/lualib.h
++++ b/common/lualib.h
+@@ -28,7 +28,7 @@
+ #include "common/util.h"
+ 
+ /** Lua function to call on dofunction() error */
+-lua_CFunction lualib_dofunction_on_error;
++extern lua_CFunction lualib_dofunction_on_error;
+ 
+ void luaA_checkfunction(lua_State *, int);
+ void luaA_checktable(lua_State *, int);
+--- a/luaa.c
++++ b/luaa.c
+@@ -91,6 +91,8 @@ extern const struct luaL_Reg awesome_mouse_meta[];
+ extern const struct luaL_Reg awesome_root_methods[];
+ extern const struct luaL_Reg awesome_root_meta[];
+ 
++signal_array_t global_signals;
++
+ /** A call into the Lua code aborted with an error.
+  *
+  * This signal is used in the example configuration, @{05-awesomerc.md},
+--- a/luaa.h
++++ b/luaa.h
+@@ -317,7 +317,7 @@ const char *luaA_find_config(xdgHandle *, const char *, luaA_config_callback *);
+ bool luaA_parserc(xdgHandle *, const char *);
+ 
+ /** Global signals */
+-signal_array_t global_signals;
++extern signal_array_t global_signals;
+ 
+ int luaA_class_index_miss_property(lua_State *, lua_object_t *);
+ int luaA_class_newindex_miss_property(lua_State *, lua_object_t *);
+--- a/objects/button.c
++++ b/objects/button.c
+@@ -35,6 +35,8 @@
+ 
+ #include "button.h"
+ 
++lua_class_t button_class;
++
+ /** Button object.
+  *
+  * @tfield int button The mouse button number, or 0 for any button.
+--- a/objects/button.h
++++ b/objects/button.h
+@@ -39,7 +39,7 @@ typedef struct button_t
+     xcb_button_t button;
+ } button_t;
+ 
+-lua_class_t button_class;
++extern lua_class_t button_class;
+ LUA_OBJECT_FUNCS(button_class, button_t, button)
+ ARRAY_FUNCS(button_t *, button, DO_NOTHING)
+ 
+--- a/objects/client.c
++++ b/objects/client.c
+@@ -108,6 +108,8 @@
+ #include <xcb/shape.h>
+ #include <cairo-xcb.h>
+ 
++lua_class_t client_class;
++
+ /** Client class.
+  *
+  * This table allow to add more dynamic properties to the clients. For example,
+--- a/objects/client.h
++++ b/objects/client.h
+@@ -200,7 +200,7 @@ struct client_t
+ ARRAY_FUNCS(client_t *, client, DO_NOTHING)
+ 
+ /** Client class */
+-lua_class_t client_class;
++extern lua_class_t client_class;
+ 
+ LUA_OBJECT_FUNCS(client_class, client_t, client)
+ 
+--- a/objects/drawin.c
++++ b/objects/drawin.c
+@@ -46,6 +46,8 @@
+ #include <cairo-xcb.h>
+ #include <xcb/shape.h>
+ 
++lua_class_t drawin_class;
++
+ /** Drawin object.
+  *
+  * @field border_width Border width.
+--- a/objects/drawin.h
++++ b/objects/drawin.h
+@@ -52,7 +52,7 @@ void luaA_drawin_systray_kickout(lua_State *);
+ 
+ void drawin_class_setup(lua_State *);
+ 
+-lua_class_t drawin_class;
++extern lua_class_t drawin_class;
+ 
+ #endif
+ // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
+--- a/objects/key.c
++++ b/objects/key.c
+@@ -43,6 +43,8 @@
+ #include <xkbcommon/xkbcommon.h>
+ #include <glib.h>
+ 
++lua_class_t key_class;
++
+ /** Key object.
+  *
+  * @tfield string key The key to trigger an event.
+--- a/objects/key.h
++++ b/objects/key.h
+@@ -36,7 +36,7 @@ typedef struct keyb_t
+     xcb_keycode_t keycode;
+ } keyb_t;
+ 
+-lua_class_t key_class;
++extern lua_class_t key_class;
+ LUA_OBJECT_FUNCS(key_class, keyb_t, key)
+ DO_ARRAY(keyb_t *, key, DO_NOTHING)
+ 
+--- a/objects/tag.c
++++ b/objects/tag.c
+@@ -190,6 +190,8 @@
+ #include "ewmh.h"
+ #include "luaa.h"
+
++lua_class_t tag_class;
++
+ /**
+  * @signal request::select
+  */
+--- a/objects/tag.h
++++ b/objects/tag.h
+@@ -46,7 +46,7 @@ struct tag
+     client_array_t clients;
+ };
+ 
+-lua_class_t tag_class;
++extern lua_class_t tag_class;
+ LUA_OBJECT_FUNCS(tag_class, tag_t, tag)
+ 
+ void tag_class_setup(lua_State *);
+--- a/objects/window.c
++++ b/objects/window.c
+@@ -59,6 +59,7 @@
+ #include "property.h"
+ #include "xwindow.h"
+ 
++lua_class_t window_class;
+ LUA_CLASS_FUNCS(window, window_class)
+ 
+ static xcb_window_t
+--- a/objects/window.h
++++ b/objects/window.h
+@@ -80,7 +80,7 @@ typedef struct
+     WINDOW_OBJECT_HEADER
+ } window_t;
+ 
+-lua_class_t window_class;
++extern lua_class_t window_class;
+ 
+ void window_class_setup(lua_State *);
+
diff --git a/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
new file mode 100644
index 0000000000..56d404da15
--- /dev/null
+++ b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
@@ -0,0 +1,22 @@
+Patch borrowed from Arch Linux. Allows compiling bdb 5.3 and earlier with GCC newer than 7.
+
+--- src/dbinc/atomic.h	2013-03-12 14:07:22.000000000 -0400
++++ src/dbinc/atomic.h.change	2013-03-12 14:06:35.000000000 -0400
+@@ -144,7 +144,7 @@
+ #define	atomic_inc(env, p)	__atomic_inc(p)
+ #define	atomic_dec(env, p)	__atomic_dec(p)
+ #define	atomic_compare_exchange(env, p, o, n)	\
+-	__atomic_compare_exchange((p), (o), (n))
++	__atomic_compare_exchange_db((p), (o), (n))
+ static inline int __atomic_inc(db_atomic_t *p)
+ {
+ 	int	temp;
+@@ -176,7 +176,7 @@
+  * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+  * which configure could be changed to use.
+  */
+-static inline int __atomic_compare_exchange(
++static inline int __atomic_compare_exchange_db(
+ 	db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
+ {
+ 	atomic_value_t was;
diff --git a/gnu/packages/patches/biber-fix-encoding-write.patch b/gnu/packages/patches/biber-fix-encoding-write.patch
deleted file mode 100644
index 56cd11212e..0000000000
--- a/gnu/packages/patches/biber-fix-encoding-write.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2a9b15aefb842a734637f3d230936ea1b7c60096 Mon Sep 17 00:00:00 2001
-From: Philip Kime <Philip@kime.org.uk>
-Date: Thu, 8 Nov 2018 22:02:09 +0100
-Subject: [PATCH] Fix to address #239
-
----
- lib/Biber.pm | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lib/Biber.pm b/lib/Biber.pm
-index 8b1f80a5..d97fca29 100644
---- a/lib/Biber.pm
-+++ b/lib/Biber.pm
-@@ -311,6 +311,8 @@ sub parse_ctrlfile {
-     unless (eval {$checkbuf = File::Slurper::read_text($ctrl_file_path, 'latin1')}) {
-       biber_error("$ctrl_file_path is not UTF-8 or even latin1, how horrible.");
-     }
-+    # Write ctrl file as UTF-8
-+    File::Slurper::write_text($ctrl_file_path, NFC($checkbuf));# Unicode NFC boundary
-   }
- 
-   $checkbuf = NFD($checkbuf);# Unicode NFD boundary
-@@ -319,8 +321,6 @@ sub parse_ctrlfile {
-     unlink($output) unless $output eq '-';# ignore deletion of STDOUT marker
-     biber_error("$ctrl_file_path is malformed, last biblatex run probably failed. Deleted $output");
-   }
--  # Write ctrl file as UTF-8
--  File::Slurper::write_text($ctrl_file_path, NFC($checkbuf));# Unicode NFC boundary
- 
-   # Validate if asked to
-   if (Biber::Config->getoption('validate_control')) {
diff --git a/gnu/packages/patches/biber-sortinithash.patch b/gnu/packages/patches/biber-sortinithash.patch
deleted file mode 100644
index 5a626705e6..0000000000
--- a/gnu/packages/patches/biber-sortinithash.patch
+++ /dev/null
@@ -1,1666 +0,0 @@
-This is a backport of this upstream commit to Biber 2.12:
-
-  From 6b61b4c13778cf638f82569ab9e413f09f111ba5 Mon Sep 17 00:00:00 2001
-  From: Philip Kime <Philip@kime.org.uk>
-  Date: Sat, 12 Jan 2019 17:19:51 +0100
-  Subject: [PATCH] Updated tests after U::C upgrade changed sortinit hashes
-
-It addresses test failures found with recent versions of the
-Biber dependencies.
-
-diff --git a/t/annotations.t b/t/annotations.t
-index b4f641e..c6f86c7 100644
---- a/t/annotations.t
-+++ b/t/annotations.t
-@@ -73,7 +73,7 @@ my $ann1 = q|    \entry{ann1}{misc}{}
-       \strng{authorfullhash}{90ae96c82de92e36949bc64254bbde0c}
-       \field{extraname}{1}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{title}{The Title}
-@@ -116,7 +116,7 @@ my $ann2 = q|    \entry{ann2}{misc}{}
-       \strng{authorfullhash}{90ae96c82de92e36949bc64254bbde0c}
-       \field{extraname}{2}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{title}{The Title}
-diff --git a/t/basic-misc.t b/t/basic-misc.t
-index d4664b1..a9168cc 100644
---- a/t/basic-misc.t
-+++ b/t/basic-misc.t
-@@ -97,7 +97,7 @@ my $u1 = q|    \entry{u1}{misc}{}
-       \strng{authorfullhash}{b78abdc838d79b6576f2ed0021642766}
-       \field{labelalpha}{AAA\textbf{+}00}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -231,7 +231,7 @@ my $murray1 = q|    \entry{murray}{article}{}
-       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
-       \field{labelalpha}{Hos\textbf{+}98}
-       \field{sortinit}{H}
--      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
-+      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -348,7 +348,7 @@ my $murray2 = q|    \entry{murray}{article}{}
-       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
-       \field{labelalpha}{Hos98}
-       \field{sortinit}{H}
--      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
-+      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -389,7 +389,7 @@ my $t1 = q+    \entry{t1}{misc}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Bro92}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -419,7 +419,7 @@ my $t2 = q|    \entry{t2}{misc}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Bro94}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -452,7 +452,7 @@ my $anon1 = q|    \entry{anon1}{unpublished}{}
-       \strng{shortauthorfullhash}{9873a6cc65c553faa2b21aaad626fe4b}
-       \field{labelalpha}{XAn35}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{shortauthor}
-@@ -491,7 +491,7 @@ my $anon2 = q|    \entry{anon2}{unpublished}{}
-       \strng{shortauthorfullhash}{f64c29e89ea49402b997956610b58ef6}
-       \field{labelalpha}{YAn39}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquework}
-       \field{labelnamesource}{shortauthor}
-@@ -526,7 +526,7 @@ my $url1 = q|    \entry{url1}{misc}{}
-       \field{extraname}{4}
-       \field{labelalpha}{Ali05}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extraalpha}{4}
-       \field{labelnamesource}{author}
-       \field{year}{2005}
-@@ -710,7 +710,7 @@ my $isbn1 = q|    \entry{isbn1}{misc}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Flu}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{isbn}{978-0-8165-2066-4}
-@@ -735,7 +735,7 @@ my $isbn2 = q|    \entry{isbn2}{misc}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Flu}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{isbn}{978-0-8165-2066-4}
-@@ -778,7 +778,7 @@ my $clone1 = q|    \entry{snk1}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{vDoe}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -807,7 +807,7 @@ my $clone2 = q|    \entry{clone-snk1}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{vDoe}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{addendum}{add}
-@@ -839,7 +839,7 @@ my $ent1 = q|    \entry{ent1}{book}{}
-       \strng{authorfullhash}{b2536a425d549b46de5f21c4d468050a}
-       \field{labelalpha}{SdB}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -862,7 +862,7 @@ my $verb1 = q|    \entry{verb1}{book}{}
-       \strng{authorfullhash}{cac5a25f503e71f5ef28f474e14007b6}
-       \field{labelalpha}{All}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \verb{verba}
-diff --git a/t/biblatexml.t b/t/biblatexml.t
-index ad9ad25..0959bfa 100644
---- a/t/biblatexml.t
-+++ b/t/biblatexml.t
-@@ -111,7 +111,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
-       \strng{translatornamehash}{b44eba830fe9817fbe8e53c82f1cbe04}
-       \strng{translatorfullhash}{b44eba830fe9817fbe8e53c82f1cbe04}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -158,7 +158,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
- 
- my $l2 = q|    \entry{loopkey:a}{book}{}
-       \field{sortinit}{0}
--      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
-+      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
-     \endentry
- |;
- 
-diff --git a/t/crossrefs.t b/t/crossrefs.t
-index 915b52b..b6191c6 100644
---- a/t/crossrefs.t
-+++ b/t/crossrefs.t
-@@ -82,7 +82,7 @@ my $cr1 = q|    \entry{cr1}{inbook}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{G}
--      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
-+      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -131,7 +131,7 @@ my $cr2 = q|    \entry{cr2}{inbook}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -165,7 +165,7 @@ my $cr_m = q|    \entry{cr_m}{book}{}
-       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
-       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
-       \field{sortinit}{G}
--      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
-+      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
-       \true{crossrefsource}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-@@ -203,7 +203,7 @@ my $cr3 = q|    \entry{cr3}{inbook}{}
-       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
-       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -248,7 +248,7 @@ my $cr4 = q|    \entry{cr4}{inbook}{}
-       \strng{editornamehash}{6ea89bd4958743a20b70fe17647d6af5}
-       \strng{editorfullhash}{6ea89bd4958743a20b70fe17647d6af5}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -279,7 +279,7 @@ my $crt = q|    \entry{crt}{book}{}
-       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
-       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{title}{Beasts of the Burbling Burns}
-@@ -315,7 +315,7 @@ my $cr6 = q|    \entry{cr6}{inproceedings}{}
-       \strng{editorfullhash}{344a7f427fb765610ef96eb7bce95257}
-       \field{extraname}{2}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -366,7 +366,7 @@ my $cr7 = q|    \entry{cr7}{inbook}{}
-       \strng{bookauthorfullhash}{91a1dd4aeed3c4ec29ca74c4e778be5f}
-       \field{extraname}{1}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -401,7 +401,7 @@ my $cr8 = q|    \entry{cr8}{incollection}{}
-       \strng{authorfullhash}{3d449e56eb3ca1ae80dc99a18d689795}
-       \field{extraname}{4}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -431,7 +431,7 @@ my $xr1 = q|    \entry{xr1}{inbook}{}
-       \strng{authornamehash}{e0ecc4fc668ee499d1afba44e1ac064d}
-       \strng{authorfullhash}{e0ecc4fc668ee499d1afba44e1ac064d}
-       \field{sortinit}{Z}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -460,7 +460,7 @@ my $xr2 = q|    \entry{xr2}{inbook}{}
-       \strng{authornamehash}{6afa09374ecfd6b394ce714d2d9709c7}
-       \strng{authorfullhash}{6afa09374ecfd6b394ce714d2d9709c7}
-       \field{sortinit}{I}
--      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
-+      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -491,7 +491,7 @@ my $xrm = q|    \entry{xrm}{book}{}
-       \strng{editornamehash}{809950f9b59ae207092b909a19dcb27b}
-       \strng{editorfullhash}{809950f9b59ae207092b909a19dcb27b}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \true{xrefsource}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-@@ -516,7 +516,7 @@ my $xr3 = q|    \entry{xr3}{inbook}{}
-       \strng{authornamehash}{9788055665b9bb4b37c776c3f6b74f16}
-       \strng{authorfullhash}{9788055665b9bb4b37c776c3f6b74f16}
-       \field{sortinit}{N}
--      \field{sortinithash}{f7242c3ed3dc50029fca1be76c497c7c}
-+      \field{sortinithash}{98cf339a479c0454fe09153a08675a15}
-       \true{singletitle}
-       \true{uniquetitle}
-       \true{uniquework}
-@@ -546,7 +546,7 @@ my $xrt = q|    \entry{xrt}{book}{}
-       \strng{editornamehash}{bf7d6b02f3e073913e5bfe5059508dd5}
-       \strng{editorfullhash}{bf7d6b02f3e073913e5bfe5059508dd5}
-       \field{sortinit}{K}
--      \field{sortinithash}{9fd838a31ba64d981e8f44562bd33f89}
-+      \field{sortinithash}{d3edc18d54b9438a72c24c925bfb38f4}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{title}{Kings, Cork and Calculation}
-@@ -572,7 +572,7 @@ my $xr4 = q|    \entry{xr4}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{1}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -600,7 +600,7 @@ my $mxr = q|    \entry{mxr}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{2}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -625,7 +625,7 @@ my $mcr = q|    \entry{mcr}{inbook}{}
-       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
-       \field{extraname}{3}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-       \field{origyear}{1933}
-@@ -660,7 +660,7 @@ my $ccr1 = q|    \entry{ccr2}{book}{}
-       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
-       \field{extraname}{1}
-       \field{sortinit}{V}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \true{uniquetitle}
-       \true{uniquework}
-       \field{labelnamesource}{author}
-@@ -694,7 +694,7 @@ my $ccr2 = q|    \entry{ccr3}{inbook}{}
-       \strng{editornamehash}{cfee758a1c82df2e26af1985e061bb0a}
-       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \field{booktitle}{Misc etc.}
-@@ -726,7 +726,7 @@ my $ccr3 = q|    \entry{ccr4}{inbook}{}
- 
- my $s1 = q|    \entry{s1}{inbook}{}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{uniquetitle}
-       \field{labeltitlesource}{title}
-       \strng{crossref}{s2}
-@@ -760,7 +760,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
-       \strng{bookauthorfullhash}{1a0f7d518cccdad859a74412ef956474}
-       \field{extraname}{2}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \true{xrefsource}
-       \field{labelnamesource}{author}
-       \field{booktitle}{Title}
-@@ -769,7 +769,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
- 
- my $b1 = q|    \entry{b1}{inbook}{}
-       \field{sortinit}{2}
--      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
-+      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
-       \strng{crossref}{b2}
-       \field{day}{3}
-       \field{month}{3}
-@@ -803,7 +803,7 @@ my $sup1 = q|    \entry{sup1}{mvbook}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{crossrefsource}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -828,7 +828,7 @@ my $sup2 = q|    \entry{sup2}{book}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/datalists.t b/t/datalists.t
-index 3081cc4..4855e3d 100644
---- a/t/datalists.t
-+++ b/t/datalists.t
-@@ -187,7 +187,7 @@ my $K11 = q|    \entry{K11}{book}{}
-       \strng{authornamehash}{4edc280a0ef229f9c061e3b121b17482}
-       \strng{authorfullhash}{4edc280a0ef229f9c061e3b121b17482}
-       \field{sortinit}{a}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -219,7 +219,7 @@ my $K12 = q|    \entry{K12}{book}{}
-       \strng{authornamehash}{a846a485fc9cbb59b0ebeedd6ac637e4}
-       \strng{authorfullhash}{a846a485fc9cbb59b0ebeedd6ac637e4}
-       \field{sortinit}{Z}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/dateformats.t b/t/dateformats.t
-index 6beb567..0d5072a 100644
---- a/t/dateformats.t
-+++ b/t/dateformats.t
-@@ -88,7 +88,7 @@ my $l13c = q|    \entry{L13}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{3}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -126,7 +126,7 @@ my $l14 = q|    \entry{L14}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{4}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -168,7 +168,7 @@ my $l15 = q|    \entry{L15}{book}{}
-       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{12}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -201,7 +201,7 @@ my $l16 = q|    \entry{L16}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{13}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{7}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{event}
-@@ -240,7 +240,7 @@ my $l17 = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -299,7 +299,7 @@ my $l17c = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{orig}
-       \field{labelnamesource}{editor}
-@@ -357,7 +357,7 @@ my $l17e = q|    \entry{L17}{proceedings}{}
-       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
-       \field{extraname}{5}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{event}
-       \field{labelnamesource}{editor}
-@@ -479,7 +479,7 @@ my $era1 = q|    \entry{era1}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{9}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -512,7 +512,7 @@ my $era2 = q|    \entry{era2}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{10}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -546,7 +546,7 @@ my $era3 = q|    \entry{era3}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{11}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -580,7 +580,7 @@ my $era4 = q|    \entry{era4}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{6}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -622,7 +622,7 @@ my $time1 = q|    \entry{time1}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{2}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -671,7 +671,7 @@ my $range1 = q|    \entry{range1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{7}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{1}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -712,7 +712,7 @@ my $range2 = q|    \entry{range2}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{8}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{2}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -753,7 +753,7 @@ my $season1 = q|    \entry{season1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -785,7 +785,7 @@ my $unspec1 = q|    \entry{unspec1}{inproceedings}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{4}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -838,7 +838,7 @@ my $unspec2 = q|    \entry{unspec2}{article}{}
-       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/encoding.t b/t/encoding.t
-index a150b4f..36d9955 100644
---- a/t/encoding.t
-+++ b/t/encoding.t
-@@ -52,7 +52,7 @@ my $encode1 = q|    \entry{testŠ}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -82,7 +82,7 @@ my $encode2 = q|    \entry{test1}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -112,7 +112,7 @@ my $encode3 = q|    \entry{test1}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -142,7 +142,7 @@ my $encode5 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -172,7 +172,7 @@ my $encode6 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-@@ -202,7 +202,7 @@ my $encode7 = q|    \entry{test}{book}{}
-       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
-       \field{labelalpha}{Enc99}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{labeldatesource}{year}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-diff --git a/t/names.t b/t/names.t
-index 7228042..b73f2ed 100644
---- a/t/names.t
-+++ b/t/names.t
-@@ -188,7 +188,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \strng{authornamehash}{72287a68c1714cb1b9f4ab9e03a88b96}
-       \strng{authorfullhash}{72287a68c1714cb1b9f4ab9e03a88b96}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -208,7 +208,7 @@ my $l2 = q|    \entry{L2}{book}{}
-       \strng{authornamehash}{2098d59d0f19a2e003ee06c1aa750d57}
-       \strng{authorfullhash}{2098d59d0f19a2e003ee06c1aa750d57}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -228,7 +228,7 @@ my $l3 = q|    \entry{L3}{book}{}
-       \strng{authornamehash}{c8b06fe88bde128b25eb0b3b1cc5837c}
-       \strng{authorfullhash}{c8b06fe88bde128b25eb0b3b1cc5837c}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -248,7 +248,7 @@ my $l4 = q|    \entry{L4}{book}{}
-       \strng{authornamehash}{5ec958b850c0c2de7de7c42c84b9c419}
-       \strng{authorfullhash}{5ec958b850c0c2de7de7c42c84b9c419}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -270,7 +270,7 @@ my $l5 = q|    \entry{L5}{book}{}
-       \strng{authornamehash}{c6b9d281cc1ff3f35570f76f463d4244}
-       \strng{authorfullhash}{c6b9d281cc1ff3f35570f76f463d4244}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -292,7 +292,7 @@ my $l6 = q|    \entry{L6}{book}{}
-       \strng{authornamehash}{5fd24d3d1608a310ec205a6b201a5495}
-       \strng{authorfullhash}{5fd24d3d1608a310ec205a6b201a5495}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -314,7 +314,7 @@ my $l7 = q|    \entry{L7}{book}{}
-       \strng{authornamehash}{98edb0b90251df22b74328d9227eceb7}
-       \strng{authorfullhash}{98edb0b90251df22b74328d9227eceb7}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -336,7 +336,7 @@ my $l8 = q|    \entry{L8}{book}{}
-       \strng{authornamehash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
-       \strng{authorfullhash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -356,7 +356,7 @@ my $l9 = q|    \entry{L9}{book}{}
-       \strng{authornamehash}{bae61a889ab149a6deafe45333204cf0}
-       \strng{authorfullhash}{bae61a889ab149a6deafe45333204cf0}
-       \field{sortinit}{I}
--      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
-+      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -379,7 +379,7 @@ my $l10 = q|    \entry{L10}{book}{}
-       \strng{authornamehash}{37b4325752e394ddfb2fc810f6c88e27}
-       \strng{authorfullhash}{37b4325752e394ddfb2fc810f6c88e27}
-       \field{sortinit}{J}
--      \field{sortinithash}{fce5f8d0bd05e8d93f3dbe21c78897ca}
-+      \field{sortinithash}{c45040a764d616897e7f5b30174d7b92}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -402,7 +402,7 @@ my $l10a = q|    \entry{L10a}{book}{}
-       \strng{authornamehash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
-       \strng{authorfullhash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -427,7 +427,7 @@ my $l11 = q|    \entry{L11}{book}{}
-       \strng{authornamehash}{9f48d231be68c9435fab4faca55a5caf}
-       \strng{authorfullhash}{9f48d231be68c9435fab4faca55a5caf}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -449,7 +449,7 @@ my $l12 = q|    \entry{L12}{book}{}
-       \strng{authornamehash}{d7ca88c13a8f7ce1c23e920010a31f83}
-       \strng{authorfullhash}{d7ca88c13a8f7ce1c23e920010a31f83}
-       \field{sortinit}{d}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -470,7 +470,7 @@ my $l13 = q|    \entry{L13}{book}{}
-       \strng{authornamehash}{227ac48bb788a658cfaa4eefc71ff0cc}
-       \strng{authorfullhash}{227ac48bb788a658cfaa4eefc71ff0cc}
-       \field{sortinit}{V}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -490,7 +490,7 @@ my $l14 = q|    \entry{L14}{book}{}
-       \strng{authornamehash}{779475052c17ed56dc3be900d0dfdf87}
-       \strng{authorfullhash}{779475052c17ed56dc3be900d0dfdf87}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -513,7 +513,7 @@ my $l15 = q|    \entry{L15}{book}{}
-       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
-       \field{extraname}{1}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -536,7 +536,7 @@ my $l16 = q|    \entry{L16}{book}{}
-       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
-       \field{extraname}{2}
-       \field{sortinit}{v}
--      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
-+      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -557,7 +557,7 @@ my $l17 = q|    \entry{L17}{book}{}
-       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
-       \field{extraname}{1}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -578,7 +578,7 @@ my $l18 = q|    \entry{L18}{book}{}
-       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
-       \field{extraname}{2}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -598,7 +598,7 @@ my $l19 = q|    \entry{L19}{book}{}
-       \strng{authornamehash}{83caa52f21f97e572dd3267bdf62978a}
-       \strng{authorfullhash}{83caa52f21f97e572dd3267bdf62978a}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -618,7 +618,7 @@ my $l19a = q|    \entry{L19a}{book}{}
-       \strng{authornamehash}{0963f6904ccfeaac2770c5882a587001}
-       \strng{authorfullhash}{0963f6904ccfeaac2770c5882a587001}
-       \field{sortinit}{L}
--      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
-+      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -639,7 +639,7 @@ my $l20 = q|    \entry{L20}{book}{}
-       \strng{authornamehash}{5f26c2f3b33095d5b005714893f4d698}
-       \strng{authorfullhash}{5f26c2f3b33095d5b005714893f4d698}
-       \field{sortinit}{F}
--      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
-+      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -660,7 +660,7 @@ my $l21 = q|    \entry{L21}{book}{}
-       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
-       \field{extraname}{1}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -681,7 +681,7 @@ my $l22u = q|    \entry{L22}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{1}
-       \field{sortinit}{Š}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -703,7 +703,7 @@ my $l22 = q|    \entry{L22}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{1}
-       \field{sortinit}{\v{S}}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -726,7 +726,7 @@ my $l23 = q|    \entry{L23}{book}{}
-       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
-       \field{extraname}{3}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -747,7 +747,7 @@ my $l24 = q|    \entry{L24}{book}{}
-       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
-       \field{extraname}{2}
-       \field{sortinit}{Š}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -765,7 +765,7 @@ my $l25 = q|    \entry{L25}{book}{}
-       \strng{authornamehash}{d7cd2c5ea0848abc3e90609558b84a45}
-       \strng{authorfullhash}{d7cd2c5ea0848abc3e90609558b84a45}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -783,7 +783,7 @@ my $l26 = q|    \entry{L26}{book}{}
-       \strng{authornamehash}{8eee1dbafdbd0a4b73157e60f18b4784}
-       \strng{authorfullhash}{8eee1dbafdbd0a4b73157e60f18b4784}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -791,7 +791,7 @@ my $l26 = q|    \entry{L26}{book}{}
- # Malformed anyway but a decent test
- my $l28 = q|    \entry{L28}{book}{}
-       \field{sortinit}{0}
--      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
-+      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
-       \warn{\item Name "Deux et al.,, O." is malformed (consecutive commas): skipping name}
-     \endentry
- |;
-@@ -810,7 +810,7 @@ my $l29 = q|    \entry{L29}{book}{}
-       \strng{authornamehash}{27ad192a3a715aa89152b2a4ee392e8c}
-       \strng{authorfullhash}{27ad192a3a715aa89152b2a4ee392e8c}
-       \field{sortinit}{U}
--      \field{sortinithash}{36a2444f5238e0dcf4bb59704df6624d}
-+      \field{sortinithash}{77a6935510e008adcf5b555e7b4f0711}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -850,7 +850,7 @@ my $l31 = q|    \entry{L31}{book}{}
-       \strng{translatornamehash}{29c3ff92fff79d09a8b44d2f775de0b1}
-       \strng{translatorfullhash}{29c3ff92fff79d09a8b44d2f775de0b1}
-       \field{sortinit}{\~{Z}}
--      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
-+      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
-       \true{uniqueprimaryauthor}
-       \field{labelnamesource}{author}
-     \endentry
-diff --git a/t/options.t b/t/options.t
-index 940a282..c14d694 100644
---- a/t/options.t
-+++ b/t/options.t
-@@ -100,7 +100,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -137,7 +137,7 @@ my $l2 = q|    \entry{L2}{book}{maxcitenames=3,maxbibnames=3,maxsortnames=3,maxi
-       \strng{authornamehash}{19eec87c959944d6d9c72434a42856ba}
-       \strng{authorfullhash}{19eec87c959944d6d9c72434a42856ba}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -169,7 +169,7 @@ my $l3 = q|    \entry{L3}{book}{blah=10}
-       \strng{authornamehash}{490250da1f3b92580d97563dc96c6c84}
-       \strng{authorfullhash}{490250da1f3b92580d97563dc96c6c84}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-diff --git a/t/related-entries.t b/t/related-entries.t
-index 53dce64..b38ac79 100644
---- a/t/related-entries.t
-+++ b/t/related-entries.t
-@@ -56,7 +56,7 @@ my $k1 = q|    \entry{key1}{article}{}
-       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
-       \field{extraname}{1}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -95,7 +95,7 @@ my $k2 = q|    \entry{key2}{inbook}{}
-       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
-       \field{extraname}{2}
-       \field{sortinit}{2}
--      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
-+      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -243,7 +243,7 @@ my $kck4 = q|    \entry{caf8e34be07426ae7127c1b4829983c1}{inbook}{dataonly,useed
- 
- my $c1 = q|    \entry{c1}{book}{}
-       \field{sortinit}{3}
--      \field{sortinithash}{a4b52e5432884761f50fb9571273b93e}
-+      \field{sortinithash}{a37a8ef248a93c322189792c34fc68c9}
-       \field{related}{9ab62b5ef34a985438bfdf7ee0102229}
-     \endentry
- |;
-@@ -330,7 +330,7 @@ my $un1 = q|    \entry{kullback}{book}{}
-       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
-       \field{extraname}{1}
-       \field{sortinit}{5}
--      \field{sortinithash}{3c19c3776b658b3558e9e2e4840c01e2}
-+      \field{sortinithash}{5dd416adbafacc8226114bc0202d5fdd}
-       \field{extradatescope}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -364,7 +364,7 @@ my $un2 = q|    \entry{kullback:related}{book}{}
-       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
-       \field{extraname}{2}
-       \field{sortinit}{6}
--      \field{sortinithash}{57e57fb8451e7fcfa45d1e069f6d3136}
-+      \field{sortinithash}{7851c86048328b027313775d8fbd2131}
-       \field{extradatescope}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/remote-files.t b/t/remote-files.t
-index c747dcd..6f4cf4d 100644
---- a/t/remote-files.t
-+++ b/t/remote-files.t
-@@ -86,7 +86,7 @@ my $cu1 = q|    \entry{citeulike:8283461}{article}{}
-       \strng{authornamehash}{a700cc0bdce78f5a1f50ff6314ff6f2a}
-       \strng{authorfullhash}{094b095bbb7ac93fdd3e2eafdcec0cac}
-       \field{sortinit}{M}
--      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
-+      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-@@ -133,7 +133,7 @@ my $dl1 = q|    \entry{AbdelbarH98}{article}{}
-       \strng{authornamehash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
-       \strng{authorfullhash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-diff --git a/t/set-dynamic.t b/t/set-dynamic.t
-index 9ab5fdd..0846f8a 100644
---- a/t/set-dynamic.t
-+++ b/t/set-dynamic.t
-@@ -51,7 +51,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{DynSet}{set}{}
-       \set{Dynamic1,Dynamic2,Dynamic3}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-     \endentry
- |;
- 
-@@ -71,7 +71,7 @@ my $string2 = q|    \entry{Dynamic1}{book}{}
-       \strng{authornamehash}{252caa7921a061ca92087a1a52f15b78}
-       \strng{authorfullhash}{252caa7921a061ca92087a1a52f15b78}
-       \field{sortinit}{8}
--      \field{sortinithash}{07edf88d4ea82509b9c4b4d13f41c452}
-+      \field{sortinithash}{1b24cab5087933ef0826a7cd3b99e994}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -98,7 +98,7 @@ my $string3 = q|    \entry{Dynamic2}{book}{}
-       \strng{authornamehash}{894a5fe6de820f5dcce84a65581667f4}
-       \strng{authorfullhash}{894a5fe6de820f5dcce84a65581667f4}
-       \field{sortinit}{9}
--      \field{sortinithash}{1dd72ab054147731c9d824b49aba0534}
-+      \field{sortinithash}{54047ffb55bdefa0694bbd554c1b11a0}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -124,7 +124,7 @@ my $string4 = q|    \entry{Dynamic3}{book}{}
-       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -151,7 +151,7 @@ my $string5 = q|    \entry{Dynamic3}{book}{}
-       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/set-legacy.t b/t/set-legacy.t
-index 4e56991..9d40acb 100644
---- a/t/set-legacy.t
-+++ b/t/set-legacy.t
-@@ -45,7 +45,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{Elias1955}{set}{}
-       \set{Elias1955a,Elias1955b}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-     \endentry
- |;
- 
-diff --git a/t/set-static.t b/t/set-static.t
-index 1e45d4d..a6cbe73 100644
---- a/t/set-static.t
-+++ b/t/set-static.t
-@@ -47,7 +47,7 @@ my $out = $biber->get_output_obj;
- my $string1 = q|    \entry{Static1}{set}{}
-       \set{Static2,Static4,Static3}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{annotation}{Some notes}
-     \endentry
- |;
-@@ -68,7 +68,7 @@ my $string2 = q|    \entry{Static2}{book}{}
-       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
-       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
-       \field{sortinit}{B}
--      \field{sortinithash}{276475738cc058478c1677046f857703}
-+      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -94,7 +94,7 @@ my $string3 = q|    \entry{Static3}{book}{}
-       \strng{authornamehash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
-       \strng{authorfullhash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -119,7 +119,7 @@ my $string4 = q|    \entry{Static4}{book}{}
-       \strng{authornamehash}{da80091c8cd89e5269bd55af1bd5d2fa}
-       \strng{authorfullhash}{da80091c8cd89e5269bd55af1bd5d2fa}
-       \field{sortinit}{C}
--      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
-+      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -145,7 +145,7 @@ my $string5 = q|    \entry{Static2}{book}{}
-       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
-       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
-       \field{sortinit}{1}
--      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
-+      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/skips.t b/t/skips.t
-index 7c80d39..caa835f 100644
---- a/t/skips.t
-+++ b/t/skips.t
-@@ -50,7 +50,7 @@ my $set1 = q|    \entry{seta}{set}{}
-       \field{labelalpha}{Doe10}
-       \field{extraalpha}{1}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-     \endentry
- |;
- 
-@@ -70,7 +70,7 @@ my $set2 = q|    \entry{set:membera}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -97,7 +97,7 @@ my $set3 = q|    \entry{set:memberb}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -123,7 +123,7 @@ my $set4 = q|    \entry{set:memberc}{book}{}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -150,7 +150,7 @@ my $noset1 = q|    \entry{noseta}{book}{}
-       \field{extraname}{3}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{2}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -180,7 +180,7 @@ my $noset2 = q|    \entry{nosetb}{book}{}
-       \field{extraname}{4}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{3}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -210,7 +210,7 @@ my $noset3 = q|    \entry{nosetc}{book}{}
-       \field{extraname}{5}
-       \field{labelalpha}{Doe10}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extradate}{4}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-@@ -244,7 +244,7 @@ my $sk4 = q|    \entry{skip4}{article}{dataonly}
-       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{labeldatesource}{year}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/sort-complex.t b/t/sort-complex.t
-index aa3e564..d52db08 100644
---- a/t/sort-complex.t
-+++ b/t/sort-complex.t
-@@ -123,7 +123,7 @@ my $l4 = q|    \entry{L4}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Doe\textbf{+}95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -155,7 +155,7 @@ my $l1 = q|    \entry{L1}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -187,7 +187,7 @@ my $l2 = q|    \entry{L2}{book}{}
-       \field{extraname}{3}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{3}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -219,7 +219,7 @@ my $l3 = q|    \entry{L3}{book}{}
-       \field{extraname}{2}
-       \field{labelalpha}{Doe95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{2}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -253,7 +253,7 @@ my $l5 = q|    \entry{L5}{book}{}
-       \field{extraname}{1}
-       \field{labelalpha}{Doe\textbf{+}95}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \field{extraalpha}{1}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/tdata/full-bbl.bbl b/t/tdata/full-bbl.bbl
-index 4f168de..07c2fab 100644
---- a/t/tdata/full-bbl.bbl
-+++ b/t/tdata/full-bbl.bbl
-@@ -36,7 +36,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -63,7 +63,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{A}
--      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
-+      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-@@ -90,7 +90,7 @@
-       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
-       \field{labelalpha}{\emph{A}}
-       \field{sortinit}{D}
--      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
-+      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
-       \true{singletitle}
-       \field{labelnamesource}{author}
-       \field{labeltitlesource}{title}
-diff --git a/t/tdata/full-bblxml.bblxml b/t/tdata/full-bblxml.bblxml
-index 9eea7d1..a39a787 100644
---- a/t/tdata/full-bblxml.bblxml
-+++ b/t/tdata/full-bblxml.bblxml
-@@ -47,7 +47,7 @@
-         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
-         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
-@@ -79,7 +79,7 @@
-         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
-         <bbl:field name="labelalpha">Ang02</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
-@@ -109,7 +109,7 @@
-         </bbl:set>
-         <bbl:field name="labelalpha">Gla61</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
-       </bbl:entry>
-       <bbl:entry key="stdmodel:glashow" type="article">
-@@ -129,7 +129,7 @@
-         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
-@@ -168,7 +168,7 @@
-         <bbl:field name="extraname">1</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">1</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -207,7 +207,7 @@
-         <bbl:field name="extraname">2</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">2</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -236,7 +236,7 @@
-         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
-         <bbl:field name="labelalpha">Ree58</bbl:field>
-         <bbl:field name="sortinit">R</bbl:field>
--        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
-+        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
-@@ -286,7 +286,7 @@
-         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
-@@ -317,7 +317,7 @@
-         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
-         <bbl:field name="labelalpha">Sho91</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
-@@ -353,7 +353,7 @@
-         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="sortinit">W</bbl:field>
--        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
-+        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
-@@ -411,7 +411,7 @@
-         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
-         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
-@@ -443,7 +443,7 @@
-         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
-         <bbl:field name="labelalpha">Ang02</bbl:field>
-         <bbl:field name="sortinit">A</bbl:field>
--        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
-+        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
-@@ -473,7 +473,7 @@
-         </bbl:set>
-         <bbl:field name="labelalpha">Gla61</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
-       </bbl:entry>
-       <bbl:entry key="stdmodel:glashow" type="article">
-@@ -493,7 +493,7 @@
-         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
-         <bbl:field name="sortinit">G</bbl:field>
--        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
-+        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
-@@ -532,7 +532,7 @@
-         <bbl:field name="extraname">1</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">1</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -571,7 +571,7 @@
-         <bbl:field name="extraname">2</bbl:field>
-         <bbl:field name="labelalpha">Knu86</bbl:field>
-         <bbl:field name="sortinit">K</bbl:field>
--        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
-+        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
-         <bbl:field name="extraalpha">2</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
-@@ -600,7 +600,7 @@
-         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
-         <bbl:field name="labelalpha">Ree58</bbl:field>
-         <bbl:field name="sortinit">R</bbl:field>
--        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
-+        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
-@@ -650,7 +650,7 @@
-         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
-@@ -681,7 +681,7 @@
-         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
-         <bbl:field name="labelalpha">Sho91</bbl:field>
-         <bbl:field name="sortinit">S</bbl:field>
--        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
-+        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
-@@ -717,7 +717,7 @@
-         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
-         <bbl:field name="sortinit">W</bbl:field>
--        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
-+        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
-         <bbl:field name="labelnamesource">author</bbl:field>
-         <bbl:field name="labeltitlesource">title</bbl:field>
-         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
-diff --git a/t/tdata/remote-files.bcf b/t/tdata/remote-files.bcf
-index c2d784b..a2a1842 100644
---- a/t/tdata/remote-files.bcf
-+++ b/t/tdata/remote-files.bcf
-@@ -1853,12 +1853,12 @@
-     <bcf:datasource type="file" datatype="bibtex">http://www.citeulike.org/bibtex/group/8082</bcf:datasource>
-     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/definitions.bib</bcf:datasource>
-     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/papers.bib</bcf:datasource>
--    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/II22KQ7D?format=bibtex&amp;limit=1</bcf:datasource>
-+    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/8VITAT46?format=bibtex&amp;limit=1</bcf:datasource>
-   </bcf:bibdata>
-   <bcf:section number="0">
-     <bcf:citekey order="1">citeulike:8283461</bcf:citekey>
-     <bcf:citekey order="2">AbdelbarH98</bcf:citekey>
--    <bcf:citekey order="3">merleau-ponty_philosophe_2010</bcf:citekey>
-+    <bcf:citekey order="3">crossley_politics_1994</bcf:citekey>
-   </bcf:section>
-   <!-- SORTING TEMPLATES -->
-   <bcf:sortingtemplate name="nty">
-diff --git a/t/uniqueness-nameparts.t b/t/uniqueness-nameparts.t
-index beb2e39..1fb65a8 100644
---- a/t/uniqueness-nameparts.t
-+++ b/t/uniqueness-nameparts.t
-@@ -81,7 +81,7 @@ my $un1 = q|    \entry{un1}{article}{}
-       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -106,7 +106,7 @@ my $un2 = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -131,7 +131,7 @@ my $un3 = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -156,7 +156,7 @@ my $un4 = q|    \entry{un4}{article}{}
-       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -181,7 +181,7 @@ my $un1a = q|    \entry{un1}{article}{}
-       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -206,7 +206,7 @@ my $un2a = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -231,7 +231,7 @@ my $un3a = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -257,7 +257,7 @@ my $un4a = q|    \entry{un4}{article}{}
-       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -285,7 +285,7 @@ my $un1b = q|    \entry{un1}{article}{}
-       \field{extraname}{5}
-       \field{labelalpha}{SmiJohSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{5}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -311,7 +311,7 @@ my $un2b = q|    \entry{un2}{article}{}
-       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
-       \field{labelalpha}{SmiJohAla}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -336,7 +336,7 @@ my $un3b = q|    \entry{un3}{article}{}
-       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
-       \field{labelalpha}{SmiJohArt}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{labelnamesource}{author}
-     \endentry
- |;
-@@ -364,7 +364,7 @@ my $un4b = q|    \entry{un4}{article}{}
-       \field{extraname}{1}
-       \field{labelalpha}{SmiAlaSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{1}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -393,7 +393,7 @@ my $un5 = q|    \entry{un5}{article}{uniquenametemplatename=test3}
-       \field{extraname}{2}
-       \field{labelalpha}{SmiArtSim}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{2}
-       \field{labelnamesource}{author}
-     \endentry
-@@ -422,7 +422,7 @@ my $un6 = q|    \entry{un6}{article}{}
-       \field{extraname}{3}
-       \field{labelalpha}{SmiArtSmy}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{3}
-       \field{labelnamesource}{author}
-     \\endentry
-@@ -451,7 +451,7 @@ my $un7 = q|    \entry{un7}{article}{}
-       \field{extraname}{4}
-       \field{labelalpha}{SmiArtSme}
-       \field{sortinit}{S}
--      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
-+      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
-       \field{extradate}{4}
-       \field{labelnamesource}{author}
-     \endentry
-diff --git a/t/xdata.t b/t/xdata.t
-index 7411b1d..73dcb8b 100644
---- a/t/xdata.t
-+++ b/t/xdata.t
-@@ -75,7 +75,7 @@ my $xd1 = q|    \entry{xd1}{book}{}
-       \strng{authorfullhash}{51db4bfd331cba22959ce2d224c517cd}
-       \field{extraname}{2}
-       \field{sortinit}{E}
--      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
-+      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
-@@ -107,7 +107,7 @@ my $xd2 = q|    \entry{xd2}{book}{}
-       \strng{authornamehash}{68539e0ce4922cc4957c6cabf35e6fc8}
-       \strng{authorfullhash}{68539e0ce4922cc4957c6cabf35e6fc8}
-       \field{sortinit}{P}
--      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
-+      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
-       \field{extradatescope}{labelyear}
-       \field{labeldatesource}{}
-       \field{labelnamesource}{author}
diff --git a/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch b/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch
new file mode 100644
index 0000000000..1fd3d3d9b7
--- /dev/null
+++ b/gnu/packages/patches/binutils-2.37-file-descriptor-leak.patch
@@ -0,0 +1,231 @@
+From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Mon, 26 Jul 2021 05:59:55 -0700
+Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd
+
+Close the file descriptor if there is no archive plugin file descriptor
+to avoid running out of file descriptors on thin archives with many
+archive members.
+
+bfd/
+
+	PR ld/28138
+	* plugin.c (bfd_plugin_close_file_descriptor): Close the file
+	descriptor there is no archive plugin file descriptor.
+
+ld/
+
+	PR ld/28138
+	* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
+	native build.
+
+	PR ld/28138
+	* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
+	* testsuite/ld-plugin/pr28138.c: New file.
+	* testsuite/ld-plugin/pr28138-1.c: Likewise.
+	* testsuite/ld-plugin/pr28138-2.c: Likewise.
+	* testsuite/ld-plugin/pr28138-3.c: Likewise.
+	* testsuite/ld-plugin/pr28138-4.c: Likewise.
+	* testsuite/ld-plugin/pr28138-5.c: Likewise.
+	* testsuite/ld-plugin/pr28138-6.c: Likewise.
+	* testsuite/ld-plugin/pr28138-7.c: Likewise.
+
+(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)
+(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)
+---
+ bfd/plugin.c                       |  8 +++++++
+ ld/testsuite/ld-plugin/lto.exp     | 34 ++++++++++++++++++++++++++++++
+ ld/testsuite/ld-plugin/pr28138-1.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-2.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-3.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-4.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-5.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-6.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138-7.c |  6 ++++++
+ ld/testsuite/ld-plugin/pr28138.c   | 20 ++++++++++++++++++
+ 10 files changed, 104 insertions(+)
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c
+ create mode 100644 ld/testsuite/ld-plugin/pr28138.c
+
+diff --git a/bfd/plugin.c b/bfd/plugin.c
+index 6cfa2b66470..3bab8febe88 100644
+--- a/bfd/plugin.c
++++ b/bfd/plugin.c
+@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
+ 	     && !bfd_is_thin_archive (abfd->my_archive))
+ 	abfd = abfd->my_archive;
+ 
++      /* Close the file descriptor if there is no archive plugin file
++	 descriptor.  */
++      if (abfd->archive_plugin_fd == -1)
++	{
++	  close (fd);
++	  return;
++	}
++
+       abfd->archive_plugin_fd_open_count--;
+       /* Dup the archive plugin file descriptor for later use, which
+ 	 will be closed by _bfd_archive_close_and_cleanup.  */
+diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
+index def69e43ab3..999d911ce6a 100644
+--- a/ld/testsuite/ld-plugin/lto.exp
++++ b/ld/testsuite/ld-plugin/lto.exp
+@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {
+     }
+ }
+ 
++run_cc_link_tests [list \
++    [list \
++	"Build pr28138.a" \
++	"-T" "" \
++	{pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \
++	 pr28138-6.c pr28138-7.c} {} "pr28138.a" \
++    ] \
++    [list \
++	"Build pr28138.o" \
++	"" "" \
++	{pr28138.c} {} \
++    ] \
++]
++
++set exec_output [run_host_cmd "sh" \
++			      "-c \"ulimit -n 20; \
++			      $CC -Btmpdir/ld -o tmpdir/pr28138 \
++			      tmpdir/pr28138.o tmpdir/pr28138.a\""]
++set exec_output [prune_warnings $exec_output]
++if [string match "" $exec_output] then {
++    if { [isnative] } {
++	set exec_output [run_host_cmd "tmpdir/pr28138" ""]
++	if [string match "PASS" $exec_output] then {
++	    pass "PR ld/28138"
++	} else {
++	    fail "PR ld/28138"
++	}
++    } else {
++	pass "PR ld/28138"
++    }
++} else {
++    fail "PR ld/28138"
++}
++
+ set testname "Build liblto-11.a"
+ remote_file host delete "tmpdir/liblto-11.a"
+ set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
+diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c
+new file mode 100644
+index 00000000000..51d119e1642
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-1.c
+@@ -0,0 +1,6 @@
++extern int a0(void);
++int
++a1(void)
++{
++  return 1 + a0();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c
+new file mode 100644
+index 00000000000..1120cd797e9
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-2.c
+@@ -0,0 +1,6 @@
++extern int a1(void);
++int
++a2(void)
++{
++  return 1 + a1();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c
+new file mode 100644
+index 00000000000..ec464947ee6
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-3.c
+@@ -0,0 +1,6 @@
++extern int a2(void);
++int
++a3(void)
++{
++  return 1 + a2();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c
+new file mode 100644
+index 00000000000..475701b2c5c
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-4.c
+@@ -0,0 +1,6 @@
++extern int a3(void);
++int
++a4(void)
++{
++  return 1 + a3();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c
+new file mode 100644
+index 00000000000..e24f86c363e
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-5.c
+@@ -0,0 +1,6 @@
++extern int a4(void);
++int
++a5(void)
++{
++  return 1 + a4();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c
+new file mode 100644
+index 00000000000..b5b938bdb21
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-6.c
+@@ -0,0 +1,6 @@
++extern int a5(void);
++int
++a6(void)
++{
++  return 1 + a5();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c
+new file mode 100644
+index 00000000000..4ef75bf0f0c
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138-7.c
+@@ -0,0 +1,6 @@
++extern int a6(void);
++int
++a7(void)
++{
++  return 1 + a6();
++}
+diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c
+new file mode 100644
+index 00000000000..68252c9f382
+--- /dev/null
++++ b/ld/testsuite/ld-plugin/pr28138.c
+@@ -0,0 +1,20 @@
++#include <stdio.h>
++
++extern int a7(void);
++
++int
++a0(void)
++{
++  return 0;
++}
++
++int
++main()
++{
++  if (a7() == 7)
++    {
++      printf ("PASS\n");
++      return 0;
++    }
++  return 1;
++}
+-- 
+2.27.0
diff --git a/gnu/packages/patches/binutils-loongson-workaround.patch b/gnu/packages/patches/binutils-loongson-workaround.patch
index f43572a53d..f05d6c3c96 100644
--- a/gnu/packages/patches/binutils-loongson-workaround.patch
+++ b/gnu/packages/patches/binutils-loongson-workaround.patch
@@ -4,22 +4,22 @@ Patch by Mark H Weaver <mhw@netris.org>.
 
 --- binutils/gas/config/tc-mips.c.orig	2012-09-04 10:21:03.000000000 -0400
 +++ binutils/gas/config/tc-mips.c	2013-10-06 02:23:21.651983768 -0400
-@@ -910,10 +910,10 @@
+@@ -934,10 +934,10 @@ enum fix_vr4120_class
  };
  
  /* ...likewise -mfix-loongson2f-jump.  */
--static bfd_boolean mips_fix_loongson2f_jump;
-+static bfd_boolean mips_fix_loongson2f_jump = FALSE;
+-static bool mips_fix_loongson2f_jump;
++static bool mips_fix_loongson2f_jump = FALSE;
  
  /* ...likewise -mfix-loongson2f-nop.  */
--static bfd_boolean mips_fix_loongson2f_nop;
-+static bfd_boolean mips_fix_loongson2f_nop = TRUE;
+-static bool mips_fix_loongson2f_nop;
++static bool mips_fix_loongson2f_nop = TRUE;
  
  /* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed.  */
- static bfd_boolean mips_fix_loongson2f;
+ static bool mips_fix_loongson2f;
 --- binutils/gas/testsuite/gas/mips/mips.exp.orig	2012-09-04 10:17:13.000000000 -0400
 +++ binutils/gas/testsuite/gas/mips/mips.exp	2013-10-06 02:23:21.663983768 -0400
-@@ -91,6 +91,12 @@
+@@ -110,6 +110,12 @@ proc mips_arch_init {} {
  
      # Catch because the variable won't be set the first time through.
      catch {unset mips_arches}
diff --git a/gnu/packages/patches/binutils-mingw-w64-timestamp.patch b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
index b785043b62..fcfe4a36aa 100644
--- a/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
+++ b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
@@ -4,14 +4,14 @@ https://salsa.debian.org/mingw-w64-team/binutils-mingw-w64.git
 
 Invoke the following in the aforementioned repo to see the original patch:
 
-  $ git show da63f6b:debian/patches/specify-timestamp.patch
+  $ git show faf7c64:debian/patches/specify-timestamp.patch
 
 Description: Allow the PE timestamp to be specified
 Author: Stephen Kitt <skitt@debian.org>
 
 --- a/bfd/peXXigen.c
 +++ b/bfd/peXXigen.c
-@@ -70,6 +70,9 @@
+@@ -77,6 +77,9 @@
  #include <wctype.h>
  #endif
  
@@ -21,20 +21,20 @@ Author: Stephen Kitt <skitt@debian.org>
  /* NOTE: it's strange to be including an architecture specific header
     in what's supposed to be general (to PE/PEI) code.  However, that's
     where the definitions are, and they don't vary per architecture
-@@ -879,10 +882,38 @@
+@@ -876,9 +879,36 @@
  
    /* Use a real timestamp by default, unless the no-insert-timestamp
       option was chosen.  */
--  if ((pe_data (abfd)->insert_timestamp))
+-  if ((pe_data (abfd)->timestamp) == -1)
 -    H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
 -  else
-+  if (pe_data (abfd)->insert_timestamp) {
++  if ((pe_data (abfd)->timestamp) == -1) {
 +    time_t now;
 +    char *source_date_epoch;
 +    unsigned long long epoch;
 +    char *endptr;
 +
-+    now = time(NULL);
++    now = time (NULL);
 +    source_date_epoch = getenv("SOURCE_DATE_EPOCH");
 +    if (source_date_epoch) {
 +      errno = 0;
@@ -57,30 +57,29 @@ Author: Stephen Kitt <skitt@debian.org>
 +      }
 +    }
 +    H_PUT_32 (abfd, now, filehdr_out->f_timdat);
-+  } else {
-     H_PUT_32 (abfd, 0, filehdr_out->f_timdat);
-+  }
++  } else
+     H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat);
  
    PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
- 		      filehdr_out->f_symptr);
 --- a/ld/pe-dll.c
 +++ b/ld/pe-dll.c
-@@ -26,6 +26,8 @@
- #include "filenames.h"
+@@ -27,6 +27,8 @@
  #include "safe-ctype.h"
+ #include "ctf-api.h"
  
 +#include <errno.h>
 +#include <limits.h>
  #include <time.h>
  
  #include "ld.h"
-@@ -1202,8 +1204,36 @@
+@@ -1218,9 +1220,36 @@
  
    memset (edata_d, 0, edata_sz);
  
--  if (pe_data (abfd)->insert_timestamp)
+-  if (pe_data (abfd)->timestamp == -1)
 -    H_PUT_32 (abfd, time (0), edata_d + 4);
-+  if (pe_data (abfd)->insert_timestamp) {
+-  else
++  if (pe_data (abfd)->timestamp == -1) {
 +    time_t now;
 +    char *source_date_epoch;
 +    unsigned long long epoch;
@@ -109,13 +108,13 @@ Author: Stephen Kitt <skitt@debian.org>
 +      }
 +    }
 +    H_PUT_32 (abfd, now, edata_d + 4);
-+  }
++  } else
+     H_PUT_32 (abfd, pe_data (abfd)->timestamp, edata_d + 4);
  
    if (pe_def_file->version_major != -1)
-     {
 --- a/ld/emultempl/pe.em
 +++ b/ld/emultempl/pe.em
-@@ -303,7 +303,7 @@
+@@ -304,7 +304,7 @@
       OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
      {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
      {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
@@ -126,7 +125,7 @@ Author: Stephen Kitt <skitt@debian.org>
      /* getopt allows abbreviations, so we do this to stop it
 --- a/ld/emultempl/pep.em
 +++ b/ld/emultempl/pep.em
-@@ -321,7 +321,7 @@
+@@ -323,7 +323,7 @@
      {"no-bind", no_argument, NULL, OPTION_NO_BIND},
      {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
      {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
@@ -134,4 +133,4 @@ Author: Stephen Kitt <skitt@debian.org>
 +    {"insert-timestamp", optional_argument, NULL, OPTION_INSERT_TIMESTAMP},
      {"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP},
      {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
-     {NULL, no_argument, NULL, 0}
+     {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION},
diff --git a/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
new file mode 100644
index 0000000000..0629212688
--- /dev/null
+++ b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
@@ -0,0 +1,126 @@
+Description: Move tests that trigger -Warray-bounds to separate compilation unit
+ GCC 10 is now smart enough to detect violation of array boundaries that tests
+ are actually tested. Along with -Werror this led to tests failure, so I move
+ such tests to another compilation unit to have the warning deactivated for
+ only these tests.
+Bug-Debian: https://bugs.debian.org/966895
+Author: Nicholas Guriev <guriev-ns@ya.ru>
+Last-Modified: Wed, 19 Aug 2020 08:55:52 +0300
+
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -179,6 +179,7 @@ add_gsl_test(owner_tests)
+ add_gsl_test(byte_tests)
+ add_gsl_test(algorithm_tests)
+ add_gsl_test(strict_notnull_tests)
++add_gsl_test(array_bounds)
+ 
+ 
+ # No exception tests
+--- /dev/null
++++ b/tests/array_bounds.cpp
+@@ -0,0 +1,68 @@
++///////////////////////////////////////////////////////////////////////////////
++//
++// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
++//
++// This code is licensed under the MIT License (MIT).
++//
++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++// THE SOFTWARE.
++//
++///////////////////////////////////////////////////////////////////////////////
++
++#ifdef __GNUC__
++#pragma GCC diagnostic warning "-Warray-bounds"
++#endif // __GNUC__
++
++#include <gtest/gtest.h>
++
++#include <gsl/multi_span> // for gsl::multi_span
++
++namespace gsl
++{
++struct fail_fast;
++} // namespace gsl
++
++namespace
++{
++static constexpr char deathstring[] = "Expected Death";
++} // namespace
++
++TEST(array_bounds, subspan_from_multi_span_test)
++{
++    int arr[5] = {1, 2, 3, 4, 5};
++    gsl::multi_span<int> av = arr;
++
++    std::set_terminate([] {
++        std::cerr << "Expected Death. subspan";
++        std::abort();
++    });
++
++    EXPECT_DEATH(av.subspan(6).length(), deathstring);
++}
++
++TEST(array_bounds, strided_span_bounds_from_strided_span_tests)
++{
++    int arr[] = {0, 1, 2, 3};
++    gsl::multi_span<int> av(arr);
++
++    std::set_terminate([] {
++        std::cerr << "Expected Death. strided_span_bounds";
++        std::abort();
++    });
++
++    // incorrect sections
++    EXPECT_DEATH(av.section(0, 0)[0], deathstring);
++    EXPECT_DEATH(av.section(1, 0)[0], deathstring);
++    EXPECT_DEATH(av.section(1, 1)[1], deathstring);
++
++    EXPECT_DEATH(av.section(2, 5), deathstring);
++    EXPECT_DEATH(av.section(5, 2), deathstring);
++    EXPECT_DEATH(av.section(5, 0), deathstring);
++    EXPECT_DEATH(av.section(0, 5), deathstring);
++    EXPECT_DEATH(av.section(5, 5), deathstring);
++}
+--- a/tests/multi_span_tests.cpp
++++ b/tests/multi_span_tests.cpp
+@@ -1042,10 +1042,6 @@ TEST(multi_span_test, subspan)
+         EXPECT_TRUE(av.subspan(1).length() == 4);
+         EXPECT_TRUE(av.subspan(4).length() == 1);
+         EXPECT_TRUE(av.subspan(5).length() == 0);
+-        // Disabled test instead of fixing since multi_span is deprecated. (PR#835)
+-#if !(defined(__GNUC__) && __GNUC__ == 8)
+-        EXPECT_DEATH(av.subspan(6).length(), deathstring);
+-#endif
+         auto av2 = av.subspan(1);
+         for (int i = 0; i < 4; ++i) EXPECT_TRUE(av2[i] == i + 2);
+     }
+--- a/tests/strided_span_tests.cpp
++++ b/tests/strided_span_tests.cpp
+@@ -403,20 +403,6 @@ TEST(strided_span_tests, strided_span_bo
+     });
+ 
+     {
+-        // incorrect sections
+-
+-        EXPECT_DEATH(av.section(0, 0)[0], deathstring);
+-        EXPECT_DEATH(av.section(1, 0)[0], deathstring);
+-        EXPECT_DEATH(av.section(1, 1)[1], deathstring);
+-
+-        EXPECT_DEATH(av.section(2, 5), deathstring);
+-        EXPECT_DEATH(av.section(5, 2), deathstring);
+-        EXPECT_DEATH(av.section(5, 0), deathstring);
+-        EXPECT_DEATH(av.section(0, 5), deathstring);
+-        EXPECT_DEATH(av.section(5, 5), deathstring);
+-    }
+-
+-    {
+         // zero stride
+         strided_span<int, 1> sav{av, {{4}, {}}};
+         EXPECT_TRUE(sav[0] == 0);
diff --git a/gnu/packages/patches/cdrkit-libre-cross-compile.patch b/gnu/packages/patches/cdrkit-libre-cross-compile.patch
new file mode 100644
index 0000000000..09c34b8c0a
--- /dev/null
+++ b/gnu/packages/patches/cdrkit-libre-cross-compile.patch
@@ -0,0 +1,32 @@
+Patch extracted from a set of patches to cross-compile ffmeg and dependencies for mingw-w64.
+https://github.com/Warblefly/MultimediaTools-mingw-w64/commit/01e30a17637b67afd65c1e24302f8daf94b19b32#diff-503bd595ad2a49840cc56acdb3432487a20a0acb7981ce83be51fe311216de8f
+
+diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
+index 99a69fd..e5ba8a7 100644
+--- a/include/CMakeLists.txt
++++ b/include/CMakeLists.txt
+@@ -35,8 +35,6 @@ endif(VA_LIST_IS_ARRAY)
+ INCLUDE(TestBigEndian)
+ TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+ 
+-TRY_RUN(BITFIELDS_HTOL TEST_DUMMY ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/test_BITFIELDS_HTOL.c)
+-
+ INCLUDE(CheckIncludeFiles)
+ 
+ #SET(CMAKE_REQUIRED_INCLUDES "/usr/include;/usr/local/include")
+diff --git a/include/xconfig.h.in b/include/xconfig.h.in
+index c130600..476c00b 100644
+--- a/include/xconfig.h.in
++++ b/include/xconfig.h.in
+@@ -233,7 +233,11 @@
+ /* If using network byte order             */
+ #cmakedefine WORDS_BIGENDIAN
+ /* If high bits come first in structures   */
+-#cmakedefine BITFIELDS_HTOL
++#ifdef WORDS_BIGENDIAN
++#define BITFIELDS_HTOL
++#else
++#define BITFIELDS_LTOH
++#endif
+ #define	HAVE_C_BIGENDIAN	/* Flag that WORDS_BIGENDIAN test was done */
+ #define	HAVE_C_BITFIELDS	/* Flag that BITFIELDS_HTOL test was done  */
diff --git a/gnu/packages/patches/ceph-boost-compat.patch b/gnu/packages/patches/ceph-boost-compat.patch
new file mode 100644
index 0000000000..1aecfbbed5
--- /dev/null
+++ b/gnu/packages/patches/ceph-boost-compat.patch
@@ -0,0 +1,18 @@
+Add extra includes required for Boost 1.75 and later.
+
+Taken from upstram:
+
+  https://github.com/ceph/ceph/commit/ebf3a0398f18eab67d2ba25e6a10b41ff140f6a4
+
+diff --git a/src/rgw/rgw_string.h b/src/rgw/rgw_string.h
+index 257daa9c1fe6e..90e64f98a2587 100644
+--- a/src/rgw/rgw_string.h
++++ b/src/rgw/rgw_string.h
+@@ -8,5 +8,7 @@
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <string_view>
++#include <string>
++#include <stdexcept>
+ 
+ #include <boost/container/small_vector.hpp>
diff --git a/gnu/packages/patches/ceph-fix-snappy-breaking-change.patch b/gnu/packages/patches/ceph-fix-snappy-breaking-change.patch
deleted file mode 100644
index 7a10e2e4ae..0000000000
--- a/gnu/packages/patches/ceph-fix-snappy-breaking-change.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Patch tracked upstream at https://tracker.ceph.com/issues/50934
-
---- a/src/compressor/snappy/SnappyCompressor.h
-+++ b/src/compressor/snappy/SnappyCompressor.h
-@@ -96,7 +96,7 @@ class SnappyCompressor : public Compressor {
-     if (qat_enabled)
-       return qat_accel.decompress(p, compressed_len, dst);
- #endif
--    snappy::uint32 res_len = 0;
-+    uint32_t res_len = 0;
-     BufferlistSource source_1(p, compressed_len);
-     if (!snappy::GetUncompressedLength(&source_1, &res_len)) {
-       return -1;
diff --git a/gnu/packages/patches/ceph-rocksdb-compat.patch b/gnu/packages/patches/ceph-rocksdb-compat.patch
new file mode 100644
index 0000000000..9fb9b0caeb
--- /dev/null
+++ b/gnu/packages/patches/ceph-rocksdb-compat.patch
@@ -0,0 +1,303 @@
+Adjust for newer versions of RocksDB.
+
+Taken from upstream:
+
+  https://github.com/ceph/ceph/pull/42815
+  https://github.com/ceph/ceph/commit/ff7f192ea3cf88ca1098bcf9396ff4f8ed1e8792.diff
+
+diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.cc b/src/kv/rocksdb_cache/BinnedLRUCache.cc
+index 0d657883e92de..47c56e2ddd769 100644
+--- a/src/kv/rocksdb_cache/BinnedLRUCache.cc
++++ b/src/kv/rocksdb_cache/BinnedLRUCache.cc
+@@ -151,13 +151,20 @@ void BinnedLRUCacheShard::EraseUnRefEntries() {
+   }
+ }
+ 
+-void BinnedLRUCacheShard::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                           bool thread_safe) {
++void BinnedLRUCacheShard::ApplyToAllCacheEntries(
++  const std::function<void(const rocksdb::Slice& key,
++                           void* value,
++                           size_t charge,
++                           DeleterFn)>& callback,
++  bool thread_safe)
++{
+   if (thread_safe) {
+     mutex_.lock();
+   }
+   table_.ApplyToAllCacheEntries(
+-      [callback](BinnedLRUHandle* h) { callback(h->value, h->charge); });
++    [callback](BinnedLRUHandle* h) {
++      callback(h->key(), h->value, h->charge, h->deleter);
++    });
+   if (thread_safe) {
+     mutex_.unlock();
+   }
+@@ -345,7 +352,7 @@ bool BinnedLRUCacheShard::Release(rocksdb::Cache::Handle* handle, bool force_era
+ 
+ rocksdb::Status BinnedLRUCacheShard::Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                              size_t charge,
+-                             void (*deleter)(const rocksdb::Slice& key, void* value),
++                             DeleterFn deleter,
+                              rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) {
+   auto e = new BinnedLRUHandle();
+   rocksdb::Status s;
+@@ -464,6 +471,12 @@ std::string BinnedLRUCacheShard::GetPrintableOptions() const {
+   return std::string(buffer);
+ }
+ 
++DeleterFn BinnedLRUCacheShard::GetDeleter(rocksdb::Cache::Handle* h) const
++{
++  auto* handle = reinterpret_cast<BinnedLRUHandle*>(h);
++  return handle->deleter;
++}
++
+ BinnedLRUCache::BinnedLRUCache(CephContext *c, 
+                                size_t capacity, 
+                                int num_shard_bits,
+@@ -519,6 +532,13 @@ void BinnedLRUCache::DisownData() {
+ #endif  // !__SANITIZE_ADDRESS__
+ }
+ 
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++DeleterFn BinnedLRUCache::GetDeleter(Handle* handle) const
++{
++  return reinterpret_cast<const BinnedLRUHandle*>(handle)->deleter;
++}
++#endif
++
+ size_t BinnedLRUCache::TEST_GetLRUSize() {
+   size_t lru_size_of_all_shards = 0;
+   for (int i = 0; i < num_shards_; i++) {
+diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.h b/src/kv/rocksdb_cache/BinnedLRUCache.h
+index 85608be0e5734..88bf4502e8927 100644
+--- a/src/kv/rocksdb_cache/BinnedLRUCache.h
++++ b/src/kv/rocksdb_cache/BinnedLRUCache.h
+@@ -56,7 +56,7 @@ std::shared_ptr<rocksdb::Cache> NewBinnedLRUCache(
+ 
+ struct BinnedLRUHandle {
+   void* value;
+-  void (*deleter)(const rocksdb::Slice&, void* value);
++  DeleterFn deleter;
+   BinnedLRUHandle* next_hash;
+   BinnedLRUHandle* next;
+   BinnedLRUHandle* prev;
+@@ -189,7 +189,7 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
+   // Like Cache methods, but with an extra "hash" parameter.
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                         size_t charge,
+-                        void (*deleter)(const rocksdb::Slice& key, void* value),
++                        DeleterFn deleter,
+                         rocksdb::Cache::Handle** handle,
+                         rocksdb::Cache::Priority priority) override;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) override;
+@@ -205,13 +205,19 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
+   virtual size_t GetUsage() const override;
+   virtual size_t GetPinnedUsage() const override;
+ 
+-  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                      bool thread_safe) override;
++  virtual void ApplyToAllCacheEntries(
++    const std::function<void(const rocksdb::Slice& key,
++                             void* value,
++                             size_t charge,
++                             DeleterFn)>& callback,
++    bool thread_safe) override;
+ 
+   virtual void EraseUnRefEntries() override;
+ 
+   virtual std::string GetPrintableOptions() const override;
+ 
++  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const override;
++
+   void TEST_GetLRUList(BinnedLRUHandle** lru, BinnedLRUHandle** lru_low_pri);
+ 
+   //  Retrieves number of elements in LRU, for unit test purpose only
+@@ -304,7 +310,9 @@ class BinnedLRUCache : public ShardedCache {
+   virtual size_t GetCharge(Handle* handle) const override;
+   virtual uint32_t GetHash(Handle* handle) const override;
+   virtual void DisownData() override;
+-
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual DeleterFn GetDeleter(Handle* handle) const override;
++#endif
+   //  Retrieves number of elements in LRU, for unit test purpose only
+   size_t TEST_GetLRUSize();
+   // Sets the high pri pool ratio
+diff --git a/src/kv/rocksdb_cache/ShardedCache.cc b/src/kv/rocksdb_cache/ShardedCache.cc
+index 367140a94d8be..6cbd89ad6472c 100644
+--- a/src/kv/rocksdb_cache/ShardedCache.cc
++++ b/src/kv/rocksdb_cache/ShardedCache.cc
+@@ -44,7 +44,7 @@ void ShardedCache::SetStrictCapacityLimit(bool strict_capacity_limit) {
+ }
+ 
+ rocksdb::Status ShardedCache::Insert(const rocksdb::Slice& key, void* value, size_t charge,
+-                            void (*deleter)(const rocksdb::Slice& key, void* value),
++                            DeleterFn deleter,
+                             rocksdb::Cache::Handle** handle, Priority priority) {
+   uint32_t hash = HashSlice(key);
+   return GetShard(Shard(hash))
+@@ -109,13 +109,36 @@ size_t ShardedCache::GetPinnedUsage() const {
+   return usage;
+ }
+ 
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++DeleterFn ShardedCache::GetDeleter(Handle* handle) const
++{
++  uint32_t hash = GetHash(handle);
++  return GetShard(Shard(hash))->GetDeleter(handle);
++}
++
++void ShardedCache::ApplyToAllEntries(
++    const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
++                             DeleterFn deleter)>& callback,
++    const ApplyToAllEntriesOptions& opts)
++{
++  int num_shards = 1 << num_shard_bits_;
++  for (int s = 0; s < num_shards; s++) {
++    GetShard(s)->ApplyToAllCacheEntries(callback, true /* thread_safe */);
++  }
++}
++#else
+ void ShardedCache::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+                                           bool thread_safe) {
+   int num_shards = 1 << num_shard_bits_;
+   for (int s = 0; s < num_shards; s++) {
+-    GetShard(s)->ApplyToAllCacheEntries(callback, thread_safe);
++    GetShard(s)->ApplyToAllCacheEntries(
++      [callback](const rocksdb::Slice&, void* value, size_t charge, DeleterFn) {
++        callback(value, charge);
++      },
++      thread_safe);
+   }
+ }
++#endif
+ 
+ void ShardedCache::EraseUnRefEntries() {
+   int num_shards = 1 << num_shard_bits_;
+@@ -131,7 +154,7 @@ std::string ShardedCache::GetPrintableOptions() const {
+   char buffer[kBufferSize];
+   {
+     std::lock_guard<std::mutex> l(capacity_mutex_);
+-    snprintf(buffer, kBufferSize, "    capacity : %" ROCKSDB_PRIszt "\n",
++    snprintf(buffer, kBufferSize, "    capacity : %zu\n",
+              capacity_);
+     ret.append(buffer);
+     snprintf(buffer, kBufferSize, "    num_shard_bits : %d\n", num_shard_bits_);
+diff --git a/src/kv/rocksdb_cache/ShardedCache.h b/src/kv/rocksdb_cache/ShardedCache.h
+index 4d64893ab1c7b..f98421a09a33a 100644
+--- a/src/kv/rocksdb_cache/ShardedCache.h
++++ b/src/kv/rocksdb_cache/ShardedCache.h
+@@ -14,6 +14,7 @@
+ #include <string>
+ #include <mutex>
+ 
++#include "rocksdb/version.h"
+ #include "rocksdb/cache.h"
+ #include "include/ceph_hash.h"
+ #include "common/PriorityCache.h"
+@@ -22,10 +23,11 @@
+ #ifndef CACHE_LINE_SIZE
+ #define CACHE_LINE_SIZE 64 // XXX arch-specific define 
+ #endif
+-#define ROCKSDB_PRIszt "zu"
+ 
+ namespace rocksdb_cache {
+ 
++using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
++
+ // Single cache shard interface.
+ class CacheShard {
+  public:
+@@ -34,7 +36,7 @@ class CacheShard {
+ 
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
+                                  size_t charge,
+-                                 void (*deleter)(const rocksdb::Slice& key, void* value),
++                                 DeleterFn deleter,
+                                  rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) = 0;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) = 0;
+   virtual bool Ref(rocksdb::Cache::Handle* handle) = 0;
+@@ -44,10 +46,15 @@ class CacheShard {
+   virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0;
+   virtual size_t GetUsage() const = 0;
+   virtual size_t GetPinnedUsage() const = 0;
+-  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+-                                      bool thread_safe) = 0;
++  virtual void ApplyToAllCacheEntries(
++    const std::function<void(const rocksdb::Slice& key,
++                             void* value,
++                             size_t charge,
++                             DeleterFn)>& callback,
++    bool thread_safe) = 0;
+   virtual void EraseUnRefEntries() = 0;
+   virtual std::string GetPrintableOptions() const { return ""; }
++  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const = 0;
+ };
+ 
+ // Generic cache interface which shards cache by hash of keys. 2^num_shard_bits
+@@ -57,34 +64,43 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
+  public:
+   ShardedCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit);
+   virtual ~ShardedCache() = default;
++  // rocksdb::Cache
+   virtual const char* Name() const override = 0;
+-  virtual CacheShard* GetShard(int shard) = 0;
+-  virtual const CacheShard* GetShard(int shard) const = 0;
+-  virtual void* Value(Handle* handle) override = 0;
+-  virtual size_t GetCharge(Handle* handle) const = 0;
+-  virtual uint32_t GetHash(Handle* handle) const = 0;
+-  virtual void DisownData() override = 0;
+-
+-  virtual void SetCapacity(size_t capacity) override;
+-  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
+-
+   virtual rocksdb::Status Insert(const rocksdb::Slice& key, void* value, size_t charge,
+-                                 void (*deleter)(const rocksdb::Slice& key, void* value),
++                                 DeleterFn,
+                                  rocksdb::Cache::Handle** handle, Priority priority) override;
+   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats) override;
+   virtual bool Ref(rocksdb::Cache::Handle* handle) override;
+   virtual bool Release(rocksdb::Cache::Handle* handle, bool force_erase = false) override;
++  virtual void* Value(Handle* handle) override = 0;
+   virtual void Erase(const rocksdb::Slice& key) override;
+   virtual uint64_t NewId() override;
+-  virtual size_t GetCapacity() const override;
++  virtual void SetCapacity(size_t capacity) override;
++  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
+   virtual bool HasStrictCapacityLimit() const override;
++  virtual size_t GetCapacity() const override;
+   virtual size_t GetUsage() const override;
+   virtual size_t GetUsage(rocksdb::Cache::Handle* handle) const override;
+   virtual size_t GetPinnedUsage() const override;
++  virtual size_t GetCharge(Handle* handle) const = 0;
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual DeleterFn GetDeleter(Handle* handle) const override;
++#endif
++  virtual void DisownData() override = 0;
++#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
++  virtual void ApplyToAllEntries(
++      const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
++                               DeleterFn deleter)>& callback,
++      const ApplyToAllEntriesOptions& opts) override;
++#else
+   virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
+                                       bool thread_safe) override;
++#endif
+   virtual void EraseUnRefEntries() override;
+   virtual std::string GetPrintableOptions() const override;
++  virtual CacheShard* GetShard(int shard) = 0;
++  virtual const CacheShard* GetShard(int shard) const = 0;
++  virtual uint32_t GetHash(Handle* handle) const = 0;
+ 
+   int GetNumShardBits() const { return num_shard_bits_; }
+ 
+@@ -120,7 +136,7 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
+ //    return Hash(s.data(), s.size(), 0);
+   }
+ 
+-  uint32_t Shard(uint32_t hash) {
++  uint32_t Shard(uint32_t hash) const {
+     // Note, hash >> 32 yields hash in gcc, not the zero we expect!
+     return (num_shard_bits_ > 0) ? (hash >> (32 - num_shard_bits_)) : 0;
+   }
diff --git a/gnu/packages/patches/cheese-vala-update.patch b/gnu/packages/patches/cheese-vala-update.patch
new file mode 100644
index 0000000000..cb18952ce4
--- /dev/null
+++ b/gnu/packages/patches/cheese-vala-update.patch
@@ -0,0 +1,180 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/cheese/-/commit/7cf6268e54620bbbe5e6e61800c50fb0cb4bea57.patch.
+
+From 7cf6268e54620bbbe5e6e61800c50fb0cb4bea57 Mon Sep 17 00:00:00 2001 From:
+=?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io> Date: Fri, 16 Oct
+2020 19:56:26 +0200 Subject: [PATCH] Change GLib.PtrArray into
+GLib.GenericArray
+
+This is the vala-friendly way of handling GPtrArray.
+Fix several memory leaks on the go and unnecessary reference increase.
+---
+ src/cheese-preferences.vala | 26 ++++++++++++--------------
+ src/cheese-window.vala      | 22 +++++++++++-----------
+ src/vapi/cheese-common.vapi |  2 +-
+ 3 files changed, 24 insertions(+), 26 deletions(-)
+
+diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala
+index f56af7e0..80a92431 100644
+--- a/src/cheese-preferences.vala
++++ b/src/cheese-preferences.vala
+@@ -100,7 +100,7 @@ public PreferencesDialog (Cheese.Camera camera)
+    */
+   private void initialize_camera_devices ()
+   {
+-    unowned GLib.PtrArray devices = camera.get_camera_devices ();
++    GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+     camera_model = new Gtk.ListStore (2, typeof (string), typeof (Cheese.CameraDevice));
+ 
+     source_combo.model = camera_model;
+@@ -357,13 +357,13 @@ public PreferencesDialog (Cheese.Camera camera)
+    */
+   private void on_camera_update_num_camera_devices ()
+   {
+-    unowned GLib.PtrArray devices = camera.get_camera_devices ();
+-    Cheese.CameraDevice   dev;
++    GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
++    unowned Cheese.CameraDevice   dev;
+ 
+     // Add (if) / Remove (else) a camera device.
+-    if (devices.len > camera_model.iter_n_children (null))
++    if (devices.length > camera_model.iter_n_children (null))
+     {
+-      dev = (Cheese.CameraDevice) devices.index (devices.len - 1);
++      dev = devices.get (devices.length - 1);
+       add_camera_device(dev);
+     }
+     else
+@@ -382,12 +382,11 @@ public PreferencesDialog (Cheese.Camera camera)
+       bool device_removed = false;
+       devices.foreach ((device) =>
+       {
+-        var old_device = (Cheese.CameraDevice) device;
+         Cheese.CameraDevice new_device;
+         camera_model.get (iter, 1, out new_device, -1);
+ 
+         // Found the device that was removed.
+-        if (old_device != new_device)
++        if (device != new_device)
+         {
+             remove_camera_device (iter, new_device, active_device);
+             device_removed = true;
+@@ -418,17 +417,16 @@ public PreferencesDialog (Cheese.Camera camera)
+    *
+    * @param device a Cheese.CameraDevice to add to the device combo box model
+    */
+-  private void add_camera_device (void *device)
++  private void add_camera_device (Cheese.CameraDevice device)
+   {
+     TreeIter iter;
+-    Cheese.CameraDevice dev = (Cheese.CameraDevice) device;
+ 
+     camera_model.append (out iter);
+     camera_model.set (iter,
+-                      0, dev.get_name (),
+-                      1, dev);
++                      0, device.get_name (),
++                      1, device);
+ 
+-    if (camera.get_selected_device () == dev)
++    if (camera.get_selected_device () == device)
+         source_combo.set_active_iter (iter);
+ 
+     if (camera_model.iter_n_children (null) > 1)
+@@ -445,12 +443,12 @@ public PreferencesDialog (Cheese.Camera camera)
+   private void remove_camera_device (TreeIter iter, Cheese.CameraDevice device_node,
+                              Cheese.CameraDevice active_device_node)
+   {
+-      unowned GLib.PtrArray devices = camera.get_camera_devices ();
++      GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+ 
+       // Check if the camera that we want to remove, is the active one
+       if (device_node == active_device_node)
+       {
+-        if (devices.len > 0)
++        if (devices.length > 0)
+           set_new_available_camera_device (iter);
+         else
+           this.hide ();
+diff --git a/src/cheese-window.vala b/src/cheese-window.vala
+index ff069808..cc119b68 100644
+--- a/src/cheese-window.vala
++++ b/src/cheese-window.vala
+@@ -1216,9 +1216,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+    */
+   public void on_switch_camera_clicked ()
+   {
+-      Cheese.CameraDevice selected;
+-      Cheese.CameraDevice next = null;
+-      GLib.PtrArray cameras;
++      unowned Cheese.CameraDevice selected;
++      unowned Cheese.CameraDevice next = null;
++      GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+       uint i;
+ 
+       if (camera == null)
+@@ -1235,9 +1235,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ 
+       cameras = camera.get_camera_devices ();
+ 
+-      for (i = 0; i < cameras.len; i++)
++      for (i = 0; i < cameras.length; i++)
+       {
+-          next = (Cheese.CameraDevice )cameras.index (i);
++          next = cameras.get (i);
+ 
+           if (next == selected)
+           {
+@@ -1245,13 +1245,13 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+           }
+       }
+ 
+-      if (i + 1 < cameras.len)
++      if (i + 1 < cameras.length)
+       {
+-          next = (Cheese.CameraDevice )cameras.index (i + 1);
++          next = cameras.get (i + 1);
+       }
+       else
+       {
+-          next = (Cheese.CameraDevice )cameras.index (0);
++          next = cameras.get (0);
+       }
+ 
+       if (next == selected)
+@@ -1269,8 +1269,8 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+    */
+   public void set_switch_camera_button_state ()
+   {
+-      Cheese.CameraDevice selected;
+-      GLib.PtrArray cameras;
++      unowned Cheese.CameraDevice selected;
++      GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+ 
+       if (camera == null)
+       {
+@@ -1288,7 +1288,7 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ 
+       cameras = camera.get_camera_devices ();
+ 
+-      if (cameras.len > 1)
++      if (cameras.length > 1)
+       {
+          switch_camera_button.set_visible (true);
+          return;
+diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi
+index 6517cdfc..e4ae7ad3 100644
+--- a/src/vapi/cheese-common.vapi
++++ b/src/vapi/cheese-common.vapi
+@@ -35,7 +35,7 @@ namespace Cheese
+     [CCode (has_construct_function = false)]
+     public Camera (Clutter.Actor video_texture, string camera_device_node, int x_resolution, int y_resolution);
+     public bool                        get_balance_property_range (string property, double min, double max, double def);
+-    public unowned GLib.PtrArray       get_camera_devices ();
++    public GLib.GenericArray<unowned Cheese.CameraDevice> get_camera_devices ();
+     public unowned Cheese.VideoFormat  get_current_video_format ();
+     public int                         get_num_camera_devices ();
+     public unowned Cheese.CameraDevice get_selected_device ();
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/classpath-miscompilation.patch b/gnu/packages/patches/classpath-miscompilation.patch
new file mode 100644
index 0000000000..c3a569ea4f
--- /dev/null
+++ b/gnu/packages/patches/classpath-miscompilation.patch
@@ -0,0 +1,71 @@
+For some reason, the original code gets miscompiled on x86_64, leading
+'Java_java_io_VMFile_isFile' to return true when the return value of
+'cpio_checkType' is ENOENT (= 2).
+
+See <https://issues.guix.gnu.org/issue/36685>
+and <https://issues.guix.gnu.org/49990>.
+
+diff --git a/native/jni/java-io/java_io_VMFile.c b/native/jni/java-io/java_io_VMFile.c
+index de1320b..6695e1f 100644
+--- a/native/jni/java-io/java_io_VMFile.c
++++ b/native/jni/java-io/java_io_VMFile.c
+@@ -240,6 +240,7 @@ Java_java_io_VMFile_exists (JNIEnv * env,
+ #ifndef WITHOUT_FILESYSTEM
+   const char *filename;
+   int result;
++  jboolean exists;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -250,9 +251,10 @@ Java_java_io_VMFile_exists (JNIEnv * env,
+     }
+ 
+   result = cpio_isFileExists (filename);
++  exists = (result == CPNATIVE_OK ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK ? 1 : 0;
++  return exists;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
+@@ -278,6 +280,7 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
+   const char *filename;
+   int result;
+   jint entryType;
++  jboolean isfile;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -288,9 +291,10 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
+     }
+ 
+   result = cpio_checkType (filename, &entryType);
++  isfile = (result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0;
++  return isfile;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
+@@ -315,6 +319,7 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
+   const char *filename;
+   int result;
+   jint entryType;
++  jboolean isdirectory;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -325,9 +330,10 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
+     }
+   
+   result = cpio_checkType (filename, &entryType);
++  isdirectory = (result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0);
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0;
++  return isdirectory;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
diff --git a/gnu/packages/patches/cling-use-shared-library.patch b/gnu/packages/patches/cling-use-shared-library.patch
new file mode 100644
index 0000000000..6385b307b3
--- /dev/null
+++ b/gnu/packages/patches/cling-use-shared-library.patch
@@ -0,0 +1,329 @@
+From 811f0a575231496318b5e9c9a0ff0ed195b16dc0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 7 Sep 2021 16:35:07 -0400
+Subject: [PATCH] build: Allow building Cling using the Clang shared library.
+
+The officially supported way to build LLVM/Clang as a shared library
+is via the LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake
+options (see: https://llvm.org/docs/BuildingADistribution.html).  When
+built this way, the whole of Clang API is exposed as a shared
+library (libclang-cpp.so).
+
+* CMakeLists.txt: Query if we're in shared mode via llvm-config, and
+register the result as LLVM_LIB_IS_SHARED.
+[LLVM_LIB_IS_SHARED] <target_link_libraries>: Use the PUBLIC interface of the
+LLVM shared library.
+* lib/Interpreter/CMakeLists.txt [LLVM_LIB_IS_SHARED]: When defined, replace the
+individual Clang components by clang-cpp.
+* lib/MetaProcessor/CMakeLists.txt: Likewise.
+* lib/Utils/CMakeLists.txt: Likewise.
+* tools/Jupyter/CMakeLists.txt: Likewise.
+* tools/driver/CMakeLists.txt: Likewise.
+* tools/libcling/CMakeLists.txt: Likewise.
+---
+ CMakeLists.txt                   | 10 ++++++--
+ lib/Interpreter/CMakeLists.txt   | 40 ++++++++++++++++++--------------
+ lib/MetaProcessor/CMakeLists.txt | 16 +++++++++----
+ lib/Utils/CMakeLists.txt         | 34 +++++++++++++++------------
+ tools/Jupyter/CMakeLists.txt     | 11 ++++++++-
+ tools/driver/CMakeLists.txt      | 16 +++----------
+ tools/libcling/CMakeLists.txt    | 38 +++++++++++++++---------------
+ 7 files changed, 93 insertions(+), 72 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 65b14b27..888f7ee9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -23,6 +23,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
+       "--libdir"
+       "--includedir"
+       "--prefix"
++      "--shared-mode"
+       "--src-root")
+     execute_process(
+       COMMAND ${CONFIG_COMMAND}
+@@ -47,7 +48,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
+   list(GET CONFIG_OUTPUT 2 LIBRARY_DIR)
+   list(GET CONFIG_OUTPUT 3 INCLUDE_DIR)
+   list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT)
+-  list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR)
++  list(GET CONFIG_OUTPUT 5 LLVM_LIB_IS_SHARED)
++  list(GET CONFIG_OUTPUT 6 MAIN_SRC_DIR)
+ 
+   if(NOT MSVC_IDE)
+     set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
+@@ -427,7 +429,11 @@ macro(add_cling_library name)
+   endif()
+ 
+   if(TARGET ${name})
+-    target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
++      if(LLVM_LIB_IS_SHARED)
++          target_link_libraries(${name} PUBLIC LLVM)
++      else()
++          target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
++      endif()
+ 
+     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libcling")
+       install(TARGETS ${name}
+diff --git a/lib/Interpreter/CMakeLists.txt b/lib/Interpreter/CMakeLists.txt
+index 921c773c..af65c020 100644
+--- a/lib/Interpreter/CMakeLists.txt
++++ b/lib/Interpreter/CMakeLists.txt
+@@ -6,22 +6,28 @@
+ # LICENSE.TXT for details.
+ #------------------------------------------------------------------------------
+ 
+-set(LIBS
+-  clingUtils
+-  clangCodeGen
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAnalysis
+-  clangEdit
+-  clangRewrite
+-  clangRewriteFrontend
+-  clangSerialization
+-  clangAST
+-  clangBasic
+-  clangLex
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS
++        clang-cpp
++        clingUtils)
++else()
++    set(LIBS
++        clingUtils
++        clangCodeGen
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAnalysis
++        clangEdit
++        clangRewrite
++        clangRewriteFrontend
++        clangSerialization
++        clangAST
++        clangBasic
++        clangLex
++        )
++endif()
+ 
+ set(LLVM_LINK_COMPONENTS
+   analysis
+@@ -369,4 +375,4 @@ if ((NOT builtin_llvm) AND builtin_clang)
+   get_property(P SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES)
+   list(INSERT P 0 ${FixInclude})
+   set_property(SOURCE TransactionUnloader.cpp PROPERTY INCLUDE_DIRECTORIES "${P}")
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/lib/MetaProcessor/CMakeLists.txt b/lib/MetaProcessor/CMakeLists.txt
+index e753dca3..5f4641bb 100644
+--- a/lib/MetaProcessor/CMakeLists.txt
++++ b/lib/MetaProcessor/CMakeLists.txt
+@@ -10,7 +10,16 @@ set( LLVM_LINK_COMPONENTS
+   core
+   support
+   binaryformat
+-)
++  )
++
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangLex
++        clangAST
++        clangBasic)
++endif()
+ 
+ add_cling_library(clingMetaProcessor OBJECT
+   Display.cpp
+@@ -21,10 +30,7 @@ add_cling_library(clingMetaProcessor OBJECT
+   MetaSema.cpp
+ 
+   LINK_LIBS
+-  clangLex
+-  clangAST
+-  clangBasic
+-
++  ${LIBS}
+   clingInterpreter
+   clingUtils
+ )
+diff --git a/lib/Utils/CMakeLists.txt b/lib/Utils/CMakeLists.txt
+index 327c9fff..fbe4bd87 100644
+--- a/lib/Utils/CMakeLists.txt
++++ b/lib/Utils/CMakeLists.txt
+@@ -26,21 +26,25 @@ set(LLVM_LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
+ )
+ 
+-set(LIBS
+-  clangCodeGen
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAnalysis
+-  clangEdit
+-  clangRewrite
+-  clangRewriteFrontend
+-  clangSerialization
+-  clangAST
+-  clangBasic
+-  clangLex
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangCodeGen
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAnalysis
++        clangEdit
++        clangRewrite
++        clangRewriteFrontend
++        clangSerialization
++        clangAST
++        clangBasic
++        clangLex
++        )
++endif()
+ 
+ find_library(DL_LIBRARY_PATH dl)
+ if (DL_LIBRARY_PATH)
+diff --git a/tools/Jupyter/CMakeLists.txt b/tools/Jupyter/CMakeLists.txt
+index aad5f3f7..8b4ac36f 100644
+--- a/tools/Jupyter/CMakeLists.txt
++++ b/tools/Jupyter/CMakeLists.txt
+@@ -39,6 +39,14 @@ else()
+    endif()
+ endif()
+ 
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS
++        clang-cpp
++        clingUserInterface
++        clingMetaProcessor
++        ${INTERPRETER}
++        clingUtils)
++else()
+ set(LIBS
+         clangAST
+         clangBasic
+@@ -54,7 +62,8 @@ set(LIBS
+         clingMetaProcessor
+         ${INTERPRETER}
+         clingUtils
+-    )
++        )
++endif()
+ 
+ if( LLVM_ENABLE_PIC )
+     set(ENABLE_SHARED SHARED)
+diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt
+index 1968b97f..5ed53fb7 100644
+--- a/tools/driver/CMakeLists.txt
++++ b/tools/driver/CMakeLists.txt
+@@ -9,23 +9,13 @@
+ # Keep symbols for JIT resolution
+ set(LLVM_NO_DEAD_STRIP 1)
+ 
+-if(BUILD_SHARED_LIBS)
+-  set(LIBS
+-    LLVMSupport
+-
+-    clangFrontendTool
+-
+-    clingInterpreter
+-    clingMetaProcessor
+-    clingUserInterface
+-    clingUtils
+-  )
++if(LLVM_LIB_IS_SHARED)
++  set(LIBS clang-cpp clingUserInterface)
+   add_cling_executable(cling
+     cling.cpp
+   )
+ else()
+   set(LIBS
+-    LLVMSupport
+ 
+     clangASTMatchers
+     clangFrontendTool
+@@ -38,7 +28,7 @@ else()
+     $<TARGET_OBJECTS:obj.clingMetaProcessor>
+     $<TARGET_OBJECTS:obj.clingUtils>
+   )
+-endif(BUILD_SHARED_LIBS)
++endif(LLVM_LIB_IS_SHARED)
+ 
+ set_target_properties(cling
+   PROPERTIES ENABLE_EXPORTS 1)
+diff --git a/tools/libcling/CMakeLists.txt b/tools/libcling/CMakeLists.txt
+index 143d3bdb..ba000d44 100644
+--- a/tools/libcling/CMakeLists.txt
++++ b/tools/libcling/CMakeLists.txt
+@@ -10,21 +10,25 @@ set(SOURCES
+   ADDITIONAL_HEADERS
+   )
+ 
+-set(LIBS
+-  clangAnalysis
+-  clangDriver
+-  clangFrontend
+-  clangParse
+-  clangSema
+-  clangAST
+-  clangLex
+-  clangSerialization
+-  clangCodeGen
+-  clangBasic
+-  clangEdit
+-
+-  clingUtils
+-)
++if (LLVM_LIB_IS_SHARED)
++    set(LIBS clang-cpp)
++else()
++    set(LIBS
++        clangAnalysis
++        clangDriver
++        clangFrontend
++        clangParse
++        clangSema
++        clangAST
++        clangLex
++        clangSerialization
++        clangCodeGen
++        clangBasic
++        clangEdit
++
++        clingUtils
++        )
++endif()
+ 
+ set( LLVM_LINK_COMPONENTS
+   analysis
+@@ -63,10 +67,6 @@ option(LIBCLING_BUILD_STATIC
+ #  set(LLVM_EXPORTED_SYMBOL_FILE)
+ #endif()
+ 
+-if( LLVM_ENABLE_PIC )
+-  set(ENABLE_SHARED SHARED)
+-endif()
+-
+ if((NOT LLVM_ENABLE_PIC OR LIBCLING_BUILD_STATIC) AND NOT WIN32)
+   set(ENABLE_STATIC STATIC)
+ endif()
+-- 
+2.33.0
+
diff --git a/gnu/packages/patches/coreutils-gnulib-tests.patch b/gnu/packages/patches/coreutils-gnulib-tests.patch
new file mode 100644
index 0000000000..7142401202
--- /dev/null
+++ b/gnu/packages/patches/coreutils-gnulib-tests.patch
@@ -0,0 +1,45 @@
+Fix Gnulib test failures showing up on ARMv7:
+
+  https://issues.guix.gnu.org/49459
+
+This is a backport of this Gnulib commit:
+
+  commit 175e0bc72808d564074c4adcc72aeadb74adfcc6
+  Author: Paul Eggert <eggert@cs.ucla.edu>
+  Date:   Thu Aug 27 17:52:58 2020 -0700
+
+      perror, strerror_r: remove unportable tests
+
+      Problem reported by Florian Weimer in:
+      https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
+      * tests/test-perror2.c (main):
+      * tests/test-strerror_r.c (main): Omit unportable tests.
+
+diff --git a/tests/test-perror2.c b/tests/test-perror2.c
+index 1d14eda7be..c6214dd25c 100644
+--- a/gnulib-tests/test-perror2.c
++++ b/gnulib-tests/test-perror2.c
+@@ -79,9 +79,6 @@ main (void)
+     errno = -5;
+     perror ("");
+     ASSERT (!ferror (stderr));
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+diff --git a/tests/test-strerror_r.c b/tests/test-strerror_r.c
+index b11d6fd9f6..c1dbcf837b 100644
+--- a/gnulib-tests/test-strerror_r.c
++++ b/gnulib-tests/test-strerror_r.c
+@@ -165,9 +165,6 @@ main (void)
+ 
+     strerror_r (EACCES, buf, sizeof buf);
+     strerror_r (-5, buf, sizeof buf);
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
diff --git a/gnu/packages/patches/cups-CVE-2020-10001.patch b/gnu/packages/patches/cups-CVE-2020-10001.patch
deleted file mode 100644
index 1b16c7d97c..0000000000
--- a/gnu/packages/patches/cups-CVE-2020-10001.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From efbea1742bd30f842fbbfb87a473e5c84f4162f9 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <msweet@msweet.org>
-Date: Mon, 1 Feb 2021 15:02:32 -0500
-Subject: [PATCH] Fix a buffer (read) overflow in ippReadIO (CVE-2020-10001)
-
----
-
-diff --git a/cups/ipp.c b/cups/ipp.c
-index 3d529346c..adbb26fba 100644
---- a/cups/ipp.c
-+++ b/cups/ipp.c
-@@ -2866,7 +2866,8 @@ ippReadIO(void       *src,		/* I - Data source */
-   unsigned char		*buffer,	/* Data buffer */
- 			string[IPP_MAX_TEXT],
- 					/* Small string buffer */
--			*bufptr;	/* Pointer into buffer */
-+			*bufptr,	/* Pointer into buffer */
-+			*bufend;	/* End of buffer */
-   ipp_attribute_t	*attr;		/* Current attribute */
-   ipp_tag_t		tag;		/* Current tag */
-   ipp_tag_t		value_tag;	/* Current value tag */
-@@ -3441,6 +3442,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 		}
- 
-                 bufptr = buffer;
-+                bufend = buffer + n;
- 
- 	       /*
- 	        * text-with-language and name-with-language are composite
-@@ -3454,7 +3456,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string))
-+		if ((bufptr + 2 + n + 2) > bufend || n >= (int)sizeof(string))
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP language length overflows value."), 1);
-@@ -3481,7 +3483,7 @@ ippReadIO(void       *src,		/* I - Data source */
-                 bufptr += 2 + n;
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE))
-+		if ((bufptr + 2 + n) > bufend)
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP string length overflows value."), 1);
diff --git a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch b/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
deleted file mode 100644
index 24be6e31d9..0000000000
--- a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-Make libcurl respect the SSL_CERT_{DIR,FILE} variables by default. The variables
-are fetched during initialization to preserve thread-safety (curl_global_init(3)
-must be called when no other threads exist).
-
-This fixes network functionality in rust:cargo, and probably removes the need
-for other future workarounds.
-===================================================================
---- curl-7.66.0.orig/lib/easy.c	2020-01-02 15:43:11.883921171 +0100
-+++ curl-7.66.0/lib/easy.c	2020-01-02 16:18:54.691882797 +0100
-@@ -134,6 +134,9 @@
- #  pragma warning(default:4232) /* MSVC extension, dllimport identity */
- #endif
- 
-+char * Curl_ssl_cert_dir = NULL;
-+char * Curl_ssl_cert_file = NULL;
-+
- /**
-  * curl_global_init() globally initializes curl given a bitwise set of the
-  * different features of what to initialize.
-@@ -155,6 +158,9 @@
- #endif
-   }
- 
-+  Curl_ssl_cert_dir = curl_getenv("SSL_CERT_DIR");
-+  Curl_ssl_cert_file = curl_getenv("SSL_CERT_FILE");
-+
-   if(!Curl_ssl_init()) {
-     DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
-     return CURLE_FAILED_INIT;
-@@ -260,6 +266,9 @@
-   Curl_ssl_cleanup();
-   Curl_resolver_global_cleanup();
- 
-+  free(Curl_ssl_cert_dir);
-+  free(Curl_ssl_cert_file);
-+
- #ifdef WIN32
-   Curl_win32_cleanup(init_flags);
- #endif
-diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
---- curl-7.66.0.orig/lib/url.c	2020-01-02 15:43:11.883921171 +0100
-+++ curl-7.66.0/lib/url.c	2020-01-02 16:21:11.563880346 +0100
-@@ -524,6 +524,21 @@
-     if(result)
-       return result;
- #endif
-+    extern char * Curl_ssl_cert_dir;
-+    extern char * Curl_ssl_cert_file;
-+    if(Curl_ssl_cert_dir) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], Curl_ssl_cert_dir))
-+            return result;
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], Curl_ssl_cert_dir))
-+            return result;
-+    }
-+
-+    if(Curl_ssl_cert_file) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], Curl_ssl_cert_file))
-+            return result;
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], Curl_ssl_cert_file))
-+            return result;
-+    }
-   }
- 
-   set->wildcard_enabled = FALSE;
diff --git a/gnu/packages/patches/curl-7.77-tls-priority-string.patch b/gnu/packages/patches/curl-7.77-tls-priority-string.patch
deleted file mode 100644
index bf1bfa8aaa..0000000000
--- a/gnu/packages/patches/curl-7.77-tls-priority-string.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-cURL 7.77.0 would use a bogus TLS priority string favoring older TLS
-protocol versions, which in turn would prevent access to bitbucket.org:
-
-  https://issues.guix.gnu.org/49035
-  https://github.com/curl/curl/pull/7278
-
-This patch fixes it.
-From <https://github.com/curl/curl/pull/7278/commits/b98f79f6ecdb708c67f9a0cec56ce48952a54556>.
-
-From b98f79f6ecdb708c67f9a0cec56ce48952a54556 Mon Sep 17 00:00:00 2001
-From: Daniel Stenberg <daniel@haxx.se>
-Date: Fri, 18 Jun 2021 14:54:07 +0200
-Subject: [PATCH] gnutls: set the prefer ciphers in correct order
-
-Reported-by: civodul on github
-Assisted-by: Nikos Mavrogiannopoulos
-Fixes #7277
----
- lib/vtls/gtls.c | 30 +++++++++++++-----------------
- 1 file changed, 13 insertions(+), 17 deletions(-)
-
-diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c
-index d9bc5611e8f9..da2af64955c3 100644
---- a/lib/vtls/gtls.c
-+++ b/lib/vtls/gtls.c
-@@ -330,6 +330,9 @@ set_ssl_version_min_max(struct Curl_easy *data,
-       ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_2;
-     }
-   }
-+  else if(ssl_version_max == CURL_SSLVERSION_MAX_DEFAULT) {
-+    ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_3;
-+  }
- 
-   switch(ssl_version | ssl_version_max) {
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_0:
-@@ -338,11 +341,11 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_1:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1";
-+      "+VERS-TLS1.1:+VERS-TLS1.0";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2";
-+      "+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_1:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-@@ -350,7 +353,7 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.1:+VERS-TLS1.2";
-+      "+VERS-TLS1.2:+VERS-TLS1.1";
-     return CURLE_OK;
-   case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_TLSv1_2:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-@@ -360,25 +363,17 @@ set_ssl_version_min_max(struct Curl_easy *data,
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
-       "+VERS-TLS1.3";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_DEFAULT:
--    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+  case CURL_SSLVERSION_TLSv1_0 | CURL_SSLVERSION_MAX_TLSv1_3:
-+    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_DEFAULT:
-+  case CURL_SSLVERSION_TLSv1_1 | CURL_SSLVERSION_MAX_TLSv1_3:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.1:+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+      "+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_DEFAULT:
-+  case CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_MAX_TLSv1_3:
-     *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-+      "+VERS-TLS1.3:+VERS-TLS1.2";
-     return CURLE_OK;
--  case CURL_SSLVERSION_TLSv1_3 | CURL_SSLVERSION_MAX_DEFAULT:
--    *prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
--      "+VERS-TLS1.2"
--      ":+VERS-TLS1.3";
-     return CURLE_OK;
-   }
- 
-@@ -608,6 +603,7 @@ gtls_connect_step1(struct Curl_easy *data,
-   }
-   else {
- #endif
-+    infof(data, "GnuTLS ciphers: %s\n", prioritylist);
-     rc = gnutls_priority_set_direct(session, prioritylist, &err);
- #ifdef HAVE_GNUTLS_SRP
-   }
diff --git a/gnu/packages/patches/curl-use-ssl-cert-env.patch b/gnu/packages/patches/curl-use-ssl-cert-env.patch
index c8e80b4445..24be6e31d9 100644
--- a/gnu/packages/patches/curl-use-ssl-cert-env.patch
+++ b/gnu/packages/patches/curl-use-ssl-cert-env.patch
@@ -47,14 +47,14 @@ diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
 +    extern char * Curl_ssl_cert_dir;
 +    extern char * Curl_ssl_cert_file;
 +    if(Curl_ssl_cert_dir) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_ORIG], Curl_ssl_cert_dir))
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], Curl_ssl_cert_dir))
 +            return result;
 +        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], Curl_ssl_cert_dir))
 +            return result;
 +    }
 +
 +    if(Curl_ssl_cert_file) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_ORIG], Curl_ssl_cert_file))
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], Curl_ssl_cert_file))
 +            return result;
 +        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], Curl_ssl_cert_file))
 +            return result;
diff --git a/gnu/packages/patches/dbus-CVE-2020-12049.patch b/gnu/packages/patches/dbus-CVE-2020-12049.patch
deleted file mode 100644
index 71280144a1..0000000000
--- a/gnu/packages/patches/dbus-CVE-2020-12049.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Fix CVE-2020-12049:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12049
-https://lists.freedesktop.org/archives/ftp-release/2020-June/000753.html
-
-Taken from upstream:
-
-https://gitlab.freedesktop.org/dbus/dbus/-/commit/272d484283883fa9ff95b69d924fff6cd34842f5
-
-diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
---- a/dbus/dbus-sysdeps-unix.c
-+++ b/dbus/dbus-sysdeps-unix.c
-@@ -435,18 +435,6 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       struct cmsghdr *cm;
-       dbus_bool_t found = FALSE;
- 
--      if (m.msg_flags & MSG_CTRUNC)
--        {
--          /* Hmm, apparently the control data was truncated. The bad
--             thing is that we might have completely lost a couple of fds
--             without chance to recover them. Hence let's treat this as a
--             serious error. */
--
--          errno = ENOSPC;
--          _dbus_string_set_length (buffer, start);
--          return -1;
--        }
--
-       for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
-         if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS)
-           {
-@@ -501,6 +489,26 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       if (!found)
-         *n_fds = 0;
- 
-+      if (m.msg_flags & MSG_CTRUNC)
-+        {
-+          unsigned int i;
-+
-+          /* Hmm, apparently the control data was truncated. The bad
-+             thing is that we might have completely lost a couple of fds
-+             without chance to recover them. Hence let's treat this as a
-+             serious error. */
-+
-+          /* We still need to close whatever fds we *did* receive,
-+           * otherwise they'll never get closed. (CVE-2020-12049) */
-+          for (i = 0; i < *n_fds; i++)
-+            close (fds[i]);
-+
-+          *n_fds = 0;
-+          errno = ENOSPC;
-+          _dbus_string_set_length (buffer, start);
-+          return -1;
-+        }
-+
-       /* put length back (doesn't actually realloc) */
-       _dbus_string_set_length (buffer, start + bytes_read);
- 
diff --git a/gnu/packages/patches/diffutils-fix-signal-processing.patch b/gnu/packages/patches/diffutils-fix-signal-processing.patch
new file mode 100644
index 0000000000..134dd3f718
--- /dev/null
+++ b/gnu/packages/patches/diffutils-fix-signal-processing.patch
@@ -0,0 +1,58 @@
+Author: Frédéric Bonnard <frediz@debian.org>
+
+Obtained from:
+
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=922552#19
+
+Fixes bug reported upstream at:
+
+https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34519
+
+diff --git a/src/diff.c b/src/diff.c
+index e2eb32437353..b574e8282dc9 100644
+--- a/src/diff.c
++++ b/src/diff.c
+@@ -1451,6 +1451,8 @@ compare_files (struct comparison const *parent,
+ 	}
+     }
+ 
++  final_process_signals ();
++
+   /* Now the comparison has been done, if no error prevented it,
+      and STATUS is the value this function will return.  */
+ 
+diff --git a/src/diff.h b/src/diff.h
+index 03daaa4a0530..e177fe600a25 100644
+--- a/src/diff.h
++++ b/src/diff.h
+@@ -390,6 +390,7 @@ extern enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *);
+ extern void begin_output (void);
+ extern void debug_script (struct change *);
+ extern void fatal (char const *) __attribute__((noreturn));
++extern void final_process_signals (void);
+ extern void finish_output (void);
+ extern void message (char const *, char const *, char const *);
+ extern void message5 (char const *, char const *, char const *,
+diff --git a/src/util.c b/src/util.c
+index 4f4d9bb285eb..56d292de2927 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -237,6 +237,18 @@ process_signals (void)
+     }
+ }
+ 
++/* Process remaining signals once before exit  */
++void
++final_process_signals (void)
++{
++  static int last = 1;
++
++  if (last) {
++    process_signals ();
++    last = 0;
++  }
++}
++
+ static void
+ install_signal_handlers (void)
+ {
diff --git a/gnu/packages/patches/diffutils-gets-undeclared.patch b/gnu/packages/patches/diffutils-gets-undeclared.patch
deleted file mode 100644
index b6cdc77caa..0000000000
--- a/gnu/packages/patches/diffutils-gets-undeclared.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-This patch is needed to allow builds with newer versions of
-the GNU libc (2.16+).
-
-
-commit 66712c23388e93e5c518ebc8515140fa0c807348
-Author: Eric Blake <eblake@redhat.com>
-Date:   Thu Mar 29 13:30:41 2012 -0600
-
-    stdio: don't assume gets any more
-    
-    Gnulib intentionally does not have a gets module, and now that C11
-    and glibc have dropped it, we should be more proactive about warning
-    any user on a platform that still has a declaration of this dangerous
-    interface.
-    
-    * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
-    support.
-    * modules/stdio (Makefile.am): Likewise.
-    * lib/stdio-read.c (gets): Likewise.
-    * tests/test-stdio-c++.cc: Likewise.
-    * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
-    * lib/stdio.in.h (gets): Make warning occur in more places.
-    * doc/posix-functions/gets.texi (gets): Update documentation.
-    Reported by Christer Solskogen.
-    
-    Signed-off-by: Eric Blake <eblake@redhat.com>
-
-diff --git a/lib/stdio.in.h b/lib/stdio.in.h
-index aa7b599..c377b6e 100644
---- a/lib/stdio.in.h
-+++ b/lib/stdio.in.h
-@@ -698,22 +698,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - "
- # endif
- #endif
- 
--#if @GNULIB_GETS@
--# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
--#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
--#   undef gets
--#   define gets rpl_gets
--#  endif
--_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1)));
--_GL_CXXALIAS_RPL (gets, char *, (char *s));
--# else
--_GL_CXXALIAS_SYS (gets, char *, (char *s));
--#  undef gets
--# endif
--_GL_CXXALIASWARN (gets);
- /* It is very rare that the developer ever has full control of stdin,
--   so any use of gets warrants an unconditional warning.  Assume it is
--   always declared, since it is required by C89.  */
-+   so any use of gets warrants an unconditional warning; besides, C11
-+   removed it.  */
-+#undef gets
-+#if HAVE_RAW_DECL_GETS
- _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
- #endif
- 
-@@ -1053,9 +1042,9 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
- # endif
- #endif
- 
--/* Some people would argue that sprintf should be handled like gets
--   (for example, OpenBSD issues a link warning for both functions),
--   since both can cause security holes due to buffer overruns.
-+/* Some people would argue that all sprintf uses should be warned about
-+   (for example, OpenBSD issues a link warning for it),
-+   since it can cause security holes due to buffer overruns.
-    However, we believe that sprintf can be used safely, and is more
-    efficient than snprintf in those safe cases; and as proof of our
-    belief, we use sprintf in several gnulib modules.  So this header
diff --git a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
index 4199dd18a5..fed4b76429 100644
--- a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
+++ b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
@@ -5,7 +5,7 @@ https://bugzilla.samba.org/show_bug.cgi?id=9515
 https://bugzilla.gnome.org/show_bug.cgi?id=736077 (for xsltproc)
 
 Patch copied from Debian:
-https://anonscm.debian.org/cgit/collab-maint/docbook-xsl.git/tree/debian/patches/765567_non-recursive_string_subst.patch
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/765567_non-recursive_string_subst.patch
 
 Description: use EXSLT "replace" function when available
  A recursive implementation  of string.subst is problematic,
@@ -15,11 +15,12 @@ Bug-Debian: https://bugs.debian.org/750593
 
 --- a/lib/lib.xsl
 +++ b/lib/lib.xsl
-@@ -10,7 +10,10 @@
+@@ -6,7 +6,11 @@
+ 
       This module implements DTD-independent functions
  
-      ******************************************************************** -->
--<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+-     ******************************************************************** --><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
++     ******************************************************************** -->
 +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 +                xmlns:str="http://exslt.org/strings"
 +                exclude-result-prefixes="str"
@@ -27,7 +28,7 @@ Bug-Debian: https://bugs.debian.org/750593
  
  <xsl:template name="dot.count">
    <!-- Returns the number of "." characters in a string -->
-@@ -56,6 +59,9 @@
+@@ -52,6 +56,9 @@
    <xsl:param name="replacement"/>
  
    <xsl:choose>
diff --git a/gnu/packages/patches/docbook-xsl-support-old-url.patch b/gnu/packages/patches/docbook-xsl-support-old-url.patch
new file mode 100644
index 0000000000..5b7dda458f
--- /dev/null
+++ b/gnu/packages/patches/docbook-xsl-support-old-url.patch
@@ -0,0 +1,17 @@
+Docbook 1.79.2 makes very few changes apart from changing the canonical URL
+to cdn.docbook.org.  This patch adds support for the previous URL to avoid
+breaking packages that still use that.
+
+Adapted from Debian:
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/0005-catalog.xml-Compatibility-with-1.79.1-or-earlier.patch
+
+--- a/catalog.xml
++++ b/catalog.xml
+@@ -5,4 +5,7 @@
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/current/" rewritePrefix="./"/>
+   <rewriteURI uriStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
++  <!-- Also support old URI of v1.79.1 or earlier -->
++  <rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
++  <rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
+ </catalog>
diff --git a/gnu/packages/patches/doxygen-1.8.17-runtests.patch b/gnu/packages/patches/doxygen-1.8.17-runtests.patch
deleted file mode 100644
index 0340c72448..0000000000
--- a/gnu/packages/patches/doxygen-1.8.17-runtests.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-1.8.17 was released with a broken test runner.
-
-https://github.com/doxygen/doxygen/issues/7464
-
-Taken from upstream:
-https://github.com/doxygen/doxygen/commit/cd9dee013dc749a10bbe019c350e0e62b6635795
-
-diff --git a/testing/runtests.py b/testing/runtests.py
-index a4118b865..10fe50214 100755
---- a/testing/runtests.py
-+++ b/testing/runtests.py
-@@ -3,6 +3,7 @@
- from __future__ import print_function
- import argparse, glob, itertools, re, shutil, os, sys
- import subprocess
-+import shlex
- 
- config_reg = re.compile('.*\/\/\s*(?P<name>\S+):\s*(?P<value>.*)$')
- 
-@@ -28,10 +29,10 @@ def xpopen(cmd, cmd1="",encoding='utf-8-sig', getStderr=False):
- 		return os.popen(cmd).read() # Python 2 without encoding
- 	else:
- 		if (getStderr):
--			proc = subprocess.run(cmd1,encoding=encoding,capture_output=True) # Python 3 with encoding
--			return proc.stderr
-+			proc = subprocess.Popen(shlex.split(cmd1),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			return proc.stderr.read()
- 		else:
--			proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			proc = subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
- 			return proc.stdout.read()
- 
- class Tester:
-@@ -137,7 +138,7 @@ def prepare_test(self):
- 				print('GENERATE_DOCBOOK=NO', file=f)
- 			if (self.args.xhtml):
- 				print('GENERATE_HTML=YES', file=f)
--			# HTML_OUTPUT can also be set locally
-+			# HTML_OUTPUT can also have been set locally
- 			print('HTML_OUTPUT=%s/html' % self.test_out, file=f)
- 			print('HTML_FILE_EXTENSION=.xhtml', file=f)
- 			if (self.args.pdf):
-@@ -184,7 +185,7 @@ def update_test(self,testmgr):
- 					print('Non-existing file %s after \'check:\' statement' % check_file)
- 					return
- 				# convert output to canonical form
--				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read()
-+				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file))
- 				if data:
- 					# strip version
- 					data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n')
-@@ -326,7 +327,7 @@ def perform_test(self,testmgr):
- 			tests.append(glob.glob('%s/*.xml' % (docbook_output)))
- 			tests.append(glob.glob('%s/*/*/*.xml' % (docbook_output)))
- 			tests = ' '.join(list(itertools.chain.from_iterable(tests))).replace(self.args.outputdir +'/','').replace('\\','/')
--			exe_string = '%s --nonet --postvalid %s' % (self.args.xmllint,tests)
-+			exe_string = '%s --noout --nonet --postvalid %s' % (self.args.xmllint,tests)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,docbook_output)
-@@ -346,7 +347,11 @@ def perform_test(self,testmgr):
- 				redirx=' 2> %s/temp >nul:'%html_output
- 			else:
- 				redirx='2>%s/temp >/dev/null'%html_output
--			exe_string = '%s --path dtd --nonet --postvalid %s/*xhtml' % (self.args.xmllint,html_output)
-+			check_file = []
-+			check_file.append(glob.glob('%s/*.xhtml' % (html_output)))
-+			check_file.append(glob.glob('%s/*/*/*.xhtml' % (html_output)))
-+			check_file = ' '.join(list(itertools.chain.from_iterable(check_file))).replace(self.args.outputdir +'/','').replace('\\','/')
-+			exe_string = '%s --noout --path dtd --nonet --postvalid %s' % (self.args.xmllint,check_file)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,html_output)
diff --git a/gnu/packages/patches/doxygen-test.patch b/gnu/packages/patches/doxygen-test.patch
deleted file mode 100644
index 1c0d4eb946..0000000000
--- a/gnu/packages/patches/doxygen-test.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Modify the expected outcome of test 012 so that it passes when bibtex is
-not in the path, as we do not wish to add texlive as an input just for this
-test.
-
-diff -u -r doxygen-1.8.7.orig/testing/012/citelist.xml doxygen-1.8.7/testing/012/citelist.xml
---- doxygen-1.8.7.orig/testing/012/citelist.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/citelist.xml	2014-04-24 23:49:43.000000000 +0200
-@@ -6,38 +6,6 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>
--        <variablelist>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_Be09"/>[1]</term>
--          </varlistentry>
--          <listitem>
--            <para>P.<nonbreakablespace/>Belotti. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_5">Disjunctive cuts for non-convex MINLP</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 117<ndash/>144.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_BertholdHeinzVigerske2009"/>[2]</term>
--          </varlistentry>
--          <listitem>
--            <para>T.<nonbreakablespace/>Berthold, S.<nonbreakablespace/>Heinz, and S.<nonbreakablespace/>Vigerske. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_15">Extending a CIP framework to solve MIQCPs</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 427<ndash/>444.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_knuth79"/>[3]</term>
--          </varlistentry>
--          <listitem>
--            <para>Donald<nonbreakablespace/>E. Knuth. <emphasis>Tex and Metafont, New Directions in Typesetting</emphasis>. American Mathematical Society and Digital Press, Stanford, 1979.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_LeLe12"/>[4]</term>
--          </varlistentry>
--          <listitem>
--            <para>Jon Lee and Sven Leyffer, editors. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3"><emphasis>Mixed Integer Nonlinear Programming</emphasis></ulink>, volume 154 of <emphasis>The IMA Volumes in Mathematics and its Applications</emphasis>. Springer, 2012.</para>
--            <para/>
--          </listitem>
--        </variablelist>
--      </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
-diff -u -r doxygen-1.8.7.orig/testing/012/indexpage.xml doxygen-1.8.7/testing/012/indexpage.xml
---- doxygen-1.8.7.orig/testing/012/indexpage.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/indexpage.xml	2014-04-24 23:44:05.000000000 +0200
-@@ -6,8 +6,8 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">[3]</ref> for more info.</para>
--      <para>Other references with cross references see <ref refid="citelist_1CITEREF_Be09" kindref="member">[1]</ref> and <ref refid="citelist_1CITEREF_BertholdHeinzVigerske2009" kindref="member">[2]</ref> for more info. </para>
-+      <para>See knuth79 for more info.</para>
-+      <para>Other references with cross references see Be09 and BertholdHeinzVigerske2009 for more info. </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
diff --git a/gnu/packages/patches/elogind-revert-polkit-detection.patch b/gnu/packages/patches/elogind-revert-polkit-detection.patch
new file mode 100644
index 0000000000..43dd1684b6
--- /dev/null
+++ b/gnu/packages/patches/elogind-revert-polkit-detection.patch
@@ -0,0 +1,41 @@
+From 715ce0a6459e418f92e74c7ce52df3244c18f383 Mon Sep 17 00:00:00 2001
+From: Sven Eden <sven.eden@prydeworx.com>
+Date: Mon, 8 Mar 2021 08:40:08 +0100
+Subject: [PATCH] Revert "Disable polkit support if libpolkit is not installed"
+
+This reverts commit 1194dec4f8f2d1b8bd14e1625f34418ecfce817e.
+
+Removing polkit support with -Dpolkit=auto when libpolkit is not
+installed, removes the whole interface. This makes it impossible to
+add polkit support as a runtime dependency.
+
+Bug: #167
+Closes: #206
+Signed-off-by: Sven Eden <sven.eden@prydeworx.com>
+---
+ meson.build | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 2dd05db3c..f38551f55 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1157,15 +1157,6 @@ if want_polkit != 'false' and not skip_deps
+                 message('Old polkit detected, will install pkla files')
+                 install_polkit_pkla = true
+         endif
+-#if 1 /// Disable polkit completely if libpolkit is not there. See elogind issue #167
+-        if not libpolkit.found()
+-                if want_polkit != 'auto'
+-                        error('Polkit requested but libpolkit was not found.')
+-                endif
+-                install_polkit = false
+-                want_polkit    = false
+-        endif
+-#endif // 1
+ endif
+ conf.set10('ENABLE_POLKIT', install_polkit)
+ 
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/evolution-CVE-2020-11879.patch b/gnu/packages/patches/evolution-CVE-2020-11879.patch
deleted file mode 100644
index 8c85895aab..0000000000
--- a/gnu/packages/patches/evolution-CVE-2020-11879.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 6489f20d6905cc797e2b2581c415e558c457caa7 Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Wed, 12 Feb 2020 18:59:52 +0100
-Subject: [PATCH] I#784 - Warn about and limit what can be attached using
- mailto: URI
-
-Closes https://gitlab.gnome.org/GNOME/evolution/issues/784
----
- src/composer/e-msg-composer.c | 58 +++++++++++++++++++++++++++++------
- src/e-util/e-system.error.xml |  7 ++++-
- 2 files changed, 54 insertions(+), 11 deletions(-)
-
-diff --git a/src/composer/e-msg-composer.c b/src/composer/e-msg-composer.c
-index e4c9ac095e..cd3168d882 100644
---- a/src/composer/e-msg-composer.c
-+++ b/src/composer/e-msg-composer.c
-@@ -4761,7 +4761,8 @@ handle_mailto (EMsgComposer *composer,
- 	gchar *header, *content, *buf;
- 	gsize nread, nwritten;
- 	const gchar *p;
--	gint len, clen;
-+	gint len, clen, has_attachments = 0;
-+	gboolean has_blacklisted_attachment = FALSE;
- 
- 	table = e_msg_composer_get_header_table (composer);
- 	view = e_msg_composer_get_attachment_view (composer);
-@@ -4844,22 +4845,36 @@ handle_mailto (EMsgComposer *composer,
- 			} else if (!g_ascii_strcasecmp (header, "attach") ||
- 				   !g_ascii_strcasecmp (header, "attachment")) {
- 				EAttachment *attachment;
-+				GFile *file;
- 
- 				camel_url_decode (content);
--				if (file_is_blacklisted (content))
--					e_alert_submit (
--						E_ALERT_SINK (e_msg_composer_get_editor (composer)),
--						"mail:blacklisted-file",
--						content, NULL);
- 				if (g_ascii_strncasecmp (content, "file:", 5) == 0)
- 					attachment = e_attachment_new_for_uri (content);
- 				else
- 					attachment = e_attachment_new_for_path (content);
--				e_attachment_store_add_attachment (store, attachment);
--				e_attachment_load_async (
--					attachment, (GAsyncReadyCallback)
--					e_attachment_load_handle_error, composer);
-+				file = e_attachment_ref_file (attachment);
-+				if (!file || !g_file_peek_path (file) ||
-+				    !g_file_test (g_file_peek_path (file), G_FILE_TEST_EXISTS) ||
-+				    g_file_test (g_file_peek_path (file), G_FILE_TEST_IS_DIR)) {
-+					/* Do nothing, simply ignore the attachment request */
-+				} else {
-+					has_attachments++;
-+
-+					if (file_is_blacklisted (content)) {
-+						has_blacklisted_attachment = TRUE;
-+						e_alert_submit (
-+							E_ALERT_SINK (e_msg_composer_get_editor (composer)),
-+							"mail:blacklisted-file",
-+							content, NULL);
-+					}
-+
-+					e_attachment_store_add_attachment (store, attachment);
-+					e_attachment_load_async (
-+						attachment, (GAsyncReadyCallback)
-+						e_attachment_load_handle_error, composer);
-+				}
- 				g_object_unref (attachment);
-+				g_clear_object (&file);
- 			} else if (!g_ascii_strcasecmp (header, "from")) {
- 				/* Ignore */
- 			} else if (!g_ascii_strcasecmp (header, "reply-to")) {
-@@ -4883,6 +4898,29 @@ handle_mailto (EMsgComposer *composer,
- 
- 	g_free (buf);
- 
-+	if (has_attachments && !has_blacklisted_attachment) {
-+		const gchar *primary;
-+		gchar *secondary;
-+
-+		primary = g_dngettext (GETTEXT_PACKAGE,
-+			"Review attachment before sending.",
-+			"Review attachments before sending.",
-+			has_attachments);
-+
-+		secondary = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE,
-+			"There had been added %d attachment. Make sure it does not contain any sensitive information before sending the message.",
-+			"There had been added %d attachments. Make sure they do not contain any sensitive information before sending the message.",
-+			has_attachments),
-+			has_attachments);
-+
-+		e_alert_submit (
-+			E_ALERT_SINK (e_msg_composer_get_editor (composer)),
-+			"system:generic-warning",
-+			primary, secondary, NULL);
-+
-+		g_free (secondary);
-+	}
-+
- 	merge_always_cc_and_bcc (table, to, &cc, &bcc);
- 
- 	tov = destination_list_to_vector (to);
-diff --git a/src/e-util/e-system.error.xml b/src/e-util/e-system.error.xml
-index ddcf989fda..02facb7d26 100644
---- a/src/e-util/e-system.error.xml
-+++ b/src/e-util/e-system.error.xml
-@@ -1,6 +1,11 @@
- <?xml version="1.0"?>
- <error-list domain="system">
--  <error type="error" id="generic-error">
-+  <error id="generic-error" type="error">
-+    <primary>{0}</primary>
-+    <secondary>{1}</secondary>
-+  </error>
-+
-+  <error id="generic-warning" type="warning">
-     <primary>{0}</primary>
-     <secondary>{1}</secondary>
-   </error>
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch b/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch
deleted file mode 100644
index 421f292c9d..0000000000
--- a/gnu/packages/patches/evolution-data-server-CVE-2020-14928.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From ba82be72cfd427b5d72ff21f929b3a6d8529c4df Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Mon, 22 Jun 2020 13:40:17 +0200
-Subject: [PATCH] I#226 - CVE-2020-14928: Response Injection via STARTTLS in
- SMTP and POP3
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/226
----
- src/camel/camel-stream-buffer.c               | 19 +++++++++++++++++++
- src/camel/camel-stream-buffer.h               |  1 +
- src/camel/providers/pop3/camel-pop3-store.c   |  2 ++
- src/camel/providers/pop3/camel-pop3-stream.c  | 11 +++++++++++
- src/camel/providers/pop3/camel-pop3-stream.h  |  1 +
- .../providers/smtp/camel-smtp-transport.c     |  2 ++
- 6 files changed, 36 insertions(+)
-
-diff --git a/src/camel/camel-stream-buffer.c b/src/camel/camel-stream-buffer.c
-index 3e2e0dd36..a6f605ae5 100644
---- a/src/camel/camel-stream-buffer.c
-+++ b/src/camel/camel-stream-buffer.c
-@@ -518,3 +518,22 @@ camel_stream_buffer_read_line (CamelStreamBuffer *sbf,
- 
- 	return g_strdup ((gchar *) sbf->priv->linebuf);
- }
-+
-+/**
-+ * camel_stream_buffer_discard_cache:
-+ * @sbf: a #CamelStreamBuffer
-+ *
-+ * Discards any cached data in the @sbf. The next read reads
-+ * from the stream.
-+ *
-+ * Since: 3.38
-+ **/
-+void
-+camel_stream_buffer_discard_cache (CamelStreamBuffer *sbf)
-+{
-+	g_return_if_fail (CAMEL_IS_STREAM_BUFFER (sbf));
-+
-+	sbf->priv->ptr = sbf->priv->buf;
-+	sbf->priv->end = sbf->priv->buf;
-+	sbf->priv->ptr[0] = '\0';
-+}
-diff --git a/src/camel/camel-stream-buffer.h b/src/camel/camel-stream-buffer.h
-index ef92cfd8e..094e9926b 100644
---- a/src/camel/camel-stream-buffer.h
-+++ b/src/camel/camel-stream-buffer.h
-@@ -93,6 +93,7 @@ gint		camel_stream_buffer_gets	(CamelStreamBuffer *sbf,
- gchar *		camel_stream_buffer_read_line	(CamelStreamBuffer *sbf,
- 						 GCancellable *cancellable,
- 						 GError **error);
-+void		camel_stream_buffer_discard_cache	(CamelStreamBuffer *sbf);
- 
- G_END_DECLS
- 
-diff --git a/src/camel/providers/pop3/camel-pop3-store.c b/src/camel/providers/pop3/camel-pop3-store.c
-index 81c370f0a..5c9eb1eaa 100644
---- a/src/camel/providers/pop3/camel-pop3-store.c
-+++ b/src/camel/providers/pop3/camel-pop3-store.c
-@@ -205,6 +205,8 @@ connect_to_server (CamelService *service,
- 
- 	if (tls_stream != NULL) {
- 		camel_stream_set_base_stream (stream, tls_stream);
-+		/* Truncate any left cached input from the insecure part of the session */
-+		camel_pop3_stream_discard_cache (pop3_engine->stream);
- 		g_object_unref (tls_stream);
- 	} else {
- 		g_prefix_error (
-diff --git a/src/camel/providers/pop3/camel-pop3-stream.c b/src/camel/providers/pop3/camel-pop3-stream.c
-index 74bb11e61..c485b9bd6 100644
---- a/src/camel/providers/pop3/camel-pop3-stream.c
-+++ b/src/camel/providers/pop3/camel-pop3-stream.c
-@@ -457,3 +457,14 @@ camel_pop3_stream_getd (CamelPOP3Stream *is,
- 
- 	return 1;
- }
-+
-+void
-+camel_pop3_stream_discard_cache (CamelPOP3Stream *is)
-+{
-+	if (is) {
-+		is->ptr = is->end = is->buf;
-+		is->lineptr = is->linebuf;
-+		is->lineend = is->linebuf + CAMEL_POP3_STREAM_LINE_SIZE;
-+		is->ptr[0] = '\n';
-+	}
-+}
-diff --git a/src/camel/providers/pop3/camel-pop3-stream.h b/src/camel/providers/pop3/camel-pop3-stream.h
-index bb6dbb903..128c8c45a 100644
---- a/src/camel/providers/pop3/camel-pop3-stream.h
-+++ b/src/camel/providers/pop3/camel-pop3-stream.h
-@@ -87,6 +87,7 @@ gint		camel_pop3_stream_getd		(CamelPOP3Stream *is,
- 						 guint *len,
- 						 GCancellable *cancellable,
- 						 GError **error);
-+void		camel_pop3_stream_discard_cache	(CamelPOP3Stream *is);
- 
- G_END_DECLS
- 
-diff --git a/src/camel/providers/smtp/camel-smtp-transport.c b/src/camel/providers/smtp/camel-smtp-transport.c
-index 035baf367..1fc0f3206 100644
---- a/src/camel/providers/smtp/camel-smtp-transport.c
-+++ b/src/camel/providers/smtp/camel-smtp-transport.c
-@@ -323,6 +323,8 @@ connect_to_server (CamelService *service,
- 
- 	if (tls_stream != NULL) {
- 		camel_stream_set_base_stream (stream, tls_stream);
-+		/* Truncate any left cached input from the insecure part of the session */
-+		camel_stream_buffer_discard_cache (transport->istream);
- 		g_object_unref (tls_stream);
- 	} else {
- 		g_prefix_error (
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch b/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch
deleted file mode 100644
index b2c0622a90..0000000000
--- a/gnu/packages/patches/evolution-data-server-CVE-2020-16117.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 2cc39592b532cf0dc994fd3694b8e6bf924c9ab5 Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Mon, 10 Feb 2020 10:00:32 +0100
-Subject: [PATCH] I#189 - Crash on malformed server response with minimal
- capabilities
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/189
----
- src/camel/providers/imapx/camel-imapx-server.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
-index 3c38fb1e9..3883321ec 100644
---- a/src/camel/providers/imapx/camel-imapx-server.c
-+++ b/src/camel/providers/imapx/camel-imapx-server.c
-@@ -3045,7 +3045,8 @@ connected:
- 
- 			/* See if we got new capabilities
- 			 * in the STARTTLS response. */
--			imapx_free_capability (is->priv->cinfo);
-+			if (is->priv->cinfo)
-+				imapx_free_capability (is->priv->cinfo);
- 			is->priv->cinfo = NULL;
- 			if (ic->status->condition == IMAPX_CAPABILITY) {
- 				is->priv->cinfo = ic->status->u.cinfo;
--- 
-GitLab
-
diff --git a/gnu/packages/patches/evolution-data-server-libical-compat.patch b/gnu/packages/patches/evolution-data-server-libical-compat.patch
deleted file mode 100644
index da4302d42e..0000000000
--- a/gnu/packages/patches/evolution-data-server-libical-compat.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Prevent test failure and possible data loss due to API change in libical 3.0.7.
-
-https://gitlab.gnome.org/GNOME/evolution-data-server/issues/185
-https://lists.infradead.org/pipermail/libical-devel/2020-January/000907.html
-
-Adapted from upstream:
-
-https://gitlab.gnome.org/GNOME/evolution-data-server/commit/77384ab552c19bf374dbeda53dc37f98d07bd4ec
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e16b8b225..b3c881967 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -111,7 +111,7 @@ add_definitions(-DSOUP_VERSION_MIN_REQUIRED=${soup_encoded_version})
- 
- set(gcr_minimum_version 3.4)
- set(libgdata_minimum_version 0.15.1)
--set(libical_glib_minimum_version 3.0.5)
-+set(libical_glib_minimum_version 3.0.7)
- set(libsecret_minimum_version 0.5)
- set(libxml_minimum_version 2.0.0)
- set(sqlite_minimum_version 3.7.17)
-diff --git a/src/calendar/libedata-cal/e-cal-meta-backend.c b/src/calendar/libedata-cal/e-cal-meta-backend.c
-index 7501f2a43..93f4806ba 100644
---- a/src/calendar/libedata-cal/e-cal-meta-backend.c
-+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
-@@ -4067,8 +4067,7 @@ e_cal_meta_backend_inline_local_attachments_sync (ECalMetaBackend *meta_backend,
- 					gchar *base64;
- 
- 					base64 = g_base64_encode ((const guchar *) content, len);
--					new_attach = i_cal_attach_new_from_data (base64, NULL, NULL);
-+					new_attach = i_cal_attach_new_from_data (base64, (GFunc) g_free, NULL);
- 					g_free (content);
--					g_free (base64);
- 
- 					ecmb_remove_all_but_filename_parameter (prop);
diff --git a/gnu/packages/patches/evolution-data-server-locales.patch b/gnu/packages/patches/evolution-data-server-locales.patch
deleted file mode 100644
index 48baefb0d8..0000000000
--- a/gnu/packages/patches/evolution-data-server-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch fixes locale canonicalization when using newer versions of
-ICU.  It comes from the upstream repo, and should appear starting in
-version 3.33.5.
-
-From fe4ac94ce3c14f200e049a5d102fc0e4b811c71e Mon Sep 17 00:00:00 2001
-From: Milan Crha <mcrha@redhat.com>
-Date: Tue, 16 Jul 2019 07:22:07 +0200
-Subject: [PATCH] I#137 - POSIX locale tests fail with ICU 64.x
-
-Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/137
----
- src/libedataserver/e-collator.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/libedataserver/e-collator.c b/src/libedataserver/e-collator.c
-index 718eac5da..ec2cf7951 100644
---- a/src/libedataserver/e-collator.c
-+++ b/src/libedataserver/e-collator.c
-@@ -132,6 +132,11 @@ canonicalize_locale (const gchar *posix_locale,
- 	gint   len;
- 	const gchar *collation_type = NULL;
- 
-+	if (posix_locale && (
-+	    g_ascii_strcasecmp (posix_locale, "C") == 0 ||
-+	    g_ascii_strcasecmp (posix_locale, "POSIX") == 0))
-+		posix_locale = "en_US_POSIX";
-+
- 	len = uloc_canonicalize (posix_locale, locale_buffer, LOCALE_BUFFER_LEN, &status);
- 
- 	if (U_FAILURE (status)) {
--- 
-2.22.0
-
diff --git a/gnu/packages/patches/farstream-gupnp.patch b/gnu/packages/patches/farstream-gupnp.patch
new file mode 100644
index 0000000000..f46170ab26
--- /dev/null
+++ b/gnu/packages/patches/farstream-gupnp.patch
@@ -0,0 +1,140 @@
+From e70dcd0a9f89efbdaa011c20737ad550635ea580 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete@collabora.com>
+Date: Tue, 20 Oct 2020 19:51:22 -0400
+Subject: [PATCH] rawudp-upnp test: Also build against new GUPnP 1.2 library if
+ present
+
+Update the configure test to match
+---
+ configure.ac                          | 17 +++++++++++++++++
+ tests/check/Makefile.am               |  7 +++----
+ tests/check/transmitter/rawudp-upnp.c | 16 ++++++++++++++--
+ tests/check/transmitter/rawudp.c      |  4 ++--
+ 4 files changed, 36 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 03afc96b..1efed132 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -370,8 +370,25 @@ fi
+ 
+ if test "x$HAVE_GUPNP" = "xyes"; then
+    AC_DEFINE(HAVE_GUPNP,,[Have the GUPnP IGD library])
++
++    PKG_CHECK_MODULES(GUPNP_CORE, [ gupnp-1.2 ],
++	[ HAVE_GUPNP_CORE_12=yes ],
++	[ HAVE_GUPNP_CORE_12=no
++	  PKG_CHECK_MODULES(GUPNP_CORE, [ gupnp-1.0 ],
++	     [ HAVE_GUPNP_CORE_10=yes ],
++	     [ HAVE_GUPNP_CORE_10=no ])
++    ])
++
++    if test "x$HAVE_GUPNP_CORE_10" = "xyes"; then
++       AC_DEFINE(HAVE_GUPNP_CORE_10,,[Have the GUPnP 1.0 library])
++    fi
++
++    if test "x$HAVE_GUPNP_CORE_12" = "xyes"; then
++       AC_DEFINE(HAVE_GUPNP_CORE_12,,[Have the GUPnP 1.2 library])
++    fi
+ fi
+ 
++
+ dnl build static plugins or not
+ AC_MSG_CHECKING([whether to build static plugins or not])
+ AC_ARG_ENABLE(
+diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
+index d50fc264..d21687d7 100644
+--- a/tests/check/Makefile.am
++++ b/tests/check/Makefile.am
+@@ -76,9 +76,9 @@ base_fscodec_SOURCES = \
+ 
+ 
+ transmitter_rawudp_CFLAGS = $(AM_CFLAGS) \
+-	$(GUPNP_CFLAGS) $(GIO_CFLAGS) $(NICE_CFLAGS)
++	$(GUPNP_CORE_CFLAGS) $(GIO_CFLAGS) $(NICE_CFLAGS)
+ transmitter_rawudp_LDADD = $(LDADD) \
+-	$(GUPNP_LIBS) \
++	$(GUPNP_CORE_LIBS) \
+ 	$(GIO_LIBS) \
+ 	$(NICE_LIBS)
+ transmitter_rawudp_SOURCES = \
+@@ -113,9 +113,8 @@ transmitter_nice_SOURCES = \
+ transmitter_nice_LDADD = $(LDADD) $(GST_BASE_LIBS)
+ 
+ 
+-transmitter_shm_CFLAGS = $(AM_CFLAGS) $(GUPNP_CFLAGS) $(NICE_CFLAGS)
++transmitter_shm_CFLAGS = $(AM_CFLAGS) $(NICE_CFLAGS)
+ transmitter_shm_LDADD = $(LDADD) \
+-	$(GUPNP_LIBS) \
+ 	$(NICE_LIBS)
+ transmitter_shm_SOURCES = \
+ 	check-threadsafe.h  \
+diff --git a/tests/check/transmitter/rawudp-upnp.c b/tests/check/transmitter/rawudp-upnp.c
+index 4818cd28..9ccf85d8 100644
+--- a/tests/check/transmitter/rawudp-upnp.c
++++ b/tests/check/transmitter/rawudp-upnp.c
+@@ -37,7 +37,7 @@ get_vars (gboolean *out_got_address,
+ }
+ 
+ 
+-#ifdef HAVE_GUPNP
++#if defined(HAVE_GUPNP_CORE_10) || defined(HAVE_GUPNP_CORE_12)
+ 
+ #include <libgupnp/gupnp.h>
+ 
+@@ -126,8 +126,14 @@ start_upnp_server (void)
+   GUPnPDeviceInfo *subdev1;
+   GUPnPDeviceInfo *subdev2;
+   const gchar *upnp_xml_path;
++  GError *gerr = NULL;
+ 
+-  context = gupnp_context_new (NULL, NULL, 0, NULL);
++#ifdef HAVE_GUPNP_CORE_12
++  context = gupnp_context_new (NULL, 0, &gerr);
++#else
++  context = gupnp_context_new (NULL, NULL, 0, &gerr);
++#endif
++  g_assert_no_error (gerr);
+   ts_fail_if (context == NULL, "Can't get gupnp context");
+ 
+   if (g_getenv ("UPNP_XML_PATH"))
+@@ -137,8 +143,14 @@ start_upnp_server (void)
+ 
+   gupnp_context_host_path (context, upnp_xml_path, "");
+ 
++#ifdef HAVE_GUPNP_CORE_12
++  dev = gupnp_root_device_new (context, "InternetGatewayDevice.xml",
++      upnp_xml_path, &gerr);
++  g_assert_no_error (gerr);
++#else
+   dev = gupnp_root_device_new (context, "InternetGatewayDevice.xml",
+       upnp_xml_path);
++#endif
+   ts_fail_if (dev == NULL, "could not get root dev");
+ 
+   subdev1 = gupnp_device_info_get_device (GUPNP_DEVICE_INFO (dev),
+diff --git a/tests/check/transmitter/rawudp.c b/tests/check/transmitter/rawudp.c
+index e1936ac0..d803f347 100644
+--- a/tests/check/transmitter/rawudp.c
++++ b/tests/check/transmitter/rawudp.c
+@@ -637,7 +637,7 @@ GST_START_TEST (test_rawudptransmitter_stop_stream)
+ }
+ GST_END_TEST;
+ 
+-#ifdef HAVE_GUPNP
++#if defined(HAVE_GUPNP_CORE_10) || defined (HAVE_GUPNP_CORE_12)
+ 
+ GST_START_TEST (test_rawudptransmitter_run_upnp_discovery)
+ {
+@@ -967,7 +967,7 @@ rawudptransmitter_suite (void)
+   tcase_add_test (tc_chain, test_rawudptransmitter_stop_stream);
+   suite_add_tcase (s, tc_chain);
+ 
+-#ifdef HAVE_GUPNP
++#if defined(HAVE_GUPNP_CORE_10) || defined (HAVE_GUPNP_CORE_12)
+   if (g_getenv ("UPNP")) {
+     gchar *multicast_addr;
+ 
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/findutils-test-rwlock-threads.patch b/gnu/packages/patches/findutils-test-rwlock-threads.patch
deleted file mode 100644
index 3062577c21..0000000000
--- a/gnu/packages/patches/findutils-test-rwlock-threads.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Skip "test-rwlock1" when multithreading is disabled, which is the case
-during bootstrapping on architectures not supported by GNU Mes.
-
-Taken from upstream gnulib:
-https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=fdff8bd09a7f053381f8bdb107ab5280b7c95959
-
-diff --git a/gnulib-tests/test-rwlock1.c b/gnulib-tests/test-rwlock1.c
---- a/gnulib-tests/test-rwlock1.c
-+++ b/gnulib-tests/test-rwlock1.c
-@@ -21,6 +21,8 @@
- 
- #include <config.h>
- 
-+#if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS
-+
- #include "glthread/lock.h"
- 
- #include <errno.h>
-@@ -151,3 +153,18 @@ main ()
-       sleep (1);
-     }
- }
-+
-+#else
-+
-+/* No multithreading available.  */
-+
-+#include <stdio.h>
-+
-+int
-+main ()
-+{
-+  fputs ("Skipping test: multithreading not enabled\n", stderr);
-+  return 77;
-+}
-+
-+#endif
-
diff --git a/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
new file mode 100644
index 0000000000..b6e942ee10
--- /dev/null
+++ b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
@@ -0,0 +1,15 @@
+Pretend that stat's mtime is broken, so that the fontconfig cache does not
+depend upon modification time to determine if a cache is stale.
+
+diff --git a/src/fcstat.c b/src/fcstat.c
+index 5a2bd7c..d603a96 100644
+--- a/src/fcstat.c
++++ b/src/fcstat.c
+@@ -431,6 +431,7 @@ FcIsFsMmapSafe (int fd)
+ FcBool
+ FcIsFsMtimeBroken (const FcChar8 *dir)
+ {
++    return FcTrue;
+     int fd = FcOpen ((const char *) dir, O_RDONLY);
+ 
+     if (fd != -1)
diff --git a/gnu/packages/patches/fontconfig-hurd-path-max.patch b/gnu/packages/patches/fontconfig-hurd-path-max.patch
deleted file mode 100644
index f804e6801f..0000000000
--- a/gnu/packages/patches/fontconfig-hurd-path-max.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Avoid usage of PATH_MAX.
-
-Taken from https://salsa.debian.org/freedesktop-team/fontconfig/-/blob/master/debian/patches/path_max.patch
-
-Index: fontconfig-2.13.1/src/fccfg.c
-===================================================================
---- fontconfig-2.13.1.orig/src/fccfg.c
-+++ fontconfig-2.13.1/src/fccfg.c
-@@ -2231,7 +2231,7 @@ FcConfigRealFilename (FcConfig		*config,
- 
-     if (n)
-     {
--	FcChar8 buf[PATH_MAX];
-+	FcChar8 buf[FC_PATH_MAX];
- 	ssize_t len;
- 
- 	if (sysroot)
diff --git a/gnu/packages/patches/freecad-boost-serialization.patch b/gnu/packages/patches/freecad-boost-serialization.patch
new file mode 100644
index 0000000000..374eabc966
--- /dev/null
+++ b/gnu/packages/patches/freecad-boost-serialization.patch
@@ -0,0 +1,27 @@
+Taken from: https://github.com/archlinux/svntogit-community/blob/packages/freecad/trunk/freecad-boost.patch.
+
+Index: FreeCAD-0.19.2/CMakeLists.txt
+===================================================================
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -46,6 +46,7 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LI
+     SetupPCL()
+     SetupPybind11()
+     SetupBoost()
++	set(Boost_LIBRARIES_App ${Boost_LIBRARIES})
+     SetupXercesC()
+     find_package(ZLIB REQUIRED)
+     find_package(PyCXX REQUIRED)
+Index: FreeCAD-0.19.2/src/App/CMakeLists.txt
+===================================================================
+--- a/src/App/CMakeLists.txt
++++ b/src/App/CMakeLists.txt
+@@ -59,7 +59,7 @@ include_directories(
+ 
+ set(FreeCADApp_LIBS
+     FreeCADBase
+-    ${Boost_LIBRARIES}
++    ${Boost_LIBRARIES_App}
+ )
+ 
+ if (BUILD_QT5)
diff --git a/gnu/packages/patches/freecad-vtk9.patch b/gnu/packages/patches/freecad-vtk9.patch
new file mode 100644
index 0000000000..74568f4318
--- /dev/null
+++ b/gnu/packages/patches/freecad-vtk9.patch
@@ -0,0 +1,827 @@
+From bb9bcbd51df7c3cb76c5823038e4ea0f7e25a9ff Mon Sep 17 00:00:00 2001
+From: wmayer <wmayer@users.sourceforge.net>
+Date: Mon, 12 Oct 2020 17:56:03 +0200
+Subject: [PATCH] Make smesh compile with vtk9
+
+---
+ .../salomesmesh/inc/SMDS_MeshElement.hxx      |  9 +++-
+ .../salomesmesh/inc/SMDS_UnstructuredGrid.hxx |  4 ++
+ .../salomesmesh/src/SMDS/SMDS_BallElement.cpp |  9 +++-
+ .../salomesmesh/src/SMDS/SMDS_Downward.cpp    | 44 +++++++++----------
+ .../salomesmesh/src/SMDS/SMDS_Mesh.cpp        |  6 ++-
+ .../src/SMDS/SMDS_Mesh0DElement.cpp           | 12 +++++
+ .../salomesmesh/src/SMDS/SMDS_MeshNode.cpp    | 10 ++---
+ .../src/SMDS/SMDS_UnstructuredGrid.cpp        | 35 +++++++++++++--
+ .../src/SMDS/SMDS_VtkCellIterator.cpp         |  7 +--
+ .../salomesmesh/src/SMDS/SMDS_VtkEdge.cpp     | 19 +++++++-
+ .../salomesmesh/src/SMDS/SMDS_VtkFace.cpp     | 29 ++++++++++--
+ .../salomesmesh/src/SMDS/SMDS_VtkVolume.cpp   | 38 +++++++++++-----
+ .../src/SMESH/SMESH_MeshEditor.cpp            |  8 ++--
+ src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp |  7 ++-
+ 14 files changed, 179 insertions(+), 58 deletions(-)
+
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_MeshElement.hxx
+@@ -40,11 +40,16 @@
+ 
+ #include <vtkType.h>
+ #include <vtkCellType.h>
++#include <vtkCellArray.h>
+ 
+ //typedef unsigned short UShortType;
+ typedef short ShortType;
+ typedef int   LongType;
+-
++#ifdef VTK_CELL_ARRAY_V2
++typedef const vtkIdType* vtkIdTypePtr;
++#else
++typedef vtkIdType* vtkIdTypePtr;
++#endif
+ class SMDS_MeshNode;
+ class SMDS_MeshEdge;
+ class SMDS_MeshFace;
+@@ -192,7 +197,7 @@ protected:
+   //! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
+   int myID;
+   //! index in vtkUnstructuredGrid
+-  int myVtkID;
++  vtkIdType myVtkID;
+   //! SMDS_Mesh identification in SMESH
+   ShortType myMeshId;
+   //! SubShape and SubMesh identification in SMESHDS
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/inc/SMDS_UnstructuredGrid.hxx
+@@ -95,7 +95,11 @@ public:
+                                        std::map<int, std::map<long,int> >& nodeQuadDomains);
+   vtkCellLinks* GetLinks()
+   {
++#ifdef VTK_CELL_ARRAY_V2
++    return static_cast<vtkCellLinks*>(GetCellLinks());
++#else
+     return Links;
++#endif
+   }
+   SMDS_Downward* getDownArray(unsigned char vtkType)
+   {
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_BallElement.cpp
+@@ -67,10 +67,16 @@ void SMDS_BallElement::SetDiameter(doubl
+ bool SMDS_BallElement::ChangeNode (const SMDS_MeshNode * node)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  cellPoints->SetId(0, node->getVtkId());
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   pts[0] = node->getVtkId();
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -83,7 +89,8 @@ void SMDS_BallElement::Print (std::ostre
+ const SMDS_MeshNode* SMDS_BallElement::GetNode (const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ 0 ]);
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Downward.cpp
+@@ -303,7 +303,7 @@ int SMDS_Down1D::getNodeSet(int cellId,
+ void SMDS_Down1D::setNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbDownCells);
+   //ASSERT(npts == _nbDownCells);
+@@ -357,7 +357,7 @@ int SMDS_Down1D::computeVtkCells(int *pt
+     {
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -532,7 +532,7 @@ int SMDS_Down2D::computeVolumeIds(int ce
+   // --- find point id's of the face
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(cellId, npts, pts);
+   vector<int> nodes;
+   for (int i = 0; i < npts; i++)
+@@ -577,7 +577,7 @@ int SMDS_Down2D::computeVolumeIdsFromNod
+       vtkIdType point = pts[i];
+       int numCells = _grid->GetLinks()->GetNcells(point);
+       //MESSAGE("cells pour " << i << " " << numCells);
+-      vtkIdType *cells = _grid->GetLinks()->GetCells(point);
++      vtkIdTypePtr cells = _grid->GetLinks()->GetCells(point);
+       for (int j = 0; j < numCells; j++)
+         {
+           int vtkCellId = cells[j];
+@@ -627,7 +627,7 @@ int SMDS_Down2D::computeVolumeIdsFromNod
+ void SMDS_Down2D::setTempNodes(int cellId, int vtkId)
+ {
+   vtkIdType npts = 0;
+-  vtkIdType *pts; // will refer to the point id's of the face
++  vtkIdTypePtr pts; // will refer to the point id's of the face
+   _grid->GetCellPoints(vtkId, npts, pts);
+   // MESSAGE(vtkId << " " << npts << "  " << _nbNodes);
+   //ASSERT(npts == _nbNodes);
+@@ -795,7 +795,7 @@ void SMDS_Down3D::getNodeIds(int cellId,
+ {
+   int vtkId = this->_vtkCellIds[cellId];
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(vtkId, npts, nodes);
+   for (int i = 0; i < npts; i++)
+     nodeSet.insert(nodes[i]);
+@@ -1126,7 +1126,7 @@ void SMDS_DownTetra::getOrderedNodesOfFa
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1178,7 +1178,7 @@ void SMDS_DownTetra::computeFacesWithNod
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1234,7 +1234,7 @@ void SMDS_DownQuadTetra::getOrderedNodes
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1288,7 +1288,7 @@ void SMDS_DownQuadTetra::computeFacesWit
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1357,7 +1357,7 @@ void SMDS_DownPyramid::getOrderedNodesOf
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1435,7 +1435,7 @@ void SMDS_DownPyramid::computeFacesWithN
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1500,7 +1500,7 @@ void SMDS_DownQuadPyramid::getOrderedNod
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1580,7 +1580,7 @@ void SMDS_DownQuadPyramid::computeFacesW
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1660,7 +1660,7 @@ void SMDS_DownPenta::getOrderedNodesOfFa
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1744,7 +1744,7 @@ void SMDS_DownPenta::computeFacesWithNod
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1810,7 +1810,7 @@ void SMDS_DownQuadPenta::getOrderedNodes
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -1896,7 +1896,7 @@ void SMDS_DownQuadPenta::computeFacesWit
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -1981,7 +1981,7 @@ void SMDS_DownHexa::getOrderedNodesOfFac
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2036,7 +2036,7 @@ void SMDS_DownHexa::computeFacesWithNode
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+@@ -2112,7 +2112,7 @@ void SMDS_DownQuadHexa::getOrderedNodesO
+   //MESSAGE("cellId = " << cellId);
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(this->_vtkCellIds[cellId], npts, nodes);
+ 
+   set<int> tofind;
+@@ -2167,7 +2167,7 @@ void SMDS_DownQuadHexa::computeFacesWith
+   // --- find point id's of the volume
+ 
+   vtkIdType npts = 0;
+-  vtkIdType *nodes; // will refer to the point id's of the volume
++  vtkIdTypePtr nodes; // will refer to the point id's of the volume
+   _grid->GetCellPoints(cellId, npts, nodes);
+ 
+   // --- create all the ordered list of node id's for each face
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh.cpp
+@@ -4768,7 +4768,11 @@ void SMDS_Mesh::dumpGrid(string ficdump)
+         ficcon << endl;
+   }
+   ficcon << "-------------------------------- connectivity " <<  nbPoints << endl;
+-        vtkCellLinks *links = myGrid->GetCellLinks();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkCellLinks *links = static_cast<vtkCellLinks*>(myGrid->GetCellLinks());
++#else
++  vtkCellLinks *links = myGrid->GetCellLinks();
++#endif
+   for (int i=0; i<nbPoints; i++)
+   {
+         int ncells = links->GetNcells(i);
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_Mesh0DElement.cpp
+@@ -146,6 +146,17 @@ bool SMDS_Mesh0DElement::ChangeNodes(con
+   if ( nbNodes == 1 )
+   {
+     vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++    vtkNew<vtkIdList> cellPoints;
++    grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++    if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++    myNode = nodes[0];
++    cellPoints->SetId(0, myNode->getVtkId());
++#else
+     vtkIdType npts = 0;
+     vtkIdType* pts = 0;
+     grid->GetCellPoints(myVtkID, npts, pts);
+@@ -156,6 +167,7 @@ bool SMDS_Mesh0DElement::ChangeNodes(con
+     }
+     myNode = nodes[0];
+     pts[0] = myNode->getVtkId();
++#endif
+ 
+     SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+     return true;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_MeshNode.cpp
+@@ -191,7 +191,7 @@ public:
+ SMDS_ElemIteratorPtr SMDS_MeshNode::
+ GetInverseElementIterator(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   //MESSAGE("myID " << myID << " ncells " << l.ncells);
+   return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+ }
+@@ -251,7 +251,7 @@ elementsIterator(SMDSAbs_ElementType typ
+     return SMDS_MeshElement::elementsIterator(SMDSAbs_Node);
+   else
+   {
+-    vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++    vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+     return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type));
+   }
+ }
+@@ -350,7 +350,7 @@ void SMDS_MeshNode::AddInverseElement(co
+   const SMDS_MeshCell *cell = dynamic_cast<const SMDS_MeshCell*> (ME);
+   assert(cell);
+   SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkCellLinks *Links = grid->GetCellLinks();
++  vtkCellLinks *Links = static_cast<vtkCellLinks*>(grid->GetCellLinks());
+   Links->ResizeCellList(myVtkID, 1);
+   Links->AddCellReference(cell->getVtkId(), myVtkID);
+ }
+@@ -366,7 +366,7 @@ void SMDS_MeshNode::ClearInverseElements
+ 
+ bool SMDS_MeshNode::emptyInverseElements()
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+   return (l.ncells == 0);
+ }
+ 
+@@ -378,7 +378,7 @@ bool SMDS_MeshNode::emptyInverseElements
+ 
+ int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const
+ {
+-  vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID);
++  vtkCellLinks::Link l = static_cast<vtkCellLinks*>(SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks())->GetLink(myVtkID);
+ 
+   if ( type == SMDSAbs_All )
+     return l.ncells;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_UnstructuredGrid.cpp
+@@ -139,8 +139,8 @@ int SMDS_UnstructuredGrid::InsertNextLin
+   for (; it != setOfNodes.end(); ++it)
+     {
+       //MESSAGE("reverse link for node " << *it << " cell " << cellid);
+-      this->Links->ResizeCellList(*it, 1);
+-      this->Links->AddCellReference(cellid, *it);
++      this->GetLinks()->ResizeCellList(*it, 1);
++      this->GetLinks()->AddCellReference(cellid, *it);
+     }
+ 
+   return cellid;
+@@ -332,9 +332,13 @@ void SMDS_UnstructuredGrid::copyBloc(vtk
+     {
+       newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
+       idCellsOldToNew[j] = alreadyCopied; // old vtkId --> new vtkId
++#ifdef VTK_CELL_ARRAY_V2
++      vtkIdType oldLoc = this->GetCellLocationsArray()->GetValue(j);
++#else
+       vtkIdType oldLoc = this->Locations->GetValue(j);
++#endif
+       vtkIdType nbpts;
+-      vtkIdType *oldPtsCell = 0;
++      vtkIdTypePtr oldPtsCell = 0;
+       this->Connectivity->GetCell(oldLoc, nbpts, oldPtsCell);
+       assert(nbpts < NBMAXNODESINCELL);
+       //MESSAGE(j << " " << alreadyCopied << " " << (int)this->Types->GetValue(j) << " " << oldLoc << " " << nbpts );
+@@ -952,6 +956,21 @@ void SMDS_UnstructuredGrid::GetNodeIds(s
+  */
+ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map<int, int> localClonedNodeIds)
+ {
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  this->GetCellPoints(vtkVolId, cellPoints.GetPointer());
++  for (vtkIdType i = 0; i < cellPoints->GetNumberOfIds(); i++)
++    {
++      if (localClonedNodeIds.count(cellPoints->GetId(i)))
++        {
++          vtkIdType oldpt = cellPoints->GetId(i);
++          cellPoints->SetId(i, localClonedNodeIds[oldpt]);
++          //MESSAGE(oldpt << " --> " << pts[i]);
++          //this->RemoveReferenceToCell(oldpt, vtkVolId);
++          //this->AddReferenceToCell(pts[i], vtkVolId);
++        }
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType *pts; // will refer to the point id's of the face
+   this->GetCellPoints(vtkVolId, npts, pts);
+@@ -966,6 +985,7 @@ void SMDS_UnstructuredGrid::ModifyCellNo
+           //this->AddReferenceToCell(pts[i], vtkVolId);
+         }
+     }
++#endif
+ }
+ 
+ /*! reorder the nodes of a face
+@@ -995,11 +1015,20 @@ void SMDS_UnstructuredGrid::BuildLinks()
+     this->Links->UnRegister(this);
+     }
+ 
++#ifdef VTK_CELL_ARRAY_V2
++  this->Links = SMDS_CellLinks::New();
++  GetLinks()->Allocate(this->GetNumberOfPoints());
++  GetLinks()->Register(this);
++//FIXME: vtk9
++  GetLinks()->BuildLinks(this);
++  GetLinks()->Delete();
++#else
+   this->Links = SMDS_CellLinks::New();
+   this->Links->Allocate(this->GetNumberOfPoints());
+   this->Links->Register(this);
+   this->Links->BuildLinks(this, this->Connectivity);
+   this->Links->Delete();
++#endif
+ }
+ 
+ /*! Create a volume (prism or hexahedron) by duplication of a face.
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkCellIterator.cpp
+@@ -33,7 +33,8 @@ SMDS_VtkCellIterator::SMDS_VtkCellIterat
+   }
+   else
+   {
+-    vtkIdType npts, *pts;
++    vtkIdType npts;
++    vtkIdTypePtr pts;
+     grid->GetCellPoints( _cellId, npts, pts );
+     _vtkIdList->SetNumberOfIds( _nbNodes = npts );
+     for (int i = 0; i < _nbNodes; i++)
+@@ -67,7 +68,7 @@ SMDS_VtkCellIteratorToUNV::SMDS_VtkCellI
+   //MESSAGE("SMDS_VtkCellInterlacedIterator (UNV)" << _type);
+ 
+   _vtkIdList = vtkIdList::New();
+-  vtkIdType* pts;
++  vtkIdTypePtr pts;
+   vtkIdType npts;
+   vtkUnstructuredGrid* grid = _mesh->getGrid();
+   grid->GetCellPoints((vtkIdType)_cellId, npts, pts);
+@@ -182,7 +183,7 @@ SMDS_VtkCellIteratorPolyH::SMDS_VtkCellI
+   {
+     //MESSAGE("SMDS_VtkCellIterator Polyhedra");
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(_cellId, nFaces, ptIds);
+     int id = 0;
+     _nbNodesInFaces = 0;
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkEdge.cpp
+@@ -67,6 +67,19 @@ bool SMDS_VtkEdge::ChangeNodes(const SMD
+ bool SMDS_VtkEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -79,6 +92,7 @@ bool SMDS_VtkEdge::ChangeNodes(const SMD
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -87,7 +101,7 @@ bool SMDS_VtkEdge::IsMediumNode(const SM
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   //MESSAGE("IsMediumNode " << npts  << " " << (node->getVtkId() == pts[npts-1]));
+   return ((npts == 3) && (node->getVtkId() == pts[2]));
+@@ -137,7 +151,8 @@ const SMDS_MeshNode*
+ SMDS_VtkEdge::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkFace.cpp
+@@ -101,6 +101,19 @@ void SMDS_VtkFace::initQuadPoly(const st
+ bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -113,6 +126,7 @@ bool SMDS_VtkFace::ChangeNodes(const SMD
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -173,7 +187,8 @@ const SMDS_MeshNode*
+ SMDS_VtkFace::GetNode(const int ind) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
+ }
+@@ -186,7 +201,8 @@ SMDS_VtkFace::GetNode(const int ind) con
+ int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   for ( vtkIdType i = 0; i < npts; ++i )
+     if ( pts[i] == node->getVtkId() )
+@@ -251,7 +267,7 @@ bool SMDS_VtkFace::IsMediumNode(const SM
+     return false;
+   }
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   vtkIdType nodeId = node->getVtkId();
+   for (int rank = 0; rank < npts; rank++)
+@@ -356,11 +372,18 @@ SMDS_NodeIteratorPtr SMDS_VtkFace::inter
+ void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  grid->RemoveReferenceToCell(cellPoints->GetId(0), myVtkID);
++  cellPoints->SetId(0, node->getVtkId());
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   grid->RemoveReferenceToCell(pts[0], myVtkID);
+   pts[0] = node->getVtkId();
++#endif
+   node->AddInverseElement(this),
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+ }
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMDS/SMDS_VtkVolume.cpp
+@@ -133,6 +133,19 @@ void SMDS_VtkVolume::initPoly(const std:
+ bool SMDS_VtkVolume::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+ {
+   vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
++#ifdef VTK_CELL_ARRAY_V2
++  vtkNew<vtkIdList> cellPoints;
++  grid->GetCellPoints(myVtkID, cellPoints.GetPointer());
++  if (nbNodes != cellPoints->GetNumberOfIds())
++    {
++      MESSAGE("ChangeNodes problem: not the same number of nodes " << cellPoints->GetNumberOfIds() << " -> " << nbNodes);
++      return false;
++    }
++  for (int i = 0; i < nbNodes; i++)
++    {
++      cellPoints->SetId(i, nodes[i]->getVtkId());
++    }
++#else
+   vtkIdType npts = 0;
+   vtkIdType* pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+@@ -145,6 +158,7 @@ bool SMDS_VtkVolume::ChangeNodes(const S
+     {
+       pts[i] = nodes[i]->getVtkId();
+     }
++#endif
+   SMDS_Mesh::_meshList[myMeshId]->setMyModified();
+   return true;
+ }
+@@ -207,7 +221,7 @@ int SMDS_VtkVolume::NbFaces() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbFaces = nFaces;
+         break;
+@@ -236,7 +250,7 @@ int SMDS_VtkVolume::NbNodes() const
+   else
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -276,7 +290,7 @@ int SMDS_VtkVolume::NbEdges() const
+     case VTK_POLYHEDRON:
+       {
+         vtkIdType nFaces = 0;
+-        vtkIdType* ptIds = 0;
++        vtkIdTypePtr ptIds = 0;
+         grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+         nbEdges = 0;
+         int id = 0;
+@@ -312,7 +326,7 @@ int SMDS_VtkVolume::NbFaceNodes(const in
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -342,7 +356,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -372,7 +386,7 @@ std::vector<int> SMDS_VtkVolume::GetQuan
+   if (aVtkType == VTK_POLYHEDRON)
+     {
+       vtkIdType nFaces = 0;
+-      vtkIdType* ptIds = 0;
++      vtkIdTypePtr ptIds = 0;
+       grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+       int id = 0;
+       for (int i = 0; i < nFaces; i++)
+@@ -430,7 +444,7 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+   if ( aVtkType == VTK_POLYHEDRON)
+   {
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+     int id = 0, nbPoints = 0;
+     for (int i = 0; i < nFaces; i++)
+@@ -443,7 +457,8 @@ const SMDS_MeshNode* SMDS_VtkVolume::Get
+     }
+     return 0;
+   }
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( aVtkType ));
+   return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ind]] );
+@@ -460,7 +475,7 @@ int SMDS_VtkVolume::GetNodeIndex( const
+   if ( aVtkType == VTK_POLYHEDRON)
+   {
+     vtkIdType nFaces = 0;
+-    vtkIdType* ptIds = 0;
++    vtkIdTypePtr ptIds = 0;
+     grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+     int id = 0;
+     for (int iF = 0; iF < nFaces; iF++)
+@@ -473,7 +488,8 @@ int SMDS_VtkVolume::GetNodeIndex( const
+     }
+     return -1;
+   }
+-  vtkIdType npts, *pts;
++  vtkIdType npts;
++  vtkIdTypePtr pts;
+   grid->GetCellPoints( this->myVtkID, npts, pts );
+   for ( vtkIdType i = 0; i < npts; ++i )
+     if ( pts[i] == node->getVtkId() )
+@@ -534,7 +550,7 @@ bool SMDS_VtkVolume::IsMediumNode(const
+       return false;
+   }
+   vtkIdType npts = 0;
+-  vtkIdType* pts = 0;
++  vtkIdTypePtr pts = 0;
+   grid->GetCellPoints(myVtkID, npts, pts);
+   vtkIdType nodeId = node->getVtkId();
+   for (int rank = 0; rank < npts; rank++)
+Index: FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
++++ FreeCAD-0.19.2/src/3rdParty/salomesmesh/src/SMESH/SMESH_MeshEditor.cpp
+@@ -11348,7 +11348,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+             {
+               int oldId = *itn;
+               //MESSAGE("     node " << oldId);
+-              vtkCellLinks::Link l = grid->GetCellLinks()->GetLink(oldId);
++              vtkCellLinks::Link l = static_cast<vtkCellLinks*>(grid->GetCellLinks())->GetLink(oldId);
+               for (int i=0; i<l.ncells; i++)
+                 {
+                   int vtkId = l.cells[i];
+@@ -11527,7 +11527,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+                                           //MESSAGE("  domain " << idom << " volume " << elem->GetID());
+                                           double values[3];
+                                           vtkIdType npts = 0;
+-                                          vtkIdType* pts = 0;
++                                          vtkIdTypePtr pts = 0;
+                                           grid->GetCellPoints(vtkVolIds[ivol], npts, pts);
+                                           SMDS_VtkVolume::gravityCenter(grid, pts, npts, values);
+                                           if (id ==0)
+@@ -11708,7 +11708,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGrou
+         {
+           int oldId = itnod->first;
+           //MESSAGE("     node " << oldId);
+-          vtkCellLinks::Link l = grid->GetCellLinks()->GetLink(oldId);
++          vtkCellLinks::Link l = static_cast<vtkCellLinks*>(grid->GetCellLinks())->GetLink(oldId);
+           for (int i = 0; i < l.ncells; i++)
+             {
+               int vtkId = l.cells[i];
+@@ -12165,7 +12165,7 @@ void SMESH_MeshEditor::CreateHoleSkin(do
+           MESSAGE("volume to check,  vtkId " << vtkId << " smdsId " << meshDS->fromVtkToSmds(vtkId));
+           bool volInside = false;
+           vtkIdType npts = 0;
+-          vtkIdType* pts = 0;
++          vtkIdTypePtr pts = 0;
+           grid->GetCellPoints(vtkId, npts, pts);
+           for (int i=0; i<npts; i++)
+             {
+Index: FreeCAD-0.19.2/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
+===================================================================
+--- FreeCAD-0.19.2.orig/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
++++ FreeCAD-0.19.2/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp
+@@ -20,7 +20,6 @@
+  *                                                                         *
+  ***************************************************************************/
+ 
+-
+ #include "PreCompiled.h"
+ 
+ #ifndef _PreComp_
diff --git a/gnu/packages/patches/freeglut-gcc-compat.patch b/gnu/packages/patches/freeglut-gcc-compat.patch
new file mode 100644
index 0000000000..126bbd89f4
--- /dev/null
+++ b/gnu/packages/patches/freeglut-gcc-compat.patch
@@ -0,0 +1,53 @@
+Fix build failure with GCC 10.
+
+Taken from upstream:
+https://github.com/dcnieho/FreeGLUT/commit/b9998bbc1e1c329f6bf69c24606a2be7a4973b8c
+
+diff --git a/src/fg_gl2.c b/src/fg_gl2.c
+--- a/src/fg_gl2.c
++++ b/src/fg_gl2.c
+@@ -27,6 +27,20 @@
+ #include "fg_internal.h"
+ #include "fg_gl2.h"
+ 
++#ifndef GL_ES_VERSION_2_0
++/* GLES2 has the corresponding entry points built-in, and these fgh-prefixed
++ * names are defined in fg_gl2.h header to reference them, for any other case,
++ * define them as function pointers here.
++ */
++FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++FGH_PFNGLBUFFERDATAPROC fghBufferData;
++FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++#endif
++
+ void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) {
+   if (fgStructure.CurrentWindow != NULL)
+     fgStructure.CurrentWindow->Window.attribute_v_coord = attrib;
+diff --git a/src/fg_gl2.h b/src/fg_gl2.h
+--- a/src/fg_gl2.h
++++ b/src/fg_gl2.h
+@@ -67,13 +67,13 @@ typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+ typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
+ typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+ 
+-FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
+-FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
+-FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
+-FGH_PFNGLBUFFERDATAPROC fghBufferData;
+-FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
+-FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
+-FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++extern FGH_PFNGLBUFFERDATAPROC fghBufferData;
++extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
+ 
+ #    endif
+ 
diff --git a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
deleted file mode 100644
index 1358e30633..0000000000
--- a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Do not override PYTHONPATH when calling Python code from the Haskell
-daemons.  This is necessary because the Python library dependencies are
-only available through PYTHONPATH.
-
-diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
---- a/src/Ganeti/Query/Exec.hs
-+++ b/src/Ganeti/Query/Exec.hs
-@@ -99,12 +99,10 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
-   do
-     use_debug <- isDebugMode
-     env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
--            . M.insert "PYTHONPATH" AC.pythondir
-             . M.fromList)
-            `liftM` getEnvironment
-     execPy <- P.jqueueExecutorPy
-     logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
--               ++ " with PYTHONPATH=" ++ AC.pythondir
- 
-     (master, child) <- pipeClient connectConfig
-     let (rh, wh) = clientToHandle child
-
diff --git a/gnu/packages/patches/gcc-10-cross-environment-variables.patch b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
new file mode 100644
index 0000000000..414198657d
--- /dev/null
+++ b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
@@ -0,0 +1,51 @@
+Search path environment variables for cross-compilers.  See the discussion
+at <http://gcc.gnu.org/ml/gcc/2013-02/msg00124.html>.
+
+Note: Touch 'C_INCLUDE_PATH' et al. rather than 'CPATH', as discussed
+at <http://bugs.gnu.org/22186>.
+
+diff --git a/gcc/gcc.c b/gcc/gcc.c
+--- a/gcc/gcc.c
++++ b/gcc/gcc.c
+@@ -4474,7 +4474,7 @@ process_command (unsigned int decoded_options_count,
+     }
+ 
+   temp = env.get (LIBRARY_PATH_ENV);
+-  if (temp && *cross_compile == '0')
++  if (temp)
+     {
+       const char *startp, *endp;
+       char *nstore = (char *) alloca (strlen (temp) + 3);
+diff --git a/gcc/incpath.c b/gcc/incpath.c
+--- a/gcc/incpath.c
++++ b/gcc/incpath.c
+@@ -472,8 +472,8 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 			 int stdinc, int cxx_stdinc, int verbose)
+ {
+   static const char *const lang_env_vars[] =
+-    { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+-      "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" };
++    { "CROSS_C_INCLUDE_PATH", "CROSS_CPLUS_INCLUDE_PATH",
++      "CROSS_OBJC_INCLUDE_PATH", "CROSS_OBJCPLUS_INCLUDE_PATH" };
+   cpp_options *cpp_opts = cpp_get_options (pfile);
+   size_t idx = (cpp_opts->objc ? 2: 0);
+ 
+@@ -484,7 +484,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 
+   /* CPATH and language-dependent environment variables may add to the
+      include chain.  */
+-  add_env_var_paths ("CPATH", INC_BRACKET);
++  add_env_var_paths ("CROSS_CPATH", INC_BRACKET);
+   add_env_var_paths (lang_env_vars[idx], INC_SYSTEM);
+ 
+   target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
+diff --git a/gcc/system.h b/gcc/system.h
+--- a/gcc/system.h
++++ b/gcc/system.h
+@@ -1244,4 +1244,6 @@ void gcc_stablesort (void *, size_t, size_t,
+    of the number.  */
+ #define PRsa(n) "%" #n PRIu64 "%c"
+ 
++#define LIBRARY_PATH_ENV "CROSS_LIBRARY_PATH"
++
+ #endif /* ! GCC_SYSTEM_H */
diff --git a/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch b/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch
new file mode 100644
index 0000000000..289d648875
--- /dev/null
+++ b/gnu/packages/patches/gcc-5-fix-powerpc64le-build.patch
@@ -0,0 +1,64 @@
+From ee6c0081c03330045b3d4cde8421cd1d3a459609 Mon Sep 17 00:00:00 2001
+From: Martin Liska <mliska@suse.cz>
+Date: Fri, 15 Jun 2018 10:51:28 +0200
+Subject: [PATCH] Partial backport r256656
+
+2018-06-15  Martin Liska  <mliska@suse.cz>
+
+	Backport from mainline
+	2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+	* lex.c (search_line_fast): Remove illegal coercion of an
+	unaligned pointer value to vector pointer type and replace with
+	use of __builtin_vec_vsx_ld () built-in function, which operates
+	on unaligned pointer values.
+
+From-SVN: r261621
+---
+
+Obtained from:
+
+https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=ee6c0081c03330045b3d4cde8421cd1d3a459609
+
+The libcpp/ChangeLog hunk was modified to apply on top of gcc-5's libcpp/ChangeLog.
+
+ libcpp/ChangeLog | 12 ++++++++++++
+ libcpp/lex.c     |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
+index c920a05d438..a63abb04f5e 100644
+--- a/libcpp/ChangeLog
++++ b/libcpp/ChangeLog
+@@ -1,3 +1,15 @@
++2018-06-15  Martin Liska  <mliska@suse.cz>
++
++	PR bootstrap/86162
++
++	Backport from mainline
++	2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
++
++	* lex.c (search_line_fast): Remove illegal coercion of an
++	unaligned pointer value to vector pointer type and replace with
++	use of __builtin_vec_vsx_ld () built-in function, which operates
++	on unaligned pointer values.
++
+ 2017-10-10  Release Manager
+ 
+ 	* GCC 5.5.0 released.
+diff --git a/libcpp/lex.c b/libcpp/lex.c
+index e5a0397f309..b789686f1c4 100644
+--- a/libcpp/lex.c
++++ b/libcpp/lex.c
+@@ -568,7 +568,7 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
+     {
+       vc m_nl, m_cr, m_bs, m_qm;
+ 
+-      data = *((const vc *)s);
++      data = __builtin_vec_vsx_ld (0, s);
+       s += 16;
+ 
+       m_nl = (vc) __builtin_vec_cmpeq(data, repl_nl);
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/gcc-cross-gxx-include-dir.patch b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
new file mode 100644
index 0000000000..d6c4ffddc4
--- /dev/null
+++ b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
@@ -0,0 +1,73 @@
+This patch reverts upstream commit b4d3485e4fc1d:
+
+  https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=b4d3485e4fc1d029e620a59deb54b3f4f3f6b209
+
+Otherwise, GCC ends up searching the wrong target directory for cross-headers.
+
+diff --git a/gcc/configure b/gcc/configure
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -3689,11 +3689,6 @@ esac
+ fi
+ 
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -3705,10 +3700,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 715fcba0482..88136e232df 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -204,11 +204,6 @@ no)	;;
+ *)	gcc_gxx_include_dir=$with_gxx_include_dir ;;
+ esac])
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -220,10 +215,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
diff --git a/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch
new file mode 100644
index 0000000000..6329b129d3
--- /dev/null
+++ b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc.patch
@@ -0,0 +1,179 @@
+From 9b31dfda73ee2d1b56b3f0dcfd3246c2faa592fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?L=C3=A9o=20Le=20Bouter?= <lle-bout@zaclys.net>
+Date: Sun, 28 Mar 2021 19:47:25 +0200
+Subject: [PATCH] Revert "fix #303: gdlib.pc: use Requires instead of Libs
+ (#537)"
+
+This reverts commit 28ecfe77c817aff8ce56422d3e4e8533a281bc76.
+---
+ CMakeLists.txt        | 12 ------------
+ config/gdlib.pc.cmake |  4 +---
+ config/gdlib.pc.in    |  4 +---
+ configure.ac          | 11 +----------
+ src/CMakeLists.txt    |  6 ------
+ 5 files changed, 3 insertions(+), 34 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57cd95d..6bd0c73 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -53,8 +53,6 @@ SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+   "Single Directory for all static libraries."
+   )
+ 
+-SET(PKG_REQUIRES_PRIVATES "")
+-
+ if (USE_EXT_GD)
+ 	message("Using GD at: ${USE_EXT_GD}")
+ 	INCLUDE_DIRECTORIES(BEFORE ${GD_INCLUDE_DIR})
+@@ -170,13 +168,11 @@ else (USE_EXT_GD)
+ 		INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS})
+ 		SET(HAVE_FT2BUILD_H 1)
+ 		SET(HAVE_LIBFREETYPE 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES freetype2)
+ 	ENDIF(FREETYPE_FOUND)
+ 
+ 	IF(ZLIB_FOUND)
+ 		INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
+ 		SET(HAVE_LIBZ 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES zlib)
+ 	ENDIF(ZLIB_FOUND)
+ 
+ 	IF(WEBP_FOUND)
+@@ -192,7 +188,6 @@ else (USE_EXT_GD)
+ 	IF(PNG_FOUND)
+ 		INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
+ 		SET(HAVE_LIBPNG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libpng)
+ 	ENDIF(PNG_FOUND)
+ 
+ 	IF(ICONV_FOUND)
+@@ -209,25 +204,21 @@ else (USE_EXT_GD)
+ 	IF(XPM_FOUND)
+ 		INCLUDE_DIRECTORIES(${XPM_INCLUDE_DIR})
+ 		SET(HAVE_LIBXPM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES xpm)
+ 	ENDIF(XPM_FOUND)
+ 
+ 	IF(JPEG_FOUND)
+ 		INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
+ 		SET(HAVE_LIBJPEG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libjpeg)
+ 	ENDIF(JPEG_FOUND)
+ 
+ 	IF(TIFF_FOUND)
+ 		INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR})
+ 		SET(HAVE_LIBTIFF 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libtiff-4)
+ 	ENDIF(TIFF_FOUND)
+ 
+ 	IF(FONTCONFIG_FOUND)
+ 		INCLUDE_DIRECTORIES(${FONTCONFIG_INCLUDE_DIR})
+ 		SET(HAVE_LIBFONTCONFIG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES fontconfig)
+ 	ELSE (FONTCONFIG_FOUND)
+ 		SET(FONTCONFIG_LIBRARY "")
+ 		SET(FONTCONFIG_INCLUDE_DIR "")
+@@ -236,11 +227,8 @@ else (USE_EXT_GD)
+ 
+ 	IF(RAQM_FOUND)
+ 		INCLUDE_DIRECTORIES(${RAQM_INCLUDE_DIR})
+-		SET(HAVE_RAQM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVAES raqm)
+ 	ENDIF(RAQM_FOUND)
+ 
+-	string(REPLACE ";" ", " PKG_REQUIRES_PRIVATES "${PKG_REQUIRES_PRIVATES}")
+ 	SET(HAVE_CONFIG_H 1)
+ 
+ 	ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+diff --git a/config/gdlib.pc.cmake b/config/gdlib.pc.cmake
+index 5fc8af4..d1a0dda 100644
+--- a/config/gdlib.pc.cmake
++++ b/config/gdlib.pc.cmake
+@@ -6,8 +6,6 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+ Name: gd
+ Description: GD graphics library
+ Version: @GDLIB_VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@
++Libs.private: @LIBGD_DEP_LIBS@
+ Libs: -L${libdir} -lgd
+diff --git a/config/gdlib.pc.in b/config/gdlib.pc.in
+index d6bc375..b980a60 100644
+--- a/config/gdlib.pc.in
++++ b/config/gdlib.pc.in
+@@ -6,8 +6,6 @@ includedir=@includedir@
+ Name: gd
+ Description: GD graphics library
+ Version: @VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@ @LIBICONV@
++Libs.private: @LIBS@ @LIBICONV@
+ Libs: -L${libdir} -lgd
+diff --git a/configure.ac b/configure.ac
+index 535db68..329c99c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -33,9 +33,6 @@ AC_SUBST(GDLIB_LT_CURRENT)
+ AC_SUBST(GDLIB_LT_REVISION)
+ AC_SUBST(GDLIB_LT_AGE)
+ 
+-AC_SUBST(LIBS_PRIVATES)
+-AC_SUBST(PKG_REQUIRES_PRIVATES)
+-
+ AM_INIT_AUTOMAKE([1.11 foreign dist-xz -Wall -Werror subdir-objects])
+ AC_CONFIG_HEADERS([src/config.h:src/config.hin])
+ 
+@@ -133,7 +130,6 @@ m4_define([GD_LIB_CHECK], [dnl
+   AC_MSG_RESULT([$gd_with_lib])
+ 
+   gd_found_lib=no
+-  gd_require_pkg_name=""
+   if test "$gd_with_lib" != "no"; then
+     save_CPPFLAGS=$CPPFLAGS
+     save_LDFLAGS=$LDFLAGS
+@@ -165,11 +161,6 @@ m4_define([GD_LIB_CHECK], [dnl
+       $1][_CFLAGS="$gd_lib_cflags $][$1][_CFLAGS"
+       AS_VAR_APPEND([LIBS], [" $][$1][_LIBS"])
+       AS_VAR_APPEND([CPPFLAGS], [" $][$1][_CFLAGS"])
+-      if test -z "$gd_require_pkg_name"; then
+-        AS_VAR_APPEND([LIBS_PRIVATES], [" $][$1][_LIBS"])
+-      else
+-        AS_VAR_APPEND([PKG_REQUIRES_PRIVATES], ["  $gd_require_pkg_name"])
+-      fi
+     elif test "$gd_with_lib" = "yes"; then
+       AC_MSG_ERROR([$3 requested but not found])
+     else
+@@ -189,7 +180,7 @@ dnl $4 - pkg-config module to look for
+ dnl $5 - fallback test for the feature
+ m4_define([GD_LIB_PKG_CHECK], [dnl
+   GD_LIB_CHECK([$1], [$2], [$3], [dnl
+-    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes gd_require_pkg_name="$4"], [$5])
++    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes], [$5])
+   ])
+ ])
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 509c422..49adbd6 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -142,12 +142,6 @@ if (BUILD_STATIC_LIBS)
+ 	target_link_libraries(${GD_LIB_STATIC} ${LIBGD_DEP_LIBS})
+ endif()
+ 
+-SET(LIBS_PRIVATES
+-	${ICONV_LIBRARIES}
+-	${LIQ_LIBRARIES}
+-	${WEBP_LIBRARIES}
+-)
+-
+ set(GD_PROGRAMS gdcmpgif)
+ 
+ if (PNG_FOUND)
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/gdb-fix-gnu-nat-build.patch b/gnu/packages/patches/gdb-fix-gnu-nat-build.patch
new file mode 100644
index 0000000000..b0249d9cec
--- /dev/null
+++ b/gnu/packages/patches/gdb-fix-gnu-nat-build.patch
@@ -0,0 +1,254 @@
+Fix build on the Hurd.
+
+Patch #1 taken from upstream
+
+    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=a1700a3199d31910b87cd7db3c394ddd091cfcde
+
+Patch #2 taken from upstream mailing list
+
+    https://sourceware.org/pipermail/gdb/2021-November/049777.html
+
+Patch #3 sent to upstream
+
+    https://sourceware.org/pipermail/gdb/2021-November/049788.html
+
+From 30d89407ad6bb62fafc72fa9c547c2d7ff371401 Mon Sep 17 00:00:00 2001
+From: Simon Marchi <simon.marchi@polymtl.ca>
+Date: Wed, 3 Nov 2021 15:09:19 -0400
+Subject: [PATCH 1/3] gdb: fix gnu-nat build
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+When building gnu-nat.c, we get:
+
+      CXX    gnu-nat.o
+    gnu-nat.c: In member function 'virtual void gnu_nat_target::create_inferior(const char*, const string&, char**, int)':
+    gnu-nat.c:2117:13: error: 'struct inf' has no member named 'target_is_pushed'
+     2117 |   if (!inf->target_is_pushed (this))
+          |             ^~~~~~~~~~~~~~~~
+    gnu-nat.c:2118:10: error: 'struct inf' has no member named 'push_target'
+     2118 |     inf->push_target (this);
+          |          ^~~~~~~~~~~
+
+This is because of a confusion between the generic `struct inferior`
+variable and the gnu-nat-specific `struct inf` variable.  Fix by
+referring to `inferior`, not `inf`.
+
+Adjust the comment on top of `struct inf` to clarify the purpose of that
+type.
+
+Co-Authored-By: Andrea Monaco <andrea.monaco@autistici.org>
+Change-Id: I2fe2f7f6ef61a38d79860fd262b08835c963fc77
+---
+ gdb/gnu-nat.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 67ce00e9c30..ab539b4d8b4 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -149,7 +149,7 @@ struct inf_wait
+     int suppress;		/* Something trivial happened.  */
+   };
+ 
+-/* The state of an inferior.  */
++/* Further Hurd-specific state of an inferior.  */
+ struct inf
+   {
+     /* Fields describing the current inferior.  */
+@@ -2114,8 +2114,8 @@ gnu_nat_target::create_inferior (const char *exec_file,
+ 
+   inf_debug (inf, "creating inferior");
+ 
+-  if (!inf->target_is_pushed (this))
+-    inf->push_target (this);
++  if (!inferior->target_is_pushed (this))
++    inferior->push_target (this);
+ 
+   pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me,
+ 		       NULL, NULL, NULL, NULL);
+From ebc0837f4693232f74eb2cc3033515b18a8f0900 Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Mon, 22 Nov 2021 07:47:28 +0100
+Subject: [PATCH 2/3] gdb: gnu-nat.c: port-rights.
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+Taken from:
+
+    https://sourceware.org/pipermail/gdb/2021-November/049777.html
+---
+ gdb/gnu-nat.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index ab539b4d8b4..8cd876b21d0 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -3292,15 +3292,17 @@ This is the same as setting `task pause', `exceptions', and\n\
+ 	    _("Show information about the task's send rights."));
+   add_info ("receive-rights", info_recv_rights_cmd,
+ 	    _("Show information about the task's receive rights."));
+-  add_info ("port-rights", info_port_rights_cmd,
+-	    _("Show information about the task's port rights."));
+-  add_info ("port-sets", info_port_sets_cmd,
+-	    _("Show information about the task's port sets."));
++  cmd_list_element *port_rights_cmd =
++    add_info ("port-rights", info_port_rights_cmd,
++             _("Show information about the task's port rights."));
++  cmd_list_element *port_sets_cmd =
++    add_info ("port-sets", info_port_sets_cmd,
++             _("Show information about the task's port sets."));
+   add_info ("dead-names", info_dead_names_cmd,
+-	    _("Show information about the task's dead names."));
+-  add_info_alias ("ports", "port-rights", 1);
+-  add_info_alias ("port", "port-rights", 1);
+-  add_info_alias ("psets", "port-sets", 1);
++            _("Show information about the task's dead names."));
++  add_info_alias ("ports", port_rights_cmd, 1);
++  add_info_alias ("port", port_rights_cmd, 1);
++  add_info_alias ("psets", port_sets_cmd, 1);
+ }
+ 
+ 
+From e8df985cdd95e4808c390e226a0e852d23c502f9 Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Mon, 22 Nov 2021 08:22:15 +0100
+Subject: [PATCH 3/3] gdb: More compile fixes for gnu-nat.c.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+This fixes compile errors like
+
+    ../../gdb-11.1/gdb/gnu-nat.c: In function ‘void add_task_commands()’:
+    ../../gdb-11.1/gdb/gnu-nat.c:3204:17: error: no matching function for call to ‘add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)’
+     3204 |         &setlist);
+          |                 ^
+    In file included from ../../gdb-11.1/gdb/completer.h:21,
+                     from ../../gdb-11.1/gdb/symtab.h:36,
+                     from ../../gdb-11.1/gdb/infrun.h:21,
+                     from ../../gdb-11.1/gdb/target.h:42,
+                     from ../../gdb-11.1/gdb/inf-child.h:23,
+                     from ../../gdb-11.1/gdb/gnu-nat.h:38,
+                     from ../../gdb-11.1/gdb/gnu-nat.c:24:
+    ../../gdb-11.1/gdb/command.h:160:33: note: candidate: ‘cmd_list_element* add_cmd(const char*, command_class, void (*)(const char*, int), const char*, cmd_list_element**)’
+      160 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+          |                                 ^~~~~~~
+    ../../gdb-11.1/gdb/command.h:161:30: note:   no known conversion for argument 3 from ‘cmd_list_element*’ to ‘void (*)(const char*, int)’
+      161 |       cmd_const_cfunc_ftype *fun,
+          |       ~~~~~~~~~~~~~~~~~~~~~~~^~~
+    ../../gdb-11.1/gdb/command.h:167:33: note: candidate: ‘cmd_list_element* add_cmd(const char*, command_class, const char*, cmd_list_element**)’
+      167 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+          |                                 ^~~~~~~
+    ../../gdb-11.1/gdb/command.h:167:33: note:   candidate expects 4 arguments, 5 provided
+    ../../gdb-11.1/gdb/gnu-nat.c:3210:18: error: no matching function for call to ‘add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)’
+     3210 |         &showlist);
+          |                  ^
+
+* gdb/gnu-nat.c (add_task_commands): Use a fresh variable instead of
+shadowing set_signals_cmd etc.
+(add_thread_commands): Likewise.
+---
+ gdb/gnu-nat.c | 33 +++++++++++++++++----------------
+ 1 file changed, 17 insertions(+), 16 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 8cd876b21d0..7aecc2295f8 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -3197,31 +3197,31 @@ Show whether new threads are allowed to run (once gdb has noticed them)."),
+ 	   _("Show the default detach-suspend-count value for new threads."),
+ 	   &show_thread_default_cmd_list);
+ 
+-  cmd_list_element *set_signals_cmd
++  cmd_list_element *set_signals_cmd_
+     = add_cmd ("signals", class_run, set_signals_cmd, _("\
+ Set whether the inferior process's signals will be intercepted.\n\
+ Mach exceptions (such as breakpoint traps) are not affected."),
+ 	       &setlist);
+-  add_alias_cmd ("sigs", set_signals_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("sigs", set_signals_cmd_, class_run, 1, &setlist);
+ 
+-  cmd_list_element *show_signals_cmd
++  cmd_list_element *show_signals_cmd_
+     = add_cmd ("signals", no_class, show_signals_cmd, _("\
+ Show whether the inferior process's signals will be intercepted."),
+ 	       &showlist);
+-  add_alias_cmd ("sigs", show_signals_cmd, no_class, 1, &showlist);
++  add_alias_cmd ("sigs", show_signals_cmd_, no_class, 1, &showlist);
+ 
+-  cmd_list_element *set_signal_thread_cmd
++  cmd_list_element *set_signal_thread_cmd_
+     = add_cmd ("signal-thread", class_run, set_sig_thread_cmd, _("\
+ Set the thread that gdb thinks is the libc signal thread.\n\
+ This thread is run when delivering a signal to a non-stopped process."),
+ 	       &setlist);
+-  add_alias_cmd ("sigthread", set_signal_thread_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("sigthread", set_signal_thread_cmd_, class_run, 1, &setlist);
+ 
+-  cmd_list_element *show_signal_thread_cmd
++  cmd_list_element *show_signal_thread_cmd_
+     = add_cmd ("signal-thread", no_class, show_sig_thread_cmd, _("\
+ Set the thread that gdb thinks is the libc signal thread."),
+ 	       &showlist);
+-  add_alias_cmd ("sigthread", show_signal_thread_cmd, no_class, 1, &showlist);
++  add_alias_cmd ("sigthread", show_signal_thread_cmd_, no_class, 1, &showlist);
+ 
+   add_cmd ("stopped", class_run, set_stopped_cmd, _("\
+ Set whether gdb thinks the inferior process is stopped as with SIGSTOP.\n\
+@@ -3231,13 +3231,13 @@ Stopped process will be continued by sending them a signal."),
+ Show whether gdb thinks the inferior process is stopped as with SIGSTOP."),
+ 	   &showlist);
+ 
+-  cmd_list_element *set_exceptions_cmd
++  cmd_list_element *set_exceptions_cmd_
+     = add_cmd ("exceptions", class_run, set_exceptions_cmd, _("\
+ Set whether exceptions in the inferior process will be trapped.\n\
+ When exceptions are turned off, neither breakpoints nor single-stepping\n\
+ will work."), &setlist);
+   /* Allow `set exc' despite conflict with `set exception-port'.  */
+-  add_alias_cmd ("exc", set_exceptions_cmd, class_run, 1, &setlist);
++  add_alias_cmd ("exc", set_exceptions_cmd_, class_run, 1, &setlist);
+ 
+   add_cmd ("exceptions", no_class, show_exceptions_cmd, _("\
+ Show whether exceptions in the inferior process will be trapped."),
+@@ -3269,14 +3269,14 @@ used to pause individual threads by default instead."),
+ 	     "on the thread when detaching."),
+ 	   &show_task_cmd_list);
+ 
+-  cmd_list_element *set_task_exception_port_cmd
++  cmd_list_element *set_task_exception_port_cmd_
+     = add_cmd ("exception-port", no_class, set_task_exc_port_cmd, _("\
+ Set the task exception port to which we forward exceptions.\n\
+ The argument should be the value of the send right in the task."),
+ 	       &set_task_cmd_list);
+-  add_alias_cmd ("excp", set_task_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("excp", set_task_exception_port_cmd_, no_class, 1,
+ 		 &set_task_cmd_list);
+-  add_alias_cmd ("exc-port", set_task_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("exc-port", set_task_exception_port_cmd_, no_class, 1,
+ 		 &set_task_cmd_list);
+ 
+   /* A convenient way of turning on all options require to noninvasively
+@@ -3464,14 +3464,15 @@ Note that this is relative to suspend count when gdb noticed the thread;\n\
+ use the `thread takeover-suspend-count' to force it to an absolute value."),
+ 	   &show_thread_cmd_list);
+ 
+-  add_cmd ("exception-port", no_class, set_thread_exc_port_cmd, _("\
++  cmd_list_element *set_thread_exception_port_cmd_
++    = add_cmd ("exception-port", no_class, set_thread_exc_port_cmd, _("\
+ Set the thread exception port to which we forward exceptions.\n\
+ This overrides the task exception port.\n\
+ The argument should be the value of the send right in the task."),
+ 	   &set_thread_cmd_list);
+-  add_alias_cmd ("excp", set_thread_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("excp", set_thread_exception_port_cmd_, no_class, 1,
+ 		 &set_thread_cmd_list);
+-  add_alias_cmd ("exc-port", set_thread_exception_port_cmd, no_class, 1,
++  add_alias_cmd ("exc-port", set_thread_exception_port_cmd_, no_class, 1,
+ 		 &set_thread_cmd_list);
+ 
+   add_cmd ("takeover-suspend-count", no_class, thread_takeover_sc_cmd, _("\
diff --git a/gnu/packages/patches/gdb-hurd.patch b/gnu/packages/patches/gdb-hurd.patch
deleted file mode 100644
index 0af8d4dc28..0000000000
--- a/gnu/packages/patches/gdb-hurd.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Taken from upstream, removed ChangeLog.
-
-From 6930bffe3373690b3431d6291f9f7c116d6a1ec4 Mon Sep 17 00:00:00 2001
-From: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Date: Sat, 30 May 2020 18:35:59 +0000
-Subject: [PATCH] hurd: fix gnu_debug_flag type
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes
-
-../../gdb/gnu-nat.c:96:6: error: conflicting declaration ‘bool gnu_debug_flag’
-   96 | bool gnu_debug_flag = false;
-../../gdb/gnu-nat.c: In function ‘void _initialize_gnu_nat()’:
-../../gdb/gnu-nat.c:3511:7: error: cannot
-
-gdb/ChangeLog:
-
-	* gnu-nat.h (gnu_debug_flag): Set type to bool.
----
- gdb/ChangeLog | 4 ++++
- gdb/gnu-nat.h | 2 +-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h
-index 77c57817b2..766f716587 100644
---- a/gdb/gnu-nat.h
-+++ b/gdb/gnu-nat.h
-@@ -111,7 +111,7 @@ extern char *proc_string (struct proc *proc);
- 	      __proc_pid (__proc), __proc->tid, \
- 	      host_address_to_string (__proc) , ##args); } while (0)
- 
--extern int gnu_debug_flag;
-+extern bool gnu_debug_flag;
- 
- #define debug(msg, args...) \
-  do { if (gnu_debug_flag) \
--- 
-Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
-Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
-
-commit 366f550a593c7e6bae3699a4b6d65fe937af5603
-Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Date:   Sat May 30 18:41:30 2020 +0000
-
-    hurd: add missing include
-    
-    Fixes
-    
-    ../../gdb/gnu-nat.c:2522:14: error: ‘target_gdbarch’ was not declared in this scope; did you mean ‘target_detach’?
-     2522 |    paddress (target_gdbarch (), memaddr), pulongest (len),
-    
-    gdb/Changelog:
-    
-            * gnu-nat.c: Include "gdbarch.h".
-
-diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
-index 3b438a9a43..9b93488b41 100644
---- a/gdb/gnu-nat.c
-+++ b/gdb/gnu-nat.c
-@@ -64,6 +64,7 @@ extern "C"
- #include "language.h"
- #include "target.h"
- #include "gdbsupport/gdb_wait.h"
-+#include "gdbarch.h"
- #include "gdbcmd.h"
- #include "gdbcore.h"
- #include "gdbthread.h"
diff --git a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch b/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
deleted file mode 100644
index e6ac4de00b..0000000000
--- a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Fix CVE-2020-29385.  Note that we omit the binary test file
-tests/test-images/fail/hang_114.gif from the following commit, to avoid
-requiring 'git' to apply the patch.
-
-
-From bdd3acbd48a575d418ba6bf1b32d7bda2fae1c81 Mon Sep 17 00:00:00 2001
-From: Robert Ancell <robert.ancell@canonical.com>
-Date: Mon, 30 Nov 2020 12:26:12 +1300
-Subject: [PATCH] gif: Fix LZW decoder accepting invalid LZW code.
-
-The code value after a reset wasn't being validated, which means we would
-accept invalid codes. This could cause an infinite loop in the decoder.
-
-Fixes CVE-2020-29385
-
-Fixes https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/164
----
- gdk-pixbuf/lzw.c                    |  13 +++++++------
- tests/test-images/fail/hang_114.gif | Bin 0 -> 5561 bytes
- 2 files changed, 7 insertions(+), 6 deletions(-)
- create mode 100644 tests/test-images/fail/hang_114.gif
-
-diff --git a/gdk-pixbuf/lzw.c b/gdk-pixbuf/lzw.c
-index 9e052a6f7..105daf2b1 100644
---- a/gdk-pixbuf/lzw.c
-+++ b/gdk-pixbuf/lzw.c
-@@ -195,19 +195,20 @@ lzw_decoder_feed (LZWDecoder *self,
-                                 if (self->last_code != self->clear_code && self->code_table_size < MAX_CODES) {
-                                         if (self->code < self->code_table_size)
-                                                 add_code (self, self->code);
--                                        else if (self->code == self->code_table_size)
-+                                        else
-                                                 add_code (self, self->last_code);
--                                        else {
--                                                /* Invalid code received - just stop here */
--                                                self->last_code = self->eoi_code;
--                                                return output_length;
--                                        }
- 
-                                         /* When table is full increase code size */
-                                         if (self->code_table_size == (1 << self->code_size) && self->code_size < LZW_CODE_MAX)
-                                                 self->code_size++;
-                                 }
- 
-+                                /* Invalid code received - just stop here */
-+                                if (self->code >= self->code_table_size) {
-+                                        self->last_code = self->eoi_code;
-+                                        return output_length;
-+                                }
-+
-                                 /* Convert codeword into indexes */
-                                 n_written += write_indexes (self, output + n_written, output_length - n_written);
-                         }
diff --git a/gnu/packages/patches/gdm-default-session.patch b/gnu/packages/patches/gdm-default-session.patch
index 9ab2829cdb..3ff8d0da7c 100644
--- a/gnu/packages/patches/gdm-default-session.patch
+++ b/gnu/packages/patches/gdm-default-session.patch
@@ -4,11 +4,9 @@ and not in the directories listed in $XDG_DATA_DIRS.  The latter includes
 /run/current-system/profile, and only then.
 
 Fixes <https://bugs.gnu.org/37831>.
-
-diff -ur a/daemon/gdm-session.c b/daemon/gdm-session.c
---- a/daemon/gdm-session.c	2019-09-25 10:40:24.000000000 -0400
-+++ b/daemon/gdm-session.c	2020-04-18 18:30:02.671856808 -0400
-@@ -348,24 +348,18 @@
+--- a/daemon/gdm-session.c	2021-07-23 15:16:15.164201000 +0000
++++ b/daemon/gdm-session.c	2021-09-26 08:18:58.730134555 +0000
+@@ -354,13 +354,12 @@
          GArray *search_array = NULL;
          char **search_dirs;
          int i;
@@ -19,22 +17,23 @@ diff -ur a/daemon/gdm-session.c b/daemon/gdm-session.c
                  DMCONFDIR "/Sessions/",
                  DATADIR "/gdm/BuiltInSessions/",
 -                DATADIR "/xsessions/",
-+                "/run/current-system/profile/share/xsessions/"
++                "/run/current-system/profile/share/xsessions/",
          };
  
          static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
- 
+@@ -368,11 +367,6 @@
          search_array = g_array_new (TRUE, TRUE, sizeof (char *));
  
--        for (i = 0; system_data_dirs[i]; i++) {
--                gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
--                g_array_append_val (search_array, dir);
--        }
+         if (type == NULL || g_str_equal (type, "x11")) {
+-                for (i = 0; system_data_dirs[i]; i++) {
+-                        gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
+-                        g_array_append_val (search_array, dir);
+-                }
 -
-         g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
+                 g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
+         }
  
- #ifdef ENABLE_WAYLAND_SUPPORT
-@@ -373,16 +367,7 @@
+@@ -382,16 +376,7 @@
  #ifdef ENABLE_USER_DISPLAY_SERVER
                  g_array_prepend_val (search_array, wayland_search_dir);
  
diff --git a/gnu/packages/patches/gdm-elogind-support.patch b/gnu/packages/patches/gdm-elogind-support.patch
new file mode 100644
index 0000000000..39cd12dd22
--- /dev/null
+++ b/gnu/packages/patches/gdm-elogind-support.patch
@@ -0,0 +1,211 @@
+https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/113
+
+From 462cc0f5346f5913cf7151044f1c232c5d21c1c3 Mon Sep 17 00:00:00 2001
+From: Dudemanguy <random342@airmail.cc>
+Date: Mon, 5 Oct 2020 18:41:55 -0500
+Subject: [PATCH] meson: allow building with elogind
+
+Currently, the GDM meson build has a hard dependency on systemd.
+However, GDM can function just fine if one is using elogind. This allows
+a user to build GDM against libelogind and also disable the systemd
+system and user units.
+---
+ common/meson.build                       |  2 +-
+ data/meson.build                         | 62 ++++++++++++++----------
+ data/pam-arch/gdm-launch-environment.pam |  1 +
+ libgdm/meson.build                       |  2 +-
+ meson.build                              | 36 +++++++++-----
+ meson_options.txt                        |  5 +-
+ 6 files changed, 66 insertions(+), 42 deletions(-)
+
+diff --git a/common/meson.build b/common/meson.build
+index 074dd92e1..bca58f7c4 100644
+--- a/common/meson.build
++++ b/common/meson.build
+@@ -11,7 +11,7 @@ libgdmcommon_src = files(
+ )
+ 
+ libgdmcommon_deps = [
+-  libsystemd_dep,
++  logind_dep,
+   gobject_dep,
+   gio_dep,
+   gio_unix_dep,
+diff --git a/data/meson.build b/data/meson.build
+index 7c5222eaf..403336c31 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -168,41 +168,53 @@ else
+   service_config.set('PLYMOUTH_QUIT_SERVICE', '')
+ endif
+ 
+-if get_option('systemdsystemunitdir') != ''
+-  systemd_systemunitdir = get_option('systemdsystemunitdir')
+-else
+-  systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
++systemdsystemunitdir = get_option('systemdsystemunitdir')
++if systemdsystemunitdir != 'no'
++  assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd system unit dir or disable it')
++  if get_option('systemdsystemunitdir') != ''
++    systemd_systemunitdir = get_option('systemdsystemunitdir')
++  else
++    systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
++  endif
+ endif
+ 
+-if get_option('systemduserunitdir') != ''
+-  systemd_userunitdir = get_option('systemduserunitdir')
+-else
+-  systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
+-                                                           define_variable: ['prefix', get_option('prefix')])
++systemduserunitdir = get_option('systemduserunitdir')
++if systemduserunitdir != 'no'
++  assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user unit dir or disable it')
++  if get_option('systemduserunitdir') != ''
++    systemd_userunitdir = get_option('systemduserunitdir')
++  else
++    systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
++                                                             define_variable: ['prefix', get_option('prefix')])
++  endif
+ endif
+ 
+-configure_file(
+-  input: 'gdm.service.in',
+-  output: '@BASENAME@',
+-  configuration: service_config,
+-  install_dir: systemd_systemunitdir,
+-  format: 'cmake'
+-)
++if systemdsystemunitdir != 'no'
++  configure_file(
++    input: 'gdm.service.in',
++    output: '@BASENAME@',
++    configuration: service_config,
++    install_dir: systemd_systemunitdir,
++    format: 'cmake'
++  )
++endif
+ 
+ gdm_gnome_session_wanted_targets = []
+ foreach component: gdm_gnome_user_session_wanted_components
+   gdm_gnome_session_wanted_targets += 'Wants=@0@.target'.format(component)
+ endforeach
+ 
+-configure_file(
+-  input: 'session.conf.in',
+-  output: 'session.conf',
+-  configuration: {
+-    'requires_component': gdm_gnome_shell_component,
+-    'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets),
+-  },
+-  install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d',
+-)
++if systemduserunitdir != 'no'
++  configure_file(
++    input: 'session.conf.in',
++    output: 'session.conf',
++    configuration: {
++      'requires_component': gdm_gnome_shell_component,
++      'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets),
++    },
++    install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d',
++  )
++endif
+ 
+ # XSession
+ if get_option('gdm-xsession')
+diff --git a/libgdm/meson.build b/libgdm/meson.build
+index 3f8cafbb7..83e95151b 100644
+--- a/libgdm/meson.build
++++ b/libgdm/meson.build
+@@ -56,7 +56,7 @@ libgdm_deps = [
+   glib_dep,
+   gio_dep,
+   gio_unix_dep,
+-  libsystemd_dep,
++  logind_dep,
+   libgdmcommon_dep,
+ ]
+ 
+diff --git a/meson.build b/meson.build
+index e6fcf4b8b..a86a486b7 100644
+--- a/meson.build
++++ b/meson.build
+@@ -92,21 +92,30 @@ xdmcp_dep = cc.find_library('Xdmcp', required: get_option('xdmcp'))
+ if xdmcp_dep.found() and get_option('tcp-wrappers')
+   libwrap_dep = cc.find_library('libwrap')
+ endif
+-# systemd
+-systemd_dep = dependency('systemd')
+-libsystemd_dep = dependency('libsystemd')
+-if meson.version().version_compare('>= 0.53')
+-  systemd_multiseat_x = find_program('systemd-multi-seat-x',
+-    required: false,
+-    dirs: [
+-      systemd_dep.get_pkgconfig_variable('systemdutildir'),
+-      '/lib/systemd',
+-      '/usr/lib/systemd',
+-    ])
++
++logind_provider = get_option('logind-provider')
++systemd_dep = dependency('systemd', required: false)
++if logind_provider == 'systemd'
++  libsystemd_dep = dependency('libsystemd')
++  logind_dep = libsystemd_dep
++  if meson.version().version_compare('>= 0.53')
++    systemd_multiseat_x = find_program('systemd-multi-seat-x',
++      required: false,
++      dirs: [
++        systemd_dep.get_pkgconfig_variable('systemdutildir'),
++        '/lib/systemd',
++        '/usr/lib/systemd',
++      ])
++  else
++    systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
++  endif
++  systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
+ else
+-  systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
++  elogind_dep = dependency('libelogind')
++  logind_dep = elogind_dep
++  systemd_x_server = 'disabled'
+ endif
+-systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
++
+ # Plymouth
+ plymouth_dep = dependency('ply-boot-client', required: get_option('plymouth'))
+ # Check for Solaris auditing API (ADT)
+@@ -313,6 +322,7 @@ summary({
+     'PAM Syslog': have_pam_syslog,
+     'Supports PAM Extensions': pam_extensions_supported,
+     'SeLinux': libselinux_dep.found(),
++    'Logind Provider': get_option('logind-provider'),
+     'Use GDM Xsession': get_option('gdm-xsession'),
+     'Use UserDisplayServer': get_option('user-display-server'),
+     'Use SystemdJournal': get_option('systemd-journal'),
+diff --git a/meson_options.txt b/meson_options.txt
+index 14e0b908b..5135d7d66 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -12,6 +12,7 @@ option('initial-vt', type: 'integer', value: 1, description: 'Initial virtual te
+ option('ipv6', type: 'boolean', value: false, description: 'Enables compilation of IPv6 code.')
+ option('lang-file', type: 'string', value: '', description: 'File containing default language settings.')
+ option('libaudit', type: 'feature', value: 'auto', description: 'Add Linux audit support.')
++option('logind-provider', type: 'combo', choices: ['systemd', 'elogind'], value: 'systemd', description: 'Which logind library to use.')
+ option('log-dir', type: 'string', value: '/var/log/gdm', description: 'Log directory.')
+ option('pam-mod-dir', type: 'string', value: '', description: 'Directory to install PAM modules in.')
+ option('pam-prefix', type: 'string', value: '', description: 'Specify where PAM files go.')
+@@ -27,8 +28,8 @@ option('solaris', type: 'boolean', value: false, description: 'Build for Solaris
+ option('split-authentication', type: 'boolean', value: true, description: 'Enable multiple simultaneous PAM conversations during login.')
+ option('sysconfsubdir', type: 'string', value: 'gdm', description: 'Directory name used under sysconfdir.')
+ option('systemd-journal', type: 'boolean', value: true, description: 'Use journald support.')
+-option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files.')
+-option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files.')
++option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files, or \'no\' to disable.')
++option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files, or \'no\' to disable.')
+ option('tcp-wrappers', type: 'boolean', value: false, description: 'Use TCP wrappers.')
+ option('udev-dir', type: 'string', value: '', description: 'Directory for udev rules file.')
+ option('user', type: 'string', value: 'gdm', description: 'GDM\'s username.')
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
new file mode 100644
index 0000000000..4341e3fc30
--- /dev/null
+++ b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
@@ -0,0 +1,24 @@
+From 444250fce55f916af993bc855930c6809686e4bd Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Tue, 23 Nov 2021 18:39:39 +0000
+Subject: [PATCH] Make GDM pass GDK_PIXBUF_MODULE_FILE to sessions
+
+---
+ daemon/gdm-launch-environment.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
+index 14ecfac2..3e618321 100644
+--- a/daemon/gdm-launch-environment.c
++++ b/daemon/gdm-launch-environment.c
+@@ -158,6 +158,7 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment,
+                 "WINDOWPATH",
+                 "XCURSOR_PATH",
+                 "XDG_CONFIG_DIRS",
++                "GDK_PIXBUF_MODULE_FILE",
+                 NULL
+         };
+         char *system_data_dirs;
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch b/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
new file mode 100644
index 0000000000..366fb91668
--- /dev/null
+++ b/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
@@ -0,0 +1,22 @@
+Remove check for hardcoded Xwayland path in gdm.
+
+---
+ daemon/gdm-local-display-factory.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
+index da1093bb..37355c06 100644
+--- a/daemon/gdm-local-display-factory.c
++++ b/daemon/gdm-local-display-factory.c
+@@ -203,7 +203,7 @@ gdm_local_display_factory_use_wayland (void)
+ #ifdef ENABLE_WAYLAND_SUPPORT
+         gboolean wayland_enabled = FALSE;
+         if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) {
+-                if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
++                if (wayland_enabled)
+                         return TRUE;
+         }
+ #endif
+--
+2.33.0
+
diff --git a/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
new file mode 100644
index 0000000000..44ab6a9471
--- /dev/null
+++ b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
@@ -0,0 +1,35 @@
+Get wayland-session wrapper from environment.
+
+---
+ daemon/gdm-session.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
+index 4e303e70..1deca4e9 100644
+--- a/daemon/gdm-session.c
++++ b/daemon/gdm-session.c
+@@ -2888,8 +2888,9 @@ gdm_session_start_session (GdmSession *self,
+                                                            allow_remote_connections? "--allow-remote-connections " : "",
+                                                            command);
+                         } else {
+-                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"%s\"",
++                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"%s %s\"",
+                                                            register_session ? "--register-session " : "",
++                                                           g_getenv ("GDM_WAYLAND_SESSION"),
+                                                            command);
+                         }
+                 } else if (run_xsession_script) {
+@@ -2942,8 +2942,9 @@
+                                                            register_session ? "--register-session " : "",
+                                                            self->selected_program);
+                         } else {
+-                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"dbus-run-session -- %s\"",
++                                program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"dbus-run-session -- %s %s\"",
+                                                            register_session ? "--register-session " : "",
++                                                           g_getenv ("GDM_WAYLAND_SESSION"),
+                                                            self->selected_program);
+                         }
+                 } else {
+--
+2.33.0
+
diff --git a/gnu/packages/patches/geary-CVE-2020-24661.patch b/gnu/packages/patches/geary-CVE-2020-24661.patch
deleted file mode 100644
index 6cbc224786..0000000000
--- a/gnu/packages/patches/geary-CVE-2020-24661.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From d4e86dc91e1d8a940dc40872fe94ef9ac0fed1b5 Mon Sep 17 00:00:00 2001
-From: Michael Gratton <mike@vee.net>
-Date: Tue, 25 Aug 2020 03:54:09 +0000
-Subject: [PATCH] Merge branch 'mjog/866-self-signed-certificates' into
- 'mainline'
-
-Fix invalid certificate pinning when GCR support is unavailable
-
-Closes #866
-
-See merge request GNOME/geary!529
-
-(cherry picked from commit 423a55b00f1dc6bee9dc17e67c0aea6f42387a77)
-
-5088adfe Application.CertificateManager: Rename some methods for clarity
-0d957559 Application.CertificateManager: Check locally pinned certs for equality
----
- .../application-certificate-manager.vala      | 44 +++++++++----------
- 1 file changed, 22 insertions(+), 22 deletions(-)
-
-diff --git a/src/client/application/application-certificate-manager.vala b/src/client/application/application-certificate-manager.vala
-index 4881d73c0..65f6af4fa 100644
---- a/src/client/application/application-certificate-manager.vala
-+++ b/src/client/application/application-certificate-manager.vala
-@@ -381,8 +381,8 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         GLib.TlsCertificateFlags ret = this.parent.verify_chain(
-             chain, purpose, identity, interaction, flags, cancellable
-         );
--        if (should_verify(ret, purpose, identity) &&
--            verify(chain, identity, cancellable)) {
-+        if (check_pinned(ret, purpose, identity) &&
-+            is_pinned(chain, identity, cancellable)) {
-             ret = 0;
-         }
-         return ret;
-@@ -399,16 +399,16 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         GLib.TlsCertificateFlags ret = yield this.parent.verify_chain_async(
-             chain, purpose, identity, interaction, flags, cancellable
-         );
--        if (should_verify(ret, purpose, identity) &&
--            yield verify_async(chain, identity, cancellable)) {
-+        if (check_pinned(ret, purpose, identity) &&
-+            yield is_pinned_async(chain, identity, cancellable)) {
-             ret = 0;
-         }
-         return ret;
-     }
- 
--    private inline bool should_verify(GLib.TlsCertificateFlags parent_ret,
--                                      string purpose,
--                                      GLib.SocketConnectable? identity) {
-+    private inline bool check_pinned(GLib.TlsCertificateFlags parent_ret,
-+                                     string purpose,
-+                                     GLib.SocketConnectable? identity) {
-         // If the parent didn't verify, check for a locally pinned
-         // cert if it looks like we should, but always reject revoked
-         // certs
-@@ -420,22 +420,22 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-         );
-     }
- 
--    private bool verify(GLib.TlsCertificate chain,
--                        GLib.SocketConnectable identity,
--                        GLib.Cancellable? cancellable)
-+    private bool is_pinned(GLib.TlsCertificate chain,
-+                           GLib.SocketConnectable identity,
-+                           GLib.Cancellable? cancellable)
-         throws GLib.Error {
--        bool is_verified = false;
-+        bool is_pinned = false;
-         string id = to_name(identity);
-         TrustContext? context = null;
-         lock (this.pinned_certs) {
-             context = this.pinned_certs.get(id);
-             if (context != null) {
--                is_verified = true;
-+                is_pinned = context.certificate.is_same(chain);
-             } else {
-                 // Cert not found in memory, check with GCR if
-                 // enabled.
-                 if (this.use_gcr) {
--                    is_verified = gcr_trust_is_certificate_pinned(
-+                    is_pinned = gcr_trust_is_certificate_pinned(
-                         new Gcr.SimpleCertificate(chain.certificate.data),
-                         GLib.TlsDatabase.PURPOSE_AUTHENTICATE_SERVER,
-                         id,
-@@ -443,7 +443,7 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                     );
-                 }
- 
--                if (!is_verified) {
-+                if (!is_pinned) {
-                     // Cert is not pinned in memory or in GCR, so look
-                     // for it on disk. Do this even if GCR support is
-                     // enabled, since if the cert was previously saved
-@@ -453,7 +453,7 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                             this.store_dir, id, cancellable
-                         );
-                         this.pinned_certs.set(id, context);
--                        is_verified = true;
-+                        is_pinned = context.certificate.is_same(chain);
-                     } catch (GLib.IOError.NOT_FOUND err) {
-                         // Cert was not found saved, so it not pinned
-                     } catch (GLib.Error err) {
-@@ -465,18 +465,18 @@ private class Application.TlsDatabase : GLib.TlsDatabase {
-                 }
-             }
-         }
--        return is_verified;
-+        return is_pinned;
-     }
- 
--    private async bool verify_async(GLib.TlsCertificate chain,
--                                    GLib.SocketConnectable identity,
--                                    GLib.Cancellable? cancellable)
-+    private async bool is_pinned_async(GLib.TlsCertificate chain,
-+                                       GLib.SocketConnectable identity,
-+                                       GLib.Cancellable? cancellable)
-         throws GLib.Error {
--        bool is_valid = false;
-+        bool pinned = false;
-         yield Geary.Nonblocking.Concurrent.global.schedule_async(() => {
--                is_valid = verify(chain, identity, cancellable);
-+                pinned = is_pinned(chain, identity, cancellable);
-             }, cancellable);
--        return is_valid;
-+        return pinned;
-     }
- 
-     private TrustContext? lookup_id(string id) {
--- 
-GitLab
-
diff --git a/gnu/packages/patches/geeqie-clutter.patch b/gnu/packages/patches/geeqie-clutter.patch
new file mode 100644
index 0000000000..ab7cc957d8
--- /dev/null
+++ b/gnu/packages/patches/geeqie-clutter.patch
@@ -0,0 +1,35 @@
+From c99084ac5fc2fb854ff8e8abd4bd3298fb08fb43 Mon Sep 17 00:00:00 2001
+From: Colin Clark <colin.clark@cclark.uk>
+Date: Sat, 9 Jan 2021 11:35:41 +0000
+Subject: [PATCH] Fix #829: segfault with clutter-gtk
+
+https://github.com/BestImageViewer/geeqie/issues/829
+
+This fix might cause other problems which might be cured by calling:
+LIBGL_ALWAYS_INDIRECT=1 geeqie
+
+or, worst case:
+geeqie --disable-clutter
+---
+ src/main.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/main.c b/src/main.c
+index f497240d..4af654fe 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -904,11 +904,6 @@ gint main(gint argc, gchar *argv[])
+ #ifdef HAVE_GTHREAD
+ #if !GLIB_CHECK_VERSION(2,32,0)
+ 	g_thread_init(NULL);
+-#endif
+-#ifdef HAVE_CLUTTER
+-/* FIXME: see below */
+-	putenv("LIBGL_ALWAYS_INDIRECT=1");
+-	XInitThreads();
+ #endif
+ 	gdk_threads_init();
+ 	gdk_threads_enter();
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/genimage-mke2fs-test.patch b/gnu/packages/patches/genimage-mke2fs-test.patch
index c4a17590f2..5d4fbcfe44 100644
--- a/gnu/packages/patches/genimage-mke2fs-test.patch
+++ b/gnu/packages/patches/genimage-mke2fs-test.patch
@@ -1,8 +1,8 @@
 diff --git a/test/mke2fs.dump b/test/mke2fs.dump
 index 8e63662..0c25798 100644
---- a/test/mke2fs.dump
-+++ b/test/mke2fs.dump
-@@ -11,7 +11,7 @@ Filesystem OS type:       Linux
+--- a/test/mke2fs.0.dump
++++ b/test/mke2fs.0.dump
+@@ -11,7 +11,7 @@
  Inode count:              8192
  Block count:              32768
  Reserved block count:     1638
@@ -11,7 +11,7 @@ index 8e63662..0c25798 100644
  Free inodes:              8141
  First block:              1
  Block size:               1024
-@@ -29,7 +29,7 @@ Mount count:              0
+@@ -29,7 +29,7 @@
  Maximum mount count:      -1
  Last checked:             Sat Jan  1 00:00:00 2000
  Check interval:           0 (<none>)
@@ -20,7 +20,7 @@ index 8e63662..0c25798 100644
  Reserved blocks uid:      0 (user root)
  Reserved blocks gid:      0 (group root)
  First inode:              11
-@@ -49,13 +49,13 @@ Journal sequence:         0x00000001
+@@ -51,13 +51,13 @@
  Journal start:            0
  
  
diff --git a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch b/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
deleted file mode 100644
index b6658d7c7f..0000000000
--- a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2020-15900.
-
-https://cve.circl.lu/cve/CVE-2020-15900
-https://artifex.com/security-advisories/CVE-2020-15900
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b
-
-diff --git a/psi/zstring.c b/psi/zstring.c
---- a/psi/zstring.c
-+++ b/psi/zstring.c
-@@ -142,13 +142,18 @@ search_impl(i_ctx_t *i_ctx_p, bool forward)
-     return 0;
- found:
-     op->tas.type_attrs = op1->tas.type_attrs;
--    op->value.bytes = ptr;
--    r_set_size(op, size);
-+    op->value.bytes = ptr;				/* match */
-+    op->tas.rsize = size;				/* match */
-     push(2);
--    op[-1] = *op1;
--    r_set_size(op - 1, ptr - op[-1].value.bytes);
--    op1->value.bytes = ptr + size;
--    r_set_size(op1, count + (!forward ? (size - 1) : 0));
-+    op[-1] = *op1;					/* pre */
-+    op[-3].value.bytes = ptr + size;			/* post */
-+    if (forward) {
-+        op[-1].tas.rsize = ptr - op[-1].value.bytes;	/* pre */
-+        op[-3].tas.rsize = count;			/* post */
-+    } else {
-+        op[-1].tas.rsize = count;			/* pre */
-+        op[-3].tas.rsize -= count + size;		/* post */
-+    }
-     make_true(op);
-     return 0;
- }
diff --git a/gnu/packages/patches/ghostscript-freetype-compat.patch b/gnu/packages/patches/ghostscript-freetype-compat.patch
deleted file mode 100644
index cc225b5ad6..0000000000
--- a/gnu/packages/patches/ghostscript-freetype-compat.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Fix build with FreeType 2.10.3 and newer.
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=41ef9a0bc36b9db7115fbe9623f989bfb47bbade
-
-diff --git a/base/fapi_ft.c b/base/fapi_ft.c
---- a/base/fapi_ft.c
-+++ b/base/fapi_ft.c
-@@ -125,7 +125,7 @@ static void
- delete_inc_int_info(gs_fapi_server * a_server,
-                     FT_IncrementalRec * a_inc_int_info);
- 
--FT_CALLBACK_DEF(void *)
-+static void *
- FF_alloc(FT_Memory memory, long size)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -133,7 +133,7 @@ FF_alloc(FT_Memory memory, long size)
-     return (gs_malloc(mem, size, 1, "FF_alloc"));
- }
- 
--FT_CALLBACK_DEF(void *)
-+static void *
-     FF_realloc(FT_Memory memory, long cur_size, long new_size, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -153,7 +153,7 @@ FT_CALLBACK_DEF(void *)
-     return (tmp);
- }
- 
--FT_CALLBACK_DEF(void)
-+static void
-     FF_free(FT_Memory memory, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
diff --git a/gnu/packages/patches/ghostscript-no-header-creationdate.patch b/gnu/packages/patches/ghostscript-no-header-creationdate.patch
index 92ddbdade0..b19f3ab5d9 100644
--- a/gnu/packages/patches/ghostscript-no-header-creationdate.patch
+++ b/gnu/packages/patches/ghostscript-no-header-creationdate.patch
@@ -20,3 +20,25 @@ index 0fb067e..b342e2c 100644
      {
          struct tm tms;
          time_t t;
+--- orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdfe.c
++++ gnu-ghostscript-9.14.0/devices/vector/gdevpdfe.c
+@@ -692,6 +692,9 @@
+             pdf_xml_attribute_name(s, "xmlns:xmp");
+             pdf_xml_attribute_value(s, "http://ns.adobe.com/xap/1.0/");
+             pdf_xml_tag_end(s);
++            if (!getenv("GS_GENERATE_UUIDS") ||
++                (strcasecmp(getenv("GS_GENERATE_UUIDS"), "0") != 0 &&
++                 strcasecmp(getenv("GS_GENERATE_UUIDS"), "no") != 0))
+             {
+                 pdf_xml_tag_open_beg(s, "xmp:ModifyDate");
+                 pdf_xml_tag_end(s);
+@@ -700,6 +701,9 @@
+                 pdf_xml_tag_close(s, "xmp:ModifyDate");
+                 pdf_xml_newline(s);
+             }
++            if (!getenv("GS_GENERATE_UUIDS") ||
++                (strcasecmp(getenv("GS_GENERATE_UUIDS"), "0") != 0 &&
++                 strcasecmp(getenv("GS_GENERATE_UUIDS"), "no") != 0))
+             {
+                 pdf_xml_tag_open_beg(s, "xmp:CreateDate");
+                 pdf_xml_tag_end(s);
diff --git a/gnu/packages/patches/glade-gls-set-script-name.patch b/gnu/packages/patches/glade-gls-set-script-name.patch
new file mode 100644
index 0000000000..61fbdf3914
--- /dev/null
+++ b/gnu/packages/patches/glade-gls-set-script-name.patch
@@ -0,0 +1,32 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/glade/-/commit/eb0429d318c017b57b9e59de1d5b3f142a0f455e.
+
+From 6cf1d3e11d4f8035f33c3003d33f6465896025a5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
+Date: Tue, 18 May 2021 19:54:50 +0200
+Subject: [PATCH] plugins: Define an invalid but non-null file path as script
+ path
+
+This is following the gjs applications behaviors, setting a valid string
+as the script path that will be shown in JS stack traces, even though
+won't load a real file through g_file_new_for_commandline_arg()
+---
+ plugins/gjs/glade-gjs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/gjs/glade-gjs.c b/plugins/gjs/glade-gjs.c
+index e1779665..aeae9906 100644
+--- a/plugins/gjs/glade-gjs.c
++++ b/plugins/gjs/glade-gjs.c
+@@ -93,7 +93,7 @@ glade_gjs_init (const gchar *name)
+ 
+   /* Importing the module will create all the GTypes so that glade can use them at runtime */
+   retval = gjs_context_eval (gjs_context_get_current (),
+-                             import_sentence, -1, NULL,
++                             import_sentence, -1, "<glade-gjs>",
+                              &exit_status,
+                              &error);
+   if (!retval && error)
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/glade-test-widget-null-icon.patch b/gnu/packages/patches/glade-test-widget-null-icon.patch
new file mode 100644
index 0000000000..75668a2f68
--- /dev/null
+++ b/gnu/packages/patches/glade-test-widget-null-icon.patch
@@ -0,0 +1,30 @@
+Taken from upstream:
+https://gitlab.gnome.org/GNOME/glade/-/commit/6cf1d3e11d4f8035f33c3003d33f6465896025a5.
+
+From eb0429d318c017b57b9e59de1d5b3f142a0f455e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
+Date: Wed, 19 May 2021 00:10:29 +0200
+Subject: [PATCH] tests: Do not create a file icon when no filename is provided
+
+This would fail otherwise as GFileIcon requires a GFile parameter on
+construction.
+---
+ tests/create-widgets.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/create-widgets.c b/tests/create-widgets.c
+index 2094059d..db8311f8 100644
+--- a/tests/create-widgets.c
++++ b/tests/create-widgets.c
+@@ -106,6 +106,8 @@ main (int   argc,
+       if (G_TYPE_IS_INSTANTIATABLE (adaptor_type) && !G_TYPE_IS_ABSTRACT (adaptor_type) &&
+           /* FIXME: can not create a themed icon without a name */
+           !g_type_is_a (adaptor_type, G_TYPE_THEMED_ICON) &&
++          /* FIXME: can not create a file icon without a file name */
++          !g_type_is_a (adaptor_type, G_TYPE_FILE_ICON) &&
+           /* FIXME: GtkPopoverMenu gives a few warnings */
+           !g_type_is_a (adaptor_type, GTK_TYPE_POPOVER_MENU) &&
+           /* FIXME: GtkFileChooserNative is hard to test here */
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/glib-CVE-2021-27218.patch b/gnu/packages/patches/glib-CVE-2021-27218.patch
deleted file mode 100644
index 00fa5ebf79..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27218.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Backport of:
-
-From 0f384c88a241bbbd884487b1c40b7b75f1e638d3 Mon Sep 17 00:00:00 2001
-From: Krzesimir Nowak <qdlacz@gmail.com>
-Date: Wed, 10 Feb 2021 23:51:07 +0100
-Subject: [PATCH] gbytearray: Do not accept too large byte arrays
-
-GByteArray uses guint for storing the length of the byte array, but it
-also has a constructor (g_byte_array_new_take) that takes length as a
-gsize. gsize may be larger than guint (64 bits for gsize vs 32 bits
-for guint). It is possible to call the function with a value greater
-than G_MAXUINT, which will result in silent length truncation. This
-may happen as a result of unreffing GBytes into GByteArray, so rather
-be loud about it.
-
-(Test case tweaked by Philip Withnall.)
-
-(Backport 2.66: Add #include gstrfuncsprivate.h in the test case for
-`g_memdup2()`.)
----
- glib/garray.c      |  6 ++++++
- glib/gbytes.c      |  4 ++++
- glib/tests/bytes.c | 35 ++++++++++++++++++++++++++++++++++-
- 3 files changed, 44 insertions(+), 1 deletion(-)
-
-diff --git a/glib/garray.c b/glib/garray.c
-index 942e74c9f..fb1a42aaf 100644
---- a/glib/garray.c
-+++ b/glib/garray.c
-@@ -2013,6 +2013,10 @@ g_byte_array_new (void)
-  * Create byte array containing the data. The data will be owned by the array
-  * and will be freed with g_free(), i.e. it could be allocated using g_strdup().
-  *
-+ * Do not use it if @len is greater than %G_MAXUINT. #GByteArray
-+ * stores the length of its data in #guint, which may be shorter than
-+ * #gsize.
-+ *
-  * Since: 2.32
-  *
-  * Returns: (transfer full): a new #GByteArray
-@@ -2024,6 +2028,8 @@ g_byte_array_new_take (guint8 *data,
-   GByteArray *array;
-   GRealArray *real;
- 
-+  g_return_val_if_fail (len <= G_MAXUINT, NULL);
-+
-   array = g_byte_array_new ();
-   real = (GRealArray *)array;
-   g_assert (real->data == NULL);
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index 7b72886e5..d56abe6c3 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -519,6 +519,10 @@ g_bytes_unref_to_data (GBytes *bytes,
-  * g_bytes_new(), g_bytes_new_take() or g_byte_array_free_to_bytes(). In all
-  * other cases the data is copied.
-  *
-+ * Do not use it if @bytes contains more than %G_MAXUINT
-+ * bytes. #GByteArray stores the length of its data in #guint, which
-+ * may be shorter than #gsize, that @bytes is using.
-+ *
-  * Returns: (transfer full): a new mutable #GByteArray containing the same byte data
-  *
-  * Since: 2.32
-diff --git a/glib/tests/bytes.c b/glib/tests/bytes.c
-index 5ea5c2b35..15a6aaad6 100644
---- a/glib/tests/bytes.c
-+++ b/glib/tests/bytes.c
-@@ -10,12 +10,12 @@
-  */
- 
- #undef G_DISABLE_ASSERT
--#undef G_LOG_DOMAIN
- 
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "glib.h"
-+#include "glib/gstrfuncsprivate.h"
- 
- /* Keep in sync with glib/gbytes.c */
- struct _GBytes
-@@ -333,6 +333,38 @@ test_to_array_transferred (void)
-   g_byte_array_unref (array);
- }
- 
-+static void
-+test_to_array_transferred_oversize (void)
-+{
-+  g_test_message ("g_bytes_unref_to_array() can only take GBytes up to "
-+                  "G_MAXUINT in length; test that longer ones are rejected");
-+
-+  if (sizeof (guint) >= sizeof (gsize))
-+    {
-+      g_test_skip ("Skipping test as guint is not smaller than gsize");
-+    }
-+  else if (g_test_undefined ())
-+    {
-+      GByteArray *array = NULL;
-+      GBytes *bytes = NULL;
-+      gpointer data = g_memdup2 (NYAN, N_NYAN);
-+      gsize len = ((gsize) G_MAXUINT) + 1;
-+
-+      bytes = g_bytes_new_take (data, len);
-+      g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
-+                             "g_byte_array_new_take: assertion 'len <= G_MAXUINT' failed");
-+      array = g_bytes_unref_to_array (g_steal_pointer (&bytes));
-+      g_test_assert_expected_messages ();
-+      g_assert_null (array);
-+
-+      g_free (data);
-+    }
-+  else
-+    {
-+      g_test_skip ("Skipping test as testing undefined behaviour is disabled");
-+    }
-+}
-+
- static void
- test_to_array_two_refs (void)
- {
-@@ -410,6 +442,7 @@ main (int argc, char *argv[])
-   g_test_add_func ("/bytes/to-array/transfered", test_to_array_transferred);
-   g_test_add_func ("/bytes/to-array/two-refs", test_to_array_two_refs);
-   g_test_add_func ("/bytes/to-array/non-malloc", test_to_array_non_malloc);
-+  g_test_add_func ("/bytes/to-array/transferred/oversize", test_to_array_transferred_oversize);
-   g_test_add_func ("/bytes/null", test_null);
- 
-   return g_test_run ();
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-01.patch b/gnu/packages/patches/glib-CVE-2021-27219-01.patch
deleted file mode 100644
index 5db360d468..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-01.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-Backport of:
-
-From 5e5f75a77e399c638be66d74e5daa8caeb433e00 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:30:52 +0000
-Subject: [PATCH 01/11] gstrfuncs: Add internal g_memdup2() function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will replace the existing `g_memdup()` function for use within
-GLib. It has an unavoidable security flaw of taking its `byte_size`
-argument as a `guint` rather than as a `gsize`. Most callers will
-expect it to be a `gsize`, and may pass in large values which could
-silently be truncated, resulting in an undersize allocation compared
-to what the caller expects.
-
-This could lead to a classic buffer overflow vulnerability for many
-callers of `g_memdup()`.
-
-`g_memdup2()`, in comparison, takes its `byte_size` as a `gsize`.
-
-Spotted by Kevin Backhouse of GHSL.
-
-In GLib 2.68, `g_memdup2()` will be a new public API. In this version
-for backport to older stable releases, it’s a new `static inline` API
-in a private header, so that use of `g_memdup()` within GLib can be
-fixed without adding a new API in a stable release series.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: GHSL-2021-045
-Helps: #2319
----
- docs/reference/glib/meson.build |  1 +
- glib/gstrfuncsprivate.h         | 55 +++++++++++++++++++++++++++++++++
- glib/meson.build                |  1 +
- glib/tests/strfuncs.c           | 23 ++++++++++++++
- 4 files changed, 80 insertions(+)
- create mode 100644 glib/gstrfuncsprivate.h
-
-diff --git a/docs/reference/glib/meson.build b/docs/reference/glib/meson.build
-index bba7649f0..ee39f6d04 100644
---- a/docs/reference/glib/meson.build
-+++ b/docs/reference/glib/meson.build
-@@ -22,6 +22,7 @@ if get_option('gtk_doc')
-     'gprintfint.h',
-     'gmirroringtable.h',
-     'gscripttable.h',
-+    'gstrfuncsprivate.h',
-     'glib-mirroring-tab',
-     'gnulib',
-     'pcre',
-diff --git a/glib/gstrfuncsprivate.h b/glib/gstrfuncsprivate.h
-new file mode 100644
-index 000000000..85c88328a
---- /dev/null
-+++ b/glib/gstrfuncsprivate.h
-@@ -0,0 +1,55 @@
-+/* GLIB - Library of useful routines for C programming
-+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <glib.h>
-+#include <string.h>
-+
-+/*
-+ * g_memdup2:
-+ * @mem: (nullable): the memory to copy.
-+ * @byte_size: the number of bytes to copy.
-+ *
-+ * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
-+ * from @mem. If @mem is %NULL it returns %NULL.
-+ *
-+ * This replaces g_memdup(), which was prone to integer overflows when
-+ * converting the argument from a #gsize to a #guint.
-+ *
-+ * This static inline version is a backport of the new public API from
-+ * GLib 2.68, kept internal to GLib for backport to older stable releases.
-+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2319.
-+ *
-+ * Returns: (nullable): a pointer to the newly-allocated copy of the memory,
-+ *    or %NULL if @mem is %NULL.
-+ * Since: 2.68
-+ */
-+static inline gpointer
-+g_memdup2 (gconstpointer mem,
-+           gsize         byte_size)
-+{
-+  gpointer new_mem;
-+
-+  if (mem && byte_size != 0)
-+    {
-+      new_mem = g_malloc (byte_size);
-+      memcpy (new_mem, mem, byte_size);
-+    }
-+  else
-+    new_mem = NULL;
-+
-+  return new_mem;
-+}
-diff --git a/glib/meson.build b/glib/meson.build
-index aaf5f00f5..5a6eea397 100644
---- a/glib/meson.build
-+++ b/glib/meson.build
-@@ -268,6 +268,7 @@ glib_sources = files(
-   'gslist.c',
-   'gstdio.c',
-   'gstrfuncs.c',
-+  'gstrfuncsprivate.h',
-   'gstring.c',
-   'gstringchunk.c',
-   'gtestutils.c',
-diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c
-index e1f9619c7..d968afff9 100644
---- a/glib/tests/strfuncs.c
-+++ b/glib/tests/strfuncs.c
-@@ -32,6 +32,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- #if defined (_MSC_VER) && (_MSC_VER <= 1800)
- #define isnan(x) _isnan(x)
- 
-@@ -219,6 +221,26 @@ test_memdup (void)
-   g_free (str_dup);
- }
- 
-+/* Testing g_memdup2() function with various positive and negative cases */
-+static void
-+test_memdup2 (void)
-+{
-+  gchar *str_dup = NULL;
-+  const gchar *str = "The quick brown fox jumps over the lazy dog";
-+
-+  /* Testing negative cases */
-+  g_assert_null (g_memdup2 (NULL, 1024));
-+  g_assert_null (g_memdup2 (str, 0));
-+  g_assert_null (g_memdup2 (NULL, 0));
-+
-+  /* Testing normal usage cases */
-+  str_dup = g_memdup2 (str, strlen (str) + 1);
-+  g_assert_nonnull (str_dup);
-+  g_assert_cmpstr (str, ==, str_dup);
-+
-+  g_free (str_dup);
-+}
-+
- /* Testing g_strpcpy() function with various positive and negative cases */
- static void
- test_stpcpy (void)
-@@ -2523,6 +2545,7 @@ main (int   argc,
-   g_test_add_func ("/strfuncs/has-prefix", test_has_prefix);
-   g_test_add_func ("/strfuncs/has-suffix", test_has_suffix);
-   g_test_add_func ("/strfuncs/memdup", test_memdup);
-+  g_test_add_func ("/strfuncs/memdup2", test_memdup2);
-   g_test_add_func ("/strfuncs/stpcpy", test_stpcpy);
-   g_test_add_func ("/strfuncs/str_match_string", test_str_match_string);
-   g_test_add_func ("/strfuncs/str_tokenize_and_fold", test_str_tokenize_and_fold);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-02.patch b/gnu/packages/patches/glib-CVE-2021-27219-02.patch
deleted file mode 100644
index 431959fa8f..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-02.patch
+++ /dev/null
@@ -1,264 +0,0 @@
-Backport of:
-
-From be8834340a2d928ece82025463ae23dee2c333d0 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:37:56 +0000
-Subject: [PATCH 02/11] gio: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdbusconnection.c                 | 5 +++--
- gio/gdbusinterfaceskeleton.c          | 3 ++-
- gio/gfile.c                           | 7 ++++---
- gio/gsettingsschema.c                 | 5 +++--
- gio/gwin32registrykey.c               | 8 +++++---
- gio/tests/async-close-output-stream.c | 6 ++++--
- gio/tests/gdbus-export.c              | 5 +++--
- gio/win32/gwinhttpfile.c              | 9 +++++----
- 8 files changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
-index f1f0921d4..d56453486 100644
---- a/gio/gdbusconnection.c
-+++ b/gio/gdbusconnection.c
-@@ -110,6 +110,7 @@
- #include "gasyncinitable.h"
- #include "giostream.h"
- #include "gasyncresult.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gmarshal-internal.h"
- 
-@@ -3997,7 +3998,7 @@ _g_dbus_interface_vtable_copy (const GDBusInterfaceVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusInterfaceVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-@@ -4014,7 +4015,7 @@ _g_dbus_subtree_vtable_copy (const GDBusSubtreeVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusSubtreeVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-diff --git a/gio/gdbusinterfaceskeleton.c b/gio/gdbusinterfaceskeleton.c
-index 4a06516c1..4a4b719a5 100644
---- a/gio/gdbusinterfaceskeleton.c
-+++ b/gio/gdbusinterfaceskeleton.c
-@@ -28,6 +28,7 @@
- #include "gdbusmethodinvocation.h"
- #include "gdbusconnection.h"
- #include "gmarshal-internal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gioerror.h"
- 
-@@ -701,7 +702,7 @@ add_connection_locked (GDBusInterfaceSkeleton *interface_,
-        * properly before building the hooked_vtable, so we create it
-        * once at the last minute.
-        */
--      interface_->priv->hooked_vtable = g_memdup (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-+      interface_->priv->hooked_vtable = g_memdup2 (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-       interface_->priv->hooked_vtable->method_call = skeleton_intercept_handle_method_call;
-     }
- 
-diff --git a/gio/gfile.c b/gio/gfile.c
-index ba93f7c75..88b341e7d 100644
---- a/gio/gfile.c
-+++ b/gio/gfile.c
-@@ -60,6 +60,7 @@
- #include "gasyncresult.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- 
- /**
-@@ -7884,7 +7885,7 @@ measure_disk_usage_progress (gboolean reporting,
-   g_main_context_invoke_full (g_task_get_context (task),
-                               g_task_get_priority (task),
-                               measure_disk_usage_invoke_progress,
--                              g_memdup (&progress, sizeof progress),
-+                              g_memdup2 (&progress, sizeof progress),
-                               g_free);
- }
- 
-@@ -7902,7 +7903,7 @@ measure_disk_usage_thread (GTask        *task,
-                                  data->progress_callback ? measure_disk_usage_progress : NULL, task,
-                                  &result.disk_usage, &result.num_dirs, &result.num_files,
-                                  &error))
--    g_task_return_pointer (task, g_memdup (&result, sizeof result), g_free);
-+    g_task_return_pointer (task, g_memdup2 (&result, sizeof result), g_free);
-   else
-     g_task_return_error (task, error);
- }
-@@ -7926,7 +7927,7 @@ g_file_real_measure_disk_usage_async (GFile                        *file,
- 
-   task = g_task_new (file, cancellable, callback, user_data);
-   g_task_set_source_tag (task, g_file_real_measure_disk_usage_async);
--  g_task_set_task_data (task, g_memdup (&data, sizeof data), g_free);
-+  g_task_set_task_data (task, g_memdup2 (&data, sizeof data), g_free);
-   g_task_set_priority (task, io_priority);
- 
-   g_task_run_in_thread (task, measure_disk_usage_thread);
-diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
-index 3a60b8c64..dded9b1ca 100644
---- a/gio/gsettingsschema.c
-+++ b/gio/gsettingsschema.c
-@@ -20,6 +20,7 @@
- 
- #include "gsettingsschema-internal.h"
- #include "gsettings.h"
-+#include "gstrfuncsprivate.h"
- 
- #include "gvdb/gvdb-reader.h"
- #include "strinfo.c"
-@@ -1058,9 +1059,9 @@ g_settings_schema_list_children (GSettingsSchema *schema)
- 
-       if (g_str_has_suffix (key, "/"))
-         {
--          gint length = strlen (key);
-+          gsize length = strlen (key);
- 
--          strv[j] = g_memdup (key, length);
-+          strv[j] = g_memdup2 (key, length);
-           strv[j][length - 1] = '\0';
-           j++;
-         }
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index c19fede4e..619fd48af 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -28,6 +28,8 @@
- #include <ntstatus.h>
- #include <winternl.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #ifndef _WDMDDK_
- typedef enum _KEY_INFORMATION_CLASS {
-   KeyBasicInformation,
-@@ -247,7 +249,7 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_name_size = iter->value_name_size;
- 
-   if (iter->value_data != NULL)
--    new_iter->value_data = g_memdup (iter->value_data, iter->value_data_size);
-+    new_iter->value_data = g_memdup2 (iter->value_data, iter->value_data_size);
- 
-   new_iter->value_data_size = iter->value_data_size;
- 
-@@ -268,8 +270,8 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_data_expanded_charsize = iter->value_data_expanded_charsize;
- 
-   if (iter->value_data_expanded_u8 != NULL)
--    new_iter->value_data_expanded_u8 = g_memdup (iter->value_data_expanded_u8,
--                                                 iter->value_data_expanded_charsize);
-+    new_iter->value_data_expanded_u8 = g_memdup2 (iter->value_data_expanded_u8,
-+                                                  iter->value_data_expanded_charsize);
- 
-   new_iter->value_data_expanded_u8_size = iter->value_data_expanded_charsize;
- 
-diff --git a/gio/tests/async-close-output-stream.c b/gio/tests/async-close-output-stream.c
-index 5f6620275..d3f97a119 100644
---- a/gio/tests/async-close-output-stream.c
-+++ b/gio/tests/async-close-output-stream.c
-@@ -24,6 +24,8 @@
- #include <stdlib.h>
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #define DATA_TO_WRITE "Hello world\n"
- 
- typedef struct
-@@ -147,9 +149,9 @@ prepare_data (SetupData *data,
- 
-   data->expected_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (data->data_stream));
- 
--  g_assert_cmpint (data->expected_size, >, 0);
-+  g_assert_cmpuint (data->expected_size, >, 0);
- 
--  data->expected_output = g_memdup (written, (guint)data->expected_size);
-+  data->expected_output = g_memdup2 (written, data->expected_size);
- 
-   /* then recreate the streams and prepare them for the asynchronous close */
-   destroy_streams (data);
-diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c
-index 506c7458a..5513306f8 100644
---- a/gio/tests/gdbus-export.c
-+++ b/gio/tests/gdbus-export.c
-@@ -23,6 +23,7 @@
- #include <string.h>
- 
- #include "gdbus-tests.h"
-+#include "gstrfuncsprivate.h"
- 
- /* all tests rely on a shared mainloop */
- static GMainLoop *loop = NULL;
-@@ -671,7 +672,7 @@ subtree_introspect (GDBusConnection       *connection,
-       g_assert_not_reached ();
-     }
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-@@ -727,7 +728,7 @@ dynamic_subtree_introspect (GDBusConnection       *connection,
- {
-   const GDBusInterfaceInfo *interfaces[2] = { &dyna_interface_info, NULL };
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index cf5eed31d..040ee8564 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -29,6 +29,7 @@
- #include "gio/gfile.h"
- #include "gio/gfileattribute.h"
- #include "gio/gfileinfo.h"
-+#include "gstrfuncsprivate.h"
- #include "gwinhttpfile.h"
- #include "gwinhttpfileinputstream.h"
- #include "gwinhttpfileoutputstream.h"
-@@ -393,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-03.patch b/gnu/packages/patches/glib-CVE-2021-27219-03.patch
deleted file mode 100644
index 99e849c43c..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-03.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From 6110caea45b235420b98cd41d845cc92238f6781 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:39:25 +0000
-Subject: [PATCH 03/11] gobject: Use g_memdup2() instead of g_memdup() in
- obvious places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gobject/gsignal.c     | 3 ++-
- gobject/gtype.c       | 9 +++++----
- gobject/gtypemodule.c | 3 ++-
- gobject/tests/param.c | 4 +++-
- 4 files changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/gobject/gsignal.c b/gobject/gsignal.c
-index 77d8f211e..41c54ab57 100644
---- a/gobject/gsignal.c
-+++ b/gobject/gsignal.c
-@@ -28,6 +28,7 @@
- #include <signal.h>
- 
- #include "gsignal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtype-private.h"
- #include "gbsearcharray.h"
- #include "gvaluecollector.h"
-@@ -1730,7 +1731,7 @@ g_signal_newv (const gchar       *signal_name,
-   node->single_va_closure_is_valid = FALSE;
-   node->flags = signal_flags & G_SIGNAL_FLAGS_MASK;
-   node->n_params = n_params;
--  node->param_types = g_memdup (param_types, sizeof (GType) * n_params);
-+  node->param_types = g_memdup2 (param_types, sizeof (GType) * n_params);
-   node->return_type = return_type;
-   node->class_closure_bsa = NULL;
-   if (accumulator)
-diff --git a/gobject/gtype.c b/gobject/gtype.c
-index 7d3789400..8441b90e9 100644
---- a/gobject/gtype.c
-+++ b/gobject/gtype.c
-@@ -33,6 +33,7 @@
- 
- #include "glib-private.h"
- #include "gconstructor.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- #include <windows.h>
-@@ -1470,7 +1471,7 @@ type_add_interface_Wm (TypeNode             *node,
-   iholder->next = iface_node_get_holders_L (iface);
-   iface_node_set_holders_W (iface, iholder);
-   iholder->instance_type = NODE_TYPE (node);
--  iholder->info = info ? g_memdup (info, sizeof (*info)) : NULL;
-+  iholder->info = info ? g_memdup2 (info, sizeof (*info)) : NULL;
-   iholder->plugin = plugin;
- 
-   /* create an iface entry for this type */
-@@ -1731,7 +1732,7 @@ type_iface_retrieve_holder_info_Wm (TypeNode *iface,
-         INVALID_RECURSION ("g_type_plugin_*", iholder->plugin, NODE_NAME (iface));
-       
-       check_interface_info_I (iface, instance_type, &tmp_info);
--      iholder->info = g_memdup (&tmp_info, sizeof (tmp_info));
-+      iholder->info = g_memdup2 (&tmp_info, sizeof (tmp_info));
-     }
-   
-   return iholder;	/* we don't modify write lock upon returning NULL */
-@@ -2016,10 +2017,10 @@ type_iface_vtable_base_init_Wm (TypeNode *iface,
-       IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
-       
-       if (pentry)
--	vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
-+	vtable = g_memdup2 (pentry->vtable, iface->data->iface.vtable_size);
-     }
-   if (!vtable)
--    vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-+    vtable = g_memdup2 (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-   entry->vtable = vtable;
-   vtable->g_type = NODE_TYPE (iface);
-   vtable->g_instance_type = NODE_TYPE (node);
-diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
-index 4ecaf8c88..20911fafd 100644
---- a/gobject/gtypemodule.c
-+++ b/gobject/gtypemodule.c
-@@ -19,6 +19,7 @@
- 
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
- #include "gtypeplugin.h"
- #include "gtypemodule.h"
- 
-@@ -436,7 +437,7 @@ g_type_module_register_type (GTypeModule     *module,
-   module_type_info->loaded = TRUE;
-   module_type_info->info = *type_info;
-   if (type_info->value_table)
--    module_type_info->info.value_table = g_memdup (type_info->value_table,
-+    module_type_info->info.value_table = g_memdup2 (type_info->value_table,
- 						   sizeof (GTypeValueTable));
- 
-   return module_type_info->type;
-diff --git a/gobject/tests/param.c b/gobject/tests/param.c
-index 758289bf8..971cff162 100644
---- a/gobject/tests/param.c
-+++ b/gobject/tests/param.c
-@@ -2,6 +2,8 @@
- #include <glib-object.h>
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static void
- test_param_value (void)
- {
-@@ -851,7 +853,7 @@ main (int argc, char *argv[])
-             test_path = g_strdup_printf ("/param/implement/subprocess/%d-%d-%d-%d",
-                                          data.change_this_flag, data.change_this_type,
-                                          data.use_this_flag, data.use_this_type);
--            test_data = g_memdup (&data, sizeof (TestParamImplementData));
-+            test_data = g_memdup2 (&data, sizeof (TestParamImplementData));
-             g_test_add_data_func_full (test_path, test_data, test_param_implement_child, g_free);
-             g_free (test_path);
-           }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-04.patch b/gnu/packages/patches/glib-CVE-2021-27219-04.patch
deleted file mode 100644
index 3ae01f34b1..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-04.patch
+++ /dev/null
@@ -1,308 +0,0 @@
-Backport of:
-
-From 0736b7c1e7cf4232c5d7eb2b0fbfe9be81bd3baa Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:41:21 +0000
-Subject: [PATCH 04/11] glib: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()` or an existing `gsize`
-variable), so that they use `g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it
-
-In particular, this fixes an overflow within `g_bytes_new()`, identified
-as GHSL-2021-045 by GHSL team member Kevin Backhouse.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Fixes: GHSL-2021-045
-Helps: #2319
----
- glib/gbytes.c               | 6 ++++--
- glib/gdir.c                 | 3 ++-
- glib/ghash.c                | 7 ++++---
- glib/giochannel.c           | 3 ++-
- glib/gslice.c               | 3 ++-
- glib/gtestutils.c           | 3 ++-
- glib/gvariant.c             | 7 ++++---
- glib/gvarianttype.c         | 3 ++-
- glib/tests/array-test.c     | 4 +++-
- glib/tests/option-context.c | 6 ++++--
- 10 files changed, 29 insertions(+), 16 deletions(-)
-
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index d56abe6c3..dee494820 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -34,6 +34,8 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- /**
-  * GBytes:
-  *
-@@ -95,7 +97,7 @@ g_bytes_new (gconstpointer data,
- {
-   g_return_val_if_fail (data != NULL || size == 0, NULL);
- 
--  return g_bytes_new_take (g_memdup (data, size), size);
-+  return g_bytes_new_take (g_memdup2 (data, size), size);
- }
- 
- /**
-@@ -499,7 +501,7 @@ g_bytes_unref_to_data (GBytes *bytes,
-        * Copy: Non g_malloc (or compatible) allocator, or static memory,
-        * so we have to copy, and then unref.
-        */
--      result = g_memdup (bytes->data, bytes->size);
-+      result = g_memdup2 (bytes->data, bytes->size);
-       *size = bytes->size;
-       g_bytes_unref (bytes);
-     }
-diff --git a/glib/gdir.c b/glib/gdir.c
-index 6b85e99c8..6747a8c6f 100644
---- a/glib/gdir.c
-+++ b/glib/gdir.c
-@@ -37,6 +37,7 @@
- #include "gconvert.h"
- #include "gfileutils.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -112,7 +113,7 @@ g_dir_open_with_errno (const gchar *path,
-     return NULL;
- #endif
- 
--  return g_memdup (&dir, sizeof dir);
-+  return g_memdup2 (&dir, sizeof dir);
- }
- 
- /**
-diff --git a/glib/ghash.c b/glib/ghash.c
-index e61b03788..26f26062b 100644
---- a/glib/ghash.c
-+++ b/glib/ghash.c
-@@ -34,6 +34,7 @@
- #include "gmacros.h"
- #include "glib-private.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gatomic.h"
- #include "gtestutils.h"
- #include "gslice.h"
-@@ -964,7 +965,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-       if (hash_table->have_big_keys)
-         {
-           if (key != value)
--            hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+            hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
-           /* Keys and values are both big now, so no need for further checks */
-           return;
-         }
-@@ -972,7 +973,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-         {
-           if (key != value)
-             {
--              hash_table->values = g_memdup (hash_table->keys, sizeof (guint) * hash_table->size);
-+              hash_table->values = g_memdup2 (hash_table->keys, sizeof (guint) * hash_table->size);
-               is_a_set = FALSE;
-             }
-         }
-@@ -1000,7 +1001,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
- 
-   /* Just split if necessary */
-   if (is_a_set && key != value)
--    hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+    hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
- 
- #endif
- }
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 1956e9dc6..15927c391 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -37,6 +37,7 @@
- #include "giochannel.h"
- 
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -892,7 +893,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     length = strlen (line_term);
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-   channel->line_term_len = length;
- }
- 
-diff --git a/glib/gslice.c b/glib/gslice.c
-index 4c758c3be..bcdbb8853 100644
---- a/glib/gslice.c
-+++ b/glib/gslice.c
-@@ -41,6 +41,7 @@
- #include "gmain.h"
- #include "gmem.h"               /* gslice.h */
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gutils.h"
- #include "gtrashstack.h"
- #include "gtestutils.h"
-@@ -350,7 +351,7 @@ g_slice_get_config_state (GSliceConfig ckey,
-       array[i++] = allocator->contention_counters[address];
-       array[i++] = allocator_get_magazine_threshold (allocator, address);
-       *n_values = i;
--      return g_memdup (array, sizeof (array[0]) * *n_values);
-+      return g_memdup2 (array, sizeof (array[0]) * *n_values);
-     default:
-       return NULL;
-     }
-diff --git a/glib/gtestutils.c b/glib/gtestutils.c
-index dd789482f..5887ecc36 100644
---- a/glib/gtestutils.c
-+++ b/glib/gtestutils.c
-@@ -49,6 +49,7 @@
- #include "gpattern.h"
- #include "grand.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtimer.h"
- #include "gslice.h"
- #include "gspawn.h"
-@@ -3798,7 +3799,7 @@ g_test_log_extract (GTestLogBuffer *tbuffer)
-       if (p <= tbuffer->data->str + mlength)
-         {
-           g_string_erase (tbuffer->data, 0, mlength);
--          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup (&msg, sizeof (msg)));
-+          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup2 (&msg, sizeof (msg)));
-           return TRUE;
-         }
- 
-diff --git a/glib/gvariant.c b/glib/gvariant.c
-index b61bf7278..d6f68a9ea 100644
---- a/glib/gvariant.c
-+++ b/glib/gvariant.c
-@@ -33,6 +33,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvariant
-@@ -725,7 +726,7 @@ g_variant_new_variant (GVariant *value)
-   g_variant_ref_sink (value);
- 
-   return g_variant_new_from_children (G_VARIANT_TYPE_VARIANT,
--                                      g_memdup (&value, sizeof value),
-+                                      g_memdup2 (&value, sizeof value),
-                                       1, g_variant_is_trusted (value));
- }
- 
-@@ -1229,7 +1230,7 @@ g_variant_new_fixed_array (const GVariantType  *element_type,
-       return NULL;
-     }
- 
--  data = g_memdup (elements, n_elements * element_size);
-+  data = g_memdup2 (elements, n_elements * element_size);
-   value = g_variant_new_from_data (array_type, data,
-                                    n_elements * element_size,
-                                    FALSE, g_free, data);
-@@ -1908,7 +1909,7 @@ g_variant_dup_bytestring (GVariant *value,
-   if (length)
-     *length = size;
- 
--  return g_memdup (original, size + 1);
-+  return g_memdup2 (original, size + 1);
- }
- 
- /**
-diff --git a/glib/gvarianttype.c b/glib/gvarianttype.c
-index 1a228f73b..07659ff12 100644
---- a/glib/gvarianttype.c
-+++ b/glib/gvarianttype.c
-@@ -28,6 +28,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvarianttype
-@@ -1181,7 +1182,7 @@ g_variant_type_new_tuple (const GVariantType * const *items,
-   g_assert (offset < sizeof buffer);
-   buffer[offset++] = ')';
- 
--  return (GVariantType *) g_memdup (buffer, offset);
-+  return (GVariantType *) g_memdup2 (buffer, offset);
- }
- 
- /**
-diff --git a/glib/tests/array-test.c b/glib/tests/array-test.c
-index 3fcf1136a..11982f822 100644
---- a/glib/tests/array-test.c
-+++ b/glib/tests/array-test.c
-@@ -29,6 +29,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- /* Test data to be passed to any function which calls g_array_new(), providing
-  * the parameters for that call. Most #GArray tests should be repeated for all
-  * possible values of #ArrayTestData. */
-@@ -1642,7 +1644,7 @@ byte_array_new_take (void)
-   GByteArray *gbarray;
-   guint8 *data;
- 
--  data = g_memdup ("woooweeewow", 11);
-+  data = g_memdup2 ("woooweeewow", 11);
-   gbarray = g_byte_array_new_take (data, 11);
-   g_assert (gbarray->data == data);
-   g_assert_cmpuint (gbarray->len, ==, 11);
-diff --git a/glib/tests/option-context.c b/glib/tests/option-context.c
-index 149d22353..88d2b80d1 100644
---- a/glib/tests/option-context.c
-+++ b/glib/tests/option-context.c
-@@ -27,6 +27,8 @@
- #include <string.h>
- #include <locale.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static GOptionEntry main_entries[] = {
-   { "main-switch", 0, 0,
-     G_OPTION_ARG_NONE, NULL,
-@@ -256,7 +258,7 @@ join_stringv (int argc, char **argv)
- static char **
- copy_stringv (char **argv, int argc)
- {
--  return g_memdup (argv, sizeof (char *) * (argc + 1));
-+  return g_memdup2 (argv, sizeof (char *) * (argc + 1));
- }
- 
- static void
-@@ -2323,7 +2325,7 @@ test_group_parse (void)
-   g_option_context_add_group (context, group);
- 
-   argv = split_string ("program --test arg1 -f arg2 --group-test arg3 --frob arg4 -z arg5", &argc);
--  orig_argv = g_memdup (argv, (argc + 1) * sizeof (char *));
-+  orig_argv = g_memdup2 (argv, (argc + 1) * sizeof (char *));
- 
-   retval = g_option_context_parse (context, &argc, &argv, &error);
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-05.patch b/gnu/packages/patches/glib-CVE-2021-27219-05.patch
deleted file mode 100644
index 62bce1b188..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-05.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0cbad673215ec8a049b7fe2ff44b0beed31b376e Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 16:12:24 +0000
-Subject: [PATCH 05/11] gwinhttpfile: Avoid arithmetic overflow when
- calculating a size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The members of `URL_COMPONENTS` (`winhttp_file->url`) are `DWORD`s, i.e.
-32-bit unsigned integers. Adding to and multiplying them may cause them
-to overflow the unsigned integer bounds, even if the result is passed to
-`g_memdup2()` which accepts a `gsize`.
-
-Cast the `URL_COMPONENTS` members to `gsize` first to ensure that the
-arithmetic is done in terms of `gsize`s rather than unsigned integers.
-
-Spotted by Sebastian Dröge.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/win32/gwinhttpfile.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index 040ee8564..246ec0578 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -394,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, ((gsize) winhttp_file->url.dwSchemeLength + 1) * 2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, ((gsize) winhttp_file->url.dwHostNameLength + 1) * 2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, ((gsize) winhttp_file->url.dwUserNameLength + 1) * 2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, ((gsize) winhttp_file->url.dwPasswordLength + 1) * 2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-06.patch b/gnu/packages/patches/glib-CVE-2021-27219-06.patch
deleted file mode 100644
index 4e2435f5fd..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-06.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From f9ee2275cbc312c0b4cdbc338a4fbb76eb36fb9a Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:49:00 +0000
-Subject: [PATCH 06/11] gdatainputstream: Handle stop_chars_len internally as
- gsize
-
-Previously it was handled as a `gssize`, which meant that if the
-`stop_chars` string was longer than `G_MAXSSIZE` there would be an
-overflow.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdatainputstream.c | 25 +++++++++++++++++--------
- 1 file changed, 17 insertions(+), 8 deletions(-)
-
-diff --git a/gio/gdatainputstream.c b/gio/gdatainputstream.c
-index 2e7750cb5..2cdcbda19 100644
---- a/gio/gdatainputstream.c
-+++ b/gio/gdatainputstream.c
-@@ -27,6 +27,7 @@
- #include "gioenumtypes.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- #include <string.h>
- 
-@@ -856,7 +857,7 @@ static gssize
- scan_for_chars (GDataInputStream *stream,
- 		gsize            *checked_out,
- 		const char       *stop_chars,
--                gssize            stop_chars_len)
-+                gsize             stop_chars_len)
- {
-   GBufferedInputStream *bstream;
-   const char *buffer;
-@@ -952,7 +953,7 @@ typedef struct
-   gsize checked;
- 
-   gchar *stop_chars;
--  gssize stop_chars_len;
-+  gsize stop_chars_len;
-   gsize length;
- } GDataInputStreamReadData;
- 
-@@ -1078,12 +1079,17 @@ g_data_input_stream_read_async (GDataInputStream    *stream,
- {
-   GDataInputStreamReadData *data;
-   GTask *task;
-+  gsize stop_chars_len_unsigned;
- 
-   data = g_slice_new0 (GDataInputStreamReadData);
--  if (stop_chars_len == -1)
--    stop_chars_len = strlen (stop_chars);
--  data->stop_chars = g_memdup (stop_chars, stop_chars_len);
--  data->stop_chars_len = stop_chars_len;
-+
-+  if (stop_chars_len < 0)
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
-+
-+  data->stop_chars = g_memdup2 (stop_chars, stop_chars_len_unsigned);
-+  data->stop_chars_len = stop_chars_len_unsigned;
-   data->last_saw_cr = FALSE;
- 
-   task = g_task_new (stream, cancellable, callback, user_data);
-@@ -1338,17 +1344,20 @@ g_data_input_stream_read_upto (GDataInputStream  *stream,
-   gssize found_pos;
-   gssize res;
-   char *data_until;
-+  gsize stop_chars_len_unsigned;
- 
-   g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);
- 
-   if (stop_chars_len < 0)
--    stop_chars_len = strlen (stop_chars);
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
- 
-   bstream = G_BUFFERED_INPUT_STREAM (stream);
- 
-   checked = 0;
- 
--  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len)) == -1)
-+  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len_unsigned)) == -1)
-     {
-       if (g_buffered_input_stream_get_available (bstream) ==
-           g_buffered_input_stream_get_buffer_size (bstream))
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-07.patch b/gnu/packages/patches/glib-CVE-2021-27219-07.patch
deleted file mode 100644
index dad3d285f4..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-07.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-Backport of:
-
-From 2aaf593a9eb96d84fe3be740aca2810a97d95592 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:50:37 +0000
-Subject: [PATCH 07/11] gwin32: Use gsize internally in g_wcsdup()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This allows it to handle strings up to length `G_MAXSIZE` — previously
-it would overflow with such strings.
-
-Update the several copies of it identically.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gwin32appinfo.c     | 33 ++++++++++++++++++++++++++-------
- gio/gwin32registrykey.c | 34 ++++++++++++++++++++++++++--------
- 2 files changed, 52 insertions(+), 15 deletions(-)
-
-diff --git a/gio/gwin32appinfo.c b/gio/gwin32appinfo.c
-index 9f335b370..dd7a96a4a 100644
---- a/gio/gwin32appinfo.c
-+++ b/gio/gwin32appinfo.c
-@@ -464,15 +464,34 @@ static GWin32RegistryKey *applications_key;
- /* Watch this key */
- static GWin32RegistryKey *classes_root_key;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str, gssize str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- #define URL_ASSOCIATIONS L"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\"
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index 619fd48af..fbd65311a 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -127,16 +127,34 @@ typedef enum
-   G_WIN32_REGISTRY_UPDATED_PATH = 1,
- } GWin32RegistryKeyUpdateFlag;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str,
--          gssize           str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-08.patch b/gnu/packages/patches/glib-CVE-2021-27219-08.patch
deleted file mode 100644
index 2c021ad317..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-08.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From ba8ca443051f93a74c0d03d62e70402036f967a5 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:58:32 +0000
-Subject: [PATCH 08/11] gkeyfilesettingsbackend: Handle long keys when
- converting paths
-
-Previously, the code in `convert_path()` could not handle keys longer
-than `G_MAXINT`, and would overflow if that was exceeded.
-
-Convert the code to use `gsize` and `g_memdup2()` throughout, and
-change from identifying the position of the final slash in the string
-using a signed offset `i`, to using a pointer to the character (and
-`strrchr()`). This allows the slash to be at any position in a
-`G_MAXSIZE`-long string, without sacrificing a bit of the offset for
-indicating whether a slash was found.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gkeyfilesettingsbackend.c | 21 ++++++++++-----------
- 1 file changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index cd5765afd..25b057672 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -33,6 +33,7 @@
- #include "gfilemonitor.h"
- #include "gsimplepermission.h"
- #include "gsettingsbackendinternal.h"
-+#include "gstrfuncsprivate.h"
- #include "giomodule-priv.h"
- #include "gportalsupport.h"
- 
-@@ -145,8 +146,8 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-               gchar                   **group,
-               gchar                   **basename)
- {
--  gint key_len = strlen (key);
--  gint i;
-+  gsize key_len = strlen (key);
-+  const gchar *last_slash;
- 
-   if (key_len < kfsb->prefix_len ||
-       memcmp (key, kfsb->prefix, kfsb->prefix_len) != 0)
-@@ -155,38 +156,36 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-   key_len -= kfsb->prefix_len;
-   key += kfsb->prefix_len;
- 
--  for (i = key_len; i >= 0; i--)
--    if (key[i] == '/')
--      break;
-+  last_slash = strrchr (key, '/');
- 
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
-        * a path that ghosts that group name
-        */
--      if (i == kfsb->root_group_len && memcmp (key, kfsb->root_group, i) == 0)
-+      if (last_slash != NULL && (last_slash - key) == kfsb->root_group_len && memcmp (key, kfsb->root_group, last_slash - key) == 0)
-         return FALSE;
-     }
-   else
-     {
-       /* if no root_group was given, ensure that the user gave a path */
--      if (i == -1)
-+      if (last_slash == NULL)
-         return FALSE;
-     }
- 
-   if (group)
-     {
--      if (i >= 0)
-+      if (last_slash != NULL)
-         {
--          *group = g_memdup (key, i + 1);
--          (*group)[i] = '\0';
-+          *group = g_memdup2 (key, (last_slash - key) + 1);
-+          (*group)[(last_slash - key)] = '\0';
-         }
-       else
-         *group = g_strdup (kfsb->root_group);
-     }
- 
-   if (basename)
--    *basename = g_memdup (key + i + 1, key_len - i);
-+    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-09.patch b/gnu/packages/patches/glib-CVE-2021-27219-09.patch
deleted file mode 100644
index 4de0c1b349..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-09.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 65ec7f4d6e8832c481f6e00e2eb007b9a60024ce Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:00:53 +0000
-Subject: [PATCH 09/11] gsocket: Use gsize to track native sockaddr's size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don’t use an `int`, that’s potentially too small. In practical terms,
-this is not a problem, since no socket address is going to be that big.
-
-By making these changes we can use `g_memdup2()` without warnings,
-though. Fewer warnings is good.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gsocket.c | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/gio/gsocket.c b/gio/gsocket.c
-index 66073af83..a3af149e8 100644
---- a/gio/gsocket.c
-+++ b/gio/gsocket.c
-@@ -75,6 +75,7 @@
- #include "gcredentialsprivate.h"
- #include "glibintl.h"
- #include "gioprivate.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- /* For Windows XP runtime compatibility, but use the system's if_nametoindex() if available */
-@@ -174,7 +175,7 @@ static gboolean     g_socket_datagram_based_condition_wait       (GDatagramBased
-                                                                   GError          **error);
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len);
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len);
- 
- static gssize
- g_socket_receive_message_with_timeout  (GSocket                 *socket,
-@@ -260,7 +261,7 @@ struct _GSocketPrivate
-   struct {
-     GSocketAddress *addr;
-     struct sockaddr *native;
--    gint native_len;
-+    gsize native_len;
-     guint64 last_used;
-   } recv_addr_cache[RECV_ADDR_CACHE_SIZE];
- };
-@@ -5211,14 +5212,14 @@ g_socket_send_messages_with_timeout (GSocket        *socket,
- }
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len)
- {
-   GSocketAddress *saddr;
-   gint i;
-   guint64 oldest_time = G_MAXUINT64;
-   gint oldest_index = 0;
- 
--  if (native_len <= 0)
-+  if (native_len == 0)
-     return NULL;
- 
-   saddr = NULL;
-@@ -5226,7 +5227,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-     {
-       GSocketAddress *tmp = socket->priv->recv_addr_cache[i].addr;
-       gpointer tmp_native = socket->priv->recv_addr_cache[i].native;
--      gint tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
-+      gsize tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
- 
-       if (!tmp)
-         continue;
-@@ -5256,7 +5257,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-       g_free (socket->priv->recv_addr_cache[oldest_index].native);
-     }
- 
--  socket->priv->recv_addr_cache[oldest_index].native = g_memdup (native, native_len);
-+  socket->priv->recv_addr_cache[oldest_index].native = g_memdup2 (native, native_len);
-   socket->priv->recv_addr_cache[oldest_index].native_len = native_len;
-   socket->priv->recv_addr_cache[oldest_index].addr = g_object_ref (saddr);
-   socket->priv->recv_addr_cache[oldest_index].last_used = g_get_monotonic_time ();
-@@ -5404,6 +5405,9 @@ g_socket_receive_message_with_timeout (GSocket                 *socket,
-     /* do it */
-     while (1)
-       {
-+        /* addrlen has to be of type int because that’s how WSARecvFrom() is defined */
-+        G_STATIC_ASSERT (sizeof addr <= G_MAXINT);
-+
- 	addrlen = sizeof addr;
- 	if (address)
- 	  result = WSARecvFrom (socket->priv->fd,
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-10.patch b/gnu/packages/patches/glib-CVE-2021-27219-10.patch
deleted file mode 100644
index 36198b8eef..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-10.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 777b95a88f006d39d9fe6d3321db17e7b0d4b9a4 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:07:39 +0000
-Subject: [PATCH 10/11] gtlspassword: Forbid very long TLS passwords
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `g_tls_password_set_value_full()` (and the vfunc it
-invokes) can only accept a `gssize` length. Ensure that nul-terminated
-strings passed to `g_tls_password_set_value()` can’t exceed that length.
-Use `g_memdup2()` to avoid an overflow if they’re longer than
-`G_MAXUINT` similarly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gtlspassword.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index 1e437a7b6..dbcec41a8 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -23,6 +23,7 @@
- #include "glibintl.h"
- 
- #include "gioenumtypes.h"
-+#include "gstrfuncsprivate.h"
- #include "gtlspassword.h"
- 
- #include <string.h>
-@@ -287,9 +288,14 @@ g_tls_password_set_value (GTlsPassword  *password,
-   g_return_if_fail (G_IS_TLS_PASSWORD (password));
- 
-   if (length < 0)
--    length = strlen ((gchar *)value);
-+    {
-+      /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-+      gsize length_unsigned = strlen ((gchar *) value);
-+      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      length = (gssize) length_unsigned;
-+    }
- 
--  g_tls_password_set_value_full (password, g_memdup (value, length), length, g_free);
-+  g_tls_password_set_value_full (password, g_memdup2 (value, (gsize) length), length, g_free);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-11.patch b/gnu/packages/patches/glib-CVE-2021-27219-11.patch
deleted file mode 100644
index 4413cb9827..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-11.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From ecdf91400e9a538695a0895b95ad7e8abcdf1749 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:09:40 +0000
-Subject: [PATCH 11/11] giochannel: Forbid very long line terminator strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `GIOChannel.line_term_len` is only a `guint`. Ensure that
-nul-terminated strings passed to `g_io_channel_set_line_term()` can’t
-exceed that length. Use `g_memdup2()` to avoid a warning (`g_memdup()`
-is due to be deprecated), but not to avoid a bug, since it’s also
-limited to `G_MAXUINT`.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- glib/giochannel.c | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 15927c391..66c6591f0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -884,16 +884,25 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-                             const gchar	*line_term,
- 			    gint         length)
- {
-+  guint length_unsigned;
-+
-   g_return_if_fail (channel != NULL);
-   g_return_if_fail (line_term == NULL || length != 0); /* Disallow "" */
- 
-   if (line_term == NULL)
--    length = 0;
--  else if (length < 0)
--    length = strlen (line_term);
-+    length_unsigned = 0;
-+  else if (length >= 0)
-+    length_unsigned = (guint) length;
-+  else
-+    {
-+      /* FIXME: We’re constrained by line_term_len being a guint here */
-+      gsize length_size = strlen (line_term);
-+      g_return_if_fail (length_size > G_MAXUINT);
-+      length_unsigned = (guint) length_size;
-+    }
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
-   channel->line_term_len = length;
- }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-12.patch b/gnu/packages/patches/glib-CVE-2021-27219-12.patch
deleted file mode 100644
index 4fdbb81750..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-12.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From f8273b9aded135fe07094faebd527e43851aaf6e Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
-Date: Sun, 7 Feb 2021 23:32:40 +0100
-Subject: [PATCH 1/5] giochannel: Fix length_size bounds check
-
-The inverted condition is an obvious error introduced by ecdf91400e9a.
-
-Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-
-(cherry picked from commit a149bf2f9030168051942124536e303af8ba6176)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 66c6591f0..0d9d5f223 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -897,7 +897,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     {
-       /* FIXME: We’re constrained by line_term_len being a guint here */
-       gsize length_size = strlen (line_term);
--      g_return_if_fail (length_size > G_MAXUINT);
-+      g_return_if_fail (length_size <= G_MAXUINT);
-       length_unsigned = (guint) length_size;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-13.patch b/gnu/packages/patches/glib-CVE-2021-27219-13.patch
deleted file mode 100644
index 6a287cc3a2..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-13.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From e069c50467712e6d607822afd6b6c15c2c343dff Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:34:50 +0000
-Subject: [PATCH 2/5] giochannel: Don't store negative line_term_len in
- GIOChannel struct
-
-Adding test coverage indicated that this was another bug in 0cc11f74.
-
-Fixes: 0cc11f74 "giochannel: Forbid very long line terminator strings"
-Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 5dc8b0014c03e7491d93b90275ab442e888a9628)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 0d9d5f223..4c39b9dc0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -903,7 +903,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
- 
-   g_free (channel->line_term);
-   channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
--  channel->line_term_len = length;
-+  channel->line_term_len = length_unsigned;
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-14.patch b/gnu/packages/patches/glib-CVE-2021-27219-14.patch
deleted file mode 100644
index 78de2846da..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-14.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 4506d1859a863087598c8d122740bae25b65b099 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:04:48 +0000
-Subject: [PATCH 4/5] gtlspassword: Fix inverted assertion
-
-The intention here was to assert that the length of the password fits
-in a gssize. Passwords more than half the size of virtual memory are
-probably excessive.
-
-Fixes: a8b204ff "gtlspassword: Forbid very long TLS passwords"
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 61bb52ec42de1082bfb06ce1c737fc295bfe60b8)
----
- gio/gtlspassword.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index dbcec41a8..bd86a6dfe 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -291,7 +291,7 @@ g_tls_password_set_value (GTlsPassword  *password,
-     {
-       /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-       gsize length_unsigned = strlen ((gchar *) value);
--      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      g_return_if_fail (length_unsigned <= G_MAXSSIZE);
-       length = (gssize) length_unsigned;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-15.patch b/gnu/packages/patches/glib-CVE-2021-27219-15.patch
deleted file mode 100644
index 37ef85b4fa..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-15.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 3d1550354c3c6a8491c39881752d51cb7515f2c2 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:22:39 +0000
-Subject: [PATCH 5/5] tls-interaction: Add test coverage for various ways to
- set the password
-
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit df4501316ca3903072400504a5ea76498db19538)
----
- gio/tests/tls-interaction.c | 55 +++++++++++++++++++++++++++++++++++++
- 1 file changed, 55 insertions(+)
-
-diff --git a/gio/tests/tls-interaction.c b/gio/tests/tls-interaction.c
-index 4f0737d7e..5661e8e0d 100644
---- a/gio/tests/tls-interaction.c
-+++ b/gio/tests/tls-interaction.c
-@@ -174,6 +174,38 @@ test_interaction_ask_password_finish_failure (GTlsInteraction    *interaction,
- }
- 
- 
-+/* Return a copy of @str that is allocated in a silly way, to exercise
-+ * custom free-functions. The returned pointer points to a copy of @str
-+ * in a buffer of the form "BEFORE \0 str \0 AFTER". */
-+static guchar *
-+special_dup (const char *str)
-+{
-+  GString *buf = g_string_new ("BEFORE");
-+  guchar *ret;
-+
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, str);
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, "AFTER");
-+  ret = (guchar *) g_string_free (buf, FALSE);
-+  return ret + strlen ("BEFORE") + 1;
-+}
-+
-+
-+/* Free a copy of @str that was made with special_dup(), after asserting
-+ * that it has not been corrupted. */
-+static void
-+special_free (gpointer p)
-+{
-+  gchar *s = p;
-+  gchar *buf = s - strlen ("BEFORE") - 1;
-+
-+  g_assert_cmpstr (buf, ==, "BEFORE");
-+  g_assert_cmpstr (s + strlen (s) + 1, ==, "AFTER");
-+  g_free (buf);
-+}
-+
-+
- static GTlsInteractionResult
- test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GTlsPassword       *password,
-@@ -181,6 +213,8 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GError            **error)
- {
-   TestInteraction *self;
-+  const guchar *value;
-+  gsize len;
- 
-   g_assert (TEST_IS_INTERACTION (interaction));
-   self = TEST_INTERACTION (interaction);
-@@ -192,6 +226,27 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-   g_assert (error != NULL);
-   g_assert (*error == NULL);
- 
-+  /* Exercise different ways to set the value */
-+  g_tls_password_set_value (password, (const guchar *) "foo", 4);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "foo", 4);
-+
-+  g_tls_password_set_value (password, (const guchar *) "bar", -1);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "bar", 3);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baa"), 4, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baa", 4);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baz"), -1, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baz", 3);
-+
-   /* Don't do this in real life. Include a null terminator for testing */
-   g_tls_password_set_value (password, (const guchar *)"the password", 13);
-   return G_TLS_INTERACTION_HANDLED;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-16.patch b/gnu/packages/patches/glib-CVE-2021-27219-16.patch
deleted file mode 100644
index 43635e72ed..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-16.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From cb9ee701ef46c1819eed4e2a4dc181682bdfc176 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:16:39 +0000
-Subject: [PATCH 1/3] gkeyfilesettingsbackend: Fix basename handling when group
- is unset
-
-Fix an effective regression in commit
-7781a9cbd2fd0aa84bee0f4eee88470640ff6706, which happens when
-`convert_path()` is called with a `key` which contains no slashes. In
-that case, the `key` is entirely the `basename`.
-
-Prior to commit 7781a9cb, the code worked through a fluke of `i == -1`
-cancelling out with the various additions in the `g_memdup()` call, and
-effectively resulting in `g_strdup (key)`.
-
-Spotted by Guido Berhoerster.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 25b057672..861c3a661 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -185,7 +185,12 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-     }
- 
-   if (basename)
--    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+    {
-+      if (last_slash != NULL)
-+        *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+      else
-+        *basename = g_strdup (key);
-+    }
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-17.patch b/gnu/packages/patches/glib-CVE-2021-27219-17.patch
deleted file mode 100644
index 3153979071..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-17.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 31e0d403ba635dbbacbfbff74295e5db02558d76 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:19:30 +0000
-Subject: [PATCH 2/3] gkeyfilesettingsbackend: Disallow empty key or group
- names
-
-These should never have been allowed; they will result in precondition
-failures from the `GKeyFile` later on in the code.
-
-A test will be added for this shortly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 861c3a661..de216e615 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -158,6 +158,13 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
- 
-   last_slash = strrchr (key, '/');
- 
-+  /* Disallow empty group names or key names */
-+  if (key_len == 0 ||
-+      (last_slash != NULL &&
-+       (*(last_slash + 1) == '\0' ||
-+        last_slash == key)))
-+    return FALSE;
-+
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-18.patch b/gnu/packages/patches/glib-CVE-2021-27219-18.patch
deleted file mode 100644
index c18d44ddeb..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-18.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-Backport of:
-
-From 221c26685354dea2b2732df94404e8e5e77a1591 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:21:36 +0000
-Subject: [PATCH 3/3] tests: Add tests for key name handling in the keyfile
- backend
-
-This tests the two recent commits.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/tests/gsettings.c | 171 +++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 170 insertions(+), 1 deletion(-)
-
-diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c
-index baadca8f5..afe594a23 100644
---- a/gio/tests/gsettings.c
-+++ b/gio/tests/gsettings.c
-@@ -1,3 +1,4 @@
-+#include <errno.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <libintl.h>
-@@ -1740,6 +1741,14 @@ key_changed_cb (GSettings *settings, const gchar *key, gpointer data)
-   (*b) = TRUE;
- }
- 
-+typedef struct
-+{
-+  const gchar *path;
-+  const gchar *root_group;
-+  const gchar *keyfile_group;
-+  const gchar *root_path;
-+} KeyfileTestData;
-+
- /*
-  * Test that using a keyfile works
-  */
-@@ -1834,7 +1843,11 @@ test_keyfile (Fixture       *fixture,
-   g_free (str);
- 
-   g_settings_set (settings, "farewell", "s", "cheerio");
--  
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-   /* When executing as root, changing the mode of the keyfile will have
-    * no effect on the writability of the settings.
-    */
-@@ -1866,6 +1879,149 @@ test_keyfile (Fixture       *fixture,
-   g_free (keyfile_path);
- }
- 
-+/*
-+ * Test that using a keyfile works with a schema with no path set.
-+ */
-+static void
-+test_keyfile_no_path (Fixture       *fixture,
-+                      gconstpointer  user_data)
-+{
-+  const KeyfileTestData *test_data = user_data;
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  GKeyFile *keyfile;
-+  gboolean writable;
-+  gchar *key = NULL;
-+  GError *error = NULL;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, test_data->root_path, test_data->root_group);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, test_data->path);
-+  g_object_unref (kf_backend);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_assert_true (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  writable = g_settings_is_writable (settings, "test-boolean");
-+  g_assert_true (writable);
-+  g_settings_set (settings, "test-boolean", "b", FALSE);
-+
-+  g_assert_false (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  g_settings_delay (settings);
-+  g_settings_set (settings, "test-boolean", "b", TRUE);
-+  g_settings_apply (settings);
-+
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_true (g_key_file_get_boolean (keyfile, test_data->keyfile_group, "test-boolean", NULL));
-+
-+  g_key_file_free (keyfile);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_settings_apply (settings);
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_false (g_key_file_get_string (keyfile, test_data->keyfile_group, "test-boolean", &error));
-+  g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
-+  g_clear_error (&error);
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-+  /* Keys which ghost the root group name are not allowed. This can only be
-+   * tested when the path is `/` as otherwise it acts as a prefix and prevents
-+   * any ghosting. */
-+  if (g_str_equal (test_data->path, "/"))
-+    {
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "/");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "test-boolean");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+    }
-+
-+  g_key_file_free (keyfile);
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. */
-+  g_assert_cmpint (g_chmod (keyfile_path, 0777) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_remove (store_path) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys outside its root path.
-+ */
-+static void
-+test_keyfile_outside_root_path (Fixture       *fixture,
-+                                gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/tests/basic-types/", "root");
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/tests/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys in the root if no root group is set.
-+ */
-+static void
-+test_keyfile_no_root_group (Fixture       *fixture,
-+                            gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/", NULL);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+  g_assert_true (g_settings_is_writable (settings, "child/test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
- /* Test that getting child schemas works
-  */
- static void
-@@ -2844,6 +3000,14 @@ main (int argc, char *argv[])
-   gchar *override_text;
-   gchar *enums;
-   gint result;
-+  const KeyfileTestData keyfile_test_data_explicit_path = { "/tests/", "root", "tests", "/" };
-+  const KeyfileTestData keyfile_test_data_empty_path = { "/", "root", "root", "/" };
-+  const KeyfileTestData keyfile_test_data_long_path = {
-+    "/tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch/",
-+    "root",
-+    "tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch",
-+    "/"
-+  };
- 
- /* Meson build sets this */
- #ifdef TEST_LOCALE_PATH
-@@ -2967,6 +3131,11 @@ main (int argc, char *argv[])
-     }
- 
-   g_test_add ("/gsettings/keyfile", Fixture, NULL, setup, test_keyfile, teardown);
-+  g_test_add ("/gsettings/keyfile/explicit-path", Fixture, &keyfile_test_data_explicit_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/empty-path", Fixture, &keyfile_test_data_empty_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/long-path", Fixture, &keyfile_test_data_long_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/outside-root-path", Fixture, NULL, setup, test_keyfile_outside_root_path, teardown);
-+  g_test_add ("/gsettings/keyfile/no-root-group", Fixture, NULL, setup, test_keyfile_no_root_group, teardown);
-   g_test_add_func ("/gsettings/child-schema", test_child_schema);
-   g_test_add_func ("/gsettings/strinfo", test_strinfo);
-   g_test_add_func ("/gsettings/enums", test_enums);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-28153.patch b/gnu/packages/patches/glib-CVE-2021-28153.patch
deleted file mode 100644
index 54443186d9..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-28153.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-Backport of:
-
-From 317b3b587058a05dca95d56dac26568c5b098d33 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 24 Feb 2021 17:35:40 +0000
-Subject: [PATCH] glocalfileoutputstream: Fix CREATE_REPLACE_DESTINATION
- with symlinks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The `G_FILE_CREATE_REPLACE_DESTINATION` flag is equivalent to unlinking
-the destination file and re-creating it from scratch. That did
-previously work, but in the process the code would call `open(O_CREAT)`
-on the file. If the file was a dangling symlink, this would create the
-destination file (empty). That’s not an intended side-effect, and has
-security implications if the symlink is controlled by a lower-privileged
-process.
-
-Fix that by not opening the destination file if it’s a symlink, and
-adjusting the rest of the code to cope with
- - the fact that `fd == -1` is not an error iff `is_symlink` is true,
- - and that `original_stat` will contain the `lstat()` results for the
-   symlink now, rather than the `stat()` results for its target (again,
-   iff `is_symlink` is true).
-
-This means that the target of the dangling symlink is no longer created,
-which was the bug. The symlink itself continues to be replaced (as
-before) with the new file — this is the intended behaviour of
-`g_file_replace()`.
-
-The behaviour for non-symlink cases, or cases where the symlink was not
-dangling, should be unchanged.
-
-Includes a unit test.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-
-Fixes: #2325
----
- gio/glocalfileoutputstream.c |  70 ++++++++++++++++-------
- gio/tests/file.c             | 108 +++++++++++++++++++++++++++++++++++
- 2 files changed, 158 insertions(+), 20 deletions(-)
-
-diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
-index a3dd62172..553fcbbae 100644
---- a/gio/glocalfileoutputstream.c
-+++ b/gio/glocalfileoutputstream.c
-@@ -874,16 +874,22 @@ handle_overwrite_open (const char    *filename,
-       /* Could be a symlink, or it could be a regular ELOOP error,
-        * but then the next open will fail too. */
-       is_symlink = TRUE;
--      fd = g_open (filename, open_flags, mode);
-+      if (!(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+        fd = g_open (filename, open_flags, mode);
-     }
--#else
--  fd = g_open (filename, open_flags, mode);
--  errsv = errno;
-+#else  /* if !O_NOFOLLOW */
-   /* This is racy, but we do it as soon as possible to minimize the race */
-   is_symlink = g_file_test (filename, G_FILE_TEST_IS_SYMLINK);
-+
-+  if (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+    {
-+      fd = g_open (filename, open_flags, mode);
-+      errsv = errno;
-+    }
- #endif
- 
--  if (fd == -1)
-+  if (fd == -1 &&
-+      (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION)))
-     {
-       char *display_name = g_filename_display_name (filename);
-       g_set_error (error, G_IO_ERROR,
-@@ -893,13 +899,25 @@ handle_overwrite_open (const char    *filename,
-       g_free (display_name);
-       return -1;
-     }
--  
-+
-+  if (!is_symlink)
-+    {
- #ifdef G_OS_WIN32
--  res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
-+      res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
- #else
--  res = fstat (fd, &original_stat);
-+      res = fstat (fd, &original_stat);
- #endif
--  errsv = errno;
-+      errsv = errno;
-+    }
-+  else
-+    {
-+#ifdef G_OS_WIN32
-+      res = GLIB_PRIVATE_CALL (g_win32_lstat_utf8) (filename, &original_stat);
-+#else
-+      res = g_lstat (filename, &original_stat);
-+#endif
-+      errsv = errno;
-+    }
- 
-   if (res != 0)
-     {
-@@ -916,16 +934,27 @@ handle_overwrite_open (const char    *filename,
-   if (!S_ISREG (original_stat.st_mode))
-     {
-       if (S_ISDIR (original_stat.st_mode))
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_IS_DIRECTORY,
--                             _("Target file is a directory"));
--      else
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_NOT_REGULAR_FILE,
--                             _("Target file is not a regular file"));
--      goto err_out;
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_IS_DIRECTORY,
-+                               _("Target file is a directory"));
-+          goto err_out;
-+        }
-+      else if (!is_symlink ||
-+#ifdef S_ISLNK
-+               !S_ISLNK (original_stat.st_mode)
-+#else
-+               FALSE
-+#endif
-+               )
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_NOT_REGULAR_FILE,
-+                               _("Target file is not a regular file"));
-+          goto err_out;
-+        }
-     }
-   
-   if (etag != NULL)
-@@ -1006,7 +1035,8 @@ handle_overwrite_open (const char    *filename,
- 	    }
- 	}
- 
--      g_close (fd, NULL);
-+      if (fd >= 0)
-+        g_close (fd, NULL);
-       *temp_filename = tmp_filename;
-       return tmpfd;
-     }
-diff --git a/gio/tests/file.c b/gio/tests/file.c
-index efb2eaadd..bc55f3af4 100644
---- a/gio/tests/file.c
-+++ b/gio/tests/file.c
-@@ -804,6 +804,113 @@ test_replace_cancel (void)
-   g_object_unref (tmpdir);
- }
- 
-+static void
-+test_replace_symlink (void)
-+{
-+#ifdef G_OS_UNIX
-+  gchar *tmpdir_path = NULL;
-+  GFile *tmpdir = NULL, *source_file = NULL, *target_file = NULL;
-+  GFileOutputStream *stream = NULL;
-+  const gchar *new_contents = "this is a test message which should be written to source and not target";
-+  gsize n_written;
-+  GFileEnumerator *enumerator = NULL;
-+  GFileInfo *info = NULL;
-+  gchar *contents = NULL;
-+  gsize length = 0;
-+  GError *local_error = NULL;
-+
-+  g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2325");
-+  g_test_summary ("Test that G_FILE_CREATE_REPLACE_DESTINATION doesn’t follow symlinks");
-+
-+  /* Create a fresh, empty working directory. */
-+  tmpdir_path = g_dir_make_tmp ("g_file_replace_symlink_XXXXXX", &local_error);
-+  g_assert_no_error (local_error);
-+  tmpdir = g_file_new_for_path (tmpdir_path);
-+
-+  g_test_message ("Using temporary directory %s", tmpdir_path);
-+  g_free (tmpdir_path);
-+
-+  /* Create symlink `source` which points to `target`. */
-+  source_file = g_file_get_child (tmpdir, "source");
-+  target_file = g_file_get_child (tmpdir, "target");
-+  g_file_make_symbolic_link (source_file, "target", NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  /* Ensure that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Replace the `source` symlink with a regular file using
-+   * %G_FILE_CREATE_REPLACE_DESTINATION, which should replace it *without*
-+   * following the symlink */
-+  stream = g_file_replace (source_file, NULL, FALSE  /* no backup */,
-+                           G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_output_stream_write_all (G_OUTPUT_STREAM (stream), new_contents, strlen (new_contents),
-+                             &n_written, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpint (n_written, ==, strlen (new_contents));
-+
-+  g_output_stream_close (G_OUTPUT_STREAM (stream), NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&stream);
-+
-+  /* At this point, there should still only be one file: `source`. It should
-+   * now be a regular file. `target` should not exist. */
-+  enumerator = g_file_enumerate_children (tmpdir,
-+                                          G_FILE_ATTRIBUTE_STANDARD_NAME ","
-+                                          G_FILE_ATTRIBUTE_STANDARD_TYPE,
-+                                          G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_nonnull (info);
-+
-+  g_assert_cmpstr (g_file_info_get_name (info), ==, "source");
-+  g_assert_cmpint (g_file_info_get_file_type (info), ==, G_FILE_TYPE_REGULAR);
-+
-+  g_clear_object (&info);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_null (info);
-+
-+  g_file_enumerator_close (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_clear_object (&enumerator);
-+
-+  /* Double-check that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Check the content of `source`. */
-+  g_file_load_contents (source_file,
-+                        NULL,
-+                        &contents,
-+                        &length,
-+                        NULL,
-+                        &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpstr (contents, ==, new_contents);
-+  g_assert_cmpuint (length, ==, strlen (new_contents));
-+  g_free (contents);
-+
-+  /* Tidy up. */
-+  g_file_delete (source_file, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_file_delete (tmpdir, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&target_file);
-+  g_clear_object (&source_file);
-+  g_clear_object (&tmpdir);
-+#else  /* if !G_OS_UNIX */
-+  g_test_skip ("Symlink replacement tests can only be run on Unix")
-+#endif
-+}
-+
- static void
- on_file_deleted (GObject      *object,
- 		 GAsyncResult *result,
-@@ -1754,6 +1861,7 @@ main (int argc, char *argv[])
-   g_test_add_data_func ("/file/async-create-delete/4096", GINT_TO_POINTER (4096), test_create_delete);
-   g_test_add_func ("/file/replace-load", test_replace_load);
-   g_test_add_func ("/file/replace-cancel", test_replace_cancel);
-+  g_test_add_func ("/file/replace-symlink", test_replace_symlink);
-   g_test_add_func ("/file/async-delete", test_async_delete);
- #ifdef G_OS_UNIX
-   g_test_add_func ("/file/copy-preserve-mode", test_copy_preserve_mode);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-networking-32-bit-time.patch b/gnu/packages/patches/glib-networking-32-bit-time.patch
new file mode 100644
index 0000000000..a437310270
--- /dev/null
+++ b/gnu/packages/patches/glib-networking-32-bit-time.patch
@@ -0,0 +1,61 @@
+Work around a year-2038 issue when building with a 32-bit 'time_t'
+on 32-bit platforms:
+
+  https://gitlab.gnome.org/GNOME/glib-networking/-/issues/172
+
+From 4f8ca86a0e460794188c3355f0c7cc11fdbe4229 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <simon.mcvittie@collabora.co.uk>
+Date: Tue, 21 Sep 2021 17:07:44 +0000
+Subject: [PATCH] tests: Accept GNUTLS' workaround for limited size of time_t
+
+---
+ tls/tests/certificate.c | 15 +++++++++++++++
+ tls/tests/meson.build   |  1 +
+ 2 files changed, 16 insertions(+)
+
+diff --git a/tls/tests/certificate.c b/tls/tests/certificate.c
+index c0100d30..d216c710 100644
+--- a/tls/tests/certificate.c
++++ b/tls/tests/certificate.c
+@@ -672,6 +672,12 @@ test_certificate_not_valid_before (void)
+   g_object_unref (cert);
+ }
+ 
++/* On 32-bit, GNUTLS caps expiry times at 2037-12-31 23:23:23 to avoid
++ * overflowing time_t. Hopefully by 2037, either 32-bit will finally have
++ * died out, or GNUTLS will rethink its approach to
++ * https://gitlab.com/gnutls/gnutls/-/issues/370 */
++#define GNUTLS_32_BIT_NOT_VALID_AFTER_MAX 2145914603
++
+ static void
+ test_certificate_not_valid_after (void)
+ {
+@@ -686,7 +692,16 @@ test_certificate_not_valid_after (void)
+   actual = g_tls_certificate_get_not_valid_after (cert);
+   g_assert_nonnull (actual);
+   actual_str = g_date_time_format_iso8601 (actual);
++
++#if SIZEOF_TIME_T <= 4
++  if (g_date_time_to_unix (actual) == GNUTLS_32_BIT_NOT_VALID_AFTER_MAX)
++    g_test_incomplete ("not-valid-after date not representable on 32-bit");
++  else
++    g_assert_cmpstr (actual_str, ==, EXPECTED_NOT_VALID_AFTER);
++#else
+   g_assert_cmpstr (actual_str, ==, EXPECTED_NOT_VALID_AFTER);
++#endif
++
+   g_free (actual_str);
+   g_date_time_unref (actual);
+   g_object_unref (cert);
+diff --git a/tls/tests/meson.build b/tls/tests/meson.build
+index e9c7d8c6..7415f913 100644
+--- a/tls/tests/meson.build
++++ b/tls/tests/meson.build
+@@ -69,6 +69,7 @@ foreach backend: backends
+     test_cflags = cflags + [
+       '-DBACKEND="@0@"'.format(backend),
+       '-DBACKEND_IS_' + backend.to_upper(),
++      '-DSIZEOF_TIME_T=@0@'.format(cc.sizeof('time_t', prefix: '#include <time.h>')),
+     ]
+ 
+     if backend == 'openssl'
diff --git a/gnu/packages/patches/glib-networking-gnutls-binding.patch b/gnu/packages/patches/glib-networking-gnutls-binding.patch
new file mode 100644
index 0000000000..91d0743056
--- /dev/null
+++ b/gnu/packages/patches/glib-networking-gnutls-binding.patch
@@ -0,0 +1,21 @@
+Skip failing test in 'test_connection_binding_match_tls_unique'
+in 'tls/tests/connection.c' when building glib-networking against
+GnuTLS 3.7.2.  The failure stems from the fact that
+'gnutls_session_channel_binding' returns GNUTLS_E_INVALID_REQUEST
+is known upstream:
+
+  https://gitlab.gnome.org/GNOME/glib-networking/-/issues/164
+
+diff --git a/tls/tests/connection.c b/tls/tests/connection.c
+index 036df04..347c7a4 100644
+--- a/tls/tests/connection.c
++++ b/tls/tests/connection.c
+@@ -3037,8 +3037,6 @@ main (int   argc,
+               setup_connection, test_connection_missing_server_identity, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/peer-certificate-notify", TestConnection, NULL,
+               setup_connection, test_peer_certificate_notify, teardown_connection);
+-  g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-unique", TestConnection, NULL,
+-              setup_connection, test_connection_binding_match_tls_unique, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-server-end-point", TestConnection, NULL,
+               setup_connection, test_connection_binding_match_tls_server_end_point, teardown_connection);
+   g_test_add ("/tls/" BACKEND "/connection/binding/match-tls-exporter", TestConnection, NULL,
diff --git a/gnu/packages/patches/glib-skip-failing-test.patch b/gnu/packages/patches/glib-skip-failing-test.patch
new file mode 100644
index 0000000000..c7706aaa74
--- /dev/null
+++ b/gnu/packages/patches/glib-skip-failing-test.patch
@@ -0,0 +1,27 @@
+This test timed out on powerpc-linux even after extending the
+test_timeout_slow to 1800 seconds. Previously we tried to work around
+this test by extending test_timeout_slow by 1.5 its previous value.
+
+---
+ gio/tests/meson.build | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/gio/tests/meson.build b/gio/tests/meson.build
+index a926ae0..4fdbe7a 100644
+--- a/gio/tests/meson.build
++++ b/gio/tests/meson.build
+@@ -317,10 +317,6 @@ if host_machine.system() != 'windows'
+         'extra_sources' : [extra_sources, gdbus_test_codegen_generated, gdbus_test_codegen_generated_interface_info],
+         'c_args' : ['-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32'],
+       },
+-      'gdbus-threading' : {
+-        'extra_sources' : extra_sources,
+-        'suite' : ['slow'],
+-      },
+       'gmenumodel' : {
+         'extra_sources' : extra_sources,
+         'suite' : ['slow'],
+
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/glib-tests-timer.patch b/gnu/packages/patches/glib-tests-timer.patch
deleted file mode 100644
index e37425c0c8..0000000000
--- a/gnu/packages/patches/glib-tests-timer.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-* On i686 floating-point roundoff errors could sometimes cause this check to
-  fail depending on the elapsed microseconds.  Improve rounding by adding a
-  fractional bit.
-
---- glib-2.40.0/glib/tests/timer.c	2014-03-05 08:05:42.000000000 -0600
-+++ glib-2.40.0/glib/tests/timer.c	2014-07-10 16:33:12.746862822 -0500
-@@ -35,7 +35,7 @@
-   elapsed = g_timer_elapsed (timer, &micros);
- 
-   g_assert_cmpfloat (elapsed, <, 1.0);
--  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6)) % 1000000);
-+  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6 + 0.5)) % 1000000);
- 
-   g_timer_destroy (timer);
- }
diff --git a/gnu/packages/patches/glibc-2.27-git-fixes.patch b/gnu/packages/patches/glibc-2.27-git-fixes.patch
deleted file mode 100644
index 4ed67c7c25..0000000000
--- a/gnu/packages/patches/glibc-2.27-git-fixes.patch
+++ /dev/null
@@ -1,702 +0,0 @@
-These commits are cherry-picked from the "release/2.27/master" branch.
-
-https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.27/master
-
-Currently, we have the following (with NEWS and ChangeLog entries omitted).
-
-56170e064e2b21ce204f0817733e92f1730541ea
-516fa6080481a1433c173320b1c1432868e1e38a
-f36553bf6a4f69070f99badbdab5802b43e6e211
-7c6304182b9f422b782ace1cdd3efbde056aec36
-78a90c2f74a2012dd3eff302189e47ff6779a757
-1e52d8e65a58c49a48549053a1b89c06240e0c6c
-55ad82e45c313454de657931898e974a7a036cad
-
-From 56170e064e2b21ce204f0817733e92f1730541ea Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <ignatenko@redhat.com>
-Date: Wed, 7 Feb 2018 13:53:10 +0100
-Subject: [PATCH] Linux: use reserved name __key in pkey_get [BZ #22797]
-
-_key is not reserved name and we should avoid using that. It seems that
-it was simple typo when pkey_* was implemented.
-
-(cherry picked from commit 388ff7bd0d57d7061fdd39a2f26f65687e8058da)
-
-diff --git a/sysdeps/unix/sysv/linux/bits/mman-shared.h b/sysdeps/unix/sysv/linux/bits/mman-shared.h
-index 7715e680ca..d15ba95c9d 100644
---- a/sysdeps/unix/sysv/linux/bits/mman-shared.h
-+++ b/sysdeps/unix/sysv/linux/bits/mman-shared.h
-@@ -61,7 +61,7 @@ int pkey_set (int __key, unsigned int __access_rights) __THROW;
- 
- /* Return the access rights for the current thread for KEY, which must
-    have been allocated using pkey_alloc.  */
--int pkey_get (int _key) __THROW;
-+int pkey_get (int __key) __THROW;
- 
- /* Free an allocated protection key, which must have been allocated
-    using pkey_alloc.  */
-
-From 516fa6080481a1433c173320b1c1432868e1e38a Mon Sep 17 00:00:00 2001
-From: "Dmitry V. Levin" <ldv@altlinux.org>
-Date: Fri, 29 Dec 2017 23:19:32 +0000
-Subject: [PATCH] linux/aarch64: sync sys/ptrace.h with Linux 4.15 [BZ #22433]
-
-Remove compat-specific constants that were never exported by kernel
-headers under these names.  Before linux commit v3.7-rc1~16^2~1 they
-were exported with COMPAT_ prefix, and since that commit they are not
-exported at all.
-
-* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h (__ptrace_request):
-Remove arm-specific PTRACE_GET_THREAD_AREA, PTRACE_GETHBPREGS,
-and PTRACE_SETHBPREGS.
-
-(cherry picked from commit 2fd4bbaa1446f1be700e10c526cf585a796c4991)
-
-diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-index 4be45b95ff..444edbb702 100644
---- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-+++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
-@@ -78,18 +78,10 @@ enum __ptrace_request
-   PTRACE_DETACH = 17,
- #define PT_DETACH PTRACE_DETACH
- 
--  PTRACE_GET_THREAD_AREA = 22,
--
-   /* Continue and stop at the next entry to or return from syscall.  */
-   PTRACE_SYSCALL = 24,
- #define PT_SYSCALL PTRACE_SYSCALL
- 
--  /* Get all hardware breakpoint registers.  */
--  PTRACE_GETHBPREGS = 29,
--
--  /* Set all hardware breakpoint registers.  */
--  PTRACE_SETHBPREGS = 30,
--
-   /* Set ptrace filter options.  */
-   PTRACE_SETOPTIONS = 0x4200,
- #define PT_SETOPTIONS PTRACE_SETOPTIONS
-
-From f36553bf6a4f69070f99badbdab5802b43e6e211 Mon Sep 17 00:00:00 2001
-From: Mike FABIAN <mfabian@redhat.com>
-Date: Mon, 19 Feb 2018 21:59:30 +0100
-Subject: [PATCH] =?UTF-8?q?Add=20missing=20=E2=80=9Creorder-end=E2=80=9D?=
- =?UTF-8?q?=20in=20LC=5FCOLLATE=20of=20et=5FEE=20[BZ=20#22517]?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-	[BZ #22517]
-	* localedata/locales/et_EE (LC_COLLATE): add missing “reorder-end”
-
-(cherry picked from commit 7ec5f9465e732e668d0dc94ac078ba68056d6d0a)
-
-diff --git a/localedata/locales/et_EE b/localedata/locales/et_EE
-index 9cb55b568f..bab7493c98 100644
---- a/localedata/locales/et_EE
-+++ b/localedata/locales/et_EE
-@@ -103,6 +103,8 @@ reorder-after <w>
- <U00FC> <u-diaresis>;<BAS>;<MIN>;IGNORE % ü
- <U00DC> <u-diaresis>;<BAS>;<CAP>;IGNORE % Ü
- 
-+reorder-end
-+
- END LC_COLLATE
- 
- LC_CTYPE
-
-From 7c6304182b9f422b782ace1cdd3efbde056aec36 Mon Sep 17 00:00:00 2001
-From: DJ Delorie <dj@redhat.com>
-Date: Thu, 1 Mar 2018 23:20:45 -0500
-Subject: [PATCH] [BZ #22342] Fix netgroup cache keys.
-
-Unlike other nscd caches, the netgroup cache contains two types of
-records - those for "iterate through a netgroup" (i.e. setnetgrent())
-and those for "is this user in this netgroup" (i.e. innetgr()),
-i.e. full and partial records.  The timeout code assumes these records
-have the same key for the group name, so that the collection of records
-that is "this netgroup" can be expired as a unit.
-
-However, the keys are not the same, as the in-netgroup key is generated
-by nscd rather than being passed to it from elsewhere, and is generated
-without the trailing NUL.  All other keys have the trailing NUL, and as
-noted in the linked BZ, debug statements confirm that two keys for the
-same netgroup are added to the cache with two different lengths.
-
-The result of this is that as records in the cache expire, the purge
-code only cleans out one of the two types of entries, resulting in
-stale, possibly incorrect, and possibly inconsistent cache data.
-
-The patch simply includes the existing NUL in the computation for the
-key length ('key' points to the char after the NUL, and 'group' to the
-first char of the group, so 'key-group' includes the first char to the
-NUL, inclusive).
-
-	[BZ #22342]
-	* nscd/netgroupcache.c (addinnetgrX): Include trailing NUL in
-	key value.
-
-Reviewed-by: Carlos O'Donell <carlos@redhat.com>
-(cherry picked from commit 1c81d55fc4b07b51adf68558ba74ce975153e580)
-
-diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
-index b832c9315f..2f187b208c 100644
---- a/nscd/netgroupcache.c
-+++ b/nscd/netgroupcache.c
-@@ -480,7 +480,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
- {
-   const char *group = key;
-   key = (char *) rawmemchr (key, '\0') + 1;
--  size_t group_len = key - group - 1;
-+  size_t group_len = key - group;
-   const char *host = *key++ ? key : NULL;
-   if (host != NULL)
-     key = (char *) rawmemchr (key, '\0') + 1;
-
-From 78a90c2f74a2012dd3eff302189e47ff6779a757 Mon Sep 17 00:00:00 2001
-From: Andreas Schwab <schwab@linux-m68k.org>
-Date: Fri, 2 Mar 2018 23:07:14 +0100
-Subject: [PATCH] Fix multiple definitions of __nss_*_database (bug 22918)
-
-(cherry picked from commit eaf6753f8aac33a36deb98c1031d1bad7b593d2d)
-
-diff --git a/nscd/gai.c b/nscd/gai.c
-index d081747797..576fd0045b 100644
---- a/nscd/gai.c
-+++ b/nscd/gai.c
-@@ -45,3 +45,6 @@
- #ifdef HAVE_LIBIDN
- # include <libidn/idn-stub.c>
- #endif
-+
-+/* Some variables normally defined in libc.  */
-+service_user *__nss_hosts_database attribute_hidden;
-diff --git a/nss/nsswitch.c b/nss/nsswitch.c
-index d5e655974f..b0f0c11a3e 100644
---- a/nss/nsswitch.c
-+++ b/nss/nsswitch.c
-@@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database,
- 
- /* Declare external database variables.  */
- #define DEFINE_DATABASE(name)						      \
--  extern service_user *__nss_##name##_database attribute_hidden;	      \
-+  service_user *__nss_##name##_database attribute_hidden;		      \
-   weak_extern (__nss_##name##_database)
- #include "databases.def"
- #undef DEFINE_DATABASE
-diff --git a/nss/nsswitch.h b/nss/nsswitch.h
-index eccb535ef5..63573b9ebc 100644
---- a/nss/nsswitch.h
-+++ b/nss/nsswitch.h
-@@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots)
- #define MAX_NR_ADDRS    48
- 
- /* Prototypes for __nss_*_lookup2 functions.  */
--#define DEFINE_DATABASE(arg)				    \
--  service_user *__nss_##arg##_database attribute_hidden;    \
--  int __nss_##arg##_lookup2 (service_user **, const char *, \
--			     const char *, void **);	    \
-+#define DEFINE_DATABASE(arg)						      \
-+  extern service_user *__nss_##arg##_database attribute_hidden;		      \
-+  int __nss_##arg##_lookup2 (service_user **, const char *,		      \
-+			     const char *, void **);			      \
-   libc_hidden_proto (__nss_##arg##_lookup2)
- #include "databases.def"
- #undef DEFINE_DATABASE
-diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c
-index f509534ca9..8c64ac59ff 100644
---- a/posix/tst-rfc3484-2.c
-+++ b/posix/tst-rfc3484-2.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c
-index ae44087a10..1c61aaf844 100644
---- a/posix/tst-rfc3484-3.c
-+++ b/posix/tst-rfc3484-3.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c
-index 7f191abbbc..8f45848e44 100644
---- a/posix/tst-rfc3484.c
-+++ b/posix/tst-rfc3484.c
-@@ -58,6 +58,7 @@ _res_hconf_init (void)
- #undef	USE_NSCD
- #include "../sysdeps/posix/getaddrinfo.c"
- 
-+service_user *__nss_hosts_database attribute_hidden;
- 
- /* This is the beginning of the real test code.  The above defines
-    (among other things) the function rfc3484_sort.  */
-
-From 1e52d8e65a58c49a48549053a1b89c06240e0c6c Mon Sep 17 00:00:00 2001
-From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date: Fri, 17 Nov 2017 16:04:29 -0200
-Subject: [PATCH] i386: Fix i386 sigaction sa_restorer initialization
- (BZ#21269)
-
-This patch fixes the i386 sa_restorer field initialization for sigaction
-syscall for kernel with vDSO.  As described in bug report, i386 Linux
-(and compat on x86_64) interprets SA_RESTORER clear with nonzero
-sa_restorer as a request for stack switching if the SS segment is 'funny'.
-This means that anything that tries to mix glibc's signal handling with
-segmentation (for instance through modify_ldt syscall) is randomly broken
-depending on what values lands in sa_restorer.
-
-The testcase added  is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
-more specifically in do_multicpu_tests function.  The main changes are:
-
-  - C11 atomics instead of plain access.
-
-  - Remove x86_64 support which simplifies the syscall handling and fallbacks.
-
-  - Replicate only the test required to trigger the issue.
-
-Checked on i686-linux-gnu.
-
-	[BZ #21269]
-	* sysdeps/unix/sysv/linux/i386/Makefile (tests): Add tst-bz21269.
-	* sysdeps/unix/sysv/linux/i386/sigaction.c (SET_SA_RESTORER): Clear
-	sa_restorer for vDSO case.
-	* sysdeps/unix/sysv/linux/i386/tst-bz21269.c: New file.
-
-(cherry picked from commit 68448be208ee06e76665918b37b0a57e3e00c8b4)
-
-diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
-index 4080b8c966..da716e2c1b 100644
---- a/sysdeps/unix/sysv/linux/i386/Makefile
-+++ b/sysdeps/unix/sysv/linux/i386/Makefile
-@@ -3,6 +3,9 @@ default-abi := 32
- 
- ifeq ($(subdir),misc)
- sysdep_routines += ioperm iopl vm86
-+
-+tests += tst-bz21269
-+$(objpfx)tst-bz21269: $(shared-thread-library)
- endif
- 
- ifeq ($(subdir),elf)
-diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
-index a5eb9e0d3e..177ff60ee6 100644
---- a/sysdeps/unix/sysv/linux/i386/sigaction.c
-+++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
-@@ -42,7 +42,6 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
- #endif
- extern void restore (void) asm ("__restore") attribute_hidden;
- 
--
- /* If ACT is not NULL, change the action for SIG to *ACT.
-    If OACT is not NULL, put the old action for SIG in *OACT.  */
- int
-@@ -65,6 +64,8 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
- 	  kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
- 			      ? &restore_rt : &restore);
- 	}
-+      else
-+	kact.sa_restorer = NULL;
-     }
- 
-   /* XXX The size argument hopefully will have to be changed to the
-diff --git a/sysdeps/unix/sysv/linux/i386/tst-bz21269.c b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
-new file mode 100644
-index 0000000000..353e36507d
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
-@@ -0,0 +1,233 @@
-+/* Test for i386 sigaction sa_restorer handling (BZ#21269)
-+   Copyright (C) 2017 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library 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
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
-+/* This is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
-+   more specifically in do_multicpu_tests function.  The main changes
-+   are:
-+
-+   - C11 atomics instead of plain access.
-+   - Remove x86_64 support which simplifies the syscall handling
-+     and fallbacks.
-+   - Replicate only the test required to trigger the issue for the
-+     BZ#21269.  */
-+
-+#include <stdatomic.h>
-+
-+#include <asm/ldt.h>
-+#include <linux/futex.h>
-+
-+#include <setjmp.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <sys/syscall.h>
-+#include <sys/mman.h>
-+
-+#include <support/xunistd.h>
-+#include <support/check.h>
-+#include <support/xthread.h>
-+
-+static int
-+xset_thread_area (struct user_desc *u_info)
-+{
-+  long ret = syscall (SYS_set_thread_area, u_info);
-+  TEST_VERIFY_EXIT (ret == 0);
-+  return ret;
-+}
-+
-+static void
-+xmodify_ldt (int func, const void *ptr, unsigned long bytecount)
-+{
-+  TEST_VERIFY_EXIT (syscall (SYS_modify_ldt, 1, ptr, bytecount) == 0);
-+}
-+
-+static int
-+futex (int *uaddr, int futex_op, int val, void *timeout, int *uaddr2,
-+	int val3)
-+{
-+  return syscall (SYS_futex, uaddr, futex_op, val, timeout, uaddr2, val3);
-+}
-+
-+static void
-+xsethandler (int sig, void (*handler)(int, siginfo_t *, void *), int flags)
-+{
-+  struct sigaction sa = { 0 };
-+  sa.sa_sigaction = handler;
-+  sa.sa_flags = SA_SIGINFO | flags;
-+  TEST_VERIFY_EXIT (sigemptyset (&sa.sa_mask) == 0);
-+  TEST_VERIFY_EXIT (sigaction (sig, &sa, 0) == 0);
-+}
-+
-+static jmp_buf jmpbuf;
-+
-+static void
-+sigsegv_handler (int sig, siginfo_t *info, void *ctx_void)
-+{
-+  siglongjmp (jmpbuf, 1);
-+}
-+
-+/* Points to an array of 1024 ints, each holding its own index.  */
-+static const unsigned int *counter_page;
-+static struct user_desc *low_user_desc;
-+static struct user_desc *low_user_desc_clear; /* Used to delete GDT entry.  */
-+static int gdt_entry_num;
-+
-+static void
-+setup_counter_page (void)
-+{
-+  long page_size = sysconf (_SC_PAGE_SIZE);
-+  TEST_VERIFY_EXIT (page_size > 0);
-+  unsigned int *page = xmmap (NULL, page_size, PROT_READ | PROT_WRITE,
-+			      MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
-+  for (int i = 0; i < (page_size / sizeof (unsigned int)); i++)
-+    page[i] = i;
-+  counter_page = page;
-+}
-+
-+static void
-+setup_low_user_desc (void)
-+{
-+  low_user_desc = xmmap (NULL, 2 * sizeof (struct user_desc),
-+			 PROT_READ | PROT_WRITE,
-+			 MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
-+
-+  low_user_desc->entry_number    = -1;
-+  low_user_desc->base_addr       = (unsigned long) &counter_page[1];
-+  low_user_desc->limit           = 0xffff;
-+  low_user_desc->seg_32bit       = 1;
-+  low_user_desc->contents        = 0;
-+  low_user_desc->read_exec_only  = 0;
-+  low_user_desc->limit_in_pages  = 1;
-+  low_user_desc->seg_not_present = 0;
-+  low_user_desc->useable         = 0;
-+
-+  xset_thread_area (low_user_desc);
-+
-+  low_user_desc_clear = low_user_desc + 1;
-+  low_user_desc_clear->entry_number = gdt_entry_num;
-+  low_user_desc_clear->read_exec_only = 1;
-+  low_user_desc_clear->seg_not_present = 1;
-+}
-+
-+/* Possible values of futex:
-+   0: thread is idle.
-+   1: thread armed.
-+   2: thread should clear LDT entry 0.
-+   3: thread should exit.  */
-+static atomic_uint ftx;
-+
-+static void *
-+threadproc (void *ctx)
-+{
-+  while (1)
-+    {
-+      futex ((int *) &ftx, FUTEX_WAIT, 1, NULL, NULL, 0);
-+      while (atomic_load (&ftx) != 2)
-+	{
-+	  if (atomic_load (&ftx) >= 3)
-+	    return NULL;
-+	}
-+
-+      /* clear LDT entry 0.  */
-+      const struct user_desc desc = { 0 };
-+      xmodify_ldt (1, &desc, sizeof (desc));
-+
-+      /* If ftx == 2, set it to zero,  If ftx == 100, quit.  */
-+      if (atomic_fetch_add (&ftx, -2) != 2)
-+	return NULL;
-+    }
-+}
-+
-+
-+/* As described in testcase, for historical reasons x86_32 Linux (and compat
-+   on x86_64) interprets SA_RESTORER clear with nonzero sa_restorer as a
-+   request for stack switching if the SS segment is 'funny' (this is default
-+   scenario for vDSO system).  This means that anything that tries to mix
-+   signal handling with segmentation should explicit clear the sa_restorer.
-+
-+   This testcase check if sigaction in fact does it by changing the local
-+   descriptor table (LDT) through the modify_ldt syscall and triggering
-+   a synchronous segfault on iret fault by trying to install an invalid
-+   segment.  With a correct zeroed sa_restorer it should not trigger an
-+   'real' SEGSEGV and allows the siglongjmp in signal handler.  */
-+
-+static int
-+do_test (void)
-+{
-+  setup_counter_page ();
-+  setup_low_user_desc ();
-+
-+  pthread_t thread;
-+  unsigned short orig_ss;
-+
-+  xsethandler (SIGSEGV, sigsegv_handler, 0);
-+  /* 32-bit kernels send SIGILL instead of SIGSEGV on IRET faults.  */
-+  xsethandler (SIGILL, sigsegv_handler, 0);
-+
-+  thread = xpthread_create (0, threadproc, 0);
-+
-+  asm volatile ("mov %%ss, %0" : "=rm" (orig_ss));
-+
-+  for (int i = 0; i < 5; i++)
-+    {
-+      if (sigsetjmp (jmpbuf, 1) != 0)
-+	continue;
-+
-+      /* Make sure the thread is ready after the last test. */
-+      while (atomic_load (&ftx) != 0)
-+	;
-+
-+      struct user_desc desc = {
-+	.entry_number       = 0,
-+	.base_addr          = 0,
-+	.limit              = 0xffff,
-+	.seg_32bit          = 1,
-+	.contents           = 0,
-+	.read_exec_only     = 0,
-+	.limit_in_pages     = 1,
-+	.seg_not_present    = 0,
-+	.useable            = 0
-+      };
-+
-+      xmodify_ldt (0x11, &desc, sizeof (desc));
-+
-+      /* Arm the thread.  */
-+      ftx = 1;
-+      futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
-+
-+      asm volatile ("mov %0, %%ss" : : "r" (0x7));
-+
-+      /* Fire up thread modify_ldt call.  */
-+      atomic_store (&ftx, 2);
-+
-+      while (atomic_load (&ftx) != 0)
-+	;
-+
-+      /* On success, modify_ldt will segfault us synchronously and we will
-+	 escape via siglongjmp.  */
-+      support_record_failure ();
-+    }
-+
-+  atomic_store (&ftx, 100);
-+  futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
-+
-+  xpthread_join (thread);
-+
-+  return 0;
-+}
-+
-+#include <support/test-driver.c>
-
-From 55ad82e45c313454de657931898e974a7a036cad Mon Sep 17 00:00:00 2001
-From: Andrew Senkevich <andrew.n.senkevich@gmail.com>
-Date: Fri, 23 Mar 2018 16:19:45 +0100
-Subject: [PATCH] Fix i386 memmove issue (bug 22644).
-
-	[BZ #22644]
-	* sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S: Fixed
-	branch conditions.
-	* string/test-memmove.c (do_test2): New testcase.
-
-(cherry picked from commit cd66c0e584c6d692bc8347b5e72723d02b8a8ada)
-
-diff --git a/string/test-memmove.c b/string/test-memmove.c
-index edc7a4c3bf..64e3651ba4 100644
---- a/string/test-memmove.c
-+++ b/string/test-memmove.c
-@@ -24,6 +24,7 @@
- # define TEST_NAME "memmove"
- #endif
- #include "test-string.h"
-+#include <support/test-driver.h>
- 
- char *simple_memmove (char *, const char *, size_t);
- 
-@@ -245,6 +246,60 @@ do_random_tests (void)
-     }
- }
- 
-+static void
-+do_test2 (void)
-+{
-+  size_t size = 0x20000000;
-+  uint32_t * large_buf;
-+
-+  large_buf = mmap ((void*) 0x70000000, size, PROT_READ | PROT_WRITE,
-+		    MAP_PRIVATE | MAP_ANON, -1, 0);
-+
-+  if (large_buf == MAP_FAILED)
-+    error (EXIT_UNSUPPORTED, errno, "Large mmap failed");
-+
-+  if ((uintptr_t) large_buf > 0x80000000 - 128
-+      || 0x80000000 - (uintptr_t) large_buf > 0x20000000)
-+    {
-+      error (0, 0, "Large mmap allocated improperly");
-+      ret = EXIT_UNSUPPORTED;
-+      munmap ((void *) large_buf, size);
-+      return;
-+    }
-+
-+  size_t bytes_move = 0x80000000 - (uintptr_t) large_buf;
-+  size_t arr_size = bytes_move / sizeof (uint32_t);
-+  size_t i;
-+
-+  FOR_EACH_IMPL (impl, 0)
-+    {
-+      for (i = 0; i < arr_size; i++)
-+        large_buf[i] = (uint32_t) i;
-+
-+      uint32_t * dst = &large_buf[33];
-+
-+#ifdef TEST_BCOPY
-+      CALL (impl, (char *) large_buf, (char *) dst, bytes_move);
-+#else
-+      CALL (impl, (char *) dst, (char *) large_buf, bytes_move);
-+#endif
-+
-+      for (i = 0; i < arr_size; i++)
-+	{
-+	  if (dst[i] != (uint32_t) i)
-+	    {
-+	      error (0, 0,
-+		     "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"",
-+		     impl->name, dst, large_buf, i);
-+	      ret = 1;
-+	      break;
-+	    }
-+	}
-+    }
-+
-+  munmap ((void *) large_buf, size);
-+}
-+
- int
- test_main (void)
- {
-@@ -284,6 +339,9 @@ test_main (void)
-     }
- 
-   do_random_tests ();
-+
-+  do_test2 ();
-+
-   return ret;
- }
- 
-diff --git a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-index 9c3bbe7e17..9aa17de99c 100644
---- a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-+++ b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
-@@ -72,7 +72,7 @@ ENTRY (MEMCPY)
- 	cmp	%edx, %eax
- 
- # ifdef USE_AS_MEMMOVE
--	jg	L(check_forward)
-+	ja	L(check_forward)
- 
- L(mm_len_0_or_more_backward):
- /* Now do checks for lengths. We do [0..16], [16..32], [32..64], [64..128]
-@@ -81,7 +81,7 @@ L(mm_len_0_or_more_backward):
- 	jbe	L(mm_len_0_16_bytes_backward)
- 
- 	cmpl	$32, %ecx
--	jg	L(mm_len_32_or_more_backward)
-+	ja	L(mm_len_32_or_more_backward)
- 
- /* Copy [0..32] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -92,7 +92,7 @@ L(mm_len_0_or_more_backward):
- 
- L(mm_len_32_or_more_backward):
- 	cmpl	$64, %ecx
--	jg	L(mm_len_64_or_more_backward)
-+	ja	L(mm_len_64_or_more_backward)
- 
- /* Copy [0..64] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -107,7 +107,7 @@ L(mm_len_32_or_more_backward):
- 
- L(mm_len_64_or_more_backward):
- 	cmpl	$128, %ecx
--	jg	L(mm_len_128_or_more_backward)
-+	ja	L(mm_len_128_or_more_backward)
- 
- /* Copy [0..128] and return.  */
- 	movdqu	(%eax), %xmm0
-@@ -132,7 +132,7 @@ L(mm_len_128_or_more_backward):
- 	add	%ecx, %eax
- 	cmp	%edx, %eax
- 	movl	SRC(%esp), %eax
--	jle	L(forward)
-+	jbe	L(forward)
- 	PUSH (%esi)
- 	PUSH (%edi)
- 	PUSH (%ebx)
-@@ -269,7 +269,7 @@ L(check_forward):
- 	add	%edx, %ecx
- 	cmp	%eax, %ecx
- 	movl	LEN(%esp), %ecx
--	jle	L(forward)
-+	jbe	L(forward)
- 
- /* Now do checks for lengths. We do [0..16], [0..32], [0..64], [0..128]
- 	separately.  */
diff --git a/gnu/packages/patches/glibc-2.27-supported-locales.patch b/gnu/packages/patches/glibc-2.27-supported-locales.patch
deleted file mode 100644
index 2888052bb8..0000000000
--- a/gnu/packages/patches/glibc-2.27-supported-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch is taken from debian's glibc package (generate-supported.mk).
-It install the localedata/SUPPORTED file of the glibc. This file lists
-all the supported locales of the glibc.
-
-diff --git a/localedata/Makefile.old b/localedata/Makefile
-index 34877c0..a61d9b9 100644
---- a/localedata/Makefile.old
-+++ b/localedata/Makefile
-@@ -91,7 +91,8 @@ endif
- # Files to install.
- install-others := $(addprefix $(inst_i18ndir)/, \
- 			      $(addsuffix .gz, $(charmaps)) \
--			      $(locales))
-+			      $(locales)) \
-+                   $(inst_i18ndir)/SUPPORTED
- 
- tests: $(objdir)/iconvdata/gconv-modules
- 
-@@ -195,6 +196,14 @@ endif
- 
- include SUPPORTED
- 
-+$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
-+	for locale in $(SUPPORTED-LOCALES); do \
-+		[ $$locale = true ] && continue; \
-+		echo $$locale | sed 's,/, ,' >> LOCALES; \
-+	done
-+	$(make-target-directory)
-+	$(INSTALL_DATA) LOCALES $@
-+
- INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
- 
- # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.28-git-fixes.patch b/gnu/packages/patches/glibc-2.28-git-fixes.patch
deleted file mode 100644
index 7e370ef0b1..0000000000
--- a/gnu/packages/patches/glibc-2.28-git-fixes.patch
+++ /dev/null
@@ -1,248 +0,0 @@
-This file contains fixes from the "release/2.28/master" branch:
-https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.28/master
-
-Currently we have these commits (sans tests and ChangeLog updates):
-7f11842e7483da7aa9fa3031be122021978ef600
-726e1554ce4db5e35af41cb0110c54c5e1232054
-4b25485f03158959cff45379eecc1d73c7dcdd11
-d05b05d1570ba3ae354a2f5a3cfeefb373b09979
-bfcfa22589f2b4277a65e60c6b736b6bbfbd87d0
-2f498f3d140ab5152bd784df2be7af7d9c5e63ed
-
-diff --git a/htl/Versions b/htl/Versions
-index 6a63a1b8a1..c5a616da10 100644
---- a/htl/Versions
-+++ b/htl/Versions
-@@ -150,6 +150,8 @@ libpthread {
-     __cthread_keycreate;
-     __cthread_getspecific;
-     __cthread_setspecific;
-+    __pthread_getspecific;
-+    __pthread_setspecific;
-     __pthread_getattr_np;
-     __pthread_attr_getstack;
-   }
-
-diff --git a/sysdeps/htl/pt-getspecific.c b/sysdeps/htl/pt-getspecific.c
-index a0227a67f6..64ddf9551a 100644
---- a/sysdeps/htl/pt-getspecific.c
-+++ b/sysdeps/htl/pt-getspecific.c
-@@ -36,3 +36,4 @@ __pthread_getspecific (pthread_key_t key)
-   return self->thread_specifics[key];
- }
- strong_alias (__pthread_getspecific, pthread_getspecific);
-+hidden_def (__pthread_getspecific)
-diff --git a/sysdeps/htl/pt-setspecific.c b/sysdeps/htl/pt-setspecific.c
-index a46a12f157..02aff417ef 100644
---- a/sysdeps/htl/pt-setspecific.c
-+++ b/sysdeps/htl/pt-setspecific.c
-@@ -48,3 +48,4 @@ __pthread_setspecific (pthread_key_t key, const void *value)
-   return 0;
- }
- strong_alias (__pthread_setspecific, pthread_setspecific);
-+hidden_def (__pthread_setspecific)
-diff --git a/sysdeps/htl/pthreadP.h b/sysdeps/htl/pthreadP.h
-index 132ac1718e..71c2fcd9c6 100644
---- a/sysdeps/htl/pthreadP.h
-+++ b/sysdeps/htl/pthreadP.h
-@@ -68,6 +68,8 @@ struct __pthread_cancelation_handler **___pthread_get_cleanup_stack (void) attri
- 
- #if IS_IN (libpthread)
- hidden_proto (__pthread_key_create)
-+hidden_proto (__pthread_getspecific)
-+hidden_proto (__pthread_setspecific)
- hidden_proto (_pthread_mutex_init)
- #endif
- 
-diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c
-index 3bde0cf4f0..bc140b5a7f 100644
---- a/sysdeps/unix/sysv/linux/getdents64.c
-+++ b/sysdeps/unix/sysv/linux/getdents64.c
-@@ -33,41 +33,80 @@ strong_alias (__getdents64, __getdents)
- # include <shlib-compat.h>
- 
- # if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
--# include <olddirent.h>
-+#  include <olddirent.h>
-+#  include <unistd.h>
- 
--/* kernel definition of as of 3.2.  */
--struct compat_linux_dirent
-+static ssize_t
-+handle_overflow (int fd, __off64_t offset, ssize_t count)
- {
--  /* Both d_ino and d_off are compat_ulong_t which are defined in all
--     architectures as 'u32'.  */
--  uint32_t        d_ino;
--  uint32_t        d_off;
--  unsigned short  d_reclen;
--  char            d_name[1];
--};
-+  /* If this is the first entry in the buffer, we can report the
-+     error.  */
-+  if (count == 0)
-+    {
-+      __set_errno (EOVERFLOW);
-+      return -1;
-+    }
-+
-+  /* Otherwise, seek to the overflowing entry, so that the next call
-+     will report the error, and return the data read so far..  */
-+  if (__lseek64 (fd, offset, SEEK_SET) != 0)
-+    return -1;
-+  return count;
-+}
- 
- ssize_t
- __old_getdents64 (int fd, char *buf, size_t nbytes)
- {
--  ssize_t retval = INLINE_SYSCALL_CALL (getdents, fd, buf, nbytes);
-+  /* We do not move the individual directory entries.  This is only
-+     possible if the target type (struct __old_dirent64) is smaller
-+     than the source type.  */
-+  _Static_assert (offsetof (struct __old_dirent64, d_name)
-+		  <= offsetof (struct dirent64, d_name),
-+		  "__old_dirent64 is larger than dirent64");
-+  _Static_assert (__alignof__ (struct __old_dirent64)
-+		  <= __alignof__ (struct dirent64),
-+		  "alignment of __old_dirent64 is larger than dirent64");
- 
--  /* The kernel added the d_type value after the name.  Change this now.  */
--  if (retval != -1)
-+  ssize_t retval = INLINE_SYSCALL_CALL (getdents64, fd, buf, nbytes);
-+  if (retval > 0)
-     {
--      union
--      {
--	struct compat_linux_dirent k;
--	struct dirent u;
--      } *kbuf = (void *) buf;
--
--      while ((char *) kbuf < buf + retval)
-+      char *p = buf;
-+      char *end = buf + retval;
-+      while (p < end)
- 	{
--	  char d_type = *((char *) kbuf + kbuf->k.d_reclen - 1);
--	  memmove (kbuf->u.d_name, kbuf->k.d_name,
--		   strlen (kbuf->k.d_name) + 1);
--	  kbuf->u.d_type = d_type;
-+	  struct dirent64 *source = (struct dirent64 *) p;
-+
-+	  /* Copy out the fixed-size data.  */
-+	  __ino_t ino = source->d_ino;
-+	  __off64_t offset = source->d_off;
-+	  unsigned int reclen = source->d_reclen;
-+	  unsigned char type = source->d_type;
-+
-+	  /* Check for ino_t overflow.  */
-+	  if (__glibc_unlikely (ino != source->d_ino))
-+	    return handle_overflow (fd, offset, p - buf);
-+
-+	  /* Convert to the target layout.  Use a separate struct and
-+	     memcpy to side-step aliasing issues.  */
-+	  struct __old_dirent64 result;
-+	  result.d_ino = ino;
-+	  result.d_off = offset;
-+	  result.d_reclen = reclen;
-+	  result.d_type = type;
-+
-+	  /* Write the fixed-sized part of the result to the
-+	     buffer.  */
-+	  size_t result_name_offset = offsetof (struct __old_dirent64, d_name);
-+	  memcpy (p, &result, result_name_offset);
-+
-+	  /* Adjust the position of the name if necessary.  Copy
-+	     everything until the end of the record, including the
-+	     terminating NUL byte.  */
-+	  if (result_name_offset != offsetof (struct dirent64, d_name))
-+	    memmove (p + result_name_offset, source->d_name,
-+		     reclen - offsetof (struct dirent64, d_name));
- 
--	  kbuf = (void *) ((char *) kbuf + kbuf->k.d_reclen);
-+	  p += reclen;
- 	}
-      }
-   return retval;
-
-diff --git a/misc/error.c b/misc/error.c
-index b4e8b6c938..03378e2f2a 100644
---- a/misc/error.c
-+++ b/misc/error.c
-@@ -319,6 +319,7 @@ error (int status, int errnum, const char *message, ...)
- 
-   va_start (args, message);
-   error_tail (status, errnum, message, args);
-+  va_end (args);
- 
- #ifdef _LIBC
-   _IO_funlockfile (stderr);
-@@ -390,6 +391,7 @@ error_at_line (int status, int errnum, const char *file_name,
- 
-   va_start (args, message);
-   error_tail (status, errnum, message, args);
-+  va_end (args);
- 
- #ifdef _LIBC
-   _IO_funlockfile (stderr);
-
-diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c
-index 265a02434d..7293b795b6 100644
---- a/nscd/nscd_conf.c
-+++ b/nscd/nscd_conf.c
-@@ -190,7 +190,10 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
- 	  if (!arg1)
- 	    error (0, 0, _("Must specify user name for server-user option"));
- 	  else
--	    server_user = xstrdup (arg1);
-+	    {
-+	      free ((char *) server_user);
-+	      server_user = xstrdup (arg1);
-+	    }
- 	}
-       else if (strcmp (entry, "stat-user") == 0)
- 	{
-@@ -198,6 +201,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
- 	    error (0, 0, _("Must specify user name for stat-user option"));
- 	  else
- 	    {
-+	      free ((char *) stat_user);
- 	      stat_user = xstrdup (arg1);
- 
- 	      struct passwd *pw = getpwnam (stat_user);
-
-diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
-index cfd34b66b9..35b0bfc5d2 100644
---- a/nss/nss_files/files-alias.c
-+++ b/nss/nss_files/files-alias.c
-@@ -221,6 +221,13 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 			{
- 			  while (! feof_unlocked (listfile))
- 			    {
-+			      if (room_left < 2)
-+				{
-+				  free (old_line);
-+				  fclose (listfile);
-+				  goto no_more_room;
-+				}
-+
- 			      first_unused[room_left - 1] = '\xff';
- 			      line = fgets_unlocked (first_unused, room_left,
- 						     listfile);
-@@ -229,6 +236,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 			      if (first_unused[room_left - 1] != '\xff')
- 				{
- 				  free (old_line);
-+				  fclose (listfile);
- 				  goto no_more_room;
- 				}
- 
-@@ -256,6 +264,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
- 						       + __alignof__ (char *)))
- 					{
- 					  free (old_line);
-+					  fclose (listfile);
- 					  goto no_more_room;
- 					}
- 				      room_left -= ((first_unused - cp)
-
diff --git a/gnu/packages/patches/glibc-2.28-supported-locales.patch b/gnu/packages/patches/glibc-2.28-supported-locales.patch
deleted file mode 100644
index 2888052bb8..0000000000
--- a/gnu/packages/patches/glibc-2.28-supported-locales.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-This patch is taken from debian's glibc package (generate-supported.mk).
-It install the localedata/SUPPORTED file of the glibc. This file lists
-all the supported locales of the glibc.
-
-diff --git a/localedata/Makefile.old b/localedata/Makefile
-index 34877c0..a61d9b9 100644
---- a/localedata/Makefile.old
-+++ b/localedata/Makefile
-@@ -91,7 +91,8 @@ endif
- # Files to install.
- install-others := $(addprefix $(inst_i18ndir)/, \
- 			      $(addsuffix .gz, $(charmaps)) \
--			      $(locales))
-+			      $(locales)) \
-+                   $(inst_i18ndir)/SUPPORTED
- 
- tests: $(objdir)/iconvdata/gconv-modules
- 
-@@ -195,6 +196,14 @@ endif
- 
- include SUPPORTED
- 
-+$(inst_i18ndir)/SUPPORTED: SUPPORTED $(+force)
-+	for locale in $(SUPPORTED-LOCALES); do \
-+		[ $$locale = true ] && continue; \
-+		echo $$locale | sed 's,/, ,' >> LOCALES; \
-+	done
-+	$(make-target-directory)
-+	$(INSTALL_DATA) LOCALES $@
-+
- INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
- 
- # Sometimes the whole collection of locale files should be installed.
diff --git a/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch
new file mode 100644
index 0000000000..1c3fe427f9
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.31-hurd-clock_gettime_monotonic.patch
@@ -0,0 +1,84 @@
+This is needed to run Python on the Hurd, especially during the build of
+python-boot0.
+
+Adapted from https://salsa.debian.org/glibc-team/glibc/-/blob/glibc-2.31/debian/patches/hurd-i386/unsubmitted-clock_t_centiseconds.diff
+
+Use the realtime clock for the monotonic clock. This is of course not a proper
+implementation (which is being done in Mach), but will permit to fix at least
+the iceweasel stack.
+
+vlc however doesn't build when _POSIX_CLOCK_SELECTION is enabled but
+_POSIX_TIMERS is not, and they refuse to fix that (see #765578), so disable the
+former.
+
+From 0aa1dfd580cf9ad7b812c307b128decb782b825f Mon Sep 17 00:00:00 2001
+From: Jan Nieuwenhuizen <janneke@gnu.org>
+Date: Mon, 2 Mar 2020 18:59:04 +0100
+Subject: [PATCH 2/2] Use realtime clock for the monotonic clock.
+
+---
+ sysdeps/mach/clock_gettime.c       | 2 +-
+ sysdeps/mach/hurd/bits/posix_opt.h | 6 +++---
+ sysdeps/posix/clock_getres.c       | 1 +
+ sysdeps/pthread/timer_create.c     | 2 +-
+ 4 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c
+index ac3547df3c..af8681ba4e 100644
+--- a/sysdeps/mach/clock_gettime.c
++++ b/sysdeps/mach/clock_gettime.c
+@@ -25,7 +25,7 @@
+ int
+ __clock_gettime (clockid_t clock_id, struct timespec *ts)
+ {
+-  if (clock_id != CLOCK_REALTIME)
++  if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_REALTIME)
+     {
+       errno = EINVAL;
+       return -1;
+diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
+index 0050151332..27b3a28ab7 100644
+--- a/sysdeps/mach/hurd/bits/posix_opt.h
++++ b/sysdeps/mach/hurd/bits/posix_opt.h
+@@ -163,10 +163,10 @@
+ #define _POSIX_THREAD_PROCESS_SHARED	-1
+ 
+ /* The monotonic clock might be available.  */
+-#define _POSIX_MONOTONIC_CLOCK	0
++#define _POSIX_MONOTONIC_CLOCK	200809L
+ 
+-/* The clock selection interfaces are available.  */
+-#define _POSIX_CLOCK_SELECTION	200809L
++/* The clock selection interfaces are not really available yet.  */
++#define _POSIX_CLOCK_SELECTION	-1
+ 
+ /* Advisory information interfaces could be available in future.  */
+ #define _POSIX_ADVISORY_INFO	0
+diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c
+index fcd79fd554..1dd02aa449 100644
+--- a/sysdeps/posix/clock_getres.c
++++ b/sysdeps/posix/clock_getres.c
+@@ -52,6 +52,7 @@ __clock_getres (clockid_t clock_id, struct timespec *res)
+   switch (clock_id)
+     {
+     case CLOCK_REALTIME:
++    case CLOCK_MONOTONIC:
+       retval = realtime_getres (res);
+       break;
+ 
+diff --git a/sysdeps/pthread/timer_create.c b/sysdeps/pthread/timer_create.c
+index 9d8a9ea8ae..3430582c09 100644
+--- a/sysdeps/pthread/timer_create.c
++++ b/sysdeps/pthread/timer_create.c
+@@ -48,7 +48,7 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
+       return -1;
+     }
+ 
+-  if (clock_id != CLOCK_REALTIME)
++  if (clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC)
+     {
+       __set_errno (EINVAL);
+       return -1;
+-- 
+2.24.0
+
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
index db6457e939..9c0fac3ff5 100644
--- a/gnu/packages/patches/glibc-bootstrap-system.patch
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -3,17 +3,10 @@ and popen(3) need to be tweaked to use the right shell.  For the bootstrap
 glibc, we just use whatever `sh' can be found in $PATH.  The final glibc
 instead uses the hard-coded absolute file name of `bash'.
 
---- a/sysdeps/posix/system.c
-+++ b/sysdeps/posix/system.c
-@@ -140,7 +140,7 @@ do_system (const char *line)
-   __posix_spawnattr_setflags (&spawn_attr,
- 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
- 
--  status = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
-+  status = __posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
- 			  (char *const[]){ (char*) SHELL_NAME,
- 					   (char*) "-c",
- 					   (char *) line, NULL },
+In addition, status should be initialized to 0 and not -1.
+
+diff --git a/libio/iopopen.c b/libio/iopopen.c
+index ebc381ed7c..e0d3ed1bc3 100644
 --- a/libio/iopopen.c
 +++ b/libio/iopopen.c
 @@ -85,7 +85,7 @@ spawn_process (posix_spawn_file_actions_t *fa, FILE *fp, const char *command,
@@ -25,6 +18,28 @@ instead uses the hard-coded absolute file name of `bash'.
  		     (char *const[]){ (char*) "sh", (char*) "-c",
  		     (char *) command, NULL }, __environ) != 0)
      return false;
+diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
+index a03f478fc7..94da6facf3 100644
+--- a/sysdeps/posix/system.c
++++ b/sysdeps/posix/system.c
+@@ -101,7 +101,7 @@ cancel_handler (void *arg)
+ static int
+ do_system (const char *line)
+ {
+-  int status = -1;
++  int status = 0;
+   int ret;
+   pid_t pid;
+   struct sigaction sa;
+@@ -145,7 +145,7 @@ do_system (const char *line)
+   __posix_spawnattr_setflags (&spawn_attr,
+ 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
+ 
+-  ret = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
++  ret = __posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
+ 		       (char *const[]){ (char *) SHELL_NAME,
+ 					(char *) "-c",
+ 					(char *) line, NULL },
 
 --- a/include/spawn.h
 +++ b/include/spawn.h
diff --git a/gnu/packages/patches/glibc-cross-objcopy.patch b/gnu/packages/patches/glibc-cross-objcopy.patch
new file mode 100644
index 0000000000..e4c693aa44
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objcopy.patch
@@ -0,0 +1,159 @@
+Use 'powerpc64le-linux-gnu-objcopy' rather than 'objcopy' when cross-compiling
+to powerpc64le-linux-gnu: <https://issues.guix.gnu.org/49417>.
+
+Patch submitted:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 13a791ffde..5b370c07a2 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+ AC_SUBST(GPROF)
+ 
+diff --git a/configure b/configure
+index fe0eda1cd5..3a08270734 100755
+--- a/configure
++++ b/configure
+@@ -654,7 +654,6 @@ MAKE
+ LD
+ AS
+ GPROF
+-OBJCOPY
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -689,6 +688,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJCOPY
+ OBJDUMP
+ READELF
+ CPP
+@@ -3054,6 +3054,98 @@ else
+   OBJDUMP="$ac_cv_prog_OBJDUMP"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJCOPY"; then
++  ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJCOPY=$ac_cv_prog_OBJCOPY
++if test -n "$OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
++$as_echo "$OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJCOPY"; then
++  ac_ct_OBJCOPY=$OBJCOPY
++  # Extract the first word of "objcopy", so it can be a program name with args.
++set dummy objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJCOPY"; then
++  ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJCOPY="objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
++if test -n "$ac_ct_OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5
++$as_echo "$ac_ct_OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJCOPY" = x; then
++    OBJCOPY="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJCOPY=$ac_ct_OBJCOPY
++  fi
++else
++  OBJCOPY="$ac_cv_prog_OBJCOPY"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4645,8 +4737,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-
+ GPROF=`$CC -print-prog-name=gprof`
+ 
+ 
+diff --git a/configure.ac b/configure.ac
+index 924af12738..2148cd2ec8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,7 @@ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
++AC_CHECK_TOOL(OBJCOPY, objcopy, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-cross-objdump.patch b/gnu/packages/patches/glibc-cross-objdump.patch
new file mode 100644
index 0000000000..1660d915f7
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objdump.patch
@@ -0,0 +1,159 @@
+Arrange so that glibc uses 'TRIPLET-objdump -f' rather than 'objdump -f'
+to determine the 'OUTPUT_FORMAT' value in libc.so when cross-compiling.
+
+Patch submitted upstream:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>.
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index c195c4db56..13a791ffde 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-AC_SUBST(OBJDUMP)
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure b/configure
+index 9619c10991..fe0eda1cd5 100755
+--- a/configure
++++ b/configure
+@@ -655,7 +655,6 @@ LD
+ AS
+ GPROF
+ OBJCOPY
+-OBJDUMP
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -690,6 +689,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJDUMP
+ READELF
+ CPP
+ cross_compiling
+@@ -2962,6 +2962,98 @@ else
+   READELF="$ac_cv_prog_READELF"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJDUMP"; then
++  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJDUMP=$ac_cv_prog_OBJDUMP
++if test -n "$OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
++$as_echo "$OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJDUMP"; then
++  ac_ct_OBJDUMP=$OBJDUMP
++  # Extract the first word of "objdump", so it can be a program name with args.
++set dummy objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJDUMP"; then
++  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJDUMP="objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
++if test -n "$ac_ct_OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
++$as_echo "$ac_ct_OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJDUMP" = x; then
++    OBJDUMP="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJDUMP=$ac_ct_OBJDUMP
++  fi
++else
++  OBJDUMP="$ac_cv_prog_OBJDUMP"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4553,8 +4645,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ 
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure.ac b/configure.ac
+index 34ecbba540..924af12738 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,6 +52,7 @@ fi
+ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
++AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-dl-cache.patch b/gnu/packages/patches/glibc-dl-cache.patch
new file mode 100644
index 0000000000..68c3a94846
--- /dev/null
+++ b/gnu/packages/patches/glibc-dl-cache.patch
@@ -0,0 +1,140 @@
+Read the shared library cache relative to $ORIGIN instead of reading
+from /etc/ld.so.cache.  Also arrange so that this cache takes
+precedence over RUNPATH.
+
+diff --git a/elf/dl-cache.c b/elf/dl-cache.c
+index 93d185e788..e0760a1f40 100644
+--- a/elf/dl-cache.c
++++ b/elf/dl-cache.c
+@@ -171,6 +171,51 @@ _dl_cache_libcmp (const char *p1, const char *p2)
+   return *p1 - *p2;
+ }
+ 
++/* Special value representing the lack of an ld.so cache.  */
++static const char ld_so_cache_lacking[] = "/ld.so cache is lacking";
++
++/* Return the per-application ld.so cache, relative to $ORIGIN, or NULL if
++   that fails for some reason.  Do not return the system-wide LD_SO_CACHE
++   since on a foreign distro it would contain invalid information.  */
++static const char *
++ld_so_cache (void)
++{
++  static const char *loader_cache;
++
++  if (loader_cache == NULL)
++    {
++      static const char store[] = @STORE_DIRECTORY@;
++      const char *origin = _dl_get_origin ();
++
++      /* Check whether ORIGIN is something like "/gnu/store/…-foo/bin".  */
++      if (strncmp (store, origin, strlen (store)) == 0
++	  && origin[sizeof store - 1] == '/')
++	{
++	  char *store_item_end = strchr (origin + sizeof store, '/');
++
++	  if (store_item_end != NULL)
++	    {
++	      static const char suffix[] = "/etc/ld.so.cache";
++	      size_t store_item_len = store_item_end - origin;
++
++	      /* Note: We can't use 'malloc' because it can be interposed.
++		 Likewise, 'strncpy' is not available.  */
++	      char *cache = alloca (strlen (origin) + sizeof suffix);
++
++	      strcpy (cache, origin);
++	      strcpy (cache + store_item_len, suffix);
++
++	      loader_cache = __strdup (cache) ?: ld_so_cache_lacking;
++	    }
++	  else
++	    loader_cache = ld_so_cache_lacking;
++	}
++      else
++	loader_cache = ld_so_cache_lacking;
++    }
++
++  return loader_cache;
++}
+ 
+ /* Look up NAME in ld.so.cache and return the file name stored there, or null
+    if none is found.  The cache is loaded if it was not already.  If loading
+@@ -190,12 +235,15 @@ _dl_load_cache_lookup (const char *name)
+ 
+   /* Print a message if the loading of libs is traced.  */
+   if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
+-    _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE);
++    _dl_debug_printf (" search cache=%s\n", ld_so_cache ());
++
++  if (__glibc_unlikely (ld_so_cache () == ld_so_cache_lacking))
++    return NULL;
+ 
+   if (cache == NULL)
+     {
+       /* Read the contents of the file.  */
+-      void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize,
++      void *file = _dl_sysdep_read_whole_file (ld_so_cache (), &cachesize,
+ 					       PROT_READ);
+ 
+       /* We can handle three different cache file formats here:
+diff --git a/elf/dl-load.c b/elf/dl-load.c
+index f3201e7c14..a69aec3428 100644
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
+@@ -2152,28 +2152,6 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 			loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded,
+ 			LA_SER_LIBPATH, &found_other_class);
+ 
+-      /* Look at the RUNPATH information for this binary.  */
+-      if (fd == -1 && loader != NULL
+-	  && cache_rpath (loader, &loader->l_runpath_dirs,
+-			  DT_RUNPATH, "RUNPATH"))
+-	fd = open_path (name, namelen, mode,
+-			&loader->l_runpath_dirs, &realname, &fb, loader,
+-			LA_SER_RUNPATH, &found_other_class);
+-
+-      if (fd == -1)
+-        {
+-          realname = _dl_sysdep_open_object (name, namelen, &fd);
+-          if (realname != NULL)
+-            {
+-              fd = open_verify (realname, fd,
+-                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
+-                                LA_SER_CONFIG, mode, &found_other_class,
+-                                false);
+-              if (fd == -1)
+-                free (realname);
+-            }
+-        }
+-
+ #ifdef USE_LDCONFIG
+       if (fd == -1
+ 	  && (__glibc_likely ((mode & __RTLD_SECURE) == 0)
+@@ -2232,6 +2210,28 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 	}
+ #endif
+ 
++      /* Look at the RUNPATH information for this binary.  */
++      if (fd == -1 && loader != NULL
++	  && cache_rpath (loader, &loader->l_runpath_dirs,
++			  DT_RUNPATH, "RUNPATH"))
++	fd = open_path (name, namelen, mode,
++			&loader->l_runpath_dirs, &realname, &fb, loader,
++			LA_SER_RUNPATH, &found_other_class);
++
++      if (fd == -1)
++        {
++          realname = _dl_sysdep_open_object (name, namelen, &fd);
++          if (realname != NULL)
++            {
++              fd = open_verify (realname, fd,
++                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
++                                LA_SER_CONFIG, mode, &found_other_class,
++                                false);
++              if (fd == -1)
++                free (realname);
++            }
++        }
++
+       /* Finally, try the default path.  */
+       if (fd == -1
+ 	  && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
diff --git a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
index 1c3fe427f9..e31f99a1ce 100644
--- a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
+++ b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
@@ -24,18 +24,17 @@ Subject: [PATCH 2/2] Use realtime clock for the monotonic clock.
  4 files changed, 6 insertions(+), 5 deletions(-)
 
 diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c
-index ac3547df3c..af8681ba4e 100644
+index 6862fc8c..be1449bf 100644
 --- a/sysdeps/mach/clock_gettime.c
 +++ b/sysdeps/mach/clock_gettime.c
-@@ -25,7 +25,7 @@
- int
- __clock_gettime (clockid_t clock_id, struct timespec *ts)
- {
--  if (clock_id != CLOCK_REALTIME)
-+  if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_REALTIME)
-     {
-       errno = EINVAL;
-       return -1;
+@@ -32,6 +32,7 @@ __clock_gettime (clockid_t clock_id, struct timespec *ts)
+   switch (clock_id) {
+ 
+     case CLOCK_REALTIME:
++    case CLOCK_MONOTONIC:
+       {
+ 	/* __host_get_time can only fail if passed an invalid host_t.
+ 	   __mach_host_self could theoretically fail (producing an
 diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
 index 0050151332..27b3a28ab7 100644
 --- a/sysdeps/mach/hurd/bits/posix_opt.h
diff --git a/gnu/packages/patches/glibc-skip-c++.patch b/gnu/packages/patches/glibc-skip-c++.patch
new file mode 100644
index 0000000000..b2cbe76d3b
--- /dev/null
+++ b/gnu/packages/patches/glibc-skip-c++.patch
@@ -0,0 +1,31 @@
+When building, say, glibc 2.31 using a compiler that's itself linked
+against 2.33, linking fails with:
+
+  gcc -Wl,-rpath-link=/tmp/guix-build-glibc-2.31.drv-0/build:/tmp/guix-build-glibc-2.31.drv-0/build/math:/tmp/guix-build-glibc-2.31.drv-0/build/elf:/tmp/guix-build-glibc-2.31.drv-0/build/dlfcn:/tmp/guix-build-glibc-2.31.drv-0/build/nss:/tmp/guix-build-glibc-2.31.drv-0/build/nis:/tmp/guix-build-glibc-2.31.drv-0/build/rt:/tmp/guix-build-glibc-2.31.drv-0/build/resolv:/tmp/guix-build-glibc-2.31.drv-0/build/mathvec:/tmp/guix-build-glibc-2.31.drv-0/build/support:/tmp/guix-build-glibc-2.31.drv-0/build/crypt:/tmp/guix-build-glibc-2.31.drv-0/build/nptl -nostdlib -nostartfiles -o /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program    -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /tmp/guix-build-glibc-2.31.drv-0/build/csu/crt1.o /tmp/guix-build-glibc-2.31.drv-0/build/csu/crti.o `gcc  --print-file-name=crtbegin.o` /tmp/guix-build-glibc-2.31.drv-0/build/support/links-dso-program.o -lstdc++ -lgcc -lgcc_s  -Wl,-dynamic-linker=/gnu/store/...-glibc-2.31/lib/ld-linux-x86-64.so.2  /tmp/guix-build-glibc-2.31.drv-0/build/libc.so.6 /tmp/guix-build-glibc-2.31.drv-0/build/libc_nonshared.a -Wl,--as-needed /tmp/guix-build-glibc-2.31.drv-0/build/elf/ld.so -Wl,--no-as-needed -lgcc  `gcc  --print-file-name=crtend.o` /tmp/guix-build-glibc-2.31.drv-0/build/csu/crtn.o
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `fstat64@GLIBC_2.33'
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `lstat@GLIBC_2.33'
+  ld: /gnu/store/...-gcc-10.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../libstdc++.so: undefined reference to `stat@GLIBC_2.33'
+  collect2: error: ld returned 1 exit status
+
+This is unsurprising given that libstdc++.so here is linked against 2.33,
+whereas libc.so.6 here is 2.31.
+
+This patch works around it by not building the offending program.
+
+diff --git a/support/Makefile b/support/Makefile
+index bb9889ef..6614943b 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -210,12 +210,7 @@ CFLAGS-support_paths.c = \
+ # -fexcess-precision=standard.
+ CFLAGS-timespec.c += -fexcess-precision=standard
+ 
+-ifeq (,$(CXX))
+ LINKS_DSO_PROGRAM = links-dso-program-c
+-else
+-LINKS_DSO_PROGRAM = links-dso-program
+-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
+-endif
+ 
+ ifeq (yes,$(have-selinux))
+ LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
diff --git a/gnu/packages/patches/glibc-static-nss.patch b/gnu/packages/patches/glibc-static-nss.patch
new file mode 100644
index 0000000000..1a9db616cc
--- /dev/null
+++ b/gnu/packages/patches/glibc-static-nss.patch
@@ -0,0 +1,1244 @@
+This patch reinstates support for static NSS, which glibc 2.33 broke:
+
+  https://sourceware.org/bugzilla/show_bug.cgi?id=27959
+
+Patch obtained by running:
+
+  git diff f0c28504a9877be5da3ed1215f2da2d5914bbb0b..f9c8b11ed7726b858cd7b7cea0d3d7c5233d78cf
+  git diff 5e1ce61e3e71fb7ffe53f58fe96e67cb15f94854{^,}
+  git diff 135425a1dd50cbe2b9db0628d6c2b36c7889f30b{^,}
+
+It corresponds to these changes:
+
+  f9c8b11ed7 * nss: Access nss_files through direct references
+  6212bb67f4 * nss_files: Move into libc
+  36861a968a * nss_files: Add generic code for set*ent, end*ent and file open
+  f0c28504a9 * nss_files: Allocate nscd file registration data on the heap
+  5e1ce61e3e * nss: Fix NSS_DECLARE_MODULE_FUNCTIONS handling of _nss_*_endnetgrent
+  135425a1dd * nss: Fix build error with --disable-nscd
+
+... plus a manual fix in 'files-network.c' to address this compilation error:
+
+  nss_files/files-network.c: In function ‘_nss_files_parse_netent’:
+  nss_files/files-network.c:72:20: error: implicit declaration of function ‘__inet_network’; did you mean ‘inet_network’? [-Werror=implicit-function-declaration]
+     72 |    result->n_net = __inet_network (addr);
+	|                    ^~~~~~~~~~~~~~
+  nss_files/files-parse.c:106:3: note: in definition of macro ‘LINE_PARSER’
+    106 |   BODY;               \
+	|   ^~~~
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+index 127ea656c2..d41ecf4384 100644
+--- a/include/libc-symbols.h
++++ b/include/libc-symbols.h
+@@ -798,29 +798,6 @@ for linking")
+ # define libdl_hidden_data_ver(local, name)
+ #endif
+ 
+-#if IS_IN (libnss_files)
+-# define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+-# define libnss_files_hidden_tls_proto(name, attrs...) \
+-  hidden_tls_proto (name, ##attrs)
+-# define libnss_files_hidden_def(name) hidden_def (name)
+-# define libnss_files_hidden_weak(name) hidden_weak (name)
+-# define libnss_files_hidden_ver(local, name) hidden_ver (local, name)
+-# define libnss_files_hidden_data_def(name) hidden_data_def (name)
+-# define libnss_files_hidden_tls_def(name) hidden_tls_def (name)
+-# define libnss_files_hidden_data_weak(name) hidden_data_weak (name)
+-# define libnss_files_hidden_data_ver(local, name) hidden_data_ver(local, name)
+-#else
+-# define libnss_files_hidden_proto(name, attrs...)
+-# define libnss_files_hidden_tls_proto(name, attrs...)
+-# define libnss_files_hidden_def(name)
+-# define libnss_files_hidden_weak(name)
+-# define libnss_files_hidden_ver(local, name)
+-# define libnss_files_hidden_data_def(name)
+-# define libnss_files_hidden_tls_def(name)
+-# define libnss_files_hidden_data_weak(name)
+-# define libnss_files_hidden_data_ver(local, name)
+-#endif
+-
+ #if IS_IN (libnsl)
+ # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+ # define libnsl_hidden_tls_proto(name, attrs...) \
+diff --git a/include/netdb.h b/include/netdb.h
+index 82e102ff76..4dcdbb8cd4 100644
+--- a/include/netdb.h
++++ b/include/netdb.h
+@@ -217,7 +217,7 @@ extern enum nss_status _nss_netgroup_parseline (char **cursor,
+ 						struct __netgrent *result,
+ 						char *buffer, size_t buflen,
+ 						int *errnop);
+-libnss_files_hidden_proto (_nss_netgroup_parseline)
++libc_hidden_proto (_nss_netgroup_parseline)
+ 
+ #define DECLARE_NSS_PROTOTYPES(service)					      \
+ extern enum nss_status _nss_ ## service ## _setprotoent (int);		      \
+diff --git a/include/nss_files.h b/include/nss_files.h
+index 6a0dcdb85b..6190cac6be 100644
+--- a/include/nss_files.h
++++ b/include/nss_files.h
+@@ -19,7 +19,11 @@
+ #ifndef _NSS_FILES_H
+ #define _NSS_FILES_H
+ 
++#include <nss.h>
+ #include <stdio.h>
++#if IS_IN (libc)
++#include <libc-lock.h>
++#endif
+ 
+ /* Open PATH for reading, as a data source for nss_files.  */
+ FILE *__nss_files_fopen (const char *path);
+@@ -47,6 +51,63 @@ int __nss_readline_seek (FILE *fp, off64_t offset) attribute_hidden;
+ int __nss_parse_line_result (FILE *fp, off64_t offset, int parse_line_result);
+ libc_hidden_proto (__nss_parse_line_result)
+ 
++/* Per-file data.  Used by the *ent functions that need to preserve
++   state across calls.  */
++struct nss_files_per_file_data
++{
++  FILE *stream;
++#if IS_IN (libc)
++  /* The size of locks changes between libc and nss_files, so this
++     member must be last and is only available in libc.  */
++  __libc_lock_define (, lock);
++#endif
++};
++
++/* File index for __nss_files_data_get.  */
++enum nss_files_file
++  {
++    nss_file_aliasent,
++    nss_file_etherent,
++    nss_file_grent,
++    nss_file_hostent,
++    nss_file_netent,
++    nss_file_protoent,
++    nss_file_pwent,
++    nss_file_rpcent,
++    nss_file_servent,
++    nss_file_sgent,
++    nss_file_spent,
++
++    nss_file_count
++  };
++
++/* Obtains a pointer to the per-file data for FILE, which is written
++   to *PDATA, and tries to open the file at PATH for it.  On success,
++   returns NSS_STATUS_SUCCESS, and the caller must later call
++   __nss_files_data_put.  On failure, NSS_STATUS_TRYAGAIN is returned,
++   and *ERRNOP and *HERRNOP are updated if these pointers are not
++   null.  */
++enum nss_status __nss_files_data_open (struct nss_files_per_file_data **pdata,
++                                       enum nss_files_file file,
++                                       const char *path,
++                                       int *errnop, int *herrnop);
++libc_hidden_proto (__nss_files_data_open)
++
++/* Unlock the per-file data, previously obtained by
++   __nss_files_data_open.  */
++void __nss_files_data_put (struct nss_files_per_file_data *data);
++libc_hidden_proto (__nss_files_data_put)
++
++/* Performs the set*ent operation for FILE.  PATH is the file to
++   open.  */
++enum nss_status __nss_files_data_setent (enum nss_files_file file,
++                                           const char *path);
++libc_hidden_proto (__nss_files_data_setent)
++
++/* Performs the end*ent operation for FILE.  */
++enum nss_status __nss_files_data_endent (enum nss_files_file file);
++libc_hidden_proto (__nss_files_data_endent)
++
+ struct parser_data;
+ 
+ /* Instances of the parse_line function from
+@@ -64,16 +125,25 @@ extern nss_files_parse_line _nss_files_parse_servent;
+ extern nss_files_parse_line _nss_files_parse_sgent;
+ extern nss_files_parse_line _nss_files_parse_spent;
+ 
+-libnss_files_hidden_proto (_nss_files_parse_etherent)
++libc_hidden_proto (_nss_files_parse_etherent)
+ libc_hidden_proto (_nss_files_parse_grent)
+-libnss_files_hidden_proto (_nss_files_parse_netent)
+-libnss_files_hidden_proto (_nss_files_parse_protoent)
++libc_hidden_proto (_nss_files_parse_netent)
++libc_hidden_proto (_nss_files_parse_protoent)
+ libc_hidden_proto (_nss_files_parse_pwent)
+-libnss_files_hidden_proto (_nss_files_parse_rpcent)
+-libnss_files_hidden_proto (_nss_files_parse_servent)
++libc_hidden_proto (_nss_files_parse_rpcent)
++libc_hidden_proto (_nss_files_parse_servent)
+ libc_hidden_proto (_nss_files_parse_sgent)
+ libc_hidden_proto (_nss_files_parse_spent)
+ 
++NSS_DECLARE_MODULE_FUNCTIONS (files)
++#undef DEFINE_NSS_FUNCTION
++#define DEFINE_NSS_FUNCTION(x) libc_hidden_proto (_nss_files_##x)
++#include <nss/function.def>
++#undef DEFINE_NSS_FUNCTION
++
++void _nss_files_init (void (*cb) (size_t, struct traced_file *));
++libc_hidden_proto (_nss_files_init)
++
+ /* Generic implementation of fget*ent_r.  Reads lines from FP until
+    EOF or a successful parse into *RESULT using PARSER.  Returns 0 on
+    success, ENOENT on EOF, ERANGE on too-small buffer.  */
+diff --git a/nss/Makefile b/nss/Makefile
+index 9682a31e20..63a386af18 100644
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -31,7 +31,8 @@ routines		= nsswitch getnssent getnssent_r digits_dots \
+ 			  compat-lookup nss_hash nss_files_fopen \
+ 			  nss_readline nss_parse_line_result \
+ 			  nss_fgetent_r nss_module nss_action \
+-			  nss_action_parse nss_database
++			  nss_action_parse nss_database nss_files_data \
++			  nss_files_functions
+ 
+ # These are the databases that go through nss dispatch.
+ # Caution: if you add a database here, you must add its real name
+@@ -98,9 +99,11 @@ subdir-dirs = $(services:%=nss_%)
+ vpath %.c $(subdir-dirs) ../locale/programs ../intl
+ 
+ 
+-libnss_files-routines	:= $(addprefix files-, \
+-			     $(filter-out key, $(databases))) \
+-			   files-initgroups files-init
++routines += \
++  $(addprefix files-, $(filter-out key, $(databases))) \
++  files-init \
++  files-initgroups \
++  # routines
+ 
+ libnss_db-dbs		:= $(addprefix db-,\
+ 				       $(filter-out hosts network key alias,\
+@@ -116,12 +119,9 @@ libnss_compat-routines	:= $(addprefix compat-,grp pwd spwd initgroups) \
+ install-others		+= $(inst_vardbdir)/Makefile
+ 
+ # Build static module into libc if requested
+-libnss_files-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ libnss_db-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ libnss_compat-inhibit-o	= $(filter-out .os,$(object-suffixes))
+ ifeq ($(build-static-nss),yes)
+-routines                += $(libnss_files-routines)
+-static-only-routines    += $(libnss_files-routines)
+ tests-static		+= tst-nss-static
+ endif
+ extra-test-objs		+= nss_test1.os nss_test2.os
+@@ -138,8 +138,6 @@ libnss-libc = $(common-objpfx)linkobj/libc.so
+ # for new links:
+ $(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc)
+ 
+-$(objpfx)libnss_db.so: $(objpfx)libnss_files.so
+-
+ $(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
+ 	@rm -f $@.new
+ 	(echo '#define EXTERN_PARSER';\
+diff --git a/nss/Versions b/nss/Versions
+index fdddea104c..e551524aa9 100644
+--- a/nss/Versions
++++ b/nss/Versions
+@@ -19,11 +19,12 @@ libc {
+     __nss_services_lookup2; __nss_next2; __nss_lookup;
+     __nss_hash; __nss_database_get;
+     __nss_files_fopen; __nss_readline; __nss_parse_line_result;
+-  }
+-}
++    __nss_files_data_endent;
++    __nss_files_data_open;
++    __nss_files_data_put;
++    __nss_files_data_setent;
+ 
+-libnss_files {
+-  GLIBC_PRIVATE {
++    # Routines formerly in libnss_files.so.2.
+     _nss_files_setaliasent;
+     _nss_files_endaliasent;
+     _nss_files_getaliasbyname_r;
+@@ -109,6 +110,14 @@ libnss_files {
+   }
+ }
+ 
++libnss_files {
++  GLIBC_PRIVATE {
++    # Keep a version node (with a synthesized local: * directive) so that
++    # __bss_* symbols are hidden on targets that need it.
++    __libnss_files_version_placeholder;
++  }
++}
++
+ libnss_db {
+   GLIBC_PRIVATE {
+     _nss_db_setetherent;
+diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
+index b4b989d9bb..c158a891bd 100644
+--- a/nss/nss_files/files-XXX.c
++++ b/nss/nss_files/files-XXX.c
+@@ -45,10 +45,12 @@
+ # include <netdb.h>
+ # define H_ERRNO_PROTO	, int *herrnop
+ # define H_ERRNO_ARG	, herrnop
++# define H_ERRNO_ARG_OR_NULL herrnop
+ # define H_ERRNO_SET(val) (*herrnop = (val))
+ #else
+ # define H_ERRNO_PROTO
+ # define H_ERRNO_ARG
++# define H_ERRNO_ARG_OR_NULL NULL
+ # define H_ERRNO_SET(val) ((void) 0)
+ #endif
+ 
+@@ -58,15 +60,11 @@
+ # define EXTRA_ARGS_VALUE
+ #endif
+ 
+-/* Locks the static variables in this file.  */
+-__libc_lock_define_initialized (static, lock)
+ 
+ /* Maintenance of the stream open on the database file.  For getXXent
+    operations the stream needs to be held open across calls, the other
+    getXXbyYY operations all use their own stream.  */
+ 
+-static FILE *stream;
+-
+ /* Open database file if not already opened.  */
+ static enum nss_status
+ internal_setent (FILE **stream)
+@@ -91,42 +89,16 @@ internal_setent (FILE **stream)
+ enum nss_status
+ CONCAT(_nss_files_set,ENTNAME) (int stayopen)
+ {
+-  enum nss_status status;
+-
+-  __libc_lock_lock (lock);
+-
+-  status = internal_setent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return status;
++  return __nss_files_data_setent (CONCAT (nss_file_, ENTNAME), DATAFILE);
+ }
++libc_hidden_def (CONCAT (_nss_files_set,ENTNAME))
+ 
+-
+-/* Close the database file.  */
+-static void
+-internal_endent (FILE **stream)
+-{
+-  if (*stream != NULL)
+-    {
+-      fclose (*stream);
+-      *stream = NULL;
+-    }
+-}
+-
+-
+-/* Thread-safe, exported version of that.  */
+ enum nss_status
+ CONCAT(_nss_files_end,ENTNAME) (void)
+ {
+-  __libc_lock_lock (lock);
+-
+-  internal_endent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return NSS_STATUS_SUCCESS;
++  return __nss_files_data_endent (CONCAT (nss_file_, ENTNAME));
+ }
++libc_hidden_def (CONCAT (_nss_files_end,ENTNAME))
+ 
+ 
+ /* Parsing the database file into `struct STRUCTURE' data structures.  */
+@@ -194,28 +166,22 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
+ 				  size_t buflen, int *errnop H_ERRNO_PROTO)
+ {
+   /* Return next entry in host file.  */
+-  enum nss_status status = NSS_STATUS_SUCCESS;
+-
+-  __libc_lock_lock (lock);
+ 
+-  /* Be prepared that the set*ent function was not called before.  */
+-  if (stream == NULL)
+-    {
+-      int save_errno = errno;
+-
+-      status = internal_setent (&stream);
+-
+-      __set_errno (save_errno);
+-    }
+-
+-  if (status == NSS_STATUS_SUCCESS)
+-    status = internal_getent (stream, result, buffer, buflen, errnop
+-			      H_ERRNO_ARG EXTRA_ARGS_VALUE);
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_open (&data,
++						  CONCAT (nss_file_, ENTNAME),
++						  DATAFILE,
++						  errnop, H_ERRNO_ARG_OR_NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
+ 
+-  __libc_lock_unlock (lock);
++  status = internal_getent (data->stream, result, buffer, buflen, errnop
++			    H_ERRNO_ARG EXTRA_ARGS_VALUE);
+ 
++  __nss_files_data_put (data);
+   return status;
+ }
++libc_hidden_def (CONCAT (_nss_files_get,ENTNAME_r))
+ 
+ /* Macro for defining lookup functions for this file-based database.
+ 
+@@ -248,8 +214,9 @@ _nss_files_get##name##_r (proto,					      \
+ 	     == NSS_STATUS_SUCCESS)					      \
+ 	{ break_if_match }						      \
+ 									      \
+-      internal_endent (&stream);					      \
++      fclose (stream);							      \
+     }									      \
+ 									      \
+   return status;							      \
+-}
++}									      \
++libc_hidden_def (_nss_files_get##name##_r)
+diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
+index 30971bfe56..8c6e176ff6 100644
+--- a/nss/nss_files/files-alias.c
++++ b/nss/nss_files/files-alias.c
+@@ -31,18 +31,11 @@
+ #include "nsswitch.h"
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+-/* Locks the static variables in this file.  */
+-__libc_lock_define_initialized (static, lock)
+ 
+ /* Maintenance of the stream open on the database file.  For getXXent
+    operations the stream needs to be held open across calls, the other
+    getXXbyYY operations all use their own stream.  */
+ 
+-static FILE *stream;
+-
+-
+ static enum nss_status
+ internal_setent (FILE **stream)
+ {
+@@ -66,42 +59,16 @@ internal_setent (FILE **stream)
+ enum nss_status
+ _nss_files_setaliasent (void)
+ {
+-  enum nss_status status;
+-
+-  __libc_lock_lock (lock);
+-
+-  status = internal_setent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return status;
++  return __nss_files_data_setent (nss_file_aliasent, "/etc/aliases");
+ }
++libc_hidden_def (_nss_files_setaliasent)
+ 
+-
+-/* Close the database file.  */
+-static void
+-internal_endent (FILE **stream)
+-{
+-  if (*stream != NULL)
+-    {
+-      fclose (*stream);
+-      *stream = NULL;
+-    }
+-}
+-
+-
+-/* Thread-safe, exported version of that.  */
+ enum nss_status
+ _nss_files_endaliasent (void)
+ {
+-  __libc_lock_lock (lock);
+-
+-  internal_endent (&stream);
+-
+-  __libc_lock_unlock (lock);
+-
+-  return NSS_STATUS_SUCCESS;
++  return __nss_files_data_endent (nss_file_aliasent);
+ }
++libc_hidden_def (_nss_files_endaliasent)
+ 
+ /* Parsing the database file into `struct aliasent' data structures.  */
+ static enum nss_status
+@@ -131,7 +98,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+       /* Read the first line.  It must contain the alias name and
+ 	 possibly some alias names.  */
+       first_unused[room_left - 1] = '\xff';
+-      line = fgets_unlocked (first_unused, room_left, stream);
++      line = __fgets_unlocked (first_unused, room_left, stream);
+       if (line == NULL)
+ 	/* Nothing to read.  */
+ 	break;
+@@ -220,7 +187,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 		      /* If the file does not exist we simply ignore
+ 			 the statement.  */
+ 		      if (listfile != NULL
+-			  && (old_line = strdup (line)) != NULL)
++			  && (old_line = __strdup (line)) != NULL)
+ 			{
+ 			  while (! feof_unlocked (listfile))
+ 			    {
+@@ -232,8 +199,8 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 				}
+ 
+ 			      first_unused[room_left - 1] = '\xff';
+-			      line = fgets_unlocked (first_unused, room_left,
+-						     listfile);
++			      line = __fgets_unlocked (first_unused, room_left,
++						       listfile);
+ 			      if (line == NULL)
+ 				break;
+ 			      if (first_unused[room_left - 1] != '\xff')
+@@ -335,7 +302,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 		  /* The just read character is a white space and so
+ 		     can be ignored.  */
+ 		  first_unused[room_left - 1] = '\xff';
+-		  line = fgets_unlocked (first_unused, room_left, stream);
++		  line = __fgets_unlocked (first_unused, room_left, stream);
+ 		  if (line == NULL)
+ 		    {
+ 		      /* Continuation line without any data and
+@@ -369,29 +336,25 @@ _nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen,
+ 			  int *errnop)
+ {
+   /* Return next entry in host file.  */
+-  enum nss_status status = NSS_STATUS_SUCCESS;
+ 
+-  __libc_lock_lock (lock);
+-
+-  /* Be prepared that the set*ent function was not called before.  */
+-  if (stream == NULL)
+-    status = internal_setent (&stream);
+-
+-  if (status == NSS_STATUS_SUCCESS)
+-    {
+-      result->alias_local = 1;
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_open (&data, nss_file_aliasent,
++						  "/etc/aliases", errnop, NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
+ 
+-      /* Read lines until we get a definite result.  */
+-      do
+-	status = get_next_alias (stream, NULL, result, buffer, buflen, errnop);
+-      while (status == NSS_STATUS_RETURN);
+-    }
++  result->alias_local = 1;
+ 
+-  __libc_lock_unlock (lock);
++  /* Read lines until we get a definite result.  */
++  do
++    status = get_next_alias (data->stream, NULL, result, buffer, buflen,
++			     errnop);
++  while (status == NSS_STATUS_RETURN);
+ 
++  __nss_files_data_put (data);
+   return status;
+ }
+-
++libc_hidden_def (_nss_files_getaliasent_r)
+ 
+ enum nss_status
+ _nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
+@@ -418,9 +381,10 @@ _nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
+       do
+ 	status = get_next_alias (stream, name, result, buffer, buflen, errnop);
+       while (status == NSS_STATUS_RETURN);
+-    }
+ 
+-  internal_endent (&stream);
++      fclose (stream);
++    }
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_getaliasbyname_r)
+diff --git a/nss/nss_files/files-ethers.c b/nss/nss_files/files-ethers.c
+index 2fe7f81e4b..7c2c2b9833 100644
+--- a/nss/nss_files/files-ethers.c
++++ b/nss/nss_files/files-ethers.c
+@@ -20,8 +20,6 @@
+ #include <netinet/if_ether.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ struct etherent_data {};
+ 
+ #define ENTNAME		etherent
+diff --git a/nss/nss_files/files-grp.c b/nss/nss_files/files-grp.c
+index 49be38e8b1..a716d948e2 100644
+--- a/nss/nss_files/files-grp.c
++++ b/nss/nss_files/files-grp.c
+@@ -19,8 +19,6 @@
+ #include <grp.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	group
+ #define ENTNAME		grent
+ #define DATABASE	"group"
+diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c
+index 2b47ec3e53..d54d91d038 100644
+--- a/nss/nss_files/files-hosts.c
++++ b/nss/nss_files/files-hosts.c
+@@ -26,8 +26,6 @@
+ #include <alloc_buffer.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ /* Get implementation for some internal functions.  */
+ #include "../resolv/res_hconf.h"
+ 
+@@ -57,12 +55,13 @@ LINE_PARSER
+    STRING_FIELD (addr, isspace, 1);
+ 
+    /* Parse address.  */
+-   if (inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr)
++   if (__inet_pton (af == AF_UNSPEC ? AF_INET : af, addr, entdata->host_addr)
+        > 0)
+      af = af == AF_UNSPEC ? AF_INET : af;
+    else
+      {
+-       if (af == AF_INET && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
++       if (af == AF_INET
++	   && __inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ 	 {
+ 	   if (IN6_IS_ADDR_V4MAPPED (entdata->host_addr))
+ 	     memcpy (entdata->host_addr, entdata->host_addr + 12, INADDRSZ);
+@@ -76,7 +75,7 @@ LINE_PARSER
+ 	     return 0;
+ 	 }
+        else if (af == AF_UNSPEC
+-		&& inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
++		&& __inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ 	 af = AF_INET6;
+        else
+ 	 /* Illegal address: ignore line.  */
+@@ -349,7 +348,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result,
+ 	status = gethostbyname3_multi
+ 	  (stream, name, af, result, buffer, buflen, errnop, herrnop);
+ 
+-      internal_endent (&stream);
++      fclose (stream);
+     }
+ 
+   if (canonp && status == NSS_STATUS_SUCCESS)
+@@ -357,6 +356,7 @@ _nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_gethostbyname3_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname_r (const char *name, struct hostent *result,
+@@ -366,6 +366,7 @@ _nss_files_gethostbyname_r (const char *name, struct hostent *result,
+   return _nss_files_gethostbyname3_r (name, AF_INET, result, buffer, buflen,
+ 				      errnop, herrnop, NULL, NULL);
+ }
++libc_hidden_def (_nss_files_gethostbyname_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result,
+@@ -375,6 +376,7 @@ _nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result,
+   return _nss_files_gethostbyname3_r (name, af, result, buffer, buflen,
+ 				      errnop, herrnop, NULL, NULL);
+ }
++libc_hidden_def (_nss_files_gethostbyname2_r)
+ 
+ enum nss_status
+ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+@@ -475,7 +477,7 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+ 	  status = NSS_STATUS_SUCCESS;
+ 	}
+ 
+-      internal_endent (&stream);
++      fclose (stream);
+     }
+   else if (status == NSS_STATUS_TRYAGAIN)
+     {
+@@ -490,3 +492,4 @@ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_gethostbyname4_r)
+diff --git a/nss/nss_files/files-init.c b/nss/nss_files/files-init.c
+index 717c9fd334..18ed288d04 100644
+--- a/nss/nss_files/files-init.c
++++ b/nss/nss_files/files-init.c
+@@ -21,8 +21,7 @@
+ #include <string.h>
+ #include <nscd/nscd.h>
+ #include <nss.h>
+-
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
++#include <nss_files.h>
+ 
+ static void
+ register_file (void (*cb) (size_t, struct traced_file *),
+@@ -49,5 +48,6 @@ _nss_files_init (void (*cb) (size_t, struct traced_file *))
+   register_file (cb, servdb, "/etc/services", 0);
+   register_file (cb, netgrdb, "/etc/netgroup", 0);
+ }
++libc_hidden_def (_nss_files_init)
+ 
+ #endif
+diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c
+index 6fcea40b55..b44211e50b 100644
+--- a/nss/nss_files/files-initgroups.c
++++ b/nss/nss_files/files-initgroups.c
+@@ -28,8 +28,6 @@
+ #include <nss.h>
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ enum nss_status
+ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 			   long int *size, gid_t **groupsp, long int limit,
+@@ -129,3 +127,4 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 
+   return status == NSS_STATUS_SUCCESS && !any ? NSS_STATUS_NOTFOUND : status;
+ }
++libc_hidden_def (_nss_files_initgroups_dyn)
+diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c
+index f8c821c2f0..75bfbd9e44 100644
+--- a/nss/nss_files/files-netgrp.c
++++ b/nss/nss_files/files-netgrp.c
+@@ -28,11 +28,9 @@
+ #include "netgroup.h"
+ #include <nss_files.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define DATAFILE	"/etc/netgroup"
+ 
+-libnss_files_hidden_proto (_nss_files_endnetgrent)
++libc_hidden_proto (_nss_files_endnetgrent)
+ 
+ #define EXPAND(needed)							      \
+   do									      \
+@@ -152,7 +150,7 @@ _nss_files_setnetgrent (const char *group, struct __netgrent *result)
+ 
+   return status;
+ }
+-
++libc_hidden_def (_nss_files_setnetgrent)
+ 
+ enum nss_status
+ _nss_files_endnetgrent (struct __netgrent *result)
+@@ -164,7 +162,7 @@ _nss_files_endnetgrent (struct __netgrent *result)
+   result->cursor = NULL;
+   return NSS_STATUS_SUCCESS;
+ }
+-libnss_files_hidden_def (_nss_files_endnetgrent)
++libc_hidden_def (_nss_files_endnetgrent)
+ 
+ static char *
+ strip_whitespace (char *str)
+@@ -279,7 +277,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
+ 
+   return status;
+ }
+-libnss_files_hidden_def (_nss_netgroup_parseline)
++libc_hidden_def (_nss_netgroup_parseline)
+ 
+ 
+ enum nss_status
+@@ -293,3 +291,4 @@ _nss_files_getnetgrent_r (struct __netgrent *result, char *buffer,
+ 
+   return status;
+ }
++libc_hidden_def (_nss_files_getnetgrent_r)
+diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c
+index 9cd7d7dc79..217ed78609 100644
+--- a/nss/nss_files/files-network.c
++++ b/nss/nss_files/files-network.c
+@@ -22,8 +22,6 @@
+ #include <stdint.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		netent
+ #define DATABASE	"networks"
+ #define NEED_H_ERRNO
+@@ -71,7 +69,7 @@ LINE_PARSER
+        *cp = '\0';
+        addr = newp;
+      }
+-   result->n_net = inet_network (addr);
++   result->n_net = inet_network (addr);
+    result->n_addrtype = AF_INET;
+ 
+  })
+diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
+index 68c51c7cbf..997eac573a 100644
+--- a/nss/nss_files/files-parse.c
++++ b/nss/nss_files/files-parse.c
+@@ -74,13 +74,7 @@ struct parser_data
+ /* Export the line parser function so it can be used in nss_db.  */
+ # define parser_stclass /* Global */
+ # define parse_line CONCAT(_nss_files_parse_,ENTNAME)
+-# if IS_IN (libc)
+-/* We are defining one of the functions that actually lives in libc
+-   because it is used to implement fget*ent and suchlike.  */
+-#  define nss_files_parse_hidden_def(name) libc_hidden_def (name)
+-# else
+-#  define nss_files_parse_hidden_def(name) libnss_files_hidden_def (name)
+-# endif
++# define nss_files_parse_hidden_def(name) libc_hidden_def (name)
+ #endif
+ 
+ 
+diff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c
+index 98d082c642..13072692c1 100644
+--- a/nss/nss_files/files-proto.c
++++ b/nss/nss_files/files-proto.c
+@@ -19,8 +19,6 @@
+ #include <netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		protoent
+ #define DATABASE	"protocols"
+ 
+diff --git a/nss/nss_files/files-pwd.c b/nss/nss_files/files-pwd.c
+index b04165ddde..5c74c6da9b 100644
+--- a/nss/nss_files/files-pwd.c
++++ b/nss/nss_files/files-pwd.c
+@@ -19,8 +19,6 @@
+ #include <pwd.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	passwd
+ #define ENTNAME		pwent
+ #define DATABASE	"passwd"
+diff --git a/nss/nss_files/files-rpc.c b/nss/nss_files/files-rpc.c
+index eeb2725d2c..3dea8f18f2 100644
+--- a/nss/nss_files/files-rpc.c
++++ b/nss/nss_files/files-rpc.c
+@@ -19,8 +19,6 @@
+ #include <rpc/netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		rpcent
+ #define DATABASE	"rpc"
+ 
+diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c
+index f4f0985377..a8d83e094e 100644
+--- a/nss/nss_files/files-service.c
++++ b/nss/nss_files/files-service.c
+@@ -20,8 +20,6 @@
+ #include <netdb.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define ENTNAME		servent
+ #define DATABASE	"services"
+ 
+diff --git a/nss/nss_files/files-sgrp.c b/nss/nss_files/files-sgrp.c
+index 6b1c9eac02..213a408e7b 100644
+--- a/nss/nss_files/files-sgrp.c
++++ b/nss/nss_files/files-sgrp.c
+@@ -19,8 +19,6 @@
+ #include <gshadow.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	sgrp
+ #define ENTNAME		sgent
+ #define DATABASE	"gshadow"
+diff --git a/nss/nss_files/files-spwd.c b/nss/nss_files/files-spwd.c
+index 976deaf918..d031257a20 100644
+--- a/nss/nss_files/files-spwd.c
++++ b/nss/nss_files/files-spwd.c
+@@ -19,8 +19,6 @@
+ #include <shadow.h>
+ #include <nss.h>
+ 
+-NSS_DECLARE_MODULE_FUNCTIONS (files)
+-
+ #define STRUCTURE	spwd
+ #define ENTNAME		spent
+ #define DATABASE	"shadow"
+diff --git a/nss/nss_files_data.c b/nss/nss_files_data.c
+new file mode 100644
+index 0000000000..80fbfe5fff
+--- /dev/null
++++ b/nss/nss_files_data.c
+@@ -0,0 +1,161 @@
++/* Returns a pointer to the global nss_files data structure.
++   Copyright (C) 2021 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <https://www.gnu.org/licenses/>.  */
++
++#include <nss_files.h>
++
++#include <allocate_once.h>
++#include <errno.h>
++#include <netdb.h>
++#include <nss.h>
++#include <stdlib.h>
++
++/* This collects all per file-data.   */
++struct nss_files_data
++{
++  struct nss_files_per_file_data files[nss_file_count];
++};
++
++/* For use with allocate_once.  */
++static void *nss_files_global;
++static void *
++nss_files_global_allocate (void *closure)
++{
++  struct nss_files_data *result = malloc (sizeof (*result));
++  if (result != NULL)
++    {
++      for (int i = 0; i < nss_file_count; ++i)
++        {
++          result->files[i].stream = NULL;
++          __libc_lock_init (result->files[i].lock);
++        }
++    }
++  return result;
++}
++/* Like __nss_files_data_open, but does not perform the open call.  */
++static enum nss_status
++__nss_files_data_get (struct nss_files_per_file_data **pdata,
++                      enum nss_files_file file, int *errnop, int *herrnop)
++{
++  struct nss_files_data *data = allocate_once (&nss_files_global,
++                                               nss_files_global_allocate,
++                                               NULL, NULL);
++  if (data == NULL)
++    {
++      if (errnop != NULL)
++        *errnop = errno;
++      if (herrnop != NULL)
++        {
++          __set_h_errno (NETDB_INTERNAL);
++          *herrnop = NETDB_INTERNAL;
++        }
++      return NSS_STATUS_TRYAGAIN;
++    }
++
++  *pdata = &data->files[file];
++  __libc_lock_lock ((*pdata)->lock);
++  return NSS_STATUS_SUCCESS;
++}
++
++/* Helper function for opening the backing file at PATH.  */
++static enum nss_status
++__nss_files_data_internal_open (struct nss_files_per_file_data *data,
++                                const char *path)
++{
++  enum nss_status status = NSS_STATUS_SUCCESS;
++
++  if (data->stream == NULL)
++    {
++      data->stream = __nss_files_fopen (path);
++
++      if (data->stream == NULL)
++        status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
++    }
++
++  return status;
++}
++
++
++enum nss_status
++__nss_files_data_open (struct nss_files_per_file_data **pdata,
++                       enum nss_files_file file, const char *path,
++                       int *errnop, int *herrnop)
++{
++  enum nss_status status = __nss_files_data_get (pdata, file, errnop, herrnop);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
++
++  /* Be prepared that the set*ent function was not called before.  */
++  if ((*pdata)->stream == NULL)
++    {
++      int saved_errno = errno;
++      status = __nss_files_data_internal_open (*pdata, path);
++      __set_errno (saved_errno);
++      if (status != NSS_STATUS_SUCCESS)
++        __nss_files_data_put (*pdata);
++    }
++
++  return status;
++}
++
++libc_hidden_def (__nss_files_data_open)
++
++void
++__nss_files_data_put (struct nss_files_per_file_data *data)
++{
++  __libc_lock_unlock (data->lock);
++}
++libc_hidden_def (__nss_files_data_put)
++
++enum nss_status
++__nss_files_data_setent (enum nss_files_file file, const char *path)
++{
++  struct nss_files_per_file_data *data;
++  enum nss_status status = __nss_files_data_get (&data, file, NULL, NULL);
++  if (status != NSS_STATUS_SUCCESS)
++    return status;
++
++  if (data->stream == NULL)
++    status = __nss_files_data_internal_open (data, path);
++  else
++    rewind (data->stream);
++
++  __nss_files_data_put (data);
++  return status;
++}
++libc_hidden_def (__nss_files_data_setent)
++
++enum nss_status
++__nss_files_data_endent (enum nss_files_file file)
++{
++  /* No cleanup is necessary if not initialized.  */
++  struct nss_files_data *data = atomic_load_acquire (&nss_files_global);
++  if (data == NULL)
++    return NSS_STATUS_SUCCESS;
++
++  struct nss_files_per_file_data *fdata = &data->files[file];
++  __libc_lock_lock (fdata->lock);
++  if (fdata->stream != NULL)
++    {
++      fclose (fdata->stream);
++      fdata->stream = NULL;
++    }
++  __libc_lock_unlock (fdata->lock);
++
++  return NSS_STATUS_SUCCESS;
++}
++libc_hidden_def (__nss_files_data_endent)
+diff --git a/nss/nss_files_functions.c b/nss/nss_files_functions.c
+new file mode 100644
+index 0000000000..85720b4311
+--- /dev/null
++++ b/nss/nss_files_functions.c
+@@ -0,0 +1,43 @@
++/* Direct access for nss_files functions for NSS module loading.
++   Copyright (C) 2021 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <https://www.gnu.org/licenses/>.  */
++
++#include <nss_module.h>
++#include <nss_files.h>
++
++void
++__nss_files_functions (nss_module_functions_untyped pointers)
++{
++  void **fptr = pointers;
++
++  /* Functions which are not implemented.  */
++#define _nss_files_getcanonname_r NULL
++#define _nss_files_gethostbyaddr2_r NULL
++#define _nss_files_getpublickey NULL
++#define _nss_files_getsecretkey NULL
++#define _nss_files_netname2user NULL
++
++#undef DEFINE_NSS_FUNCTION
++#define DEFINE_NSS_FUNCTION(x) *fptr++ = _nss_files_##x;
++#include "function.def"
++
++#ifdef PTR_MANGLE
++  void **end = fptr;
++  for (fptr = pointers; fptr != end; ++fptr)
++    PTR_MANGLE (*fptr);
++#endif
++}
+diff --git a/nss/nss_module.c b/nss/nss_module.c
+index 60c070c851..7b42c585a4 100644
+--- a/nss/nss_module.c
++++ b/nss/nss_module.c
+@@ -30,6 +30,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <nss_files.h>
+ 
+ /* Suffix after .so of NSS service modules.  This is a bit of magic,
+    but we assume LIBNSS_FILES_SO looks like "libnss_files.so.2" and we
+@@ -110,10 +111,45 @@ static const function_name nss_function_name_array[] =
+ #include "function.def"
+   };
+ 
++static bool
++module_load_nss_files (struct nss_module *module)
++{
++  if (is_nscd)
++    {
++      void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
++#  ifdef PTR_DEMANGLE
++      PTR_DEMANGLE (cb);
++#  endif
++      _nss_files_init (cb);
++    }
++
++  /* Initialize the function pointers, following the double-checked
++     locking idiom.  */
++  __libc_lock_lock (nss_module_list_lock);
++  switch ((enum nss_module_state) atomic_load_acquire (&module->state))
++    {
++    case nss_module_uninitialized:
++    case nss_module_failed:
++      __nss_files_functions (module->functions.untyped);
++      module->handle = NULL;
++      /* Synchronizes with unlocked __nss_module_load atomic_load_acquire.  */
++      atomic_store_release (&module->state, nss_module_loaded);
++      break;
++    case nss_module_loaded:
++      /* Nothing to clean up.  */
++      break;
++    }
++  __libc_lock_unlock (nss_module_list_lock);
++  return true;
++}
++
+ /* Internal implementation of __nss_module_load.  */
+ static bool
+ module_load (struct nss_module *module)
+ {
++  if (strcmp (module->name, "files") == 0)
++    return module_load_nss_files (module);
++
+   void *handle;
+   {
+     char *shlib_name;
+@@ -360,7 +396,7 @@ __nss_module_freeres (void)
+   struct nss_module *current = nss_module_list;
+   while (current != NULL)
+     {
+-      if (current->state == nss_module_loaded)
++      if (current->state == nss_module_loaded && current->handle != NULL)
+         __libc_dlclose (current->handle);
+ 
+       struct nss_module *next = current->next;
+diff --git a/nss/nss_module.h b/nss/nss_module.h
+index 05c4791d11..c1a1d90b60 100644
+--- a/nss/nss_module.h
++++ b/nss/nss_module.h
+@@ -38,6 +38,10 @@ struct nss_module_functions
+ typedef void *nss_module_functions_untyped[sizeof (struct nss_module_functions)
+                                            / sizeof (void *)];
+ 
++/* Locate the nss_files functions, as if by dlopen/dlsym.  */
++void __nss_files_functions (nss_module_functions_untyped pointers)
++  attribute_hidden;
++
+ /* Initialization state of a NSS module.  */
+ enum nss_module_state
+ {
+diff --git a/nss/nss_readline.c b/nss/nss_readline.c
+index 4b3ecbccc8..a2f397a11f 100644
+--- a/nss/nss_readline.c
++++ b/nss/nss_readline.c
+@@ -40,7 +40,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset)
+       *poffset = __ftello64 (fp);
+ 
+       buf[len - 1] = '\xff';        /* Marker to recognize truncation.  */
+-      if (fgets_unlocked (buf, len, fp) == NULL)
++      if (__fgets_unlocked (buf, len, fp) == NULL)
+         {
+           if (feof_unlocked (fp))
+             {
+@@ -61,7 +61,7 @@ __nss_readline (FILE *fp, char *buf, size_t len, off64_t *poffset)
+            line on the next call.  */
+         return __nss_readline_seek (fp, *poffset);
+ 
+-      /* fgets_unlocked succeeded.  */
++      /* __fgets_unlocked succeeded.  */
+ 
+       /* Remove leading whitespace.  */
+       char *p = buf;
+diff --git a/nss/nss.h b/nss/nss.h
+index ae213f9a6c..c6d62adc0f 100644
+--- a/nss/nss.h
++++ b/nss/nss.h
+@@ -196,7 +196,7 @@ typedef enum nss_status nss_setspent (int);
+   extern nss_endgrent _nss_##module##_endgrent;                          \
+   extern nss_endhostent _nss_##module##_endhostent;                      \
+   extern nss_endnetent _nss_##module##_endnetent;                        \
+-  extern nss_endnetgrent _nss_##module##__endnetgrent;                   \
++  extern nss_endnetgrent _nss_##module##_endnetgrent;                    \
+   extern nss_endprotoent _nss_##module##_endprotoent;                    \
+   extern nss_endpwent _nss_##module##_endpwent;                          \
+   extern nss_endrpcent _nss_##module##_endrpcent;                        \
+diff --git a/nss/nss_module.c b/nss/nss_module.c
+index 7b42c585a4..7ea5ad9887 100644
+--- a/nss/nss_module.c
++++ b/nss/nss_module.c
+@@ -114,14 +114,16 @@ static const function_name nss_function_name_array[] =
+ static bool
+ module_load_nss_files (struct nss_module *module)
+ {
++#ifdef USE_NSCD
+   if (is_nscd)
+     {
+       void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
+-#  ifdef PTR_DEMANGLE
++# ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (cb);
+-#  endif
++# endif
+       _nss_files_init (cb);
+     }
++#endif
+ 
+   /* Initialize the function pointers, following the double-checked
+      locking idiom.  */
diff --git a/gnu/packages/patches/gnome-boxes-add-guix-logo.patch b/gnu/packages/patches/gnome-boxes-add-guix-logo.patch
new file mode 100644
index 0000000000..e570675083
--- /dev/null
+++ b/gnu/packages/patches/gnome-boxes-add-guix-logo.patch
@@ -0,0 +1,32 @@
+Taken from upstream commit: 9091c6849652fa083297bc12645d8c57a962874a.
+
+diff --git a/data/osinfo/guix-1.3.xml b/data/osinfo/guix-1.3.xml
+new file mode 100644
+index 00000000..d4e1c167
+--- /dev/null
++++ b/data/osinfo/guix-1.3.xml
+@@ -0,0 +1,9 @@
++<libosinfo version="0.0.1">
++
++  <!-- Please read README.logos for any questions about usage of product logos in Boxes. !-->
++
++  <os id="http://guix.gnu.org/guix/1.3">
++    <logo>https://gitlab.gnome.org/GNOME/gnome-boxes-logos/-/raw/master/logos/guix.svg</logo>
++  </os>
++
++</libosinfo>
+diff --git a/data/osinfo/meson.build b/data/osinfo/meson.build
+index 46ff1570..d5531e60 100644
+--- a/data/osinfo/meson.build
++++ b/data/osinfo/meson.build
+@@ -7,6 +7,7 @@ osinfo_db = [
+   ['freedos-1.2.xml', 'gnome-boxes/osinfo/os/freedos.org'],
+   ['gnome-nightly.xml', 'gnome-boxes/osinfo/os/gnome.org'],
+   ['gnome-3.38.xml', 'gnome-boxes/osinfo/os/gnome.org'],
++  ['guix-1.3.xml', 'gnome-boxes/osinfo/os/guix.gnu.org'],
+   ['manjaro-19.0.xml', 'gnome-boxes/osinfo/os/manjaro.org'],
+   ['nixos-20.03.xml', 'gnome-boxes/osinfo/os/nixos.org'],
+   ['opensuse-10.2.xml', 'gnome-boxes/osinfo/os/opensuse.org'],
+-- 
+2.34.0
+
diff --git a/gnu/packages/patches/gnome-online-miners-tracker-3.patch b/gnu/packages/patches/gnome-online-miners-tracker-3.patch
new file mode 100644
index 0000000000..0f89c56695
--- /dev/null
+++ b/gnu/packages/patches/gnome-online-miners-tracker-3.patch
@@ -0,0 +1,1505 @@
+Apply the following merge requests:
+
+https://gitlab.gnome.org/GNOME/gnome-online-miners/-/merge_requests/3
+https://gitlab.gnome.org/GNOME/gnome-online-miners/-/merge_requests/4
+
+to add tracker 3 support and fix a use after free error.
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 7147b33..4fb4d80 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -221,6 +221,7 @@ gom_miner_check_pending_jobs (GTask *task)
+     return;
+ 
+   g_task_return_boolean (task, TRUE);
++  g_clear_object (&cleanup_job->self);
+   g_slice_free (CleanupJob, cleanup_job);
+ }
+ 
+@@ -461,7 +462,9 @@ miner_job_process_ready_cb (GObject *source,
+   cleanup_job->pending_jobs = g_list_remove (cleanup_job->pending_jobs,
+                                              account_miner_job);
+ 
++  /* This will free the cleanup job data if there are no more pending jobs. */
+   gom_miner_check_pending_jobs (account_miner_job->parent_task);
++
+   gom_account_miner_job_free (account_miner_job);
+ }
+ 
+@@ -520,10 +523,9 @@ cleanup_old_accounts_done (gpointer data)
+       job->old_datasources = NULL;
+     }
+ 
++  /* This will free the task data if there are no more pending jobs */
+   gom_miner_check_pending_jobs (task);
+ 
+-  g_clear_object (&job->self);
+-
+   return FALSE;
+ }
+ 
+@@ -690,6 +692,8 @@ gom_miner_cleanup_old_accounts (GomMiner *self,
+ {
+   CleanupJob *job = g_slice_new0 (CleanupJob);
+ 
++  g_return_if_fail (GOM_IS_MINER (self));
++
+   job->self = g_object_ref (self);
+   job->content_objects = content_objects;
+   job->acc_objects = acc_objects;
+
+diff --git a/src/gom-application.c b/src/gom-application.c
+index fadd388..9e558f5 100644
+--- a/src/gom-application.c
++++ b/src/gom-application.c
+@@ -229,10 +229,16 @@ gom_application_constructed (GObject *object)
+ {
+   GomApplication *self = GOM_APPLICATION (object);
+   const gchar *display_name;
++  GError *error = NULL;
+ 
+   G_OBJECT_CLASS (gom_application_parent_class)->constructed (object);
+ 
+-  self->miner = g_object_new (self->miner_type, NULL);
++  self->miner = g_initable_new (self->miner_type, NULL, &error, NULL);
++
++  if (self->miner == NULL) {
++    g_error (error->message);
++  }
++
+   display_name = gom_miner_get_display_name (self->miner);
+   gom_dbus_set_display_name (self->skeleton, display_name);
+ }
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 7147b33..1dd9bb8 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -28,7 +28,11 @@
+ 
+ #include "gom-miner.h"
+ 
+-G_DEFINE_TYPE (GomMiner, gom_miner, G_TYPE_OBJECT)
++static void gom_miner_initable_interface_init (GInitableIface *iface);
++
++G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT,
++                         G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init))
++
+ 
+ struct _GomMinerPrivate {
+   GoaClient *client;
+@@ -132,20 +136,21 @@ gom_miner_dispose (GObject *object)
+ }
+ 
+ static void
+-gom_miner_init_goa (GomMiner *self)
++gom_miner_init_goa (GomMiner  *self,
++                    GError   **error)
+ {
+   GoaAccount *account;
+   GoaObject *object;
+   const gchar *provider_type;
+   GList *accounts, *l;
+   GomMinerClass *miner_class = GOM_MINER_GET_CLASS (self);
++  GError *inner_error = NULL;
+ 
+-  self->priv->client = goa_client_new_sync (NULL, &self->priv->client_error);
++  self->priv->client = goa_client_new_sync (NULL, &inner_error);
+ 
+-  if (self->priv->client_error != NULL)
++  if (inner_error)
+     {
+-      g_critical ("Unable to create GoaClient: %s - indexing for %s will not work",
+-                  self->priv->client_error->message, miner_class->goa_provider_type);
++      g_propagate_error (error, inner_error);
+       return;
+     }
+ 
+@@ -170,16 +175,34 @@ gom_miner_init_goa (GomMiner *self)
+   g_list_free_full (accounts, g_object_unref);
+ }
+ 
+-static void
+-gom_miner_constructed (GObject *obj)
++static gboolean
++gom_miner_initable_init (GInitable     *initable,
++                         GCancellable  *cancellable,
++                         GError       **error)
+ {
+-  GomMiner *self = GOM_MINER (obj);
++  GError *inner_error = NULL;
++  GomMiner *self;
+ 
+-  G_OBJECT_CLASS (gom_miner_parent_class)->constructed (obj);
++  self = GOM_MINER (initable);
+ 
+-  gom_miner_init_goa (self);
++  self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error);
++  if (inner_error)
++    {
++      g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: ");
++      return FALSE;
++    }
++
++  gom_miner_init_goa (self, &inner_error);
++  if (inner_error)
++    {
++      g_propagate_prefixed_error (error, inner_error, "Unable to connect to GNOME Online Accounts: ");
++      return FALSE;
++    }
++
++  return TRUE;
+ }
+ 
++
+ static void
+ gom_miner_init (GomMiner *self)
+ {
+@@ -187,14 +210,12 @@ gom_miner_init (GomMiner *self)
+ 
+   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GOM_TYPE_MINER, GomMinerPrivate);
+   self->priv->display_name = g_strdup ("");
++}
+ 
+-  self->priv->connection = tracker_sparql_connection_get (NULL, &self->priv->connection_error);
+-  if (self->priv->connection_error != NULL)
+-    {
+-      g_critical ("Unable to create TrackerSparqlConnection: %s - indexing for %s will not work",
+-                  self->priv->connection_error->message,
+-                  klass->goa_provider_type);
+-    }
++static void
++gom_miner_initable_interface_init (GInitableIface *iface)
++{
++  iface->init = gom_miner_initable_init;
+ }
+ 
+ static void
+@@ -202,7 +223,6 @@ gom_miner_class_init (GomMinerClass *klass)
+ {
+   GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ 
+-  oclass->constructed = gom_miner_constructed;
+   oclass->dispose = gom_miner_dispose;
+ 
+   cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL);
+diff --git a/configure.ac b/configure.ac
+index 06cba71..6c61247 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -21,7 +21,7 @@ AC_HEADER_STDC
+ 
+ GDATA_MIN_VERSION=0.15.2
+ GFBGRAPH_MIN_VERSION=0.2.2
+-GLIB_MIN_VERSION=2.35.1
++GLIB_MIN_VERSION=2.56.0
+ GOA_MIN_VERSION=3.13.3
+ GRILO_MIN_VERSION=0.3.0
+ ZAPOJIT_MIN_VERSION=0.0.2
+@@ -36,7 +36,7 @@ PKG_CHECK_MODULES(GIO, [gio-2.0 gio-unix-2.0])
+ PKG_CHECK_MODULES(GOA, [goa-1.0 >= $GOA_MIN_VERSION])
+ AC_DEFINE([GOA_API_IS_SUBJECT_TO_CHANGE], [], [We are aware that GOA's API can change])
+ 
+-PKG_CHECK_MODULES(TRACKER, [tracker-miner-2.0 tracker-sparql-2.0])
++PKG_CHECK_MODULES(TRACKER, [tracker-sparql-3.0])
+ 
+ # Facebook
+ AC_ARG_ENABLE([facebook], [AS_HELP_STRING([--enable-facebook], [Enable Facebook miner])], [], [enable_facebook=yes])
+diff --git a/src/gom-application.c b/src/gom-application.c
+index 9e558f5..b435e26 100644
+--- a/src/gom-application.c
++++ b/src/gom-application.c
+@@ -233,7 +233,9 @@ gom_application_constructed (GObject *object)
+ 
+   G_OBJECT_CLASS (gom_application_parent_class)->constructed (object);
+ 
+-  self->miner = g_initable_new (self->miner_type, NULL, &error, NULL);
++  self->miner = g_initable_new (self->miner_type, NULL, &error,
++                                "bus-name", g_application_get_application_id (G_APPLICATION (self)),
++                                NULL);
+ 
+   if (self->miner == NULL) {
+     g_error (error->message);
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 1dd9bb8..ba76ebb 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -33,12 +33,13 @@ static void gom_miner_initable_interface_init (GInitableIface *iface);
+ G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT,
+                          G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init))
+ 
+-
+ struct _GomMinerPrivate {
+   GoaClient *client;
+   GError *client_error;
+ 
++  gchar *bus_name;
+   TrackerSparqlConnection *connection;
++  TrackerEndpointDBus *endpoint;
+   GError *connection_error;
+ 
+   gchar *display_name;
+@@ -62,6 +63,14 @@ typedef struct {
+   gpointer service;
+ } InsertSharedContentData;
+ 
++typedef enum
++{
++    PROP_BUS_NAME = 1,
++    N_PROPERTIES
++} GomMinerProperty;
++
++static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
++
+ static GThreadPool *cleanup_pool;
+ 
+ static void cleanup_job (gpointer data, gpointer user_data);
+@@ -135,6 +144,58 @@ gom_miner_dispose (GObject *object)
+   G_OBJECT_CLASS (gom_miner_parent_class)->dispose (object);
+ }
+ 
++static void
++gom_miner_init_database (GomMiner      *self,
++                         GCancellable  *cancellable,
++                         GError       **error)
++{
++  TrackerSparqlConnectionFlags flags;
++  g_autoptr (GFile) store_path = NULL;
++  g_autoptr (GDBusConnection) bus = NULL;
++  GError *inner_error = NULL;
++
++  flags = TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STEMMER |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_UNACCENT |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STOP_WORDS |
++          TRACKER_SPARQL_CONNECTION_FLAGS_FTS_IGNORE_NUMBERS;
++
++  store_path = g_file_new_build_filename (g_get_user_cache_dir (),
++                                          "gnome-online-miners",
++                                          self->priv->bus_name,
++                                          NULL);
++
++  self->priv->connection = tracker_sparql_connection_new (flags,
++                                                          store_path,
++                                                          tracker_sparql_get_ontology_nepomuk (),
++                                                          cancellable,
++                                                          &inner_error);
++
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++
++  bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error);
++
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++
++  self->priv->endpoint = tracker_endpoint_dbus_new (self->priv->connection,
++                                                    bus,
++                                                    NULL, /* object path */
++                                                    cancellable,
++                                                    &inner_error);
++  if (inner_error)
++    {
++      g_propagate_error (error, inner_error);
++      return;
++    }
++}
++
+ static void
+ gom_miner_init_goa (GomMiner  *self,
+                     GError   **error)
+@@ -185,10 +246,10 @@ gom_miner_initable_init (GInitable     *initable,
+ 
+   self = GOM_MINER (initable);
+ 
+-  self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error);
++  gom_miner_init_database (self, cancellable, &inner_error);
+   if (inner_error)
+     {
+-      g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: ");
++      g_propagate_prefixed_error (error, inner_error, "Unable to set up Tracker database: ");
+       return FALSE;
+     }
+ 
+@@ -212,6 +273,47 @@ gom_miner_init (GomMiner *self)
+   self->priv->display_name = g_strdup ("");
+ }
+ 
++static void
++gom_miner_set_property (GObject      *object,
++                        guint         property_id,
++                        const GValue *value,
++                        GParamSpec   *pspec)
++{
++  GomMiner *self = GOM_MINER (object);
++
++  switch ((GomMinerProperty) property_id)
++    {
++      case PROP_BUS_NAME:
++        g_free (self->priv->bus_name);
++        self->priv->bus_name = g_value_dup_string (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static void
++gom_miner_get_property (GObject    *object,
++                        guint       property_id,
++                        GValue     *value,
++                        GParamSpec *pspec)
++{
++  GomMiner *self = GOM_MINER (object);
++
++  switch ((GomMinerProperty) property_id)
++    {
++       case PROP_BUS_NAME:
++         g_value_set_string (value, self->priv->bus_name);
++         break;
++
++       default:
++         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++         break;
++    }
++}
++
+ static void
+ gom_miner_initable_interface_init (GInitableIface *iface)
+ {
+@@ -224,6 +326,19 @@ gom_miner_class_init (GomMinerClass *klass)
+   GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ 
+   oclass->dispose = gom_miner_dispose;
++  oclass->set_property = gom_miner_set_property;
++  oclass->get_property = gom_miner_get_property;
++
++  obj_properties[PROP_BUS_NAME] = g_param_spec_string ("bus-name",
++                                                       "Bus Name",
++                                                       "D-Bus name of the miner",
++                                                       NULL  /* default value */,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
++                                                       G_PARAM_STATIC_STRINGS);
++
++  g_object_class_install_properties (oclass,
++                                     N_PROPERTIES,
++                                     obj_properties);
+ 
+   cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL);
+ 
+diff --git a/src/gom-miner.h b/src/gom-miner.h
+index 8f83139..5dcfc8d 100644
+--- a/src/gom-miner.h
++++ b/src/gom-miner.h
+@@ -61,6 +61,7 @@ typedef struct _GomMinerPrivate GomMinerPrivate;
+ typedef struct {
+   GomMiner *miner;
+   TrackerSparqlConnection *connection;
++  gchar *bus_name;
+ 
+   GoaAccount *account;
+   GHashTable *services;
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 68818c4..5666c16 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -408,7 +408,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+   gchar *retval = NULL;
+   gchar *select = NULL;
+ 
+-  g_return_val_if_fail (TRACKER_SPARQL_IS_CONNECTION (connection), NULL);
++  g_return_val_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection), NULL);
+   g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+   g_return_val_if_fail (make != NULL || model != NULL, NULL);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 5666c16..63a4c29 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -208,6 +208,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   insert = g_string_new (NULL);
+   g_string_append_printf
+     (insert,
+-     "INSERT OR REPLACE %s { <%s> a nie:InformationElement ; %s %s }",
++     "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
+      graph_str, resource, property_name, quoted);
+   g_free (quoted);
+
+diff --git a/src/gom-facebook-miner.c b/src/gom-facebook-miner.c
+index ff42ca5..fc89096 100644
+--- a/src/gom-facebook-miner.c
++++ b/src/gom-facebook-miner.c
+@@ -70,7 +70,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+@@ -239,7 +239,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", album_link);
+ 
+   if (*error != NULL)
+@@ -248,7 +248,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", album_description);
+ 
+   if (*error != NULL)
+@@ -257,7 +257,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", album_name);
+ 
+   if (*error != NULL)
+@@ -274,7 +274,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -284,7 +284,7 @@ account_miner_job_process_album (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", album_created_time);
+ 
+   if (*error != NULL)
+
+diff --git a/src/gom-flickr-miner.c b/src/gom-flickr-miner.c
+index 9ac338e..dc7349e 100644
+--- a/src/gom-flickr-miner.c
++++ b/src/gom-flickr-miner.c
+@@ -143,14 +143,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -166,7 +166,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_identifier,
++         TRACKER_PICTURES_GRAPH, parent_identifier,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_identifier);
+ 
+@@ -176,7 +176,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:isPartOf", parent_resource_urn);
+       g_free (parent_resource_urn);
+ 
+@@ -187,7 +187,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", grl_media_get_title (entry->media));
+ 
+   if (*error != NULL)
+@@ -202,7 +202,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   created_time = modification_date = grl_media_get_creation_date (entry->media);
+   new_mtime = g_date_time_to_unix (modification_date);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -221,7 +221,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:contentCreated", date);
+       g_free (date);
+     }
+@@ -233,7 +233,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", url);
+ 
+   if (*error != NULL)
+@@ -242,7 +242,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", grl_media_get_description (entry->media));
+ 
+   if (*error != NULL)
+@@ -254,7 +254,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:mimeType", mime);
+       g_free (mime);
+ 
+@@ -265,7 +265,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   contact_resource = gom_tracker_utils_ensure_contact_resource
+     (connection,
+      cancellable, error,
+-     datasource_urn, grl_media_get_author (entry->media));
++     TRACKER_PICTURES_GRAPH, grl_media_get_author (entry->media));
+ 
+   if (*error != NULL)
+     goto out;
+@@ -273,7 +273,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+diff --git a/src/gom-gdata-miner.c b/src/gom-gdata-miner.c
+index 7872431..d0deb80 100644
+--- a/src/gom-gdata-miner.c
++++ b/src/gom-gdata-miner.c
+@@ -120,7 +120,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_DOCUMENTS_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+@@ -187,7 +187,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_resource_id,
++         GOM_GRAPH, parent_resource_id,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_resource_id);
+ 
+@@ -219,7 +219,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_toggle_favorite
+     (connection,
+      cancellable, error,
+-     resource, starred);
++     TRACKER_PICTURES_GRAPH, resource, starred);
+ 
+   if (*error != NULL)
+     goto out;
+@@ -400,14 +400,14 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", "nmm:Photo", NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+   if (*error != NULL)
+     goto out;
+@@ -566,6 +566,7 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection,
+       equipment_resource = gom_tracker_utils_ensure_equipment_resource (connection,
+                                                                         cancellable,
+                                                                         error,
++                                                                        TRACKER_PICTURES_GRAPH,
+                                                                         make,
+                                                                         model);
+ 
+@@ -665,7 +666,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", "nfo:DataContainer",
+      NULL);
+ 
+@@ -674,7 +675,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+ 
+   gom_tracker_update_datasource
+     (connection, datasource_urn,
+-     resource_exists, identifier, resource,
++     resource_exists, TRACKER_PICTURES_GRAPH, resource,
+      cancellable, error);
+ 
+   if (*error != NULL)
+@@ -685,7 +686,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+    */
+   new_mtime = gdata_entry_get_updated (GDATA_ENTRY (album));
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -703,7 +704,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", alternate_uri);
+ 
+   if (*error != NULL)
+@@ -713,7 +714,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", summary);
+ 
+   if (*error != NULL)
+@@ -723,7 +724,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", title);
+ 
+   if (*error != NULL)
+@@ -743,7 +744,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -755,7 +756,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", date);
+   g_free (date);
+ 
+@@ -865,7 +866,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection,
+   if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
+                                                                cancellable,
+                                                                &local_error,
+-                                                               datasource_urn,
++                                                               TRACKER_PICTURES_GRAPH,
+                                                                source_urn,
+                                                                "nie:relatedTo",
+                                                                photo_resource_urn))
+@@ -878,7 +879,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection,
+   if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
+                                                                cancellable,
+                                                                &local_error,
+-                                                               datasource_urn,
++                                                               TRACKER_PICTURES_GRAPH,
+                                                                photo_resource_urn,
+                                                                "nie:links",
+                                                                source_urn))
+
+diff --git a/src/gom-media-server-miner.c b/src/gom-media-server-miner.c
+index 490869e..32e08c6 100644
+--- a/src/gom-media-server-miner.c
++++ b/src/gom-media-server-miner.c
+@@ -65,14 +65,14 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+   if (*error != NULL)
+     goto out;
+@@ -81,7 +81,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", photo->url);
+ 
+   if (*error != NULL)
+@@ -90,7 +90,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:mimeType", photo->mimetype);
+ 
+   if (*error != NULL)
+@@ -99,7 +99,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:title", photo->name);
+ 
+   if (*error != NULL)
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index ba76ebb..40b111d 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -375,7 +375,7 @@ gom_miner_ensure_datasource (GomMiner *self,
+                           "  <%s> a nie:DataSource ; nao:identifier \"%s\" . "
+                           "  <%s> a nie:InformationElement ; nie:rootElementOf <%s> ; nie:version \"%d\""
+                           "}",
+-                          datasource_urn,
++                          GOM_GRAPH,
+                           datasource_urn, klass->miner_identifier,
+                           root_element_urn, datasource_urn, klass->version);
+ 
+@@ -400,8 +400,8 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job,
+ 
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn nao:identifier(?urn) WHERE { ?urn nie:dataSource <%s> }",
+-                          job->datasource_urn);
++                          "SELECT ?urn ?id WHERE { GRAPH <%s> { ?urn nie:dataSource <%s> ; nao:identifier ?id . } }",
++                          GOM_GRAPH, job->datasource_urn);
+ 
+   cursor = tracker_sparql_connection_query (job->connection,
+                                             select->str,
+@@ -414,9 +414,21 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job,
+ 
+   while (tracker_sparql_cursor_next (cursor, cancellable, error))
+     {
+-      g_hash_table_insert (job->previous_resources,
+-                           g_strdup (tracker_sparql_cursor_get_string (cursor, 1, NULL)),
+-                           g_strdup (tracker_sparql_cursor_get_string (cursor, 0, NULL)));
++      const gchar *urn, *identifier;
++
++      urn = tracker_sparql_cursor_get_string (cursor, 0, NULL);
++      identifier = tracker_sparql_cursor_get_string (cursor, 1, NULL);
++
++      if (identifier != NULL)
++        {
++          g_hash_table_insert (job->previous_resources,
++                               g_strdup (identifier),
++                               g_strdup (urn));
++        }
++      else
++        {
++          g_warning ("Missing identifier for urn %s", urn);
++        }
+     }
+ 
+   g_object_unref (cursor);
+@@ -488,16 +500,19 @@ gom_account_miner_job (GTask *task,
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Querying existing accounts stored in database");
+   gom_account_miner_job_query_existing (job, &error);
+ 
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Querying remote server");
+   gom_account_miner_job_query (job, &error);
+ 
+   if (error != NULL)
+     goto out;
+ 
++  g_debug ("account miner: Removing stale accounts");
+   gom_account_miner_job_cleanup_previous (job, &error);
+ 
+   if (error != NULL)
+@@ -751,10 +766,15 @@ cleanup_job (gpointer data,
+ 
+   /* find all our datasources in the tracker DB */
+   select = g_string_new (NULL);
+-  g_string_append_printf (select, "SELECT ?datasource nie:version(?root) WHERE { "
+-                          "?datasource a nie:DataSource . "
+-                          "?datasource nao:identifier \"%s\" . "
+-                          "OPTIONAL { ?root nie:rootElementOf ?datasource } }",
++  g_string_append_printf (select,
++                          "SELECT ?datasource nie:version(?root) WHERE { "
++                          "  GRAPH <%s> { "
++                          "    ?datasource a nie:DataSource . "
++                          "    ?datasource nao:identifier \"%s\" . "
++                          "    OPTIONAL { ?root nie:rootElementOf ?datasource } "
++                          "  }"
++                          "}",
++                          GOM_GRAPH,
+                           klass->miner_identifier);
+ 
+   cursor = tracker_sparql_connection_query (self->priv->connection,
+
+diff --git a/src/gom-miner.h b/src/gom-miner.h
+index 5dcfc8d..8f83139 100644
+--- a/src/gom-miner.h
++++ b/src/gom-miner.h
+@@ -61,7 +61,6 @@ typedef struct _GomMinerPrivate GomMinerPrivate;
+ typedef struct {
+   GomMiner *miner;
+   TrackerSparqlConnection *connection;
+-  gchar *bus_name;
+ 
+   GoaAccount *account;
+   GHashTable *services;
+
+diff --git a/src/gom-owncloud-miner.c b/src/gom-owncloud-miner.c
+index 34d303b..623f2e1 100644
+--- a/src/gom-owncloud-miner.c
++++ b/src/gom-owncloud-miner.c
+@@ -100,14 +100,14 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_DOCUMENTS_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_DOCUMENTS_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -117,7 +117,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   modification_time = g_date_time_new_from_timeval_local (&tv);
+   new_mtime = g_date_time_to_unix (modification_time);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_DOCUMENTS_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -133,7 +133,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_DOCUMENTS_GRAPH, resource,
+      "nie:url", uri);
+ 
+   if (*error != NULL)
+@@ -156,7 +156,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+             (connection, cancellable, error,
+              NULL,
+-             datasource_urn, parent_identifier,
++             GOM_GRAPH, parent_identifier,
+              "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+           g_checksum_reset (checksum);
+           g_free (parent_identifier);
+@@ -168,7 +168,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_DOCUMENTS_GRAPH, resource,
+              "nie:isPartOf", parent_resource_urn);
+           g_free (parent_resource_urn);
+ 
+@@ -182,7 +182,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_DOCUMENTS_GRAPH, resource,
+              "nie:mimeType", mime);
+ 
+           if (*error != NULL)
+@@ -194,7 +194,7 @@ account_miner_job_process_file (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_DOCUMENTS_GRAPH, resource,
+      "nfo:fileName", display_name);
+ 
+   if (*error != NULL)
+@@ -416,6 +416,11 @@ query_owncloud (GomAccountMinerJob *job,
+   mount = g_volume_get_mount (volume);
+   if (mount == NULL)
+     {
++      g_autofree gchar *volume_name;
++
++      volume_name = g_volume_get_name (volume);
++      g_debug ("Mounting Online Account volume %s", volume_name);
++
+       data.error = error;
+ 
+       context = g_main_context_new ();
+@@ -436,6 +441,7 @@ query_owncloud (GomAccountMinerJob *job,
+     }
+ 
+   root = g_mount_get_root (mount);
++  g_debug ("Got volume from gnome-online-accounts: root is %s", g_file_peek_path (root));
+   account_miner_job_traverse_dir (job, connection, previous_resources, datasource_urn, root, TRUE, cancellable, error);
+ 
+   g_object_unref (root);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 63a4c29..469583e 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -26,16 +26,11 @@
+ #include "gom-tracker.h"
+ #include "gom-utils.h"
+ 
+-static gchar *
+-_tracker_utils_format_into_graph (const gchar *graph)
+-{
+-  return (graph != NULL) ? g_strdup_printf ("INTO <%s> ", graph) : g_strdup ("");
+-}
+-
+ static gboolean
+ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *connection,
+                                                     GCancellable *cancellable,
+                                                     GError **error,
++                                                    const gchar *graph,
+                                                     const gchar *resource,
+                                                     const gchar *attribute,
+                                                     gchar **value)
+@@ -45,8 +40,8 @@ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *con
+   const gchar *string_value = NULL;
+   gboolean res;
+ 
+-  g_string_append_printf (select, "SELECT ?val { <%s> %s ?val }",
+-                          resource, attribute);
++  g_string_append_printf (select, "SELECT ?val { GRAPH <%s> { <%s> %s ?val } }",
++                          graph, resource, attribute);
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+                                             cancellable, error);
+@@ -86,7 +81,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+                                                const gchar *class,
+                                                ...)
+ {
+-  GString *select, *insert, *inner;
++  GString *select, *inner;
++  gchar *insert;
+   va_list args;
+   const gchar *arg;
+   TrackerSparqlCursor *cursor;
+@@ -98,6 +94,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   gchar *key = NULL, *val = NULL;
+   gboolean exists = FALSE;
+ 
++  g_return_val_if_fail (graph != NULL, NULL);
++
+   /* build the inner query with all the classes */
+   va_start (args, class);
+   inner = g_string_new (NULL);
+@@ -112,7 +110,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   /* query if such a resource is already in the DB */
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn WHERE { ?urn %s }", inner->str);
++                          "SELECT ?urn WHERE { GRAPH <%s> { ?urn %s } }", graph, inner->str);
+ 
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+@@ -138,19 +136,12 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+     }
+ 
+   /* not found, create the resource */
+-  insert = g_string_new (NULL);
+-  graph_str = _tracker_utils_format_into_graph (graph);
+-
+-  g_string_append_printf (insert, "INSERT %s { _:res %s }",
+-                          graph_str, inner->str);
+-  g_free (graph_str);
+-  g_string_free (inner, TRUE);
+-
++  insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }",
++                            graph, inner->str);
+   insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert->str,
++    tracker_sparql_connection_update_blank (connection, insert,
+                                             G_PRIORITY_DEFAULT, NULL, error);
+-
+-  g_string_free (insert, TRUE);
++  g_free (insert);
+ 
+   if (*error != NULL)
+     goto out;
+@@ -194,10 +185,10 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+                                                         const gchar *property_value)
+ {
+   GString *insert;
+-  gchar *graph_str, *quoted;
++  gchar *quoted;
+   gboolean retval = TRUE;
+ 
+-  graph_str = _tracker_utils_format_into_graph (graph);
++  g_return_val_if_fail (graph != NULL, FALSE);
+ 
+   /* the "null" value must not be quoted */
+   if (property_value == NULL)
+@@ -208,8 +199,8 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   insert = g_string_new (NULL);
+   g_string_append_printf
+     (insert,
+-     "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
+-     graph_str, resource, property_name, quoted);
++     "INSERT OR REPLACE INTO <%s> { <%s> a nie:InformationElement, nie:DataObject ; %s %s }",
++     graph, resource, property_name, quoted);
+   g_free (quoted);
+ 
+   g_debug ("Insert or replace triple: query %s", insert->str);
+@@ -223,8 +214,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+   if (*error != NULL)
+     retval = FALSE;
+ 
+-  g_free (graph_str);
+-
+   return retval;
+ }
+ 
+@@ -271,6 +260,7 @@ gboolean
+ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection,
+                                                GCancellable *cancellable,
+                                                GError **error,
++                                               const gchar *graph,
+                                                const gchar *resource,
+                                                gboolean favorite)
+ {
+@@ -279,15 +269,15 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti
+   gboolean retval = TRUE;
+ 
+   if (favorite)
+-    op_str = "INSERT OR REPLACE";
++    op_str = "INSERT OR REPLACE INTO";
+   else
+-    op_str = "DELETE";
++    op_str = "DELETE FROM";
+ 
+   update = g_string_new (NULL);
+   g_string_append_printf
+     (update,
+-     "%s { <%s> nao:hasTag nao:predefined-tag-favorite }",
+-     op_str, resource);
++     "%s <%s> { <%s> nao:hasTag nao:predefined-tag-favorite }",
++     op_str, graph, resource);
+ 
+   g_debug ("Toggle favorite: query %s", update->str);
+ 
+@@ -321,9 +311,13 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+   mail_uri = g_strconcat ("mailto:", email, NULL);
+   select = g_string_new (NULL);
+   g_string_append_printf (select,
+-                          "SELECT ?urn WHERE { ?urn a nco:Contact . "
+-                          "?urn nco:hasEmailAddress ?mail . "
+-                          "FILTER (fn:contains(?mail, \"%s\" )) }", mail_uri);
++                          "SELECT ?urn WHERE { "
++                          "  GRAPH <%s> { "
++                          "    ?urn a nco:Contact . "
++                          "    ?urn nco:hasEmailAddress ?mail . "
++                          "    FILTER (fn:contains(?mail, \"%s\" )) "
++                          "  }"
++                          "}", TRACKER_CONTACTS_GRAPH, mail_uri);
+ 
+   cursor = tracker_sparql_connection_query (connection,
+                                             select->str,
+@@ -351,8 +345,9 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+   insert = g_string_new (NULL);
+ 
+   g_string_append_printf (insert,
+-                          "INSERT { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . "
++                          "INSERT INTO <%s> { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . "
+                           "_:res a nco:Contact ; nco:hasEmailAddress <%s> ; nco:fullname \"%s\" . }",
++                          TRACKER_CONTACTS_GRAPH,
+                           mail_uri, email,
+                           mail_uri, fullname);
+ 
+@@ -397,6 +392,7 @@ gchar *
+ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection,
+                                              GCancellable *cancellable,
+                                              GError **error,
++                                             const gchar *graph,
+                                              const gchar *make,
+                                              const gchar *model)
+ {
+@@ -416,7 +412,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+   equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:",
+                                                 make != NULL ? make : "",
+                                                 model != NULL ? model : "");
+-  select = g_strdup_printf ("SELECT <%s> WHERE { }", equip_uri);
++  select = g_strdup_printf ("SELECT <%s> WHERE { GRAPH <%s> { } }", equip_uri, graph);
+ 
+   local_error = NULL;
+   cursor = tracker_sparql_connection_query (connection, select, cancellable, &local_error);
+@@ -449,7 +445,8 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+     }
+ 
+   /* not found, create the resource */
+-  insert = g_strdup_printf ("INSERT { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }",
++  insert = g_strdup_printf ("INSERT INTO <%s> { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }",
++                            graph,
+                             equip_uri,
+                             make,
+                             model);
+@@ -480,7 +477,7 @@ void
+ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+                                const gchar              *datasource_urn,
+                                gboolean                  resource_exists,
+-                               const gchar              *identifier,
++                               const gchar              *graph,
+                                const gchar              *resource,
+                                GCancellable             *cancellable,
+                                GError                  **error)
+@@ -498,7 +495,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+ 
+       res = gom_tracker_sparql_connection_get_string_attribute
+         (connection, cancellable, error,
+-         resource, "nie:dataSource", &old_value);
++         graph, resource, "nie:dataSource", &old_value);
+       g_clear_error (error);
+ 
+       if (res)
+@@ -514,7 +511,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+   if (set_datasource)
+     gom_tracker_sparql_connection_set_triple
+       (connection, cancellable, error,
+-       identifier, resource,
++       graph, resource,
+        "nie:dataSource", datasource_urn);
+ }
+ 
+@@ -522,7 +519,7 @@ gboolean
+ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+                           gint64                    new_mtime,
+                           gboolean                  resource_exists,
+-                          const gchar              *identifier,
++                          const gchar              *graph,
+                           const gchar              *resource,
+                           GCancellable             *cancellable,
+                           GError                  **error)
+@@ -536,7 +533,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+     {
+       res = gom_tracker_sparql_connection_get_string_attribute
+         (connection, cancellable, error,
+-         resource, "nie:contentLastModified", &old_value);
++         graph, resource, "nie:contentLastModified", &old_value);
+       g_clear_error (error);
+ 
+       if (res)
+@@ -552,7 +549,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+   date = gom_iso8601_from_timestamp (new_mtime);
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection, cancellable, error,
+-     identifier, resource,
++     graph, resource,
+      "nie:contentLastModified", date);
+   g_free (date);
+ 
+diff --git a/src/gom-tracker.h b/src/gom-tracker.h
+index 94a39e8..a5ae6fd 100644
+--- a/src/gom-tracker.h
++++ b/src/gom-tracker.h
+@@ -29,6 +29,14 @@
+ 
+ G_BEGIN_DECLS
+ 
++/* The graph where we store account meta information */
++#define GOM_GRAPH "tracker.api.gnome.org/ontology/v3/gnome-online-miners"
++
++/* Graphs where we store content information */
++#define TRACKER_CONTACTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Contacts"
++#define TRACKER_DOCUMENTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Documents"
++#define TRACKER_PICTURES_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Pictures"
++
+ gchar *gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connection,
+                                                       GCancellable *cancellable,
+                                                       GError **error,
+@@ -57,6 +65,7 @@ gboolean gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *conn
+ gboolean gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection,
+                                                         GCancellable *cancellable,
+                                                         GError **error,
++                                                        const gchar *graph,
+                                                         const gchar *resource,
+                                                         gboolean favorite);
+ 
+@@ -69,20 +78,21 @@ gchar* gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *conne
+ gchar *gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection,
+                                                     GCancellable *cancellable,
+                                                     GError **error,
++                                                    const gchar *graph,
+                                                     const gchar *make,
+                                                     const gchar *model);
+ 
+ void gom_tracker_update_datasource (TrackerSparqlConnection  *connection,
+                                     const gchar              *datasource_urn,
+                                     gboolean                  resource_exists,
+-                                    const gchar              *identifier,
++                                    const gchar              *graph,
+                                     const gchar              *resource,
+                                     GCancellable             *cancellable,
+                                     GError                  **error);
+ gboolean gom_tracker_update_mtime (TrackerSparqlConnection  *connection,
+                                    gint64                    new_mtime,
+                                    gboolean                  resource_exists,
+-                                   const gchar              *identifier,
++                                   const gchar              *graph,
+                                    const gchar              *resource,
+                                    GCancellable             *cancellable,
+                                    GError                  **error);
+diff --git a/src/gom-zpj-miner.c b/src/gom-zpj-miner.c
+index 6dff947..1372de5 100644
+--- a/src/gom-zpj-miner.c
++++ b/src/gom-zpj-miner.c
+@@ -70,14 +70,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+     (connection,
+      cancellable, error,
+      &resource_exists,
+-     datasource_urn, identifier,
++     TRACKER_PICTURES_GRAPH, identifier,
+      "nfo:RemoteDataObject", class, NULL);
+ 
+   if (*error != NULL)
+     goto out;
+ 
+   gom_tracker_update_datasource (connection, datasource_urn,
+-                                 resource_exists, identifier, resource,
++                                 resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                  cancellable, error);
+ 
+   if (*error != NULL)
+@@ -86,7 +86,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   updated_time = zpj_skydrive_entry_get_updated_time (entry);
+   new_mtime = g_date_time_to_unix (updated_time);
+   mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
+-                                            resource_exists, identifier, resource,
++                                            resource_exists, TRACKER_PICTURES_GRAPH, resource,
+                                             cancellable, error);
+ 
+   if (*error != NULL)
+@@ -102,7 +102,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:url", identifier);
+ 
+   if (*error != NULL)
+@@ -119,7 +119,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
+         (connection, cancellable, error,
+          NULL,
+-         datasource_urn, parent_identifier,
++         TRACKER_PICTURES_GRAPH, parent_identifier,
+          "nfo:RemoteDataObject", "nfo:DataContainer", NULL);
+       g_free (parent_identifier);
+ 
+@@ -129,7 +129,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+       gom_tracker_sparql_connection_insert_or_replace_triple
+         (connection,
+          cancellable, error,
+-         datasource_urn, resource,
++         TRACKER_PICTURES_GRAPH, resource,
+          "nie:isPartOf", parent_resource_urn);
+       g_free (parent_resource_urn);
+ 
+@@ -142,7 +142,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+           gom_tracker_sparql_connection_insert_or_replace_triple
+             (connection,
+              cancellable, error,
+-             datasource_urn, resource,
++             TRACKER_PICTURES_GRAPH, resource,
+              "nie:mimeType", mime);
+           g_free (mime);
+ 
+@@ -154,7 +154,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:description", zpj_skydrive_entry_get_description (entry));
+ 
+   if (*error != NULL)
+@@ -163,7 +163,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nfo:fileName", name);
+ 
+   if (*error != NULL)
+@@ -180,7 +180,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nco:creator", contact_resource);
+   g_free (contact_resource);
+ 
+@@ -192,6 +192,6 @@ account_miner_job_process_entry (GomAccountMinerJob *job,
+   gom_tracker_sparql_connection_insert_or_replace_triple
+     (connection,
+      cancellable, error,
+-     datasource_urn, resource,
++     TRACKER_PICTURES_GRAPH, resource,
+      "nie:contentCreated", date);
+   g_free (date);
+
+diff --git a/src/gom-miner.c b/src/gom-miner.c
+index 40b111d..f9e4be0 100644
+--- a/src/gom-miner.c
++++ b/src/gom-miner.c
+@@ -381,7 +381,6 @@ gom_miner_ensure_datasource (GomMiner *self,
+ 
+   tracker_sparql_connection_update (self->priv->connection,
+                                     datasource_insert->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     error);
+ 
+@@ -468,7 +467,6 @@ gom_account_miner_job_cleanup_previous (GomAccountMinerJob *job,
+ 
+   tracker_sparql_connection_update (job->connection,
+                                     delete->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     error);
+ 
+@@ -708,7 +706,6 @@ cleanup_job_do_cleanup (CleanupJob *job, GCancellable *cancellable)
+ 
+   tracker_sparql_connection_update (self->priv->connection,
+                                     update->str,
+-                                    G_PRIORITY_DEFAULT,
+                                     cancellable,
+                                     &error);
+   g_string_free (update, TRUE);
+
+diff --git a/src/gom-tracker.c b/src/gom-tracker.c
+index 469583e..716fc14 100644
+--- a/src/gom-tracker.c
++++ b/src/gom-tracker.c
+@@ -138,9 +138,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti
+   /* not found, create the resource */
+   insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }",
+                             graph, inner->str);
+-  insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert,
+-                                            G_PRIORITY_DEFAULT, NULL, error);
++  insert_res = tracker_sparql_connection_update_blank (connection, insert, NULL, error);
+   g_free (insert);
+ 
+   if (*error != NULL)
+@@ -205,9 +203,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection
+ 
+   g_debug ("Insert or replace triple: query %s", insert->str);
+ 
+-  tracker_sparql_connection_update (connection, insert->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, insert->str, cancellable, error);
+ 
+   g_string_free (insert, TRUE);
+ 
+@@ -235,9 +231,7 @@ gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *connection,
+      "DELETE { <%s> %s ?val } WHERE { <%s> %s ?val }", resource,
+      property_name, resource, property_name);
+ 
+-  tracker_sparql_connection_update (connection, delete->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, delete->str, cancellable, error);
+ 
+   g_string_free (delete, TRUE);
+   if (*error != NULL)
+@@ -281,9 +275,7 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti
+ 
+   g_debug ("Toggle favorite: query %s", update->str);
+ 
+-  tracker_sparql_connection_update (connection, update->str,
+-                                    G_PRIORITY_DEFAULT, cancellable,
+-                                    error);
++  tracker_sparql_connection_update (connection, update->str, cancellable, error);
+ 
+   g_string_free (update, TRUE);
+ 
+@@ -351,9 +343,7 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection,
+                           mail_uri, email,
+                           mail_uri, fullname);
+ 
+-  insert_res =
+-    tracker_sparql_connection_update_blank (connection, insert->str,
+-                                            G_PRIORITY_DEFAULT, cancellable, error);
++  insert_res = tracker_sparql_connection_update_blank (connection, insert->str, cancellable, error);
+ 
+   g_string_free (insert, TRUE);
+ 
+@@ -452,7 +442,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection
+                             model);
+ 
+   local_error = NULL;
+-  tracker_sparql_connection_update (connection, insert, G_PRIORITY_DEFAULT, cancellable, &local_error);
++  tracker_sparql_connection_update (connection, insert, cancellable, &local_error);
+   if (local_error != NULL)
+     {
+       g_propagate_error (error, local_error);
diff --git a/gnu/packages/patches/gnome-screenshot-meson-0.60.patch b/gnu/packages/patches/gnome-screenshot-meson-0.60.patch
new file mode 100644
index 0000000000..c80ce9d6a3
--- /dev/null
+++ b/gnu/packages/patches/gnome-screenshot-meson-0.60.patch
@@ -0,0 +1,39 @@
+Fixes build issue with Meson 0.60.0. Taken from upstream
+https://gitlab.gnome.org/GNOME/gnome-screenshot/-/merge_requests/57
+
+From b60dad3c2536c17bd201f74ad8e40eb74385ed9f Mon Sep 17 00:00:00 2001
+From: Jack Hill <jackhill@jackhill.us>
+Date: Thu, 18 Nov 2021 00:46:58 -0500
+Subject: [PATCH] meson: remove extraneous positional argument
+
+* data/meson.build (desktop_file)
+  (metainfo_file): Remove extraneous positional argument.
+
+Closes #186
+---
+ data/meson.build | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index fd570b3..4e2e2e8 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -1,7 +1,6 @@
+ gnome = import('gnome')
+ 
+ desktop_file = i18n.merge_file(
+-  'desktop',
+   type: 'desktop',
+   input: 'org.gnome.Screenshot.desktop.in',
+   output: 'org.gnome.Screenshot.desktop',
+@@ -23,7 +22,6 @@ if desktop_file_validate.found()
+ endif
+ 
+ metainfo_file = i18n.merge_file(
+-  'appdata',
+   input: 'org.gnome.Screenshot.metainfo.xml.in',
+   output: 'org.gnome.Screenshot.metainfo.xml',
+   po_dir: join_paths(meson.current_source_dir(), '../po'),
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/gnome-session-support-elogind.patch b/gnu/packages/patches/gnome-session-support-elogind.patch
new file mode 100644
index 0000000000..b52b4c6855
--- /dev/null
+++ b/gnu/packages/patches/gnome-session-support-elogind.patch
@@ -0,0 +1,73 @@
+This patch, borrowed from Gentoo, allows configuring gnome-sesssion with
+elogind support.
+
+https://gitweb.gentoo.org/repo/gentoo.git/plain/gnome-base/gnome-session/files/gnome-session-3.38.0-meson-Support-elogind.patch?id=5f7fe88af5f888aff58fa0c069c3fe07973c7cd2
+
+From 4454f2a63394b69fba2c900151165ad8b5742f31 Mon Sep 17 00:00:00 2001
+From: Mart Raudsepp <leio@gentoo.org>
+Date: Sun, 15 Mar 2020 14:34:39 +0200
+Subject: [PATCH] meson: Support elogind
+
+---
+ meson.build       | 12 +++++++++---
+ meson_options.txt |  1 +
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index ef5132c6..7f68aaae 100644
+--- a/meson.build
++++ b/meson.build
+@@ -124,8 +124,10 @@ enable_systemd = get_option('systemd')
+ enable_systemd_session = get_option('systemd_session') != 'disable'
+ use_systemd_session = get_option('systemd_session') == 'default'
+ enable_systemd_journal = get_option('systemd_journal')
++enable_elogind = get_option('elogind')
+ enable_consolekit = get_option('consolekit')
+-if enable_systemd or enable_consolekit
++assert(not (enable_systemd and enable_elogind), 'Can not support systemd and elogind at once')
++if enable_systemd or enable_elogind or enable_consolekit
+   session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
+ 
+   # Check for systemd
+@@ -152,6 +154,10 @@ if enable_systemd or enable_consolekit
+     endif
+ 
+     session_tracking = 'systemd'
++  elif enable_elogind
++    libelogind_dep = dependency('libelogind', version: '>= 239.4')
++    session_bin_deps += libelogind_dep
++    session_tracking = 'elogind'
+   endif
+ 
+   # Check for ConsoleKit
+@@ -161,7 +167,7 @@ if enable_systemd or enable_consolekit
+ 
+     session_bin_deps += dbus_glib_dep
+ 
+-    if enable_systemd
++    if enable_systemd or enable_elogind
+       session_tracking += ' (with fallback to ConsoleKit)'
+     else
+       session_tracking = 'ConsoleKit'
+@@ -171,7 +177,7 @@ endif
+ if enable_systemd_session
+   assert(enable_systemd, 'Systemd support must be enabled when using systemd session management')
+ endif
+-config_h.set('HAVE_SYSTEMD', enable_systemd)
++config_h.set('HAVE_SYSTEMD', enable_systemd or enable_elogind)
+ config_h.set('ENABLE_SYSTEMD_SESSION', enable_systemd_session)
+ config_h.set('ENABLE_SYSTEMD_JOURNAL', enable_systemd_journal)
+ config_h.set('HAVE_CONSOLEKIT', enable_consolekit)
+diff --git a/meson_options.txt b/meson_options.txt
+index 4c05dc6e..512d1528 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,4 +1,5 @@
+ option('deprecation_flags', type: 'boolean', value: false, description: 'use *_DISABLE_DEPRECATED flags')
++option('elogind', type: 'boolean', value: true, description: 'Use elogind')
+ option('session_selector', type: 'boolean', value: false, description: 'enable building a custom session selector dialog')
+ option('systemd', type: 'boolean', value: true, description: 'Use systemd')
+ option('systemd_session', type: 'combo', choices: ['disable', 'enable', 'default'], value: 'default', description: 'Whether to include systemd session support and use it by default')
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch b/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch
deleted file mode 100644
index 4b7748950e..0000000000
--- a/gnu/packages/patches/gnome-shell-CVE-2020-17489.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 05b7aec747282f62212b605249d518280ff80059 Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode@redhat.com>
-Date: Mon, 27 Jul 2020 10:58:22 -0400
-Subject: [PATCH] loginDialog: Reset auth prompt on vt switch before fade in
-
-At the moment, if a user switches to the login screen vt,
-the login screen fades in whatever was on screen prior, and
-then does a reset.
-
-It makes more sense to reset first, so we fade in what the
-user is going to interact with instead of what they interacted
-with before.
-
-Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2997
----
- js/gdm/loginDialog.js | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
-index c3f90dc58..6b35ebb16 100644
---- a/js/gdm/loginDialog.js
-+++ b/js/gdm/loginDialog.js
-@@ -920,16 +920,15 @@ var LoginDialog = GObject.registerClass({
-         if (this.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
-             return;
- 
-+        if (this._authPrompt.verificationStatus !== AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
-+            this._authPrompt.reset();
-+
-         this._bindOpacity();
-         this.ease({
-             opacity: 255,
-             duration: _FADE_ANIMATION_TIME,
-             mode: Clutter.AnimationMode.EASE_OUT_QUAD,
--            onComplete: () => {
--                if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
--                    this._authPrompt.reset();
--                this._unbindOpacity();
--            }
-+            onComplete: () => this._unbindOpacity(),
-         });
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/gnome-shell-disable-test.patch b/gnu/packages/patches/gnome-shell-disable-test.patch
deleted file mode 100644
index b4c7e73cd7..0000000000
--- a/gnu/packages/patches/gnome-shell-disable-test.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-This test seems to require a D-Bus connection not available in the build
-environment.
-
-diff -ur /tmp/guix-build-gnome-shell-3.34.2.drv-0/gnome-shell-3.34.2/src/st/meson.build b/src/st/meson.build
---- /tmp/guix-build-gnome-shell-3.34.2.drv-0/gnome-shell-3.34.2/src/st/meson.build	1969-12-31 19:00:00.000000000 -0500
-+++ b/src/st/meson.build	2019-12-23 00:46:14.721198022 -0500
-@@ -132,18 +132,6 @@
-   sources: st_enums[1]
- )
- 
--test_theme = executable('test-theme',
--  sources: 'test-theme.c',
--  c_args: st_cflags,
--  dependencies: [mutter_dep, gtk_dep],
--  build_rpath: mutter_typelibdir,
--  link_with: libst
--)
--
--test('CSS styling support', test_theme,
--  workdir: meson.current_source_dir()
--)
--
- libst_gir = gnome.generate_gir(libst,
-   sources: st_gir_sources,
-   nsversion: '1.0',
diff --git a/gnu/packages/patches/gnome-shell-theme.patch b/gnu/packages/patches/gnome-shell-theme.patch
deleted file mode 100644
index 3fa0670c43..0000000000
--- a/gnu/packages/patches/gnome-shell-theme.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Adjust GNOME-Shell so that it uses a Guix theme by default.
-
-Patch by Ludovic Courtès <ludo@gnu.org>.
-
-diff -ur a/data/gnome-shell-theme.gresource.xml b/data/gnome-shell-theme.gresource.xml
---- a/data/gnome-shell-theme.gresource.xml	2019-12-11 15:06:31.000000000 -0500
-+++ b/data/gnome-shell-theme.gresource.xml	2019-12-21 00:31:55.895866241 -0500
-@@ -19,6 +19,8 @@
-     <file>no-events.svg</file>
-     <file>no-notifications.svg</file>
-     <file>noise-texture.png</file>
-+    <file>guix-background.png</file>
-+    <file>guix-logo.png</file>
-     <file>pad-osd.css</file>
-     <file alias="icons/pointer-double-click-symbolic.svg">pointer-double-click-symbolic.svg</file>
-     <file alias="icons/pointer-drag-symbolic.svg">pointer-drag-symbolic.svg</file>
-diff -ur a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
---- a/data/theme/gnome-shell-sass/_common.scss	2019-12-11 15:06:31.000000000 -0500
-+++ b/data/theme/gnome-shell-sass/_common.scss	2019-12-21 00:33:49.495832135 -0500
-@@ -1994,7 +1994,16 @@
-   }
- }
- 
--  .login-dialog-logo-bin { padding: 24px 0px; }
-+  .login-dialog-logo-bin {
-+      /* Make it a bit narrower than .login-dialog-user-list.  */
-+      width: 12em;
-+      height: 8em;
-+      background: url(resource:///org/gnome/shell/theme/guix-logo.png);
-+      background-color: transparent;
-+      background-repeat: no-repeat;
-+      background-size: contain;
-+      background-position: center; }
-+
-   .login-dialog-banner { color: darken($osd_fg_color,10%); }
-   .login-dialog-button-box { spacing: 5px; }
-   .login-dialog-message-warning { color: $warning_color; }
-@@ -2143,9 +2152,10 @@
- }
- 
- #lockDialogGroup {
--  background: lighten(#2e3436, 8%) url(resource:///org/gnome/shell/theme/noise-texture.png);
--  background-repeat: repeat;
--}
-+  background: lighten(#2e3436, 8%) url(resource:///org/gnome/shell/theme/guix-background.png);
-+  background-repeat: no-repeat;
-+  background-size: cover;
-+  background-position: center; }
- 
- #screenShieldNotifications {
-   StButton#vhandle, StButton#hhandle {
diff --git a/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch b/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch
deleted file mode 100644
index c680e86495..0000000000
--- a/gnu/packages/patches/gnome-todo-delete-esource-duplicate.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-From: Emmanuele Bassi <ebassi@gnome.org>
-
-See also: https://gitlab.gnome.org/GNOME/gnome-todo/commit/6cdabc4dd0c6c804a093b94c269461ce376fed4f
---- gnome-todo-3.28.1/plugins/eds/gtd-eds-autoptr.h.orig	2020-05-06 14:20:49.589902539 +0200
-+++ gnome-todo-3.28.1/plugins/eds/gtd-eds-autoptr.h	2020-05-06 14:20:54.593919721 +0200
-@@ -25,4 +25,3 @@
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalComponent, g_object_unref);
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalComponentId, e_cal_component_free_id);
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (ECalClient, g_object_unref);
--G_DEFINE_AUTOPTR_CLEANUP_FUNC (ESource, g_object_unref);
diff --git a/gnu/packages/patches/gnupg-1-build-with-gcc10.patch b/gnu/packages/patches/gnupg-1-build-with-gcc10.patch
new file mode 100644
index 0000000000..40b2aff98e
--- /dev/null
+++ b/gnu/packages/patches/gnupg-1-build-with-gcc10.patch
@@ -0,0 +1,64 @@
+Borrowed from Debian
+https://sources.debian.org/src/gnupg1/1.4.23-1.1/debian/patches/0006-fix-for-gcc10.patch/
+
+Subject: Fix build with gcc-10
+Author: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
+Date: 2021-01-04
+Bug: https://dev.gnupg.org/T5215
+Bug-Debian: https://bugs.debian.org/957293
+
+--- a/g10/options.h
++++ b/g10/options.h
+@@ -29,6 +29,8 @@
+ /* Norcraft can't cope with common symbols */
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE
+ #endif
+--- a/include/cipher.h
++++ b/include/cipher.h
+@@ -117,6 +117,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE
+ #endif
+--- a/include/iobuf.h
++++ b/include/iobuf.h
+@@ -72,6 +72,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
+--- a/include/memory.h
++++ b/include/memory.h
+@@ -93,6 +93,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
+--- a/include/mpi.h
++++ b/include/mpi.h
+@@ -38,6 +38,8 @@
+ #ifndef EXTERN_UNLESS_MAIN_MODULE
+ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
+ #define EXTERN_UNLESS_MAIN_MODULE extern
++#elif defined (__GNUC__) && __GNUC__ >= 10
++#define EXTERN_UNLESS_MAIN_MODULE __attribute__((__common__))
+ #else
+ #define EXTERN_UNLESS_MAIN_MODULE 
+ #endif
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20231.patch b/gnu/packages/patches/gnutls-CVE-2021-20231.patch
deleted file mode 100644
index 5186522eee..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20231.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 15beb4b193b2714d88107e7dffca781798684e7e Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:05 +0100
-Subject: [PATCH 1/2] key_share: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/key_share.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/lib/ext/key_share.c b/lib/ext/key_share.c
-index ab8abf8fe..a8c4bb5cf 100644
---- a/lib/ext/key_share.c
-+++ b/lib/ext/key_share.c
-@@ -664,14 +664,14 @@ key_share_send_params(gnutls_session_t session,
- {
- 	unsigned i;
- 	int ret;
--	unsigned char *lengthp;
--	unsigned int cur_length;
- 	unsigned int generated = 0;
- 	const gnutls_group_entry_st *group;
- 	const version_entry_st *ver;
- 
- 	/* this extension is only being sent on client side */
- 	if (session->security_parameters.entity == GNUTLS_CLIENT) {
-+		unsigned int length_pos;
-+
- 		ver = _gnutls_version_max(session);
- 		if (unlikely(ver == NULL || ver->key_shares == 0))
- 			return 0;
-@@ -679,16 +679,13 @@ key_share_send_params(gnutls_session_t session,
- 		if (!have_creds_for_tls13(session))
- 			return 0;
- 
--		/* write the total length later */
--		lengthp = &extdata->data[extdata->length];
-+		length_pos = extdata->length;
- 
- 		ret =
- 		    _gnutls_buffer_append_prefix(extdata, 16, 0);
- 		if (ret < 0)
- 			return gnutls_assert_val(ret);
- 
--		cur_length = extdata->length;
--
- 		if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { /* we know the group */
- 			group = get_group(session);
- 			if (unlikely(group == NULL))
-@@ -736,7 +733,8 @@ key_share_send_params(gnutls_session_t session,
- 		}
- 
- 		/* copy actual length */
--		_gnutls_write_uint16(extdata->length - cur_length, lengthp);
-+		_gnutls_write_uint16(extdata->length - length_pos - 2,
-+				     &extdata->data[length_pos]);
- 
- 	} else { /* server */
- 		ver = get_version(session);
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20232.patch b/gnu/packages/patches/gnutls-CVE-2021-20232.patch
deleted file mode 100644
index dc3a0be690..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20232.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 75a937d97f4fefc6f9b08e3791f151445f551cb3 Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:23 +0100
-Subject: [PATCH 2/2] pre_shared_key: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/pre_shared_key.c | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/lib/ext/pre_shared_key.c b/lib/ext/pre_shared_key.c
-index a042c6488..380bf39ed 100644
---- a/lib/ext/pre_shared_key.c
-+++ b/lib/ext/pre_shared_key.c
-@@ -267,7 +267,7 @@ client_send_params(gnutls_session_t session,
- 	size_t spos;
- 	gnutls_datum_t username = {NULL, 0};
- 	gnutls_datum_t user_key = {NULL, 0}, rkey = {NULL, 0};
--	gnutls_datum_t client_hello;
-+	unsigned client_hello_len;
- 	unsigned next_idx;
- 	const mac_entry_st *prf_res = NULL;
- 	const mac_entry_st *prf_psk = NULL;
-@@ -428,8 +428,7 @@ client_send_params(gnutls_session_t session,
- 	assert(extdata->length >= sizeof(mbuffer_st));
- 	assert(ext_offset >= (ssize_t)sizeof(mbuffer_st));
- 	ext_offset -= sizeof(mbuffer_st);
--	client_hello.data = extdata->data+sizeof(mbuffer_st);
--	client_hello.size = extdata->length-sizeof(mbuffer_st);
-+	client_hello_len = extdata->length-sizeof(mbuffer_st);
- 
- 	next_idx = 0;
- 
-@@ -440,6 +439,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_res && rkey.size > 0) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_res,
- 					 binders_len, binders_pos,
- 					 ext_offset, &rkey, &client_hello, 1,
-@@ -474,6 +478,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_psk && user_key.size > 0 && info) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_psk,
- 					 binders_len, binders_pos,
- 					 ext_offset, &user_key, &client_hello, 0,
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/gnutls-guile-eintr-eagain.patch b/gnu/packages/patches/gnutls-guile-eintr-eagain.patch
new file mode 100644
index 0000000000..e04c945158
--- /dev/null
+++ b/gnu/packages/patches/gnutls-guile-eintr-eagain.patch
@@ -0,0 +1,56 @@
+Fixes <https://issues.guix.gnu.org/47867>.
+
+This fix was merged upstream
+in <https://gitlab.com/gnutls/gnutls/-/merge_requests/1417> and will
+be in GnuTLS 3.7.3.  Upstream commit:
+
+commit 110e2172dbef1fbdf7399dab1e80780847b61c0c
+Author: Ludovic Courtès <ludo@gnu.org>
+Date:   Sat Apr 24 22:02:14 2021 +0200
+
+    guile: Writes to record ports handle EAGAIN/EINTR transparently.
+
+diff --git a/guile/src/core.c b/guile/src/core.c
+index a13670fc7b..0926dc8a97 100644
+--- a/guile/src/core.c
++++ b/guile/src/core.c
+@@ -985,7 +985,10 @@ write_to_session_record_port (SCM port, const void *data, size_t size)
+       c_result = gnutls_record_send (c_session, (char *) data + c_sent,
+                                      size - c_sent);
+       if (EXPECT_FALSE (c_result < 0))
+-        scm_gnutls_error (c_result, FUNC_NAME);
++	{
++	  if (c_result != GNUTLS_E_AGAIN && c_result != GNUTLS_E_INTERRUPTED)
++	    scm_gnutls_error (c_result, FUNC_NAME);
++	}
+       else
+         c_sent += c_result;
+     }
+@@ -1069,7 +1072,8 @@ read_from_session_record_port (SCM port, SCM dst, size_t start, size_t count)
+ #undef FUNC_NAME
+ 
+ /* Return the file descriptor that backs PORT.  This function is called upon a
+-   blocking read--i.e., 'read_from_session_record_port' returned -1.  */
++   blocking read--i.e., 'read_from_session_record_port' or
++   'write_to_session_record_port' returned -1.  */
+ static int
+ session_record_port_fd (SCM port)
+ {
+@@ -1097,7 +1101,16 @@ write_to_session_record_port (SCM port, SCM src, size_t start, size_t count)
+   c_session = scm_to_gnutls_session (session, 1, FUNC_NAME);
+   data = (char *) SCM_BYTEVECTOR_CONTENTS (src) + start;
+ 
+-  result = gnutls_record_send (c_session, data, count);
++  do
++    result = gnutls_record_send (c_session, data, count);
++  while (result == GNUTLS_E_INTERRUPTED
++	 || (result == GNUTLS_E_AGAIN
++	     && !SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session)));
++
++  if (result == GNUTLS_E_AGAIN
++      && SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session))
++    /* Tell Guile that reading would block.  */
++    return (size_t) -1;
+ 
+   if (EXPECT_FALSE (result < 0))
+     scm_gnutls_error (result, FUNC_NAME);
diff --git a/gnu/packages/patches/graphviz-CVE-2020-18032.patch b/gnu/packages/patches/graphviz-CVE-2020-18032.patch
deleted file mode 100644
index 4cf94a9a36..0000000000
--- a/gnu/packages/patches/graphviz-CVE-2020-18032.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Fix CVE-2020-18032:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-18032
-https://gitlab.com/graphviz/graphviz/-/issues/1700
-
-Patch copied from upstream source repository:
-
-https://gitlab.com/graphviz/graphviz/-/commit/784411ca3655c80da0f6025ab20634b2a6ff696b
-
-From 784411ca3655c80da0f6025ab20634b2a6ff696b Mon Sep 17 00:00:00 2001
-From: Matthew Fernandez <matthew.fernandez@gmail.com>
-Date: Sat, 25 Jul 2020 19:31:01 -0700
-Subject: [PATCH] fix: out-of-bounds write on invalid label
-
-When the label for a node cannot be parsed (due to it being malformed), it falls
-back on the symbol name of the node itself. I.e. the default label the node
-would have had if it had no label attribute at all. However, this is applied by
-dynamically altering the node's label to "\N", a shortcut for the symbol name of
-the node. All of this is fine, however if the hand written label itself is
-shorter than the literal string "\N", not enough memory would have been
-allocated to write "\N" into the label text.
-
-Here we account for the possibility of error during label parsing, and assume
-that the label text may need to be overwritten with "\N" after the fact. Fixes
-issue #1700.
----
- lib/common/shapes.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/lib/common/shapes.c b/lib/common/shapes.c
-index 0a0635fc3..9dca9ba6e 100644
---- a/lib/common/shapes.c
-+++ b/lib/common/shapes.c
-@@ -3546,9 +3546,10 @@ static void record_init(node_t * n)
-     reclblp = ND_label(n)->text;
-     len = strlen(reclblp);
-     /* For some forgotten reason, an empty label is parsed into a space, so
--     * we need at least two bytes in textbuf.
-+     * we need at least two bytes in textbuf, as well as accounting for the
-+     * error path involving "\\N" below.
-      */
--    len = MAX(len, 1);
-+    len = MAX(MAX(len, 1), (int)strlen("\\N"));
-     textbuf = N_NEW(len + 1, char);
-     if (!(info = parse_reclbl(n, flip, TRUE, textbuf))) {
- 	agerr(AGERR, "bad label format %s\n", ND_label(n)->text);
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/gst-libav-64channels-stack-corruption.patch b/gnu/packages/patches/gst-libav-64channels-stack-corruption.patch
deleted file mode 100644
index cc174e618d..0000000000
--- a/gnu/packages/patches/gst-libav-64channels-stack-corruption.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Fix a stack corruption when handling files with more than 64 audio
-channels:
-
-https://gstreamer.freedesktop.org/security/sa-2021-0005.html
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-libav/-/commit/dcea8baa14a5fc3b796d876baaf2f238546ba2b1
-
-diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
-index b5be4bb7a5f2712f78383da9319754a8849e3307..be22f22cf5c7c7b22b13e44b10999adaacbcca2b 100644
---- a/ext/libav/gstavcodecmap.c
-+++ b/ext/libav/gstavcodecmap.c
-@@ -102,7 +102,7 @@ gst_ffmpeg_channel_layout_to_gst (guint64 channel_layout, gint channels,
-   guint nchannels = 0;
-   gboolean none_layout = FALSE;
- 
--  if (channel_layout == 0) {
-+  if (channel_layout == 0 || channels > 64) {
-     nchannels = channels;
-     none_layout = TRUE;
-   } else {
-@@ -163,7 +163,7 @@ gst_ffmpeg_channel_layout_to_gst (guint64 channel_layout, gint channels,
-     } else {
-       guint i;
- 
--      for (i = 0; i < nchannels; i++)
-+      for (i = 0; i < nchannels && i < 64; i++)
-         pos[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
-     }
-   }
diff --git a/gnu/packages/patches/gst-plugins-bad-fix-overflow.patch b/gnu/packages/patches/gst-plugins-bad-fix-overflow.patch
deleted file mode 100644
index 95ab13db51..0000000000
--- a/gnu/packages/patches/gst-plugins-bad-fix-overflow.patch
+++ /dev/null
@@ -1,263 +0,0 @@
-Fix an overflow when calculating something for AVC/HEVC videos:
-
-https://security-tracker.debian.org/tracker/TEMP-0000000-C6AAE1
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/commit/0cfbf7ad91c7f121192c8ce135769f8eb276c41d
-From 0cfbf7ad91c7f121192c8ce135769f8eb276c41d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
-Date: Tue, 23 Mar 2021 19:19:14 +0200
-Subject: [PATCH] h2645parser: Catch overflows in AVC/HEVC NAL unit length
- calculations
-
-Offset and size are stored as 32 bit guint and might overflow when
-adding the nal_length_size, so let's avoid that.
-
-For the size this would happen if the AVC/HEVC NAL unit size happens to
-be stored in 4 bytes and is 4294967292 or higher, which is likely
-corrupted data anyway.
-
-For the offset this is something for the caller of these functions to
-take care of but is unlikely to happen as it would require parsing on a
->4GB buffer.
-
-Allowing these overflows causes all kinds of follow-up bugs in the
-h2645parse elements, ranging from infinite loops and memory leaks to
-potential memory corruptions.
-
-Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2107>
----
- gst-libs/gst/codecparsers/gsth264parser.c | 16 +++++-
- gst-libs/gst/codecparsers/gsth265parser.c | 16 +++++-
- tests/check/libs/h264parser.c             | 60 +++++++++++++++++++++++
- tests/check/libs/h265parser.c             | 60 +++++++++++++++++++++++
- 4 files changed, 150 insertions(+), 2 deletions(-)
-
-diff --git a/gst-libs/gst/codecparsers/gsth264parser.c b/gst-libs/gst/codecparsers/gsth264parser.c
-index 012f1d0d7..68aa25068 100644
---- a/gst-libs/gst/codecparsers/gsth264parser.c
-+++ b/gst-libs/gst/codecparsers/gsth264parser.c
-@@ -1556,6 +1556,14 @@ gst_h264_parser_identify_nalu_avc (GstH264NalParser * nalparser,
- 
-   memset (nalu, 0, sizeof (*nalu));
- 
-+  /* Would overflow guint below otherwise: the callers needs to ensure that
-+   * this never happens */
-+  if (offset > G_MAXUINT32 - nal_length_size) {
-+    GST_WARNING ("offset + nal_length_size overflow");
-+    nalu->size = 0;
-+    return GST_H264_PARSER_BROKEN_DATA;
-+  }
-+
-   if (size < offset + nal_length_size) {
-     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
-         ", offset %u", size, offset);
-@@ -1570,7 +1578,13 @@ gst_h264_parser_identify_nalu_avc (GstH264NalParser * nalparser,
-   nalu->sc_offset = offset;
-   nalu->offset = offset + nal_length_size;
- 
--  if (size < nalu->size + nal_length_size) {
-+  if (nalu->size > G_MAXUINT32 - nal_length_size) {
-+    GST_WARNING ("NALU size + nal_length_size overflow");
-+    nalu->size = 0;
-+    return GST_H264_PARSER_BROKEN_DATA;
-+  }
-+
-+  if (size < (gsize) nalu->size + nal_length_size) {
-     nalu->size = 0;
- 
-     return GST_H264_PARSER_NO_NAL_END;
-diff --git a/gst-libs/gst/codecparsers/gsth265parser.c b/gst-libs/gst/codecparsers/gsth265parser.c
-index 26e68b276..dc7f27aa9 100644
---- a/gst-libs/gst/codecparsers/gsth265parser.c
-+++ b/gst-libs/gst/codecparsers/gsth265parser.c
-@@ -1531,6 +1531,14 @@ gst_h265_parser_identify_nalu_hevc (GstH265Parser * parser,
- 
-   memset (nalu, 0, sizeof (*nalu));
- 
-+  /* Would overflow guint below otherwise: the callers needs to ensure that
-+   * this never happens */
-+  if (offset > G_MAXUINT32 - nal_length_size) {
-+    GST_WARNING ("offset + nal_length_size overflow");
-+    nalu->size = 0;
-+    return GST_H265_PARSER_BROKEN_DATA;
-+  }
-+
-   if (size < offset + nal_length_size) {
-     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
-         ", offset %u", size, offset);
-@@ -1545,7 +1553,13 @@ gst_h265_parser_identify_nalu_hevc (GstH265Parser * parser,
-   nalu->sc_offset = offset;
-   nalu->offset = offset + nal_length_size;
- 
--  if (size < nalu->size + nal_length_size) {
-+  if (nalu->size > G_MAXUINT32 - nal_length_size) {
-+    GST_WARNING ("NALU size + nal_length_size overflow");
-+    nalu->size = 0;
-+    return GST_H265_PARSER_BROKEN_DATA;
-+  }
-+
-+  if (size < (gsize) nalu->size + nal_length_size) {
-     nalu->size = 0;
- 
-     return GST_H265_PARSER_NO_NAL_END;
-diff --git a/tests/check/libs/h264parser.c b/tests/check/libs/h264parser.c
-index c7c46d9a2..d322dd8db 100644
---- a/tests/check/libs/h264parser.c
-+++ b/tests/check/libs/h264parser.c
-@@ -229,6 +229,65 @@ GST_START_TEST (test_h264_parse_slice_5bytes)
- 
- GST_END_TEST;
- 
-+GST_START_TEST (test_h264_parse_identify_nalu_avc)
-+{
-+  GstH264ParserResult res;
-+  GstH264NalUnit nalu;
-+  GstH264NalParser *const parser = gst_h264_nal_parser_new ();
-+  /* Skip 3 bytes for the start code */
-+  const gsize nal_size = sizeof (slice_dpa) - 3;
-+  const gsize buf_size = 4 + nal_size;
-+  guint8 *buf = g_new (guint8, buf_size);
-+
-+  memcpy (buf + 4, slice_dpa + 3, nal_size);
-+
-+  GST_WRITE_UINT16_BE (buf + 2, nal_size);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 2, buf_size, 2, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_OK);
-+  assert_equals_int (nalu.type, GST_H264_NAL_SLICE_DPA);
-+  assert_equals_int (nalu.offset, 4);
-+  assert_equals_int (nalu.size, nal_size);
-+
-+  GST_WRITE_UINT32_BE (buf, nal_size);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_OK);
-+  assert_equals_int (nalu.type, GST_H264_NAL_SLICE_DPA);
-+  assert_equals_int (nalu.offset, 4);
-+  assert_equals_int (nalu.size, nal_size);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 2);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 3);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 4);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_NO_NAL_END);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 6);
-+  res = gst_h264_parser_identify_nalu_avc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H264_PARSER_NO_NAL_END);
-+
-+  g_free (buf);
-+  gst_h264_nal_parser_free (parser);
-+}
-+
-+GST_END_TEST;
-+
- static guint8 nalu_sps_with_vui[] = {
-   0x00, 0x00, 0x00, 0x01, 0x67, 0x64, 0x00, 0x28,
-   0xac, 0xd9, 0x40, 0x78, 0x04, 0x4f, 0xde, 0x03,
-@@ -666,6 +725,7 @@ h264parser_suite (void)
-   tcase_add_test (tc_chain, test_h264_parse_slice_dpa);
-   tcase_add_test (tc_chain, test_h264_parse_slice_eoseq_slice);
-   tcase_add_test (tc_chain, test_h264_parse_slice_5bytes);
-+  tcase_add_test (tc_chain, test_h264_parse_identify_nalu_avc);
-   tcase_add_test (tc_chain, test_h264_parse_invalid_sei);
-   tcase_add_test (tc_chain, test_h264_create_sei);
- 
-diff --git a/tests/check/libs/h265parser.c b/tests/check/libs/h265parser.c
-index 0a0e4db97..5b6a215ec 100644
---- a/tests/check/libs/h265parser.c
-+++ b/tests/check/libs/h265parser.c
-@@ -255,6 +255,65 @@ GST_START_TEST (test_h265_parse_slice_6bytes)
- 
- GST_END_TEST;
- 
-+GST_START_TEST (test_h265_parse_identify_nalu_hevc)
-+{
-+  GstH265ParserResult res;
-+  GstH265NalUnit nalu;
-+  GstH265Parser *parser = gst_h265_parser_new ();
-+  /* Skip 4 bytes for the start code */
-+  const gsize nal_size = sizeof (slice_eos_slice_eob) - 4;
-+  const gsize buf_size = 4 + nal_size;
-+  guint8 *buf = g_new (guint8, buf_size);
-+
-+  memcpy (buf + 4, slice_eos_slice_eob + 4, nal_size);
-+
-+  GST_WRITE_UINT16_BE (buf + 2, nal_size);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 2, buf_size, 2, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_OK);
-+  assert_equals_int (nalu.type, GST_H265_NAL_SLICE_IDR_W_RADL);
-+  assert_equals_int (nalu.offset, 4);
-+  assert_equals_int (nalu.size, nal_size);
-+
-+  GST_WRITE_UINT32_BE (buf, nal_size);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_OK);
-+  assert_equals_int (nalu.type, GST_H265_NAL_SLICE_IDR_W_RADL);
-+  assert_equals_int (nalu.offset, 4);
-+  assert_equals_int (nalu.size, nal_size);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 2);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 3);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_BROKEN_DATA);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 4);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
-+
-+  GST_WRITE_UINT32_BE (buf, G_MAXUINT32 - 6);
-+  res = gst_h265_parser_identify_nalu_hevc (parser, buf, 0, buf_size, 4, &nalu);
-+
-+  assert_equals_int (res, GST_H265_PARSER_NO_NAL_END);
-+
-+  g_free (buf);
-+  gst_h265_parser_free (parser);
-+}
-+
-+GST_END_TEST;
-+
- GST_START_TEST (test_h265_base_profiles)
- {
-   GstH265ProfileTierLevel ptl;
-@@ -1101,6 +1160,7 @@ h265parser_suite (void)
-   tcase_add_test (tc_chain, test_h265_parse_slice_eos_slice_eob);
-   tcase_add_test (tc_chain, test_h265_parse_pic_timing);
-   tcase_add_test (tc_chain, test_h265_parse_slice_6bytes);
-+  tcase_add_test (tc_chain, test_h265_parse_identify_nalu_hevc);
-   tcase_add_test (tc_chain, test_h265_base_profiles);
-   tcase_add_test (tc_chain, test_h265_base_profiles_compat);
-   tcase_add_test (tc_chain, test_h265_format_range_profiles_exact_match);
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/gst-plugins-base-fix-id3v2-invalid-read.patch b/gnu/packages/patches/gst-plugins-base-fix-id3v2-invalid-read.patch
deleted file mode 100644
index b2dfef0118..0000000000
--- a/gnu/packages/patches/gst-plugins-base-fix-id3v2-invalid-read.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Fix an "invalid read during ID3v2 tag parsing".
-
-https://security-tracker.debian.org/tracker/TEMP-0000000-57E7C1
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/876
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/f4a1428a6997658625d529b9db60fde812fbf1ee
-
-From f4a1428a6997658625d529b9db60fde812fbf1ee Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <tim@centricular.com>
-Date: Wed, 3 Mar 2021 01:08:25 +0000
-Subject: [PATCH] tag: id3v2: fix frame size check and potential invalid reads
-
-Check the right variable when checking if there's
-enough data left to read the frame size.
-
-Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/876
-
-Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1065>
----
- gst-libs/gst/tag/id3v2frames.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c
-index 8e9f78254..f39659bf7 100644
---- a/gst-libs/gst/tag/id3v2frames.c
-+++ b/gst-libs/gst/tag/id3v2frames.c
-@@ -109,7 +109,7 @@ id3v2_parse_frame (ID3TagsWorking * work)
- 
-   if (work->frame_flags & (ID3V2_FRAME_FORMAT_COMPRESSION |
-           ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR)) {
--    if (work->hdr.frame_data_size <= 4)
-+    if (frame_data_size <= 4)
-       return FALSE;
-     if (ID3V2_VER_MAJOR (work->hdr.version) == 3) {
-       work->parse_size = GST_READ_UINT32_BE (frame_data);
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/gst-plugins-good-CVE-2021-3497.patch b/gnu/packages/patches/gst-plugins-good-CVE-2021-3497.patch
deleted file mode 100644
index c8c3ee6cf1..0000000000
--- a/gnu/packages/patches/gst-plugins-good-CVE-2021-3497.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-Fix CVE-2021-3497:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3497
-https://gstreamer.freedesktop.org/security/sa-2021-0002.html
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/commit/9181191511f9c0be6a89c98b311f49d66bd46dc3?merge_request_iid=903
-
-diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
-index 467815986c8c3d86fd8906a0d539b34f67d6693e..0e47ee7b5e25ac3331f30439710ae755235f2a22 100644
---- a/gst/matroska/matroska-demux.c
-+++ b/gst/matroska/matroska-demux.c
-@@ -3851,6 +3851,12 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
-     guint32 block_samples, tmp;
-     gsize size = gst_buffer_get_size (*buf);
- 
-+    if (size < 4) {
-+      GST_ERROR_OBJECT (element, "Too small wavpack buffer");
-+      gst_buffer_unmap (*buf, &map);
-+      return GST_FLOW_ERROR;
-+    }
-+
-     gst_buffer_extract (*buf, 0, &tmp, sizeof (guint32));
-     block_samples = GUINT32_FROM_LE (tmp);
-     /* we need to reconstruct the header of the wavpack block */
-@@ -3858,10 +3864,10 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
-     /* -20 because ck_size is the size of the wavpack block -8
-      * and lace_size is the size of the wavpack block + 12
-      * (the three guint32 of the header that already are in the buffer) */
--    wvh.ck_size = size + sizeof (Wavpack4Header) - 20;
-+    wvh.ck_size = size + WAVPACK4_HEADER_SIZE - 20;
- 
-     /* block_samples, flags and crc are already in the buffer */
--    newbuf = gst_buffer_new_allocate (NULL, sizeof (Wavpack4Header) - 12, NULL);
-+    newbuf = gst_buffer_new_allocate (NULL, WAVPACK4_HEADER_SIZE - 12, NULL);
- 
-     gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE);
-     data = outmap.data;
-@@ -3886,9 +3892,11 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
-     audiocontext->wvpk_block_index += block_samples;
-   } else {
-     guint8 *outdata = NULL;
--    guint outpos = 0;
--    gsize buf_size, size, out_size = 0;
-+    gsize buf_size, size;
-     guint32 block_samples, flags, crc, blocksize;
-+    GstAdapter *adapter;
-+
-+    adapter = gst_adapter_new ();
- 
-     gst_buffer_map (*buf, &map, GST_MAP_READ);
-     buf_data = map.data;
-@@ -3897,6 +3905,7 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
-     if (buf_size < 4) {
-       GST_ERROR_OBJECT (element, "Too small wavpack buffer");
-       gst_buffer_unmap (*buf, &map);
-+      g_object_unref (adapter);
-       return GST_FLOW_ERROR;
-     }
- 
-@@ -3918,59 +3927,57 @@ gst_matroska_demux_add_wvpk_header (GstElement * element,
-       data += 4;
-       size -= 4;
- 
--      if (blocksize == 0 || size < blocksize)
--        break;
--
--      g_assert ((newbuf == NULL) == (outdata == NULL));
-+      if (blocksize == 0 || size < blocksize) {
-+        GST_ERROR_OBJECT (element, "Too small wavpack buffer");
-+        gst_buffer_unmap (*buf, &map);
-+        g_object_unref (adapter);
-+        return GST_FLOW_ERROR;
-+      }
- 
--      if (newbuf == NULL) {
--        out_size = sizeof (Wavpack4Header) + blocksize;
--        newbuf = gst_buffer_new_allocate (NULL, out_size, NULL);
-+      g_assert (newbuf == NULL);
- 
--        gst_buffer_copy_into (newbuf, *buf,
--            GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS, 0, -1);
-+      newbuf =
-+          gst_buffer_new_allocate (NULL, WAVPACK4_HEADER_SIZE + blocksize,
-+          NULL);
-+      gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE);
-+      outdata = outmap.data;
-+
-+      outdata[0] = 'w';
-+      outdata[1] = 'v';
-+      outdata[2] = 'p';
-+      outdata[3] = 'k';
-+      outdata += 4;
-+
-+      GST_WRITE_UINT32_LE (outdata, blocksize + WAVPACK4_HEADER_SIZE - 8);
-+      GST_WRITE_UINT16_LE (outdata + 4, wvh.version);
-+      GST_WRITE_UINT8 (outdata + 6, wvh.track_no);
-+      GST_WRITE_UINT8 (outdata + 7, wvh.index_no);
-+      GST_WRITE_UINT32_LE (outdata + 8, wvh.total_samples);
-+      GST_WRITE_UINT32_LE (outdata + 12, wvh.block_index);
-+      GST_WRITE_UINT32_LE (outdata + 16, block_samples);
-+      GST_WRITE_UINT32_LE (outdata + 20, flags);
-+      GST_WRITE_UINT32_LE (outdata + 24, crc);
-+      outdata += 28;
-+
-+      memcpy (outdata, data, blocksize);
- 
--        outpos = 0;
--        gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE);
--        outdata = outmap.data;
--      } else {
--        gst_buffer_unmap (newbuf, &outmap);
--        out_size += sizeof (Wavpack4Header) + blocksize;
--        gst_buffer_set_size (newbuf, out_size);
--        gst_buffer_map (newbuf, &outmap, GST_MAP_WRITE);
--        outdata = outmap.data;
--      }
-+      gst_buffer_unmap (newbuf, &outmap);
-+      gst_adapter_push (adapter, newbuf);
-+      newbuf = NULL;
- 
--      outdata[outpos] = 'w';
--      outdata[outpos + 1] = 'v';
--      outdata[outpos + 2] = 'p';
--      outdata[outpos + 3] = 'k';
--      outpos += 4;
--
--      GST_WRITE_UINT32_LE (outdata + outpos,
--          blocksize + sizeof (Wavpack4Header) - 8);
--      GST_WRITE_UINT16_LE (outdata + outpos + 4, wvh.version);
--      GST_WRITE_UINT8 (outdata + outpos + 6, wvh.track_no);
--      GST_WRITE_UINT8 (outdata + outpos + 7, wvh.index_no);
--      GST_WRITE_UINT32_LE (outdata + outpos + 8, wvh.total_samples);
--      GST_WRITE_UINT32_LE (outdata + outpos + 12, wvh.block_index);
--      GST_WRITE_UINT32_LE (outdata + outpos + 16, block_samples);
--      GST_WRITE_UINT32_LE (outdata + outpos + 20, flags);
--      GST_WRITE_UINT32_LE (outdata + outpos + 24, crc);
--      outpos += 28;
--
--      memmove (outdata + outpos, data, blocksize);
--      outpos += blocksize;
-       data += blocksize;
-       size -= blocksize;
-     }
-     gst_buffer_unmap (*buf, &map);
--    gst_buffer_unref (*buf);
- 
--    if (newbuf)
--      gst_buffer_unmap (newbuf, &outmap);
-+    newbuf = gst_adapter_take_buffer (adapter, gst_adapter_available (adapter));
-+    g_object_unref (adapter);
- 
-+    gst_buffer_copy_into (newbuf, *buf,
-+        GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS, 0, -1);
-+    gst_buffer_unref (*buf);
-     *buf = newbuf;
-+
-     audiocontext->wvpk_block_index += block_samples;
-   }
- 
-diff --git a/gst/matroska/matroska-ids.h b/gst/matroska/matroska-ids.h
-index 429213f778063ba0063944ab64ad60373bbce5ee..8d4a685a910ec13100a3c3d156b2412d28ec0522 100644
---- a/gst/matroska/matroska-ids.h
-+++ b/gst/matroska/matroska-ids.h
-@@ -688,6 +688,8 @@ typedef struct _Wavpack4Header {
-   guint32 crc;           /* crc for actual decoded data                    */
- } Wavpack4Header;
- 
-+#define WAVPACK4_HEADER_SIZE (32)
-+
- typedef enum {
-   GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0),
-   GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1),
diff --git a/gnu/packages/patches/gst-plugins-good-CVE-2021-3498.patch b/gnu/packages/patches/gst-plugins-good-CVE-2021-3498.patch
deleted file mode 100644
index 50eb42f126..0000000000
--- a/gnu/packages/patches/gst-plugins-good-CVE-2021-3498.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Fix CVE-2021-3498:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3498
-https://gstreamer.freedesktop.org/security/sa-2021-0003.html
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/commit/02174790726dd20a5c73ce2002189bf240ad4fe0?merge_request_iid=903
-
-diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
-index 4d0234743b8cf243b4521e56ef9027ba23b1b5d0..467815986c8c3d86fd8906a0d539b34f67d6693e 100644
---- a/gst/matroska/matroska-demux.c
-+++ b/gst/matroska/matroska-demux.c
-@@ -692,6 +692,8 @@ gst_matroska_demux_parse_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml,
- 
-   DEBUG_ELEMENT_START (demux, ebml, "TrackEntry");
- 
-+  *dest_context = NULL;
-+
-   /* start with the master */
-   if ((ret = gst_ebml_read_master (ebml, &id)) != GST_FLOW_OK) {
-     DEBUG_ELEMENT_STOP (demux, ebml, "TrackEntry", ret);
diff --git a/gnu/packages/patches/gst-plugins-ugly-fix-out-of-bound-reads.patch b/gnu/packages/patches/gst-plugins-ugly-fix-out-of-bound-reads.patch
deleted file mode 100644
index 3c6a96f45d..0000000000
--- a/gnu/packages/patches/gst-plugins-ugly-fix-out-of-bound-reads.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-Fix out of bounds reads when parsing audio and video packets:
-
-https://security-tracker.debian.org/tracker/TEMP-0000000-4DAA44
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/commit/3aba7d1e625554b2407bc77b3d09b4928b937d5f
-From 3aba7d1e625554b2407bc77b3d09b4928b937d5f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
-Date: Wed, 3 Mar 2021 11:05:14 +0200
-Subject: [PATCH] rmdemux: Make sure we have enough data available when parsing
- audio/video packets
-
-Otherwise there will be out-of-bounds reads and potential crashes.
-
-Thanks to Natalie Silvanovich for reporting.
-
-Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
-
-Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/74>
----
- gst/realmedia/rmdemux.c | 35 +++++++++++++++++++++++++++++++++++
- 1 file changed, 35 insertions(+)
-
-diff --git a/gst/realmedia/rmdemux.c b/gst/realmedia/rmdemux.c
-index 6cc659a1..68b0736b 100644
---- a/gst/realmedia/rmdemux.c
-+++ b/gst/realmedia/rmdemux.c
-@@ -2223,6 +2223,9 @@ gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
- 
-   gst_buffer_map (in, &map, GST_MAP_READ);
- 
-+  if (map.size < offset)
-+    goto not_enough_data;
-+
-   data = map.data + offset;
-   size = map.size - offset;
- 
-@@ -2289,6 +2292,9 @@ gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
-     }
-     GST_DEBUG_OBJECT (rmdemux, "fragment size %d", fragment_size);
- 
-+    if (map.size < (data - map.data) + fragment_size)
-+      goto not_enough_data;
-+
-     /* get the fragment */
-     fragment =
-         gst_buffer_copy_region (in, GST_BUFFER_COPY_ALL, data - map.data,
-@@ -2437,6 +2443,9 @@ gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
-   GstFlowReturn ret;
-   GstBuffer *buffer;
- 
-+  if (gst_buffer_get_size (in) < offset)
-+    goto not_enough_data;
-+
-   buffer = gst_buffer_copy_region (in, GST_BUFFER_COPY_MEMORY, offset, -1);
- 
-   if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
-@@ -2467,9 +2476,19 @@ gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
-     ret = gst_pad_push (stream->pad, buffer);
-   }
- 
-+done:
-   gst_buffer_unref (in);
- 
-   return ret;
-+
-+  /* ERRORS */
-+not_enough_data:
-+  {
-+    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
-+        (NULL));
-+    ret = GST_FLOW_OK;
-+    goto done;
-+  }
- }
- 
- static GstFlowReturn
-@@ -2490,6 +2509,9 @@ gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
-   data = map.data;
-   size = map.size;
- 
-+  if (size < 4 + 6 + 1 + 2)
-+    goto not_enough_data;
-+
-   /* stream number */
-   id = RMDEMUX_GUINT16_GET (data);
- 
-@@ -2525,6 +2547,9 @@ gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
- 
-   /* version 1 has an extra byte */
-   if (version == 1) {
-+    if (size < 1)
-+      goto not_enough_data;
-+
-     data += 1;
-     size -= 1;
-   }
-@@ -2596,6 +2621,16 @@ unknown_stream:
-     gst_buffer_unref (in);
-     return GST_FLOW_OK;
-   }
-+
-+  /* ERRORS */
-+not_enough_data:
-+  {
-+    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
-+        (NULL));
-+    gst_buffer_unmap (in, &map);
-+    gst_buffer_unref (in);
-+    return GST_FLOW_OK;
-+  }
- }
- 
- gboolean
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch b/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch
new file mode 100644
index 0000000000..710f208285
--- /dev/null
+++ b/gnu/packages/patches/gtk-doc-respect-xml-catalog.patch
@@ -0,0 +1,16 @@
+Taken from here:
+https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/documentation/gtk-doc/respect-xml-catalog-files-var.patch.
+
+--- a/m4/gtkdoc_jh_check_xml_catalog.m4
++++ b/m4/gtkdoc_jh_check_xml_catalog.m4
+@@ -5,8 +5,8 @@
+ [
+ 	AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+ 	AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-	if $jh_found_xmlcatalog && \
+-		AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++	# empty argument forces libxml to use XML_CATALOG_FILES variable
++	if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+ 		AC_MSG_RESULT([found])
+ 		ifelse([$3],,,[$3])
+ 	else
diff --git a/gnu/packages/patches/gtk2-fix-builder-test.patch b/gnu/packages/patches/gtk2-fix-builder-test.patch
new file mode 100644
index 0000000000..8c41e596fe
--- /dev/null
+++ b/gnu/packages/patches/gtk2-fix-builder-test.patch
@@ -0,0 +1,94 @@
+From e45e11238036e06c8fe78bea1691b256ca41837b Mon Sep 17 00:00:00 2001
+From: Steve Langasek <steve.langasek@ubuntu.com>
+Date: Tue, 7 Jan 2014 13:55:28 +0100
+Subject: [PATCH] fix prototypes of signal callbacks in the test suite
+
+The signal callbacks are defined to take pointers as their arguments, but the
+callbacks found in testsuite/gtk/builder.c are passing a GParamSpec by value
+as the second argument.  This confuses and angers the compiler on ppc64el,
+resulting in segfaults after return from the function due to stack-smashing
+by the (completely-unused) argument.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=721700
+---
+
+This is a backport to v2.24.33 of upstream commit:
+
+https://gitlab.gnome.org/GNOME/gtk/-/commit/256561db2f0b34e01047f8882b3e0cb8c6d9dbab
+
+ gtk/tests/builder.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/gtk/tests/builder.c b/gtk/tests/builder.c
+index 8529dacc2f6e..23d5096062fa 100644
+--- a/gtk/tests/builder.c
++++ b/gtk/tests/builder.c
+@@ -132,7 +132,7 @@ static int object = 0;
+ static int object_after = 0;
+ 
+ void /* exported for GtkBuilder */
+-signal_normal (GtkWindow *window, GParamSpec spec)
++signal_normal (GtkWindow *window, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_WINDOW (window));
+   g_assert (normal == 0);
+@@ -142,7 +142,7 @@ signal_normal (GtkWindow *window, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_after (GtkWindow *window, GParamSpec spec)
++signal_after (GtkWindow *window, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_WINDOW (window));
+   g_assert (normal == 1);
+@@ -152,7 +152,7 @@ signal_after (GtkWindow *window, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_object (GtkButton *button, GParamSpec spec)
++signal_object (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_BUTTON (button));
+   g_assert (object == 0);
+@@ -162,7 +162,7 @@ signal_object (GtkButton *button, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_object_after (GtkButton *button, GParamSpec spec)
++signal_object_after (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (GTK_IS_BUTTON (button));
+   g_assert (object == 1);
+@@ -172,28 +172,28 @@ signal_object_after (GtkButton *button, GParamSpec spec)
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_first (GtkButton *button, GParamSpec spec)
++signal_first (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 0);
+   normal = 10;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_second (GtkButton *button, GParamSpec spec)
++signal_second (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 10);
+   normal = 20;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_extra (GtkButton *button, GParamSpec spec)
++signal_extra (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 20);
+   normal = 30;
+ }
+ 
+ void /* exported for GtkBuilder */
+-signal_extra2 (GtkButton *button, GParamSpec spec)
++signal_extra2 (GtkButton *button, GParamSpec *spec)
+ {
+   g_assert (normal == 30);
+   normal = 40;
diff --git a/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch b/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch
new file mode 100644
index 0000000000..4a60023bf7
--- /dev/null
+++ b/gnu/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch
@@ -0,0 +1,51 @@
+From 889294a93fc6464c2c2919bc47f6fd85ec823363 Mon Sep 17 00:00:00 2001
+From: Raghav Gururajan <rg@raghavgururajan.name>
+Date: Tue, 18 May 2021 19:57:00 -0400
+Subject: [PATCH] [PATCH]: Honor GUIX_GTK4_PATH.
+
+This patch makes GTK look for additional modules in a list of directories
+specified by the environment variable "GUIX_GTK4_PATH". This can be used
+instead of "GTK_PATH" to make GTK find modules that are incompatible with
+other major versions of GTK.
+---
+ gtk/gtkmodules.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/gtk/gtkmodules.c b/gtk/gtkmodules.c
+index aace5dcbc9..193b6a02e9 100644
+--- a/gtk/gtkmodules.c
++++ b/gtk/gtkmodules.c
+@@ -105,6 +105,7 @@ static char **
+ get_module_path (void)
+ {
+   const char *module_path_env;
++  const gchar *module_guix_gtk4_path_env;
+   const char *exe_prefix;
+   char *module_path;
+   char *default_dir;
+@@ -114,6 +115,7 @@ get_module_path (void)
+     return result;
+ 
+   module_path_env = g_getenv ("GTK_PATH");
++  module_guix_gtk4_path_env = g_getenv ("GUIX_GTK4_PATH");
+   exe_prefix = g_getenv ("GTK_EXE_PREFIX");
+ 
+   if (exe_prefix)
+@@ -121,7 +123,13 @@ get_module_path (void)
+   else
+     default_dir = g_build_filename (_gtk_get_libdir (), "gtk-4.0", NULL);
+ 
+-  if (module_path_env)
++  if (module_guix_gtk4_path_env && module_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, module_path_env, default_dir, NULL);
++  else if (module_guix_gtk4_path_env)
++    module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
++				module_guix_gtk4_path_env, default_dir, NULL);
++  else if (module_path_env)
+     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
+ 				module_path_env, default_dir, NULL);
+   else
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/guile-email-fix-tests.patch b/gnu/packages/patches/guile-email-fix-tests.patch
new file mode 100644
index 0000000000..8621aaea02
--- /dev/null
+++ b/gnu/packages/patches/guile-email-fix-tests.patch
@@ -0,0 +1,35 @@
+This patch has been proposed upstream:
+https://lists.systemreboot.net/guile-email/87mtnv1r2p.fsf@gnu.org/T/#u.
+
+From c21fe0f0e28b80b606973d3e372e2bc8528c9766 Mon Sep 17 00:00:00 2001
+From: Mathieu Othacehe <othacehe@gnu.org>
+Date: Wed, 29 Sep 2021 12:47:35 +0000
+Subject: [PATCH 1/1] email: Do not use an empty bytevector to test the
+ charset.
+
+Using an empty bytevector no longer throws an exception since this Guile
+commit: 5ea8c69e9153a970952bf6f0b32c4fad6a28e839.
+
+* email/email.scm (post-process-content-transfer-encoding): Use a bytevector
+containg the 'e' character to test the charset validity.
+---
+ email/email.scm | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/email/email.scm b/email/email.scm
+index 3f4e194..ac70463 100644
+--- a/email/email.scm
++++ b/email/email.scm
+@@ -832,7 +832,8 @@ values. The returned headers is a string and body is a bytevector."
+   (define (valid-charset? charset)
+     (catch #t
+       (lambda ()
+-        (bytevector->string (make-bytevector 0 0) charset)
++        ;; Try to convert a bytevector containg the 'e' character.
++        (bytevector->string (make-bytevector 1 48) charset)
+         #t)
+       (const #f)))
+ 
+-- 
+2.33.0
+
diff --git a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
new file mode 100644
index 0000000000..436a11ad19
--- /dev/null
+++ b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
@@ -0,0 +1,78 @@
+diff --git a/configure.ac b/configure.ac
+index 107e6ca..20e9019 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2,6 +2,7 @@ dnl Guile-Git --- GNU Guile bindings of libgit2
+ dnl Copyright © 2016-2018 Erik Edrosa <erik.edrosa@gmail.com>
+ dnl Copyright © 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+ dnl Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
++dnl Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+ dnl
+ dnl This file is part of Guile-Git.
+ dnl
+@@ -43,15 +44,20 @@ AS_IF([test "x$LIBGIT2_LIBDIR" = "x"], [
+ ])
+ AC_SUBST([LIBGIT2_LIBDIR])
+ 
++dnl Does the 'git_remote_callbacks' struct have a 'remote_ready' field?
++dnl It was added in 1.2.0, obsoleting 'resolve_url'.
++AC_CHECK_MEMBER([git_remote_callbacks.remote_ready],
++  [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#true"],
++  [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#false"],
++  [[#include <git2.h>]])
++AC_SUBST([HAVE_REMOTE_CALLBACKS_REMOTE_READY])
++
+ dnl Does the 'git_remote_callbacks' struct have a 'resolve_url' field?
+ dnl It's missing in libgit2 0.28.5, added in 1.0.
+-AC_CHECK_MEMBER([git_remote_callbacks.resolve_url], [], [],
++AC_CHECK_MEMBER([git_remote_callbacks.resolve_url],
++  [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"],
++  [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"],
+   [[#include <git2.h>]])
+-if test "x$ac_cv_member_git_remote_callbacks_resolve_url" = "xyes"; then
+-  HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"
+-else
+-  HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"
+-fi
+ AC_SUBST([HAVE_REMOTE_CALLBACKS_RESOLVE_URL])
+ 
+ dnl Those binaries are required for ssh authentication tests.
+diff --git a/git/configuration.scm.in b/git/configuration.scm.in
+index c45f698..64c4360 100644
+--- a/git/configuration.scm.in
++++ b/git/configuration.scm.in
+@@ -19,11 +19,17 @@
+ 
+ (define-module (git configuration)
+   #:export (%libgit2
++            %have-remote-callbacks-remote-ready?
+             %have-remote-callbacks-resolve-url?))
+ 
+ (define %libgit2
+   "@LIBGIT2_LIBDIR@/libgit2")
+ 
++(define %have-remote-callbacks-remote-ready?
++  ;; True if the 'git_remote_callbacks' struct has a
++  ;; 'remote_ready' field.
++  @HAVE_REMOTE_CALLBACKS_REMOTE_READY@)
++
+ (define %have-remote-callbacks-resolve-url?
+   ;; True if the 'git_remote_callbacks' struct has a 'resolve_url' field.
+   @HAVE_REMOTE_CALLBACKS_RESOLVE_URL@)
+diff --git a/git/structs.scm b/git/structs.scm
+index ca51728..be3d050 100644
+--- a/git/structs.scm
++++ b/git/structs.scm
+@@ -637,6 +637,12 @@ type to 'specified for this to take effect."
+                (push-update-reference ,(bs:pointer uint8))
+                (push-negotiation ,(bs:pointer uint8))
+                (transport ,(bs:pointer uint8))
++
++               ;; Added in libgit2 1.2.0.
++               ,@(if %have-remote-callbacks-remote-ready?
++                     `((remote-ready ,(bs:pointer uint8)))
++                     '())
++
+                (payload ,(bs:pointer uint8))
+ 
+                ;; libgit2 1.0 added this field, which is missing from 0.28.5,
diff --git a/gnu/packages/patches/guile-ssh-fix-test-suite.patch b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
new file mode 100644
index 0000000000..dc10e08b0f
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
@@ -0,0 +1,217 @@
+From f7942cded8b65341916a555186e2219efe174cd0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Thu, 4 Feb 2021 14:38:25 -0500
+Subject: [PATCH] tests: Fix test suite for Guile 3.0.5.
+
+The test-runner object is now reset to #f when calling the 'test-end'
+procedure.  See the commit de5d1a7f99b8e952b115237ebc29633062f99bb9 in
+Guile (srfi-64: Reset test-runner-current if done) which introduced this
+change.
+
+* tests/client-server.scm (exit-status): New variable.  Use it when calling
+exit.
+* tests/dist.scm: Likewise.
+* tests/key.scm: Likewise.
+* tests/log.scm: Likewise.
+* tests/popen.scm: Likewise.
+* tests/server-client.scm: Likewise.
+* tests/server.scm: Likewise.
+* tests/session.scm: Likewise.
+* tests/shell.scm: Likewise.
+* tests/sssh-ssshd.scm: Likewise.
+* tests/tunnel.scm: Likewise.
+---
+ tests/client-server.scm | 4 +++-
+ tests/dist.scm          | 4 +++-
+ tests/key.scm           | 3 ++-
+ tests/log.scm           | 5 ++++-
+ tests/popen.scm         | 4 +++-
+ tests/server-client.scm | 4 +++-
+ tests/server.scm        | 4 +++-
+ tests/session.scm       | 4 +++-
+ tests/shell.scm         | 3 ++-
+ tests/sssh-ssshd.scm    | 4 +++-
+ tests/tunnel.scm        | 4 +++-
+ 11 files changed, 32 insertions(+), 11 deletions(-)
+
+diff --git a/tests/client-server.scm b/tests/client-server.scm
+index 432a48c..fc46140 100644
+--- a/tests/client-server.scm
++++ b/tests/client-server.scm
+@@ -743,8 +743,10 @@
+ 
+ ;;;
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "client-server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; client-server.scm ends here.
+diff --git a/tests/dist.scm b/tests/dist.scm
+index 2a3a75f..79f9e23 100644
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -269,8 +269,10 @@ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+ ;;;
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "dist")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; dist.scm ends here.
+diff --git a/tests/key.scm b/tests/key.scm
+index be31378..e1678f4 100644
+--- a/tests/key.scm
++++ b/tests/key.scm
+@@ -170,9 +170,10 @@
+                    (eq? (get-key-type key) 'ecdsa-p256)))))))
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "key")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; key.scm ends here.
+diff --git a/tests/log.scm b/tests/log.scm
+index f547202..d528251 100644
+--- a/tests/log.scm
++++ b/tests/log.scm
+@@ -64,8 +64,11 @@
+   (get-log-verbosity))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "log")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
++
+ 
+ ;;; log.scm ends here
+diff --git a/tests/popen.scm b/tests/popen.scm
+index e063e0b..fe77108 100644
+--- a/tests/popen.scm
++++ b/tests/popen.scm
+@@ -129,8 +129,10 @@
+           (format-log/scm 'nolog "open-remote-output-pipe"  "channel: ~A" channel)
+           (output-only? channel)))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "popen")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; popen.scm ends here.
+diff --git a/tests/server-client.scm b/tests/server-client.scm
+index 920aa22..b6ed3eb 100644
+--- a/tests/server-client.scm
++++ b/tests/server-client.scm
+@@ -148,8 +148,10 @@
+          (equal? x session))))))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server-client")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server-client.scm ends here.
+diff --git a/tests/server.scm b/tests/server.scm
+index c7f8b6c..1a6daea 100644
+--- a/tests/server.scm
++++ b/tests/server.scm
+@@ -157,9 +157,11 @@
+     (server-listen server)
+     #t))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server.scm ends here.
+ 
+diff --git a/tests/session.scm b/tests/session.scm
+index 8caa039..7310647 100644
+--- a/tests/session.scm
++++ b/tests/session.scm
+@@ -210,8 +210,10 @@
+   (let ((session (%make-session)))
+     (not (connected? session))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "session")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; session.scm ends here.
+diff --git a/tests/shell.scm b/tests/shell.scm
+index 7d613fb..e36e661 100644
+--- a/tests/shell.scm
++++ b/tests/shell.scm
+@@ -113,9 +113,10 @@
+ 
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "shell")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; shell.scm ends here.
+diff --git a/tests/sssh-ssshd.scm b/tests/sssh-ssshd.scm
+index 2fe23db..edb53fc 100644
+--- a/tests/sssh-ssshd.scm
++++ b/tests/sssh-ssshd.scm
+@@ -118,8 +118,10 @@
+       result)))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "sssh-ssshd")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; sssh-ssshd.scm ends here.
+diff --git a/tests/tunnel.scm b/tests/tunnel.scm
+index ef5a568..d6453b7 100644
+--- a/tests/tunnel.scm
++++ b/tests/tunnel.scm
+@@ -191,8 +191,10 @@
+                   (= pnum portnum)))
+            (eq? (channel-cancel-forward session "localhost" portnum) 'ok))))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "tunnel")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; tunnel.scm ends here.
+-- 
+2.30.0
+
diff --git a/gnu/packages/patches/guile-ssh-read-error.patch b/gnu/packages/patches/guile-ssh-read-error.patch
new file mode 100644
index 0000000000..9cc6b048a0
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-read-error.patch
@@ -0,0 +1,18 @@
+This patch adjusts to slightly different 'read-error' in Guile 3.0.6
+compared to earlier versions:
+
+  https://github.com/artyom-poptsov/guile-ssh/issues/28
+
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -183,8 +183,8 @@ Unbound variable: e"
+    rrepl-get-result))
+ 
+ (test-error-with-log/= "rrepl-get-result, unknown # object error"
+-  'node-repl-error "Reader error: scm_lreadr: #<unknown port>:1:3: \
+-Unknown # object: (#\\<): scheme@(guile-user)> \
++  'node-repl-error "Reader error: #f: #<unknown port>:1:3: \
++Unknown # object: (\"#<\"): scheme@(guile-user)> \
+ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+   (call-with-input-string
+    (string-append  "scheme@(guile-user)> $4 = "
diff --git a/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch b/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch
deleted file mode 100644
index 250eef2c8b..0000000000
--- a/gnu/packages/patches/gvfs-add-support-for-libplist-2.2.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Source: https://gitlab.gnome.org/GNOME/gvfs/-/commit/13551f3f40d41f1357126ac5a26d0fa012cd8123
-
-Note: This change should be incorporated into stable version 1.46.x of gvfs.
-
-From 13551f3f40d41f1357126ac5a26d0fa012cd8123 Mon Sep 17 00:00:00 2001
-From: Bastien Nocera <hadess@hadess.net>
-Date: Tue, 16 Jun 2020 13:28:35 +0200
-Subject: [PATCH] afc: Add support for libplist-2.2
-
-Which changed name from libplist to libplist-2.0 to embed its API
-version number in the library name.
----
- meson.build | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 1750f65ca..187bfd55f 100644
---- a/meson.build
-+++ b/meson.build
-@@ -357,7 +357,10 @@ config_h.set('HAVE_LOGIND', enable_logind)
- enable_afc = get_option('afc')
- if enable_afc
-   libimobiledevice_dep = dependency('libimobiledevice-1.0', version: '>= 1.2')
--  libplist_dep = dependency('libplist', version: '>= 0.15')
-+  libplist_dep = dependency('libplist-2.0', required: false)
-+  if not libplist_dep.found()
-+    libplist_dep = dependency('libplist', version: '>= 0.15')
-+  endif
- endif
- 
- # *** Check if we should build with GOA volume monitor ***
--- 
-GitLab
-
diff --git a/gnu/packages/patches/helm-fix-gcc-9-build.patch b/gnu/packages/patches/helm-fix-gcc-9-build.patch
new file mode 100644
index 0000000000..f623fef203
--- /dev/null
+++ b/gnu/packages/patches/helm-fix-gcc-9-build.patch
@@ -0,0 +1,140 @@
+From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001
+From: jikstra <jikstra@disroot.org>
+Date: Tue, 20 Aug 2019 03:00:51 +0200
+Subject: [PATCH] Backport
+ https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6
+ to the bundled JUCE framework to make helm compile on gcc 9.1 again
+
+---
+ .../juce_graphics/colour/juce_PixelFormats.h  | 25 +---------
+ .../native/juce_RenderingHelpers.h            | 48 +------------------
+ 2 files changed, 4 insertions(+), 69 deletions(-)
+
+diff --git a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+index 9be9ba09c..3535eab80 100644
+--- a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
++++ b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+@@ -105,23 +105,9 @@ class JUCE_API  PixelARGB
+ 

+     //==============================================================================

+     forcedinline uint8 getAlpha() const noexcept      { return components.a; }

+-    forcedinline uint8 getRed() const noexcept        { return components.r; }

++    forcedinline uint8 getRed()   const noexcept      { return components.r; }

+     forcedinline uint8 getGreen() const noexcept      { return components.g; }

+-    forcedinline uint8 getBlue() const noexcept       { return components.b; }

+-

+-   #if JUCE_GCC

+-    // NB these are here as a workaround because GCC refuses to bind to packed values.

+-    forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }

+-    forcedinline uint8& getRed() noexcept             { return comps [indexR]; }

+-    forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }

+-    forcedinline uint8& getBlue() noexcept            { return comps [indexB]; }

+-   #else

+-    forcedinline uint8& getAlpha() noexcept           { return components.a; }

+-    forcedinline uint8& getRed() noexcept             { return components.r; }

+-    forcedinline uint8& getGreen() noexcept           { return components.g; }

+-    forcedinline uint8& getBlue() noexcept            { return components.b; }

+-   #endif

+-

++    forcedinline uint8 getBlue()  const noexcept      { return components.b; }

+     //==============================================================================

+     /** Copies another pixel colour over this one.

+ 

+@@ -340,9 +326,6 @@ class JUCE_API  PixelARGB
+     {

+         uint32 internal;

+         Components components;

+-       #if JUCE_GCC

+-        uint8 comps[4];  // helper struct needed because gcc does not allow references to packed union members

+-       #endif

+     };

+ }

+ #ifndef DOXYGEN

+@@ -429,10 +412,6 @@ class JUCE_API  PixelRGB
+     forcedinline uint8 getGreen() const noexcept    { return g; }

+     forcedinline uint8 getBlue() const noexcept     { return b; }

+ 

+-    forcedinline uint8& getRed() noexcept           { return r; }

+-    forcedinline uint8& getGreen() noexcept         { return g; }

+-    forcedinline uint8& getBlue() noexcept          { return b; }

+-

+     //==============================================================================

+     /** Copies another pixel colour over this one.

+ 

+diff --git a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+index 1c4cd31ef..29519cb5a 100644
+--- a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
++++ b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+@@ -581,18 +581,10 @@ namespace EdgeTableFillers
+             : destData (image), sourceColour (colour)

+         {

+             if (sizeof (PixelType) == 3 && destData.pixelStride == sizeof (PixelType))

+-            {

+                 areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen()

+                                             && sourceColour.getGreen() == sourceColour.getBlue();

+-                filler[0].set (sourceColour);

+-                filler[1].set (sourceColour);

+-                filler[2].set (sourceColour);

+-                filler[3].set (sourceColour);

+-            }

+             else

+-            {

+                 areRGBComponentsEqual = false;

+-            }

+         }

+ 

+         forcedinline void setEdgeTableYPos (const int y) noexcept

+@@ -643,7 +635,6 @@ namespace EdgeTableFillers
+         const Image::BitmapData& destData;

+         PixelType* linePixels;

+         PixelARGB sourceColour;

+-        PixelRGB filler [4];

+         bool areRGBComponentsEqual;

+ 

+         forcedinline PixelType* getPixel (const int x) const noexcept

+@@ -658,43 +649,8 @@ namespace EdgeTableFillers
+ 

+         forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept

+         {

+-            if (destData.pixelStride == sizeof (*dest))

+-            {

+-                if (areRGBComponentsEqual)  // if all the component values are the same, we can cheat..

+-                {

+-                    memset (dest, colour.getRed(), (size_t) width * 3);

+-                }

+-                else

+-                {

+-                    if (width >> 5)

+-                    {

+-                        const int* const intFiller = reinterpret_cast<const int*> (filler);

+-

+-                        while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)

+-                        {

+-                            dest->set (colour);

+-                            ++dest;

+-                            --width;

+-                        }

+-

+-                        while (width > 4)

+-                        {

+-                            int* d = reinterpret_cast<int*> (dest);

+-                            *d++ = intFiller[0];

+-                            *d++ = intFiller[1];

+-                            *d++ = intFiller[2];

+-                            dest = reinterpret_cast<PixelRGB*> (d);

+-                            width -= 4;

+-                        }

+-                    }

+-

+-                    while (--width >= 0)

+-                    {

+-                        dest->set (colour);

+-                        ++dest;

+-                    }

+-                }

+-            }

++            if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual)

++                memset ((void*) dest, colour.getRed(), (size_t) width * 3);   // if all the component values are the same, we can cheat..

+             else

+             {

+                 JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))

diff --git a/gnu/packages/patches/icu4c-CVE-2020-10531.patch b/gnu/packages/patches/icu4c-CVE-2020-10531.patch
deleted file mode 100644
index c2ab923bdc..0000000000
--- a/gnu/packages/patches/icu4c-CVE-2020-10531.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-Fix CVE-2020-10531:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531
-
-Patch copied from upstream source repository (changes to the test suite
-are commented out):
-
-https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca
-
-From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001
-From: Frank Tang <ftang@chromium.org>
-Date: Sat, 1 Feb 2020 02:39:04 +0000
-Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append
-
-See #971
----
- icu4c/source/common/unistr.cpp          |  6 ++-
- icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++
- icu4c/source/test/intltest/ustrtest.h   |  1 +
- 3 files changed, 68 insertions(+), 1 deletion(-)
-
-diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp
-index 901bb3358ba..077b4d6ef20 100644
---- a/icu4c/source/common/unistr.cpp
-+++ b/icu4c/source/common/unistr.cpp
-@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
-   }
- 
-   int32_t oldLength = length();
--  int32_t newLength = oldLength + srcLength;
-+  int32_t newLength;
-+  if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
-+    setToBogus();
-+    return *this;
-+  }
- 
-   // Check for append onto ourself
-   const UChar* oldArray = getArrayStart();
-#diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
-#index b6515ea813c..ad38bdf53a3 100644
-#--- a/icu4c/source/test/intltest/ustrtest.cpp
-#+++ b/icu4c/source/test/intltest/ustrtest.cpp
-#@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
-#     TESTCASE_AUTO(TestWCharPointers);
-#     TESTCASE_AUTO(TestNullPointers);
-#     TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
-#+    TESTCASE_AUTO(TestLargeAppend);
-#     TESTCASE_AUTO_END;
-# }
-# 
-#@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
-#     str.insert(2, sub);
-#     assertEquals("", u"abbcdcde", str);
-# }
-#+
-#+void UnicodeStringTest::TestLargeAppend() {
-#+    if(quick) return;
-#+
-#+    IcuTestErrorCode status(*this, "TestLargeAppend");
-#+    // Make a large UnicodeString
-#+    int32_t len = 0xAFFFFFF;
-#+    UnicodeString str;
-#+    char16_t *buf = str.getBuffer(len);
-#+    // A fast way to set buffer to valid Unicode.
-#+    // 4E4E is a valid unicode character
-#+    uprv_memset(buf, 0x4e, len * 2);
-#+    str.releaseBuffer(len);
-#+    UnicodeString dest;
-#+    // Append it 16 times
-#+    // 0xAFFFFFF times 16 is 0xA4FFFFF1,
-#+    // which is greater than INT32_MAX, which is 0x7FFFFFFF.
-#+    int64_t total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+    dest.remove();
-#+    total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total + len <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else if (total <= INT32_MAX) {
-#+            // Check that a string of exactly the maximum size works
-#+            UnicodeString str2;
-#+            int32_t remain = INT32_MAX - total;
-#+            char16_t *buf2 = str2.getBuffer(remain);
-#+            if (buf2 == nullptr) {
-#+                // if somehow memory allocation fail, return the test
-#+                return;
-#+            }
-#+            uprv_memset(buf2, 0x4e, remain * 2);
-#+            str2.releaseBuffer(remain);
-#+            dest.append(str2);
-#+            total += remain;
-#+            assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
-#+            assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+
-#+            // Check that a string size+1 goes bogus
-#+            str2.truncate(1);
-#+            dest.append(str2);
-#+            total++;
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+}
-#diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h
-#index 218befdcc68..4a356a92c7a 100644
-#--- a/icu4c/source/test/intltest/ustrtest.h
-#+++ b/icu4c/source/test/intltest/ustrtest.h
-#@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest {
-#     void TestWCharPointers();
-#     void TestNullPointers();
-#     void TestUnicodeStringInsertAppendToSelf();
-#+    void TestLargeAppend();
-# };
-# 
-# #endif
diff --git a/gnu/packages/patches/inetutils-hurd.patch b/gnu/packages/patches/inetutils-hurd.patch
deleted file mode 100644
index bd65c4feb1..0000000000
--- a/gnu/packages/patches/inetutils-hurd.patch
+++ /dev/null
@@ -1,583 +0,0 @@
-Support compiling on the Hurd.
-
-Taken from https://git.hadrons.org/cgit/debian/pkgs/inetutils.git/tree/debian/patches/0002-ifconfig-Improve-the-support-for-GNU-Hurd.patch
-
-From 9a90d9b9119906df23cb2db1503cb0f099942dd9 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Sat, 18 Jul 2015 01:12:41 +0200
-Subject: [PATCH 02/35] ifconfig: Improve the support for GNU/Hurd.
-
-Use system specific code instead of generic code.
-This provides abilities similar to other systems.
----
- ChangeLog                   |  17 +++
- ifconfig/system.c           |  10 +-
- ifconfig/system.h           |   2 +
- ifconfig/system/Makefile.am |   4 +-
- ifconfig/system/generic.c   |  14 +-
- ifconfig/system/hurd.c      | 292 ++++++++++++++++++++++++++++++++++++
- ifconfig/system/hurd.h      |  50 ++++++
- 7 files changed, 381 insertions(+), 8 deletions(-)
- create mode 100644 ifconfig/system/hurd.c
- create mode 100644 ifconfig/system/hurd.h
-
-diff --git a/ifconfig/system.c b/ifconfig/system.c
-index 30677e41..e108dc2e 100644
---- a/ifconfig/system.c
-+++ b/ifconfig/system.c
-@@ -25,10 +25,12 @@
- # include "system/solaris.c"
- #elif defined __QNX__
- # include "system/qnx.c"
--# elif defined __DragonFly__ || defined __FreeBSD__ || \
--       defined __FreeBSD_kernel__ || \
--       defined __NetBSD__ || defined __OpenBSD__
--#  include "system/bsd.c"
-+#elif defined __DragonFly__ || defined __FreeBSD__ || \
-+      defined __FreeBSD_kernel__ || \
-+      defined __NetBSD__ || defined __OpenBSD__
-+# include "system/bsd.c"
-+#elif defined __GNU__
-+# include "system/hurd.c"
- #else
- # include "system/generic.c"
- #endif
-diff --git a/ifconfig/system.h b/ifconfig/system.h
-index 8521ad95..66878d3a 100644
---- a/ifconfig/system.h
-+++ b/ifconfig/system.h
-@@ -97,6 +97,8 @@ extern struct if_nameindex* (*system_if_nameindex) (void);
-        defined __FreeBSD_kernel__ || \
-        defined __NetBSD__ || defined __OpenBSD__
- #  include "system/bsd.h"
-+# elif defined __GNU__
-+#  include "system/hurd.h"
- # else
- #  include "system/generic.h"
- # endif
-diff --git a/ifconfig/system/Makefile.am b/ifconfig/system/Makefile.am
-index 954c6774..62a9f1c4 100644
---- a/ifconfig/system/Makefile.am
-+++ b/ifconfig/system/Makefile.am
-@@ -26,8 +26,10 @@ noinst_HEADERS = \
- 	linux.h \
- 	solaris.h \
- 	qnx.h \
-+	hurd.h \
- 	bsd.c \
- 	generic.c \
- 	linux.c \
- 	solaris.c \
--	qnx.c
-+	qnx.c \
-+	hurd.c
-diff --git a/ifconfig/system/generic.c b/ifconfig/system/generic.c
-index 9a2bda55..20a78bde 100644
---- a/ifconfig/system/generic.c
-+++ b/ifconfig/system/generic.c
-@@ -22,6 +22,8 @@
- #include <config.h>
- 
- #include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
- 
- 
- /* Output format stuff.  */
-@@ -36,19 +38,25 @@ const char *system_help;
- struct argp_child system_argp_child;
- 
- int
--system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+system_parse_opt_rest (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		       int argc _GL_UNUSED_PARAMETER,
-+		       char *argv[] _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_configure (int sfd, struct ifreq *ifr, struct system_ifconfig *ifs)
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-new file mode 100644
-index 00000000..3bd19775
---- /dev/null
-+++ b/ifconfig/system/hurd.c
-@@ -0,0 +1,292 @@
-+/* hurd.c -- Code for ifconfig specific to GNU/Hurd.
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils 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 Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Mostly written by Marcus Brinkmann.
-+   Adaptions to GNU/Hurd by Mats Erik Andersson.  */
-+
-+#include <config.h>
-+
-+#include <stdlib.h>
-+#include <sys/ioctl.h>
-+#include <net/if_arp.h>
-+#include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
-+
-+
-+/* Output format stuff.  */
-+
-+const char *system_default_format = "gnu";
-+
-+
-+/* Argument parsing stuff.  */
-+
-+const char *system_help = "NAME [ADDR]\
-+ [broadcast BRDADDR] [netmask MASK]\
-+ [mtu N] [up|down] [FLAGS]";
-+
-+struct argp_child system_argp_child;
-+
-+int
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+int
-+system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+{
-+  int i = 0, mask, rev;
-+  enum {
-+    EXPECT_NOTHING,
-+    EXPECT_AF,
-+    EXPECT_BROADCAST,
-+    EXPECT_NETMASK,
-+    EXPECT_METRIC,
-+    EXPECT_MTU
-+  } expect = EXPECT_AF;
-+
-+  *ifp = parse_opt_new_ifs (argv[0]);
-+
-+  while (++i < argc)
-+    {
-+      switch (expect)
-+	{
-+	case EXPECT_BROADCAST:
-+	  parse_opt_set_brdaddr (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_NETMASK:
-+	  parse_opt_set_netmask (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_MTU:
-+	  parse_opt_set_mtu (*ifp, argv[i]);
-+	  break;
-+
-+	/* XXX: 2015-07-18, GNU/Hurd does not yet support
-+		ioctl(SIOCSIFMETRIC), but we let the code
-+		handle this standard ability anyway!
-+	 */
-+	case EXPECT_METRIC:
-+	  parse_opt_set_metric (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_AF:
-+	  expect = EXPECT_NOTHING;
-+	  if (!strcmp (argv[i], "inet"))
-+	    continue;
-+	  else if (!strcmp (argv[i], "inet6"))
-+	    {
-+	      error (0, 0, "%s is not a supported address family", argv[i]);
-+	      return 0;
-+	    }
-+	  break;
-+
-+	case EXPECT_NOTHING:
-+	  break;
-+	}
-+
-+      if (expect != EXPECT_NOTHING)
-+	expect = EXPECT_NOTHING;
-+      else if (!strcmp (argv[i], "broadcast"))
-+	expect = EXPECT_BROADCAST;
-+      else if (!strcmp (argv[i], "netmask"))
-+	expect = EXPECT_NETMASK;
-+      else if (!strcmp (argv[i], "metric"))
-+	expect = EXPECT_METRIC;
-+      else if (!strcmp (argv[i], "mtu"))
-+	expect = EXPECT_MTU;
-+      else if (!strcmp (argv[i], "up"))
-+	parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
-+      else if (!strcmp (argv[i], "down"))
-+	parse_opt_set_flag (*ifp, IFF_UP, 1);
-+      else if (((mask = if_nameztoflag (argv[i], &rev))
-+		& ~IU_IFF_CANTCHANGE) != 0)
-+	parse_opt_set_flag (*ifp, mask, rev);
-+      else
-+	{
-+	  if (!((*ifp)->valid & IF_VALID_ADDR))
-+	    parse_opt_set_address (*ifp, argv[i]);
-+	  else if (!((*ifp)->valid & IF_VALID_DSTADDR))
-+	    parse_opt_set_dstaddr (*ifp, argv[i]);
-+	}
-+    }
-+
-+  switch (expect)
-+    {
-+    case EXPECT_BROADCAST:
-+      error (0, 0, "option `broadcast' requires an argument");
-+      break;
-+
-+    case EXPECT_NETMASK:
-+      error (0, 0, "option `netmask' requires an argument");
-+      break;
-+
-+    case EXPECT_METRIC:
-+      error (0, 0, "option `metric' requires an argument");
-+      break;
-+
-+    case EXPECT_MTU:
-+      error (0, 0, "option `mtu' requires an argument");
-+      break;
-+
-+    case EXPECT_AF:
-+    case EXPECT_NOTHING:
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+struct if_nameindex* (*system_if_nameindex) (void) = if_nameindex;
-+
-+static void
-+print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-+		    unsigned char *data)
-+{
-+  *column += printf ("%02X:%02X:%02X:%02X:%02X:%02X",
-+		     data[0], data[1], data[2], data[3], data[4], data[5]);
-+  had_output = 1;
-+}
-+
-+struct arphrd_symbol
-+{
-+  const char *name;
-+  const char *title;
-+  int value;
-+  void (*print_hwaddr) (format_data_t form, unsigned char *data);
-+} arphrd_symbols[] =
-+  {
-+#ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
-+    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+#endif
-+#ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+#endif
-+    /* XXX: The image debian-hurd-20150424 returns the value 4
-+	    instead of expected ARPHRD_LOOPBACK.  This has been
-+	    discussed in the list debian-hurd, where I was asked
-+	    to resist the temptation of a work around!
-+     */
-+    { NULL, NULL, 0, NULL}
-+  };
-+
-+struct arphrd_symbol *
-+arphrd_findvalue (int value)
-+{
-+  struct arphrd_symbol *arp = arphrd_symbols;
-+  while (arp->name != NULL)
-+    {
-+      if (arp->value == value)
-+	break;
-+      arp++;
-+    }
-+  if (arp->name)
-+    return arp;
-+  else
-+    return NULL;
-+}
-+
-+void
-+system_fh_hwaddr_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  struct arphrd_symbol *arp;
-+
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    select_arg (form, argc, argv, 1);
-+
-+  arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+  select_arg (form, argc, argv, (arp && arp->print_hwaddr) ? 0 : 1);
-+#else
-+  select_arg (form, argc, argv, 1);
-+#endif
-+}
-+
-+void
-+system_fh_hwaddr (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp && arp->print_hwaddr)
-+	arp->print_hwaddr (form,
-+			   (unsigned char *) form->ifr->ifr_hwaddr.sa_data);
-+      else
-+	put_string (form, "(hwaddr unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-+
-+void
-+system_fh_hwtype_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) >= 0)
-+    select_arg (form, argc, argv, 0);
-+  else
-+#endif
-+    select_arg (form, argc, argv, 1);
-+}
-+
-+void
-+system_fh_hwtype (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp)
-+	put_string (form, arp->title);
-+      else
-+	put_string (form, "(hwtype unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-diff --git a/ifconfig/system/hurd.h b/ifconfig/system/hurd.h
-new file mode 100644
-index 00000000..bab14565
---- /dev/null
-+++ b/ifconfig/system/hurd.h
-@@ -0,0 +1,50 @@
-+/*
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils 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 Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Written by Mats Erik Andersson.  */
-+
-+#ifndef IFCONFIG_SYSTEM_HURD_H
-+# define IFCONFIG_SYSTEM_HURD_H
-+
-+# include "../printif.h"
-+# include "../options.h"
-+
-+
-+/* Option support.  */
-+
-+struct system_ifconfig
-+{
-+  int valid;
-+};
-+
-+
-+/* Output format support.  */
-+
-+# define SYSTEM_FORMAT_HANDLER \
-+  { "hurd", fh_nothing}, \
-+  { "hwaddr?", system_fh_hwaddr_query}, \
-+  { "hwaddr", system_fh_hwaddr}, \
-+  { "hwtype?", system_fh_hwtype_query}, \
-+  { "hwtype", system_fh_hwtype},
-+
-+void system_fh_hwaddr_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwaddr (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype (format_data_t form, int argc, char *argv[]);
-+
-+#endif /* !IFCONFIG_SYSTEM_HURD_H */
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From 589dab9c7d3119da82837dabae34c8a3d16cbe49 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Thu, 30 Jul 2015 01:06:42 +0200
-Subject: [PATCH 07/35] ifconfig: Hardware detection in GNU/Hurd.
-
-A work-around needed to distinguish hardware type.
----
- ChangeLog              | 10 ++++++++++
- ifconfig/system/hurd.c | 19 ++++++++++++-------
- 2 files changed, 22 insertions(+), 7 deletions(-)
-
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-index 3bd19775..b6261a00 100644
---- a/ifconfig/system/hurd.c
-+++ b/ifconfig/system/hurd.c
-@@ -175,6 +175,16 @@ print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-   had_output = 1;
- }
- 
-+/* GNU/Hurd and Mach are using a mixture of BSD definitions
-+ * and GNU/Linux interface headers, which in this situation
-+ * means that sa_family_t is an unsigned char, from BSD, while
-+ * all ARPHRD_* come from GNU/Linux and are thus 16 bits wide.
-+ * We must account for this.  The following bitmask will
-+ * adapt to any future change!
-+ */
-+
-+#define _ARP_MASK ((sizeof (sa_family_t) == 1) ? 0xff : 0xffff)
-+
- struct arphrd_symbol
- {
-   const char *name;
-@@ -184,16 +194,11 @@ struct arphrd_symbol
- } arphrd_symbols[] =
-   {
- #ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
--    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+    { "ETHER", "Ethernet", ARPHRD_ETHER & _ARP_MASK, print_hwaddr_ether},
- #endif
- #ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
--    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK & _ARP_MASK, NULL},
- #endif
--    /* XXX: The image debian-hurd-20150424 returns the value 4
--	    instead of expected ARPHRD_LOOPBACK.  This has been
--	    discussed in the list debian-hurd, where I was asked
--	    to resist the temptation of a work around!
--     */
-     { NULL, NULL, 0, NULL}
-   };
- 
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From d379784b4461d17b2536effd1b52bae21cd28a32 Mon Sep 17 00:00:00 2001
-From: Guillem Jover <guillem@hadrons.org>
-Date: Fri, 16 Aug 2019 00:34:03 +0200
-Subject: [PATCH 35/35] telnet: Several ioctls have been disabled in the Hurd's
- glibc
-
-But not the related option macros. inetutils uses those macros to decide
-whether the ioctls are available, so it is FTBFS now. The Hurd's glibc
-is being fixed, but we'll use this for now to get the builds going.
----
- telnet/sys_bsd.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/telnet/sys_bsd.c b/telnet/sys_bsd.c
-index 662536ab..5eb35cb5 100644
---- a/telnet/sys_bsd.c
-+++ b/telnet/sys_bsd.c
-@@ -63,6 +63,7 @@
- #include <errno.h>
- #include <arpa/telnet.h>
- #include <sys/select.h>
-+#include <sys/ioctl.h>
- #include <unused-parameter.h>
- 
- #include "ring.h"
-@@ -157,7 +158,7 @@ TerminalRead (char *buf, int n)
- int
- TerminalAutoFlush (void)
- {
--#if defined LNOFLSH
-+#if defined TIOCLGET && defined LNOFLSH
-   int flush;
- 
-   ioctl (0, TIOCLGET, (char *) &flush);
-@@ -260,7 +261,9 @@ TerminalSaveState (void)
-   ioctl (0, TIOCGETP, (char *) &ottyb);
-   ioctl (0, TIOCGETC, (char *) &otc);
-   ioctl (0, TIOCGLTC, (char *) &oltc);
-+#ifdef TIOCLGET
-   ioctl (0, TIOCLGET, (char *) &olmode);
-+#endif
- 
-   ntc = otc;
-   nltc = oltc;
-@@ -755,7 +758,9 @@ TerminalNewMode (register int f)
- #endif
-     }
- #ifndef USE_TERMIO
-+#ifdef TIOCLSET
-   ioctl (tin, TIOCLSET, (char *) &lmode);
-+#endif
-   ioctl (tin, TIOCSLTC, (char *) &ltc);
-   ioctl (tin, TIOCSETC, (char *) &tc);
-   ioctl (tin, TIOCSETN, (char *) &sb);
--- 
-2.23.0.rc1.170.gbd704faa3e
-
diff --git a/gnu/packages/patches/json-c-CVE-2020-12762.patch b/gnu/packages/patches/json-c-CVE-2020-12762.patch
deleted file mode 100644
index 80daa475e9..0000000000
--- a/gnu/packages/patches/json-c-CVE-2020-12762.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-https://github.com/json-c/json-c/pull/608
-https://github.com/json-c/json-c/commit/5d6fa331418d49f1bd488553fd1cfa9ab023fabb.patch
-
-From 5d6fa331418d49f1bd488553fd1cfa9ab023fabb Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
-Date: Thu, 14 May 2020 12:32:30 +0200
-Subject: [PATCH] Fix CVE-2020-12762.
-
-This commit is a squashed backport of the following commits
-on the master branch:
-
-  * 099016b7e8d70a6d5dd814e788bba08d33d48426
-  * 77d935b7ae7871a1940cd827e850e6063044ec45
-  * d07b91014986900a3a75f306d302e13e005e9d67
-  * 519dfe1591d85432986f9762d41d1a883198c157
-  * a59d5acfab4485d5133114df61785b1fc633e0c6
-  * 26f080997d41cfdb17beab65e90c82217d0ac43b
----
- arraylist.c          |  3 +++
- linkhash.c           |  9 ++++++++-
- printbuf.c           | 18 ++++++++++++++++--
- tests/test4.c        | 29 +++++++++++++++++++++++++++++
- tests/test4.expected |  1 +
- 5 files changed, 57 insertions(+), 3 deletions(-)
-
-diff --git a/arraylist.c b/arraylist.c
-index 12ad8af6d3..e5524aca75 100644
---- a/arraylist.c
-+++ b/arraylist.c
-@@ -136,6 +136,9 @@ int array_list_del_idx(struct array_list *arr, size_t idx, size_t count)
- {
- 	size_t i, stop;
- 
-+	/* Avoid overflow in calculation with large indices. */
-+	if (idx > SIZE_T_MAX - count)
-+		return -1;
- 	stop = idx + count;
- 	if (idx >= arr->length || stop > arr->length)
- 		return -1;
-diff --git a/linkhash.c b/linkhash.c
-index 7ea58c0abf..b021ef10b0 100644
---- a/linkhash.c
-+++ b/linkhash.c
-@@ -12,6 +12,7 @@
- 
- #include "config.h"
- 
-+#include <assert.h>
- #include <limits.h>
- #include <stdarg.h>
- #include <stddef.h>
-@@ -499,6 +500,8 @@ struct lh_table *lh_table_new(int size, lh_entry_free_fn *free_fn, lh_hash_fn *h
- 	int i;
- 	struct lh_table *t;
- 
-+	/* Allocate space for elements to avoid divisions by zero. */
-+	assert(size > 0);
- 	t = (struct lh_table *)calloc(1, sizeof(struct lh_table));
- 	if (!t)
- 		return NULL;
-@@ -578,8 +581,12 @@ int lh_table_insert_w_hash(struct lh_table *t, const void *k, const void *v, con
- 	unsigned long n;
- 
- 	if (t->count >= t->size * LH_LOAD_FACTOR)
--		if (lh_table_resize(t, t->size * 2) != 0)
-+	{
-+		/* Avoid signed integer overflow with large tables. */
-+		int new_size = (t->size > INT_MAX / 2) ? INT_MAX : (t->size * 2);
-+		if (t->size == INT_MAX || lh_table_resize(t, new_size) != 0)
- 			return -1;
-+	}
- 
- 	n = h % t->size;
- 
-diff --git a/printbuf.c b/printbuf.c
-index 976c12dde5..f9b15b1191 100644
---- a/printbuf.c
-+++ b/printbuf.c
-@@ -15,6 +15,7 @@
- 
- #include "config.h"
- 
-+#include <limits.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -66,9 +67,16 @@ static int printbuf_extend(struct printbuf *p, int min_size)
- 	if (p->size >= min_size)
- 		return 0;
- 
--	new_size = p->size * 2;
--	if (new_size < min_size + 8)
-+	/* Prevent signed integer overflows with large buffers. */
-+	if (min_size > INT_MAX - 8)
-+		return -1;
-+	if (p->size > INT_MAX / 2)
- 		new_size = min_size + 8;
-+	else {
-+		new_size = p->size * 2;
-+		if (new_size < min_size + 8)
-+			new_size = min_size + 8;
-+	}
- #ifdef PRINTBUF_DEBUG
- 	MC_DEBUG("printbuf_memappend: realloc "
- 	         "bpos=%d min_size=%d old_size=%d new_size=%d\n",
-@@ -83,6 +91,9 @@ static int printbuf_extend(struct printbuf *p, int min_size)
- 
- int printbuf_memappend(struct printbuf *p, const char *buf, int size)
- {
-+	/* Prevent signed integer overflows with large buffers. */
-+	if (size > INT_MAX - p->bpos - 1)
-+		return -1;
- 	if (p->size <= p->bpos + size + 1)
- 	{
- 		if (printbuf_extend(p, p->bpos + size + 1) < 0)
-@@ -100,6 +111,9 @@ int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len)
- 
- 	if (offset == -1)
- 		offset = pb->bpos;
-+	/* Prevent signed integer overflows with large buffers. */
-+	if (len > INT_MAX - offset)
-+		return -1;
- 	size_needed = offset + len;
- 	if (pb->size < size_needed)
- 	{
-diff --git a/tests/test4.c b/tests/test4.c
-index bd964ec789..288cec1792 100644
---- a/tests/test4.c
-+++ b/tests/test4.c
-@@ -3,12 +3,15 @@
-  */
- 
- #include "config.h"
-+#include <assert.h>
- #include <stdio.h>
-+#include <stdlib.h>
- #include <string.h>
- 
- #include "json_inttypes.h"
- #include "json_object.h"
- #include "json_tokener.h"
-+#include "snprintf_compat.h"
- 
- void print_hex(const char *s)
- {
-@@ -24,6 +27,29 @@ void print_hex(const char *s)
- 	putchar('\n');
- }
- 
-+static void test_lot_of_adds(void);
-+static void test_lot_of_adds()
-+{
-+	int ii;
-+	char key[50];
-+	json_object *jobj = json_object_new_object();
-+	assert(jobj != NULL);
-+	for (ii = 0; ii < 500; ii++)
-+	{
-+		snprintf(key, sizeof(key), "k%d", ii);
-+		json_object *iobj = json_object_new_int(ii);
-+		assert(iobj != NULL);
-+		if (json_object_object_add(jobj, key, iobj))
-+		{
-+			fprintf(stderr, "FAILED to add object #%d\n", ii);
-+			abort();
-+		}
-+	}
-+	printf("%s\n", json_object_to_json_string(jobj));
-+	assert(json_object_object_length(jobj) == 500);
-+	json_object_put(jobj);
-+}
-+
- int main(void)
- {
- 	const char *input = "\"\\ud840\\udd26,\\ud840\\udd27,\\ud800\\udd26,\\ud800\\udd27\"";
-@@ -52,5 +78,8 @@ int main(void)
- 		retval = 1;
- 	}
- 	json_object_put(parse_result);
-+
-+	test_lot_of_adds();
-+
- 	return retval;
- }
-diff --git a/tests/test4.expected b/tests/test4.expected
-index 68d4336d90..cb2744012b 100644
---- a/tests/test4.expected
-+++ b/tests/test4.expected
-@@ -1,3 +1,4 @@
- input: "\ud840\udd26,\ud840\udd27,\ud800\udd26,\ud800\udd27"
- JSON parse result is correct: 𠄦,𠄧,𐄦,𐄧
- PASS
-+{ "k0": 0, "k1": 1, "k2": 2, "k3": 3, "k4": 4, "k5": 5, "k6": 6, "k7": 7, "k8": 8, "k9": 9, "k10": 10, "k11": 11, "k12": 12, "k13": 13, "k14": 14, "k15": 15, "k16": 16, "k17": 17, "k18": 18, "k19": 19, "k20": 20, "k21": 21, "k22": 22, "k23": 23, "k24": 24, "k25": 25, "k26": 26, "k27": 27, "k28": 28, "k29": 29, "k30": 30, "k31": 31, "k32": 32, "k33": 33, "k34": 34, "k35": 35, "k36": 36, "k37": 37, "k38": 38, "k39": 39, "k40": 40, "k41": 41, "k42": 42, "k43": 43, "k44": 44, "k45": 45, "k46": 46, "k47": 47, "k48": 48, "k49": 49, "k50": 50, "k51": 51, "k52": 52, "k53": 53, "k54": 54, "k55": 55, "k56": 56, "k57": 57, "k58": 58, "k59": 59, "k60": 60, "k61": 61, "k62": 62, "k63": 63, "k64": 64, "k65": 65, "k66": 66, "k67": 67, "k68": 68, "k69": 69, "k70": 70, "k71": 71, "k72": 72, "k73": 73, "k74": 74, "k75": 75, "k76": 76, "k77": 77, "k78": 78, "k79": 79, "k80": 80, "k81": 81, "k82": 82, "k83": 83, "k84": 84, "k85": 85, "k86": 86, "k87": 87, "k88": 88, "k89": 89, "k90": 90, "k91": 91, "k92": 92, "k93": 93, "k94": 94, "k95": 95, "k96": 96, "k97": 97, "k98": 98, "k99": 99, "k100": 100, "k101": 101, "k102": 102, "k103": 103, "k104": 104, "k105": 105, "k106": 106, "k107": 107, "k108": 108, "k109": 109, "k110": 110, "k111": 111, "k112": 112, "k113": 113, "k114": 114, "k115": 115, "k116": 116, "k117": 117, "k118": 118, "k119": 119, "k120": 120, "k121": 121, "k122": 122, "k123": 123, "k124": 124, "k125": 125, "k126": 126, "k127": 127, "k128": 128, "k129": 129, "k130": 130, "k131": 131, "k132": 132, "k133": 133, "k134": 134, "k135": 135, "k136": 136, "k137": 137, "k138": 138, "k139": 139, "k140": 140, "k141": 141, "k142": 142, "k143": 143, "k144": 144, "k145": 145, "k146": 146, "k147": 147, "k148": 148, "k149": 149, "k150": 150, "k151": 151, "k152": 152, "k153": 153, "k154": 154, "k155": 155, "k156": 156, "k157": 157, "k158": 158, "k159": 159, "k160": 160, "k161": 161, "k162": 162, "k163": 163, "k164": 164, "k165": 165, "k166": 166, "k167": 167, "k168": 168, "k169": 169, "k170": 170, "k171": 171, "k172": 172, "k173": 173, "k174": 174, "k175": 175, "k176": 176, "k177": 177, "k178": 178, "k179": 179, "k180": 180, "k181": 181, "k182": 182, "k183": 183, "k184": 184, "k185": 185, "k186": 186, "k187": 187, "k188": 188, "k189": 189, "k190": 190, "k191": 191, "k192": 192, "k193": 193, "k194": 194, "k195": 195, "k196": 196, "k197": 197, "k198": 198, "k199": 199, "k200": 200, "k201": 201, "k202": 202, "k203": 203, "k204": 204, "k205": 205, "k206": 206, "k207": 207, "k208": 208, "k209": 209, "k210": 210, "k211": 211, "k212": 212, "k213": 213, "k214": 214, "k215": 215, "k216": 216, "k217": 217, "k218": 218, "k219": 219, "k220": 220, "k221": 221, "k222": 222, "k223": 223, "k224": 224, "k225": 225, "k226": 226, "k227": 227, "k228": 228, "k229": 229, "k230": 230, "k231": 231, "k232": 232, "k233": 233, "k234": 234, "k235": 235, "k236": 236, "k237": 237, "k238": 238, "k239": 239, "k240": 240, "k241": 241, "k242": 242, "k243": 243, "k244": 244, "k245": 245, "k246": 246, "k247": 247, "k248": 248, "k249": 249, "k250": 250, "k251": 251, "k252": 252, "k253": 253, "k254": 254, "k255": 255, "k256": 256, "k257": 257, "k258": 258, "k259": 259, "k260": 260, "k261": 261, "k262": 262, "k263": 263, "k264": 264, "k265": 265, "k266": 266, "k267": 267, "k268": 268, "k269": 269, "k270": 270, "k271": 271, "k272": 272, "k273": 273, "k274": 274, "k275": 275, "k276": 276, "k277": 277, "k278": 278, "k279": 279, "k280": 280, "k281": 281, "k282": 282, "k283": 283, "k284": 284, "k285": 285, "k286": 286, "k287": 287, "k288": 288, "k289": 289, "k290": 290, "k291": 291, "k292": 292, "k293": 293, "k294": 294, "k295": 295, "k296": 296, "k297": 297, "k298": 298, "k299": 299, "k300": 300, "k301": 301, "k302": 302, "k303": 303, "k304": 304, "k305": 305, "k306": 306, "k307": 307, "k308": 308, "k309": 309, "k310": 310, "k311": 311, "k312": 312, "k313": 313, "k314": 314, "k315": 315, "k316": 316, "k317": 317, "k318": 318, "k319": 319, "k320": 320, "k321": 321, "k322": 322, "k323": 323, "k324": 324, "k325": 325, "k326": 326, "k327": 327, "k328": 328, "k329": 329, "k330": 330, "k331": 331, "k332": 332, "k333": 333, "k334": 334, "k335": 335, "k336": 336, "k337": 337, "k338": 338, "k339": 339, "k340": 340, "k341": 341, "k342": 342, "k343": 343, "k344": 344, "k345": 345, "k346": 346, "k347": 347, "k348": 348, "k349": 349, "k350": 350, "k351": 351, "k352": 352, "k353": 353, "k354": 354, "k355": 355, "k356": 356, "k357": 357, "k358": 358, "k359": 359, "k360": 360, "k361": 361, "k362": 362, "k363": 363, "k364": 364, "k365": 365, "k366": 366, "k367": 367, "k368": 368, "k369": 369, "k370": 370, "k371": 371, "k372": 372, "k373": 373, "k374": 374, "k375": 375, "k376": 376, "k377": 377, "k378": 378, "k379": 379, "k380": 380, "k381": 381, "k382": 382, "k383": 383, "k384": 384, "k385": 385, "k386": 386, "k387": 387, "k388": 388, "k389": 389, "k390": 390, "k391": 391, "k392": 392, "k393": 393, "k394": 394, "k395": 395, "k396": 396, "k397": 397, "k398": 398, "k399": 399, "k400": 400, "k401": 401, "k402": 402, "k403": 403, "k404": 404, "k405": 405, "k406": 406, "k407": 407, "k408": 408, "k409": 409, "k410": 410, "k411": 411, "k412": 412, "k413": 413, "k414": 414, "k415": 415, "k416": 416, "k417": 417, "k418": 418, "k419": 419, "k420": 420, "k421": 421, "k422": 422, "k423": 423, "k424": 424, "k425": 425, "k426": 426, "k427": 427, "k428": 428, "k429": 429, "k430": 430, "k431": 431, "k432": 432, "k433": 433, "k434": 434, "k435": 435, "k436": 436, "k437": 437, "k438": 438, "k439": 439, "k440": 440, "k441": 441, "k442": 442, "k443": 443, "k444": 444, "k445": 445, "k446": 446, "k447": 447, "k448": 448, "k449": 449, "k450": 450, "k451": 451, "k452": 452, "k453": 453, "k454": 454, "k455": 455, "k456": 456, "k457": 457, "k458": 458, "k459": 459, "k460": 460, "k461": 461, "k462": 462, "k463": 463, "k464": 464, "k465": 465, "k466": 466, "k467": 467, "k468": 468, "k469": 469, "k470": 470, "k471": 471, "k472": 472, "k473": 473, "k474": 474, "k475": 475, "k476": 476, "k477": 477, "k478": 478, "k479": 479, "k480": 480, "k481": 481, "k482": 482, "k483": 483, "k484": 484, "k485": 485, "k486": 486, "k487": 487, "k488": 488, "k489": 489, "k490": 490, "k491": 491, "k492": 492, "k493": 493, "k494": 494, "k495": 495, "k496": 496, "k497": 497, "k498": 498, "k499": 499 }
diff --git a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch b/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
deleted file mode 100644
index e4897de1b8..0000000000
--- a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This patch fixes a bug and related test failure on platforms where 'char'
-is unsigned.
-
-Taken from upstream:
-https://github.com/open-source-parsers/jsoncpp/commit/f11611c8785082ead760494cba06196f14a06dcb
-
-diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
-index 8e06cca2..56195dc1 100644
---- a/src/lib_json/json_writer.cpp
-+++ b/src/lib_json/json_writer.cpp
-@@ -178,8 +178,9 @@ static bool isAnyCharRequiredQuoting(char const* s, size_t n) {
- 
-   char const* const end = s + n;
-   for (char const* cur = s; cur < end; ++cur) {
--    if (*cur == '\\' || *cur == '\"' || *cur < ' ' ||
--        static_cast<unsigned char>(*cur) < 0x80)
-+    if (*cur == '\\' || *cur == '\"' ||
-+        static_cast<unsigned char>(*cur) < ' ' ||
-+        static_cast<unsigned char>(*cur) >= 0x80)
-       return true;
-   }
-   return false;
diff --git a/gnu/packages/patches/jsoncpp-pkg-config-version.patch b/gnu/packages/patches/jsoncpp-pkg-config-version.patch
new file mode 100644
index 0000000000..3983cc300c
--- /dev/null
+++ b/gnu/packages/patches/jsoncpp-pkg-config-version.patch
@@ -0,0 +1,24 @@
+Taken from upstream: https://github.com/open-source-parsers/jsoncpp/issues/1235.
+
+From ac2870298ed5b5a96a688d9df07461b31f83e906 Mon Sep 17 00:00:00 2001
+From: Derick Vigne <derickvigne@me.com>
+Date: Tue, 26 Jan 2021 14:59:12 -0500
+Subject: [PATCH] Fixed pkg-config Version
+
+---
+ pkg-config/jsoncpp.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pkg-config/jsoncpp.pc.in b/pkg-config/jsoncpp.pc.in
+index 632a377f5..2a2221069 100644
+--- a/pkg-config/jsoncpp.pc.in
++++ b/pkg-config/jsoncpp.pc.in
+@@ -5,7 +5,7 @@ includedir=@includedir_for_pc_file@
+ 
+ Name: jsoncpp
+ Description: A C++ library for interacting with JSON
+-Version: @JSONCPP_VERSION@
++Version: @PROJECT_VERSION@
+ URL: https://github.com/open-source-parsers/jsoncpp
+ Libs: -L${libdir} -ljsoncpp
+ Cflags: -I${includedir}
diff --git a/gnu/packages/patches/julia-allow-parallel-build.patch b/gnu/packages/patches/julia-allow-parallel-build.patch
new file mode 100644
index 0000000000..cc1d42fee4
--- /dev/null
+++ b/gnu/packages/patches/julia-allow-parallel-build.patch
@@ -0,0 +1,32 @@
+Allow parallel tests with isolated environment.
+
+See https://github.com/JuliaLang/julia/issues/43205 and
+https://github.com/JuliaLang/julia/pull/43211.
+
+diff --git a/test/runtests.jl b/test/runtests.jl
+index 2f9cd058bb..150395e78c 100644
+--- a/test/runtests.jl
++++ b/test/runtests.jl
+@@ -4,7 +4,7 @@ using Test
+ using Distributed
+ using Dates
+ import REPL
+-using Printf: @sprintf
++using Printf: @sprintf, @printf
+ using Base: Experimental
+ 
+ include("choosetests.jl")
+@@ -83,11 +83,12 @@ prepend!(tests, linalg_tests)
+ import LinearAlgebra
+ cd(@__DIR__) do
+     n = 1
+-    if net_on
++    if net_on || haskey(ENV, "JULIA_CPU_THREADS")
+         n = min(Sys.CPU_THREADS, length(tests))
+         n > 1 && addprocs_with_testenv(n)
+         LinearAlgebra.BLAS.set_num_threads(1)
+     end
++    @printf("Number of threads: %i\n", n)
+     skipped = 0
+ 
+     @everywhere include("testdefs.jl")
diff --git a/gnu/packages/patches/lcms-CVE-2018-16435.patch b/gnu/packages/patches/lcms-CVE-2018-16435.patch
deleted file mode 100644
index 60228e73af..0000000000
--- a/gnu/packages/patches/lcms-CVE-2018-16435.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-https://github.com/mm2/Little-CMS/commit/768f70ca405cd3159d990e962d54456773bb8cf8.patch
-
-From 768f70ca405cd3159d990e962d54456773bb8cf8 Mon Sep 17 00:00:00 2001
-From: Marti Maria <info@littlecms.com>
-Date: Wed, 15 Aug 2018 20:07:56 +0200
-Subject: [PATCH] Upgrade Visual studio 2017 15.8
-
-- Upgrade to 15.8
-- Add check on CGATS memory allocation (thanks to Quang Nguyen for
-pointing out this)
----
- Projects/VC2017/jpegicc/jpegicc.vcxproj           |  1 +
- Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj       |  2 +-
- Projects/VC2017/lcms2_static/lcms2_static.vcxproj |  2 +-
- Projects/VC2017/linkicc/linkicc.vcxproj           |  2 +-
- Projects/VC2017/psicc/psicc.vcxproj               |  2 +-
- Projects/VC2017/testbed/testbed.vcxproj           |  2 +-
- Projects/VC2017/tiffdiff/tiffdiff.vcxproj         |  2 +-
- Projects/VC2017/tifficc/tifficc.vcxproj           |  2 +-
- Projects/VC2017/transicc/transicc.vcxproj         |  1 +
- src/cmscgats.c                                    | 14 ++++++++++----
- 10 files changed, 19 insertions(+), 11 deletions(-)
-
-diff --git a/Projects/VC2017/jpegicc/jpegicc.vcxproj b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-index ab26a53..39cfd00 100644
---- a/Projects/VC2017/jpegicc/jpegicc.vcxproj
-+++ b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{62812507-F926-4968-96A9-17678460AD90}</ProjectGuid>
-     <RootNamespace>jpegicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-index 4c8aa3f..d1bf3eb 100644
---- a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-+++ b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}</ProjectGuid>
-     <RootNamespace>lcms2_DLL</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-index 2a9988a..9fc05ce 100644
---- a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-+++ b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{71DEDE59-3F1E-486B-A899-4283000F76B5}</ProjectGuid>
-     <RootNamespace>lcms2_static</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/linkicc/linkicc.vcxproj b/Projects/VC2017/linkicc/linkicc.vcxproj
-index 30c2b4e..51586dd 100644
---- a/Projects/VC2017/linkicc/linkicc.vcxproj
-+++ b/Projects/VC2017/linkicc/linkicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{FBFBE1DC-DB84-4BA1-9552-B4780F457849}</ProjectGuid>
-     <RootNamespace>linkicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/psicc/psicc.vcxproj b/Projects/VC2017/psicc/psicc.vcxproj
-index 9dcf89a..8f26e12 100644
---- a/Projects/VC2017/psicc/psicc.vcxproj
-+++ b/Projects/VC2017/psicc/psicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{EF6A8851-65FE-46F5-B9EF-14F0B671F693}</ProjectGuid>
-     <RootNamespace>psicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/testbed/testbed.vcxproj b/Projects/VC2017/testbed/testbed.vcxproj
-index 0af3762..3f6aea3 100644
---- a/Projects/VC2017/testbed/testbed.vcxproj
-+++ b/Projects/VC2017/testbed/testbed.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{928A3A2B-46EF-4279-959C-513B3652FF0E}</ProjectGuid>
-     <RootNamespace>testbed</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-index 7edfe28..3a6d837 100644
---- a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-+++ b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{75B91835-CCD7-48BE-A606-A9C997D5DBEE}</ProjectGuid>
-     <RootNamespace>tiffdiff</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tifficc/tifficc.vcxproj b/Projects/VC2017/tifficc/tifficc.vcxproj
-index cd9f04c..5ef954f 100644
---- a/Projects/VC2017/tifficc/tifficc.vcxproj
-+++ b/Projects/VC2017/tifficc/tifficc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}</ProjectGuid>
-     <RootNamespace>tifficc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/transicc/transicc.vcxproj b/Projects/VC2017/transicc/transicc.vcxproj
-index d9b77c6..b3173d8 100644
---- a/Projects/VC2017/transicc/transicc.vcxproj
-+++ b/Projects/VC2017/transicc/transicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{9EE22D66-C849-474C-9ED5-C3E141DAB160}</ProjectGuid>
-     <RootNamespace>transicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/src/cmscgats.c b/src/cmscgats.c
-index 1a87613..8c3e96d 100644
---- a/src/cmscgats.c
-+++ b/src/cmscgats.c
-@@ -1,7 +1,7 @@
- //---------------------------------------------------------------------------------
- //
- //  Little Color Management System
--//  Copyright (c) 1998-2017 Marti Maria Saguer
-+//  Copyright (c) 1998-2018 Marti Maria Saguer
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the "Software"),
-@@ -1506,10 +1506,16 @@ void AllocateDataSet(cmsIT8* it8)
-     t-> nSamples   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS"));
-     t-> nPatches   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS"));
- 
--    t-> Data = (char**)AllocChunk (it8, ((cmsUInt32Number) t->nSamples + 1) * ((cmsUInt32Number) t->nPatches + 1) *sizeof (char*));
--    if (t->Data == NULL) {
-+    if (t -> nSamples < 0 || t->nSamples > 0x7ffe || t->nPatches < 0 || t->nPatches > 0x7ffe)
-+    {
-+        SynError(it8, "AllocateDataSet: too much data");
-+    }
-+    else {
-+        t->Data = (char**)AllocChunk(it8, ((cmsUInt32Number)t->nSamples + 1) * ((cmsUInt32Number)t->nPatches + 1) * sizeof(char*));
-+        if (t->Data == NULL) {
- 
--        SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+            SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+        }
-     }
- 
- }
diff --git a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch b/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
deleted file mode 100644
index d2e40b8016..0000000000
--- a/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-This patch fixes a failing unit test by feeding buildNormalizedPath to the
-tzdata properly.  Three other tests are disabled, one assumes /root and the
-two others use networking.  Not bad out of almost 700 tests!
-
-by Pjotr Prins <pjotr.guix@thebird.nl>
-
---- a/std/datetime.d.orig      2016-11-24 01:13:52.584495545 +0100
-+++ b/std/datetime.d   2016-11-24 01:17:09.655306728 +0100
-@@ -28081,22 +28081,24 @@
-         import std.range : retro;
-         import std.format : format;
-
--        name = strip(name);
--
-         enforce(tzDatabaseDir.exists(), new DateTimeException(format("Directory %s does not exist.", tzDatabaseDir)));
-         enforce(tzDatabaseDir.isDir, new DateTimeException(format("%s is not a directory.", tzDatabaseDir)));
-
-         version(Android)
-         {
-+            name = strip(name);
-             auto tzfileOffset = name in tzdataIndex(tzDatabaseDir);
-             enforce(tzfileOffset, new DateTimeException(format("The time zone %s is not listed.", name)));
-             string tzFilename = separate_index ? "zoneinfo.dat" : "tzdata";
-             immutable file = buildNormalizedPath(tzDatabaseDir, tzFilename);
-         }
-         else
--            immutable file = buildNormalizedPath(tzDatabaseDir, name);
-+        {
-+            auto filename = "./" ~ strip(name); // make sure the prefix is not stripped
-+            immutable file = buildNormalizedPath(tzDatabaseDir, filename);
-+        }
-
--        enforce(file.exists(), new DateTimeException(format("File %s does not exist.", file)));
-+        enforce(file.exists(), new DateTimeException(format("File %s does not exist in %s.", file, tzDatabaseDir)));
-         enforce(file.isFile, new DateTimeException(format("%s is not a file.", file)));
-
-         auto tzFile = File(file);
-diff --git a/std/path.d b/std/path.d
-index 254d8f0..b0fc04d 100644
---- a/std/path.d
-+++ b/std/path.d
-@@ -3080,8 +3080,11 @@ unittest
-         }
-         else
-         {
-+            pragma(msg, "test disabled on GNU Guix");
-+/*
-             assert(expandTilde("~root") == "/root", expandTilde("~root"));
-             assert(expandTilde("~root/") == "/root/", expandTilde("~root/"));
-+*/
-         }
-         assert(expandTilde("~Idontexist/hey") == "~Idontexist/hey");
-     }
-diff --git a/std/socket.d b/std/socket.d
-index b85d1c9..7fbf346 100644
---- a/std/socket.d
-+++ b/std/socket.d
-@@ -859,6 +862,8 @@ class InternetHost
-
- unittest
- {
-+    pragma(msg, "test disabled on GNU Guix");
-+    /*
-     InternetHost ih = new InternetHost;
-
-     ih.getHostByAddr(0x7F_00_00_01);
-@@ -889,6 +894,7 @@ unittest
-         //      writefln("aliases[%d] = %s", i, s);
-         // }
-     });
-+    */
- }
diff --git a/gnu/packages/patches/ldc-disable-phobos-tests.patch b/gnu/packages/patches/ldc-disable-phobos-tests.patch
deleted file mode 100644
index f8a9743d59..0000000000
--- a/gnu/packages/patches/ldc-disable-phobos-tests.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/std/socket.d b/std/socket.d
-index 111cd17..6d23da9 100644
---- a/std/socket.d
-+++ b/std/socket.d
-@@ -448,7 +448,7 @@ class Protocol
- // Skip this test on Android because getprotobyname/number are
- // unimplemented in bionic.
- version(CRuntime_Bionic) {} else
--@safe unittest
-+@safe version(hasNetwork) unittest
- {
-     // import std.stdio : writefln;
-     softUnittest({
-@@ -770,7 +770,7 @@ class InternetHost
- }
- 
- ///
--@safe unittest
-+@safe version(hasNetwork) unittest
- {
-     InternetHost ih = new InternetHost;
- 
diff --git a/gnu/packages/patches/lib2geom-fix-tests.patch b/gnu/packages/patches/lib2geom-fix-tests.patch
deleted file mode 100644
index 47e8f6e2ec..0000000000
--- a/gnu/packages/patches/lib2geom-fix-tests.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From 3e858cc87f2f8b7dc514a8ad7709c1f47f1f4cde Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-Date: Wed, 17 Jun 2020 23:20:53 -0400
-Subject: [PATCH] tests: Fix tests on non-x86_64 platforms.
-
-On platform other than x86_64 such as aarch64-linux or i686-linux,
-some double comparisons would fail.
-
-See <http://issues.guix.gnu.org/41827>.
-
-* tests/bezier-test.cpp: (Casteljau): Replace EXPECT_EQ by
-EXPECT_near.
-(Subdivide): Replace EXPECT_EQ by EXPECT_DOUBLE_EQ.
-(Portion): Replace EXPECT_EQ by EXPECT_near.
-* tests/ellipse-test.cpp (BezierIntersection): Lower error tolerance
-from 6e-13 to 6e-12.
-(LineIntersection): Replace EXPECT_DOUBLE_EQ by EXPECT_NEAR.
-* tests/line-test.cpp (Reflection): Replace EXPECT_FLOAT_EQ BY
-EXPECT_near.
-(Coefficients): Skip test.
-* tests/parallelogram-test.cpp (area): Replace EXPECT_EQ by
-EXPECT_DOUBLE_EQ.
----
- tests/bezier-test.cpp        | 31 +++++++++++++++++--------------
- tests/ellipse-test.cpp       | 11 ++++++-----
- tests/line-test.cpp          | 11 +++++++----
- tests/parallelogram-test.cpp |  8 ++++----
- 4 files changed, 34 insertions(+), 27 deletions(-)
-
-diff --git a/tests/bezier-test.cpp b/tests/bezier-test.cpp
-index 4054a654..46209f40 100644
---- a/tests/bezier-test.cpp
-+++ b/tests/bezier-test.cpp
-@@ -152,11 +152,13 @@ TEST_F(BezierTest, Casteljau) {
-         EXPECT_vector_equal(right2, right);
- 
-         double vnone = casteljau_subdivision<double>(t, &wiggle[0], NULL, NULL, wiggle.order());
--        EXPECT_EQ(vnone, vok);
-+        EXPECT_near(vnone, vok, 1e-12);
-     }
- }
- 
- TEST_F(BezierTest, Portion) {
-+    constexpr Coord eps{1e-12};
-+
-     for (unsigned i = 0; i < 10000; ++i) {
-         double from = g_random_double_range(0, 1);
-         double to = g_random_double_range(0, 1);
-@@ -165,8 +167,8 @@ TEST_F(BezierTest, Portion) {
-             Bezier result = portion(input, from, to);
- 
-             // the endpoints must correspond exactly
--            EXPECT_EQ(result.at0(), input.valueAt(from));
--            EXPECT_EQ(result.at1(), input.valueAt(to));
-+            EXPECT_near(result.at0(), input.valueAt(from), eps);
-+            EXPECT_near(result.at1(), input.valueAt(to), eps);
-         }
-     }
- }
-@@ -181,16 +183,16 @@ TEST_F(BezierTest, Subdivide) {
- 
-             // the endpoints must correspond exactly
-             // moreover, the subdivision point must be exactly equal to valueAt(t)
--            EXPECT_EQ(result.first.at0(), input.at0());
--            EXPECT_EQ(result.first.at1(), result.second.at0());
--            EXPECT_EQ(result.second.at0(), input.valueAt(t));
--            EXPECT_EQ(result.second.at1(), input.at1());
-+            EXPECT_DOUBLE_EQ(result.first.at0(), input.at0());
-+            EXPECT_DOUBLE_EQ(result.first.at1(), result.second.at0());
-+            EXPECT_DOUBLE_EQ(result.second.at0(), input.valueAt(t));
-+            EXPECT_DOUBLE_EQ(result.second.at1(), input.at1());
- 
-             // ditto for valueAt
--            EXPECT_EQ(result.first.valueAt(0), input.valueAt(0));
--            EXPECT_EQ(result.first.valueAt(1), result.second.valueAt(0));
--            EXPECT_EQ(result.second.valueAt(0), input.valueAt(t));
--            EXPECT_EQ(result.second.valueAt(1), input.valueAt(1));
-+            EXPECT_DOUBLE_EQ(result.first.valueAt(0), input.valueAt(0));
-+            EXPECT_DOUBLE_EQ(result.first.valueAt(1), result.second.valueAt(0));
-+            EXPECT_DOUBLE_EQ(result.second.valueAt(0), input.valueAt(t));
-+            EXPECT_DOUBLE_EQ(result.second.valueAt(1), input.valueAt(1));
- 
-             if (result.first.at1() != result.second.at0()) {
-                 errors.push_back(std::pair<Bezier,double>(input, t));
-@@ -271,9 +273,10 @@ TEST_F(BezierTest, Deflate) {
-     EXPECT_FLOAT_EQ(0, b.at0());
-     b = b.deflate();
-     const double rootposition = (0.5-0.25) / (1-0.25);
--    EXPECT_FLOAT_EQ(0, b.valueAt(rootposition));
-+    constexpr Coord eps{1e-12};
-+    EXPECT_near(0.0, b.valueAt(rootposition), eps);
-     b = b.subdivide(rootposition).second;
--    EXPECT_FLOAT_EQ(0, b.at0());
-+    EXPECT_near(0.0, b.at0(), eps);
- }
- 
- TEST_F(BezierTest, Roots) {
-@@ -364,7 +367,7 @@ TEST_F(BezierTest, Operators) {
-         for(int i = 0; i <= 16; i++) {
-             double t = i/16.0;
-             double b = B.valueAt(t);
--            EXPECT_FLOAT_EQ(b*b, product.valueAt(t));
-+            EXPECT_near(b*b, product.valueAt(t), 1e-12);
-         }
-     }
- }
-diff --git a/tests/ellipse-test.cpp b/tests/ellipse-test.cpp
-index 561c285a..8e4de12c 100644
---- a/tests/ellipse-test.cpp
-+++ b/tests/ellipse-test.cpp
-@@ -158,13 +158,14 @@ TEST(EllipseTest, LineIntersection) {
-     std::vector<ShapeIntersection> xs = e.intersect(l);
- 
-     ASSERT_EQ(xs.size(), 2ul);
--    EXPECT_FLOAT_EQ(xs[0].point()[X], 0);
--    EXPECT_FLOAT_EQ(xs[0].point()[Y], -2);
--    EXPECT_FLOAT_EQ(xs[1].point()[X], 9./5);
--    EXPECT_FLOAT_EQ(xs[1].point()[Y], 8./5);
- 
-     // due to numeric imprecision when evaluating Ellipse,
-     // the points may deviate by around 2e-16
-+    EXPECT_NEAR(xs[0].point()[X], 0, 1e-15);
-+    EXPECT_NEAR(xs[0].point()[Y], -2, 1e-15);
-+    EXPECT_NEAR(xs[1].point()[X], 9./5, 1e-15);
-+    EXPECT_NEAR(xs[1].point()[Y], 8./5, 1e-15);
-+
-     EXPECT_intersections_valid(e, l, xs, 1e-15);
- }
- 
-@@ -199,7 +200,7 @@ TEST(EllipseTest, BezierIntersection) {
-     std::vector<ShapeIntersection> xs = e.intersect(b);
- 
-     EXPECT_EQ(xs.size(), 2ul);
--    EXPECT_intersections_valid(e, b, xs, 6e-13);
-+    EXPECT_intersections_valid(e, b, xs, 6e-12);
- }
- 
- TEST(EllipseTest, Coefficients) {
-diff --git a/tests/line-test.cpp b/tests/line-test.cpp
-index 99546ddc..23991300 100644
---- a/tests/line-test.cpp
-+++ b/tests/line-test.cpp
-@@ -91,10 +91,12 @@ TEST(LineTest, Reflection) {
- 
-     Point testra = pa * reflecta;
-     Point testrb = pb * reflectb;
--    EXPECT_FLOAT_EQ(testra[X], ra[X]);
--    EXPECT_FLOAT_EQ(testra[Y], ra[Y]);
--    EXPECT_FLOAT_EQ(testrb[X], rb[X]);
--    EXPECT_FLOAT_EQ(testrb[Y], rb[Y]);
-+
-+    constexpr Coord eps{1e-12};
-+    EXPECT_near(testra[X], ra[X], eps);
-+    EXPECT_near(testra[Y], ra[Y], eps);
-+    EXPECT_near(testrb[X], rb[X], eps);
-+    EXPECT_near(testrb[Y], rb[Y], eps);
- }
- 
- TEST(LineTest, RotationToZero) {
-@@ -115,6 +117,7 @@ TEST(LineTest, RotationToZero) {
- }
- 
- TEST(LineTest, Coefficients) {
-+    GTEST_SKIP() << "This test fails on i686-linux and aarch64-linux";
-     std::vector<Line> lines;
-     lines.push_back(Line(Point(1e9,1e9), Point(1,1)));
-     //the case below will never work without normalizing the line
-diff --git a/tests/parallelogram-test.cpp b/tests/parallelogram-test.cpp
-index 8109eadd..70ccea13 100644
---- a/tests/parallelogram-test.cpp
-+++ b/tests/parallelogram-test.cpp
-@@ -106,13 +106,13 @@ TEST(ParallelogramTest, area)
- {
-     Rect r(2, 4, 7, 8);
-     Parallelogram p(r);
--    EXPECT_EQ(p.area(), r.area());
-+    EXPECT_DOUBLE_EQ(p.area(), r.area());
-     p *= Rotate(M_PI / 4.0); // 45°
--    EXPECT_EQ(p.area(), r.area());
-+    EXPECT_DOUBLE_EQ(p.area(), r.area());
-     p *= HShear(2);
--    EXPECT_EQ(p.area(), r.area());
-+    EXPECT_DOUBLE_EQ(p.area(), r.area());
-     p *= Scale(2);
--    EXPECT_EQ(p.area(), r.area() * 4);
-+    EXPECT_DOUBLE_EQ(p.area(), r.area() * 4);
- }
- 
- class ParallelogramTest
--- 
-2.27.0
-
diff --git a/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch b/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch
new file mode 100644
index 0000000000..e8d5dce0ed
--- /dev/null
+++ b/gnu/packages/patches/libmicrohttpd-0.9.73-test-ssl3.patch
@@ -0,0 +1,35 @@
+ Disable usage of SSLv3 in testing
+
+ Integrated uptream version 0.9.74
+
+
+diff --git a/src/testcurl/https/test_tls_options.c b/src/testcurl/https/test_tls_options.c
+
+--- a/src/testcurl/https/test_tls_options.c
++++ b/src/testcurl/https/test_tls_options.c
+@@ -119,11 +119,6 @@ main (int argc, char *const *argv)
+     fprintf (stderr, "Curl does not support SSL.  Cannot run the test.\n");
+     return 77;
+   }
+-  if (0 != strncmp (ssl_version, "GnuTLS", 6))
+-  {
+-    fprintf (stderr, "This test can be run only with libcurl-gnutls.\n");
+-    return 77;
+-  }
+ 
+   if (! testsuite_curl_global_init ())
+     return 99;
+@@ -152,10 +147,10 @@ main (int argc, char *const *argv)
+   fprintf (stderr,
+            "The following handshake should fail (and print an error message)...\n");
+   if (0 !=
+-      test_wrap ("TLS1.0 vs SSL3",
++      test_wrap ("TLS1.1 vs TLS1.0",
+                  &test_unmatching_ssl_version, NULL, port, daemon_flags,
+                  aes256_sha,
+-                 CURL_SSLVERSION_SSLv3,
++                 CURL_SSLVERSION_TLSv1_1,
+                  MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
+                  MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
+                  MHD_OPTION_HTTPS_PRIORITIES,
+
diff --git a/gnu/packages/patches/librime-fix-build-with-gcc10.patch b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
new file mode 100644
index 0000000000..49ad011b57
--- /dev/null
+++ b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
@@ -0,0 +1,41 @@
+From: Felix Gruber <felgru@posteo.net>
+Date: Mon, 6 Sep 2021 19:38:17 +0200
+Subject: [PATCH] Add missing <cmath> includes
+
+Fix a build failure with GCC 10 that manifests like this:
+
+------
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc: In member function ‘void rime::ScriptTranslation::PrepareCandidate()’:
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:490:23: error: ‘exp’ was not declared in this scope
+  490 |     cand->set_quality(exp(entry->weight) +
+      |                       ^~~
+/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:504:23: error: ‘exp’ was not declared in this scope
+  504 |     cand->set_quality(exp(entry->weight) +
+      |                       ^~~
+make[2]: *** [src/CMakeFiles/rime.dir/build.make:1241: src/CMakeFiles/rime.dir/rime/gear/script_translator.cc.o] Error 1
+------
+
+diff --git a/src/rime/gear/script_translator.cc b/src/rime/gear/script_translator.cc
+index 4a45f05..515c8db 100644
+--- a/src/rime/gear/script_translator.cc
++++ b/src/rime/gear/script_translator.cc
+@@ -7,6 +7,7 @@
+ // 2011-07-10 GONG Chen <chen.sst@gmail.com>
+ //
+ #include <algorithm>
++#include <cmath>
+ #include <stack>
+ #include <boost/algorithm/string/join.hpp>
+ #include <boost/range/adaptor/reversed.hpp>
+diff --git a/src/rime/gear/table_translator.cc b/src/rime/gear/table_translator.cc
+index 162ac02..dbea76a 100644
+--- a/src/rime/gear/table_translator.cc
++++ b/src/rime/gear/table_translator.cc
+@@ -4,6 +4,7 @@
+ //
+ // 2011-07-10 GONG Chen <chen.sst@gmail.com>
+ //
++#include <cmath>
+ #include <boost/algorithm/string.hpp>
+ #include <boost/range/adaptor/reversed.hpp>
+ #include <utf8.h>
diff --git a/gnu/packages/patches/libtirpc-hurd-client.patch b/gnu/packages/patches/libtirpc-hurd-client.patch
deleted file mode 100644
index 526ad262d2..0000000000
--- a/gnu/packages/patches/libtirpc-hurd-client.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Taken from https://salsa.debian.org/debian/libtirpc/-/raw/master/debian/patches/06-hurd-client-port.diff
-
-Description: Fix client code for hurd, avoiding malloc overflow
- When trying to setup a inet connection, it happens the following:
- - in libtirp, src/clnt_vc.c, clnt_vc_create gets called
- - when trying to allocate vc_fd_locks, __rpc_dtbsize() is used as size
-   for that array of fd locks
- - __rpc_dtbsize(), in src/rpc_generic.c, queries using rlimit the
-   maximum (rlim_max) number of file descriptors (RLIMIT_NOFILE):
-   - on Linux, the default is { rlim_cur = 1024, rlim_max = 4096 }
-   - on kFreeBSD, the default is { rlim_cur = 1024, rlim_max = 1024 }
-   - on Hurd, the default is { rlim_cur = 1024, rlim_max = RLIM_INFINITY }
-  meaning that on Hurd the memory allocation fails (as
-  __rpc_dtbsize() * sizeof(int) overflows and is negative)
-
- Change libtiprc so __rpc_dtbsize falls back on rlim_cur if rlim_max
- is unlimited.
-
- This patch fixes the client connection using inet sockets; local unix
- sockets are not working, for two reasons so far:
- - getpeername on them gives EOPNOTSUPP
- - SO_REUSEADDR is not implemented for them
-Author: Pino Toscano <pino@debian.org>
-
-Bug-Debian: http://bugs.debian.org/739674
-Forwarded: no
-Reviewed-By: Petter Reinholdtsen
-Last-Update: 2014-03-03
-
---- a/src/rpc_generic.c
-+++ b/src/rpc_generic.c
-@@ -107,12 +107,17 @@
- {
- 	static int tbsize;
- 	struct rlimit rl;
-+	rlim_t lim;
- 
- 	if (tbsize) {
- 		return (tbsize);
- 	}
- 	if (getrlimit(RLIMIT_NOFILE, &rl) == 0) {
--		return (tbsize = (int)rl.rlim_max);
-+		lim = rl.rlim_max;
-+		if (lim == RLIM_INFINITY) {
-+			lim = rl.rlim_cur;
-+		}
-+		return (tbsize = (int)lim);
- 	}
- 	/*
- 	 * Something wrong.  I'll try to save face by returning a
diff --git a/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
new file mode 100644
index 0000000000..8ef4b111e4
--- /dev/null
+++ b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
@@ -0,0 +1,40 @@
+Fix compilation with -fno-common.
+
+Borrowed from upstream 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e.
+Author:     Yichao Yu <yyc1992@gmail.com>
+AuthorDate: Tue Mar 31 00:43:32 2020 -0400
+Commit:     Dave Watson <dade.watson@gmail.com>
+CommitDate: Tue Mar 31 08:06:29 2020 -0700
+
+diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c
+index f6b8dc2..9550efa 100644
+--- a/src/x86/Ginit.c
++++ b/src/x86/Ginit.c
+@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -71,7 +64,12 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
diff --git a/gnu/packages/patches/libxml2-parent-pointers.patch b/gnu/packages/patches/libxml2-parent-pointers.patch
new file mode 100644
index 0000000000..1f0615c512
--- /dev/null
+++ b/gnu/packages/patches/libxml2-parent-pointers.patch
@@ -0,0 +1,228 @@
+Fix a regression in 2.9.12 where some corrupt XML structures were handled
+incorrectly:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/255
+
+This is an amalgamation of these upstream commits:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/85b1792e37b131e7a51af98a37f92472e8de5f3f
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/13ad8736d294536da4cbcd70a96b0a2fbf47070c
+
+diff --git a/HTMLtree.c b/HTMLtree.c
+--- a/HTMLtree.c
++++ b/HTMLtree.c
+@@ -744,7 +744,7 @@ void
+ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ 	                 xmlNodePtr cur, const char *encoding ATTRIBUTE_UNUSED,
+                          int format) {
+-    xmlNodePtr root;
++    xmlNodePtr root, parent;
+     xmlAttrPtr attr;
+     const htmlElemDesc * info;
+ 
+@@ -755,6 +755,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+     }
+ 
+     root = cur;
++    parent = cur->parent;
+     while (1) {
+         switch (cur->type) {
+         case XML_HTML_DOCUMENT_NODE:
+@@ -762,13 +763,25 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+             if (((xmlDocPtr) cur)->intSubset != NULL) {
+                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
+             }
+-            if (cur->children != NULL) {
++            /* Always validate cur->parent when descending. */
++            if ((cur->parent == parent) && (cur->children != NULL)) {
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+             break;
+ 
+         case XML_ELEMENT_NODE:
++            /*
++             * Some users like lxml are known to pass nodes with a corrupted
++             * tree structure. Fall back to a recursive call to handle this
++             * case.
++             */
++            if ((cur->parent != parent) && (cur->children != NULL)) {
++                htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
++                break;
++            }
++
+             /*
+              * Get specific HTML info for that node.
+              */
+@@ -817,6 +830,7 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                     (cur->name != NULL) &&
+                     (cur->name[0] != 'p')) /* p, pre, param */
+                     xmlOutputBufferWriteString(buf, "\n");
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -825,9 +839,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 (info != NULL) && (!info->isinline)) {
+                 if ((cur->next->type != HTML_TEXT_NODE) &&
+                     (cur->next->type != HTML_ENTITY_REF_NODE) &&
+-                    (cur->parent != NULL) &&
+-                    (cur->parent->name != NULL) &&
+-                    (cur->parent->name[0] != 'p')) /* p, pre, param */
++                    (parent != NULL) &&
++                    (parent->name != NULL) &&
++                    (parent->name[0] != 'p')) /* p, pre, param */
+                     xmlOutputBufferWriteString(buf, "\n");
+             }
+ 
+@@ -842,9 +856,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 break;
+             if (((cur->name == (const xmlChar *)xmlStringText) ||
+                  (cur->name != (const xmlChar *)xmlStringTextNoenc)) &&
+-                ((cur->parent == NULL) ||
+-                 ((xmlStrcasecmp(cur->parent->name, BAD_CAST "script")) &&
+-                  (xmlStrcasecmp(cur->parent->name, BAD_CAST "style"))))) {
++                ((parent == NULL) ||
++                 ((xmlStrcasecmp(parent->name, BAD_CAST "script")) &&
++                  (xmlStrcasecmp(parent->name, BAD_CAST "style"))))) {
+                 xmlChar *buffer;
+ 
+                 buffer = xmlEncodeEntitiesReentrant(doc, cur->content);
+@@ -902,13 +916,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                 break;
+             }
+ 
+-            /*
+-             * The parent should never be NULL here but we want to handle
+-             * corrupted documents gracefully.
+-             */
+-            if (cur->parent == NULL)
+-                return;
+-            cur = cur->parent;
++            cur = parent;
++            /* cur->parent was validated when descending. */
++            parent = cur->parent;
+ 
+             if ((cur->type == XML_HTML_DOCUMENT_NODE) ||
+                 (cur->type == XML_DOCUMENT_NODE)) {
+@@ -939,9 +949,9 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+                     (cur->next != NULL)) {
+                     if ((cur->next->type != HTML_TEXT_NODE) &&
+                         (cur->next->type != HTML_ENTITY_REF_NODE) &&
+-                        (cur->parent != NULL) &&
+-                        (cur->parent->name != NULL) &&
+-                        (cur->parent->name[0] != 'p')) /* p, pre, param */
++                        (parent != NULL) &&
++                        (parent->name != NULL) &&
++                        (parent->name[0] != 'p')) /* p, pre, param */
+                         xmlOutputBufferWriteString(buf, "\n");
+                 }
+             }
+diff --git a/xmlsave.c b/xmlsave.c
+--- a/xmlsave.c
++++ b/xmlsave.c
+@@ -847,7 +847,7 @@ htmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ static void
+ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+     int format = ctxt->format;
+-    xmlNodePtr tmp, root, unformattedNode = NULL;
++    xmlNodePtr tmp, root, unformattedNode = NULL, parent;
+     xmlAttrPtr attr;
+     xmlChar *start, *end;
+     xmlOutputBufferPtr buf;
+@@ -856,6 +856,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+     buf = ctxt->buf;
+ 
+     root = cur;
++    parent = cur->parent;
+     while (1) {
+         switch (cur->type) {
+         case XML_DOCUMENT_NODE:
+@@ -868,7 +869,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_DOCUMENT_FRAG_NODE:
+-            if (cur->children != NULL) {
++            /* Always validate cur->parent when descending. */
++            if ((cur->parent == parent) && (cur->children != NULL)) {
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -887,7 +890,18 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_ELEMENT_NODE:
+-	    if ((cur != root) && (ctxt->format == 1) && (xmlIndentTreeOutput))
++            /*
++             * Some users like lxml are known to pass nodes with a corrupted
++             * tree structure. Fall back to a recursive call to handle this
++             * case.
++             */
++            if ((cur->parent != parent) && (cur->children != NULL)) {
++                xmlNodeDumpOutputInternal(ctxt, cur);
++                break;
++            }
++
++	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
++                (xmlIndentTreeOutput))
+ 		xmlOutputBufferWrite(buf, ctxt->indent_size *
+ 				     (ctxt->level > ctxt->indent_nr ?
+ 				      ctxt->indent_nr : ctxt->level),
+@@ -942,6 +956,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 xmlOutputBufferWrite(buf, 1, ">");
+                 if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n");
+                 if (ctxt->level >= 0) ctxt->level++;
++                parent = cur;
+                 cur = cur->children;
+                 continue;
+             }
+@@ -1058,13 +1073,9 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 break;
+             }
+ 
+-            /*
+-             * The parent should never be NULL here but we want to handle
+-             * corrupted documents gracefully.
+-             */
+-            if (cur->parent == NULL)
+-                return;
+-            cur = cur->parent;
++            cur = parent;
++            /* cur->parent was validated when descending. */
++            parent = cur->parent;
+ 
+             if (cur->type == XML_ELEMENT_NODE) {
+                 if (ctxt->level > 0) ctxt->level--;
+diff --git a/xmlsave.c b/xmlsave.c
+--- a/xmlsave.c
++++ b/xmlsave.c
+@@ -890,6 +890,13 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+             break;
+ 
+         case XML_ELEMENT_NODE:
++	    if ((cur != root) && (ctxt->format == 1) &&
++                (xmlIndentTreeOutput))
++		xmlOutputBufferWrite(buf, ctxt->indent_size *
++				     (ctxt->level > ctxt->indent_nr ?
++				      ctxt->indent_nr : ctxt->level),
++				     ctxt->indent);
++
+             /*
+              * Some users like lxml are known to pass nodes with a corrupted
+              * tree structure. Fall back to a recursive call to handle this
+@@ -900,13 +907,6 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+                 break;
+             }
+ 
+-	    if ((ctxt->level > 0) && (ctxt->format == 1) &&
+-                (xmlIndentTreeOutput))
+-		xmlOutputBufferWrite(buf, ctxt->indent_size *
+-				     (ctxt->level > ctxt->indent_nr ?
+-				      ctxt->indent_nr : ctxt->level),
+-				     ctxt->indent);
+-
+             xmlOutputBufferWrite(buf, 1, "<");
+             if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+                 xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
diff --git a/gnu/packages/patches/libxml2-terminating-newline.patch b/gnu/packages/patches/libxml2-terminating-newline.patch
new file mode 100644
index 0000000000..3f5c88dd4e
--- /dev/null
+++ b/gnu/packages/patches/libxml2-terminating-newline.patch
@@ -0,0 +1,33 @@
+Fix a regression in 2.9.12 where serializing empty HTML documents would
+not add a terminating newline.
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/266
+
+Taken from upstream:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/92d9ab4c28842a09ca2b76d3ff2f933e01b6cd6f
+
+diff --git a/HTMLtree.c b/HTMLtree.c
+--- a/HTMLtree.c
++++ b/HTMLtree.c
+@@ -763,11 +763,15 @@ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+             if (((xmlDocPtr) cur)->intSubset != NULL) {
+                 htmlDtdDumpOutput(buf, (xmlDocPtr) cur, NULL);
+             }
+-            /* Always validate cur->parent when descending. */
+-            if ((cur->parent == parent) && (cur->children != NULL)) {
+-                parent = cur;
+-                cur = cur->children;
+-                continue;
++            if (cur->children != NULL) {
++                /* Always validate cur->parent when descending. */
++                if (cur->parent == parent) {
++                    parent = cur;
++                    cur = cur->children;
++                    continue;
++                }
++            } else {
++                xmlOutputBufferWriteString(buf, "\n");
+             }
+             break;
+ 
diff --git a/gnu/packages/patches/libxml2-xpath-recursion-limit.patch b/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
new file mode 100644
index 0000000000..051196c635
--- /dev/null
+++ b/gnu/packages/patches/libxml2-xpath-recursion-limit.patch
@@ -0,0 +1,20 @@
+Fix recursion accounting in XPath expressions:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/264
+
+Taken from upstream:
+
+  https://gitlab.gnome.org/GNOME/libxml2/-/commit/3e1aad4fe584747fd7d17cc7b2863a78e2d21a77
+
+diff --git a/xpath.c b/xpath.c
+--- a/xpath.c
++++ b/xpath.c
+@@ -10983,7 +10983,7 @@ xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
+     }
+ 
+     if (xpctxt != NULL)
+-        xpctxt->depth -= 1;
++        xpctxt->depth -= 10;
+ }
+ 
+ /**
diff --git a/gnu/packages/patches/libxt-guix-search-paths.patch b/gnu/packages/patches/libxt-guix-search-paths.patch
index 5419edd1bd..61022d232a 100644
--- a/gnu/packages/patches/libxt-guix-search-paths.patch
+++ b/gnu/packages/patches/libxt-guix-search-paths.patch
@@ -1,13 +1,9 @@
 diff --git a/src/Intrinsic.c b/src/Intrinsic.c
-index c9624ec..addcdba 100644
 --- a/src/Intrinsic.c
 +++ b/src/Intrinsic.c
-@@ -1312,21 +1312,101 @@ static void FillInLangSubs(
-     } else (void) strcpy(*rest, string);
+@@ -1345,21 +1345,99 @@ FillInLangSubs(Substitution subs, XtPerDisplay pd)
  }
  
-+
-+
  /*
 - * default path used if environment variable XFILESEARCHPATH
 - * is not defined.  Also substitued for %D.
@@ -24,8 +20,9 @@ index c9624ec..addcdba 100644
 +   These values provide the default paths where Guix/GuixSD can expect
 +   to find resources for installed packages.
   */
--static const char *implementation_default_path(void)
-+static const char *guix_default_path(void)
+ static const char *
+-implementation_default_path(void)
++guix_default_path(void)
  {
 -#if defined(WIN32)
 -    static char xfilesearchpath[] = "";
@@ -115,7 +112,7 @@ index c9624ec..addcdba 100644
  }
  
  
-@@ -1354,7 +1434,7 @@ _XtString XtResolvePathname(
+@@ -1388,7 +1466,7 @@ XtResolvePathname(Display *dpy,
  {
      XtPerDisplay pd;
      static const char *defaultPath = NULL;
diff --git a/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch b/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch
new file mode 100644
index 0000000000..4982587d15
--- /dev/null
+++ b/gnu/packages/patches/llvm-3.6-fix-build-with-gcc-10.patch
@@ -0,0 +1,13 @@
+Adapted from https://github.com/digego/extempore/pull/322/files
+
+--- a/include/llvm/IR/ValueMap.h	2015-08-04 00:30:24.000000000 +0200
++++ b/include/llvm/IR/ValueMap.h	2018-07-14 21:09:09.769502736 +0200
+@@ -99,7 +99,7 @@
+   explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64)
+       : Map(NumInitBuckets), Data(Data) {}
+
+-  bool hasMD() const { return MDMap; }
++  bool hasMD() const { return static_cast<bool>(MDMap); }
+   MDMapT &MD() {
+     if (!MDMap)
+       MDMap.reset(new MDMapT);
diff --git a/gnu/packages/patches/mariadb-CVE-2021-27928.patch b/gnu/packages/patches/mariadb-CVE-2021-27928.patch
deleted file mode 100644
index 39a023c159..0000000000
--- a/gnu/packages/patches/mariadb-CVE-2021-27928.patch
+++ /dev/null
@@ -1,642 +0,0 @@
-From 7580701e6279900fec40822952a3b874732289cf Mon Sep 17 00:00:00 2001
-From: Sergei Golubchik <serg@mariadb.org>
-Date: Thu, 18 Feb 2021 14:20:48 +0100
-Subject: [PATCH] make @@wsrep_provider and @@wsrep_notify_cmd read-only
-
-this should simplify run-time cluster management
----
- mysql-test/suite/galera/disabled.def          |  2 +
- .../galera/include/galera_load_provider.inc   | 19 --------
- .../galera/include/galera_unload_provider.inc |  3 +-
- .../suite/galera/r/galera_ist_rsync.result    |  2 +-
- .../galera/r/galera_sst_mysqldump.result      |  2 +-
- .../suite/galera/r/mysql-wsrep#33.result      |  2 +-
- .../suite/sys_vars/r/sysvars_wsrep.result     |  4 +-
- .../sys_vars/r/wsrep_notify_cmd_basic.result  | 47 -------------------
- .../sys_vars/r/wsrep_provider_basic.result    | 40 ----------------
- .../r/wsrep_provider_options_basic.result     | 46 ------------------
- .../sys_vars/t/wsrep_notify_cmd_basic.test    | 43 -----------------
- .../sys_vars/t/wsrep_provider_basic.test      | 39 ---------------
- .../t/wsrep_provider_options_basic.test       | 41 ----------------
- mysql-test/suite/wsrep/disabled.def           |  2 +
- mysql-test/suite/wsrep/r/variables.result     | 12 ++---
- mysql-test/suite/wsrep/t/variables.test       | 32 +++----------
- sql/sys_vars.cc                               |  8 ++--
- 17 files changed, 25 insertions(+), 319 deletions(-)
- delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
- delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
- delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
- delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
- delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
- delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
-
-diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def
-index d940c702d54..83f26e81636 100644
---- a/mysql-test/suite/galera/disabled.def
-+++ b/mysql-test/suite/galera/disabled.def
-@@ -49,3 +49,5 @@ partition : MDEV-19958 Galera test failure on galera.partition
- query_cache: MDEV-15805 Test failure on galera.query_cache
- sql_log_bin : MDEV-21491 galera.sql_log_bin
- versioning_trx_id : MDEV-18590 galera.versioning_trx_id
-+galera_wsrep_provider_unset_set: wsrep_provider is read-only for security reasons
-+pxc-421: wsrep_provider is read-only for security reasons
-diff --git a/mysql-test/suite/galera/include/galera_load_provider.inc b/mysql-test/suite/galera/include/galera_load_provider.inc
-index 0f843597d9c..28010cc5b71 100644
---- a/mysql-test/suite/galera/include/galera_load_provider.inc
-+++ b/mysql-test/suite/galera/include/galera_load_provider.inc
-@@ -1,25 +1,6 @@
- --echo Loading wsrep provider ...
- 
- --disable_query_log
----eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig';
--
--#
--# count occurences of successful node starts in error log
--#
--perl;
--  use strict;
--   my $test_log=$ENV{'LOG_FILE'} or die "LOG_FILE not set";
--   my $test_log_copy=$test_log . '.copy';
--   if (-e $test_log_copy) {
--      unlink $test_log_copy;
--   }
--
--EOF
----copy_file $LOG_FILE $LOG_FILE.copy
--
--#
--#  now join to the cluster
--#
- --eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig';
- 
- --enable_query_log
-diff --git a/mysql-test/suite/galera/include/galera_unload_provider.inc b/mysql-test/suite/galera/include/galera_unload_provider.inc
-index cd841f51fbc..ed7e9bc41f0 100644
---- a/mysql-test/suite/galera/include/galera_unload_provider.inc
-+++ b/mysql-test/suite/galera/include/galera_unload_provider.inc
-@@ -1,7 +1,6 @@
- --echo Unloading wsrep provider ...
- 
- --let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address`
----let $wsrep_provider_orig = `SELECT @@wsrep_provider`
- --let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options`
- --let $wsrep_error_log_orig = `SELECT @@log_error`
- if(!$wsrep_log_error_orig)
-@@ -12,4 +11,4 @@ if(!$wsrep_log_error_orig)
- }
- --let LOG_FILE= $wsrep_log_error_orig
- 
--SET GLOBAL wsrep_provider = 'none';
-+SET GLOBAL wsrep_cluster_address = '';
-diff --git a/mysql-test/suite/galera/r/galera_ist_rsync.result b/mysql-test/suite/galera/r/galera_ist_rsync.result
-index 13f7d898a59..70a87c73df7 100644
---- a/mysql-test/suite/galera/r/galera_ist_rsync.result
-+++ b/mysql-test/suite/galera/r/galera_ist_rsync.result
-@@ -23,7 +23,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
- INSERT INTO t1 VALUES ('node2_committed_before');
- COMMIT;
- Unloading wsrep provider ...
--SET GLOBAL wsrep_provider = 'none';
-+SET GLOBAL wsrep_cluster_address = '';
- connection node_1;
- SET AUTOCOMMIT=OFF;
- START TRANSACTION;
-diff --git a/mysql-test/suite/galera/r/galera_sst_mysqldump.result b/mysql-test/suite/galera/r/galera_sst_mysqldump.result
-index 4ed679ba477..145b3a94775 100644
---- a/mysql-test/suite/galera/r/galera_sst_mysqldump.result
-+++ b/mysql-test/suite/galera/r/galera_sst_mysqldump.result
-@@ -30,7 +30,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
- INSERT INTO t1 VALUES ('node2_committed_before');
- COMMIT;
- Unloading wsrep provider ...
--SET GLOBAL wsrep_provider = 'none';
-+SET GLOBAL wsrep_cluster_address = '';
- connection node_1;
- SET AUTOCOMMIT=OFF;
- START TRANSACTION;
-diff --git a/mysql-test/suite/galera/r/mysql-wsrep#33.result b/mysql-test/suite/galera/r/mysql-wsrep#33.result
-index fb0b593cc96..45c6a3f660a 100644
---- a/mysql-test/suite/galera/r/mysql-wsrep#33.result
-+++ b/mysql-test/suite/galera/r/mysql-wsrep#33.result
-@@ -32,7 +32,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
- INSERT INTO t1 VALUES ('node2_committed_before');
- COMMIT;
- Unloading wsrep provider ...
--SET GLOBAL wsrep_provider = 'none';
-+SET GLOBAL wsrep_cluster_address = '';
- connection node_1;
- SET AUTOCOMMIT=OFF;
- START TRANSACTION;
-diff --git a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
-index 4b6abf85434..f73bfbd13e7 100644
---- a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
-+++ b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
-@@ -403,7 +403,7 @@ NUMERIC_MIN_VALUE	NULL
- NUMERIC_MAX_VALUE	NULL
- NUMERIC_BLOCK_SIZE	NULL
- ENUM_VALUE_LIST	NULL
--READ_ONLY	NO
-+READ_ONLY	YES
- COMMAND_LINE_ARGUMENT	REQUIRED
- GLOBAL_VALUE_PATH	NULL
- VARIABLE_NAME	WSREP_ON
-@@ -463,7 +463,7 @@ NUMERIC_MIN_VALUE	NULL
- NUMERIC_MAX_VALUE	NULL
- NUMERIC_BLOCK_SIZE	NULL
- ENUM_VALUE_LIST	NULL
--READ_ONLY	NO
-+READ_ONLY	YES
- COMMAND_LINE_ARGUMENT	REQUIRED
- GLOBAL_VALUE_PATH	NULL
- VARIABLE_NAME	WSREP_PROVIDER_OPTIONS
-diff --git a/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result b/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
-deleted file mode 100644
-index 056ff8c817b..00000000000
---- a/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
-+++ /dev/null
-@@ -1,47 +0,0 @@
--#
--# wsrep_notify_cmd
--#
--call mtr.add_suppression("WSREP: Failed to get provider options");
--# save the initial value
--SET @wsrep_notify_cmd_global_saved = @@global.wsrep_notify_cmd;
--# default
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--
--
--# scope
--SELECT @@session.wsrep_notify_cmd;
--ERROR HY000: Variable 'wsrep_notify_cmd' is a GLOBAL variable
--SET @@global.wsrep_notify_cmd='notify_cmd';
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--notify_cmd
--
--# valid values
--SET @@global.wsrep_notify_cmd='command';
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--command
--SET @@global.wsrep_notify_cmd='hyphenated-command';
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--hyphenated-command
--SET @@global.wsrep_notify_cmd=default;
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--
--SET @@global.wsrep_notify_cmd=NULL;
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--NULL
--
--# invalid values
--SET @@global.wsrep_notify_cmd=1;
--ERROR 42000: Incorrect argument type to variable 'wsrep_notify_cmd'
--SELECT @@global.wsrep_notify_cmd;
--@@global.wsrep_notify_cmd
--NULL
--
--# restore the initial value
--SET @@global.wsrep_notify_cmd = @wsrep_notify_cmd_global_saved;
--# End of test
-diff --git a/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result b/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
-deleted file mode 100644
-index 3e4ac8ca883..00000000000
---- a/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
-+++ /dev/null
-@@ -1,40 +0,0 @@
--#
--# wsrep_provider
--#
--# save the initial value
--SET @wsrep_provider_global_saved = @@global.wsrep_provider;
--# default
--SELECT @@global.wsrep_provider;
--@@global.wsrep_provider
--none
--
--# scope
--SELECT @@session.wsrep_provider;
--ERROR HY000: Variable 'wsrep_provider' is a GLOBAL variable
--SELECT @@global.wsrep_provider;
--@@global.wsrep_provider
--none
--
--# valid values
--SET @@global.wsrep_provider=default;
--SELECT @@global.wsrep_provider;
--@@global.wsrep_provider
--none
--
--# invalid values
--SET @@global.wsrep_provider='/invalid/libgalera_smm.so';
--ERROR 42000: Variable 'wsrep_provider' can't be set to the value of '/invalid/libgalera_smm.so'
--SET @@global.wsrep_provider=NULL;
--ERROR 42000: Variable 'wsrep_provider' can't be set to the value of 'NULL'
--SELECT @@global.wsrep_provider;
--@@global.wsrep_provider
--none
--SET @@global.wsrep_provider=1;
--ERROR 42000: Incorrect argument type to variable 'wsrep_provider'
--SELECT @@global.wsrep_provider;
--@@global.wsrep_provider
--none
--
--# restore the initial value
--SET @@global.wsrep_provider = @wsrep_provider_global_saved;
--# End of test
-diff --git a/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result b/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
-deleted file mode 100644
-index 15949a14e39..00000000000
---- a/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
-+++ /dev/null
-@@ -1,46 +0,0 @@
--#
--# wsrep_provider_options
--#
--call mtr.add_suppression("WSREP: Failed to get provider options");
--# default
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--
--# scope
--SELECT @@session.wsrep_provider_options;
--ERROR HY000: Variable 'wsrep_provider_options' is a GLOBAL variable
--SET @@global.wsrep_provider_options='option1';
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--
--# valid values
--SET @@global.wsrep_provider_options='name1=value1;name2=value2';
--ERROR HY000: WSREP (galera) not started
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--SET @@global.wsrep_provider_options='hyphenated-name:value';
--ERROR HY000: WSREP (galera) not started
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--SET @@global.wsrep_provider_options=default;
--ERROR HY000: WSREP (galera) not started
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--
--# invalid values
--SET @@global.wsrep_provider_options=1;
--ERROR 42000: Incorrect argument type to variable 'wsrep_provider_options'
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--SET @@global.wsrep_provider_options=NULL;
--Got one of the listed errors
--SELECT @@global.wsrep_provider_options;
--@@global.wsrep_provider_options
--
--# End of test
-diff --git a/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test b/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
-deleted file mode 100644
-index 6d1535ba148..00000000000
---- a/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
-+++ /dev/null
-@@ -1,43 +0,0 @@
----source include/have_wsrep.inc
--
----echo #
----echo # wsrep_notify_cmd
----echo #
--
--call mtr.add_suppression("WSREP: Failed to get provider options");
--
----echo # save the initial value
--SET @wsrep_notify_cmd_global_saved = @@global.wsrep_notify_cmd;
--
----echo # default
--SELECT @@global.wsrep_notify_cmd;
--
----echo
----echo # scope
----error ER_INCORRECT_GLOBAL_LOCAL_VAR
--SELECT @@session.wsrep_notify_cmd;
--SET @@global.wsrep_notify_cmd='notify_cmd';
--SELECT @@global.wsrep_notify_cmd;
--
----echo
----echo # valid values
--SET @@global.wsrep_notify_cmd='command';
--SELECT @@global.wsrep_notify_cmd;
--SET @@global.wsrep_notify_cmd='hyphenated-command';
--SELECT @@global.wsrep_notify_cmd;
--SET @@global.wsrep_notify_cmd=default;
--SELECT @@global.wsrep_notify_cmd;
--SET @@global.wsrep_notify_cmd=NULL;
--SELECT @@global.wsrep_notify_cmd;
--
----echo
----echo # invalid values
----error ER_WRONG_TYPE_FOR_VAR
--SET @@global.wsrep_notify_cmd=1;
--SELECT @@global.wsrep_notify_cmd;
--
----echo
----echo # restore the initial value
--SET @@global.wsrep_notify_cmd = @wsrep_notify_cmd_global_saved;
--
----echo # End of test
-diff --git a/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test b/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
-deleted file mode 100644
-index 1190ab41bb0..00000000000
---- a/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
-+++ /dev/null
-@@ -1,39 +0,0 @@
----source include/have_wsrep.inc
--
----echo #
----echo # wsrep_provider
----echo #
--
----echo # save the initial value
--SET @wsrep_provider_global_saved = @@global.wsrep_provider;
--
----echo # default
--SELECT @@global.wsrep_provider;
--
----echo
----echo # scope
----error ER_INCORRECT_GLOBAL_LOCAL_VAR
--SELECT @@session.wsrep_provider;
--SELECT @@global.wsrep_provider;
--
----echo
----echo # valid values
--SET @@global.wsrep_provider=default;
--SELECT @@global.wsrep_provider;
--
----echo
----echo # invalid values
----error ER_WRONG_VALUE_FOR_VAR
--SET @@global.wsrep_provider='/invalid/libgalera_smm.so';
----error ER_WRONG_VALUE_FOR_VAR
--SET @@global.wsrep_provider=NULL;
--SELECT @@global.wsrep_provider;
----error ER_WRONG_TYPE_FOR_VAR
--SET @@global.wsrep_provider=1;
--SELECT @@global.wsrep_provider;
--
----echo
----echo # restore the initial value
--SET @@global.wsrep_provider = @wsrep_provider_global_saved;
--
----echo # End of test
-diff --git a/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test b/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
-deleted file mode 100644
-index 6eb3a94b6a4..00000000000
---- a/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
-+++ /dev/null
-@@ -1,41 +0,0 @@
----source include/have_wsrep.inc
--
----echo #
----echo # wsrep_provider_options
----echo #
--
--call mtr.add_suppression("WSREP: Failed to get provider options");
--
----echo # default
--SELECT @@global.wsrep_provider_options;
--
----echo
----echo # scope
----error ER_INCORRECT_GLOBAL_LOCAL_VAR
--SELECT @@session.wsrep_provider_options;
----error 0,ER_WRONG_ARGUMENTS
--SET @@global.wsrep_provider_options='option1';
--SELECT @@global.wsrep_provider_options;
--
----echo
----echo # valid values
----error ER_WRONG_ARGUMENTS
--SET @@global.wsrep_provider_options='name1=value1;name2=value2';
--SELECT @@global.wsrep_provider_options;
----error ER_WRONG_ARGUMENTS
--SET @@global.wsrep_provider_options='hyphenated-name:value';
--SELECT @@global.wsrep_provider_options;
----error ER_WRONG_ARGUMENTS
--SET @@global.wsrep_provider_options=default;
--SELECT @@global.wsrep_provider_options;
--
----echo
----echo # invalid values
----error ER_WRONG_TYPE_FOR_VAR
--SET @@global.wsrep_provider_options=1;
--SELECT @@global.wsrep_provider_options;
----error ER_WRONG_ARGUMENTS,ER_WRONG_ARGUMENTS
--SET @@global.wsrep_provider_options=NULL;
--SELECT @@global.wsrep_provider_options;
--
----echo # End of test
-diff --git a/mysql-test/suite/wsrep/disabled.def b/mysql-test/suite/wsrep/disabled.def
-index 11577bfe8b0..3d204db6945 100644
---- a/mysql-test/suite/wsrep/disabled.def
-+++ b/mysql-test/suite/wsrep/disabled.def
-@@ -10,3 +10,5 @@
- #
- ##############################################################################
- 
-+
-+mdev_6832: wsrep_provider is read-only for security reasons
-diff --git a/mysql-test/suite/wsrep/r/variables.result b/mysql-test/suite/wsrep/r/variables.result
-index a9988fd1628..e57440125ee 100644
---- a/mysql-test/suite/wsrep/r/variables.result
-+++ b/mysql-test/suite/wsrep/r/variables.result
-@@ -14,7 +14,6 @@ SET SESSION wsrep_replicate_myisam= ON;
- ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable and should be set with SET GLOBAL
- SET GLOBAL wsrep_replicate_myisam= ON;
- SET GLOBAL wsrep_replicate_myisam= OFF;
--SET GLOBAL wsrep_provider=none;
- #
- # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
- # variables when using "_"
-@@ -151,7 +150,6 @@ wsrep_local_state_comment	#
- # Should show nothing.
- SHOW STATUS LIKE 'x';
- Variable_name	Value
--SET GLOBAL wsrep_provider=none;
- 
- SHOW STATUS LIKE 'wsrep_local_state_uuid';
- Variable_name	Value
-@@ -160,7 +158,6 @@ wsrep_local_state_uuid	#
- SHOW STATUS LIKE 'wsrep_last_committed';
- Variable_name	Value
- wsrep_last_committed	#
--SET GLOBAL wsrep_provider=none;
- 
- #
- # MDEV#6206: wsrep_slave_threads subtracts from max_connections
-@@ -174,7 +171,7 @@ SELECT @@global.wsrep_slave_threads;
- 1
- SELECT @@global.wsrep_cluster_address;
- @@global.wsrep_cluster_address
--
-+gcomm://
- SELECT @@global.wsrep_on;
- @@global.wsrep_on
- 1
-@@ -183,14 +180,14 @@ Variable_name	Value
- Threads_connected	1
- SHOW STATUS LIKE 'wsrep_thread_count';
- Variable_name	Value
--wsrep_thread_count	0
-+wsrep_thread_count	2
- 
- SELECT @@global.wsrep_provider;
- @@global.wsrep_provider
- libgalera_smm.so
- SELECT @@global.wsrep_cluster_address;
- @@global.wsrep_cluster_address
--
-+gcomm://
- SELECT @@global.wsrep_on;
- @@global.wsrep_on
- 1
-@@ -199,11 +196,10 @@ Variable_name	Value
- Threads_connected	1
- SHOW STATUS LIKE 'wsrep_thread_count';
- Variable_name	Value
--wsrep_thread_count	0
-+wsrep_thread_count	2
- 
- # Setting wsrep_cluster_address triggers the creation of
- # applier/rollbacker threads.
--SET GLOBAL wsrep_cluster_address= 'gcomm://';
- # Wait for applier thread to get created 1.
- # Wait for applier thread to get created 2.
- SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
-diff --git a/mysql-test/suite/wsrep/t/variables.test b/mysql-test/suite/wsrep/t/variables.test
-index f2c3a0a3b78..fd352b61a3a 100644
---- a/mysql-test/suite/wsrep/t/variables.test
-+++ b/mysql-test/suite/wsrep/t/variables.test
-@@ -23,7 +23,7 @@ SET GLOBAL wsrep_replicate_myisam= ON;
- 
- # Reset it back.
- SET GLOBAL wsrep_replicate_myisam= OFF;
--SET GLOBAL wsrep_provider=none;
-+#SET GLOBAL wsrep_provider=none;
- 
- --echo #
- --echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
-@@ -32,9 +32,6 @@ SET GLOBAL wsrep_provider=none;
- 
- CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*");
- 
----disable_query_log
--eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
----enable_query_log
- 
- --replace_column 2 #
- SHOW GLOBAL STATUS LIKE 'wsrep%';
-@@ -50,11 +47,9 @@ SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
- SHOW STATUS LIKE 'x';
- 
- # Reset it back.
--SET GLOBAL wsrep_provider=none;
-+#SET GLOBAL wsrep_provider=none;
- 
----disable_query_log
--eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
----enable_query_log
-+#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
- 
- # The following 2 variables are used by mariabackup
- # SST.
-@@ -66,7 +61,7 @@ SHOW STATUS LIKE 'wsrep_local_state_uuid';
- SHOW STATUS LIKE 'wsrep_last_committed';
- 
- # Reset it back.
--SET GLOBAL wsrep_provider=none;
-+#SET GLOBAL wsrep_provider=none;
- 
- --echo
- --echo #
-@@ -74,9 +69,7 @@ SET GLOBAL wsrep_provider=none;
- --echo #
- call mtr.add_suppression("WSREP: Failed to get provider options");
- 
----disable_query_log
--eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
----enable_query_log
-+#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
- 
- --replace_regex /.*libgalera_smm.*/libgalera_smm.so/
- SELECT @@global.wsrep_provider;
-@@ -87,9 +80,7 @@ SHOW STATUS LIKE 'threads_connected';
- SHOW STATUS LIKE 'wsrep_thread_count';
- --echo
- 
----disable_query_log
--eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
----enable_query_log
-+#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
- 
- --replace_regex /.*libgalera_smm.*/libgalera_smm.so/
- SELECT @@global.wsrep_provider;
-@@ -101,7 +92,7 @@ SHOW STATUS LIKE 'wsrep_thread_count';
- 
- --echo # Setting wsrep_cluster_address triggers the creation of
- --echo # applier/rollbacker threads.
--SET GLOBAL wsrep_cluster_address= 'gcomm://';
-+#SET GLOBAL wsrep_cluster_address= 'gcomm://';
- 
- --echo # Wait for applier thread to get created 1.
- --let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
-@@ -162,15 +153,6 @@ SET @@global.wsrep_sst_auth= NULL;
- SELECT @@global.wsrep_sst_auth;
- SET @@global.wsrep_sst_auth= @wsrep_sst_auth_saved;
- 
--# Reset (for mtr internal checks)
--
----disable_query_log
--SET GLOBAL wsrep_slave_threads= @wsrep_slave_threads_saved;
--eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
--SET GLOBAL wsrep_cluster_address= @wsrep_cluster_address_saved;
--SET GLOBAL wsrep_provider_options= @wsrep_provider_options_saved;
----enable_query_log
--
- --source include/galera_wait_ready.inc
- 
- --echo # End of test.
-diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
-index 64040243df0..8c67a4d432a 100644
---- a/sql/sys_vars.cc
-+++ b/sql/sys_vars.cc
-@@ -5669,8 +5669,8 @@ static Sys_var_tz Sys_time_zone(
- 
- static Sys_var_charptr_fscs Sys_wsrep_provider(
-        "wsrep_provider", "Path to replication provider library",
--       PREALLOCATED GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG),
--       DEFAULT(WSREP_NONE),
-+       PREALLOCATED READ_ONLY GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG),
-+       DEFAULT(WSREP_NONE),
-        NO_MUTEX_GUARD, NOT_IN_BINLOG,
-        ON_CHECK(wsrep_provider_check), ON_UPDATE(wsrep_provider_update));
- 
-@@ -5886,8 +5886,8 @@ static Sys_var_ulong Sys_wsrep_max_ws_rows (
- 
- static Sys_var_charptr Sys_wsrep_notify_cmd(
-        "wsrep_notify_cmd", "",
--       GLOBAL_VAR(wsrep_notify_cmd),CMD_LINE(REQUIRED_ARG),
--       DEFAULT(""));
-+       READ_ONLY GLOBAL_VAR(wsrep_notify_cmd), CMD_LINE(REQUIRED_ARG),
-+       DEFAULT(""));
- 
- static Sys_var_mybool Sys_wsrep_certify_nonPK(
-        "wsrep_certify_nonPK", "Certify tables with no primary key",
--- 
-2.31.0
-
diff --git a/gnu/packages/patches/mesa-opencl-all-targets.patch b/gnu/packages/patches/mesa-opencl-all-targets.patch
new file mode 100644
index 0000000000..99d4abcea4
--- /dev/null
+++ b/gnu/packages/patches/mesa-opencl-all-targets.patch
@@ -0,0 +1,25 @@
+This patch restores LLVM targets needed for OpenCL, *reverting* this
+upstream commit:
+
+  From 80817b6e344258ac9b955f824ebf9019a0fc1610 Mon Sep 17 00:00:00 2001
+  From: Jesse Natalie <jenatali@microsoft.com>
+  Date: Wed, 18 Nov 2020 18:30:30 -0800
+  Subject: [PATCH] meson: Adjust Clover's required LLVM modules
+
+diff --git a/meson.build b/meson.build
+index 6d1607c35a3..f828eb80faa 100644
+--- b/meson.build
++++ a/meson.build
+@@ -1479,10 +1479,9 @@
+ endif
+ if with_gallium_opencl
+   llvm_modules += [
+-    'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
+-    'lto', 'option', 'objcarcopts', 'profiledata'
++    'all-targets', 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
++    'lto', 'option', 'objcarcopts', 'profiledata',
+   ]
+-  llvm_optional_modules += ['frontendopenmp']
+ endif
+ if with_microsoft_clc
+   llvm_modules += ['target', 'linker', 'irreader', 'option', 'libdriver']
diff --git a/gnu/packages/patches/mesa-skip-tests.patch b/gnu/packages/patches/mesa-skip-tests.patch
index 2622d5d312..7ff571dcf5 100644
--- a/gnu/packages/patches/mesa-skip-tests.patch
+++ b/gnu/packages/patches/mesa-skip-tests.patch
@@ -1,23 +1,3 @@
-disk_cache_create() here looks up the users home directory from <pwd.h>
-which resolves to "/" in the build environment. I could not find an easy
-way to set the home directory to something else, so we disable this test
-for now.
-
---- a/src/compiler/glsl/tests/cache_test.c
-+++ b/src/compiler/glsl/tests/cache_test.c
-@@ -170,11 +170,6 @@
-    unsetenv("MESA_GLSL_CACHE_DIR");
-    unsetenv("XDG_CACHE_HOME");
- 
--   cache = disk_cache_create("test", "make_check", 0);
--   expect_non_null(cache, "disk_cache_create with no environment variables");
--
--   disk_cache_destroy(cache);
--
-    /* Test with XDG_CACHE_HOME set */
-    setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1);
-    cache = disk_cache_create("test", "make_check", 0);
-
 This test fails on i686-linux. I couldn't come up with a regex that
 could be used to disable it just on i686-linux, so we disable it
 completely with this patch:
@@ -25,25 +5,15 @@ completely with this patch:
 https://gitlab.freedesktop.org/mesa/mesa/-/issues/4091
 
 diff --git a/src/util/meson.build b/src/util/meson.build
-index 0893f64..909b3e0 100644
+index 319b22d9bf7..93790c72675 100644
 --- a/src/util/meson.build
 +++ b/src/util/meson.build
-@@ -289,18 +289,6 @@ if with_tests
-      suite : ['util'],
-   )   
+@@ -344,7 +344,7 @@ if with_tests
+     )
+   endif
  
--  test(
--    'u_debug_stack',
--    executable(
--      'u_debug_stack_test',
--      files('u_debug_stack_test.cpp'),
--      include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
--      dependencies : [idep_mesautil, idep_gtest],
--      c_args : [c_msvc_compat_args],
--    ),
--     suite : ['util'],
--  )
--
-   process_test_exe = executable(
-     'process_test',
-     files('process_test.c'),
+-  foreach t: ['bitset', 'register_allocate', 'u_debug_stack', 'u_qsort']
++  foreach t: ['bitset', 'register_allocate', 'u_qsort']
+     test(
+       t,
+       executable(
diff --git a/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch b/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch
new file mode 100644
index 0000000000..f16daa8009
--- /dev/null
+++ b/gnu/packages/patches/meson-allow-dirs-outside-of-prefix.patch
@@ -0,0 +1,20 @@
+Source: https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/tools/build-managers/meson/allow-dirs-outside-of-prefix.patch
+--- a/mesonbuild/coredata.py
++++ b/mesonbuild/coredata.py
+@@ -506,7 +506,6 @@ class CoreData:
+             return value
+         if option.name.endswith('dir') and value.is_absolute() and \
+            option not in BULITIN_DIR_NOPREFIX_OPTIONS:
+-            # Value must be a subdir of the prefix
+             # commonpath will always return a path in the native format, so we
+             # must use pathlib.PurePath to do the same conversion before
+             # comparing.
+@@ -518,7 +517,7 @@ class CoreData:
+             try:
+                 value = value.relative_to(prefix)
+             except ValueError:
+-                raise MesonException(msg.format(option, value, prefix))
++                pass
+             if '..' in str(value):
+                 raise MesonException(msg.format(option, value, prefix))
+         return value.as_posix()
diff --git a/gnu/packages/patches/meson-for-build-rpath.patch b/gnu/packages/patches/meson-for-build-rpath.patch
deleted file mode 100644
index ef9a73f07c..0000000000
--- a/gnu/packages/patches/meson-for-build-rpath.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-This patch removes a part of meson that clears the rpath upon installation.
-This will only be applied to a special version of meson, used for the
-meson-build-system.
-
-Original patch for Meson 0.42.0 by Peter Mikkelsen <petermikkelsen10@gmail.com>
-
---- meson-0.47.1/mesonbuild/minstall.py.old	2018-08-10 11:01:27.812327013 +0200
-+++ meson-0.47.1/mesonbuild/minstall.py	2018-08-10 11:01:51.940368505 +0200
-@@ -436,15 +436,6 @@
-                         print("Symlink creation does not work on this platform. "
-                               "Skipping all symlinking.")
-                         printed_symlink_error = True
--            if os.path.isfile(outname):
--                try:
--                    depfixer.fix_rpath(outname, install_rpath, final_path,
--                                       install_name_mappings, verbose=False)
--                except SystemExit as e:
--                    if isinstance(e.code, int) and e.code == 0:
--                        pass
--                    else:
--                        raise
- 
- def run(args):
-     parser = buildparser()
diff --git a/gnu/packages/patches/metabat-fix-compilation.patch b/gnu/packages/patches/metabat-fix-compilation.patch
deleted file mode 100644
index 7086a96e86..0000000000
--- a/gnu/packages/patches/metabat-fix-compilation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-This patch changes metabat so that (1) it is not build statically, (2) it uses
-shared libraries rather than static libraries where possible.
-
-diff --git a/SConstruct b/SConstruct
-index 69cdc0a..ac99bcb 100644
---- a/SConstruct
-+++ b/SConstruct
-@@ -26,8 +26,6 @@ debug = ARGUMENTS.get('DEBUG', None)
- build_flags = ['-Wall', '-g', '-std=c++11', '-fopenmp']
- link_flags = ['-lstdc++', '-lm', '-fopenmp']
- 
--if platform.platform(True, True).find('Darwin') == -1:
--    link_flags.extend(['-static', '-static-libgcc', '-static-libstdc++'])
- 
- if debug is None:
-     build_flags.extend(['-O3', '-DNDEBUG', '-Wno-unknown-pragmas', '-Wno-deprecated-declarations', '-Wno-overflow', '-Wno-unused-variable'])
-@@ -110,17 +108,17 @@ def findStaticOrShared( lib, testPaths, static_source_list, link_flag_list, stat
-     for path in testPaths:
-         if not os.path.isdir(path):
-             continue
-+        for testfile in ('%s/lib%s.so' % (path, lib), '%s/lib%s.dylib' % (path, lib)):
-+            if os.path.isfile(testfile):
-+                print "Found shared library %s as %s" % (lib, testfile)
-+                link_flag_list.extend( ["-L%s" % (path), "-l%s" % (lib) ] )
-+                return
-         for suffix in staticSuffixes:
-             testfile = '%s/lib%s%s' % (path, lib, suffix)
-             if os.path.isfile(testfile):
-                 static_source_list.append(testfile)
-                 print "Found static library %s as %s" % (lib, testfile)
-                 return
--        for testfile in ('%s/lib%s.so' % (path, lib), '%s/lib%s.dylib' % (path, lib)):
--            if os.path.isfile(testfile):
--                print "Found shared library %s as %s" % (lib, testfile)
--                link_flag_list.extend( ["-L%s" % (path), "-l%s" % (lib) ] )
--                return
-     print "Could not find library for %s!!! Looked in %s" % (lib, testPaths)
-     return
- 
diff --git a/gnu/packages/patches/mit-krb5-hurd.patch b/gnu/packages/patches/mit-krb5-hurd.patch
index d4962b1e60..449320cea4 100644
--- a/gnu/packages/patches/mit-krb5-hurd.patch
+++ b/gnu/packages/patches/mit-krb5-hurd.patch
@@ -148,18 +148,3 @@ index 7e981d4..d83b3b6 100644
 +# define MAXPATHLEN 4096
 +#endif
  #endif /* _DB_INT_H_ */
-diff --git a/src/tests/resolve/resolve.c b/src/tests/resolve/resolve.c
-index 7339d21..38f7253 100644
---- a/src/tests/resolve/resolve.c
-+++ b/src/tests/resolve/resolve.c
-@@ -73,6 +73,10 @@ char *strchr();
- #include <netinet/in.h>
- #include <netdb.h>
- 
-+#ifndef MAXHOSTNAMELEN
-+# define MAXHOSTNAMELEN 256
-+#endif
-+
- int
- main(argc, argv)
-     int argc;
diff --git a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch b/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
deleted file mode 100644
index 491a358731..0000000000
--- a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Fix a null pointer dereference when no DNS search path is configured.
-This showed up as a segfault while running the gsasl test suite.
-
-Taken from upstream:
-https://github.com/krb5/krb5/commit/cd82bf377e7fad2409c76bf8b241920692f34fda
-
-diff --git a/src/lib/krb5/os/dnsglue.c b/src/lib/krb5/os/dnsglue.c
-index e35ca9d76c..0cd213fdd7 100644
---- a/src/lib/krb5/os/dnsglue.c
-+++ b/src/lib/krb5/os/dnsglue.c
-@@ -91,7 +91,7 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h) struct __res_state h
- #define INIT_HANDLE(h) (memset(&h, 0, sizeof(h)), res_ninit(&h) == 0)
- #define SEARCH(h, n, c, t, a, l) res_nsearch(&h, n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(h.dnsrch[0])
-+#define PRIMARY_DOMAIN(h) ((h.dnsrch[0] == NULL) ? NULL : strdup(h.dnsrch[0]))
- #if HAVE_RES_NDESTROY
- #define DESTROY_HANDLE(h) res_ndestroy(&h)
- #else
-@@ -104,7 +104,8 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h)
- #define INIT_HANDLE(h) (res_init() == 0)
- #define SEARCH(h, n, c, t, a, l) res_search(n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(_res.defdname)
-+#define PRIMARY_DOMAIN(h) \
-+    ((_res.defdname == NULL) ? NULL : strdup(_res.defdname))
- #define DESTROY_HANDLE(h)
- 
- #endif
diff --git a/gnu/packages/patches/mpg321-gcc-10.patch b/gnu/packages/patches/mpg321-gcc-10.patch
new file mode 100644
index 0000000000..8966d9f7c8
--- /dev/null
+++ b/gnu/packages/patches/mpg321-gcc-10.patch
@@ -0,0 +1,83 @@
+From f930c3b81bdf9c05152fb005562b3869f6e36f34 Mon Sep 17 00:00:00 2001
+From: "Azamat H. Hackimov" <azamat.hackimov@gmail.com>
+Date: Thu, 4 Jun 2020 20:41:25 +0300
+Subject: [PATCH] Fix GCC10 compilation
+
+---
+ mpg321.c |  8 ++++++++
+ mpg321.h | 16 ++++++++--------
+ 2 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/mpg321.c b/mpg321.c
+index 19282bb..663882e 100644
+--- a/mpg321.c
++++ b/mpg321.c
+@@ -63,6 +63,14 @@
+ #include <pthread.h>
+ #include <semaphore.h>
+ 
++output_frame *Output_Queue;
++decoded_frames *Decoded_Frames;
++int semarray;
++int mad_decoder_position;
++int output_buffer_position;
++double real[FFT_BUFFER_SIZE];
++double imag[FFT_BUFFER_SIZE];
++int loop_remaining;
+ 
+ int pflag = 0;
+ int volume = 0;
+diff --git a/mpg321.h b/mpg321.h
+index 798bff0..235cf4a 100644
+--- a/mpg321.h
++++ b/mpg321.h
+@@ -116,7 +116,7 @@ extern char *playlist_file;
+ extern int quit_now;
+ extern char remote_input_buf[PATH_MAX + 5];
+ extern int file_change;
+-int loop_remaining;
++extern int loop_remaining;
+ 
+ extern int status;
+ extern int scrobbler_time;
+@@ -233,8 +233,8 @@ RETSIGTYPE handle_sigchld(int sig);
+ #define FFT_BUFFER_SIZE_LOG 9
+ #define FFT_BUFFER_SIZE (1 << FFT_BUFFER_SIZE_LOG) /* 512 */
+ /*Temporary data stores to perform FFT in */
+-double real[FFT_BUFFER_SIZE];
+-double imag[FFT_BUFFER_SIZE];
++extern double real[FFT_BUFFER_SIZE];
++extern double imag[FFT_BUFFER_SIZE];
+ 
+ typedef struct {
+ 	double real[FFT_BUFFER_SIZE];
+@@ -258,10 +258,10 @@ fft_state *fft_init(void);
+ /* Output buffer process */
+ void frame_buffer_p();
+ /* Semaphore array */
+-int semarray;
++extern int semarray;
+ /* Input/Output buffer position */
+-int mad_decoder_position;
+-int output_buffer_position;
++extern int mad_decoder_position;
++extern int output_buffer_position;
+ /* Output Frame including needed information */
+ typedef struct {
+ 	unsigned char data[4*1152];
+@@ -285,10 +285,10 @@ typedef struct {
+ } decoded_frames;
+ 
+ /* Output frame queue pointer */
+-output_frame *Output_Queue;
++extern output_frame *Output_Queue;
+ 
+ /* Shared total decoded frames */
+-decoded_frames *Decoded_Frames;
++extern decoded_frames *Decoded_Frames;
+ 
+ #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
+ /* */
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/network-manager-meson.patch b/gnu/packages/patches/network-manager-meson.patch
new file mode 100644
index 0000000000..1056d40ede
--- /dev/null
+++ b/gnu/packages/patches/network-manager-meson.patch
@@ -0,0 +1,21 @@
+Since libnm-wwan.so is not just a loadable module but also a shared library
+that some plugin links against, build it as a shared library while avoiding
+'-Wl,--no-undefined':
+
+  https://github.com/mesonbuild/meson/issues/9492#issuecomment-973117289
+
+diff --git a/src/core/devices/wwan/meson.build b/src/core/devices/wwan/meson.build
+index 37ef738..18ac54f 100644
+--- a/src/core/devices/wwan/meson.build
++++ b/src/core/devices/wwan/meson.build
+@@ -4,8 +4,9 @@ wwan_inc = include_directories('.')
+ 
+ linker_script = join_paths(meson.current_source_dir(), 'libnm-wwan.ver')
+ 
+-libnm_wwan = shared_module(
++libnm_wwan = shared_library(
+   'nm-wwan',
++  override_options: ['b_lundef=false'],
+   sources: files(
+   'nm-service-providers.c',
+   'nm-modem-broadband.c',
diff --git a/gnu/packages/patches/network-manager-plugin-path.patch b/gnu/packages/patches/network-manager-plugin-path.patch
index 505ae31534..ec6767aaac 100644
--- a/gnu/packages/patches/network-manager-plugin-path.patch
+++ b/gnu/packages/patches/network-manager-plugin-path.patch
@@ -3,49 +3,40 @@ From: =?UTF-8?q?Tom=C3=A1=C5=A1=20=C4=8Cech?= <sleep_walker@gnu.org>
 Date: Wed, 3 Jul 2019 13:31:54 +0200
 Subject: [PATCH] respect NM_VPN_PLUGIN_DIR
 
----
- src/vpn/nm-vpn-manager.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
-diff --git a/src/vpn/nm-vpn-manager.c b/src/vpn/nm-vpn-manager.c
-index d063916..d779166 100644
---- a/src/vpn/nm-vpn-manager.c
-+++ b/src/vpn/nm-vpn-manager.c
-@@ -223,6 +223,7 @@ nm_vpn_manager_init (NMVpnManager *self)
- 	GSList *infos, *info;
- 	const char *conf_dir_etc = _nm_vpn_plugin_info_get_default_dir_etc ();
- 	const char *conf_dir_lib = _nm_vpn_plugin_info_get_default_dir_lib ();
-+	const char *conf_dir_user = _nm_vpn_plugin_info_get_default_dir_user ();
+--- a/src/core/vpn/nm-vpn-manager.c	2021-10-29 13:20:01.062917840 -0400
++++ b/src/core/vpn/nm-vpn-manager.c	2021-10-29 13:26:46.094397018 -0400
+@@ -211,6 +211,7 @@
+     GSList *             infos, *info;
+     const char *         conf_dir_etc = _nm_vpn_plugin_info_get_default_dir_etc();
+     const char *         conf_dir_lib = _nm_vpn_plugin_info_get_default_dir_lib();
++    const char *         conf_dir_user = _nm_vpn_plugin_info_get_default_dir_user ();
  
- 	/* Watch the VPN directory for changes */
- 	file = g_file_new_for_path (conf_dir_lib);
-@@ -241,6 +242,14 @@ nm_vpn_manager_init (NMVpnManager *self)
- 		                                         G_CALLBACK (vpn_dir_changed), self);
- 	}
+     /* Watch the VPN directory for changes */
+     file              = g_file_new_for_path(conf_dir_lib);
+@@ -229,6 +230,14 @@
+             g_signal_connect(priv->monitor_etc, "changed", G_CALLBACK(vpn_dir_changed), self);
+     }
  
-+	file = g_file_new_for_path (conf_dir_user);
-+	priv->monitor_etc = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
-+	g_object_unref (file);
-+	if (priv->monitor_etc) {
-+		priv->monitor_id_etc = g_signal_connect (priv->monitor_etc, "changed",
-+		                                         G_CALLBACK (vpn_dir_changed), self);
-+	}
++    file              = g_file_new_for_path (conf_dir_user);
++    priv->monitor_etc = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
++    g_object_unref (file);
++    if (priv->monitor_etc) {
++        priv->monitor_id_etc =
++            g_signal_connect (priv->monitor_etc, "changed", G_CALLBACK (vpn_dir_changed), self);
++    }
 +
- 	/* first read conf_dir_lib. The name files are not really user configuration, but
- 	 * plugin configuration. Hence we expect ~newer~ plugins to install their files
- 	 * in /usr/lib/NetworkManager. We want to prefer those files.
-@@ -255,6 +264,11 @@ nm_vpn_manager_init (NMVpnManager *self)
- 		try_add_plugin (self, info->data);
- 	g_slist_free_full (infos, g_object_unref);
+     /* first read conf_dir_lib. The name files are not really user configuration, but
+      * plugin configuration. Hence we expect ~newer~ plugins to install their files
+      * in /usr/lib/NetworkManager. We want to prefer those files.
+@@ -243,6 +252,11 @@
+         try_add_plugin(self, info->data);
+     g_slist_free_full(infos, g_object_unref);
  
-+	infos = _nm_vpn_plugin_info_list_load_dir (conf_dir_user, TRUE, 0, NULL, NULL);
-+	for (info = infos; info; info = info->next)
-+		try_add_plugin (self, info->data);
-+	g_slist_free_full (infos, g_object_unref);
++    infos = _nm_vpn_plugin_info_list_load_dir(conf_dir_user, TRUE, 0, NULL, NULL);
++    for (info = infos; info; info = info->next)
++            try_add_plugin (self, info->data);
++    g_slist_free_full (infos, g_object_unref);
 +
- 	priv->active_services = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL);
+     priv->active_services = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, NULL);
  }
  
--- 
-2.22.0
-
diff --git a/gnu/packages/patches/nss-getcwd-nonnull.patch b/gnu/packages/patches/nss-getcwd-nonnull.patch
new file mode 100644
index 0000000000..37c1b1c539
--- /dev/null
+++ b/gnu/packages/patches/nss-getcwd-nonnull.patch
@@ -0,0 +1,30 @@
+Disable -Werror=nonnull on getcwd(0, 4096) because GCC incorrectly warns that
+the second argument should be NULL with recent glibc.  See:
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96832
+https://sourceware.org/bugzilla/show_bug.cgi?id=26545
+
+diff --git a/nss/coreconf/nsinstall/nsinstall.c b/nss/coreconf/nsinstall/nsinstall.c
+--- a/nss/coreconf/nsinstall/nsinstall.c
++++ b/nss/coreconf/nsinstall/nsinstall.c
+@@ -236,14 +236,20 @@ main(int argc, char **argv)
+ 	return 0;
+ 
+     if (!cwd) {
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+ 	cwd = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+ 	if (!cwd)
+ 	    fail("could not get CWD");
+     }
+ 
+     /* make sure we can get into todir. */
+     xchdir(todir);
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+     todir = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+     if (!todir)
+ 	fail("could not get CWD in todir");
+     tdlen = strlen(todir);
diff --git a/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch b/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch
new file mode 100644
index 0000000000..b2661f822c
--- /dev/null
+++ b/gnu/packages/patches/ocaml-4.09-multiple-definitions.patch
@@ -0,0 +1,41 @@
+Avoid multiply-defined symbols that lead to link errors such as:
+
+  ld: libcamlrund.a(backtrace_bd.o):/tmp/guix-build-ocaml-4.09.0.drv-0/ocaml-4.09.0/runtime/backtrace.c:31: multiple definition of `caml_debug_info'; libcamlrund.a(backtrace_byt_bd.o):/tmp/guix-build-ocaml-4.09.0.drv-0/ocaml-4.09.0/runtime/backtrace_byt.c:47: first defined here
+
+diff --git a/runtime/backtrace.c b/runtime/backtrace.c
+index a3c2c08..f57c81c 100644
+--- a/runtime/backtrace.c
++++ b/runtime/backtrace.c
+@@ -28,7 +28,7 @@
+ #include "caml/fail.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport int32_t caml_backtrace_active = 0;
+ CAMLexport int32_t caml_backtrace_pos = 0;
+diff --git a/runtime/backtrace_byt.c b/runtime/backtrace_byt.c
+index b913dac..b5ec926 100644
+--- a/runtime/backtrace_byt.c
++++ b/runtime/backtrace_byt.c
+@@ -44,7 +44,7 @@
+ #include "caml/backtrace_prim.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport char_os * caml_cds_file = NULL;
+ 
+diff --git a/runtime/startup_nat.c b/runtime/startup_nat.c
+index b4e6bc4..7eca5fa 100644
+--- a/runtime/startup_nat.c
++++ b/runtime/startup_nat.c
+@@ -44,6 +44,5 @@
+ #endif
+ 
+ extern int caml_parser_trace;
+-CAMLexport header_t caml_atom_table[256];
+ char * caml_code_area_start, * caml_code_area_end;
+ struct ext_table caml_code_fragments_table;
diff --git a/gnu/packages/patches/ocaml-multiple-definitions.patch b/gnu/packages/patches/ocaml-multiple-definitions.patch
new file mode 100644
index 0000000000..e8678f4f64
--- /dev/null
+++ b/gnu/packages/patches/ocaml-multiple-definitions.patch
@@ -0,0 +1,43 @@
+Avoid multiply-defined symbols that lead to link errors such as:
+
+  gcc -O2 -fno-strict-aliasing -fwrapv -Wall -fno-tree-vrp  -g -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DCAML_NAME_SPACE  -Wl,-E -o ocamlruni prims.o libcamlruni.a -lm  -ldl -lpthread 
+  ld: libcamlruni.a(backtrace.i.o):/tmp/guix-build-ocaml-4.07.1.drv-0/ocaml-4.07.1/byterun/backtrace.c:31: multiple definition of `caml_debug_info'; libcamlruni.a(backtrace_prim.i.o):/tmp/guix-build-ocaml-4.07.1.drv-0/ocaml-4.07.1/byterun/backtrace_prim.c:47: first defined here
+
+diff --git a/asmrun/startup.c b/asmrun/startup.c
+index 070f0c6..cf8a56f 100644
+--- a/asmrun/startup.c
++++ b/asmrun/startup.c
+@@ -44,7 +44,6 @@
+ #endif
+ 
+ extern int caml_parser_trace;
+-CAMLexport header_t caml_atom_table[256];
+ char * caml_code_area_start, * caml_code_area_end;
+ struct ext_table caml_code_fragments_table;
+ 
+diff --git a/byterun/backtrace.c b/byterun/backtrace.c
+index 8dfe9b7..9cc9e72 100644
+--- a/byterun/backtrace.c
++++ b/byterun/backtrace.c
+@@ -28,7 +28,7 @@
+ #include "caml/fail.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport int32_t caml_backtrace_active = 0;
+ CAMLexport int32_t caml_backtrace_pos = 0;
+diff --git a/byterun/backtrace_prim.c b/byterun/backtrace_prim.c
+index e69b256..d794f73 100644
+--- a/byterun/backtrace_prim.c
++++ b/byterun/backtrace_prim.c
+@@ -44,7 +44,7 @@
+ #include "caml/backtrace_prim.h"
+ 
+ /* The table of debug information fragments */
+-struct ext_table caml_debug_info;
++static struct ext_table caml_debug_info;
+ 
+ CAMLexport char_os * caml_cds_file = NULL;
+ 
diff --git a/gnu/packages/patches/p11-kit-hurd.patch b/gnu/packages/patches/p11-kit-hurd.patch
new file mode 100644
index 0000000000..01699882c4
--- /dev/null
+++ b/gnu/packages/patches/p11-kit-hurd.patch
@@ -0,0 +1,46 @@
+Taken from: https://groups.google.com/g/linux.debian.bugs.dist/c/mX4GpUJih4k.
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -132,6 +132,16 @@ if test "$os_unix" = "yes"; then
+ 	AC_CHECK_FUNCS([getpeereid])
+ 	AC_CHECK_FUNCS([getpeerucred])
+ 	AC_CHECK_FUNCS([issetugid])
++	case "$host_os" in
++	kfreebsd*-gnu | gnu*)
++		have_getpeereid=no
++		AC_CHECK_LIB(bsd, getpeereid, have_getpeereid=yes)
++		if test "x$have_getpeereid" = "xyes"; then
++			AC_DEFINE([HAVE_GETPEEREID], [1], [have getpeereid])
++			AC_SEARCH_LIBS([getpeereid], [bsd])
++		fi
++	;;
++	esac
+ 
+ 	AC_CACHE_CHECK([for thread-local storage class],
+ 		[ac_cv_tls_keyword],
+
+--- a/common/unix-peer.c
++++ b/common/unix-peer.c
+@@ -47,6 +47,11 @@
+ #  include <ucred.h>
+ #endif
+ 
++#ifdef HAVE_GETPEEREID
++/* Declare getpeereid from /usr/include/bsd/unistd.h */
++extern int getpeereid(int s, uid_t *euid, gid_t *egid);
++#endif
++
+ /* Returns the unix domain socket peer information.
+  * Returns zero on success.
+  */
+@@ -73,7 +78,8 @@ p11_get_upeer_id (int cfd, uid_t *uid, u
+ 		*pid = cr.pid;
+ 
+ #elif defined(HAVE_GETPEEREID)
+-	/* *BSD/MacOSX */
++	/* *BSD/MacOSX/kFreeBSD/Hurd */
++
+ 	uid_t euid;
+ 	gid_t egid;
+ 
\ No newline at end of file
diff --git a/gnu/packages/patches/perl-cross.patch b/gnu/packages/patches/perl-cross.patch
deleted file mode 100644
index a7d10b4e1f..0000000000
--- a/gnu/packages/patches/perl-cross.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Submitted upstream.
-
-From 4c3eb19a11dfe5c88c902481a8294c4f675fcd03 Mon Sep 17 00:00:00 2001
-From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
-Date: Sun, 19 Apr 2020 23:33:28 +0200
-Subject: [PATCH] Support cross-compiling to the Hurd.
-
-* cnf/hints/gnu: New file.
-* cnf/configure_tool.sh: Guess it.
----
- cnf/configure_tool.sh |  4 ++++
- cnf/hints/gnu         | 21 +++++++++++++++++++++
- 2 files changed, 25 insertions(+)
- create mode 100644 cnf/hints/gnu
-
-diff --git a/cnf/configure_tool.sh b/cnf/configure_tool.sh
-index 32201c0..7b0baa4 100644
---- a/cnf/configure_tool.sh
-+++ b/cnf/configure_tool.sh
-@@ -266,6 +266,10 @@ if not hinted 'osname'; then
- 			define osname "bsd"
- 			result "BSD"
- 			;;
-+		*-gnu*)
-+			define osname "gnu"
-+			result "GNU"
-+			;;
- 		*)
- 			result "no"
- 			;;
-diff --git a/cnf/hints/gnu b/cnf/hints/gnu
-new file mode 100644
-index 0000000..a0583a2
---- /dev/null
-+++ b/cnf/hints/gnu
-@@ -0,0 +1,21 @@
-+# Hurd syscalls
-+d_voidsig='define'
-+d_nanosleep='undef'
-+d_clock_gettime='define'
-+d_clock_getres='define'
-+d_clock_nanosleep='define'
-+d_clock='define'
-+
-+# From the original linux.sh
-+usemallocwrap='define'
-+
-+# libraries to test
-+libswanted='m crypt pthread nm ndbm gdbm dbm db dl gdbm_compat'
-+
-+d_procselfexe='undef'
-+procselfexe='"undef"'
-+
-+st_ino_sign=1
-+st_ino_size=8
-+
-+d_fcntl_can_lock='define'
--- 
-2.26.0
-
diff --git a/gnu/packages/patches/perl-deterministic-ordering.patch b/gnu/packages/patches/perl-deterministic-ordering.patch
deleted file mode 100644
index be63d5cde3..0000000000
--- a/gnu/packages/patches/perl-deterministic-ordering.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From <https://bugs.debian.org/801523>.
-
-From c01f602d1926b0671fd2c8d91f7e52c4e4c9fb24 Mon Sep 17 00:00:00 2001
-From: Niko Tyni <ntyni@debian.org>
-Date: Sun, 11 Oct 2015 19:27:56 +0300
-Subject: [PATCH] Sort the list of XS code files when generating RealPPPort.xs
-
-all_files_in_dir() uses readdir() ordering to make the list of
-input files. This can vary between build systems, breaking build
-reproducibility.
----
- cpan/Devel-PPPort/PPPort_xs.PL | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dist/Devel-PPPort/PPPort_xs.PL b/dist/Devel-PPPort/PPPort_xs.PL
-index 5f18940..149f2fe 100644
---- a/dist/Devel-PPPort/PPPort_xs.PL
-+++ b/dist/Devel-PPPort/PPPort_xs.PL
-@@ -38,7 +38,7 @@ END
- my $file;
- my $sec;
- 
--for $file (all_files_in_dir('parts/inc')) {
-+for $file (sort(all_files_in_dir('parts/inc'))) {
-   my $spec = parse_partspec($file);
- 
-   my $msg = 0;
--- 
-2.5.1
diff --git a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch b/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
deleted file mode 100644
index f2166aebfd..0000000000
--- a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Work around a problem arising from the update to OpenSSL 1.0.2f, based on the
-following upstream commit:
-
-  https://github.com/noxxi/p5-io-socket-ssl/commit/6e23ee4a433f83f1065bd2467255eba5ee9b1ddd
-
-Attempting to update to IO-Socket-SSL-2.023, which includes this commit,
-caused other test failures.  See:
-
-  https://lists.gnu.org/archive/html/guix-devel/2016-01/msg01032.html
-
-Description from the upstream commit:
-
-  OpenSSL 1.0.2f changed the behavior of SSL shutdown in case the TLS connection
-  was not fully established (commit: f73c737c7ac908c5d6407c419769123392a3b0a9).
-  This somehow resulted in Net::SSLeay::shutdown returning 0 (i.e. keep trying)
-  which caused an endless loop. It will now ignore this result in case the TLS
-  connection was not yet established and consider the TLS connection closed
-  instead.
-
---- IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm.orig	2014-10-21 16:51:16.000000000 -0400
-+++ IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm	2016-01-31 15:07:14.971099894 -0500
-@@ -1213,6 +1213,11 @@
- 		    # shutdown complete
- 		    last;
- 		}
-+		if ((${*$self}{'_SSL_opened'}||0) <= 0) {
-+		    # not really open, thus don't expect shutdown to return
-+		    # something meaningful
-+		    last;
-+		}
- 
- 		# initiate or complete shutdown
- 		local $SIG{PIPE} = 'IGNORE';
diff --git a/gnu/packages/patches/perl-no-sys-dirs.patch b/gnu/packages/patches/perl-no-sys-dirs.patch
index 2269d715c7..14d634cac9 100644
--- a/gnu/packages/patches/perl-no-sys-dirs.patch
+++ b/gnu/packages/patches/perl-no-sys-dirs.patch
@@ -6,7 +6,7 @@ Patch adapted from Nixpkgs, originally by Eelco Dolstra
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
 --- perl-5.20.0-orig/Configure	2014-05-26 15:34:18.000000000 +0200
 +++ perl-5.20.0/Configure	2014-06-25 10:43:35.368285986 +0200
-@@ -106,15 +106,7 @@
+@@ -108,15 +108,7 @@
  fi
  
  : Proper PATH setting
@@ -23,8 +23,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  for p in $paths
  do
-@@ -1337,8 +1329,7 @@
- archname=''
+@@ -1435,8 +1427,7 @@
+ i_whoami=''
  : Possible local include directories to search.
  : Set locincpth to "" in a hint file to defeat local include searches.
 -locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
@@ -33,8 +33,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  :
  : no include file wanted by default
  inclwanted=''
-@@ -1349,17 +1340,12 @@
- 
+@@ -1450,17 +1441,12 @@
+ archobjs=''
  libnames=''
  : change the next line if compiling for Xenix/286 on Xenix/386
 -xlibpth='/usr/lib/386 /lib/386'
@@ -54,8 +54,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  : Private path used by Configure to find libraries.  Its value
  : is prepended to libpth. This variable takes care of special
-@@ -1391,8 +1377,6 @@
- libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
+@@ -1495,8 +1481,6 @@
+ libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
  : We probably want to search /usr/shlib before most other libraries.
  : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
 -glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
@@ -63,7 +63,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  : Do not use vfork unless overridden by a hint file.
  usevfork=false
  
-@@ -2446,7 +2430,6 @@
+@@ -2553,7 +2537,6 @@
  zip
  "
  pth=`echo $PATH | sed -e "s/$p_/ /g"`
@@ -71,7 +71,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  for file in $loclist; do
  	eval xxx=\$$file
  	case "$xxx" in
-@@ -4936,7 +4919,7 @@
+@@ -5049,7 +5033,7 @@
  : Set private lib path
  case "$plibpth" in
  '') if ./mips; then
@@ -80,7 +80,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
      fi;;
  esac
  case "$libpth" in
-@@ -8600,13 +8583,8 @@
+@@ -8877,13 +8861,8 @@
  echo " "
  case "$sysman" in
  '')
@@ -96,7 +96,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  	;;
  esac
  if $test -d "$sysman"; then
-@@ -19900,9 +19878,10 @@
+@@ -21027,9 +21006,10 @@
  case "$full_ar" in
  '') full_ar=$ar ;;
  esac
@@ -169,7 +169,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/freebsd.sh perl-5.20.0/hints/
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/linux.sh
 --- perl-5.20.0-orig/hints/linux.sh	2014-05-26 15:34:20.000000000 +0200
 +++ perl-5.20.0/hints/linux.sh	2014-06-25 10:33:47.354883843 +0200
-@@ -150,25 +150,6 @@
+@@ -150,28 +150,6 @@
      ;;
  esac
  
@@ -188,6 +188,9 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
 -# plibpth to bypass this check.
 -if [ -x /usr/bin/gcc ] ; then
 -    gcc=/usr/bin/gcc
+-# clang also provides -print-search-dirs
+-elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then
+-    gcc=${cc:-cc}
 -else
 -    gcc=gcc
 -fi
@@ -195,7 +198,40 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  case "$plibpth" in
  '') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries |
  	cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'`
-@@ -367,33 +322,6 @@
+@@ -208,32 +186,6 @@
+   ;;
+ esac
+ 
+-case "$libc" in
+-'')
+-# If you have glibc, then report the version for ./myconfig bug reporting.
+-# (Configure doesn't need to know the specific version since it just uses
+-# gcc to load the library for all tests.)
+-# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
+-# are insufficiently precise to distinguish things like
+-# libc-2.0.6 and libc-2.0.7.
+-    for p in $plibpth
+-    do
+-        for trylib in libc.so.6 libc.so
+-        do
+-            if $test -e $p/$trylib; then
+-                libc=`ls -l $p/$trylib | awk '{print $NF}'`
+-                if $test "X$libc" != X; then
+-                    break
+-                fi
+-            fi
+-        done
+-        if $test "X$libc" != X; then
+-            break
+-        fi
+-    done
+-    ;;
+-esac
+-
+ if ${sh:-/bin/sh} -c exit; then
+   echo ''
+   echo 'You appear to have a working bash.  Good.'
+@@ -311,33 +263,6 @@
  	;;
  esac
  
@@ -229,40 +265,3 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  # Linux on Synology.
  if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
      # Tested on Synology DS213 and DS413
-diff --git a/hints/linux.sh b/hints/linux.sh
-index 3f38ea0..97aed11 100644
---- a/hints/linux.sh
-+++ b/hints/linux.sh
-@@ -195,32 +195,6 @@ case "$usequadmath" in
-   ;;
- esac
- 
--case "$libc" in
--'')
--# If you have glibc, then report the version for ./myconfig bug reporting.
--# (Configure doesn't need to know the specific version since it just uses
--# gcc to load the library for all tests.)
--# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
--# are insufficiently precise to distinguish things like
--# libc-2.0.6 and libc-2.0.7.
--    for p in $plibpth
--    do
--        for trylib in libc.so.6 libc.so
--        do
--            if $test -e $p/$trylib; then
--                libc=`ls -l $p/$trylib | awk '{print $NF}'`
--                if $test "X$libc" != X; then
--                    break
--                fi
--            fi
--        done
--        if $test "X$libc" != X; then
--            break
--        fi
--    done
--    ;;
--esac
--
- if ${sh:-/bin/sh} -c exit; then
-   echo ''
-   echo 'You appear to have a working bash.  Good.'
diff --git a/gnu/packages/patches/pipewire-0.2.7-fno-common.patch b/gnu/packages/patches/pipewire-0.2.7-fno-common.patch
new file mode 100644
index 0000000000..f7d9b25932
--- /dev/null
+++ b/gnu/packages/patches/pipewire-0.2.7-fno-common.patch
@@ -0,0 +1,51 @@
+Fixes 'multiple definition errors' when building with GCC 10+
+
+From: https://bugs.gentoo.org/710796
+Originally from: https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/a62e41e
+and https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/7a976c7
+
+--- a/spa/plugins/bluez5/a2dp-codecs.h
++++ b/spa/plugins/bluez5/a2dp-codecs.h
+@@ -284,15 +284,15 @@
+         }
+ }
+ 
+-const a2dp_sbc_t bluez_a2dp_sbc;
++extern const a2dp_sbc_t bluez_a2dp_sbc;
+ #if ENABLE_MP3
+-const a2dp_mpeg_t bluez_a2dp_mpeg;
++extern const a2dp_mpeg_t bluez_a2dp_mpeg;
+ #endif
+ #if ENABLE_AAC
+-const a2dp_aac_t bluez_a2dp_aac;
++extern const a2dp_aac_t bluez_a2dp_aac;
+ #endif
+ #if ENABLE_APTX
+-const a2dp_aptx_t bluez_a2dp_aptx;
++extern const a2dp_aptx_t bluez_a2dp_aptx;
+ #endif
+ 
+ #endif
+--- a/spa/plugins/bluez5/bluez5-monitor.c
++++ b/spa/plugins/bluez5/bluez5-monitor.c
+@@ -75,7 +75,7 @@
+ 	struct spa_list transport_list;
+ };
+ 
+-struct spa_handle_factory spa_a2dp_sink_factory;
++extern struct spa_handle_factory spa_a2dp_sink_factory;
+ 
+ static void fill_item(struct spa_bt_monitor *this, struct spa_bt_transport *transport,
+ 		struct spa_pod **result, struct spa_pod_builder *builder)
+--- a/spa/plugins/bluez5/meson.build
++++ b/spa/plugins/bluez5/meson.build
+@@ -1,7 +1,8 @@
+ 
+ bluez5_sources = ['plugin.c',
+ 		  'a2dp-sink.c',
+-                  'bluez5-monitor.c']
++		  'a2dp-codecs.c',
++		  'bluez5-monitor.c']
+ 
+ bluez5lib = shared_library('spa-bluez5',
+ 	bluez5_sources,
diff --git a/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch b/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch
new file mode 100644
index 0000000000..652a86bff7
--- /dev/null
+++ b/gnu/packages/patches/pitivi-fix-build-with-meson-0.60.patch
@@ -0,0 +1,46 @@
+From b54da52289f9578d7021f466d731cfd48330e5fe Mon Sep 17 00:00:00 2001
+From: Leo Famulari <leo@famulari.name>
+Date: Thu, 25 Nov 2021 18:56:44 -0500
+Subject: [PATCH] Fix build with Meson 0.60.
+
+https://gitlab.gnome.org/GNOME/pitivi/-/issues/2593
+
+* data/meson.build: Adjust to changes in Meson 0.60.
+---
+ data/meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index 2ea82cf..60d2316 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -6,7 +6,7 @@ install_subdir('audiopresets', install_dir: pkgdatadir)
+ install_subdir('videopresets', install_dir: pkgdatadir)
+ install_subdir('gstpresets', install_dir: pkgdatadir)
+ 
+-desktop_file = i18n.merge_file('org.pitivi.Pitivi.desktop',
++desktop_file = i18n.merge_file(
+     type: 'desktop',
+     output : 'org.pitivi.Pitivi.desktop',
+     input : 'org.pitivi.Pitivi.desktop.in',
+@@ -25,7 +25,7 @@ if desktop_file_validate.found()
+   )
+ endif
+ 
+-appdata_file = i18n.merge_file('org.pitivi.Pitivi.appdata.xml',
++appdata_file = i18n.merge_file(
+     type: 'xml',
+     output : 'org.pitivi.Pitivi.appdata.xml',
+     input : 'org.pitivi.Pitivi.appdata.xml.in',
+@@ -43,7 +43,7 @@ if appstream_util.found()
+   )
+ endif
+ 
+-i18n.merge_file('org.pitivi.Pitivi-mime.xml',
++i18n.merge_file(
+     output : 'org.pitivi.Pitivi-mime.xml',
+     input : 'org.pitivi.Pitivi-mime.xml.in',
+     po_dir: podir,
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/polkit-CVE-2021-3560.patch b/gnu/packages/patches/polkit-CVE-2021-3560.patch
deleted file mode 100644
index 9aa0373fda..0000000000
--- a/gnu/packages/patches/polkit-CVE-2021-3560.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-This patch fixes CVE-2021-3560, "local privilege escalation using
-polkit_system_bus_name_get_creds_sync()":
-
-  https://www.openwall.com/lists/oss-security/2021/06/03/1
-
-Patch from <https://gitlab.freedesktop.org/polkit/polkit/-/commit/a04d13a>.
-
-diff --git a/src/polkit/polkitsystembusname.c b/src/polkit/polkitsystembusname.c
-index 8daa12cb9093c1d765c7b83654a2b8d0d382378e..8ed13631508dd96624898df90ee2ece4dcf3e1e5 100644
---- a/src/polkit/polkitsystembusname.c
-+++ b/src/polkit/polkitsystembusname.c
-@@ -435,6 +435,9 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName           *system_bus
-   while (!((data.retrieved_uid && data.retrieved_pid) || data.caught_error))
-     g_main_context_iteration (tmp_context, TRUE);
- 
-+  if (data.caught_error)
-+    goto out;
-+
-   if (out_uid)
-     *out_uid = data.uid;
-   if (out_pid)
diff --git a/gnu/packages/patches/polkit-configure-elogind.patch b/gnu/packages/patches/polkit-configure-elogind.patch
new file mode 100644
index 0000000000..8fefb7a0c2
--- /dev/null
+++ b/gnu/packages/patches/polkit-configure-elogind.patch
@@ -0,0 +1,15 @@
+Even when the polkit configure script detects elogind, it does not use
+it.  This patch ensures that elogind is used when it is detected.
+
+diff -ruN a/configure b/configure
+--- a/configure	1969-12-31 19:00:01.000000000 -0500
++++ b/configure	2021-11-19 00:04:55.581385020 -0500
+@@ -20390,7 +20390,7 @@
+ 
+ 
+ 
+- if test "$have_libsystemd" = "yes"; then
++ if test "$have_libsystemd" = "yes" || test "$have_libelogind" = "yes"; then
+   HAVE_LIBSYSTEMD_TRUE=
+   HAVE_LIBSYSTEMD_FALSE='#'
+ else
diff --git a/gnu/packages/patches/polkit-use-duktape.patch b/gnu/packages/patches/polkit-use-duktape.patch
new file mode 100644
index 0000000000..4eaa7963c2
--- /dev/null
+++ b/gnu/packages/patches/polkit-use-duktape.patch
@@ -0,0 +1,5030 @@
+From 4f66a9549a393e4d74b93eb85301a04ea94bc750 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Wed, 24 Jul 2019 15:55:17 +0800
+Subject: [PATCH 01/16] Add duktape as javascript engine.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ configure.ac                                  |   28 +-
+ src/polkitbackend/Makefile.am                 |   14 +-
+ .../polkitbackendduktapeauthority.c           | 1402 +++++++++++++++++
+ 3 files changed, 1436 insertions(+), 8 deletions(-)
+ create mode 100644 src/polkitbackend/polkitbackendduktapeauthority.c
+
+diff --git a/configure.ac b/configure.ac
+index e434ca2..5a03593 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -80,11 +80,22 @@ PKG_CHECK_MODULES(GLIB, [gmodule-2.0 gio-unix-2.0 >= 2.30.0])
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+ 
+-PKG_CHECK_MODULES(LIBJS, [mozjs-78])
+-
+-AC_SUBST(LIBJS_CFLAGS)
+-AC_SUBST(LIBJS_CXXFLAGS)
+-AC_SUBST(LIBJS_LIBS)
++dnl ---------------------------------------------------------------------------
++dnl - Check javascript backend
++dnl ---------------------------------------------------------------------------
++AC_ARG_WITH(duktape, AS_HELP_STRING([--with-duktape],[Use Duktape as javascript backend]),with_duktape=yes,with_duktape=no)
++AS_IF([test x${with_duktape} == xyes], [
++  PKG_CHECK_MODULES(LIBJS, [duktape >= 2.0.0 ])
++  AC_SUBST(LIBJS_CFLAGS)
++  AC_SUBST(LIBJS_LIBS)
++], [
++  PKG_CHECK_MODULES(LIBJS, [mozjs-78])
++
++  AC_SUBST(LIBJS_CFLAGS)
++  AC_SUBST(LIBJS_CXXFLAGS)
++  AC_SUBST(LIBJS_LIBS)
++])
++AM_CONDITIONAL(USE_DUKTAPE, [test x$with_duktape == xyes], [Using duktape as javascript engine library])
+ 
+ EXPAT_LIB=""
+ AC_ARG_WITH(expat, [  --with-expat=<dir>      Use expat from here],
+@@ -585,6 +596,13 @@ echo "
+         PAM support:                ${have_pam}
+         systemdsystemunitdir:       ${systemdsystemunitdir}
+         polkitd user:               ${POLKITD_USER}"
++if test "x${with_duktape}" = xyes; then
++echo "
++        Javascript engine:          Duktape"
++else
++echo "
++        Javascript engine:          Mozjs"
++fi
+ 
+ if test "$have_pam" = yes ; then
+ echo "
+diff --git a/src/polkitbackend/Makefile.am b/src/polkitbackend/Makefile.am
+index 7e3c080..abcbc6f 100644
+--- a/src/polkitbackend/Makefile.am
++++ b/src/polkitbackend/Makefile.am
+@@ -33,7 +33,7 @@ libpolkit_backend_1_la_SOURCES =                                   			\
+ 	polkitbackendprivate.h								\
+ 	polkitbackendauthority.h		polkitbackendauthority.c		\
+ 	polkitbackendinteractiveauthority.h	polkitbackendinteractiveauthority.c	\
+-	polkitbackendjsauthority.h		polkitbackendjsauthority.cpp		\
++	polkitbackendjsauthority.h				\
+ 	polkitbackendactionpool.h		polkitbackendactionpool.c		\
+ 	polkitbackendactionlookup.h		polkitbackendactionlookup.c		\
+         $(NULL)
+@@ -51,19 +51,27 @@ libpolkit_backend_1_la_CFLAGS =                                        	\
+         -D_POLKIT_BACKEND_COMPILATION                                  	\
+         $(GLIB_CFLAGS)							\
+ 	$(LIBSYSTEMD_CFLAGS)						\
+-	$(LIBJS_CFLAGS)							\
++	$(LIBJS_CFLAGS)						\
+         $(NULL)
+ 
+ libpolkit_backend_1_la_CXXFLAGS = $(libpolkit_backend_1_la_CFLAGS)
+ 
+ libpolkit_backend_1_la_LIBADD =                               		\
+         $(GLIB_LIBS)							\
++        $(DUKTAPE_LIBS)							\
+ 	$(LIBSYSTEMD_LIBS)						\
+ 	$(top_builddir)/src/polkit/libpolkit-gobject-1.la		\
+ 	$(EXPAT_LIBS)							\
+-	$(LIBJS_LIBS)							\
++	$(LIBJS_LIBS)                                                   \
+         $(NULL)
+ 
++if USE_DUKTAPE
++libpolkit_backend_1_la_SOURCES += polkitbackendduktapeauthority.c
++libpolkit_backend_1_la_LIBADD += -lm
++else
++libpolkit_backend_1_la_SOURCES += polkitbackendjsauthority.cpp
++endif
++
+ rulesdir = $(sysconfdir)/polkit-1/rules.d
+ rules_DATA = 50-default.rules
+ 
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+new file mode 100644
+index 0000000..ae98453
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -0,0 +1,1402 @@
++/*
++ * Copyright (C) 2008-2012 Red Hat, Inc.
++ * Copyright (C) 2015 Tangent Space <jstpierre@mecheye.net>
++ * Copyright (C) 2019 Wu Xiaotian <yetist@gmail.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General
++ * Public License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
++ * Boston, MA 02111-1307, USA.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#include "config.h"
++#include <sys/wait.h>
++#include <errno.h>
++#include <pwd.h>
++#include <grp.h>
++#include <netdb.h>
++#include <string.h>
++#include <glib/gstdio.h>
++#include <locale.h>
++#include <glib/gi18n-lib.h>
++
++#include <polkit/polkit.h>
++#include "polkitbackendjsauthority.h"
++
++#include <polkit/polkitprivate.h>
++
++#ifdef HAVE_LIBSYSTEMD
++#include <systemd/sd-login.h>
++#endif /* HAVE_LIBSYSTEMD */
++
++#include "initjs.h" /* init.js */
++#include "duktape.h"
++
++/**
++ * SECTION:polkitbackendjsauthority
++ * @title: PolkitBackendJsAuthority
++ * @short_description: JS Authority
++ * @stability: Unstable
++ *
++ * An implementation of #PolkitBackendAuthority that reads and
++ * evalates Javascript files and supports interaction with
++ * authentication agents (virtue of being based on
++ * #PolkitBackendInteractiveAuthority).
++ */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++struct _PolkitBackendJsAuthorityPrivate
++{
++  gchar **rules_dirs;
++  GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
++  duk_context *cx;
++};
++
++#define WATCHDOG_TIMEOUT (15 * G_TIME_SPAN_SECOND)
++
++static void utils_spawn (const gchar *const  *argv,
++                         guint                timeout_seconds,
++                         GCancellable        *cancellable,
++                         GAsyncReadyCallback  callback,
++                         gpointer             user_data);
++
++gboolean utils_spawn_finish (GAsyncResult   *res,
++                             gint           *out_exit_status,
++                             gchar         **out_standard_output,
++                             gchar         **out_standard_error,
++                             GError        **error);
++
++static void on_dir_monitor_changed (GFileMonitor     *monitor,
++                                    GFile            *file,
++                                    GFile            *other_file,
++                                    GFileMonitorEvent event_type,
++                                    gpointer          user_data);
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++enum
++{
++  PROP_0,
++  PROP_RULES_DIRS,
++};
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
++                                                                     PolkitSubject                     *caller,
++                                                                     PolkitSubject                     *subject,
++                                                                     PolkitIdentity                    *user_for_subject,
++                                                                     gboolean                           subject_is_local,
++                                                                     gboolean                           subject_is_active,
++                                                                     const gchar                       *action_id,
++                                                                     PolkitDetails                     *details);
++
++static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
++                                                          PolkitBackendInteractiveAuthority *authority,
++                                                          PolkitSubject                     *caller,
++                                                          PolkitSubject                     *subject,
++                                                          PolkitIdentity                    *user_for_subject,
++                                                          gboolean                           subject_is_local,
++                                                          gboolean                           subject_is_active,
++                                                          const gchar                       *action_id,
++                                                          PolkitDetails                     *details,
++                                                          PolkitImplicitAuthorization        implicit);
++
++G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static void
++polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
++{
++  authority->priv = G_TYPE_INSTANCE_GET_PRIVATE (authority,
++                                                 POLKIT_BACKEND_TYPE_JS_AUTHORITY,
++                                                 PolkitBackendJsAuthorityPrivate);
++}
++
++static gint
++rules_file_name_cmp (const gchar *a,
++                     const gchar *b)
++{
++  gint ret;
++  const gchar *a_base;
++  const gchar *b_base;
++
++  a_base = strrchr (a, '/');
++  b_base = strrchr (b, '/');
++
++  g_assert (a_base != NULL);
++  g_assert (b_base != NULL);
++  a_base += 1;
++  b_base += 1;
++
++  ret = g_strcmp0 (a_base, b_base);
++  if (ret == 0)
++    {
++      /* /etc wins over /usr */
++      ret = g_strcmp0 (a, b);
++      g_assert (ret != 0);
++    }
++
++  return ret;
++}
++
++static void
++load_scripts (PolkitBackendJsAuthority  *authority)
++{
++  duk_context *cx = authority->priv->cx;
++  GList *files = NULL;
++  GList *l;
++  guint num_scripts = 0;
++  GError *error = NULL;
++  guint n;
++
++  files = NULL;
++
++  for (n = 0; authority->priv->rules_dirs != NULL && authority->priv->rules_dirs[n] != NULL; n++)
++    {
++      const gchar *dir_name = authority->priv->rules_dirs[n];
++      GDir *dir = NULL;
++
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Loading rules from directory %s",
++                                    dir_name);
++
++      dir = g_dir_open (dir_name,
++                        0,
++                        &error);
++      if (dir == NULL)
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error opening rules directory: %s (%s, %d)",
++                                        error->message, g_quark_to_string (error->domain), error->code);
++          g_clear_error (&error);
++        }
++      else
++        {
++          const gchar *name;
++          while ((name = g_dir_read_name (dir)) != NULL)
++            {
++              if (g_str_has_suffix (name, ".rules"))
++                files = g_list_prepend (files, g_strdup_printf ("%s/%s", dir_name, name));
++            }
++          g_dir_close (dir);
++        }
++    }
++
++  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++
++  for (l = files; l != NULL; l = l->next)
++    {
++      const gchar *filename = l->data;
++
++#if (DUK_VERSION >= 20000)
++      gchar *contents;
++      gsize length;
++      GError *error = NULL;
++      if (!g_file_get_contents (filename, &contents, &length, &error)){
++        g_warning("Error when file contents of %s: %s\n", filename, error->message);
++        g_error_free (error);
++        continue;
++      }
++      if (duk_peval_lstring_noresult(cx, contents,length) != 0)
++#else
++      if (duk_peval_file_noresult (cx, filename) != 0)
++#endif
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error compiling script %s: %s",
++                                        filename, duk_safe_to_string (authority->priv->cx, -1));
++#if (DUK_VERSION >= 20000)
++          g_free (contents);
++#endif
++          continue;
++        }
++#if (DUK_VERSION >= 20000)
++      g_free (contents);
++#endif
++      num_scripts++;
++    }
++
++  polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                "Finished loading, compiling and executing %d rules",
++                                num_scripts);
++  g_list_free_full (files, g_free);
++}
++
++static void
++reload_scripts (PolkitBackendJsAuthority *authority)
++{
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_deleteRules");
++
++  duk_call_prop (cx, 0, 0);
++
++  polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                "Collecting garbage unconditionally...");
++
++  load_scripts (authority);
++
++  /* Let applications know we have new rules... */
++  g_signal_emit_by_name (authority, "changed");
++}
++
++static void
++on_dir_monitor_changed (GFileMonitor     *monitor,
++                        GFile            *file,
++                        GFile            *other_file,
++                        GFileMonitorEvent event_type,
++                        gpointer          user_data)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
++
++  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
++   *       Because when editing a file with emacs we get 4-8 events..
++   */
++
++  if (file != NULL)
++    {
++      gchar *name;
++
++      name = g_file_get_basename (file);
++
++      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
++      if (!g_str_has_prefix (name, ".") &&
++          !g_str_has_prefix (name, "#") &&
++          g_str_has_suffix (name, ".rules") &&
++          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
++           event_type == G_FILE_MONITOR_EVENT_DELETED ||
++           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Reloading rules");
++          reload_scripts (authority);
++        }
++      g_free (name);
++    }
++}
++
++
++static void
++setup_file_monitors (PolkitBackendJsAuthority *authority)
++{
++  guint n;
++  GPtrArray *p;
++
++  p = g_ptr_array_new ();
++  for (n = 0; authority->priv->rules_dirs != NULL && authority->priv->rules_dirs[n] != NULL; n++)
++    {
++      GFile *file;
++      GError *error;
++      GFileMonitor *monitor;
++
++      file = g_file_new_for_path (authority->priv->rules_dirs[n]);
++      error = NULL;
++      monitor = g_file_monitor_directory (file,
++                                          G_FILE_MONITOR_NONE,
++                                          NULL,
++                                          &error);
++      g_object_unref (file);
++      if (monitor == NULL)
++        {
++          g_warning ("Error monitoring directory %s: %s",
++                     authority->priv->rules_dirs[n],
++                     error->message);
++          g_clear_error (&error);
++        }
++      else
++        {
++          g_signal_connect (monitor,
++                            "changed",
++                            G_CALLBACK (on_dir_monitor_changed),
++                            authority);
++          g_ptr_array_add (p, monitor);
++        }
++    }
++  g_ptr_array_add (p, NULL);
++  authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
++}
++
++static duk_ret_t js_polkit_log (duk_context *cx);
++static duk_ret_t js_polkit_spawn (duk_context *cx);
++static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
++
++static const duk_function_list_entry js_polkit_functions[] =
++{
++  { "log", js_polkit_log, 1 },
++  { "spawn", js_polkit_spawn, 1 },
++  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
++  { NULL, NULL, 0 },
++};
++
++static void
++polkit_backend_js_authority_constructed (GObject *object)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++  duk_context *cx;
++
++  cx = duk_create_heap (NULL, NULL, NULL, authority, NULL);
++  if (cx == NULL)
++    goto fail;
++
++  authority->priv->cx = cx;
++
++  duk_push_global_object (cx);
++  duk_push_object (cx);
++  duk_put_function_list (cx, -1, js_polkit_functions);
++  duk_put_prop_string (cx, -2, "polkit");
++
++  duk_eval_string (cx, init_js);
++
++  if (authority->priv->rules_dirs == NULL)
++    {
++      authority->priv->rules_dirs = g_new0 (gchar *, 3);
++      authority->priv->rules_dirs[0] = g_strdup (PACKAGE_SYSCONF_DIR "/polkit-1/rules.d");
++      authority->priv->rules_dirs[1] = g_strdup (PACKAGE_DATA_DIR "/polkit-1/rules.d");
++    }
++
++  setup_file_monitors (authority);
++  load_scripts (authority);
++
++  G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->constructed (object);
++  return;
++
++ fail:
++  g_critical ("Error initializing JavaScript environment");
++  g_assert_not_reached ();
++}
++
++static void
++polkit_backend_js_authority_finalize (GObject *object)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++  guint n;
++
++  for (n = 0; authority->priv->dir_monitors != NULL && authority->priv->dir_monitors[n] != NULL; n++)
++    {
++      GFileMonitor *monitor = authority->priv->dir_monitors[n];
++      g_signal_handlers_disconnect_by_func (monitor,
++                                            G_CALLBACK (on_dir_monitor_changed),
++                                            authority);
++      g_object_unref (monitor);
++    }
++  g_free (authority->priv->dir_monitors);
++  g_strfreev (authority->priv->rules_dirs);
++
++  duk_destroy_heap (authority->priv->cx);
++
++  G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
++}
++
++static void
++polkit_backend_js_authority_set_property (GObject      *object,
++                                          guint         property_id,
++                                          const GValue *value,
++                                          GParamSpec   *pspec)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
++
++  switch (property_id)
++    {
++      case PROP_RULES_DIRS:
++        g_assert (authority->priv->rules_dirs == NULL);
++        authority->priv->rules_dirs = (gchar **) g_value_dup_boxed (value);
++        break;
++
++      default:
++        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
++        break;
++    }
++}
++
++static const gchar *
++polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
++{
++  return "js";
++}
++
++static const gchar *
++polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
++{
++  return PACKAGE_VERSION;
++}
++
++static PolkitAuthorityFeatures
++polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
++{
++  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
++}
++
++static void
++polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
++{
++  GObjectClass *gobject_class;
++  PolkitBackendAuthorityClass *authority_class;
++  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
++
++
++  gobject_class = G_OBJECT_CLASS (klass);
++  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
++  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
++  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
++
++  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
++  authority_class->get_name                             = polkit_backend_js_authority_get_name;
++  authority_class->get_version                          = polkit_backend_js_authority_get_version;
++  authority_class->get_features                         = polkit_backend_js_authority_get_features;
++
++  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
++  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
++  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
++
++  g_object_class_install_property (gobject_class,
++                                   PROP_RULES_DIRS,
++                                   g_param_spec_boxed ("rules-dirs",
++                                                       NULL,
++                                                       NULL,
++                                                       G_TYPE_STRV,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
++
++
++  g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static void
++set_property_str (duk_context *cx,
++                  const gchar *name,
++                  const gchar *value)
++{
++  duk_push_string (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_strv (duk_context *cx,
++                   const gchar *name,
++                   GPtrArray   *value)
++{
++  guint n;
++  duk_push_array (cx);
++  for (n = 0; n < value->len; n++)
++    {
++      duk_push_string (cx, g_ptr_array_index (value, n));
++      duk_put_prop_index (cx, -2, n);
++    }
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_int32 (duk_context *cx,
++                    const gchar *name,
++                    gint32       value)
++{
++  duk_push_int (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++static void
++set_property_bool (duk_context *cx,
++                   const char  *name,
++                   gboolean     value)
++{
++  duk_push_boolean (cx, value);
++  duk_put_prop_string (cx, -2, name);
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static gboolean
++push_subject (duk_context               *cx,
++              PolkitSubject             *subject,
++              PolkitIdentity            *user_for_subject,
++              gboolean                   subject_is_local,
++              gboolean                   subject_is_active,
++              GError                   **error)
++{
++  gboolean ret = FALSE;
++  pid_t pid;
++  uid_t uid;
++  gchar *user_name = NULL;
++  GPtrArray *groups = NULL;
++  struct passwd *passwd;
++  char *seat_str = NULL;
++  char *session_str = NULL;
++
++  duk_get_global_string (cx, "Subject");
++  duk_new (cx, 0);
++
++  if (POLKIT_IS_UNIX_PROCESS (subject))
++    {
++      pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (subject));
++    }
++  else if (POLKIT_IS_SYSTEM_BUS_NAME (subject))
++    {
++      PolkitSubject *process;
++      process = polkit_system_bus_name_get_process_sync (POLKIT_SYSTEM_BUS_NAME (subject), NULL, error);
++      if (process == NULL)
++        goto out;
++      pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (process));
++      g_object_unref (process);
++    }
++  else
++    {
++      g_assert_not_reached ();
++    }
++
++#ifdef HAVE_LIBSYSTEMD
++  if (sd_pid_get_session (pid, &session_str) == 0)
++    {
++      if (sd_session_get_seat (session_str, &seat_str) == 0)
++        {
++          /* do nothing */
++        }
++    }
++#endif /* HAVE_LIBSYSTEMD */
++
++  g_assert (POLKIT_IS_UNIX_USER (user_for_subject));
++  uid = polkit_unix_user_get_uid (POLKIT_UNIX_USER (user_for_subject));
++
++  groups = g_ptr_array_new_with_free_func (g_free);
++
++  passwd = getpwuid (uid);
++  if (passwd == NULL)
++    {
++      user_name = g_strdup_printf ("%d", (gint) uid);
++      g_warning ("Error looking up info for uid %d: %m", (gint) uid);
++    }
++  else
++    {
++      gid_t gids[512];
++      int num_gids = 512;
++
++      user_name = g_strdup (passwd->pw_name);
++
++      if (getgrouplist (passwd->pw_name,
++                        passwd->pw_gid,
++                        gids,
++                        &num_gids) < 0)
++        {
++          g_warning ("Error looking up groups for uid %d: %m", (gint) uid);
++        }
++      else
++        {
++          gint n;
++          for (n = 0; n < num_gids; n++)
++            {
++              struct group *group;
++              group = getgrgid (gids[n]);
++              if (group == NULL)
++                {
++                  g_ptr_array_add (groups, g_strdup_printf ("%d", (gint) gids[n]));
++                }
++              else
++                {
++                  g_ptr_array_add (groups, g_strdup (group->gr_name));
++                }
++            }
++        }
++    }
++
++  set_property_int32 (cx, "pid", pid);
++  set_property_str (cx, "user", user_name);
++  set_property_strv (cx, "groups", groups);
++  set_property_str (cx, "seat", seat_str);
++  set_property_str (cx, "session", session_str);
++  set_property_bool (cx, "local", subject_is_local);
++  set_property_bool (cx, "active", subject_is_active);
++
++  ret = TRUE;
++
++ out:
++  free (session_str);
++  free (seat_str);
++  g_free (user_name);
++  if (groups != NULL)
++    g_ptr_array_unref (groups);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static gboolean
++push_action_and_details (duk_context               *cx,
++                         const gchar               *action_id,
++                         PolkitDetails             *details,
++                         GError                   **error)
++{
++  gchar **keys;
++  guint n;
++
++  duk_get_global_string (cx, "Action");
++  duk_new (cx, 0);
++
++  set_property_str (cx, "id", action_id);
++
++  keys = polkit_details_get_keys (details);
++  for (n = 0; keys != NULL && keys[n] != NULL; n++)
++    {
++      gchar *key;
++      const gchar *value;
++      key = g_strdup_printf ("_detail_%s", keys[n]);
++      value = polkit_details_lookup (details, keys[n]);
++      set_property_str (cx, key, value);
++      g_free (key);
++    }
++  g_strfreev (keys);
++
++  return TRUE;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static GList *
++polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                       PolkitSubject                     *caller,
++                                                       PolkitSubject                     *subject,
++                                                       PolkitIdentity                    *user_for_subject,
++                                                       gboolean                           subject_is_local,
++                                                       gboolean                           subject_is_active,
++                                                       const gchar                       *action_id,
++                                                       PolkitDetails                     *details)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
++  GList *ret = NULL;
++  guint n;
++  GError *error = NULL;
++  const char *ret_str = NULL;
++  gchar **ret_strs = NULL;
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_runAdminRules");
++
++  if (!push_action_and_details (cx, action_id, details, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting action and details to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!push_subject (cx, subject, user_for_subject, subject_is_local, subject_is_active, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting subject to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error evaluating admin rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto out;
++    }
++
++  ret_str = duk_require_string (cx, -1);
++
++  ret_strs = g_strsplit (ret_str, ",", -1);
++  for (n = 0; ret_strs != NULL && ret_strs[n] != NULL; n++)
++    {
++      const gchar *identity_str = ret_strs[n];
++      PolkitIdentity *identity;
++
++      error = NULL;
++      identity = polkit_identity_from_string (identity_str, &error);
++      if (identity == NULL)
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Identity `%s' is not valid, ignoring: %s",
++                                        identity_str, error->message);
++          g_clear_error (&error);
++        }
++      else
++        {
++          ret = g_list_prepend (ret, identity);
++        }
++    }
++  ret = g_list_reverse (ret);
++
++ out:
++  g_strfreev (ret_strs);
++  /* fallback to root password auth */
++  if (ret == NULL)
++    ret = g_list_prepend (ret, polkit_unix_user_new (0));
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static PolkitImplicitAuthorization
++polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                      PolkitSubject                     *caller,
++                                                      PolkitSubject                     *subject,
++                                                      PolkitIdentity                    *user_for_subject,
++                                                      gboolean                           subject_is_local,
++                                                      gboolean                           subject_is_active,
++                                                      const gchar                       *action_id,
++                                                      PolkitDetails                     *details,
++                                                      PolkitImplicitAuthorization        implicit)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
++  PolkitImplicitAuthorization ret = implicit;
++  GError *error = NULL;
++  gchar *ret_str = NULL;
++  gboolean good = FALSE;
++  duk_context *cx = authority->priv->cx;
++
++  duk_set_top (cx, 0);
++  duk_get_global_string (cx, "polkit");
++  duk_push_string (cx, "_runRules");
++
++  if (!push_action_and_details (cx, action_id, details, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting action and details to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!push_subject (cx, subject, user_for_subject, subject_is_local, subject_is_active, &error))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error converting subject to JS object: %s",
++                                    error->message);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
++  {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error evaluating authorization rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto out;
++  }
++
++  if (duk_is_null(cx, -1)) {
++    good = TRUE;
++    goto out;
++  }
++  ret_str = g_strdup (duk_require_string (cx, -1));
++  if (!polkit_implicit_authorization_from_string (ret_str, &ret))
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Returned result `%s' is not valid",
++                                    ret_str);
++      goto out;
++    }
++
++  good = TRUE;
++
++ out:
++  if (!good)
++    ret = POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED;
++  g_free (ret_str);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static duk_ret_t
++js_polkit_log (duk_context *cx)
++{
++  const char *str = duk_require_string (cx, 0);
++  fprintf (stderr, "%s\n", str);
++  return 0;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++static const gchar *
++get_signal_name (gint signal_number)
++{
++  switch (signal_number)
++    {
++#define _HANDLE_SIG(sig) case sig: return #sig;
++    _HANDLE_SIG (SIGHUP);
++    _HANDLE_SIG (SIGINT);
++    _HANDLE_SIG (SIGQUIT);
++    _HANDLE_SIG (SIGILL);
++    _HANDLE_SIG (SIGABRT);
++    _HANDLE_SIG (SIGFPE);
++    _HANDLE_SIG (SIGKILL);
++    _HANDLE_SIG (SIGSEGV);
++    _HANDLE_SIG (SIGPIPE);
++    _HANDLE_SIG (SIGALRM);
++    _HANDLE_SIG (SIGTERM);
++    _HANDLE_SIG (SIGUSR1);
++    _HANDLE_SIG (SIGUSR2);
++    _HANDLE_SIG (SIGCHLD);
++    _HANDLE_SIG (SIGCONT);
++    _HANDLE_SIG (SIGSTOP);
++    _HANDLE_SIG (SIGTSTP);
++    _HANDLE_SIG (SIGTTIN);
++    _HANDLE_SIG (SIGTTOU);
++    _HANDLE_SIG (SIGBUS);
++#ifdef SIGPOLL
++    _HANDLE_SIG (SIGPOLL);
++#endif
++    _HANDLE_SIG (SIGPROF);
++    _HANDLE_SIG (SIGSYS);
++    _HANDLE_SIG (SIGTRAP);
++    _HANDLE_SIG (SIGURG);
++    _HANDLE_SIG (SIGVTALRM);
++    _HANDLE_SIG (SIGXCPU);
++    _HANDLE_SIG (SIGXFSZ);
++#undef _HANDLE_SIG
++    default:
++      break;
++    }
++  return "UNKNOWN_SIGNAL";
++}
++
++typedef struct
++{
++  GMainLoop *loop;
++  GAsyncResult *res;
++} SpawnData;
++
++static void
++spawn_cb (GObject       *source_object,
++          GAsyncResult  *res,
++          gpointer       user_data)
++{
++  SpawnData *data = user_data;
++  data->res = g_object_ref (res);
++  g_main_loop_quit (data->loop);
++}
++
++static duk_ret_t
++js_polkit_spawn (duk_context *cx)
++{
++#if (DUK_VERSION >= 20000)
++  duk_ret_t ret = DUK_RET_ERROR;
++#else
++  duk_ret_t ret = DUK_RET_INTERNAL_ERROR;
++#endif
++  gchar *standard_output = NULL;
++  gchar *standard_error = NULL;
++  gint exit_status;
++  GError *error = NULL;
++  guint32 array_len;
++  gchar **argv = NULL;
++  GMainContext *context = NULL;
++  GMainLoop *loop = NULL;
++  SpawnData data = {0};
++  char *err_str = NULL;
++  guint n;
++
++  if (!duk_is_array (cx, 0))
++    goto out;
++
++  array_len = duk_get_length (cx, 0);
++
++  argv = g_new0 (gchar*, array_len + 1);
++  for (n = 0; n < array_len; n++)
++    {
++      duk_get_prop_index (cx, 0, n);
++      argv[n] = g_strdup (duk_to_string (cx, -1));
++      duk_pop (cx);
++    }
++
++  context = g_main_context_new ();
++  loop = g_main_loop_new (context, FALSE);
++
++  g_main_context_push_thread_default (context);
++
++  data.loop = loop;
++  utils_spawn ((const gchar *const *) argv,
++               10, /* timeout_seconds */
++               NULL, /* cancellable */
++               spawn_cb,
++               &data);
++
++  g_main_loop_run (loop);
++
++  g_main_context_pop_thread_default (context);
++
++  if (!utils_spawn_finish (data.res,
++                           &exit_status,
++                           &standard_output,
++                           &standard_error,
++                           &error))
++    {
++      err_str = g_strdup_printf ("Error spawning helper: %s (%s, %d)",
++                                 error->message, g_quark_to_string (error->domain), error->code);
++      g_clear_error (&error);
++      goto out;
++    }
++
++  if (!(WIFEXITED (exit_status) && WEXITSTATUS (exit_status) == 0))
++    {
++      GString *gstr;
++      gstr = g_string_new (NULL);
++      if (WIFEXITED (exit_status))
++        {
++          g_string_append_printf (gstr,
++                                  "Helper exited with non-zero exit status %d",
++                                  WEXITSTATUS (exit_status));
++        }
++      else if (WIFSIGNALED (exit_status))
++        {
++          g_string_append_printf (gstr,
++                                  "Helper was signaled with signal %s (%d)",
++                                  get_signal_name (WTERMSIG (exit_status)),
++                                  WTERMSIG (exit_status));
++        }
++      g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
++                              standard_output, standard_error);
++      err_str = g_string_free (gstr, FALSE);
++      goto out;
++    }
++
++  duk_push_string (cx, standard_output);
++  ret = 1;
++
++ out:
++  g_strfreev (argv);
++  g_free (standard_output);
++  g_free (standard_error);
++  g_clear_object (&data.res);
++  if (loop != NULL)
++    g_main_loop_unref (loop);
++  if (context != NULL)
++    g_main_context_unref (context);
++
++  if (err_str)
++    duk_error (cx, DUK_ERR_ERROR, err_str);
++
++  return ret;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++
++static duk_ret_t
++js_polkit_user_is_in_netgroup (duk_context *cx)
++{
++  const char *user;
++  const char *netgroup;
++  gboolean is_in_netgroup = FALSE;
++
++  user = duk_require_string (cx, 0);
++  netgroup = duk_require_string (cx, 1);
++
++  if (innetgr (netgroup,
++               NULL,  /* host */
++               user,
++               NULL)) /* domain */
++    {
++      is_in_netgroup = TRUE;
++    }
++
++  duk_push_boolean (cx, is_in_netgroup);
++  return 1;
++}
++
++/* ---------------------------------------------------------------------------------------------------- */
++
++typedef struct
++{
++  GSimpleAsyncResult *simple; /* borrowed reference */
++  GMainContext *main_context; /* may be NULL */
++
++  GCancellable *cancellable;  /* may be NULL */
++  gulong cancellable_handler_id;
++
++  GPid child_pid;
++  gint child_stdout_fd;
++  gint child_stderr_fd;
++
++  GIOChannel *child_stdout_channel;
++  GIOChannel *child_stderr_channel;
++
++  GSource *child_watch_source;
++  GSource *child_stdout_source;
++  GSource *child_stderr_source;
++
++  guint timeout_seconds;
++  gboolean timed_out;
++  GSource *timeout_source;
++
++  GString *child_stdout;
++  GString *child_stderr;
++
++  gint exit_status;
++} UtilsSpawnData;
++
++static void
++utils_child_watch_from_release_cb (GPid     pid,
++                                   gint     status,
++                                   gpointer user_data)
++{
++}
++
++static void
++utils_spawn_data_free (UtilsSpawnData *data)
++{
++  if (data->timeout_source != NULL)
++    {
++      g_source_destroy (data->timeout_source);
++      data->timeout_source = NULL;
++    }
++
++  /* Nuke the child, if necessary */
++  if (data->child_watch_source != NULL)
++    {
++      g_source_destroy (data->child_watch_source);
++      data->child_watch_source = NULL;
++    }
++
++  if (data->child_pid != 0)
++    {
++      GSource *source;
++      kill (data->child_pid, SIGTERM);
++      /* OK, we need to reap for the child ourselves - we don't want
++       * to use waitpid() because that might block the calling
++       * thread (the child might handle SIGTERM and use several
++       * seconds for cleanup/rollback).
++       *
++       * So we use GChildWatch instead.
++       *
++       * Avoid taking a references to ourselves. but note that we need
++       * to pass the GSource so we can nuke it once handled.
++       */
++      source = g_child_watch_source_new (data->child_pid);
++      g_source_set_callback (source,
++                             (GSourceFunc) utils_child_watch_from_release_cb,
++                             source,
++                             (GDestroyNotify) g_source_destroy);
++      g_source_attach (source, data->main_context);
++      g_source_unref (source);
++      data->child_pid = 0;
++    }
++
++  if (data->child_stdout != NULL)
++    {
++      g_string_free (data->child_stdout, TRUE);
++      data->child_stdout = NULL;
++    }
++
++  if (data->child_stderr != NULL)
++    {
++      g_string_free (data->child_stderr, TRUE);
++      data->child_stderr = NULL;
++    }
++
++  if (data->child_stdout_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stdout_channel);
++      data->child_stdout_channel = NULL;
++    }
++  if (data->child_stderr_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stderr_channel);
++      data->child_stderr_channel = NULL;
++    }
++
++  if (data->child_stdout_source != NULL)
++    {
++      g_source_destroy (data->child_stdout_source);
++      data->child_stdout_source = NULL;
++    }
++  if (data->child_stderr_source != NULL)
++    {
++      g_source_destroy (data->child_stderr_source);
++      data->child_stderr_source = NULL;
++    }
++
++  if (data->child_stdout_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stdout_fd) == 0);
++      data->child_stdout_fd = -1;
++    }
++  if (data->child_stderr_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stderr_fd) == 0);
++      data->child_stderr_fd = -1;
++    }
++
++  if (data->cancellable_handler_id > 0)
++    {
++      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
++      data->cancellable_handler_id = 0;
++    }
++
++  if (data->main_context != NULL)
++    g_main_context_unref (data->main_context);
++
++  if (data->cancellable != NULL)
++    g_object_unref (data->cancellable);
++
++  g_slice_free (UtilsSpawnData, data);
++}
++
++/* called in the thread where @cancellable was cancelled */
++static void
++utils_on_cancelled (GCancellable *cancellable,
++                    gpointer      user_data)
++{
++  UtilsSpawnData *data = user_data;
++  GError *error;
++
++  error = NULL;
++  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
++  g_simple_async_result_take_error (data->simple, error);
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_read_child_stderr (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stderr, buf, bytes_read);
++  return TRUE;
++}
++
++static gboolean
++utils_read_child_stdout (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stdout, buf, bytes_read);
++  return TRUE;
++}
++
++static void
++utils_child_watch_cb (GPid     pid,
++                      gint     status,
++                      gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++  gchar *buf;
++  gsize buf_size;
++
++  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stdout, buf, buf_size);
++      g_free (buf);
++    }
++  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stderr, buf, buf_size);
++      g_free (buf);
++    }
++
++  data->exit_status = status;
++
++  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
++  data->child_pid = 0;
++  data->child_watch_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_timeout_cb (gpointer user_data)
++{
++  UtilsSpawnData *data = user_data;
++
++  data->timed_out = TRUE;
++
++  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
++  data->timeout_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++
++  return FALSE; /* remove source */
++}
++
++static void
++utils_spawn (const gchar *const  *argv,
++             guint                timeout_seconds,
++             GCancellable        *cancellable,
++             GAsyncReadyCallback  callback,
++             gpointer             user_data)
++{
++  UtilsSpawnData *data;
++  GError *error;
++
++  data = g_slice_new0 (UtilsSpawnData);
++  data->timeout_seconds = timeout_seconds;
++  data->simple = g_simple_async_result_new (NULL,
++                                            callback,
++                                            user_data,
++                                            utils_spawn);
++  data->main_context = g_main_context_get_thread_default ();
++  if (data->main_context != NULL)
++    g_main_context_ref (data->main_context);
++
++  data->cancellable = cancellable != NULL ? g_object_ref (cancellable) : NULL;
++
++  data->child_stdout = g_string_new (NULL);
++  data->child_stderr = g_string_new (NULL);
++  data->child_stdout_fd = -1;
++  data->child_stderr_fd = -1;
++
++  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
++  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
++
++  error = NULL;
++  if (data->cancellable != NULL)
++    {
++      /* could already be cancelled */
++      error = NULL;
++      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
++        {
++          g_simple_async_result_take_error (data->simple, error);
++          g_simple_async_result_complete_in_idle (data->simple);
++          g_object_unref (data->simple);
++          goto out;
++        }
++
++      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
++                                                            G_CALLBACK (utils_on_cancelled),
++                                                            data,
++                                                            NULL);
++    }
++
++  error = NULL;
++  if (!g_spawn_async_with_pipes (NULL, /* working directory */
++                                 (gchar **) argv,
++                                 NULL, /* envp */
++                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
++                                 NULL, /* child_setup */
++                                 NULL, /* child_setup's user_data */
++                                 &(data->child_pid),
++                                 NULL, /* gint *stdin_fd */
++                                 &(data->child_stdout_fd),
++                                 &(data->child_stderr_fd),
++                                 &error))
++    {
++      g_prefix_error (&error, "Error spawning: ");
++      g_simple_async_result_take_error (data->simple, error);
++      g_simple_async_result_complete_in_idle (data->simple);
++      g_object_unref (data->simple);
++      goto out;
++    }
++
++  if (timeout_seconds > 0)
++    {
++      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
++      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
++      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
++      g_source_attach (data->timeout_source, data->main_context);
++      g_source_unref (data->timeout_source);
++    }
++
++  data->child_watch_source = g_child_watch_source_new (data->child_pid);
++  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
++  g_source_attach (data->child_watch_source, data->main_context);
++  g_source_unref (data->child_watch_source);
++
++  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
++  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
++  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
++  g_source_attach (data->child_stdout_source, data->main_context);
++  g_source_unref (data->child_stdout_source);
++
++  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
++  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
++  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
++  g_source_attach (data->child_stderr_source, data->main_context);
++  g_source_unref (data->child_stderr_source);
++
++ out:
++  ;
++}
++
++gboolean
++utils_spawn_finish (GAsyncResult   *res,
++                    gint           *out_exit_status,
++                    gchar         **out_standard_output,
++                    gchar         **out_standard_error,
++                    GError        **error)
++{
++  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
++  UtilsSpawnData *data;
++  gboolean ret = FALSE;
++
++  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
++  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
++
++  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
++
++  if (g_simple_async_result_propagate_error (simple, error))
++    goto out;
++
++  data = g_simple_async_result_get_op_res_gpointer (simple);
++
++  if (data->timed_out)
++    {
++      g_set_error (error,
++                   G_IO_ERROR,
++                   G_IO_ERROR_TIMED_OUT,
++                   "Timed out after %d seconds",
++                   data->timeout_seconds);
++      goto out;
++    }
++
++  if (out_exit_status != NULL)
++    *out_exit_status = data->exit_status;
++
++  if (out_standard_output != NULL)
++    *out_standard_output = g_strdup (data->child_stdout->str);
++
++  if (out_standard_error != NULL)
++    *out_standard_error = g_strdup (data->child_stderr->str);
++
++  ret = TRUE;
++
++ out:
++  return ret;
++}
+-- 
+GitLab
+
+
+From d74aad8152a7c51999fffa9abe28e4306a052399 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:15:17 +0800
+Subject: [PATCH 02/16] check netgroup.h header file
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index ae98453..543d6fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -26,7 +26,11 @@
+ #include <errno.h>
+ #include <pwd.h>
+ #include <grp.h>
++#ifdef HAVE_NETGROUP_H
++#include <netgroup.h>
++#else
+ #include <netdb.h>
++#endif
+ #include <string.h>
+ #include <glib/gstdio.h>
+ #include <locale.h>
+-- 
+GitLab
+
+
+From 69c761506cbe458807e4ae2742c9e05bc60dad3d Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 10:59:03 +0800
+Subject: [PATCH 03/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 543d6fd..a54ed5b 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -249,7 +249,11 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   duk_context *cx = authority->priv->cx;
+ 
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
++  if (!duk_get_global_string (cx, "polkit")) {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error deleting old rules, not loading new ones");
++      return;
++  }
+   duk_push_string (cx, "_deleteRules");
+ 
+   duk_call_prop (cx, 0, 0);
+-- 
+GitLab
+
+
+From f1536c4899934fd3c8243fda2d084a472fe57d2e Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 11:22:39 +0800
+Subject: [PATCH 04/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index a54ed5b..1a7e6d3 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -656,7 +656,10 @@ push_action_and_details (duk_context               *cx,
+   gchar **keys;
+   guint n;
+ 
+-  duk_get_global_string (cx, "Action");
++  if (!duk_get_global_string (cx, "Action")) {
++    return FALSE;
++  }
++
+   duk_new (cx, 0);
+ 
+   set_property_str (cx, "id", action_id);
+@@ -699,7 +702,12 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+   duk_context *cx = authority->priv->cx;
+ 
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
++  if (!duk_get_global_string (cx, "polkit")) {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                    "Error deleting old rules, not loading new ones");
++      goto out;
++  }
++
+   duk_push_string (cx, "_runAdminRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From ca15eecf5dc7755947515c1bfc651fd8770aaf8f Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:17:16 +0800
+Subject: [PATCH 05/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 1a7e6d3..3f1b32d 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -550,7 +550,10 @@ push_subject (duk_context               *cx,
+   char *seat_str = NULL;
+   char *session_str = NULL;
+ 
+-  duk_get_global_string (cx, "Subject");
++  if (!duk_get_global_string (cx, "Subject")) {
++    return FALSE;
++  }
++
+   duk_new (cx, 0);
+ 
+   if (POLKIT_IS_UNIX_PROCESS (subject))
+@@ -789,8 +792,11 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+   gboolean good = FALSE;
+   duk_context *cx = authority->priv->cx;
+ 
++  if (!duk_get_global_string (cx, "polkit")) {
++      goto out;
++  }
++
+   duk_set_top (cx, 0);
+-  duk_get_global_string (cx, "polkit");
+   duk_push_string (cx, "_runRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From 870348365cc0166e14f28e0d144ed552bba4d794 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:18:13 +0800
+Subject: [PATCH 06/16] check return value
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 3f1b32d..6294ad9 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -843,7 +843,8 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+  out:
+   if (!good)
+     ret = POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED;
+-  g_free (ret_str);
++  if (ret_str != NULL)
++      g_free (ret_str);
+ 
+   return ret;
+ }
+-- 
+GitLab
+
+
+From 81c916ff08fdcee3c7340c4b2d4632086b89666c Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 11:23:04 +0800
+Subject: [PATCH 07/16] fix typecase
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 6294ad9..d466c9d 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -1191,7 +1191,7 @@ static void
+ utils_on_cancelled (GCancellable *cancellable,
+                     gpointer      user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   GError *error;
+ 
+   error = NULL;
+@@ -1206,7 +1206,7 @@ utils_read_child_stderr (GIOChannel *channel,
+                          GIOCondition condition,
+                          gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar buf[1024];
+   gsize bytes_read;
+ 
+@@ -1220,7 +1220,7 @@ utils_read_child_stdout (GIOChannel *channel,
+                          GIOCondition condition,
+                          gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar buf[1024];
+   gsize bytes_read;
+ 
+@@ -1234,7 +1234,7 @@ utils_child_watch_cb (GPid     pid,
+                       gint     status,
+                       gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+   gchar *buf;
+   gsize buf_size;
+ 
+@@ -1263,7 +1263,7 @@ utils_child_watch_cb (GPid     pid,
+ static gboolean
+ utils_timeout_cb (gpointer user_data)
+ {
+-  UtilsSpawnData *data = user_data;
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+ 
+   data->timed_out = TRUE;
+ 
+-- 
+GitLab
+
+
+From acb956bf52f0a78bf7aaf925876f96e97a146995 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 18:04:27 +0800
+Subject: [PATCH 08/16] typecase
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index d466c9d..237b1ad 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -915,8 +915,8 @@ spawn_cb (GObject       *source_object,
+           GAsyncResult  *res,
+           gpointer       user_data)
+ {
+-  SpawnData *data = user_data;
+-  data->res = g_object_ref (res);
++  SpawnData *data = (SpawnData *)user_data;
++  data->res = (GAsyncResult*)g_object_ref (res);
+   g_main_loop_quit (data->loop);
+ }
+ 
+@@ -1292,12 +1292,12 @@ utils_spawn (const gchar *const  *argv,
+   data->simple = g_simple_async_result_new (NULL,
+                                             callback,
+                                             user_data,
+-                                            utils_spawn);
++                                            (gpointer*)utils_spawn);
+   data->main_context = g_main_context_get_thread_default ();
+   if (data->main_context != NULL)
+     g_main_context_ref (data->main_context);
+ 
+-  data->cancellable = cancellable != NULL ? g_object_ref (cancellable) : NULL;
++  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+ 
+   data->child_stdout = g_string_new (NULL);
+   data->child_stderr = g_string_new (NULL);
+@@ -1397,7 +1397,7 @@ utils_spawn_finish (GAsyncResult   *res,
+   if (g_simple_async_result_propagate_error (simple, error))
+     goto out;
+ 
+-  data = g_simple_async_result_get_op_res_gpointer (simple);
++  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+ 
+   if (data->timed_out)
+     {
+-- 
+GitLab
+
+
+From be060e4d48aceb09af34868b555b6c73c7afdabb Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 13:53:23 +0800
+Subject: [PATCH 09/16] some change
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .../polkitbackendduktapeauthority.c           | 26 +++++++++++--------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 237b1ad..fad9017 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -207,18 +207,22 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+-      const gchar *filename = l->data;
+-
++      const gchar *filename = (gchar *)l->data;
+ #if (DUK_VERSION >= 20000)
+-      gchar *contents;
+-      gsize length;
+-      GError *error = NULL;
+-      if (!g_file_get_contents (filename, &contents, &length, &error)){
+-        g_warning("Error when file contents of %s: %s\n", filename, error->message);
+-        g_error_free (error);
+-        continue;
+-      }
+-      if (duk_peval_lstring_noresult(cx, contents,length) != 0)
++      GFile *file = g_file_new_for_path (filename);
++      char *contents;
++      gsize len;
++      if (!g_file_load_contents (file, NULL, &contents, &len, NULL, NULL))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Error compiling script %s",
++                                        filename);
++          g_object_unref (file);
++          continue;
++        }
++
++      g_object_unref (file);
++      if (duk_peval_lstring_noresult(cx, contents,len) != 0)
+ #else
+       if (duk_peval_file_noresult (cx, filename) != 0)
+ #endif
+-- 
+GitLab
+
+
+From 2ffb62048a5ebedfe3bb053feb7385c7270ede28 Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 15:25:45 +0800
+Subject: [PATCH 10/16] some change
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .../polkitbackendduktapeauthority.c           | 24 +++++++++----------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index fad9017..6fac3be 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -125,6 +125,18 @@ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BAC
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
++static duk_ret_t js_polkit_log (duk_context *cx);
++static duk_ret_t js_polkit_spawn (duk_context *cx);
++static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
++
++static const duk_function_list_entry js_polkit_functions[] =
++{
++  { "log", js_polkit_log, 1 },
++  { "spawn", js_polkit_spawn, 1 },
++  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
++  { NULL, NULL, 0 },
++};
++
+ static void
+ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ {
+@@ -347,18 +359,6 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static duk_ret_t js_polkit_log (duk_context *cx);
+-static duk_ret_t js_polkit_spawn (duk_context *cx);
+-static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
+-
+-static const duk_function_list_entry js_polkit_functions[] =
+-{
+-  { "log", js_polkit_log, 1 },
+-  { "spawn", js_polkit_spawn, 1 },
+-  { "_userIsInNetGroup", js_polkit_user_is_in_netgroup, 2 },
+-  { NULL, NULL, 0 },
+-};
+-
+ static void
+ polkit_backend_js_authority_constructed (GObject *object)
+ {
+-- 
+GitLab
+
+
+From edb70ef69eed3275f5654510d135e680eb46c85d Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 15:25:35 +0800
+Subject: [PATCH 11/16] remove WATCHDOG_TIMEOUT define
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 6fac3be..51e03fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -69,7 +69,6 @@ struct _PolkitBackendJsAuthorityPrivate
+   duk_context *cx;
+ };
+ 
+-#define WATCHDOG_TIMEOUT (15 * G_TIME_SPAN_SECOND)
+ 
+ static void utils_spawn (const gchar *const  *argv,
+                          guint                timeout_seconds,
+-- 
+GitLab
+
+
+From 906ae404f29f15ef8c529b999bf091b5d18ed7ac Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 12:46:40 +0800
+Subject: [PATCH 12/16] add meson build system support
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ meson.build                   | 11 ++++++++++-
+ meson_options.txt             |  1 +
+ src/polkitbackend/meson.build | 10 ++++++++--
+ 3 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 858078d..4e44723 100644
+--- a/meson.build
++++ b/meson.build
+@@ -133,7 +133,13 @@ expat_dep = dependency('expat')
+ assert(cc.has_header('expat.h', dependencies: expat_dep), 'Can\'t find expat.h. Please install expat.')
+ assert(cc.has_function('XML_ParserCreate', dependencies: expat_dep), 'Can\'t find expat library. Please install expat.')
+ 
+-mozjs_dep = dependency('mozjs-78')
++js_engine = get_option('js_engine')
++if js_engine == 'duktape'
++  js_dep = dependency('duktape')
++  libm_dep = cc.find_library('m')
++elif js_engine == 'mozjs'
++  js_dep = dependency('mozjs-78')
++endif
+ 
+ dbus_dep = dependency('dbus-1', required: false)
+ dbus_policydir = pk_prefix / pk_datadir / 'dbus-1/system.d'
+@@ -361,6 +367,9 @@ if enable_logind
+   output += '        systemdsystemunitdir:     ' + systemd_systemdsystemunitdir + '\n'
+ endif
+ output += '        polkitd user:             ' + polkitd_user + ' \n'
++output += '        Javascript engine:        ' + js_engine + '\n'
++if enable_logind
++endif
+ output += '        PAM support:              ' + enable_pam.to_string() + '\n\n'
+ if enable_pam
+   output += '        PAM file auth:            ' + pam_conf['PAM_FILE_INCLUDE_AUTH'] + '\n'
+diff --git a/meson_options.txt b/meson_options.txt
+index 25e3e77..76aa311 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -16,3 +16,4 @@ option('introspection', type: 'boolean', value: true, description: 'Enable intro
+ 
+ option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
+ option('man', type: 'boolean', value: false, description: 'build manual pages')
++option('js_engine', type: 'combo', choices: ['mozjs', 'duktape'], value: 'duktape', description: 'javascript engine')
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 64f0e4a..489897d 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -5,7 +5,6 @@ sources = files(
+   'polkitbackendactionpool.c',
+   'polkitbackendauthority.c',
+   'polkitbackendinteractiveauthority.c',
+-  'polkitbackendjsauthority.cpp',
+ )
+ 
+ output = 'initjs.h'
+@@ -21,7 +20,7 @@ sources += custom_target(
+ deps = [
+   expat_dep,
+   libpolkit_gobject_dep,
+-  mozjs_dep,
++  js_dep,
+ ]
+ 
+ c_flags = [
+@@ -31,6 +30,13 @@ c_flags = [
+   '-DPACKAGE_SYSCONF_DIR="@0@"'.format(pk_prefix / pk_sysconfdir),
+ ]
+ 
++if js_engine == 'duktape'
++  sources += files('polkitbackendduktapeauthority.c')
++  deps += libm_dep
++elif js_engine == 'mozjs'
++  sources += files('polkitbackendjsauthority.cpp')
++endif
++
+ if enable_logind
+   sources += files('polkitbackendsessionmonitor-systemd.c')
+ 
+-- 
+GitLab
+
+
+From 1380b505c25be4aebe54b1b4223a570d64af83cc Mon Sep 17 00:00:00 2001
+From: Wu Xiaotian <yetist@gmail.com>
+Date: Sun, 22 Nov 2020 18:49:14 +0800
+Subject: [PATCH 13/16] fix run error
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/polkitbackendduktapeauthority.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 51e03fd..4b4f8fd 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -795,11 +795,11 @@ polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAu
+   gboolean good = FALSE;
+   duk_context *cx = authority->priv->cx;
+ 
++  duk_set_top (cx, 0);
+   if (!duk_get_global_string (cx, "polkit")) {
+       goto out;
+   }
+ 
+-  duk_set_top (cx, 0);
+   duk_push_string (cx, "_runRules");
+ 
+   if (!push_action_and_details (cx, action_id, details, &error))
+-- 
+GitLab
+
+
+From 6856a704b70378948ef5f66e9b09555d97d4070b Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Fri, 10 Sep 2021 15:17:58 -0700
+Subject: [PATCH 14/16] Deduplicate code for "Add duktape as JS engine backend"
+ effort/MR
+
+This leverages Wu Xiaotian (@yetist)'s original MR
+(https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/35), in
+an effort to complete said work.
+
+This is the first of the requests from maintainers--to reduce
+eliminate code duplication.
+
+The runaway-killer missing functionality will come in the sequence.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ src/polkitbackend/Makefile.am                 |   1 +
+ src/polkitbackend/meson.build                 |   1 +
+ src/polkitbackend/polkitbackendcommon.c       | 530 +++++++++++++
+ src/polkitbackend/polkitbackendcommon.h       | 156 ++++
+ .../polkitbackendduktapeauthority.c           | 714 ++----------------
+ .../polkitbackendjsauthority.cpp              | 711 ++---------------
+ 6 files changed, 790 insertions(+), 1323 deletions(-)
+ create mode 100644 src/polkitbackend/polkitbackendcommon.c
+ create mode 100644 src/polkitbackend/polkitbackendcommon.h
+
+diff --git a/src/polkitbackend/Makefile.am b/src/polkitbackend/Makefile.am
+index abcbc6f..6a8b4ae 100644
+--- a/src/polkitbackend/Makefile.am
++++ b/src/polkitbackend/Makefile.am
+@@ -31,6 +31,7 @@ libpolkit_backend_1_la_SOURCES =                                   			\
+         polkitbackend.h									\
+ 	polkitbackendtypes.h								\
+ 	polkitbackendprivate.h								\
++	polkitbackendcommon.h			polkitbackendcommon.c			\
+ 	polkitbackendauthority.h		polkitbackendauthority.c		\
+ 	polkitbackendinteractiveauthority.h	polkitbackendinteractiveauthority.c	\
+ 	polkitbackendjsauthority.h				\
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 489897d..9ec01b2 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -4,6 +4,7 @@ sources = files(
+   'polkitbackendactionlookup.c',
+   'polkitbackendactionpool.c',
+   'polkitbackendauthority.c',
++  'polkitbackendcommon.c',
+   'polkitbackendinteractiveauthority.c',
+ )
+ 
+diff --git a/src/polkitbackend/polkitbackendcommon.c b/src/polkitbackend/polkitbackendcommon.c
+new file mode 100644
+index 0000000..6783dff
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendcommon.c
+@@ -0,0 +1,530 @@
++/*
++ * Copyright (C) 2008 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General
++ * Public License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
++ * Boston, MA 02111-1307, USA.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#include "polkitbackendcommon.h"
++
++static void
++utils_child_watch_from_release_cb (GPid     pid,
++                                   gint     status,
++                                   gpointer user_data)
++{
++}
++
++static void
++utils_spawn_data_free (UtilsSpawnData *data)
++{
++  if (data->timeout_source != NULL)
++    {
++      g_source_destroy (data->timeout_source);
++      data->timeout_source = NULL;
++    }
++
++  /* Nuke the child, if necessary */
++  if (data->child_watch_source != NULL)
++    {
++      g_source_destroy (data->child_watch_source);
++      data->child_watch_source = NULL;
++    }
++
++  if (data->child_pid != 0)
++    {
++      GSource *source;
++      kill (data->child_pid, SIGTERM);
++      /* OK, we need to reap for the child ourselves - we don't want
++       * to use waitpid() because that might block the calling
++       * thread (the child might handle SIGTERM and use several
++       * seconds for cleanup/rollback).
++       *
++       * So we use GChildWatch instead.
++       *
++       * Avoid taking a references to ourselves. but note that we need
++       * to pass the GSource so we can nuke it once handled.
++       */
++      source = g_child_watch_source_new (data->child_pid);
++      g_source_set_callback (source,
++                             (GSourceFunc) utils_child_watch_from_release_cb,
++                             source,
++                             (GDestroyNotify) g_source_destroy);
++      g_source_attach (source, data->main_context);
++      g_source_unref (source);
++      data->child_pid = 0;
++    }
++
++  if (data->child_stdout != NULL)
++    {
++      g_string_free (data->child_stdout, TRUE);
++      data->child_stdout = NULL;
++    }
++
++  if (data->child_stderr != NULL)
++    {
++      g_string_free (data->child_stderr, TRUE);
++      data->child_stderr = NULL;
++    }
++
++  if (data->child_stdout_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stdout_channel);
++      data->child_stdout_channel = NULL;
++    }
++  if (data->child_stderr_channel != NULL)
++    {
++      g_io_channel_unref (data->child_stderr_channel);
++      data->child_stderr_channel = NULL;
++    }
++
++  if (data->child_stdout_source != NULL)
++    {
++      g_source_destroy (data->child_stdout_source);
++      data->child_stdout_source = NULL;
++    }
++  if (data->child_stderr_source != NULL)
++    {
++      g_source_destroy (data->child_stderr_source);
++      data->child_stderr_source = NULL;
++    }
++
++  if (data->child_stdout_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stdout_fd) == 0);
++      data->child_stdout_fd = -1;
++    }
++  if (data->child_stderr_fd != -1)
++    {
++      g_warn_if_fail (close (data->child_stderr_fd) == 0);
++      data->child_stderr_fd = -1;
++    }
++
++  if (data->cancellable_handler_id > 0)
++    {
++      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
++      data->cancellable_handler_id = 0;
++    }
++
++  if (data->main_context != NULL)
++    g_main_context_unref (data->main_context);
++
++  if (data->cancellable != NULL)
++    g_object_unref (data->cancellable);
++
++  g_slice_free (UtilsSpawnData, data);
++}
++
++/* called in the thread where @cancellable was cancelled */
++static void
++utils_on_cancelled (GCancellable *cancellable,
++                    gpointer      user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  GError *error;
++
++  error = NULL;
++  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
++  g_simple_async_result_take_error (data->simple, error);
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_timeout_cb (gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++
++  data->timed_out = TRUE;
++
++  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
++  data->timeout_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++
++  return FALSE; /* remove source */
++}
++
++static void
++utils_child_watch_cb (GPid     pid,
++                      gint     status,
++                      gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar *buf;
++  gsize buf_size;
++
++  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stdout, buf, buf_size);
++      g_free (buf);
++    }
++  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
++    {
++      g_string_append_len (data->child_stderr, buf, buf_size);
++      g_free (buf);
++    }
++
++  data->exit_status = status;
++
++  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
++  data->child_pid = 0;
++  data->child_watch_source = NULL;
++
++  /* we're done */
++  g_simple_async_result_complete_in_idle (data->simple);
++  g_object_unref (data->simple);
++}
++
++static gboolean
++utils_read_child_stderr (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stderr, buf, bytes_read);
++  return TRUE;
++}
++
++static gboolean
++utils_read_child_stdout (GIOChannel *channel,
++                         GIOCondition condition,
++                         gpointer user_data)
++{
++  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
++  gchar buf[1024];
++  gsize bytes_read;
++
++  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
++  g_string_append_len (data->child_stdout, buf, bytes_read);
++  return TRUE;
++}
++
++void
++polkit_backend_common_spawn (const gchar *const  *argv,
++                             guint                timeout_seconds,
++                             GCancellable        *cancellable,
++                             GAsyncReadyCallback  callback,
++                             gpointer             user_data)
++{
++  UtilsSpawnData *data;
++  GError *error;
++
++  data = g_slice_new0 (UtilsSpawnData);
++  data->timeout_seconds = timeout_seconds;
++  data->simple = g_simple_async_result_new (NULL,
++                                            callback,
++                                            user_data,
++                                            (gpointer*)polkit_backend_common_spawn);
++  data->main_context = g_main_context_get_thread_default ();
++  if (data->main_context != NULL)
++    g_main_context_ref (data->main_context);
++
++  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
++
++  data->child_stdout = g_string_new (NULL);
++  data->child_stderr = g_string_new (NULL);
++  data->child_stdout_fd = -1;
++  data->child_stderr_fd = -1;
++
++  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
++  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
++
++  error = NULL;
++  if (data->cancellable != NULL)
++    {
++      /* could already be cancelled */
++      error = NULL;
++      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
++        {
++          g_simple_async_result_take_error (data->simple, error);
++          g_simple_async_result_complete_in_idle (data->simple);
++          g_object_unref (data->simple);
++          goto out;
++        }
++
++      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
++                                                            G_CALLBACK (utils_on_cancelled),
++                                                            data,
++                                                            NULL);
++    }
++
++  error = NULL;
++  if (!g_spawn_async_with_pipes (NULL, /* working directory */
++                                 (gchar **) argv,
++                                 NULL, /* envp */
++                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
++                                 NULL, /* child_setup */
++                                 NULL, /* child_setup's user_data */
++                                 &(data->child_pid),
++                                 NULL, /* gint *stdin_fd */
++                                 &(data->child_stdout_fd),
++                                 &(data->child_stderr_fd),
++                                 &error))
++    {
++      g_prefix_error (&error, "Error spawning: ");
++      g_simple_async_result_take_error (data->simple, error);
++      g_simple_async_result_complete_in_idle (data->simple);
++      g_object_unref (data->simple);
++      goto out;
++    }
++
++  if (timeout_seconds > 0)
++    {
++      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
++      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
++      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
++      g_source_attach (data->timeout_source, data->main_context);
++      g_source_unref (data->timeout_source);
++    }
++
++  data->child_watch_source = g_child_watch_source_new (data->child_pid);
++  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
++  g_source_attach (data->child_watch_source, data->main_context);
++  g_source_unref (data->child_watch_source);
++
++  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
++  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
++  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
++  g_source_attach (data->child_stdout_source, data->main_context);
++  g_source_unref (data->child_stdout_source);
++
++  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
++  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
++  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
++  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
++  g_source_attach (data->child_stderr_source, data->main_context);
++  g_source_unref (data->child_stderr_source);
++
++ out:
++  ;
++}
++
++void
++polkit_backend_common_on_dir_monitor_changed (GFileMonitor     *monitor,
++                                              GFile            *file,
++                                              GFile            *other_file,
++                                              GFileMonitorEvent event_type,
++                                              gpointer          user_data)
++{
++  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
++
++  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
++   *       Because when editing a file with emacs we get 4-8 events..
++   */
++
++  if (file != NULL)
++    {
++      gchar *name;
++
++      name = g_file_get_basename (file);
++
++      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
++      if (!g_str_has_prefix (name, ".") &&
++          !g_str_has_prefix (name, "#") &&
++          g_str_has_suffix (name, ".rules") &&
++          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
++           event_type == G_FILE_MONITOR_EVENT_DELETED ||
++           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
++        {
++          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                        "Reloading rules");
++          polkit_backend_common_reload_scripts (authority);
++        }
++      g_free (name);
++    }
++}
++
++gboolean
++polkit_backend_common_spawn_finish (GAsyncResult   *res,
++                                    gint           *out_exit_status,
++                                    gchar         **out_standard_output,
++                                    gchar         **out_standard_error,
++                                    GError        **error)
++{
++  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
++  UtilsSpawnData *data;
++  gboolean ret = FALSE;
++
++  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
++  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
++
++  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_backend_common_spawn);
++
++  if (g_simple_async_result_propagate_error (simple, error))
++    goto out;
++
++  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
++
++  if (data->timed_out)
++    {
++      g_set_error (error,
++                   G_IO_ERROR,
++                   G_IO_ERROR_TIMED_OUT,
++                   "Timed out after %d seconds",
++                   data->timeout_seconds);
++      goto out;
++    }
++
++  if (out_exit_status != NULL)
++    *out_exit_status = data->exit_status;
++
++  if (out_standard_output != NULL)
++    *out_standard_output = g_strdup (data->child_stdout->str);
++
++  if (out_standard_error != NULL)
++    *out_standard_error = g_strdup (data->child_stderr->str);
++
++  ret = TRUE;
++
++ out:
++  return ret;
++}
++
++static const gchar *
++polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
++{
++  return "js";
++}
++
++static const gchar *
++polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
++{
++  return PACKAGE_VERSION;
++}
++
++static PolkitAuthorityFeatures
++polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
++{
++  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
++}
++
++void
++polkit_backend_common_js_authority_class_init_common (PolkitBackendJsAuthorityClass *klass)
++{
++  GObjectClass *gobject_class;
++  PolkitBackendAuthorityClass *authority_class;
++  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
++
++  gobject_class = G_OBJECT_CLASS (klass);
++  gobject_class->finalize                               = polkit_backend_common_js_authority_finalize;
++  gobject_class->set_property                           = polkit_backend_common_js_authority_set_property;
++  gobject_class->constructed                            = polkit_backend_common_js_authority_constructed;
++
++  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
++  authority_class->get_name                             = polkit_backend_js_authority_get_name;
++  authority_class->get_version                          = polkit_backend_js_authority_get_version;
++  authority_class->get_features                         = polkit_backend_js_authority_get_features;
++
++  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
++  interactive_authority_class->get_admin_identities     = polkit_backend_common_js_authority_get_admin_auth_identities;
++  interactive_authority_class->check_authorization_sync = polkit_backend_common_js_authority_check_authorization_sync;
++
++  g_object_class_install_property (gobject_class,
++                                   PROP_RULES_DIRS,
++                                   g_param_spec_boxed ("rules-dirs",
++                                                       NULL,
++                                                       NULL,
++                                                       G_TYPE_STRV,
++                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
++}
++
++gint
++polkit_backend_common_rules_file_name_cmp (const gchar *a,
++                                           const gchar *b)
++{
++  gint ret;
++  const gchar *a_base;
++  const gchar *b_base;
++
++  a_base = strrchr (a, '/');
++  b_base = strrchr (b, '/');
++
++  g_assert (a_base != NULL);
++  g_assert (b_base != NULL);
++  a_base += 1;
++  b_base += 1;
++
++  ret = g_strcmp0 (a_base, b_base);
++  if (ret == 0)
++    {
++      /* /etc wins over /usr */
++      ret = g_strcmp0 (a, b);
++      g_assert (ret != 0);
++    }
++
++  return ret;
++}
++
++const gchar *
++polkit_backend_common_get_signal_name (gint signal_number)
++{
++  switch (signal_number)
++    {
++#define _HANDLE_SIG(sig) case sig: return #sig;
++    _HANDLE_SIG (SIGHUP);
++    _HANDLE_SIG (SIGINT);
++    _HANDLE_SIG (SIGQUIT);
++    _HANDLE_SIG (SIGILL);
++    _HANDLE_SIG (SIGABRT);
++    _HANDLE_SIG (SIGFPE);
++    _HANDLE_SIG (SIGKILL);
++    _HANDLE_SIG (SIGSEGV);
++    _HANDLE_SIG (SIGPIPE);
++    _HANDLE_SIG (SIGALRM);
++    _HANDLE_SIG (SIGTERM);
++    _HANDLE_SIG (SIGUSR1);
++    _HANDLE_SIG (SIGUSR2);
++    _HANDLE_SIG (SIGCHLD);
++    _HANDLE_SIG (SIGCONT);
++    _HANDLE_SIG (SIGSTOP);
++    _HANDLE_SIG (SIGTSTP);
++    _HANDLE_SIG (SIGTTIN);
++    _HANDLE_SIG (SIGTTOU);
++    _HANDLE_SIG (SIGBUS);
++#ifdef SIGPOLL
++    _HANDLE_SIG (SIGPOLL);
++#endif
++    _HANDLE_SIG (SIGPROF);
++    _HANDLE_SIG (SIGSYS);
++    _HANDLE_SIG (SIGTRAP);
++    _HANDLE_SIG (SIGURG);
++    _HANDLE_SIG (SIGVTALRM);
++    _HANDLE_SIG (SIGXCPU);
++    _HANDLE_SIG (SIGXFSZ);
++#undef _HANDLE_SIG
++    default:
++      break;
++    }
++  return "UNKNOWN_SIGNAL";
++}
++
++void
++polkit_backend_common_spawn_cb (GObject       *source_object,
++                                GAsyncResult  *res,
++                                gpointer       user_data)
++{
++  SpawnData *data = (SpawnData *)user_data;
++  data->res = (GAsyncResult*)g_object_ref (res);
++  g_main_loop_quit (data->loop);
++}
+diff --git a/src/polkitbackend/polkitbackendcommon.h b/src/polkitbackend/polkitbackendcommon.h
+new file mode 100644
+index 0000000..6d0d267
+--- /dev/null
++++ b/src/polkitbackend/polkitbackendcommon.h
+@@ -0,0 +1,156 @@
++/*
++ * Copyright (C) 2008 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General
++ * Public License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
++ * Boston, MA 02111-1307, USA.
++ *
++ * Author: David Zeuthen <davidz@redhat.com>
++ */
++
++#if !defined (_POLKIT_BACKEND_COMPILATION) && !defined(_POLKIT_BACKEND_INSIDE_POLKIT_BACKEND_H)
++#error "Only <polkitbackend/polkitbackend.h> can be included directly, this file may disappear or change contents."
++#endif
++
++#ifndef __POLKIT_BACKEND_COMMON_H
++#define __POLKIT_BACKEND_COMMON_H
++
++#include "config.h"
++#include <sys/wait.h>
++#include <errno.h>
++#include <pwd.h>
++#include <grp.h>
++#ifdef HAVE_NETGROUP_H
++#include <netgroup.h>
++#else
++#include <netdb.h>
++#endif
++#include <string.h>
++#include <glib/gstdio.h>
++#include <locale.h>
++#include <glib/gi18n-lib.h> //here, all things glib via glib.h (including -> gspawn.h)
++
++#include <polkit/polkit.h>
++#include "polkitbackendjsauthority.h"
++
++#include <polkit/polkitprivate.h>
++
++#ifdef HAVE_LIBSYSTEMD
++#include <systemd/sd-login.h>
++#endif /* HAVE_LIBSYSTEMD */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++enum
++{
++  PROP_0,
++  PROP_RULES_DIRS,
++};
++
++typedef struct
++{
++  GSimpleAsyncResult *simple; /* borrowed reference */
++  GMainContext *main_context; /* may be NULL */
++
++  GCancellable *cancellable;  /* may be NULL */
++  gulong cancellable_handler_id;
++
++  GPid child_pid;
++  gint child_stdout_fd;
++  gint child_stderr_fd;
++
++  GIOChannel *child_stdout_channel;
++  GIOChannel *child_stderr_channel;
++
++  GSource *child_watch_source;
++  GSource *child_stdout_source;
++  GSource *child_stderr_source;
++
++  guint timeout_seconds;
++  gboolean timed_out;
++  GSource *timeout_source;
++
++  GString *child_stdout;
++  GString *child_stderr;
++
++  gint exit_status;
++} UtilsSpawnData;
++
++typedef struct
++{
++  GMainLoop *loop;
++  GAsyncResult *res;
++} SpawnData;
++
++void polkit_backend_common_spawn (const gchar *const  *argv,
++                                  guint                timeout_seconds,
++                                  GCancellable        *cancellable,
++                                  GAsyncReadyCallback  callback,
++                                  gpointer             user_data);
++void polkit_backend_common_spawn_cb (GObject       *source_object,
++                                     GAsyncResult  *res,
++                                     gpointer       user_data);
++gboolean polkit_backend_common_spawn_finish (GAsyncResult   *res,
++                                             gint           *out_exit_status,
++                                             gchar         **out_standard_output,
++                                             gchar         **out_standard_error,
++                                             GError        **error);
++
++void polkit_backend_common_on_dir_monitor_changed (GFileMonitor     *monitor,
++                                                   GFile            *file,
++                                                   GFile            *other_file,
++                                                   GFileMonitorEvent event_type,
++                                                   gpointer          user_data);
++
++void polkit_backend_common_js_authority_class_init_common (PolkitBackendJsAuthorityClass *klass);
++
++gint polkit_backend_common_rules_file_name_cmp (const gchar *a,
++                                                const gchar *b);
++
++const gchar *polkit_backend_common_get_signal_name (gint signal_number);
++
++/* To be provided by each JS backend, from here onwards  ---------------------------------------------- */
++
++void polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority);
++void polkit_backend_common_js_authority_finalize (GObject *object);
++void polkit_backend_common_js_authority_constructed (GObject *object);
++GList *polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                                     PolkitSubject                     *caller,
++                                                                     PolkitSubject                     *subject,
++                                                                     PolkitIdentity                    *user_for_subject,
++                                                                     gboolean                           subject_is_local,
++                                                                     gboolean                           subject_is_active,
++                                                                     const gchar                       *action_id,
++                                                                     PolkitDetails                     *details);
++void polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                      guint         property_id,
++                                                      const GValue *value,
++                                                      GParamSpec   *pspec);
++PolkitImplicitAuthorization polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                                                         PolkitSubject                     *caller,
++                                                                                         PolkitSubject                     *subject,
++                                                                                         PolkitIdentity                    *user_for_subject,
++                                                                                         gboolean                           subject_is_local,
++                                                                                         gboolean                           subject_is_active,
++                                                                                         const gchar                       *action_id,
++                                                                                         PolkitDetails                     *details,
++                                                                                         PolkitImplicitAuthorization        implicit);
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __POLKIT_BACKEND_COMMON_H */
++
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index 4b4f8fd..a2b4420 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -21,32 +21,12 @@
+  * Author: David Zeuthen <davidz@redhat.com>
+  */
+ 
+-#include "config.h"
+-#include <sys/wait.h>
+-#include <errno.h>
+-#include <pwd.h>
+-#include <grp.h>
+-#ifdef HAVE_NETGROUP_H
+-#include <netgroup.h>
+-#else
+-#include <netdb.h>
+-#endif
+-#include <string.h>
+-#include <glib/gstdio.h>
+-#include <locale.h>
+-#include <glib/gi18n-lib.h>
+-
+-#include <polkit/polkit.h>
+-#include "polkitbackendjsauthority.h"
+-
+-#include <polkit/polkitprivate.h>
++#include "polkitbackendcommon.h"
+ 
+-#ifdef HAVE_LIBSYSTEMD
+-#include <systemd/sd-login.h>
+-#endif /* HAVE_LIBSYSTEMD */
++#include "duktape.h"
+ 
++/* Built source and not too big to worry about deduplication */
+ #include "initjs.h" /* init.js */
+-#include "duktape.h"
+ 
+ /**
+  * SECTION:polkitbackendjsauthority
+@@ -54,10 +34,9 @@
+  * @short_description: JS Authority
+  * @stability: Unstable
+  *
+- * An implementation of #PolkitBackendAuthority that reads and
+- * evalates Javascript files and supports interaction with
+- * authentication agents (virtue of being based on
+- * #PolkitBackendInteractiveAuthority).
++ * An (Duktape-based) implementation of #PolkitBackendAuthority that reads and
++ * evaluates Javascript files and supports interaction with authentication
++ * agents (virtue of being based on #PolkitBackendInteractiveAuthority).
+  */
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -66,64 +45,16 @@ struct _PolkitBackendJsAuthorityPrivate
+ {
+   gchar **rules_dirs;
+   GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
+-  duk_context *cx;
+-};
+-
+-
+-static void utils_spawn (const gchar *const  *argv,
+-                         guint                timeout_seconds,
+-                         GCancellable        *cancellable,
+-                         GAsyncReadyCallback  callback,
+-                         gpointer             user_data);
+-
+-gboolean utils_spawn_finish (GAsyncResult   *res,
+-                             gint           *out_exit_status,
+-                             gchar         **out_standard_output,
+-                             gchar         **out_standard_error,
+-                             GError        **error);
+ 
+-static void on_dir_monitor_changed (GFileMonitor     *monitor,
+-                                    GFile            *file,
+-                                    GFile            *other_file,
+-                                    GFileMonitorEvent event_type,
+-                                    gpointer          user_data);
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+-enum
+-{
+-  PROP_0,
+-  PROP_RULES_DIRS,
++  duk_context *cx;
+ };
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
+-                                                                     PolkitSubject                     *caller,
+-                                                                     PolkitSubject                     *subject,
+-                                                                     PolkitIdentity                    *user_for_subject,
+-                                                                     gboolean                           subject_is_local,
+-                                                                     gboolean                           subject_is_active,
+-                                                                     const gchar                       *action_id,
+-                                                                     PolkitDetails                     *details);
+-
+-static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
+-                                                          PolkitBackendInteractiveAuthority *authority,
+-                                                          PolkitSubject                     *caller,
+-                                                          PolkitSubject                     *subject,
+-                                                          PolkitIdentity                    *user_for_subject,
+-                                                          gboolean                           subject_is_local,
+-                                                          gboolean                           subject_is_active,
+-                                                          const gchar                       *action_id,
+-                                                          PolkitDetails                     *details,
+-                                                          PolkitImplicitAuthorization        implicit);
+-
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+ static duk_ret_t js_polkit_log (duk_context *cx);
+ static duk_ret_t js_polkit_spawn (duk_context *cx);
+ static duk_ret_t js_polkit_user_is_in_netgroup (duk_context *cx);
+@@ -144,33 +75,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+                                                  PolkitBackendJsAuthorityPrivate);
+ }
+ 
+-static gint
+-rules_file_name_cmp (const gchar *a,
+-                     const gchar *b)
+-{
+-  gint ret;
+-  const gchar *a_base;
+-  const gchar *b_base;
+-
+-  a_base = strrchr (a, '/');
+-  b_base = strrchr (b, '/');
+-
+-  g_assert (a_base != NULL);
+-  g_assert (b_base != NULL);
+-  a_base += 1;
+-  b_base += 1;
+-
+-  ret = g_strcmp0 (a_base, b_base);
+-  if (ret == 0)
+-    {
+-      /* /etc wins over /usr */
+-      ret = g_strcmp0 (a, b);
+-      g_assert (ret != 0);
+-    }
+-
+-  return ret;
+-}
+-
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+ {
+@@ -214,7 +118,7 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+         }
+     }
+ 
+-  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++  files = g_list_sort (files, (GCompareFunc) polkit_backend_common_rules_file_name_cmp);
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+@@ -258,8 +162,8 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   g_list_free_full (files, g_free);
+ }
+ 
+-static void
+-reload_scripts (PolkitBackendJsAuthority *authority)
++void
++polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority)
+ {
+   duk_context *cx = authority->priv->cx;
+ 
+@@ -282,42 +186,6 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   g_signal_emit_by_name (authority, "changed");
+ }
+ 
+-static void
+-on_dir_monitor_changed (GFileMonitor     *monitor,
+-                        GFile            *file,
+-                        GFile            *other_file,
+-                        GFileMonitorEvent event_type,
+-                        gpointer          user_data)
+-{
+-  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
+-
+-  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
+-   *       Because when editing a file with emacs we get 4-8 events..
+-   */
+-
+-  if (file != NULL)
+-    {
+-      gchar *name;
+-
+-      name = g_file_get_basename (file);
+-
+-      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
+-      if (!g_str_has_prefix (name, ".") &&
+-          !g_str_has_prefix (name, "#") &&
+-          g_str_has_suffix (name, ".rules") &&
+-          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
+-           event_type == G_FILE_MONITOR_EVENT_DELETED ||
+-           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Reloading rules");
+-          reload_scripts (authority);
+-        }
+-      g_free (name);
+-    }
+-}
+-
+-
+ static void
+ setup_file_monitors (PolkitBackendJsAuthority *authority)
+ {
+@@ -349,7 +217,7 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+         {
+           g_signal_connect (monitor,
+                             "changed",
+-                            G_CALLBACK (on_dir_monitor_changed),
++                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                             authority);
+           g_ptr_array_add (p, monitor);
+         }
+@@ -358,8 +226,8 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static void
+-polkit_backend_js_authority_constructed (GObject *object)
++void
++polkit_backend_common_js_authority_constructed (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   duk_context *cx;
+@@ -395,8 +263,8 @@ polkit_backend_js_authority_constructed (GObject *object)
+   g_assert_not_reached ();
+ }
+ 
+-static void
+-polkit_backend_js_authority_finalize (GObject *object)
++void
++polkit_backend_common_js_authority_finalize (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   guint n;
+@@ -405,7 +273,7 @@ polkit_backend_js_authority_finalize (GObject *object)
+     {
+       GFileMonitor *monitor = authority->priv->dir_monitors[n];
+       g_signal_handlers_disconnect_by_func (monitor,
+-                                            G_CALLBACK (on_dir_monitor_changed),
++                                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                                             authority);
+       g_object_unref (monitor);
+     }
+@@ -417,11 +285,11 @@ polkit_backend_js_authority_finalize (GObject *object)
+   G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
+ }
+ 
+-static void
+-polkit_backend_js_authority_set_property (GObject      *object,
+-                                          guint         property_id,
+-                                          const GValue *value,
+-                                          GParamSpec   *pspec)
++void
++polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                 guint         property_id,
++                                                 const GValue *value,
++                                                 GParamSpec   *pspec)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -438,55 +306,10 @@ polkit_backend_js_authority_set_property (GObject      *object,
+     }
+ }
+ 
+-static const gchar *
+-polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
+-{
+-  return "js";
+-}
+-
+-static const gchar *
+-polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
+-{
+-  return PACKAGE_VERSION;
+-}
+-
+-static PolkitAuthorityFeatures
+-polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
+-{
+-  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
+-}
+-
+ static void
+ polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
+ {
+-  GObjectClass *gobject_class;
+-  PolkitBackendAuthorityClass *authority_class;
+-  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
+-
+-
+-  gobject_class = G_OBJECT_CLASS (klass);
+-  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
+-  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
+-  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
+-
+-  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
+-  authority_class->get_name                             = polkit_backend_js_authority_get_name;
+-  authority_class->get_version                          = polkit_backend_js_authority_get_version;
+-  authority_class->get_features                         = polkit_backend_js_authority_get_features;
+-
+-  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
+-  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
+-  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
+-
+-  g_object_class_install_property (gobject_class,
+-                                   PROP_RULES_DIRS,
+-                                   g_param_spec_boxed ("rules-dirs",
+-                                                       NULL,
+-                                                       NULL,
+-                                                       G_TYPE_STRV,
+-                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+-
+-
++  polkit_backend_common_js_authority_class_init_common (klass);
+   g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
+ }
+ 
+@@ -689,15 +512,15 @@ push_action_and_details (duk_context               *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *
+-polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
+-                                                       PolkitSubject                     *caller,
+-                                                       PolkitSubject                     *subject,
+-                                                       PolkitIdentity                    *user_for_subject,
+-                                                       gboolean                           subject_is_local,
+-                                                       gboolean                           subject_is_active,
+-                                                       const gchar                       *action_id,
+-                                                       PolkitDetails                     *details)
++GList *
++polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                              PolkitSubject                     *caller,
++                                                              PolkitSubject                     *subject,
++                                                              PolkitIdentity                    *user_for_subject,
++                                                              gboolean                           subject_is_local,
++                                                              gboolean                           subject_is_active,
++                                                              const gchar                       *action_id,
++                                                              PolkitDetails                     *details)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   GList *ret = NULL;
+@@ -777,16 +600,16 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static PolkitImplicitAuthorization
+-polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
+-                                                      PolkitSubject                     *caller,
+-                                                      PolkitSubject                     *subject,
+-                                                      PolkitIdentity                    *user_for_subject,
+-                                                      gboolean                           subject_is_local,
+-                                                      gboolean                           subject_is_active,
+-                                                      const gchar                       *action_id,
+-                                                      PolkitDetails                     *details,
+-                                                      PolkitImplicitAuthorization        implicit)
++PolkitImplicitAuthorization
++polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                             PolkitSubject                     *caller,
++                                                             PolkitSubject                     *subject,
++                                                             PolkitIdentity                    *user_for_subject,
++                                                             gboolean                           subject_is_local,
++                                                             gboolean                           subject_is_active,
++                                                             const gchar                       *action_id,
++                                                             PolkitDetails                     *details,
++                                                             PolkitImplicitAuthorization        implicit)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   PolkitImplicitAuthorization ret = implicit;
+@@ -864,65 +687,6 @@ js_polkit_log (duk_context *cx)
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static const gchar *
+-get_signal_name (gint signal_number)
+-{
+-  switch (signal_number)
+-    {
+-#define _HANDLE_SIG(sig) case sig: return #sig;
+-    _HANDLE_SIG (SIGHUP);
+-    _HANDLE_SIG (SIGINT);
+-    _HANDLE_SIG (SIGQUIT);
+-    _HANDLE_SIG (SIGILL);
+-    _HANDLE_SIG (SIGABRT);
+-    _HANDLE_SIG (SIGFPE);
+-    _HANDLE_SIG (SIGKILL);
+-    _HANDLE_SIG (SIGSEGV);
+-    _HANDLE_SIG (SIGPIPE);
+-    _HANDLE_SIG (SIGALRM);
+-    _HANDLE_SIG (SIGTERM);
+-    _HANDLE_SIG (SIGUSR1);
+-    _HANDLE_SIG (SIGUSR2);
+-    _HANDLE_SIG (SIGCHLD);
+-    _HANDLE_SIG (SIGCONT);
+-    _HANDLE_SIG (SIGSTOP);
+-    _HANDLE_SIG (SIGTSTP);
+-    _HANDLE_SIG (SIGTTIN);
+-    _HANDLE_SIG (SIGTTOU);
+-    _HANDLE_SIG (SIGBUS);
+-#ifdef SIGPOLL
+-    _HANDLE_SIG (SIGPOLL);
+-#endif
+-    _HANDLE_SIG (SIGPROF);
+-    _HANDLE_SIG (SIGSYS);
+-    _HANDLE_SIG (SIGTRAP);
+-    _HANDLE_SIG (SIGURG);
+-    _HANDLE_SIG (SIGVTALRM);
+-    _HANDLE_SIG (SIGXCPU);
+-    _HANDLE_SIG (SIGXFSZ);
+-#undef _HANDLE_SIG
+-    default:
+-      break;
+-    }
+-  return "UNKNOWN_SIGNAL";
+-}
+-
+-typedef struct
+-{
+-  GMainLoop *loop;
+-  GAsyncResult *res;
+-} SpawnData;
+-
+-static void
+-spawn_cb (GObject       *source_object,
+-          GAsyncResult  *res,
+-          gpointer       user_data)
+-{
+-  SpawnData *data = (SpawnData *)user_data;
+-  data->res = (GAsyncResult*)g_object_ref (res);
+-  g_main_loop_quit (data->loop);
+-}
+-
+ static duk_ret_t
+ js_polkit_spawn (duk_context *cx)
+ {
+@@ -962,21 +726,21 @@ js_polkit_spawn (duk_context *cx)
+   g_main_context_push_thread_default (context);
+ 
+   data.loop = loop;
+-  utils_spawn ((const gchar *const *) argv,
+-               10, /* timeout_seconds */
+-               NULL, /* cancellable */
+-               spawn_cb,
+-               &data);
++  polkit_backend_common_spawn ((const gchar *const *) argv,
++                               10, /* timeout_seconds */
++                               NULL, /* cancellable */
++                               polkit_backend_common_spawn_cb,
++                               &data);
+ 
+   g_main_loop_run (loop);
+ 
+   g_main_context_pop_thread_default (context);
+ 
+-  if (!utils_spawn_finish (data.res,
+-                           &exit_status,
+-                           &standard_output,
+-                           &standard_error,
+-                           &error))
++  if (!polkit_backend_common_spawn_finish (data.res,
++                                           &exit_status,
++                                           &standard_output,
++                                           &standard_error,
++                                           &error))
+     {
+       err_str = g_strdup_printf ("Error spawning helper: %s (%s, %d)",
+                                  error->message, g_quark_to_string (error->domain), error->code);
+@@ -998,7 +762,7 @@ js_polkit_spawn (duk_context *cx)
+         {
+           g_string_append_printf (gstr,
+                                   "Helper was signaled with signal %s (%d)",
+-                                  get_signal_name (WTERMSIG (exit_status)),
++                                  polkit_backend_common_get_signal_name (WTERMSIG (exit_status)),
+                                   WTERMSIG (exit_status));
+         }
+       g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
+@@ -1052,377 +816,3 @@ js_polkit_user_is_in_netgroup (duk_context *cx)
+ }
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+-
+-typedef struct
+-{
+-  GSimpleAsyncResult *simple; /* borrowed reference */
+-  GMainContext *main_context; /* may be NULL */
+-
+-  GCancellable *cancellable;  /* may be NULL */
+-  gulong cancellable_handler_id;
+-
+-  GPid child_pid;
+-  gint child_stdout_fd;
+-  gint child_stderr_fd;
+-
+-  GIOChannel *child_stdout_channel;
+-  GIOChannel *child_stderr_channel;
+-
+-  GSource *child_watch_source;
+-  GSource *child_stdout_source;
+-  GSource *child_stderr_source;
+-
+-  guint timeout_seconds;
+-  gboolean timed_out;
+-  GSource *timeout_source;
+-
+-  GString *child_stdout;
+-  GString *child_stderr;
+-
+-  gint exit_status;
+-} UtilsSpawnData;
+-
+-static void
+-utils_child_watch_from_release_cb (GPid     pid,
+-                                   gint     status,
+-                                   gpointer user_data)
+-{
+-}
+-
+-static void
+-utils_spawn_data_free (UtilsSpawnData *data)
+-{
+-  if (data->timeout_source != NULL)
+-    {
+-      g_source_destroy (data->timeout_source);
+-      data->timeout_source = NULL;
+-    }
+-
+-  /* Nuke the child, if necessary */
+-  if (data->child_watch_source != NULL)
+-    {
+-      g_source_destroy (data->child_watch_source);
+-      data->child_watch_source = NULL;
+-    }
+-
+-  if (data->child_pid != 0)
+-    {
+-      GSource *source;
+-      kill (data->child_pid, SIGTERM);
+-      /* OK, we need to reap for the child ourselves - we don't want
+-       * to use waitpid() because that might block the calling
+-       * thread (the child might handle SIGTERM and use several
+-       * seconds for cleanup/rollback).
+-       *
+-       * So we use GChildWatch instead.
+-       *
+-       * Avoid taking a references to ourselves. but note that we need
+-       * to pass the GSource so we can nuke it once handled.
+-       */
+-      source = g_child_watch_source_new (data->child_pid);
+-      g_source_set_callback (source,
+-                             (GSourceFunc) utils_child_watch_from_release_cb,
+-                             source,
+-                             (GDestroyNotify) g_source_destroy);
+-      g_source_attach (source, data->main_context);
+-      g_source_unref (source);
+-      data->child_pid = 0;
+-    }
+-
+-  if (data->child_stdout != NULL)
+-    {
+-      g_string_free (data->child_stdout, TRUE);
+-      data->child_stdout = NULL;
+-    }
+-
+-  if (data->child_stderr != NULL)
+-    {
+-      g_string_free (data->child_stderr, TRUE);
+-      data->child_stderr = NULL;
+-    }
+-
+-  if (data->child_stdout_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stdout_channel);
+-      data->child_stdout_channel = NULL;
+-    }
+-  if (data->child_stderr_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stderr_channel);
+-      data->child_stderr_channel = NULL;
+-    }
+-
+-  if (data->child_stdout_source != NULL)
+-    {
+-      g_source_destroy (data->child_stdout_source);
+-      data->child_stdout_source = NULL;
+-    }
+-  if (data->child_stderr_source != NULL)
+-    {
+-      g_source_destroy (data->child_stderr_source);
+-      data->child_stderr_source = NULL;
+-    }
+-
+-  if (data->child_stdout_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stdout_fd) == 0);
+-      data->child_stdout_fd = -1;
+-    }
+-  if (data->child_stderr_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stderr_fd) == 0);
+-      data->child_stderr_fd = -1;
+-    }
+-
+-  if (data->cancellable_handler_id > 0)
+-    {
+-      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
+-      data->cancellable_handler_id = 0;
+-    }
+-
+-  if (data->main_context != NULL)
+-    g_main_context_unref (data->main_context);
+-
+-  if (data->cancellable != NULL)
+-    g_object_unref (data->cancellable);
+-
+-  g_slice_free (UtilsSpawnData, data);
+-}
+-
+-/* called in the thread where @cancellable was cancelled */
+-static void
+-utils_on_cancelled (GCancellable *cancellable,
+-                    gpointer      user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  GError *error;
+-
+-  error = NULL;
+-  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
+-  g_simple_async_result_take_error (data->simple, error);
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_read_child_stderr (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stderr, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static gboolean
+-utils_read_child_stdout (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stdout, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static void
+-utils_child_watch_cb (GPid     pid,
+-                      gint     status,
+-                      gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar *buf;
+-  gsize buf_size;
+-
+-  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stdout, buf, buf_size);
+-      g_free (buf);
+-    }
+-  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stderr, buf, buf_size);
+-      g_free (buf);
+-    }
+-
+-  data->exit_status = status;
+-
+-  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
+-  data->child_pid = 0;
+-  data->child_watch_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_timeout_cb (gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-
+-  data->timed_out = TRUE;
+-
+-  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
+-  data->timeout_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-
+-  return FALSE; /* remove source */
+-}
+-
+-static void
+-utils_spawn (const gchar *const  *argv,
+-             guint                timeout_seconds,
+-             GCancellable        *cancellable,
+-             GAsyncReadyCallback  callback,
+-             gpointer             user_data)
+-{
+-  UtilsSpawnData *data;
+-  GError *error;
+-
+-  data = g_slice_new0 (UtilsSpawnData);
+-  data->timeout_seconds = timeout_seconds;
+-  data->simple = g_simple_async_result_new (NULL,
+-                                            callback,
+-                                            user_data,
+-                                            (gpointer*)utils_spawn);
+-  data->main_context = g_main_context_get_thread_default ();
+-  if (data->main_context != NULL)
+-    g_main_context_ref (data->main_context);
+-
+-  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+-
+-  data->child_stdout = g_string_new (NULL);
+-  data->child_stderr = g_string_new (NULL);
+-  data->child_stdout_fd = -1;
+-  data->child_stderr_fd = -1;
+-
+-  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
+-  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
+-
+-  error = NULL;
+-  if (data->cancellable != NULL)
+-    {
+-      /* could already be cancelled */
+-      error = NULL;
+-      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+-        {
+-          g_simple_async_result_take_error (data->simple, error);
+-          g_simple_async_result_complete_in_idle (data->simple);
+-          g_object_unref (data->simple);
+-          goto out;
+-        }
+-
+-      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
+-                                                            G_CALLBACK (utils_on_cancelled),
+-                                                            data,
+-                                                            NULL);
+-    }
+-
+-  error = NULL;
+-  if (!g_spawn_async_with_pipes (NULL, /* working directory */
+-                                 (gchar **) argv,
+-                                 NULL, /* envp */
+-                                 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+-                                 NULL, /* child_setup */
+-                                 NULL, /* child_setup's user_data */
+-                                 &(data->child_pid),
+-                                 NULL, /* gint *stdin_fd */
+-                                 &(data->child_stdout_fd),
+-                                 &(data->child_stderr_fd),
+-                                 &error))
+-    {
+-      g_prefix_error (&error, "Error spawning: ");
+-      g_simple_async_result_take_error (data->simple, error);
+-      g_simple_async_result_complete_in_idle (data->simple);
+-      g_object_unref (data->simple);
+-      goto out;
+-    }
+-
+-  if (timeout_seconds > 0)
+-    {
+-      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
+-      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
+-      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
+-      g_source_attach (data->timeout_source, data->main_context);
+-      g_source_unref (data->timeout_source);
+-    }
+-
+-  data->child_watch_source = g_child_watch_source_new (data->child_pid);
+-  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
+-  g_source_attach (data->child_watch_source, data->main_context);
+-  g_source_unref (data->child_watch_source);
+-
+-  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
+-  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
+-  g_source_attach (data->child_stdout_source, data->main_context);
+-  g_source_unref (data->child_stdout_source);
+-
+-  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
+-  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
+-  g_source_attach (data->child_stderr_source, data->main_context);
+-  g_source_unref (data->child_stderr_source);
+-
+- out:
+-  ;
+-}
+-
+-gboolean
+-utils_spawn_finish (GAsyncResult   *res,
+-                    gint           *out_exit_status,
+-                    gchar         **out_standard_output,
+-                    gchar         **out_standard_error,
+-                    GError        **error)
+-{
+-  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+-  UtilsSpawnData *data;
+-  gboolean ret = FALSE;
+-
+-  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+-  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+-
+-  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
+-
+-  if (g_simple_async_result_propagate_error (simple, error))
+-    goto out;
+-
+-  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+-
+-  if (data->timed_out)
+-    {
+-      g_set_error (error,
+-                   G_IO_ERROR,
+-                   G_IO_ERROR_TIMED_OUT,
+-                   "Timed out after %d seconds",
+-                   data->timeout_seconds);
+-      goto out;
+-    }
+-
+-  if (out_exit_status != NULL)
+-    *out_exit_status = data->exit_status;
+-
+-  if (out_standard_output != NULL)
+-    *out_standard_output = g_strdup (data->child_stdout->str);
+-
+-  if (out_standard_error != NULL)
+-    *out_standard_error = g_strdup (data->child_stderr->str);
+-
+-  ret = TRUE;
+-
+- out:
+-  return ret;
+-}
+diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
+index ca17108..e28091d 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.cpp
++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
+@@ -19,29 +19,7 @@
+  * Author: David Zeuthen <davidz@redhat.com>
+  */
+ 
+-#include "config.h"
+-#include <sys/wait.h>
+-#include <errno.h>
+-#include <pwd.h>
+-#include <grp.h>
+-#ifdef HAVE_NETGROUP_H
+-#include <netgroup.h>
+-#else
+-#include <netdb.h>
+-#endif
+-#include <string.h>
+-#include <glib/gstdio.h>
+-#include <locale.h>
+-#include <glib/gi18n-lib.h>
+-
+-#include <polkit/polkit.h>
+-#include "polkitbackendjsauthority.h"
+-
+-#include <polkit/polkitprivate.h>
+-
+-#ifdef HAVE_LIBSYSTEMD
+-#include <systemd/sd-login.h>
+-#endif /* HAVE_LIBSYSTEMD */
++#include "polkitbackendcommon.h"
+ 
+ #include <js/CompilationAndEvaluation.h>
+ #include <js/ContextOptions.h>
+@@ -52,6 +30,7 @@
+ #include <js/Array.h>
+ #include <jsapi.h>
+ 
++/* Built source and not too big to worry about deduplication */
+ #include "initjs.h" /* init.js */
+ 
+ #ifdef JSGC_USE_EXACT_ROOTING
+@@ -67,10 +46,9 @@
+  * @short_description: JS Authority
+  * @stability: Unstable
+  *
+- * An implementation of #PolkitBackendAuthority that reads and
+- * evalates Javascript files and supports interaction with
+- * authentication agents (virtue of being based on
+- * #PolkitBackendInteractiveAuthority).
++ * An (SpiderMonkey-based) implementation of #PolkitBackendAuthority that reads
++ * and evaluates Javascript files and supports interaction with authentication
++ * agents (virtue of being based on #PolkitBackendInteractiveAuthority).
+  */
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -100,57 +78,11 @@ static bool execute_script_with_runaway_killer (PolkitBackendJsAuthority *author
+                                     JS::HandleScript                 script,
+                                     JS::MutableHandleValue           rval);
+ 
+-static void utils_spawn (const gchar *const  *argv,
+-                         guint                timeout_seconds,
+-                         GCancellable        *cancellable,
+-                         GAsyncReadyCallback  callback,
+-                         gpointer             user_data);
+-
+-gboolean utils_spawn_finish (GAsyncResult   *res,
+-                             gint           *out_exit_status,
+-                             gchar         **out_standard_output,
+-                             gchar         **out_standard_error,
+-                             GError        **error);
+-
+-static void on_dir_monitor_changed (GFileMonitor     *monitor,
+-                                    GFile            *file,
+-                                    GFile            *other_file,
+-                                    GFileMonitorEvent event_type,
+-                                    gpointer          user_data);
+-
+-/* ---------------------------------------------------------------------------------------------------- */
+-
+-enum
+-{
+-  PROP_0,
+-  PROP_RULES_DIRS,
+-};
+-
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ static gpointer runaway_killer_thread_func (gpointer user_data);
+ static void runaway_killer_terminate (PolkitBackendJsAuthority *authority);
+ 
+-static GList *polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *authority,
+-                                                                     PolkitSubject                     *caller,
+-                                                                     PolkitSubject                     *subject,
+-                                                                     PolkitIdentity                    *user_for_subject,
+-                                                                     gboolean                           subject_is_local,
+-                                                                     gboolean                           subject_is_active,
+-                                                                     const gchar                       *action_id,
+-                                                                     PolkitDetails                     *details);
+-
+-static PolkitImplicitAuthorization polkit_backend_js_authority_check_authorization_sync (
+-                                                          PolkitBackendInteractiveAuthority *authority,
+-                                                          PolkitSubject                     *caller,
+-                                                          PolkitSubject                     *subject,
+-                                                          PolkitIdentity                    *user_for_subject,
+-                                                          gboolean                           subject_is_local,
+-                                                          gboolean                           subject_is_active,
+-                                                          const gchar                       *action_id,
+-                                                          PolkitDetails                     *details,
+-                                                          PolkitImplicitAuthorization        implicit);
+-
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+@@ -229,33 +161,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+                                                  PolkitBackendJsAuthorityPrivate);
+ }
+ 
+-static gint
+-rules_file_name_cmp (const gchar *a,
+-                     const gchar *b)
+-{
+-  gint ret;
+-  const gchar *a_base;
+-  const gchar *b_base;
+-
+-  a_base = strrchr (a, '/');
+-  b_base = strrchr (b, '/');
+-
+-  g_assert (a_base != NULL);
+-  g_assert (b_base != NULL);
+-  a_base += 1;
+-  b_base += 1;
+-
+-  ret = g_strcmp0 (a_base, b_base);
+-  if (ret == 0)
+-    {
+-      /* /etc wins over /usr */
+-      ret = g_strcmp0 (a, b);
+-      g_assert (ret != 0);
+-    }
+-
+-  return ret;
+-}
+-
+ /* authority->priv->cx must be within a request */
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+@@ -299,7 +204,7 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+         }
+     }
+ 
+-  files = g_list_sort (files, (GCompareFunc) rules_file_name_cmp);
++  files = g_list_sort (files, (GCompareFunc) polkit_backend_common_rules_file_name_cmp);
+ 
+   for (l = files; l != NULL; l = l->next)
+     {
+@@ -365,8 +270,8 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   g_list_free_full (files, g_free);
+ }
+ 
+-static void
+-reload_scripts (PolkitBackendJsAuthority *authority)
++void
++polkit_backend_common_reload_scripts (PolkitBackendJsAuthority *authority)
+ {
+   JS::RootedValueArray<1> args(authority->priv->cx);
+   JS::RootedValue rval(authority->priv->cx);
+@@ -395,42 +300,6 @@ reload_scripts (PolkitBackendJsAuthority *authority)
+   g_signal_emit_by_name (authority, "changed");
+ }
+ 
+-static void
+-on_dir_monitor_changed (GFileMonitor     *monitor,
+-                        GFile            *file,
+-                        GFile            *other_file,
+-                        GFileMonitorEvent event_type,
+-                        gpointer          user_data)
+-{
+-  PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (user_data);
+-
+-  /* TODO: maybe rate-limit so storms of events are collapsed into one with a 500ms resolution?
+-   *       Because when editing a file with emacs we get 4-8 events..
+-   */
+-
+-  if (file != NULL)
+-    {
+-      gchar *name;
+-
+-      name = g_file_get_basename (file);
+-
+-      /* g_print ("event_type=%d file=%p name=%s\n", event_type, file, name); */
+-      if (!g_str_has_prefix (name, ".") &&
+-          !g_str_has_prefix (name, "#") &&
+-          g_str_has_suffix (name, ".rules") &&
+-          (event_type == G_FILE_MONITOR_EVENT_CREATED ||
+-           event_type == G_FILE_MONITOR_EVENT_DELETED ||
+-           event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Reloading rules");
+-          reload_scripts (authority);
+-        }
+-      g_free (name);
+-    }
+-}
+-
+-
+ static void
+ setup_file_monitors (PolkitBackendJsAuthority *authority)
+ {
+@@ -462,7 +331,7 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+         {
+           g_signal_connect (monitor,
+                             "changed",
+-                            G_CALLBACK (on_dir_monitor_changed),
++                            G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                             authority);
+           g_ptr_array_add (p, monitor);
+         }
+@@ -471,8 +340,8 @@ setup_file_monitors (PolkitBackendJsAuthority *authority)
+   authority->priv->dir_monitors = (GFileMonitor**) g_ptr_array_free (p, FALSE);
+ }
+ 
+-static void
+-polkit_backend_js_authority_constructed (GObject *object)
++void
++polkit_backend_common_js_authority_constructed (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -561,8 +430,8 @@ polkit_backend_js_authority_constructed (GObject *object)
+   g_assert_not_reached ();
+ }
+ 
+-static void
+-polkit_backend_js_authority_finalize (GObject *object)
++void
++polkit_backend_common_js_authority_finalize (GObject *object)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   guint n;
+@@ -577,7 +446,7 @@ polkit_backend_js_authority_finalize (GObject *object)
+     {
+       GFileMonitor *monitor = authority->priv->dir_monitors[n];
+       g_signal_handlers_disconnect_by_func (monitor,
+-                                            (gpointer*)G_CALLBACK (on_dir_monitor_changed),
++                                            (gpointer*)G_CALLBACK (polkit_backend_common_on_dir_monitor_changed),
+                                             authority);
+       g_object_unref (monitor);
+     }
+@@ -594,11 +463,11 @@ polkit_backend_js_authority_finalize (GObject *object)
+   G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object);
+ }
+ 
+-static void
+-polkit_backend_js_authority_set_property (GObject      *object,
+-                                          guint         property_id,
+-                                          const GValue *value,
+-                                          GParamSpec   *pspec)
++void
++polkit_backend_common_js_authority_set_property (GObject      *object,
++                                                 guint         property_id,
++                                                 const GValue *value,
++                                                 GParamSpec   *pspec)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+ 
+@@ -615,57 +484,12 @@ polkit_backend_js_authority_set_property (GObject      *object,
+     }
+ }
+ 
+-static const gchar *
+-polkit_backend_js_authority_get_name (PolkitBackendAuthority *authority)
+-{
+-  return "js";
+-}
+-
+-static const gchar *
+-polkit_backend_js_authority_get_version (PolkitBackendAuthority *authority)
+-{
+-  return PACKAGE_VERSION;
+-}
+-
+-static PolkitAuthorityFeatures
+-polkit_backend_js_authority_get_features (PolkitBackendAuthority *authority)
+-{
+-  return POLKIT_AUTHORITY_FEATURES_TEMPORARY_AUTHORIZATION;
+-}
+-
+ static void
+ polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass)
+ {
+-  GObjectClass *gobject_class;
+-  PolkitBackendAuthorityClass *authority_class;
+-  PolkitBackendInteractiveAuthorityClass *interactive_authority_class;
+-
+-
+-  gobject_class = G_OBJECT_CLASS (klass);
+-  gobject_class->finalize                               = polkit_backend_js_authority_finalize;
+-  gobject_class->set_property                           = polkit_backend_js_authority_set_property;
+-  gobject_class->constructed                            = polkit_backend_js_authority_constructed;
+-
+-  authority_class = POLKIT_BACKEND_AUTHORITY_CLASS (klass);
+-  authority_class->get_name                             = polkit_backend_js_authority_get_name;
+-  authority_class->get_version                          = polkit_backend_js_authority_get_version;
+-  authority_class->get_features                         = polkit_backend_js_authority_get_features;
+-
+-  interactive_authority_class = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_CLASS (klass);
+-  interactive_authority_class->get_admin_identities     = polkit_backend_js_authority_get_admin_auth_identities;
+-  interactive_authority_class->check_authorization_sync = polkit_backend_js_authority_check_authorization_sync;
+-
+-  g_object_class_install_property (gobject_class,
+-                                   PROP_RULES_DIRS,
+-                                   g_param_spec_boxed ("rules-dirs",
+-                                                       NULL,
+-                                                       NULL,
+-                                                       G_TYPE_STRV,
+-                                                       GParamFlags(G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE)));
+-
++  polkit_backend_common_js_authority_class_init_common (klass);
+ 
+   g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate));
+-
+   JS_Init ();
+ }
+ 
+@@ -1099,15 +923,15 @@ call_js_function_with_runaway_killer (PolkitBackendJsAuthority *authority,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static GList *
+-polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
+-                                                       PolkitSubject                     *caller,
+-                                                       PolkitSubject                     *subject,
+-                                                       PolkitIdentity                    *user_for_subject,
+-                                                       gboolean                           subject_is_local,
+-                                                       gboolean                           subject_is_active,
+-                                                       const gchar                       *action_id,
+-                                                       PolkitDetails                     *details)
++GList *
++polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInteractiveAuthority *_authority,
++                                                              PolkitSubject                     *caller,
++                                                              PolkitSubject                     *subject,
++                                                              PolkitIdentity                    *user_for_subject,
++                                                              gboolean                           subject_is_local,
++                                                              gboolean                           subject_is_active,
++                                                              const gchar                       *action_id,
++                                                              PolkitDetails                     *details)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   GList *ret = NULL;
+@@ -1202,16 +1026,16 @@ polkit_backend_js_authority_get_admin_auth_identities (PolkitBackendInteractiveA
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static PolkitImplicitAuthorization
+-polkit_backend_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
+-                                                      PolkitSubject                     *caller,
+-                                                      PolkitSubject                     *subject,
+-                                                      PolkitIdentity                    *user_for_subject,
+-                                                      gboolean                           subject_is_local,
+-                                                      gboolean                           subject_is_active,
+-                                                      const gchar                       *action_id,
+-                                                      PolkitDetails                     *details,
+-                                                      PolkitImplicitAuthorization        implicit)
++PolkitImplicitAuthorization
++polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendInteractiveAuthority *_authority,
++                                                             PolkitSubject                     *caller,
++                                                             PolkitSubject                     *subject,
++                                                             PolkitIdentity                    *user_for_subject,
++                                                             gboolean                           subject_is_local,
++                                                             gboolean                           subject_is_active,
++                                                             const gchar                       *action_id,
++                                                             PolkitDetails                     *details,
++                                                             PolkitImplicitAuthorization        implicit)
+ {
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (_authority);
+   PolkitImplicitAuthorization ret = implicit;
+@@ -1324,65 +1148,6 @@ js_polkit_log (JSContext  *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-static const gchar *
+-get_signal_name (gint signal_number)
+-{
+-  switch (signal_number)
+-    {
+-#define _HANDLE_SIG(sig) case sig: return #sig;
+-    _HANDLE_SIG (SIGHUP);
+-    _HANDLE_SIG (SIGINT);
+-    _HANDLE_SIG (SIGQUIT);
+-    _HANDLE_SIG (SIGILL);
+-    _HANDLE_SIG (SIGABRT);
+-    _HANDLE_SIG (SIGFPE);
+-    _HANDLE_SIG (SIGKILL);
+-    _HANDLE_SIG (SIGSEGV);
+-    _HANDLE_SIG (SIGPIPE);
+-    _HANDLE_SIG (SIGALRM);
+-    _HANDLE_SIG (SIGTERM);
+-    _HANDLE_SIG (SIGUSR1);
+-    _HANDLE_SIG (SIGUSR2);
+-    _HANDLE_SIG (SIGCHLD);
+-    _HANDLE_SIG (SIGCONT);
+-    _HANDLE_SIG (SIGSTOP);
+-    _HANDLE_SIG (SIGTSTP);
+-    _HANDLE_SIG (SIGTTIN);
+-    _HANDLE_SIG (SIGTTOU);
+-    _HANDLE_SIG (SIGBUS);
+-#ifdef SIGPOLL
+-    _HANDLE_SIG (SIGPOLL);
+-#endif
+-    _HANDLE_SIG (SIGPROF);
+-    _HANDLE_SIG (SIGSYS);
+-    _HANDLE_SIG (SIGTRAP);
+-    _HANDLE_SIG (SIGURG);
+-    _HANDLE_SIG (SIGVTALRM);
+-    _HANDLE_SIG (SIGXCPU);
+-    _HANDLE_SIG (SIGXFSZ);
+-#undef _HANDLE_SIG
+-    default:
+-      break;
+-    }
+-  return "UNKNOWN_SIGNAL";
+-}
+-
+-typedef struct
+-{
+-  GMainLoop *loop;
+-  GAsyncResult *res;
+-} SpawnData;
+-
+-static void
+-spawn_cb (GObject       *source_object,
+-          GAsyncResult  *res,
+-          gpointer       user_data)
+-{
+-  SpawnData *data = (SpawnData *)user_data;
+-  data->res = (GAsyncResult*)g_object_ref (res);
+-  g_main_loop_quit (data->loop);
+-}
+-
+ static bool
+ js_polkit_spawn (JSContext  *cx,
+                  unsigned    js_argc,
+@@ -1440,21 +1205,21 @@ js_polkit_spawn (JSContext  *cx,
+   g_main_context_push_thread_default (context);
+ 
+   data.loop = loop;
+-  utils_spawn ((const gchar *const *) argv,
+-               10, /* timeout_seconds */
+-               NULL, /* cancellable */
+-               spawn_cb,
+-               &data);
++  polkit_backend_common_spawn ((const gchar *const *) argv,
++                               10, /* timeout_seconds */
++                               NULL, /* cancellable */
++                               polkit_backend_common_spawn_cb,
++                               &data);
+ 
+   g_main_loop_run (loop);
+ 
+   g_main_context_pop_thread_default (context);
+ 
+-  if (!utils_spawn_finish (data.res,
+-                           &exit_status,
+-                           &standard_output,
+-                           &standard_error,
+-                           &error))
++  if (!polkit_backend_common_spawn_finish (data.res,
++                                           &exit_status,
++                                           &standard_output,
++                                           &standard_error,
++                                           &error))
+     {
+       JS_ReportErrorUTF8 (cx,
+                       "Error spawning helper: %s (%s, %d)",
+@@ -1477,7 +1242,7 @@ js_polkit_spawn (JSContext  *cx,
+         {
+           g_string_append_printf (gstr,
+                                   "Helper was signaled with signal %s (%d)",
+-                                  get_signal_name (WTERMSIG (exit_status)),
++                                  polkit_backend_common_get_signal_name (WTERMSIG (exit_status)),
+                                   WTERMSIG (exit_status));
+         }
+       g_string_append_printf (gstr, ", stdout=`%s', stderr=`%s'",
+@@ -1542,381 +1307,5 @@ js_polkit_user_is_in_netgroup (JSContext  *cx,
+   return ret;
+ }
+ 
+-
+-
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+-typedef struct
+-{
+-  GSimpleAsyncResult *simple; /* borrowed reference */
+-  GMainContext *main_context; /* may be NULL */
+-
+-  GCancellable *cancellable;  /* may be NULL */
+-  gulong cancellable_handler_id;
+-
+-  GPid child_pid;
+-  gint child_stdout_fd;
+-  gint child_stderr_fd;
+-
+-  GIOChannel *child_stdout_channel;
+-  GIOChannel *child_stderr_channel;
+-
+-  GSource *child_watch_source;
+-  GSource *child_stdout_source;
+-  GSource *child_stderr_source;
+-
+-  guint timeout_seconds;
+-  gboolean timed_out;
+-  GSource *timeout_source;
+-
+-  GString *child_stdout;
+-  GString *child_stderr;
+-
+-  gint exit_status;
+-} UtilsSpawnData;
+-
+-static void
+-utils_child_watch_from_release_cb (GPid     pid,
+-                                   gint     status,
+-                                   gpointer user_data)
+-{
+-}
+-
+-static void
+-utils_spawn_data_free (UtilsSpawnData *data)
+-{
+-  if (data->timeout_source != NULL)
+-    {
+-      g_source_destroy (data->timeout_source);
+-      data->timeout_source = NULL;
+-    }
+-
+-  /* Nuke the child, if necessary */
+-  if (data->child_watch_source != NULL)
+-    {
+-      g_source_destroy (data->child_watch_source);
+-      data->child_watch_source = NULL;
+-    }
+-
+-  if (data->child_pid != 0)
+-    {
+-      GSource *source;
+-      kill (data->child_pid, SIGTERM);
+-      /* OK, we need to reap for the child ourselves - we don't want
+-       * to use waitpid() because that might block the calling
+-       * thread (the child might handle SIGTERM and use several
+-       * seconds for cleanup/rollback).
+-       *
+-       * So we use GChildWatch instead.
+-       *
+-       * Avoid taking a references to ourselves. but note that we need
+-       * to pass the GSource so we can nuke it once handled.
+-       */
+-      source = g_child_watch_source_new (data->child_pid);
+-      g_source_set_callback (source,
+-                             (GSourceFunc) utils_child_watch_from_release_cb,
+-                             source,
+-                             (GDestroyNotify) g_source_destroy);
+-      /* attach source to the global default main context */
+-      g_source_attach (source, NULL);
+-      g_source_unref (source);
+-      data->child_pid = 0;
+-    }
+-
+-  if (data->child_stdout != NULL)
+-    {
+-      g_string_free (data->child_stdout, TRUE);
+-      data->child_stdout = NULL;
+-    }
+-
+-  if (data->child_stderr != NULL)
+-    {
+-      g_string_free (data->child_stderr, TRUE);
+-      data->child_stderr = NULL;
+-    }
+-
+-  if (data->child_stdout_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stdout_channel);
+-      data->child_stdout_channel = NULL;
+-    }
+-  if (data->child_stderr_channel != NULL)
+-    {
+-      g_io_channel_unref (data->child_stderr_channel);
+-      data->child_stderr_channel = NULL;
+-    }
+-
+-  if (data->child_stdout_source != NULL)
+-    {
+-      g_source_destroy (data->child_stdout_source);
+-      data->child_stdout_source = NULL;
+-    }
+-  if (data->child_stderr_source != NULL)
+-    {
+-      g_source_destroy (data->child_stderr_source);
+-      data->child_stderr_source = NULL;
+-    }
+-
+-  if (data->child_stdout_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stdout_fd) == 0);
+-      data->child_stdout_fd = -1;
+-    }
+-  if (data->child_stderr_fd != -1)
+-    {
+-      g_warn_if_fail (close (data->child_stderr_fd) == 0);
+-      data->child_stderr_fd = -1;
+-    }
+-
+-  if (data->cancellable_handler_id > 0)
+-    {
+-      g_cancellable_disconnect (data->cancellable, data->cancellable_handler_id);
+-      data->cancellable_handler_id = 0;
+-    }
+-
+-  if (data->main_context != NULL)
+-    g_main_context_unref (data->main_context);
+-
+-  if (data->cancellable != NULL)
+-    g_object_unref (data->cancellable);
+-
+-  g_slice_free (UtilsSpawnData, data);
+-}
+-
+-/* called in the thread where @cancellable was cancelled */
+-static void
+-utils_on_cancelled (GCancellable *cancellable,
+-                    gpointer      user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  GError *error;
+-
+-  error = NULL;
+-  g_warn_if_fail (g_cancellable_set_error_if_cancelled (cancellable, &error));
+-  g_simple_async_result_take_error (data->simple, error);
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_read_child_stderr (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stderr, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static gboolean
+-utils_read_child_stdout (GIOChannel *channel,
+-                         GIOCondition condition,
+-                         gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar buf[1024];
+-  gsize bytes_read;
+-
+-  g_io_channel_read_chars (channel, buf, sizeof buf, &bytes_read, NULL);
+-  g_string_append_len (data->child_stdout, buf, bytes_read);
+-  return TRUE;
+-}
+-
+-static void
+-utils_child_watch_cb (GPid     pid,
+-                      gint     status,
+-                      gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-  gchar *buf;
+-  gsize buf_size;
+-
+-  if (g_io_channel_read_to_end (data->child_stdout_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stdout, buf, buf_size);
+-      g_free (buf);
+-    }
+-  if (g_io_channel_read_to_end (data->child_stderr_channel, &buf, &buf_size, NULL) == G_IO_STATUS_NORMAL)
+-    {
+-      g_string_append_len (data->child_stderr, buf, buf_size);
+-      g_free (buf);
+-    }
+-
+-  data->exit_status = status;
+-
+-  /* ok, child watch is history, make sure we don't free it in spawn_data_free() */
+-  data->child_pid = 0;
+-  data->child_watch_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-}
+-
+-static gboolean
+-utils_timeout_cb (gpointer user_data)
+-{
+-  UtilsSpawnData *data = (UtilsSpawnData *)user_data;
+-
+-  data->timed_out = TRUE;
+-
+-  /* ok, timeout is history, make sure we don't free it in spawn_data_free() */
+-  data->timeout_source = NULL;
+-
+-  /* we're done */
+-  g_simple_async_result_complete_in_idle (data->simple);
+-  g_object_unref (data->simple);
+-
+-  return FALSE; /* remove source */
+-}
+-
+-static void
+-utils_spawn (const gchar *const  *argv,
+-             guint                timeout_seconds,
+-             GCancellable        *cancellable,
+-             GAsyncReadyCallback  callback,
+-             gpointer             user_data)
+-{
+-  UtilsSpawnData *data;
+-  GError *error;
+-
+-  data = g_slice_new0 (UtilsSpawnData);
+-  data->timeout_seconds = timeout_seconds;
+-  data->simple = g_simple_async_result_new (NULL,
+-                                            callback,
+-                                            user_data,
+-                                            (gpointer*)utils_spawn);
+-  data->main_context = g_main_context_get_thread_default ();
+-  if (data->main_context != NULL)
+-    g_main_context_ref (data->main_context);
+-
+-  data->cancellable = cancellable != NULL ? (GCancellable*)g_object_ref (cancellable) : NULL;
+-
+-  data->child_stdout = g_string_new (NULL);
+-  data->child_stderr = g_string_new (NULL);
+-  data->child_stdout_fd = -1;
+-  data->child_stderr_fd = -1;
+-
+-  /* the life-cycle of UtilsSpawnData is tied to its GSimpleAsyncResult */
+-  g_simple_async_result_set_op_res_gpointer (data->simple, data, (GDestroyNotify) utils_spawn_data_free);
+-
+-  error = NULL;
+-  if (data->cancellable != NULL)
+-    {
+-      /* could already be cancelled */
+-      error = NULL;
+-      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+-        {
+-          g_simple_async_result_take_error (data->simple, error);
+-          g_simple_async_result_complete_in_idle (data->simple);
+-          g_object_unref (data->simple);
+-          goto out;
+-        }
+-
+-      data->cancellable_handler_id = g_cancellable_connect (data->cancellable,
+-                                                            G_CALLBACK (utils_on_cancelled),
+-                                                            data,
+-                                                            NULL);
+-    }
+-
+-  error = NULL;
+-  if (!g_spawn_async_with_pipes (NULL, /* working directory */
+-                                 (gchar **) argv,
+-                                 NULL, /* envp */
+-                                 GSpawnFlags(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD),
+-                                 NULL, /* child_setup */
+-                                 NULL, /* child_setup's user_data */
+-                                 &(data->child_pid),
+-                                 NULL, /* gint *stdin_fd */
+-                                 &(data->child_stdout_fd),
+-                                 &(data->child_stderr_fd),
+-                                 &error))
+-    {
+-      g_prefix_error (&error, "Error spawning: ");
+-      g_simple_async_result_take_error (data->simple, error);
+-      g_simple_async_result_complete_in_idle (data->simple);
+-      g_object_unref (data->simple);
+-      goto out;
+-    }
+-
+-  if (timeout_seconds > 0)
+-    {
+-      data->timeout_source = g_timeout_source_new_seconds (timeout_seconds);
+-      g_source_set_priority (data->timeout_source, G_PRIORITY_DEFAULT);
+-      g_source_set_callback (data->timeout_source, utils_timeout_cb, data, NULL);
+-      g_source_attach (data->timeout_source, data->main_context);
+-      g_source_unref (data->timeout_source);
+-    }
+-
+-  data->child_watch_source = g_child_watch_source_new (data->child_pid);
+-  g_source_set_callback (data->child_watch_source, (GSourceFunc) utils_child_watch_cb, data, NULL);
+-  g_source_attach (data->child_watch_source, data->main_context);
+-  g_source_unref (data->child_watch_source);
+-
+-  data->child_stdout_channel = g_io_channel_unix_new (data->child_stdout_fd);
+-  g_io_channel_set_flags (data->child_stdout_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stdout_source = g_io_create_watch (data->child_stdout_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stdout_source, (GSourceFunc) utils_read_child_stdout, data, NULL);
+-  g_source_attach (data->child_stdout_source, data->main_context);
+-  g_source_unref (data->child_stdout_source);
+-
+-  data->child_stderr_channel = g_io_channel_unix_new (data->child_stderr_fd);
+-  g_io_channel_set_flags (data->child_stderr_channel, G_IO_FLAG_NONBLOCK, NULL);
+-  data->child_stderr_source = g_io_create_watch (data->child_stderr_channel, G_IO_IN);
+-  g_source_set_callback (data->child_stderr_source, (GSourceFunc) utils_read_child_stderr, data, NULL);
+-  g_source_attach (data->child_stderr_source, data->main_context);
+-  g_source_unref (data->child_stderr_source);
+-
+- out:
+-  ;
+-}
+-
+-gboolean
+-utils_spawn_finish (GAsyncResult   *res,
+-                    gint           *out_exit_status,
+-                    gchar         **out_standard_output,
+-                    gchar         **out_standard_error,
+-                    GError        **error)
+-{
+-  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+-  UtilsSpawnData *data;
+-  gboolean ret = FALSE;
+-
+-  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+-  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+-
+-  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == utils_spawn);
+-
+-  if (g_simple_async_result_propagate_error (simple, error))
+-    goto out;
+-
+-  data = (UtilsSpawnData*)g_simple_async_result_get_op_res_gpointer (simple);
+-
+-  if (data->timed_out)
+-    {
+-      g_set_error (error,
+-                   G_IO_ERROR,
+-                   G_IO_ERROR_TIMED_OUT,
+-                   "Timed out after %d seconds",
+-                   data->timeout_seconds);
+-      goto out;
+-    }
+-
+-  if (out_exit_status != NULL)
+-    *out_exit_status = data->exit_status;
+-
+-  if (out_standard_output != NULL)
+-    *out_standard_output = g_strdup (data->child_stdout->str);
+-
+-  if (out_standard_error != NULL)
+-    *out_standard_error = g_strdup (data->child_stderr->str);
+-
+-  ret = TRUE;
+-
+- out:
+-  return ret;
+-}
+-- 
+GitLab
+
+
+From 4858128107be9c3ab11828ee8f35c5e26efd36ce Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Tue, 14 Sep 2021 14:38:15 -0700
+Subject: [PATCH 15/16] Gitlab CI: add duktape pkgconfig dependency
+
+Make way for the CI to be able to build with duktape too
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ .gitlab-ci.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+GitLab
+
+
+From cd5d6da837fce95f8831a355dad88c83347c7337 Mon Sep 17 00:00:00 2001
+From: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+Date: Mon, 20 Sep 2021 17:17:26 -0700
+Subject: [PATCH 16/16] duktape: implement runaway scripts killer timeout
+
+This was missing on Duktape's JS backend proposal, now in. As
+discussed in
+https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/35 and
+verified by the commit author, Duktape has no interrupt injection
+mechanism (it has no thread-safe API entry whatsoever, even). Using
+DUK_USE_EXEC_TIMEOUT_CHECK is also not feasible, because:
+
+  i) It must be enabled at build time and shared object builds of the
+  lib on distros go with the default options, something we cannot
+  change/control
+
+  ii) That does not account for non-ECMAScript explicit execution
+  contexts, like regex execution, native C calls, etc.
+
+It has been agreed, on that thread, that pthread_cond_timedwait()-ing
+and having proper Duktape evaluation/execution calls take place in a
+separate thread, to be killed after the runaway script killer's
+accorded timeout value, a reasonable approach. We have considered
+using glib wrappers for direct pthread usage, but that way would make
+it impossible to issue
+pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, ...) and we want to
+be paranoid in that regard.
+
+On Duktape, we don't get to err from the JS context (to be captured by
+the offending script), but to be forcibly killed on timeout scenarios,
+leading to null returns, thus polkit negation, by definition. It's a
+reasonable design/compromise.
+
+A fatal error handler routine, for the Duktape context, has also been
+added, using the polkit_backend_authority_log() logging infra to
+better assist users on what went wrong.
+
+Finally, the script evaluation routine has been made to use
+duk_peval_lstring() (previously using _noresult variant), so to able
+to present the user with proper error messages, should any occur.
+
+The original runaway script killer test has been adjusted to please
+both JS backends.
+
+Signed-off-by: Gustavo Lima Chaves <gustavo.chaves@microsoft.com>
+---
+ meson.build                                   |   1 +
+ src/polkitbackend/meson.build                 |   1 +
+ src/polkitbackend/polkitbackendcommon.h       |   2 +
+ .../polkitbackendduktapeauthority.c           | 236 ++++++++++++++----
+ .../polkitbackendjsauthority.cpp              |  10 +-
+ .../etc/polkit-1/rules.d/10-testing.rules     |   6 +-
+ .../test-polkitbackendjsauthority.c           |   2 +-
+ 7 files changed, 209 insertions(+), 49 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 4e44723..46956e3 100644
+--- a/meson.build
++++ b/meson.build
+@@ -137,6 +137,7 @@ js_engine = get_option('js_engine')
+ if js_engine == 'duktape'
+   js_dep = dependency('duktape')
+   libm_dep = cc.find_library('m')
++  libpthread_dep = cc.find_library('pthread')
+ elif js_engine == 'mozjs'
+   js_dep = dependency('mozjs-78')
+ endif
+diff --git a/src/polkitbackend/meson.build b/src/polkitbackend/meson.build
+index 9ec01b2..4dfea39 100644
+--- a/src/polkitbackend/meson.build
++++ b/src/polkitbackend/meson.build
+@@ -34,6 +34,7 @@ c_flags = [
+ if js_engine == 'duktape'
+   sources += files('polkitbackendduktapeauthority.c')
+   deps += libm_dep
++  deps += libpthread_dep
+ elif js_engine == 'mozjs'
+   sources += files('polkitbackendjsauthority.cpp')
+ endif
+diff --git a/src/polkitbackend/polkitbackendcommon.h b/src/polkitbackend/polkitbackendcommon.h
+index 6d0d267..dd700fc 100644
+--- a/src/polkitbackend/polkitbackendcommon.h
++++ b/src/polkitbackend/polkitbackendcommon.h
+@@ -50,6 +50,8 @@
+ #include <systemd/sd-login.h>
+ #endif /* HAVE_LIBSYSTEMD */
+ 
++#define RUNAWAY_KILLER_TIMEOUT (15)
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+diff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
+index a2b4420..80f1976 100644
+--- a/src/polkitbackend/polkitbackendduktapeauthority.c
++++ b/src/polkitbackend/polkitbackendduktapeauthority.c
+@@ -47,8 +47,20 @@ struct _PolkitBackendJsAuthorityPrivate
+   GFileMonitor **dir_monitors; /* NULL-terminated array of GFileMonitor instances */
+ 
+   duk_context *cx;
++
++  pthread_t runaway_killer_thread;
++};
++
++enum
++{
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS,
++  RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE,
+ };
+ 
++static gboolean execute_script_with_runaway_killer(PolkitBackendJsAuthority *authority,
++                                                   const gchar *filename);
++
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ G_DEFINE_TYPE (PolkitBackendJsAuthority, polkit_backend_js_authority, POLKIT_BACKEND_TYPE_INTERACTIVE_AUTHORITY);
+@@ -67,6 +79,15 @@ static const duk_function_list_entry js_polkit_functions[] =
+   { NULL, NULL, 0 },
+ };
+ 
++static void report_error (void     *udata,
++                          const char *msg)
++{
++    PolkitBackendJsAuthority *authority = udata;
++    polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
++                                  "fatal Duktape JS backend error: %s",
++                                  (msg ? msg : "no message"));
++}
++
+ static void
+ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ {
+@@ -78,7 +99,6 @@ polkit_backend_js_authority_init (PolkitBackendJsAuthority *authority)
+ static void
+ load_scripts (PolkitBackendJsAuthority  *authority)
+ {
+-  duk_context *cx = authority->priv->cx;
+   GList *files = NULL;
+   GList *l;
+   guint num_scripts = 0;
+@@ -123,36 +143,9 @@ load_scripts (PolkitBackendJsAuthority  *authority)
+   for (l = files; l != NULL; l = l->next)
+     {
+       const gchar *filename = (gchar *)l->data;
+-#if (DUK_VERSION >= 20000)
+-      GFile *file = g_file_new_for_path (filename);
+-      char *contents;
+-      gsize len;
+-      if (!g_file_load_contents (file, NULL, &contents, &len, NULL, NULL))
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Error compiling script %s",
+-                                        filename);
+-          g_object_unref (file);
+-          continue;
+-        }
+ 
+-      g_object_unref (file);
+-      if (duk_peval_lstring_noresult(cx, contents,len) != 0)
+-#else
+-      if (duk_peval_file_noresult (cx, filename) != 0)
+-#endif
+-        {
+-          polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                        "Error compiling script %s: %s",
+-                                        filename, duk_safe_to_string (authority->priv->cx, -1));
+-#if (DUK_VERSION >= 20000)
+-          g_free (contents);
+-#endif
++      if (!execute_script_with_runaway_killer(authority, filename))
+           continue;
+-        }
+-#if (DUK_VERSION >= 20000)
+-      g_free (contents);
+-#endif
+       num_scripts++;
+     }
+ 
+@@ -232,7 +225,7 @@ polkit_backend_common_js_authority_constructed (GObject *object)
+   PolkitBackendJsAuthority *authority = POLKIT_BACKEND_JS_AUTHORITY (object);
+   duk_context *cx;
+ 
+-  cx = duk_create_heap (NULL, NULL, NULL, authority, NULL);
++  cx = duk_create_heap (NULL, NULL, NULL, authority, report_error);
+   if (cx == NULL)
+     goto fail;
+ 
+@@ -243,6 +236,9 @@ polkit_backend_common_js_authority_constructed (GObject *object)
+   duk_put_function_list (cx, -1, js_polkit_functions);
+   duk_put_prop_string (cx, -2, "polkit");
+ 
++  /* load polkit objects/functions into JS context (e.g. addRule(),
++   * _deleteRules(), _runRules() et al)
++   */
+   duk_eval_string (cx, init_js);
+ 
+   if (authority->priv->rules_dirs == NULL)
+@@ -510,6 +506,167 @@ push_action_and_details (duk_context               *cx,
+ 
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
++typedef struct {
++  PolkitBackendJsAuthority *authority;
++  const gchar *filename;
++  pthread_cond_t cond;
++  pthread_mutex_t mutex;
++  gint ret;
++} RunawayKillerCtx;
++
++static gpointer
++runaway_killer_thread_execute_js (gpointer user_data)
++{
++  RunawayKillerCtx *ctx = user_data;
++  duk_context *cx = ctx->authority->priv->cx;
++
++  int oldtype;
++
++  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
++
++#if (DUK_VERSION >= 20000)
++  GFile *file = g_file_new_for_path(ctx->filename);
++  char *contents;
++  gsize len;
++
++  if (!g_file_load_contents(file, NULL, &contents, &len, NULL, NULL)) {
++    polkit_backend_authority_log(POLKIT_BACKEND_AUTHORITY(ctx->authority),
++                                 "Error compiling script %s", ctx->filename);
++    g_object_unref(file);
++    goto err;
++  }
++
++  g_object_unref(file);
++
++  /* evaluate the script, trying to print context in any syntax errors
++     found */
++  if (duk_peval_lstring(cx, contents, len) != 0)
++#else
++  if (duk_peval_file(cx, ctx->filename) != 0)
++#endif
++  {
++    polkit_backend_authority_log(POLKIT_BACKEND_AUTHORITY(ctx->authority),
++                                 "Error compiling script %s: %s", ctx->filename,
++                                 duk_safe_to_string(cx, -1));
++    duk_pop(cx);
++    goto free_err;
++  }
++#if (DUK_VERSION >= 20000)
++  g_free(contents);
++#endif
++
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++  goto end;
++
++free_err:
++#if (DUK_VERSION >= 20000)
++  g_free(contents);
++#endif
++err:
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE;
++end:
++  pthread_cond_signal(&ctx->cond);
++  return NULL;
++}
++
++static gpointer
++runaway_killer_thread_call_js (gpointer user_data)
++{
++  RunawayKillerCtx *ctx = user_data;
++  duk_context *cx = ctx->authority->priv->cx;
++  int oldtype;
++
++  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
++
++  if (duk_pcall_prop (cx, 0, 2) != DUK_EXEC_SUCCESS)
++    {
++      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (ctx->authority),
++                                    "Error evaluating admin rules: ",
++                                    duk_safe_to_string (cx, -1));
++      goto err;
++    }
++
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++  goto end;
++
++err:
++  ctx->ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_FAILURE;
++end:
++  pthread_cond_signal(&ctx->cond);
++  return NULL;
++}
++
++/* Blocking for at most for RUNAWAY_KILLER_TIMEOUT */
++static gboolean
++execute_script_with_runaway_killer(PolkitBackendJsAuthority *authority,
++                                   const gchar *filename)
++{
++  gint64 end_time;
++  gboolean cancel = FALSE;
++  RunawayKillerCtx ctx = {.authority = authority, .filename = filename,
++                          .ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++                          .mutex = PTHREAD_MUTEX_INITIALIZER,
++                          .cond = PTHREAD_COND_INITIALIZER};
++  struct timespec abs_time;
++
++  pthread_mutex_lock(&ctx.mutex);
++
++  clock_gettime(CLOCK_REALTIME, &abs_time);
++  abs_time.tv_sec += RUNAWAY_KILLER_TIMEOUT;
++
++  pthread_create(&authority->priv->runaway_killer_thread, NULL, runaway_killer_thread_execute_js, &ctx);
++
++  while (ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET) /* loop to treat spurious wakeups */
++    if (pthread_cond_timedwait(&ctx.cond, &ctx.mutex, &abs_time) == ETIMEDOUT) {
++      cancel = TRUE;
++      break;
++    }
++
++  pthread_mutex_unlock(&ctx.mutex);
++
++  if (cancel)
++    pthread_cancel (authority->priv->runaway_killer_thread);
++  pthread_join (authority->priv->runaway_killer_thread, NULL);
++
++  return ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++}
++
++/* Calls already stacked function and args. Blocking for at most for
++ * RUNAWAY_KILLER_TIMEOUT
++ */
++static gboolean
++call_js_function_with_runaway_killer(PolkitBackendJsAuthority *authority)
++{
++  gint64 end_time;
++  gboolean cancel = FALSE;
++  RunawayKillerCtx ctx = {.authority = authority,
++                          .ret = RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET,
++                          .mutex = PTHREAD_MUTEX_INITIALIZER,
++                          .cond = PTHREAD_COND_INITIALIZER};
++  struct timespec abs_time;
++
++  pthread_mutex_lock(&ctx.mutex);
++
++  clock_gettime(CLOCK_REALTIME, &abs_time);
++  abs_time.tv_sec += RUNAWAY_KILLER_TIMEOUT;
++
++  pthread_create(&authority->priv->runaway_killer_thread, NULL, runaway_killer_thread_call_js, &ctx);
++
++  while (ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_UNSET) /* loop to treat spurious wakeups */
++    if (pthread_cond_timedwait(&ctx.cond, &ctx.mutex, &abs_time) == ETIMEDOUT) {
++      cancel = TRUE;
++      break;
++    }
++
++  pthread_mutex_unlock(&ctx.mutex);
++
++  if (cancel)
++    pthread_cancel (authority->priv->runaway_killer_thread);
++  pthread_join (authority->priv->runaway_killer_thread, NULL);
++
++  return ctx.ret == RUNAWAY_KILLER_THREAD_EXIT_STATUS_SUCCESS;
++}
++
+ /* ---------------------------------------------------------------------------------------------------- */
+ 
+ GList *
+@@ -557,13 +714,8 @@ polkit_backend_common_js_authority_get_admin_auth_identities (PolkitBackendInter
+       goto out;
+     }
+ 
+-  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
+-    {
+-      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                    "Error evaluating admin rules: ",
+-                                    duk_safe_to_string (cx, -1));
+-      goto out;
+-    }
++  if (!call_js_function_with_runaway_killer (authority))
++    goto out;
+ 
+   ret_str = duk_require_string (cx, -1);
+ 
+@@ -643,15 +795,11 @@ polkit_backend_common_js_authority_check_authorization_sync (PolkitBackendIntera
+       goto out;
+     }
+ 
+-  if (duk_pcall_prop (cx, 0, 2) != DUK_ERR_NONE)
+-  {
+-      polkit_backend_authority_log (POLKIT_BACKEND_AUTHORITY (authority),
+-                                    "Error evaluating authorization rules: ",
+-                                    duk_safe_to_string (cx, -1));
+-      goto out;
+-  }
++  if (!call_js_function_with_runaway_killer (authority))
++    goto out;
+ 
+   if (duk_is_null(cx, -1)) {
++    /* this fine, means there was no match, use implicit authorizations */
+     good = TRUE;
+     goto out;
+   }
+diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
+index e28091d..11e91c0 100644
+--- a/src/polkitbackend/polkitbackendjsauthority.cpp
++++ b/src/polkitbackend/polkitbackendjsauthority.cpp
+@@ -829,11 +829,14 @@ runaway_killer_setup (PolkitBackendJsAuthority *authority)
+ {
+   g_assert (authority->priv->rkt_source == NULL);
+ 
+-  /* set-up timer for runaway scripts, will be executed in runaway_killer_thread */
++  /* set-up timer for runaway scripts, will be executed in
++     runaway_killer_thread, that is one, permanent thread running a glib
++     mainloop (rkt_loop) whose context (rkt_context) has a timeout source
++     (rkt_source) */
+   g_mutex_lock (&authority->priv->rkt_timeout_pending_mutex);
+   authority->priv->rkt_timeout_pending = FALSE;
+   g_mutex_unlock (&authority->priv->rkt_timeout_pending_mutex);
+-  authority->priv->rkt_source = g_timeout_source_new_seconds (15);
++  authority->priv->rkt_source = g_timeout_source_new_seconds (RUNAWAY_KILLER_TIMEOUT);
+   g_source_set_callback (authority->priv->rkt_source, rkt_on_timeout, authority, NULL);
+   g_source_attach (authority->priv->rkt_source, authority->priv->rkt_context);
+ 
+@@ -893,6 +896,9 @@ execute_script_with_runaway_killer (PolkitBackendJsAuthority *authority,
+ {
+   bool ret;
+ 
++  // tries to JS_ExecuteScript(), may hang for > RUNAWAY_KILLER_TIMEOUT,
++  // runaway_killer_thread makes sure the call returns, due to exception
++  // injection
+   runaway_killer_setup (authority);
+   ret = JS_ExecuteScript (authority->priv->cx,
+                           script,
+diff --git a/test/data/etc/polkit-1/rules.d/10-testing.rules b/test/data/etc/polkit-1/rules.d/10-testing.rules
+index 98bf062..e346b5d 100644
+--- a/test/data/etc/polkit-1/rules.d/10-testing.rules
++++ b/test/data/etc/polkit-1/rules.d/10-testing.rules
+@@ -189,8 +189,10 @@ polkit.addRule(function(action, subject) {
+                 ;
+         } catch (error) {
+             if (error == "Terminating runaway script")
+-                return polkit.Result.YES;
+-            return polkit.Result.NO;
++                // Inverted logic to accomodate Duktape's model as well, which
++                // will always fail with negation, on timeouts
++                return polkit.Result.NO;
++            return polkit.Result.YES;
+         }
+     }
+ });
+diff --git a/test/polkitbackend/test-polkitbackendjsauthority.c b/test/polkitbackend/test-polkitbackendjsauthority.c
+index f97e0e0..2103b17 100644
+--- a/test/polkitbackend/test-polkitbackendjsauthority.c
++++ b/test/polkitbackend/test-polkitbackendjsauthority.c
+@@ -328,7 +328,7 @@ static const RulesTestCase rules_test_cases[] = {
+     "net.company.run_away_script",
+     "unix-user:root",
+     NULL,
+-    POLKIT_IMPLICIT_AUTHORIZATION_AUTHORIZED,
++    POLKIT_IMPLICIT_AUTHORIZATION_NOT_AUTHORIZED,
+   },
+ 
+   {
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/python-2.7-no-static-lib.patch b/gnu/packages/patches/python-2.7-no-static-lib.patch
new file mode 100644
index 0000000000..02529989be
--- /dev/null
+++ b/gnu/packages/patches/python-2.7-no-static-lib.patch
@@ -0,0 +1,70 @@
+From 92e2dcace7a3c02289b314238c5f18caec659ff1 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sat, 5 Jun 2021 12:41:47 +0200
+Subject: [PATCH] No static lib.
+
+This patch is adapted from Fedora. The original patch did not apply
+because of whitespace changes.
+
+00111 #
+Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
+a libpythonMAJOR.MINOR.a (bug 550692):
+Downstream only: not appropriate for upstream
+---
+ Makefile.pre.in | 26 +-------------------------
+ 1 file changed, 1 insertion(+), 25 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 6239fc3..948f196 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -486,7 +486,7 @@ coverage-report: regen-grammar
+ 
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Modules/python.o $(LIBRARY) $(LDLIBRARY)
++$(BUILDPYTHON):	Modules/python.o $(LDLIBRARY)
+ 		$(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
+ 			Modules/python.o \
+ 			$(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+@@ -527,18 +527,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-# Build static library
+-# avoid long command lines, same as LIBRARY_OBJS
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
+-	$(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(PYTHON_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODOBJS)
+-	$(RANLIB) $@
+-
+ libpython$(VERSION).so: $(LIBRARY_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+@@ -1216,18 +1204,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SO)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-				$(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/python-3-fix-tests.patch b/gnu/packages/patches/python-3-fix-tests.patch
index e13790bd41..b44e743c71 100644
--- a/gnu/packages/patches/python-3-fix-tests.patch
+++ b/gnu/packages/patches/python-3-fix-tests.patch
@@ -1,10 +1,39 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
+From f0698133e7d6c353a3e6ae0fc62e57ba558a9bc0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Wed, 28 Oct 2020 22:55:05 -0400
+Subject: [PATCH] Skip problematic Python 3 tests in Guix.
+
+A subset of the hunks in this patch is tracked upstream at
+https://bugs.python.org/issue38845, which was contributed by Tanguy Le
+Carrour <tanguy@bioneland.org>.
+---
+ Lib/ctypes/test/test_callbacks.py         | 3 +++
+ Lib/ctypes/test/test_find.py              | 1 +
+ Lib/ctypes/test/test_libc.py              | 3 +++
+ Lib/distutils/tests/test_archive_util.py  | 2 ++
+ Lib/distutils/tests/test_sdist.py         | 1 +
+ Lib/test/_test_multiprocessing.py         | 2 ++
+ Lib/test/test_asyncio/test_base_events.py | 2 ++
+ Lib/test/test_generators.py               | 1 +
+ Lib/test/test_pathlib.py                  | 3 +--
+ Lib/test/test_pdb.py                      | 4 ++--
+ Lib/test/test_regrtest.py                 | 2 ++
+ Lib/test/test_resource.py                 | 1 +
+ Lib/test/test_shutil.py                   | 2 ++
+ Lib/test/test_signal.py                   | 4 ++++
+ Lib/test/test_socket.py                   | 8 ++++++++
+ Lib/test/test_spwd.py                     | 6 ++----
+ Lib/test/test_tarfile.py                  | 9 ++++++---
+ Lib/test/test_threading.py                | 3 +++
+ Lib/test/test_unicodedata.py              | 1 +
+ Tools/scripts/run_tests.py                | 2 +-
+ 20 files changed, 48 insertions(+), 12 deletions(-)
 
 diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
+index d8e9c5a760..94fc5929c9 100644
 --- a/Lib/ctypes/test/test_callbacks.py
 +++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
+@@ -5,6 +5,7 @@ from test import support
  from ctypes import *
  from ctypes.test import need_symbol
  import _ctypes_test
@@ -12,7 +41,7 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
  
  class Callbacks(unittest.TestCase):
      functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
+@@ -178,6 +179,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
  
          self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
  
@@ -21,7 +50,20 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
      def test_issue_8959_a(self):
          from ctypes.util import find_library
          libc_path = find_library("c")
+diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
+index 92ac1840ad..c8eb75dedd 100644
+--- a/Lib/ctypes/test/test_find.py
++++ b/Lib/ctypes/test/test_find.py
+@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+             self.assertNotEqual(find_library('c'), None)
+ 
++    @unittest.skipIf(True, "ldconfig is not used on Guix")
+     def test_find_library_with_ld(self):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
 diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
+index 56285b5ff8..c088ab3db8 100644
 --- a/Lib/ctypes/test/test_libc.py
 +++ b/Lib/ctypes/test/test_libc.py
 @@ -2,6 +2,7 @@ import unittest
@@ -42,6 +84,7 @@ diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
          comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
          lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
 diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
+index e9aad0e40f..8bbaa51ee5 100644
 --- a/Lib/distutils/tests/test_archive_util.py
 +++ b/Lib/distutils/tests/test_archive_util.py
 @@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
@@ -61,6 +104,7 @@ diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test
          tmpdir =  self._create_files()
          base_name = os.path.join(self.mkdtemp(), 'archive')
 diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
+index 23db126959..6e2329df7d 100644
 --- a/Lib/distutils/tests/test_sdist.py
 +++ b/Lib/distutils/tests/test_sdist.py
 @@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
@@ -72,9 +116,10 @@ diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.
          # now building a sdist
          dist, cmd = self.get_cmd()
 diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index e47905c863..31a5a9c308 100644
 --- a/Lib/test/_test_multiprocessing.py
 +++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
+@@ -1577,6 +1577,7 @@ class _TestCondition(BaseTestCase):
          if pid is not None:
              os.kill(pid, signal.SIGINT)
  
@@ -82,10 +127,19 @@ diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.
      def test_wait_result(self):
          if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
              pid = os.getpid()
+@@ -3905,6 +3906,7 @@ class _TestSharedMemory(BaseTestCase):
+         sms.close()
+ 
+     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
+         # bpo-36368: protect SharedMemoryManager server process from
+         # KeyboardInterrupt signals.
 diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
+index 533d5cc7f5..c4f860cc3b 100644
 --- a/Lib/test/test_asyncio/test_base_events.py
 +++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
+@@ -1341,6 +1341,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
          self._test_create_connection_ip_addr(m_socket, False)
  
      @patch_socket
@@ -95,9 +149,10 @@ diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/t
          m_socket.getaddrinfo = socket.getaddrinfo
          sock = m_socket.socket.return_value
 diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
+index 3bf1522808..04bac8a7db 100644
 --- a/Lib/test/test_generators.py
 +++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
+@@ -33,6 +33,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
          else:
              return "FAILED"
  
@@ -105,30 +160,11 @@ diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
      def test_raise_and_yield_from(self):
          gen = self.generator1()
          gen.send(None)
-diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
---- a/Lib/test/test_normalization.py
-+++ b/Lib/test/test_normalization.py
-@@ -2,6 +2,7 @@ from test.support import open_urlresource
- import unittest
- 
- from http.client import HTTPException
-+from urllib.error import URLError
- import sys
- from unicodedata import normalize, unidata_version
- 
-@@ -43,6 +44,8 @@ class NormalizationTest(unittest.TestCase):
-         except PermissionError:
-             self.skipTest(f"Permission error when downloading {TESTDATAURL} "
-                           f"into the test data directory")
-+        except URLError:
-+            self.skipTest("DNS lookups are not enabled.")
-         except (OSError, HTTPException):
-             self.fail(f"Could not retrieve {TESTDATAURL}")
- 
 diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
+index 3da35710b9..5404f9193d 100644
 --- a/Lib/test/test_pathlib.py
 +++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
+@@ -2408,8 +2408,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
          self.assertEqual(given, expect)
          self.assertEqual(set(p.rglob("FILEd*")), set())
  
@@ -139,9 +175,10 @@ diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
          P = self.cls
          support.import_module('pwd')
 diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
+index 8016f81e5a..10190486b4 100644
 --- a/Lib/test/test_pdb.py
 +++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
+@@ -1219,11 +1219,11 @@ def test_pdb_issue_20766():
      > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
      -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
      (Pdb) continue
@@ -156,9 +193,10 @@ diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
  
  
 diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
+index a77638b10a..2069b349a8 100644
 --- a/Lib/test/test_regrtest.py
 +++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -811,6 +811,7 @@ class ArgsTestCase(BaseTestCase):
          output = self.run_tests('--fromfile', filename)
          self.check_executed_tests(output, tests)
  
@@ -166,7 +204,7 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
      def test_interrupted(self):
          code = TEST_INTERRUPTED
          test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -828,6 +829,7 @@ class ArgsTestCase(BaseTestCase):
                   % (self.TESTNAME_REGEX, len(tests)))
          self.check_line(output, regex)
  
@@ -175,9 +213,10 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
          # Issue #25373: test --slowest with an interrupted test
          code = TEST_INTERRUPTED
 diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
+index e5ece5284c..5299e54507 100644
 --- a/Lib/test/test_resource.py
 +++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
+@@ -148,6 +148,7 @@ class ResourceTest(unittest.TestCase):
  
      @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
      @support.requires_linux_version(2, 6, 36)
@@ -186,37 +225,75 @@ diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
          self.assertRaises(TypeError, resource.prlimit)
          self.assertRaises(ProcessLookupError, resource.prlimit,
 diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
+index e19af64be0..1b893df6fa 100644
 --- a/Lib/test/test_shutil.py
 +++ b/Lib/test/test_shutil.py
-@@ -1143,6 +1143,7 @@ class TestShutil(unittest.TestCase):
+@@ -1427,6 +1427,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         base_name = os.path.join(tmpdir, 'archive')
          self.assertRaises(ValueError, make_archive, base_name, 'xxx')
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      def test_make_archive_owner_group(self):
          # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1171,6 +1172,7 @@ class TestShutil(unittest.TestCase):
+@@ -1455,6 +1456,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         self.assertTrue(os.path.isfile(res))
  
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
      def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
+diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
+index 45553a6a42..55623f01a3 100644
+--- a/Lib/test/test_signal.py
++++ b/Lib/test/test_signal.py
+@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
+         self.assertLess(len(s), signal.NSIG)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers exit via SIGINT."""
+         process = subprocess.run(
+@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
+             signal.signal(7, handler)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
+         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
+@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
+ 
+ class RaiseSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_sigint(self):
+         with self.assertRaises(KeyboardInterrupt):
+             signal.raise_signal(signal.SIGINT)
+@@ -1275,6 +1278,7 @@ class RaiseSignalTest(unittest.TestCase):
+ 
+ class PidfdSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     @unittest.skipUnless(
+         hasattr(signal, "pidfd_send_signal"),
+         "pidfd support not built in",
 diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
+index aefba4f397..6c89f558d5 100755
 --- a/Lib/test/test_socket.py
 +++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1009,6 +1009,8 @@ class GeneralModuleTests(unittest.TestCase):
          if not fqhn in all_host_names:
              self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
  
 +    @unittest.skipUnless(support.is_resource_enabled('network'),
 +                         'network is not enabled')
      def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
+         for addr in [socket_helper.HOSTv4, '10.0.0.1', '255.255.255.255']:
              self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1140,6 +1142,8 @@ class GeneralModuleTests(unittest.TestCase):
              self.assertWarns(DeprecationWarning, socket.ntohs, k)
              self.assertWarns(DeprecationWarning, socket.htons, k)
  
@@ -225,7 +302,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetServBy(self):
          eq = self.assertEqual
          # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1489,6 +1493,8 @@ class GeneralModuleTests(unittest.TestCase):
              raise
          self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
  
@@ -234,7 +311,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetaddrinfo(self):
          try:
              socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1571,6 +1577,8 @@ class GeneralModuleTests(unittest.TestCase):
          # only IP addresses are allowed
          self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
  
@@ -244,6 +321,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
                           'network is not enabled')
      def test_idna(self):
 diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
+index 07793c84c8..fec672bcbe 100644
 --- a/Lib/test/test_spwd.py
 +++ b/Lib/test/test_spwd.py
 @@ -5,8 +5,7 @@ from test import support
@@ -267,9 +345,10 @@ diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
  
      def test_getspnam_exception(self):
 diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
+index 29cde91bf7..8d0f20e8bf 100644
 --- a/Lib/test/test_tarfile.py
 +++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
+@@ -2607,9 +2607,12 @@ def root_is_uid_gid_0():
          import pwd, grp
      except ImportError:
          return False
@@ -286,9 +365,10 @@ diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
      return True
  
 diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
+index c21cdf8eb7..6c9d575032 100644
 --- a/Lib/test/test_threading.py
 +++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
+@@ -1398,6 +1398,7 @@ class MiscTestCase(unittest.TestCase):
  
  
  class InterruptMainTests(unittest.TestCase):
@@ -296,7 +376,7 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_subthread(self):
          # Calling start_new_thread with a function that executes interrupt_main
          # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
+@@ -1409,6 +1410,8 @@ class InterruptMainTests(unittest.TestCase):
              t.join()
          t.join()
  
@@ -305,10 +385,23 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_mainthread(self):
          # Make sure that if interrupt_main is called in main thread that
          # KeyboardInterrupt is raised instantly.
+diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
+index b552d2bd17..28b1144e15 100644
+--- a/Lib/test/test_unicodedata.py
++++ b/Lib/test/test_unicodedata.py
+@@ -309,6 +309,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest):
+                 self.assertEqual(len(lines), 1,
+                                  r"\u%.4x should not be a linebreak" % i)
+ 
++@requires_resource('network')
+ class NormalizationTest(unittest.TestCase):
+     @staticmethod
+     def check_version(testfile):
 diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
+index bcfa5e943b..1f2484971b 100644
 --- a/Tools/scripts/run_tests.py
 +++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
+@@ -41,7 +41,7 @@ def main(regrtest_args):
      if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
          args.extend(['-j', '0'])  # Use all CPU cores
      if not any(is_resource_use_flag(arg) for arg in regrtest_args):
@@ -317,3 +410,6 @@ diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
      args.extend(regrtest_args)
      print(' '.join(args))
      if sys.platform == 'win32':
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/python-3-hurd-configure.patch b/gnu/packages/patches/python-3-hurd-configure.patch
new file mode 100644
index 0000000000..aa25a401c5
--- /dev/null
+++ b/gnu/packages/patches/python-3-hurd-configure.patch
@@ -0,0 +1,27 @@
+Upstream status: Not upstreamed.
+
+The build system refuses to cross-compile for unknown targets
+even though it works fine.  Add GNU/Hurd target.
+
+--- Python-3.8.5/configure.orig	2020-10-26 14:06:09.665423525 +0100
++++ Python-3.8.5/configure	2020-10-26 14:08:30.987765738 +0100
+@@ -3278,6 +3278,9 @@
+ 	*-*-vxworks*)
+ 	    ac_sys_system=VxWorks
+ 	    ;;
++	*-*-gnu)
++	    ac_sys_system=GNU
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
+@@ -3328,6 +3331,9 @@
+ 	*-*-vxworks*)
+ 		_host_cpu=$host_cpu
+ 		;;
++	*-*-gnu)
++		_host_cpu=$host_cpu
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
diff --git a/gnu/packages/patches/python-3-no-static-lib.patch b/gnu/packages/patches/python-3-no-static-lib.patch
new file mode 100644
index 0000000000..b44dbc976c
--- /dev/null
+++ b/gnu/packages/patches/python-3-no-static-lib.patch
@@ -0,0 +1,75 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: David Malcolm <dmalcolm@redhat.com>
+Date: Mon, 18 Jan 2010 17:59:07 +0000
+Subject: [PATCH] 00111: Don't try to build a libpythonMAJOR.MINOR.a
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Downstream only: not appropriate for upstream.
+
+See https://bugzilla.redhat.com/show_bug.cgi?id=556092
+
+Co-authored-by: David Malcolm <dmalcolm@redhat.com>
+Co-authored-by: Bohuslav Kabrda <bkabrda@redhat.com>
+Co-authored-by: Matej Stuchlik <mstuchli@redhat.com>
+Co-authored-by: Robert Kuska <rkuska@redhat.com>
+Co-authored-by: Charalampos Stratakis <cstratak@redhat.com>
+Co-authored-by: Miro Hrončok <miro@hroncok.cz>
+---
+ Makefile.pre.in | 21 ++-------------------
+ 1 file changed, 2 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 0c3981c132..5587422ec7 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -589,7 +589,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+ 	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++$(BUILDPYTHON):	Programs/python.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ platform: $(BUILDPYTHON) pybuilddir.txt
+@@ -637,12 +637,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-
+-# Build static library
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ $(LIBRARY_OBJS)
+-
+ libpython$(LDVERSION).so: $(LIBRARY_OBJS) $(DTRACE_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \
+@@ -724,7 +718,7 @@ Makefile Modules/config.c: Makefile.pre \
+ 	@echo "The Makefile was updated, you may need to re-run make."
+ 
+ 
+-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++Programs/_testembed: Programs/_testembed.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ ############################################################################
+@@ -1652,17 +1646,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SHLIB_SUFFIX)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Programs/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
diff --git a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch b/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
deleted file mode 100644
index 01f6b52865..0000000000
--- a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-Fix CVE-2021-3177 for Python 3.8:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3177
-
-Patch copied from upstream source repository:
-
-https://github.com/python/cpython/commit/ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f
-
-From ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f Mon Sep 17 00:00:00 2001
-From: "Miss Islington (bot)"
- <31488909+miss-islington@users.noreply.github.com>
-Date: Mon, 18 Jan 2021 13:28:52 -0800
-Subject: [PATCH] closes bpo-42938: Replace snprintf with Python unicode
- formatting in ctypes param reprs. (GH-24248)
-
-(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0977c7)
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
----
- Lib/ctypes/test/test_parameters.py            | 43 ++++++++++++++++
- .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst  |  2 +
- Modules/_ctypes/callproc.c                    | 51 +++++++------------
- 3 files changed, 64 insertions(+), 32 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-
-diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py
-index e4c25fd880cef..531894fdec838 100644
---- a/Lib/ctypes/test/test_parameters.py
-+++ b/Lib/ctypes/test/test_parameters.py
-@@ -201,6 +201,49 @@ def __dict__(self):
-         with self.assertRaises(ZeroDivisionError):
-             WorseStruct().__setstate__({}, b'foo')
- 
-+    def test_parameter_repr(self):
-+        from ctypes import (
-+            c_bool,
-+            c_char,
-+            c_wchar,
-+            c_byte,
-+            c_ubyte,
-+            c_short,
-+            c_ushort,
-+            c_int,
-+            c_uint,
-+            c_long,
-+            c_ulong,
-+            c_longlong,
-+            c_ulonglong,
-+            c_float,
-+            c_double,
-+            c_longdouble,
-+            c_char_p,
-+            c_wchar_p,
-+            c_void_p,
-+        )
-+        self.assertRegex(repr(c_bool.from_param(True)), r"^<cparam '\?' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_char.from_param(97)), "<cparam 'c' ('a')>")
-+        self.assertRegex(repr(c_wchar.from_param('a')), r"^<cparam 'u' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_byte.from_param(98)), "<cparam 'b' (98)>")
-+        self.assertEqual(repr(c_ubyte.from_param(98)), "<cparam 'B' (98)>")
-+        self.assertEqual(repr(c_short.from_param(511)), "<cparam 'h' (511)>")
-+        self.assertEqual(repr(c_ushort.from_param(511)), "<cparam 'H' (511)>")
-+        self.assertRegex(repr(c_int.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_uint.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_long.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulong.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_longlong.from_param(20000)), r"^<cparam '[liq]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulonglong.from_param(20000)), r"^<cparam '[LIQ]' \(20000\)>$")
-+        self.assertEqual(repr(c_float.from_param(1.5)), "<cparam 'f' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1.5)), "<cparam 'd' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1e300)), "<cparam 'd' (1e+300)>")
-+        self.assertRegex(repr(c_longdouble.from_param(1.5)), r"^<cparam ('d' \(1.5\)|'g' at 0x[A-Fa-f0-9]+)>$")
-+        self.assertRegex(repr(c_char_p.from_param(b'hihi')), "^<cparam 'z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_wchar_p.from_param('hihi')), "^<cparam 'Z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_void_p.from_param(0x12)), r"^<cparam 'P' \(0x0*12\)>$")
-+
- ################################################################
- 
- if __name__ == '__main__':
-#diff --git a/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#new file mode 100644
-#index 0000000000000..7df65a156feab
-#--- /dev/null
-#+++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#@@ -0,0 +1,2 @@
-#+Avoid static buffers when computing the repr of :class:`ctypes.c_double` and
-#+:class:`ctypes.c_longdouble` values.
-diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
-index a9b8675cd951b..de75918d49f37 100644
---- a/Modules/_ctypes/callproc.c
-+++ b/Modules/_ctypes/callproc.c
-@@ -484,58 +484,47 @@ is_literal_char(unsigned char c)
- static PyObject *
- PyCArg_repr(PyCArgObject *self)
- {
--    char buffer[256];
-     switch(self->tag) {
-     case 'b':
-     case 'B':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.b);
--        break;
-     case 'h':
-     case 'H':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.h);
--        break;
-     case 'i':
-     case 'I':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.i);
--        break;
-     case 'l':
-     case 'L':
--        sprintf(buffer, "<cparam '%c' (%ld)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%ld)>",
-             self->tag, self->value.l);
--        break;
- 
-     case 'q':
-     case 'Q':
--        sprintf(buffer,
--#ifdef MS_WIN32
--            "<cparam '%c' (%I64d)>",
--#else
--            "<cparam '%c' (%lld)>",
--#endif
-+        return PyUnicode_FromFormat("<cparam '%c' (%lld)>",
-             self->tag, self->value.q);
--        break;
-     case 'd':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.d);
--        break;
--    case 'f':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.f);
--        break;
--
-+    case 'f': {
-+        PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d);
-+        if (f == NULL) {
-+            return NULL;
-+        }
-+        PyObject *result = PyUnicode_FromFormat("<cparam '%c' (%R)>", self->tag, f);
-+        Py_DECREF(f);
-+        return result;
-+    }
-     case 'c':
-         if (is_literal_char((unsigned char)self->value.c)) {
--            sprintf(buffer, "<cparam '%c' ('%c')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('%c')>",
-                 self->tag, self->value.c);
-         }
-         else {
--            sprintf(buffer, "<cparam '%c' ('\\x%02x')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('\\x%02x')>",
-                 self->tag, (unsigned char)self->value.c);
-         }
--        break;
- 
- /* Hm, are these 'z' and 'Z' codes useful at all?
-    Shouldn't they be replaced by the functionality of c_string
-@@ -544,22 +533,20 @@ PyCArg_repr(PyCArgObject *self)
-     case 'z':
-     case 'Z':
-     case 'P':
--        sprintf(buffer, "<cparam '%c' (%p)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%p)>",
-             self->tag, self->value.p);
-         break;
- 
-     default:
-         if (is_literal_char((unsigned char)self->tag)) {
--            sprintf(buffer, "<cparam '%c' at %p>",
-+            return PyUnicode_FromFormat("<cparam '%c' at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
-         else {
--            sprintf(buffer, "<cparam 0x%02x at %p>",
-+            return PyUnicode_FromFormat("<cparam 0x%02x at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
--        break;
-     }
--    return PyUnicode_FromString(buffer);
- }
- 
- static PyMemberDef PyCArgType_members[] = {
diff --git a/gnu/packages/patches/python-3.8-fix-tests.patch b/gnu/packages/patches/python-3.8-fix-tests.patch
deleted file mode 100644
index 4fbdd444c7..0000000000
--- a/gnu/packages/patches/python-3.8-fix-tests.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
---
-2.23.0
diff --git a/gnu/packages/patches/python-3.9-fix-tests.patch b/gnu/packages/patches/python-3.9-fix-tests.patch
deleted file mode 100644
index dc6b8c4cc8..0000000000
--- a/gnu/packages/patches/python-3.9-fix-tests.patch
+++ /dev/null
@@ -1,370 +0,0 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
-
-diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
---- a/Lib/ctypes/test/test_callbacks.py
-+++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
- from ctypes import *
- from ctypes.test import need_symbol
- import _ctypes_test
-+import platform
-
- class Callbacks(unittest.TestCase):
-     functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
-
-         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_issue_8959_a(self):
-         from ctypes.util import find_library
-         libc_path = find_library("c")
-diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
---- a/Lib/ctypes/test/test_libc.py
-+++ b/Lib/ctypes/test/test_libc.py
-@@ -2,6 +2,7 @@ import unittest
-
- from ctypes import *
- import _ctypes_test
-+import platform
-
- lib = CDLL(_ctypes_test.__file__)
-
-@@ -17,6 +18,8 @@ class LibTest(unittest.TestCase):
-         import math
-         self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_qsort(self):
-         comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
-         lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
-diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
---- a/Lib/distutils/tests/test_archive_util.py
-+++ b/Lib/distutils/tests/test_archive_util.py
-@@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-         self.assertEqual(os.path.basename(res), 'archive.tar.xz')
-         self.assertEqual(self._tarinfo(res), self._created_files)
-
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -362,6 +363,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-
-     @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_tarfile_root_owner(self):
-         tmpdir =  self._create_files()
-         base_name = os.path.join(self.mkdtemp(), 'archive')
-diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
---- a/Lib/distutils/tests/test_sdist.py
-+++ b/Lib/distutils/tests/test_sdist.py
-@@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
-                      "The tar command is not found")
-     @unittest.skipIf(find_executable('gzip') is None,
-                      "The gzip command is not found")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_distribution_owner_group(self):
-         # now building a sdist
-         dist, cmd = self.get_cmd()
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
-         if pid is not None:
-             os.kill(pid, signal.SIGINT)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_wait_result(self):
-         if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
-             pid = os.getpid()
-diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
---- a/Lib/test/test_asyncio/test_base_events.py
-+++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
-         self._test_create_connection_ip_addr(m_socket, False)
-
-     @patch_socket
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_create_connection_service_name(self, m_socket):
-         m_socket.getaddrinfo = socket.getaddrinfo
-         sock = m_socket.socket.return_value
-diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
---- a/Lib/test/test_generators.py
-+++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
-         else:
-             return "FAILED"
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment')
-     def test_raise_and_yield_from(self):
-         gen = self.generator1()
-         gen.send(None)
-diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
---- a/Lib/test/test_pathlib.py
-+++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
-         self.assertEqual(given, expect)
-         self.assertEqual(set(p.rglob("FILEd*")), set())
-
--    @unittest.skipUnless(hasattr(pwd, 'getpwall'),
--                         'pwd module does not expose getpwall()')
-+    @unittest.skipIf(True, "Guix builder home is '/' which causes trouble for these tests")
-     def test_expanduser(self):
-         P = self.cls
-         support.import_module('pwd')
-diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
---- a/Lib/test/test_pdb.py
-+++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
-     -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
-     (Pdb) continue
--    pdb 1: <built-in function default_int_handler>
-+    pdb 1: Handlers.SIG_IGN
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(5)test_function()
-     -> sess.set_trace(sys._getframe())
-     (Pdb) continue
--    pdb 2: <built-in function default_int_handler>
-+    pdb 2: Handlers.SIG_IGN
-     """
-
-
-diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
---- a/Lib/test/test_regrtest.py
-+++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
-         output = self.run_tests('--fromfile', filename)
-         self.check_executed_tests(output, tests)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_interrupted(self):
-         code = TEST_INTERRUPTED
-         test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
-                  % (self.TESTNAME_REGEX, len(tests)))
-         self.check_line(output, regex)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_slowest_interrupted(self):
-         # Issue #25373: test --slowest with an interrupted test
-         code = TEST_INTERRUPTED
-diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
---- a/Lib/test/test_resource.py
-+++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
-
-     @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
-     @support.requires_linux_version(2, 6, 36)
-+    @unittest.skipIf(True, "Bug: the PermissionError is not raised")
-     def test_prlimit(self):
-         self.assertRaises(TypeError, resource.prlimit)
-         self.assertRaises(ProcessLookupError, resource.prlimit,
-diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
---- a/Lib/test/test_shutil.py
-+++ b/Lib/test/test_shutil.py
-@@ -1428,6 +1428,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1456,6 +1457,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-     def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
-diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
---- a/Lib/test/test_unicodedata.py
-+++ b/Lib/test/test_unicodedata.py
-@@ -320,6 +320,7 @@ class NormalizationTest(unittest.TestCase):
-         data = [int(x, 16) for x in data.split(" ")]
-         return "".join([chr(x) for x in data])
-
-+    @unittest.skipIf(True, 'Network is not available in the Guix build environment')
-     def test_normalization(self):
-         TESTDATAFILE = "NormalizationTest.txt"
-         TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
-diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
---- a/Lib/test/test_socket.py
-+++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
-         if not fqhn in all_host_names:
-             self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
-
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
-             self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
-             self.assertWarns(DeprecationWarning, socket.ntohs, k)
-             self.assertWarns(DeprecationWarning, socket.htons, k)
-
-+    @unittest.skipUnless(os.path.exists("/etc/services"),
-+                         "getservbyname uses /etc/services, which is not in the chroot")
-     def testGetServBy(self):
-         eq = self.assertEqual
-         # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
-             raise
-         self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     def testGetaddrinfo(self):
-         try:
-             socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
-         # only IP addresses are allowed
-         self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     @unittest.skipUnless(support.is_resource_enabled('network'),
-                          'network is not enabled')
-     def test_idna(self):
-diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
---- a/Lib/test/test_spwd.py
-+++ b/Lib/test/test_spwd.py
-@@ -5,8 +5,7 @@ from test import support
- spwd = support.import_module('spwd')
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
--                     'root privileges required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdRoot(unittest.TestCase):
-
-     def test_getspall(self):
-@@ -56,8 +55,7 @@ class TestSpwdRoot(unittest.TestCase):
-             self.assertRaises(TypeError, spwd.getspnam, bytes_name)
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() != 0,
--                     'non-root user required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdNonRoot(unittest.TestCase):
-
-     def test_getspnam_exception(self):
-diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
---- a/Lib/test/test_tarfile.py
-+++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
-         import pwd, grp
-     except ImportError:
-         return False
--    if pwd.getpwuid(0)[0] != 'root':
--        return False
--    if grp.getgrgid(0)[0] != 'root':
-+    try:
-+        if pwd.getpwuid(0)[0] != 'root':
-+            return False
-+        if grp.getgrgid(0)[0] != 'root':
-+            return False
-+    except KeyError:
-         return False
-     return True
-
-diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
---- a/Lib/test/test_threading.py
-+++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
-
-
- class InterruptMainTests(unittest.TestCase):
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_subthread(self):
-         # Calling start_new_thread with a function that executes interrupt_main
-         # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
-             t.join()
-         t.join()
-
-+
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_mainthread(self):
-         # Make sure that if interrupt_main is called in main thread that
-         # KeyboardInterrupt is raised instantly.
-diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
---- a/Tools/scripts/run_tests.py
-+++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
-     if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
-         args.extend(['-j', '0'])  # Use all CPU cores
-     if not any(is_resource_use_flag(arg) for arg in regrtest_args):
--        args.extend(['-u', 'all,-largefile,-audio,-gui'])
-+        args.extend(['-u', 'all,-largefile,-audio,-gui,-network'])
-     args.extend(regrtest_args)
-     print(' '.join(args))
-     if sys.platform == 'win32':
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
-@@ -1279,6 +1279,7 @@ class PidfdSignalTest(unittest.TestCase):
-         hasattr(signal, "pidfd_send_signal"),
-         "pidfd support not built in",
-     )
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_pidfd_send_signal(self):
-         with self.assertRaises(OSError) as cm:
-             signal.pidfd_send_signal(0, signal.SIGINT)
-diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
-index 92ac184..49eec2c 100644
---- a/Lib/ctypes/test/test_find.py
-+++ b/Lib/ctypes/test/test_find.py
-@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
-             self.assertNotEqual(find_library('c'), None)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_find_library_with_ld(self):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
-              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
diff --git a/gnu/packages/patches/python-babel-fix-parse-future-test.patch b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
new file mode 100644
index 0000000000..8a90166ec5
--- /dev/null
+++ b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
@@ -0,0 +1,68 @@
+From 7bdaa28a55e8d8228d5434effa4b1473ab7b3669 Mon Sep 17 00:00:00 2001
+From: Felix Schwarz <felix.schwarz@oss.schwarz.eu>
+Date: Tue, 5 May 2020 08:05:56 +0000
+Subject: [PATCH] fix tests when using Python 3.9a6
+
+In Python 3.9a6 integer values for future flags were changed to prevent
+collision with compiler flags. We need to retrieve these at runtime so
+the test suite works with Python <= 3.8 as well as Python 3.9.
+---
+ tests/test_util.py | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/tests/test_util.py b/tests/test_util.py
+index a6a4450c..b9343aaa 100644
+--- a/tests/test_util.py
++++ b/tests/test_util.py
+@@ -11,6 +11,7 @@
+ # individuals. For the exact contribution history, see the revision
+ # history and logs, available at http://babel.edgewall.org/log/.
+ 
++import __future__
+ import unittest
+ 
+ import pytest
+@@ -20,6 +21,12 @@
+ from babel.util import parse_future_flags
+ 
+ 
++class _FF:
++    division         = __future__.division.compiler_flag
++    print_function   = __future__.print_function.compiler_flag
++    with_statement   = __future__.with_statement.compiler_flag
++    unicode_literals = __future__.unicode_literals.compiler_flag
++
+ def test_distinct():
+     assert list(util.distinct([1, 2, 1, 3, 4, 4])) == [1, 2, 3, 4]
+     assert list(util.distinct('foobar')) == ['f', 'o', 'b', 'a', 'r']
+@@ -70,25 +77,25 @@ def test_parse_encoding_non_ascii():
+ from __future__ import print_function,
+     division, with_statement,
+     unicode_literals
+-''', 0x10000 | 0x2000 | 0x8000 | 0x20000),
++''', _FF.print_function | _FF.division | _FF.with_statement | _FF.unicode_literals),
+     ('''
+ from __future__ import print_function, division
+ print('hello')
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import print_function, division, unknown,,,,,
+ print 'hello'
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import (
+     print_function,
+     division)
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import \\
+     print_function, \\
+     division
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+ ])
+ def test_parse_future(source, result):
+     fp = BytesIO(source.encode('latin-1'))
diff --git a/gnu/packages/patches/python-chai-drop-python2.patch b/gnu/packages/patches/python-chai-drop-python2.patch
new file mode 100644
index 0000000000..0eb980e5db
--- /dev/null
+++ b/gnu/packages/patches/python-chai-drop-python2.patch
@@ -0,0 +1,32 @@
+Patch copied from Gentoo removing obsolete Python2 code.
+
+--- a/chai/chai.py
++++ b/chai/chai.py
+@@ -62,11 +62,6 @@
+             try:
+                 func(self, *args, **kwargs)
+             except UnexpectedCall as e:
+-                # if this is not python3, use python2 syntax
+-                if not hasattr(e, '__traceback__'):
+-                    from .python2 import reraise
+-                    reraise(
+-                        AssertionError, '\n\n' + str(e), sys.exc_info()[-1])
+                 exc = AssertionError('\n\n' + str(e))
+                 setattr(exc, '__traceback__', sys.exc_info()[-1])
+                 raise exc
+--- a/chai/python2.py
++++ b/chai/python2.py
+@@ -1,3 +0,0 @@
+-
+-def reraise(exc, msg, traceback):
+-    raise exc, msg, traceback
+--- a/chai.egg-info/SOURCES.txt
++++ b/chai.egg-info/SOURCES.txt
+@@ -10,7 +10,6 @@
+ chai/exception.py
+ chai/expectation.py
+ chai/mock.py
+-chai/python2.py
+ chai/spy.py
+ chai/stub.py
+ chai.egg-info/PKG-INFO
diff --git a/gnu/packages/patches/python-docopt-pytest6-compat.patch b/gnu/packages/patches/python-docopt-pytest6-compat.patch
new file mode 100644
index 0000000000..acd4955778
--- /dev/null
+++ b/gnu/packages/patches/python-docopt-pytest6-compat.patch
@@ -0,0 +1,29 @@
+https://sources.debian.org/data/main/d/docopt/0.6.2-3/debian/patches/pytest6
+
+From: Michael R. Crusoe <crusoe@debian.org>
+Subject: fix for pytest 6.x comptability
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=979285
+
+--- docopt.orig/conftest.py
++++ docopt/conftest.py
+@@ -11,6 +11,8 @@
+ 
+ def pytest_collect_file(path, parent):
+     if path.ext == ".docopt" and path.basename.startswith("test"):
++        if hasattr(DocoptTestFile, "from_parent"):
++            return DocoptTestFile.from_parent(parent, fspath=path)
+         return DocoptTestFile(path, parent)
+ 
+ 
+@@ -41,7 +43,10 @@
+         for name, doc, cases in parse_test(raw):
+             name = self.fspath.purebasename
+             for case in cases:
+-                yield DocoptTestItem("%s(%d)" % (name, index), self, doc, case)
++                if hasattr(DocoptTestItem, "from_parent"):
++                    yield DocoptTestItem.from_parent(self, name="%s(%d)" % (name, index), doc=doc, case=case)
++                else:
++                    yield DocoptTestItem("%s(%d)" % (name, index), self, doc, case)
+                 index += 1
+ 
+ 
diff --git a/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch b/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch
new file mode 100644
index 0000000000..4ffe9b373d
--- /dev/null
+++ b/gnu/packages/patches/python-fixtures-remove-monkeypatch-test.patch
@@ -0,0 +1,59 @@
+https://sources.debian.org/data/main/p/python-fixtures/3.0.0-4/debian/patches/remove-broken-monkey-patch-test.patch
+
+The last release was May 2016. This can be removed when the next release happens.
+
+Description: Remove broken monkey patch tests
+Author: Thomas Goirand <zigo@debian.org>
+Bug-Debian: https://bugs.debian.org/973239
+Forwarded: no
+Last-Update: 2020-11-12
+
+--- python-fixtures-3.0.0.orig/fixtures/tests/_fixtures/test_monkeypatch.py
++++ python-fixtures-3.0.0/fixtures/tests/_fixtures/test_monkeypatch.py
+@@ -181,22 +181,6 @@ class TestMonkeyPatch(testtools.TestCase
+         self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+                 C, 'foo_cls')
+ 
+-    def test_patch_classmethod_with_classmethod(self):
+-        oldmethod = C.foo_cls
+-        oldmethod_inst = C().foo_cls
+-        fixture = MonkeyPatch(
+-            'fixtures.tests._fixtures.test_monkeypatch.C.foo_cls',
+-            D.bar_cls_args)
+-        with fixture:
+-            cls, target_class = C.foo_cls()
+-            self.expectThat(cls, Is(D))
+-            self.expectThat(target_class, Is(C))
+-            cls, target_class = C().foo_cls()
+-            self.expectThat(cls, Is(D))
+-            self.expectThat(target_class, Is(C))
+-        self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+-                C, 'foo_cls')
+-
+     def test_patch_classmethod_with_function(self):
+         oldmethod = C.foo_cls
+         oldmethod_inst = C().foo_cls
+@@ -212,23 +196,6 @@ class TestMonkeyPatch(testtools.TestCase
+         self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+                 C, 'foo_cls')
+ 
+-    def test_patch_classmethod_with_boundmethod(self):
+-        oldmethod = C.foo_cls
+-        oldmethod_inst = C().foo_cls
+-        d = D()
+-        fixture = MonkeyPatch(
+-            'fixtures.tests._fixtures.test_monkeypatch.C.foo_cls',
+-            d.bar_two_args)
+-        with fixture:
+-            slf, cls = C.foo_cls()
+-            self.expectThat(slf, Is(d))
+-            self.expectThat(cls, Is(C))
+-            slf, cls = C().foo_cls()
+-            self.expectThat(slf, Is(d))
+-            self.expectThat(cls, Is(C))
+-        self._check_restored_static_or_class_method(oldmethod, oldmethod_inst,
+-                C, 'foo_cls')
+-
+     def test_patch_function_with_staticmethod(self):
+         oldmethod = fake_no_args
+         fixture = MonkeyPatch(
diff --git a/gnu/packages/patches/python-poppler-qt5-fix-build.patch b/gnu/packages/patches/python-poppler-qt5-fix-build.patch
new file mode 100644
index 0000000000..099bb86d2f
--- /dev/null
+++ b/gnu/packages/patches/python-poppler-qt5-fix-build.patch
@@ -0,0 +1,116 @@
+Patch taken from the upstream repository
+https://github.com/frescobaldi/python-poppler-qt5/issues/43
+
+From 92e5962ec3751ab051d0b655fd61afc7a1cf709e Mon Sep 17 00:00:00 2001
+From: Ben Greiner <code@bnavigator.de>
+Date: Thu, 4 Mar 2021 17:02:51 +0100
+Subject: [PATCH] map type QVector< QPair<TYPE, TYPE> > for
+ FormFieldChoice::choicesWithExportValues() (#45)
+
+---
+ types.sip | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 93 insertions(+)
+
+diff --git a/types.sip b/types.sip
+index 239b8c9..81cb283 100644
+--- a/types.sip
++++ b/types.sip
+@@ -331,5 +331,98 @@ template <TYPE>
+ };
+ 
+ 
++/**
++ * Convert QVector< QPair<TYPE, TYPE> >
++ * from and to a Python list of a 2-item tuple
++ */
++
++template<TYPE>
++%MappedType QVector< QPair<TYPE, TYPE> >
++{
++%TypeHeaderCode
++#include <qvector.h>
++#include <qpair.h>
++%End
++
++%ConvertFromTypeCode
++  // Create the list.
++  PyObject *l;
++
++  if ((l = PyList_New(sipCpp->size())) == NULL)
++      return NULL;
++
++  // Set the list elements.
++  for (int i = 0; i < sipCpp->size(); ++i)
++  {
++    QPair<TYPE, TYPE>* p = new QPair<TYPE, TYPE>(sipCpp->at(i));
++    PyObject *ptuple = PyTuple_New(2);
++    PyObject *pfirst;
++    PyObject *psecond;
++
++    TYPE *sfirst = new TYPE(p->first);
++    if ((pfirst = sipConvertFromType(sfirst, sipType_TYPE, sipTransferObj)) == NULL)
++    {
++      Py_DECREF(l);
++      Py_DECREF(ptuple);
++      return NULL;
++    }
++    PyTuple_SET_ITEM(ptuple, 0, pfirst);
++
++    TYPE *ssecond = new TYPE(p->second);
++    if ((psecond = sipConvertFromType(ssecond, sipType_TYPE, sipTransferObj)) == NULL)
++    {
++      Py_DECREF(l);
++      Py_DECREF(ptuple);
++      Py_DECREF(pfirst);
++      return NULL;
++    }
++    PyTuple_SET_ITEM(ptuple, 1, psecond);
++
++    PyList_SET_ITEM(l, i, ptuple);
++  }
++
++  return l;
++%End
++
++%ConvertToTypeCode
++  const sipTypeDef* qpair_type = sipFindType("QPair<TYPE, TYPE>");
++
++  // Check the type if that is all that is required.
++  if (sipIsErr == NULL)
++  {
++    if (!PySequence_Check(sipPy))
++      return 0;
++
++    for (int i = 0; i < PySequence_Size(sipPy); ++i)
++      if (!sipCanConvertToType(PySequence_ITEM(sipPy, i), qpair_type, SIP_NOT_NONE))
++        return 0;
++
++    return 1;
++  }
++
++
++  QVector< QPair<TYPE, TYPE> > *qv = new QVector< QPair<TYPE, TYPE> >;
++
++  for (int i = 0; i < PySequence_Size(sipPy); ++i)
++  {
++    int state;
++    QPair<TYPE, TYPE> * p = reinterpret_cast< QPair<TYPE, TYPE> * >(sipConvertToType(PySequence_ITEM(sipPy, i), qpair_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++
++    if (*sipIsErr)
++    {
++      sipReleaseType(p, qpair_type, state);
++      delete qv;
++      return 0;
++    }
++    qv->append(*p);
++    sipReleaseType(p, qpair_type, state);
++  }
++
++  *sipCppPtr = qv;
++  return sipGetState(sipTransferObj);
++%End
++
++};
++
+ 
+ /* kate: indent-width 4; space-indent on; hl c++; indent-mode cstyle; */
diff --git a/gnu/packages/patches/python-pyflakes-test-location.patch b/gnu/packages/patches/python-pyflakes-test-location.patch
new file mode 100644
index 0000000000..ea2c50c82e
--- /dev/null
+++ b/gnu/packages/patches/python-pyflakes-test-location.patch
@@ -0,0 +1,42 @@
+This patch fixes test failure related to reported source code locations.
+It is a backport of this patch:
+
+  commit 6a5f38b5ab12260fde8a0463acd433bc2d34dbcf
+  Author: Louis Sautier <sautier.louis@gmail.com>
+  Date:   Sat Oct 3 02:37:53 2020 +0200
+
+      Fix tests with Python 3.9, closes #549 (#586)
+
+      Stop allowing failures on Python nightly.
+
+diff --git a/pyflakes/test/test_api.py b/pyflakes/test/test_api.py
+index 128aa69..b728e65 100644
+--- a/pyflakes/test/test_api.py
++++ b/pyflakes/test/test_api.py
+@@ -515,6 +515,8 @@ def foo(bar=baz, bax):
+             if ERROR_HAS_LAST_LINE:
+                 if PYPY and sys.version_info >= (3,):
+                     column = 7
++                elif sys.version_info >= (3, 9):
++                    column = 21
+                 elif sys.version_info >= (3, 8):
+                     column = 9
+                 else:
+@@ -543,6 +545,8 @@ foo(bar=baz, bax)
+             if ERROR_HAS_LAST_LINE:
+                 if PYPY and sys.version_info >= (3,):
+                     column = 12
++                elif sys.version_info >= (3, 9):
++                    column = 17
+                 elif sys.version_info >= (3, 8):
+                     column = 14
+                 else:
+@@ -577,6 +581,8 @@ foo(bar=baz, bax)
+                 position_end = 1
+                 if PYPY:
+                     column = 6
++                elif ver >= (3, 9):
++                    column = 13
+                 else:
+                     column = 7
+                     # Column has been "fixed" since 3.2.4 and 3.3.1
diff --git a/gnu/packages/patches/python-random2-getrandbits-test.patch b/gnu/packages/patches/python-random2-getrandbits-test.patch
new file mode 100644
index 0000000000..4f6c56027a
--- /dev/null
+++ b/gnu/packages/patches/python-random2-getrandbits-test.patch
@@ -0,0 +1,23 @@
+From 1bac6355d9c65de847cc445d782c466778b94fbd Mon Sep 17 00:00:00 2001
+From: "Robert T. McGibbon" <rmcgibbo@gmail.com>
+Date: Sun, 9 May 2021 11:18:23 -0400
+Subject: [PATCH] Update tests for python3.9
+
+---
+ src/tests.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/tests.py b/src/tests.py
+index d918891..4f2c3de 100644
+--- a/src/tests.py
++++ b/src/tests.py
+@@ -448,7 +448,8 @@ def test_genrandbits(self):
+         self.assertRaises(TypeError, self.gen.getrandbits)
+         self.assertRaises(TypeError, self.gen.getrandbits, 'a')
+         self.assertRaises(TypeError, self.gen.getrandbits, 1, 2)
+-        self.assertRaises(ValueError, self.gen.getrandbits, 0)
++        if sys.version_info < (3, 9):
++            self.assertRaises(ValueError, self.gen.getrandbits, 0)
+         self.assertRaises(ValueError, self.gen.getrandbits, -1)
+ 
+     def test_randbelow_logic(self, _log=log, int=int):
diff --git a/gnu/packages/patches/python-testtools.patch b/gnu/packages/patches/python-testtools.patch
deleted file mode 100644
index 42536e50f9..0000000000
--- a/gnu/packages/patches/python-testtools.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-https://github.com/testing-cabal/testtools/commit/29004731f9c480b7c44a9c2605513d50d372898f.patch
-Should be fixed in the next release
-
-From 29004731f9c480b7c44a9c2605513d50d372898f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
-Date: Thu, 17 May 2018 17:52:26 +0200
-Subject: [PATCH] Fix the tests on Python 3.7
-
-Exception's repr got changed not to include trailing comma
-
-Fixes https://github.com/testing-cabal/testtools/issues/270
----
- .travis.yml                                |  1 +
- testtools/tests/matchers/test_exception.py | 11 +++++++++--
- 2 files changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/.travis.yml b/.travis.yml
-index 7f1f4db7..784608e0 100644
---- a/.travis.yml
-+++ b/.travis.yml
-@@ -5,6 +5,7 @@ python:
-   - "3.4"
-   - "3.5"
-   - "3.6"
-+  - "3.7-dev"
-   - "pypy"
- 
- install:
-diff --git a/testtools/tests/matchers/test_exception.py b/testtools/tests/matchers/test_exception.py
-index 6cd80af1..acd39252 100644
---- a/testtools/tests/matchers/test_exception.py
-+++ b/testtools/tests/matchers/test_exception.py
-@@ -32,15 +32,22 @@ class TestMatchesExceptionInstanceInterface(TestCase, TestMatchersInterface):
-     matches_matches = [error_foo]
-     matches_mismatches = [error_bar, error_base_foo]
- 
-+    if sys.version_info >= (3, 7):
-+        # exception's repr has changed
-+        _e = ''
-+    else:
-+        _e = ','
-+
-     str_examples = [
--        ("MatchesException(Exception('foo',))",
-+        ("MatchesException(Exception('foo'%s))" % _e,
-          MatchesException(Exception('foo')))
-         ]
-     describe_examples = [
-         ("%r is not a %r" % (Exception, ValueError),
-          error_base_foo,
-          MatchesException(ValueError("foo"))),
--        ("ValueError('bar',) has different arguments to ValueError('foo',).",
-+        ("ValueError('bar'%s) has different arguments to ValueError('foo'%s)."
-+         % (_e, _e),
-          error_bar,
-          MatchesException(ValueError("foo"))),
-         ]
diff --git a/gnu/packages/patches/python-typing-inspect-fix.patch b/gnu/packages/patches/python-typing-inspect-fix.patch
new file mode 100644
index 0000000000..e6e28981b7
--- /dev/null
+++ b/gnu/packages/patches/python-typing-inspect-fix.patch
@@ -0,0 +1,38 @@
+From 16919e21936179e53df2f376c8b59b5fc44bd2dd Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Fri, 15 Jan 2021 09:22:52 -0500
+Subject: [PATCH] Fix for Python 3.9+.
+
+Fixes <https://github.com/ilevkivskyi/typing_inspect/issues/60>.
+
+Based on an idea in
+https://github.com/ilevkivskyi/typing_inspect/issues/60#issuecomment-683187584.
+---
+ typing_inspect.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/typing_inspect.py b/typing_inspect.py
+index 1ca68ed..31d05ee 100644
+--- a/typing_inspect.py
++++ b/typing_inspect.py
+@@ -21,7 +21,7 @@ LEGACY_TYPING = False
+ 
+ if NEW_TYPING:
+     from typing import (
+-        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, ForwardRef
++        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, _SpecialGenericAlias, ForwardRef
+     )
+     from typing_extensions import Literal
+ else:
+@@ -75,7 +75,7 @@ def is_generic_type(tp):
+     """
+     if NEW_TYPING:
+         return (isinstance(tp, type) and issubclass(tp, Generic) or
+-                isinstance(tp, _GenericAlias) and
++                (isinstance(tp, _GenericAlias) or isinstance(tp, _SpecialGenericAlias)) and
+                 tp.__origin__ not in (Union, tuple, ClassVar, collections.abc.Callable))
+     return (isinstance(tp, GenericMeta) and not
+             isinstance(tp, (CallableMeta, TupleMeta)))
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/python-werkzeug-tests.patch b/gnu/packages/patches/python-werkzeug-tests.patch
new file mode 100644
index 0000000000..4eca53f30c
--- /dev/null
+++ b/gnu/packages/patches/python-werkzeug-tests.patch
@@ -0,0 +1,58 @@
+Do not leave open files behind as this triggers 'ResourceWarning' and leads
+these tests to fail.
+
+--- Werkzeug-1.0.1/tests/test_datastructures.py	2020-03-31 19:48:06.000000000 +0200
++++ Werkzeug-1.0.1/tests/test_datastructures.py	2021-11-21 18:19:11.304369878 +0100
+@@ -1238,9 +1238,10 @@
+     def test_save_to_pathlib_dst(self, tmp_path):
+         src = tmp_path / "src.txt"
+         src.write_text(u"test")
+-        storage = self.storage_class(src.open("rb"))
+-        dst = tmp_path / "dst.txt"
+-        storage.save(dst)
++        with src.open("rb") as input:
++            storage = self.storage_class(input)
++            dst = tmp_path / "dst.txt"
++            storage.save(dst)
+         assert dst.read_text() == "test"
+ 
+     def test_save_to_bytes_io(self):
+@@ -1251,11 +1252,12 @@
+ 
+     def test_save_to_file(self, tmp_path):
+         path = tmp_path / "file.data"
+-        storage = self.storage_class(io.BytesIO(b"one\ntwo"))
+-        with path.open("wb") as dst:
+-            storage.save(dst)
+-        with path.open("rb") as src:
+-            assert src.read() == b"one\ntwo"
++        with io.BytesIO(b"one\ntwo") as input:
++            storage = self.storage_class(input)
++            with path.open("wb") as dst:
++                storage.save(dst)
++            with path.open("rb") as src:
++                assert src.read() == b"one\ntwo"
+ 
+ 
+ @pytest.mark.parametrize("ranges", ([(0, 1), (-5, None)], [(5, None)]))
+--- Werkzeug-1.0.1/tests/test_formparser.py	2020-03-31 19:48:06.000000000 +0200
++++ Werkzeug-1.0.1/tests/test_formparser.py	2021-11-21 22:11:43.654622751 +0100
+@@ -27,7 +27,7 @@
+ from werkzeug.test import create_environ
+ from werkzeug.wrappers import Request
+ from werkzeug.wrappers import Response
+-
++import warnings
+ 
+ @Request.application
+ def form_data_consumer(request):
+@@ -242,6 +244,9 @@
+ 
+ class TestMultiPart(object):
+     def test_basic(self):
++        # Ignore leaked file descriptor of unknown origin.
++        warnings.filterwarnings(action="ignore", message="unclosed", category=ResourceWarning)
++
+         resources = join(dirname(__file__), "multipart")
+         client = Client(form_data_consumer, Response)
+ 
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch b/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
new file mode 100644
index 0000000000..ddaf8e2849
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
@@ -0,0 +1,54 @@
+Fix build with Bison 3.7
+
+https://bugs.gentoo.org/736499
+
+Patch copied from upstream source repository:
+
+https://github.com/qtwebkit/qtwebkit/commit/d92b11fea65364fefa700249bd3340e0cd4c5b31
+
+From d92b11fea65364fefa700249bd3340e0cd4c5b31 Mon Sep 17 00:00:00 2001
+From: Dmitry Shachnev <mitya57@gmail.com>
+Date: Tue, 4 Aug 2020 21:04:06 +0300
+Subject: [PATCH] Let Bison generate the header directly, to fix build with
+ Bison 3.7
+
+Starting with Bison 3.7, the generated C++ file #include's the header
+by default, instead of duplicating it. So we should not delete it.
+
+Remove the code to add #ifdef guards to the header, since Bison adds
+them itself since version 2.6.3.
+---
+ Source/WebCore/css/makegrammar.pl | 21 +--------------------
+ 1 file changed, 1 insertion(+), 20 deletions(-)
+
+diff --git a/Source/WebCore/css/makegrammar.pl b/Source/WebCore/css/makegrammar.pl
+index 5d63b08102eb5..9435701c70612 100644
+--- a/Source/WebCore/css/makegrammar.pl
++++ b/Source/WebCore/css/makegrammar.pl
+@@ -73,25 +73,6 @@
+ }
+ 
+ my $fileBase = File::Spec->join($outputDir, $filename);
+-my @bisonCommand = ($bison, "-d", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp");
++my @bisonCommand = ($bison, "--defines=$fileBase.h", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp");
+ push @bisonCommand, "--no-lines" if $^O eq "MSWin32"; # Work around bug in bison >= 3.0 on Windows where it puts backslashes into #line directives.
+ system(@bisonCommand) == 0 or die;
+-
+-open HEADER, ">$fileBase.h" or die;
+-print HEADER << "EOF";
+-#ifndef CSSGRAMMAR_H
+-#define CSSGRAMMAR_H
+-EOF
+-
+-open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die;
+-while (<HPP>) {
+-    print HEADER;
+-}
+-close HPP;
+-
+-print HEADER "#endif\n";
+-close HEADER;
+-
+-unlink("$fileBase.cpp.h");
+-unlink("$fileBase.hpp");
+-
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch b/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
new file mode 100644
index 0000000000..63840f4bbc
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
@@ -0,0 +1,21 @@
+Fix building with glib 2.68:
+
+https://github.com/qtwebkit/qtwebkit/issues/1057
+
+Patch copied from upstream pull request:
+
+https://github.com/qtwebkit/qtwebkit/pull/1058/commits/5b698ba3faffd4e198a45be9fe74f53307395e4b
+
+diff -aurN qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h
+--- qtwebkit-5.212.0-alpha4/Source/WTF/wtf/glib/GRefPtr.h	2020-03-04 18:16:37.000000000 +0100
++++ qtwebkit-5.212.0-alpha4-mod/Source/WTF/wtf/glib/GRefPtr.h	2021-04-05 06:58:44.763328636 +0200
+@@ -29,9 +29,6 @@
+ #include <wtf/RefPtr.h>
+ #include <algorithm>
+ 
+-extern "C" void g_object_unref(gpointer);
+-extern "C" gpointer g_object_ref_sink(gpointer);
+-
+ namespace WTF {
+ 
+ enum GRefPtrAdoptType { GRefPtrAdopt };
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch b/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
new file mode 100644
index 0000000000..acbfc4c4c8
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
@@ -0,0 +1,152 @@
+Fix building with ICU > 68.
+
+https://bugs.gentoo.org/753260
+
+Patch adapted from Gentoo:
+
+https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=335f29d266c5b169ff1e781f9851a3a203f3198c
+
+From 335f29d266c5b169ff1e781f9851a3a203f3198c Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Fri, 6 Nov 2020 09:22:15 +0100
+Subject: dev-qt/qtwebkit: Fix build with ICU-68
+
+Thanks-to: Lars Wendler <polynomial-c@gentoo.org>
+Closes: https://bugs.gentoo.org/753260
+Package-Manager: Portage-3.0.9, Repoman-3.0.2
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ .../qtwebkit-5.212.0_pre20200309-icu-68.patch      | 120 +++++++++++++++++++++
+ 1 file changed, 120 insertions(+)
+ create mode 100644 dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch
+
+(limited to 'dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-icu-68.patch')
+
+diff --git a/Source/WebCore/platform/text/TextCodecICU.cpp b/Source/WebCore/platform/text/TextCodecICU.cpp
+index dd6ff06..e0f4bd7 100644
+--- a/Source/WebCore/platform/text/TextCodecICU.cpp
++++ b/Source/WebCore/platform/text/TextCodecICU.cpp
+@@ -308,7 +308,7 @@ void TextCodecICU::createICUConverter() const
+     m_converterICU = ucnv_open(m_canonicalConverterName, &err);
+     ASSERT(U_SUCCESS(err));
+     if (m_converterICU)
+-        ucnv_setFallback(m_converterICU, TRUE);
++        ucnv_setFallback(m_converterICU, true);
+ }
+ 
+ int TextCodecICU::decodeToBuffer(UChar* target, UChar* targetLimit, const char*& source, const char* sourceLimit, int32_t* offsets, bool flush, UErrorCode& err)
+diff --git a/Source/WebCore/platform/text/icu/UTextProvider.h b/Source/WebCore/platform/text/icu/UTextProvider.h
+index c254fc4..6d1e1cb 100644
+--- a/Source/WebCore/platform/text/icu/UTextProvider.h
++++ b/Source/WebCore/platform/text/icu/UTextProvider.h
+@@ -80,12 +80,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int
+             // Ensure chunk offset is well formed if computed offset exceeds int32_t range.
+             ASSERT(offset < std::numeric_limits<int32_t>::max());
+             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() ? static_cast<int32_t>(offset) : 0;
+-            isAccessible = TRUE;
++            isAccessible = true;
+             return true;
+         }
+         if (nativeIndex >= nativeLength && text->chunkNativeLimit == nativeLength) {
+             text->chunkOffset = text->chunkLength;
+-            isAccessible = FALSE;
++            isAccessible = false;
+             return true;
+         }
+     } else {
+@@ -94,12 +94,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int
+             // Ensure chunk offset is well formed if computed offset exceeds int32_t range.
+             ASSERT(offset < std::numeric_limits<int32_t>::max());
+             text->chunkOffset = offset < std::numeric_limits<int32_t>::max() ? static_cast<int32_t>(offset) : 0;
+-            isAccessible = TRUE;
++            isAccessible = true;
+             return true;
+         }
+         if (nativeIndex <= 0 && !text->chunkNativeStart) {
+             text->chunkOffset = 0;
+-            isAccessible = FALSE;
++            isAccessible = false;
+             return true;
+         }
+     }
+diff --git a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
+index cd6852c..6a864b1 100644
+--- a/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
++++ b/Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp
+@@ -100,23 +100,23 @@ static UBool uTextLatin1Access(UText* uText, int64_t index, UBool forward)
+         if (index < uText->chunkNativeLimit && index >= uText->chunkNativeStart) {
+             // Already inside the buffer. Set the new offset.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return TRUE;
++            return true;
+         }
+         if (index >= length && uText->chunkNativeLimit == length) {
+             // Off the end of the buffer, but we can't get it.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return FALSE;
++            return false;
+         }
+     } else {
+         if (index <= uText->chunkNativeLimit && index > uText->chunkNativeStart) {
+             // Already inside the buffer. Set the new offset.
+             uText->chunkOffset = static_cast<int32_t>(index - uText->chunkNativeStart);
+-            return TRUE;
++            return true;
+         }
+         if (!index && !uText->chunkNativeStart) {
+             // Already at the beginning; can't go any farther.
+             uText->chunkOffset = 0;
+-            return FALSE;
++            return false;
+         }
+     }
+     
+@@ -144,7 +144,7 @@ static UBool uTextLatin1Access(UText* uText, int64_t index, UBool forward)
+ 
+     uText->nativeIndexingLimit = uText->chunkLength;
+ 
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextLatin1Extract(UText* uText, int64_t start, int64_t limit, UChar* dest, int32_t destCapacity, UErrorCode* status)
+@@ -336,7 +336,7 @@ static int64_t uTextLatin1ContextAwareNativeLength(UText* text)
+ static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward)
+ {
+     if (!text->context)
+-        return FALSE;
++        return false;
+     int64_t nativeLength = uTextLatin1ContextAwareNativeLength(text);
+     UBool isAccessible;
+     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible))
+@@ -356,7 +356,7 @@ static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, UBo
+         ASSERT(newContext == UTextProviderContext::PriorContext);
+         textLatin1ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward);
+     }
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextLatin1ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode)
+diff --git a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
+index 7aaac48..9ae0d36 100644
+--- a/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
++++ b/Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp
+@@ -125,7 +125,7 @@ static inline int64_t uTextUTF16ContextAwareNativeLength(UText* text)
+ static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward)
+ {
+     if (!text->context)
+-        return FALSE;
++        return false;
+     int64_t nativeLength = uTextUTF16ContextAwareNativeLength(text);
+     UBool isAccessible;
+     if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible))
+@@ -145,7 +145,7 @@ static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, UBoo
+         ASSERT(newContext == UTextProviderContext::PriorContext);
+         textUTF16ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward);
+     }
+-    return TRUE;
++    return true;
+ }
+ 
+ static int32_t uTextUTF16ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode)
diff --git a/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch b/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
new file mode 100644
index 0000000000..9f9674de33
--- /dev/null
+++ b/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
@@ -0,0 +1,35 @@
+Fix building with Python 3.9:
+
+https://github.com/qtwebkit/qtwebkit/issues/993
+
+Patch copied from upstream source repository:
+
+https://github.com/qtwebkit/qtwebkit/commit/78360c01c796b6260bf828bc9c8a0ef73c5132fd
+
+From 78360c01c796b6260bf828bc9c8a0ef73c5132fd Mon Sep 17 00:00:00 2001
+From: Konstantin Tokarev <annulen@yandex.ru>
+Date: Wed, 3 Jun 2020 15:01:42 +0300
+Subject: [PATCH] Fix compilation with Python 3.9: avoid passing encoding to
+ json.load()
+
+In Python 2.7 UTF-8 is assumed by default, while in Python 3 this argument
+is not supported.
+
+Change-Id: Ic459d60a6b20bc1838d8771bc36ac41614fe61a9
+---
+ Source/JavaScriptCore/generate-bytecode-files | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files
+index c5dab429c7b0f..af3431275ecf9 100644
+--- a/Source/JavaScriptCore/generate-bytecode-files
++++ b/Source/JavaScriptCore/generate-bytecode-files
+@@ -163,7 +163,7 @@ if __name__ == "__main__":
+         initBytecodesFile = openOrExit(initASMFileName, "w")
+ 
+     try:
+-        bytecodeSections = json.load(bytecodeFile, encoding = "utf-8")
++        bytecodeSections = json.load(bytecodeFile)
+     except:
+         print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info()))
+ 
diff --git a/gnu/packages/patches/range-v3-build-with-gcc10.patch b/gnu/packages/patches/range-v3-build-with-gcc10.patch
new file mode 100644
index 0000000000..a5d5b33523
--- /dev/null
+++ b/gnu/packages/patches/range-v3-build-with-gcc10.patch
@@ -0,0 +1,122 @@
+From 0487cca29e352e8f16bbd91fda38e76e39a0ed28 Mon Sep 17 00:00:00 2001
+From: Louis Dionne <ldionne.2@gmail.com>
+Date: Tue, 15 Jun 2021 14:40:01 -0400
+Subject: [PATCH] Work around broken integration with latest libc++. (#1635)
+
+* Work around broken integration with latest libc++.
+
+In newer versions of libc++, the base template of std::iterator_traits
+provides a member typedef called __primary_template which is an alias
+to the std::iterator_traits specialization itself. This fix works with
+both the old version of libc++ and the new one.
+
+Fixes issue #1633.
+
+* Fix is_std_iterator_traits_specialized_v on MSVC
+
+It used to pretend that std::iterator_traits<T*> is a user-defined
+specialization, which isn't the case. This is due to MSVC's
+iterator_traits<T*> specialization not posing as the base template.
+---
+ include/std/detail/associated_types.hpp | 22 +++++++++++-----
+ test/CMakeLists.txt                     |  1 +
+ test/bug1633.cpp                        | 34 +++++++++++++++++++++++++
+ 3 files changed, 51 insertions(+), 6 deletions(-)
+ create mode 100644 test/bug1633.cpp
+
+diff --git a/include/std/detail/associated_types.hpp b/include/std/detail/associated_types.hpp
+index b642166d4..449a3f91c 100644
+--- a/include/std/detail/associated_types.hpp
++++ b/include/std/detail/associated_types.hpp
+@@ -265,11 +265,22 @@ namespace ranges
+         template<typename I>
+         char is_std_iterator_traits_specialized_impl_(void *);
+ #elif defined(_LIBCPP_VERSION)
+-        template<typename I, bool B>
+-        char (
+-            &is_std_iterator_traits_specialized_impl_(std::__iterator_traits<I, B> *))[2];
++        // In older versions of libc++, the base template inherits from std::__iterator_traits<typename, bool>.
++        template<template<typename, bool> class IteratorTraitsBase, typename I, bool B>
++        char (&libcpp_iterator_traits_base_impl(IteratorTraitsBase<I, B> *))[2];
++        template<template<typename, bool> class IteratorTraitsBase, typename I>
++        char libcpp_iterator_traits_base_impl(void *);
++
++        // In newer versions, the base template has only one template parameter and provides the
++        // __primary_template typedef which aliases the iterator_traits specialization.
++        template<template<typename> class, typename I>
++        char (&libcpp_iterator_traits_base_impl(typename std::iterator_traits<I>::__primary_template *))[2];
++        template<template<typename> class, typename I>
++        char libcpp_iterator_traits_base_impl(void *);
++
+         template<typename I>
+-        char is_std_iterator_traits_specialized_impl_(void *);
++        auto is_std_iterator_traits_specialized_impl_(std::iterator_traits<I>* traits)
++            -> decltype(libcpp_iterator_traits_base_impl<std::__iterator_traits, I>(traits));
+ #elif defined(_MSVC_STL_VERSION)
+         template<typename I>
+         char (&is_std_iterator_traits_specialized_impl_(
+@@ -287,14 +298,13 @@ namespace ranges
+         RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v =
+             1 == sizeof(is_std_iterator_traits_specialized_impl_<I>(
+                      static_cast<std::iterator_traits<I> *>(nullptr)));
+-
++#endif
+         // The standard iterator_traits<T *> specialization(s) do not count
+         // as user-specialized. This will no longer be necessary in C++20.
+         // This helps with `T volatile*` and `void *`.
+         template<typename T>
+         RANGES_INLINE_VAR constexpr bool is_std_iterator_traits_specialized_v<T *> =
+             false;
+-#endif
+     } // namespace detail
+     /// \endcond
+ } // namespace ranges
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index 889f314af..2c2b7c09c 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -19,3 +19,4 @@ rv3_add_test(test.bug474 bug474 bug474.cpp)
+ rv3_add_test(test.bug566 bug566 bug566.cpp)
+ rv3_add_test(test.bug1322 bug1322 bug1322.cpp)
+ rv3_add_test(test.bug1335 bug1335 bug1335.cpp)
++rv3_add_test(test.bug1633 bug1633 bug1633.cpp)
+diff --git a/test/bug1633.cpp b/test/bug1633.cpp
+new file mode 100644
+index 000000000..be52420ad
+--- /dev/null
++++ b/test/bug1633.cpp
+@@ -0,0 +1,34 @@
++// Range v3 library
++//
++//  Use, modification and distribution is subject to the
++//  Boost Software License, Version 1.0. (See accompanying
++//  file LICENSE_1_0.txt or copy at
++//  http://www.boost.org/LICENSE_1_0.txt)
++//
++// Project home: https://github.com/ericniebler/range-v3
++
++#include <cstddef>
++#include <iterator>
++#include <range/v3/iterator.hpp>
++
++struct X { };
++
++namespace std {
++    template<> struct iterator_traits<X> { };
++}
++
++struct Y {
++    using difference_type = std::ptrdiff_t;
++    using value_type = int;
++    using pointer = int*;
++    using reference = int&;
++    using iterator_category = std::forward_iterator_tag;
++};
++
++static_assert(ranges::detail::is_std_iterator_traits_specialized_v<X>, "");
++static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<Y>, "");
++static_assert(!ranges::detail::is_std_iterator_traits_specialized_v<int*>, "");
++
++int main()
++{
++}
diff --git a/gnu/packages/patches/rust-1.19-mrustc.patch b/gnu/packages/patches/rust-1.19-mrustc.patch
deleted file mode 100644
index 261162172e..0000000000
--- a/gnu/packages/patches/rust-1.19-mrustc.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz
-
---- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs
-+++ rustc-1.19.0-src/src/libcore/intrinsics.rs
-@@ -678,5 +678,9 @@
-     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
- 
-+    /// Obtain the length of a slice pointer
-+    #[cfg(rust_compiler="mrustc")]
-+    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
-+
-     /// Gets a static string slice containing the name of a type.
-     pub fn type_name<T: ?Sized>() -> &'static str;
-
---- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs
-+++ rustc-1.19.0-src/src/libcore/slice/mod.rs
-@@ -413,6 +413,8 @@
-     #[inline]
-     fn len(&self) -> usize {
--        unsafe {
--            mem::transmute::<&[T], Repr<T>>(self).len
--        }
-+        #[cfg(not(rust_compiler="mrustc"))]
-+        let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len };
-+        #[cfg(rust_compiler="mrustc")]
-+        let rv = unsafe { ::intrinsics::mrustc_slice_len(self) };
-+        rv
-     }
diff --git a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch b/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
deleted file mode 100644
index a2bad55117..0000000000
--- a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-GDB responds with some overly detailed lines - which makes the tests fail.
-Patch rust to accept those instead.
-See <https://github.com/rust-lang/rust/issues/54178>.
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:25:56.322513658 +0200
-@@ -19,36 +19,36 @@
- 
- // gdb-command:print eight_bytes1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}}
--// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum::Variant1(100)
-+// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant1(100)
- 
- // gdb-command:print four_bytes1
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}}
--// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum::Variant1(101)
-+// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant1(101)
- 
- // gdb-command:print two_bytes1
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}}
--// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum::Variant1(102)
-+// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant1(102)
- 
- // gdb-command:print one_byte1
- // gdbg-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}}
--// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum::Variant1(65)
-+// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant1(65)
- 
- 
- // gdb-command:print eight_bytes2
- // gdbg-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}}
--// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum::Variant2(100)
-+// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant2(100)
- 
- // gdb-command:print four_bytes2
- // gdbg-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}}
--// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum::Variant2(101)
-+// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant2(101)
- 
- // gdb-command:print two_bytes2
- // gdbg-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}}
--// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum::Variant2(102)
-+// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant2(102)
- 
- // gdb-command:print one_byte2
- // gdbg-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}}
--// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum::Variant2(65)
-+// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant2(65)
- 
- // gdb-command:continue
- 
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:27:43.353108111 +0200
-@@ -19,15 +19,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, a = 0, b = 31868, c = 31868, d = 31868, e = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_struct_style_enum::Regular::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
-+// gdbr-check:$1 = generic_struct_style_enum::Regular<u16, u32, i64>::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, a = 0, b = 286331153, c = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_struct_style_enum::Regular::Case2{a: 0, b: 286331153, c: 286331153}
-+// gdbr-check:$2 = generic_struct_style_enum::Regular<i16, u32, i64>::Case2{a: 0, b: 286331153, c: 286331153}
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, a = 0, b = 6438275382588823897}}
--// gdbr-check:$3 = generic_struct_style_enum::Regular::Case3{a: 0, b: 6438275382588823897}
-+// gdbr-check:$3 = generic_struct_style_enum::Regular<u16, i32, u64>::Case3{a: 0, b: 6438275382588823897}
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{a = -1}}
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:28:26.328546298 +0200
-@@ -21,15 +21,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, __0 = 0, __1 = 31868, __2 = 31868, __3 = 31868, __4 = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_tuple_style_enum::Regular::Case1(0, 31868, 31868, 31868, 31868)
-+// gdbr-check:$1 = generic_tuple_style_enum::Regular<u16, u32, u64>::Case1(0, 31868, 31868, 31868, 31868)
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, __0 = 0, __1 = 286331153, __2 = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_tuple_style_enum::Regular::Case2(0, 286331153, 286331153)
-+// gdbr-check:$2 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case2(0, 286331153, 286331153)
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, __0 = 0, __1 = 6438275382588823897}}
--// gdbr-check:$3 = generic_tuple_style_enum::Regular::Case3(0, 6438275382588823897)
-+// gdbr-check:$3 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case3(0, 6438275382588823897)
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{__0 = -1}}
---- orig/rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-09-13 10:24:33.783565071 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-10-26 18:19:20.404564587 +0200
-@@ -17,11 +17,11 @@
- 
- // gdb-command:print first
- // gdbg-check:$1 = {<No data fields>}
--// gdbr-check:$1 = <error reading variable>
-+// gdbr-check:$1 = nil_enum::ANilEnum
- 
- // gdb-command:print second
- // gdbg-check:$2 = {<No data fields>}
--// gdbr-check:$2 = <error reading variable>
-+// gdbr-check:$2 = nil_enum::AnotherNilEnum
- 
- #![allow(unused_variables)]
- #![feature(omit_gdb_pretty_printer_section)]
diff --git a/gnu/packages/patches/rust-1.30-gdb-llvm.patch b/gnu/packages/patches/rust-1.30-gdb-llvm.patch
deleted file mode 100644
index e8f0acc8b4..0000000000
--- a/gnu/packages/patches/rust-1.30-gdb-llvm.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-Tweak some gdb tests which were broken during LLVM upgrades.
-This has been subsequently fixed upstream in later rustc versions,
-but still needed to bootstrap some earlier versions of the compiler.
-
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 12:49:34.055483896 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 13:01:10.915950356 -0800
-@@ -18,15 +18,15 @@
- 
- // gdb-command:print *the_a_ref
- // gdbg-check:$1 = TheA
--// gdbr-check:$1 = borrowed_c_style_enum::ABC::TheA
-+// gdbr-check:$1 = borrowed_c_style_enum::TheA
- 
- // gdb-command:print *the_b_ref
- // gdbg-check:$2 = TheB
--// gdbr-check:$2 = borrowed_c_style_enum::ABC::TheB
-+// gdbr-check:$2 = borrowed_c_style_enum::TheB
- 
- // gdb-command:print *the_c_ref
- // gdbg-check:$3 = TheC
--// gdbr-check:$3 = borrowed_c_style_enum::ABC::TheC
-+// gdbr-check:$3 = borrowed_c_style_enum::TheC
- 
- 
- // === LLDB TESTS ==================================================================================
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 12:49:34.051483727 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 13:02:00.981997525 -0800
-@@ -19,31 +19,31 @@
- 
- // gdb-command:print tuple_interior_padding
- // gdbg-check:$1 = {__0 = 0, __1 = OneHundred}
--// gdbr-check:$1 = (0, c_style_enum_in_composite::AnEnum::OneHundred)
-+// gdbr-check:$1 = (0, c_style_enum_in_composite::OneHundred)
- 
- // gdb-command:print tuple_padding_at_end
- // gdbg-check:$2 = {__0 = {__0 = 1, __1 = OneThousand}, __1 = 2}
--// gdbr-check:$2 = ((1, c_style_enum_in_composite::AnEnum::OneThousand), 2)
-+// gdbr-check:$2 = ((1, c_style_enum_in_composite::OneThousand), 2)
- 
- // gdb-command:print tuple_different_enums
- // gdbg-check:$3 = {__0 = OneThousand, __1 = MountainView, __2 = OneMillion, __3 = Vienna}
--// gdbr-check:$3 = (c_style_enum_in_composite::AnEnum::OneThousand, c_style_enum_in_composite::AnotherEnum::MountainView, c_style_enum_in_composite::AnEnum::OneMillion, c_style_enum_in_composite::AnotherEnum::Vienna)
-+// gdbr-check:$3 = (c_style_enum_in_composite::OneThousand, c_style_enum_in_composite::MountainView, c_style_enum_in_composite::OneMillion, c_style_enum_in_composite::Vienna)
- 
- // gdb-command:print padded_struct
- // gdbg-check:$4 = {a = 3, b = OneMillion, c = 4, d = Toronto, e = 5}
--// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::AnEnum::OneMillion, c: 4, d: c_style_enum_in_composite::AnotherEnum::Toronto, e: 5}
-+// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::OneMillion, c: 4, d: c_style_enum_in_composite::Toronto, e: 5}
- 
- // gdb-command:print packed_struct
- // gdbg-check:$5 = {a = 6, b = OneHundred, c = 7, d = Vienna, e = 8}
--// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::AnEnum::OneHundred, c: 7, d: c_style_enum_in_composite::AnotherEnum::Vienna, e: 8}
-+// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::OneHundred, c: 7, d: c_style_enum_in_composite::Vienna, e: 8}
- 
- // gdb-command:print non_padded_struct
- // gdbg-check:$6 = {a = OneMillion, b = MountainView, c = OneThousand, d = Toronto}
--// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::AnEnum::OneMillion, b: c_style_enum_in_composite::AnotherEnum::MountainView, c: c_style_enum_in_composite::AnEnum::OneThousand, d: c_style_enum_in_composite::AnotherEnum::Toronto}
-+// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::OneMillion, b: c_style_enum_in_composite::MountainView, c: c_style_enum_in_composite::OneThousand, d: c_style_enum_in_composite::Toronto}
- 
- // gdb-command:print struct_with_drop
- // gdbg-check:$7 = {__0 = {a = OneHundred, b = Vienna}, __1 = 9}
--// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::AnEnum::OneHundred, b: c_style_enum_in_composite::AnotherEnum::Vienna}, 9)
-+// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::OneHundred, b: c_style_enum_in_composite::Vienna}, 9)
- 
- // === LLDB TESTS ==================================================================================
- 
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 12:49:34.043483393 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 13:02:17.954691634 -0800
-@@ -27,15 +27,15 @@
- 
- // gdb-command: print c_style_enum1
- // gdbg-check:$3 = CStyleEnumVar1
--// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar1
-+// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar1
- 
- // gdb-command: print c_style_enum2
- // gdbg-check:$4 = CStyleEnumVar2
--// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar2
-+// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar2
- 
- // gdb-command: print c_style_enum3
- // gdbg-check:$5 = CStyleEnumVar3
--// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar3
-+// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar3
- 
- #![allow(dead_code, unused_variables)]
diff --git a/gnu/packages/patches/rust-1.45-linker-locale.patch b/gnu/packages/patches/rust-1.45-linker-locale.patch
deleted file mode 100644
index 40220e8e77..0000000000
--- a/gnu/packages/patches/rust-1.45-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Patch will be included upstream in 1.47: https://github.com/rust-lang/rust/pull/74416
-diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
-index e64aafa599f..12575ac4358 100644
---- a/src/librustc_codegen_ssa/back/linker.rs
-+++ b/src/librustc_codegen_ssa/back/linker.rs
-@@ -28,7 +28,7 @@ use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor};
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-1.48-linker-locale.patch b/gnu/packages/patches/rust-1.48-linker-locale.patch
deleted file mode 100644
index d06dcbe682..0000000000
--- a/gnu/packages/patches/rust-1.48-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-https://github.com/rust-lang/rust/pull/74416
-diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs
-index 3df956c465e..f45fee45be4 100644
---- a/compiler/rustc_codegen_ssa/src/back/linker.rs
-+++ b/compiler/rustc_codegen_ssa/src/back/linker.rs
-@@ -28,7 +28,7 @@
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-bootstrap-stage0-test.patch b/gnu/packages/patches/rust-bootstrap-stage0-test.patch
deleted file mode 100644
index e8484903e5..0000000000
--- a/gnu/packages/patches/rust-bootstrap-stage0-test.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Bootstrap tests failed with local stage0 cargo and rustc
-Backported changes from https://github.com/rust-lang/rust/pull/51977
-
-From 0834d9d771e912f51deca6c25699e44734624546 Mon Sep 17 00:00:00 2001
-From: Nikolai Merinov <nikolai.merinov@member.fsf.org>
-Date: Mon, 2 Jul 2018 01:45:35 +0500
-Subject: [PATCH] bootstrap: tests should use rustc from config.toml
-
-Tests should always use "rustc" and "cargo" from config.toml instead
-of assuming that stage0 binaries was downloaded to build directory.
----
- src/bootstrap/bootstrap.py | 2 ++
- src/bootstrap/config.rs    | 6 ++----
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
-index 487440becf..1701f7b83a 100644
---- a/src/bootstrap/bootstrap.py
-+++ b/src/bootstrap/bootstrap.py
-@@ -788,6 +788,8 @@ def bootstrap(help_triggered):
-     env["BOOTSTRAP_PARENT_ID"] = str(os.getpid())
-     env["BOOTSTRAP_PYTHON"] = sys.executable
-     env["BUILD_DIR"] = build.build_dir
-+    env["CARGO"] = build.cargo()
-+    env["RUSTC"] = build.rustc()
-     run(args, env=env, verbose=build.verbose)
- 
- 
-diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
-index 6dd6291be2..d1a0deb583 100644
---- a/src/bootstrap/config.rs
-+++ b/src/bootstrap/config.rs
-@@ -23,7 +23,6 @@ use std::cmp;
- 
- use num_cpus;
- use toml;
--use util::exe;
- use cache::{INTERNER, Interned};
- use flags::Flags;
- pub use flags::Subcommand;
-@@ -362,9 +361,8 @@ impl Config {
-         config.src = Config::path_from_python("SRC");
-         config.out = Config::path_from_python("BUILD_DIR");
- 
--        let stage0_root = config.out.join(&config.build).join("stage0/bin");
--        config.initial_rustc = stage0_root.join(exe("rustc", &config.build));
--        config.initial_cargo = stage0_root.join(exe("cargo", &config.build));
-+        config.initial_rustc = Config::path_from_python("RUSTC");
-+        config.initial_cargo = Config::path_from_python("CARGO");
- 
-         config
-     }
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/rust-reproducible-builds.patch b/gnu/packages/patches/rust-reproducible-builds.patch
deleted file mode 100644
index ef7bf53b5d..0000000000
--- a/gnu/packages/patches/rust-reproducible-builds.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From b9ca108fcae2b738ca3f0c88c84ae5dc5a6f843f Mon Sep 17 00:00:00 2001
-From: Tim Ryan <id@timryan.org>
-Date: Mon, 14 May 2018 06:22:21 -0400
-Subject: [PATCH] Support reproducible builds by forcing window.search to use
- stable key ordering. (#692)
-See <https://github.com/rust-lang-nursery/mdBook/pull/692>
----
- src/vendor/mdbook/src/renderer/html_handlebars/search.rs | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/vendor/mdbook/src/renderer/html_handlebars/search.rs b/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-index d49772f8b..1ee66a511 100644
---- a/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-+++ b/src/vendor/mdbook/src/renderer/html_handlebars/search.rs
-@@ -205,6 +205,10 @@ fn write_to_js(index: Index, search_config: &Search) -> Result<String> {
-         searchoptions,
-         index,
-     };
-+
-+    // By converting to serde_json::Value as an intermediary, we use a
-+    // BTreeMap internally and can force a stable ordering of map keys.
-+    let json_contents = serde_json::to_value(&json_contents)?;
-     let json_contents = serde_json::to_string(&json_contents)?;
- 
-     Ok(format!("window.search = {};", json_contents))
diff --git a/gnu/packages/patches/rustc-1.39.0-src.patch b/gnu/packages/patches/rustc-1.39.0-src.patch
new file mode 100644
index 0000000000..7859bd44d5
--- /dev/null
+++ b/gnu/packages/patches/rustc-1.39.0-src.patch
@@ -0,0 +1,99 @@
+# This modified patch is to disable the hunk applying to LLVM, unbundled in Guix.
+
+# Add mrustc slice length intrinsics
+--- src/libcore/intrinsics.rs
++++ src/libcore/intrinsics.rs
+@@ -685,4 +685,8 @@
+     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
+ 
++    /// Obtain the length of a slice pointer
++    #[cfg(rust_compiler="mrustc")]
++    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
++
+     /// Gets a static string slice containing the name of a type.
+     pub fn type_name<T: ?Sized>() -> &'static str;
+
+--- src/libcore/slice/mod.rs
++++ src/libcore/slice/mod.rs
+@@ -68,5 +68,8 @@
+     pub const fn len(&self) -> usize {
+-        unsafe {
+-            crate::ptr::Repr { rust: self }.raw.len
+-        }
++        #[cfg(not(rust_compiler="mrustc"))]
++        #[cfg_attr(not(bootstrap), allow_internal_unstable(const_fn_union))]
++        const fn len_inner<T>(s: &[T]) -> usize { unsafe { crate::ptr::Repr { rust: s }.raw.len } };
++        #[cfg(rust_compiler="mrustc")]
++        const fn len_inner<T>(s: &[T]) -> usize { unsafe { crate::intrinsics::mrustc_slice_len(s) } }
++        len_inner(self)
+     }
+#
+# Static-link rustc_codegen_llvm so the generated rustc is standalone
+# > Note: Interacts with `rustc-1.39.0-overrides.toml`
+#
+--- src/librustc_interface/util.rs
++++ src/librustc_interface/util.rs
+@@ -421,2 +421,4 @@
+ pub fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box<dyn CodegenBackend> {
++    #[cfg(rust_compiler="mrustc")]
++    { if(backend_name == "llvm") { extern "Rust" { fn __rustc_codegen_backend() -> Box<dyn CodegenBackend>; } return || unsafe { __rustc_codegen_backend() } } }
+     // For now we only allow this function to be called once as it'll dlopen a
+# Disable most architecture intrinsics
+--- src/stdarch/crates/std_detect/src/detect/mod.rs
++++ src/stdarch/crates/std_detect/src/detect/mod.rs
+@@ -74,4 +74,7 @@
+         // this run-time detection logic is never called.
+         #[path = "os/other.rs"]
+         mod os;
++    } else if #[cfg(rust_compiler="mrustc")] {
++        #[path = "os/other.rs"]
++        mod os;
+     } else if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
+--- vendor/ppv-lite86/src/lib.rs
++++ vendor/ppv-lite86/src/lib.rs
+@@ -12,10 +12,10 @@
+-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
++#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))]
+ pub mod x86_64;
+-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
++#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))]
+ use self::x86_64 as arch;
+
+-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
++#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
+ pub mod generic;
+-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
++#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
+ use self::generic as arch;
+
+# diff --git a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# index da9d9d5bfdc0..3d47471f0ef0 100644
+# --- src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# +++ src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+# @@ -16,6 +16,8 @@
+#  #include "llvm/Demangle/DemangleConfig.h"
+#  #include "llvm/Demangle/StringView.h"
+#  #include <array>
+# +#include <cstdint>
+# +#include <string>
+
+#  namespace llvm {
+#  namespace itanium_demangle {
+##
+## gcc (used by mrustc) has 16-byte uint128_t alignment, while rustc uses 8
+##
+#--- src/libsyntax/ast.rs
+#+++ src/libsyntax/ast.rs
+#@@ -986,2 +986,2 @@
+#-#[cfg(target_arch = "x86_64")]
+#-static_assert_size!(Expr, 96);
+#+//#[cfg(target_arch = "x86_64")]
+#+//static_assert_size!(Expr, 96);
+#--- src/librustc/ty/sty.rs
+#+++ src/librustc/ty/sty.rs
+#@@ -2258,2 +2258,2 @@
+#-#[cfg(target_arch = "x86_64")]
+#-static_assert_size!(Const<'_>, 40);
+#+//#[cfg(target_arch = "x86_64")]
+#+//static_assert_size!(Const<'_>, 40);
+
diff --git a/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch b/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch
deleted file mode 100644
index 6ec1b8f21f..0000000000
--- a/gnu/packages/patches/scalapack-blacs-mpi-deprecations.patch
+++ /dev/null
@@ -1,170 +0,0 @@
-From f11c3f094ed5ca727ec819983425b6641db8227c Mon Sep 17 00:00:00 2001
-From: Eric Bavier <bavier@member.fsf.org>
-Date: Wed, 13 Feb 2019 09:32:11 -0600
-Subject: [PATCH] BLACS: Remove use of long-deprecated MPI1 functions.
-
-* BLACS/SRC/blacs_get_.c: 'MPI_Attr_get' -> 'MPI_Comm_get_attr'.
-* BLACS/SRC/cgamn2d_.c, BLACS/SRC/cgamx2d_.c, BLACS/SRC/dgamn2d_.c,
-BLACS/SRC/dgamx2d_.c, BLACS/SRC/igamn2d_.c, BLACS/SRC/igamx2d_.c,
-BLACS/SRC/sgamn2d_.c, BLACS/SRC/sgamx2d_.c, BLACS/SRC/zgamn2d_.c,
-BLACS/SRC/zgamx2d_.c: 'MPI_Type_struct' -> 'MPI_Type_create_struct'.
----
- BLACS/SRC/blacs_get_.c | 2 +-
- BLACS/SRC/cgamn2d_.c   | 2 +-
- BLACS/SRC/cgamx2d_.c   | 2 +-
- BLACS/SRC/dgamn2d_.c   | 2 +-
- BLACS/SRC/dgamx2d_.c   | 2 +-
- BLACS/SRC/igamn2d_.c   | 2 +-
- BLACS/SRC/igamx2d_.c   | 2 +-
- BLACS/SRC/sgamn2d_.c   | 2 +-
- BLACS/SRC/sgamx2d_.c   | 2 +-
- BLACS/SRC/zgamn2d_.c   | 2 +-
- BLACS/SRC/zgamx2d_.c   | 2 +-
- 11 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/BLACS/SRC/blacs_get_.c b/BLACS/SRC/blacs_get_.c
-index e979767..d4b04cf 100644
---- a/BLACS/SRC/blacs_get_.c
-+++ b/BLACS/SRC/blacs_get_.c
-@@ -23,7 +23,7 @@ F_VOID_FUNC blacs_get_(int *ConTxt, int *what, int *val)
-    case SGET_MSGIDS:
-       if (BI_COMM_WORLD == NULL) Cblacs_pinfo(val, &val[1]);
-       iptr = &val[1];
--      ierr=MPI_Attr_get(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-+      ierr=MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-       val[0] = 0;
-       val[1] = *iptr;
-       break;
-diff --git a/BLACS/SRC/cgamn2d_.c b/BLACS/SRC/cgamn2d_.c
-index 2db6ccb..6958f32 100644
---- a/BLACS/SRC/cgamn2d_.c
-+++ b/BLACS/SRC/cgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/cgamx2d_.c b/BLACS/SRC/cgamx2d_.c
-index 707c0b6..f802d01 100644
---- a/BLACS/SRC/cgamx2d_.c
-+++ b/BLACS/SRC/cgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamn2d_.c b/BLACS/SRC/dgamn2d_.c
-index dff23b4..a2627ac 100644
---- a/BLACS/SRC/dgamn2d_.c
-+++ b/BLACS/SRC/dgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamx2d_.c b/BLACS/SRC/dgamx2d_.c
-index a51f731..2a644d0 100644
---- a/BLACS/SRC/dgamx2d_.c
-+++ b/BLACS/SRC/dgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamn2d_.c b/BLACS/SRC/igamn2d_.c
-index 16bc003..f6a7859 100644
---- a/BLACS/SRC/igamn2d_.c
-+++ b/BLACS/SRC/igamn2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamx2d_.c b/BLACS/SRC/igamx2d_.c
-index 8165cbe..a7cfcc6 100644
---- a/BLACS/SRC/igamx2d_.c
-+++ b/BLACS/SRC/igamx2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamn2d_.c b/BLACS/SRC/sgamn2d_.c
-index d6c95e5..569c797 100644
---- a/BLACS/SRC/sgamn2d_.c
-+++ b/BLACS/SRC/sgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamx2d_.c b/BLACS/SRC/sgamx2d_.c
-index 4b0af6f..8897ece 100644
---- a/BLACS/SRC/sgamx2d_.c
-+++ b/BLACS/SRC/sgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamn2d_.c b/BLACS/SRC/zgamn2d_.c
-index 9de2b23..37897df 100644
---- a/BLACS/SRC/zgamn2d_.c
-+++ b/BLACS/SRC/zgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamx2d_.c b/BLACS/SRC/zgamx2d_.c
-index 414c381..0e9d474 100644
---- a/BLACS/SRC/zgamx2d_.c
-+++ b/BLACS/SRC/zgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/scalapack-gcc-10-compilation.patch b/gnu/packages/patches/scalapack-gcc-10-compilation.patch
new file mode 100644
index 0000000000..cd6fb61cdf
--- /dev/null
+++ b/gnu/packages/patches/scalapack-gcc-10-compilation.patch
@@ -0,0 +1,5684 @@
+Fix Scalapack compilation with GCC 10+.
+
+Patches from <https://github.com/Reference-ScaLAPACK/scalapack/pull/26>.
+
+From 9c909f06cf51a3d00252323ce52aba46cc64ab41 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tiziano=20M=C3=BCller?= <tiziano.mueller@chem.uzh.ch>
+Date: Thu, 25 Jun 2020 18:36:46 +0200
+Subject: [PATCH] fix argument mismatches in the SRC
+
+---
+ SRC/pclarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pclarfc.f  |  88 ++++++++++++++++++-------------------
+ SRC/pclarz.f   | 111 ++++++++++++++++++++++++-----------------------
+ SRC/pclarzc.f  | 115 +++++++++++++++++++++++++------------------------
+ SRC/pclattrs.f |  55 +++++++++++------------
+ SRC/pclawil.f  |  53 +++++++++++------------
+ SRC/pctrevc.f  |  20 +++++----
+ SRC/pdhseqr.f  |  36 ++++++++--------
+ SRC/pdlacon.f  |  36 ++++++++--------
+ SRC/pdlarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pdlarz.f   | 100 +++++++++++++++++++++---------------------
+ SRC/pdlawil.f  |  48 ++++++++++-----------
+ SRC/pdstebz.f  |  20 ++++-----
+ SRC/pdtrord.f  |  43 +++++++++++-------
+ SRC/pdtrsen.f  |  24 ++++++-----
+ SRC/pshseqr.f  |  36 ++++++++--------
+ SRC/pslacon.f  |  36 +++++++++-------
+ SRC/pslarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pslarz.f   | 100 +++++++++++++++++++++---------------------
+ SRC/pslawil.f  |  50 +++++++++++----------
+ SRC/psstebz.f  |  20 ++++-----
+ SRC/pstrord.f  |  45 +++++++++++--------
+ SRC/pstrsen.f  |  22 ++++++----
+ SRC/pzlarf.f   |  80 +++++++++++++++++-----------------
+ SRC/pzlarfc.f  |  88 ++++++++++++++++++-------------------
+ SRC/pzlarz.f   | 103 +++++++++++++++++++++----------------------
+ SRC/pzlarzc.f  | 111 ++++++++++++++++++++++++-----------------------
+ SRC/pzlattrs.f |  55 +++++++++++------------
+ SRC/pzlawil.f  |  49 +++++++++++----------
+ SRC/pztrevc.f  |  20 +++++----
+ 30 files changed, 927 insertions(+), 877 deletions(-)
+
+diff --git a/SRC/pclarf.f b/SRC/pclarf.f
+index f941e46..371f710 100644
+--- a/SRC/pclarf.f
++++ b/SRC/pclarf.f
+@@ -242,7 +242,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CCOPY, CGEBR2D, CGEBS2D,
+@@ -336,7 +336,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -345,7 +345,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -363,8 +363,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -379,9 +379,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -398,7 +398,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -441,7 +441,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -471,7 +471,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -480,7 +480,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -547,8 +547,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -577,9 +577,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -597,7 +597,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC ),
+      $                                 LDC )
+                      END IF
+@@ -621,9 +621,9 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -641,8 +641,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -667,7 +667,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -676,7 +676,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -694,8 +694,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -720,18 +720,18 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -750,8 +750,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -770,7 +770,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -779,7 +779,7 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -797,8 +797,8 @@ SUBROUTINE PCLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarfc.f b/SRC/pclarfc.f
+index d6a2d3b..f84c493 100644
+--- a/SRC/pclarfc.f
++++ b/SRC/pclarfc.f
+@@ -242,7 +242,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CCOPY, CGEBR2D, CGEBS2D,
+@@ -336,17 +336,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -364,8 +364,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -380,9 +380,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -399,7 +399,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -422,9 +422,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -442,7 +442,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -472,17 +472,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -545,8 +545,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -575,9 +575,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -594,7 +594,7 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -617,9 +617,9 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -637,8 +637,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -663,17 +663,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -691,8 +691,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -716,18 +716,18 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -745,8 +745,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -765,17 +765,17 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -793,8 +793,8 @@ SUBROUTINE PCLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL CGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarz.f b/SRC/pclarz.f
+index 9ba730c..673860a 100644
+--- a/SRC/pclarz.f
++++ b/SRC/pclarz.f
+@@ -251,7 +251,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CAXPY, CCOPY, CGEBR2D,
+@@ -370,7 +370,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -379,7 +379,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -402,9 +402,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -420,9 +420,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -445,11 +445,11 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -471,9 +471,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -496,10 +496,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -530,16 +530,16 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+-                  CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+-     $                          1, IVROW, MYCOL )
++                  CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
++     $                          TAULOC( 1 ), 1, IVROW, MYCOL )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -562,10 +562,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -580,18 +580,18 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -614,10 +614,10 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -646,9 +646,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -669,13 +669,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL CGERC( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                 LDC )
+                      END IF
+@@ -699,9 +699,9 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,16 +752,16 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+-                     CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+-     $                             1, MYROW, IVCOL )
++                     CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1,
++     $                             TAULOC( 1 ), 1, MYROW, IVCOL )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -779,13 +780,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -809,18 +810,18 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -840,13 +841,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -865,7 +866,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -874,7 +875,7 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -893,13 +894,13 @@ SUBROUTINE PCLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclarzc.f b/SRC/pclarzc.f
+index f1bc21e..b6d3b6d 100644
+--- a/SRC/pclarzc.f
++++ b/SRC/pclarzc.f
+@@ -251,7 +251,7 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX            TAULOC
++      COMPLEX            TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, CAXPY, CCOPY, CGEBR2D,
+@@ -370,17 +370,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -403,9 +403,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -446,11 +446,11 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -472,9 +472,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -497,10 +497,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -531,17 +531,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL CGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -564,10 +564,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -582,18 +582,18 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL CGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -616,10 +616,10 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL CAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL CAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL CGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -648,9 +648,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = CONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -671,12 +671,12 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK, 1,
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -699,9 +699,9 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL CGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = CONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL CGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,17 +752,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = CONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = CONJG( TAULOC )
++                     TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -780,13 +781,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -810,18 +811,18 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL CGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = CONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = CONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL CGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = CONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = CONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -841,13 +842,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -866,17 +867,17 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL CGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = CONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = CONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+-                  CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+-     $                          MYROW, IVCOL )
+-                  TAULOC = CONJG( TAULOC )
++                  CALL CGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1,
++     $                          TAULOC( 1 ), 1, MYROW, IVCOL )
++                  TAULOC( 1 ) = CONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -895,13 +896,13 @@ SUBROUTINE PCLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL CAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL CAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL CGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL CGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pclattrs.f b/SRC/pclattrs.f
+index c744aea..0d12a8b 100644
+--- a/SRC/pclattrs.f
++++ b/SRC/pclattrs.f
+@@ -271,7 +271,8 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                   JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
+      $                   NPCOL, NPROW, RSRC
+       REAL               BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
+-     $                   XBND, XJ, XMAX
++     $                   XBND, XJ
++      REAL               XMAX( 1 )
+       COMPLEX            CSUMJ, TJJS, USCAL, XJTMP, ZDUM
+ *     ..
+ *     .. External Functions ..
+@@ -391,11 +392,11 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *     Compute a bound on the computed solution vector to see if the
+ *     Level 2 PBLAS routine PCTRSV can be used.
+ *
+-      XMAX = ZERO
++      XMAX( 1 ) = ZERO
+       CALL PCAMAX( N, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-      XMAX = CABS2( ZDUM )
++      XMAX( 1 ) = CABS2( ZDUM )
+       CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1, -1, -1 )
+-      XBND = XMAX
++      XBND = XMAX( 1 )
+ *
+       IF( NOTRAN ) THEN
+ *
+@@ -590,16 +591,16 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+ *        Use a Level 1 PBLAS solve, scaling intermediate results.
+ *
+-         IF( XMAX.GT.BIGNUM*HALF ) THEN
++         IF( XMAX( 1 ).GT.BIGNUM*HALF ) THEN
+ *
+ *           Scale X so that its components are less than or equal to
+ *           BIGNUM in absolute value.
+ *
+-            SCALE = ( BIGNUM*HALF ) / XMAX
++            SCALE = ( BIGNUM*HALF ) / XMAX( 1 )
+             CALL PCSSCAL( N, SCALE, X, IX, JX, DESCX, 1 )
+-            XMAX = BIGNUM
++            XMAX( 1 ) = BIGNUM
+          ELSE
+-            XMAX = XMAX*TWO
++            XMAX( 1 ) = XMAX( 1 )*TWO
+          END IF
+ *
+          IF( NOTRAN ) THEN
+@@ -651,7 +652,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+                   END IF
+ *                 X( J ) = CLADIV( X( J ), TJJS )
+@@ -682,7 +683,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+ *                 X( J ) = CLADIV( X( J ), TJJS )
+ *                 XJ = CABS1( X( J ) )
+@@ -706,7 +707,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   XJTMP = CONE
+                   XJ = ONE
+                   SCALE = ZERO
+-                  XMAX = ZERO
++                  XMAX( 1 ) = ZERO
+                END IF
+    90          CONTINUE
+ *
+@@ -715,7 +716,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+                IF( XJ.GT.ONE ) THEN
+                   REC = ONE / XJ
+-                  IF( CNORM( J ).GT.( BIGNUM-XMAX )*REC ) THEN
++                  IF( CNORM( J ).GT.( BIGNUM-XMAX( 1 ) )*REC ) THEN
+ *
+ *                    Scale x by 1/(2*abs(x(j))).
+ *
+@@ -724,7 +725,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+                   END IF
+-               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX ) ) THEN
++               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX( 1 ) ) ) THEN
+ *
+ *                 Scale x by 1/2.
+ *
+@@ -743,7 +744,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCAXPY( J-1, ZDUM, A, IA, JA+J-1, DESCA, 1, X,
+      $                            IX, JX, DESCX, 1 )
+                      CALL PCAMAX( J-1, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -757,7 +758,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCAXPY( N-J, ZDUM, A, IA+J, JA+J-1, DESCA, 1,
+      $                            X, IX+J, JX, DESCX, 1 )
+                      CALL PCAMAX( N-J, ZDUM, I, X, IX+J, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL SGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -785,7 +786,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = CMPLX( TSCAL )
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -820,7 +821,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -924,7 +925,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+@@ -945,7 +946,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+                      XJTMP = CLADIV( XJTMP, TJJS )
+@@ -966,7 +967,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      END IF
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   110             CONTINUE
+                ELSE
+@@ -981,7 +982,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      X( IROWX ) = XJTMP
+                   END IF
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   120       CONTINUE
+ *
+          ELSE
+@@ -1004,7 +1005,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = TSCAL
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -1039,7 +1040,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -1145,7 +1146,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+@@ -1164,7 +1165,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = CLADIV( X( J ), TJJS )
+                      XJTMP = CLADIV( XJTMP, TJJS )
+@@ -1181,7 +1182,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                  X( IROWX ) = CONE
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   130             CONTINUE
+                ELSE
+@@ -1194,7 +1195,7 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   IF( ( MYROW.EQ.ITMP1X ) .AND. ( MYCOL.EQ.ITMP2X ) )
+      $               X( IROWX ) = XJTMP
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   140       CONTINUE
+          END IF
+          SCALE = SCALE / TSCAL
+diff --git a/SRC/pclawil.f b/SRC/pclawil.f
+index 24a49b9..b33b3b1 100644
+--- a/SRC/pclawil.f
++++ b/SRC/pclawil.f
+@@ -124,11 +124,10 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+       REAL               S
+-      COMPLEX            CDUM, H11, H12, H21, H22, H33S, H44S, V1, V2,
+-     $                   V3
++      COMPLEX            CDUM, H22, H33S, H44S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      COMPLEX            BUF( 4 )
++      COMPLEX            BUF( 4 ), V3( 1 ), H11( 1 ), H12( 1 ), H21( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, CGERV2D, CGESD2D
+@@ -181,18 +180,18 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -223,22 +222,22 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, RSRC, JSRC )
+             IF( NUM.GT.1 ) THEN
+-               CALL CGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
++               CALL CGERV2D( CONTXT, 1, 1, H11( 1 ), 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL CGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+-               CALL CGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
++               CALL CGERV2D( CONTXT, 1, 1, H21( 1 ), 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -247,24 +246,24 @@ SUBROUTINE PCLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pctrevc.f b/SRC/pctrevc.f
+index d0a3043..bf6c52b 100644
+--- a/SRC/pctrevc.f
++++ b/SRC/pctrevc.f
+@@ -218,11 +218,12 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $                   ITMP2, J, K, KI, LDT, LDVL, LDVR, LDW, MB,
+      $                   MYCOL, MYROW, NB, NPCOL, NPROW, RSRC
+       REAL               SELF
+-      REAL               OVFL, REMAXD, SCALE, SMIN, SMLNUM, ULP, UNFL
++      REAL               OVFL, REMAXD, SCALE, SMLNUM, ULP, UNFL
+       COMPLEX            CDUM, REMAXC, SHIFT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCW( DLEN_ )
++      REAL               SMIN( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -355,13 +356,13 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 70
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL SGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL CGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -396,8 +397,9 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN ) THEN
+-                     T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $            THEN
++                     T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN( 1 ) )
+                   END IF
+                END IF
+    50       CONTINUE
+@@ -467,13 +469,13 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 110
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL SGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL CGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -507,8 +509,8 @@ SUBROUTINE PCTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN )
+-     $               T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $               T( ( ICOL-1 )*LDT+IROW ) = CMPLX( SMIN( 1 ) )
+                END IF
+    90       CONTINUE
+ *
+diff --git a/SRC/pdhseqr.f b/SRC/pdhseqr.f
+index ffc3652..6e0f751 100644
+--- a/SRC/pdhseqr.f
++++ b/SRC/pdhseqr.f
+@@ -259,11 +259,12 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+      $                   HRSRC4, HCSRC4, LIWKOPT
+       LOGICAL            INITZ, LQUERY, WANTT, WANTZ, PAIR, BORDER
+       DOUBLE PRECISION   TMP1, TMP2, TMP3, TMP4, DUM1, DUM2, DUM3,
+-     $                   DUM4, ELEM1, ELEM2, ELEM3, ELEM4,
++     $                   DUM4, ELEM1, ELEM4,
+      $                   CS, SN, ELEM5, TMP, LWKOPT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCH2( DLEN_ )
++      DOUBLE PRECISION   ELEM2( 1 ), ELEM3( 1 )
+ *     ..
+ *     .. External Functions ..
+       INTEGER            PILAENVX, NUMROC, ICEIL
+@@ -566,28 +567,28 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                   IF( MYROW.EQ.HRSRC1 .AND. MYCOL.EQ.HCSRC1 ) THEN
+                      ELEM1 = H((JLOC1-1)*LLDH+ILOC1)
+                      IF( K.LT.N ) THEN
+-                        ELEM3 = H((JLOC1-1)*LLDH+ILOC1+1)
++                        ELEM3( 1 ) = H((JLOC1-1)*LLDH+ILOC1+1)
+                      ELSE
+-                        ELEM3 = ZERO
++                        ELEM3( 1 ) = ZERO
+                      END IF
+-                     IF( ELEM3.NE.ZERO ) THEN
+-                        ELEM2 = H((JLOC1)*LLDH+ILOC1)
++                     IF( ELEM3( 1 ).NE.ZERO ) THEN
++                        ELEM2( 1 ) = H((JLOC1)*LLDH+ILOC1)
+                         ELEM4 = H((JLOC1)*LLDH+ILOC1+1)
+-                        CALL DLANV2( ELEM1, ELEM2, ELEM3, ELEM4,
+-     $                       WR( K ), WI( K ), WR( K+1 ), WI( K+1 ),
+-     $                       SN, CS )
++                        CALL DLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ),
++     $                       ELEM4, WR( K ), WI( K ), WR( K+1 ),
++     $                       WI( K+1 ), SN, CS )
+                         PAIR = .TRUE.
+                      ELSE
+                         IF( K.GT.1 ) THEN
+                            TMP = H((JLOC1-2)*LLDH+ILOC1)
+                            IF( TMP.NE.ZERO ) THEN
+                               ELEM1 = H((JLOC1-2)*LLDH+ILOC1-1)
+-                              ELEM2 = H((JLOC1-1)*LLDH+ILOC1-1)
+-                              ELEM3 = H((JLOC1-2)*LLDH+ILOC1)
++                              ELEM2( 1 ) = H((JLOC1-1)*LLDH+ILOC1-1)
++                              ELEM3( 1 ) = H((JLOC1-2)*LLDH+ILOC1)
+                               ELEM4 = H((JLOC1-1)*LLDH+ILOC1)
+-                              CALL DLANV2( ELEM1, ELEM2, ELEM3,
+-     $                             ELEM4, WR( K-1 ), WI( K-1 ),
+-     $                             WR( K ), WI( K ), SN, CS )
++                              CALL DLANV2( ELEM1, ELEM2( 1 ),
++     $                             ELEM3( 1 ), ELEM4, WR( K-1 ),
++     $                             WI( K-1 ), WR( K ), WI( K ), SN, CS )
+                            ELSE
+                               WR( K ) = ELEM1
+                            END IF
+@@ -620,12 +621,12 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+             CALL INFOG2L( K+1, K+1, DESCH, NPROW, NPCOL, MYROW, MYCOL,
+      $           ILOC4, JLOC4, HRSRC4, HCSRC4 )
+             IF( MYROW.EQ.HRSRC2 .AND. MYCOL.EQ.HCSRC2 ) THEN
+-               ELEM2 = H((JLOC2-1)*LLDH+ILOC2)
++               ELEM2( 1 ) = H((JLOC2-1)*LLDH+ILOC2)
+                IF( HRSRC1.NE.HRSRC2 .OR. HCSRC1.NE.HCSRC2 )
+      $            CALL DGESD2D( ICTXT, 1, 1, ELEM2, 1, HRSRC1, HCSRC1)
+             END IF
+             IF( MYROW.EQ.HRSRC3 .AND. MYCOL.EQ.HCSRC3 ) THEN
+-               ELEM3 = H((JLOC3-1)*LLDH+ILOC3)
++               ELEM3( 1 ) = H((JLOC3-1)*LLDH+ILOC3)
+                IF( HRSRC1.NE.HRSRC3 .OR. HCSRC1.NE.HCSRC3 )
+      $            CALL DGESD2D( ICTXT, 1, 1, ELEM3, 1, HRSRC1, HCSRC1)
+             END IF
+@@ -651,8 +652,9 @@ SUBROUTINE PDHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                ELEM5 = WORK(2)
+                IF( ELEM5.EQ.ZERO ) THEN
+                   IF( WR( K ).EQ.ZERO .AND. WI( K ).EQ.ZERO ) THEN
+-                     CALL DLANV2( ELEM1, ELEM2, ELEM3, ELEM4, WR( K ),
+-     $                    WI( K ), WR( K+1 ), WI( K+1 ), SN, CS )
++                     CALL DLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ), ELEM4,
++     $                    WR( K ), WI( K ), WR( K+1 ), WI( K+1 ), SN,
++     $                    CS )
+                   ELSEIF( WR( K+1 ).EQ.ZERO .AND. WI( K+1 ).EQ.ZERO )
+      $                 THEN
+                      WR( K+1 ) = ELEM4
+diff --git a/SRC/pdlacon.f b/SRC/pdlacon.f
+index b625d97..74b9eab 100644
+--- a/SRC/pdlacon.f
++++ b/SRC/pdlacon.f
+@@ -160,10 +160,10 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       INTEGER            I, ICTXT, IFLAG, IIVX, IMAXROW, IOFFVX, IROFF,
+      $                   ITER, IVXCOL, IVXROW, J, JLAST, JJVX, JUMP,
+      $                   K, MYCOL, MYROW, NP, NPCOL, NPROW
+-      DOUBLE PRECISION   ALTSGN, ESTOLD, JLMAX, TEMP, XMAX
++      DOUBLE PRECISION   ALTSGN, ESTOLD, JLMAX, XMAX
+ *     ..
+ *     .. Local Arrays ..
+-      DOUBLE PRECISION   WORK( 2 )
++      DOUBLE PRECISION   ESTWORK( 1 ), TEMP( 1 ), WORK( 2 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DCOPY, DGEBR2D, DGEBS2D,
+@@ -184,6 +184,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+ *     Get grid parameters.
+ *
++      ESTWORK( 1 ) = EST
+       ICTXT = DESCX( CTXT_ )
+       CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
+ *
+@@ -215,21 +216,21 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       IF( N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             V( IOFFVX ) = X( IOFFVX )
+-            EST = ABS( V( IOFFVX ) )
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            ESTWORK( 1 ) = ABS( V( IOFFVX ) )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+ *        ... QUIT
+          GO TO 150
+       END IF
+-      CALL PDASUM( N, EST, X, IX, JX, DESCX, 1 )
++      CALL PDASUM( N, ESTWORK( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -281,13 +282,13 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+    70 CONTINUE
+       CALL DCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-      ESTOLD = EST
+-      CALL PDASUM( N, EST, V, IV, JV, DESCV, 1 )
++      ESTOLD = ESTWORK( 1 )
++      CALL PDASUM( N, ESTWORK( 1 ), V, IV, JV, DESCV, 1 )
+       IF( DESCV( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL DGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -305,7 +306,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
+ *     ALONG WITH IT, TEST FOR CYCLING.
+ *
+-      IF( IFLAG.EQ.0 .OR. EST.LE.ESTOLD )
++      IF( IFLAG.EQ.0 .OR. ESTWORK( 1 ).LE.ESTOLD )
+      $   GO TO 120
+ *
+       DO 100 I = IOFFVX, IOFFVX+NP-1
+@@ -361,7 +362,7 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     X HAS BEEN OVERWRITTEN BY A*X
+ *
+   140 CONTINUE
+-      CALL PDASUM( N, TEMP, X, IX, JX, DESCX, 1 )
++      CALL PDASUM( N, TEMP( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, TEMP, 1 )
+@@ -370,15 +371,16 @@ SUBROUTINE PDLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+-      TEMP = TWO*( TEMP / DBLE( 3*N ) )
+-      IF( TEMP.GT.EST ) THEN
++      TEMP( 1 ) = TWO*( TEMP( 1 ) / DBLE( 3*N ) )
++      IF( TEMP( 1 ).GT.ESTWORK( 1 ) ) THEN
+          CALL DCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-         EST = TEMP
++         ESTWORK( 1 ) = TEMP( 1 )
+       END IF
+ *
+   150 CONTINUE
+       KASE = 0
+ *
++      EST = ESTWORK( 1 )
+       RETURN
+ *
+ *     End of PDLACON
+diff --git a/SRC/pdlarf.f b/SRC/pdlarf.f
+index 29da1ac..41368d6 100644
+--- a/SRC/pdlarf.f
++++ b/SRC/pdlarf.f
+@@ -241,7 +241,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      DOUBLE PRECISION   TAULOC
++      DOUBLE PRECISION   TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DCOPY, DGEBR2D, DGEBS2D,
+@@ -335,7 +335,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -344,7 +344,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -362,8 +362,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -378,9 +378,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -397,8 +397,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, V( IOFFV ), 1, WORK,
+-     $                             1, C( IOFFC ), LDC )
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
++     $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -420,9 +420,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -440,7 +440,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, WORK, 1,
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -470,7 +470,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -479,7 +479,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -499,8 +499,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -515,18 +515,18 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL DGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -546,8 +546,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -576,9 +576,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -596,7 +596,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL DGER( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -619,9 +619,9 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -639,7 +639,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1,
++                        CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -665,7 +665,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -674,7 +674,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -692,8 +692,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++                     CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -718,18 +718,18 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL DGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL DGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -748,8 +748,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -768,7 +768,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -777,7 +777,7 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -795,8 +795,8 @@ SUBROUTINE PDLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                       C( IOFFC ), LDC )
++                  CALL DGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1, WORK,
++     $                       1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pdlarz.f b/SRC/pdlarz.f
+index b91282c..f45c137 100644
+--- a/SRC/pdlarz.f
++++ b/SRC/pdlarz.f
+@@ -250,7 +250,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      DOUBLE PRECISION   TAULOC
++      DOUBLE PRECISION   TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DAXPY, DCOPY, DGEBR2D,
+@@ -369,7 +369,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -378,7 +378,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -401,9 +401,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL DGER( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                          WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -419,9 +419,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -444,11 +444,11 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL DAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL DAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL DGER( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL DGER( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -470,9 +470,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -495,10 +495,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL DGER( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -529,7 +529,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL DGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -538,7 +538,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -561,10 +561,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL DGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -579,18 +579,18 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL DGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -613,10 +613,10 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL DAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL DAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL DGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -645,9 +645,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -668,13 +668,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL DAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL DAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL DGER( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                LDC )
+                      END IF
+@@ -698,9 +698,9 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL DGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -719,13 +719,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -750,7 +750,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -759,7 +759,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -778,12 +778,12 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
++                     CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                          WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -808,18 +808,18 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL DGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL DGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -839,13 +839,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -864,7 +864,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL DGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -873,7 +873,7 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -892,13 +892,13 @@ SUBROUTINE PDLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL DAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL DAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL DGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL DGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pdlawil.f b/SRC/pdlawil.f
+index 90a4d74..e8bc3a0 100644
+--- a/SRC/pdlawil.f
++++ b/SRC/pdlawil.f
+@@ -120,10 +120,10 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       INTEGER            CONTXT, DOWN, HBL, ICOL, IROW, JSRC, LDA, LEFT,
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+-      DOUBLE PRECISION   H11, H12, H21, H22, H33S, H44S, S, V1, V2, V3
++      DOUBLE PRECISION   H22, H33S, H44S, S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      DOUBLE PRECISION   BUF( 4 )
++      DOUBLE PRECISION   BUF( 4 ), H11( 1 ), H12( 1 ), H21( 1 ), V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, DGERV2D, DGESD2D, INFOG2L
+@@ -170,18 +170,18 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -214,20 +214,20 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL DGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -236,24 +236,24 @@ SUBROUTINE PDLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = ABS( V1 ) + ABS( V2 ) + ABS( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = ABS( V1 ) + ABS( V2 ) + ABS( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pdstebz.f b/SRC/pdstebz.f
+index e7006f9..bf4dacc 100644
+--- a/SRC/pdstebz.f
++++ b/SRC/pdstebz.f
+@@ -246,14 +246,14 @@ SUBROUTINE PDSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+      $                   ITMP2, J, JB, K, LAST, LEXTRA, LREQ, MYCOL,
+      $                   MYROW, NALPHA, NBETA, NCMP, NEIGINT, NEXT, NGL,
+      $                   NGLOB, NGU, NINT, NPCOL, NPROW, OFFSET,
+-     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF,
+-     $                   TORECV
++     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF
+       DOUBLE PRECISION   ALPHA, ATOLI, BETA, BNORM, DRECV, DSEND, GL,
+      $                   GU, INITVL, INITVU, LSAVE, MID, PIVMIN, RELTOL,
+      $                   SAFEMN, TMP1, TMP2, TNORM, ULP
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            IDUM( 5, 2 )
++      INTEGER            TORECV( 1, 1 )
+ *     ..
+ *     .. Executable Statements ..
+ *       This is just to keep ftnchek happy
+@@ -784,14 +784,14 @@ SUBROUTINE PDSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+          ELSE
+             CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', 1, 1, TORECV, 1, 0,
+      $                    I-1 )
+-            IF( TORECV.NE.0 ) THEN
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, IWORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL DGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, WORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1,
+-     $                       IWORK( N+1 ), TORECV, 0, I-1 )
+-               DO 120 J = 1, TORECV
++            IF( TORECV( 1, 1 ).NE.0 ) THEN
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL DGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       WORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK( N+1 ), TORECV( 1, 1 ), 0, I-1 )
++               DO 120 J = 1, TORECV( 1, 1 )
+                   W( IWORK( J ) ) = WORK( J )
+                   IBLOCK( IWORK( J ) ) = IWORK( N+J )
+   120          CONTINUE
+diff --git a/SRC/pdtrord.f b/SRC/pdtrord.f
+index 1f37d8e..3870574 100644
+--- a/SRC/pdtrord.f
++++ b/SRC/pdtrord.f
+@@ -328,12 +328,13 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+      $                   EAST, WEST, ILOC4, SOUTH, NORTH, INDXS,
+      $                   ITT, JTT, ILEN, DLEN, INDXE, TRSRC1, TCSRC1,
+      $                   TRSRC2, TCSRC2, ILOS, DIR, TLIHI, TLILO, TLSEL,
+-     $                   ROUND, LAST, WIN0S, WIN0E, WINE, MMAX, MMIN
++     $                   ROUND, LAST, WIN0S, WIN0E, WINE
+       DOUBLE PRECISION   ELEM, ELEM1, ELEM2, ELEM3, ELEM4, SN, CS, TMP,
+      $                   ELEM5
+ *     ..
+ *     .. Local Arrays ..
+-      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 )
++      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 ), MMAX( 1 ),
++     $                   MMIN( 1 ), INFODUM( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -483,16 +484,16 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K).NE.0 ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $              -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $              -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $            CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, SELECT, N,
+      $                 -1, -1, -1, -1, -1 )
+@@ -520,9 +521,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info.
+ *
+-      IF( NPROCS.GT.1 )
+-     $   CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
++      IF( NPROCS.GT.1 ) THEN
++         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1, -1,
+      $        -1, -1 )
++         INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect.
+ *
+@@ -1576,9 +1579,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -1586,9 +1591,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+@@ -3245,9 +3252,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -3255,9 +3264,11 @@ SUBROUTINE PDTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               IERR = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+diff --git a/SRC/pdtrsen.f b/SRC/pdtrsen.f
+index 78c5599..c65ea91 100644
+--- a/SRC/pdtrsen.f
++++ b/SRC/pdtrsen.f
+@@ -354,13 +354,15 @@ SUBROUTINE PDTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+       LOGICAL            LQUERY, WANTBH, WANTQ, WANTS, WANTSP
+       INTEGER            ICOFFT12, ICTXT, IDUM1, IDUM2, IERR, ILOC1,
+      $                   IPW1, ITER, ITT, JLOC1, JTT, K, LIWMIN, LLDT,
+-     $                   LLDQ, LWMIN, MMAX, MMIN, MYROW, MYCOL, N1, N2,
++     $                   LLDQ, LWMIN, MYROW, MYCOL, N1, N2,
+      $                   NB, NOEXSY, NPCOL, NPROCS, NPROW, SPACE,
+      $                   T12ROWS, T12COLS, TCOLS, TCSRC, TROWS, TRSRC,
+      $                   WRK1, IWRK1, WRK2, IWRK2, WRK3, IWRK3
+-      DOUBLE PRECISION   DPDUM1, ELEM, EST, SCALE, RNORM
++      DOUBLE PRECISION   ELEM, EST, SCALE, RNORM
+ *     .. Local Arrays ..
+-      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 )
++      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 ), MMAX( 1 ),
++     $                   MMIN( 1 )
++      DOUBLE PRECISION   DPDUM1( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -521,16 +523,16 @@ SUBROUTINE PDTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K) ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+-     $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+-     $                -1, -1, -1, -1 )
++     $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX( 1 ), 1,
++     $                -1, -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+-     $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+-     $                -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++     $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN( 1 ), 1,
++     $                -1, -1, -1, -1, -1 )
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $              CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, IWORK, N,
+      $                   -1, -1, -1, -1, -1 )
+diff --git a/SRC/pshseqr.f b/SRC/pshseqr.f
+index 10eb24a..e8ecea9 100644
+--- a/SRC/pshseqr.f
++++ b/SRC/pshseqr.f
+@@ -259,11 +259,12 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+      $                   HRSRC4, HCSRC4, LIWKOPT
+       LOGICAL            INITZ, LQUERY, WANTT, WANTZ, PAIR, BORDER
+       REAL               TMP1, TMP2, TMP3, TMP4, DUM1, DUM2, DUM3,
+-     $                   DUM4, ELEM1, ELEM2, ELEM3, ELEM4,
++     $                   DUM4, ELEM1, ELEM4,
+      $                   CS, SN, ELEM5, TMP, LWKOPT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCH2( DLEN_ )
++      REAL               ELEM2( 1 ), ELEM3( 1 )
+ *     ..
+ *     .. External Functions ..
+       INTEGER            PILAENVX, NUMROC, ICEIL
+@@ -566,28 +567,28 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                   IF( MYROW.EQ.HRSRC1 .AND. MYCOL.EQ.HCSRC1 ) THEN
+                      ELEM1 = H((JLOC1-1)*LLDH+ILOC1)
+                      IF( K.LT.N ) THEN
+-                        ELEM3 = H((JLOC1-1)*LLDH+ILOC1+1)
++                        ELEM3( 1 ) = H((JLOC1-1)*LLDH+ILOC1+1)
+                      ELSE
+-                        ELEM3 = ZERO
++                        ELEM3( 1 ) = ZERO
+                      END IF
+-                     IF( ELEM3.NE.ZERO ) THEN
+-                        ELEM2 = H((JLOC1)*LLDH+ILOC1)
++                     IF( ELEM3( 1 ).NE.ZERO ) THEN
++                        ELEM2( 1 ) = H((JLOC1)*LLDH+ILOC1)
+                         ELEM4 = H((JLOC1)*LLDH+ILOC1+1)
+-                        CALL SLANV2( ELEM1, ELEM2, ELEM3, ELEM4,
+-     $                       WR( K ), WI( K ), WR( K+1 ), WI( K+1 ),
+-     $                       SN, CS )
++                        CALL SLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ),
++     $                       ELEM4, WR( K ), WI( K ), WR( K+1 ),
++     $                       WI( K+1 ), SN, CS )
+                         PAIR = .TRUE.
+                      ELSE
+                         IF( K.GT.1 ) THEN
+                            TMP = H((JLOC1-2)*LLDH+ILOC1)
+                            IF( TMP.NE.ZERO ) THEN
+                               ELEM1 = H((JLOC1-2)*LLDH+ILOC1-1)
+-                              ELEM2 = H((JLOC1-1)*LLDH+ILOC1-1)
+-                              ELEM3 = H((JLOC1-2)*LLDH+ILOC1)
++                              ELEM2( 1 ) = H((JLOC1-1)*LLDH+ILOC1-1)
++                              ELEM3( 1 ) = H((JLOC1-2)*LLDH+ILOC1)
+                               ELEM4 = H((JLOC1-1)*LLDH+ILOC1)
+-                              CALL SLANV2( ELEM1, ELEM2, ELEM3,
+-     $                             ELEM4, WR( K-1 ), WI( K-1 ),
+-     $                             WR( K ), WI( K ), SN, CS )
++                              CALL SLANV2( ELEM1, ELEM2( 1 ),
++     $                             ELEM3( 1 ), ELEM4, WR( K-1 ),
++     $                             WI( K-1 ), WR( K ), WI( K ), SN, CS )
+                            ELSE
+                               WR( K ) = ELEM1
+                            END IF
+@@ -620,12 +621,12 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+             CALL INFOG2L( K+1, K+1, DESCH, NPROW, NPCOL, MYROW, MYCOL,
+      $           ILOC4, JLOC4, HRSRC4, HCSRC4 )
+             IF( MYROW.EQ.HRSRC2 .AND. MYCOL.EQ.HCSRC2 ) THEN
+-               ELEM2 = H((JLOC2-1)*LLDH+ILOC2)
++               ELEM2( 1 ) = H((JLOC2-1)*LLDH+ILOC2)
+                IF( HRSRC1.NE.HRSRC2 .OR. HCSRC1.NE.HCSRC2 )
+      $            CALL SGESD2D( ICTXT, 1, 1, ELEM2, 1, HRSRC1, HCSRC1)
+             END IF
+             IF( MYROW.EQ.HRSRC3 .AND. MYCOL.EQ.HCSRC3 ) THEN
+-               ELEM3 = H((JLOC3-1)*LLDH+ILOC3)
++               ELEM3( 1 ) = H((JLOC3-1)*LLDH+ILOC3)
+                IF( HRSRC1.NE.HRSRC3 .OR. HCSRC1.NE.HCSRC3 )
+      $            CALL SGESD2D( ICTXT, 1, 1, ELEM3, 1, HRSRC1, HCSRC1)
+             END IF
+@@ -651,8 +652,9 @@ SUBROUTINE PSHSEQR( JOB, COMPZ, N, ILO, IHI, H, DESCH, WR, WI, Z,
+                ELEM5 = WORK(2)
+                IF( ELEM5.EQ.ZERO ) THEN
+                   IF( WR( K ).EQ.ZERO .AND. WI( K ).EQ.ZERO ) THEN
+-                     CALL SLANV2( ELEM1, ELEM2, ELEM3, ELEM4, WR( K ),
+-     $                    WI( K ), WR( K+1 ), WI( K+1 ), SN, CS )
++                     CALL SLANV2( ELEM1, ELEM2( 1 ), ELEM3( 1 ), ELEM4,
++     $                    WR( K ), WI( K ), WR( K+1 ), WI( K+1 ), SN,
++     $                    CS )
+                   ELSEIF( WR( K+1 ).EQ.ZERO .AND. WI( K+1 ).EQ.ZERO )
+      $                 THEN
+                      WR( K+1 ) = ELEM4
+diff --git a/SRC/pslacon.f b/SRC/pslacon.f
+index 20d27ff..673bf1a 100644
+--- a/SRC/pslacon.f
++++ b/SRC/pslacon.f
+@@ -160,10 +160,12 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       INTEGER            I, ICTXT, IFLAG, IIVX, IMAXROW, IOFFVX, IROFF,
+      $                   ITER, IVXCOL, IVXROW, J, JLAST, JJVX, JUMP,
+      $                   K, MYCOL, MYROW, NP, NPCOL, NPROW
+-      REAL               ALTSGN, ESTOLD, JLMAX, TEMP, XMAX
++      REAL               ALTSGN, ESTOLD, JLMAX, XMAX
+ *     ..
+ *     .. Local Arrays ..
+       REAL               WORK( 2 )
++      REAL               ESTWORK( 1 )
++      REAL               TEMP( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, IGSUM2D, INFOG2L, PSAMAX,
+@@ -184,6 +186,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+ *     Get grid parameters.
+ *
++      ESTWORK( 1 ) = EST
+       ICTXT = DESCX( CTXT_ )
+       CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
+ *
+@@ -215,21 +218,21 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+       IF( N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             V( IOFFVX ) = X( IOFFVX )
+-            EST = ABS( V( IOFFVX ) )
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            ESTWORK( 1 ) = ABS( V( IOFFVX ) )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+ *        ... QUIT
+          GO TO 150
+       END IF
+-      CALL PSASUM( N, EST, X, IX, JX, DESCX, 1 )
++      CALL PSASUM( N, ESTWORK( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -281,13 +284,13 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *
+    70 CONTINUE
+       CALL SCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-      ESTOLD = EST
+-      CALL PSASUM( N, EST, V, IV, JV, DESCV, 1 )
++      ESTOLD = ESTWORK( 1 )
++      CALL PSASUM( N, ESTWORK( 1 ), V, IV, JV, DESCV, 1 )
+       IF( DESCV( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+-            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1 )
++            CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1 )
+          ELSE
+-            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, EST, 1,
++            CALL SGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, ESTWORK, 1,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+@@ -305,7 +308,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
+ *     ALONG WITH IT, TEST FOR CYCLING.
+ *
+-      IF( IFLAG.EQ.0 .OR. EST.LE.ESTOLD )
++      IF( IFLAG.EQ.0 .OR. ESTWORK( 1 ).LE.ESTOLD )
+      $   GO TO 120
+ *
+       DO 100 I = IOFFVX, IOFFVX+NP-1
+@@ -361,7 +364,7 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+ *     X HAS BEEN OVERWRITTEN BY A*X
+ *
+   140 CONTINUE
+-      CALL PSASUM( N, TEMP, X, IX, JX, DESCX, 1 )
++      CALL PSASUM( N, TEMP( 1 ), X, IX, JX, DESCX, 1 )
+       IF( DESCX( M_ ).EQ.1 .AND. N.EQ.1 ) THEN
+          IF( MYROW.EQ.IVXROW ) THEN
+             CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1, TEMP, 1 )
+@@ -370,15 +373,16 @@ SUBROUTINE PSLACON( N, V, IV, JV, DESCV, X, IX, JX, DESCX, ISGN,
+      $                    IVXROW, MYCOL )
+          END IF
+       END IF
+-      TEMP = TWO*( TEMP / REAL( 3*N ) )
+-      IF( TEMP.GT.EST ) THEN
++      TEMP( 1 ) = TWO*( TEMP( 1 ) / REAL( 3*N ) )
++      IF( TEMP( 1 ).GT.ESTWORK( 1 ) ) THEN
+          CALL SCOPY( NP, X( IOFFVX ), 1, V( IOFFVX ), 1 )
+-         EST = TEMP
++         ESTWORK( 1 ) = TEMP( 1 )
+       END IF
+ *
+   150 CONTINUE
+       KASE = 0
+ *
++      EST = ESTWORK( 1 )
+       RETURN
+ *
+ *     End of PSLACON
+diff --git a/SRC/pslarf.f b/SRC/pslarf.f
+index c1d3a15..39de0ed 100644
+--- a/SRC/pslarf.f
++++ b/SRC/pslarf.f
+@@ -241,7 +241,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      REAL               TAULOC
++      REAL               TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBSTRNV,
+@@ -335,7 +335,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -344,7 +344,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -362,8 +362,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -378,9 +378,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -397,8 +397,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, V( IOFFV ), 1, WORK,
+-     $                             1, C( IOFFC ), LDC )
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
++     $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -420,9 +420,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -440,7 +440,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, WORK, 1,
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -470,7 +470,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -479,7 +479,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -499,8 +499,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -515,18 +515,18 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL SGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -546,8 +546,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                          WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -576,9 +576,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -596,7 +596,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL SGER( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -619,9 +619,9 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -639,7 +639,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1,
++                        CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                             WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -665,7 +665,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -674,7 +674,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -692,8 +692,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++                     CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1
++     $                         , WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -718,18 +718,18 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL SGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL SGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -748,8 +748,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                          1, C( IOFFC ), LDC )
++     $               CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                          WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -768,7 +768,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -777,7 +777,7 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -795,8 +795,8 @@ SUBROUTINE PSLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                       C( IOFFC ), LDC )
++                  CALL SGER( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1, WORK,
++     $                       1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pslarz.f b/SRC/pslarz.f
+index aa70db7..8901530 100644
+--- a/SRC/pslarz.f
++++ b/SRC/pslarz.f
+@@ -250,7 +250,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      REAL               TAULOC
++      REAL               TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBSTRNV,
+@@ -369,7 +369,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -378,7 +378,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -401,9 +401,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL SGER( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                          WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -419,9 +419,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -444,11 +444,11 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL SAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL SAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL SGER( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL SGER( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -470,9 +470,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -495,10 +495,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL SGER( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                             WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -529,7 +529,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL SGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -538,7 +538,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -561,10 +561,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL SGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -579,18 +579,18 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL SGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -613,10 +613,10 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL SAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL SAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL SGER( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                       WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -645,9 +645,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -668,13 +668,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL SAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL SAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL SGER( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                LDC )
+                      END IF
+@@ -698,9 +698,9 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL SGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -719,13 +719,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                             WORK, 1, C( IOFFC2 ), LDC )
++                        CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                             1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -750,7 +750,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -759,7 +759,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -778,12 +778,12 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
++                     CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                          WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -808,18 +808,18 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL SGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL SGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -839,13 +839,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -864,7 +864,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL SGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -873,7 +873,7 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -892,13 +892,13 @@ SUBROUTINE PSLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL SAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL SAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL SGER( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                       1, C( IOFFC2 ), LDC )
++                  CALL SGER( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                       WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pslawil.f b/SRC/pslawil.f
+index e04c16b..671e08e 100644
+--- a/SRC/pslawil.f
++++ b/SRC/pslawil.f
+@@ -120,10 +120,14 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       INTEGER            CONTXT, DOWN, HBL, ICOL, IROW, JSRC, LDA, LEFT,
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+-      REAL               H11, H12, H21, H22, H33S, H44S, S, V1, V2, V3
++      REAL               H22, H33S, H44S, S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+       REAL               BUF( 4 )
++      REAL               H11( 1 )
++      REAL               H12( 1 )
++      REAL               H21( 1 )
++      REAL               V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, SGERV2D, SGESD2D, INFOG2L
+@@ -170,18 +174,18 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -214,20 +218,20 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL SGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -236,24 +240,24 @@ SUBROUTINE PSLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = ABS( V1 ) + ABS( V2 ) + ABS( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = ABS( V1 ) + ABS( V2 ) + ABS( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/psstebz.f b/SRC/psstebz.f
+index a8a2496..7e588a9 100644
+--- a/SRC/psstebz.f
++++ b/SRC/psstebz.f
+@@ -244,14 +244,14 @@ SUBROUTINE PSSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+      $                   ITMP2, J, JB, K, LAST, LEXTRA, LREQ, MYCOL,
+      $                   MYROW, NALPHA, NBETA, NCMP, NEIGINT, NEXT, NGL,
+      $                   NGLOB, NGU, NINT, NPCOL, NPROW, OFFSET,
+-     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF,
+-     $                   TORECV
++     $                   ONEDCONTEXT, P, PREV, REXTRA, RREQ, SELF
+       REAL               ALPHA, ATOLI, BETA, BNORM, DRECV, DSEND, GL,
+      $                   GU, INITVL, INITVU, LSAVE, MID, PIVMIN, RELTOL,
+      $                   SAFEMN, TMP1, TMP2, TNORM, ULP
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            IDUM( 5, 2 )
++      INTEGER            TORECV( 1, 1 )
+ *     ..
+ *     .. Executable Statements ..
+ *       This is just to keep ftnchek happy
+@@ -774,14 +774,14 @@ SUBROUTINE PSSTEBZ( ICTXT, RANGE, ORDER, N, VL, VU, IL, IU,
+          ELSE
+             CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', 1, 1, TORECV, 1, 0,
+      $                    I-1 )
+-            IF( TORECV.NE.0 ) THEN
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, IWORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL SGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1, WORK,
+-     $                       TORECV, 0, I-1 )
+-               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV, 1,
+-     $                       IWORK( N+1 ), TORECV, 0, I-1 )
+-               DO 120 J = 1, TORECV
++            IF( TORECV( 1, 1 ).NE.0 ) THEN
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL SGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       WORK, TORECV( 1, 1 ), 0, I-1 )
++               CALL IGEBR2D( ONEDCONTEXT, 'ALL', ' ', TORECV( 1, 1 ), 1,
++     $                       IWORK( N+1 ), TORECV( 1, 1 ), 0, I-1 )
++               DO 120 J = 1, TORECV( 1, 1 )
+                   W( IWORK( J ) ) = WORK( J )
+                   IBLOCK( IWORK( J ) ) = IWORK( N+J )
+   120          CONTINUE
+diff --git a/SRC/pstrord.f b/SRC/pstrord.f
+index 3562242..5cdb549 100644
+--- a/SRC/pstrord.f
++++ b/SRC/pstrord.f
+@@ -328,12 +328,13 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+      $                   EAST, WEST, ILOC4, SOUTH, NORTH, INDXS,
+      $                   ITT, JTT, ILEN, DLEN, INDXE, TRSRC1, TCSRC1,
+      $                   TRSRC2, TCSRC2, ILOS, DIR, TLIHI, TLILO, TLSEL,
+-     $                   ROUND, LAST, WIN0S, WIN0E, WINE, MMAX, MMIN
++     $                   ROUND, LAST, WIN0S, WIN0E, WINE
+       REAL               ELEM, ELEM1, ELEM2, ELEM3, ELEM4, SN, CS, TMP,
+      $                   ELEM5
+ *     ..
+ *     .. Local Arrays ..
+-      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 )
++      INTEGER            IBUFF( 8 ), IDUM1( 1 ), IDUM2( 1 ), MMAX( 1 ),
++     $                    MMIN( 1 ), INFODUM( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -483,16 +484,16 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K).NE.0 ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $              -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $         CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $              -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $            CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, SELECT, N,
+      $                 -1, -1, -1, -1, -1 )
+@@ -520,9 +521,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info.
+ *
+-      IF( NPROCS.GT.1 )
+-     $   CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
+-     $        -1, -1 )
++      IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1,
++     $        -1, -1, -1 )
++            INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect.
+ *
+@@ -1576,9 +1579,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -1586,9 +1591,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+@@ -3245,9 +3252,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *        experienced a failure in the reordering.
+ *
+          MYIERR = IERR
+-         IF( NPROCS.GT.1 )
+-     $      CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, IERR, 1, -1,
++         IF( NPROCS.GT.1 ) THEN
++            CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $           -1, -1, -1, -1 )
++            IERR = INFODUM( 1 )
++         END IF
+ *
+          IF( IERR.NE.0 ) THEN
+ *
+@@ -3255,9 +3264,11 @@ SUBROUTINE PSTRORD( COMPQ, SELECT, PARA, N, T, IT, JT,
+ *           to swap.
+ *
+             IF( MYIERR.NE.0 ) INFO = MAX(1,I+KKS-1)
+-            IF( NPROCS.GT.1 )
+-     $         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1,
++            IF( NPROCS.GT.1 ) THEN
++               CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1,
+      $              -1, -1, -1, -1 )
++               INFO = INFODUM( 1 )
++            END IF
+             GO TO 300
+          END IF
+ *
+diff --git a/SRC/pstrsen.f b/SRC/pstrsen.f
+index 6219bdb..1922e8f 100644
+--- a/SRC/pstrsen.f
++++ b/SRC/pstrsen.f
+@@ -354,13 +354,15 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+       LOGICAL            LQUERY, WANTBH, WANTQ, WANTS, WANTSP
+       INTEGER            ICOFFT12, ICTXT, IDUM1, IDUM2, IERR, ILOC1,
+      $                   IPW1, ITER, ITT, JLOC1, JTT, K, LIWMIN, LLDT,
+-     $                   LLDQ, LWMIN, MMAX, MMIN, MYROW, MYCOL, N1, N2,
++     $                   LLDQ, LWMIN, MYROW, MYCOL, N1, N2,
+      $                   NB, NOEXSY, NPCOL, NPROCS, NPROW, SPACE,
+      $                   T12ROWS, T12COLS, TCOLS, TCSRC, TROWS, TRSRC,
+      $                   WRK1, IWRK1, WRK2, IWRK2, WRK3, IWRK3
+-      REAL               DPDUM1, ELEM, EST, SCALE, RNORM
++      REAL               ELEM, EST, SCALE, RNORM
+ *     .. Local Arrays ..
+-      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 )
++      INTEGER            DESCT12( DLEN_ ), MBNB2( 2 ), MMAX( 1 ),
++     $                   MMIN( 1 ), INFODUM( 1 )
++      REAL               DPDUM1( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -521,16 +523,16 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+                END IF
+                IF( SELECT(K) ) M = M + 1
+  10         CONTINUE
+-            MMAX = M
+-            MMIN = M
++            MMAX( 1 ) = M
++            MMIN( 1 ) = M
+             IF( NPROCS.GT.1 )
+      $           CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, MMAX, 1, -1,
+      $                -1, -1, -1, -1 )
+             IF( NPROCS.GT.1 )
+      $           CALL IGAMN2D( ICTXT, 'All', TOP, 1, 1, MMIN, 1, -1,
+      $                -1, -1, -1, -1 )
+-            IF( MMAX.GT.MMIN ) THEN
+-               M = MMAX
++            IF( MMAX( 1 ).GT.MMIN( 1 ) ) THEN
++               M = MMAX( 1 )
+                IF( NPROCS.GT.1 )
+      $              CALL IGAMX2D( ICTXT, 'All', TOP, N, 1, IWORK, N,
+      $                   -1, -1, -1, -1, -1 )
+@@ -602,9 +604,11 @@ SUBROUTINE PSTRSEN( JOB, COMPQ, SELECT, PARA, N, T, IT, JT,
+ *
+ *     Global maximum on info
+ *
+-      IF( NPROCS.GT.1 )
+-     $     CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFO, 1, -1, -1, -1,
++      IF( NPROCS.GT.1 ) THEN
++         CALL IGAMX2D( ICTXT, 'All', TOP, 1, 1, INFODUM, 1, -1, -1, -1,
+      $          -1, -1 )
++         INFO = INFODUM( 1 )
++      END IF
+ *
+ *     Return if some argument is incorrect
+ *
+diff --git a/SRC/pzlarf.f b/SRC/pzlarf.f
+index df65912..7bff287 100644
+--- a/SRC/pzlarf.f
++++ b/SRC/pzlarf.f
+@@ -242,7 +242,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -336,7 +336,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -345,7 +345,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -363,8 +363,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -379,9 +379,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -398,7 +398,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -441,7 +441,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -471,7 +471,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -480,7 +480,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -547,8 +547,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -577,9 +577,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -597,7 +597,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( IOFFV.GT.0 .AND. IOFFC.GT.0 )
+-     $                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++     $                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC ),
+      $                                 LDC )
+                      END IF
+@@ -621,9 +621,9 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -641,8 +641,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -667,7 +667,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -676,7 +676,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -694,8 +694,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -720,18 +720,18 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -750,8 +750,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+                   IF( IOFFC.GT.0 )
+-     $               CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++     $               CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -770,7 +770,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -779,7 +779,7 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -797,8 +797,8 @@ SUBROUTINE PZLARF( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarfc.f b/SRC/pzlarfc.f
+index eb469fc..ddd7ec6 100644
+--- a/SRC/pzlarfc.f
++++ b/SRC/pzlarfc.f
+@@ -242,7 +242,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+      $                   IOFFV, IPW, IROFF, IVCOL, IVROW, JJC, JJV, LDC,
+      $                   LDV, MYCOL, MYROW, MP, NCC, NCV, NPCOL, NPROW,
+      $                   NQ, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -336,17 +336,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -364,8 +364,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                           WORK( IPW ), 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -380,9 +380,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYCOL.EQ.ICCOL ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -399,7 +399,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, V( IOFFV ), 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), V( IOFFV ), 1,
+      $                              WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -422,9 +422,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = MP+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -442,7 +442,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -472,17 +472,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -500,8 +500,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -516,18 +516,18 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MP+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -545,8 +545,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK, 1, WORK( IPW ), 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+@@ -575,9 +575,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   IF( MYROW.EQ.ICROW ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -594,7 +594,7 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK, 1,
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC ), LDC )
+                      END IF
+ *
+@@ -617,9 +617,9 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                      IPW = NQ+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -637,8 +637,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC ), LDC )
++                        CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ),
++     $                              1, WORK, 1, C( IOFFC ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -663,17 +663,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -691,8 +691,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                           1, C( IOFFC ), LDC )
++                     CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                           WORK, 1, C( IOFFC ), LDC )
+                   END IF
+ *
+                END IF
+@@ -716,18 +716,18 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+                   WORK(IPW) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQ+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -745,8 +745,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             ELSE
+@@ -765,17 +765,17 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -793,8 +793,8 @@ SUBROUTINE PZLARFC( SIDE, M, N, V, IV, JV, DESCV, INCV, TAU,
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MP, NQ, -TAULOC, WORK( IPW ), 1, WORK, 1,
+-     $                        C( IOFFC ), LDC )
++                  CALL ZGERC( MP, NQ, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarz.f b/SRC/pzlarz.f
+index fefc133..abf6288 100644
+--- a/SRC/pzlarz.f
++++ b/SRC/pzlarz.f
+@@ -251,7 +251,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -370,7 +370,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+                   ELSE
+ *
+@@ -379,7 +379,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -402,9 +402,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -420,9 +420,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -445,11 +445,11 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -471,9 +471,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -496,10 +496,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -530,7 +530,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+@@ -539,7 +539,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -562,10 +562,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -580,18 +580,18 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -614,10 +614,10 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -646,9 +646,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = TAU( IIV )
++                     TAULOC( 1 ) = TAU( IIV )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -669,13 +669,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+                         IF( MPC2.GT.0 .AND. NQV.GT.0 )
+-     $                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK, 1,
++     $                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                                 V( IOFFV ), LDV, C( IOFFC2 ),
+      $                                 LDC )
+                      END IF
+@@ -699,9 +699,9 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = WORK( IPW )
++                     TAULOC( 1 ) = WORK( IPW )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,7 +752,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = TAU( JJV )
++                     TAULOC( 1 ) = TAU( JJV )
+ *
+                   ELSE
+ *
+@@ -760,7 +761,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -779,13 +780,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -809,18 +810,18 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = TAU( IIV )
++                  TAULOC( 1 ) = TAU( IIV )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = WORK( IPW )
++                  TAULOC( 1 ) = WORK( IPW )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -840,13 +841,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -865,7 +866,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = TAU( JJV )
++                  TAULOC( 1 ) = TAU( JJV )
+ *
+                ELSE
+ *
+@@ -874,7 +875,7 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -893,13 +894,13 @@ SUBROUTINE PZLARZ( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlarzc.f b/SRC/pzlarzc.f
+index 936caec..2c574ff 100644
+--- a/SRC/pzlarzc.f
++++ b/SRC/pzlarzc.f
+@@ -251,7 +251,7 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                   IVCOL, IVROW, JJC1, JJC2, JJV, LDC, LDV, MPC2,
+      $                   MPV, MYCOL, MYROW, NCC, NCV, NPCOL, NPROW,
+      $                   NQC2, NQV, RDEST
+-      COMPLEX*16         TAULOC
++      COMPLEX*16         TAULOC( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, PB_TOPGET, PBZTRNV,
+@@ -370,17 +370,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAU( IIV ), 1 )
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                             TAULOC, 1, IVROW, MYCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C )' * v
+ *
+@@ -403,9 +403,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                    sub( C ) := sub( C ) - v * w'
+ *
+                      IF( MYROW.EQ.ICROW1 )
+-     $                  CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                  CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                              MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                     CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                     CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                           WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+@@ -421,9 +421,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYCOL.EQ.ICCOL2 ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -446,11 +446,11 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK,
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK,
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, V( IOFFV ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), V( IOFFV ),
++     $                              1, WORK, 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -472,9 +472,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = MPV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, MYROW,
+      $                             IVCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C )' * v
+ *
+@@ -497,10 +497,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                       sub( C ) := sub( C ) - v * w'
+ *
+                         IF( MYROW.EQ.ICROW1 )
+-     $                     CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $                     CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                                 MAX( 1, NQC2 ), C( IOFFC1 ),
+      $                                 LDC )
+-                        CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
+      $                              WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -531,17 +531,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', ' ', 1, 1,
+      $                          TAU( IIV ), 1 )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', ' ', 1, 1, TAULOC,
+      $                          1, IVROW, MYCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -564,10 +564,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -582,18 +582,18 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( JJV )
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   IPW = MPV+1
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ROWBTOP, IPW, 1, WORK,
+      $                          IPW, MYROW, IVCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C )' * v
+ *
+@@ -616,10 +616,10 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *                 sub( C ) := sub( C ) - v * w'
+ *
+                   IF( MYROW.EQ.ICROW1 )
+-     $               CALL ZAXPY( NQC2, -TAULOC, WORK( IPW ),
++     $               CALL ZAXPY( NQC2, -TAULOC( 1 ), WORK( IPW ),
+      $                           MAX( 1, NQC2 ), C( IOFFC1 ), LDC )
+-                  CALL ZGERC( MPV, NQC2, -TAULOC, WORK, 1, WORK( IPW ),
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPV, NQC2, -TAULOC( 1 ), WORK, 1,
++     $                        WORK( IPW ), 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+@@ -648,9 +648,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   IF( MYROW.EQ.ICROW2 ) THEN
+ *
+-                     TAULOC = DCONJG( TAU( IIV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -671,12 +671,12 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                               ICCOL2 )
+ *
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK, 1,
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK, 1,
+      $                                 C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK, 1,
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK, 1,
+      $                              V( IOFFV ), LDV, C( IOFFC2 ), LDC )
+                      END IF
+ *
+@@ -699,9 +699,9 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                      IPW = NQV+1
+                      CALL ZGERV2D( ICTXT, IPW, 1, WORK, IPW, IVROW,
+      $                             MYCOL )
+-                     TAULOC = DCONJG( WORK( IPW ) )
++                     TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+-                     IF( TAULOC.NE.ZERO ) THEN
++                     IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                       w := sub( C ) * v
+ *
+@@ -720,13 +720,14 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                                WORK( IPW ), MAX( 1, MPC2 ),
+      $                                RDEST, ICCOL2 )
+                         IF( MYCOL.EQ.ICCOL1 )
+-     $                     CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
+-     $                                 C( IOFFC1 ), 1 )
++     $                     CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ),
++     $                                 1, C( IOFFC1 ), 1 )
+ *
+ *                       sub( C ) := sub( C ) - w * v'
+ *
+-                        CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                              WORK, 1, C( IOFFC2 ), LDC )
++                        CALL ZGERC( MPC2, NQV, -TAULOC( 1 ),
++     $                              WORK( IPW ), 1, WORK, 1,
++     $                              C( IOFFC2 ), LDC )
+                      END IF
+ *
+                   END IF
+@@ -751,17 +752,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                      CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1,
+      $                             TAU( JJV ), 1 )
+-                     TAULOC = DCONJG( TAU( JJV ) )
++                     TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                   ELSE
+ *
+                      CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC,
+      $                             1, MYROW, IVCOL )
+-                     TAULOC = DCONJG( TAULOC )
++                     TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                   END IF
+ *
+-                  IF( TAULOC.NE.ZERO ) THEN
++                  IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                    w := sub( C ) * v
+ *
+@@ -780,13 +781,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                             WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                             ICCOL2 )
+                      IF( MYCOL.EQ.ICCOL1 )
+-     $                  CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $                  CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                              C( IOFFC1 ), 1 )
+ *
+ *                    sub( C ) := sub( C ) - w * v'
+ *
+-                     CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1,
+-     $                           WORK, 1, C( IOFFC2 ), LDC )
++                     CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ),
++     $                           1, WORK, 1, C( IOFFC2 ), LDC )
+                   END IF
+ *
+                END IF
+@@ -810,18 +811,18 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+                   WORK( IPW ) = TAU( IIV )
+                   CALL ZGEBS2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW )
+-                  TAULOC = DCONJG( TAU( IIV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( IIV ) )
+ *
+                ELSE
+ *
+                   IPW = NQV+1
+                   CALL ZGEBR2D( ICTXT, 'Columnwise', COLBTOP, IPW, 1,
+      $                          WORK, IPW, IVROW, MYCOL )
+-                  TAULOC = DCONJG( WORK( IPW ) )
++                  TAULOC( 1 ) = DCONJG( WORK( IPW ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -841,13 +842,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             ELSE
+@@ -866,17 +867,17 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+ *
+                   CALL ZGEBS2D( ICTXT, 'Rowwise', ' ', 1, 1, TAU( JJV ),
+      $                          1 )
+-                  TAULOC = DCONJG( TAU( JJV ) )
++                  TAULOC( 1 ) = DCONJG( TAU( JJV ) )
+ *
+                ELSE
+ *
+                   CALL ZGEBR2D( ICTXT, 'Rowwise', ' ', 1, 1, TAULOC, 1,
+      $                          MYROW, IVCOL )
+-                  TAULOC = DCONJG( TAULOC )
++                  TAULOC( 1 ) = DCONJG( TAULOC( 1 ) )
+ *
+                END IF
+ *
+-               IF( TAULOC.NE.ZERO ) THEN
++               IF( TAULOC( 1 ).NE.ZERO ) THEN
+ *
+ *                 w := sub( C ) * v
+ *
+@@ -895,13 +896,13 @@ SUBROUTINE PZLARZC( SIDE, M, N, L, V, IV, JV, DESCV, INCV, TAU, C,
+      $                          WORK( IPW ), MAX( 1, MPC2 ), RDEST,
+      $                          ICCOL2 )
+                   IF( MYCOL.EQ.ICCOL1 )
+-     $               CALL ZAXPY( MPC2, -TAULOC, WORK( IPW ), 1,
++     $               CALL ZAXPY( MPC2, -TAULOC( 1 ), WORK( IPW ), 1,
+      $                           C( IOFFC1 ), 1 )
+ *
+ *                 sub( C ) := sub( C ) - w * v'
+ *
+-                  CALL ZGERC( MPC2, NQV, -TAULOC, WORK( IPW ), 1, WORK,
+-     $                        1, C( IOFFC2 ), LDC )
++                  CALL ZGERC( MPC2, NQV, -TAULOC( 1 ), WORK( IPW ), 1,
++     $                        WORK, 1, C( IOFFC2 ), LDC )
+                END IF
+ *
+             END IF
+diff --git a/SRC/pzlattrs.f b/SRC/pzlattrs.f
+index 819e476..5a54209 100644
+--- a/SRC/pzlattrs.f
++++ b/SRC/pzlattrs.f
+@@ -271,8 +271,9 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                   JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
+      $                   NPCOL, NPROW, RSRC
+       DOUBLE PRECISION   BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
+-     $                   XBND, XJ, XMAX
++     $                   XBND, XJ
+       COMPLEX*16         CSUMJ, TJJS, USCAL, XJTMP, ZDUM
++      DOUBLE PRECISION   XMAX( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -391,11 +392,11 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *     Compute a bound on the computed solution vector to see if the
+ *     Level 2 PBLAS routine PZTRSV can be used.
+ *
+-      XMAX = ZERO
++      XMAX( 1 ) = ZERO
+       CALL PZAMAX( N, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-      XMAX = CABS2( ZDUM )
++      XMAX( 1 ) = CABS2( ZDUM )
+       CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1, -1, -1 )
+-      XBND = XMAX
++      XBND = XMAX( 1 )
+ *
+       IF( NOTRAN ) THEN
+ *
+@@ -590,16 +591,16 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+ *        Use a Level 1 PBLAS solve, scaling intermediate results.
+ *
+-         IF( XMAX.GT.BIGNUM*HALF ) THEN
++         IF( XMAX( 1 ).GT.BIGNUM*HALF ) THEN
+ *
+ *           Scale X so that its components are less than or equal to
+ *           BIGNUM in absolute value.
+ *
+-            SCALE = ( BIGNUM*HALF ) / XMAX
++            SCALE = ( BIGNUM*HALF ) / XMAX( 1 )
+             CALL PZDSCAL( N, SCALE, X, IX, JX, DESCX, 1 )
+-            XMAX = BIGNUM
++            XMAX( 1 ) = BIGNUM
+          ELSE
+-            XMAX = XMAX*TWO
++            XMAX( 1 ) = XMAX( 1 )*TWO
+          END IF
+ *
+          IF( NOTRAN ) THEN
+@@ -651,7 +652,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+                   END IF
+ *                 X( J ) = ZLADIV( X( J ), TJJS )
+@@ -682,7 +683,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+ *                 X( J ) = ZLADIV( X( J ), TJJS )
+ *                 XJ = CABS1( X( J ) )
+@@ -706,7 +707,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   XJTMP = CONE
+                   XJ = ONE
+                   SCALE = ZERO
+-                  XMAX = ZERO
++                  XMAX( 1 ) = ZERO
+                END IF
+    90          CONTINUE
+ *
+@@ -715,7 +716,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+ *
+                IF( XJ.GT.ONE ) THEN
+                   REC = ONE / XJ
+-                  IF( CNORM( J ).GT.( BIGNUM-XMAX )*REC ) THEN
++                  IF( CNORM( J ).GT.( BIGNUM-XMAX( 1 ) )*REC ) THEN
+ *
+ *                    Scale x by 1/(2*abs(x(j))).
+ *
+@@ -724,7 +725,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+                   END IF
+-               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX ) ) THEN
++               ELSE IF( XJ*CNORM( J ).GT.( BIGNUM-XMAX( 1 ) ) ) THEN
+ *
+ *                 Scale x by 1/2.
+ *
+@@ -743,7 +744,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZAXPY( J-1, ZDUM, A, IA, JA+J-1, DESCA, 1, X,
+      $                            IX, JX, DESCX, 1 )
+                      CALL PZAMAX( J-1, ZDUM, IMAX, X, IX, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -757,7 +758,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZAXPY( N-J, ZDUM, A, IA+J, JA+J-1, DESCA, 1,
+      $                            X, IX+J, JX, DESCX, 1 )
+                      CALL PZAMAX( N-J, ZDUM, I, X, IX+J, JX, DESCX, 1 )
+-                     XMAX = CABS1( ZDUM )
++                     XMAX( 1 ) = CABS1( ZDUM )
+                      CALL DGSUM2D( CONTXT, 'Row', ' ', 1, 1, XMAX, 1,
+      $                             -1, -1 )
+                   END IF
+@@ -785,7 +786,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = DCMPLX( TSCAL )
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -820,7 +821,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -924,7 +925,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+@@ -945,7 +946,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+                      XJTMP = ZLADIV( XJTMP, TJJS )
+@@ -966,7 +967,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      END IF
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   110             CONTINUE
+                ELSE
+@@ -981,7 +982,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      X( IROWX ) = XJTMP
+                   END IF
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   120       CONTINUE
+ *
+          ELSE
+@@ -1004,7 +1005,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                END IF
+                XJ = CABS1( XJTMP )
+                USCAL = TSCAL
+-               REC = ONE / MAX( XMAX, ONE )
++               REC = ONE / MAX( XMAX( 1 ), ONE )
+                IF( CNORM( J ).GT.( BIGNUM-XJ )*REC ) THEN
+ *
+ *                 If x(j) could overflow, scale x by 1/(2*XMAX).
+@@ -1039,7 +1040,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                      CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                      XJTMP = XJTMP*REC
+                      SCALE = SCALE*REC
+-                     XMAX = XMAX*REC
++                     XMAX( 1 ) = XMAX( 1 )*REC
+                   END IF
+                END IF
+ *
+@@ -1145,7 +1146,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                            CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                            XJTMP = XJTMP*REC
+                            SCALE = SCALE*REC
+-                           XMAX = XMAX*REC
++                           XMAX( 1 ) = XMAX( 1 )*REC
+                         END IF
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+@@ -1164,7 +1165,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                         CALL PZDSCAL( N, REC, X, IX, JX, DESCX, 1 )
+                         XJTMP = XJTMP*REC
+                         SCALE = SCALE*REC
+-                        XMAX = XMAX*REC
++                        XMAX( 1 ) = XMAX( 1 )*REC
+                      END IF
+ *                    X( J ) = ZLADIV( X( J ), TJJS )
+                      XJTMP = ZLADIV( XJTMP, TJJS )
+@@ -1181,7 +1182,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+      $                  X( IROWX ) = CONE
+                      XJTMP = CONE
+                      SCALE = ZERO
+-                     XMAX = ZERO
++                     XMAX( 1 ) = ZERO
+                   END IF
+   130             CONTINUE
+                ELSE
+@@ -1194,7 +1195,7 @@ SUBROUTINE PZLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
+                   IF( ( MYROW.EQ.ITMP1X ) .AND. ( MYCOL.EQ.ITMP2X ) )
+      $               X( IROWX ) = XJTMP
+                END IF
+-               XMAX = MAX( XMAX, CABS1( XJTMP ) )
++               XMAX( 1 ) = MAX( XMAX( 1 ), CABS1( XJTMP ) )
+   140       CONTINUE
+          END IF
+          SCALE = SCALE / TSCAL
+diff --git a/SRC/pzlawil.f b/SRC/pzlawil.f
+index e89a9a3..7e502ef 100644
+--- a/SRC/pzlawil.f
++++ b/SRC/pzlawil.f
+@@ -124,11 +124,10 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+      $                   MODKM1, MYCOL, MYROW, NPCOL, NPROW, NUM, RIGHT,
+      $                   RSRC, UP
+       DOUBLE PRECISION   S
+-      COMPLEX*16         CDUM, H11, H12, H21, H22, H33S, H44S, V1, V2,
+-     $                   V3
++      COMPLEX*16         CDUM, H22, H33S, H44S, V1, V2
+ *     ..
+ *     .. Local Arrays ..
+-      COMPLEX*16         BUF( 4 )
++      COMPLEX*16         BUF( 4 ), H11( 1 ), H12( 1 ), H21( 1 ), V3( 1 )
+ *     ..
+ *     .. External Subroutines ..
+       EXTERNAL           BLACS_GRIDINFO, INFOG2L, ZGERV2D, ZGESD2D
+@@ -181,18 +180,18 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NPCOL.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, V3, 1, MYROW, LEFT )
+             ELSE
+-               V3 = A( ( ICOL-2 )*LDA+IROW )
++               V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+             END IF
+             IF( NUM.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 4, 1, BUF, 4, UP, LEFT )
+-               H11 = BUF( 1 )
+-               H21 = BUF( 2 )
+-               H12 = BUF( 3 )
++               H11( 1 ) = BUF( 1 )
++               H21( 1 ) = BUF( 2 )
++               H12( 1 ) = BUF( 3 )
+                H22 = BUF( 4 )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+                H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+             END IF
+          END IF
+@@ -225,20 +224,20 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+             IF( NUM.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H11, 1, UP, LEFT )
+             ELSE
+-               H11 = A( ( ICOL-3 )*LDA+IROW-2 )
++               H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
+             END IF
+             IF( NPROW.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H12, 1, UP, MYCOL )
+             ELSE
+-               H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++               H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+             END IF
+             IF( NPCOL.GT.1 ) THEN
+                CALL ZGERV2D( CONTXT, 1, 1, H21, 1, MYROW, LEFT )
+             ELSE
+-               H21 = A( ( ICOL-3 )*LDA+IROW-1 )
++               H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
+             END IF
+             H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-            V3 = A( ( ICOL-2 )*LDA+IROW )
++            V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+          END IF
+       END IF
+       IF( ( MYROW.NE.II ) .OR. ( MYCOL.NE.JJ ) )
+@@ -247,24 +246,24 @@ SUBROUTINE PZLAWIL( II, JJ, M, A, DESCA, H44, H33, H43H34, V )
+       IF( MODKM1.GT.1 ) THEN
+          CALL INFOG2L( M+2, M+2, DESCA, NPROW, NPCOL, MYROW, MYCOL,
+      $                 IROW, ICOL, RSRC, JSRC )
+-         H11 = A( ( ICOL-3 )*LDA+IROW-2 )
+-         H21 = A( ( ICOL-3 )*LDA+IROW-1 )
+-         H12 = A( ( ICOL-2 )*LDA+IROW-2 )
++         H11( 1 ) = A( ( ICOL-3 )*LDA+IROW-2 )
++         H21( 1 ) = A( ( ICOL-3 )*LDA+IROW-1 )
++         H12( 1 ) = A( ( ICOL-2 )*LDA+IROW-2 )
+          H22 = A( ( ICOL-2 )*LDA+IROW-1 )
+-         V3 = A( ( ICOL-2 )*LDA+IROW )
++         V3( 1 ) = A( ( ICOL-2 )*LDA+IROW )
+       END IF
+ *
+-      H44S = H44 - H11
+-      H33S = H33 - H11
+-      V1 = ( H33S*H44S-H43H34 ) / H21 + H12
+-      V2 = H22 - H11 - H33S - H44S
+-      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3 )
++      H44S = H44 - H11( 1 )
++      H33S = H33 - H11( 1 )
++      V1 = ( H33S*H44S-H43H34 ) / H21( 1 ) + H12( 1 )
++      V2 = H22 - H11( 1 ) - H33S - H44S
++      S = CABS1( V1 ) + CABS1( V2 ) + CABS1( V3( 1 ) )
+       V1 = V1 / S
+       V2 = V2 / S
+-      V3 = V3 / S
++      V3( 1 ) = V3( 1 ) / S
+       V( 1 ) = V1
+       V( 2 ) = V2
+-      V( 3 ) = V3
++      V( 3 ) = V3( 1 )
+ *
+       RETURN
+ *
+diff --git a/SRC/pztrevc.f b/SRC/pztrevc.f
+index 0536475..3b27286 100644
+--- a/SRC/pztrevc.f
++++ b/SRC/pztrevc.f
+@@ -218,11 +218,12 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $                   ITMP2, J, K, KI, LDT, LDVL, LDVR, LDW, MB,
+      $                   MYCOL, MYROW, NB, NPCOL, NPROW, RSRC
+       REAL               SELF
+-      DOUBLE PRECISION   OVFL, REMAXD, SCALE, SMIN, SMLNUM, ULP, UNFL
++      DOUBLE PRECISION   OVFL, REMAXD, SCALE, SMLNUM, ULP, UNFL
+       COMPLEX*16         CDUM, REMAXC, SHIFT
+ *     ..
+ *     .. Local Arrays ..
+       INTEGER            DESCW( DLEN_ )
++      DOUBLE PRECISION   SMIN( 1 )
+ *     ..
+ *     .. External Functions ..
+       LOGICAL            LSAME
+@@ -355,13 +356,13 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 70
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL DGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL ZGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -396,8 +397,9 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN ) THEN
+-                     T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $            THEN
++                     T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN( 1 ) )
+                   END IF
+                END IF
+    50       CONTINUE
+@@ -467,13 +469,13 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+      $            GO TO 110
+             END IF
+ *
+-            SMIN = ZERO
++            SMIN( 1 ) = ZERO
+             SHIFT = CZERO
+             CALL INFOG2L( KI, KI, DESCT, NPROW, NPCOL, MYROW, MYCOL,
+      $                    IROW, ICOL, ITMP1, ITMP2 )
+             IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                SHIFT = T( ( ICOL-1 )*LDT+IROW )
+-               SMIN = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
++               SMIN( 1 ) = MAX( ULP*( CABS1( SHIFT ) ), SMLNUM )
+             END IF
+             CALL DGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SMIN, 1, -1, -1 )
+             CALL ZGSUM2D( CONTXT, 'ALL', ' ', 1, 1, SHIFT, 1, -1, -1 )
+@@ -507,8 +509,8 @@ SUBROUTINE PZTREVC( SIDE, HOWMNY, SELECT, N, T, DESCT, VL, DESCVL,
+                IF( ( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) THEN
+                   T( ( ICOL-1 )*LDT+IROW ) = T( ( ICOL-1 )*LDT+IROW ) -
+      $               SHIFT
+-                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN )
+-     $               T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN )
++                  IF( CABS1( T( ( ICOL-1 )*LDT+IROW ) ).LT.SMIN( 1 ) )
++     $               T( ( ICOL-1 )*LDT+IROW ) = DCMPLX( SMIN( 1 ) )
+                END IF
+    90       CONTINUE
+ *
+
+From 189c84001bcd564296a475c5c757afc9f337e828 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tiziano=20M=C3=BCller?= <tiziano.mueller@chem.uzh.ch>
+Date: Thu, 25 Jun 2020 18:37:34 +0200
+Subject: [PATCH] use -std=legacy for tests with GCC-10+
+
+---
+ BLACS/TESTING/CMakeLists.txt | 10 +++++++---
+ PBLAS/TESTING/CMakeLists.txt |  7 ++++---
+ PBLAS/TIMING/CMakeLists.txt  |  5 +++--
+ TESTING/EIG/CMakeLists.txt   |  3 +++
+ TESTING/LIN/CMakeLists.txt   |  4 ++++
+ 5 files changed, 21 insertions(+), 8 deletions(-)
+
+diff --git a/BLACS/TESTING/CMakeLists.txt b/BLACS/TESTING/CMakeLists.txt
+index d8846b5..4e91ac2 100644
+--- a/BLACS/TESTING/CMakeLists.txt
++++ b/BLACS/TESTING/CMakeLists.txt
+@@ -1,10 +1,14 @@
+-set(FTestObj  
++set(FTestObj
+    blacstest.f btprim.f tools.f)
+ 
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set_source_files_properties(blacstest.f PROPERTIES COMPILE_FLAGS "-std=legacy")
++endif()
++
+ add_executable(xFbtest ${FTestObj})
+ target_link_libraries(xFbtest scalapack)
+ 
+-set(CTestObj  
++set(CTestObj
+    Cbt.c)
+ 
+ set_property(
+@@ -46,4 +50,4 @@ add_test(xFbtest
+     -DRUNTIMEDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+     -DSOURCEDIR=${CMAKE_CURRENT_SOURCE_DIR}
+     -P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake
+-    )
+\ No newline at end of file
++    )
+diff --git a/PBLAS/TESTING/CMakeLists.txt b/PBLAS/TESTING/CMakeLists.txt
+index e60f5e4..ee77091 100644
+--- a/PBLAS/TESTING/CMakeLists.txt
++++ b/PBLAS/TESTING/CMakeLists.txt
+@@ -10,7 +10,7 @@ set (zpbtcom pzblastst.f dlamch.f ${pbtcom})
+ 
+ set_property(
+    SOURCE ${PblasErrorHandler}
+-   APPEND PROPERTY COMPILE_DEFINITIONS TestingPblas 
++   APPEND PROPERTY COMPILE_DEFINITIONS TestingPblas
+    )
+ 
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/PBLAS/TESTING)
+@@ -74,5 +74,6 @@ add_test(dpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./dpb3tst)
+ add_test(cpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./cpb3tst)
+ add_test(zpb3tst ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./zpb3tst)
+ 
+-
+-
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/PBLAS/TIMING/CMakeLists.txt b/PBLAS/TIMING/CMakeLists.txt
+index 763330f..208bbc3 100644
+--- a/PBLAS/TIMING/CMakeLists.txt
++++ b/PBLAS/TIMING/CMakeLists.txt
+@@ -74,5 +74,6 @@ add_test(dpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./dpb3tim)
+ add_test(cpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./cpb3tim)
+ add_test(zpb3tim ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 4 ./zpb3tim)
+ 
+-
+-
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/TESTING/EIG/CMakeLists.txt b/TESTING/EIG/CMakeLists.txt
+index 97c7036..19a1f34 100644
+--- a/TESTING/EIG/CMakeLists.txt
++++ b/TESTING/EIG/CMakeLists.txt
+@@ -97,3 +97,6 @@ target_link_libraries(xzheevr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xshseqr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xdhseqr scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ 
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
+diff --git a/TESTING/LIN/CMakeLists.txt b/TESTING/LIN/CMakeLists.txt
+index 55a53e9..65f169b 100644
+--- a/TESTING/LIN/CMakeLists.txt
++++ b/TESTING/LIN/CMakeLists.txt
+@@ -110,3 +110,7 @@ target_link_libraries(xsls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xdls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xcls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
+ target_link_libraries(xzls scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES})
++
++if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
++    set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy" )  # local to this directory
++endif()
diff --git a/gnu/packages/patches/strace-readlink-tests.patch b/gnu/packages/patches/strace-readlink-tests.patch
new file mode 100644
index 0000000000..dd5ee98703
--- /dev/null
+++ b/gnu/packages/patches/strace-readlink-tests.patch
@@ -0,0 +1,46 @@
+Prevent strace's "readlink" and "readlinkat" tests from failing due to the
+additional system call made by glibc with the patch "glibc-dl-cache.patch"
+applied (introduced in commit 52564e9).
+
+These changes cause strace to report during these tests only system calls on
+files contained in the test directory, effectively filtering out the
+additional readlink/readlinkat call on "/proc/self/exe" and allowing the tests
+to complete as normal.
+
+diff --git a/tests/gen_tests.in b/tests/gen_tests.in
+index 8b4e2e9..cc3ca63 100644
+--- a/tests/gen_tests.in
++++ b/tests/gen_tests.in
+@@ -623,8 +623,8 @@ quotactl-xfs-v	-v -e trace=quotactl
+ read-write	-a15 -eread=0,5 -ewrite=1,4 -e trace=read,write -P read-write-tmpfile -P /dev/zero -P /dev/null
+ readahead	-a1
+ readdir	-a16
+-readlink	-xx
+-readlinkat	-xx
++readlink	-xx --trace-path=test.readlink.link
++readlinkat	-xx --trace-path=test.readlinkat.link
+ reboot		-s 256
+ recv-MSG_TRUNC	-a26 -e trace=recv
+ recvfrom	-a35
+diff --git a/tests/readlink.gen.test b/tests/readlink.gen.test
+index 4263234..418691b 100755
+--- a/tests/readlink.gen.test
++++ b/tests/readlink.gen.test
+@@ -1,4 +1,4 @@
+ #!/bin/sh -efu
+-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx ); do not edit.
++# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx --trace-path=test.readlink.link); do not edit.
+ . "${srcdir=.}/init.sh"
+-run_strace_match_diff -xx 
++run_strace_match_diff -xx --trace-path=test.readlink.link
+diff --git a/tests/readlinkat.gen.test b/tests/readlinkat.gen.test
+index d7de993..a48d590 100755
+--- a/tests/readlinkat.gen.test
++++ b/tests/readlinkat.gen.test
+@@ -1,4 +1,4 @@
+ #!/bin/sh -efu
+-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx ); do not edit.
++# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx --trace-path=test.readlinkat.link); do not edit.
+ . "${srcdir=.}/init.sh"
+-run_strace_match_diff -xx 
++run_strace_match_diff -xx --trace-path=test.readlinkat.link
diff --git a/gnu/packages/patches/syslinux-gcc10.patch b/gnu/packages/patches/syslinux-gcc10.patch
new file mode 100644
index 0000000000..8d3750b36e
--- /dev/null
+++ b/gnu/packages/patches/syslinux-gcc10.patch
@@ -0,0 +1,87 @@
+Taken from Gentoo and adapted to fix the build using GCC 10. See:
+https://bugs.gentoo.org/705730.
+
+--- a/mk/com32.mk
++++ b/mk/com32.mk
+@@ -47,6 +47,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ ifeq ($(FWCLASS),EFI)
+ GCCOPT += -mno-red-zone
+--- a/mk/elf.mk
++++ b/mk/elf.mk
+@@ -42,6 +42,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ com32 = $(topdir)/com32
+ core = $(topdir)/core
+--- a/mk/embedded.mk
++++ b/mk/embedded.mk
+@@ -51,6 +51,7 @@ GCCOPT    += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT    += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT    += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
+ GCCOPT    += $(call gcc_ok,-fvisibility=hidden)
++GCCOPT    += $(call gcc_ok,-fcommon)
+ 
+ LIBGCC    := $(shell $(CC) $(GCCOPT) --print-libgcc)
+ 
+--- a/mk/lib.mk
++++ b/mk/lib.mk
+@@ -28,6 +28,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+ GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
++GCCOPT += $(call gcc_ok,-fcommon)
+ 
+ INCLUDE	= -I$(SRC)
+ STRIP	= strip --strip-all -R .comment -R .note
+--- a/mk/efi.mk
++++ b/mk/efi.mk
+@@ -7,7 +7,7 @@ core = $(topdir)/core
+ # Set up architecture specifics; for cross compilation, set ARCH as apt
+ # gnuefi sets up architecture specifics in ia32 or x86_64 sub directories
+ # set up the LIBDIR and EFIINC for building for the appropriate architecture
+-GCCOPT := $(call gcc_ok,-fno-stack-protector,)
++GCCOPT := $(call gcc_ok,-fno-stack-protector,) $(call gcc_ok,-fcommon)
+ EFIINC = $(objdir)/include/efi
+ LIBDIR  = $(objdir)/lib
+ 
+diff --git a/dos/string.h b/dos/string.h
+index f648de2..a502132 100644
+--- a/dos/string.h
++++ b/dos/string.h
+@@ -5,12 +5,13 @@
+ #ifndef _STRING_H
+ #define _STRING_H
+ 
++#include <stddef.h>
++
+ /* Standard routines */
+ #define memcpy(a,b,c)	__builtin_memcpy(a,b,c)
+ #define memmove(a,b,c)	__builtin_memmove(a,b,c)
+ #define memset(a,b,c)	__builtin_memset(a,b,c)
+ #define strcpy(a,b)	__builtin_strcpy(a,b)
+-#define strlen(a)	__builtin_strlen(a)
+ 
+ /* This only returns true or false */
+ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
+@@ -21,6 +22,13 @@ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
+     return rv;
+ }
+ 
++static inline size_t strlen(const char *s)
++{
++    size_t len = 0;
++    while (*s++) len++;
++    return len;
++}
++
+ extern char *strchr(const char *s, int c);
+ 
+ #endif /* _STRING_H */
\ No newline at end of file
diff --git a/gnu/packages/patches/syslinux-strip-gnu-property.patch b/gnu/packages/patches/syslinux-strip-gnu-property.patch
new file mode 100644
index 0000000000..c656bbeedd
--- /dev/null
+++ b/gnu/packages/patches/syslinux-strip-gnu-property.patch
@@ -0,0 +1,31 @@
+Taken from: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906414.
+
+Author: Lukas Schwaighofer <lukas@schwaighofer.name>
+Description: Strip the .note.gnu.property section for the mbr. This section is
+ added since binutils Debian version 2.31.1-2 and causes mbr.bin to grow in
+ size beyond what can fit into the master boot record.
+---
+ mbr/i386/mbr.ld   | 1 +
+ mbr/x86_64/mbr.ld | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/mbr/i386/mbr.ld b/mbr/i386/mbr.ld
+index d14ba80..5368346 100644
+--- a/mbr/i386/mbr.ld
++++ b/mbr/i386/mbr.ld
+@@ -70,4 +70,5 @@ SECTIONS
+   .debug_typenames 0 : { *(.debug_typenames) }
+   .debug_varnames  0 : { *(.debug_varnames) }
+   /DISCARD/ : { *(.note.GNU-stack) }
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
+diff --git a/mbr/x86_64/mbr.ld b/mbr/x86_64/mbr.ld
+index ae27d49..b8c0d89 100644
+--- a/mbr/x86_64/mbr.ld
++++ b/mbr/x86_64/mbr.ld
+@@ -69,4 +69,5 @@ SECTIONS
+   .debug_typenames 0 : { *(.debug_typenames) }
+   .debug_varnames  0 : { *(.debug_varnames) }
+   /DISCARD/ : { *(.note.GNU-stack) }
++  /DISCARD/ : { *(.note.gnu.property) }
+ }
diff --git a/gnu/packages/patches/tcl-fix-cross-compilation.patch b/gnu/packages/patches/tcl-fix-cross-compilation.patch
deleted file mode 100644
index 00c36b8f27..0000000000
--- a/gnu/packages/patches/tcl-fix-cross-compilation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From f7fa48c4c75a1e748dc5071e709c0b62ff739eaa Mon Sep 17 00:00:00 2001
-From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
-Date: Mon, 9 Dec 2019 10:02:20 +0000
-Subject: [PATCH] Fix [abd4abedd2]: Failed to build tk 8.6.10 with cross
- compile
-
-Patch taken from upstream to fix cross-compilation. To be removed on next Tcl release.
-
----
- compat/strtol.c  | 2 +-
- compat/strtoul.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/compat/strtol.c b/compat/strtol.c
-index b7f69196ce2..811006a64c3 100644
---- a/compat/strtol.c
-+++ b/compat/strtol.c
-@@ -53,7 +53,7 @@ strtol(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
- 
-diff --git a/compat/strtoul.c b/compat/strtoul.c
-index e37eb05f823..15587f1da1a 100644
---- a/compat/strtoul.c
-+++ b/compat/strtoul.c
-@@ -74,7 +74,7 @@ strtoul(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
-     if (*p == '-') {
diff --git a/gnu/packages/patches/tcsh-fix-autotest.patch b/gnu/packages/patches/tcsh-fix-autotest.patch
index 200867cb9b..9f5790641b 100644
--- a/gnu/packages/patches/tcsh-fix-autotest.patch
+++ b/gnu/packages/patches/tcsh-fix-autotest.patch
@@ -63,17 +63,6 @@
  
  AT_DATA([comment2.csh],
  [[echo testing...@%:@\
---- tests/subst.at
-+++ tests/subst.at
-@@ -54,7 +54,7 @@ AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }')
- , [1
- ])
- 
--AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)/foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
-+AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)//foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
- 	  | wc -l | tr -d ' \t'], , [1
- ])
- 
 --- tests/variables.at
 +++ tests/variables.at
 @@ -666,7 +666,8 @@ set listflags=(-xA $cwd/args.sh)
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.83.patch b/gnu/packages/patches/texlive-bin-poppler-0.83.patch
deleted file mode 100644
index 5e57e3efac..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.83.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-Fix build with Poppler 0.83 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.83.patch?h=packages/texlive-bin
-
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-@@ -723,7 +723,7 @@
- #endif
-     // initialize
-     if (!isInit) {
--        globalParams = new GlobalParams();
-+        globalParams.reset(new GlobalParams());
-         globalParams->setErrQuiet(false);
-         isInit = true;
-     }
-@@ -1108,6 +1108,5 @@
-             delete_document(p);
-         }
-         // see above for globalParams
--        delete globalParams;
-     }
- }
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-@@ -79,7 +79,7 @@
-         exit(1);
-     }
-     fileName = new GString(argv[1]);
--    globalParams = new GlobalParams();
-+    globalParams.reset(new GlobalParams());
-     doc = new PDFDoc(fileName);
-     if (!doc->isOk()) {
-         fprintf(stderr, "Invalid PDF file\n");
-@@ -100,7 +100,7 @@
-     if (objnum == 0) {
-         srcStream = catalogDict.dictLookup("SourceObject");
-         static char const_SourceFile[] = "SourceFile";
--        if (!srcStream.isStream(const_SourceFile)) {
-+        if (!srcStream.isDict(const_SourceFile)) {
-             fprintf(stderr, "No SourceObject found\n");
-             exit(1);
-         }
-@@ -202,5 +202,4 @@
-         fprintf(stderr, "Cross-reference table extracted to %s\n", outname);
-     fclose(outfile);
-     delete doc;
--    delete globalParams;
- }
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.86.patch b/gnu/packages/patches/texlive-bin-poppler-0.86.patch
deleted file mode 100644
index b1adca657b..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.86.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Fix build with Poppler 0.86 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.86.patch?h=packages/texlive-bin
-
---- a/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:11:35.102711802 +0000
-+++ b/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:13:13.057420111 +0000
-@@ -757,7 +757,7 @@
-     if (page_name) {
-         // get page by name
-         GString name(page_name);
--        LinkDest *link = pdf_doc->doc->findDest(&name);
-+        LinkDest *link = pdf_doc->doc->findDest(&name).get();
-         if (link == 0 || !link->isOk())
-             pdftex_fail("PDF inclusion: invalid destination <%s>", page_name);
-         Ref ref = link->getPageRef();
diff --git a/gnu/packages/patches/tor-sandbox-i686.patch b/gnu/packages/patches/tor-sandbox-i686.patch
new file mode 100644
index 0000000000..34b0a053b1
--- /dev/null
+++ b/gnu/packages/patches/tor-sandbox-i686.patch
@@ -0,0 +1,36 @@
+This patch fixes sandboxing on i686 by allowing 'statx'.  Without this,
+'src/test/test_include.sh' would fail.
+
+Patch adapted from:
+
+  https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/480
+
+From 001d880d1082f5d124e10554e2718e407c7e88c6 Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Fri, 5 Nov 2021 10:10:10 -0400
+Subject: [PATCH] sandbox: Allow "statx" syscall on i386 for glibc 2.33
+
+glibc versions 2.33 and newer use the modern "statx" system call in their
+implementations of stat() and opendir() for Linux on i386.  Prevent failures in
+the sandbox unit tests by modifying the sandbox to allow this system call
+without restriction on i386 when it is available, and update the test suite to
+skip the "sandbox/stat_filename" test in this case as it is certain to fail.
+---
+ src/lib/sandbox/sandbox.c | 3 +++
+ src/test/test_sandbox.c   | 7 ++++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/lib/sandbox/sandbox.c b/src/lib/sandbox/sandbox.c
+index fb02a345ab..a15f99ad76 100644
+--- a/src/lib/sandbox/sandbox.c
++++ b/src/lib/sandbox/sandbox.c
+@@ -252,6 +252,9 @@ static int filter_nopar_gen[] = {
+     SCMP_SYS(sigreturn),
+ #endif
+     SCMP_SYS(stat),
++#if defined(__i386__) && defined(__NR_statx)
++    SCMP_SYS(statx),
++#endif
+     SCMP_SYS(uname),
+     SCMP_SYS(wait4),
+     SCMP_SYS(write),
diff --git a/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch b/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch
deleted file mode 100644
index e7d4c8bb86..0000000000
--- a/gnu/packages/patches/transmission-remote-gtk-fix-appstream.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Fix a bug related to AppStream:
-
-https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues/95
-
-Patch adapted from upstream source repository:
-
-https://github.com/transmission-remote-gtk/transmission-remote-gtk/commit/89259ff90c703c7fe6768b5317803b9aa5b5ab8c
-
-From 89259ff90c703c7fe6768b5317803b9aa5b5ab8c Mon Sep 17 00:00:00 2001
-From: Alan <alan-github@eth0.org.uk>
-Date: Tue, 17 Nov 2020 01:26:22 +0000
-Subject: [PATCH] fix screenshot and add OARS rating so appdata validates
-
----
- README.md                                           | 5 ++---
- data/io.github.TransmissionRemoteGtk.appdata.xml.in | 5 +++--
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/README.md b/README.md
-index 4306cc7..d38314b 100644
---- a/README.md
-+++ b/README.md
-@@ -6,13 +6,12 @@ the Transmission BitTorrent client, using its HTTP RPC protocol.
- 
- # DEPENDENCIES
- 
--The following packages are required dependencies:
-+The following packages are required dependencies (debian/ubuntu).
- 
- ```bash
--autoconf-archive appstream-glib intltool
-+libgtk-3-dev automake autoconf gcc libgeoip-dev gettext autoconf-archive libappstream-dev appstream-util libcurl4-openssl-dev libjson-glib-dev
- ```
- 
--
- # BUILDING
- 
- Optionally install `libgeoip` and its headers to see the country
-diff --git a/data/io.github.TransmissionRemoteGtk.appdata.xml.in b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-index fc35a8f..1476c2a 100644
---- a/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-+++ b/data/io.github.TransmissionRemoteGtk.appdata.xml.in
-@@ -7,6 +7,7 @@
-   <translation type="gettext">transmission-remote-gtk</translation>
-   <name>Transmission Remote</name>
-   <developer_name>Transmission Remote Gtk Team</developer_name>
-+  <content_rating type="oars-1.1" />
-   <summary>Remotely manage the Transmission BitTorrent client</summary>
-   <url type="homepage">https://github.com/transmission-remote-gtk/transmission-remote-gtk</url>
-   <url type="bugtracker">https://github.com/transmission-remote-gtk/transmission-remote-gtk/issues</url>
-@@ -23,8 +24,8 @@
-     </ul>
-   </description>
-   <screenshots>
--    <screenshot height="576" width="1024" type="default">
--      <image>http://eth0.org.uk/~alan/transmission-remote-gtk-1.1.1.png</image>
-+    <screenshot height="512" width="973" type="default">
-+      <image>https://community.linuxmint.com/img/screenshots/transmission-remote-gtk.png</image>
-     </screenshot>
-   </screenshots>
-   <releases>
diff --git a/gnu/packages/patches/vigra-python-compat.patch b/gnu/packages/patches/vigra-python-compat.patch
deleted file mode 100644
index 63c6abb326..0000000000
--- a/gnu/packages/patches/vigra-python-compat.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Fix build with Boost + Python 3.7.
-
-Taken from upstream:
-https://github.com/ukoethe/vigra/commit/a6fa62663c6a6b752ed0707e95f643e25867a0f9
-
-diff --git a/vigranumpy/src/core/vigranumpycore.cxx b/vigranumpy/src/core/vigranumpycore.cxx
-index ec38d3636..c81c6ae52 100644
---- a/vigranumpy/src/core/vigranumpycore.cxx
-+++ b/vigranumpy/src/core/vigranumpycore.cxx
-@@ -61,7 +61,7 @@ UInt32 pychecksum(python::str const & s)
- 	return checksum(data, size);
- #else
- 	Py_ssize_t size = 0;
--	char * data = PyUnicode_AsUTF8AndSize(s.ptr(), &size);
-+	const char * data = PyUnicode_AsUTF8AndSize(s.ptr(), &size);
- 	return checksum(data, size);
- #endif
- }
diff --git a/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch b/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch
new file mode 100644
index 0000000000..b85acdd401
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-mach64-bool-to-boolean.patch
@@ -0,0 +1,79 @@
+From ff1a69144735298d1a190fa23b3ae5747e914859 Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Thu, 18 Nov 2021 13:18:25 +0000
+Subject: [PATCH] Rename bool to boolean for OptionInfoRec.
+
+* src/aticonfig.c: Change uses of .value.bool to .value.boolean
+---
+ src/aticonfig.c | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/src/aticonfig.c b/src/aticonfig.c
+index 621e79e..8ea0c6e 100644
+--- a/src/aticonfig.c
++++ b/src/aticonfig.c
+@@ -311,42 +311,42 @@ ATIProcessOptions
+ 
+     (void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize);
+ 
+-#   define ProbeSparse   PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool
+-#   define Accel         PublicOption[ATI_OPTION_ACCEL].value.bool
+-#   define BIOSDisplay   PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool
+-#   define Blend         PrivateOption[ATI_OPTION_BLEND].value.bool
+-#   define CRTDisplay    PublicOption[ATI_OPTION_CRT_DISPLAY].value.bool
+-#   define CRTScreen     PrivateOption[ATI_OPTION_CRT_SCREEN].value.bool
+-#   define CSync         PublicOption[ATI_OPTION_CSYNC].value.bool
+-#   define Devel         PrivateOption[ATI_OPTION_DEVEL].value.bool
+-#   define HWCursor      PublicOption[ATI_OPTION_HWCURSOR].value.bool
++#   define ProbeSparse   PublicOption[ATI_OPTION_PROBE_SPARSE].value.boolean
++#   define Accel         PublicOption[ATI_OPTION_ACCEL].value.boolean
++#   define BIOSDisplay   PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.boolean
++#   define Blend         PrivateOption[ATI_OPTION_BLEND].value.boolean
++#   define CRTDisplay    PublicOption[ATI_OPTION_CRT_DISPLAY].value.boolean
++#   define CRTScreen     PrivateOption[ATI_OPTION_CRT_SCREEN].value.boolean
++#   define CSync         PublicOption[ATI_OPTION_CSYNC].value.boolean
++#   define Devel         PrivateOption[ATI_OPTION_DEVEL].value.boolean
++#   define HWCursor      PublicOption[ATI_OPTION_HWCURSOR].value.boolean
+ 
+ #ifdef XF86DRI_DEVEL
+ 
+-#   define IsPCI       PublicOption[ATI_OPTION_IS_PCI].value.bool
++#   define IsPCI       PublicOption[ATI_OPTION_IS_PCI].value.boolean
+ #   define DMAMode     PublicOption[ATI_OPTION_DMA_MODE].value.str
+ #   define AGPMode     PublicOption[ATI_OPTION_AGP_MODE].value.num
+ #   define AGPSize     PublicOption[ATI_OPTION_AGP_SIZE].value.num
+-#   define LocalTex    PublicOption[ATI_OPTION_LOCAL_TEXTURES].value.bool
++#   define LocalTex    PublicOption[ATI_OPTION_LOCAL_TEXTURES].value.boolean
+ #   define BufferSize  PublicOption[ATI_OPTION_BUFFER_SIZE].value.num
+ 
+ #endif /* XF86DRI_DEVEL */
+ 
+ #ifdef TV_OUT
+ 
+-#   define TvOut        PublicOption[ATI_OPTION_TV_OUT].value.bool
++#   define TvOut        PublicOption[ATI_OPTION_TV_OUT].value.boolean
+ #   define TvStd        PublicOption[ATI_OPTION_TV_STD].value.str
+ 
+ #endif /* TV_OUT */
+ 
+-#   define CacheMMIO     PublicOption[ATI_OPTION_MMIO_CACHE].value.bool
+-#   define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.bool
+-#   define PanelDisplay  PublicOption[ATI_OPTION_PANEL_DISPLAY].value.bool
+-#   define ShadowFB      PublicOption[ATI_OPTION_SHADOW_FB].value.bool
+-#   define SWCursor      PublicOption[ATI_OPTION_SWCURSOR].value.bool
++#   define CacheMMIO     PublicOption[ATI_OPTION_MMIO_CACHE].value.boolean
++#   define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.boolean
++#   define PanelDisplay  PublicOption[ATI_OPTION_PANEL_DISPLAY].value.boolean
++#   define ShadowFB      PublicOption[ATI_OPTION_SHADOW_FB].value.boolean
++#   define SWCursor      PublicOption[ATI_OPTION_SWCURSOR].value.boolean
+ #   define AccelMethod   PublicOption[ATI_OPTION_ACCELMETHOD].value.str
+-#   define RenderAccel   PublicOption[ATI_OPTION_RENDER_ACCEL].value.bool
+-#   define LCDSync       PrivateOption[ATI_OPTION_LCDSYNC].value.bool
++#   define RenderAccel   PublicOption[ATI_OPTION_RENDER_ACCEL].value.boolean
++#   define LCDSync       PrivateOption[ATI_OPTION_LCDSYNC].value.boolean
+ 
+ #   define ReferenceClock \
+         PublicOption[ATI_OPTION_REFERENCE_CLOCK].value.freq.freq
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch b/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch
new file mode 100644
index 0000000000..a18e3f8ab9
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-nouveau-fixup-ABI.patch
@@ -0,0 +1,64 @@
+From e80e73ced69b15662103d0fd6837db4ce6c6eb5b Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Mon, 13 Jul 2020 09:20:15 +1000
+Subject: [PATCH] nouveau: fixup driver for new X server ABI
+
+---
+ src/compat-api.h  | 4 ++++
+ src/nouveau_exa.c | 2 +-
+ src/nv_driver.c   | 6 +++---
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/compat-api.h b/src/compat-api.h
+index fde2f4b..8a1fcf9 100644
+--- a/src/compat-api.h
++++ b/src/compat-api.h
+@@ -102,4 +102,8 @@
+ 
+ #endif
+ 
++#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2)
++#define secondary_dst slave_dst
++#endif
++
+ #endif
+diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
+index 55df6f8..db3b112 100644
+--- a/src/nouveau_exa.c
++++ b/src/nouveau_exa.c
+@@ -157,7 +157,7 @@ nouveau_exa_destroy_pixmap(ScreenPtr pScreen, void *priv)
+ 
+ #ifdef NOUVEAU_PIXMAP_SHARING
+ static Bool
+-nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr slave, void **handle_p)
++nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr secondary, void **handle_p)
+ {
+ 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
+ 	struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix);
+diff --git a/src/nv_driver.c b/src/nv_driver.c
+index e72a6b6..f9ab4af 100644
+--- a/src/nv_driver.c
++++ b/src/nv_driver.c
+@@ -559,16 +559,16 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty)
+ {
+ 	RegionRec pixregion;
+ 
+-	PixmapRegionInit(&pixregion, dirty->slave_dst);
++	PixmapRegionInit(&pixregion, dirty->secondary_dst);
+ 
+-	DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion);
++	DamageRegionAppend(&dirty->secondary_dst->drawable, &pixregion);
+ #ifdef HAS_DIRTYTRACKING_ROTATION
+ 	PixmapSyncDirtyHelper(dirty);
+ #else
+ 	PixmapSyncDirtyHelper(dirty, &pixregion);
+ #endif
+ 
+-	DamageRegionProcessPending(&dirty->slave_dst->drawable);
++	DamageRegionProcessPending(&dirty->secondary_dst->drawable);
+ 	RegionUninit(&pixregion);
+ }
+ 
+-- 
+2.33.1
+
diff --git a/gnu/packages/patches/xygrib-fix-finding-data.patch b/gnu/packages/patches/xygrib-fix-finding-data.patch
new file mode 100644
index 0000000000..0b718b0eff
--- /dev/null
+++ b/gnu/packages/patches/xygrib-fix-finding-data.patch
@@ -0,0 +1,131 @@
+This is a backport of the commits in PR 235 (“Fixes for packaging on
+linux-like systems”), which was merged upstream:
+
+https://github.com/opengribs/XyGrib/pull/235
+
+It fixes finding resources such as icons, maps and translations installed in
+the data directory.  This patch has been merged upstream and can be removed
+with the next release.
+
+Sightly adapted to find openjpg-2.4.
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 64059ab65dae..00cc5d6aea6f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,6 +7,9 @@ set(VERSION_PATCH 6)
+ set(XYGRIB_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
+ set(XYGRIB_VERSION_DATE "2019-07-05")
+ 
++option(GNU_PACKAGE "Install into GNU standard directories" OFF)
++option(GEN_TRANSLATIONS "Generate translations" ON)
++
+ set(CMAKE_VERBOSE_MAKEFILE ON)
+ 
+ # Find includes in corresponding build directories
+@@ -25,7 +28,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
+ set(CMAKE_CXX_STANDARD 11)
+ #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
+ if(UNIX AND NOT APPLE)
+-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC")
++add_compile_options(-Wall -fPIC)
+ endif()
+ 
+ # Add support for address etc sanitizers, part 1/2 (other half after ADD_EXECUTABLE)
+@@ -108,17 +111,12 @@ find_path(OPENJPEG_INCLUDE_DIR
+      ~/Library/Frameworks/include
+      /Library/Frameworks/include
+      /usr/local/include
+-     /usr/local/include/openjpeg-2.3
+-     /usr/include/openjpeg-2.3
+-     /usr/local/include/openjpeg-2.1
+-     /usr/include/openjpeg-2.1
+-     /usr/local/include/openjpeg-2.2
+-     /usr/include/openjpeg-2.2
+      /usr/include
+      /sw/include # Fink
+      /opt/local/include # DarwinPorts
+      /opt/csw/include # Blastwave
+      /opt/include
++     PATH_SUFFIXES openjpeg-2.4 openjpeg-2.3 openjpeg-2.2 openjpeg-2.1
+      REQUIRED
+  )
+ include_directories(${OPENJPEG_INCLUDE_DIR})
+@@ -212,22 +210,24 @@ include_directories(${PNG_INCLUDE_DIR})
+ configure_file(cmake/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/Version.h)
+ include_directories(${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include)
+ 
+-if(APPLE)
+-set(PREFIX_BIN ${PROJECT_NAME})
+-set(PREFIX_PKGDATA ${PROJECT_NAME})
+-endif()
+-if(WIN32)
+-set(PREFIX_BIN ".")
+-set(PREFIX_PKGDATA ".")
+-endif()
+-if(UNIX AND NOT APPLE)
+-# This is not exactly a good idea on linux - the code should be changed so that the executable would go to /usr/local/bin and the data to /usr/local/share/XyGrib
+-set(PREFIX_BIN ${PROJECT_NAME})
+-set(PREFIX_PKGDATA ${PROJECT_NAME})
++if(GNU_PACKAGE)
++    include(GNUInstallDirs)
++    set(PREFIX_BIN ${CMAKE_INSTALL_FULL_BINDIR})
++    set(PREFIX_PKGDATA ${CMAKE_INSTALL_FULL_DATADIR}/openGribs/${PROJECT_NAME})
++else()
++    if(WIN32)
++        set(PREFIX_BIN ".")
++        set(PREFIX_PKGDATA ".")
++    else()
++        set(PREFIX_BIN ${PROJECT_NAME})
++        set(PREFIX_PKGDATA ${PROJECT_NAME})
++    endif()
+ endif()
+ 
+ add_subdirectory(src)
+-add_subdirectory(data/tr)
++if(GEN_TRANSLATIONS)
++    add_subdirectory(data/tr)
++endif()
+ 
+ # Installation
+ # macOS bundle parameters
+@@ -241,4 +241,14 @@ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_SHORT_VERSION_STR
+ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_VERSION "${XYGRIB_VERSION}")
+ set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_COPYRIGHT "${PROJECT_NAME} Authors")
+ # Install data
+-install(DIRECTORY data DESTINATION ${PREFIX_PKGDATA})
++install(DIRECTORY data DESTINATION ${PREFIX_PKGDATA}
++        PATTERN "CMakeFiles" EXCLUDE
++        PATTERN "CMakeLists.txt" EXCLUDE
++        PATTERN "Makefile" EXCLUDE
++        PATTERN "cmake_install.cmake" EXCLUDE)
++if(GNU_PACKAGE)
++    install(FILES debian/xygrib.desktop
++            DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/applications)
++    install(FILES debian/xygrib.png
++            DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/pixmaps)
++endif()
+diff --git a/INSTALL.md b/INSTALL.md
+index 2c9d3ab4da03..1190cc780182 100644
+--- a/INSTALL.md
++++ b/INSTALL.md
+@@ -22,7 +22,19 @@ https://gihub.com/opengribs/XyGrib/releases or on https://opengribs.org in the d
+   - openSUSE Tumbleweed: `sudo zypper install gcc git cmake libqt5-qtbase-devel libpng-devel openjpeg2-devel libnova-devel libproj-devel zlib-devel libbz2-devel
+ 
+ ## Build and package
++### Options
+ 
++XyGrib has two CMake options
++- GNU_PACKAGE (DEFAULT: OFF)
++```
++Files will be installed in GNU standard installation directories such as prefix/bin and prefix/share.
++Packagers are recommended to test this option.
++```
++- GEN_TRANSLATION (DEFAULT: ON)
++```
++Create targets to generate translation files.
++Turning this off removes the need for qt-linguist, part of qttools qt5 submodule, during build.
++```
+ ### macOS
+ 
+ - Get the source
diff --git a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch b/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
deleted file mode 100644
index 48b5eb18eb..0000000000
--- a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Description: fix race condition allowing attackers to access destination file
- This commit addresses https://github.com/facebook/zstd/issues/2491.
- .
- Note that a downside of this solution is that it is global: `umask()` affects
- all file creation calls in the process. I believe this is safe since
- `fileio.c` functions should only ever be used in the zstd binary, and these
- are (almost) the only files ever created by zstd, and AIUI they're only
- created in a single thread. So we can get away with messing with global state.
- .
- Note that this doesn't change the permissions of files created by `dibio.c`.
- I'm not sure what those should be...
-Author: W. Felix Handte <w@felixhandte.com>
-Origin: upstream
-Bug: https://github.com/facebook/zstd/issues/2491
-Bug-Debian: https://github.com/facebook/zstd/issues/2491
-Applied-Upstream: commit:a774c5797399040af62db21d8a9b9769e005430e
-Reviewed-by: Étienne Mollier <etienne.mollier@mailoo.org>
-Last-Update: 2021-03-03
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/programs/fileio.c
-+++ b/programs/fileio.c
-@@ -606,11 +606,11 @@ FIO_openDstFile(FIO_prefs_t* const prefs
-             FIO_remove(dstFileName);
-     }   }
- 
--    {   FILE* const f = fopen( dstFileName, "wb" );
-+    {   const int old_umask = UTIL_umask(0177); /* u-x,go-rwx */
-+        FILE* const f = fopen( dstFileName, "wb" );
-+        UTIL_umask(old_umask);
-         if (f == NULL) {
-             DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
--        } else if(srcFileName != NULL && strcmp (srcFileName, stdinmark)) {
--            chmod(dstFileName, 00600);
-         }
-         return f;
-     }
---- a/programs/util.c
-+++ b/programs/util.c
-@@ -54,6 +54,15 @@ int UTIL_getFileStat(const char* infilen
-     return 1;
- }
- 
-+int UTIL_umask(int mode) {
-+#if PLATFORM_POSIX_VERSION > 0
-+    return umask(mode);
-+#else
-+    /* do nothing, fake return value */
-+    return mode;
-+#endif
-+}
-+
- int UTIL_setFileStat(const char *filename, stat_t *statbuf)
- {
-     int res = 0;
---- a/programs/util.h
-+++ b/programs/util.h
-@@ -136,6 +136,10 @@ int UTIL_isSameFile(const char* file1, c
- int UTIL_compareStr(const void *p1, const void *p2);
- int UTIL_isCompressedFile(const char* infilename, const char *extensionList[]);
- const char* UTIL_getFileExtension(const char* infilename);
-+/**
-+ * Wraps umask(). Does nothing when the platform doesn't have that concept.
-+ */
-+int UTIL_umask(int mode);
- 
- #ifndef _MSC_VER
- U32 UTIL_isFIFO(const char* infilename);
diff --git a/gnu/packages/patches/zziplib-CVE-2018-16548.patch b/gnu/packages/patches/zziplib-CVE-2018-16548.patch
deleted file mode 100644
index a17c6a9768..0000000000
--- a/gnu/packages/patches/zziplib-CVE-2018-16548.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-The following 3 patches applied to 0.13.69 in this order, combined:
-https://github.com/gdraheim/zziplib/commit/9411bde3e4a70a81ff3ffd256b71927b2d90dcbb.patch
-https://github.com/gdraheim/zziplib/commit/d2e5d5c53212e54a97ad64b793a4389193fec687.patch
-https://github.com/gdraheim/zziplib/commit/0e1dadb05c1473b9df2d7b8f298dab801778ef99.patch
-
-diff --git a/test/test.zip b/test/test.zip
-index 2c992ea..952d475 100644
-Binary files a/test/test.zip and b/test/test.zip differ
-diff --git a/zzip/zip.c b/zzip/zip.c
-index 14e2e06..f97a40a 100644
---- a/zzip/zip.c
-+++ b/zzip/zip.c
-@@ -472,9 +472,15 @@ __zzip_parse_root_directory(int fd,
-         } else
-         {
-             if (io->fd.seeks(fd, zz_rootseek + zz_offset, SEEK_SET) < 0)
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_SEEK;
-+	    }
-             if (io->fd.read(fd, &dirent, sizeof(dirent)) < __sizeof(dirent))
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_READ;
-+	    }
-             d = &dirent;
-         }
- 
-@@ -574,11 +580,18 @@ __zzip_parse_root_directory(int fd,
- 
-         if (hdr_return)
-             *hdr_return = hdr0;
-+	else
-+	{
-+	    /* If it is not assigned to *hdr_return, it will never be free()'d */
-+	    free(hdr0);
-+	}
-     }                           /* else zero (sane) entries */
-+    else
-+        free(hdr0);
- #  ifndef ZZIP_ALLOW_MODULO_ENTRIES
--    return (entries != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return (entries != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  else
--    return ((entries & (unsigned)0xFFFF) != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return ((entries & (unsigned)0xFFFF) != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  endif
- }
- 
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 6eaf0e371c..0dd7e0450f 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -64,8 +64,7 @@
          "1va5pzmxbzpi87vdnbjm9qdf9bvzps9xfv0gi4mycgg3bybb0xc8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)))
+     (list perl python))
     (arguments
      '(#:parallel-tests? #f
        #:phases
@@ -112,11 +111,7 @@ listing the files modified by a patch.")
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)))
-    (inputs `(("perl" ,perl)
-              ("less" ,less)
-              ("file" ,file)
-              ("ed" ,ed)
-              ("diffstat" ,diffstat)))
+    (inputs (list perl less file ed diffstat))
     (arguments
      '(#:parallel-tests? #f
        #:phases
@@ -183,8 +178,7 @@ refreshed, and more.")
          (delete 'configure)            ; no configure script
          (delete 'build))))             ; nothing to build
     (inputs
-     `(("perl" ,perl)
-       ("xmlto" ,xmlto)))
+     (list perl xmlto))
     (home-page "https://www.colordiff.org")
     (synopsis "Display diff output with colors")
     (description
@@ -208,7 +202,7 @@ refreshed, and more.")
                   "11rdmhv0l1s8nqb20ywmw2zqizczch2p62qf9apyx5wqgxlnjshk"))
                 (file-name (string-append name "-"version "-checkout"))))
       (build-system python-build-system)
-      (inputs `(("python-notmuch" ,python2-notmuch)))
+      (inputs (list python2-notmuch))
       (arguments
        `(#:tests? #f                             ;no "test" target
          #:python ,python-2))                    ;not compatible with Python 3
@@ -234,7 +228,7 @@ the command-line or from Emacs via its Notmuch integration.")
                 "1f1kj4jki08bnrwpzi663mjfkrx4wnfpzdfwd2qgijlkx5ysjkgh"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://www.cjmweb.net/vbindiff/")
     (synopsis "Console-based tool for comparing binary data")
     (description "Visual Binary Diff (@command{vbindiff}) displays files in
@@ -267,7 +261,7 @@ GiB).")
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtksourceview" ,gtksourceview-3)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%python-build-system-modules)
@@ -355,7 +349,7 @@ you to figure out what is going on in that merge you keep avoiding.")
                  ;; as the python modules in this package in the wsgi.py file,
                  ;; as this will ensure they are available at runtime.
                  (define pythonpath
-                   (string-append (getenv "PYTHONPATH")
+                   (string-append (getenv "GUIX_PYTHONPATH")
                                   ":"
                                   (site-packages inputs outputs)))
                  (display
@@ -390,22 +384,22 @@ application = get_wsgi_application()\n") port)))))
                (for-each (lambda (directory)
                            (copy-recursively
                             directory
-                            (string-append out-site-packages directory)))
+                            (string-append out-site-packages "/" directory)))
                          '(;; Contains the python code
                            "patchwork"
                            ;; Contains the templates for the generated HTML
                            "templates"))
                (delete-file-recursively
-                (string-append out-site-packages "patchwork/tests"))
+                (string-append out-site-packages "/patchwork/tests"))
 
                ;; Install patchwork related tools
                (for-each (lambda (file)
                            (install-file file (string-append out "/bin")))
                          (list
                           (string-append out-site-packages
-                                         "patchwork/bin/parsemail.sh")
+                                         "/patchwork/bin/parsemail.sh")
                           (string-append out-site-packages
-                                         "patchwork/bin/parsemail-batch.sh")))
+                                         "/patchwork/bin/parsemail-batch.sh")))
 
                ;; Collect the static assets, this includes JavaScript, CSS and
                ;; fonts. This is a standard Django process when running a
@@ -459,15 +453,15 @@ if __name__ == \"__main__\":
                (chmod (string-append out "/bin/patchwork-admin") #o555))
              #t)))))
     (inputs
-     `(("python-wrapper" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-django" ,python-django-2.2)
-       ;; TODO: Make this configurable
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-mysqlclient" ,python-mysqlclient)
-       ("python-django-filter" ,python-django-filter)
-       ("python-djangorestframework" ,python-djangorestframework)
-       ("python-django-debug-toolbar" ,python-django-debug-toolbar)))
+     (list python-django-2.2
+           ;; TODO: Make this configurable
+           python-psycopg2
+           python-mysqlclient
+           python-django-filter
+           python-djangorestframework
+           python-django-debug-toolbar))
     (synopsis "Web based patch tracking system")
     (description
      "Patchwork is a patch tracking system.  It takes in emails containing
@@ -518,10 +512,7 @@ Users can login allowing them to change the state of patches.")
                             "/share/man/man1"))
              #t)))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-mock" ,python-mock)))
+     (list python-pbr python-pytest python-pytest-cov python-mock))
     (home-page
      "https://github.com/getpatchwork/pwclient")
     (synopsis "Command-line client for the Patchwork patch tracking tool")
diff --git a/gnu/packages/patool.scm b/gnu/packages/patool.scm
index a808555795..31dfd994b1 100644
--- a/gnu/packages/patool.scm
+++ b/gnu/packages/patool.scm
@@ -54,25 +54,25 @@
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("bzip2" ,bzip2)
-       ("cabextract" ,cabextract)
-       ("cdrtools" ,cdrtools)
-       ("clzip" ,clzip)
-       ("cpio" ,cpio)
-       ("dpkg" ,dpkg)
-       ("file" ,file)
-       ("flac" ,flac)
-       ("libarchive" ,libarchive)       ;for bsdtar
-       ("lhasa" ,lhasa)
-       ("lrzip" ,lrzip)
-       ("lzip" ,lzip)
-       ("lzop" ,lzop)
-       ("python-pytest" ,python-pytest)
-       ("p7zip" ,p7zip)
-       ("pbzip2" ,pbzip2)
-       ("pigz" ,pigz)
-       ("plzip" ,plzip)
-       ("rpm" ,rpm)))
+     (list bzip2
+           cabextract
+           cdrtools
+           clzip
+           cpio
+           dpkg
+           file
+           flac
+           libarchive ;for bsdtar
+           lhasa
+           lrzip
+           lzip
+           lzop
+           python-pytest
+           p7zip
+           pbzip2
+           pigz
+           plzip
+           rpm))
     (home-page "https://wummel.github.io/patool/")
     (synopsis "Portable archive file manager")
     (description "Patool provides a unified command line interface for a
diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm
index d7d224b292..47275a8ff0 100644
--- a/gnu/packages/pciutils.scm
+++ b/gnu/packages/pciutils.scm
@@ -109,8 +109,7 @@
        ;; No test suite.
        #:tests? #f))
     (native-inputs
-     `(("which" ,which)
-       ("pkg-config" ,pkg-config)))
+     (list which pkg-config))
     (inputs
      `(,@(if (member (or (%current-target-system)
                          (%current-system))
diff --git a/gnu/packages/pcre.scm b/gnu/packages/pcre.scm
index bc0e285001..0324a21261 100644
--- a/gnu/packages/pcre.scm
+++ b/gnu/packages/pcre.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
@@ -30,6 +30,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages)
+  #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -37,28 +38,22 @@
 (define-public pcre
   (package
    (name "pcre")
-   (version "8.44")
+   (version "8.45")
    (source (origin
             (method url-fetch)
-            (uri (list
-                  (string-append "ftp://ftp.csx.cam.ac.uk"
-                                 "/pub/software/programming/pcre/"
-                                 "pcre-" version ".tar.bz2")
-                  (string-append "mirror://sourceforge/pcre/pcre/"
-                                 version "/pcre-" version ".tar.bz2")))
+            (uri (string-append "https://ftp.pcre.org/pub/pcre/pcre-"
+                                version ".tar.bz2"))
             (sha256
              (base32
-              "0v9nk51wh55pcbnf2jr36yarz8ayajn6d7ywiq2wagivn9c8c40r"))))
+              "1f7zichy6iimmkfrqdl575sdlm795cyc75szgg1vc2xvsbf6zbjd"))))
    (build-system gnu-build-system)
    (outputs '("out"           ;library & headers
               "bin"           ;depends on Readline (adds 20MiB to the closure)
               "doc"           ;1.8 MiB of HTML
               "static"))      ;1.8 MiB static libraries
-   (inputs `(("bzip2" ,bzip2)
-             ("readline" ,readline)
-             ("zlib" ,zlib)))
+   (inputs (list bzip2 readline zlib))
    (arguments
-    '(#:disallowed-references ("doc")
+    `(#:disallowed-references ("doc")
       #:configure-flags '("--enable-utf"
                           "--enable-pcregrep-libz"
                           "--enable-pcregrep-libbz2"
@@ -66,7 +61,10 @@
                           "--enable-unicode-properties"
                           "--enable-pcre16"
                           "--enable-pcre32"
-                          "--enable-jit")
+                          ;; pcretest fails on powerpc32.
+                          ,@(if (target-ppc32?)
+                              '()
+                              `("--enable-jit")))
       #:phases (modify-phases %standard-phases
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -77,8 +75,7 @@
                                    (link lib (string-append static "/"
                                                             (basename lib)))
                                    (delete-file lib))
-                                 (find-files source "\\.a$"))
-                       #t))))))
+                                 (find-files source "\\.a$"))))))))
    (synopsis "Perl Compatible Regular Expressions")
    (description
     "The PCRE library is a set of functions that implement regular expression
@@ -91,18 +88,16 @@ POSIX regular expression API.")
 (define-public pcre2
   (package
     (name "pcre2")
-    (version "10.35")
+    (version "10.37")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pcre/pcre2/"
                                   version "/pcre2-" version ".tar.bz2"))
               (sha256
                (base32
-                "04s6kmk9qdd4rjz477h547j4bx7hfz0yalpvrm381rqc5ghaijww"))))
+                "0w6jaswjmg3bc0wsw6msn5bvk66p90kf2asnnj9rhll0idpak5ad"))))
    (build-system gnu-build-system)
-   (inputs `(("bzip2" ,bzip2)
-             ("readline" ,readline)
-             ("zlib" ,zlib)))
+   (inputs (list bzip2 readline zlib))
    (arguments
     `(#:configure-flags '("--enable-unicode"
                           "--enable-pcre2grep-libz"
@@ -110,15 +105,17 @@ POSIX regular expression API.")
                           "--enable-pcre2test-libreadline"
                           "--enable-pcre2-16"
                           "--enable-pcre2-32"
-                          "--enable-jit"
+                          ;; pcre2_jit_test fails on powerpc32.
+                          ,@(if (target-ppc32?)
+                              '()
+                              `("--enable-jit"))
                           "--disable-static")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'patch-paths
           (lambda _
             (substitute* "RunGrepTest"
-              (("/bin/echo") (which "echo")))
-            #t)))))
+              (("/bin/echo") (which "echo"))))))))
    (synopsis "Perl Compatible Regular Expressions")
    (description
     "The PCRE library is a set of functions that implement regular expression
@@ -127,16 +124,3 @@ own native API, as well as a set of wrapper functions that correspond to the
 POSIX regular expression API.")
    (license license:bsd-3)
    (home-page "https://www.pcre.org/")))
-
-(define-public pcre2-10.36
-  (package
-    (inherit pcre2)
-    (name "pcre2")
-    (version "10.36")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/pcre/pcre2/"
-                                  version "/pcre2-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "0p3699msps07p40g9426lvxa3b41rg7k2fn7qxl2jm0kh4kkkvx9"))))))
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index be63ccc434..d241b65b79 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
@@ -21,6 +21,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,7 @@
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
@@ -79,6 +81,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
@@ -97,6 +100,7 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -130,7 +134,7 @@
        ("pkg-config" ,pkg-config)
        ("texlive" ,texlive-tiny)))
     (inputs
-     `(("poppler" ,poppler)))
+     (list poppler))
     (home-page "https://github.com/trueroad/extractpdfmark")
     (synopsis "Extract page mode and named destinations as PDFmark from PDF")
     (description
@@ -175,10 +179,7 @@ information.")
                    (,(string-append qtbase "/lib/qt5/plugins/platforms"))))
                #t))))))
     (inputs
-     `(("python-pypdf2" ,python-pypdf2)
-       ("python-pyqt" ,python-pyqt)
-       ("python-poppler-qt5" ,python-poppler-qt5)
-       ("qtbase" ,qtbase-5)))
+     (list python-pypdf2 python-pyqt python-poppler-qt5 qtbase-5))
     (home-page "http://crazy-compilers.com/flyer-composer")
     (synopsis "Rearrange PDF pages to print as flyers on one sheet")
     (description "@command{flyer-composer} can be used to prepare one- or
@@ -223,14 +224,14 @@ please install the @code{flyer-composer-gui} package.")))
 (define-public poppler
   (package
    (name "poppler")
-   (version "0.86.1")
+   (version "21.07.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://poppler.freedesktop.org/poppler-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0v3z4mk1rr8i0c4cfkab7pnxdbil30j4cm4w6cqlq6cfghkhlqxg"))))
+              "1m54hsi8z6c13jdbjwz55flkra1mahmkw2igavbf8p86d2gv4sp2"))))
    (build-system cmake-build-system)
    ;; FIXME:
    ;;  use libcurl:        no
@@ -250,20 +251,28 @@ please install the @code{flyer-composer-gui} package.")))
     ;; As per poppler-cairo and poppler-glib.pc.
     ;; XXX: Ideally we'd propagate Cairo too, but that would require a
     ;; different solution to the circular dependency mentioned above.
-    `(("glib" ,glib)))
+    (list glib))
    (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("glib" ,glib "bin")                      ; glib-mkenums, etc.
-        ("gobject-introspection" ,gobject-introspection)))
+      (list pkg-config
+            `(,glib "bin") ; glib-mkenums, etc.
+            gobject-introspection))
    (arguments
-    `(#:tests? #f ; no test data provided with the tarball
+    `(#:tests? #f                      ;no test data provided with the tarball
       #:configure-flags
       (let* ((out (assoc-ref %outputs "out"))
              (lib (string-append out "/lib")))
         (list "-DENABLE_UNSTABLE_API_ABI_HEADERS=ON" ;to install header files
               "-DENABLE_ZLIB=ON"
+              "-DENABLE_BOOST=OFF"      ;disable Boost to save size
               (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
-              (string-append "-DCMAKE_INSTALL_RPATH=" lib)))))
+              (string-append "-DCMAKE_INSTALL_RPATH=" lib)))
+      ,@(if (%current-target-system)
+            `(#:phases
+              (modify-phases %standard-phases
+                (add-after 'unpack 'set-PKG_CONFIG
+                  (lambda _
+                    (setenv "PKG_CONFIG" ,(pkg-config-for-target))))))
+            '())))
    (synopsis "PDF rendering library")
    (description
     "Poppler is a PDF rendering library based on the xpdf-3.0 code base.")
@@ -317,7 +326,8 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
         (uri (pypi-uri "python-poppler-qt5" version))
         (sha256
          (base32
-          "0b82gm4i75q5v19kfbq0h4y0b2vcwr2213zkhxh6l0h45kdndmxd"))))
+          "0b82gm4i75q5v19kfbq0h4y0b2vcwr2213zkhxh6l0h45kdndmxd"))
+       (patches (search-patches "python-poppler-qt5-fix-build.patch"))))
     (build-system python-build-system)
     (arguments
      `(;; There are no tests.  The check phase just causes a rebuild.
@@ -338,12 +348,9 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
                                                (assoc-ref inputs "python-pyqt")
                                                "/share/sip")) #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("python-sip" ,python-sip-4)
-       ("python-pyqt" ,python-pyqt)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)))
+     (list python-sip-4 python-pyqt poppler-qt5 qtbase-5))
     (home-page "https://pypi.org/project/python-poppler-qt5/")
     (synopsis "Python bindings for Poppler-Qt5")
     (description
@@ -374,12 +381,9 @@ Poppler PDF rendering library.")
             (string-append "--with-png="
                            (assoc-ref %build-inputs "libpng")))))
    (inputs
-    `(("zlib" ,zlib)
-      ("libpng" ,libpng)))
+    (list zlib libpng))
    (native-inputs
-    `(("autoconf" ,autoconf)
-      ("automake" ,automake)
-      ("libtool" ,libtool)))
+    (list autoconf automake libtool))
    (home-page "http://libharu.org/")
    (synopsis "Library for generating PDF files")
    (description
@@ -398,11 +402,7 @@ reading and editing of existing PDF files.")
       (sha256
        (base32 "0ip81c9vy0igjnasl9iv2lz214fb01vvvdzbvjmgwc63fi1jgr0g"))))
    (build-system cmake-build-system)
-   (inputs `(("cups" ,cups)
-             ("freetype" ,freetype)
-             ("libpng" ,libpng)
-             ("qtbase" ,qtbase-5)
-             ("zlib" ,zlib)))
+   (inputs (list cups freetype libpng qtbase-5 zlib))
    (arguments
     `(#:tests? #f))                   ; there is no check target
    (synopsis "Viewer for PDF files based on the Motif toolkit")
@@ -423,9 +423,8 @@ reading and editing of existing PDF files.")
               (sha256
                (base32
                 "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libarchive" ,libarchive)
-              ("zathura" ,zathura)))
+    (native-inputs (list pkg-config))
+    (inputs (list libarchive zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -458,9 +457,8 @@ using libarchive.")
               (sha256
                (base32
                 "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libspectre" ,libspectre)
-              ("zathura" ,zathura)))
+    (native-inputs (list pkg-config))
+    (inputs (list libspectre zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -493,10 +491,9 @@ using libspectre.")
               (sha256
                (base32
                 "0062n236414db7q7pnn3ccg5111ghxj3407pn9ri08skxskgirln"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("zathura" ,zathura)))
+     (list djvulibre zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not contain tests
@@ -529,7 +526,7 @@ using the DjVuLibre library.")
               (sha256
                (base32
                 "1r3v37k9fl2rxipvacgxr36llywvy7n20a25h3ajlyk70697sa66"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("jbig2dec" ,jbig2dec)
        ("libjpeg" ,libjpeg-turbo)
@@ -579,10 +576,9 @@ by using the @code{mupdf} rendering library.")
               (sha256
                (base32
                 "1vfl4vkyy3rf39r1sqaa7y8113bgkh2bkfq3nn2inis9mrykmk6m"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("poppler" ,poppler)
-       ("zathura" ,zathura)))
+     (list poppler zathura))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f                      ; package does not include tests
@@ -628,17 +624,17 @@ by using the poppler rendering engine.")
                      ;; For tests.
                      ("check" ,check)
                      ("xorg-server" ,xorg-server-for-tests)))
-    (inputs `(("sqlite" ,sqlite)))
+    (inputs (list sqlite))
     ;; Listed in 'Requires.private' of 'zathura.pc'.
-    (propagated-inputs `(("cairo" ,cairo)
-                         ("girara" ,girara)))
+    (propagated-inputs (list cairo girara))
     (native-search-paths
      (list (search-path-specification
             (variable "ZATHURA_PLUGINS_PATH")
             (files '("lib/zathura")))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
+     `(#:meson ,meson-0.59
+       #:phases (modify-phases %standard-phases
                   (add-before 'check 'start-xserver
                     ;; Tests require a running X server.
                     (lambda* (#:key inputs #:allow-other-keys)
@@ -674,8 +670,7 @@ interaction.")
                 "1f0yvkx6nf99fp741w2y706d8bs9824x1z2gqm3rdy5fv8bfgwkw"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)))
+     (list cppunit pkg-config))
     (inputs
      `(("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
@@ -749,7 +744,7 @@ extracting content or merging files.")
         ("openssl" ,openssl)
         ("zlib" ,zlib)))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:tests? #f                     ; no check target
         #:make-flags (list "verbose=yes"
@@ -808,12 +803,10 @@ line tools for batch rendering @command{pdfdraw}, rewriting files
               (("/usr/bin/env") (which "env")))
             #t)))))
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("perl" ,perl)))
+    (list pkg-config perl))
    (propagated-inputs
     ;; In Requires.private of libqpdf.pc.
-    `(("libjpeg-turbo" ,libjpeg-turbo)
-      ("zlib" ,zlib)))
+    (list libjpeg-turbo zlib))
    (synopsis "Command-line tools and library for transforming PDF files")
    (description
     "QPDF is a command-line program that does structural, content-preserving
@@ -841,22 +834,22 @@ program capable of converting PDF into other formats.")
        (patches (search-patches "qpdfview-qt515-compat.patch"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cups" ,cups)
-       ("djvulibre" ,djvulibre)
-       ("libspectre" ,libspectre)
-       ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list cups
+           djvulibre
+           libspectre
+           poppler-qt5
+           qtbase-5
+           qtsvg))
     (arguments
      `(#:tests? #f ; no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "qpdfview.pri"
-               (("/usr") (assoc-ref %outputs "out")))
+               (("/usr") (assoc-ref outputs "out")))
              (invoke "qmake" "qpdfview.pro"))))))
     (home-page "https://launchpad.net/qpdfview")
     (synopsis "Tabbed document viewer")
@@ -880,13 +873,9 @@ SyncTeX support, and rudimentary support for annotations and forms.")
          "09i88v3wacmx7f96dmq0l3afpyv95lh6jrx16xzm0jd1szdrhn5j"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk" ,gtk+-2)
-       ("pango" ,pango)
-       ("poppler" ,poppler)
-       ("glib" ,glib)
-       ("libgnomecanvas" ,libgnomecanvas)))
+     (list gtk+-2 pango poppler glib libgnomecanvas))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://xournal.sourceforge.net/")
     (synopsis "Notetaking using a stylus")
     (description
@@ -938,16 +927,16 @@ using a stylus.")
        ("help2man" ,help2man)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gtk+" ,gtk+)
-       ("librsvg" ,librsvg)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("libzip" ,libzip)
-       ("lua" ,lua)
-       ("poppler" ,poppler)
-       ("portaudio" ,portaudio)
-       ("texlive-bin" ,texlive-bin)))
+     (list alsa-lib
+           gtk+
+           librsvg
+           libsndfile
+           libxml2
+           libzip
+           lua
+           poppler
+           portaudio
+           texlive-bin))
     (home-page "https://github.com/xournalpp/xournalpp")
     (synopsis "Handwriting notetaking software with PDF annotation support")
     (description "Xournal++ is a hand note taking software written in
@@ -1026,7 +1015,7 @@ optimize toolbar for portrait / landscape
             (base32
              "1v0gy4mbx02ys96ssx89420y0njknlrxs2bx64bv4rp8a0al66w5"))))))
     (propagated-inputs
-     `(("python-pillow" ,python-pillow)))
+     (list python-pillow))
     (home-page "https://www.reportlab.com")
     (synopsis "Python library for generating PDFs and graphics")
     (description "This is the ReportLab PDF Toolkit.  It allows rapid creation
@@ -1052,10 +1041,7 @@ vector formats.")
     (build-system python-build-system)
 
     ;; TODO: Add dependency on pdftk.
-    (inputs `(("python2-pygame" ,python2-pygame)
-              ("python2-pillow" ,python2-pillow)
-              ("sdl" ,sdl)
-              ("xpdf" ,xpdf)))
+    (inputs (list python2-pygame python2-pillow sdl xpdf))
 
     (arguments
      `(#:python ,python-2
@@ -1102,9 +1088,8 @@ the PDF pages.")
         (base32 "17z0bn8kihiyqjd1m5jr80m7ry06l1qn0l8v918xg5gs7q2calcf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pikepdf" ,python-pikepdf)
-       ("python-pillow" ,python-pillow)
-       ("python-tkinter" ,python "tk")))
+     (list python-pikepdf python-pillow
+           `(,python "tk")))
     (home-page "https://gitlab.mister-muffin.de/josch/img2pdf")
     (synopsis "Convert images to PDF via direct JPEG inclusion")
     (description
@@ -1134,10 +1119,14 @@ information for every pixel as the input.")
              (substitute* "mk/Autoconf.mk"
                (("/bin/echo") "echo")
                (("/sbin/ldconfig -p") "echo lib")) #t))
+         (add-before 'build 'set-fcommon
+           (lambda _
+             (setenv "CFLAGS" "-fcommon")))
          (delete 'configure))
         #:tests? #f
-        #:make-flags (list ,(string-append "CC=" (cc-for-target))
-                           (string-append "prefix=" (assoc-ref %outputs "out")))))
+        #:make-flags
+        (list (string-append "CC=" ,(cc-for-target))
+              (string-append "prefix=" (assoc-ref %outputs "out")))))
     (inputs `(("libjpeg" ,libjpeg-turbo)
               ("curl" ,curl)
               ("libtiff" ,libtiff)
@@ -1154,12 +1143,11 @@ information for every pixel as the input.")
               ("libepoxy" ,libepoxy)
               ("libpng" ,libpng)
               ("poppler" ,poppler)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (synopsis "Framebuffer and drm-based image viewer")
     (description
       "fbida contains a few applications for viewing and editing images on
 the framebuffer.")
-
     (license license:gpl2+)))
 
 (define-public pdf2svg
@@ -1177,10 +1165,9 @@ the framebuffer.")
                 "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("poppler" ,poppler)))
+     (list cairo poppler))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.cityinthesky.co.uk/opensource/pdf2svg/")
     (synopsis "PDF to SVG converter")
     (description "@command{pdf2svg} is a simple command-line PDF to SVG
@@ -1284,17 +1271,12 @@ python-pypdf2 instead.")
                  `("GI_TYPELIB_PATH" ":" prefix
                    (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("python-distutils-extra" ,python-distutils-extra)))
+     (list intltool python-distutils-extra))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("poppler" ,poppler)))
+     (list gtk+ poppler))
     (propagated-inputs
-     `(("img2pdf" ,img2pdf)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pikepdf" ,python-pikepdf)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list img2pdf python-dateutil python-pikepdf python-pycairo
+           python-pygobject))
     (home-page "https://github.com/jeromerobert/pdfarranger")
     (synopsis "Merge, split and re-arrange pages from PDF documents")
     (description
@@ -1319,7 +1301,7 @@ PDF Arranger was formerly known as PDF-Shuffler.")
     (arguments
      `(#:tests? #f))  ; test-suite not included in source archive
     (inputs
-     `(("python-pypdf2" ,python-pypdf2)))
+     (list python-pypdf2))
     (home-page "https://pythonhosted.org/pdftools.pdfposter/")
     (synopsis "Scale and tile PDF images/pages to print on multiple pages")
     (description "@command{pdfposter} can be used to create a large poster by
@@ -1347,11 +1329,9 @@ PDF.  Indeed @command{pdfposter} was inspired by @command{poster}.")
          "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("pcre" ,pcre)
-       ("poppler" ,poppler)))
+     (list libgcrypt pcre poppler))
     (home-page "https://pdfgrep.org")
     (synopsis "Command-line utility to search text in PDF files")
     (description
@@ -1364,7 +1344,7 @@ multiple files.")
 (define-public pdfpc
   (package
     (name "pdfpc")
-    (version "4.4.1")
+    (version "4.5.0")
     (source
      (origin
        (method git-fetch)
@@ -1373,20 +1353,33 @@ multiple files.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11n925c5jj3yfwnqkgxzqrmsrpqh8ls1g4idmqqzpsanpam1xvna"))))
+        (base32 "0bmy51w6ypz927hxwp5g7wapqvzqmsi3w32rch6i3f94kg1152ck"))))
     (build-system cmake-build-system)
-    (arguments '(#:tests? #f))          ; no test target
+    (arguments
+     '(#:tests? #f          ; no test target
+       #:phases
+       (modify-phases %standard-phases
+         ;; This is really a bug in Vala.
+         ;; https://github.com/pdfpc/pdfpc/issues/594
+         (add-after 'unpack 'fix-vala-API-conflict
+           (lambda _
+             (substitute* "src/classes/action/movie.vala"
+               (("info.from_caps\\(caps\\)")
+                "Gst.Video.info_from_caps(out info, caps)")))))))
     (inputs
      `(("cairo" ,cairo)
+       ("discount" ,discount) ; libmarkdown
        ("gtk+" ,gtk+)
        ("gstreamer" ,gstreamer)
        ("gst-plugins-base" ,gst-plugins-base)
+       ("json-glib" ,json-glib)
        ("libgee" ,libgee)
        ("poppler" ,poppler)
        ("pango" ,pango)
-       ("vala" ,vala)))
+       ("vala" ,vala)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pdfpc.github.io/")
     (synopsis "Presenter console with multi-monitor support for PDF files")
     (description
@@ -1396,7 +1389,7 @@ is able to show a normal presentation window on one screen, while showing a
 more sophisticated overview on the other one providing information like a
 picture of the next slide, as well as the left over time till the end of the
 presentation.  The input files processed by pdfpc are PDF documents.")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public paps
   (package
@@ -1411,10 +1404,9 @@ presentation.  The input files processed by pdfpc are PDF documents.")
         (base32 "1z1w1fg2bvb8p92n1jlpqp3n9mq42szb2mqhh4xqmmnmfcdkpi9s"))))
     (build-system gnu-build-system)
     (inputs
-     `(("pango" ,pango)))
+     (list pango))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://github.com/dov/paps")
     (synopsis "Pango to PostScript converter")
     (description
@@ -1445,8 +1437,7 @@ rendering of the file through the Pango Cairo back end.")
                (("more-itertools>=2\\.2,<6\\.0\\.0") "more-itertools>=2.2"))
              #t)))))
     (propagated-inputs
-     `(("python-more-itertools" ,python-more-itertools)
-       ("python-pypdf2" ,python-pypdf2)))
+     (list python-more-itertools python-pypdf2))
     (home-page "https://github.com/hellerbarde/stapler")
     (synopsis "PDF manipulation tool")
     (description "Stapler is a pure Python alternative to PDFtk, a tool for
@@ -1524,18 +1515,17 @@ manipulating PDF documents from the command line.  It supports
        ("glib" ,glib)
        ("pango" ,pango)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("python-cairocffi" ,python-cairocffi)
-       ("python-cairosvg" ,python-cairosvg)
-       ("python-cffi" ,python-cffi)
-       ("python-cssselect2" ,python-cssselect2)
-       ("python-html5lib" ,python-html5lib)
-       ("python-pyphen" ,python-pyphen)
-       ("python-tinycss2" ,python-tinycss2)))
+     (list gdk-pixbuf
+           python-cairocffi
+           python-cairosvg
+           python-cffi
+           python-cssselect2
+           python-html5lib
+           python-pyphen
+           python-tinycss2))
     (native-inputs
-     `(("font-dejavu" ,font-dejavu)     ;tests depend on it
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list font-dejavu ;tests depend on it
+           python-pytest-cov python-pytest-runner))
     (home-page "https://weasyprint.org/")
     (synopsis "Document factory for creating PDF files from HTML")
     (description "WeasyPrint helps web developers to create PDF documents.  It
diff --git a/gnu/packages/pem.scm b/gnu/packages/pem.scm
index df0ee54c46..2fba63336f 100644
--- a/gnu/packages/pem.scm
+++ b/gnu/packages/pem.scm
@@ -36,7 +36,7 @@
        (base32
         "03iqcki1lakkck1akdyvljjapgqda3l0rh38id7jhrac9kcxqgg2"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (home-page "https://www.gnu.org/software/pem/")
     (synopsis "Personal expenses manager")
     (description
diff --git a/gnu/packages/pep.scm b/gnu/packages/pep.scm
index 6685691285..d0dfb0a685 100644
--- a/gnu/packages/pep.scm
+++ b/gnu/packages/pep.scm
@@ -54,7 +54,7 @@
         (base32 "0fm1x1fv4lwcpbn59s55idzf7x173n59xpz8rlrxalmi6gvsjijr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (home-page "https://fdik.org/yml/")
     (synopsis "Use a Domain Specific Language for XML without defining
 a grammar")
@@ -127,9 +127,8 @@ OPENPGP=SEQUOIA
            (lambda _
              (invoke "make" "-C" "db" "install"))))))
     (native-inputs
-     `(("asn1c" ,asn1c) ; >= 0.9.27
-       ("pkg-config" ,pkg-config)
-       ("yml2" ,yml2)))
+     (list asn1c ; >= 0.9.27
+           pkg-config yml2))
     (inputs
      `(("libetpan" ,fdik-libetpan)
        ("libiconv" ,libiconv)
@@ -181,7 +180,7 @@ ENGINE_INC_PATH=~a/include
 " out engine engine))))
              #t)))))
     (inputs
-     `(("pep-engine" ,pep-engine)))
+     (list pep-engine))
     (home-page "https://pep.foundation/")
     (synopsis "Library for building p≡p adapters")
     (description "This C++ library provides common structures used in p≡p
@@ -238,14 +237,10 @@ ENGINE_INC_PATH=~a/include
                (("\"wheel *>=.*\"") ""))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-forked" ,python-pytest-forked)))
+     (list python-pytest python-pytest-forked))
     (inputs
-     `(("boost" ,boost)
-       ("libpepadapter" ,libpepadapter)
-       ("pep-engine" ,pep-engine)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("util-linux" ,util-linux "lib"))) ;; uuid.h
+     (list boost libpepadapter pep-engine python-setuptools-scm
+           `(,util-linux "lib"))) ;; uuid.h
     (home-page "https://pep.foundation/")
     (synopsis "Python adapter for p≡p (pretty Easy Privacy)")
     (description "The p≡p Python adapter is an adaptor interface to the p≡p
@@ -329,15 +324,11 @@ JAVA_HOME=~a
                (copy-recursively "doc/doxygen/java/html" javaout)
                #t))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("openjdk" ,openjdk9 "jdk")
-       ("which" ,which)
-       ("yml2" ,yml2)))
+     (list doxygen graphviz
+           `(,openjdk9 "jdk") which yml2))
     (inputs
-     `(("libpepadapter" ,libpepadapter)
-       ("pep-engine" ,pep-engine)
-       ("util-linux" ,util-linux "lib"))) ;; uuid.h
+     (list libpepadapter pep-engine
+           `(,util-linux "lib"))) ;; uuid.h
     (home-page "https://pep.foundation/")
     (synopsis "Java adapter for p≡p (pretty Easy Privacy)")
     (description "The p≡p JNI adapter is a Java adapter interface to the p≡p
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 641e026673..bde3079bef 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -87,9 +87,7 @@ lexically, just dynamically.")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)
-       ("perl-term-table" ,perl-term-table)
-       ("perl-sub-info" ,perl-sub-info)))
+     (list perl-importer perl-term-table perl-sub-info))
     (home-page "https://metacpan.org/pod/Test2-Suite")
     (synopsis "Full set of tools for Test2::Suite")
     (description "This package provides a rich set of tools, plugins, bundles,
@@ -110,9 +108,9 @@ etc built upon the Test2 testing library.")
           "002qk6qsm0l6r2kaxywvc38w0yf0mlavgywq8li076pn6kcw3242"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-ipc-run3" ,perl-ipc-run3)))
+     (list perl-ipc-run3))
     (propagated-inputs
-     `(("perl-test2-suite" ,perl-test2-suite)))
+     (list perl-test2-suite))
     (home-page "https://metacpan.org/release/Test2-Plugin-NoWarnings")
     (synopsis "Fail if tests warn")
     (description "Loading this plugin causes your tests to fail if there any
@@ -134,11 +132,9 @@ warning content is outputted via diag.")
          "056hibgg3i2b89mwr76vyxi6ayb3hqjqcwicvn3s5lximsma3517"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-algorithm-diff perl-text-diff))
     (propagated-inputs
-     `(("perl-spiffy" ,perl-spiffy)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-spiffy perl-test-deep))
     (home-page "https://metacpan.org/release/Test-Base")
     (synopsis "Data-driven testing framework for Perl")
     (description "Test::Base gives a way to trivially write your own test
@@ -162,7 +158,7 @@ patterns, so that you can write tests with a minimum of code.")
          "1vjinlixxdx6gfcw8y1dw2rla8bfhi8nmgcqr3nffc7kqskcrz36"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)))
+     (list perl-cpan-meta-check))
     (home-page "https://metacpan.org/release/Test-CheckDeps")
     (synopsis "Check for presence of dependencies")
     (description
@@ -186,11 +182,9 @@ installed properly.")
          "0l0kk5jvxjkic2jkf1r7v41irb344aasnzr3f5ygjgxgiknm9489"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-module-runtime perl-mro-compat perl-try-tiny))
     (home-page "https://metacpan.org/release/Test-Class")
     (synopsis "Easily create test classes in an xUnit/JUnit style")
     (description "@code{Test::Class} provides a simple way of creating classes
@@ -217,13 +211,10 @@ Built using @code{Test::Builder}, it was designed to work with other
          "1zvx9hil0mg0pnb8xfa4m0xgjpvh8s5gnbyprq3xwpdsdgcdwk33"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (inputs
-     `(("perl-test-class" ,perl-test-class)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-test-class perl-test-most perl-module-runtime
+           perl-try-tiny perl-mro-compat))
     (home-page "https://metacpan.org/release/Test-Class-Most")
     (synopsis "Test classes the easy way")
     (description "@code{Test::Class::Most} provides some more convenience when
@@ -243,18 +234,15 @@ using @code{Test::Class}.")
         (base32 "0yijspncqgmbkkxrh66xx1pliajar05yqhzq6m4nb6p8x1lmb39k"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-file-pushd perl-test-requires perl-test-deep
+           perl-test-warnings perl-test-needs))
     (propagated-inputs
-     `(("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-sub-identify" ,perl-sub-identify)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-file-find-rule-perl" ,perl-file-find-rule-perl)))
+     (list perl-namespace-clean
+           perl-package-stash
+           perl-sub-identify
+           perl-sub-exporter
+           perl-file-find-rule
+           perl-file-find-rule-perl))
     (home-page "https://metacpan.org/release/Test-CleanNamespaces")
     (synopsis "Check for uncleaned imports")
     (description "This module lets you check your module's namespaces for
@@ -277,7 +265,7 @@ called as methods, which usually isn't want you want.")
                 "0cwm3c4d49mdrbm6vgh78b3x8mk730l0zg8i7xb9z8bkx9pzr8r8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://github.com/danboo/perl-test-command")
     (synopsis "Test routines for external commands")
     (description
@@ -301,9 +289,7 @@ output and standard error of external commands.")
          "1dcdbbdwdyhpldkhjzc9rvzlmb5jbil6fwh2x07nsfdwysf4ynzm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-cpan-meta-json" ,perl-test-cpan-meta-json)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-cpan-meta-json perl-test-pod perl-test-pod-coverage))
     (home-page
      "https://metacpan.org/release/Test-CPAN-Meta")
     (synopsis "Validate your CPAN META.yml files")
@@ -328,10 +314,9 @@ specification.")
          "1jg9ka50ixwq083wd4k12rhdjq87w0ihb34gd8jjn7gvvyd51b37"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (inputs
-     `(("perl-json" ,perl-json)))
+     (list perl-json))
     (home-page
      "https://metacpan.org/release/Test-CPAN-Meta-JSON")
     (synopsis "Validate your CPAN META.json files")
@@ -352,7 +337,7 @@ specification.")
                (base32
                 "1kdy06r0yg7zwarqglc9163vbfb0sfc4s6ld4pw5q7i9f7mghzi0"))))
     (build-system perl-build-system)
-    (inputs `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+    (inputs (list perl-test-nowarnings))
     (synopsis "Flexible deep comparison for the Test::Builder framework")
     (description
      "Test::Deep compares two structures by going through each level, ensuring
@@ -375,10 +360,9 @@ structures without getting caught in an infinite loop.")
         (base32 "1nkqr3m4lbzw7fkkzah42aiqlhxapamk6kw7hj90cjwkifsbp3f8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-text-diff" ,perl-text-diff)
-       ("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-text-diff perl-capture-tiny))
     (home-page "https://metacpan.org/release/Test-Differences")
     (synopsis "Test strings and data structures and show differences")
     (description "This module exports three test functions and four diff-style
@@ -401,9 +385,7 @@ functions.")
          "1hpafgr93jjl6s8spskhdxhgich4cccmaiq99mla5diyj4iv6ckk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-pod-coverage" ,perl-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-pod-coverage perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Dir")
     (synopsis "Utilities for testing directory attributes")
     (description
@@ -424,7 +406,7 @@ attributes.")
         (base32
          "1ncql08cizhicbxwd753b4czns8nlcnlw0zfjcfrbdd41x4j6hqr"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-exception" ,perl-test-exception)))
+    (native-inputs (list perl-test-exception))
     (home-page "https://metacpan.org/release/Test-Directory")
     (synopsis "Perl extension for maintaining test directories")
     (description "Testing code can involve making sure that files are created
@@ -449,9 +431,9 @@ files, as well as to verify that there are no missing or unknown files.")
         (base32 "1ifpff5simjslabwy7ac6kdylv4c0b5b39fgpwf9ha16yh6w49ix"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-module-manifest" ,perl-module-manifest)))
+     (list perl-module-manifest))
     (home-page "https://github.com/jawnsy/Test-DistManifest")
     (synopsis "Author test that validates a package @file{MANIFEST}")
     (description
@@ -474,12 +456,10 @@ files, as well as to verify that there are no missing or unknown files.")
         "0s1bj459qaw2x1fckklv9irpf3mr8gp2cm9vlyrb5dyanrzx1v2h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-pod-coverage" ,perl-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-file-find-rule perl-pod-coverage perl-test-pod
+           perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Distribution")
     (synopsis "Perform tests on all modules of a distribution")
     (description "When used in a test script @code{Test::Distribution}
@@ -531,9 +511,9 @@ and/or windows line endings in your perl code.")
          "0cxm7s4bg0xpxa6l6996a6iq3brr4j7p4hssnkc6dxv4fzq16sqm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Test-Exception")
     (synopsis "Test exception based code")
     (description "This module provides a few convenience methods for testing
@@ -556,7 +536,7 @@ Test::More and friends.")
          "0vx9chcp5x8m0chq574p9fnfckh5gl94j7904rh9v17n568fyd6s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Test-FailWarnings")
     (synopsis "Add test failures if warnings are caught")
     (description
@@ -576,7 +556,7 @@ Test::More and friends.")
         (base32
          "1c6bs68mss4q7cyapkv2c0jn66i21050p0faxf3s3417gdffzp5w"))))
     (build-system perl-build-system)
-    (propagated-inputs `(("perl-try-tiny" ,perl-try-tiny)))
+    (propagated-inputs (list perl-try-tiny))
     (home-page "https://metacpan.org/release/Test-Fatal")
     (synopsis "Simple helpers for testing code with exceptions")
     (description "Test::Fatal is an alternative to the popular
@@ -599,7 +579,7 @@ testing exception-throwing code with about the same amount of typing.")
         (base32 "0195dnvwxxphwbglw6cjid3j7kq15xg46lr7r4468idvadyal6c7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-utf8" ,perl-test-utf8)))
+     (list perl-test-utf8))
     (home-page "https://metacpan.org/release/Test-File")
     (synopsis "Utilities for testing file attributes")
     (description
@@ -623,11 +603,9 @@ attributes.")
          "0g8zgfyw84181snw7ghahnl9r4lrmlfj7zwi76sv8d0bj7xssvyd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-test-pod perl-test-pod-coverage perl-text-diff))
     (home-page "https://metacpan.org/release/Test-File-Contents")
     (synopsis "Test routines for examining the contents of files")
     (description
@@ -649,12 +627,12 @@ files.")
           "1bbs6cx69wcinq77gif4i4pmrj8a7lwb92sgvvxzrwmjnk5lfdmk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-tiny" ,perl-class-tiny)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-class-tiny
+           perl-file-copy-recursive
+           perl-file-sharedir
+           perl-path-tiny
+           perl-scope-guard
+           perl-test-fatal))
     (home-page "https://github.com/kentnl/Test-File-ShareDir")
     (synopsis "Dist oriented ShareDir tester")
     (description "This module creates a Fake ShareDir for your modules
@@ -676,7 +654,7 @@ for testing.")
          "1gpw4mjw68gnby8s4cifvbz6g2923xsc189jkw9d27i8qv20qiba"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)))
+     (list perl-path-tiny))
     (home-page "https://metacpan.org/release/Test-Filename")
     (synopsis "Portable filename comparison")
     (description "Test::Filename provides functions to convert all path
@@ -699,8 +677,7 @@ separators automatically.")
          "1zn33yigznq7i1jr4yjr4lxvc6bn7znkbqdzj7slhc146pqapkln"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-algorithm-diff perl-text-diff))
     (home-page "https://metacpan.org/release/Test-Files")
     (synopsis "Ease software testing with files and directories")
     (description "This library provides functions to enable testing of files
@@ -791,8 +768,7 @@ you test against long strings.")
                 "1n9jscnni24sbp4v5gjlcy3iknfwvmy0731xwvk1c3jq3kbslym4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Manifest")
     (synopsis "Interact with a t/test_manifest file")
     (description "@code{Test::Manifest} overrides the default test file order.  Instead of
@@ -817,9 +793,9 @@ It constructs the right value for the build system to do the right thing.")
          "00ijmgx1r3cxrcs1qa9rb2s4gbm3nsawd90drda89kb4r7yxslwx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-padwalker" ,perl-padwalker)))
+     (list perl-padwalker))
     (propagated-inputs
-     `(("perl-devel-cycle" ,perl-devel-cycle)))
+     (list perl-devel-cycle))
     (home-page
      "https://metacpan.org/release/Test-Memory-Cycle")
     (synopsis
@@ -850,13 +826,11 @@ memory_cycle_ok( $object );
         (base32 "0i8hiw9r2kak8kgp2qabr0cnnpp1yg1sddm781nhfxpavi4pmnhv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ;; For tests.
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-module-build
+           ;; For tests.
+           perl-test-pod perl-test-pod-coverage perl-test-warnings))
     (propagated-inputs
-     `(("perl-super" ,perl-super)))
+     (list perl-super))
     (home-page "https://metacpan.org/release/Test-MockModule")
     (synopsis "Override subroutines in a module for unit testing")
     (description
@@ -881,14 +855,10 @@ you @code{unmock()} the subroutine.")
         (base32 "160r36j727hw6syazh6sfq862f95dp1zcga0nil7cjlry77lqsn7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cgi" ,perl-cgi)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-cgi perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-universal-can" ,perl-universal-can)
-       ("perl-universal-isa" ,perl-universal-isa)))
+     (list perl-test-exception perl-test-warn perl-universal-can
+           perl-universal-isa))
     (home-page "https://metacpan.org/release/Test-MockObject")
     (synopsis "Emulate troublesome interfaces in Perl")
     (description "Test::MockObject allows you to create objects that conform
@@ -908,7 +878,7 @@ the behavior, just the input and the output.")
        (sha256
         (base32 "1y820qsq7yf7r6smy5c6f0mpf2cis2q24vwmpim1svv0n8cf2qrk"))))
     (propagated-inputs
-     `(("perl-time-piece" ,perl-time-piece)))
+     (list perl-time-piece))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Test-MockTime")
     (synopsis "Replaces actual time with simulated time")
@@ -956,11 +926,8 @@ easy use flagged strings without warnings like \"Wide character in print
          "0zv5dyzq55r28plffibcr7wd00abap0h2zh4s4p8snaiszsad5wq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-exception-class" ,perl-exception-class)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-differences perl-test-warn perl-exception-class
+           perl-test-deep perl-test-exception))
     (home-page "https://metacpan.org/release/Test-Most")
     (synopsis "Most commonly needed test functions and features")
     (description "This module provides the most commonly used testing
@@ -971,7 +938,7 @@ bit more fine-grained control over test suites.")
 (define-public perl-test-needs
   (package
     (name "perl-test-needs")
-    (version "0.002005")
+    (version "0.002009")
     (source
      (origin
        (method url-fetch)
@@ -981,7 +948,7 @@ bit more fine-grained control over test suites.")
              ".tar.gz"))
        (sha256
         (base32
-         "16gkgpmr9hvkz382iaqd3500269lk2d44fqaw3dsrvc66nc36kss"))))
+         "1hsagkxw0b0xf9qk4i4c74dkjskrk23jcsxhb3graqfi78cj272p"))))
     (build-system perl-build-system)
     (home-page
      "https://metacpan.org/release/Test-Needs")
@@ -1106,8 +1073,7 @@ classes in its inheritance tree in one single call.")
                 "0vjm62c7g3xxs3h4lba55dnpr4pg71yrhkdg5b9glxdh80klia7n"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-capture-tiny perl-sub-exporter))
     (synopsis "Utilities to test STDOUT and STDERR messages")
     (description
      "Test::Output provides a simple interface for testing output sent to
@@ -1129,7 +1095,7 @@ as flexible as possible to the tester.")
         (base32
          "1z75x1pxwp8ajwq9iazlg2c3wd7rdlim08yclpdg32qnc36dpa30"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Test-Pod")
     (synopsis "Check for POD errors in files")
     (description "Check POD files for errors or warnings in a test file, using
@@ -1150,7 +1116,7 @@ Pod::Simple to do the heavy lifting.")
          "1m203mhgfilz7iqc8mxaw4lw02fz391mni3n25sfx7nryylwrja8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-pod-coverage" ,perl-pod-coverage)))
+     (list perl-pod-coverage))
     (home-page "https://metacpan.org/release/Test-Pod-Coverage")
     (synopsis "Check for pod coverage")
     (description "This module adds a test to your Perl distribution which
@@ -1170,9 +1136,9 @@ checks for pod coverage of all appropriate files.")
         (base32 "05hs80gljkd6mhb8zvilyk3pjqxp5samgnymam5v9h9d94rb9r08"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-simple))
     (propagated-inputs
-     `(("perl-pathtools" ,perl-pathtools)))
+     (list perl-pathtools))
     (home-page "https://metacpan.org/dist/Test-Portability-Files")
     (synopsis "Check file names portability")
     (description "Test::Portability::Files module is used to check the
@@ -1240,14 +1206,14 @@ reported, and the tests skipped.")
          "1mnym49j1lj7gzylma5b6nr4vp75rmgz2v71904v01xmxhy9l4i1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (propagated-inputs
-     `(("perl-indirect" ,perl-indirect)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
-       ("perl-multidimensional" ,perl-multidimensional)
-       ("perl-strictures" ,perl-strictures)
-       ("perl-sub-install" ,perl-sub-install)))
+     (list perl-indirect
+           perl-moo
+           perl-moox-types-mooselike
+           perl-multidimensional
+           perl-strictures
+           perl-sub-install))
     (home-page "https://metacpan.org/release/Test-Roo")
     (synopsis "Composable, reusable tests with roles and Moo")
     (description "Test::Roo provides composable, reusable tests with roles.")
@@ -1268,11 +1234,9 @@ reported, and the tests skipped.")
         (base32 "1vm5iw5sy0mhjjypaaviil9qgqixmkaghdbjbcyb4lf2mm6d24v9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-trap" ,perl-test-trap)
-       ("valgrind" ,valgrind)))
+     (list perl-path-tiny perl-test-trap valgrind))
     (home-page "https://metacpan.org/release/Test-RunValgrind")
     (synopsis "Tests that an external program is valgrind-clean")
     (description "Test::RunValgind checks weather Valgrind does not detect
@@ -1292,8 +1256,7 @@ errors (such as memory leaks) in an arbitrary binary executable.")
                 "1msavbi6przkxq3npm90nv925v58iym9jrk677wn46x19whwzwzm"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-probe-perl" ,perl-probe-perl)))
+     (list perl-capture-tiny perl-probe-perl))
     (synopsis "Basic cross-platform tests for scripts")
     (description
      "The intent of the Test::Script module is to provide a series of basic
@@ -1315,7 +1278,7 @@ bin as is also commonly used) paths of your Perl distribution.")
         (base32 "17y52j20k1bs9dgf4n6rhh9dn4cfxxbnfn2cfs7pb00fc5jyhci9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Test-SharedFork")
     (synopsis "Fork test in Perl")
     (description "Test::SharedFork is a utility module for Test::Builder.  It
@@ -1353,7 +1316,7 @@ makes fork(2) safe to use in test cases.")
         (base32 "1hmnv9nkdzyrr6yis0dnkf4lk0hwld3zapiyq7mizrq5barykhfb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-hook-lexwrap" ,perl-hook-lexwrap)))
+     (list perl-hook-lexwrap))
     (home-page "https://metacpan.org/release/Test-SubCalls")
     (synopsis "Track the number of times subs are called")
     (description
@@ -1427,10 +1390,7 @@ a minimum of effort.")
          "1j5rsb4km9rzcbd1ljavj8vm42bmilji40v2jj2k87l1ykrxj59z"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-finder" ,perl-file-finder)
-       ("perl-file-slurp" ,perl-file-slurp)
-       ("perltidy" ,perltidy)
-       ("perl-text-diff" ,perl-text-diff)))
+     (list perl-file-finder perl-file-slurp perltidy perl-text-diff))
     (home-page "https://metacpan.org/release/Test-PerlTidy")
     (synopsis "Check that all your Perl files are tidy")
     (description
@@ -1451,10 +1411,9 @@ cause a test fail unless it is exactly as @code{perltidy} would like it to be.")
         (base32 "1qjs2080kcc66s4d7499br5lw2qmhr9gxky4xsl6vjdn6dpna10b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-simple))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)))
+     (list perl-data-dump))
     (home-page "https://metacpan.org/release/Test-Trap")
     (synopsis "Trap exit codes, exceptions, output, and so on")
     (description "This module is primarily (but not exclusively) for use in
@@ -1476,7 +1435,7 @@ from boxed blocks of test code.")
         (base32 "1mwbdgbbzm54v7wdw3l80bk73lr4z9i8274zlhjhp0s0b6fg10nz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Test-utf8")
     (synopsis "UTF-8 testing in Perl")
     (description "This module is a collection of tests useful for dealing with
@@ -1501,9 +1460,9 @@ will check that string has a given set of characteristics.")
          "1q1qradaf7r2rb3jhpv01wl8z3bxymkfqrl9gwdhxwx5jwldvqcw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-file-find-rule-perl" ,perl-file-find-rule-perl)))
+     (list perl-file-find-rule-perl))
     (home-page "https://metacpan.org/release/Test-Version")
     (synopsis "Check versions in modules")
     (description
@@ -1525,7 +1484,7 @@ defined, and that the version is valid.")
          "1nkc7jzxff0w4x9axbpsgxrksqdjnf70rb74q39zikkrsd3a7g7c"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Test-Warn")
     (synopsis "Perl extension to test methods for warnings")
     (description "This module provides a few convenience methods for testing
@@ -1588,13 +1547,10 @@ installed.")
         (base32 "11v4j3607bydxsqy2ylx9w6qr3qxcalfx3mdc4q4ccqmxsyw4jb3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)
-       ("perl-test-directory" ,perl-test-directory)))
+     (list perl-test-most perl-test-directory))
     (propagated-inputs
-     `(("perl-data-tumbler" ,perl-data-tumbler)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-data-tumbler perl-file-homedir perl-module-pluggable
+           perl-module-runtime))
     (home-page "https://metacpan.org/release/Test-WriteVariants")
     (synopsis "Dynamic generation of tests")
     (description "The Test::WriteVariants module provides for the dynamic
@@ -1614,7 +1570,7 @@ generation of tests in nested combinations of contexts.")
         (base32 "0pwrrnwi1qaiy3c5522vy0kzncxc9g02r4b056wqqaa69w1hsc0z"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-base" ,perl-test-base)))
+     (list perl-test-base))
     (home-page "https://metacpan.org/release/Test-YAML")
     (synopsis "Testing module for YAML implementations")
     (description "Test::YAML is a subclass of Test::Base with YAML specific
@@ -1637,13 +1593,9 @@ support.")
           "04aszaw4n3sra7n7sq2cj4wjjvfghia9zqi47aj00ry0vqx2d7gh"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)
-      ("perl-file-find-object" ,perl-file-find-object)
-      ("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+    (list perl-module-build perl-file-find-object perl-class-xsaccessor))
   (inputs
-    `(("perl-file-find-object-rule" ,perl-file-find-object-rule)
-      ("perl-text-glob" ,perl-text-glob)
-      ("perl-number-compare" ,perl-number-compare)))
+    (list perl-file-find-object-rule perl-text-glob perl-number-compare))
   (home-page
     "https://metacpan.org/release/Test-TrailingSpace")
   (synopsis
diff --git a/gnu/packages/perl-compression.scm b/gnu/packages/perl-compression.scm
index 48e3209ce1..54e5185169 100644
--- a/gnu/packages/perl-compression.scm
+++ b/gnu/packages/perl-compression.scm
@@ -57,7 +57,7 @@
                (setenv "BZLIB_LIB" (string-append bzip2 "/lib"))
                #t))))))
     (inputs
-     `(("bzip2" ,bzip2)))
+     (list bzip2))
     (home-page "https://metacpan.org/release/Compress-Bzip2")
     (synopsis "Interface to Bzip2 compression library")
     (description
@@ -98,7 +98,7 @@ compression library.")
         (base32 "04jrqvqsa2c655idw7skv5rhb9vx9997h4n9if5p99srq4hblk6d"))))
     (build-system perl-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -134,8 +134,7 @@ compression library.")
     (build-system perl-build-system)
     (propagated-inputs
      ;; These two packages should be updated to this one's version first.
-     `(("perl-compress-raw-zlib" ,perl-compress-raw-zlib)
-       ("perl-compress-raw-bzip2" ,perl-compress-raw-bzip2)))
+     (list perl-compress-raw-zlib perl-compress-raw-bzip2))
     (home-page "https://metacpan.org/release/IO-Compress")
     (synopsis "IO Interface to compressed files/buffers")
     (description "IO-Compress provides a Perl interface to allow reading and
@@ -160,7 +159,7 @@ writing of compressed data created with the zlib and bzip2 libraries.")
        ;; MakeMaker doesn't honor LIBRARY_PATH.
        (let ((zlib (assoc-ref %build-inputs "zlib")))
          (list (format #f "LIBS=-L~a/lib/ -lz" zlib)))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://metacpan.org/pod/PerlIO::gzip")
     (synopsis "Perl extension to provide a PerlIO layer to gzip/gunzip")
     (description "PerlIO::gzip provides a PerlIO layer that manipulates files
@@ -202,7 +201,7 @@ type by using either Perl modules, or command-line tools on your system.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-mockmodule" ,perl-test-mockmodule)))
+     (list perl-test-mockmodule))
     (synopsis  "Provides an interface to Zip archive files")
     (description "The @code{Archive::Zip} module allows a Perl program to
 create, manipulate, read, and write Zip archive files.")
diff --git a/gnu/packages/perl-maths.scm b/gnu/packages/perl-maths.scm
index b1110f94d2..b317e3c1cf 100644
--- a/gnu/packages/perl-maths.scm
+++ b/gnu/packages/perl-maths.scm
@@ -62,8 +62,7 @@
                 "1cml5wqd99hm398gl8f147ccsck9v179l7a6vqjj4kfkdnja37sg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-most" ,perl-test-most)))
+     (list perl-module-build perl-test-most))
     (home-page "https://metacpan.org/release/Math-MatrixReal")
     (synopsis "Manipulate NxN matrices of real numbers")
     (description "This package provides the @code{Math::MatrixReal} module.
diff --git a/gnu/packages/perl-web.scm b/gnu/packages/perl-web.scm
index 498d5bcc10..c3a3e17188 100644
--- a/gnu/packages/perl-web.scm
+++ b/gnu/packages/perl-web.scm
@@ -67,10 +67,9 @@ endeavor to implement this idea using modern technologies.")
          "0n56xxlw7c39pfar0dxckr9mbmp6yrzk53ic0cb24raiykm9v6f4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)
-       ("perl-uri-nested" ,perl-uri-nested)))
+     (list perl-uri perl-uri-nested))
     (home-page "https://metacpan.org/release/URI-db")
     (synopsis "Handle database URIs")
     (description
@@ -92,7 +91,7 @@ class to handle these.")
          "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (home-page "https://github.com/libwww-perl/URI")
     (synopsis "Percent-encode and percent-decode unsafe characters")
     (description "This module provides functions to percent-encode and
@@ -117,9 +116,9 @@ which predates the formalization of the terms by the RFC by several years.")
          "1bzg6f11m8wfnmycflvp858rs99xknsx8hkip0xcdfjzlqwi75z1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-Nested")
     (synopsis "Nested URIs")
     (description
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 3fb5a7c3a2..c6d63ce041 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Raoul J.P. Bonnal <ilpuccio.febo@gmail.com>
-;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017, 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
@@ -31,6 +31,7 @@
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -91,18 +92,17 @@
   ;; Yeah, Perl...  It is required early in the bootstrap process by Linux.
   (package
     (name "perl")
-    (version "5.30.2")
+    (version "5.34.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/src/5.0/perl-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "128nfdxcvxfn5kq55qcfrx2851ys8hv794dcdxbyny8rm7w7vnv6"))
+               "16mywn5afpv1mczv9dlc1w84rbgjgrr0pyr4c0hhb2wnif0zq7jm"))
              (patches (search-patches
                        "perl-no-sys-dirs.patch"
                        "perl-autosplit-default-time.patch"
-                       "perl-deterministic-ordering.patch"
                        "perl-reproducible-build-date.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -124,44 +124,36 @@
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'setup-configure
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Use the right path for `pwd'.
-             ;; TODO: use coreutils from INPUTS instead of 'which'
-             ;; in next rebuild cycle, see fixup below.
              (substitute* "dist/PathTools/Cwd.pm"
-               (("/bin/pwd")
-                (which "pwd")))
+               (("'/bin/pwd'")
+                (string-append "'" (search-input-file inputs "bin/pwd") "'")))
 
              ;; Build in GNU89 mode to tolerate C++-style comment in libc's
              ;; <bits/string3.h>.
              (substitute* "cflags.SH"
                (("-std=c89")
-                "-std=gnu89"))
-             #t))
+                "-std=gnu89"))))
          ,@(if (%current-target-system)
                `((add-after 'unpack 'unpack-cross
                    (lambda* (#:key native-inputs inputs #:allow-other-keys)
                      (let ((cross-checkout
-                            (assoc-ref native-inputs "perl-cross"))
-                           (cross-patch
-                            (assoc-ref native-inputs "perl-cross-patch")))
+                            (assoc-ref native-inputs "perl-cross")))
                        (rename-file "Artistic" "Artistic.perl")
                        (rename-file "Copying" "Copying.perl")
-                       (copy-recursively cross-checkout ".")
-                       (format #t "Applying ~a\n" cross-patch)
-                       (invoke "patch" "-p1" "-i" cross-patch))
-                     (let ((bash (assoc-ref inputs "bash")))
+                       (copy-recursively cross-checkout "."))
+                     (let ((bash (search-input-file inputs "bin/bash")))
                        (substitute* '("Makefile.config.SH"
                                       "cnf/config.guess"
                                       "cnf/config.sub"
                                       "cnf/configure"
                                       "cnf/configure_misc.sh"
                                       "miniperl_top")
-                         (("! */bin/sh") (string-append "! " bash "/bin/bash"))
-                         ((" /bin/sh") (string-append bash "/bin/bash")))
+                         (("! */bin/sh") (string-append "! " bash))
+                         ((" /bin/sh") bash))
                        (substitute* '("ext/Errno/Errno_pm.PL")
-                         (("\\$cpp < errno.c") "$Config{cc} -E errno.c")))
-                       #t))
+                         (("\\$cpp < errno.c") "$Config{cc} -E errno.c")))))
                  (replace 'configure
                    (lambda* (#:key configure-flags outputs inputs #:allow-other-keys)
                      (let* ((out (assoc-ref outputs "out"))
@@ -177,22 +169,18 @@
                                        (lambda (x) (or (string-prefix? "-d" x)
                                                        (string-prefix? "-Dcc=" x))))
                                       configure-flags)))
-                            (bash (assoc-ref inputs "bash"))
-                            (coreutils (assoc-ref inputs "coreutils")))
+                            (bash (assoc-ref inputs "bash-minimal")))
                        (format (current-error-port)
-                               "running ./configure ~a\n" (string-join configure-flags))
+                               "running ./configure ~a\n"
+                               (string-join configure-flags))
                        (apply invoke (cons "./configure" configure-flags))
                        (substitute* "config.sh"
                          (((string-append store-directory "/[^/]*-bash-[^/]*"))
                           bash))
                        (substitute* '("config.h")
                          (("^#define SH_PATH .*")
-                          (string-append  "#define SH_PATH \"" bash "/bin/bash\"\n")))
-                       ;;TODO: fix this in setup-configure next rebuild cycle
-                       (substitute* "dist/PathTools/Cwd.pm"
-                         (((string-append store-directory "/[^/]*-coreutils-[^/]*"))
-                          coreutils))
-                       #t)))
+                          (string-append  "#define SH_PATH \""
+                                          bash "/bin/bash\"\n"))))))
                  (add-after 'build 'touch-non-built-files-for-install
                    (lambda _
                      ;; `make install' wants to install these although they do
@@ -206,8 +194,7 @@
                                  '("Pod-Usage/blib/script/pod2text"
                                    "Pod-Usage/blib/script/pod2usage"
                                    "Pod-Checker/blib/script/podchecker"
-                                   "Pod-Parser/blib/script/podselect")))
-                     #t)))
+                                   "Pod-Parser/blib/script/podselect"))))))
                `((replace 'configure
                    (lambda* (#:key configure-flags #:allow-other-keys)
                      (format #t "Perl configure flags: ~s~%" configure-flags)
@@ -238,13 +225,12 @@
                              (("libpth => .*$")
                               (string-append "libpth => '" libc
                                              "/lib',\n"))))
-                         config2)
-               #t))))))
+                         config2)))))))
     (inputs
-     (if (%current-target-system)
-         `(("bash" ,bash-minimal)
-           ("coreutils" ,coreutils))
-         '()))
+     (append (list coreutils-minimal)
+             (if (%current-target-system)
+                 (list bash-minimal)
+                 '())))
     (native-inputs
      (if (%current-target-system)
          `(("perl-cross"
@@ -252,11 +238,10 @@
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/arsv/perl-cross")
-                     (commit "1.3.3")))
-               (file-name (git-file-name "perl-cross" "1.3.3"))
+                     (commit "1.3.6")))
+               (file-name (git-file-name "perl-cross" "1.3.6"))
                (sha256
-                (base32 "065qbl1x44maykaj8p8za0b6qxj74bz7fi2zsrlydir1mqb1js3d"))))
-           ("perl-cross-patch" ,@(search-patches "perl-cross.patch")))
+                (base32 "0k5vyj40czbkfl7r3dcwxpc7dvdlp2xliaav358bviq3dq9vq9bb")))))
          '()))
     (native-search-paths (list (search-path-specification
                                 (variable "PERL5LIB")
@@ -323,7 +308,7 @@ differences.")
         (base32
          "1syyqzy462501kn5ma9gl6xbmcahqcn4qpafhsmpz0nd0x2m4l63"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/aliased")
     (synopsis "Use shorter versions of class names")
     (description "The alias module loads the class you specify and exports
@@ -365,13 +350,13 @@ implicitly.")
                (("GetOptions\\( \"travis\" => \\\\\\$travis \\);") ""))
              #t)))))
     (native-inputs
-     `(("perl-archive-extract" ,perl-archive-extract)
-       ("perl-archive-zip" ,perl-archive-zip)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-file-which" ,perl-file-which)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-text-patch" ,perl-text-patch)))
+     (list perl-archive-extract
+           perl-archive-zip
+           perl-capture-tiny
+           perl-file-sharedir
+           perl-file-which
+           perl-module-build
+           perl-text-patch))
     (inputs
      `(("freetype" ,freetype)
        ("fontconfig" ,fontconfig)
@@ -402,8 +387,7 @@ from source codes.")
                 "0dc55mpayrixwx8dwql0vj0jalg4rlb3k64rprc84bl0z8vkx9m8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-mouse" ,perl-mouse)
-       ("perl-moose" ,perl-moose)))
+     (list perl-mouse perl-moose))
     (home-page "https://metacpan.org/release/Any-Moose")
     (synopsis "Transparently use Moose or Mouse modules")
     (description
@@ -428,7 +412,7 @@ variable ANY_MOOSE to be Moose or Mouse.")
          "03vvi3mk4833mx2c6dkm9zhvakf02mb2b7wz9pk9xc7c4mq04xqi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (home-page "https://metacpan.org/release/AppConfig")
     (synopsis "Configuration files and command line parsing")
     (description "AppConfig is a bundle of Perl5 modules for reading
@@ -469,9 +453,9 @@ list manipulation routines.")
                 "0nq8wqy0gsnwhiw23wsp1dmgzzbf2q1asi85yd0d7cmg4haxsmib"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Async-Interrupt")
     (synopsis "Allow C/XS libraries to interrupt perl asynchronously")
     (description
@@ -533,13 +517,9 @@ of general interest as follows:
         "0xzind7zr2prjq3zbs2j18snfpshd4xrd7igv4kp67xl0axr6fpl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-data-integer" ,perl-data-integer)
-       ("perl-digest-crc" ,perl-digest-crc)
-       ("perl-scalar-string" ,perl-scalar-string)))
+     (list perl-data-integer perl-digest-crc perl-scalar-string))
     (home-page "https://metacpan.org/release/Authen-DecHpwd")
     (synopsis "DEC VMS password hashing")
     (description "@code{Authen::DecHpwd} implements the
@@ -564,20 +544,18 @@ pure Perl backup version for systems that cannot handle XS.")
         "0qq4krap687rxf6xr31bg5nj5dqmm1frcm7fq249v1bxc4h4bnsm"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build" ,perl-module-build)
-     ("perl-test-pod" ,perl-test-pod)
-     ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+   (list perl-module-build perl-test-pod perl-test-pod-coverage))
   (propagated-inputs
-   `(("perl-authen-dechpwd" ,perl-authen-dechpwd)
-     ("perl-crypt-des" ,perl-crypt-des)
-     ("perl-crypt-eksblowfish" ,perl-crypt-eksblowfish)
-     ("perl-crypt-mysql" ,perl-crypt-mysql)
-     ("perl-crypt-passwdmd5" ,perl-crypt-passwdmd5)
-     ("perl-crypt-unixcrypt_xs" ,perl-crypt-unixcrypt_xs)
-     ("perl-data-entropy" ,perl-data-entropy)
-     ("perl-digest-md4" ,perl-digest-md4)
-     ("perl-module-runtime" ,perl-module-runtime)
-     ("perl-params-classify" ,perl-params-classify)))
+   (list perl-authen-dechpwd
+         perl-crypt-des
+         perl-crypt-eksblowfish
+         perl-crypt-mysql
+         perl-crypt-passwdmd5
+         perl-crypt-unixcrypt_xs
+         perl-data-entropy
+         perl-digest-md4
+         perl-module-runtime
+         perl-params-classify))
   (home-page "https://metacpan.org/release/Authen-Passphrase")
   (synopsis "Hashed passwords/passphrases as objects")
   (description "@code{Authen-Passphrase} is the base class for a
@@ -634,11 +612,9 @@ error when it would have happened.")
          "0zy1v746pzv3vvvpr3plpykz0vfhi940q9bfypzzhynq2qvm6d21"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-b-hooks-op-check perl-extutils-depends))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+     (list perl-b-hooks-op-check perl-lexical-sealrequirehints))
     (home-page "https://metacpan.org/release/bareword-filehandles")
     (synopsis "Disables bareword filehandles")
     (description "This module disables bareword filehandles.")
@@ -701,10 +677,8 @@ limits like @code{getrlimit} and @code{setpriority}.")
          "1imcqxp23yc80a7p0h56sja9glbrh4qyhgzljqd4g9habpz3vah3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-implementation" ,perl-module-implementation)
-       ("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)
-       ("perl-variable-magic" ,perl-variable-magic)))
+     (list perl-module-runtime perl-module-implementation
+           perl-sub-exporter-progressive perl-variable-magic))
     (home-page "https://metacpan.org/release/B-Hooks-EndOfScope")
     (synopsis "Execute code after a scope finished compilation")
     (description "This module allows you to execute code when perl finished
@@ -726,7 +700,7 @@ compiling the surrounding scope.")
          "1kfdv25gn6yik8jrwik4ajp99gi44s6idcvyyrzhiycyynzd3df7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-extutils-depends))
     (home-page "https://metacpan.org/release/B-Hooks-OP-Check")
     (synopsis "Wrap OP check callbacks")
     (description "This module allows you to wrap OP check callbacks.")
@@ -766,7 +740,7 @@ keywords: @code{@@Scalars, @@Arrays, @@Hashes, @@Filehandles, @@Symbols,
                 "1gl9ybm9hgia3ld5s11b7bv2p2hmx5rss5hxcfy6rmbzrjcnci01"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     ;; The optional input module Statistics::PointEstimation (from
     ;; Statistics-TTest) lists no license.
     (synopsis "Benchmarking with statistical confidence")
@@ -793,7 +767,7 @@ but don't want to go all out and profile your code.")
          "09m96p8c0ipgz42li2ywdgy0vxb57mb5nf59j9gw7yzc3xkslv9w"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)))
+     (list perl-carp-clan))
     (home-page "https://metacpan.org/release/Bit-Vector")
     (synopsis "Bit vector library")
     (description "Bit::Vector is an efficient C library which allows you to
@@ -856,8 +830,7 @@ Agency.")
          "07l3zfv8hagv37i3clvj5a1zc2jarr5phg80c93ks35zaz6llx9i"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-business-isbn-data" ,perl-business-isbn-data)
-       ("perl-mojolicious" ,perl-mojolicious)))
+     (list perl-business-isbn-data perl-mojolicious))
     (home-page "https://metacpan.org/release/Business-ISBN")
     (synopsis "Work with International Standard Book Numbers")
     (description "This module provides tools to deal with International
@@ -896,7 +869,7 @@ Standard Serial Numbers.")
         (base32 "1cpcfyaz1fl6fnm076jx2jsphw147wj6aszj2yzqrgsncjhk2cja"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-tie-cycle" ,perl-tie-cycle)))
+     (list perl-tie-cycle))
     (home-page "https://metacpan.org/release/Business-ISMN")
     (synopsis "Work with International Standard Music Numbers")
     (description "This module provides tools to deal with International
@@ -916,9 +889,7 @@ Standard Music Numbers.")
                 "1s6i670dc3yb6ngvdk48y6szdk5n1f4icdcjv2vi1l2xp9fzviyj"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-error" ,perl-error)
-       ("perl-ipc-sharelite" ,perl-ipc-sharelite)))
+     (list perl-digest-sha1 perl-error perl-ipc-sharelite))
     (home-page "https://metacpan.org/release/Cache-Cache")
     (synopsis "Cache interface for Perl")
     (description "The Cache modules are designed to assist a developer in
@@ -1030,7 +1001,7 @@ but it is a good educated guess.")
         (base32 "1wb6b0qjga7kvn4p8df6k4g1pl2yzaqiln1713xidh3i454i3alq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-base" ,perl-test-base)))
+     (list perl-test-base))
     (home-page "https://metacpan.org/release/Carp-Always")
     (synopsis "Warns and dies noisily with stack backtraces/")
     (description "This module is meant as a debugging aid.  It can be used to
@@ -1070,9 +1041,9 @@ library assert.h.")
         (base32 "14x4m4dlj7pwq2r2fsmww3q3xb61cdgnrlmjh5mms3ikaln6rmmk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-carp-assert" ,perl-carp-assert)))
+     (list perl-carp-assert))
     (home-page "https://metacpan.org/release/Carp-Assert-More")
     (synopsis "Convenience wrappers around Carp::Assert")
     (description "Carp::Assert::More is a set of handy assertion functions for
@@ -1092,7 +1063,7 @@ Perl.")
         (base32 "0237xx3rqa72sr4vdvws9r1m453h5f25bl85mdjmmk128kir4py7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Carp-Clan")
     (synopsis "Report errors from a \"clan\" of modules")
     (description "This module allows errors from a clan (or family) of modules
@@ -1184,30 +1155,30 @@ the Carp.pm module doesn't help.")
                (install-file "bin/circos" bin)
                #t))))))
     (propagated-inputs
-     `(("perl" ,perl)
-       ("perl-carp" ,perl-carp)
-       ("perl-clone" ,perl-clone)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-file-temp" ,perl-file-temp)
-       ("perl-font-ttf" ,perl-font-ttf)
-       ("perl-gd" ,perl-gd)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-math-bezier" ,perl-math-bezier)
-       ("perl-math-round" ,perl-math-round)
-       ("perl-math-vecstat" ,perl-math-vecstat)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-number-format" ,perl-number-format)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-readonly" ,perl-readonly)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-set-intspan" ,perl-set-intspan)
-       ("perl-statistics-basic" ,perl-statistics-basic)
-       ("perl-svg" ,perl-svg)
-       ("perl-text-balanced" ,perl-text-balanced)
-       ("perl-text-format" ,perl-text-format)
-       ("perl-time-hires" ,perl-time-hires)))
+     (list perl
+           perl-carp
+           perl-clone
+           perl-config-general
+           perl-digest-md5
+           perl-file-temp
+           perl-font-ttf
+           perl-gd
+           perl-getopt-long
+           perl-list-allutils
+           perl-math-bezier
+           perl-math-round
+           perl-math-vecstat
+           perl-memoize
+           perl-number-format
+           perl-params-validate
+           perl-readonly
+           perl-regexp-common
+           perl-set-intspan
+           perl-statistics-basic
+           perl-svg
+           perl-text-balanced
+           perl-text-format
+           perl-time-hires))
     (home-page "http://circos.ca/")
     (synopsis "Generation of circularly composited renditions")
     (description
@@ -1229,7 +1200,7 @@ composited renditions of genomic data and related annotations.")
          "07215zzr4ydf49832vn54i3gf2q5b97lydkv8j56wb2svvjs64mz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-sub-name" ,perl-sub-name)))
+     (list perl-sub-name))
     (home-page "https://metacpan.org/release/Class-Accessor")
     (synopsis "Automated accessor generation")
     (description "This module automagically generates accessors/mutators for
@@ -1250,9 +1221,9 @@ your class.")
          "1lilrjy1s0q5hyr0888kf0ifxjyl2iyk4vxil4jsv0sgh39lkgx5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)))
+     (list perl-class-accessor))
     (home-page "https://metacpan.org/release/Class-Accessor-Chained")
     (synopsis "Faster, but less expandable, chained accessors")
     (description "A chained accessor is one that always returns the object
@@ -1274,12 +1245,9 @@ the same mk_accessors interface.")
         (base32 "1fy48hx56n5kdn1gz66awg465qf34r0n5jam64x7zxh9zhzb1m9m"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-sub-name" ,perl-sub-name)))
+     (list perl-class-xsaccessor perl-module-runtime perl-sub-name))
     (home-page "https://metacpan.org/release/Class-Accessor-Grouped")
     (synopsis "Build groups of accessors")
     (description "This class lets you build groups of accessors that will call
@@ -1299,7 +1267,7 @@ different getters and setters.")
         (base32 "0gp3czp6y0jxx4448kz37f7gdxq4vw514bvc0l98rk4glvqkq1c4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-c3" ,perl-algorithm-c3)))
+     (list perl-algorithm-c3))
     (home-page "https://metacpan.org/release//Class-C3")
     (synopsis "Pragma to use the C3 method resolution order algorithm")
     (description "This is pragma to change Perl 5's standard method resolution
@@ -1320,12 +1288,9 @@ sophisticated C3 method resolution order.")
         (base32 "1xsbydmiskpa1qbmnf6n39cb83nlb432xgkad9kfhxnvm8jn4rw5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-module-build-tiny perl-test-exception))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-list-moreutils perl-mro-compat))
     (home-page "https://metacpan.org/release/Class-C3-Adopt-NEXT")
     (synopsis "Drop-in replacement for NEXT")
     (description "This module is intended as a drop-in replacement for NEXT,
@@ -1345,12 +1310,9 @@ supporting the same interface, but using Class::C3 to do the hard work.")
         (base32 "14wn1g45z3b5apqq7dcai5drk01hfyqydsd2m6hsxzhyvi3b2l9h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-class-c3" ,perl-class-c3)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-class-c3 perl-class-inspector perl-mro-compat))
     (home-page "https://metacpan.org/release/Class-C3-Componentised")
     (synopsis "Load mix-ins or components to your C3-based class")
     (description "This module will inject base classes to your module using
@@ -1431,7 +1393,7 @@ to the calling program.")
         (base32
          "09ifd6v0c94vr20n9yr1dxgcp7hyscqq851szdip7y24bd26nlbc"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Class-Factory-Util")
     (synopsis "Utility methods for factory classes")
     (description "This module exports methods useful for factory classes.")
@@ -1469,16 +1431,11 @@ loaded class.")
         (base32 "13sz4w8kwljhfcy7yjjgrgg5hv3wccr8n3iqarhyb5sjkdvzlj1a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-needs
+           perl-test-without-module))
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-data-optlist" ,perl-data-optlist)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-implementation" ,perl-module-implementation)))
+     (list perl-package-stash perl-data-optlist perl-namespace-clean
+           perl-module-runtime perl-module-implementation))
     (home-page "https://metacpan.org/release/Class-Load")
     (synopsis "Working (require \"Class::Name\") and more")
     (description "\"require EXPR\" only accepts Class/Name.pm style module
@@ -1500,10 +1457,8 @@ names, not Class::Name.  For that, this module provides \"load_class
          "1ldd4a306hjagm5v9j0gjg8y7km4v3q45bxxqmj2bzgb6vsjrhjv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-without-module" ,perl-test-without-module)))
-    (inputs `(("perl-class-load" ,perl-class-load)))
+     (list perl-test-fatal perl-test-needs perl-test-without-module))
+    (inputs (list perl-class-load))
     (home-page "https://metacpan.org/release/Class-Load-XS")
     (synopsis "XS implementation of parts of Class::Load")
     (description "This module provides an XS implementation for portions of
@@ -1543,8 +1498,7 @@ write accessor methods for your objects that perform standard tasks.")
         (base32 "0qzx83mgd71hlc2m1kpw15dqsjzjq7b2cj3sdgg45a0q23vhfn5b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-fatal perl-test-needs))
     (home-page "https://metacpan.org/release/Class-Method-Modifiers")
     (synopsis "Moose-like method modifiers")
     (description "Class::Method::Modifiers provides three modifiers:
@@ -1569,11 +1523,9 @@ with a hook to easily call that original method.")
         "02vwzzqn1s24g525arbrjh9s9j0y1inp3wbr972gh51ri51zciw7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-params-classify" ,perl-params-classify)))
+     (list perl-params-classify))
     (home-page "https://metacpan.org/release/Class-Mix")
     (synopsis "Dynamic class mixing")
     (description "The @code{mix_class} function provided by this
@@ -1634,9 +1586,9 @@ uses no non-core modules for any recent Perl.")
         (base32 "0pqa98z3ij6a3v9wkmvc8b410kv30y0xxqf0i6if3lp4lx3rgqjj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)))
+     (list perl-class-inspector))
     (home-page "https://metacpan.org/release/Class-Unload")
     (synopsis "Unload a class")
     (description "Class:Unload unloads a given class by clearing out its
@@ -1700,11 +1652,9 @@ objects.")
          "0cin2bjn5z8xhm9v4j7pwlkx88jnvz8al0njdjwyvs6fb0glh8sn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-clone-pp" ,perl-clone-pp)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-clone perl-clone-pp perl-test-without-module))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Clone-Choose")
     (synopsis "Choose appropriate Perl @code{clone} utility")
     (description "This @code{Clone::Choose} module checks several different
@@ -1764,12 +1714,10 @@ as defined by two typical specimens of Perl coders.")
         (base32 "0qdypqd7mx96bwdjlv13fn6p96bs4w0yv94yv94xa7z5lqkdj4rg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-extutils-pkgconfig perl-test-deep perl-test-exception
+           perl-test-warn))
     (inputs
-     `(("libconfig" ,libconfig)))
+     (list libconfig))
     (home-page "https://metacpan.org/release/Conf-Libconfig")
     (synopsis "Perl extension for libconfig")
     (description
@@ -1814,7 +1762,7 @@ tabular data.")
          "0l31sg7dwh4dwwnql42hp7arkhcm15bhsgfg4i6xvbjzy9f2mnk8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-pluggable" ,perl-module-pluggable)))
+     (list perl-module-pluggable))
     (home-page "https://metacpan.org/release/Config-Any")
     (synopsis "Load configuration from different file formats")
     (description "Config::Any provides a facility for Perl applications and
@@ -1835,8 +1783,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.")
         (base32 "02dsz3inh5jwgaxmbcz8qxwgin8mkhm6vj9jyzfmm3dr5pnxcbnr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-io-stringy",perl-io-stringy)))
+     (list perl-module-build perl-io-stringy))
     (home-page "https://metacpan.org/pod/Config::IniFiles")
     (synopsis "Package for configuration files outside your Perl script")
     (description "This package provides a way to have readable configuration
@@ -1858,7 +1805,7 @@ can be grouped, and settings can be accessed from a tied hash.")
          "1qcwib4yaml5z2283qy5khjcydyibklsnk8zrk9wzdzc5wnv5r01"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)))
+     (list perl-capture-tiny))
     (home-page "https://metacpan.org/release/Config-AutoConf")
     (synopsis "Module to implement some AutoConf macros in Perl")
     (description "Config::AutoConf is intended to provide the same
@@ -1904,10 +1851,9 @@ options.")
          "0kp57na9mk6yni693h2fwap6l1ndbcj97l4860r9vkzx2jw0fjk7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)))
+     (list perl-moo perl-moox-types-mooselike))
     (home-page "https://metacpan.org/release/Config-GitLike")
     (synopsis "Parse Git style configuration files")
     (description
@@ -1929,9 +1875,7 @@ of the style used by the Git version control system.")
                 "0clphq6a17chvb663fvjnxqvyvh26g03x0fl4bg9vy4ibdnzg2v2"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-mixin-linewise" ,perl-mixin-linewise)
-       ("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-mixin-linewise perl-perlio-utf8_strict perl-sub-exporter))
     (home-page "https://metacpan.org/release/Config-INI")
     (synopsis "Simple .ini-file format reader and writer")
     (description "@code{Config::INI} is a module that facilates the reading
@@ -1952,11 +1896,10 @@ and writing of @code{.ini}-style configuration files.")
         (base32
          "1nwlldgrx86yn7y6a53cqgvzm2ircsvxg1addahlcy6510x9a1gq"))))
     (inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build-tiny perl-test-fatal))
     ;; Needed for tests.
     (native-inputs
-     `(("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)))
+     (list perl-sub-exporter-progressive))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Const-Fast")
     (synopsis "Facility for creating read-only scalars, arrays, and hashes")
@@ -1978,8 +1921,7 @@ scalars, arrays, and hashes.")
          "07zxgmb11bn4zj3w9g1zwbb9iv4jyk5q7hc0nv59knvv5i64m489"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-exception perl-test-simple))
     (home-page "https://metacpan.org/release/Context-Preserve")
     (synopsis "Preserve context during subroutine call")
     (description "This module runs code after a subroutine call, preserving
@@ -2003,8 +1945,7 @@ the caller.")
          "15v3489k179cx0fz3lix79ssjid0nhhpf6c33swpxga6pss92dai"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-slurp" ,perl-file-slurp)
-       ("perl-test-most" ,perl-test-most)))
+     (list perl-file-slurp perl-test-most))
     (home-page
      "https://metacpan.org/release/Convert-BinHex")
     (synopsis "Extract data from Macintosh BinHex files")
@@ -2071,8 +2012,8 @@ name and version from filenames.")
         (base32
          "07rmdbz1rbnb7w33vswn1wixlyh947sqr93xrvcph1hwzhmmg818"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-deep" ,perl-test-deep)))
-    (propagated-inputs `(("perl-cpan-meta" ,perl-cpan-meta)))
+    (native-inputs (list perl-test-deep))
+    (propagated-inputs (list perl-cpan-meta))
     (home-page "https://metacpan.org/release/CPAN-Meta-Check")
     (synopsis "Verify requirements in a CPAN::Meta object")
     (description "This module verifies if requirements described in a
@@ -2092,7 +2033,7 @@ CPAN::Meta object are present.")
         (base32 "0c07jfh6pq0f3hlhg0cqmznna7rlcflgrqv17mbkz9gnvg4x3szv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Cpanel-JSON-XS")
     (synopsis "JSON::XS for Cpanel")
     (description "This module converts Perl data structures to JSON and vice
@@ -2114,7 +2055,7 @@ versa.")
         "0ig698lmpjz7fslnznxm0609lvlnvf4f3s370082nzycnqhxww3a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-crypt-rijndael" ,perl-crypt-rijndael)))
+     (list perl-crypt-rijndael))
     (home-page "https://metacpan.org/release/Crypt-CBC")
     (synopsis "Encrypt Data with Cipher Block Chaining Mode")
     (description "@code{Crypt::CBC} is a Perl-only implementation of
@@ -2139,7 +2080,7 @@ are compatible with the encryption format used by SSLeay.")
         "1rypxlhpd1jc0c327aghgl9y6ls47drmpvn0a40b4k3vhfsypc9d"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-crypt-cbc" ,perl-crypt-cbc)))
+     (list perl-crypt-cbc))
     (home-page "https://metacpan.org/release/Crypt-DES")
     (synopsis "DES encryption module")
     (description "@code{Crypt::DES} is an XS-based implementation of
@@ -2163,11 +2104,9 @@ decrypt functions.")
         "0k01aw3qb2s4m1w4dqsc9cycyry1zg3wabdym4vp4421b1ni5irw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-class-mix" ,perl-class-mix)))
+     (list perl-class-mix))
     (home-page "https://metacpan.org/release/Crypt-Eksblowfish")
     (synopsis "The Eksblowfish block cipher")
     (description "Eksblowfish is a variant of the Blowfish cipher,
@@ -2197,10 +2136,9 @@ password hashing algorithm based on Eksblowfish.")
         "1qyx6ha13r0rh80ldv5wy2bq2pa74igwh8817xlapsfgxymdzswk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-dbd-mysql" ,perl-dbd-mysql)))
+     (list perl-module-build perl-dbd-mysql))
     (propagated-inputs
-     `(("perl-digest-sha1" ,perl-digest-sha1)))
+     (list perl-digest-sha1))
     (home-page "https://metacpan.org/release/Crypt-MySQL")
     (synopsis "Emulate the MySQL PASSWORD() function")
     (description "@code{Crypt::MySQL} emulates the MySQL PASSWORD()
@@ -2224,7 +2162,7 @@ without the need for a real MySQL environment.")
         "0j0r74f18nk63phddzqbf7wqma2ci4p4bxvrwrxsy0aklbp6lzdp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Crypt-PasswdMD5")
     (synopsis "Interoperable MD5-based crypt() functions")
     (description "@code{Crypt::PasswdMD5} provides various
@@ -2342,8 +2280,7 @@ used in @code{crypt} are also supplied separately.")
                 "0xwf4rmii55k3lp19mpbh00mbgby7rxdk2lk84148bjhp6i7rz3s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-requires))
     (home-page "https://metacpan.org/release/Cwd-Guard")
     (synopsis "Temporarily change working directory")
     (description
@@ -2404,15 +2341,10 @@ bioinformatics data.")
          "12vgqdjbfqf2qfg21x22wg88xnwxfbw2ki3qzcb3nb0chwjj4axn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-deep perl-test-output perl-test-fatal))
     (inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-list-moreutils
+           perl-module-runtime perl-role-tiny perl-strictures))
     (home-page "https://metacpan.org/release/Data-Perl")
     (synopsis "Base classes wrapping fundamental Perl data types")
     (description "Collection of classes that wrap fundamental data types that
@@ -2435,8 +2367,7 @@ input.")
         (base32 "1gg8rqbv3x6a1lrpabv6vnlab53zxmpwz2ygad9fcx4gygqj12l1"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-file-find-rule" ,perl-file-find-rule)))
+     (list perl-clone perl-file-find-rule))
     (home-page "https://metacpan.org/release/Data-Compare")
     (synopsis "Compare Perl data structures")
     (description "This module compares arbitrary data structures to see if
@@ -2458,14 +2389,10 @@ they are copies of each other.")
         "1r176jjzir2zg5kidx85f7vzi6jsw7ci9vd4kvbr9183lfhw8496"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-crypt-rijndael" ,perl-crypt-rijndael)
-       ("perl-data-float" ,perl-data-float)
-       ("perl-http-lite" ,perl-http-lite)
-       ("perl-params-classify" ,perl-params-classify)))
+     (list perl-crypt-rijndael perl-data-float perl-http-lite
+           perl-params-classify))
     (home-page "https://metacpan.org/release/Data-Entropy")
     (synopsis "Entropy (randomness) management")
     (description "@code{Data::Entropy} provides modules relating to
@@ -2496,9 +2423,7 @@ functions to shuffle arrays.")
         "0m53zxhx9sn49yqh7azlpyy9m65g54v8cd2ha98y77337gg7xdv3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Data-Integer")
     (synopsis "Details of the native integer data type")
     (description "This module is about the native integer numerical
@@ -2624,9 +2549,7 @@ indentation and newlines plus sub deparsing.")
         "12ji4yf3nc965rqqgfhr96w7irpm6n1g15nivfxvhc49hlym5cg2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Data-Float")
     (synopsis "Details of the floating point data type")
     (description "@code{Data::Float} is about the native floating
@@ -2652,8 +2575,7 @@ point values at a low level.")
          "1hzmgr2imdg1fc3hmwx0d56fhsdfyrgmgx7jb4jkyiv6575ifq9n"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-install" ,perl-sub-install)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-sub-install perl-params-util))
     (home-page "https://metacpan.org/release/Data-OptList")
     (synopsis "Parse and validate simple name/value option pairs")
     (description
@@ -2673,10 +2595,9 @@ point values at a low level.")
         (base32 "12rxrr2b11qjk0c437cisw2kfqkafw1awcng09cv6yhzglb55yif"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-class-accessor-chained" ,perl-class-accessor-chained)))
+     (list perl-class-accessor-chained))
     (home-page "https://metacpan.org/release/Data-Page")
     (synopsis "Help when paging through sets of results")
     (description "When searching through large amounts of data, it is often
@@ -2701,17 +2622,12 @@ The maths behind this is unfortunately fiddly, hence this module.")
          "12vgqdjbfqf2qfg21x22wg88xnwxfbw2ki3qzcb3nb0chwjj4axn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-test-deep perl-test-fatal perl-test-output))
     (inputs
-     `(("perl-class-method-modifiers"
-        ,perl-class-method-modifiers)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-module-runtime perl-role-tiny
+           perl-strictures))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-list-moreutils))
     (home-page
      "https://metacpan.org/release/Data-Perl")
     (synopsis "Base classes wrapping fundamental Perl data types")
@@ -2742,10 +2658,8 @@ The maths behind this is unfortunately fiddly, hence this module.")
          "0njjh8zp5afc4602jrnmg89icj7gfsil6i955ypcqxc2gl830sb0"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-clone-pp" ,perl-clone-pp)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-sort-naturally" ,perl-sort-naturally)))
+     (list perl-clone-pp perl-file-homedir perl-package-stash
+           perl-sort-naturally))
     (home-page "https://metacpan.org/release/Data-Printer")
     (synopsis "Colored pretty-print of Perl data structures and objects")
     (description "Display Perl variables and objects on screen, properly
@@ -2766,10 +2680,9 @@ formatted (to be inspected by a human).")
          "1gwyhjwg4lrnfsn8wb6r8msb4yh0y4wca4mz3z120xbnl9nycshx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-test-exception perl-module-build))
     (propagated-inputs
-     `(("perl-sub-uplevel" ,perl-sub-uplevel)))
+     (list perl-sub-uplevel))
     (home-page "https://metacpan.org/release/Data-Record")
     (synopsis "Conditionally split data into records")
     (description "This Perl module allows you to split data into records by
@@ -2795,10 +2708,9 @@ like split on newlines unless newlines are embedded in quotes.")
          "1pmlxca0a8sv2jjwvhwgqavq6iwys6kf457lby4anjp3f1dpx4yd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-failwarnings" ,perl-test-failwarnings)))
+     (list perl-test-failwarnings))
     (propagated-inputs
-     `(("perl-mro-compat" ,perl-mro-compat)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-mro-compat perl-sub-exporter))
     (home-page "https://metacpan.org/release/Data-Section")
     (synopsis "Read multiple hunks of data out of your DATA section")
     (description "This package provides a Perl library to read multiple hunks
@@ -2818,7 +2730,7 @@ of data out of your DATA section.")
         (base32 "1jx9g5sxcw0i2zkm2z895k422i49kpx0idnnvvvs36lhvgzkac0b"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Data-Section-Simple")
     (synopsis "Read data from __DATA__")
     (description
@@ -2840,7 +2752,7 @@ section of the file.")
          "0ncf4l39ka23nb01jlm6rzxdb5pqbip01x0m38bnvf1gim825caa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-string" ,perl-io-string)))
+     (list perl-io-string))
     (home-page "https://metacpan.org/release/Data-Stag")
     (synopsis "Structured tags datastructures")
     (description
@@ -2864,12 +2776,10 @@ Perl.")
          "05q9ygcv7r318j7daxz42rjr5b99j6whjmwjdih0axxrlqr89q06"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-moose perl-namespace-clean perl-path-class
+           perl-sub-exporter))
     (home-page "https://metacpan.org/release/Data-Stream-Bulk")
     (synopsis "N at a time iteration API")
     (description "This module tries to find middle ground between one at a
@@ -2892,9 +2802,9 @@ necessary later on.")
         (base32 "15pgvmf7mf9fxsg2l4l88xwvs41218d0bvawhlk15sx06qqp0kwb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (propagated-inputs
-     `(("perl-file-homedir" ,perl-file-homedir)))
+     (list perl-file-homedir))
     (home-page "https://metacpan.org/release/Data-Tumbler")
     (synopsis "Dynamic generation of nested combinations of variants")
     (description "Data::Tumbler - Dynamic generation of nested combinations of
@@ -2915,13 +2825,10 @@ variants.")
          "0m7d1505af9z2hj5aw020grcmjjlvnkjpvjam457d7k5qfy4m8lf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-task-weaken" ,perl-task-weaken)
-       ("perl-tie-toobject" ,perl-tie-toobject)))
+     (list perl-class-load perl-moose perl-namespace-clean
+           perl-task-weaken perl-tie-toobject))
     (home-page "https://metacpan.org/release/Data-Visitor")
     (synopsis "Visitor style traversal of Perl data structures")
     (description "This module is a simple visitor implementation for Perl
@@ -2946,8 +2853,7 @@ structures, and all ref types (hashes, arrays, scalars, code, globs).")
          "1barz0jgdaan3jm7ciphs5n3ahwkl42imprs3y8c1dwpwyr3gqbw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-bit-vector" ,perl-bit-vector)
-       ("perl-carp-clan" ,perl-carp-clan)))
+     (list perl-bit-vector perl-carp-clan))
     (home-page "https://metacpan.org/release/Date-Calc")
     (synopsis "Gregorian calendar date calculations")
     (description "This package consists of a Perl module for date calculations
@@ -2970,9 +2876,7 @@ applicable).")
          "1cssi9rmd31cgaafgp4m70jqbm1mgh3aphxsxz1dwdz8h283n6jz"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-bit-vector" ,perl-bit-vector)
-       ("perl-carp-clan" ,perl-carp-clan)
-       ("perl-date-calc" ,perl-date-calc)))
+     (list perl-bit-vector perl-carp-clan perl-date-calc))
     (home-page "https://metacpan.org/release/Date-Calc-XS")
     (synopsis "XS wrapper for Date::Calc")
     (description "Date::Calc::XS is an XS wrapper and C library plug-in for
@@ -3038,16 +2942,11 @@ hours, minutes, seconds, and time zones.")
         (base32 "1rxjagwmkdlmksz1cbxwx2ad51pv5q7dri2djqkz44q7j1nxlbmi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check perl-module-build perl-test-fatal
+           perl-test-warnings))
     (propagated-inputs
-     `(("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-datetime-locale perl-datetime-timezone perl-file-sharedir
+           perl-params-validate perl-try-tiny))
     (home-page "https://metacpan.org/release/DateTime")
     (synopsis "Date and time object for Perl")
     (description "DateTime is a class for the representation of date/time
@@ -3069,7 +2968,7 @@ time before its creation (in 1582).")
     (build-system perl-build-system)
     ;; Only needed for tests
     (native-inputs
-     `(("perl-datetime" ,perl-datetime)))
+     (list perl-datetime))
     (home-page "https://metacpan.org/release/DateTime-Calendar-Julian")
     (synopsis "Dates in the Julian calendar")
     (description "This package is a companion module to @code{DateTime.pm}.
@@ -3092,11 +2991,9 @@ precise.")
          "0ih9pi6myg5i26hjpmpzqn58s0yljl2qxdd6gzpy9zda4hwirx4l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-set-infinite" ,perl-set-infinite)))
+     (list perl-datetime perl-params-validate perl-set-infinite))
     (home-page "https://metacpan.org/release/DateTime-Set")
     (synopsis "DateTime set objects")
     (description "The DateTime::Set module provides a date/time sets
@@ -3119,8 +3016,7 @@ within a time range.")
          "1skmykxbrf98ldi72d5s1v6228gfdr5iy4y0gpl0xwswxy247njk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-event-recurrence" ,perl-datetime-event-recurrence)))
+     (list perl-datetime perl-datetime-event-recurrence))
     (home-page "https://metacpan.org/release/DateTime-Event-ICal")
     (synopsis "DateTime rfc2445 recurrences")
     (description "This module provides convenience methods that let you easily
@@ -3141,8 +3037,7 @@ create DateTime::Set objects for RFC 2445 style recurrences.")
          "19dms2vg9hvfx80p85m8gkn2ww0yxjrjn8qsr9k7f431lj4qfh7r"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-set" ,perl-datetime-set)))
+     (list perl-datetime perl-datetime-set))
     (home-page "https://metacpan.org/release/DateTime-Event-Recurrence")
     (synopsis "DateTime::Set extension for basic recurrences")
     (description "This module provides convenience methods that let you easily
@@ -3165,10 +3060,8 @@ or \"every day\".  You can also create more complicated recurrences, such as
          "18qw5rn1qbji3iha8gmpgldbjv9gvn97j9d5cp57fb4r5frawgrq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-factory-util" ,perl-class-factory-util)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-strptime" ,perl-datetime-format-strptime)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-class-factory-util perl-datetime
+           perl-datetime-format-strptime perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Builder")
     (synopsis "Create DateTime parser classes and objects")
     (description "DateTime::Format::Builder creates DateTime parsers.  Many
@@ -3190,15 +3083,10 @@ to do this without writing reams of structural code.")
         (base32 "1vnq3a8bwhidcv3z9cvcmfiq2qa84hikr993ffr19fw7nbzbk9sh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-mocktime" ,perl-test-mocktime)))
+     (list perl-test-exception perl-test-nowarnings perl-test-mocktime))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-pluggable" ,perl-module-pluggable)))
+     (list perl-datetime perl-datetime-format-builder
+           perl-datetime-timezone perl-list-moreutils perl-module-pluggable))
     (home-page "https://metacpan.org/release/DateTime-Format-Flexible")
     (synopsis "Parse date and time strings")
     (description "DateTime::Format::Flexible attempts to take any string you
@@ -3219,13 +3107,10 @@ give it and parse it into a DateTime object.")
          "0cvwk7pigj7czsp81z35h7prxvylkrlk2l0kwvq0v72ykx9zc2cb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-event-ical" ,perl-datetime-event-ical)
-       ("perl-datetime-set" ,perl-datetime-set)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-datetime perl-datetime-event-ical perl-datetime-set
+           perl-datetime-timezone perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-ICal")
     (synopsis "Parse and format iCal datetime and duration strings")
     (description "This module understands the ICal date/time and duration
@@ -3248,13 +3133,10 @@ order to create the appropriate objects.")
         "1syccqd5jlwms8v78ksnf68xijzl97jky5vbwhnyhxi5gvgfx8xk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-test-distribution" ,perl-test-distribution)
-       ("perl-test-pod" ,perl-test-pod)))
+     (list perl-datetime perl-datetime-format-builder perl-file-find-rule
+           perl-test-distribution perl-test-pod))
     (home-page "https://metacpan.org/release/DateTime-Format-ISO8601")
     (synopsis "Parse ISO8601 date and time formats")
     (description "@code{DateTime::Format::ISO8601} is a DateTime
@@ -3274,18 +3156,16 @@ extension that parses almost all ISO8601 date and time formats.")
         (base32 "0mqjsjyfymzp7lx7czx17bsdshzsh6l8r6hcadv81zvga326zprw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-util" ,perl-module-util)
-       ("perl-test-mocktime" ,perl-test-mocktime)))
+     (list perl-module-build perl-module-util perl-test-mocktime))
     (propagated-inputs
-     `(("perl-boolean" ,perl-boolean)
-       ("perl-clone" ,perl-clone)
-       ("perl-date-calc" ,perl-date-calc)
-       ("perl-date-calc-xs" ,perl-date-calc-xs)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-boolean
+           perl-clone
+           perl-date-calc
+           perl-date-calc-xs
+           perl-datetime
+           perl-datetime-timezone
+           perl-list-moreutils
+           perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Natural")
     (synopsis "Machine-readable date/time with natural parsing")
     (description "DateTime::Format::Natural takes a string with a human
@@ -3306,13 +3186,13 @@ parsing logic.")
         (base32 "0jiy2yc9h9932ykb8x2l1j3ff8ms3p4426m947r5clygis1kr91g"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-package-deprecationmanager" ,perl-package-deprecationmanager)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-datetime
+           perl-datetime-locale
+           perl-datetime-timezone
+           perl-package-deprecationmanager
+           perl-params-validate
+           perl-sub-name
+           perl-test-warnings))
     (home-page "https://metacpan.org/release/DateTime-Format-Strptime")
     (synopsis "Parse and format strp and strf time patterns")
     (description "This module implements most of `strptime(3)`, the POSIX
@@ -3335,18 +3215,17 @@ takes a string and a pattern and returns the `DateTime` object associated.")
          "05f0jchminv5g2nrvsx5v1ihc5919fzzhh4f82dxi5ns8bkq2nis"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-ipc-system-simple" ,perl-ipc-system-simple)
-       ("perl-test-file-sharedir-dist" ,perl-test-file-sharedir-dist)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)
-       ("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-file-sharedir
+           perl-ipc-system-simple
+           perl-test-file-sharedir-dist
+           perl-test-warnings
+           perl-test-requires
+           perl-namespace-autoclean
+           perl-file-sharedir-install
+           perl-cpan-meta-check
+           perl-module-build))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-validationcompiler" ,perl-params-validationcompiler)))
+     (list perl-list-moreutils perl-params-validationcompiler))
     (home-page "https://metacpan.org/release/DateTime-Locale")
     (synopsis "Localization support for DateTime.pm")
     (description "The DateTime::Locale modules provide localization data for
@@ -3378,17 +3257,16 @@ the DateTime.pm class.")
                                "';")))
              #t)))))
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (inputs
-     `(("tzdata" ,tzdata)))
-    (propagated-inputs
-     `(("perl-class-singleton" ,perl-class-singleton)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-params-validationcompiler" ,perl-params-validationcompiler)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list tzdata))
+    (propagated-inputs
+     (list perl-class-singleton
+           perl-list-allutils
+           perl-module-runtime
+           perl-namespace-autoclean
+           perl-params-validationcompiler
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/DateTime-TimeZone")
     (synopsis "Time zone object for Perl")
     (description "This class is the base class for all time zone objects.  A
@@ -3413,13 +3291,11 @@ DateTime::TimeZone methods.")
          "0ybs9175h4s39x8a23ap129cgqwmy6w7psa86194jq5cww1d5rhp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-most" ,perl-test-most)))
+     (list perl-test-most))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-flexible" ,perl-datetime-format-flexible)
-       ("perl-datetime-format-ical" ,perl-datetime-format-ical)
-       ("perl-datetime-format-natural" ,perl-datetime-format-natural)
-       ("perl-timedate" ,perl-timedate)))
+     (list perl-datetime perl-datetime-format-flexible
+           perl-datetime-format-ical perl-datetime-format-natural
+           perl-timedate))
     (home-page "https://metacpan.org/release/DateTimeX-Easy")
     (synopsis "Parse date/time strings")
     (description "DateTimeX::Easy uses a variety of DateTime::Format packages
@@ -3440,8 +3316,7 @@ edges (mainly concerning timezone detection and selection).")
                 "1c7wapbi9g9p2za52l3skhh31vg4da5kx2yfqzsqyf3p8iff7y4d"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-params-validate" ,perl-params-validate)))
+     (list perl-datetime perl-params-validate))
     (home-page "https://metacpan.org/release/DateTime-Format-Mail")
     (synopsis "Convert between DateTime and RFC2822/822 formats")
     (description "RFCs 2822 and 822 specify date formats to be used by email.
@@ -3461,10 +3336,9 @@ This module parses and emits such dates.")
                 "0s32lb1k80p3b3sb7w234zgxnrmadrwbcg41lhaal7dz3dk2p839"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-datetime" ,perl-datetime)))
+     (list perl-datetime))
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/DateTime-Format-W3CDTF")
     (synopsis "Parse and format W3CDTF datetime strings")
     (description
@@ -3489,12 +3363,9 @@ the appropriate objects.")
         "1p0ij2k2i81zhl7064h9ghld1w5xy2zsbghkpdzm2hjryl5lwn2x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-dynaloader-functions" ,perl-dynaloader-functions)))
+     (list perl-b-hooks-op-check perl-dynaloader-functions))
     (home-page "https://metacpan.org/release/Devel-CallChecker")
     (synopsis "Custom op checking attached to subroutines")
     (description "This module makes some new features of the Perl
@@ -3521,7 +3392,7 @@ functions available.")
          "1pxpimifzmnjnvf4icclx77myc15ahh0k56sj1djad1855mawwva"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-padwalker" ,perl-padwalker)))
+     (list perl-padwalker))
     (home-page "https://metacpan.org/release/Devel-Caller")
     (synopsis "Meatier version of caller")
     (description "Devel::Caller provides meatier version of caller.")
@@ -3540,7 +3411,7 @@ functions available.")
         (base32
          "1r735yzgvsxkj4m6ks34xva5m21cfzp9qiis2d4ivv99kjskszqm"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Devel-CheckBin")
     (synopsis "Check that a command is available")
     (description "Devel::CheckBin is a perl module that checks whether a
@@ -3560,8 +3431,7 @@ particular command is available.")
         (base32 "15621qh5gaan1sgmk9y9svl70nm8viw17x5h1kf0zknkk8lmw77j"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-mock-config" ,perl-mock-config)))
+     (list perl-capture-tiny perl-mock-config))
     (home-page "https://metacpan.org/release/Devel-CheckLib")
     (synopsis "Check that a library is available")
     (description
@@ -3584,7 +3454,7 @@ particular results.")
               "1db973a4dbyknjxq608hywil5ai6vplnayshqxrd7m5qnjbpd2vn"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+   (list perl-module-build-tiny))
   (home-page "https://metacpan.org/release/Devel-CheckCompiler")
   (synopsis "Check compiler availability")
   (description "@code{Devel::CheckCompiler} is a tiny module to check
@@ -3630,7 +3500,7 @@ based memory management, circular references will cause memory leaks.")
          "1aslj6myylsvzr0vpqry1cmmvzbmpbdcl4v9zrl18ccik7rabf1l"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)))
+     (list perl-sub-exporter-progressive))
     (home-page "https://metacpan.org/release/Devel-GlobalDestruction")
     (synopsis "Provides equivalent of ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls")
     (description "Devel::GlobalDestruction provides a function returning the
@@ -3650,8 +3520,7 @@ equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.")
         (base32 "10jyv9nmv513hs75rls5yx2xn82513xnnhjir3dxiwgb1ykfyvvm"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Devel-Hide")
     (synopsis "Forces the unavailability of specified Perl modules (for testing)")
     (description "Given a list of Perl modules/filenames, this module makes
@@ -3693,7 +3562,7 @@ allocating perl data and not releasing them again.")
          "0wpfpjqlrncslnmxa37494sfdy0901510kj2ds2k6q167vadj2jy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-caller" ,perl-devel-caller)))
+     (list perl-devel-caller))
     (home-page "https://metacpan.org/release/Devel-LexAlias")
     (synopsis "Alias lexical variables")
     (description "Devel::LexAlias provides the ability to alias a lexical
@@ -3714,11 +3583,9 @@ variable in a subroutines scope to one of your choosing.")
          "1rx6g8pyhi7lx6z130b7vlf8syzrq92w9ky8mpw4d6bwlkzy5zcb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-sub-identify" ,perl-sub-identify)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-package-stash perl-sub-identify perl-mro-compat))
     (home-page "https://metacpan.org/release/Devel-OverloadInfo")
     (synopsis "Introspect overloaded operators")
     (description "Devel::OverloadInfo returns information about overloaded
@@ -3740,13 +3607,9 @@ hierarchy the overloads are declared and where the code implementing it is.")
          "0i1khiyi4h4h8vfwn7xip5c53z2hb2rk6407f3csvrdsiibvy53q"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-test-warn perl-test-simple))
     (propagated-inputs
-     `(("perl-class-tiny" ,perl-class-tiny)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-class-tiny perl-sub-exporter perl-namespace-clean))
     (home-page "https://metacpan.org/release/Devel-PartialDump")
     (synopsis "Partial dumping of data structures")
     (description "This module is a data dumper optimized for logging of
@@ -3787,7 +3650,7 @@ providing a simple interface to this data.")
          "0iri5nb2lb76qv5l9z0vjpfrq5j2fyclkd64kh020bvy37idp0v2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)))
+     (list perl-devel-stacktrace))
     (home-page "https://metacpan.org/release/Devel-StackTrace-AsHTML")
     (synopsis "Displays stack trace in HTML")
     (description "Devel::StackTrace::AsHTML adds as_html method to
@@ -3952,9 +3815,9 @@ SHA-1 message digest algorithm for use by Perl programs.")
                (base32
                 "1i7dr9jpdiy2nijl2p4q5zg2q2s9ckbj2hs4kmnnckf9hsb4p17a"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-test-fatal" ,perl-test-fatal)))
+    (native-inputs (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Dist-CheckConflicts")
     (synopsis "Declare version conflicts for your dist")
     (description "This module allows you to specify conflicting versions of
@@ -3976,9 +3839,7 @@ modules separately and deal with them after the module is done installing.")
         "10x13q920j9kid7vmbj6fiaz153042dy4mwdmpzrdrxw2ir39ciy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/DynaLoader-Functions")
     (synopsis "Deconstructed dynamic C library loading")
     (description "This module provides a function-based interface to
@@ -4000,9 +3861,7 @@ the programmer to be mindfulof the space of platform variations.")
         (base32 "1a8rwcrxxhq81jcdvdwns05c65jwr5r6bxvby6vdcr3ny5m91my2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-exporter" ,perl-exporter)
-       ("perl-storable" ,perl-storable)
-       ("perl-parent" ,perl-parent)))
+     (list perl-exporter perl-storable perl-parent))
     (home-page "https://metacpan.org/dist/Encode")
     (synopsis "Character encodings in Perl")
     (description "Encode module provides the interface between Perl strings and
@@ -4023,7 +3882,7 @@ the rest of the system.  Perl strings are sequences of characters.")
          "1wdv9ffgs4xyfh5dnh09dqkmmlbf5m1hxgdgb3qy6v6vlwx8jkc3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Encode-Detect")
     (synopsis "Detect the encoding of data")
     (description "This package provides a class @code{Encode::Detect} to detect
@@ -4129,7 +3988,7 @@ separator.")
                (base32
                 "0q796nwwiarfc6pga97380c9z8xva5545632001qj75kb1g5rn1s"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Error")
     (synopsis "OO-ish Error/Exception handling for Perl")
     (description "The Error package provides two interfaces.  Firstly Error
@@ -4152,10 +4011,9 @@ catch, or can simply be recorded.")
          "1bcc47r6zm3hfr6ccsrs72kgwxm3wkk07mgnpsaxi67cypr482ga"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-devel-lexalias" ,perl-devel-lexalias)))
+     (list perl-devel-lexalias))
     (home-page "https://metacpan.org/release/Eval-Closure")
     (synopsis "Safely and cleanly create closures via string eval")
     (description "String eval is often used for dynamic code generation.  For
@@ -4196,8 +4054,7 @@ errors are rethrown automatically.")
                              ,(string-append out "/lib/perl5/site_perl"))))
                         #t))))))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-moo perl-strictures))
     (home-page "https://metacpan.org/release/Eval-WithLexicals")
     (synopsis "Lexical scope evaluation library for Perl")
     (description "The Eval::WithLexicals Perl library provides support for
@@ -4219,8 +4076,7 @@ command, which can be used as a minimal Perl read-eval-print loop (REPL).")
          "03gf4cdgrjnljgrlxkvbh2cahsyzn0zsh2zcli7b1lrqn7wgpwrk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-class-data-inheritable" ,perl-class-data-inheritable)))
+     (list perl-devel-stacktrace perl-class-data-inheritable))
     (home-page "https://metacpan.org/release/Exception-Class")
     (synopsis "Allows you to declare real exception classes in Perl")
     (description "Exception::Class allows you to declare exception hierarchies
@@ -4240,9 +4096,9 @@ in your modules in a \"Java-esque\" manner.")
         (base32 "1f25k5iaygiizlrkbbl6wxd647pwfmynykxalq6r9bbkysg8inza"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (propagated-inputs
-     `(("perl-carp" ,perl-carp)))
+     (list perl-carp))
     (home-page "https://metacpan.org/dist/Exporter")
     (synopsis "Default import method for modules")
     (description "Exporter implements an import method which allows a module to
@@ -4328,7 +4184,7 @@ maniread, maniskip, manicopy, maniadd.")
          "1v9lshfhm9ck4p0v77arj5f7haj1mmkqal62lgzzvcds6wq5www4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-extutils-config" ,perl-extutils-config)))
+     (list perl-extutils-config))
     (home-page "https://metacpan.org/release/ExtUtils-InstallPaths")
     (synopsis "Build.PL install path logic made easy")
     (description "This module tries to make install path resolution as easy as
@@ -4371,10 +4227,9 @@ it ties together a family of modern toolchain modules.")
             "0q9ynigk600fv95xac6aslrg2k19m6qbzf5hqfsnall8113r3gqj"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-capture-tiny" ,perl-capture-tiny)
-        ("perl-module-build" ,perl-module-build)))
+      (list perl-capture-tiny perl-module-build))
     (propagated-inputs
-      `(("perl-capture-tiny" ,perl-capture-tiny)))
+      (list perl-capture-tiny))
     (home-page
       "https://metacpan.org/release/ExtUtils-CppGuess")
     (synopsis "Tool for guessing C++ compiler and flags")
@@ -4395,7 +4250,7 @@ is compatible with the C compiler used to build perl.")
                 "0b4ab9qmcihsfs2ajhn5qzg7nhazr68v3r0zvb7076smswd41mla"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-number-delta" ,perl-test-number-delta)))
+     (list perl-test-number-delta))
     (home-page "https://metacpan.org/release/ExtUtils-Depends")
     (synopsis "Easily build XS extensions that depend on XS extensions")
     (description
@@ -4438,7 +4293,7 @@ module building modules.")
          "1lmmfcjxvsvhn4f3v2lyylgr8dzcf5j7mnd1pkq3jc75dph724f5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/ExtUtils-LibBuilder")
     (synopsis "Tool to build C libraries")
     (description "Some Perl modules need to ship C libraries together with
@@ -4483,7 +4338,7 @@ handle Perl/XS typemap files, and their submodules.")
                 "0vhwh0731rhh1sswmvagq0myn754dnkab8sizh6d3n6pjpcwxsmv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://metacpan.org/release/ExtUtils-PkgConfig")
     (synopsis "Simplistic interface to pkg-config")
     (description
@@ -4509,7 +4364,7 @@ It is really just boilerplate code that you would have written yourself.")
             "1phmha0ks95kvzl00r1kgnd5hvg7qb1q9jmzjmw01p5zgs1zbyix"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)))
+      (list perl-module-build))
     (home-page
       "https://metacpan.org/release/ExtUtils-Typemaps-Default")
     (synopsis "Set of useful typemaps")
@@ -4533,9 +4388,7 @@ submodules of ExtUtils::Typemaps.")
             "1zx84f93lkymqz7qa4d63gzlnhnkxm5i3gvsrwkvvqr9cxjasxli"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)
-        ("perl-test-base" ,perl-test-base)
-        ("perl-test-differences" ,perl-test-differences)))
+      (list perl-module-build perl-test-base perl-test-differences))
     (home-page
       "https://metacpan.org/release/ExtUtils-XSpp")
     (synopsis "XS for C++")
@@ -4557,17 +4410,15 @@ interface XS for C++; it is a thin layer over plain XS.")
          "090i265f73jlcl5rv250791vw32j9vvl4nd5abc7myg0klb8109w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-params-validate" ,perl-moosex-params-validate)
-       ("perl-moosex-semiaffordanceaccessor"
-        ,perl-moosex-semiaffordanceaccessor)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-class-load
+           perl-list-moreutils
+           perl-module-pluggable
+           perl-moose
+           perl-moosex-params-validate
+           perl-moosex-semiaffordanceaccessor
+           perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/File-ChangeNotify")
     (synopsis "Watch for changes to files")
     (description "This module provides a class to monitor a directory for
@@ -4588,9 +4439,7 @@ changes made to any file.")
          "1ihlhdbwaybyj3xqfxpx4ii0ypa41907b6zdh94rvr4wyqa5lh3b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-homedir" ,perl-file-homedir)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-file-homedir perl-list-moreutils perl-test-without-module))
     (home-page "https://metacpan.org/release/File-ConfigDir")
     (synopsis "Get directories of configuration files")
     (description "This module is a helper for installing, reading and finding
@@ -4633,8 +4482,7 @@ type.")
          "1znachnhmi1w5pdqx8dzgfa892jb7x8ivrdy4pzjj7zb6g61cvvy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-glob" ,perl-text-glob)
-       ("perl-number-compare" ,perl-number-compare)))
+     (list perl-text-glob perl-number-compare))
     (home-page "https://metacpan.org/release/File-Find-Rule")
     (synopsis "Alternative interface to File::Find")
     (description "File::Find::Rule is a friendlier interface to File::Find.
@@ -4656,9 +4504,7 @@ directories.")
          "19iy8spzrvh71x33b5yi16wjw5jjvs12jvjj0f7f3370hqzl6j4s"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-parse-cpan-meta" ,perl-parse-cpan-meta)))
+     (list perl-file-find-rule perl-params-util perl-parse-cpan-meta))
     (home-page "https://metacpan.org/release/File-Find-Rule-Perl")
     (synopsis "Common rules for searching for Perl things")
     (description "File::Find::Rule::Perl provides methods for finding various
@@ -4703,7 +4549,7 @@ provide a quick dropin when such functionality is needed.")
          "1bciyzwv7gwsnaykqz0czj6mlbkkg4hg1s40s1q7j2p6nlmpxxj5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)))
+     (list perl-file-which))
     (arguments `(#:tests? #f))          ;Not appropriate for chroot
     (home-page "https://metacpan.org/release/File-HomeDir")
     (synopsis "Find your home and other directories on any platform")
@@ -4829,7 +4675,7 @@ the input record separator string on a per file basis.")
          "1n6h5w3sp2bs4cfrifdx2z15cfpb4r536179mx1a12xbmj1yrxl1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/File-Remove")
     (synopsis "Remove files and directories in Perl")
     (description "@code{File::Remove::remove} removes files and directories.
@@ -4851,9 +4697,9 @@ that.  It also accepts wildcards, * and ?, as arguments for file names.")
         (base32 "0a43rfb0a1fpxh4d2dayarkdxw4cx9a2krkk87zmcilcz7yhpnar"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-sharedir-install" ,perl-file-sharedir-install)))
+     (list perl-file-sharedir-install))
     (propagated-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)))
+     (list perl-class-inspector))
     (home-page "https://metacpan.org/release/File-ShareDir")
     (synopsis "Locate per-dist and per-module shared files")
     (description "The intent of File::ShareDir is to provide a companion to
@@ -4896,7 +4742,7 @@ distributions.  It is a companion module to File::ShareDir.")
          "1yc0wlkav2l2wr36a53n4mnhsy2zv29z5nm14mygxgjwv7qgvgj5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/File-ShareDir-Install")
     (synopsis "Install shared files")
     (description "File::ShareDir::Install allows you to install read-only data
@@ -4939,9 +4785,9 @@ file names in a directory.")
          "0y5518ji60yfkx9ggjp309j6g8vfri4ka4zqlsys245i2sj2xysf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)))
+     (list perl-perlio-utf8_strict))
     (home-page "https://metacpan.org/release/File-Slurper")
     (synopsis "Simple, sane and efficient module to slurp a file")
     (description "This module provides functions for fast and correct file
@@ -5019,7 +4865,7 @@ shell.")
                 "16v61rn0yimpv5kp6b20z2f1c93n5kpsyjvr0gq4w2dc43gfvc8w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/File-Zglob")
     (synopsis "Extended Unix style glob functionality")
     (description "@code{File::Zglob} provides a traditional Unix @code{glob}
@@ -5041,7 +4887,7 @@ For instance, it supports the @code{**/*.pm} form.")
          "18jv96k1pf8wqf4vn2ahs7dv44lc9cyqj0bja9z17qici3dx7qxd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-sharedfork" ,perl-test-sharedfork)))
+     (list perl-test-sharedfork))
     (home-page "https://metacpan.org/release/Filesys-Notify-Simple")
     (synopsis "Simple and dumb file system watcher")
     (description
@@ -5093,12 +4939,9 @@ single-letter approach, is provided but not enabled by default.")
          "1cpl240qxmh7jf85ai9sfkp3nzm99syya4jxidizp7aa83kvmqbh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check perl-test-fatal perl-test-warnings))
     (propagated-inputs
-     `(("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-params-validate perl-sub-exporter))
     (home-page "https://metacpan.org/release/Getopt-Long-Descriptive")
     (synopsis "Getopt::Long, but simpler and more powerful")
     (description "Getopt::Long::Descriptive is yet another Getopt library.
@@ -5126,6 +4969,25 @@ vaguely inspired by John Ousterhout's Tk_ParseArgv.")
     (home-page "https://metacpan.org/release/Getopt-Tabular")
     (license (package-license perl))))
 
+(define-public perl-gettext
+  (package
+    (name "perl-gettext")
+    (version "1.07")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/P/PV/PVANDRY"
+                                  "/gettext-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05cwqjxxary11di03gg3fm6j9lbvg1dr2wpr311c1rwp8salg7ch"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/gettext")
+    (synopsis "Perl bindings for POSIX i18n gettext functions")
+    (description
+     "Locale::gettext provides an object oriented interface to the
+internationalization functions provided by the C library.")
+    (license license:perl-license)))
+
 (define-public perl-graph
   (package
     (name "perl-graph")
@@ -5194,8 +5056,7 @@ which are tied to the scope exit.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-module-build perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Hash-FieldHash")
     (synopsis "Lightweight field hash for inside-out objects")
     (description "@code{Hash::FieldHash} provides the field hash mechanism
@@ -5218,10 +5079,9 @@ relic support.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests only.
-     `(("perl-clone" ,perl-clone)
-       ("perl-clone-pp" ,perl-clone-pp)))
+     (list perl-clone perl-clone-pp))
     (propagated-inputs
-     `(("perl-clone-choose" ,perl-clone-choose)))
+     (list perl-clone-choose))
     (home-page "https://metacpan.org/release/Hash-Merge")
     (synopsis "Merge arbitrarily deep hashes into a single hash")
     (description "Hash::Merge merges two arbitrarily deep hashes into a single
@@ -5311,7 +5171,7 @@ variables.")
          "0rq5kz7c270q33jq6hnrv3xgkvajsc62ilqq7fs40av6zfipg7mx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)))
+     (list perl-module-runtime))
     (home-page "https://metacpan.org/release/Import-Into")
     (synopsis "Import packages into other packages")
     (description "Writing exporters is a pain.  Some use Exporter, some use
@@ -5376,7 +5236,7 @@ inc directory within a distribution and are used by Makefile.PL or Build.PL.")
        "0fhyspkg2ka7yz7kbq8a028hj0chfc7qqkl7n20dpc0is3i7s2ji"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-test-warn" ,perl-test-warn)))
+    (list perl-test-warn))
    (home-page "https://metacpan.org/release/Inline")
    (synopsis "Write Perl subroutines in other programming languages")
    (description "The @code{Inline} module allows you to put source code
@@ -5411,14 +5271,10 @@ for immediate access from Perl.")
                (("'\"make install\"'")
                 (string-append "'\"" make "/bin/make install\"'")))))))))
     (native-inputs
-     `(("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-file-copy-recursive perl-file-sharedir-install
+           perl-test-warn perl-yaml-libyaml))
     (propagated-inputs
-     `(("perl-inline" ,perl-inline)
-       ("perl-parse-recdescent" ,perl-parse-recdescent)
-       ("perl-pegex" ,perl-pegex)))
+     (list perl-inline perl-parse-recdescent perl-pegex))
     (home-page "https://metacpan.org/release/Inline-C")
     (synopsis "C Language Support for Inline")
     (description "The @code{Inline::C} module allows you to write Perl
@@ -5444,8 +5300,7 @@ It also goes a bit into Perl C internals.")
          "0nsd9knlbd7if2v6zwj4q978axq0w5hk8ymp61z14a821hjivqjl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-mimeinfo" ,perl-file-mimeinfo)
-       ("perl-file-readbackwards" ,perl-file-readbackwards)))
+     (list perl-file-mimeinfo perl-file-readbackwards))
     (home-page "https://metacpan.org/release/IO-All")
     (synopsis "@code{IO::All} to Larry Wall!")
     (description "@code{IO::All} combines all of the best Perl IO modules into
@@ -5521,9 +5376,9 @@ and busy().")
                 (which "less")))
              #t)))))
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)))
+     (list perl-file-which))
     (inputs
-     `(("less" ,less)))
+     (list less))
     (home-page "https://metacpan.org/release/IO-Pager")
     (synopsis "Select a pager and pipe text to it")
     (description
@@ -5621,7 +5476,7 @@ run interactively.  It also has an option to capture output/error buffers.")
         (base32 "0bvckcs1629ifqfb68xkapd4a74fd5qbg6z9qs8i6rx4z3nxfl1q"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-tty" ,perl-io-tty)))
+     (list perl-io-tty))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -5719,7 +5574,7 @@ commands.")
          "0z32x2lijij28c9fhmzgxc41i9nw24fyvd2a8ajs5zw9b9sqhjj4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-json-xs" ,perl-json-xs))) ;recommended
+     (list perl-json-xs)) ;recommended
     (home-page "https://metacpan.org/release/JSON")
     (synopsis "JSON encoder/decoder for Perl")
     (description "This module converts Perl data structures to JSON and vice
@@ -5740,12 +5595,10 @@ versa using either JSON::XS or JSON::PP.")
          "1hspg6khjb38syn59cysnapc1q77qgavfym3fqr6l2kiydf7ajdf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-warnings" ,perl-test-warnings)
-       ("perl-test-without-module" ,perl-test-without-module)))
+     (list perl-test-fatal perl-test-requires perl-test-warnings
+           perl-test-without-module))
     (propagated-inputs
-     `(("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-namespace-clean))
     (home-page "https://metacpan.org/release/JSON-Any")
     (synopsis "Wrapper for Perl JSON classes")
     (description
@@ -5769,9 +5622,9 @@ installed.")
          "1grg8saa318bs4x2wqnww7y0nra7azrzg35bk5pgvkwxzwbkpvjv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (inputs
-     `(("perl-cpanel-json-xs" ,perl-cpanel-json-xs)))
+     (list perl-cpanel-json-xs))
     (home-page "https://metacpan.org/release/JSON-MaybeXS")
     (synopsis "Cpanel::JSON::XS with fallback")
     (description "This module first checks to see if either Cpanel::JSON::XS
@@ -5794,10 +5647,9 @@ either uses the first module it finds or throws an error.")
          "0118yrzagwlcfj5yldn3h23zzqs2rx282jlm068nf7fjlvy4m7s7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-canary-stability" ,perl-canary-stability)))
+     (list perl-canary-stability))
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)
-       ("perl-types-serialiser" ,perl-types-serialiser)))
+     (list perl-common-sense perl-types-serialiser))
     (home-page "https://metacpan.org/release/JSON-XS")
     (synopsis "JSON serialising/deserialising for Perl")
     (description "This module converts Perl data structures to JSON and vice
@@ -5820,7 +5672,7 @@ versa.")
          "0fh1arpr0hsj7skbn97yfvbk22pfcrpcvcfs15p5ss7g338qx4cy"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Lexical-SealRequireHints")
     (synopsis "Prevent leakage of lexical hints")
     (description
@@ -5840,12 +5692,12 @@ versa.")
         (base32 "0z6w3m6f3r29ljicdigsyvpa9w9j2m65l4gjxcw0wgwdll26ngxp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-lingua-en-sentence" ,perl-lingua-en-sentence)
-       ("perl-ppi" ,perl-ppi)
-       ("perl-template-toolkit" ,perl-template-toolkit)
-       ("perl-text-haml" ,perl-text-haml)
-       ("perl-yaml" ,perl-yaml)))
+     (list perl-html-parser
+           perl-lingua-en-sentence
+           perl-ppi
+           perl-template-toolkit
+           perl-text-haml
+           perl-yaml))
     (home-page "https://metacpan.org/release/Locale-Maketext-Lexicon")
     (synopsis "Use other catalog formats in Maketext")
     (description
@@ -5899,8 +5751,7 @@ logging mechanism.")
          "19f1drqnzr6g4xwjm6jk4iaa3zmiax8bzxqch04f4jr12bjd75qi"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-any" ,perl-log-any)
-       ("perl-log-log4perl" ,perl-log-log4perl)))
+     (list perl-log-any perl-log-log4perl))
     (home-page
      "https://metacpan.org/release/Log-Any-Adapter-Log4perl")
     (synopsis "Log::Any adapter for Log::Log4perl")
@@ -5946,7 +5797,7 @@ for dealing with messages.")
        "15nxi935nfrf8dkdrgvcrf2qlai4pbz03yj8sja0n9mcq2jd24ma"))))
    (build-system perl-build-system)
    (inputs
-    `(("perl-log-message" ,perl-log-message)))
+    (list perl-log-message))
    (home-page "https://metacpan.org/release/Log-Message-Simple")
    (synopsis "Simplified interface to @code{Log::Message}")
    (description "This package provides a simplified frontend to
@@ -5990,7 +5841,7 @@ widely popular (Java-based) Log4j logging package in pure Perl.")
                 "11ciiaq8vy186m7mzj8pcncwi8p9qp13wblvk427g1pnqjzlda0g"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-string-print" ,perl-string-print)))
+     (list perl-string-print))
     (home-page "https://metacpan.org/release/Log-Report-Optional")
     (synopsis "Log::Report in the lightest form")
     (description
@@ -6015,9 +5866,8 @@ version.")
                 "1jjx1ari3a7ixsyan91b6n7lmjq6dy5223k3x2ah18qbxvw4caap"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-log-report-optional" ,perl-log-report-optional)
-       ("perl-string-print" ,perl-string-print)))
+     (list perl-devel-globaldestruction perl-log-report-optional
+           perl-string-print))
     (home-page "https://metacpan.org/release/Log-Report")
     (synopsis "Get messages to users and logs")
     (description
@@ -6047,7 +5897,7 @@ one: logging, exceptions, and translations.")
                                                (getenv "PERL5LIB")))
              #t)))))
     (propagated-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)))
+     (list perl-file-sharedir))
     (home-page "https://metacpan.org/release/libintl-perl")
     (synopsis "High-level interface to Uniforum message translation")
     (description "This package is an internationalization library for Perl
@@ -6068,7 +5918,7 @@ implemented for example in GNU gettext.")
         (base32 "11hlg92khd2azbxndnffsj9lggbxb3lqfdbwc6asr1c9lxlqddms"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/Lingua-EN-Sentence")
     (synopsis "Split text into sentences")
     (description
@@ -6112,7 +5962,7 @@ tables.  Where possible a reverse transliteration is supported.")
          "0crlxmaa4lsgdjm5p9ib8rdxiy70qj1s68za3q3v57v8ll6s4hfx"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Linux-Inotify2")
     (synopsis "Scalable file change notification")
     (description "This module implements an interface to the Linux 2.6.13 and
@@ -6133,10 +5983,9 @@ later Inotify file change notification system.")
          "1qmfpmly0pghc94k6ifnd1vwzlv8nks27qkqs6h4p7vcricn7zjc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)))
+     (list perl-list-moreutils perl-scalar-list-utils))
     (home-page "https://metacpan.org/release/List-AllUtils")
     (synopsis "Combination of List::Util and List::MoreUtils")
     (description "This module exports all of the functions that either
@@ -6159,7 +6008,7 @@ List::Util or List::MoreUtils defines, with preference to List::Util.")
          "0l451yqhx1hlm7f2c3bjsl3n8w6l1jngrxzyfm2d8d9iggv4zgzx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-io-captureoutput" ,perl-io-captureoutput)))
+     (list perl-io-captureoutput))
     (home-page "https://metacpan.org/release/List-Compare")
     (synopsis "Compare elements of two or more lists")
     (description "@code{List::Compare} provides a module to perform
@@ -6190,11 +6039,9 @@ intersections, unions, unique elements, complements and many more.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (native-inputs
-     `(("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-config-autoconf perl-test-leaktrace))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-list-moreutils-xs" ,perl-list-moreutils-xs)))
+     (list perl-exporter-tiny perl-list-moreutils-xs))
     (home-page "https://metacpan.org/release/List-MoreUtils")
     (synopsis "Provide the stuff missing in List::Util")
     (description "List::MoreUtils provides some trivial but commonly needed
@@ -6214,9 +6061,7 @@ functionality on lists which is not going to go into List::Util.")
         (base32 "0hmjkhmk1qlzbg8skq7g1zral07k1x0fk4w2fpcfr7hpgkaldkp8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-inc-latest" ,perl-inc-latest)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-config-autoconf perl-inc-latest perl-test-leaktrace))
     (home-page "https://metacpan.org/release/List-MoreUtils-XS")
     (synopsis "Provide the stuff missing in List::Util in XS")
     (description "@code{List::MoreUtils::XS} provides some trivial but
@@ -6239,11 +6084,9 @@ commonly needed functionality on lists which is not going to go into
         (base32 "1xw9dzg949997b10y6zgzrmhmk2ap274qivnk0wc1033x2fdk9za"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-test-leaktrace))
     (inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-module-implementation"
-        ,perl-module-implementation)))
+     (list perl-exporter-tiny perl-module-implementation))
     (home-page "https://metacpan.org/release/List-SomeUtils")
     (synopsis "Provide the stuff missing in List::Util")
     (description "@code{List::SomeUtils} provides some trivial but commonly
@@ -6272,7 +6115,7 @@ portions of this module couldn't be compiled on this machine.")
          "1js43bp2dnd8n2rv8clsv749166jnyqnc91k4wkkmw5n4rlbvnaa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-timedate" ,perl-timedate)))
+     (list perl-timedate))
     (home-page
      "https://metacpan.org/release/MailTools")
     (synopsis "Bundle of ancient email modules")
@@ -6435,8 +6278,7 @@ the argument to the CACHESIZE parameter, will be cached.")
         (base32 "05v04kjaz2ya0zaj4m64gzxpfv4vgxhw5n5h12z373gbg9pkvxvp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-exporter" ,perl-exporter)
-       ("perl-xsloader" ,perl-xsloader)))
+     (list perl-exporter perl-xsloader))
     (home-page "https://metacpan.org/dist/MIME-Base64")
     (synopsis "Encoding and decoding of base64 strings")
     (description "MIME::Base64 module provides functions to encode and decode
@@ -6482,11 +6324,11 @@ MIME messages on Internet.")
          "0wv9rzx5j1wjm01c3dg48qk9wlbm6iyf91j536idk09xj869ymv4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (inputs
-     `(("perl-convert-binhex" ,perl-convert-binhex)))
+     (list perl-convert-binhex))
     (propagated-inputs
-     `(("perl-mailtools" ,perl-mailtools)))
+     (list perl-mailtools))
     (home-page
      "https://metacpan.org/release/MIME-tools")
     (synopsis "Tools to manipulate MIME messages")
@@ -6530,8 +6372,7 @@ knowledge of Apache.")
                 "1wmfr19w9y8qys7b32mnj1vmps7qwdahqas71a9p62ac8xw0dwkx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-perlio-utf8_strict perl-sub-exporter))
     (home-page "https://metacpan.org/release/Mixin-Linewise")
     (synopsis "Write your linewise code for handles; this does the rest")
     (description "It's boring to deal with opening files for IO, converting
@@ -6555,7 +6396,7 @@ file names are added for you.")
         (base32 "1064k29aavabxj8m20b65rxk7qa3mjmzgmrikvdrxasgx378676s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Modern-Perl")
     (synopsis
@@ -6578,15 +6419,11 @@ multiple, by now, standard libraries in a Perl program.")
          "077ijxbvamybph4ymamy1i9q2993xb46vf1npxaybjz0mkv0yn3x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-installpaths" ,perl-extutils-installpaths)
-       ("perl-extutils-config" ,perl-extutils-config)
-       ("perl-extutils-helpers" ,perl-extutils-helpers)
-       ("perl-test-harness" ,perl-test-harness)))
+     (list perl-extutils-installpaths perl-extutils-config
+           perl-extutils-helpers perl-test-harness))
     (propagated-inputs
-     `(("perl-extutils-installpaths" ,perl-extutils-installpaths)
-       ("perl-extutils-config" ,perl-extutils-config)
-       ("perl-extutils-helpers" ,perl-extutils-helpers)
-       ("perl-test-harness" ,perl-test-harness)))
+     (list perl-extutils-installpaths perl-extutils-config
+           perl-extutils-helpers perl-test-harness))
     (home-page "https://metacpan.org/release/Module-Build-Tiny")
     (synopsis "Tiny replacement for Module::Build")
     (description "Many Perl distributions use a Build.PL file instead of a
@@ -6613,11 +6450,9 @@ has less than 120, yet supports the features needed by most distributions.")
             "0d39fjg9c0n820bk3fb50vvlwhdny4hdl69xmlyzql5xzp4cicsk"))))
     (build-system perl-build-system)
     (native-inputs
-      `(("perl-module-build" ,perl-module-build)))
+      (list perl-module-build))
     (propagated-inputs
-      `(("perl-extutils-cppguess" ,perl-extutils-cppguess)
-        ("perl-extutils-xspp" ,perl-extutils-xspp)
-        ("perl-module-build" ,perl-module-build)))
+      (list perl-extutils-cppguess perl-extutils-xspp perl-module-build))
     (home-page
       "https://metacpan.org/release/Module-Build-WithXSpp")
     (synopsis
@@ -6640,12 +6475,10 @@ processes to make it easier to use for wrapping C++ using XS++
                 "1nrs0b6hmwl3sw3g50b9857qgp5cbbbpl716zwn30h9vwjj2yxhm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-cwd-guard" ,perl-cwd-guard)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-capture-tiny perl-cwd-guard perl-file-copy-recursive
+           perl-module-build))
     (propagated-inputs
-     `(("perl-devel-checkcompiler" ,perl-devel-checkcompiler)))
+     (list perl-devel-checkcompiler))
     (home-page "https://metacpan.org/release/Module-Build-XSUtil")
     (synopsis "Module::Build class for building XS modules")
     (description
@@ -6706,11 +6539,9 @@ subcategories.")
          "0vfngw4dbryihqhi7g9ks360hyw8wnpy3hpkzyg0q4y2y091lpy1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-module-runtime perl-try-tiny))
     (home-page "https://metacpan.org/release/Module-Implementation")
     (synopsis "Loads alternate underlying implementations for a module")
     (description "This module abstracts out the process of choosing one of
@@ -6734,19 +6565,19 @@ implementations.")
          "06q12cm97yh4p7qbm0a2p96996ii6ss59qy57z0f7f9svy6sflqs"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-yaml-tiny" ,perl-yaml-tiny)))
+     (list perl-yaml-tiny))
     (propagated-inputs
-     `(("perl-archive-zip" ,perl-archive-zip)
-       ("perl-file-homedir" ,perl-file-homedir)
-       ("perl-file-remove" ,perl-file-remove)
-       ("perl-json" ,perl-json)
-       ;; The LWP::Simple and LWP::UserAgent modules are recommended, but
-       ;; would cause a circular dependency with (gnu packages web), so we
-       ;; leave it out.  It may be resolved at runtime, however.
-       ;("perl-libwww-perl" ,perl-libwww-perl)
-       ("perl-module-scandeps" ,perl-module-scandeps)
-       ("perl-par-dist" ,perl-par-dist)
-       ("perl-yaml-tiny" ,perl-yaml-tiny)))
+     (list perl-archive-zip
+           perl-file-homedir
+           perl-file-remove
+           perl-json
+           ;; The LWP::Simple and LWP::UserAgent modules are recommended, but
+           ;; would cause a circular dependency with (gnu packages web), so we
+           ;; leave it out.  It may be resolved at runtime, however.
+           ;("perl-libwww-perl" ,perl-libwww-perl)
+           perl-module-scandeps
+           perl-par-dist
+           perl-yaml-tiny))
     ;; TODO: One test requires Test::More >= 0.99, another fails with unicode
     ;; character handling.
     (arguments `(#:tests? #f))
@@ -6773,10 +6604,9 @@ installation version 5.005 or newer.")
          "16skpm804a19gsgxzn1wba3lmvc7cx5q8ly4srpyd82yy47zi5d3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-params-util" ,perl-params-util)))
+     (list perl-params-util))
     (home-page "https://metacpan.org/release/Module-Manifest")
     (synopsis "Parse and examine a Perl distribution @file{MANIFEST} file")
     (description
@@ -6821,7 +6651,7 @@ examine the contents, and perform some simple tasks.  It can also load the
         (base32
          "097hy2czwkxlppri32m599ph0xfvfsbf0a5y23a4fdc38v32wc38"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Module-Runtime")
     (synopsis "Perl runtime module handling")
     (description "The functions exported by this module deal with runtime
@@ -6842,10 +6672,9 @@ handling of Perl modules, which are normally handled at compile time.")
          "0x9qfg4pq70v1rl9dfk775fmca7ia308m24vfy8zww4c0dsxqz3h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)))
+     (list perl-module-runtime perl-dist-checkconflicts))
     (home-page "https://metacpan.org/release/Module-Runtime-Conflicts")
     (synopsis "Provide information on conflicts for Module::Runtime")
     (description "This module provides conflicts checking for Module::Runtime,
@@ -6867,7 +6696,7 @@ from Moose::Conflicts and moose-outdated.")
          "0j6r9r99x5p0i6fv06i44wpsvjxj32amjkiqf6pmqpj80jff2k7f"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-requires))
     (home-page "https://metacpan.org/release/Module-ScanDeps")
     (synopsis "Recursively scan Perl code for dependencies")
     (description "Module::ScanDeps is a module to recursively scan Perl
@@ -6888,7 +6717,7 @@ programs for dependencies.")
          "1ip2yg3x517gg8c48crhd52ba864vmyimvm0ibn4ci068mmcpyvc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build))) ; >= 0.40
+     (list perl-module-build)) ; >= 0.40
     (home-page "https://metacpan.org/release/Module-Util")
     (synopsis "Module name tools and transformations")
     (description "This module provides a few useful functions for manipulating
@@ -6911,15 +6740,15 @@ module names to relative paths.")
          "0y9s6s9jjd519wgal6lwc9id4sadrvfn8gjb51dl602d0kk0l7n5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-class-xsaccessor" ,perl-class-xsaccessor)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers
+           perl-class-xsaccessor
+           perl-devel-globaldestruction
+           perl-import-into
+           perl-module-runtime
+           perl-role-tiny
+           perl-strictures))
     (home-page "https://metacpan.org/release/Moo")
     (synopsis "Minimalist Object Orientation (with Moose compatibility)")
     (description "Moo is an extremely light-weight Object Orientation system.
@@ -6971,12 +6800,12 @@ Moose and is optimised for rapid startup.")
                 "05gma3q3l15igqrqi8ax8v5cmmvy7s939q3xzs45l1rc7sfx6yd6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-test-cleannamespaces" ,perl-test-cleannamespaces)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cpan-meta-check
+           perl-dist-checkconflicts
+           perl-test-cleannamespaces
+           perl-test-fatal
+           perl-test-requires
+           perl-test-warnings))
     ;; XXX::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     ;; # === Other Modules ===
     ;; #
@@ -7004,28 +6833,28 @@ Moose and is optimised for rapid startup.")
     ;; #     Test::Output                  any missing
     ;; #     URI                           any missing
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-class-load-xs" ,perl-class-load-xs)
-       ("perl-data-optlist" ,perl-data-optlist)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-devel-overloadinfo" ,perl-devel-overloadinfo)
-       ("perl-devel-partialdump" ,perl-devel-partialdump)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-eval-closure" ,perl-eval-closure)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-module-runtime-conflicts" ,perl-module-runtime-conflicts)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-package-deprecationmanager" ,perl-package-deprecationmanager)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-package-stash-xs" ,perl-package-stash-xs)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-task-weaken" ,perl-task-weaken)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-load
+           perl-class-load-xs
+           perl-data-optlist
+           perl-devel-globaldestruction
+           perl-devel-overloadinfo
+           perl-devel-partialdump
+           perl-devel-stacktrace
+           perl-dist-checkconflicts
+           perl-eval-closure
+           perl-list-moreutils
+           perl-module-runtime
+           perl-module-runtime-conflicts
+           perl-mro-compat
+           perl-package-deprecationmanager
+           perl-package-stash
+           perl-package-stash-xs
+           perl-params-util
+           perl-scalar-list-utils
+           perl-sub-exporter
+           perl-sub-name
+           perl-task-weaken
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Moose")
     (synopsis "Postmodern object system for Perl 5")
     (description
@@ -7052,10 +6881,9 @@ sentences.")
         (base32 "153r30nggcyyx7ai15dbnba2h5145f8jdsh6wj54298d3zpvgvl2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)))
+     (list perl-moose))
     (home-page "https://metacpan.org/release/MooseX-Emulate-Class-Accessor-Fast")
     (synopsis "Emulate Class::Accessor::Fast behavior using Moose attributes")
     (description "This module attempts to emulate the behavior of
@@ -7077,20 +6905,18 @@ private methods are not.")
         (base32 "1j7b2jnf0blxr4czp3vfcnv1h5zj601mrfdm92g1wf5wn9dvxwv3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perl-test-warnings" ,perl-test-warnings)))
-    (propagated-inputs
-     `(("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-role-parameterized" ,perl-moosex-role-parameterized)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-module-build
+           perl-module-build-tiny
+           perl-path-tiny
+           perl-test-deep
+           perl-test-fatal
+           perl-test-needs
+           perl-test-requires
+           perl-test-trap
+           perl-test-warnings))
+    (propagated-inputs
+     (list perl-getopt-long-descriptive perl-moose
+           perl-moosex-role-parameterized perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Getopt")
     (synopsis "Moose role for processing command line options")
     (description "This is a Moose role which provides an alternate constructor
@@ -7111,8 +6937,7 @@ for creating objects using parameters passed in from the command line.")
          "1y3yxwcjjajm66pvca54cv9fax7a6dy36xqr92x7vzyhfqrw3v69"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-MarkAsMethods")
     (synopsis "Mark overload code symbols as methods")
     (description "MooseX::MarkAsMethods allows one to easily mark certain
@@ -7137,13 +6962,9 @@ overloads will \"just work\".")
          "1whd10w7bm3dwaj7gpgw40bci9vvb2zmxs4349ifji91hvinwqck"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-MethodAttributes")
     (synopsis "Code attribute introspection")
     (description "This module allows code attributes of methods to be
@@ -7164,13 +6985,10 @@ introspected using Moose meta method objects.")
           "0zdaiphc45s5xj0ax5mkijf5d8v6w6yccb3zplgj6f30y7n55gnb"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-moose" ,perl-moose)
-      ("perl-test-fatal" ,perl-test-fatal)))
+    (list perl-moose perl-test-fatal))
   (propagated-inputs
-    `(("perl-list-moreutils" ,perl-list-moreutils)
-      ("perl-module-runtime" ,perl-module-runtime)
-      ("perl-moose" ,perl-moose)
-      ("perl-try-tiny" ,perl-try-tiny)))
+    (list perl-list-moreutils perl-module-runtime perl-moose
+          perl-try-tiny))
   (home-page "https://metacpan.org/release/MooseX-NonMoose")
   (synopsis "Subclassing of non-Moose classes")
   (description "MooseX::NonMoose allows for easily subclassing non-Moose
@@ -7193,13 +7011,10 @@ BUILD methods are called.  It tries to be as non-intrusive as possible.")
         (base32 "1n9ry6gnskkp9ir6s7d5jirn3mh14ydgpmwqz6wcp6d9md358ac8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moose perl-test-fatal))
     (propagated-inputs
-     `(("perl-devel-caller" ,perl-devel-caller)
-       ("perl-moose" ,perl-moose)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-devel-caller perl-moose perl-params-validate
+           perl-sub-exporter))
     (home-page "https://metacpan.org/release/MooseX-Params-Validate")
     (synopsis "Extension of Params::Validate using Moose's types")
     (description "This module fills a gap in Moose by adding method parameter
@@ -7220,8 +7035,7 @@ validation to Moose.")
          "17vynkf6m5d039qkr4in1c9lflr8hnwp1fgzdwhj4q6jglipmnrh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-moosex-role-parameterized" ,perl-moosex-role-parameterized)))
+     (list perl-moose perl-moosex-role-parameterized))
     (home-page "https://metacpan.org/release/MooseX-RelatedClassRoles")
     (synopsis "Apply roles to a related Perl class")
     (description "This module applies roles to make a subclass instead of
@@ -7241,14 +7055,11 @@ manually setting up a subclass.")
         (base32 "0plx25n80mv9qwhix52z79md0qil616nbcryk2f4216kghpw2ij8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-moosex-role-withoverloading" ,perl-moosex-role-withoverloading)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-cpan-meta-check perl-module-build
+           perl-moosex-role-withoverloading perl-test-fatal
+           perl-test-requires))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Role-Parameterized")
     (synopsis "Moose roles with composition parameters")
     (description "Because Moose roles serve many different masters, they
@@ -7273,9 +7084,7 @@ Parameterized roles offer a solution to these (and other) kinds of problems.")
          "0rb8k0dp1a55bm2pr6r0vsi5msvjl1dslfidxp1gj80j7zbrbc4j"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-aliased" ,perl-aliased)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-aliased perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Role-WithOverloading")
     (synopsis "Roles which support overloading")
     (description "MooseX::Role::WithOverloading allows you to write a
@@ -7298,7 +7107,7 @@ where plain Moose::Roles would lose the overloading.")
          "1mdil9ckgmgr78z59p8wfa35ixn5855ndzx14y01dvfxpiv5gf55"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)))
+     (list perl-moose))
     (home-page "https://metacpan.org/release/MooseX-SemiAffordanceAccessor")
     (synopsis "Name your accessors foo() and set_foo()")
     (description "This module does not provide any methods.  Simply loading it
@@ -7321,11 +7130,9 @@ accessor, while set methods are prefixed with \"_set_\".")
          "0ccawja1kabgglrkdw5v82m1pbw189a0mnd33l43rs01d70p6ra8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moose perl-test-fatal))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-StrictConstructor")
     (synopsis "Strict object constructors for Moose")
     (description "Simply loading this module makes your constructors
@@ -7347,13 +7154,10 @@ that your class does not declare, then it calls Moose->throw_error().")
          "1jjqmcidy4kdgp5yffqqwxrsab62mbhbpvnzdy1rpwnb1savg5mb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-moose perl-test-exception))
     (propagated-inputs
-     `(("perl-class-load" ,perl-class-load)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-class-load perl-list-moreutils perl-moose
+           perl-namespace-autoclean))
     (home-page
      "https://metacpan.org/release/MooseX-Traits-Pluggable")
     (synopsis "Trait loading and resolution for Moose")
@@ -7375,13 +7179,9 @@ search for traits and some extra attributes.")
          "1iq90s1f0xbmr194q0mhnp9wxqxwwilkbdml040ibqbqvfiz87yh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-carp-clan perl-moose perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Types")
     (synopsis "Organise your Moose types in libraries")
     (description "This package lets you declare types using short names, but
@@ -7403,17 +7203,15 @@ prevent name clashes between packages.")
          "1iir3mdvz892kbbs2q91vjxnhas7811m3d3872m7x8gn6rka57xq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-moose perl-test-fatal
+           perl-test-simple))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-locale" ,perl-datetime-locale)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-datetime
+           perl-datetime-locale
+           perl-datetime-timezone
+           perl-moose
+           perl-moosex-types
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooseX-Types-DateTime")
     (synopsis "DateTime related constraints and coercions for Moose")
     (description "This module packages several Moose::Util::TypeConstraints
@@ -7434,17 +7232,15 @@ with coercions, designed to work with the DateTime suite of objects.")
         (base32 "15ip1rgaana2p4vww355jb5jxyawim0k58gadkdqx20rfxckmfr1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build-tiny perl-test-fatal perl-test-simple))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetimex-easy" ,perl-datetimex-easy)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-moosex-types-datetime" ,perl-moosex-types-datetime)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-time-duration-parse" ,perl-time-duration-parse)))
+     (list perl-datetime
+           perl-datetimex-easy
+           perl-moose
+           perl-moosex-types
+           perl-moosex-types-datetime
+           perl-namespace-clean
+           perl-time-duration-parse))
     (home-page
      "https://metacpan.org/release/MooseX-Types-DateTime-MoreCoercions")
     (synopsis "Extensions to MooseX::Types::DateTime")
@@ -7466,15 +7262,10 @@ all coercions and constraints are inherited.")
         (base32 "1x1vb96hcrd96bzs73w0lb04jr0fvax1ams38qlzkp2kh9vx6dz0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-moose" ,perl-moose)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-class-load" ,perl-class-load)))
+     (list perl-module-build-tiny perl-namespace-clean perl-moose
+           perl-test-fatal perl-class-load))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-module-runtime perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/MooseX-Types-LoadableClass")
     (synopsis "ClassName type constraints for Moose")
     (description "MooseX::Types::LoadableClass provides a ClassName type
@@ -7497,10 +7288,8 @@ constraint with coercion to load the class.")
          "1m9jvrqcidiabdih211byadwnnkygafq54r2ljnf1akqdrjimy9g"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-data-optlist" ,perl-data-optlist)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)))
+     (list perl-data-optlist perl-import-into perl-module-runtime
+           perl-moo))
     (home-page "https://metacpan.org/release/MooX")
     (synopsis
      "Using Moo and MooX:: packages the most lazy way")
@@ -7520,15 +7309,14 @@ constraint with coercion to load the class.")
         (base32 "1xbhmq07v9z371ygkyghva9aryhc22kwbzn5qwkp72c0ma6z4gwl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-capture-tiny perl-list-moreutils))
     (propagated-inputs
-     `(("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-regexp-common" ,perl-regexp-common)))
+     (list perl-module-pluggable
+           perl-module-runtime
+           perl-moo
+           perl-package-stash
+           perl-params-util
+           perl-regexp-common))
     (home-page "https://metacpan.org/release/MooX-Cmd")
     (synopsis "Giving an easy Moo style way to make command organized CLI apps")
     (description "This package eases the writing of command line utilities,
@@ -7552,17 +7340,15 @@ most specific one) is instantiated.")
          "1zrpz4mzngnhaap6988is0w0aarilfj4kb1yc8hvfqna69lywac0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-hash-merge" ,perl-hash-merge)
-       ("perl-json" ,perl-json)
-       ("perl-moox-cmd" ,perl-moox-cmd)))
+     (list perl-hash-merge perl-json perl-moox-cmd))
     (propagated-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-file-configdir" ,perl-file-configdir)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-moo" ,perl-moo)
-       ("perl-moox-file-configdir" ,perl-moox-file-configdir)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-config-any
+           perl-file-configdir
+           perl-file-find-rule
+           perl-hash-merge
+           perl-moo
+           perl-moox-file-configdir
+           perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooX-ConfigFromFile")
     (synopsis "Moo eXtension for initializing objects from config file")
     (description "This module is intended to easily load initialization values
@@ -7584,9 +7370,7 @@ building is done in @code{MooX::ConfigFromFile::Role}---using
         (base32 "1b033injzk9d8clgip67ps5j5bpkrnag28q89ddwhrgqx12i3m7q"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-configdir" ,perl-file-configdir)
-       ("perl-moo" ,perl-moo)
-       ("perl-namespace-clean" ,perl-namespace-clean)))
+     (list perl-file-configdir perl-moo perl-namespace-clean))
     (home-page "https://metacpan.org/release/MooX-File-ConfigDir")
     (synopsis "Moo eXtension for @code{File::ConfigDir}")
     (description "This module is a helper for easily finding configuration
@@ -7609,18 +7393,12 @@ installing configuration files or for finding any piece of settings.")
         (base32 "04kcyflg49rclxa1nm035c05jpyvhdacjyy1wklbgv4li3im6qvi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moox-types-mooselike"
-        ,perl-moox-types-mooselike)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moox-types-mooselike perl-test-exception perl-test-fatal))
     (inputs
-     `(("perl-class-method-modifiers"
-        ,perl-class-method-modifiers)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)
-       ("perl-role-tiny" ,perl-role-tiny)))
+     (list perl-class-method-modifiers perl-module-runtime perl-moo
+           perl-role-tiny))
     (propagated-inputs
-     `(("perl-data-perl" ,perl-data-perl)))
+     (list perl-data-perl))
     (home-page
      "https://metacpan.org/release/MooX-HandlesVia")
     (synopsis "NativeTrait-like behavior for Moo")
@@ -7644,14 +7422,11 @@ an external class to the given attribute.")
         (base32 "0kjy86rrpzfy6w5r9ykjq7njwdnvp7swd6r2k4gfrh3picz3kdhz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox" ,perl-moox)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)))
+     (list perl-moo perl-moox perl-moox-handlesvia))
     (propagated-inputs
-     `(("perl-type-tiny" ,perl-type-tiny)))
+     (list perl-type-tiny))
     (home-page "https://metacpan.org/release/MooX-late")
     (synopsis "Easily translate Moose code to Moo")
     (description
@@ -7681,34 +7456,34 @@ MooX::HandlesVia.
          "14kz51hybxx8vcm4wg36f0qa64aainw7i2sqmqxg20c3qvczyvj2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-import-into" ,perl-import-into)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-moo" ,perl-moo)
-       ("perl-moose" ,perl-moose)
-       ("perl-moox-cmd" ,perl-moox-cmd)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-trap" ,perl-test-trap)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-try-tiny" ,perl-try-tiny)))
-    (propagated-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-moox-configfromfile" ,perl-moox-configfromfile)
-       ("perl-data-record" ,perl-data-record)
-       ("perl-file-configdir" ,perl-file-configdir)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-libintl-perl" ,perl-libintl-perl)
-       ("perl-moox-configfromfile" ,perl-moox-configfromfile)
-       ("perl-moox-file-configdir" ,perl-moox-file-configdir)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-term-size-any" ,perl-term-size-any)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+     (list perl-capture-tiny
+           perl-import-into
+           perl-module-build
+           perl-moo
+           perl-moose
+           perl-moox-cmd
+           perl-namespace-clean
+           perl-role-tiny
+           perl-test-requires
+           perl-test-trap
+           perl-test-pod
+           perl-try-tiny))
+    (propagated-inputs
+     (list perl-config-any
+           perl-moox-configfromfile
+           perl-data-record
+           perl-file-configdir
+           perl-file-find-rule
+           perl-file-sharedir
+           perl-getopt-long-descriptive
+           perl-json-maybexs
+           perl-libintl-perl
+           perl-moox-configfromfile
+           perl-moox-file-configdir
+           perl-path-class
+           perl-regexp-common
+           perl-term-size-any
+           perl-unicode-linebreak))
     (home-page "https://metacpan.org/release/MooX-Options")
     (synopsis "Explicit Options eXtension for Object Class")
     (description "Create a command line tool with your Mo, Moo, Moose objects.
@@ -7734,11 +7509,9 @@ generate a command line tool.")
           "0vvjgz7xbfmf69yav7sxsxmvklqv835xvh7h47w0apxmlkm9fjgr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)
-       ("perl-moo" ,perl-moo)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-class-method-modifiers perl-moo perl-strictures))
     (home-page "https://metacpan.org/release/MooX-StrictConstructor")
     (synopsis "Make Moo-based object constructors blow up on unknown attributes")
     (description
@@ -7760,11 +7533,9 @@ does not declare, then it dies.")
         (base32 "1d6jg9x3p7gm2r0xmbcag374a44gf5pcga2swvxhlhzakfm80dqx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-moo perl-test-fatal))
     (propagated-inputs
-     `(("perl-module-runtime" ,perl-module-runtime)
-       ("perl-strictures" ,perl-strictures)))
+     (list perl-module-runtime perl-strictures))
     (home-page "https://metacpan.org/release/MooX-Types-MooseLike")
     (synopsis "Moosish types and type builder")
     (description "MooX::Types::MooseLike provides a possibility to build your
@@ -7787,14 +7558,14 @@ fields in Moo-based classes.")
               "1vijm8wkyws1jhnqmx104585q3srw9z1crcpy1zlcfhm8qww53ff"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-module-build" ,perl-module-build)
-     ("perl-module-build-xsutil" ,perl-module-build-xsutil)
-     ("perl-test-exception" ,perl-test-exception)
-     ("perl-test-fatal" ,perl-test-fatal)
-     ("perl-test-leaktrace" ,perl-test-leaktrace)
-     ("perl-test-output" ,perl-test-output)
-     ("perl-test-requires" ,perl-test-requires)
-     ("perl-try-tiny" ,perl-try-tiny)))
+   (list perl-module-build
+         perl-module-build-xsutil
+         perl-test-exception
+         perl-test-fatal
+         perl-test-leaktrace
+         perl-test-output
+         perl-test-requires
+         perl-try-tiny))
   (home-page "https://github.com/gfx/p5-Mouse")
   (synopsis "Fast Moose-compatible object system for perl5")
   (description
@@ -7815,11 +7586,9 @@ subset of the functionality for reduced startup time.")
                 "0pnbchkxfz9fwa8sniyjqp0mz75b3k2fafq9r09znbbh51dbz9gq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-any-moose" ,perl-any-moose)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-any-moose perl-module-install perl-test-fatal))
     (propagated-inputs
-     `(("perl-mouse" ,perl-mouse)))
+     (list perl-mouse))
     (home-page "https://metacpan.org/release/MouseX-NativeTraits")
     (synopsis "Extend attribute interfaces for Mouse")
     (description
@@ -7864,11 +7633,9 @@ and libraries based on OpenSSL.")
          "0prchsg547ziysjl8ghiid6ph3m2xnwpsrwrjymibga7fhqi9sqj"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-extutils-depends" ,perl-extutils-depends)))
+     (list perl-b-hooks-op-check perl-extutils-depends))
     (propagated-inputs
-     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
-       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+     (list perl-b-hooks-op-check perl-lexical-sealrequirehints))
     (home-page "https://metacpan.org/release/multidimensional")
     (synopsis "Disable multidimensional array emulation")
     (description
@@ -7909,12 +7676,9 @@ Perl (back to 5.6.0).")
         (base32 "012qqs561xyyhm082znmzsl8lz4n299fa6p0v246za2l9bkdiss5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-module-build perl-test-needs))
     (propagated-inputs
-     `(("perl-b-hooks-endofscope" ,perl-b-hooks-endofscope)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-sub-identify" ,perl-sub-identify)))
+     (list perl-b-hooks-endofscope perl-namespace-clean perl-sub-identify))
     (home-page "https://metacpan.org/release/namespace-autoclean")
     (synopsis "Keep imports out of your namespace")
     (description "The namespace::autoclean pragma will remove all imported
@@ -7940,8 +7704,7 @@ anything that looks like a method.")
          "17dg64pd4bwi2ad3p8ykwys1zha7kg8a8ykvks7wfg8q7qyah44a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-package-stash" ,perl-package-stash)
-       ("perl-b-hooks-endofscope" ,perl-b-hooks-endofscope)))
+     (list perl-package-stash perl-b-hooks-endofscope))
     (home-page "https://metacpan.org/release/namespace-clean")
     (synopsis "Keep imports and functions out of your namespace")
     (description "The namespace::clean pragma will remove all previously
@@ -8011,8 +7774,7 @@ system threads instead of Perl threads.")
         (base32 "1aiy7adirk3wpwlczd8sldi9k1dray0jrg1lbcrcw97zwcrkciam"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-module-build perl-test-nowarnings))
     (home-page "https://metacpan.org/release/Net-IDN-Encode")
     (synopsis "Internationalizing Domain Names in Applications (IDNA)")
     (description
@@ -8123,7 +7885,7 @@ number exists in a given range, and to be able to manipulate the range.")
         (base32 "12k90c19ly93ib1p6sm3k7sbnr2h5dbywkdmnff2ngm99p4m68c4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Object-Signature")
     (synopsis "Generate cryptographic signatures for objects")
     (description "Object::Signature is an abstract base class that you can
@@ -8169,9 +7931,7 @@ documents within a single file.")
           (base32
             "1q3lz168q081iwl9jg21fbzhp9la79gav9mv6nmh2jab83s2l3mj"))))
     (build-system perl-build-system)
-    (inputs `(("freeglut" ,freeglut)
-              ("libxi" ,libxi)
-              ("libxmu" ,libxmu)))
+    (inputs (list freeglut libxi libxmu))
     (arguments
      '(#:tests? #f ; test.pl fails with our empty glversion.txt, while
                    ; the package still seems to work on the examples
@@ -8226,8 +7986,7 @@ and FreeGLUT.")
          "1fj1fakkfklf2iwzsl64vfgshya3jgm6vhxiphw12wlac9g2il0m"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter" ,perl-sub-exporter)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-sub-exporter perl-params-util))
     (home-page "https://metacpan.org/release/Package-Anon")
     (synopsis "Anonymous packages")
     (description "This module allows for anonymous packages that are
@@ -8249,13 +8008,9 @@ instance, not by name.")
          "0jv8svfh1c1q4vxlkf8vjfbdq3n2sj3nx5llv1qrhp1b93d3lx0x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-test-output" ,perl-test-output)))
+     (list perl-test-fatal perl-test-requires perl-test-output))
     (propagated-inputs
-     `(("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-sub-install" ,perl-sub-install)))
+     (list perl-list-moreutils perl-params-util perl-sub-install))
     (arguments `(#:tests? #f))          ;XXX: Failing for some reason...
     (home-page "https://metacpan.org/release/Package-DeprecationManager")
     (synopsis "Manage deprecation warnings for your distribution")
@@ -8276,14 +8031,11 @@ one or more modules.")
         (base32 "0zrs4byhlpq5ybnl0fd3y6pfzair6i2dyvzn7f7a7pgj9n2fi3n5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-package-anon" ,perl-package-anon)))
+     (list perl-dist-checkconflicts perl-test-fatal perl-test-requires
+           perl-package-anon))
     (propagated-inputs
-     `(("perl-module-implementation" ,perl-module-implementation)
-       ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)
-       ("perl-package-stash-xs" ,perl-package-stash-xs)))
+     (list perl-module-implementation perl-dist-checkconflicts
+           perl-package-stash-xs))
     (home-page "https://metacpan.org/release/Package-Stash")
     (synopsis "Routines for manipulating stashes")
     (description "Manipulating stashes (Perl's symbol tables) is occasionally
@@ -8304,9 +8056,7 @@ of that behind a simple API.")
         (base32 "1akqk10qxwk798qppajqbczwmhy4cs9g0lg961m3vq218slnnryk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-package-anon" ,perl-package-anon)))
+     (list perl-test-fatal perl-test-requires perl-package-anon))
     (home-page "https://metacpan.org/release/Package-Stash-XS")
     (synopsis "Faster implementation of the Package::Stash API")
     (description "This is a backend for Package::Stash, which provides the
@@ -8351,7 +8101,7 @@ is particularly useful for debugging.")
          "0wm4wp6p3ah5z212jl12728z68nmxmfr0f03z1jpvdzffnc2xppi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-warn))
     (home-page "https://metacpan.org/release/Parallel-ForkManager")
     (synopsis "Simple parallel processing fork manager")
     (description "@code{Parallel::ForkManager} is intended for use in
@@ -8374,11 +8124,9 @@ processes to be forked off should be limited.")
         "052r198xyrsv8wz21gijdigz2cgnidsa37nvyfzdiz4rv1fc33ir"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (propagated-inputs
-     `(("perl-devel-callchecker" ,perl-devel-callchecker)))
+     (list perl-devel-callchecker))
     (home-page "https://metacpan.org/release/Params-Classify")
     (synopsis "Argument type classification")
     (description "This module provides various type-testing functions.
@@ -8428,11 +8176,9 @@ checking parameters easier.")
          "0cwpf8yxwyxbnwhf6rx4wnaq1q38j38i34a78a005shb8gxqv9j9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-build perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-module-implementation" ,perl-module-implementation)))
+     (list perl-module-implementation))
     (home-page "https://metacpan.org/release/Params-Validate")
     (synopsis "Validate method/function parameters")
     (description "The Params::Validate module allows you to validate method or
@@ -8453,14 +8199,10 @@ function call parameters to an arbitrary level of specificity.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-without-module" ,perl-test-without-module)
-       ("perl-test2-plugin-nowarnings" ,perl-test2-plugin-nowarnings)
-       ("perl-test2-suite" ,perl-test2-suite)
-       ("perl-type-tiny" ,perl-type-tiny)))
-    (propagated-inputs
-     `(("perl-eval-closure" ,perl-eval-closure)
-       ("perl-exception-class" ,perl-exception-class)
-       ("perl-specio" ,perl-specio)))
+     (list perl-test-without-module perl-test2-plugin-nowarnings
+           perl-test2-suite perl-type-tiny))
+    (propagated-inputs
+     (list perl-eval-closure perl-exception-class perl-specio))
     (home-page "https://github.com/houseabsolute/Params-ValidationCompiler")
     (synopsis "Build an optimized subroutine parameter validator")
     (description "This module creates a customized, highly efficient
@@ -8505,7 +8247,7 @@ distributions.")
         (base32
          "1kj8q8dmd8jci94w5arav59nkp0pkxrkliz4n8n6yf02hsa82iv5"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Path-Class")
     (synopsis "Path specification manipulation")
     (description "Path::Class is a module for manipulation of file and
@@ -8536,7 +8278,7 @@ directory specifications in a cross-platform manner.")
                                "/bin/pwd'")))
              #t)))))
     (inputs
-     `(("coreutils" ,coreutils)))
+     (list coreutils))
     (home-page "https://metacpan.org/release/PathTools")
     (synopsis "Tools for working with directory and file names")
     (description "This package provides functions to work with directory and
@@ -8561,7 +8303,7 @@ file names.")
     ;;  `(("perl-test-failwarnings" ,perl-test-failwarnings)
     ;;    ("perl-test-mockrandom" ,perl-test-mockrandom)))
     (inputs
-     `(("perl-unicode-utf8" ,perl-unicode-utf8)))
+     (list perl-unicode-utf8))
     (home-page "https://metacpan.org/release/Path-Tiny")
     (synopsis "File path utility")
     (description "This module provides a small, fast utility for working
@@ -8582,10 +8324,9 @@ with file paths.")
                 "0nlks4p33d08h0fiv6aivinalf9f9zdkgkxqvvbbvdkvyh4z29a9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)
-       ("perl-test-memory-cycle" ,perl-test-memory-cycle)))
+     (list perl-test-exception perl-test-memory-cycle))
     (propagated-inputs
-     `(("perl-font-ttf" ,perl-font-ttf)))
+     (list perl-font-ttf))
     (home-page "https://metacpan.org/release/PDF-API2")
     (synopsis "Facilitates the creation and modification of PDF files")
     (description "This Perl module facilitates the creation and modification
@@ -8606,7 +8347,7 @@ of PDF files.")
                 "1jw1ri8nkm4ck73arbsld1y2qgj2b9ir01y8mzb3mjs6w0pkz8w3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page
      "https://metacpan.org/release/PerlIO-utf8_strict")
     (synopsis "Fast and correct UTF-8 IO")
@@ -8630,8 +8371,7 @@ for correctness.")
        "1zd0zm6vxapw6bds3ipymkbzam70p3j3rm48794qy11620r22dgx"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-file-sharedir-install" ,perl-file-sharedir-install)
-      ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+    (list perl-file-sharedir-install perl-yaml-libyaml))
    (home-page "https://metacpan.org/release/Pegex")
    (synopsis "Acmeist PEG Parser Framework")
    (description "Pegex is an Acmeist parser framework.  It allows you to easily
@@ -8656,13 +8396,38 @@ available.")
          "01xifj83dv492lxixijmg6va02rf3ydlxly0a9slmx22r6qa1drh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-symdump" ,perl-devel-symdump)))
+     (list perl-devel-symdump perl-pod-parser))
     (home-page "https://metacpan.org/release/Pod-Coverage")
     (synopsis "Check for comprehensive documentation of a module")
     (description "This module provides a mechanism for determining if the pod
 for a given module is comprehensive.")
     (license (package-license perl))))
 
+(define-public perl-pod-parser
+  (package
+    (name "perl-pod-parser")
+    (version "1.63")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/M/MA/MAREKR/Pod-Parser-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1k8clxxdjag56zm6cv38c3q81gj7xphfhh98l21jynwp55hvbq6v"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Pod-Parser")
+    (synopsis "Modules for parsing/translating POD format documents")
+    (description
+     "@code{Pod::Parser} is a base class for creating POD filters and
+translators.  It handles most of the effort involved with parsing the POD
+sections from an input stream, leaving subclasses free to be concerned only
+with performing the actual translation of text.
+
+@emph{NOTE}: This module is considered legacy.  New projects should prefer
+@code{Pod::Simple} instead.")
+    (license license:perl-license)))
+
 (define-public perl-pod-simple
   (package
     (name "perl-pod-simple")
@@ -8695,7 +8460,7 @@ used for writing documentation for Perl and for Perl modules.")
         (base32
          "04dcn2n4rfkj8p24vj2p17vvis40l87pf2vdqp0vqm5jg3fjnn16"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (arguments `(#:tests? #f))          ; TODO: Timezone test failures
     (home-page "https://metacpan.org/release/POSIX-strftime-Compiler")
     (synopsis "GNU C library compatible strftime for loggers and servers")
@@ -8720,16 +8485,10 @@ applications.")
     (arguments
      `(#:tests? #f))                    ;FIXME: some tests fail
     (native-inputs
-     `(("perl-class-inspector" ,perl-class-inspector)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-object" ,perl-test-object)
-       ("perl-test-subcalls" ,perl-test-subcalls)))
+     (list perl-class-inspector perl-test-deep perl-test-nowarnings
+           perl-test-object perl-test-subcalls))
     (propagated-inputs
-     `(("perl-clone" ,perl-clone)
-       ("perl-io-string" ,perl-io-string)
-       ("perl-params-util" ,perl-params-util)
-       ("perl-task-weaken" ,perl-task-weaken)))
+     (list perl-clone perl-io-string perl-params-util perl-task-weaken))
     (home-page "https://metacpan.org/release/PPI")
     (synopsis "Parse, analyze and manipulate Perl (without Perl)")
     (description "The PPI module parses, analyzes and manipulates Perl
@@ -8775,7 +8534,7 @@ Module::Build project, but has been externalized here for general use.")
          (add-after 'unpack 'set-EDITOR
            (lambda _ (setenv "EDITOR" "echo") #t)))))
     (propagated-inputs
-     `(("perl-carp-assert" ,perl-carp-assert)))
+     (list perl-carp-assert))
     (home-page "https://metacpan.org/release/Proc-InvokeEditor")
     (synopsis "Interface to external editor from Perl")
     (description "This module provides the ability to supply some text to an
@@ -8795,7 +8554,7 @@ external text editor, have it edited by the user, and retrieve the results.")
         (base32
          "165zcf9lpijdpkx82za0g9rx8ckjnhipmcivdkyzshl8jmp1bl4v"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Readonly")
     (synopsis "Create read-only scalars, arrays, hashes")
     (description "This module provides a facility for creating non-modifiable
@@ -8884,10 +8643,9 @@ and @code{deserialize_regexp}.")
          "0ak60hakn0ixmsiw403si0lf5pagq5r6wjgl7p0pr979nlcikfmd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-namespace-autoclean perl-test-fatal))
     (propagated-inputs
-     `(("perl-class-method-modifiers" ,perl-class-method-modifiers)))
+     (list perl-class-method-modifiers))
     (home-page "https://metacpan.org/release/Role-Tiny")
     (synopsis "Roles, as a slice of Moose")
     (description "Role::Tiny is a minimalist role composition tool.")
@@ -8940,9 +8698,7 @@ safely on things that may not be objects.")
         "0llbsqk7rsg9p7l1f4yk6iv7wij91gvavprsqhnb04w7nz4ifjpm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Scalar-String")
     (synopsis "String aspects of scalars")
     (description "@code{Scalar::String} is about the string part of
@@ -9012,7 +8768,7 @@ collector.")
       (base32 "0jf3vdmdgxx6a9xrfwnbbs9g37i1i6qhfg5qwln8x5i280701m3g"))))
    (build-system perl-build-system)
    (native-inputs
-    `(("perl-extutils-cppguess" ,perl-extutils-cppguess)))
+    (list perl-extutils-cppguess))
    (home-page "https://metacpan.org/release/Set-IntervalTree")
    (synopsis "Perform range-based lookups on sets of ranges")
    (description "This package provides an efficient mechanism to look up
@@ -9051,8 +8807,7 @@ optimized for sets that have long runs of consecutive integers.")
         (base32 "040q819l9x55j0hjhfvc153451syvjffw3d22gs398sd23mwzzsy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-moose perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Set-Object")
     (synopsis "Unordered collections of Perl Objects")
     (description "Set::Object provides efficient sets, unordered collections
@@ -9134,13 +8889,13 @@ word-characters are compared lexically.")
          "1s5xd9awwrzc94ymimjkxqs6jq513wwlmwwarxaklvg2hk4lps0l"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-eval-closure" ,perl-eval-closure)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-role-tiny" ,perl-role-tiny)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)))
+     (list perl-devel-stacktrace
+           perl-eval-closure
+           perl-module-runtime
+           perl-mro-compat
+           perl-role-tiny
+           perl-test-fatal
+           perl-test-needs))
     (home-page "https://metacpan.org/release/Specio")
     (synopsis "Classes for representing type constraints and coercion")
     (description "The Specio distribution provides classes for representing type
@@ -9209,7 +8964,7 @@ its return value is going to be immediately used.")
                 "0y4zf5qkpayp4kkg7lw9ydbbin1z99m6xvy02fgacjbfw4ai9zh9"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-want" ,perl-want)))
+     (list perl-want))
     (home-page "https://metacpan.org/release/Contextual-Return")
     (synopsis "Create context-sensitive return values")
     (description "This module provides a collection of named blocks that allow
@@ -9231,7 +8986,7 @@ which it is called.")
                 "1ywl398z42hz9w1k0waf1caa6agz8jzsjlf4rzs1lgpx2mbcwmb8"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-number-format" ,perl-number-format)))
+     (list perl-number-format))
     (home-page "https://metacpan.org/release/Statistics-Basic")
     (synopsis "Collection of very basic statistics modules")
     (description "This package provides basic statistics functions like
@@ -9252,12 +9007,10 @@ which it is called.")
                 "1i3bskwibp54c9a2wx8gzr3hyds6mmhr3d550g8j6893005v3bgq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-contextual-return" ,perl-contextual-return)
-       ("perl-math-cephes" ,perl-math-cephes)
-       ("perl-math-matrixreal" ,perl-math-matrixreal)
-       ("perl-text-simpletable" ,perl-text-simpletable)))
+     (list perl-contextual-return perl-math-cephes perl-math-matrixreal
+           perl-text-simpletable))
     (home-page "https://metacpan.org/release/Statistics-PCA")
     (synopsis "Perl implementation of Principal Component Analysis")
     (description "This package provides the Statistics::PCA module, an
@@ -9277,7 +9030,7 @@ implementation of @dfn{Principal Component Analysis} (PCA).")
         (base32 "1nkln4fm4962b5jk1dp6lf635nnrj5a5pg1a5xmchvrfrc3asggw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xsloader" ,perl-xsloader)))
+     (list perl-xsloader))
     (home-page "https://metacpan.org/dist/Storable")
     (synopsis "Persistence for Perl data structures")
     (description "Storable brings persistence to your Perl data structures
@@ -9404,8 +9157,7 @@ removing double-quotes, and truncating to fit within a desired length.")
          "0mlwm0rirv46gj4h072q8gdync5zxxsxy8p028gdyrhczl942dc3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-params-util" ,perl-params-util)
-       ("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-params-util perl-sub-exporter))
     (home-page "https://metacpan.org/release/String-Formatter")
     (synopsis "Build your own sprintf-like functions")
     (description
@@ -9428,7 +9180,7 @@ fixed string interpolation, and simple width-matching.")
          "18nxl1vgkcx0r7ifkmbl9fp73f8ihiqhqqf3vq6sj5b3cgawrfsw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-sub-exporter" ,perl-sub-exporter)))
+     (list perl-sub-exporter))
     (home-page "https://metacpan.org/release/String-RewritePrefix")
     (synopsis "Rewrite strings based on a set of known prefixes")
     (description "This module allows you to rewrite strings based on a set of
@@ -9470,7 +9222,7 @@ that they won't be changed.")
                 "1n9lc5dr66sg89hym47764fyfms7vrxrhwvdps2x8x8gxly7rsdl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+     (list perl-unicode-linebreak))
     (home-page "https://metacpan.org/release/String-Print")
     (synopsis "String printing alternatives to printf")
     (description
@@ -9494,8 +9246,7 @@ a functional interface.")
          "03040vk227icdkb0hvxplck2y6rglj67s1rgf12z3465ss3lhci3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-data-optlist" ,perl-data-optlist)
-       ("perl-params-util" ,perl-params-util)))
+     (list perl-data-optlist perl-params-util))
     (home-page "https://metacpan.org/release/Sub-Exporter")
     (synopsis "Sophisticated exporter for custom-built routines")
     (description
@@ -9516,7 +9267,7 @@ custom-built routines.")
         (base32
          "0mn0x8mkh36rrsr58s1pk4srwxh2hbwss7sv630imnk49navfdfm"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-sub-exporter" ,perl-sub-exporter)))
+    (native-inputs (list perl-sub-exporter))
     (home-page "https://metacpan.org/release/Sub-Exporter-Progressive")
     (synopsis "Only use Sub::Exporter if you need it")
     (description "Sub::Exporter is an incredibly powerful module, but with
@@ -9560,7 +9311,7 @@ references.")
           "1snhrmc6gpw2zjnj7zvvqj69mlw711bxah6kk4dg5vxxjvb5cc7a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)))
+     (list perl-importer))
     (home-page "https://metacpan.org/release/Sub-Info")
     (synopsis "Tool to inspect subroutines")
     (description "This package provides tools for inspecting subroutines
@@ -9603,7 +9354,7 @@ can see them.")
          "05viq8scqk29g964fsfvls2rhvlb8myz3jblwh5c2ivhw3gfjcmx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-checkbin" ,perl-devel-checkbin)))
+     (list perl-devel-checkbin))
     (home-page "https://metacpan.org/release/Sub-Name")
     (synopsis "(Re)name a sub")
     (description "Assigns a new name to referenced sub.  If package
@@ -9625,9 +9376,9 @@ return value is the sub.")
         (base32 "17fq4iskrisnqs96amrz493vxikwvqbj9s7014k6vyl84gs2lkkf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-sub-name" ,perl-sub-name)))
+     (list perl-sub-name))
     (home-page "https://metacpan.org/release/Sub-Quote")
     (synopsis "Efficient generation of subroutines via string eval")
     (description "Sub::Quote provides an efficient generation of subroutines
@@ -9667,9 +9418,9 @@ uplevel() are avoided.")
         (base32 "16nk2za9fwyg7mcifacr69qi075iz1yvy8r9jh3903kzdvkiwpb8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-sub-identify" ,perl-sub-identify)))
+     (list perl-sub-identify))
     (home-page "https://metacpan.org/release/SUPER")
     (synopsis "Control superclass method dispatching")
     (description
@@ -9858,8 +9609,7 @@ error encouraging the user to seek support.")
          "1msxg3j1hx5wsc7vr81x5gs9gdbn4y0x6cvyj3pq4dgi1603dbvi"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-appconfig" ,perl-appconfig)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)))
+     (list perl-appconfig perl-test-leaktrace))
     (home-page "https://metacpan.org/release/Template-Toolkit")
     (synopsis "Template processing system for Perl")
     (description "The Template Toolkit is a collection of modules which
@@ -9883,7 +9633,7 @@ documents: HTML, XML, POD, PostScript, LaTeX, and so on.")
          "1d3pbcx1kz73ncg8s8lx3ifwphz838qy0m40gdar7790cnrlqcdp"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-template-toolkit" ,perl-template-toolkit)))
+     (list perl-template-toolkit))
     (home-page "https://metacpan.org/release/Template-Timer")
     (synopsis "Profiling for Template Toolkit")
     (description "Template::Timer provides inline profiling of the template
@@ -9929,7 +9679,7 @@ future, or if you want the retain the familiarity of TT-style templates.")
         (base32 "0zgj329kfrwcyqn491v04x65yjydwfc4845a71f8hypdrj3vv0b2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-warn))
     (home-page "https://metacpan.org/dist/Term-ANSIColor")
     (synopsis "Interface to the ANSI terminal escape sequences for color")
     (description "Term::ANSIColor provides constants and simple functions for
@@ -9954,7 +9704,7 @@ supported.")
          "02qx4ni1vqp9hvkw69hp5bxcf2ghjiw8sl34pqy5mlimsy3rdflm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/Term-Encoding")
     (synopsis "Detect encoding of the current terminal")
     (description "Term::Encoding is a simple module to detect the encoding of
@@ -9975,11 +9725,9 @@ the current terminal expects in various ways.")
          "15pn42zf793dplpfnmawh7v7xc4qm38s1jhvn1agx4cafcn61q61"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-capture-tiny perl-test-exception))
     (propagated-inputs
-     `(("perl-class-methodmaker" ,perl-class-methodmaker)
-       ("perl-term-readkey" ,perl-term-readkey)))
+     (list perl-class-methodmaker perl-term-readkey))
     (home-page "https://metacpan.org/release/Term-ProgressBar")
     (synopsis "Progress meter on a standard terminal")
     (description "Term::ProgressBar provides a simple progress bar on the
@@ -10001,9 +9749,7 @@ stuff has been done, and maybe an estimate at how long remains.")
          "19l4476iinwz19vh360k3rss38m9gmkg633i5v9jkg48yn954rr5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-interactive" ,perl-io-interactive)
-       ("perl-term-progressbar" ,perl-term-progressbar)
-       ("perl-test-mockobject" ,perl-test-mockobject)))
+     (list perl-io-interactive perl-term-progressbar perl-test-mockobject))
     (home-page "https://metacpan.org/release/Term-ProgressBar-Quiet")
     (synopsis "Progress meter if run interactively")
     (description "Term::ProgressBar is a wonderful module for showing progress
@@ -10026,7 +9772,7 @@ a cron job) then it does not show the progress bar.")
          "19kr6l2aflwv9yph5xishkpag038qb8wd4mkzb0x1psvgp3b63d2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-term-progressbar-quiet" ,perl-term-progressbar-quiet)))
+     (list perl-term-progressbar-quiet))
     (home-page "https://metacpan.org/release/Term-ProgressBar-Simple")
     (synopsis "Simple progress bars")
     (description "Term::ProgressBar::Simple tells you how much work has been
@@ -10069,8 +9815,7 @@ screen size, and retrieval/modification of the control characters.")
          "09b9mcmp09kdfh5jaqdr528yny8746hvn3f185aqd6rw06jgf24s"))))
     (build-system perl-build-system)
     (inputs
-     `(("readline" ,readline)
-       ("ncurses" ,ncurses)))
+     (list readline ncurses))
     (arguments
      `(#:tests? #f ; Tests fail without other Term::ReadLine interfaces present
        #:phases (modify-phases %standard-phases
@@ -10107,9 +9852,9 @@ compatible with Term::ReadLine.")
          "1lnynd8pwjp3g85bl4nav6yigg2lag3sx5da989j7a733bdmzyk4"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-hide" ,perl-devel-hide)))
+     (list perl-devel-hide))
     (propagated-inputs
-     `(("perl-term-size-perl" ,perl-term-size-perl)))
+     (list perl-term-size-perl))
     (home-page "https://metacpan.org/release/Term-Size-Any")
     (synopsis "Retrieve terminal size")
     (description "This is a unified interface to retrieve terminal size.  It
@@ -10150,7 +9895,7 @@ Now in pure Perl, with the exception of a C probe run at build time.")
           "0gi4lyvs6n8y6hjwmflfpamfl65y7mb1g39zi0rx35nclj8xb370"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-importer" ,perl-importer)))
+     (list perl-importer))
     (home-page "https://metacpan.org/release/Term-Table")
     (synopsis "Format a header and rows into a table")
     (description "This module is able to generically format rows of data
@@ -10169,7 +9914,7 @@ into tables.")
        (sha256
         (base32 "1vry21jrh91l2pkajnrps83bnr1fn6zshbzi80mcrnggrn9iq776"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Text-Aligner")
     (synopsis "Align text")
     (description "Text::Aligner exports a single function, align(), which is
@@ -10250,7 +9995,7 @@ and escapes.")
          "013g13prdghxvrp5754gyc7rmv1syyxrhs33yc5f0lrz3dxs1fp8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-algorithm-diff" ,perl-algorithm-diff)))
+     (list perl-algorithm-diff))
     (home-page "https://metacpan.org/release/Text-Diff")
     (synopsis "Perform diffs on files and record sets")
     (description "Text::Diff provides a basic set of services akin to the GNU
@@ -10274,9 +10019,7 @@ generally slower on larger files.")
                 "0104z7jjv46kqh77rnx8kvmsbr5dy0s56xm01dckq4ly65br0hkx"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Text-Format")
     (synopsis "Various subroutines to format text")
     (description "This package provides functions to format text in various
@@ -10297,7 +10040,7 @@ to tabs.")
         (base32
          "11sj62fynfgwrlgkv5a051cq6yn0pagxqjsz27dxx8phsd4wv706"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/Text-Glob")
     (synopsis "Match globbing patterns against text")
     (description "Text::Glob implements glob(3) style matching that can be
@@ -10318,10 +10061,9 @@ you want to do full file globbing use the File::Glob module instead.")
         (base32 "1siq8hgj7s8gwpf3n3h1is5v50rwi6av8lfb19khiyyqz0rp7a57"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-module-build-tiny))
     (propagated-inputs
-     `(("perl-data-section-simple" ,perl-data-section-simple)
-       ("perl-uri" ,perl-uri)))
+     (list perl-data-section-simple perl-uri))
     (home-page "https://metacpan.org/release/Text-Haml")
     (synopsis "Haml Perl implementation")
     (description
@@ -10344,7 +10086,7 @@ you want to do full file globbing use the File::Glob module instead.")
          "129msa57jzxxi2x7z9hgzi48r48y65w77ycfk1w733zz2m8nr8y3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Text-NeatTemplate")
     (synopsis "Fast, middleweight template engine")
@@ -10385,7 +10127,7 @@ tokens or array of arrays.")
         (base32 "1k1xbhxwn9fymqqwnam9pm7hr2p5ikq6dk578qw18gkap9hqxwga"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-diff" ,perl-text-diff)))
+     (list perl-text-diff))
     (home-page "https://metacpan.org/release/Text-Patch")
     (synopsis "Patches text with given patch")
     (description "Text::Patch combines source text with given
@@ -10445,9 +10187,9 @@ algorism to indicate multiplication by 1000.")
          "04kh5x5inq183rdg221wlqaaqi1ipyj588mxsslik6nhc14f17nd"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-text-aligner" ,perl-text-aligner)))
+     (list perl-text-aligner))
     (home-page "https://metacpan.org/release/Text-Table")
     (synopsis "Organize Data in Tables")
     (description "Text::Table renders plaintext tables.")
@@ -10487,8 +10229,7 @@ Text::Wrap will reformat lines into paragraphs.")
          "12zi08mwmlbfbnsialmppk75s6dkg765dvmay3wif3158plqp554"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-more-utf8" ,perl-test-more-utf8)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-more-utf8 perl-test-warnings))
     (home-page
      "https://metacpan.org/release/Text-Template")
     (synopsis
@@ -10553,11 +10294,9 @@ system.")
          "184gdcwxqwnkrx5md968v1ny70pq6blzpkihccm3bpdxnpgd11wr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)))
+     (list perl-devel-stacktrace))
     (propagated-inputs
-     `(("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-moo" ,perl-moo)))
+     (list perl-devel-stacktrace perl-module-runtime perl-moo))
     (home-page "https://metacpan.org/release/Throwable")
     (synopsis "Role for classes that can be thrown")
     (description "Throwable is a role for classes that are meant to be thrown
@@ -10616,7 +10355,7 @@ again.  Once you get to the end of the list, you go back to the beginning.")
         (base32
           "0mmg9iyh42syal3z1p2pn9airq65yrkfs66cnqs9nz76jy60pfzs"))))
   (build-system perl-build-system)
-  (native-inputs `(("perl-module-build" ,perl-module-build)))
+  (native-inputs (list perl-module-build))
   (home-page "https://metacpan.org/release/Tie-IxHash")
   (synopsis "Ordered associative arrays for Perl")
   (description "This Perl module implements Perl hashes that preserve the
@@ -10687,7 +10426,7 @@ figure out what you're trying to do.")
          "1x1smn1kw383xc5h9wajxk9dlx92bgrbf7gk4abga57y6120s6m3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-simple" ,perl-test-simple)))
+     (list perl-test-simple))
     (home-page "https://metacpan.org/release/Tie-ToObject")
     (synopsis "Tie to an existing Perl object")
     (description "This class provides a tie constructor that returns the
@@ -10708,9 +10447,7 @@ $object->TIEHASH are avoided.")
         (base32 "1f59z2svfydxgd1gzrb5k3hl6d432kzmskk7jhv2dyb5hyx0wd7y"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-install perl-test-pod perl-test-pod-coverage))
     (home-page "https://metacpan.org/release/Time-Duration")
     (synopsis "English expression of durations")
     (description "This module provides functions for expressing durations in
@@ -10730,9 +10467,9 @@ rounded or exact terms.")
         (base32 "10g39bbrxkabbsfq4rv7f5b5x7h3jba08j4pg8gwr0b9iqx19n31"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-time-duration" ,perl-time-duration)))
+     (list perl-time-duration))
     (propagated-inputs
-     `(("perl-exporter-lite" ,perl-exporter-lite)))
+     (list perl-exporter-lite))
     (home-page "https://metacpan.org/release/Time-Duration-Parse")
     (synopsis "Parse time duration strings")
     (description "Time::Duration::Parse is a module to parse human readable
@@ -10834,9 +10571,9 @@ time values and formatting dates into ASCII strings.")
          "0bwqyg8z98m8cjw1qcm4wg502n225k33j2fp8ywxkgfjdd1zgllv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-timedate" ,perl-timedate))) ;For Date::Parse
+     (list perl-timedate)) ;For Date::Parse
     (home-page "https://metacpan.org/release/Time-Mock")
     (synopsis "Shift and scale time")
     (description "This module allows you to speed up your sleep(), alarm(),
@@ -10856,10 +10593,9 @@ and time() calls.")
         (base32 "176j8zgsndfnxb5mxaiarnva3ghck1jxgxwkz77r9fr2sadpksdp"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-scalar-list-utils" ,perl-scalar-list-utils)))
+     (list perl-scalar-list-utils))
     (home-page "https://metacpan.org/release/Tree-Simple")
     (synopsis "Simple tree object")
     (description "This module in a fully object-oriented implementation of a
@@ -10879,10 +10615,9 @@ simple n-ary tree.")
         (base32 "19hdi00rw492m5r51b495gv5c64g91g98f8lm6sgym1cl7x3ixcw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-build perl-test-exception))
     (propagated-inputs
-     `(("perl-tree-simple" ,perl-tree-simple)))
+     (list perl-tree-simple))
     (home-page "https://metacpan.org/release/Tree-Simple-VisitorFactory")
     (synopsis "Factory object for dispensing Visitor objects")
     (description "This module is a factory for dispensing
@@ -10922,11 +10657,9 @@ else.")
         (base32 "0d2ldn6pi8dj7shk4gkjm9bzqr7509fzkwjs7579pmgg6xkkynjf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-test-fatal perl-test-requires))
     (propagated-inputs
-     `(("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-hash-fieldhash" ,perl-hash-fieldhash)))
+     (list perl-exporter-tiny perl-hash-fieldhash))
     (home-page "https://metacpan.org/release/Type-Tie")
     (synopsis "Tie a variable to a type constraint")
     (description "This module exports a single function: @code{ttie}.  It ties
@@ -10949,17 +10682,17 @@ variable conform.")
         (base32 "0s11rlkkjjys8x6ihm5mrhzbbf341g5ckqbalph4g7l98kcy26yl"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-test-warnings))
     (propagated-inputs
-     `(("perl-devel-lexalias" ,perl-devel-lexalias)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-exporter-tiny" ,perl-exporter-tiny)
-       ("perl-moo" ,perl-moo)
-       ("perl-moose" ,perl-moose)
-       ("perl-mouse" ,perl-mouse)
-       ("perl-ref-util-xs" ,perl-ref-util-xs)
-       ("perl-regexp-util" ,perl-regexp-util)
-       ("perl-type-tie" ,perl-type-tie)))
+     (list perl-devel-lexalias
+           perl-devel-stacktrace
+           perl-exporter-tiny
+           perl-moo
+           perl-moose
+           perl-mouse
+           perl-ref-util-xs
+           perl-regexp-util
+           perl-type-tie))
     (home-page "https://metacpan.org/release/Type-Tiny")
     (synopsis "Tiny, yet Moo(se)-compatible type constraint")
     (description "@code{Type::Tiny} is a small class for writing type
@@ -11002,10 +10735,8 @@ so other data validation frameworks might also consider using it.")
         (base32 "1072vwcbx2bldfg8xpxc9iqs3rzqd18yik60b432hsdwxpxcjgsr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-type-tiny" ,perl-type-tiny)
-       ("perl-exporter-tiny" ,perl-exporter-tiny)))
+     (list perl-file-pushd perl-path-tiny perl-type-tiny
+           perl-exporter-tiny))
     (home-page "https://metacpan.org/release/Types-Path-Tiny")
     (synopsis "Types and coercions for Moose and Moo")
     (description "This module provides @code{Path::Tiny} types for Moose, Moo,
@@ -11028,7 +10759,7 @@ to ensure that files or directories exist.")
          "03bk0hm5ys8k7265dkap825ybn2zmzb1hl0kf1jdm8yq95w39lvs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-common-sense" ,perl-common-sense)))
+     (list perl-common-sense))
     (home-page "https://metacpan.org/release/Types-Serialiser")
     (synopsis "Data types for common serialisation formats")
     (description "This module provides some extra datatypes that are used by
@@ -11085,7 +10816,7 @@ common serialisation formats such as JSON or CBOR.")
                                     (getenv "PERL5LIB")))
              #t)))))
     (propagated-inputs
-     `(("perl-unicode-normalize" ,perl-unicode-normalize)))
+     (list perl-unicode-normalize))
     (home-page "https://metacpan.org/release/Unicode-Collate")
     (synopsis "Unicode collation algorithm")
     (description "This package provides tools for sorting and comparing
@@ -11107,7 +10838,7 @@ Unicode data.")
                 "12iinva5gqc9g7qzxrvmh45n714z0ad9g7wq2dxwgp6drbj64rs8"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-mime-charset" ,perl-mime-charset)))
+     (list perl-mime-charset))
     (home-page "https://metacpan.org/release/Unicode-LineBreak")
     (synopsis "Unicode line breaking algorithm")
     (description
@@ -11132,10 +10863,8 @@ defined by Annex #11 is used to determine breaking positions.")
     ;; <https://rt.cpan.org/Public/Bug/Display.html?id=127007>.
     (arguments `(#:tests? ,(target-64bit?)))
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-leaktrace" ,perl-test-leaktrace)
-       ("perl-variable-magic" ,perl-variable-magic)
-       ("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-fatal perl-test-leaktrace perl-variable-magic
+           perl-test-pod))
     (home-page "https://metacpan.org/release/Unicode-UTF8")
     (synopsis "Encoding and decoding of UTF-8 encoding form")
     (description
@@ -11176,7 +10905,7 @@ UNIVERSAL::can() as a function, which it is not.")
          "0avzv9j32aab6l0rd63n92v0pgliz1p4yabxxjfq275hdh1mcsfi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-module-build-tiny))
     (home-page "https://metacpan.org/release/UNIVERSAL-isa")
     (synopsis "UNIVERSAL::isa() reimplementation")
     (description "This module attempts to recover from people calling
@@ -11266,10 +10995,8 @@ attribute names.")
         (base32 "0pyqr12jsqagna75fm2gijfzw06wy1hrh5chn9hwnmcfddda66g8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-distribution" ,perl-test-distribution)
-       ("perl-text-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-portability-files" ,perl-test-portability-files)))
+     (list perl-test-distribution perl-test-pod perl-test-pod-coverage
+           perl-test-portability-files))
     (home-page "https://metacpan.org/dist/XSLoader")
     (synopsis "Dynamically load C libraries into Perl code")
     (description "XSLoader module defines a standard simplified interface to the
@@ -11290,9 +11017,7 @@ to implement cheap automatic dynamic loading of Perl modules.")
                 "0njyy4y0zax4zz55y82dlm9cly1pld1lcxb281s12bp9rrhf9j9x"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-extutils-depends perl-module-install perl-test-fatal))
     (home-page "https://metacpan.org/release/XS-Object-Magic")
     (synopsis "Opaque, extensible XS pointer backed objects using sv_magic")
     (description
@@ -11315,7 +11040,7 @@ neither visible nor modifiable from Perl space).")
         (base32 "1kbrfksjg4k4vmx1i337m5n69m00m0m5bgsh61c15bzzrgbacc2h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-yaml" ,perl-test-yaml)))
+     (list perl-test-yaml))
     (home-page "https://metacpan.org/release/YAML")
     (synopsis "YAML for Perl")
     (description "The YAML.pm module implements a YAML Loader and Dumper based
@@ -11356,8 +11081,7 @@ best YAML support to date.")
          "0i3p4nz8ysrsrs6vlzc6gkjcfpcaf05xjc7lwbjkw7lg5shmycdw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)))
+     (list perl-json-maybexs perl-module-build-tiny))
     (arguments
      `(#:tests? #f))                    ;requires Test::More >= 0.99
     (home-page "https://metacpan.org/release/YAML-Tiny")
@@ -11383,7 +11107,7 @@ and memory overhead.")
          "0dvfcn2xvj9r4ra5xqgasl847nsm1iy85w1kly41fkxm9im36hqr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page
      "https://metacpan.org/release/Parse-RecDescent")
     (synopsis "Generate recursive-descent parsers")
@@ -11431,9 +11155,8 @@ grammars to generate Perl object oriented parser modules.")
          "1mm3dfw3ffyzb2ikpqn9l6zyqrxijb4vyywmbx2l21ryqwp0zy74"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-requirements" ,perl-cpan-meta-requirements)
-       ("perl-cpan-meta-yaml" ,perl-cpan-meta-yaml)
-       ("perl-parse-cpan-meta" ,perl-parse-cpan-meta)))
+     (list perl-cpan-meta-requirements perl-cpan-meta-yaml
+           perl-parse-cpan-meta))
     (home-page "https://metacpan.org/release/CPAN-Meta")
     (synopsis "Distribution metadata for a CPAN dist")
     (description "Software distributions released to the CPAN include a
@@ -11492,7 +11215,7 @@ MYMETA.yml.")
 (define-public perl-module-build
   (package
     (name "perl-module-build")
-    (version "0.4229")
+    (version "0.4231")
     (source
      (origin
        (method url-fetch)
@@ -11500,10 +11223,10 @@ MYMETA.yml.")
                            "Module-Build-" version ".tar.gz"))
        (sha256
         (base32
-         "064c03wxia7jz0i578awj4srykj0nnigm4p5r0dv0559rnk93r0z"))))
+         "05xpn8qg814y49vrih16zfr9iiwb7pmdf57ahjnc2h0p5illq3vy"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta" ,perl-cpan-meta)))
+     (list perl-cpan-meta))
     (home-page "https://metacpan.org/release/Module-Build")
     (synopsis "Build and install Perl modules")
     (description "@code{Module::Build} is a system for building, testing, and
@@ -11530,7 +11253,7 @@ system---most of the @code{Module::Build} code is pure-Perl.")
          "1mm3dfw3ffyzb2ikpqn9l6zyqrxijb4vyywmbx2l21ryqwp0zy74"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cpan-meta-yaml" ,perl-cpan-meta-yaml)))
+     (list perl-cpan-meta-yaml))
     (home-page "https://metacpan.org/release/DAGOLDEN/Parse-CPAN-Meta-1.4422")
     (synopsis "Parse META.yml and META.json CPAN metadata files")
     (description "Parse::CPAN::Meta is a parser for META.json and META.yml
@@ -11570,24 +11293,27 @@ such that being individual extensions would be wasteful.")
         (base32 "1dagpmcpjnwvd4g6mmnc312rqpd4qcwx21rpi2j7084wz8mijai5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-alien-sdl" ,perl-alien-sdl)
-       ("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-most" ,perl-test-most)
-       ("perl-tie-simple" ,perl-tie-simple)))
+     (list perl-alien-sdl
+           perl-capture-tiny
+           perl-file-sharedir
+           perl-module-build
+           perl-test-most
+           perl-tie-simple))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libsmpeg" ,libsmpeg)
-       ("libtiff" ,libtiff)
-       ("mesa" ,mesa)
-       ("sdl" ,(sdl-union
-                (list sdl sdl-gfx sdl-image sdl-mixer sdl-pango sdl-ttf)))))
-    (propagated-inputs
-     `(("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-tie-simple" ,perl-tie-simple)))
+     (list freeglut
+           libjpeg-turbo
+           libpng
+           libsmpeg
+           libtiff
+           mesa
+           (sdl-union (list sdl
+                            sdl-gfx
+                            sdl-image
+                            sdl-mixer
+                            sdl-pango
+                            sdl-ttf))))
+    (propagated-inputs
+     (list perl-file-sharedir perl-tie-simple))
     (home-page "https://metacpan.org/release/SDL")
     (synopsis "SDL bindings to Perl")
     (description
@@ -11621,7 +11347,7 @@ spirit of both the SDL and Perl.")
                             `("PERL5LIB" suffix (,site))))
                         #t))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (home-page "https://metacpan.org/release/RAAB/SGMLSpm-1.1")
     (synopsis "Perl module for processing SGML parser output")
     (description "This package contains @code{SGMLS.pm}, a perl5 class library
@@ -11670,9 +11396,9 @@ be used.")
           "0gf13b76b824s73r5rp00v8xrd6dnb5yi5jjavfc394scqv6ldh4"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
+    (list perl-module-build))
   (inputs
-    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+    (list perl-class-xsaccessor))
   (home-page
     "https://metacpan.org/release/File-Find-Object")
   (synopsis
@@ -11696,12 +11422,10 @@ File::Find replacement in Perl.")
         (base32 "0gjzfd5fz7mhr5abafxr7qic7nwhk7y9iv17as6l880973j952h3"))))
   (build-system perl-build-system)
   (native-inputs
-    `(("perl-module-build" ,perl-module-build)))
+    (list perl-module-build))
   (inputs
-    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
-      ("perl-file-find-object" ,perl-file-find-object)
-      ("perl-number-compare" ,perl-number-compare)
-      ("perl-text-glob" ,perl-text-glob)))
+    (list perl-class-xsaccessor perl-file-find-object perl-number-compare
+          perl-text-glob))
   (home-page
     "https://metacpan.org/release/File-Find-Object-Rule")
   (synopsis
@@ -11725,7 +11449,7 @@ interface to File::Find::Object.")
          "0x3a2xgzrka73lcmmwalq2mmpzxa7s6pm01ahxf677ksqsdc3jrf"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-text-glob" ,perl-text-glob)))
+     (list perl-text-glob))
     (home-page "https://metacpan.org/release/File-Finder")
     (synopsis "Wrapper for @code{File::Find} ala @code{find(1)}")
     (description
@@ -11756,7 +11480,7 @@ used as the head of many different sequences.")
                 "14y29ja3lsa3yw0ll20lj96f3zz5zydjqi1c5nh9wxar8927ssab"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-string" ,perl-io-string)))
+     (list perl-io-string))
     (home-page "https://metacpan.org/release/Font-TTF")
     (synopsis "TTF font support for Perl")
     (description "This package provides a Perl module for TrueType/OpenType
@@ -11790,12 +11514,10 @@ prop, vhea, vmtx and the reading and writing of all other table types.")
          ;; This is needed for tests
          (add-after 'unpack 'set-TZDIR
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-             #t)))))
+             (setenv "TZDIR"
+                     (search-input-directory inputs "share/zoneinfo")))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("tzdata" ,tzdata-for-tests)))
+     (list perl-module-build tzdata-for-tests))
     (home-page "https://metacpan.org/release/Time-ParseDate")
     (synopsis "Collection of Perl modules for time/date manipulation")
     (description "Provides several perl modules for date/time manipulation:
@@ -11824,7 +11546,7 @@ libtime-parsedate-perl_2015.103-2_copyright"))))
         (base32 "0c0yd999h0ikj88c9j95wa087m87i0qh7vja3715y2kd7vixkci2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     ;; Unless some other homepage is out there...
     (home-page "https://packages.debian.org/stretch/libtime-period-perl")
     (synopsis "Perl library for testing if a time() is in a specific period")
@@ -11850,14 +11572,10 @@ till 5pm\" and \"on the second Tuesday of the month\" and \"between 4pm and
         (base32 "19mik0r5v1cmxfxm0h4lwqyj0nmq6jgnvvq96hqcjgylpvc02x1z"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-file-pushd" ,perl-file-pushd)
-       ("perl-path-tiny" ,perl-path-tiny)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-filename" ,perl-test-filename)))
+     (list perl-file-pushd perl-path-tiny perl-test-deep
+           perl-test-filename))
     (propagated-inputs
-     `(("perl-number-compare" ,perl-number-compare)
-       ("perl-text-glob" ,perl-text-glob)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-number-compare perl-text-glob perl-try-tiny))
     (home-page "https://metacpan.org/release/Path-Iterator-Rule")
     (synopsis "Iterative, recursive file finder")
     (description "Path::Iterator::Rule iterates over files and directories to
@@ -11952,7 +11670,7 @@ the National Archives and Records Administration (NARA).")
         (base32 "064igp2wxgsz4yb33v1r90i8clwjzs2xnpvw9niqlqrbzzrd4q1l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/Regexp-Pattern")
     (synopsis "Collection of regexp patterns")
     (description "Regexp::Pattern is a convention for organizing reusable
@@ -11974,10 +11692,9 @@ regexp patterns in modules.")
          "16qls1yqcmhxrcx9agsmaypxa1nirq4nvbyzbww9984589m44ql1"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-module-install perl-test-deep))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)))
+     (list perl-class-accessor))
     (home-page "https://metacpan.org/release/Data-SExpression")
     (synopsis "Parse Lisp S-Expressions into Perl data structures")
     (description "Data::SExpression parses Lisp S-Expressions into Perl data
diff --git a/gnu/packages/perl6.scm b/gnu/packages/perl6.scm
index e02dd757e5..5c28df054f 100644
--- a/gnu/packages/perl6.scm
+++ b/gnu/packages/perl6.scm
@@ -62,6 +62,7 @@
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out        (assoc-ref outputs "out"))
                    (pkg-config (assoc-ref inputs "pkg-config")))
+               (setenv "CFLAGS" "-fcommon")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
                (invoke "perl" "Configure.pl"
                        "--prefix" out
@@ -73,12 +74,9 @@
     (home-page "https://moarvm.org/")
     ;; These should be inputs but moar.h can't find them when building rakudo
     (propagated-inputs
-     `(("libatomic-ops" ,libatomic-ops)
-       ("libffi" ,libffi)
-       ("libtommath" ,libtommath-1.0)
-       ("libuv" ,libuv)))
+     (list libatomic-ops libffi libtommath-1.0 libuv))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "VM for NQP And Rakudo Perl 6")
     (description
      "Short for \"Metamodel On A Runtime\", MoarVM is a modern virtual machine
@@ -149,7 +147,7 @@ with native libraries.
                        "--with-moar" (string-append moar "/bin/moar")
                        "--prefix" out)))))))
     (inputs
-     `(("moarvm" ,moarvm)))
+     (list moarvm))
     (home-page "https://github.com/perl6/nqp")
     (synopsis "Not Quite Perl")
     (description "This is \"Not Quite Perl\" -- a lightweight Perl 6-like
@@ -212,9 +210,7 @@ regular expression engine for the virtual machine.")
                   (string-append out "/bin/perl6"))))
              #t)))))
     (inputs
-     `(("moarvm" ,moarvm)
-       ("nqp" ,nqp)
-       ("openssl" ,openssl)))
+     (list moarvm nqp openssl))
     (home-page "https://rakudo.org/")
     (native-search-paths
       (list (search-path-specification
@@ -247,7 +243,7 @@ specification and runs on top of several virtual machines.")
             "0y826z3m276n7ia810hgcb3div67nxmx125m2fzlc16994zd5vm5"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-terminal-ansicolor" ,perl6-terminal-ansicolor)))
+       (list perl6-terminal-ansicolor))
       (home-page "https://github.com/jnthn/grammar-debugger")
       (synopsis "Simple tracing and debugging support for Perl 6 grammars")
       (description "This module provides a simple debugger for grammars.  Just
@@ -323,10 +319,9 @@ deserializing JSON.")
           "1zyzajc57j3m8q0nr72h9pw4w2nx92rafywlvysgphc5q9sb8np2"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-marshal" ,perl6-json-marshal)
-       ("perl6-json-unmarshal" ,perl6-json-unmarshal)))
+     (list perl6-json-marshal perl6-json-unmarshal))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/JSON-Class")
     (synopsis "Provide simple serialisation/deserialisation of objects to/from JSON")
     (description "This is a simple role that provides methods to instantiate a
@@ -378,10 +373,9 @@ but it offers a few extra features.")
           "0qy7j83h6gjzyyv74ncd92cd9h45rv8diaz3vldiv3b6fqwz4c6i"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)
-       ("perl6-json-name" ,perl6-json-name)))
+     (list perl6-json-fast perl6-json-name))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/JSON-Marshal")
     (synopsis "Simple serialisation of objects to JSON")
     (description "This library provides a single exported subroutine to create
@@ -434,8 +428,7 @@ It will of course also be needed in classes thar are going to use
           "14azsmzmwdn8k0gqcpvballharcvzylmlyrx2wmv4kpqfnz29fjc"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-json-fast" ,perl6-json-fast)
-         ("perl6-json-name" ,perl6-json-name)))
+       (list perl6-json-fast perl6-json-name))
       (home-page "https://github.com/tadzik/JSON-Unmarshal")
       (synopsis "Make JSON from an Object")
       (description "This library provides a single exported subroutine to
@@ -458,7 +451,7 @@ create an object from a JSON representation of an object.")
           "0dl263c3fbxk001gm5fisrzqz1dx182ipaa0x2qva2gxvl075xm8"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-class" ,perl6-json-class)))
+     (list perl6-json-class))
     (home-page "https://github.com/jonathanstowe/License-SPDX")
     (synopsis "Abstraction over the SPDX License List")
     (description "This provides an abstraction over the SPDX License List as
@@ -483,9 +476,9 @@ licences therein.")
           "1xnlaamfbdlfb2zidim3bbc4mawsrg6qxhxi6gbld46z1cyry1cw"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-json-class" ,perl6-json-class)))
+     (list perl6-json-class))
     (native-inputs
-     `(("perl6-json-fast" ,perl6-json-fast)))
+     (list perl6-json-fast))
     (home-page "https://github.com/jonathanstowe/META6")
     (synopsis "Do things with Perl 6 [META files]")
     (description "This provides a representation of the Perl 6 META files
@@ -568,7 +561,7 @@ monitor.  Condition variables are also supported.")
             "0mkjdhg7ajksdn61n8fqhyzfd7ly9myazsvpsm02a5c2q73hdygg"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-xml-writer" ,perl6-xml-writer)))
+       (list perl6-xml-writer))
       (home-page "https://github.com/moritz/svg")
       (synopsis "Perl 6 module to generate SVG")
       (description "This is a Perl 6 module that makes it easy to write
@@ -596,7 +589,7 @@ XML file as SVG.")
             "095ga5hbg92jnmczxvhk1hjz14yr334zyf8cph4w5w5frcza44my"))))
       (build-system rakudo-build-system)
       (propagated-inputs
-       `(("perl6-svg" ,perl6-svg)))
+       (list perl6-svg))
       (home-page "https://github.com/moritz/svg-plot")
       (synopsis "Perl 6 charting and plotting library that produces SVG output")
       (description "@code{SVG::Plot} is a simple 2D chart plotter for Perl 6.
@@ -672,8 +665,7 @@ minimal wrapper around an instance of this module.")
           "1mzrglb7lbiy5h9dlc7dyhvv9gppxmdmpmrv6nzbd695jzr38bri"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-meta6" ,perl6-meta6)
-       ("perl6-uri" ,perl6-uri)))
+     (list perl6-meta6 perl6-uri))
     (home-page "https://github.com/jonathanstowe/Test-META")
     (synopsis "Test a distributions META file")
     (description "This provides a simple mechanism for module authors to have
@@ -697,7 +689,7 @@ some confidence that they have a working distribution META description file.")
           "07yr3qimc8fl29p23562ayj2j9h53madcnf9sgqvgf2kcprh0zd2"))))
     (build-system rakudo-build-system)
     (propagated-inputs
-     `(("perl6-oo-monitors" ,perl6-oo-monitors)))
+     (list perl6-oo-monitors))
     (home-page "https://github.com/jnthn/test-mock")
     (synopsis "Module for simply generating and checking mock objects")
     (description "@code{Test::Mock} is a module that works alongside the
diff --git a/gnu/packages/phabricator.scm b/gnu/packages/phabricator.scm
index ef8a1a7475..b0d5a04a24 100644
--- a/gnu/packages/phabricator.scm
+++ b/gnu/packages/phabricator.scm
@@ -70,10 +70,7 @@
                          (find-files %output ".*\\.t?gz$"))
                #t)))))
       (inputs
-       `(("php" ,php)
-         ("git" ,git)
-         ("mercurial" ,mercurial)
-         ("subversion" ,subversion)))
+       (list php git mercurial subversion))
       (home-page "https://github.com/phacility/arcanist")
       (synopsis "Command-line interface for Phabricator")
       (description
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 6364323731..fa603a60be 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2017 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -41,6 +41,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -103,9 +104,7 @@
                 "15p7sssg6vmqbm5xnc4j5dr89d7gl7y5qyq44a240yl5aqkjnybw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("file" ,file)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list file intltool gobject-introspection))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf)
        ("gexiv2" ,gexiv2)
@@ -156,13 +155,13 @@
                                               "/bin"))
                                        ":"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (for-each
                 (lambda (program)
                   (wrap-program program
                     `("PATH" ":" prefix (,path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                    `("PYTHONPATH"             ":" prefix (,python-path))))
+                    `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
                 (map (lambda (name)
                        (string-append out "/bin/" name))
                      '("analyze-pv-structure"
@@ -187,11 +186,11 @@ cards and generate meaningful file and folder names.")
                 "18wlsvj6c1rv036ph3695kknpgzc3lk2ikgshy8417yfl8ykh2hz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)))     ;for lossy DNGs and old Kodak cameras
+     (list libjpeg-turbo))     ;for lossy DNGs and old Kodak cameras
     (propagated-inputs
-     `(("lcms" ,lcms)))                 ;for color profiles
+     (list lcms))                 ;for color profiles
     (home-page "https://www.libraw.org")
     (synopsis "Raw image decoder")
     (description
@@ -249,15 +248,12 @@ data as produced by digital cameras.")
                (base32
                 "1ms06b3dj1p33aypcb16gg5pn7fylbylsk9cnnqa0j29qiw59f7q"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libltdl" ,libltdl)
-       ("libusb" ,libusb)
-       ("libxml2" ,libxml2)))
+     (list libjpeg-turbo libltdl libusb libxml2))
     (propagated-inputs
-     `(;; The .pc refers to libexif.
-       ("libexif" ,libexif)))
+     (list ;; The .pc refers to libexif.
+           libexif))
     (home-page "http://www.gphoto.org/proj/libgphoto2/")
     (synopsis "Accessing digital cameras")
     (description
@@ -281,13 +277,9 @@ from digital cameras.")
                 "0f4d3q381jnnkcqkb2dj1k709skp65qihl5xm80zandvl69lw19h"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("readline" ,readline)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("popt" ,popt)
-       ("libexif" ,libexif)
-       ("libgphoto2" ,libgphoto2)))
+     (list readline libjpeg-turbo popt libexif libgphoto2))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -368,10 +360,7 @@ and a wide variety of other metadata.")
                 "12cv4886l1czfjwy7k6ipgf3zjksgwhdjzr2s9fdg33vqcv2hlrv"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("zlib" ,zlib)))
+     (list libjpeg-turbo libpng libtiff zlib))
     (home-page "http://panotools.sourceforge.net/")
     (synopsis "Library for panoramic images")
     (description
@@ -448,9 +437,9 @@ scene to produce an image that looks much like a tone-mapped image.")
         '(#:configure-flags '("-DBUILD_FOR_SSE=OFF" "-DBUILD_FOR_SSE2=OFF")))
        #:tests? #f)) ; There are no tests to run.
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://sourceforge.net/projects/lensfun/")
     (synopsis "Library to correct optical lens defects with a lens database")
     (description "Digital photographs are not ideal.  Of course, the better is
@@ -503,18 +492,12 @@ photographic equipment.")
              (substitute* "CMakeLists.txt"
                (("\\$\\{LLVM_INSTALL_PREFIX\\}")
                 (assoc-ref %build-inputs "clang")))))
-         (add-before 'configure 'set-LDFLAGS-and-CPATH
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+         (add-before 'configure 'set-LDFLAGS
+           (lambda* (#:key outputs #:allow-other-keys)
              (setenv "LDFLAGS"
                      (string-append
                       "-Wl,-rpath="
-                      (assoc-ref outputs "out") "/lib/darktable"))
-
-             ;; Ensure the OpenEXR headers are found.
-             (setenv "CPATH"
-                     (string-append (assoc-ref inputs "ilmbase")
-                                    "/include/OpenEXR:"
-                                    (or (getenv "CPATH") "")))))
+                      (assoc-ref outputs "out") "/lib/darktable"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
@@ -549,7 +532,7 @@ photographic equipment.")
        ("graphicsmagick" ,graphicsmagick)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
-       ("ilmbase" ,ilmbase)
+       ("imath" ,imath)
        ("iso-codes" ,iso-codes) ;optional, for language names in the preferences
        ("json-glib" ,json-glib)
        ("lcms" ,lcms)
@@ -561,14 +544,14 @@ photographic equipment.")
        ("libpng" ,libpng)
        ("librsvg" ,librsvg)
        ("libsecret" ,libsecret) ;optional, for storing passwords
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libtiff" ,libtiff)
        ("libwebp" ,libwebp) ;optional, for WebP support
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("lua" ,lua) ;optional, for plugins
        ("opencl-icd-loader" ,opencl-icd-loader) ;optional, for OpenCL support
-       ("openexr" ,openexr-2) ;optional, for EXR import/export
+       ("openexr" ,openexr) ;optional, for EXR import/export
        ("openjpeg" ,openjpeg) ;optional, for JPEG2000 export
        ("osm-gps-map" ,osm-gps-map) ;optional, for geotagging view
        ("pugixml" ,pugixml)
@@ -613,12 +596,9 @@ and enhance them.")
                        (string-append "PREFIX=" out)
                        "Photoflare.pro")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("graphicsmagick" ,graphicsmagick)
-       ("libomp" ,libomp)
-       ("qtbase" ,qtbase-5)))
+     (list graphicsmagick libomp qtbase-5))
     (home-page "https://photoflare.io")
     (synopsis "Quick, simple but powerful image editor")
     (description "Photoflare is a cross-platform image editor with an aim
@@ -645,6 +625,7 @@ such as Batch image processing.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.59                     ;fails to build with Meson 0.60
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -658,10 +639,10 @@ such as Batch image processing.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/entangle")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("cmake" ,cmake)
@@ -673,18 +654,18 @@ such as Batch image processing.")
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("gexiv2" ,gexiv2)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gstreamer" ,gstreamer)
-       ("gtk+" ,gtk+)
-       ("lcms" ,lcms)
-       ("libgphoto2" ,libgphoto2)
-       ("libgudev" ,libgudev)
-       ("libpeas" ,libpeas)
-       ("libraw" ,libraw)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)))
+     (list gdk-pixbuf
+           gexiv2
+           gst-plugins-base
+           gstreamer
+           gtk+
+           lcms
+           libgphoto2
+           libgudev
+           libpeas
+           libraw
+           python
+           python-pygobject))
     (home-page "https://entangle-photo.org/")
     (synopsis "Camera control and capture")
     (description
@@ -792,14 +773,14 @@ a complete panorama and stitch any series of overlapping pictures.")
              "-O3"
              "-DCACHE_NAME_SUFFIX=\"\"")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("expat" ,expat)
        ("fftw" ,fftwf)
        ("glib" ,glib)
        ("glibmm" ,glibmm)
        ("gtk+" ,gtk+)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("lcms" ,lcms)
        ("lensfun" ,lensfun)
        ("libcanberra" ,libcanberra)
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index 4c77eb213a..b81fae1f74 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -198,6 +198,20 @@
                                 "Zend/tests/concat_003.phpt")))
                    '())
 
+             ,@(if (target-ppc64le?)
+                   ;; Drop tests known to fail on powerpc64le.
+                   '((for-each delete-file
+                               (list
+                                ;; phpdbg watchpoints don't work.
+                                ;; Bug tracked upstream at:
+                                ;; https://bugs.php.net/bug.php?id=81408
+                                "sapi/phpdbg/tests/watch_001.phpt"
+                                "sapi/phpdbg/tests/watch_003.phpt"
+                                "sapi/phpdbg/tests/watch_004.phpt"
+                                "sapi/phpdbg/tests/watch_005.phpt"
+                                "sapi/phpdbg/tests/watch_006.phpt")))
+                   '())
+
              ;; Drop tests that are known to fail.
              (for-each delete-file
                        '("ext/posix/tests/posix_getgrgid.phpt"    ; Requires /etc/group.
@@ -327,7 +341,9 @@
                          ;; Expects an empty Array; gets one with " " in it.
                          "ext/pcre/tests/bug80118.phpt"
                          ;; Renicing a process fails in the build environment.
-                         "ext/standard/tests/general_functions/proc_nice_basic.phpt"))
+                         "ext/standard/tests/general_functions/proc_nice_basic.phpt"
+                         ;; Can fail on fast machines?
+                         "Zend/tests/bug74093.phpt"))
 
              ;; Accomodate two extra openssl errors flanking the expected one:
              ;; random number generator:RAND_{load,write}_file:Cannot open file
diff --git a/gnu/packages/piet.scm b/gnu/packages/piet.scm
index a09c05d990..824efe59de 100644
--- a/gnu/packages/piet.scm
+++ b/gnu/packages/piet.scm
@@ -52,11 +52,8 @@
                  `("PATH" ":" prefix (,(dirname (which "wish")))))
                #t))))))
     (inputs
-     `(("gd" ,gd)
-       ("giflib" ,giflib)
-       ("libpng" ,libpng)
-       ("tk" ,tk)))
-    (native-inputs `(("groff" ,groff)))
+     (list gd giflib libpng tk))
+    (native-inputs (list groff))
     (synopsis "Piet interpreter")
     (description
      "Npiet is an interpreter for the Piet programming language.  Instead of
@@ -151,11 +148,9 @@ an Algol-like language
                    #t)))))))
       (native-inputs
        ;; For our tests.
-       `(("netpbm" ,netpbm)
-         ("npiet" ,npiet)))
+       (list netpbm npiet))
       (inputs
-       `(("perl" ,perl)
-         ("perl-parse-recdescent" ,perl-parse-recdescent)))
+       (list perl perl-parse-recdescent))
       (home-page "https://www.toothycat.net/wiki/wiki.pl?MoonShadow/Piet")
       (synopsis "Piet compiler and assembler")
       (description
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
index 9c632532be..770426d779 100644
--- a/gnu/packages/pkg-config.scm
+++ b/gnu/packages/pkg-config.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,8 +22,10 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (gnu packages bash)
   #:use-module (guix memoization)
   #:export (pkg-config))
 
@@ -130,3 +133,37 @@ build, or a GNU triplet."
 ;; environment or not.
 (define-syntax pkg-config
   (identifier-syntax (pkg-config-for-target (%current-target-system))))
+
+;; This hack allows for using both "pkg-config" and "TARGET-pkg-config"
+;; at the same time.  Simply using '%pkg-config' and 'pkg-config' won't
+;; work because they both use the "PKG_CONFIG_PATH" environment variable.
+(define-public pkg-config-for-build
+  (package
+    (inherit (hidden-package %pkg-config))
+    (name "pkg-config-for-build")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (inputs
+     (list bash-minimal %pkg-config))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       ,#~(begin
+            (use-modules (guix build utils))
+            (define where (string-append #$output "/bin/pkg-config"))
+            (mkdir-p (dirname where))
+            (call-with-output-file where
+              (lambda (port)
+                (format port "#!~a
+export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH_FOR_BUILD\"
+exec ~a \"$@\""
+                        (search-input-file %build-inputs "bin/bash")
+                        (search-input-file %build-inputs "bin/pkg-config"))))
+            (chmod where #o500))))
+    (native-search-paths
+     (map (lambda (original)
+            (search-path-specification
+             (inherit original)
+             (variable "PKG_CONFIG_PATH_FOR_BUILD")))
+          (package-native-search-paths %pkg-config)))))
diff --git a/gnu/packages/plan9.scm b/gnu/packages/plan9.scm
index e306e04d85..73694c4ed3 100644
--- a/gnu/packages/plan9.scm
+++ b/gnu/packages/plan9.scm
@@ -55,8 +55,7 @@
                  (install-file "drawterm" bin)
                  (install-file "drawterm.1" man)))))))
       (inputs
-       `(("libx11" ,libx11)
-         ("libxt" ,libxt)))
+       (list libx11 libxt))
       (synopsis "Connect to Plan 9 systems")
       (home-page "http://drawterm.9front.org")
       (description
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 7a26c632f7..415d7ad2a5 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -22,6 +22,8 @@
 
 (define-module (gnu packages plotutils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
+  #:use-module ((guix utils) #:select (target-x86-32?))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -83,11 +85,28 @@
               (search-patches "plotutils-spline-test.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-libplotter")))
-    (inputs `(("libpng" ,libpng)
-              ("libx11" ,libx11)
-              ("libxt" ,libxt)
-              ("libxaw" ,libxaw)))
+     (list #:configure-flags
+           #~(list "--enable-libplotter"
+
+                   ;; On i686 some tests fail due to excess floating point
+                   ;; precision; work around it.  However, libplotter is C++
+                   ;; and thus unaffected by CFLAGS, but '-fexcess-precision'
+                   ;; is not implemented for C++ as of GCC 10.
+                   #$@(if (target-x86-32?)
+                          #~("CFLAGS=-g -O2 -fexcess-precision=standard")
+                          #~()))
+
+           #:phases
+           (if (target-x86-32?)
+               #~(modify-phases %standard-phases
+                   (add-before 'check 'skip-sloppy-test
+                     (lambda _
+                       ;; This test reveals a slight difference in the SVG
+                       ;; output due to floating point inequalities.  Skip it.
+                       (substitute* "test/plot2svg.test"
+                         (("^exit .*") "exit 77")))))
+               #~%standard-phases)))
+    (inputs (list libpng libx11 libxt libxaw))
     (home-page "https://www.gnu.org/software/plotutils/")
     (synopsis "Plotting utilities and library")
     (description
@@ -117,12 +136,9 @@ programs for plotting scientific data.")
                   "03049g7wnpyfi0r36ij4a46kc9l45jbanx02iklkjwav2n6jqnnk"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
-      (inputs `(("guile" ,guile-3.0)))
-      (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+       (list autoconf automake texinfo pkg-config))
+      (inputs (list guile-3.0))
+      (propagated-inputs (list guile-cairo))
       (home-page "http://wingolog.org/projects/guile-charting/")
       (synopsis "Create charts and graphs in Guile")
       (description
@@ -134,8 +150,8 @@ using the Cairo drawing library.")
   (package
     (inherit guile-charting)
     (name "guile2.2-charting")
-    (inputs `(("guile" ,guile-2.2)))
-    (propagated-inputs `(("guile-cairo" ,guile2.2-cairo)))))
+    (inputs (list guile-2.2))
+    (propagated-inputs (list guile2.2-cairo))))
 
 (define-public ploticus
   (package
@@ -187,9 +203,7 @@ using the Cairo drawing library.")
                         (wrap-program (string-append bin "/pl")
                           `("PLOTICUS_PREFABS" ":" = (,dir)))))))))
     (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("zlib" ,zlib)))
+     (list libpng libx11 zlib))
     (home-page "http://ploticus.sourceforge.net/")
     (synopsis "Command-line tool for producing plots and charts")
     (description
@@ -221,28 +235,36 @@ colors, styles, options and details.")
        ("perl" ,perl)
        ("texinfo" ,texinfo)             ;For generating documentation
        ;; For the manual and the tests.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-epsf
-                                        texlive-etoolbox
-                                        texlive-latex-base
-                                        texlive-latex-geometry
-                                        texlive-latex-graphics
-                                        texlive-latex-oberdiek ; for ifluatex
-                                        texlive-latex-parskip
-                                        texlive-tex-texinfo)))))
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-amsfonts
+                          texlive-dvips-l3backend
+                          texlive-epsf
+                          texlive-etoolbox
+                          texlive-fonts-ec
+                          texlive-generic-infwarerr
+                          texlive-generic-kvdefinekeys
+                          texlive-grfext
+                          texlive-latex-base
+                          texlive-latex-geometry
+                          texlive-latex-graphics
+                          texlive-latex-kvoptions
+                          texlive-latex-pdftexcmds
+                          texlive-oberdiek ;for ifluatex
+                          texlive-latex-parskip
+                          texlive-tex-texinfo)))))
     (inputs
-     `(("fftw" ,fftw)
-       ("freeglut" ,freeglut)
-       ("glew" ,glew)
-       ("glm" ,glm)
-       ("gsl" ,gsl)
-       ("libgc" ,libgc)
-       ("python" ,python)
-       ("python-cson" ,python-cson)
-       ("python-numpy" ,python-numpy)
-       ("python-pyqt" ,python-pyqt)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list fftw
+           freeglut
+           glew
+           glm
+           gsl
+           libgc
+           python
+           python-cson
+           python-numpy
+           python-pyqt
+           readline
+           zlib))
     (arguments
      `(#:modules ((guix build emacs-utils)
                   (guix build gnu-build-system)
@@ -303,9 +325,9 @@ colors, styles, options and details.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'xasy' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/asymptote/GUI/xasy.py")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (home-page "http://asymptote.sourceforge.net")
     (synopsis "Script-based vector graphics language")
diff --git a/gnu/packages/poedit.scm b/gnu/packages/poedit.scm
index 3487636a3d..fd8ed06c83 100644
--- a/gnu/packages/poedit.scm
+++ b/gnu/packages/poedit.scm
@@ -60,19 +60,16 @@
                             (assoc-ref %build-inputs "boost")
                             "/lib"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext-minimal" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("enchant" ,enchant)
-       ("gtk+" ,gtk+)
-       ("gtkspell3" ,gtkspell3)
-       ("icu4c" ,icu4c)
-       ("lucene++" ,lucene++)
-       ("pugixml" ,pugixml)
-       ("wxwidgets" ,wxwidgets)))
+     (list boost
+           enchant
+           gtk+
+           gtkspell3
+           icu4c
+           lucene++
+           pugixml
+           wxwidgets))
     (home-page "https://poedit.net/")
     (synopsis "Gettext catalog editing tool")
     (description "Poedit is a GUI frontend to the GNU gettext utilities and
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index f495d51c83..e4f4b1276f 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -1,11 +1,14 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,25 +29,31 @@
   #:use-module ((guix licenses) #:select (lgpl2.0+))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix memoization)
+  #:use-module (guix utils)
+  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages javascript)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:export (polkit))
 
-(define-public polkit
+(define-public polkit-mozjs
   (package
     (name "polkit")
-    (version "0.116")
-    (replacement polkit/fixed)
+    (version "0.120")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -52,7 +61,8 @@
                    name "-" version ".tar.gz"))
              (sha256
               (base32
-               "1c9lbpndh5zis22f154vjrhnqw65z8s85nrgl42v738yf6g0q5w8"))
+               "00zfg9b9ivkcj2jcf5b92cpvvyljz8cmfwj86lkvy5rihnd5jypf"))
+             (patches (search-patches "polkit-configure-elogind.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -61,47 +71,41 @@
                  (substitute* "test/Makefile.in"
                    (("SUBDIRS = mocklibc . polkit polkitbackend")
                     "SUBDIRS = mocklibc . polkit"))
-                 (substitute* "configure"
-                   ;; Replace libsystemd-login with libelogind.
-                   (("libsystemd-login") "libelogind")
-                   ;; Skip the sanity check that the current system runs
-                   ;; systemd.
-                   (("test ! -d /sys/fs/cgroup/systemd/") "false"))
-                 (substitute* "src/polkit/polkitunixsession-systemd.c"
-                   (("systemd") "elogind"))
-                 (substitute* "src/polkitbackend/polkitbackendsessionmonitor-systemd.c"
-                   (("systemd") "elogind"))
-                 (substitute* "src/polkitbackend/polkitbackendjsauthority.cpp"
-                   (("systemd") "elogind"))
-
-                 ;; Guix System's polkit service stores actions under
-                 ;; /etc/polkit-1/actions.
+                 ;; Disable a test that requires Python, D-Bus and a few
+                 ;; libraries and fails with "ERROR: timed out waiting for bus
+                 ;; process to terminate".
+                 (substitute* "test/polkitbackend/Makefile.am"
+                   (("TEST_PROGS \\+= polkitbackendjsauthoritytest-wrapper.py")
+                    ""))
+                 ;; Guix System's polkit
+                 ;; service stores actions under /etc/polkit-1/actions.
                  (substitute* "src/polkitbackend/polkitbackendinteractiveauthority.c"
                    (("PACKAGE_DATA_DIR \"/polkit-1/actions\"")
                     "PACKAGE_SYSCONF_DIR \"/polkit-1/actions\""))
-
                  ;; Set the setuid helper's real location.
                  (substitute* "src/polkitagent/polkitagentsession.c"
                    (("PACKAGE_PREFIX \"/lib/polkit-1/polkit-agent-helper-1\"")
-                    "\"/run/setuid-programs/polkit-agent-helper-1\""))
-                 #t))))
+                    "\"/run/setuid-programs/polkit-agent-helper-1\""))))))
     (build-system gnu-build-system)
     (inputs
-     `(("expat" ,expat)
-       ("linux-pam" ,linux-pam)
-       ("elogind" ,elogind)
-       ("mozjs" ,mozjs-60)
-       ("nspr" ,nspr)))
+     (list expat linux-pam elogind mozjs-78 nspr))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by polkit-gobject-1.pc
+     (list glib)) ; required by polkit-gobject-1.pc
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("glib:bin" ,glib "bin") ; for glib-mkenums
        ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+       ("gobject-introspection" ,gobject-introspection)
+       ("libxslt" ,libxslt) ; for man page generation
+       ("docbook-xsl" ,docbook-xsl))) ; for man page generation
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
-                           "--enable-man-pages")
+                           "--enable-man-pages"
+                           ;; Prevent ‘configure: error: cannot check for
+                           ;; file existence when cross compiling’.
+                           ,@(if (%current-target-system)
+                                 '("--with-os-type=unknown")
+                                 '()))
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -112,8 +116,15 @@
                 (("@INTROSPECTION_GIRDIR@")
                  (string-append out "/share/gir-1.0/"))
                 (("@INTROSPECTION_TYPELIBDIR@")
-                 (string-append out "/lib/girepository-1.0/")))
-              #t)))
+                 (string-append out "/lib/girepository-1.0/"))))))
+         (add-after 'unpack 'fix-manpage-generation
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((xsldoc (string-append (assoc-ref inputs "docbook-xsl")
+                                          "/xml/xsl/docbook-xsl-"
+                                          ,(package-version docbook-xsl))))
+               (substitute* '("docs/man/Makefile.am" "docs/man/Makefile.in")
+                 (("http://docbook.sourceforge.net/release/xsl/current")
+                  xsldoc)))))
          (replace
           'install
           (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
@@ -125,8 +136,7 @@
                            (string-append "sysconfdir=" out "/etc")
                            (string-append "polkit_actiondir="
                                           out "/share/polkit-1/actions")
-                           make-flags)
-             #t))))))
+                           make-flags)))))))
     (home-page "https://www.freedesktop.org/wiki/Software/polkit/")
     (synopsis "Authorization API for privilege management")
     (description "Polkit is an application-level toolkit for defining and
@@ -136,12 +146,52 @@ making process with respect to granting access to privileged operations
 for unprivileged applications.")
     (license lgpl2.0+)))
 
-(define polkit/fixed
-  (package
-    (inherit polkit)
-    (source (origin
-              (inherit (package-source polkit))
-              (patches (search-patches "polkit-CVE-2021-3560.patch"))))))
+;;; Variant of polkit built with Duktape, a lighter JavaScript engine compared
+;;; to mozjs.
+(define-public polkit-duktape
+  (let ((base polkit-mozjs))
+    (package/inherit base
+      (name "polkit-duktape")
+      (source
+       (origin
+         (inherit (package-source base))
+         (patches
+          (append
+              (search-patches "polkit-use-duktape.patch")
+              (origin-patches (package-source base))))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:configure-flags flags)
+          `(cons "--with-duktape" ,flags))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'force-gnu-build-system-bootstrap
+               (lambda _
+                 (delete-file "configure")))))))
+      (native-inputs
+       (append `(("autoconf" ,autoconf)
+                 ("automake" ,automake)
+                 ("libtool" ,libtool)
+                 ("pkg-config" ,pkg-config))
+           (package-native-inputs base)))
+      (inputs (alist-replace "mozjs" `(,duktape)
+                             (package-inputs base))))))
+
+(define polkit-for-system
+  (mlambda (system)
+    "Return a polkit package that can be built for SYSTEM; that is, either the
+regular polkit that requires mozjs or its duktape variant."
+    (if (string-prefix? "x86_64" system)
+        polkit-mozjs
+        polkit-duktape)))
+
+;;; Define a top level polkit variable that can be built on any of the
+;;; supported platforms.  This is to work around the fact that our
+;;; mrustc-bootstrapped rust toolchain currently only supports the x86_64
+;;; architecture.
+(define-syntax polkit
+  (identifier-syntax (polkit-for-system
+                      (or (%current-target-system) (%current-system)))))
 
 (define-public polkit-qt
   (package
@@ -157,11 +207,11 @@ for unprivileged applications.")
                "1ip78x20hjqvm08kxhp6gb8hf6k5n6sxyx6kk2yvvq53djzh7yv7"))))
     (build-system cmake-build-system)
     (inputs
-     `(("polkit" ,polkit)))
+     (list polkit))
     (propagated-inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags (list (string-append "-DCMAKE_INSTALL_RPATH="
                                               (assoc-ref %outputs "out")
@@ -190,10 +240,8 @@ easily with PolicyKit.")
                (base32
                 "0sckmcbxyj6sbrnfc5p5lnw27ccghsid6v6wxq09mgxqcd4lk10p"))))
     (build-system gnu-build-system)
-    (inputs `(("gtk+" ,gtk+)
-              ("polkit" ,polkit)))
-    (native-inputs `(("intltool"   ,intltool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list gtk+ polkit))
+    (native-inputs (list intltool pkg-config))
     (synopsis "Legacy polkit authentication agent for GNOME")
     (description "PolicyKit-gnome provides a D-Bus session bus service
 that is used to bring up authentication dialogs used for obtaining
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index 1c325e0c3d..16ff2c3448 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -141,7 +141,7 @@ appropriately.")
      `(#:parallel-build? #f             ; not supported
        #:parallel-tests? #f))           ; likewise
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (synopsis "Create parsers for command line options")
     (description
      "GNU Gengetopt is a program to generate a C/C++ function for parsing
diff --git a/gnu/packages/presentation.scm b/gnu/packages/presentation.scm
index 0ad407d36c..1601ba7f2a 100644
--- a/gnu/packages/presentation.scm
+++ b/gnu/packages/presentation.scm
@@ -62,25 +62,24 @@
                      `("PATH" ":" prefix (,(dirname (which "cowsay"))
                                           ,(dirname (which "figlet"))
                                           ,(dirname (which "jp2a"))))
-                     `("PYTHONPATH" prefix
+                     `("GUIX_PYTHONPATH" prefix
                        ,(cons (string-append out "/lib/python"
                                              (python-version python)
                                              "/site-packages")
                               (search-path-as-string->list
-                                (or (getenv "PYTHONPATH") ""))))))
+                                (or (getenv "GUIX_PYTHONPATH") ""))))))
                  '("presentty" "presentty-console")))
              #t)))))
     (inputs
-     `(("cowsay" ,cowsay)
-       ("figlet" ,figlet)
-       ("jp2a" ,jp2a)
-       ("python-docutils" ,python-docutils)
-       ("python-pillow" ,python-pillow-2.9)
-       ("python-six" ,python-six)
-       ("python-urwid" ,python-urwid)))
+     (list cowsay
+           figlet
+           jp2a
+           python-docutils
+           python-pillow-2.9
+           python-six
+           python-urwid))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pygments" ,python-pygments)))
+     (list python-pbr python-pygments))
     (home-page "http://git.inaugust.com/cgit/presentty/")
     (synopsis "Console-based presentation system")
     (description "Presentty is a console-based presentation program where slides
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 728f00f16e..05960f6f48 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
 ;;; Copyright © 2020 Paul Garlick <pgarlick@tourbillion-technology.com>
@@ -72,12 +72,9 @@
                         "a2ps-CVE-2015-8107.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("psutils" ,psutils)
-       ("gv" ,gv)))
+     (list psutils gv))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("groff" ,groff)
-       ("perl" ,perl)))
+     (list gperf groff perl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -180,7 +177,7 @@ different programming languages.")
     (arguments
      '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://fmt.dev")
     (synopsis "Small and fast C++ formatting library")
     (description
@@ -228,8 +225,7 @@ to @code{IOStreams}.")
              (let ((gcc (assoc-ref inputs "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
@@ -241,7 +237,7 @@ to @code{IOStreams}.")
                        (getenv "CPLUS_INCLUDE_PATH"))))))))
     (properties `((hidden? . #true)))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
      `(("libcxx" ,libcxx+libcxxabi-6)
        ("libcxxabi" ,libcxxabi-6)
@@ -263,10 +259,9 @@ to @code{IOStreams}.")
     ;; The ctags that comes with emacs does not support the --excmd options,
     ;; so can't be used
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-boost="
@@ -359,12 +354,9 @@ seen in a terminal.")
                  (install-file "highlight.so" autodir))
                #t))))))
     (inputs
-     `(("lua" ,lua)
-       ("boost" ,boost)
-       ("perl" ,perl)))
+     (list lua boost perl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("swig" ,swig)))
+     (list pkg-config swig))
     (home-page "http://www.andre-simon.de/doku/highlight/en/highlight.php")
     (synopsis "Convert code to documents with syntax highlighting")
     (description "Highlight converts source code to HTML, XHTML, RTF, LaTeX,
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm
index b4d52d8d85..3cfe89d963 100644
--- a/gnu/packages/profiling.scm
+++ b/gnu/packages/profiling.scm
@@ -57,14 +57,11 @@
        (sha256 (base32 "1m62s8fkjjgq04ayf18jcxc33rqfd7nrkdw1gr54q5pn4cijrp29"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("lm-sensors" ,lm-sensors "lib")
-       ("rdma-core" ,rdma-core)
-       ("infiniband-diags" ,infiniband-diags "lib")
-       ("net-tools" ,net-tools)))
+     (list ncurses
+           `(,lm-sensors "lib") rdma-core
+           `(,infiniband-diags "lib") net-tools))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gfortran" ,gfortran)))
+     (list autoconf gfortran))
     (arguments
      `(#:tests? #f ; no check target
        #:configure-flags
@@ -147,7 +144,7 @@ performance measurement opportunites across the hardware and software stack.")
        (uri (string-append "http://www.vi-hps.org/upload/packages/otf2/otf2-"
                            version ".tar.gz"))
        (sha256 (base32 "1ls7rz6qwnqbkifpafc95bnfh3m9xbs74in8zxlnhfbgwx11nn81"))))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (outputs '("doc"                              ; 18MB
                "lib"
                "out"))
@@ -182,9 +179,9 @@ memory-efficient event trace data format plus support library.")
        (sha256
         (base32 "1xaf25lcxk4ky1kzfks40ja9mayh8pnmrzch2107c8dcjrsxsd4h"))))
     (build-system gnu-build-system)
-    (inputs `(("gfortran" ,gfortran)))
-    (native-inputs `(("gawk" ,gawk)     ; for tests
-                     ("which" ,which)))
+    (inputs (list gfortran))
+    (native-inputs (list gawk ; for tests
+                         which))
     (home-page "https://www.vi-hps.org/projects/score-p")
     (synopsis "OpenMP runtime performance measurement instrumenter")
     (description "OPARI2 is a source-to-source instrumentation tool for OpenMP
@@ -204,11 +201,9 @@ with calls to the POMP2 measurement interface.")
              version ".tar.gz"))
        (sha256 (base32 "04irflia4rfw02093w9nx7rr98r640y4q8hisjywvd4b7r3nzhhx"))
        (patches (search-patches "cube-nocheck.patch"))))
-    (inputs `(("dbus" ,dbus)
-              ("zlib" ,zlib)))
-    (native-inputs `(("perl" ,perl)
-                     ("qtbase" ,qtbase-5)           ; native because of qmake
-                     ("which" ,which)))
+    (inputs (list dbus zlib))
+    (native-inputs (list perl qtbase-5 ; native because of qmake
+                         which))
 
     ;; FIXME: The doc is 14MB, but adding a doc output results in a cycle.
     (outputs '("out"                              ;"doc"
@@ -354,13 +349,13 @@ different kinds of performance behavior.")
        ("openmpi" ,openmpi)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("flex" ,flex)
-       ("cube" ,cube)                             ;for cube-config
-       ("bison" ,bison)
-       ("python" ,python)
-       ("doxygen" ,doxygen)
-       ("which" ,which)))
+     (list gfortran
+           flex
+           cube ;for cube-config
+           bison
+           python
+           doxygen
+           which))
     (arguments
      `(#:configure-flags
        (list "--enable-shared" "--disable-static"
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index 27f4f83f83..b08c049717 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -60,9 +60,9 @@
          "1i9y8a1712aj80p5a1kcp378bnjrg3s2127q7304hklhmjcrjl1d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://github.com/farsightsec/fstrm")
     (synopsis "Implementation of the Frame Streams data transport protocol")
     (description
@@ -95,7 +95,7 @@ data in motion, or as a file format for data at rest.")
                (base32
                 "1jzqrklhj9grs6xbddyb5dyxfbgbgbyhl5zig8ml50wb22gwkkji"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (outputs (list "out"
                    "static"))           ; ~12 MiB of .a files
     (arguments
@@ -195,8 +195,8 @@ internal RPC protocols and file formats.")
                (base32
                 "0y3yaanq97si7iyld06p8w20m0shpj7sf4xwzbhhvijhxw36d592"))))
     (build-system gnu-build-system)
-    (inputs `(("protobuf" ,protobuf)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list protobuf))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/protobuf-c/protobuf-c")
     (synopsis "Protocol Buffers implementation in C")
     (description
@@ -243,9 +243,9 @@ encoder in C++.  The developer using protozero has to manually translate the
          "0mj6z58aiw532s1mq48m9xdrm3gdyp2vv9cdinfb5wmnfpm5m7n9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-wheel" ,python-wheel)))
+     (list python-wheel))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/google/protobuf")
     (synopsis "Protocol buffers is a data interchange format")
     (description
@@ -269,33 +269,17 @@ mechanism for serializing structured data.")
         (base32 "15dp5pvazd0jx4wzzh79080ah7hkpd3axh40al9vhzs2hf3v90hx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-isort" ,python-isort)))
+     (list python-flake8 python-pytest python-pytest-cov python-isort))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'setup-test-env
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (py3sitedir
-                     (string-append out "/lib/python"
-                                    ,(version-major+minor
-                                      (package-version python))
-                                    "/site-packages")))
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH"))))
-             #t))
          (replace 'check
            (lambda _
              (invoke "pytest" "--cov-report" "term-missing" "--cov"
                      "pure_protobuf")
              (invoke "flake8" "pure_protobuf" "tests"
                      "--ignore=F541")
-             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests")
-             #t)))))
+             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests"))))))
     (home-page "https://pypi.org/project/pure-protobuf/")
     (synopsis "Protobuf implementation using dataclasses")
     (description
@@ -398,26 +382,23 @@ source files.")
            (lambda _
              (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-benchmark-ips" ,ruby-benchmark-ips)
-       ("ruby-ffi-rzmq" ,ruby-ffi-rzmq)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-pry-byebug" ,ruby-pry-byebug)
-       ("ruby-pry-stack-explorer" ,ruby-pry-stack-explorer)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-ruby-prof" ,ruby-ruby-prof)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-timecop" ,ruby-timecop)
-       ("ruby-varint" ,ruby-varint)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-benchmark-ips
+           ruby-ffi-rzmq
+           ruby-parser
+           ruby-pry-byebug
+           ruby-pry-stack-explorer
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-ruby-prof
+           ruby-simplecov
+           ruby-timecop
+           ruby-varint
+           ruby-yard))
     (inputs
-     `(("protobuf" ,protobuf)))
+     (list protobuf))
     (propagated-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-middleware" ,ruby-middleware)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-thread-safe" ,ruby-thread-safe)))
+     (list ruby-activesupport ruby-middleware ruby-thor ruby-thread-safe))
     (home-page "https://github.com/ruby-protobuf/protobuf")
     (synopsis "Implementation of Google's Protocol Buffers in Ruby")
     (description "Protobuf is an implementation of Google's Protocol Buffers
diff --git a/gnu/packages/pth.scm b/gnu/packages/pth.scm
index 1908ce7763..8efede068c 100644
--- a/gnu/packages/pth.scm
+++ b/gnu/packages/pth.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages pth)
+  #:use-module (gnu packages autotools)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -38,12 +40,20 @@
         "0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:parallel-build? #f
-       #:configure-flags (list 
-                           ,@(if (string=? "aarch64-linux"
-                                           (%current-system))
-                               '("--host=aarch64-unknown-linux-gnu")
-                               '()))))
+     '(#:parallel-build? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'update-config-scripts
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             ;; Replace outdated config.guess and config.sub.
+             (for-each (lambda (file)
+                         (install-file
+                          (search-input-file
+                           (or native-inputs inputs)
+                           (string-append "/bin/" file)) "."))
+                       '("config.guess" "config.sub")))))))
+    (native-inputs
+     (list config))
     (home-page "https://www.gnu.org/software/pth/")
     (synopsis "Portable thread library")
     (description
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 060a0613ec..5cda29789f 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,7 +50,9 @@
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages dbm)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
@@ -99,13 +102,10 @@
                    (("^/usr/bin/env") "env"))
                  #t))))
     (build-system gnu-build-system)
-    (inputs
-     `(("libvorbis" ,libvorbis)
-       ("libogg" ,libogg)
-       ("flac" ,flac)))
+    (propagated-inputs
+     (list flac libogg libvorbis opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "http://www.mega-nerd.com/libsndfile/")
     (synopsis "Reading and writing files containing sampled sound")
     (description
@@ -127,10 +127,7 @@ for reading and writing new sound file formats.")
     (inherit libsndfile)
     (inputs '())
     (propagated-inputs
-     `(("libvorbis" ,libvorbis)
-       ("libogg" ,libogg)
-       ("flac" ,flac)
-       ("opus" ,opus)))))
+     (list libvorbis libogg flac opus))))
 
 (define-public libsamplerate
   (package
@@ -145,11 +142,9 @@ for reading and writing new sound file formats.")
                "1ha46i0nbibq0pl0pjwcqiyny4hj8lp1bnl4dpxm64zjw9lb2zha"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake))) ;For up to date 'config.guess' and 'config.sub'.
+     (list pkg-config automake)) ;For up to date 'config.guess' and 'config.sub'.
     (propagated-inputs
-     `(("libsndfile" ,libsndfile)
-       ("fftw" ,fftw)))
+     (list libsndfile fftw))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -191,7 +186,7 @@ rates.")
 (define-public pulseaudio
   (package
     (name "pulseaudio")
-    (version "14.0")
+    (version "15.0")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -199,7 +194,7 @@ rates.")
                    name "-" version ".tar.xz"))
              (sha256
               (base32
-               "0qf20rgg0ysrnvg3359j56ndls07qmfn5rsy9r85bc42jdfpfd58"))
+               "1851rg4h6sjwanvd294hn52z321rc6vbs4gbfrlw53597dx8h2x4"))
              (modules '((guix build utils)))
              (snippet
               ;; Disable console-kit support by default since it's deprecated
@@ -212,14 +207,19 @@ rates.")
              (patches (search-patches
                        "pulseaudio-fix-mult-test.patch"
                        "pulseaudio-longer-test-timeout.patch"))))
-    (build-system gnu-build-system)
+    (build-system meson-build-system)
     (arguments
-     `(#:configure-flags (list "--localstatedir=/var" ;"--sysconfdir=/etc"
-                               "--disable-oss-output"
-                               "--enable-bluez5"
-                               (string-append "--with-udev-rules-dir="
-                                              (assoc-ref %outputs "out")
-                                              "/lib/udev/rules.d"))
+     `(#:configure-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list "-Doss-output=disabled"
+               "-Dlocalstatedir=/var"
+               (string-append "-Dudevrulesdir="
+                              out "/lib/udev/rules.d")
+               ;; Ensure the RUNPATH contains all installed library locations.
+               (string-append "-Dc_link_args=-Wl,-rpath="
+                              out "/lib/pulseaudio:"
+                              out "/lib:"
+                              out "/lib/pulse-" ,version "/modules")))
        #:phases (modify-phases %standard-phases
                  (add-before 'check 'pre-check
                    (lambda _
@@ -231,28 +231,28 @@ rates.")
                      (setenv "CK_DEFAULT_TIMEOUT" "120")
                      #t)))))
     (inputs
-     ;; TODO: Add optional inputs (GTK+?).
-     `(("alsa-lib" ,alsa-lib)
-       ("bluez" ,bluez)
-       ("sbc" ,sbc)
-       ("speexdsp" ,speexdsp)
-       ("libsndfile" ,libsndfile)
-       ("jack" ,jack-1) ; For routing the output to jack.
-       ("dbus" ,dbus)
-       ("glib" ,glib)
-       ("libltdl" ,libltdl)
-       ("fftwf" ,fftwf)
-       ("avahi" ,avahi)
-
-       ;; For the optional X11 modules.
-       ("libice" ,libice)
-       ("libsm" ,libsm)
-       ("libxcb" ,libxcb)
-       ("libxtst" ,libxtst)
-
-       ("eudev" ,eudev)))         ;for the detection of hardware audio devices
+     (list alsa-lib
+           bluez
+           sbc
+           speexdsp
+           libsndfile
+           jack-1 ; For routing the output to jack.
+           dbus
+           glib
+           libltdl
+           fftwf
+           avahi
+           webrtc-audio-processing
+           ;; For the optional X11 modules.
+           libice
+           libsm
+           libxcb
+           libxtst
+           elogind
+           eudev))         ;for the detection of hardware audio devices
     (native-inputs
      `(("check" ,check)
+       ("doxygen" ,doxygen)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("m4" ,m4)
@@ -260,9 +260,8 @@ rates.")
        ("perl-xml-parser" ,perl-xml-parser)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     ;; 'libpulse*.la' contain `-lgdbm' and `-lcap', so propagate them.
-     `(("libcap" ,libcap)
-       ("gdbm" ,gdbm)))
+     ;; 'libpulse*.la' contain `-ltdb' and `-lcap', so propagate them.
+     (list libcap tdb))
     (home-page "http://www.pulseaudio.org/")
     (synopsis "Sound server")
     (description
@@ -293,14 +292,13 @@ sound server.")
                "0yjfiwpaydh5s8v3l78dhwhbsmcl1xsq3p8rvz80m9zinp1p4ayf"))))
     (build-system glib-or-gtk-build-system)
     (inputs
-     `(("adwaita-icon-theme" ,adwaita-icon-theme)          ;hard-coded theme
-       ("gtkmm" ,gtkmm)
-       ("json-glib" ,json-glib)
-       ("libcanberra" ,libcanberra)
-       ("pulseaudio" ,pulseaudio)))
+     (list adwaita-icon-theme ;hard-coded theme
+           gtkmm-3
+           json-glib
+           libcanberra
+           pulseaudio))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (home-page "https://www.freedesktop.org/software/pulseaudio/pavucontrol/")
     (synopsis "PulseAudio volume control")
     (description
@@ -335,9 +333,9 @@ easily control the volume of all clients, sinks, etc.")
                (("/usr") ""))))
          (delete 'configure)))) ; There's no configure phase.
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/falconindy/ponymix")
     (synopsis "Console-based PulseAudio mixer")
     (description "Ponymix is a PulseAudio mixer and volume controller with a
@@ -370,7 +368,7 @@ sinks.")
                   (string-append pulse "/lib/libpulse.so.0")))
                #t))))))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://github.com/GeorgeFilipkin/pulsemixer/")
     (synopsis "Command-line and curses mixer for PulseAudio")
     (description "Pulsemixer is a PulseAudio mixer with command-line and
@@ -397,20 +395,20 @@ curses-style interfaces.")
       (build-system python-build-system)
       (arguments `(#:python ,python-2))
       (inputs
-       `(("python2-chardet" ,python2-chardet)
-         ("python2-dbus" ,python2-dbus)
-         ("python2-docopt" ,python2-docopt)
-         ("python2-futures" ,python2-futures)
-         ("python2-pygobject" ,python2-pygobject)
-         ("python2-lxml" ,python2-lxml)
-         ("python2-netifaces" ,python2-netifaces)
-         ("python2-notify2" ,python2-notify2)
-         ("python2-protobuf" ,python2-protobuf)
-         ("python2-psutil" ,python2-psutil)
-         ("python2-requests" ,python2-requests)
-         ("python2-pyroute2" ,python2-pyroute2)
-         ("python2-setproctitle" ,python2-setproctitle)
-         ("python2-zeroconf" ,python2-zeroconf)))
+       (list python2-chardet
+             python2-dbus
+             python2-docopt
+             python2-futures
+             python2-pygobject
+             python2-lxml
+             python2-netifaces
+             python2-notify2
+             python2-protobuf
+             python2-psutil
+             python2-requests
+             python2-pyroute2
+             python2-setproctitle
+             python2-zeroconf))
       (home-page "https://github.com/masmu/pulseaudio-dlna")
       (synopsis "Stream audio to DLNA/UPnP and Chromecast devices")
       (description "This lightweight streaming server brings DLNA/UPnP and
@@ -454,8 +452,7 @@ install one or more of the following packages alongside pulseaudio-dlna:
            (lambda _
              (mkdir-p (string-append (assoc-ref %outputs "out") "/bin")))))))
     (inputs
-     `(("boost" ,boost)
-       ("pulseaudio" ,pulseaudio)))
+     (list boost pulseaudio))
     (home-page "https://github.com/cdemoulins/pamixer")
     (synopsis "PulseAudio command line mixer")
     (description
@@ -486,15 +483,9 @@ volume levels of the sinks (get, set, decrease, increase, toggle mute, etc).")
              (delete-file "bootstrap.sh")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("avahi" ,avahi)
-       ("gtk+" ,gtk+)
-       ("libnotify" ,libnotify)
-       ("libx11" ,libx11)
-       ("pulseaudio" ,pulseaudio)))
+     (list avahi gtk+ libnotify libx11 pulseaudio))
     (home-page "https://github.com/christophgysin/pasystray")
     (synopsis "PulseAudio controller for the system tray")
     (description "@command{pasystray} enables control of various
@@ -516,11 +507,9 @@ README.md for a detailed list of features.")
          "189z5p20hk0xv9vwvym293503j4pwl03xqk9hl7cl6dwgv0l7wkf"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal pkg-config))
     (inputs
-     `(("gtkmm" ,gtkmm)
-       ("pulseaudio" ,pulseaudio)))
+     (list gtkmm-3 pulseaudio))
     (home-page "https://freedesktop.org/software/pulseaudio/paprefs/")
     (synopsis "Simple GTK based configuration dialog for the PulseAudio sound
 server")
@@ -548,8 +537,8 @@ module-gsettings is loaded in the sound server.")
      ;; No tests.
      '(#:tests? #f))
     (inputs
-     `(;; TODO: Package VST to build the corresponding plugin.
-       ("pulseaudio" ,pulseaudio)))
+     (list ;; TODO: Package VST to build the corresponding plugin.
+           pulseaudio))
     (home-page "https://github.com/werman/noise-suppression-for-voice")
     (synopsis "Real-time Noise suppression plugin based on Xiph's RNNoise")
     (description "The plugin is meant to suppress a wide range of noise
@@ -611,7 +600,7 @@ The plugin is made to work with 1 or 2 channels (ladspa plugin),
              (with-directory-excursion "src/github.com/lawl/NoiseTorch"
                (invoke "go" "generate")))))))
     (inputs
-     `(("rnnoise" ,rnnoise)))
+     (list rnnoise))
     (home-page "https://github.com/lawl/NoiseTorch")
     (synopsis "Real-time microphone noise suppression")
     (description "NoiseTorch creates a virtual PulseAudio microphone that
diff --git a/gnu/packages/pumpio.scm b/gnu/packages/pumpio.scm
index f8a60af760..2f4dd359d1 100644
--- a/gnu/packages/pumpio.scm
+++ b/gnu/packages/pumpio.scm
@@ -50,20 +50,16 @@
              ;; Fix dependency tests.
              (substitute* "pumpa.pro"
                (("/usr/include/tidy\\.h")
-                (string-append (assoc-ref inputs "tidy")
-                               "/include/tidy.h"))
+                (search-input-file inputs "/include/tidy.h"))
                (("/usr/include/aspell.h")
-                (string-append (assoc-ref inputs "aspell")
-                               "/include/aspell.h")))
+                (search-input-file inputs "/include/aspell.h")))
              ;; Run qmake with proper installation prefix.
              (let ((prefix (string-append "PREFIX="
                                           (assoc-ref outputs "out"))))
                (invoke "qmake" prefix))
              #t)))))
     (inputs
-     `(("aspell" ,aspell)
-       ("qtbase" ,qtbase-5)
-       ("tidy" ,tidy)))
+     (list aspell qtbase-5 tidy))
     (synopsis "Qt-based pump.io client")
     (description "Pumpa is a simple pump.io client written in C++ and Qt.")
     (home-page "https://pumpa.branchable.com/")
diff --git a/gnu/packages/pure.scm b/gnu/packages/pure.scm
index 39c1d6089f..cb4cdd4d88 100644
--- a/gnu/packages/pure.scm
+++ b/gnu/packages/pure.scm
@@ -56,9 +56,7 @@
                 "`$LLVMCONF --libs`"))
              #t)))))
     (inputs
-     `(("gmp" ,gmp)
-       ("llvm" ,llvm-3.5)
-       ("mpfr" ,mpfr)))
+     (list gmp llvm-3.5 mpfr))
     (home-page "https://agraef.github.io/pure-lang/")
     (synopsis "Pure programming Language")
     (description "@code{pure} is a programming language based on term
diff --git a/gnu/packages/purescript.scm b/gnu/packages/purescript.scm
index acb68c4062..fe135be5d9 100644
--- a/gnu/packages/purescript.scm
+++ b/gnu/packages/purescript.scm
@@ -46,69 +46,69 @@
         (base32 "06f318hdah076vkviw1ryyg2p0gpbabsp8lbm5x03f2qv92n9j1n"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-glob" ,ghc-glob)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-aeson-better-errors" ,ghc-aeson-better-errors)
-       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
-       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
-       ("ghc-base-compat" ,ghc-base-compat)
-       ("ghc-blaze-html" ,ghc-blaze-html)
-       ("ghc-bower-json" ,ghc-bower-json)
-       ("ghc-boxes" ,ghc-boxes)
-       ("ghc-cborg" ,ghc-cborg)
-       ("ghc-cheapskate" ,ghc-cheapskate)
-       ("ghc-clock" ,ghc-clock)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-ordlist" ,ghc-data-ordlist)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-file-embed" ,ghc-file-embed)
-       ("ghc-fsnotify" ,ghc-fsnotify)
-       ("ghc-happy" ,ghc-happy)
-       ("ghc-language-javascript" ,ghc-language-javascript)
-       ("ghc-lifted-async" ,ghc-lifted-async)
-       ("ghc-lifted-base" ,ghc-lifted-base)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-microlens-platform" ,ghc-microlens-platform)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-network" ,ghc-network)
-       ("ghc-parallel" ,ghc-parallel)
-       ("ghc-pattern-arrows" ,ghc-pattern-arrows)
-       ("ghc-protolude" ,ghc-protolude)
-       ("ghc-purescript-cst" ,ghc-purescript-cst)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-safe" ,ghc-safe)
-       ("ghc-scientific" ,ghc-scientific)
-       ("ghc-semialign" ,ghc-semialign)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-serialise" ,ghc-serialise)
-       ("ghc-sourcemap" ,ghc-sourcemap)
-       ("ghc-split" ,ghc-split)
-       ("ghc-stringsearch" ,ghc-stringsearch)
-       ("ghc-syb" ,ghc-syb)
-       ("ghc-these" ,ghc-these)
-       ("ghc-transformers-base" ,ghc-transformers-base)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-network" ,ghc-network)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative-0.15.1.0) ; XXX: needs specific version
-       ("ghc-wai" ,ghc-wai)
-       ("ghc-wai-websockets" ,ghc-wai-websockets)
-       ("ghc-warp" ,ghc-warp)
-       ("ghc-websockets" ,ghc-websockets)))
+     (list ghc-glob
+           ghc-aeson
+           ghc-aeson-better-errors
+           ghc-aeson-pretty
+           ghc-ansi-terminal
+           ghc-base-compat
+           ghc-blaze-html
+           ghc-bower-json
+           ghc-boxes
+           ghc-cborg
+           ghc-cheapskate
+           ghc-clock
+           ghc-cryptonite
+           ghc-data-ordlist
+           ghc-dlist
+           ghc-edit-distance
+           ghc-file-embed
+           ghc-fsnotify
+           ghc-happy
+           ghc-language-javascript
+           ghc-lifted-async
+           ghc-lifted-base
+           ghc-memory
+           ghc-microlens-platform
+           ghc-monad-control
+           ghc-monad-logger
+           ghc-network
+           ghc-parallel
+           ghc-pattern-arrows
+           ghc-protolude
+           ghc-purescript-cst
+           ghc-regex-tdfa
+           ghc-safe
+           ghc-scientific
+           ghc-semialign
+           ghc-semigroups
+           ghc-serialise
+           ghc-sourcemap
+           ghc-split
+           ghc-stringsearch
+           ghc-syb
+           ghc-these
+           ghc-transformers-base
+           ghc-transformers-compat
+           ghc-unordered-containers
+           ghc-utf8-string
+           ghc-vector
+           ghc-ansi-wl-pprint
+           ghc-http-types
+           ghc-network
+           ghc-optparse-applicative-0.15.1.0 ; XXX: needs specific version
+           ghc-wai
+           ghc-wai-websockets
+           ghc-warp
+           ghc-websockets))
     (native-inputs
-     `(("ghc-happy" ,ghc-happy) 
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)
-       ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-golden" ,ghc-tasty-golden)
-       ("ghc-tasty-hspec" ,ghc-tasty-hspec)))
+     (list ghc-happy
+           ghc-hunit
+           ghc-hspec
+           hspec-discover
+           ghc-tasty
+           ghc-tasty-golden
+           ghc-tasty-hspec))
     (arguments
      `(;; Tests require npm
        #:tests? #f
@@ -150,16 +150,16 @@ expressive types, inspired by Haskell and compiling to JavaScript.")
                (("\\b(dlist)\\s+[^,]+" all dep)
                 dep)))))))
     (inputs
-      `(("ghc-aeson" ,ghc-aeson)
-        ("ghc-base-compat" ,ghc-base-compat)
-        ("ghc-dlist" ,ghc-dlist)
-        ("ghc-microlens" ,ghc-microlens)
-        ("ghc-protolude" ,ghc-protolude)
-        ("ghc-scientific" ,ghc-scientific)
-        ("ghc-semigroups" ,ghc-semigroups)
-        ("ghc-serialise" ,ghc-serialise)
-        ("ghc-vector" ,ghc-vector)))
-    (native-inputs `(("ghc-happy" ,ghc-happy)))
+      (list ghc-aeson
+            ghc-base-compat
+            ghc-dlist
+            ghc-microlens
+            ghc-protolude
+            ghc-scientific
+            ghc-semigroups
+            ghc-serialise
+            ghc-vector))
+    (native-inputs (list ghc-happy))
     (home-page "https://www.purescript.org/")
     (synopsis "PureScript Programming Language Concrete Syntax Tree")
     (description
@@ -181,9 +181,8 @@ expressive types, inspired by Haskell and compiling to JavaScript.")
         (sha256
           (base32 "1ws6y3b3f6hsgv0ff0yp6lw4hba1rps4dnvry3yllng0s5gngcsd"))))
     (inputs
-      `(("ghc-transformers-compat" ,ghc-transformers-compat)
-        ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)))
-    (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+      (list ghc-transformers-compat ghc-ansi-wl-pprint))
+    (native-inputs (list ghc-quickcheck))
     (arguments
       `(#:cabal-revision
         ("1" "0zmhqkd96v2z1ilhqdkd9z4jgsnsxb8yi2479ind8m5zm9363zr9")))))
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index 61105d12ab..1db5a6b335 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -23,9 +23,11 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages python-build)
+  #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages))
 
 ;;; Commentary:
@@ -39,14 +41,14 @@
 (define-public python-wheel
   (package
     (name "python-wheel")
-    (version "0.36.2")
+    (version "0.33.6")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "wheel" version))
         (sha256
          (base32
-          "0pi4w0brz7a86ddk6pm8p6j0w6d7jgacgxm0c2dab3k5cb8yy7p1"))))
+          "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
@@ -107,6 +109,70 @@ Language (TOML) configuration files.")
     (description "This package provides a Python parser for TOML-0.4.0.")
     (license license:expat)))
 
+(define-public python-six-bootstrap
+  (package
+    (name "python-six-bootstrap")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "six" version))
+       (sha256
+        (base32
+         "09n9qih9rpj95q3r4a40li7hk6swma11syvgwdc68qm1fxsc6q8y"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;to avoid pytest dependency
+    (home-page "https://pypi.org/project/six/")
+    (synopsis "Python 2 and 3 compatibility utilities")
+    (description
+     "Six is a Python 2 and 3 compatibility library.  It provides utility
+functions for smoothing over the differences between the Python versions with
+the goal of writing Python code that is compatible on both Python versions.
+Six supports every Python version since 2.5.  It is contained in only one
+Python file, so it can be easily copied into your project.")
+    (license license:x11)))
+
+(define-public python2-six-bootstrap
+  (package-with-python2 python-six-bootstrap))
+
+(define-public python-tomli
+  (package
+    (name "python-tomli")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "tomli" version))
+       (sha256
+        (base32 "1vjg44narb7hdiazdmbv8bfv7pi6phnq7nxm6aphx0iqxcah1kn6"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f                      ;disabled to avoid extra dependencies
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (setenv "PYTHONPATH" (string-append (getcwd) ":"
+                                                 (getenv "GUIX_PYTHONPATH")))
+             (invoke "python" "-m" "build" "--wheel" "--no-isolation"
+                     "--skip-dependency-check")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "dist" "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl)))))))
+    (native-inputs
+     `(("python-flit-core" ,python-flit-core)
+       ("python-pypa-build" ,python-pypa-build)
+       ("python-six", python-six-bootstrap)))
+    (home-page "https://github.com/hukkin/tomli")
+    (synopsis "Small and fast TOML parser")
+    (description "Tomli is a minimal TOML parser that is fully compatible with
+@url{https://toml.io/en/v1.0.0,TOML v1.0.0}.  It is about 2.4 times as fast as
+@code{python-toml}.")
+    (license license:expat)))
+
 (define-public python-pep517-bootstrap
   (hidden-package
    (package
@@ -123,31 +189,124 @@ Language (TOML) configuration files.")
      (arguments
       `(#:tests? #f))                     ;to avoid circular dependencies
      (propagated-inputs
-      `(("python-toml" ,python-toml)
-        ("python-wheel" ,python-wheel)))
+      (list python-toml python-wheel))
      (home-page "https://github.com/pypa/pep517")
      (synopsis "Wrappers to build Python packages using PEP 517 hooks")
      (description
       "Wrappers to build Python packages using PEP 517 hooks.")
      (license license:expat))))
 
+(define-public python-pyparsing
+  (package
+    (name "python-pyparsing")
+    (version "2.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyparsing" version))
+       (sha256
+        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))
+    (build-system python-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:tests? #f                      ;no test target
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" ,name "-" ,version))
+                    (html-doc (string-append doc "/html"))
+                    (examples (string-append doc "/examples")))
+               (mkdir-p html-doc)
+               (mkdir-p examples)
+               (for-each
+                (lambda (dir tgt)
+                  (map (lambda (file)
+                         (install-file file tgt))
+                       (find-files dir ".*")))
+                (list "docs" "htmldoc" "examples")
+                (list doc html-doc examples))))))))
+    (home-page "https://github.com/pyparsing/pyparsing")
+    (synopsis "Python parsing class library")
+    (description
+     "The pyparsing module is an alternative approach to creating and
+executing simple grammars, vs. the traditional lex/yacc approach, or the use
+of regular expressions.  The pyparsing module provides a library of classes
+that client code uses to construct the grammar directly in Python code.")
+    (license license:expat)))
+
+(define-public python-pyparsing-2.4.7
+  (package
+    (inherit python-pyparsing)
+    (version "2.4.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyparsing" version))
+       (sha256
+        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
+
+(define-public python2-pyparsing
+  (package-with-python2 python-pyparsing))
+
+(define-public python-packaging-bootstrap
+  (package
+    (name "python-packaging-bootstrap")
+    (version "20.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "packaging" version))
+       ;; XXX: The URL in the patch file is wrong, it should be
+       ;; <https://github.com/pypa/packaging/pull/256>.
+       (patches (search-patches "python-packaging-test-arch.patch"))
+       (sha256
+        (base32
+         "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))         ;disabled to avoid extra dependencies
+    (propagated-inputs
+     (list python-pyparsing python-six-bootstrap))
+    (home-page "https://github.com/pypa/packaging")
+    (synopsis "Core utilities for Python packages")
+    (description "Packaging is a Python module for dealing with Python packages.
+It offers an interface for working with package versions, names, and dependency
+information.")
+    ;; From 'LICENSE': This software is made available under the terms of
+    ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
+    ;; Contributions to this software is made under the terms of *both* these
+    ;; licenses.
+    (license (list license:asl2.0 license:bsd-2))))
+
+(define-public python2-packaging-bootstrap
+  (package-with-python2 python-packaging-bootstrap))
+
 ;;; The name 'python-pypa-build' is chosen rather than 'python-build' to avoid
 ;;; a name clash with python-build from (guix build-system python).
 (define-public python-pypa-build
   (package
     (name "python-pypa-build")
-    (version "0.1.0")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "build" version))
               (sha256
                (base32
-                "1d6m21lijwm04g50nwgsgj7x3vhblzw7jv05ah8psqgzk20bbch8"))))
+                "17xqija27x4my1yrnk6q2vwln60r39g2dhby9zg2l99qjgbdrahs"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f))                    ;to tests in the PyPI release
+     `(#:tests? #f                      ;to tests in the PyPI release
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'use-toml-instead-of-tomli
+                    ;; Using toml instead of tomli eases bootstrapping.
+                    (lambda _
+                      (substitute* "setup.cfg"
+                        (("tomli>=.*")
+                         "toml\n")))))))
     (propagated-inputs
-     `(("python-pep517", python-pep517-bootstrap)
+     `(("python-packaging" ,python-packaging-bootstrap)
+       ("python-pep517", python-pep517-bootstrap)
        ("python-toml" ,python-toml)))
     (home-page "https://pypa-build.readthedocs.io/en/latest/")
     (synopsis "Simple Python PEP 517 package builder")
@@ -176,3 +335,44 @@ implementation developed for Poetry.  This project is intended to be
 a light weight, fully compliant, self-contained package allowing PEP 517
 compatible build front-ends to build Poetry managed projects.")
     (license license:expat)))
+
+(define-public python-flit-core
+  (package
+    (name "python-flit-core")
+    (version "3.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flit" version))
+       (sha256
+        (base32 "10vjqnybvjdqdbmyc0asbhhvq51yjnnj00645yiq9849gnr8h0ir"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-toml))
+    (arguments
+     ;; flit-core has a test suite, but it requires Pytest.  Disable it so
+     ;; as to not pull pytest as an input.
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           ;; flit-core requires itself to build.  Luckily, a
+           ;; bootstrapping script exists, which does so using just
+           ;; the checkout sources and Python.
+           (lambda _
+             (invoke "python" "flit_core/build_dists.py")))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "." "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl))))
+         ;; The sanity-check phase fails because flit depends on tomli at
+         ;; run-time, but this core variant avoids it to avoid a cycle.
+         (delete 'sanity-check))))
+    (home-page "https://github.com/takluyver/flit")
+    (synopsis "Core package of the Flit Python build system")
+    (description "This package provides @code{flit-core}, a PEP 517 build
+backend for packages using Flit.  The only public interface is the API
+specified by PEP 517, @code{flit_core.buildapi}.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 6127ce3cf4..e94e2d0011 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
@@ -80,8 +80,7 @@ data in a standard way.")
         (base32 "1rcv4m850rl7djzdgzz2zhjd8g5ih8w6l0sj2f9hsynymlsq82xl"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-pytest" ,python-pytest)))
+     (list python-click python-pytest))
     (home-page "https://github.com/Stranger6667/pytest-click")
     (synopsis "Py.test plugin for Click")
     (description "This package provides a plugin to test Python click
@@ -112,12 +111,9 @@ interfaces with pytest.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-xdist" ,python-pytest-xdist-next)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-pytest-flake8 python-pytest-xdist-next python-tabulate))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest-6)
-       ("python-six" ,python-six)))
+     (list python-pytest-6 python-six))
     (home-page "https://github.com/nicoulaj/pytest-csv")
     (synopsis "CSV reporter for Pytest")
     (description "This package provides a plugin for Pytest that enables a
@@ -139,11 +135,9 @@ it adds to the Pytest command line interface (CLI).")
     (arguments
      `(#:tests? #f))          ; PyTest-Django fails to build in master
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ;;("python-pytest-django" ,python-pytest-django)
-       ("python-twine" ,python-twine)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-pytest-cov
+           ;;("python-pytest-django" ,python-pytest-django)
+           python-twine python-wheel))
     (synopsis "Tests components for Python")
     (description "Testfixtures is a collection of helpers and mock objects that
 are useful when writing automated tests in Python.")
@@ -177,14 +171,9 @@ are useful when writing automated tests in Python.")
                           (invoke "pytest" "-vv")
                           (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docopt" ,python-docopt)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-coverage python-docopt python-pyyaml python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-responses" ,python-responses)))
+     (list python-mock python-pytest python-responses))
     (synopsis "Show coverage stats online via coveralls.io")
     (description
      "Coveralls.io is a service for publishing code coverage statistics online.
@@ -216,9 +205,9 @@ nosetests, etc...) in Python projects.")
                       (lambda _
                         (invoke "pytest" "-vv"))))))
       (native-inputs
-       `(("python-pytest" ,python-pytest)))
+       (list python-pytest))
       (propagated-inputs
-       `(("python-six" ,python-six)))
+       (list python-six))
       (synopsis "Create JUnit XML test results")
       (description
        "This package provides a Python module for creating JUnit XML test
@@ -249,23 +238,20 @@ result documents that can be read by tools such as Jenkins or Bamboo.")
                (delete-file "tests/unit/test_stubs.py")
                (invoke "pytest" "tests/unit")))))))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)
-       ("python-yarl" ,python-yarl)))
+     (list python-pyyaml python-six python-wrapt python-yarl))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-flask" ,python-flask)
-       ("python-httplib2" ,python-httplib2)
-       ("python-ipaddress" ,python-ipaddress)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-httpbin" ,python-pytest-httpbin)
-       ("python-tox" ,python-tox)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-black
+           python-coverage
+           python-flake8
+           python-flask
+           python-httplib2
+           python-ipaddress
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-httpbin
+           python-tox
+           python-urllib3))
     (home-page "https://github.com/kevin1024/vcrpy")
     (synopsis "Automatically mock your HTTP interactions")
     (description
@@ -316,7 +302,7 @@ interactions, which will update them to correspond to the new API.")
                      ;; argument passed to @code{pytest.main}.
                      "not test_run_marker_registered"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/ftobia/pytest-ordering")
     (synopsis "Pytest plugin to run your tests in a specific order")
     (description
@@ -336,8 +322,7 @@ of tests run in a specific order.")
         (base32 "1y87agr324p6x5gvhziymxjlw54pyn4gqnd49papbl941djpkp5g"))))
   (build-system python-build-system)
   (native-inputs
-   `(("pytest" ,python-pytest)
-     ("setuptools-scm" ,python-setuptools-scm)))
+   (list python-pytest python-setuptools-scm))
   (home-page "https://www.astropy.org/")
   (synopsis
    "Pytest plugin adding diagnostic data to the header of the test output")
@@ -370,18 +355,16 @@ Astropy project, but is optimized for use with astropy-related projects.")
              (substitute* "setup.cfg"
                ((".*pytest-filter-subpackage.*") "")))))))
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-attrs python-pytest-mock python-setuptools-scm))
     (propagated-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest-arraydiff" ,python-pytest-arraydiff)
-       ("python-pytest-astropy-header" ,python-pytest-astropy-header)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-doctestplus" ,python-pytest-doctestplus)
-       ("python-pytest-filter-subpackage" ,python-pytest-filter-subpackage)
-       ("python-pytest-openfiles" ,python-pytest-openfiles)
-       ("python-pytest-remotedata" ,python-pytest-remotedata)))
+     (list python-hypothesis
+           python-pytest-arraydiff
+           python-pytest-astropy-header
+           python-pytest-cov
+           python-pytest-doctestplus
+           python-pytest-filter-subpackage
+           python-pytest-openfiles
+           python-pytest-remotedata))
     (home-page "https://github.com/astropy/pytest-astropy")
     (synopsis
      "Metapackage for all the testing machinery used by the Astropy Project")
@@ -406,8 +389,7 @@ astropy related packages.")
      ;; Disable tests to avoid the circular dependency problem.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-six))
     (home-page "https://github.com/astropy/pytest-arraydiff")
     (synopsis "Pytest plugin to help with comparing array output from tests")
     (description
@@ -436,7 +418,7 @@ are too large to conveniently hard-code them in the tests.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/astropy/pytest-doctestplus")
     (synopsis "Pytest plugin with advanced doctest features")
     (description
@@ -463,10 +445,8 @@ advanced doctest support and enables the testing of reStructuredText files.")
              (when tests?
                (invoke "pytest" "tests")))))))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+     (list python-ipython python-py python-pytest))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/nokia/pytest-exploratory")
     (synopsis "Interactive console for Pytest")
     (description "This Pytest plugin provides an IPython extension that allows
@@ -496,10 +476,7 @@ for interactively selecting and running Pytest tests.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "-k" "not test_with_rst"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-doctestplus"
-        ,python-pytest-doctestplus)))
+     (list python-pytest python-pytest-cov python-pytest-doctestplus))
     (home-page "https://github.com/astropy/pytest-filter-subpackage")
     (synopsis "Pytest plugin for filtering based on sub-packages")
     (description
@@ -529,11 +506,8 @@ sub-package.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest-6)
-       ("python-setuptools" ,python-setuptools) ; needs setuptools >= 50.3.2
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-setuptools-declarative-requirements"
-        ,python-setuptools-declarative-requirements)))
+     (list python-pytest python-setuptools ; needs setuptools >= 50.3.2
+           python-setuptools-scm python-setuptools-declarative-requirements))
     (home-page "https://github.com/saltstack/pytest-helpers-namespace")
     (synopsis "Pytest Helpers Namespace Plugin")
     (description "Pytest Helpers Namespace Plugin provides a helpers pytest
@@ -561,10 +535,9 @@ someone to import them in their actual tests to use them.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (home-page "https://github.com/astropy/pytest-openfiles")
     (synopsis "Pytest plugin for detecting inadvertent open file handles")
     (description
@@ -597,9 +570,9 @@ were inadvertently left open at the end of a unit test.")
                       "not test_default_behavior"
                       " and not test_strict_with_decorator")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/astropy/pytest-remotedata")
     (synopsis "Pytest plugin for controlling remote data access")
     (description
@@ -627,9 +600,9 @@ internet.")
              (when tests?
                (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-repeat")
     (synopsis "Pytest plugin for repeating tests")
     (description "@code{pytest-repeat} is a plugin for Pytest that makes it
@@ -660,8 +633,7 @@ times.")
              (when tests?
                (invoke "python" "-m" "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-mockito" ,python-mockito)
-       ("python-pytest" ,python-pytest)))
+     (list python-mockito python-pytest))
     (home-page "https://github.com/kaste/pytest-mockito")
     (synopsis "Mockito base fixtures for Pytest")
     (description "The @code{pytest-mockito} plugin provides base Mockito
@@ -695,10 +667,9 @@ framework and makes it easy to undo any monkey patching.  The fixtures are:
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-pillow" ,python-pillow)))
+     (list python-matplotlib python-nose python-pillow))
     (home-page "https://github.com/matplotlib/pytest-mpl")
     (synopsis "Pytest plugin to help with testing figures output from Matplotlib")
     (description
@@ -728,8 +699,7 @@ in Pytest.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (home-page "https://github.com/asottile/covdefaults")
     (synopsis "Coverage plugin to provide opinionated default settings")
     (description
@@ -763,8 +733,7 @@ in Pytest.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "tests/"))))))
       (propagated-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-vcrpy" ,python-vcrpy)))
+       (list python-pytest python-vcrpy))
       (home-page "https://github.com/ktosiek/pytest-vcr")
       (synopsis "Plugin for managing VCR.py cassettes")
       (description
@@ -774,20 +743,18 @@ in Pytest.")
 (define-public python-pytest-checkdocs
   (package
     (name "python-pytest-checkdocs")
-    (version "1.2.2")
+    (version "1.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-checkdocs" version))
        (sha256
-        (base32 "0j6j1gvj6x451y3qsx4xbaq9p1w9gg3mwk7n0w80cy8vdyjkngb0"))))
+        (base32 "0m4kn7141i6k8qr8ak3lbmk9vim11xsrlnrggcfwczfrglc6jmia"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-more-itertools" ,python-more-itertools)))
+     (list python-docutils python-importlib-metadata python-more-itertools))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm python-pytest))
     (home-page "https://github.com/jaraco/pytest-checkdocs")
     (synopsis "Check the README when running tests")
     (description
@@ -817,11 +784,9 @@ of the project to ensure it renders properly.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-covdefaults" ,python-covdefaults)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-covdefaults python-coverage python-pytest))
     (propagated-inputs
-     `(("python-regex" ,python-regex)))
+     (list python-regex))
     (home-page "https://github.com/asottile/re-assert")
     (synopsis "Show where your regex match assertion failed")
     (description
@@ -832,28 +797,33 @@ simpler.")
 (define-public python-pytest-trio
   (package
     (name "python-pytest-trio")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-trio" version))
        (sha256
-        (base32 "1zm8didm9h5jkqhghl9bvqs7kr7sjci282c7grhk6yhpzn8a9w4v"))))
+        (base32 "0c8cqf9by2884riksrqymqfp2g1d2d798a2zalcw9hmf34c786y0"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-W" "error" "-ra" "-v" "--pyargs"
-                     "pytest_trio" "--verbose" "--cov"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-W" "error" "-ra" "-v" "--pyargs"
+                       "pytest_trio" "--verbose" "--cov" "-k"
+                       (string-append
+                         ;; Needs network
+                         "not test_async_yield_fixture_with_nursery"
+                         " and not test_try"
+                         ;; No keyboard interrupt in our build environment.
+                         " and not test_actual_test"))))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-hypothesis python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-trio" ,python-trio)))
+      (list python-async-generator python-outcome python-pytest python-trio))
     (home-page "https://github.com/python-trio/pytest-trio")
     (synopsis "Pytest plugin for trio")
     (description
@@ -875,9 +845,9 @@ friendly library for concurrency and async I/O in Python.")
          "0syx68xk5ss3hgp3nr2y122w0fgkzr5936ghsqrkymh3m5hrf9gh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/tholo/pytest-flake8")
     (synopsis "Pytest plugin to check FLAKE8 requirements")
     (description
@@ -888,26 +858,25 @@ compliance.")
 (define-public python-pytest-isort
   (package
     (name "python-pytest-isort")
-    (version "0.3.1")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-isort" version))
        (sha256
-        (base32 "06myn5hhxs5yp8dqr1yjsgcnnxnsrvsqannm00bvaw0qml6ydzjb"))))
+        (base32 "05wi28zlqk3jafpjal8j523y5jcsx3xl3id9rx93qfjgkif8q6l2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)))
+     (list python-isort python-pytest))
+    (native-inputs
+     (list python-mock))
     (home-page "https://github.com/moccu/pytest-isort/")
     (synopsis "Pytest plugin to check import ordering using isort")
     (description
@@ -940,14 +909,10 @@ isort.")
                 "bindir = os.path.realpath('/tmp/bin')"))
              #t)))))
     (propagated-inputs
-     `(("python-contextlib2" ,python-contextlib2)
-       ("python-execnet" ,python-execnet)
-       ("python-pathpy" ,python-pathpy)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-contextlib2 python-execnet python-pathpy
+           python-termcolor))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-mock python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Assorted shell and environment tools for py.test")
     (description
@@ -968,8 +933,7 @@ py.test testing framework.")
          "13i1qpz22w3x4dmw8vih5jdnbqfqvl7jiqs0dg764s0zf8bp98a1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Fixture configuration utils for py.test")
     (description
@@ -1006,14 +970,11 @@ testing framework.")
                           virtualenv-bin)))
                #t))))))
     (propagated-inputs
-     `(("python-pytest-shutil" ,python-pytest-shutil)
-       ("python-pytest-fixture-config" ,python-pytest-fixture-config)))
+     (list python-pytest-shutil python-pytest-fixture-config))
     (inputs
-     `(("python-virtualenv" ,python-virtualenv)))
+     (list python-virtualenv))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-git" ,python-setuptools-git)))
+     (list python-mock python-pytest python-setuptools-git))
     (home-page "https://github.com/manahl/pytest-plugins")
     (synopsis "Virtualenv fixture for py.test")
     (description "This package provides a virtualenv fixture for the py.test
@@ -1033,9 +994,9 @@ framework.")
          "02i5gl7pm9cwxk15sn29inz3n8flpj1r3p1l110h43f2na5w8h7z"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)))
+     (list python-pycodestyle))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/henry0312/pytest-pycodestyle")
     (synopsis "Pytest plugin to run pycodestyle")
     (description "This package provides a plugin to run @code{pycodestyle}
@@ -1055,10 +1016,9 @@ for the @code{pytest} framework.")
          "0a4mpb4j73dsyk47hd1prrjpfk4r458s102cn80rf253jg818hxd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-py-cpuinfo" ,python-py-cpuinfo)))
+     (list python-py-cpuinfo))
     (native-inputs
-     `(("python-pathlib2" ,python-pathlib2)
-       ("python-pytest" ,python-pytest)))
+     (list python-pathlib2 python-pytest))
     (home-page "https://github.com/ionelmc/pytest-benchmark")
     (synopsis "Pytest fixture for benchmarking code")
     (description
@@ -1090,12 +1050,9 @@ rounds that are calibrated to the chosen timer.")
              (delete-file "tests/test_xvfb_windows.py")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-pytest python-pytest-runner xorg-server-for-tests))
     (propagated-inputs
-     `(("python-pyvirtualdisplay"
-        ,python-pyvirtualdisplay)))
+     (list python-pyvirtualdisplay))
     (home-page "https://github.com/The-Compiler/pytest-xvfb")
     (synopsis "Pytest plugin to run Xvfb for tests")
     (description
@@ -1116,10 +1073,9 @@ rounds that are calibrated to the chosen timer.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not included in release tarball.
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-requests" ,python-requests)))
+     (list python-psutil python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pytest-dev/pytest-services")
     (synopsis "Services plugin for pytest testing framework")
     (description
@@ -1146,23 +1102,15 @@ service processes for your tests with pytest.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Make the installed plugin discoverable by Pytest.
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (substitute* "setup.cfg"
+                 ((".*timeout.*") ""))
+               ;; Make the installed plugin discoverable by Pytest.
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docutils" ,python-docutils)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pydantic" ,python-pydantic)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-sugar" ,python-pytest-sugar)))
+     (list python-pydantic python-pytest python-pytest-isort))
     (home-page "https://github.com/samuelcolvin/pytest-toolbox")
     (synopsis "Numerous useful plugins for Pytest")
     (description
@@ -1183,9 +1131,9 @@ new fixtures, new methods and new comparison objects.")
          "0kx4mbs9bflycd8x9af0idcjhdgnzri3nw1qb0vpfyb3751qaaf9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)))
+     (list python-aiohttp))
     (home-page "https://github.com/aio-libs/pytest-aiohttp/")
     (synopsis "Pytest plugin for aiohttp support")
     (description "This package provides a pytest plugin for aiohttp support.")
@@ -1221,14 +1169,10 @@ new fixtures, new methods and new comparison objects.")
                      ;; https://github.com/computationalmodelling/nbval/pull/148.
                       " and not test_timeouts")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sympy" ,python-sympy)))
+     (list python-pytest python-pytest-cov python-sympy))
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-nbformat" ,python-nbformat)
-       ("python-six" ,python-six)))
+     (list python-ipykernel python-jupyter-client python-nbformat
+           python-six))
     (home-page "https://github.com/computationalmodelling/nbval")
     (synopsis "Pytest plugin to validate Jupyter notebooks")
     (description
@@ -1251,10 +1195,8 @@ also ensuring that the notebooks are running without errors.")
          "1hln7mwgdzfi5ma0kqfsi768l7p24jhkw8l0imhifwy08nh7hmjd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-flask python-pytest python-setuptools-scm
+           python-werkzeug))
     (home-page "https://github.com/pytest-dev/pytest-flask")
     (synopsis "Pytest fixtures to test Flask applications")
     (description
@@ -1264,14 +1206,14 @@ also ensuring that the notebooks are running without errors.")
 (define-public python-pytest-console-scripts
   (package
     (name "python-pytest-console-scripts")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-console-scripts" version))
        (sha256
         (base32
-         "073l2cz11013dl30zjr575ms78j9b2bsbdl1w0gmig37spbkh8aa"))))
+         "1qsw3i2h3psyi5avwf14panx8wxqfik2z7294dy37w8ha415iwn7"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1284,10 +1226,9 @@ also ensuring that the notebooks are running without errors.")
                        ;; This one test fails because of PATH assumptions
                        "-k" "not test_elsewhere_in_the_path")))))))
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/kvas-it/pytest-console-scripts")
     (synopsis "Pytest plugin for testing console scripts")
     (description
@@ -1316,8 +1257,7 @@ also ensuring that the notebooks are running without errors.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "--verbose")))))))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-tornado" ,python-tornado)))
+     (list python-pytest python-tornado))
     (home-page "https://github.com/eukaryote/pytest-tornasync")
     (synopsis "Pytest plugin for testing Tornado code")
     (description
@@ -1338,7 +1278,7 @@ plain (undecoratored) native coroutine tests.")
         (base32 "1hl0ln0cicdid4qjk7mv90lw9xkb0v71dlj7q7rn89vzxxm9b53y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/MobileDynasty/pytest-env")
     (synopsis "Pytest plugin that allows you to add environment variables")
     (description
@@ -1386,11 +1326,9 @@ libraries.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-pytest-runner python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-qt")
     (synopsis "Pytest support for PyQt and PySide applications")
     (description
@@ -1417,7 +1355,7 @@ interaction, like key presses and mouse clicks.")
     (arguments
      `(#:tests? #f)); no tests
     (propagated-inputs
-     `(("python-check-manifest" ,python-check-manifest)))
+     (list python-check-manifest python-requests))
     (home-page "https://github.com/codacy/python-codacy-coverage")
     (synopsis "Codacy coverage reporter for Python")
     (description "This package analyses Python test suites and reports how much
@@ -1440,7 +1378,7 @@ analysing code quality.")
     (arguments
      `(#:tests? #f)); no tests
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/patrys/httmock")
     (synopsis "Mocking library for requests.")
     (description "This package provides a library for replying fake data to
@@ -1470,7 +1408,7 @@ Python software under test, when they make an HTTP query.")
            (lambda _
              (invoke "python" "-m" "nose2" "-v"))))))
     (native-inputs
-     `(("python-nose2" ,python-nose2)))
+     (list python-nose2))
     (home-page "https://public.readthedocs.io/")
     (synopsis "@code{@@public} decorator for populating @code{__all__}")
     (description
@@ -1504,8 +1442,7 @@ the implementation of that name.")
              (when tests?
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)))
+     (list python-numpy python-pytest))
     (home-page "https://github.com/kaste/mockito-python")
     (synopsis "Mocking library for Python")
     (description "This package provides a Python implementation of the Java
@@ -1563,23 +1500,21 @@ supported by the MyPy typechecker.")
              (when tests?
                (invoke "pytest" "mypyc")))))))
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pyi" ,python-flake8-pyi)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-lxml" ,python-lxml)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-forked" ,python-pytest-forked)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-attrs
+           python-flake8
+           python-flake8-bugbear
+           python-flake8-pyi
+           python-importlib-metadata
+           python-lxml
+           python-psutil
+           python-pytest
+           python-pytest-cov
+           python-pytest-forked
+           python-pytest-xdist
+           python-virtualenv))
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-toml" ,python-toml)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-typed-ast" ,python-typed-ast)))
+     (list python-mypy-extensions python-toml python-typing-extensions
+           python-typed-ast))
     (home-page "http://www.mypy-lang.org/")
     (synopsis "Static type checker for Python")
     (description "Mypy is an optional static type checker for Python that aims
@@ -1592,6 +1527,59 @@ any Python VM with basically no runtime overhead.")
     ;; mypyc/lib-rt/getargs.c
     (license (list license:expat license:psfl))))
 
+;;; This variant exists to break a cycle between python-pylama and python-isort.
+(define-public python-mypy-minimal
+  (hidden-package
+   (package
+     (inherit python-mypy)
+     (name "python-mypy-minimal")
+     (arguments
+      `(#:tests? #f
+        #:phases (modify-phases %standard-phases
+                   ;; XXX: Fails with: "In procedure utime: No such file or
+                   ;; directory".
+                   (delete 'ensure-no-mtimes-pre-1980))))
+     (native-inputs '()))))
+
+(define-public python-pylama
+  (package
+    (name "python-pylama")
+    (version "7.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pylama" version))
+       (sha256
+        (base32
+         "13vx7daqz2918y9s8q3v2i3xaq3ah43a9p58srqi6hqskkpm7blv"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      ;; Fails with: "ImportError: cannot import name
+                      ;; 'commented_out_code_line_numbers' from 'eradicate'".
+                      (delete-file "pylama/lint/pylama_eradicate.py")
+                      ;; Requires python-astroid, which fails to build on
+                      ;; Python 3.9+ (see:
+                      ;; https://github.com/PyCQA/astroid/issues/881).
+                      (delete-file "pylama/lint/pylama_pylint.py"))))))
+    (native-inputs
+     (list python-py python-pytest python-radon))
+    (propagated-inputs
+     `(("python-mccabe" ,python-mccabe)
+       ("python-mypy", python-mypy-minimal)
+       ("python-pycodestyle" ,python-pycodestyle)
+       ("python-pydocstyle" ,python-pydocstyle)
+       ("python-pyflakes" ,python-pyflakes)))
+    (home-page "https://github.com/klen/pylama")
+    (synopsis "Code audit tool for python")
+    (description "Pylama is a code audit tool for Python and JavaScript to check
+for style, syntax and other code health metrics.  It is essentially a
+convenient wrapper above tools such as Pyflakes, pydocstyle, pycodestyle and
+McCabe, among others.")
+    (license license:lgpl3+)))
+
 (define-public python-pyannotate
   (package
     (name "python-pyannotate")
@@ -1605,8 +1593,7 @@ any Python VM with basically no runtime overhead.")
          "16bm0mf7wxvy0lgmcs1p8n1ji8pnvj1jvj8zk3am70dkp825iv84"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-six" ,python-six)))
+     (list python-mypy-extensions python-six))
     (home-page
      "https://github.com/dropbox/pyannotate")
     (synopsis "Auto-generate PEP-484 annotations")
@@ -1649,8 +1636,7 @@ valid Python syntax that are likely to be commented out code.")
     ;; Reported upstream: <https://github.com/vesln/robber.py/issues/20>.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-mock python-termcolor))
     ;; URL of the fork used to generate the package available on PyPI.
     (home-page "https://github.com/EastAgile/robber.py")
     (synopsis "Test-driven development (TDD) assertion library for Python")
@@ -1673,15 +1659,15 @@ behavior-driven development (TDD and BDD).")
     (arguments
      `(#:tests? #f))                    ;to avoid circular dependencies
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (propagated-inputs
-     `(("python-cliff" ,python-cliff)
-       ("python-fixtures" ,python-fixtures)
-       ("python-future" ,python-future)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-subunit" ,python-subunit)
-       ("python-testtools" ,python-testtools)
-       ("python-voluptuous" ,python-voluptuous)))
+     (list python-cliff
+           python-fixtures
+           python-future
+           python-pyyaml
+           python-subunit
+           python-testtools
+           python-voluptuous))
     (home-page "https://stestr.readthedocs.io/en/latest/")
     (synopsis "Parallel Python test runner")
     (description "This package provides the @command{stestr} command, a
@@ -1707,11 +1693,8 @@ help in debugging failures and optimizing the scheduler to improve speed.")
      ;; Tests depend on python-sanic.
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-httpx" ,python-httpx)
-        ("python-async-generator"
-         ,python-async-generator)
-        ("python-pytest" ,python-pytest)
-        ("python-websockets" ,python-websockets)))
+      (list python-httpx python-async-generator python-pytest
+            python-websockets))
     (home-page
       "https://github.com/yunstanford/pytest-sanic")
     (synopsis "Pytest plugin for Sanic")
@@ -1731,8 +1714,7 @@ code asynchronously.")
         (base32 "1c987h13dly9919d15w3h747rgn50ilnv7dginhlprxbj564hn4k"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/thombashi/allpairspy")
     (synopsis "Pairwise test combinations generator")
     (description
@@ -1757,8 +1739,7 @@ most situations.")
         (base32 "01v98b6n3yvkfmxf2v38xk5ijqlk6ika0yljwkhl5bh6qhq23498"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-psutil" ,python-psutil)))
+     (list python-pytest python-psutil))
     (arguments
      ;; tests require setuptools-markdown, which is deprecated and not in guix
      '(#:tests? #f
@@ -1803,11 +1784,9 @@ tests at one time.")
                  "not test_address_as_instance_of_url_combined_with_pass_through "
                  "and not test_pass_through_with_origin_params"))))))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-ddt" ,python-ddt)
-       ("python-pytest" ,python-pytest)))
+     (list python-pbr python-ddt python-pytest))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)))
+     (list python-aiohttp))
     (home-page "https://github.com/pnuckowski/aioresponses")
     (synopsis "Mock out requests made by ClientSession from aiohttp package")
     (description
@@ -1819,6 +1798,24 @@ The purpose of this package is to provide an easy way to test asynchronous
 HTTP requests.")
     (license license:expat)))
 
+(define-public python-pytest-rerunfailures
+  (package
+    (name "python-pytest-rerunfailures")
+    (version "10.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-rerunfailures" version))
+       (sha256
+        (base32 "15v68kggjvkflbqr0vz8gp5yp3pcsk0rz05bpg2l4xp0a6nin7ly"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pytest python-setuptools))
+    (home-page "https://github.com/pytest-dev/pytest-rerunfailures")
+    (synopsis "Pytest plugin to re-run flaky tests")
+    (description "This package provides a pytest plugin to re-run tests to
+eliminate flaky failures.")
+    (license license:mpl2.0)))
+
 (define-public python-xunitparser
   (package
     (name "python-xunitparser")
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 81e1630e81..641cd595a0 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -56,14 +56,14 @@
          "0j46wab4b09s3favjzp3zs1cn2sn8pr7qyngs5wn31hpqqxbbz76"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pep517" ,python-pep517)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("python-coverage" ,python-coverage)
-       ("python-coveralls" ,python-coveralls)
-       ("python-pyannotate" ,python-pyannotate)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pep517
+           python-setuptools
+           python-setuptools-scm
+           python-coverage
+           python-coveralls
+           python-pyannotate
+           python-pytest
+           python-pytest-cov))
     (home-page "https://github.com/miurahr/multivolume")
     (synopsis "Treat multiple files as one")
     (description "MultiVolumefile is a Python library that provides a
@@ -84,14 +84,10 @@ were a single file.")
          "1jcczrb8zgg6w7v76w1wpz3nw75fghk3xwxkn09ll7kck7sdf68d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-toml" ,python-toml)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)))
+     (list python-cffi python-toml python-setuptools-scm))
     (native-inputs
-     `(("python-setuptools" ,python-setuptools)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-setuptools python-coverage python-pytest
+           python-pytest-cov))
     (home-page "https://github.com/miurahr/bcj-cffi")
     (synopsis "Branch / Call /Jump CFFI library in Python")
     (description "This package provides an implementation of the Branch / Call /
@@ -111,14 +107,14 @@ Jump conversion filter by CFFI for Python.")
          "01wcd9l6pp6hivdmd275qh9dhcwficjqfl67hxix5n07vvq7jzz0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (native-inputs
-     `(("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("python-pep517" ,python-pep517)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-setuptools
+           python-setuptools-scm
+           python-pep517
+           python-coverage
+           python-pytest
+           python-pytest-cov))
     (home-page "https://github.com/miurahr/ppmd")
     (synopsis "Prediction by Partial Matching compression library")
     (description "PPMd is a compression algorithm library using the Prediction
@@ -139,26 +135,26 @@ several possible methods.")
          "1zmgp7yax328fj8yj8pj4l7yh78hp727j6wk12vfi6nmi82wl32i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-bcj-cffi" ,python-bcj-cffi)
-       ("python-multivolumefile" ,python-multivolumefile)
-       ("python-ppmd-cffi" ,python-ppmd-cffi)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-pyzstd" ,python-pyzstd)
-       ("python-texttable" ,python-texttable)
-       ("python-zstandard" ,python-zstandard)))
+     (list python-bcj-cffi
+           python-multivolumefile
+           python-ppmd-cffi
+           python-pycryptodome
+           python-pyzstd
+           python-texttable
+           python-zstandard))
     (native-inputs
-     `(("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("python-coverage" ,python-coverage)
-       ("python-coveralls" ,python-coveralls)
-       ("python-libarchive-c" ,python-libarchive-c)
-       ("python-py-cpuinfo" ,python-py-cpuinfo)
-       ("python-pyannotate" ,python-pyannotate)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-remotedata" ,python-pytest-remotedata)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-setuptools
+           python-setuptools-scm
+           python-coverage
+           python-coveralls
+           python-libarchive-c
+           python-py-cpuinfo
+           python-pyannotate
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-pytest-remotedata
+           python-pytest-timeout))
     (home-page "https://github.com/miurahr/py7zr")
     (synopsis "7-zip in Python")
     (description "This package provides py7zr, which implements 7-zip
@@ -192,7 +188,7 @@ Python.")
                                "')")))
              #t)))))
     (inputs
-     `(("lzo" ,lzo)))
+     (list lzo))
     (home-page "https://github.com/jd-boyd/python-lzo")
     (synopsis "Python bindings for the LZO data compression library")
     (description
@@ -223,11 +219,9 @@ Python strings.")
            #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-nose" ,python-nose)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list pkg-config python-nose python-setuptools-scm))
     (inputs
-     `(("lz4" ,lz4)))
+     (list lz4))
     (home-page "https://github.com/python-lz4/python-lz4")
     (synopsis "LZ4 bindings for Python")
     (description
@@ -252,7 +246,7 @@ the LZ4 frame format.")
          "18ly9pppy2yspxzw7k1b23wk77k7m44rz2g0271bqgqrk3jn3yhs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/gkovacs/lz-string-python")
     (synopsis "String compression")
     (description "Lz-string is a string compressor library for Python.")
@@ -359,9 +353,9 @@ install: libbitshuffle.so
          "0v3qayhqv7vyzydpydwcp51bqciw8p2ajddw68x5k8zppc0vx3yk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-more-itertools" ,python-more-itertools)))
+     (list python-more-itertools))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/jaraco/zipp")
     (synopsis
      "Backport of pathlib-compatible object wrapper for zip files")
@@ -405,7 +399,7 @@ wrapper.  It provides a backport of the @code{Path} object.")
         (base32 "0by9z7nxnkzhmza075q6q91rs8lnpf91129k8ppv7kymbwshipjj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)))
+     (list python-hypothesis))
     (home-page "https://github.com/indygreg/python-zstandard")
     (synopsis "Zstandard bindings for Python")
     (description "This project provides Python bindings for interfacing with
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index e62fc04c0f..2072e4e164 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -86,7 +86,7 @@
         (base32 "1hzw6h01fm216nmipyylgz0zybd80w1xsk12m7djycnhqrnrvvv1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycrypto" ,python-pycrypto)))
+     (list python-pycrypto))
     (synopsis "Python OTR Implementation")
     (description "Python OTR is an Off-The-Record Protocol Implementation in
 Python.  It does not bind to libotr.")
@@ -106,7 +106,7 @@ Python.  It does not bind to libotr.")
          "0yfaqp76kbdb62hikr5n4jkkfjfmii89grwfy6sw3fmsv5hrap1n"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-pyhamcrest))
     (home-page "https://github.com/keis/base58")
     (synopsis "Base58 and Base58Check implementation")
     (description "Base58 and Base58Check implementation compatible
@@ -125,11 +125,9 @@ with what is used by the Bitcoin network.")
         (base32 "0agvzdn7r7jx5y4scl5gjmrmr6njvizwmr9n7h1kmaahdrrc34sv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pycparser" ,python-pycparser)
-       ("python-pytest" ,python-pytest)))
+     (list python-pycparser python-pytest))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)))
+     (list python-cffi python-six))
     (home-page "https://github.com/pyca/bcrypt/")
     (synopsis
      "Modern password hashing library")
@@ -152,9 +150,9 @@ Password Scheme\"} by Niels Provos and David Mazieres.")
         (base32 "015y5qaw9qnxr29lg60dml1g5rbqd4586wy5n8m41ib55gvm1zfy"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)))
+     (list python-bcrypt))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -212,10 +210,7 @@ This package provides a Python interface for BLAKE2.")
      `(;; FIXME: Tests require many unpackaged libraries, see dev-requirements.txt.
        #:tests? #f))
     (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pynacl" ,python-pynacl)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-bcrypt python-pyasn1 python-pynacl python-cryptography))
     (home-page "https://www.paramiko.org/")
     (synopsis "SSHv2 protocol library")
     (description "Paramiko is a python implementation of the SSHv2 protocol,
@@ -241,10 +236,9 @@ Python interface around SSH networking concepts.")
          (replace 'check
            (lambda _ (invoke "pytest"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("openssl" ,openssl)
-       ("python-pytest" ,python-pytest)))
+     (list openssl python-pytest))
     (home-page "https://github.com/warner/python-ecdsa")
     (synopsis "ECDSA cryptographic signature library (pure python)")
     (description
@@ -278,8 +272,7 @@ making them easy to handle and incorporate into other protocols.")
         "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
     (build-system python-build-system)
     (inputs
-     `(("python" ,python)
-       ("gmp" ,gmp)))
+     (list python gmp))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -316,7 +309,7 @@ etc.).  The package is structured to make adding new modules easy.")
          "19663qxmma0i8bfbjc2iwy5hgq0g4pfb75r023v5dps68zfvffgh"))))
     (build-system python-build-system)
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     (home-page "https://github.com/apple/ccs-pykerberos")
     (synopsis
      "Python Kerberos library used by CalendarServer")
@@ -349,15 +342,15 @@ do what is needed for client/server Kerberos authentication based on
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-toml" ,python-toml)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-checkdocs" ,python-pytest-checkdocs)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-toml
+           python-pytest
+           python-pytest-checkdocs
+           python-pytest-cov
+           python-pytest-flake8
+           python-setuptools
+           python-setuptools-scm))
     (propagated-inputs
-     `(("python-secretstorage" ,python-secretstorage)))
+     (list python-secretstorage))
     (home-page "https://github.com/jaraco/keyring")
     (synopsis "Store and access your passwords safely")
     (description
@@ -385,11 +378,9 @@ password storage.")
       (arguments
        `(#:python ,python-2))
       (native-inputs
-       `(("python2-pytest" ,python2-pytest)
-         ("python2-pytest-runner" ,python2-pytest-runner)
-         ("python2-setuptools-scm" ,python2-setuptools-scm)))
+       (list python2-pytest python2-pytest-runner python2-setuptools-scm))
       (propagated-inputs
-       `(("python2-pycrypto" ,python2-pycrypto))))))
+       (list python2-pycrypto)))))
 
 (define-public python-keyrings.alt
   (package
@@ -418,9 +409,7 @@ password storage.")
             #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-keyring" ,python-keyring)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-keyring python-pytest python-setuptools-scm))
     (home-page "https://github.com/jaraco/keyrings.alt")
     (synopsis "Alternate keyring implementations")
     (description "Keyrings in this package may have security risks or other
@@ -443,10 +432,9 @@ risk.")
          "1yxqfb5131wahjyw9pxz03bq476rcfx62s6k53xx4cqbzzgdaqkq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)
-       ("python-tldextract" ,python-tldextract)))
+     (list python-pyopenssl python-tldextract))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-cov))
     (home-page "https://github.com/ikreymer/certauth")
     (synopsis "Certificate authority creation tool")
     (description "This package provides a small library, built on top of
@@ -513,19 +501,13 @@ is used by the Requests library to verify HTTPS requests.")
          "1ribd1vxq9wwz564mg60dzcy699gng54admihjjkgs9dx95pw5vy"))))
     (build-system python-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (propagated-inputs
-     `(("python-asn1crypto" ,python-asn1crypto)
-       ("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("python-idna" ,python-idna)
-       ("python-iso8601" ,python-iso8601)))
+     (list python-asn1crypto python-cffi python-six python-idna
+           python-iso8601))
     (native-inputs
-     `(("python-cryptography-vectors" ,python-cryptography-vectors)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pretend" ,python-pretend)
-       ("python-pytz" ,python-pytz)
-       ("python-pytest" ,python-pytest)))
+     (list python-cryptography-vectors python-hypothesis python-pretend
+           python-pytz python-pytest))
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Cryptographic recipes and primitives for Python")
     (description
@@ -542,6 +524,13 @@ message digests and key derivation functions.")
   (let ((crypto (package-with-python2
                  (strip-python2-variant python-cryptography))))
     (package/inherit crypto
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           ;; The sanity-check attempts attempts to import the non-existent
+           ;; modules "_openssl" and "_padding".
+           (delete 'sanity-check))))
       (propagated-inputs
        `(("python2-ipaddress" ,python2-ipaddress)
          ("python2-backport-ssl-match-hostname"
@@ -552,14 +541,14 @@ message digests and key derivation functions.")
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "20.0.0")
+    (version "20.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "1i8ab5zn9i9iq2ksizp3rd42v157kacddzz88kviqw3kpp68xw4j"))))
+         "0labcbh2g0jhgisd79wx9kixmi6fip28096d1xb05fj3jmsiq8sc"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -571,7 +560,7 @@ message digests and key derivation functions.")
              ;; PyOpenSSL runs tests against a certificate with a fixed
              ;; expiry time.  To ensure successful builds in the future,
              ;; set the time to roughly the release date.
-             (invoke "faketime" "2020-12-01" "py.test" "-v" "-k"
+             (invoke "faketime" "2021-05-01" "py.test" "-v" "-k"
                      (string-append
                       ;; This test tries to look up certificates from
                       ;; the compiled-in default path in OpenSSL, which
@@ -584,15 +573,11 @@ message digests and key derivation functions.")
                       ;; https://github.com/pyca/pyopenssl/issues/974
                       "and not test_verify_with_time")))))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-six))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("libfaketime" ,libfaketime)
-       ("python-flaky" ,python-flaky)
-       ("python-pretend" ,python-pretend)
-       ("python-pytest" ,python-pytest)))
+     (list libfaketime python-flaky python-pretend python-pytest))
     (home-page "https://github.com/pyca/pyopenssl")
     (synopsis "Python wrapper module around the OpenSSL library")
     (description
@@ -669,9 +654,7 @@ python-axolotl.")
                        '("axolotl/tests" "build/lib/axolotl/tests"))
              #t)))))
     (propagated-inputs
-     `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
-       ("python-cryptography" ,python-cryptography)
-       ("python-protobuf" ,python-protobuf)))
+     (list python-axolotl-curve25519 python-cryptography python-protobuf))
     (home-page "https://github.com/tgalal/python-axolotl")
     (synopsis "Python port of libaxolotl-android")
     (description "This is a python port of libaxolotl-android.  This
@@ -771,38 +754,24 @@ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
            (substitute* "setup.py"
              (("\"wheel\"") ""))
            ;; Remove bundled libsodium.
-           (delete-file-recursively "src/libsodium")
-           #t))
+           (delete-file-recursively "src/libsodium")))
        (sha256
         (base32
          "01b56hxrbif3hx8l6rwz5kljrgvlbj7shmmd2rjh0hn7974a5sal"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules (,@%python-build-system-modules
-                  (guix build utils)
-                  (ice-9 ftw)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases (@ (guix build python-build-system) %standard-phases)
+     `(#:phases
+       (modify-phases %standard-phases
          (add-before 'build 'use-system-sodium
            (lambda _
-             (setenv "SODIUM_INSTALL" "system")
-             #t))
+             (setenv "SODIUM_INSTALL" "system")))
          (replace 'check
            (lambda _
-             (let ((build-directory
-                    (car (scandir "build" (cut string-prefix? "lib" <>)))))
-               (setenv "PYTHONPATH"
-                       (string-append "./build/" build-directory ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest" "-vv")))))))
+             (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("libsodium" ,libsodium)))
+     (list python-cffi python-six libsodium))
     (home-page "https://github.com/pyca/pynacl/")
     (synopsis "Python bindings to libsodium")
     (description
@@ -835,9 +804,7 @@ of improving usability, security and speed.")
              (delete-file "setup.cfg")
              (invoke "pytest"))))))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)))
+     (list python-numpy python-pillow python-pytest))
     (home-page "https://github.com/halcy/blurhash-python")
     (synopsis
      "Pure-Python implementation of the blurhash algorithm")
@@ -858,7 +825,7 @@ of improving usability, security and speed.")
             "1gc3i5s93zq6x1nkaxkq1dvmsc12vmrw0hns9f5s1hcb78ni52c8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/ubinity/ECPy")
     (synopsis "Pure Python Elliptic Curve Library")
     (description "This package provides a Elliptic Curve Library in pure
@@ -883,9 +850,7 @@ Python.")
      ;; The tests require flake8 >= 3.5, which is not yet packaged.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-pyopenssl python-six))
 ;; TODO Enable when we have flake8 >= 3.5.
 ;    (native-inputs
 ;     `(("python-coverage" ,python-coverage)
@@ -936,8 +901,7 @@ protocol (Javascript Object Signing and Encryption).")
        (snippet pycryptodome-unbundle-tomcrypt-snippet)))
     (build-system python-build-system)
     (inputs
-     `(("libtomcrypt" ,libtomcrypt)
-       ("libtommath" ,libtommath)))
+     (list libtomcrypt libtommath))
     (home-page "https://www.pycryptodome.org")
     (synopsis "Low-level cryptographic Python library")
     (description
@@ -1044,8 +1008,8 @@ provides drop-in compatibility with PyCrypto.")))
      `(;; FIXME: Tests start failing with time due to date checks in TLS
        ;; certificates.
        #:tests? #f))
-    (inputs `(("openssl" ,openssl)))
-    (native-inputs `(("swig" ,swig)))
+    (inputs (list openssl))
+    (native-inputs (list swig))
     (home-page "https://gitlab.com/m2crypto/m2crypto")
     (synopsis "Python crypto and TLS toolkit")
     (description "@code{M2Crypto} is a complete Python wrapper for OpenSSL
@@ -1097,12 +1061,12 @@ through the Engine interface.")
                (("==") ">="))
              #t)))))
     (propagated-inputs
-     `(("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-construct" ,python-construct)
-       ("python-dateutil" ,python-dateutil)
-       ("python-future" ,python-future)
-       ("python-lxml" ,python-lxml)
-       ("python-pycryptodomex" ,python-pycryptodomex)))
+     (list python-argon2-cffi
+           python-construct
+           python-dateutil
+           python-future
+           python-lxml
+           python-pycryptodomex))
     (home-page "https://github.com/libkeepass/pykeepass")
     (synopsis "Python library to interact with keepass databases")
     (description
@@ -1142,7 +1106,7 @@ supports KDBX3 and KDBX4.")
     ;; requires "hashlib.scrypt", provided by Python 3.6+ built with OpenSSL
     ;; 1.1+.  Use that as soon as Guix provides it.
     (inputs
-     `(("libscrypt" ,libscrypt)))
+     (list libscrypt))
     (home-page "https://github.com/jvarho/pylibscrypt")
     (synopsis "Scrypt for Python")
     (description "There are a lot of different scrypt modules for Python, but
@@ -1169,13 +1133,11 @@ none of them have everything that I'd like, so here's one more.  It uses
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "libnacl/__init__.py"
                (("/usr/local/lib/libsodium.so")
-                (string-append (assoc-ref inputs "libsodium")
-                               "/lib/libsodium.so")))
-             #t)))))
+                (search-input-file inputs "/lib/libsodium.so"))))))))
     (native-inputs
-     `(("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-pyhamcrest))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (home-page "https://libnacl.readthedocs.org/")
     (synopsis "Python bindings for libsodium based on ctypes")
     (description "@code{libnacl} is used to gain direct access to the
@@ -1217,7 +1179,7 @@ require users to log in.")
          "0hjk71k3mgnl8siikm9lii9im8kv0rb7inkjzx78rnancra48xxr"))))
     (build-system python-build-system)
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://bitbucket.org/mhallin/py-scrypt")
     (synopsis "Bindings for the scrypt key derivation function library")
     (description "This is a set of Python bindings for the scrypt key
@@ -1237,10 +1199,8 @@ derivation function.")
          "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-pyopenssl" ,python-pyopenssl)))
+     (list python-attrs python-pyasn1 python-pyasn1-modules
+           python-pyopenssl))
     (home-page "https://service-identity.readthedocs.io/")
     (synopsis "Service identity verification for PyOpenSSL")
     (description
@@ -1267,7 +1227,7 @@ relevant RFCs too.")
           "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/casebeer/python-hkdf")
     (synopsis "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)")
     (description "This package provides a Python implementation of the HMAC Key
@@ -1287,7 +1247,7 @@ Derivation function (HKDF) defined in RFC 5869.")
           "1x16r7lrbklvfzbacb66qv9iiih6liq1y612dqh2chgf555n2yn1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hkdf" ,python-hkdf)))
+     (list python-hkdf))
     (home-page "https://github.com/warner/python-spake2")
     (synopsis "SPAKE2 password-authenticated key exchange in Python")
     (description "This package provides a Python implementation of the SPAKE2
@@ -1311,12 +1271,12 @@ Password-Authenticated Key Exchange algorithm.")
       ;; <https://github.com/meejah/txtorcon/issues/330>
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-automat" ,python-automat)
-       ("python-idna" ,python-idna)
-       ("python-incremental" ,python-incremental)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-automat
+           python-idna
+           python-incremental
+           python-service-identity
+           python-twisted
+           python-zope-interface))
     (home-page "https://github.com/meejah/txtorcon")
     (synopsis "Twisted-based Tor controller client")
     (description "This package provides a Twisted-based Tor controller client,
@@ -1336,10 +1296,9 @@ with state-tracking and configuration abstractions.")
          "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (inputs
-     `(("keyutils" ,keyutils)))
+     (list keyutils))
     (arguments
      '(#:tests? #f))
     (home-page "https://github.com/sassoftware/python-keyutils")
@@ -1378,9 +1337,7 @@ storing and retrieving sensitive information in your programs.")
              (chdir "scripts")
              #t)))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-intelhex" ,python-intelhex)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-click python-intelhex python-cryptography))
     (home-page "https://mcuboot.com")
     (synopsis "Tool to securely sign firmware images for booting by MCUboot")
     (description "MCUboot is a secure bootloader for 32-bit MCUs.  This
@@ -1401,7 +1358,7 @@ MCUboot.")
          "16mavidki4ma5ip8srqalr19gz4f5yn3cnmmgps1fmgfr24j63rm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (home-page "https://github.com/jborean93/ntlm-auth")
     (synopsis
      "Calculates NTLM Authentication codes")
@@ -1432,8 +1389,7 @@ and Backlog for a list of what is and is not currently supported.")
     (arguments
      '(#:tests? #f)) ; Tests require a running dbus service.
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-jeepney" ,python-jeepney)))
+     (list python-cryptography python-jeepney))
     (home-page "https://github.com/mitya57/secretstorage")
     (synopsis "Python bindings to FreeDesktop.org Secret Service API")
     (description
@@ -1464,14 +1420,14 @@ items and collections, editing items, locking and unlocking collections
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-more-itertools" ,python-more-itertools)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-service-identity" ,python-service-identity)
-       ("python-zipp" ,python-zipp)))
+     (list python-more-itertools
+           python-pyopenssl
+           python-pytest
+           python-pytest-cov
+           python-service-identity
+           python-zipp))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (home-page "https://github.com/python-trio/trustme")
     (synopsis "Fake a certificate authority for tests")
     (description
@@ -1494,9 +1450,9 @@ use in your tests.")
           "0n980gqpzh0fm58h3i4mi2i10wgj606lscm1r5sk60vbf6vh8mv9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)))
+     (list python-pyopenssl))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/LLNL/certipy")
     (synopsis "Utility to create and sign CAs and certificates")
     (description
@@ -1517,11 +1473,8 @@ certificates, signing and building trust bundles.")
          (base32 "0mw6ch5s4czpmsiwqwhcidgk27858pl8vlvb7acrxjkm4ribcnbx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-testpath" ,python-testpath)
-       ("python-tornado" ,python-tornado)
-       ("python-trio" ,python-trio)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-trio" ,python-pytest-trio)))
+     (list python-testpath python-tornado python-trio python-pytest
+           python-pytest-trio))
     (home-page "https://gitlab.com/takluyver/jeepney")
     (synopsis "Low-level, pure Python DBus protocol wrapper")
     (description
@@ -1558,12 +1511,10 @@ I/O-free core, and integration modules for different event loops.")
              ;; see tox.ini
              (invoke "python" "-m" "argon2" "-n" "1" "-t" "1" "-m" "8" "-p" "1"))))))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)))
-    (inputs `(("argon2" ,argon2)))
+     (list python-cffi python-six))
+    (inputs (list argon2))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest))
     (home-page "https://argon2-cffi.readthedocs.io/")
     (synopsis "Secure Password Hashes for Python")
     (description
@@ -1595,10 +1546,9 @@ can decide how long it takes to hash a password and how much memory is required.
            (lambda _
              (invoke "python" "-m" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-cryptography" ,python-cryptography)))
+     (list python-argon2-cffi python-cryptography))
     (home-page "https://www.dropbox.com/developers")
     (synopsis "Library to password-protect your data")
     (description
@@ -1626,12 +1576,12 @@ signatures.")
              (when tests?
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pytest" ,python-pytest)
-       ("python-singledispatch" ,python-singledispatch)
-       ("python-six" ,python-six)
-       ("python-wheel" ,python-wheel)))
+     (list python-cryptography
+           python-pyasn1
+           python-pytest
+           python-singledispatch
+           python-six
+           python-wheel))
     (home-page "https://github.com/SecurityInnovation/PGPy")
     (synopsis "Python implementation of OpenPGP")
     (description
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 13ee6b3df6..d23c56daa6 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -75,20 +75,17 @@
         (base32 "0rh5b1rwdcvvagld8vpxnpaibszy1skpx39a0fwzd5gx5pwcjvfb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-numpy python-matplotlib python-pyparsing))
     (inputs
-     `(("openblas" ,openblas)
-       ("pybind11" ,pybind11)))
+     (list openblas pybind11))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-numpydoc" ,python-numpydoc)
-       ("gfortran" ,gfortran)
-       ("perl" ,perl)
-       ("which" ,which)))
+     (list python-cython
+           python-pytest
+           python-sphinx
+           python-numpydoc
+           gfortran
+           perl
+           which))
     (outputs '("out" "doc"))
     (arguments
      `(#:phases
@@ -186,7 +183,16 @@ routines such as routines for numerical integration and optimization.")
        (uri (pypi-uri "scipy" version))
        (sha256
         (base32
-         "1cgvgin8fvckv96hjh3ikmwkra5rif51bdb75ifzf7xbil5iwcx4"))))))
+         "1cgvgin8fvckv96hjh3ikmwkra5rif51bdb75ifzf7xbil5iwcx4"))))
+    (native-inputs
+     (list python2-cython
+           python2-pytest
+           python2-sphinx
+           python2-numpydoc
+           gfortran-7
+           gcc-7
+           perl
+           which))))
 
 (define-public python2-weave
   (package
@@ -209,9 +215,9 @@ routines such as routines for numerical integration and optimization.")
                      "--exclude"
                      "test_(user|incorrect_ownership|char_fail|obj_fail)"))))))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy)))
+     (list python2-numpy))
     (native-inputs
-     `(("python-nose" ,python2-nose)))
+     (list python2-nose))
     (home-page "https://www.scipy.org/")
     (synopsis "Tools for including C/C++ code within Python code")
     (description "Weave is the stand-alone version of the obsolete Scipy
@@ -240,11 +246,9 @@ Cython.")
              (invoke "nosetests" "-s" "-v" "skfuzzy")
              #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-networkx python-numpy python-scipy))
     (home-page "https://github.com/scikit-fuzzy/scikit-fuzzy")
     (synopsis "Fuzzy logic toolkit for SciPy")
     (description
@@ -284,24 +288,24 @@ logic, also known as grey logic.")
     ;; NOTE: scikit-image has an optional dependency on python-pooch, however
     ;; propagating it would enable many more tests that require online data.
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dask" ,python-dask)
-       ("python-imageio" ,python-imageio)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pywavelets" ,python-pywavelets)
-       ("python-scipy" ,python-scipy)
-       ("python-tifffile" ,python-tifffile)))
+     (list python-cloudpickle
+           python-dask
+           python-imageio
+           python-matplotlib
+           python-networkx
+           python-numpy
+           python-pillow
+           python-pywavelets
+           python-scipy
+           python-tifffile))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-cython" ,python-cython)
-       ("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-localserver" ,python-pytest-localserver)
-       ("python-wheel" ,python-wheel)))
+     (list python-codecov
+           python-cython
+           python-flake8
+           python-pytest
+           python-pytest-cov
+           python-pytest-localserver
+           python-wheel))
     (home-page "https://scikit-image.org/")
     (synopsis "Image processing in Python")
     (description
@@ -320,7 +324,7 @@ logic, also known as grey logic.")
         (base32 "0dncp9i5b6afkg7f8mj9j0qzsp008b8v73yc0qkmizhpns7mvwvx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/brandon-rhodes/python-sgp4")
     (synopsis "Track earth satellite TLE orbits using SGP4")
     (description
@@ -331,13 +335,13 @@ of the SGP4 satellite tracking algorithm.")
 (define-public python-pandas
   (package
     (name "python-pandas")
-    (version "1.3.3")
+    (version "1.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pandas" version))
        (sha256
-        (base32 "1pq1nwj2kysy2g3p18wjb1xn8vk1jhcyisxilsnkwyd99aqqqb17"))))
+        (base32 "1z3gm521wpm3j13rwhlb4f2x0645zvxkgxij37i3imdpy39iiam2"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -360,47 +364,49 @@ of the SGP4 satellite tracking algorithm.")
              ;; xsel needs to write a log file.
              (setenv "HOME" "/tmp")))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              (let ((build-directory
                     (string-append
                      (getcwd) "/build/"
                      (first (scandir "build"
                                      (cut string-prefix? "lib." <>))))))
+               (substitute* "pyproject.toml"
+                 ;; Not all data files are distributed with the tarball.
+                 (("--strict-data-files ") ""))
                (with-directory-excursion build-directory
-                 (invoke "pytest" "-vv" "pandas" "--skip-slow"
-                         "--skip-network"
-                         "-k"
-                         ;; These tets access the internet:
-                         ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
-                         ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
-                         ;; TODO: the excel tests fail for unknown reasons
-                         (string-append "not test_wrong_url"
-                                        " and not test_excelwriter_fspath"
-                                        " and not test_ExcelWriter_dispatch"
-                                        ;; TODO: Missing input
-                                        " and not TestS3"
-                                        " and not s3")))))))))
+                 (when tests?
+                   (invoke "pytest" "-vv" "pandas" "--skip-slow"
+                           "--skip-network"
+                           "-k"
+                           ;; These tets access the internet:
+                           ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
+                           ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
+                           ;; TODO: the excel tests fail for unknown reasons
+                           (string-append "not test_wrong_url"
+                                          " and not test_excelwriter_fspath"
+                                          " and not test_ExcelWriter_dispatch"
+                                          ;; TODO: Missing input
+                                          " and not TestS3"
+                                          " and not s3"))))))))))
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-pytz" ,python-pytz)
-       ("python-dateutil" ,python-dateutil)
-       ("python-xlrd" ,python-xlrd)))
+     (list python-jinja2
+           python-numpy
+           python-openpyxl
+           python-pytz
+           python-dateutil
+           python-xlrd))
     (inputs
-     `(("which" ,which)
-       ("xclip" ,xclip)
-       ("xsel" ,xsel)))
+     (list which xclip xsel))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-html5lib" ,python-html5lib)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ;; Needed to test clipboard support.
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-cython
+           python-beautifulsoup4
+           python-lxml
+           python-html5lib
+           python-nose
+           python-pytest
+           python-pytest-mock
+           ;; Needed to test clipboard support.
+           xorg-server-for-tests))
     (home-page "https://pandas.pydata.org")
     (synopsis "Data structures for data analysis, time series, and statistics")
     (description
@@ -495,21 +501,18 @@ doing practical, real world data analysis in Python.")
                            ;; XXX: Due to the deleted tests above.
                            "not test_read_s3_jsonl"))))))))
       (propagated-inputs
-       `(("python-numpy" ,python2-numpy)
-         ("python-openpyxl" ,python2-openpyxl)
-         ("python-pytz" ,python2-pytz)
-         ("python-dateutil" ,python2-dateutil)
-         ("python-xlrd" ,python2-xlrd)))
+       (list python2-numpy python2-openpyxl python2-pytz python2-dateutil
+             python2-xlrd))
       (inputs
-       `(("which" ,which)))
+       (list which))
       (native-inputs
-       `(("python-cython" ,python2-cython)
-         ("python-beautifulsoup4" ,python2-beautifulsoup4)
-         ("python-lxml" ,python2-lxml)
-         ("python-html5lib" ,python2-html5lib)
-         ("python-nose" ,python2-nose)
-         ("python-pytest" ,python2-pytest)
-         ("python-pytest-mock" ,python2-pytest-mock))))))
+       (list python2-cython
+             python2-beautifulsoup4
+             python2-lxml
+             python2-html5lib
+             python2-nose
+             python2-pytest
+             python2-pytest-mock)))))
 
 (define-public python-pyflow
   (package
@@ -550,11 +553,9 @@ context of a task dependency graph.  It has some similarities to make.")
            (lambda _
              (invoke "python" "setup.py" "pytest"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/pydata/bottleneck")
     (synopsis "Fast NumPy array functions written in C")
     (description
@@ -574,9 +575,7 @@ written in C.")
         (base32 "1c1354a7b3g8slychjgyjxqdm8z40z9kviyl9n4g9kfpdg0p4d64"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-scipy))
     (home-page "https://github.com/janezd/baycomp")
     (synopsis "Library for comparison of Bayesian classifiers")
     (description
@@ -600,11 +599,9 @@ higher scores.")
                 "1yx8j66b7rn10m2l6gmn8yr9cn38pi5cj0x0wwpy4hdnhy6i7qv4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)))
+     (list python-numpy python-pandas))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -636,8 +633,7 @@ and visualization with these data structures.")
          "0syzy645mwcy7lfjwz6pc8f9p2vv1qk4limc8iina3l5nnf0rjyz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-msgpack" ,python-msgpack)
-       ("python-numpy" ,python-numpy)))
+     (list python-msgpack python-numpy))
     (home-page "https://github.com/lebedov/msgpack-numpy")
     (synopsis
      "Numpy data serialization using msgpack")
@@ -671,7 +667,7 @@ Python's native complex data types is also supported.")
                (with-directory-excursion "ruffus/test"
                  (invoke "bash" "run_all_unit_tests3.cmd"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://www.ruffus.org.uk")
     (synopsis "Light-weight computational pipeline management")
     (description
@@ -692,11 +688,8 @@ automated with the minimum of fuss and the least effort.")
          "1f8c2sylzr7lpjbyqxsqlp9xi8rj3d8c9hfh98x4jbb83zxc4026"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-seaborn python-matplotlib python-pandas
+           python-scipy))
     (home-page
      "https://github.com/webermarcolivier/statannot")
     (synopsis "Add annotations to existing plots generated by seaborn")
@@ -729,11 +722,9 @@ annotations on an existing boxplots and barplots generated by seaborn.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-v" "--doctest-modules"))))))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-pandas" ,python-pandas)))
+     (list python-matplotlib python-pandas))
     (native-inputs
-     `(("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-runner python-pytest-cov))
     (home-page "https://upsetplot.readthedocs.io")
     (synopsis "Draw UpSet plots with Pandas and Matplotlib")
     (description
@@ -777,7 +768,7 @@ readable.")
        ("pkgconfig" ,python-pkgconfig)
        ("matplotlib" ,python-matplotlib)))
     (native-inputs ; for python-pkgconfig
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      `(("numpy" ,python-numpy)
        ("vtk" ,vtk)))
@@ -813,8 +804,7 @@ dependencies.")
          "12g4av8gpl6l83yza3h97j3f2jblqv69frlidrvdq8ny2rc6awbq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-xarray" ,python-xarray)))
+     (list python-pandas python-xarray))
     (home-page "https://github.com/Zsailer/pandas_flavor")
     (synopsis "Write your own flavor of Pandas")
     (description "Pandas 0.23 added a simple API for registering accessors
@@ -861,19 +851,18 @@ of Pandas
              (when tests?
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-mpmath" ,python-mpmath)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pandas-flavor" ,python-pandas-flavor)
-       ("python-scikit-learn" ,python-scikit-learn)
-       ("python-scipy" ,python-scipy)
-       ("python-seaborn" ,python-seaborn)
-       ("python-statsmodels" ,python-statsmodels)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-matplotlib
+           python-mpmath
+           python-numpy
+           python-pandas
+           python-pandas-flavor
+           python-scikit-learn
+           python-scipy
+           python-seaborn
+           python-statsmodels
+           python-tabulate))
     (home-page "https://pingouin-stats.org/")
     (synopsis "Statistical package for Python")
     (description "Pingouin is a statistical package written in Python 3 and
@@ -951,21 +940,21 @@ and more
                         ;; "AttributeError: module 'distributed.dashboard' has no attribute 'scheduler'"
                         " and not test_get_client_functions_spawn_clusters"))))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-cloudpickle" ,python-cloudpickle)
-       ("python-cryptography" ,python-cryptography)
-       ("python-dask" ,python-dask)
-       ("python-msgpack" ,python-msgpack)
-       ("python-psutil" ,python-psutil)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-tblib" ,python-tblib)
-       ("python-toolz" ,python-toolz)
-       ("python-tornado" ,python-tornado-6)
-       ("python-zict" ,python-zict)))
+     (list python-click
+           python-cloudpickle
+           python-cryptography
+           python-dask
+           python-msgpack
+           python-psutil
+           python-pyyaml
+           python-setuptools
+           python-sortedcontainers
+           python-tblib
+           python-toolz
+           python-tornado-6
+           python-zict))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://distributed.dask.org")
     (synopsis "Distributed scheduler for Dask")
     (description "Dask.distributed is a lightweight library for distributed
@@ -1005,31 +994,31 @@ computing in Python.  It extends both the @code{concurrent.futures} and
                (invoke "python" "-m" "pytest"
                        "modin/pandas/test/test_concat.py")))))))
     (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dask" ,python-dask)
-       ("python-distributed" ,python-distributed)
-       ("python-numpy" ,python-numpy)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)))
+     (list python-cloudpickle
+           python-dask
+           python-distributed
+           python-numpy
+           python-packaging
+           python-pandas))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-jinja2" ,python-jinja2)
-       ("python-lxml" ,python-lxml)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-msgpack" ,python-msgpack)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-psutil" ,python-psutil)
-       ("python-pyarrow" ,python-pyarrow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-scipy" ,python-scipy)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-tables" ,python-tables)
-       ("python-tqdm" ,python-tqdm)
-       ("python-xarray" ,python-xarray)
-       ("python-xlrd" ,python-xlrd)))
+     (list python-coverage
+           python-jinja2
+           python-lxml
+           python-matplotlib
+           python-msgpack
+           python-openpyxl
+           python-psutil
+           python-pyarrow
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-pytest-xdist
+           python-scipy
+           python-sqlalchemy
+           python-tables
+           python-tqdm
+           python-xarray
+           python-xlrd))
     (home-page "https://github.com/modin-project/modin")
     (synopsis "Make your pandas code run faster")
     (description
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 964a045049..c966710512 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <andreas@enge.fr>
@@ -68,6 +68,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
@@ -102,23 +103,23 @@
 (define-public python-prawcore
   (package
     (name "python-prawcore")
-    (version "2.0.0")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "prawcore" version))
        (sha256
-        (base32 "1l9nrn4s03xl8fvkyybdk86bm9cyyk43alkxf9g014a9ynvdk65l"))))
+        (base32 "0vgmhjddqxnz5vy70dyqvakak51fg1nk6j3xavkc83d8nzacrwfs"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-betamax-matchers" ,python-betamax-matchers)
-       ("python-betamax-serializers" ,python-betamax-serializers)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-testfixtures" ,python-testfixtures)))
-    (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-betamax
+           python-betamax-matchers
+           python-betamax-serializers
+           python-mock
+           python-pytest
+           python-testfixtures))
+    (propagated-inputs
+     (list python-requests))
     (synopsis "Core component of PRAW")
     (description "PRAWcore is a low-level communication layer used by PRAW.")
     (home-page "https://praw.readthedocs.io/en/latest/")
@@ -127,13 +128,13 @@
 (define-public python-praw
   (package
     (name "python-praw")
-    (version "7.2.0")
+    (version "7.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "praw" version))
        (sha256
-        (base32 "0ll1a0n8xs8gykizdsfrw63jp6bc39ab0pk3yzwcak96fyxh0ij3"))))
+        (base32 "1nqcwz8r8xp4rfpy2i11x2fjga8fmmf6zw94xjk1h1yxgn1gq6zr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -141,25 +142,22 @@
          (add-after 'unpack 'disable-failing-tests
            (lambda _
              (with-directory-excursion "tests"
-               ;; Require networking.
+               ;; Integration tests depend on files that are not included.
                (for-each delete-file-recursively
                          '("integration/models" "unit/models"))
-               ;; https://github.com/praw-dev/praw/issues/1699
-               ;; #issuecomment-795336704
-               (delete-file "unit/test_config.py"))
-             #t))
+               ;; The configuration file does not seem to exist.
+               (delete-file "unit/test_config.py"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "pytest"))
-             #t)))))
+               (invoke "pytest" "-k"
+                       ;; These tests depend on test files that don't exist.
+                       (string-append "not test_bad_request_without_json_text_plain_response"
+                                      " and not test_bad_request_without_json_text_html_response"))))))))
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-betamax-matchers" ,python-betamax-matchers)
-       ("python-pytest" ,python-pytest)))
+     (list python-betamax python-betamax-matchers python-pytest))
     (propagated-inputs
-     `(("python-prawcore" ,python-prawcore)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-prawcore python-update-checker python-websocket-client))
     (synopsis "Python Reddit API Wrapper")
     (description "PRAW is a Python package that allows for simple access to
 Reddit’s API.  It aims to be easy to use and internally follows all of Reddit’s
@@ -207,8 +205,7 @@ API rules.")
                 (string-append "@pytest.mark.xfail\n" all)))
 
              ;; Don't test the aiohttp pytest plugin to avoid a dependency loop.
-             (delete-file "tests/test_pytest_plugin.py")
-             #t))
+             (delete-file "tests/test_pytest_plugin.py")))
          (add-before 'build 'cythonize
            (lambda _
              ;; Adapted from the Makefile.
@@ -216,36 +213,34 @@ API rules.")
                (for-each
                  (lambda (file)
                    (invoke "cython" "-3"
-                           file "-I" "aiohttp"))
+                           file "-I" "."))
                  (find-files "." "_.*\\.pyx$")))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             (setenv "PYTHONPATH"
-                     (string-append ".:" (getenv "PYTHONPATH")))
              (if tests?
                  (invoke "pytest" "-vv"
                          ;; Disable loading the aiohttp coverage plugin
                          ;; to avoid a circular dependency (code coverage
                          ;; is not very interesting to us anyway).
-                         "-o" "addopts=''")
+                         "-o" "addopts=''" "--ignore=aiohttp")
                  (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-aiodns" ,python-aiodns)
-       ("python-async-timeout" ,python-async-timeout)
-       ("python-attrs" ,python-attrs)   ;note: remove for > 3.7
-       ("python-chardet" ,python-chardet)
-       ("python-idna-ssl" ,python-idna-ssl)
-       ("python-multidict" ,python-multidict)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-yarl" ,python-yarl)))
+     (list python-aiodns
+           python-async-timeout
+           python-attrs ;note: remove for > 3.7
+           python-chardet
+           python-idna-ssl
+           python-multidict
+           python-typing-extensions
+           python-yarl))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-re-assert" ,python-re-assert)
-       ("gunicorn" ,gunicorn-bootstrap)
-       ("python-freezegun" ,python-freezegun)
-       ("python-async-generator" ,python-async-generator)))
+     (list gunicorn-bootstrap
+           python-async-generator
+           python-cython
+           python-freezegun
+           python-pytest-6.1
+           python-pytest-mock
+           python-re-assert))
     (home-page "https://github.com/aio-libs/aiohttp/")
     (synopsis "Async HTTP client/server framework (asyncio)")
     (description "@code{aiohttp} is an asynchronous HTTP client/server
@@ -273,9 +268,7 @@ Callback Hell.
          "04w010bvi719ifpc3sshav95k10hf9nq8czn9yglkj206yxcypdr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-attrs" ,python-attrs)
-       ("python-socks" ,python-socks)))
+     (list python-aiohttp python-attrs python-socks))
     (home-page "https://github.com/romis2012/aiohttp-socks")
     (synopsis "SOCKS proxy connector for aiohttp")
     (description "This package provides a SOCKS proxy connector for
@@ -295,7 +288,7 @@ aiohttp.  It supports SOCKS4(a) and SOCKS5.")
          "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycares" ,python-pycares)))
+     (list python-pycares))
     (arguments
      `(#:tests? #f))                    ;tests require internet access
     (home-page "https://github.com/saghul/aiodns")
@@ -318,7 +311,7 @@ using @url{https://github.com/saghul/pycares,pycares}.")
          "0lx54bcinp44fmr8q4bbffsqbkg8kdcwykf9i5jj0bj3sfzgf9k0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)))
+     (list python-attrs))
     (home-page "https://github.com/kyuupichan/aiorpcX")
     (synopsis "Generic asyncio RPC implementation")
     (description
@@ -345,25 +338,22 @@ comes with a SOCKS proxy client.")
 (define-public python-asgiref
   (package
     (name "python-asgiref")
-    (version "3.3.4")
+    (version "3.4.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "asgiref" version))
               (sha256
-               (base32
-                "0y0vdzldjkbs4pxf10pi6jpxq9b2sfp1rlwm153jcf5nvzxns8fi"))))
+               (base32 "1saqgpgbdvb8awzm0f0640j0im55hkrfzvcw683cgqw4ni3apwaf"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv"))))))
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest python-pytest-asyncio))
     (home-page "https://github.com/django/asgiref/")
     (synopsis "ASGI specs, helper code, and adapters")
     (description
@@ -386,7 +376,7 @@ WSGI.  This package includes libraries for implementing ASGI servers.")
     ;; XXX: The git repository has no tags, and the PyPI releases do not
     ;; contain tests.
     (arguments '(#:tests? #f))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://github.com/juancarlospaco/css-html-js-minify")
     (synopsis "CSS/HTML/JS minifier")
     (description
@@ -420,9 +410,7 @@ WSGI.  This package includes libraries for implementing ASGI servers.")
                         (("(.*)(~=[0-9\\.]+)" all package version)
                          package)))))))
     (propagated-inputs
-     `(("python-boto3" ,python-boto3)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-six" ,python-six)))
+     (list python-boto3 python-jsonschema python-six))
     (home-page "https://github.com/aws/serverless-application-model")
     (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
     (description
@@ -470,28 +458,27 @@ Model} (SAM) templates into AWS CloudFormation templates.")
                                   "tests/ext/aiohttp/test_client.py"))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:.:"
-                                             (getenv "PYTHONPATH")))
+                      ;; Allow "import tests.utils" to work as expected.
+                      (setenv "PYTHONPATH" (getcwd))
                       (invoke "pytest" "-vv" "tests"))))))
     (native-inputs
-     `(;; These are required for the test suite.
-       ("python-bottle" ,python-bottle)
-       ("python-flask" ,python-flask)
-       ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)
-       ("python-pymysql" ,python-pymysql)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-requests" ,python-requests)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-webtest" ,python-webtest)))
-    (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-botocore" ,python-botocore)
-       ("python-future" ,python-future)
-       ("python-jsonpickle" ,python-jsonpickle)
-       ("python-urllib3" ,python-urllib3)
-       ("python-wrapt" ,python-wrapt)))
+     (list ;; These are required for the test suite.
+           python-bottle
+           python-flask
+           python-flask-sqlalchemy
+           python-pymysql
+           python-pytest
+           python-pytest-aiohttp
+           python-requests
+           python-sqlalchemy
+           python-webtest))
+    (propagated-inputs
+     (list python-aiohttp
+           python-botocore
+           python-future
+           python-jsonpickle
+           python-urllib3
+           python-wrapt))
     (synopsis "Profile applications on AWS X-Ray")
     (description
      "The AWS X-Ray SDK for Python enables Python developers to record and
@@ -532,16 +519,15 @@ emit information from within their applications to the AWS X-Ray service.")
                  (invoke "python" "-m" "unittest" "discover"
                          "-s" "test"))))))))
     (native-inputs
-     `(("python-pydot" ,python-pydot)
-       ("python-mock" ,python-mock)))
-    (propagated-inputs
-     `(("python-aws-sam-translator" ,python-aws-sam-translator)
-       ("python-jsonpatch" ,python-jsonpatch)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-junit-xml" ,python-junit-xml)
-       ("python-networkx" ,python-networkx)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-pydot python-mock))
+    (propagated-inputs
+     (list python-aws-sam-translator
+           python-jsonpatch
+           python-jsonschema
+           python-junit-xml
+           python-networkx
+           python-pyyaml
+           python-six))
     (synopsis "Validate CloudFormation templates")
     (description
      "This package lets you validate CloudFormation YAML/JSON templates against
@@ -584,18 +570,18 @@ for resource properties and best practices.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "--ignore" "falcon"))))))
     (propagated-inputs
-     `(("python-mimeparse" ,python-mimeparse)))
+     (list python-mimeparse))
     (native-inputs
-     `(("python-cython" ,python-cython) ;for faster binaries
-       ("python-mujson" ,python-mujson)
-       ("python-msgpack" ,python-msgpack)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-rapidjson" ,python-rapidjson)
-       ("python-requests" ,python-requests)
-       ("python-testtools" ,python-testtools)
-       ("python-ujson" ,python-ujson)))
+     (list python-cython ;for faster binaries
+           python-mujson
+           python-msgpack
+           python-pytest
+           python-pytest-runner
+           python-pyyaml
+           python-rapidjson
+           python-requests
+           python-testtools
+           python-ujson))
     (home-page "https://falconframework.org")
     (synopsis
      "Web framework for building APIs and application backends")
@@ -630,7 +616,7 @@ classes
          "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-falcon" ,python-falcon)))
+     (list python-falcon))
     (home-page
      "https://github.com/lwcolton/falcon-cors")
     (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
@@ -653,10 +639,9 @@ over a different origin than that of the web application.")
             "0knc76pm8pzigs3bpx9fccfsfxqrgblqphar46hq9i364vz8hqas"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-orderedmultidict" ,python-orderedmultidict)))
+     (list python-six python-orderedmultidict))
     (native-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (home-page "https://github.com/gruns/furl")
     (synopsis "URL manipulation in Python")
     (description "Furl provides an easy-to-use alternative to the
@@ -701,10 +686,8 @@ other HTTP libraries.")
      ;; The tests attempt to access external web servers, so we cannot run them.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)))
+     (list python-colorama python-pygments python-requests
+           python-requests-toolbelt-0.9.1))
     (home-page "https://httpie.io")
     (synopsis "cURL-like tool for humans")
     (description
@@ -735,7 +718,7 @@ HTTP servers, RESTful APIs, and web services.")
            (lambda _
              (invoke "pytest" "test/"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/Alir3z4/html2text")
     (synopsis "Convert HTML into plain text")
     (description "html2text takes HTML and converts it into plain ASCII text
@@ -779,15 +762,11 @@ Swartz.")
                  (format #t "test suite not run~%"))
              #t)))))
     (native-inputs
-     `(;; All native inputs are for tests.
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
-    (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-rsa" ,python-rsa)
-       ("python-six" ,python-six)))
+     (list ;; All native inputs are for tests.
+           python-pyasn1 python-pytest python-pytest-cov
+           python-pytest-runner))
+    (propagated-inputs
+     (list python-cryptography python-ecdsa python-rsa python-six))
     (synopsis "JOSE implementation in Python")
     (description
      "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
@@ -799,33 +778,30 @@ content using a variety of algorithms.")
 (define-public python-jsonpickle
   (package
     (name "python-jsonpickle")
-    (version "1.4.1")
+    (version "1.5.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "jsonpickle" version))
               (sha256
                (base32
-                "1fn86z468hamw8njh2grw2xdhsm7g48dyxs3lw0n10nn1g6vgm78"))))
+                "0n93h9b9ad58lxdfbvgsh4b25mkg146qikzcgghyc75vjk7rp2cy"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"
                               ;; Prevent running the flake8 and black
                               ;; pytest plugins, which only tests style
                               ;; and frequently causes harmless failures.
                               "-o" "addopts=''"))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)  ;XXX: for setuptools_scm[toml]
-       ;; For tests.
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm
+           python-toml ;XXX: for setuptools_scm[toml]
+           ;; For tests.
+           python-numpy
+           python-pandas
+           python-pytest))
     (home-page "https://jsonpickle.github.io/")
     (synopsis "Serialize object graphs into JSON")
     (description
@@ -845,17 +821,14 @@ object graph to and from JSON.")
         (base32 "01sddjxy3rznh63hnl5lbv1hhk6xyiviwmkiw4x7v4ap35fb3lrp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-lxml python-requests python-six))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-httpbin" ,python-pytest-httpbin)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-requests-mock" ,python-requests-mock)))
+     (list python-pytest-cov
+           python-pytest-flake8
+           python-pytest-httpbin
+           python-pytest-mock
+           python-pytest-runner
+           python-requests-mock))
     (home-page "https://mechanicalsoup.readthedocs.io/")
     (synopsis "Python library for automating website interaction")
     (description
@@ -884,7 +857,7 @@ follow links and submit forms.  It doesn’t do JavaScript.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-hyper/hyperframe")
     (synopsis "HTTP/2 framing layer for Python")
     (description
@@ -917,7 +890,7 @@ into HTTP/2 frames.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://hyper.rtfd.org")
     (synopsis "Pure-Python HPACK header compression")
     (description
@@ -944,7 +917,7 @@ for use in Python programs that implement HTTP/2.")
              (when tests?
                (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-hyper/h11")
     (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
     (description
@@ -974,11 +947,9 @@ and that could be anything you want.")
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "-m" "pytest" "-vv" "test")))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis-6.23)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis-6.23 python-pytest))
     (propagated-inputs
-     `(("python-hpack" ,python-hpack)
-       ("python-hyperframe" ,python-hyperframe)))
+     (list python-hpack python-hyperframe))
     (home-page "https://github.com/python-hyper/h2")
     (synopsis "HTTP/2 State-Machine based protocol implementation")
     (description
@@ -1006,7 +977,7 @@ Python HTTP implementation.")
        ;; dependencies
        #:tests? #f))
     (propagated-inputs
-     `(("python-tornado" ,python-tornado)))
+     (list python-tornado))
     (home-page "https://github.com/mrjoes/sockjs-tornado/")
     (synopsis
      "SockJS Python server implementation on top of the Tornado framework")
@@ -1040,10 +1011,7 @@ between a web browser and web server.")
                       (with-directory-excursion "tests"
                         (invoke "python" "tests.py")))))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-babel" ,python-babel)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pytz" ,python-pytz)))
+     (list python-flask python-babel python-jinja2 python-pytz))
     (home-page "https://github.com/python-babel/flask-babel")
     (synopsis "Add i18n/l10n support to Flask applications")
     (description "This package implements internationalization and localization
@@ -1063,11 +1031,9 @@ both of which are installed automatically if you install this library.")
                 "1f36hkaxc92zn12f88fkzwifdvlvsnmlp1dv3p5inpcc500c3kvb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-nose" ,python-nose)
-       ("python-packaging" ,python-packaging)))
+     (list python-flask python-nose python-packaging))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://flask-cors.readthedocs.io/en/latest/")
     (synopsis "Handle Cross-Origin Resource Sharing with Flask")
     (description
@@ -1090,10 +1056,9 @@ Origin Resource Sharing}, making cross-origin AJAX possible.")
     (arguments
      '(#:tests? #f))        ; Tests seem to be incompatible with latest python
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)
-       ("python-flask" ,python-flask)))
+     (list python-markdown python-flask))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/dcolish/flask-markdown")
     (synopsis "Small extension to help with using Markdown in Flask")
     (description
@@ -1114,11 +1079,9 @@ into Jinja2 by default.")
             "12gm6hq3lvlj0ddw8p6lk5pky8jk3pw758ihffjl49shnnzc68zl"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-coverage" ,python-coverage)
-        ("python-mock" ,python-mock)))
+      (list python-coverage python-mock))
     (propagated-inputs
-      `(("python-flask" ,python-flask)
-        ("python-misaka" ,python-misaka)))
+      (list python-flask python-misaka))
     (home-page "https://github.com/singingwolfboy/flask-misaka/")
     (synopsis "Flask interface to Misaka, a Markdown parsing library")
     (description
@@ -1141,7 +1104,7 @@ the Misaka Markdown parser.")
     (arguments
      '(#:tests? #f)) ; Tests require the various storage backends to be present
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://github.com/fengsp/flask-session")
     (synopsis "Adds server-side session support to your Flask application")
     (description
@@ -1163,10 +1126,9 @@ storage.")
             "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-webencodings" ,python-webencodings)
-       ;; Required by Calibre 5.
-       ("python-chardet" ,python-chardet)))
+     (list python-six python-webencodings
+           ;; Required by Calibre 5.
+           python-chardet))
     (arguments
      `(#:test-target "check"))
     (home-page
@@ -1209,12 +1171,11 @@ and written in Python.")
                 "13yl3vnf3sxl05m0nhpngnrz3g1jvyahd33lys3m3hfb91l8zzi5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-lxml python-beautifulsoup4 python-chardet))
     (home-page "https://html5-parser.readthedocs.io")
     (synopsis "Fast C-based HTML5 parsing for Python")
     (description "This package provides a fast implementation of the HTML5
@@ -1247,15 +1208,10 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
                       (delete-file "tests/unit/credentials_test.py")
                       #t)))))
     (native-inputs
-     `(("python-faker" ,python-faker)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
-    (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-configparser" ,python-configparser)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-faker python-mock python-nose))
+    (propagated-inputs
+     (list python-certifi python-configparser python-dateutil python-pytz
+           python-urllib3))
     (home-page "https://github.com/minio/minio-py")
     (synopsis "Programmatically access Amazon S3 from Python")
     (description
@@ -1287,11 +1243,9 @@ Amazon S3 compatible object storage server.")
                         (setenv "PYCURL_SSL_LIBRARY" "gnutls")
                         #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-bottle" ,python-bottle)))
+     (list python-nose python-bottle))
     (inputs
-     `(("curl" ,curl)
-       ("gnutls" ,gnutls)))
+     (list curl gnutls))
     (home-page "http://pycurl.io/")
     (synopsis "Lightweight Python wrapper around libcurl")
     (description "Pycurl is a lightweight wrapper around libcurl.  It provides
@@ -1323,7 +1277,7 @@ high-speed transfers via libcurl and frequently outperforms alternatives.")
              (invoke "py.test" "-v" "webencodings/tests.py")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/SimonSapin/python-webencodings")
     (synopsis "Character encoding aliases for legacy web content")
     (description
@@ -1366,11 +1320,9 @@ is Python’s.")
                     "unittest" "openid.test.test_suite"))))))
     (properties `((python2-variant . ,(delay python2-openid))))
     (propagated-inputs
-     `(("python-defusedxml" ,python-defusedxml)))
+     (list python-defusedxml))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-django" ,python-django)))
+     (list python-coverage python-psycopg2 python-django))
     (home-page "https://github.com/necaris/python3-openid")
     (synopsis "OpenID support for servers and consumers")
     (description "This library provides OpenID authentication for Python, both
@@ -1413,7 +1365,7 @@ for clients and servers.")
           "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))               ; for unpacking the source
+     (list unzip))               ; for unpacking the source
     (arguments
      `(#:tests? #f))                    ; tests require python-pbr < 1.7.0
     (home-page "http://cthedot.de/cssutils/")
@@ -1474,8 +1426,7 @@ cssutils not receiving updates as of 1.0.2.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-pytest" ,python-pytest)))
+     (list python-lxml python-pytest))
     (home-page "https://github.com/scrapy/cssselect")
     (synopsis "CSS3 selector parser and translator to XPath 1.0")
     (description
@@ -1504,25 +1455,16 @@ another XPath engine to find the matching elements in an XML or HTML document.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "tests" "-vv"
                               ;; XXX: This fails with newer Pytest
                               ;; (upstream uses Pytest 3..).
                               "-k" "not test_get_request_with_list"))))))
     (native-inputs
-     `(;; For tests.
-       ("python-decorator" ,python-decorator)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-requests-mock" ,python-requests-mock)))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-configparser" ,python-configparser)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-tabulate" ,python-tabulate)))
+     (list ;; For tests.
+           python-decorator python-mock python-pytest python-requests-mock))
+    (propagated-inputs
+     (list python-click python-configparser python-requests python-six
+           python-tabulate))
     (synopsis "Command line interface for Databricks")
     (description
      "The Databricks Command Line Interface is a tool which provides an easy
@@ -1596,10 +1538,8 @@ teams extension for python-openid.")
                      ;; This test exceeded the Hypothesis deadline.
                      "not test_period_of_repetition"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-hypothesis python-pytest python-pytest-cov
+           python-pytest-xdist))
     (home-page "https://python-hyper.org/projects/priority/en/latest/")
     (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
     (description
@@ -1626,9 +1566,9 @@ set out in RFC 7540 Section 5.3 (Stream Priority).")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-h11" ,python-h11)))
+     (list python-h11))
     (home-page "https://github.com/python-hyper/wsproto/")
     (synopsis "WebSockets state-machine based protocol implementation")
     (description
@@ -1659,20 +1599,20 @@ RFC6455, regardless of your programming paradigm.")
                (invoke "python" "-m" "pytest")))))))
     ;; Propagate because Hypercorn also exposes functionality over a module.
     (propagated-inputs
-     `(("python-h11" ,python-h11)
-       ("python-h2" ,python-h2)
-       ("python-priority" ,python-priority)
-       ("python-toml" ,python-toml)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-wsproto" ,python-wsproto)))
+     (list python-h11
+           python-h2
+           python-priority
+           python-toml
+           python-typing-extensions
+           python-wsproto))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-trio" ,python-trio)))
+     (list python-hypothesis
+           python-mock
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-trio
+           python-trio))
     (home-page "https://gitlab.com/pgjones/hypercorn/")
     (synopsis "ASGI Server based on Hyper libraries")
     (description
@@ -1707,7 +1647,7 @@ utilise asyncio, uvloop, or trio worker types.")
                          "True"))
                       (invoke "python" "querystring_parser/tests.py"))))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/bernii/querystring-parser")
     (synopsis "QueryString parser that correctly handles nested dictionaries")
     (description
@@ -1741,7 +1681,7 @@ data.")
        ;;       #t)))
        #:tests? #f))
     (native-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://www.tornadoweb.org/")
     (synopsis "Python web framework and asynchronous networking library")
     (description
@@ -1773,7 +1713,7 @@ connection to each user.")
              (invoke "python" "-m" "tornado.test.runtests")
              #t)))))
     (native-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://www.tornadoweb.org/")
     (synopsis "Python web framework and asynchronous networking library")
     (description
@@ -1806,7 +1746,7 @@ connection to each user.")
         (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tornado" ,python-tornado)))
+     (list python-tornado))
     (home-page "https://github.com/gvalkov/tornado-http-auth")
     (synopsis "Digest and basic authentication module for Tornado")
     (description
@@ -1827,10 +1767,9 @@ web framework, either via the basic or digest authentication schemes.")
          "1smvra3sc9sg64w49kfn5yhagshq3x55839748ck5dvxvk4hgza6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tornado" ,python-tornado-6)
-       ("python-ptyprocess" ,python-ptyprocess)))
+     (list python-tornado-6 python-ptyprocess))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1854,12 +1793,9 @@ term.js Javascript terminal emulator library.")
                "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-httplib2" ,python-httplib2)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pytest python-httplib2 python-requests python-urllib3))
     (synopsis "Puts a WSGI application in place of a real URI for testing")
     (description "Wsgi_intercept installs a WSGI application in place of a real
 URI for testing.  Testing a WSGI application normally involves starting a
@@ -1884,7 +1820,7 @@ your Web app.")
           "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-nose" ,python-nose)))
+      (list python-nose))
     (home-page "https://webob.org/")
     (synopsis "WSGI request and response object")
     (description
@@ -1932,10 +1868,8 @@ dispatching systems can be built.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; test suite can't find python-zope-testing
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-testing" ,python-zope-testing)))
+     (list python-coverage python-nose python-zope-event
+           python-zope-testing))
     (home-page "https://github.com/zopefoundation/zope.interface")
     (synopsis "Python implementation of the \"design by contract\"
 methodology")
@@ -1963,26 +1897,41 @@ conforming to a given API or contract.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "zope-testrunner" "--test-path=src"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "zope-testrunner" "--test-path=src")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://pypi.org/project/zope.exceptions/")
     (synopsis "Zope exceptions")
     (description "Zope.exceptions provides general-purpose exception types
 that have uses outside of the Zope framework.")
     (license license:zpl2.1)))
 
-(define-public python-zope-exceptions-bootstrap
+(define (python-zope-bootstrap-package orig)
   (package
-    (inherit python-zope-exceptions)
-    (arguments `(#:tests? #f))
+    (inherit orig)
+    (name (string-append (package-name orig) "-bootstrap"))
+    (arguments
+     (if (null? (package-arguments orig))
+         `(#:tests? #f
+           #:phases (modify-phases %standard-phases
+                      (delete 'sanity-check)))
+         (substitute-keyword-arguments (package-arguments orig)
+           ((#:tests? _ #f) #f)
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+               (delete 'sanity-check))))))
     (propagated-inputs `())
     (native-inputs `())
     (properties `((hidden? . #t)))))
 
+(define-public python-zope-exceptions-bootstrap
+  (python-zope-bootstrap-package python-zope-exceptions))
+
 (define-public python2-zope-exceptions
   (package-with-python2 python-zope-exceptions))
 
@@ -2020,13 +1969,19 @@ forms, HTTP servers, regular expressions, and more.")
          "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
+     '(#:tests? #f                    ;FIXME: Tests can't find zope.interface.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-problematic-test
+           (lambda _
+             ;; This test contains invalid syntax, which breaks bytecode
+             ;; compilation.  For simplicity just remove it.
+             (delete-file
+              "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py"))))))
     (native-inputs
-     `(("python-zope-testing" ,python-zope-testing)))
+     (list python-zope-testing))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-zope-exceptions" ,python-zope-exceptions)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-six python-zope-exceptions python-zope-interface))
     (home-page "https://pypi.org/project/zope.testrunner/")
     (synopsis "Zope testrunner script")
     (description "Zope.testrunner provides a script for running Python
@@ -2035,8 +1990,7 @@ tests.")
 
 (define-public python-zope-testrunner-bootstrap
   (package
-    (inherit python-zope-testrunner)
-    (arguments `(#:tests? #f))
+    (inherit (python-zope-bootstrap-package python-zope-testrunner))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
@@ -2058,10 +2012,9 @@ tests.")
          "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-coverage python-zope-testrunner))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pypi.org/project/zope.i18nmessageid/")
     (synopsis "Message identifiers for internationalization")
     (description "Zope.i18nmessageid provides facilities for declaring
@@ -2093,12 +2046,10 @@ internationalized messages within program source text.")
                (invoke "zope-testrunner" "--test-path=src")
                #t))))))
     (propagated-inputs
-     `(("python-zope-event" ,python-zope-event)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-event python-zope-interface))
     (native-inputs
-     `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-i18nmessageid python-zope-testing
+           python-zope-testrunner))
     (home-page "https://pypi.org/project/zope.schema/")
     (synopsis "Zope data schemas")
     (description "Zope.scheme provides extensions to zope.interface for
@@ -2120,13 +2071,10 @@ defining data schemas.")
                 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-manuel" ,python-manuel)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-manuel python-zope-testing python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-i18nmessageid python-zope-interface
+           python-zope-schema))
     (home-page "https://pypi.org/project/zope.configuration/")
     (synopsis "Zope Configuration Markup Language")
     (description "Zope.configuration implements ZCML, the Zope Configuration
@@ -2134,11 +2082,7 @@ Markup Language.")
     (license license:zpl2.1)))
 
 (define-public python-zope-configuration-bootstrap
-  (package
-    (inherit python-zope-configuration)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-configuration))
 
 (define-public python2-zope-configuration
   (package-with-python2 python-zope-configuration))
@@ -2162,7 +2106,7 @@ Markup Language.")
            (lambda _
              (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (native-inputs
      `(("python-zope-component" ,python-zope-component-bootstrap)
        ("python-zope-location" ,python-zope-location-bootstrap)
@@ -2187,10 +2131,9 @@ Markup Language.")
          "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-zope-security" ,python-zope-security-bootstrap)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-security-bootstrap python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://pypi.org/project/zope.proxy/")
     (synopsis "Generic, transparent proxies")
     (description "Zope.proxy provides generic, transparent proxies for Python.
@@ -2201,11 +2144,7 @@ brokering, etc.) for which the proxy is responsible.")
     (license license:zpl2.1)))
 
 (define-public python-zope-proxy-bootstrap
-  (package
-    (inherit python-zope-proxy)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-proxy))
 
 (define-public python2-zope-proxy
   (package-with-python2 python-zope-proxy))
@@ -2223,8 +2162,7 @@ brokering, etc.) for which the proxy is responsible.")
           "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-zope-testing" ,python-zope-testing)))
+     (list python-coverage python-zope-testing))
     (home-page "https://github.com/zopefoundation/zope.hookable")
     (synopsis "Zope hookable")
     (description "This package supports the efficient creation of hookable
@@ -2250,11 +2188,9 @@ that imported it, will see the change.")
     (arguments
      '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (native-inputs
-     `(("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-testrunner))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)
-       ("python-zope-proxy" ,python-zope-proxy)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-interface python-zope-proxy python-zope-schema))
     (home-page "https://pypi.org/project/zope.location/")
     (synopsis "Zope location library")
     (description "Zope.location implements the concept of \"locations\" in
@@ -2262,11 +2198,7 @@ Zope3, which are are special objects that have a structural location.")
     (license license:zpl2.1)))
 
 (define-public python-zope-location-bootstrap
-  (package
-    (inherit python-zope-location)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-location))
 
 (define-public python2-zope-location
   (package-with-python2 python-zope-location))
@@ -2284,19 +2216,19 @@ Zope3, which are are special objects that have a structural location.")
          "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-component" ,python-zope-component)
-       ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-zope-location" ,python-zope-location)
-       ("python-zope-proxy" ,python-zope-proxy)
-       ("python-zope-schema" ,python-zope-schema)))
+     (list python-zope-component
+           python-zope-i18nmessageid
+           python-zope-interface
+           python-zope-location
+           python-zope-proxy
+           python-zope-schema))
     (native-inputs
-     `(("python-btrees" ,python-btrees)
-       ("python-zope-component" ,python-zope-component-bootstrap)
-       ("python-zope-configuration" ,python-zope-configuration-bootstrap)
-       ("python-zope-location" ,python-zope-location-bootstrap)
-       ("python-zope-testing" ,python-zope-testing)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-btrees
+           python-zope-component-bootstrap
+           python-zope-configuration-bootstrap
+           python-zope-location-bootstrap
+           python-zope-testing
+           python-zope-testrunner))
     (home-page "https://pypi.org/project/zope.security/")
     (synopsis "Zope security framework")
     (description "Zope.security provides a generic mechanism to implement
@@ -2305,15 +2237,12 @@ security policies on Python objects.")
 
 (define-public python-zope-security-bootstrap
   (package
-    (inherit python-zope-security)
-    (arguments `(#:tests? #f))
+    (inherit (python-zope-bootstrap-package python-zope-security))
     (propagated-inputs
      `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
        ("python-zope-interface" ,python-zope-interface)
        ("python-zope-proxy" ,python-zope-proxy-bootstrap)
-       ("python-zope-schema" ,python-zope-schema)))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+       ("python-zope-schema" ,python-zope-schema)))))
 
 (define-public python2-zope-security
   (package-with-python2 python-zope-security))
@@ -2334,9 +2263,10 @@ security policies on Python objects.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "setup.py" "test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "python" "setup.py" "test")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-persistent" ,python-persistent)
        ("python-zope-configuration" ,python-zope-configuration-bootstrap)
@@ -2347,11 +2277,8 @@ security policies on Python objects.")
        ("python-zope-testing" ,python-zope-testing)
        ("python-zope-testrunner" ,python-zope-testrunner)))
     (propagated-inputs
-     `(("python-zope-deferredimport" ,python-zope-deferredimport)
-       ("python-zope-deprecation" ,python-zope-deprecation)
-       ("python-zope-event" ,python-zope-event)
-       ("python-zope-hookable" ,python-zope-hookable)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-deferredimport python-zope-deprecation
+           python-zope-event python-zope-hookable python-zope-interface))
     (home-page "https://github.com/zopefoundation/zope.component")
     (synopsis "Zope Component Architecture")
     (description "Zope.component represents the core of the Zope Component
@@ -2360,11 +2287,7 @@ facilities for defining, registering and looking up components.")
     (license license:zpl2.1)))
 
 (define-public python-zope-component-bootstrap
-  (package
-    (inherit python-zope-component)
-    (arguments `(#:tests? #f))
-    (native-inputs `())
-    (properties `((hidden? . #t)))))
+  (python-zope-bootstrap-package python-zope-component))
 
 (define-public python2-zope-component
   (package-with-python2 python-zope-component))
@@ -2382,9 +2305,9 @@ facilities for defining, registering and looking up components.")
           "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-proxy" ,python-zope-proxy)))
+     (list python-zope-proxy))
     (native-inputs
-     `(("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/zope.deferredimport")
     (synopsis "Defer imports until used by code")
     (description
@@ -2410,7 +2333,7 @@ deprecation warnings to be issued when a variable is used.")
      '(;; The tests appear to require networking.
        #:tests? #f))
     (propagated-inputs
-     `(("python-pyopenssl" ,python-pyopenssl)))
+     (list python-pyasn1 python-pyopenssl))
     (synopsis "HTTPS support for Python's httplib and urllib2")
     (description "This is a HTTPS client implementation for httplib and urllib2
 based on PyOpenSSL.  PyOpenSSL provides a more fully-featured SSL implementation
@@ -2443,7 +2366,7 @@ verification of the SSL peer.")
          "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/liris/websocket-client")
     (synopsis "WebSocket client for Python")
     (description "The Websocket-client module provides the low level APIs for
@@ -2472,7 +2395,7 @@ WebSocket usage in Python programs.")
           (base32
             "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page
       "https://github.com/codeinthehole/purl")
     (synopsis
@@ -2502,10 +2425,9 @@ WebSocket usage in Python programs.")
                      ;; This test tries to connect to the internet.
                      "not test_call"))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/ithaka/apiron")
     (synopsis "Python wrapper for interacting with RESTful APIs")
     (description
@@ -2529,7 +2451,7 @@ APIs.")
      ;; The test tries to open a connection to a remote server.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-apiron" ,python-apiron)))
+     (list python-apiron))
     (home-page "https://github.com/teffalump/beren")
     (synopsis "REST client for Orthanc DICOM servers")
     (description
@@ -2539,19 +2461,17 @@ APIs.")
 (define-public python-requests
   (package
     (name "python-requests")
-    (version "2.25.0")
+    (version "2.26.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "requests" version))
              (sha256
               (base32
-               "1y6mb8c0ipd64d5axq2p368yxndp3f966hmabjka2q2a5y9hn6kz"))))
+               "19q73fq7hip7b74fwls3p9x6zwvfwqcwpn6kha3zsgvrrzw5iamq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-chardet" ,python-chardet)
-       ("python-idna" ,python-idna)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-certifi python-chardet python-charset-normalizer
+           python-idna python-urllib3))
     (arguments
      ;; FIXME: Some tests require network access.
      '(#:tests? #f))
@@ -2560,26 +2480,17 @@ APIs.")
     (description
      "Requests is a Python HTTP client library.  It aims to be easier to use
 than Python’s urllib2 library.")
-    (license license:asl2.0)))
-
-;; Some software requires an older version of Requests, notably Docker/Docker
-;; Compose.
-(define-public python-requests-2.20
-  (package (inherit python-requests)
-           (version "2.20.1")
-           (source (origin
-                     (method url-fetch)
-                     (uri (pypi-uri "requests" version))
-                     (sha256
-                      (base32
-                       "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
-           (propagated-inputs
-            `(("python-urllib3" ,python-urllib3-1.24)
-              ("python-idna" ,python-idna-2.7)
-              ,@(package-propagated-inputs python-requests)))))
+    (license license:asl2.0)
+    (properties `((python2-variant . ,(delay python2-requests))))))
 
 (define-public python2-requests
-  (package-with-python2 python-requests))
+  (let ((base (package-with-python2 (strip-python2-variant python-requests))))
+    (package
+      (inherit base)
+      ;; The python-charset-normalizer dependency is necessary on Python 3
+      ;; only.
+      (propagated-inputs (modify-inputs (package-propagated-inputs base)
+                           (delete "python-charset-normalizer"))))))
 
 (define-public python-requests-unixsocket
   (package
@@ -2601,26 +2512,28 @@ than Python’s urllib2 library.")
              (substitute* "test-requirements.txt"
                (("(.*)==(.*)" _ name) (string-append name "\n")))))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             ;; Avoid a deprecation error.
+             (substitute* "pytest.ini"
+               (("--pep8") ""))
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pbr python-requests python-urllib3))
     (native-inputs
-     `(("python-apipkg" ,python-apipkg)
-       ("python-appdirs" ,python-appdirs)
-       ("python-execnet" ,python-execnet)
-       ("python-packaging" ,python-packaging)
-       ("python-pep8" ,python-pep8)
-       ("python-py" ,python-py)
-       ("python-pyparsing" ,python-pyparsing)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-six" ,python-six)
-       ("python-waitress" ,python-waitress)))
+     (list python-apipkg
+           python-appdirs
+           python-execnet
+           python-packaging
+           python-pep8
+           python-py
+           python-pyparsing
+           python-pytest
+           python-pytest-cache
+           python-pytest-pep8
+           python-six
+           python-waitress))
     (home-page "https://github.com/msabramo/requests-unixsocket")
     (synopsis "Talk HTTP via a UNIX domain socket")
     (description
@@ -2641,9 +2554,7 @@ HTTP via a UNIX domain socket.")
          "0wgbqzaq9w7bas16b7brdb75f91bh3275fb459093bk1ihpck2ci"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-ntlm-auth" ,python-ntlm-auth)
-       ("python-requests" ,python-requests)))
+     (list python-cryptography python-ntlm-auth python-requests))
     (home-page "https://github.com/requests/requests-ntlm")
     (synopsis
      "NTLM authentication support for Requests")
@@ -2665,18 +2576,17 @@ library.")
          "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-discover" ,python-discover)
-       ("python-docutils" ,python-docutils)
-       ("python-fixtures" ,python-fixtures)
-       ("python-mock" ,python-mock)
-       ("python-purl" ,python-purl)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-testrepository" ,python-testrepository)))
+     (list python-pbr
+           python-discover
+           python-docutils
+           python-fixtures
+           python-mock
+           python-purl
+           python-pytest
+           python-sphinx
+           python-testrepository))
     (home-page "https://requests-mock.readthedocs.org/")
     (synopsis "Mock out responses from the requests package")
     (description
@@ -2696,11 +2606,9 @@ portions of your testing code.")
                "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-betamax python-mock python-pytest))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (synopsis "Extensions to python-requests")
     (description "This is a toolbelt of useful classes and functions to be used
 with python-requests.")
@@ -2737,7 +2645,7 @@ with python-requests.")
          "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://github.com/Lukasa/requests-ftp")
     (synopsis "FTP Transport Adapter for Requests")
@@ -2763,13 +2671,9 @@ adapter for use with the Requests library.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-pytest-cov python-mock))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-blinker" ,python-blinker)))
+     (list python-cryptography python-pyjwt python-blinker))
     (home-page "https://github.com/oauthlib/oauthlib")
     (synopsis "OAuth implementation for Python")
     (description
@@ -2795,7 +2699,7 @@ OAuth request-signing logic.")
     (arguments
      `(#:test-target "check"))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/litl/rauth")
     (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
     (description
@@ -2814,24 +2718,23 @@ authenticated session objects providing things like keep-alive.")
 (define-public python-urllib3
   (package
     (name "python-urllib3")
-    (version "1.26.2")
+    (version "1.26.7")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urllib3" version))
         (sha256
          (base32
-          "024yldjwjavps39yb77sc422z8fa9bn20wcqrcncjwrqjab8y60r"))))
-    (replacement python-urllib3/fixed)
+          "1kkf6gi8a1fs0dqkf6kpmdpsy97iirvliz8q1krxp8ppaiawd1s9"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(;; These 5 inputs are used to build urrlib3[secure]
-       ("python-certifi" ,python-certifi)
-       ("python-cryptography" ,python-cryptography)
-       ("python-idna" ,python-idna)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pysocks" ,python-pysocks)))
+     (list ;; These 5 inputs are used to build urrlib3[secure]
+           python-certifi
+           python-cryptography
+           python-idna
+           python-pyopenssl
+           python-pysocks))
     (home-page "https://urllib3.readthedocs.io/")
     (synopsis "HTTP library with thread-safe connection pooling")
     (description
@@ -2841,29 +2744,6 @@ supports url redirection and retries, and also gzip and deflate decoding.")
     (properties `((python2-variant . ,(delay python2-urllib3))))
     (license license:expat)))
 
-(define python-urllib3/fixed
-  (package
-    (inherit python-urllib3)
-    (version "1.26.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urllib3" version))
-       (sha256
-        (base32
-         "1kkf6gi8a1fs0dqkf6kpmdpsy97iirvliz8q1krxp8ppaiawd1s9"))))))
-
-;; Some software requires an older version of urllib3, notably Docker.
-(define-public python-urllib3-1.24
-  (package (inherit python-urllib3)
-           (version "1.24.3")
-           (source (origin
-                     (method url-fetch)
-                     (uri (pypi-uri "urllib3" version))
-                     (sha256
-                      (base32
-                       "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
-
 (define-public python2-urllib3
   (let ((base (package-with-python2 (strip-python2-variant python-urllib3))))
     (package/inherit
@@ -2896,17 +2776,16 @@ supports url redirection and retries, and also gzip and deflate decoding.")
                (("if not self._exists_on_path\\('groff'\\):") "")
                (("raise ExecutableNotFoundError\\('groff'\\)") "")
                (("cmdline = \\['groff'")
-                (string-append "cmdline = ['" (which "groff") "'")))
-             #t)))))
-    (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-botocore" ,python-botocore)
-       ("python-s3transfer" ,python-s3transfer)
-       ("python-docutils" ,python-docutils)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-rsa" ,python-rsa)))
+                (string-append "cmdline = ['" (which "groff") "'"))))))))
+    (propagated-inputs
+     (list python-colorama-for-awscli
+           python-botocore
+           python-s3transfer
+           python-docutils-0.15
+           python-pyyaml
+           python-rsa))
     (native-inputs
-     `(("groff" ,groff)))
+     (list groff))
     (home-page "https://aws.amazon.com/cli/")
     (synopsis "Command line client for AWS")
     (description "AWS CLI provides a unified command line interface to the
@@ -2925,12 +2804,9 @@ Amazon Web Services (AWS) API.")
         (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-webtest" ,python-webtest)))
+     (list python-webtest))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-urllib3" ,python-urllib3)
-       ("python-webob" ,python-webob)))
+     (list python-requests python-six python-urllib3 python-webob))
     (home-page "https://github.com/gawel/WSGIProxy2/")
     (synopsis "WSGI Proxy with various http client backends")
     (description "WSGI turns HTTP requests into WSGI function calls.
@@ -2953,8 +2829,7 @@ and to spawn subprocesses to handle requests.")
     (arguments
      '(#:test-target "pytest"))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://pylonsproject.org/")
     (synopsis
      "Load, configure, and compose WSGI applications and servers")
@@ -2983,10 +2858,7 @@ file.")
      ;; Tests require python-pyquery, which creates a circular dependency.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-waitress" ,python-waitress)
-       ("python-webob" ,python-webob)
-       ("python-six" ,python-six)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-waitress python-webob python-six python-beautifulsoup4))
     (home-page "https://docs.pylonsproject.org/projects/webtest/")
     (synopsis "Helper to test WSGI applications")
     (description "Webtest allows you to test your Python web applications
@@ -3000,29 +2872,25 @@ minimum of WSGI.")
 (define-public python-flask
   (package
     (name "python-flask")
-    (version "1.1.2")
+    (version "2.0.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Flask" version))
               (sha256
                (base32
-                "0q3h295izcil7lswkzfnyg3k5gq4hpmqmpl6i7s5m1n9szi1myjf"))))
+                "0mcgwq7b4qd99mf5bsvs3wphchxarf8kgil4hwww3blj31xjak0w"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
-             (invoke "pytest" "-vv" "tests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "tests")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-itsdangerous" ,python-itsdangerous)
-       ("python-jinja2" ,python-jinja2)
-       ("python-click" ,python-click)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-itsdangerous python-jinja2 python-click python-werkzeug))
     (home-page "https://www.palletsprojects.com/p/flask/")
     (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
     (description "Flask is a micro web framework based on the Werkzeug toolkit
@@ -3047,15 +2915,11 @@ presume or force a developer to use a particular tool or library.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-flask-babel" ,python-flask-babel)
-       ("python-babel" ,python-babel)
-       ("python-wtforms" ,python-wtforms)))
+     (list python-flask-babel python-babel python-wtforms))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/lepture/flask-wtf")
     (synopsis "Simple integration of Flask and WTForms")
     (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
@@ -3075,7 +2939,7 @@ upload, and reCAPTCHA.")
          "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://pagure.io/flask-multistatic")
     (synopsis "Flask plugin to allow overriding static files")
     (description "@code{flask-multistatic} is a flask plugin that adds support
@@ -3097,7 +2961,7 @@ for overriding static files.")
      `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
        #:tests? #f))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "HTTP cookie parser and renderer")
     (description "A RFC 6265-compliant HTTP cookie parser and renderer in
 Python.")
@@ -3123,11 +2987,9 @@ Python.")
        ;; https://github.com/getsentry/responses/issues/38
        #:tests? #f))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-cookies" ,python-cookies)
-       ("python-six" ,python-six)))
+     (list python-requests python-cookies python-six))
     (home-page "https://github.com/getsentry/responses")
     (synopsis "Utility for mocking out the `requests` Python library")
     (description "A utility library for mocking out the `requests` Python
@@ -3150,12 +3012,9 @@ library.")
          "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-requests" ,python-requests)))
+     (list python-gevent python-requests))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-zope.interface" ,python-zope-interface)
-       ("python-zope.event" ,python-zope-event)))
+     (list python-nose python-zope-interface python-zope-event))
     (home-page "https://github.com/kennethreitz/grequests")
     (synopsis "Python library for asynchronous HTTP requests")
     (description "GRequests is a Python library that allows you to use
@@ -3220,12 +3079,9 @@ for the basic TCP/IP protocols.")
                      ;; https://github.com/gwik/geventhttpclient/issues/119
                      "-k" "not test_cookielib_compatibility"))))))
     (native-inputs
-     `(("python-dpkt" ,python-dpkt)
-       ("python-pytest" ,python-pytest)))
+     (list python-dpkt python-pytest))
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-gevent" ,python-gevent)
-       ("python-six" ,python-six)))
+     (list python-certifi python-gevent python-six))
     (home-page "https://github.com/gwik/geventhttpclient")
     (synopsis "HTTP client library for gevent")
     (description "@code{python-geventhttpclient} is a high performance,
@@ -3253,12 +3109,9 @@ concurrent HTTP client library for python using @code{gevent}.")
              (delete-file "tests/test_core.py")
              #t)))))
     (native-inputs
-     `(("python-pyjwt" ,python-pyjwt)
-       ("python-requests-mock" ,python-requests-mock)
-       ("python-mock" ,python-mock)))
+     (list python-pyjwt python-requests-mock python-mock))
     (propagated-inputs
-     `(("python-oauthlib" ,python-oauthlib)
-       ("python-requests" ,python-requests)))
+     (list python-oauthlib python-requests))
     (home-page
      "https://github.com/requests/requests-oauthlib")
     (synopsis
@@ -3280,10 +3133,9 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
                 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-publicsuffix" ,python-publicsuffix)))
+     (list python-publicsuffix))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (arguments
      `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
     (home-page "https://github.com/seomoz/url-py")
@@ -3319,9 +3171,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
      ;; It's too much work to package CherryPy for now.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-msgpack" ,python-msgpack)
-       ("python-lockfile" ,python-lockfile)))
+     (list python-requests python-msgpack python-lockfile))
     (home-page "https://github.com/ionrock/cachecontrol")
     (synopsis "The httplib2 caching algorithms for use with requests")
     (description "CacheControl is a port of the caching algorithms in
@@ -3357,7 +3207,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
      '(;; Many tests fail because they require networking.
        #:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/sigmavirus24/betamax")
     (synopsis "Record HTTP interactions with python-requests")
     (description "Betamax will record your test suite's HTTP interactions and
@@ -3380,8 +3230,7 @@ replay them during future tests.  It is designed to work with python-requests.")
          "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-betamax python-requests-toolbelt))
     (home-page "https://github.com/sigmavirus24/betamax_matchers")
     (synopsis "VCR imitation for python-requests")
     (description "@code{betamax-matchers} provides a set of Matchers for
@@ -3403,8 +3252,7 @@ Betamax.")
         (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-betamax" ,python-betamax)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-betamax python-pyyaml))
     (synopsis "Set of third-party serializers for Betamax")
     (description "Betamax-Serializers are an experimental set of Serializers for
 Betamax that may possibly end up in the main package.")
@@ -3432,12 +3280,9 @@ Betamax that may possibly end up in the main package.")
                ;; login credentials.
                (invoke "nosetests" "--exclude=integration")))))))
     (native-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-docutils python-mock python-nose))
     (propagated-inputs
-     `(("python-botocore" ,python-botocore)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-botocore python-urllib3))
     (synopsis "Amazon S3 Transfer Manager")
     (description "S3transfer is a Python library for managing Amazon S3
 transfers.")
@@ -3465,9 +3310,9 @@ transfers.")
          "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://slimit.readthedocs.io/")
     (synopsis "JavaScript minifier, parser and lexer written in Python")
     (description
@@ -3491,15 +3336,11 @@ pretty printer and a tree visitor.")
           "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-aniso8601" ,python-aniso8601)
-        ("python-flask" ,python-flask)
-        ("python-pycrypto" ,python-pycrypto)
-        ("python-pytz" ,python-pytz)))
+      (list python-aniso8601 python-flask python-pycrypto python-pytz))
     (native-inputs
-      `(;; Optional dependency of Flask. Tests need it.
-        ("python-blinker" ,python-blinker)
-        ("python-mock" ,python-mock) ; For tests
-        ("python-nose" ,python-nose)))  ;for tests
+      (list ;; Optional dependency of Flask. Tests need it.
+            python-blinker python-mock ; For tests
+            python-nose))  ;for tests
     (home-page
       "https://www.github.com/flask-restful/flask-restful/")
     (synopsis
@@ -3532,7 +3373,7 @@ pretty printer and a tree visitor.")
                          "flask_basicauth"))
                       #t)))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://github.com/jpvanhal/flask-basicauth")
     (synopsis "HTTP basic access authentication for Flask")
     (description
@@ -3552,10 +3393,7 @@ pretty printer and a tree visitor.")
             "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-passlib" ,python-passlib)
-       ("python-tox" ,python-tox)))
+     (list python-flask python-itsdangerous python-passlib python-tox))
     (home-page "https://github.com/carsongee/flask-htpasswd")
     (synopsis "Basic authentication via htpasswd files in Flask applications")
     (description "This package provides Basic authentication via
@@ -3575,8 +3413,7 @@ applications.")
                 "04jrx4sjrz1b20j38qk4qin975xwz30krzq59rfv3b3w7ss49nib"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-flask python-sqlalchemy))
     (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
     (synopsis "Module adding SQLAlchemy support to your Flask application")
     (description
@@ -3604,16 +3441,10 @@ applications.")
        ;;       (invoke "nosetests")
        ;;       #t)))))
     (propagated-inputs
-      `(("python-aniso8601" ,python-aniso8601)
-        ("python-flask" ,python-flask)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-pytz" ,python-pytz)
-        ("python-six" ,python-six)))
+      (list python-aniso8601 python-flask python-jsonschema python-pytz
+            python-six))
     (native-inputs
-     `(("python-tzlocal" ,python-tzlocal)
-       ("python-blinker" ,python-blinker)
-       ("python-nose" ,python-nose)
-       ("python-rednose" ,python-rednose)))
+     (list python-tzlocal python-blinker python-nose python-rednose))
     (home-page "https://github.com/noirbizarre/flask-restplus")
     (synopsis "Framework for documented API development with Flask")
     (description "This package provides a framework for API development with
@@ -3636,7 +3467,7 @@ documentation builder.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;no tests
     (propagated-inputs
-     `(("python-flask-restful" ,python-flask-restful)))
+     (list python-flask-restful))
     (home-page "https://github.com/rantav/flask-restful-swagger")
     (synopsis "Extract Swagger specs from Flask-Restful projects")
     (description "This package lets you extract Swagger API documentation
@@ -3678,8 +3509,7 @@ It comes with safe defaults and easily configurable options.")
        (base32
         "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-htmlmin" ,python-htmlmin)))
+     (list python-flask python-htmlmin))
     (build-system python-build-system)
     (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
     (synopsis "HTML response minifier for Flask")
@@ -3721,17 +3551,17 @@ on the command line.")
         (base32 "11ac924w0y4m0kf3mxnxdlidy88jfa7njw5yyrq16dvnx4iwd8gg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (native-inputs
      ;; For tests.
-     `(("python-blinker" ,python-blinker)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pytest" ,python-pytest)
-       ("python-semantic-version" ,python-semantic-version)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-blinker
+           python-coverage
+           python-mock
+           python-pycodestyle
+           python-pyflakes
+           python-pytest
+           python-semantic-version
+           python-werkzeug))
     (home-page "https://github.com/maxcountryman/flask-login")
     (synopsis "User session management for Flask")
     (description
@@ -3755,11 +3585,8 @@ users' sessions over extended periods of time.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-httplib2" ,python-httplib2)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)
-       ("python-rsa" ,python-rsa)
-       ("python-six" ,python-six)))
+     (list python-httplib2 python-pyasn1 python-pyasn1-modules python-rsa
+           python-six))
     (home-page "https://github.com/google/oauth2client/")
     (synopsis "OAuth 2.0 client library")
     (description "@code{python-oauth2client} provides an OAuth 2.0 client
@@ -3782,13 +3609,10 @@ library for Python")
          "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-oauth2client" ,python-oauth2client)
-       ("python-six" ,python-six)))
+     (list python-flask python-itsdangerous python-oauth2client
+           python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)))
+     (list python-nose python-mock))
     (home-page "https://github.com/puiterwijk/flask-oidc")
     (synopsis "OpenID Connect extension for Flask")
     (description "@code{python-flask-oidc} provides an OpenID Connect extension
@@ -3809,23 +3633,20 @@ for Flask.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-some-tests
+                  (add-before 'check 'adjust-tests
                     (lambda _
+                      ;; Fix for Python 3.9 compatibility.
+                      (substitute* "tests/test_script.py"
+                        (("self\\.t\\.isAlive")
+                         "self.t.is_alive"))
                       ;; This test requires 'postcss' and 'babel' which are
                       ;; not yet available in Guix.
-                      (delete-file "tests/test_filters.py")
-                      #t))
+                      (delete-file "tests/test_filters.py")))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-jinja2 python-mock python-nose python-pytest))
     (home-page "https://github.com/miracle2k/webassets")
     (synopsis "Media asset management")
     (description "Merges, minifies and compresses Javascript and CSS files,
@@ -3866,8 +3687,7 @@ CSS tidy.  Also supports URL rewriting in CSS files.")
           "1q38w9nh2j2yi82d8rhzb57597l4lq5zx7xzfg45xf7ffrgsipaj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-certifi python-urllib3))
     (arguments
      ;; tests require the test_elasticsearch module but it is not distributed.
      `(#:tests? #f))
@@ -3894,9 +3714,7 @@ this it tries to be opinion-free and very extendable.")
          "0xqkjjxbxakz9fd7v94rkr2r5r9nrkap2c3gf3abbd0j6ld5qmxv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-requests" ,python-requests)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-aiohttp python-requests python-websocket-client))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/python-engineio/")
     (synopsis "Engine.IO server")
@@ -3925,11 +3743,9 @@ server.")
             (("flask\\.ext\\.script") "flask_script"))
            #t)))))
   (propagated-inputs
-   `(("python-flask" ,python-flask)
-     ("python-argcomplete" ,python-argcomplete)
-     ("python-werkzeug" ,python-werkzeug)))
+   (list python-flask python-argcomplete python-werkzeug))
   (native-inputs
-   `(("python-pytest" ,python-pytest)))
+   (list python-pytest))
   (home-page
     "https://github.com/smurfix/flask-script")
   (synopsis "Scripting support for Flask")
@@ -3953,11 +3769,8 @@ itself.")
           "1vip9ww6l18dxffjsggm83k71zkvihxpnhaswpv8klh95s6517d6"))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-flask" ,python-flask)
-     ("python-alembic" ,python-alembic)
-     ("python-sqlalchemy" ,python-sqlalchemy)
-     ("python-flask-script" ,python-flask-script)
-     ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
+   (list python-flask python-alembic python-sqlalchemy
+         python-flask-script python-flask-sqlalchemy))
   (home-page "https://github.com/miguelgrinberg/flask-migrate/")
   (synopsis "SQLAlchemy database migrations for Flask programs using
 Alembic")
@@ -3979,7 +3792,7 @@ for Flask programs that are using @code{python-alembic}.")
        (sha256
         (base32 "04i0caywiwrgw09grz988n15qr9lr31d9n6a529p8v80cy1fv23c"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (home-page "https://genshi.edgewall.org/")
     (synopsis "Toolkit for generation of output for the web")
@@ -4004,10 +3817,9 @@ textual content for output generation on the web.")
            "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blinker" ,python-blinker)))
+     (list python-blinker))
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-nose" ,python-nose)))
+     (list python-flask python-nose))
     (home-page "https://pythonhosted.org/Flask-Principal/")
     (synopsis "Identity management for Flask")
     (description "@code{flask_principal} is a identity management library for
@@ -4028,7 +3840,7 @@ thread-local variable.")
          "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-flask" ,python-flask)))
+     (list python-flask))
     (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
     (synopsis "Basic and Digest HTTP authentication for Flask routes")
     (description "@code{flask_httpauth} provides Basic and Digest HTTP
@@ -4113,28 +3925,29 @@ List.  Forked from and using the same API as the publicsuffix package.")
 (define-public python-werkzeug
   (package
     (name "python-werkzeug")
-    (version "1.0.1")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Werkzeug" version))
        (sha256
         (base32
-         "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))))
+         "0hlwawnn8c41f254qify5jnjj8xb97n294h09bqimzqhs0qdpq8x"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "-m" "pytest"))))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest"
+                       ;; Test tries to use the network.
+                       "-k not test_reloader_sys_path")))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest python-pytest-timeout python-pytest-xprocess))
     (home-page "https://palletsprojects.com/p/werkzeug/")
     (synopsis "Utilities for WSGI applications")
     (description "One of the most advanced WSGI utility modules.  It includes a
@@ -4144,6 +3957,30 @@ uploads, a powerful URL routing system and a bunch of community-contributed
 addon modules.")
     (license license:x11)))
 
+(define-public python-werkzeug-1.0
+  (package
+    (inherit python-werkzeug)
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Werkzeug" version))
+              (sha256
+               (base32
+                "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
+              (patches (search-patches "python-werkzeug-tests.patch"))))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "python" "-m" "pytest"))))))
+    (propagated-inputs
+     (list python-requests))
+    (native-inputs
+     (list python-pytest python-pytest-timeout))))
+
 (define-public python-bottle
   (package
     (name "python-bottle")
@@ -4191,12 +4028,9 @@ addon modules.")
                (invoke "python" "setup.py" "compile_catalog")
                (invoke "python" "tests/runtests.py")))))))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-dateutil python-sqlalchemy))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-email-validator" ,python-email-validator)
-       ("python-markupsafe" ,python-markupsafe)))
+     (list python-babel python-email-validator python-markupsafe))
     (home-page "http://wtforms.simplecodes.com/")
     (synopsis
      "Form validation and rendering library for Python web development")
@@ -4225,11 +4059,9 @@ available in Django, but is a standalone package.")
            (delete-file "tests/test_proxy.py") #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-pytest-runner python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pythonpaste.readthedocs.io/")
     (synopsis
      "Python web development tools, focusing on WSGI")
@@ -4255,10 +4087,9 @@ follows ideas flowing from WSGI (Web Standard Gateway Interface).")
          "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-paste" ,python-paste)
-       ("python-pastedeploy" ,python-pastedeploy)))
+     (list python-paste python-pastedeploy))
     (home-page (string-append "https://web.archive.org/web/20161025192515/"
                               "http://pythonpaste.org/script/"))
     (arguments
@@ -4323,21 +4154,37 @@ name resolutions asynchronously.")
 (define-public python-yarl
   (package
     (name "python-yarl")
-    (version "1.1.1")
+    (version "1.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "yarl" version))
        (sha256
         (base32
-         "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
+         "045z4ssg8g5h0qhz8hnx74hswgkndaldqq1xi5l1n5s0j996d44a"))
+       (modules '((guix build utils)))
+       (snippet
+         #~(begin
+             (delete-file "yarl/_quoting_c.c")))))
     (build-system python-build-system)
+    (arguments
+      (list #:tests? #f     ; test suite can't find yarl._quoting_c
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-after 'unpack 'cythonize-code
+                  (lambda _
+                    (invoke "cython" "yarl/_quoting_c.pyx")))
+                (replace 'check
+                  (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+                    (when tests?
+                      (substitute* "setup.cfg"
+                        (("--cov=yarl") ""))
+                      (add-installed-pythonpath inputs outputs)
+                      (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-multidict" ,python-multidict)))
+     (list python-idna python-multidict))
     (home-page "https://github.com/aio-libs/yarl/")
     (synopsis "Yet another URL library")
     (description "@code{yarl} module provides handy @code{URL} class
@@ -4376,12 +4223,18 @@ Google search engine.  Its module is called @code{googlesearch}.")
          "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; tests require internet access
+     `(#:tests? #f ; tests require internet access
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-setup-py
+           (lambda _
+             (substitute* "setup.py"
+               (("googleapiclient/discovery_cache")
+                "googleapiclient.discovery_cache"))
+             #t)))))
     (native-inputs
-     `(("python-httplib2" ,python-httplib2)
-       ("python-six" ,python-six)
-       ("python-oauth2client" ,python-oauth2client)
-       ("python-uritemplate" ,python-uritemplate)))
+     (list python-httplib2 python-six python-oauth2client
+           python-uritemplate))
     (home-page "https://github.com/google/google-api-python-client")
     (synopsis "Core Python library for accessing Google APIs")
     (description "Python client library for Google's discovery based APIs")
@@ -4400,8 +4253,7 @@ Google search engine.  Its module is called @code{googlesearch}.")
          "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-webob" ,python-webob)))
+     (list python-requests python-webob))
     (home-page "https://github.com/mozilla-services/hawkauthlib")
     (synopsis "Hawk Access Authentication protocol")
     (description
@@ -4422,9 +4274,9 @@ a simple HTTP request-signing scheme.")
          "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/mozilla/PyBrowserID")
     (synopsis "Python library for the BrowserID protocol")
     (description
@@ -4446,16 +4298,10 @@ underlies Mozilla Persona.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; 17 tests require network access
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-hawkauthlib" ,python-hawkauthlib)
-       ("python-pybrowserid" ,python-pybrowserid)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-hawkauthlib python-pybrowserid
+           python-requests python-six))
     (native-inputs
-     `(("python-grequests" ,python-grequests)
-       ("python-mock" ,python-mock)
-       ("python-responses" ,python-responses)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-grequests python-mock python-responses python-unittest2))
     (home-page "https://github.com/mozilla/PyFxA")
     (synopsis "Firefox Accounts client library for Python")
     (description
@@ -4476,7 +4322,7 @@ ecosystem.")
           "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-idna" ,python-idna)))
+     (list python-idna))
     (home-page "https://github.com/python-hyper/hyperlink")
     (synopsis "Python module to create immutable URLs according to spec")
     (description "This package provides a Python module to create immutable, and
@@ -4496,12 +4342,12 @@ correct URLs for Python according to RFCs 3986 and 3987.")
           "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-idna" ,python-idna)
-       ("python-incremental" ,python-incremental)
-       ("python-requests" ,python-requests)
-       ("python-service-identity" ,python-service-identity)
-       ("python-twisted" ,python-twisted)))
+     (list python-attrs
+           python-idna
+           python-incremental
+           python-requests
+           python-service-identity
+           python-twisted))
     (home-page "https://github.com/twisted/treq")
     (synopsis "Requests-like API built on top of twisted.web's Agent")
     (description "This package provides an HTTP library inspired by
@@ -4526,9 +4372,7 @@ high level API for making HTTP requests when using Twisted.")
       ;; https://github.com/crossbario/autobahn-python/issues/1117
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-twisted" ,python-twisted)
-       ("python-txaio" ,python-txaio)))
+     (list python-cffi python-twisted python-txaio))
     (home-page "https://crossbar.io/autobahn/")
     (synopsis "Web Application Messaging Protocol implementation")
     (description "This package provides an implementation of the @dfn{Web Application
@@ -4566,8 +4410,7 @@ such as IoT applications or multi-user database-driven business applications.")
              (delete-file "ws4py/server/cherrypyserver.py")
              #t)))))
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-tornado" ,python-tornado)))
+     (list python-gevent python-tornado))
     (home-page "https://github.com/Lawouach/WebSocket-for-Python")
     (synopsis "WebSocket client and server library")
     (description
@@ -4586,7 +4429,7 @@ Python.")
        (sha256
         (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
     (propagated-inputs
-     `(("python-unidecode" ,python-unidecode)))
+     (list python-unidecode python-text-unidecode))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4614,10 +4457,9 @@ library to create slugs from unicode strings while keeping it DRY.")
          "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-six" ,python-six)))
+     (list python-jinja2 python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-visualization/branca")
     (synopsis "Generate complex HTML+JS pages with Python")
     (description "Generate complex HTML+JS pages with Python")
@@ -4648,10 +4490,8 @@ library to create slugs from unicode strings while keeping it DRY.")
              (invoke "python" "-m" "pytest" "-k"
                      "not test_speedups"))))))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-cov python-pytest-flake8 python-pytest-isort
+           python-pytest-runner))
     (home-page "https://tinycss.readthedocs.io/")
     (synopsis "Complete yet simple CSS parser for Python")
     (description
@@ -4706,13 +4546,10 @@ modules:
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-webencodings" ,python-webencodings)))
+     (list python-webencodings))
     (native-inputs
-     `(("python-flit" ,python-flit)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)))
+     (list python-flit python-pytest python-pytest-cov
+           python-pytest-flake8 python-pytest-isort))
     (home-page "https://tinycss2.readthedocs.io/")
     (synopsis "Low-level CSS parser for Python")
     (description "@code{tinycss2} can parse strings, return Python objects
@@ -4741,12 +4578,10 @@ in various CSS modules.")
          (replace 'check
            (lambda _ (invoke "pytest"))))))
     (propagated-inputs
-     `(("python-tinycss2" ,python-tinycss2)))
+     (list python-tinycss2))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-cov python-pytest-flake8 python-pytest-isort
+           python-pytest-runner))
     (home-page "https://cssselect2.readthedocs.io/")
     (synopsis "CSS selectors for Python ElementTree")
     (description "@code{cssselect2} is a straightforward implementation of
@@ -4780,14 +4615,14 @@ hard or impossible to fix in cssselect.")
                                       "self.use_system_libuv = True"))
              #t)))))
     (native-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-cython" ,python-cython)
-       ("python-flake8" ,python-flake8)
-       ("python-psutil" ,python-psutil)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-twine" ,python-twine)))
+     (list python-aiohttp
+           python-cython
+           python-flake8
+           python-psutil
+           python-pyopenssl
+           python-twine))
     (inputs
-     `(("libuv" ,libuv)))
+     (list libuv))
     (home-page "https://github.com/MagicStack/uvloop")
     (synopsis "Fast implementation of asyncio event loop on top of libuv")
     (description
@@ -4815,14 +4650,11 @@ event loop.  It is implemented in Cython and uses libuv under the hood.")
            (lambda _
              (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
              (delete-file "docs/build/texinfo/Makefile")
-             (delete-file "docs/build/texinfo/Gunicorn.texi")
-             #t))
+             (delete-file "docs/build/texinfo/Gunicorn.texi")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (begin
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" (getenv "PYTHONPATH")))
                    (invoke "pytest" "-vv"
                            ;; Disable the geventlet tests because eventlet uses
                            ;; dnspython, which does not work in the build
@@ -4861,13 +4693,13 @@ event loop.  It is implemented in Cython and uses libuv under the hood.")
                            (string-append output sitedir))
                          (list python out))))))))))
     (native-inputs
-     `(("binutils" ,binutils)  ;; for ctypes.util.find_library()
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-gevent" ,python-gevent)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("texinfo" ,texinfo)))
+     (list binutils ;; for ctypes.util.find_library()
+           python-aiohttp
+           python-gevent
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           texinfo))
     (home-page "https://gunicorn.org/")
     (synopsis "Python WSGI HTTP Server for UNIX")
     (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
@@ -4926,10 +4758,9 @@ and fairly speedy.")
              (substitute* "setup.py" (("Cython==") "Cython>="))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (inputs
-     `(("http-parser" ,http-parser)))
+     (list http-parser))
     (home-page "https://github.com/MagicStack/httptools")
     (synopsis "Collection of framework independent HTTP protocol utils")
     (description
@@ -4939,7 +4770,7 @@ and fairly speedy.")
 (define-public python-uvicorn
   (package
     (name "python-uvicorn")
-    (version "0.11.8")
+    (version "0.13.2")
     (source
      (origin
        ;; PyPI tarball has no tests.
@@ -4949,7 +4780,7 @@ and fairly speedy.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00iidg5ysp7k00bw3kmkvr8mghnh4jdi0p2ryiarhryf8wz2r3fy"))))
+        (base32 "04zgmp9z46k72ay6cz7plga6d3w3a6x41anabm7ramp7jdqf6na9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -4959,24 +4790,16 @@ and fairly speedy.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-codecov" ,python-codecov)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-requests" ,python-requests)))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-h11" ,python-h11)
-       ("python-httptools" ,python-httptools)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-uvloop" ,python-uvloop)
-       ("python-watchgod" ,python-watchgod)
-       ("python-websockets" ,python-websockets)
-       ("python-wsproto" ,python-wsproto)))
+     (list python-pytest python-pytest-mock python-requests
+           python-trustme python-wsproto))
+    (propagated-inputs
+     (list python-click
+           python-h11
+           python-httptools
+           python-pyyaml
+           python-uvloop
+           python-watchgod
+           python-websockets))
     (home-page "https://github.com/encode/uvicorn")
     (synopsis "Fast ASGI server implementation")
     (description
@@ -5005,16 +4828,10 @@ for HTTP/2 is planned.")
              (delete-file "translation_finder/test_api.py")
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-pathlib2" ,python-pathlib2)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-six" ,python-six)))
+     (list python-chardet python-pathlib2 python-ruamel.yaml python-six))
     (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-codacy-coverage" ,python-codacy-coverage)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-twine" ,python-twine)))
+     (list python-codecov python-codacy-coverage python-pytest-cov
+           python-pytest-runner python-twine))
     (home-page "https://weblate.org/")
     (synopsis "Translation file finder for Weblate")
     (description "This package provides a function to find translation file in
@@ -5035,11 +4852,9 @@ is part of the Weblate translation platform.")
           "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (native-inputs
-     `(("python-httmock" ,python-httmock)
-       ("python-mock" ,python-mock)))
+     (list python-httmock python-mock))
     (home-page
       "https://github.com/python-gitlab/python-gitlab")
     (synopsis "Interact with GitLab API")
@@ -5071,7 +4886,7 @@ with GitLab instances through their API.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/joeyespo/path-and-address")
     (synopsis "Functions for command-line server tools used by humans")
     (description "Path-and-address resolves ambiguities of command-line
@@ -5097,15 +4912,14 @@ interfaces, inferring which argument is the path, and which is the address.")
            "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-docopt" ,python-docopt)
-         ("python-flask" ,python-flask)
-         ("python-markdown" ,python-markdown)
-         ("python-path-and-address" ,python-path-and-address)
-         ("python-pygments" ,python-pygments)
-         ("python-requests" ,python-requests)))
+       (list python-docopt
+             python-flask
+             python-markdown
+             python-path-and-address
+             python-pygments
+             python-requests))
       (native-inputs
-       `(("python-pytest" ,python-pytest)
-         ("python-responses" ,python-responses)))
+       (list python-pytest python-responses))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -5146,9 +4960,9 @@ without requiring a page refresh.")
                (("urllib2") "urllib3"))
              #t)))))
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/kmike/port-for/")
     (synopsis "TCP localhost port finder and association manager")
     (description
@@ -5170,8 +4984,7 @@ association.")
          "0rhggz185bxc3zjnfpmhcvibyzi86i624za1lfh7x7ajsxw4y9c9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-tornado" ,python-tornado)))
+     (list python-six python-tornado))
     (home-page "https://github.com/lepture/python-livereload")
     (synopsis "Python LiveReload")
     (description
@@ -5225,24 +5038,21 @@ and serve updated contents upon changes to the directory.")
                        "--cov=tests" "tests"))
              #t)))))
     (native-inputs
-     `(("python-autoflake" ,python-autoflake)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pie" ,python-flake8-pie)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-uvicorn" ,python-uvicorn)
-       ("python-trustme" ,python-trustme)))
-    (propagated-inputs
-     `(("python-h11" ,python-h11)
-       ("python-h2" ,python-h2)
-       ("python-sniffio" ,python-sniffio)
-       ("python-trio" ,python-trio)
-       ("python-trio-typing" ,python-trio-typing)))
+     (list python-autoflake
+           python-flake8
+           python-flake8-bugbear
+           python-flake8-pie
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-trio
+           python-uvicorn
+           python-trustme))
+    (propagated-inputs
+     (list python-h11 python-h2 python-sniffio python-trio
+           python-trio-typing))
     (home-page "https://github.com/encode/httpcore")
     (synopsis "Minimal, low-level HTTP client")
     (description
@@ -5294,30 +5104,30 @@ Some things HTTP Core does do:
                         " and not test_async_proxy_close"
                         " and not test_sync_proxy_close"))))))))
     (native-inputs
-     `(("python-autoflake" ,python-autoflake)
-       ("python-black" ,python-black)
-       ("python-cryptography" ,python-cryptography)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flake8-pie" ,python-flake8-pie)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-trio" ,python-trio)
-       ("python-trio-typing" ,python-trio-typing)
-       ("python-trustme" ,python-trustme)
-       ("python-uvicorn" ,python-uvicorn)))
-    (propagated-inputs
-     `(("python-brotli" ,python-brotli)
-       ("python-certifi" ,python-certifi)
-       ("python-chardet" ,python-chardet)
-       ("python-httpcore" ,python-httpcore)
-       ("python-idna" ,python-idna)
-       ("python-rfc3986" ,python-rfc3986)
-       ("python-sniffio" ,python-sniffio)))
+     (list python-autoflake
+           python-black
+           python-cryptography
+           python-flake8
+           python-flake8-bugbear
+           python-flake8-pie
+           python-isort
+           python-mypy
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-trio
+           python-pytest-cov
+           python-trio
+           python-trio-typing
+           python-trustme
+           python-uvicorn))
+    (propagated-inputs
+     (list python-brotli
+           python-certifi
+           python-chardet
+           python-httpcore
+           python-idna
+           python-rfc3986
+           python-sniffio))
     (home-page "https://www.python-httpx.org/")
     (synopsis "HTTP client for Python")
     (description
@@ -5382,13 +5192,9 @@ Plus all the standard features of requests:
                (("--doctest-module")
                 "--doctest-modules")))))))
     (propagated-inputs
-     `(("python-certauth" ,python-certauth)
-       ("python-gevent" ,python-gevent)
-       ("python-websocket-client" ,python-websocket-client)))
+     (list python-certauth python-gevent python-websocket-client))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-waitress" ,python-waitress)))
+     (list python-mock python-pytest-cov python-waitress))
     (home-page "https://github.com/webrecorder/wsgiprox")
     (synopsis "HTTP/S proxy with WebSockets over WSGI")
     (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
@@ -5429,10 +5235,8 @@ them to a designated prefix.")
                                                 "not test_remote") "'"))))))))
       (native-inputs
        ;; These inputs are required for the test suite.
-       `(("python-httpbin" ,python-httpbin)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-requests" ,python-requests)
-         ("python-wsgiprox" ,python-wsgiprox)))
+       (list python-httpbin python-pytest-cov python-requests
+             python-wsgiprox))
       (home-page "https://github.com/webrecorder/warcio")
       (synopsis "Streaming web archival archive (WARC) library")
       (description "warcio is a Python library to read and write the WARC format
@@ -5453,7 +5257,15 @@ files.")
          (base32
           "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))  ; Tests not included in release tarball.
+    (arguments
+     '(#:tests? #f  ; Tests not included in release tarball.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-websockets-package-name-requirement
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Python package names use dot as separator.
+             (substitute* "setup.py"
+               (("websockets/extensions") "websockets.extensions")))))))
     (home-page "https://github.com/aaugustin/websockets")
     (synopsis
      "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
@@ -5478,7 +5290,7 @@ it provides an elegant coroutine-based API.")
          "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (home-page
      "https://github.com/SeleniumHQ/selenium/")
     (synopsis "Python bindings for Selenium")
@@ -5524,9 +5336,7 @@ major web browsers.")
              (delete-file "tests/test_validator.py")
              (invoke "python" "-m" "pytest" "tests"))))))
     (native-inputs
-     `(("rapidjson" ,rapidjson)
-       ("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list rapidjson python-pytest python-pytz))
     (home-page "https://github.com/python-rapidjson/python-rapidjson")
     (synopsis "Python wrapper around rapidjson")
     (description "This package provides a python wrapper around rapidjson.")
@@ -5607,7 +5417,7 @@ translation.")
                 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
     (synopsis "Configuration loader for multiple config file formats")
     (description
@@ -5631,10 +5441,9 @@ be registered via an entrypoint.")
                 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-plaster" ,python-plaster)
-       ("python-pastedeploy" ,python-pastedeploy)))
+     (list python-plaster python-pastedeploy))
     (home-page "https://github.com/Pylons/plaster_pastedeploy")
     (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
     (description
@@ -5656,13 +5465,10 @@ according to the standard set by PasteDeploy ")
     (build-system python-build-system)
     (arguments '(#:test-target "pytest"))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-watchdog" ,python-watchdog)
-       ("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-runner python-watchdog python-mock
+           python-pytest-cov))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (home-page "https://readthedocs.org/projects/hupper")
     (synopsis "Integrated process monitor tracking changes to imported Python files")
     (description
@@ -5683,16 +5489,16 @@ changed the process is restarted.")
                 "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hupper" ,python-hupper)
-       ("python-plaster-pastedeploy" ,python-plaster-pastedeploy)
-       ("python-translationstring" ,python-translationstring)
-       ("python-venusian" ,python-venusian)
-       ("python-webob" ,python-webob)
-       ("python-zope-deprecation" ,python-zope-deprecation)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-webtest" ,python-webtest)
-       ("python-zope-component" ,python-zope-component)
-       ("python-plaster" ,python-plaster)))
+     (list python-hupper
+           python-plaster-pastedeploy
+           python-translationstring
+           python-venusian
+           python-webob
+           python-zope-deprecation
+           python-zope-interface
+           python-webtest
+           python-zope-component
+           python-plaster))
     (home-page "https://trypyramid.com/")
     (synopsis "Python web-framework suitable for small and large sites")
     (description
@@ -5737,18 +5543,14 @@ based on filters.")
         (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aniso8601" ,python-aniso8601)
-       ("python-flask" ,python-flask)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-pytz" ,python-pytz)))
+     (list python-aniso8601 python-flask python-jsonschema python-pytz))
     (native-inputs
-     `(("python-blinker" ,python-blinker)
-       ("python-faker" ,python-faker)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark"
-        ,python-pytest-benchmark)
-       ("python-pytest-flask" ,python-pytest-flask)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-blinker
+           python-faker
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-flask
+           python-pytest-mock))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5781,8 +5583,7 @@ Swagger.")
          "09r2gpj2nbn72v2zaf6xsvlazln77pgqzp2pg2021nja47sijhsw"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-socketio" ,python-socketio)))
+     (list python-flask python-socketio))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
     (synopsis "Socket.IO integration for Flask applications")
@@ -5802,9 +5603,9 @@ Swagger.")
           "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-zope-testing" ,python-zope-testing)))
+     (list python-zope-testing))
     (home-page "https://pypi.org/project/manuel/")
     (synopsis "Build tested documentation")
     (description
@@ -5824,11 +5625,9 @@ Swagger.")
           "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-cffi python-zope-interface))
     (native-inputs
-     `(("python-manuel" ,python-manuel)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-manuel python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/persistent/")
     (synopsis "Translucent persistent objects")
     (description "This package contains a generic persistence implementation for
@@ -5849,12 +5648,9 @@ Python.  It forms the core protocol for making objects interact
           "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-persistent" ,python-persistent)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-persistent python-zope-interface))
     (native-inputs
-     `(("python-persistent" ,python-persistent)
-       ("python-transaction" ,python-transaction)
-       ("python-zope-testrunner" ,python-zope-testrunner)))
+     (list python-persistent python-transaction python-zope-testrunner))
     (home-page "https://github.com/zopefoundation/BTrees")
     (synopsis "Scalable persistent object containers")
     (description
@@ -5877,11 +5673,9 @@ conflicts detected by that mechanism.")
           "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-mock python-nose))
     (home-page "https://github.com/zopefoundation/transaction")
     (synopsis "Transaction management for Python")
     (description "This package contains a generic transaction implementation
@@ -5901,7 +5695,7 @@ for Python.  It is mainly used by the ZODB.")
           "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page "https://github.com/rory/robot-detection")
     (synopsis "Detect web crawlers")
     (description
@@ -5925,9 +5719,9 @@ Agent is a web crawler.  It uses the list of registered robots from
     (arguments
      '(#:tests? #f)) ; Tests require network access.
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/django-haystack/pysolr/")
     (synopsis "Lightweight python wrapper for Apache Solr")
     (description
@@ -5965,9 +5759,7 @@ esprima.js)")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; none included
     (propagated-inputs
-     `(("python-pyjsparser" ,python-pyjsparser)
-       ("python-six" ,python-six)
-       ("python-tzlocal" ,python-tzlocal)))
+     (list python-pyjsparser python-six python-tzlocal))
     (home-page "https://github.com/PiotrDabkowski/Js2Py")
     (synopsis "JavaScript to Python translator")
     (description
@@ -5996,12 +5788,9 @@ interpreter written in pure Python.")
          (add-after 'unpack 'change-directory
            (lambda _ (chdir "python") #t)))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-flake8 python-mock python-nose))
     (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
     (synopsis "Encrypted Content Encoding for HTTP")
     (description
@@ -6054,16 +5843,16 @@ Encoding for HTTP.")
                (invoke "pytest" "-vv"
                        "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
     (inputs
-     `(("node" ,node)))
-    (propagated-inputs
-     `(("python-js2py" ,python-js2py)
-       ("python-polling2" ,python-polling2)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
-       ("python-responses" ,python-responses)
-       ("python-pyparsing" ,python-pyparsing-2.4.7)))
+     (list node))
+    (propagated-inputs
+     (list python-js2py
+           python-polling2
+           python-requests
+           python-requests-toolbelt-0.9.1
+           python-responses
+           python-pyparsing-2.4.7))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/venomous/cloudscraper")
     (synopsis "Cloudflare anti-bot bypass")
     (description
@@ -6165,26 +5954,26 @@ as a Python package.")
              (invoke "pytest" "-vv" "./tests" "-k"
                      "not test_zero_downtime and not test_gunicorn_worker"))))))
     (propagated-inputs
-     `(("python-aiofiles" ,python-aiofiles)
-       ("python-httptools" ,python-httptools)
-       ("python-httpx" ,python-httpx)
-       ("python-multidict" ,python-multidict)
-       ("python-ujson" ,python-ujson)
-       ("python-uvloop" ,python-uvloop)
-       ("python-websockets" ,python-websockets)))
+     (list python-aiofiles
+           python-httptools
+           python-httpx
+           python-multidict
+           python-ujson
+           python-uvloop
+           python-websockets))
     (native-inputs
-     `(("gunicorn" ,gunicorn)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-hstspreload" ,python-hstspreload)
-       ("python-httpcore" ,python-httpcore)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-sanic" ,python-pytest-sanic)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-urllib3" ,python-urllib3)
-       ("python-uvicorn" ,python-uvicorn)))
+     (list gunicorn
+           python-beautifulsoup4
+           python-hstspreload
+           python-httpcore
+           python-pytest
+           python-pytest-cov
+           python-pytest-benchmark
+           python-pytest-sanic
+           python-pytest-sugar
+           python-pytest-asyncio
+           python-urllib3
+           python-uvicorn))
     (home-page
      "https://github.com/sanic-org/sanic/")
     (synopsis
@@ -6209,12 +5998,12 @@ your code non-blocking and speedy.")
          "14vhpxdn54lz54mhcqlgcks0ssbws9gd1y7ii16a2g3gpfdc531k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-bidict" ,python-bidict)
-       ("python-engineio" ,python-engineio)
-       ("python-requests" ,python-requests)
-       ("python-websocket-client" ,python-websocket-client)
-       ("python-websockets" ,python-websockets)))
+     (list python-aiohttp
+           python-bidict
+           python-engineio
+           python-requests
+           python-websocket-client
+           python-websockets))
     (arguments '(#:tests? #f))        ; Tests not included in release tarball.
     (home-page "https://github.com/miguelgrinberg/python-socketio/")
     (synopsis "Python Socket.IO server")
@@ -6244,11 +6033,9 @@ your code non-blocking and speedy.")
                (invoke "pytest" "tests/" "-s"))
              #t)))))
     (propagated-inputs
-     `(("python-async-timeout" ,python-async-timeout)
-       ("python-curio" ,python-curio)
-       ("python-trio" ,python-trio)))
+     (list python-async-timeout python-curio python-trio))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/romis2012/python-socks")
     (synopsis
      "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
@@ -6269,7 +6056,7 @@ your code non-blocking and speedy.")
         (base32
          "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://github.com/Azure/azure-sdk-for-python")
     (synopsis "Azure namespace internals")
     (description
@@ -6289,7 +6076,7 @@ your code non-blocking and speedy.")
          "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-azure-nspkg" ,python-azure-nspkg)))
+     (list python-azure-nspkg))
     (home-page "https://github.com/Azure/azure-storage-python")
     (synopsis "Microsoft Azure Storage Namespace package")
     (description
@@ -6310,7 +6097,7 @@ communicate with Microsoft Azure Storage services.")
          "1pv02lvvmgz2qb61vz1jkjc04fgm4hpfvaj5zm4i3mjp64hd1mha"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/scrapy/w3lib")
     (synopsis "Python library of web-related functions")
     (description
@@ -6339,7 +6126,7 @@ translate entities on HTML strings, among other things.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/ubernostrum/webcolors")
     (synopsis "HTML/CSS color definitions library")
     (description "@code{python-webcolors} is a module for working with
@@ -6371,26 +6158,23 @@ can be handled by the @code{colorsys} module in the Python standard library.")
     ;; inputs.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-colorama" ,python-colorama)
-       ("python-cssselect" ,python-cssselect)
-       ("python-dateutil" ,python-dateutil)
-       ("python-feedparser" ,python-feedparser)
-       ("python-html2text" ,python-html2text)
-       ("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)
-       ("python-prettytable" ,python-prettytable)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-unidecode" ,python-unidecode)))
+     (list python-babel
+           python-colorama
+           python-cssselect
+           python-dateutil
+           python-feedparser
+           python-html2text
+           python-lxml
+           python-pillow
+           python-prettytable
+           python-pyqt
+           python-pyyaml
+           python-requests
+           python-six
+           python-unidecode))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-nose" ,python-nose)
-       ("python-selenium" ,python-selenium)
-       ("python-xunitparser" ,python-xunitparser)))
+     (list python-coverage python-flake8 python-nose python-selenium
+           python-xunitparser))
     (home-page "https://woob.tech/")
     (synopsis "Woob, Web Outside Of Browsers")
     (description "Woob is a collection of applications able to interact with
@@ -6413,19 +6197,17 @@ provides well-defined APIs to talk to websites lacking one.")
         (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-marshmallow" ,python-marshmallow-3.2)
-       ("python-marshmallow-jsonapi" ,python-marshmallow-jsonapi)
-       ("python-simplejson" ,python-simplejson)
-       ("python-sqlalchemy" ,python-sqlalchemy-1.3)
-       ("python-apispec" ,python-apispec)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)))
+     (list python-flask
+           python-marshmallow-3.2
+           python-marshmallow-jsonapi
+           python-simplejson
+           python-sqlalchemy-1.3
+           python-apispec
+           python-simplejson
+           python-six))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-coveralls" ,python-coveralls)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-coverage python-coveralls python-pytest
+           python-pytest-runner))
     (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
     (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
     (description
@@ -6449,8 +6231,7 @@ real-life projects with legacy data and diverse storage providers.")
         (base32 "0zh9zaqbac18s7mivqk8am9xw97lfkgcj9hhxj0d4208pkqpkmqs"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/earwig/mwparserfromhell")
     (synopsis "Python parser for MediaWiki wikicode")
     (description
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index b3a350aca4..e13c47f959 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -37,7 +37,7 @@
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
-;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2018, 2019, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
 ;;; Copyright © 2017, 2020, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
@@ -149,6 +149,7 @@
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages file)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages geo)
   #:use-module (gnu packages ghostscript)
@@ -226,6 +227,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
@@ -254,9 +256,7 @@
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "--cov=janus" "--cov=tests")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest python-pytest-cov python-pytest-asyncio))
     (home-page "https://github.com/aio-libs/janus/")
     (synopsis
      "Sync-async queue to interoperate between asyncio tasks and classic threads")
@@ -298,11 +298,8 @@ design}.")
                (setenv "CYBUILD" "True")
                (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-google-brotli" ,python-google-brotli)))
+     (list python-cython python-mock python-pytest python-pytest-cov
+           python-google-brotli))
     (home-page "https://github.com/getlogbook/logbook")
     (synopsis "Logbook is a logging replacement for Python")
     (description
@@ -324,13 +321,9 @@ applications in mind and the idea to make logging fun.")
          "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
     (build-system python-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-docopt" ,python-docopt)
-       ("python-pillow" ,python-pillow)
-       ("python-xlib" ,python-xlib)))
+     (list python-attrs python-docopt python-pillow python-xlib))
     (home-page "https://github.com/seebye/ueberzug")
     (synopsis "Command line util to display images in combination with X11")
     (description "Überzug is a command line util which draws images on
@@ -359,7 +352,7 @@ workspaces.
          "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest", python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -368,8 +361,7 @@ workspaces.
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-six", python-six)
-       ("python-termcolor", python-termcolor)))
+     (list python-six python-termcolor))
     (synopsis "Library for automatically generating command line interfaces")
     (description
      "Fire is a library for automatically generating command line interfaces
@@ -432,13 +424,10 @@ features of the Python's built-in dict.")
               "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-coverage" ,python-coverage)
-      ("python-nose" ,python-nose)
-      ("python-setuptools" ,python-setuptools) ; Won't build without this.
-      ("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-coverage python-nose python-setuptools ; Won't build without this.
+          python-setuptools-scm))
    (propagated-inputs
-    `(("python-toml" ,python-toml)
-      ("python-flake8" ,python-flake8)))
+    (list python-toml python-flake8))
    (home-page "https://github.com/casperdcl/argopt")
    (synopsis "Generate a command-line interface from a docstring")
    (description "This package provides tools to define a command line interface
@@ -480,11 +469,9 @@ decorators, including variants of the Python standard library's
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-flake8 python-pytest))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)))
+     (list python-colorama))
     (home-page "http://github.com/timofurrer/colorful")
     (synopsis "Terminal string styling")
     (description "Colorful provides an array of text styles, that can be used
@@ -504,7 +491,7 @@ as functions or string constants to form colored terminal output.")
         (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pavdmyt/yaspin")
     (synopsis "Yet Another Terminal Spinner")
     (description "Yaspin provides a terminal spinner to indicate the progress
@@ -524,10 +511,9 @@ during long operations.")
         (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-nltk" ,python-nltk-3.4)))
+     (list python-nltk-3.4))
     (home-page
      "https://github.com/yeraydiazdiaz/lunr.py")
     (synopsis "Full-text search library")
@@ -548,9 +534,7 @@ that best match text queries.")
           (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)
-       ("python-mistune" ,python-mistune)
-       ("python-pygments" ,python-pygments)))
+     (list python-jinja2 python-mistune python-pygments))
     (home-page "https://pypi.org/project/mrkd/")
     (synopsis "Python Markdown implementation")
     (description
@@ -580,13 +564,13 @@ HTML")
              (substitute* "setup.py"
                (("==") ">=")))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-jinja2" ,python-jinja2)
-       ("python-livereload" ,python-livereload)
-       ("python-lunr" ,python-lunr)
-       ("python-markdown" ,python-markdown)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tornado" ,python-tornado)))
+     (list python-click
+           python-jinja2
+           python-livereload
+           python-lunr
+           python-markdown
+           python-pyyaml
+           python-tornado))
     (home-page "https://www.mkdocs.org")
     (synopsis "Project documentation with Markdown")
     (description "MkDocs is a static site generator geared towards building
@@ -610,7 +594,7 @@ configured with a single YAML configuration file.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)))
+     (list python-markdown))
     (home-page "https://github.com/facelessuser/pymdown-extensions")
     (synopsis "Extension pack for Python Markdown")
     (description "PyMdown Extensions is a collection of extensions for Python
@@ -640,11 +624,8 @@ Markdown.  All extensions are found under the module namespace of pymdownx.")
              (substitute* "requirements.txt"
                (("mkdocs-material-extensions.*$") "")))))))
     (propagated-inputs
-     `(("python-markdown" ,python-markdown)
-       ("python-mkdocs" ,python-mkdocs)
-       ("python-pygments" ,python-pygments)
-       ("python-pymdown-extensions"
-        ,python-pymdown-extensions)))
+     (list python-markdown python-mkdocs python-pygments
+           python-pymdown-extensions))
     (home-page "https://squidfunk.github.io/mkdocs-material/")
     (synopsis "Material Design theme for MkDocs")
     (description "This package provides a theme plugin for the static site
@@ -682,13 +663,10 @@ generator MkDocs.")
        ("gnupg" ,gnupg)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("python-aiodns" ,python-aiodns)
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-pyasn1-modules" ,python-pyasn1-modules)))
+     (list python-aiodns python-aiohttp python-pyasn1
+           python-pyasn1-modules))
     (inputs
-     `(("libidn" ,libidn)
-       ("python" ,python))) ; We are building a Python extension.
+     (list libidn python)) ; We are building a Python extension.
     (synopsis "XMPP library without threads")
     (description "Slixmpp is a XMPP library for Python 3.7+.  It is a fork of
 SleekXMPP.  Its goal is to only rewrite the core of the library (the low level
@@ -709,12 +687,10 @@ threads.")
                 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-tornado" ,python-tornado)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-sphinx python-tornado
+           python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
@@ -751,9 +727,9 @@ task of adding retry behavior to just about anything.")
                  (invoke "py.test")))
              #t)))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
     (synopsis "Python Telegram bot api")
     (description "This package provides a simple, but extensible Python
@@ -772,17 +748,12 @@ implementation for the Telegram Bot API.")
                 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      ;; Extend PYTHONPATH so the built package will be found.
-                      (setenv "PYTHONPATH"
-                              (string-append (getcwd) "/build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-p" "no:logging")
-                      #t)))))
+                      (invoke "pytest" "-p" "no:logging"))))))
     (home-page "https://github.com/borntyping/python-colorlog")
     (synopsis "Log formatting with colors for python")
     (description "The @code{colorlog.ColoredFormatter} is a formatter for use
@@ -801,7 +772,7 @@ with Python's logging module that outputs records using terminal colors.")
                 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)))
+     (list python-psutil))
     (home-page "https://github.com/rasbt/pyprind")
     (synopsis "Python Progress Bar and Percent Indicator Utility")
     (description "The PyPrind (Python Progress Indicator) module provides a
@@ -821,9 +792,9 @@ of a loop structure or other iterative computation.")
                 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgphoto2" ,libgphoto2)))
+     (list libgphoto2))
     (home-page "https://github.com/jim-easterbrook/python-gphoto2")
     (synopsis "Python interface to libgphoto2")
     (description "@code{python-gphoto2} is a comprehensive Python interface
@@ -843,7 +814,7 @@ automatically generate the interface code.")
                 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-d2to1" ,python-d2to1)))
+     (list python-d2to1))
     (home-page "https://github.com/vaab/colour")
     (synopsis "Convert and manipulate various color representations")
     (description "Pythonic way to manipulate color representations (HSL, RVB,
@@ -862,7 +833,7 @@ web, X11, ...).")
                 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/embray/d2to1")
     (synopsis "Allows for distutils2-like setup.cfg files as package metadata
 in python")
@@ -883,10 +854,9 @@ distribute/setuptools setup.py script.")
                 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (inputs
-     `(("libraw" ,libraw)))
+     (list libraw))
     (home-page "https://rawkit.readthedocs.io")
     (synopsis "Ctypes-based LibRaw binding for Python")
     (description "The rawkit package provides two modules:  rawkit and libraw.
@@ -907,7 +877,7 @@ interacting with the low-level LibRaw C APIs.")
                 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tkinter" ,python "tk")))
+     (list `(,python "tk")))
     (home-page "https://github.com/robertlugg/easygui")
     (synopsis "GUI programming module for Python")
     (description "EasyGUI is a module for very simple, very easy GUI
@@ -928,11 +898,9 @@ simple function calls.")
         (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
     (build-system python-build-system)
     (inputs
-     `(("md4c" ,md4c)))
+     (list md4c))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("pkg-config" ,pkg-config)))
+     (list python-flake8 python-pkgconfig pkg-config))
     (home-page "https://github.com/dominickpastore/pymd4c")
     (synopsis "Python bindings for MD4C")
     (description
@@ -953,10 +921,9 @@ to CommonMark.")
          "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list python-setuptools-scm python-pytest))
     (inputs
-     `(("libmediainfo" ,libmediainfo)))
+     (list libmediainfo))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -964,25 +931,22 @@ to CommonMark.")
            (lambda _
              (substitute* "pymediainfo/__init__.py"
                (("libmediainfo.so.0")
-                (string-append (assoc-ref %build-inputs "libmediainfo")
-                               "/lib/libmediainfo.so.0")))
-             #t))
+                (search-input-file %build-inputs
+                                   "/lib/libmediainfo.so.0")))))
          (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (when tests?
-               ;; Extend PYTHONPATH so the built package will be found.
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
-               ;; Skip the only failing test "test_parse_url"
+               (add-installed-pythonpath inputs outputs)
+               ;; Skip the only failing test "test_parse_url" because it tries
+               ;; to access the internet.
                (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
     (home-page
      "https://github.com/sbraz/pymediainfo")
     (synopsis
      "Python wrapper for the mediainfo library")
     (description
-     "Python wrapper for the mediainfo library to access the technical and tag
-data for video and audio files.")
+     "This package provides a Python wrapper for the mediainfo library to
+access the technical and tag data for video and audio files.")
     (license license:expat)))
 
 (define-public python-psutil
@@ -1039,14 +1003,12 @@ iotop, uptime, pidof, tty, taskset, pmap.")
            #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-cython python-matplotlib python-pytest
+           python-pytest-cov))
     (inputs
-     `(("geos" ,geos)))
+     (list geos))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1085,7 +1047,7 @@ planar geometric objects.  It is based on the @code{GEOS} library.")
          "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pep8" ,python-pep8)))
+     (list python-pep8))
     (home-page "https://github.com/skorokithakis/shortuuid")
     (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
     (description
@@ -1116,11 +1078,8 @@ module and then similar looking characters are removed.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list python-cython python-pytest python-setuptools-scm python-toml
+           python-wheel))
     (home-page "https://github.com/python-useful-helpers/logwrap")
     (synopsis "Decorator for logging function arguments")
     (description "This package provides a decorator to log function arguments
@@ -1140,7 +1099,7 @@ and function call return values in a human-readable way.")
          "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/Anaconda-Platform/clyent")
     (synopsis "Command line client library")
     (description "Clyent is a Python command line utility library.  It is used
@@ -1156,23 +1115,22 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
     (version "2.9.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (pypi-uri "Babel" version))
-      (sha256
-       (base32
-        "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
+       (method url-fetch)
+       (uri (pypi-uri "Babel" version))
+       (sha256
+        (base32
+         "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)))
+     (list python-freezegun python-pytest tzdata-for-tests))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
                       (invoke "pytest" "-vv"))))))
-    (home-page "http://babel.pocoo.org/")
+    (home-page "https://babel.pocoo.org/")
     (synopsis
      "Tools for internationalizing Python applications")
     (description
@@ -1223,19 +1181,19 @@ and verifies that it matches the intended target hostname.")
          "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sortedcollections" ,python-sortedcollections)
-       ("python-sortedcontainers" ,python-sortedcontainers)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)
-       ("python-tox" ,python-tox)))
+     (list python-coverage
+           python-hypothesis
+           python-pre-commit
+           python-py
+           python-pytest
+           python-pytest-benchmark
+           python-pytest-cov
+           python-setuptools-scm
+           python-sortedcollections
+           python-sortedcontainers
+           python-sphinx
+           python-sphinx-autodoc-typehints
+           python-tox))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'relax-reqs
@@ -1324,14 +1282,6 @@ Expressions are constructed from parsed strings or directly in Python.")
       (modify-phases %standard-phases
         (replace 'check
           (lambda _
-            ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
-            ;; on to import numpy. Somehow this works on their CI system.
-            ;; Let's just manage PYTHONPATH here instead.
-            (substitute* "runexamples.sh"
-              (("export PYTHONPATH=.*") ""))
-            (setenv "PYTHONPATH"
-                    (string-append (getcwd) ":"
-                                   (getenv "PYTHONPATH")))
             (invoke "./runexamples.sh")
             (invoke "nosetests" "-v"))))))
    (home-page "https://github.com/fhs/python-hdf4")
@@ -1372,14 +1322,11 @@ NetCDF files can also be read and modified.  Python-HDF4 is a fork of
                  (string-append "['" prefix "/lib" "']")))
               #t))))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-numpy" ,python-numpy)))
+     (list python-six python-numpy))
     (inputs
-     `(("hdf5" ,hdf5-1.10)))
+     (list hdf5-1.10))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("pkg-config" ,pkg-config)))
+     (list python-cython python-pkgconfig pkg-config))
     (home-page "https://www.h5py.org/")
     (synopsis "Read and write HDF5 files from Python")
     (description
@@ -1412,9 +1359,9 @@ concepts.")
              (substitute* "setup.py"
                ((", '-march=native'") "")))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("pybind11" ,pybind11)))
+     (list pybind11))
     (home-page "https://github.com/nmslib/hnswlib")
     (synopsis "Fast approximate nearest neighbor search")
     (description "Hnswlib is a header-only C++ implementation of fast
@@ -1439,16 +1386,10 @@ approximate nearest neighbor search with Python bindings.")
     (arguments
      `(#:test-target "pytest"))
     (propagated-inputs
-     `(("python-black" ,python-black)
-       ("python-language-server"
-        ,python-language-server)
-       ("python-toml" ,python-toml)))
+     (list python-black python-language-server python-toml))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-mypy" ,python-mypy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-flake8 python-isort python-mypy python-pytest
+           python-pytest-runner))
     (home-page "https://github.com/rupert/pyls-black")
     (synopsis "Black plugin for the Python Language Server")
     (description "Black plugin for the Python Language Server.")
@@ -1475,7 +1416,7 @@ approximate nearest neighbor search with Python bindings.")
              (setenv "HOME" "/tmp")
              (invoke "python" "sh.py" "test"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/amoffat/sh")
     (synopsis "Python subprocess replacement")
     (description "This package provides a replacement for Python's
@@ -1494,11 +1435,9 @@ approximate nearest neighbor search with Python bindings.")
         (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-coveralls" ,python-coveralls)
-       ("python-cython" ,python-cython)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-coveralls python-cython python-pytest-cov))
     (home-page "https://github.com/Unidata/cftime")
     (synopsis "Library for time handling")
     (description
@@ -1528,14 +1467,11 @@ of the netcdf4 package before.")
              (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-cftime" ,python-cftime)))
+     (list python-numpy python-cftime))
     (inputs
-     `(("netcdf" ,netcdf)
-       ("hdf4" ,hdf4)
-       ("hdf5" ,hdf5)))
+     (list netcdf hdf4 hdf5))
     (home-page "https://github.com/Unidata/netcdf4-python")
     (synopsis "Python/numpy interface to the netCDF library")
     (description "Netcdf4-python is a Python interface to the netCDF C
@@ -1571,10 +1507,9 @@ to users of that module.")
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-paramiko" ,python-paramiko)))
+     (list python-lxml python-paramiko))
     (home-page "https://github.com/ncclient/ncclient")
     (synopsis "Python library for NETCONF clients")
     (description "@code{ncclient} is a Python library that facilitates
@@ -1594,7 +1529,7 @@ protocol.")
         (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-boolean.py" ,python-boolean.py)))
+     (list python-boolean.py))
     (home-page "https://github.com/nexB/license-expression")
     (synopsis "Apply boolean logic to license expressions")
     (description
@@ -1624,9 +1559,9 @@ conventions and aliases in the same expression.")
              (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
              (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://docs.wand-py.org/")
     (synopsis "MagickWand API binding for Python")
     (description
@@ -1648,7 +1583,7 @@ library.")
     (build-system python-build-system)
     (arguments '(#:test-target "check"))
     (native-inputs
-     `(("python-pbr" ,python-pbr)))
+     (list python-pbr))
     (home-page "https://launchpad.net/pylockfile")
     (synopsis "Platform-independent file locking module")
     (description
@@ -1672,7 +1607,7 @@ API for locking files.")
          "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
     (build-system python-build-system)
     (inputs
-     `(("re2" ,re2)))
+     (list re2))
     (home-page "https://github.com/facebook/pyre2")
     (synopsis "Python wrapper for RE2")
     (description "This package provides a Python extension that wraps Google's
@@ -1738,8 +1673,7 @@ version identifier.")
         (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pytz" ,python-pytz)))
+     (list python-attrs python-pytz))
     (home-page "https://github.com/irmen/Serpent")
     (synopsis "Serializer for literal Python expressions")
     (description
@@ -1830,7 +1764,7 @@ Python 3 support.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://pypi.org/project/setuptools/")
     (synopsis
      "Library designed to facilitate packaging Python projects")
@@ -1865,11 +1799,9 @@ Python 3 support.")
          "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list python-toml python-wheel))
     (home-page
      "https://github.com/s0undt3ch/setuptools-declarative-requirements")
     (synopsis "File support for setuptools declarative setup.cfg")
@@ -1906,7 +1838,7 @@ Python 3 support.")
     (arguments
      '(#:tests? #f)) ; The test suite requires network access.
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page
      "https://bitbucket.org/emptypage/uniseg-python")
     (synopsis
@@ -1994,9 +1926,6 @@ language.  It aims to be fast.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (format #t "current working dir ~s~%" (getcwd))
-                      (setenv "PYTHONPATH"
-                              (string-append ".:" (getenv "PYTHONPATH")))
                       ;; We must run the test suite module directly, as it
                       ;; fails to define the 'tempdir' variable in scope for
                       ;; the tests otherwise
@@ -2048,19 +1977,18 @@ class.")
                         (("\"can_player\\.py --help\"") ""))
                       #t)))))
     (propagated-inputs
-     `(("python-aenum" ,python-aenum)
-       ("python-wrapt" ,python-wrapt)))
-    (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-future" ,python-future)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-pyserial" ,python-pyserial)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-aenum python-wrapt))
+    (native-inputs
+     (list python-codecov
+           python-coverage
+           python-future
+           python-hypothesis
+           python-mock
+           python-pyserial
+           python-pytest
+           python-pytest-cov
+           python-pytest-runner
+           python-pytest-timeout))
     (home-page "https://github.com/hardbyte/python-can")
     (synopsis "Controller Area Network (CAN) interface module for Python")
     (description "This package defines the @code{can} module, which provides
@@ -2096,12 +2024,9 @@ sending and receiving messages on a CAN bus.")
                     (lambda _
                       (invoke "py.test" "-k" "not NetworkTests"))))))
     (propagated-inputs
-      `(("python-distlib" ,python-distlib)
-        ("python-packaging" ,python-packaging)
-        ("python-requests" ,python-requests)))
+      (list python-distlib python-packaging python-requests))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/brettcannon/caniusepython3")
     (synopsis "Check for Python 3-incompatible Python libraries")
     (description "The @command{caniusepython3} command scans your project and
@@ -2190,10 +2115,7 @@ bits instead of primitive data types like @code{char}, @code{int}, etc.")
      `(("sphinx" ,python-sphinx)
        ("texinfo" ,texinfo)))
     (propagated-inputs
-     `(("python-bitstruct" ,python-bitstruct)
-       ("python-can" ,python-can)
-       ("python-diskcache" ,python-diskcache)
-       ("python-textparser" ,python-textparser)))
+     (list python-bitstruct python-can python-diskcache python-textparser))
     (home-page "https://github.com/eerimoq/cantools")
     (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
     (description "This package includes Controller Area Network (CAN) related
@@ -2225,7 +2147,7 @@ tools that can be used to:
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-humanfriendly" ,python-humanfriendly)))
+     (list python-humanfriendly))
     (home-page "https://capturer.readthedocs.io")
     (synopsis "Capture stdout and stderr streams of the current process")
     (description
@@ -2251,12 +2173,9 @@ for additional processing.")
          "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-six" ,python-six)
-       ("python-unittest2" ,python-unittest2)))
+     (list python-mock python-nose python-six python-unittest2))
     (native-inputs
-     `(("python-coverage" ,python-coverage)))
+     (list python-coverage))
     (home-page "https://github.com/celery/case")
     (synopsis "Unittest utilities and convenience methods")
     (description
@@ -2286,8 +2205,7 @@ some helpful Python 2 compatibility convenience methods.")
              (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
                      "verboselogs/tests.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://verboselogs.readthedocs.io")
     (synopsis "Verbose logging level for Python's logging module")
     (description
@@ -2314,7 +2232,7 @@ add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
      `(;Tests require some updated modules
        #:tests? #f))
     (propagated-inputs
-     `(("python-capturer" ,python-capturer)))
+     (list python-capturer))
     (home-page "https://coloredlogs.readthedocs.io")
     (synopsis "Colored stream handler for Python's logging module")
     (description
@@ -2361,22 +2279,18 @@ files are easily readable and they work nicely with version control systems.")
          "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python2-backports-functools-lru-cache"
-        ,python2-backports-functools-lru-cache)
-       ("python2-backports-shutil-get-terminal-size"
-        ,python2-backports-shutil-get-terminal-size)
-       ("python-cached-property" ,python-cached-property)
-       ("python-colorama" ,python-colorama)
-       ("python-imagesize" ,python-imagesize)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-lxml" ,python-lxml)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python2-backports-functools-lru-cache
+           python2-backports-shutil-get-terminal-size
+           python-cached-property
+           python-colorama
+           python-imagesize
+           python-importlib-metadata
+           python-lxml
+           python-requests
+           python-six))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-responses" ,python-responses)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest-cov python-pytest-xdist python-responses
+           python-setuptools-scm))
     (home-page "https://github.com/webcomics/dosage")
     (synopsis "Comic strip downloader and archiver")
     (description "Dosage is designed to keep a local copy of specific webcomics and other
@@ -2403,8 +2317,7 @@ downloaded, or download a strip for a particular date or index, if possible.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-lxml" ,python-lxml)))   ;used for the tests
+     (list python-pytest python-lxml))   ;used for the tests
     (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
     (synopsis "Low memory implementation of @code{lxml.xmlfile}")
     (description "This Python library is based upon the @code{xmlfile} module
@@ -2438,12 +2351,9 @@ of @code{xmlfile}.")
                       (invoke "pytest"))))))
     (native-inputs
      ;; For the test suite.
-     `(("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)))
+     (list python-lxml python-pillow python-pytest))
     (propagated-inputs
-     `(("python-et-xmlfile" ,python-et-xmlfile)
-       ("python-jdcal" ,python-jdcal)))
+     (list python-et-xmlfile python-jdcal))
     (home-page "https://openpyxl.readthedocs.io")
     (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
     (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
@@ -2466,27 +2376,44 @@ standard.")
           (sha256
            (base32
             "1qzjj8nwj4dn0mhq1j64f136afiqqb81lvqiikipz3g1g0b80lqx"))))
-      (arguments '(#:tests? #f)))))     ; No test suite.
+      (arguments
+       `(#:python ,python-2
+         #:tests? #f)))))     ; No test suite.
 
 (define-public python-eventlet
   (package
     (name "python-eventlet")
-    (version "0.25.1")
+    (version "0.33.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "eventlet" version))
        (sha256
         (base32
-         "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
+         "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)
-       ("python-greenlet" ,python-greenlet)
-       ("python-monotonic" ,python-monotonic)))
+     (list python-dnspython python-greenlet python-monotonic python-six))
+    (native-inputs
+     (list python-nose))
     (arguments
-     ;; TODO: Requires unpackaged 'enum-compat'.
-     '(#:tests? #f))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'avoid-OSError
+           (lambda _
+             ;; If eventlet tries to load greendns, an OSError is thrown when
+             ;; getprotobyname is called.  Thankfully there is an environment
+             ;; variable to disable the greendns import, so use it:
+             (setenv "EVENTLET_NO_GREENDNS" "yes")))
+         (add-after 'unpack 'delete-broken-tests
+           (lambda _
+             (delete-file "tests/greendns_test.py")
+             (delete-file "tests/socket_test.py")))
+         ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "nosetests" "-v" "tests/")))))))
     (home-page "https://eventlet.net")
     (synopsis "Concurrent networking library for Python")
     (description
@@ -2497,7 +2424,7 @@ Coroutines ensure that the developer uses a blocking style of programming
 that is similar to threading, but provide the benefits of non-blocking I/O.
 The event dispatch is implicit, which means you can easily use @code{Eventlet}
 from the Python interpreter, or as a small part of a larger application.")
-  (license license:expat)))
+    (license license:expat)))
 
 (define-public python-sinfo
   (package
@@ -2511,7 +2438,7 @@ from the Python interpreter, or as a small part of a larger application.")
                 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-stdlib-list" ,python-stdlib-list)))
+     (list python-stdlib-list))
     (home-page "https://gitlab.com/joelostblom/session_info")
     (synopsis "Output module version information loaded in a Python session")
     (description "This package outputs version information for modules loaded
@@ -2519,48 +2446,20 @@ in the current session, Python, and the OS.")
     (license license:bsd-3)))
 
 (define-public python-six
-  (package
+  (package/inherit python-six-bootstrap
     (name "python-six")
-    (version "1.14.0")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (pypi-uri "six" version))
-      (sha256
-       (base32
-        "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
-    (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (invoke "py.test" "-v"))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest-bootstrap)))
-    (home-page "https://pypi.org/project/six/")
-    (synopsis "Python 2 and 3 compatibility utilities")
-    (description
-     "Six is a Python 2 and 3 compatibility library.  It provides utility
-functions for smoothing over the differences between the Python versions with
-the goal of writing Python code that is compatible on both Python versions.
-Six supports every Python version since 2.5.  It is contained in only one
-Python file, so it can be easily copied into your project.")
-    (license license:x11)))
+     `(("python-pytest" ,python-pytest-bootstrap)))))
 
 (define-public python2-six
   (package-with-python2 python-six))
 
-(define-public python-six-bootstrap
-  (package
-    (inherit python-six)
-    (name "python-six-bootstrap")
-    (native-inputs `())
-    (arguments `(#:tests? #f))))
-
-(define-public python2-six-bootstrap
-  (package-with-python2 python-six-bootstrap))
-
 (define-public python-schedule
   (package
     (name "python-schedule")
@@ -2574,8 +2473,7 @@ Python file, so it can be easily copied into your project.")
         "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)))
+     (list python-pytest python-mock))
     (home-page "https://github.com/dbader/schedule")
     (synopsis "Schedule periodic function calls in Python")
     (description
@@ -2604,7 +2502,7 @@ human-friendly syntax.")
        (sha256
         (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (build-system python-build-system)
     (home-page "https://github.com/scour-project/scour")
     (synopsis "Scour is an SVG optimizer/cleaner written in Python")
@@ -2627,7 +2525,7 @@ lossless but can be tweaked for more aggressive cleaning.")
         "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-html5lib" ,python-html5lib)))
+     (list python-html5lib))
     (home-page "https://github.com/python-mechanize/mechanize")
     (synopsis
      "Stateful programmatic web browsing in Python")
@@ -2654,7 +2552,7 @@ after Andy Lester’s Perl module WWW::Mechanize.")
     (arguments
      `(#:tests? #f))
     (inputs
-      `(("alsa-lib" ,alsa-lib)))
+      (list alsa-lib))
     (home-page
      "https://github.com/hamiltron/py-simple-audio")
     (synopsis "Simple, asynchronous audio playback for Python 3")
@@ -2666,16 +2564,18 @@ audio playback capability for Python 3 on OSX, Windows, and Linux.")
 (define-public python-simplejson
   (package
     (name "python-simplejson")
-    (version "3.17.0")
+    (version "3.17.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "simplejson" version))
       (sha256
        (base32
-        "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
+        "0hc8nqwdlll4a9cr1k9msn5kmb6kmbjirpgvhjh254nr4sgwgv3m"))))
     (build-system python-build-system)
-    (home-page "http://simplejson.readthedocs.org/en/latest/")
+    (native-inputs
+     (list python-toml))
+    (home-page "https://simplejson.readthedocs.io/en/latest")
     (synopsis
      "Json library for Python")
     (description
@@ -2698,20 +2598,19 @@ Python 3.3+.")
 (define-public python-pyicu
   (package
     (name "python-pyicu")
-    (version "2.4.3")
+    (version "2.7.4")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "PyICU" version))
       (sha256
        (base32
-        "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
+        "0mkz1673qxldxs4mrqg9882xgmz5fhpia17yrsd6z8dfw8156rf0"))))
     (build-system python-build-system)
     (inputs
-     `(("icu4c" ,icu4c)))
+     (list icu4c))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/ovalhub/pyicu")
     (synopsis "Python extension wrapping the ICU C++ API")
     (description
@@ -2748,9 +2647,7 @@ Python 3.3+.")
                (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
              #t)))))
     (propagated-inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pyatspi" ,python-pyatspi)))
+     (list python-pygobject python-pycairo python-pyatspi))
     (native-inputs
      `(("python-nose" ,python-nose)
        ("gtk+" ,gtk+)
@@ -2915,11 +2812,9 @@ backported for previous versions of Python from 2.4 to 3.3.")
         "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-parse" ,python-parse)))
+     (list python-six python-parse))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/jenisys/parse_type")
     (synopsis "Extended parse module")
     (description
@@ -2998,9 +2893,7 @@ existing ones.")
     (build-system python-build-system)
     (arguments '(#:tests? #false)) ; no tests included
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-mock python-pytest python-pytest-runner))
     (home-page "https://github.com/ddmee/polling2")
     (synopsis "Polling utility with many configurable options")
     (description "Polling2 is a utility used to wait for a function to return
@@ -3085,10 +2978,8 @@ software.")
         (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
   (build-system python-build-system)
   (native-inputs
-    `(("coverage" ,python-coverage)
-      ("pytest" ,python-pytest-astropy)
-      ("pytest-cov" ,python-pytest-cov)
-      ("setuptools-scm" ,python-setuptools-scm)))
+    (list python-coverage python-pytest-astropy python-pytest-cov
+          python-setuptools-scm))
   (home-page "https://github.com/astropy/astropy-helpers")
   (synopsis
    "Utilities for building and installing packages in the Astropy ecosystem")
@@ -3189,7 +3080,7 @@ server.")
     (propagated-inputs
      ;; Youtube-dl is a python package which is imported in the file
      ;; "backend_youtube_dl.py", therefore it needs to be propagated.
-     `(("youtube-dl" ,youtube-dl)))
+     (list youtube-dl))
     (home-page "https://np1.github.io/pafy/")
     (synopsis "Retrieve YouTube content and metadata")
     (description
@@ -3210,7 +3101,7 @@ server.")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("python2-unittest2" ,python2-unittest2)))
+     (list python2-unittest2))
     (home-page "http://funcsigs.readthedocs.org")
     (synopsis "Python function signatures from PEP362")
     (description
@@ -3229,14 +3120,14 @@ server.")
 (define-public python-py
   (package
     (name "python-py")
-    (version "1.8.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "py" version))
        (sha256
         (base32
-         "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
+         "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: "ImportError: 'test' module incorrectly imported from
@@ -3245,7 +3136,7 @@ server.")
      ;; Is this module globally installed?"
      '(#:tests? #f))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/py")
     (synopsis "Python library for parsing, I/O, instrospection, and logging")
     (description
@@ -3253,18 +3144,6 @@ server.")
 code introspection, and logging.")
     (license license:expat)))
 
-(define-public python-py-next
-  (package
-    (inherit python-py)
-    (version "1.10.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "py" version))
-       (sha256
-        (base32
-         "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))))
-
 (define-public python2-py
   (package-with-python2 python-py))
 
@@ -3305,7 +3184,7 @@ code introspection, and logging.")
     (arguments
      `(#:tests? #f)) ;; Most tests seem to use the Internet.
     (propagated-inputs
-      `(("git" ,git))) ;; pbr actually uses the "git" binary.
+      (list git)) ;; pbr actually uses the "git" binary.
     (native-inputs
       `(("python-fixtures" ,python-fixtures-bootstrap)
         ;; discover, coverage, hacking, subunit
@@ -3348,11 +3227,9 @@ from git information.
                         (("hypothesis<5") "hypothesis"))
                       #t)))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (synopsis "Persistent data structures for Python")
     (description
      "Pyrsistent is a number of persistent collections (by some referred to as
@@ -3424,12 +3301,10 @@ files.")
         (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)
-       ("python-configobj" ,python-configobj)
-       ("python-tabulate" ,python-tabulate)
-       ("python-terminaltables" ,python-terminaltables)))
+     (list python-wcwidth python-configobj python-tabulate
+           python-terminaltables))
     (home-page "https://github.com/dbcli/cli_helpers")
     (synopsis "Helpers for building command-line apps")
     (description
@@ -3459,14 +3334,12 @@ interfaces.")
                                                  "cross-libc" "libc"))))
                (substitute* "src/click/_unicodefun.py"
                  (("'locale'")
-                  (string-append "'" glibc "/bin/locale'"))))
-             #t))
+                  (string-append "'" glibc "/bin/locale'"))))))
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://palletsprojects.com/p/click/")
     (synopsis "Command line library for Python")
     (description
@@ -3504,9 +3377,9 @@ with sensible defaults out of the box.")
             "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-click" ,python-click)))
+      (list python-click))
     (native-inputs
-      `(("python-pytest-cov" ,python-pytest-cov)))
+      (list python-pytest-cov))
     (home-page "https://github.com/mapbox/cligj")
     (synopsis "Click params for command line interfaces to GeoJSON")
     (description
@@ -3555,7 +3428,7 @@ version numbers.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/phn/jdcal")
     (synopsis "Functions to convert between Julian dates Gregorian dates")
     (description "This Python library provides functions for converting
@@ -3578,8 +3451,7 @@ between Julian dates and Gregorian dates.")
        "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-nose" ,python-nose)
-      ("python-nose-random" ,python-nose-random)))
+    (list python-nose python-nose-random))
    (home-page
     "https://github.com/fzumstein/jsondiff")
    (synopsis "Compare JSON and JSON-like structures in Python")
@@ -3602,18 +3474,15 @@ compare, diff, and patch JSON and JSON-like structures in Python.")
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
-             (invoke "trial" "jsonschema"))))))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (setenv "JSON_SCHEMA_TEST_SUITE" "json")
+               (invoke "trial" "jsonschema")))))))
     (native-inputs
      `(("python-setuptools_scm" ,python-setuptools-scm)
        ("python-twisted" ,python-twisted)))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
-       ("python-pyrsistent" ,python-pyrsistent)
-       ("python-six" ,python-six)))
+     (list python-attrs python-pyrsistent python-six))
     (home-page "https://github.com/Julian/jsonschema")
     (synopsis "Implementation of JSON Schema for Python")
     (description
@@ -3633,7 +3502,7 @@ compare, diff, and patch JSON and JSON-like structures in Python.")
          "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/keleshev/schema")
     (synopsis "Simple data validation library")
     (description
@@ -3673,7 +3542,7 @@ something else) to Python data-types.")
          "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)))
+     (list python-chardet))
     (home-page "https://github.com/fedora-infra/kitchen")
     (synopsis "Python API for snippets")
     (description "@code{kitchen} module provides a python API for all sorts of
@@ -3746,12 +3615,9 @@ somewhat intelligible.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/kmike/text-unidecode/")
     (synopsis "Decode Unicode data")
     (description
@@ -3795,8 +3661,7 @@ memory usage and transliteration quality.")
                          ""))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/progrium/pyjwt")
     (synopsis "JSON Web Token implementation in Python")
     (description
@@ -3844,13 +3709,13 @@ JavaScript-like message boxes.  Types of dialog boxes include:
   (package
     (name "python-pympler")
     (home-page "https://pythonhosted.org/Pympler/")
-    (version "0.8")
+    (version "0.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Pympler" version))
               (sha256
                (base32
-                "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
+                "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -3879,14 +3744,14 @@ visualisation and class tracker statistics.")
 (define-public python-itsdangerous
   (package
     (name "python-itsdangerous")
-    (version "1.1.0")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "itsdangerous" version))
        (sha256
         (base32
-         "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
+         "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
     (build-system python-build-system)
     (home-page "https://palletsprojects.com/p/itsdangerous/")
     (synopsis "Python library for passing data to/from untrusted environments")
@@ -3895,9 +3760,6 @@ visualisation and class tracker statistics.")
 environments and back.")
     (license license:bsd-3)))
 
-(define-public python2-itsdangerous
-  (package-with-python2 python-itsdangerous))
-
 (define-public python-pyyaml
   (package
     (name "python-pyyaml")
@@ -3911,7 +3773,7 @@ environments and back.")
          "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))
     (build-system python-build-system)
     (inputs
-     `(("libyaml" ,libyaml)))
+     (list libyaml python-cython))
     (home-page "https://pyyaml.org")
     (synopsis "YAML parser and emitter for Python")
     (description
@@ -3937,8 +3799,7 @@ provides Python-specific tags that represent an arbitrary Python object.")
          "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-case" ,python-case)))
+     (list python-pytest python-case))
     (home-page "https://github.com/celery/vine")
     (synopsis "Promises for Python")
     (description
@@ -3951,113 +3812,119 @@ e.g. filters, callbacks and errbacks can all be promises.")
 (define-public python-virtualenv
   (package
     (name "python-virtualenv")
-    (version "20.2.1")
+    (version "20.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "virtualenv" version))
        (sha256
         (base32
-         "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0"))))
+         "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ;; NOTE: guix lint remarks that "python-setuptools should probably not
-       ;; be an input at all". However, removing the input makes the build error:
-       ;; File "setup.py", line 4, in <module>
-       ;;   raise RuntimeError("setuptools >= 41 required to build")
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-mock python-pytest python-setuptools-scm))
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-distlib" ,python-distlib/next)
-       ("python-filelock" ,python-filelock)
-       ("python-six" ,python-six)
-       ("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-appdirs python-distlib python-filelock python-six))
     (home-page "https://virtualenv.pypa.io/")
     (synopsis "Virtual Python environment builder")
     (description
      "Virtualenv is a tool to create isolated Python environments.")
     (license license:expat)))
 
+(define-public python2-virtualenv
+  (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       (modify-inputs (package-propagated-inputs base)
+         (prepend python2-contextlib2))))))
+
 (define-public python-markupsafe
   (package
     (name "python-markupsafe")
-    (version "1.1.1")
+    (version "2.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "MarkupSafe" version))
        (sha256
         (base32
-         "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
+         "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda _
-                      (let ((cwd (getcwd))
-                            (libdir (find (cut string-prefix? "lib." <>)
-                                          (scandir "build"))))
-                      (setenv "PYTHONPATH"
-                              (string-append cwd "/build/" libdir ":"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://github.com/mitsuhiko/markupsafe")
     (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
     (description
      "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
 for Python.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-markupsafe))))))
 
+;; Version 1.1.1 is the last to support Python 2.
 (define-public python2-markupsafe
-  (package-with-python2 python-markupsafe))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-markupsafe)))
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "MarkupSafe" version))
+       (sha256
+        (base32
+         "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))))
 
 (define-public python-jinja2
   (package
     (name "python-jinja2")
-    (version "2.11.2")
+    (version "3.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Jinja2" version))
        (sha256
         (base32
-         "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
+         "197ms1wimxql650245v63wkv04n8bicj549wfhp51bx68x5lhgvh"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:"
-                                                   (getenv "PYTHONPATH")))
-                            (invoke "pytest" "-vv"))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-markupsafe" ,python-markupsafe)))
+     (list python-markupsafe))
     (home-page "http://jinja.pocoo.org/")
     (synopsis "Python template engine")
     (description
      "Jinja2 is a small but fast and easy to use stand-alone template engine
 written in pure Python.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-jinja2))))))
 
+;; Version 2.11.3 is the last to support Python 2.
 (define-public python2-jinja2
-  (package-with-python2 python-jinja2))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-jinja2)))
+    (version "2.11.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Jinja2" version))
+       (sha256
+        (base32
+         "1iiklf3wns67y5lfcacxma5vxfpb7h2a67xbghs01s0avqrq9md6"))))))
 
 (define-public python-jinja2-time
   (package
@@ -4072,8 +3939,7 @@ written in pure Python.")
          "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-arrow" ,python-arrow)
-       ("python-jinja2" ,python-jinja2)))
+     (list python-arrow python-jinja2))
     (home-page
      "https://github.com/hackebrot/jinja2-time")
     (synopsis "Jinja2 Extension for Dates and Times")
@@ -4119,21 +3985,26 @@ logic-free templating system Mustache.")
 (define-public python-joblib
   (package
     (name "python-joblib")
-    (version "0.14.1")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "joblib" version))
               (sha256
                (base32
-                "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
+                "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "pytest" "-v" "joblib"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "JOBLIB_MULTIPROCESSING" "0")
+               (invoke "pytest" "-v" "joblib"
+                       ;; We disable this test to avoid having to depend on ipython/jupyter
+                       "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://joblib.readthedocs.io/")
     (synopsis "Using Python functions as pipeline jobs")
     (description
@@ -4143,8 +4014,17 @@ and lazy re-evaluation (memoize pattern), easy simple parallel computing
 logging and tracing of the execution.")
     (license license:bsd-3)))
 
+;; Newer versions of joblib don't support Python 2.
 (define-public python2-joblib
-  (package-with-python2 python-joblib))
+  (package
+    (inherit (package-with-python2 python-joblib))
+    (version "0.14.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "joblib" version))
+              (sha256
+               (base32
+                "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))))
 
 (define-public python-daemon
   (package
@@ -4169,15 +4049,15 @@ logging and tracing of the execution.")
                 "skip_test_detaches_process_context"))
              #t)))))
     (propagated-inputs
-     `(("python-lockfile" ,python-lockfile)))
+     (list python-lockfile))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-unittest2" ,python-unittest2)
-       ("python-testtools" ,python-testtools)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-twine" ,python-twine)
-       ("python-mock" ,python-mock)
-       ("python-docutils" ,python-docutils)))
+     (list python-coverage
+           python-unittest2
+           python-testtools
+           python-testscenarios
+           python-twine
+           python-mock
+           python-docutils))
     (home-page "https://pagure.io/python-daemon/")
     (synopsis "Python library for making a Unix daemon process")
     (description "Python-daemon is a library that assists a Python program to
@@ -4211,11 +4091,11 @@ important tasks for becoming a daemon process:
                 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(;; For tests.
-       ("graphviz" ,graphviz)           ;for 'dot'
-       ("python-nose" ,python-nose)))
+     (list ;; For tests.
+           graphviz ;for 'dot'
+           python-nose))
     (home-page "https://github.com/c0fec0de/anytree")
     (synopsis "Lightweight tree data library")
     (description
@@ -4226,14 +4106,14 @@ structure for Python.")
 (define-public python-docutils
   (package
     (name "python-docutils")
-    (version "0.16")
+    (version "0.17.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "docutils" version))
        (sha256
         (base32
-         "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
+         "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -4259,6 +4139,20 @@ via commands such as @command{rst2man}, as well as supporting Python code.")
 (define-public python2-docutils
   (package-with-python2 python-docutils))
 
+;; awscli refuses to be built with docutils < 0.16.
+(define-public python-docutils-0.15
+  (package
+    (inherit python-docutils)
+    (version "0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "docutils" version))
+              (sha256
+               (base32
+                "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
+    ;; tests contain Python 2 syntax.
+    (arguments '(#:tests? #false))))
+
 ;; python2-sphinx fails its test suite with newer versions.
 (define-public python2-docutils-0.14
   (package
@@ -4294,9 +4188,9 @@ via commands such as @command{rst2man}, as well as supporting Python code.")
                (invoke "nosetests" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)))
+     (list python-docutils))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/twolfson/restructuredtext-lint")
     (synopsis "reStructuredText linter")
     (description "This package provides a linter for the reStructuredText
@@ -4326,14 +4220,10 @@ format.")
                (invoke "pytest" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-docutils" ,python-docutils)
-       ("python-restructuredtext-lint" ,python-restructuredtext-lint)
-       ("python-six" ,python-six)
-       ("python-stevedore" ,python-stevedore)))
+     (list python-chardet python-docutils python-restructuredtext-lint
+           python-six python-stevedore))
     (native-inputs
-     `(("python-testtools" ,python-testtools)
-       ("python-pytest" ,python-pytest)))
+     (list python-testtools python-pytest))
     (home-page "https://launchpad.net/doc8")
     (synopsis
      "Style checker for Sphinx (or other) RST documentation")
@@ -4345,15 +4235,14 @@ text styles of documentation.")
 (define-public python-pygments
   (package
     (name "python-pygments")
-    (version "2.7.3")
+    (version "2.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Pygments" version))
        (sha256
         (base32
-         "05mps9r966r3dpqw6zrs1nlwjdf5y4960hl9m7abwb3qyfnarwyc"))))
-    (replacement python-pygments/fixed)
+         "153zyxigm879sk2n71lfv03y2pgxb7dl0dlsbwkz9aydxnkf2mi6"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Tests require sphinx, which depends on this.
@@ -4365,18 +4254,6 @@ text styles of documentation.")
     (license license:bsd-2)
     (properties `((python2-variant . ,(delay python2-pygments))))))
 
-(define python-pygments/fixed
-  (package
-    (inherit python-pygments)
-    (version "2.7.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "Pygments" version))
-       (sha256
-        (base32
-         "0dy35ry5qa8dpklk4fkj9kfpw2qb4mh5ha9866kw30wf96dx0jfz"))))))
-
 ;; Pygments 2.6 and later does not support Python 2.
 (define-public python2-pygments
   (let ((base (package-with-python2 (strip-python2-variant python-pygments))))
@@ -4403,7 +4280,7 @@ text styles of documentation.")
          "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (home-page "https://github.com/liluo/pygments-github-lexers")
     (synopsis "Pygments Github custom lexers")
     (description "This package installs Github custom lexers to Pygments.")
@@ -4472,13 +4349,10 @@ software version simply.")
                       (when tests?
                         (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-wrapt" ,python-wrapt)))
+     (list python-wrapt))
     (native-inputs
-     `(("python-bumpversion" ,python-bumpversion)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("python-tox" ,python-tox)))
+     (list python-bumpversion python-pytest python-pytest-cov
+           python-sphinx python-tox))
     (home-page "https://github.com/tantale/deprecated")
     (synopsis "Python decorator to deprecate classes, functions or methods")
     (description "The @code{deprecated} decorator provides a convenient way to deprecate
@@ -4510,13 +4384,10 @@ to deprecate classes, functions or methods.")
                (invoke "pytest"))
              #t)))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-deprecated" ,python-deprecated)
-       ("python-pyjwt" ,python-pyjwt)
-       ("python-requests" ,python-requests)))
+     (list python-cryptography python-deprecated python-pyjwt
+           python-requests))
     (native-inputs
-     `(("python-httpretty" ,python-httpretty)
-       ("python-pytest" ,python-pytest)))
+     (list python-httpretty python-pytest))
     (home-page "https://pygithub.readthedocs.io/en/latest/")
     (synopsis "Python library for the GitHub API")
     (description "This library allows managing GitHub resources such as
@@ -4537,8 +4408,7 @@ using version 3 of the GitHub application programming interface (API).")
          "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-invoke" ,python-invoke)
-       ("python-pygithub" ,python-pygithub)))
+     (list python-invoke python-pygithub))
     (home-page "https://github.com/robotframework/rellu")
     (synopsis "Utilities to create PyPI releases")
     (description "This collection of utilities contains tooling and templates
@@ -4576,18 +4446,17 @@ ecosystem, but can naturally be used also by other projects.")
                         (copy-recursively "doc/libraries"
                                           (string-append doc "/libraries")))))
                   (replace 'check
-                    (lambda* (#:key inputs tests? #:allow-other-keys)
-                      (when tests?
-                        ;; Some tests require timezone data.  Otherwise, they
-                        ;; look up /etc/localtime, which doesn't exist, and
-                        ;; fail with:
-                        ;;
-                        ;; OverflowError: mktime argument out of range
-                        (setenv "TZDIR"
-                                (string-append (assoc-ref inputs "tzdata")
-                                               "/share/zoneinfo"))
-                        (setenv "TZ" "Europe/Paris")
-                        (invoke "python" "utest/run.py")))))))
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; Some tests require timezone data.  Otherwise, they
+                      ;; look up /etc/localtime, which doesn't exist, and fail
+                      ;; with:
+                      ;;
+                      ;; OverflowError: mktime argument out of range
+                      (setenv "TZDIR"
+                              (search-input-directory inputs "share/zoneinfo"))
+                      (setenv "TZ" "Europe/Paris")
+
+                      (invoke "python" "utest/run.py"))))))
     (native-inputs
      `(("python-docutils" ,python-docutils)
        ("python-jsonschema" ,python-jsonschema)
@@ -4603,6 +4472,48 @@ acceptance testing, acceptance test driven development (ATDD), and robotic
 process automation (RPA).")
     (license license:asl2.0)))
 
+(define-public python-robotframework-datadriver
+  (package
+    (name "python-robotframework-datadriver")
+    (version "1.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-datadriver" version))
+       (sha256
+        (base32 "1kv6h47850gdqr8azknkh81z7hw6yz5pjn53mkn71ly4szw4pqb7"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-readme-file-name
+           (lambda _
+             (rename-file "Readme.rst" "README.rst")))
+         (add-before 'check 'skip-problematic-tests
+           (lambda _
+             ;; The test file 'tab-csv-file-name.tsv' contains special
+             ;; characters for which there is no locale in the build
+             ;; environment, causing one test to fail.
+             (delete-file-recursively "atest/TestCases/csv_reader_config")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "atest"
+                 (invoke "sh" "run_atest.sh"))))))))
+    (native-inputs (list python-docutils
+                         python-robotframework-stacktrace))
+    (propagated-inputs (list python-openpyxl
+                             python-pandas
+                             python-pygments
+                             python-robotframework))
+    (home-page "https://github.com/Snooz82/robotframework-datadriver")
+    (synopsis "Data-driven test extension for Robot Framework")
+    (description "DataDriver is a data-driven extension for Robot Framework.
+DataDriver uses the Listener Interface of Robot Framework to create new test
+cases based on a data file that contains the test data.  DataDriver supports
+data files in the CSV, XLS or XLSX formats.")
+    (license license:asl2.0)))
+
 (define-public python-robotframework-lint
   ;; There is no properly tagged release; the commit below seems to correspond
   ;; to the 0.9 stable release available from PyPI.  The tests are not
@@ -4633,13 +4544,42 @@ process automation (RPA).")
                (invoke "python" "-m" "robot" "-A"
                        "tests/conf/default.args" "tests"))))))
       (propagated-inputs
-       `(("python-robotframework" ,python-robotframework)))
+       (list python-robotframework))
       (home-page "https://github.com/boakley/robotframework-lint/")
       (synopsis "Static analysis tool (linter) for Robot Framework")
       (description "This package provides the @code{rflint} command-line
 utility, a static analysis tool (linter) for Robot Framework source files.")
       (license license:asl2.0))))
 
+(define-public python-robotframework-stacktrace
+  (package
+    (name "python-robotframework-stacktrace")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "robotframework-stacktrace" version))
+       (sha256
+        (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
+    (build-system python-build-system)
+    (arguments
+     ;; The test suite fails (see:
+     ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "tests"
+                 (invoke "python" "-m" "robot" "."))))))))
+    (propagated-inputs (list python-robotframework))
+    (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
+    (synopsis "Robot Framework listener to print a stack trace on error")
+    (description "StackTrace is a Robot Framework listener that prints a stack
+trace directly to the terminal to ease debugging.")
+    (license license:asl2.0)))
+
 (define-public python-robotframework-sshlibrary
   (package
     (name "python-robotframework-sshlibrary")
@@ -4677,17 +4617,15 @@ utility, a static analysis tool (linter) for Robot Framework source files.")
                (delete-file "utest/test_scp.py")
                (invoke "python" "utest/run.py")))))))
     (propagated-inputs
-     `(("python-robotframework" ,python-robotframework)
-       ("python-paramiko" ,python-paramiko)
-       ("python-scp" ,python-scp)))
+     (list python-robotframework python-paramiko python-scp))
     (native-inputs
-     `(("openssh" ,openssh)
-       ("which" ,which)
-       ;; To generate the documentation
-       ("python-docutils" ,python-docutils)
-       ("python-invoke" ,python-invoke)
-       ("python-pygments" ,python-pygments)
-       ("python-rellu" ,python-rellu)))
+     (list openssh
+           which
+           ;; To generate the documentation
+           python-docutils
+           python-invoke
+           python-pygments
+           python-rellu))
     (outputs '("out" "doc"))
     (home-page "https://github.com/robotframework/SSHLibrary")
     (synopsis "Robot Framework library for SSH and SFTP")
@@ -4723,10 +4661,8 @@ for SSH and SFTP.  It has the following main usages:
                       (when tests?
                         (invoke "utest/run.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mockito" ,python-pytest-mockito)
-       ("python-robotframework" ,python-robotframework)))
+     (list python-pytest python-pytest-cov python-pytest-mockito
+           python-robotframework))
     (home-page "https://github.com/robotframework/PythonLibCore")
     (synopsis "Robot Framework Python library tools")
     (description "PythonLibCore provides tools for creating larger test
@@ -4752,10 +4688,8 @@ library APIs.")
     ;; XXX: Tests require ungoogled-chromium, but the chromium module would
     ;; introduce a cycle if imported here.
     (propagated-inputs
-     `(("python-robotframework" ,python-robotframework)
-       ("python-robotframework-pythonlibcore"
-        ,python-robotframework-pythonlibcore)
-       ("python-selenium" ,python-selenium)))
+     (list python-robotframework python-robotframework-pythonlibcore
+           python-selenium))
     (home-page "https://github.com/robotframework/SeleniumLibrary")
     (synopsis "Web testing library for Robot Framework")
     (description "SeleniumLibrary is a web testing library for Robot Framework
@@ -4778,9 +4712,7 @@ that utilizes the Selenium tool internally.")
     ;; their CI with Nix (!).
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-robotframework" ,python-robotframework)
-       ("python-robotframework-seleniumlibrary"
-        ,python-robotframework-seleniumlibrary)))
+     (list python-robotframework python-robotframework-seleniumlibrary))
     (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
     (synopsis "Robot Framework library for annotating and cropping screenshots")
     (description "The SeleniumScreenshots library for Robot Framework provides
@@ -4823,7 +4755,7 @@ outside the standard library.")
     (arguments
      '(#:tests? #f))                     ;tests require an SSH server
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)))
+     (list python-paramiko))
     (home-page "https://github.com/jbardin/scp.py")
     (synopsis "SCP protocol module for Python and Paramiko")
     (description "The scp module extends the Paramiko library to send and
@@ -4843,10 +4775,9 @@ receive files via the SCP1 protocol, as implemented by the OpenSSH
         (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-six" ,python-six)))
+     (list python-dateutil python-six))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     ;; Test would require path.py, which would introduce a cyclic dependence.
     (arguments `(#:tests? #f))
     ;; Note: As of version 1.7 the documentation is not worth building.
@@ -4876,8 +4807,7 @@ augment the changelog, but it can be used for other documents, too.")
                 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-ecdsa" ,python-ecdsa)))
+     (list python-cryptography python-ecdsa))
     (synopsis "OpenSSH public key parser")
     (description
      "This package provides a library for parsing and validating OpenSSH
@@ -4905,8 +4835,7 @@ public key files.")
            #t))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-six" ,python-six)))
+     (list python-pytz python-six))
     (home-page "https://github.com/getpelican/feedgenerator")
     (synopsis
      "Standalone version of Django's Atom/RSS feed generator")
@@ -4931,10 +4860,9 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
          "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-ujson" ,python-ujson)))
+     (list python-ujson))
     (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
     (synopsis "JSON RPC 2.0 server library")
     (description
@@ -4985,10 +4913,9 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
          (replace 'check
            (lambda _ (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (home-page "https://github.com/samuelcolvin/pydantic")
     (synopsis "Python data validation and settings management")
     (description
@@ -5009,8 +4936,7 @@ errors when data is invalid.")
          "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-snowballstemmer" ,python-snowballstemmer)))
+     (list python-six python-snowballstemmer))
     (home-page
      "https://github.com/PyCQA/pydocstyle/")
     (synopsis "Python docstring style checker")
@@ -5042,30 +4968,30 @@ Server (PLS).")
              (invoke "python" "-m" "pytest" "-k"
                      "not test_pyqt_completion"))))))
     (propagated-inputs
-     `(("python-autopep8" ,python-autopep8)
-       ("python-configparser" ,python-configparser)
-       ("python-pydocstyle" ,python-pydocstyle)
-       ("python-flake8" ,python-flake8)
-       ("python-future" ,python-future)
-       ("python-jedi" ,python-jedi)
-       ("python-lsp-jsonrpc" ,python-lsp-jsonrpc)
-       ("python-pluggy" ,python-pluggy)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-rope" ,python-rope)
-       ("python-ujson" ,python-ujson)
-       ("python-yapf" ,python-yapf)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flaky" ,python-flaky)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-mock" ,python-mock)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-versioneer" ,python-versioneer)))
+     (list python-autopep8
+           python-configparser
+           python-pydocstyle
+           python-flake8
+           python-future
+           python-jedi
+           python-lsp-jsonrpc
+           python-pluggy
+           python-pycodestyle
+           python-pyflakes
+           python-rope
+           python-ujson
+           python-yapf))
+    (native-inputs
+     (list python-coverage
+           python-flaky
+           python-matplotlib
+           python-mock
+           python-numpy
+           python-pandas
+           python-pylint
+           python-pytest
+           python-pytest-cov
+           python-versioneer))
     (home-page "https://github.com/palantir/python-language-server")
     (synopsis "Python implementation of the Language Server Protocol")
     (description
@@ -5147,19 +5073,26 @@ matching of file paths.")
              (substitute* "tests/test_black.py"
                (("( *)def test_python38" match indent)
                 (string-append indent "@unittest.skip(\"guix\")\n" match)))
-             #t)))))
-    (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-attrs" ,python-attrs)
-       ("python-appdirs" ,python-appdirs)
-       ("python-pathspec" ,python-pathspec)
-       ("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-regex" ,python-regex)
-       ("python-toml" ,python-toml)
-       ("python-typed-ast" ,python-typed-ast)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+             #t))
+         ;; Remove blackd, because it depends on python-aiohttp and
+         ;; python-aiohttp-cors.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\\s*\"blackd=blackd:patched_main \\[d\\]\",\n") "")
+                (("\"blackd\", ") "")))))))
+    (propagated-inputs
+     (list python-click
+           python-attrs
+           python-appdirs
+           python-pathspec
+           python-mypy-extensions
+           python-regex
+           python-toml
+           python-typed-ast
+           python-typing-extensions))
+    (native-inputs
+     (list python-setuptools-scm))
     (home-page "https://github.com/ambv/black")
     (synopsis "The uncompromising code formatter")
     (description "Black is the uncompromising Python code formatter.")
@@ -5178,7 +5111,7 @@ matching of file paths.")
          "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-black" ,python-black)))
+     (list python-black))
     (home-page "https://github.com/wbolster/black-macchiato")
     (synopsis "Partial @code{python-black} formatting")
     (description
@@ -5221,18 +5154,18 @@ interested parties to subscribe to events, or \"signals\".")
          "0g1sbzlz5mfc70gwgnj3lz4kf4psdjl96n6ywklv8z817m1khxdd"))))
     (build-system python-build-system)
     (inputs
-     `(("python-blinker" ,python-blinker)
-       ("python-dateutil" ,python-dateutil)
-       ;; Ignoring `guix lint` warning as python-docutils is used to support
-       ;; reStructuredText processing at runtime.
-       ("python-docutils" ,python-docutils)
-       ("python-feedgenerator" ,python-feedgenerator)
-       ("python-jinja2" ,python-jinja2)
-       ("python-markdown" ,python-markdown)
-       ("python-pygments" ,python-pygments)
-       ("python-pytz" ,python-pytz)
-       ("python-rich" ,python-rich)
-       ("python-unidecode" ,python-unidecode)))
+     (list python-blinker
+           python-dateutil
+           ;; Ignoring `guix lint` warning as python-docutils is used to support
+           ;; reStructuredText processing at runtime.
+           python-docutils
+           python-feedgenerator
+           python-jinja2
+           python-markdown
+           python-pygments
+           python-pytz
+           python-rich
+           python-unidecode))
     (home-page "https://blog.getpelican.com/")
     (arguments
      `(;; XXX Requires a lot more packages to do unit tests :P
@@ -5280,38 +5213,41 @@ provides additional functionality on the produced Mallard documents.")
 (define-public python-cython
   (package
     (name "python-cython")
-    (version "0.29.22")
+    (version "0.29.24")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cython" version))
        (sha256
-        (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz"))))
+        (base32 "0hw4gs18rh4slij1fg252argxhraypld9apbqbl60230qc3lvw6d"))))
     (build-system python-build-system)
     ;; we need the full python package and not just the python-wrapper
     ;; because we need libpython3.3m.so
     (inputs
-     `(("python" ,python)))
+     (list python))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-HOME
            ;; some tests require access to "$HOME/.cython"
-           (lambda _ (setenv "HOME" "/tmp") #t))
+           (lambda _ (setenv "HOME" "/tmp")))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              ;; Disable compiler optimizations to greatly reduce the running
              ;; time of the test suite.
              (setenv "CFLAGS" "-O0")
 
-             (invoke "python" "runtests.py" "-vv"
-                     "-j" (number->string (parallel-job-count))
-                     ;; XXX: On 32-bit architectures, running the parallel tests
-                     ;; fails on many-core systems, see
-                     ;; <https://github.com/cython/cython/issues/2807>.
-                     ,@(if (not (target-64bit?))
-                           '("-x" "run.parallel")
-                           '())))))))
+             (when tests?
+               (invoke "python" "runtests.py" "-vv"
+                       "-j" (number->string (parallel-job-count))
+                       ;; XXX: On 32-bit architectures, running the parallel tests
+                       ;; fails on many-core systems, see
+                       ;; <https://github.com/cython/cython/issues/2807>.
+                       ,@(if (not (target-64bit?))
+                             '("-x" "run.parallel")
+                             '())
+                       ;; This test fails when running on 24 cores.
+                       "-x" "cpp_stl_conversion")))))))
     (home-page "https://cython.org/")
     (synopsis "C extensions for Python")
     (description "Cython is an optimising static compiler for both the Python
@@ -5356,10 +5292,10 @@ writing C extensions for Python as easy as Python itself.")
 
 ;; NOTE: when upgrading numpy please make sure that python-pandas and
 ;; python-scipy still build, as these three packages are often used together.
-(define-public python-numpy
+(define-public python-numpy-next
   (package
     (name "python-numpy")
-    (version "1.17.3")
+    (version "1.21.3")
     (source
      (origin
        (method url-fetch)
@@ -5368,38 +5304,29 @@ writing C extensions for Python as easy as Python itself.")
              version "/numpy-" version ".tar.gz"))
        (sha256
         (base32
-         "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
+         "0s6hy8828yr7fcjiwnym4l8lrknr21gqfkaiawsf86n0hd0a5fyh"))))
     (build-system python-build-system)
     (inputs
-     `(("openblas" ,openblas)))
+     (list openblas))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("gfortran" ,gfortran)))
+     (list python-cython python-hypothesis python-pytest
+           python-pytest-xdist gfortran))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'build 'configure-blas-lapack
+         (add-before 'build 'configure-blas
            (lambda* (#:key inputs #:allow-other-keys)
              (call-with-output-file "site.cfg"
                (lambda (port)
                  (format port
-                         "[openblas]
+                         "\
+[openblas]
 libraries = openblas
 library_dirs = ~a/lib
 include_dirs = ~a/include
-
-# backslash-n to make emacs happy
-\n[lapack]
-lapack_libs = lapack
-library_dirs = ~a/lib
-include_dirs = ~a/include
 "
                          (assoc-ref inputs "openblas")
-                         (assoc-ref inputs "openblas")
-                         (assoc-ref inputs "lapack")
-                         (assoc-ref inputs "lapack"))))
-             #t))
+                         (assoc-ref inputs "openblas"))))))
          (add-before 'build 'fix-executable-paths
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
@@ -5410,21 +5337,17 @@ include_dirs = ~a/include
              ;; Use "gcc" executable, not "cc".
              (substitute* "numpy/distutils/system_info.py"
                (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
-                "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
-             #t))
-         ;; Tests can only be run after the library has been installed and not
-         ;; within the source directory.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             ;; Make installed package available for running the tests
-             (add-installed-pythonpath inputs outputs)
-             ;; Make sure "f2py" etc is found.
-             (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
-                                           ":" (getenv "PATH")))
-             (with-directory-excursion "/tmp"
-               (invoke "python" "-c"
-                       "import numpy; numpy.test(verbose=2)")))))))
+                "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))))
+         (replace 'check
+           (lambda* (#:key tests? outputs inputs #:allow-other-keys)
+             (when tests?
+               ;; Make installed package available for running the tests.
+               (add-installed-pythonpath inputs outputs)
+               ;; Make sure "f2py" etc is found.
+               (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
+                                             ":" (getenv "PATH")))
+               (invoke "./runtests.py"
+                       "-j" (number->string (parallel-job-count)))))))))
     (home-page "https://numpy.org")
     (synopsis "Fundamental package for scientific computing with Python")
     (description "NumPy is the fundamental package for scientific computing
@@ -5438,7 +5361,7 @@ capabilities.")
 ;; Numpy 1.16.x are the last versions that support Python 2.
 (define-public python2-numpy
   (let ((numpy (package-with-python2
-                (strip-python2-variant python-numpy))))
+                (strip-python2-variant python-numpy-next))))
     (package
       (inherit numpy)
       (version "1.16.5")
@@ -5449,7 +5372,40 @@ capabilities.")
                       version "/numpy-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
+                  "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments numpy)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-failing-test
+               (lambda _
+                 ;; There's just one failing test here.
+                 (delete-file "numpy/linalg/tests/test_linalg.py")
+                 ;; ...and this one depends on the previous one.
+                 (delete-file "numpy/matrixlib/tests/test_matrix_linalg.py")))))))
+      (native-inputs
+       (list python2-cython python2-pytest gfortran)))))
+
+;; Needed by python-numba, see https://github.com/numba/numba/issues/7176
+(define-public python-numpy-1.20
+  (package
+    (inherit python-numpy-next)
+    (version "1.20.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/numpy/numpy/releases/download/v"
+                    version "/numpy-" version ".tar.gz"))
+              (sha256
+               (base32
+                "140zq9snx0di4id4g97vaw9zz8x2rfla5lp3a70j666f5030yd5p"))))
+    ;; 92 tests fail, many of them because parts of the temp file name
+    ;; accidentally ends up in a comparison.
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-numpy-next)
+       ((#:tests? _ #t) #f)))))
+
+(define-public python-numpy python-numpy-1.20)
 
 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
 ;; interest only for legacy code going back to NumPy's predecessor
@@ -5471,23 +5427,20 @@ capabilities.")
      (substitute-keyword-arguments (package-arguments python2-numpy)
        ((#:phases phases)
         `(modify-phases ,phases
-           (replace 'configure-blas-lapack
+           (replace 'configure-blas
              (lambda* (#:key inputs #:allow-other-keys)
                (call-with-output-file "site.cfg"
                  (lambda (port)
                    (format port
                            "[openblas]
-libraries = openblas,lapack
-library_dirs = ~a/lib:~a/lib
-include_dirs = ~a/include:~a/include
+libraries = openblas
+library_dirs = ~a/lib
+include_dirs = ~a/include
 "
                            (assoc-ref inputs "openblas")
-                           (assoc-ref inputs "lapack")
-                           (assoc-ref inputs "openblas")
-                           (assoc-ref inputs "lapack"))))
-               #t))))))
+                           (assoc-ref inputs "openblas"))))))))))
     (native-inputs
-     `(("python2-nose" ,python2-nose)))
+     (list python2-nose))
     (description "NumPy is the fundamental package for scientific computing
 with Python.  It contains among other things: a powerful N-dimensional array
 object, sophisticated (broadcasting) functions, tools for integrating C/C++
@@ -5531,28 +5484,24 @@ objects.")
          "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)
-       ("python-numpy" ,python-numpy)))
+     (list python-networkx python-numpy))
     (home-page "https://github.com/gtaylor/python-colormath")
     (synopsis "Color math and conversion library")
     (description
      "This is a Python library for color math and conversions.")
     (license license:bsd-3)))
 
-(define-public python2-colormath
-  (package-with-python2 python-colormath))
-
 (define-public python-sparse
   (package
     (name "python-sparse")
-    (version "0.12.0")
+    (version "0.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sparse" version))
        (sha256
         (base32
-         "05lmzckv69cvxavhdr36k803bgr5dl04cppglid1l880xswc759c"))))
+         "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5562,14 +5511,10 @@ objects.")
              (when tests?
                (invoke "python" "-m" "pytest" "-v")))))))
     (propagated-inputs
-     `(("python-numba" ,python-numba)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-numba python-numpy python-scipy))
     (native-inputs
-     `(("python-dask" ,python-dask)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-dask python-pytest python-pytest-black
+           python-pytest-cov))
     (home-page "https://github.com/pydata/sparse/")
     (synopsis "Library for multi-dimensional sparse arrays")
     (description
@@ -5605,9 +5550,9 @@ depends on @code{scipy.sparse} for some computations.")
          (replace 'check
            (lambda _ (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-colormath" ,python-colormath)))
+     (list python-colormath))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/jsvine/spectra")
     (synopsis "Color scales and color conversion")
     (description
@@ -5624,9 +5569,6 @@ color scales, and color space conversion easy.  It has support for:
 @end enumerate\n")
     (license license:expat)))
 
-(define-public python2-spectra
-  (package-with-python2 python-spectra))
-
 (define-public python-pyspnego
   (package
     (name "python-pyspnego")
@@ -5649,12 +5591,9 @@ color scales, and color space conversion easy.  It has support for:
                       (when tests?
                         (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-gssapi" ,python-gssapi)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)))
+     (list python-cryptography python-gssapi python-ruamel.yaml))
     (home-page "https://github.com/jborean93/pyspnego")
     (synopsis "Python SPNEGO library")
     (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
@@ -5675,16 +5614,16 @@ readable format.")
        ("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx)
        ("python-numpydoc" ,python-numpydoc)
-       ("texlive" ,(texlive-union (list texlive-fonts-cm-super
+       ("texlive" ,(texlive-updmap.cfg (list texlive-cm-super
                                         texlive-fonts-ec
-                                        texlive-generic-ifxetex
+                                        texlive-generic-iftex
                                         texlive-pdftex
-                                        texlive-amsfonts/patched
+                                        texlive-amsfonts
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
                                         texlive-latex-eqparbox
-                                        texlive-latex-etoolbox
+                                        texlive-etoolbox
                                         texlive-latex-expdlist
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
@@ -5693,11 +5632,11 @@ readable format.")
                                         texlive-latex-framed
                                         texlive-latex-geometry
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-mdwtools
                                         texlive-latex-multirow
                                         texlive-latex-needspace
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-preview
                                         texlive-latex-tabulary
@@ -5706,7 +5645,7 @@ readable format.")
                                         texlive-latex-trimspaces
                                         texlive-latex-ucs
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-varwidth
                                         texlive-latex-wrapfig)))
        ("texinfo" ,texinfo)
@@ -5741,7 +5680,7 @@ readable format.")
                     (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
                     (pyver ,(string-append "PYVER=")))
 
-               ;; FIXME: this is needed to for texlive-union to generate
+               ;; FIXME: this is needed to for texlive-updmap.cfg to generate
                ;; fonts, which are not found.
                (setenv "HOME" "/tmp")
 
@@ -5778,22 +5717,20 @@ readable format.")
 (define-public python-pygit2
   (package
     (name "python-pygit2")
-    (version "1.6.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pygit2" version))
        (sha256
-        (base32 "0qjd5aqpmla64da4pb47vdnrmnqdbn7248a4fzs7f5q1ax7fmb3s"))))
+        (base32 "0p8n25bijirxh31cv99vd1mkdsvpcs6z6441wz1fqva3b2as5ynp"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f))            ; tests don't run correctly in our environment
     (propagated-inputs
-     `(("python-cached-property" ,python-cached-property)
-       ("python-cffi" ,python-cffi)
-       ("libgit2" ,libgit2)))
+     (list python-cached-property python-cffi libgit2))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/libgit2/pygit2")
     (synopsis "Python bindings for libgit2")
     (description "Pygit2 is a set of Python bindings to the libgit2 shared
@@ -5841,7 +5778,8 @@ humans, and implementation simplicity.")
                         (substitute* "wmctrl.py"
                           (("'wmctrl")
                            (string-append "'" wmctrl "/bin/wmctrl")))))))))
-    (inputs `(("wmctrl" ,wmctrl)))
+    (inputs (list wmctrl))
+    (propagated-inputs (list python-attrs))
     (home-page "https://github.com/antocuni/wmctrl")
     (synopsis "Tool to programmatically control Xorg windows")
     (description "This package provides a library for programmatically
@@ -5903,12 +5841,9 @@ module from the standard Python library.")
                         "not interaction_restores_previous_sigint_handler "
                         "and not python_m_pdb_uses_pdbpp"))))))))
     (propagated-inputs
-     `(("python-fancycompleter" ,python-fancycompleter)
-       ("python-pygments" ,python-pygments)
-       ("python-wmctrl" ,python-wmctrl)))
+     (list python-fancycompleter python-pygments python-wmctrl))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/pdbpp/pdbpp")
     (synopsis "Drop-in replacement for pdb")
     (description "Pdb++ is a drop-in replacement for @code{pdb}.  It
@@ -5935,7 +5870,7 @@ includes the following improvements compared to @code{pdb}:
         (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
     (build-system python-build-system)
     (inputs
-     `(("poppler" ,poppler)))
+     (list poppler))
     (home-page "https://github.com/jalan/pdftotext")
     (synopsis "Simple PDF text extraction")
     (description "Pdftotext is a Python library of PDF text extraction.")
@@ -5959,7 +5894,7 @@ includes the following improvements compared to @code{pdb}:
                     (lambda* (#:key tests? #:allow-other-keys)
                       (when tests?
                         (invoke "make" "test")))))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/mitsuhiko/pluginbase")
     (synopsis "Simple but flexible plugin system for Python")
     (description "PluginBase is a library useful in the development of
@@ -5979,7 +5914,7 @@ flexible plugin systems in Python.")
          "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/podhmo/python-node-semver")
     (synopsis "Python port of node-semver")
     (description "This module provides a Python version of node-semver, a
@@ -6018,61 +5953,6 @@ parse and apply unified diffs.  It has features such as:
 @end itemize")
     (license license:expat)))
 
-(define-public python-pyparsing
-  (package
-    (name "python-pyparsing")
-    (version "2.4.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pyparsing" version))
-       (sha256
-        (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
-    (build-system python-build-system)
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:tests? #f ; no test target
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((doc (string-append (assoc-ref outputs "doc")
-                                        "/share/doc/" ,name "-" ,version))
-                    (html-doc (string-append doc "/html"))
-                    (examples (string-append doc "/examples")))
-               (mkdir-p html-doc)
-               (mkdir-p examples)
-               (for-each
-                (lambda (dir tgt)
-                  (map (lambda (file)
-                         (install-file file tgt))
-                       (find-files dir ".*")))
-                (list "docs" "htmldoc" "examples")
-                (list doc html-doc examples))
-               #t))))))
-    (home-page "https://github.com/pyparsing/pyparsing")
-    (synopsis "Python parsing class library")
-    (description
-     "The pyparsing module is an alternative approach to creating and
-executing simple grammars, vs. the traditional lex/yacc approach, or the use
-of regular expressions.  The pyparsing module provides a library of classes
-that client code uses to construct the grammar directly in Python code.")
-    (license license:expat)))
-
-(define-public python2-pyparsing
-  (package-with-python2 python-pyparsing))
-
-(define-public python-pyparsing-2.4.7
-  (package
-    (inherit python-pyparsing)
-    (version "2.4.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pyparsing" version))
-       (sha256
-        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
-
 (define-public python-numpydoc
   (package
     (name "python-numpydoc")
@@ -6096,11 +5976,9 @@ that client code uses to construct the grammar directly in Python code.")
                        ;; TODO: unclear why these fail.
                        "-k" "not test_MyClass and not test_my_function")))))))
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (native-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-matplotlib python-pytest python-pytest-cov))
     (home-page "https://pypi.org/project/numpydoc/")
     (synopsis
      "Numpy's Sphinx extensions")
@@ -6140,7 +6018,7 @@ that client code uses to construct the grammar directly in Python code.")
     (build-system python-build-system)
     (arguments `(#:tests? #f))          ; no tests included
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/pydata/numexpr")
     (synopsis "Fast numerical expression evaluator for NumPy")
     (description
@@ -6171,7 +6049,7 @@ transcendental functions).")
      ;; Enable this for the next release which uses 'python-pytest'.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://matplotlib.org/cycler/")
     (synopsis "Composable keyword argument iterator")
     (description
@@ -6200,9 +6078,9 @@ To address this and enable easy cycling over arbitrary @code{kwargs}, the
         (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -6232,8 +6110,7 @@ convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.
     (arguments
      `(#:tests? #f))                    ;no test suite
     (propagated-inputs
-     `(("python-protobuf" ,python-protobuf)
-       ("python-pyhamcrest" ,python-pyhamcrest)))
+     (list python-protobuf python-pyhamcrest))
     (home-page "https://github.com/dayfine/proto-matcher")
     (synopsis "PyHamcrest test matchers for protocol buffers")
     (description "This package provides the following PyHamcrest test
@@ -6260,21 +6137,20 @@ comparison.
 (define-public python-matplotlib
   (package
     (name "python-matplotlib")
-    (version "3.1.2")
+    (version "3.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "matplotlib" version))
        (sha256
-        (base32 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))
-       (patches
-        (search-patches "python-matplotlib-run-under-wayland-gtk3.patch"))))
+        (base32 "06032j0ccjxldx4z9kf97qps2g36mfgvy1nap3b9n75kzmnm4kzw"))))
     (build-system python-build-system)
     (propagated-inputs ; the following packages are all needed at run time
      `(("python-cycler" ,python-cycler)
        ("python-kiwisolver" ,python-kiwisolver)
        ("python-pyparsing" ,python-pyparsing)
        ("python-pygobject" ,python-pygobject)
+       ("python-certifi" ,python-certifi)
        ("gobject-introspection" ,gobject-introspection)
        ("python-tkinter" ,python "tk")
        ("python-dateutil" ,python-dateutil)
@@ -6289,18 +6165,20 @@ comparison.
        ("python-pycairo" ,python-pycairo)
        ("python-cairocffi" ,python-cairocffi)))
     (inputs
-     `(("libpng" ,libpng)
-       ("freetype" ,freetype)
-       ("cairo" ,cairo)
-       ("glib" ,glib)
-       ;; FIXME: Add backends when available.
-       ;("python-wxpython" ,python-wxpython)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list libpng
+           freetype
+           qhull
+           cairo
+           glib
+           ;; FIXME: Add backends when available.
+           ;("python-wxpython" ,python-wxpython)
+           tcl
+           tk))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-pytest" ,python-pytest)
        ("python-mock" ,python-mock)
+       ("python-wheel" ,python-wheel)
        ("unzip" ,unzip)
        ("jquery-ui"
         ,(origin
@@ -6323,7 +6201,8 @@ comparison.
                                               "test_.*\\.py$"))
                (("^from matplotlib" match)
                 (string-append "import pytest\n" match))
-               (("( *)@image_comparison" match indent)
+               (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
+                 indent)
                 (string-append indent
                                "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
                                match)))
@@ -6332,7 +6211,9 @@ comparison.
              (for-each delete-file
                        ;; test_normal_axes, test_get_tightbbox_polar
                        '("lib/matplotlib/tests/test_axes.py"
-                         ;; We don't use the webagg backend and this test forces it.
+                         "lib/matplotlib/tests/test_polar.py"
+                         ;; We don't use the webagg backend and this test
+                         ;; forces it.
                          "lib/matplotlib/tests/test_backend_webagg.py"
                          ;; test_outward_ticks
                          "lib/matplotlib/tests/test_tightlayout.py"
@@ -6347,9 +6228,11 @@ comparison.
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let* ((python-version (python-version
                                       (assoc-ref inputs "python")))
-                    (dir (string-append (assoc-ref outputs "out")
-                                       "/lib/python" python-version "/site-packages"
-                                       "/matplotlib/backends/web_backend/")))
+                    (dir
+                     (string-append (assoc-ref outputs "out")
+                                    "/lib/python" python-version
+                                    "/site-packages"
+                                    "/matplotlib/backends/web_backend/")))
                (mkdir-p dir)
                (invoke "unzip"
                        (assoc-ref inputs "jquery-ui")
@@ -6372,7 +6255,10 @@ comparison.
                  (setenv "CFLAGS" "-ffloat-store"))
                (call-with-output-file "setup.cfg"
                  (lambda (port)
-                   (format port "[directories]~%
+                   (format port "[libs]~%
+system_freetype = true
+system_qhull = true
+[directories]~%
 basedirlist = ~a,~a~%
 [packages]~%
 tests = True~%"
@@ -6414,8 +6300,15 @@ toolkits.")
                    (mkdir-p dir)
                    (invoke "unzip"
                            (assoc-ref inputs "jquery-ui")
-                           "-d" dir))
-                 #t))
+                           "-d" dir))))
+             ;; Without this file mpl_toolkits cannot be imported.
+             (add-after 'install 'create-init-file
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (with-output-to-file
+                     (string-append
+                      (assoc-ref outputs "out")
+                      "/lib/python2.7/site-packages/mpl_toolkits/__init__.py")
+                   (lambda _ (display "")))))
              (delete 'fix-and-disable-failing-tests)
              (delete 'check))))) ; These tests weren't run the the past.
       ;; Make sure to use special packages for Python 2 instead
@@ -6451,7 +6344,7 @@ toolkits.")
        ("python-ipykernel" ,python-ipykernel)
        ("python-mock" ,python-mock)
        ("graphviz" ,graphviz)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-expdlist
@@ -6463,8 +6356,8 @@ toolkits.")
                                         texlive-pdftex
 
                                         texlive-fonts-ec
-                                        texlive-fonts-adobe-times
-                                        texlive-fonts-txfonts)))
+                                        texlive-times
+                                        texlive-txfonts)))
        ("texinfo" ,texinfo)
        ,@(package-native-inputs python-matplotlib)))
     (arguments
@@ -6477,9 +6370,7 @@ toolkits.")
          (replace 'build
            (lambda _
              (chdir "doc")
-             (setenv "PYTHONPATH"
-                     (string-append (getenv "PYTHONPATH")
-                                    ":" (getcwd) "/../examples/units"))
+             (setenv "PYTHONPATH" "../examples/units")
              (substitute* "conf.py"
                ;; Don't use git.
                (("^SHA = check_output.*")
@@ -6514,13 +6405,35 @@ toolkits.")
                           "./matplotlib-figures")
                  (invoke "makeinfo" "--no-split"
                          "-o" "matplotlib.info" "matplotlib.texi"))
-               (install-file "build/texinfo/matplotlib.info" info))
-             #t)))))
+               (install-file "build/texinfo/matplotlib.info" info)))))))
     (home-page (package-home-page python-matplotlib))
     (synopsis "Documentation for the python-matplotlib package")
     (description (package-description python-matplotlib))
     (license (package-license python-matplotlib))))
 
+(define-public python-matplotlib-inline
+  (package
+    (name "python-matplotlib-inline")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "matplotlib-inline" version))
+       (sha256
+        (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-matplotlib python-traitlets))
+    (arguments
+     ;; Tests disabled because of a circular dependency with ipython.
+     `(#:tests? #f))
+    (home-page "https://github.com/ipython/matplotlib-inline")
+    (synopsis "Inline Matplotlib backend for Jupyter")
+    (description
+     "This package provides a Matplotlib inline back-end for IPython and
+Jupyter.")
+    (license license:bsd-3)))
+
 (define-public python-matplotlib-venn
   (package
     (name "python-matplotlib-venn")
@@ -6535,11 +6448,9 @@ toolkits.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; tests are not included
     (propagated-inputs
-     `(("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-matplotlib python-numpy python-scipy))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://github.com/konstantint/matplotlib-venn")
     (synopsis "Plot area-proportional Venn diagrams")
     (description
@@ -6571,14 +6482,14 @@ three-way Venn diagrams in @code{matplotlib}.")
                    (invoke "python3" "pysnptools/test.py"))
                  #t))))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)
-       ("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-psutil" ,python-psutil)
-       ("python-scipy" ,python-scipy)))
+     (list python-dill
+           python-h5py
+           python-numpy
+           python-pandas
+           python-psutil
+           python-scipy))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "http://microsoftgenomics.github.io/PySnpTools/")
     (synopsis "Library for reading and manipulating genetic data")
     (description
@@ -6603,9 +6514,9 @@ operators such as union, intersection, and difference.")
         (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/storpipfugl/pykdtree")
     (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
     (description
@@ -6631,8 +6542,7 @@ search in Python.")
            (lambda _
              (invoke "pytest" "-vv" "test.py"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/minrk/wurlitzer")
     (synopsis "Capture C-level output in context managers")
     (description
@@ -6714,7 +6624,7 @@ a simple netcat replacement with chaining support.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://pycodestyle.readthedocs.io/")
     (synopsis "Python style guide checker")
     (description "@code{pycodestyle} (formerly pep8) is a tool to check
@@ -6749,27 +6659,14 @@ Python code against some of the style conventions in
          "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (let ((libdir (find (cut string-prefix? "lib." <>)
-                                                (scandir "build"))))
-                              (setenv "PYTHONPATH"
-                                      (string-append "./build/" libdir ":"
-                                                     (getenv "PYTHONPATH")))
-                              (invoke "pytest" "-vv")))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/aio-libs/multidict/")
     (synopsis "Multidict implementation")
     (description "Multidict is dict-like collection of key-value pairs
@@ -6789,10 +6686,9 @@ where key might be occurred more than once in the container.")
             "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pycodestyle" ,python-pycodestyle)))
+     (list python-flake8 python-pycodestyle))
     (home-page "https://github.com/gruns/orderedmultidict")
     (synopsis "Python Ordered Multivalue Dictionary - omdict")
     (description "This package contains a library for ordered multivalue
@@ -6814,8 +6710,7 @@ multivalue dictionary that retains the order of insertions and deletions.")
          "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)
-       ("python-toml" ,python-toml)))
+     (list python-pycodestyle python-toml))
     (home-page "https://github.com/hhatto/autopep8")
     (synopsis "Format Python code according to the PEP 8 style guide")
     (description
@@ -6833,14 +6728,14 @@ by pycodestyle.")
 (define-public python-distlib
   (package
     (name "python-distlib")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "distlib" version ".zip"))
        (sha256
         (base32
-         "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
+         "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -6856,7 +6751,7 @@ by pycodestyle.")
              ;; NOTE: Any value works, the variable just has to be present.
              (setenv "SKIP_ONLINE" "1")
              #t)))))
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://bitbucket.org/pypa/distlib")
     (synopsis "Distribution utilities")
     (description "Distlib is a library which implements low-level functions that
@@ -6864,19 +6759,6 @@ relate to packaging and distribution of Python software.  It is intended to be
 used as the basis for third-party packaging tools.")
     (license license:psfl)))
 
-;; TODO: Merge with 'python-distlib' on the next rebuild cycle.
-(define-public python-distlib/next
-  (package
-    (inherit python-distlib)
-    (version "0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "distlib" version ".zip"))
-       (sha256
-        (base32
-         "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))))
-
 (define-public python-distutils-extra
   (package
     (name "python-distutils-extra")
@@ -6969,17 +6851,16 @@ the OleFileIO module from PIL, the Python Image Library.")
     (arguments
      `(#:tests? #false))                ;require python-xmp-toolkit
     (native-inputs
-     `(("pybind11" ,pybind11)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm/next)
-       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
-       ("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
+     (list pybind11
+           python-setuptools
+           python-setuptools-scm
+           python-setuptools-scm-git-archive
+           python-toml
+           python-wheel))
     (inputs
-     `(("qpdf" ,qpdf)))
+     (list qpdf))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)))
+     (list python-lxml python-pillow))
     (home-page "https://github.com/pikepdf/pikepdf")
     (synopsis "Read and write PDFs with Python")
     (description
@@ -6999,7 +6880,7 @@ the OleFileIO module from PIL, the Python Image Library.")
          "086g7nhv52wclrwnzbzs2x3nvyzs2hfq1bvgivsrp5f7r7wiiz7n"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
      `(("freetype" ,freetype)
        ("lcms"     ,lcms)
@@ -7009,7 +6890,7 @@ the OleFileIO module from PIL, the Python Image Library.")
        ("openjpeg" ,openjpeg)
        ("zlib"     ,zlib)))
     (propagated-inputs
-     `(("python-olefile" ,python-olefile)))
+     (list python-olefile))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7053,7 +6934,11 @@ a general image processing tool.")
         (uri (pypi-uri "Pillow" version))
         (sha256
          (base32
-          "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv")))))))
+          "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv"))))
+     (arguments
+      (substitute-keyword-arguments (package-arguments python-pillow)
+        ;; FIXME: One of the tests is failing.
+        ((#:tests? _ #f) #f))))))
 
 (define-public python-pillow-2.9
   (package
@@ -7096,9 +6981,8 @@ a general image processing tool.")
                (for-each make-file-writable (find-files "Tests"))
                #t))))))
     (inputs
-     `(("libraqm" ,libraqm)
-       ("libimagequant" ,libimagequant)
-       ,@(package-inputs python-pillow)))
+     (modify-inputs (package-inputs python-pillow)
+       (prepend libraqm libimagequant)))
     (home-page "https://github.com/uploadcare/pillow-simd")
     (synopsis "Fork of the Python Imaging Library (Pillow)")
     (description "This package is a fork of Pillow which adds support for SIMD
@@ -7155,28 +7039,28 @@ def customize_build(EXTENSIONS, OPTIONS):
 ")))
              #t)))))
     (inputs
-      `(("c-blosc" ,c-blosc)
-        ("giflib" ,giflib)
-        ("brotli" ,brotli)
-        ("libjpeg-turbo" ,libjpeg-turbo)
-        ("libpng" ,libpng)
-        ("libtiff" ,libtiff)
-        ("libwebp" ,libwebp)
-        ("lz4" ,lz4)
-        ("snappy" ,snappy)
-        ("xz" ,xz)
-        ("zlib" ,zlib)
-        ("zstd" ,zstd "lib")))
-    (propagated-inputs
-      `(("python-numpy" ,python-numpy)))
+      (list c-blosc
+            giflib
+            brotli
+            libjpeg-turbo
+            libpng
+            libtiff
+            libwebp
+            lz4
+            snappy
+            xz
+            zlib
+            `(,zstd "lib")))
+    (propagated-inputs
+      (list python-numpy))
     (native-inputs
       ;; For building.
-      `(("python-cython" ,python-cython)
-        ;; For testing. Incomplete.
-        ;("python-numcodecs" ,python-numcodecs)
-        ;("python-zarr" ,python-zarr)
-        ;("python-pytest" ,python-pytest)
-        ))
+      (list python-cython
+            ;; For testing. Incomplete.
+            ;("python-numcodecs" ,python-numcodecs)
+            ;("python-zarr" ,python-zarr)
+            ;("python-pytest" ,python-pytest)
+            ))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis
       "Image transformation, compression, and decompression codecs")
@@ -7200,7 +7084,7 @@ tifffile, czifile, and other scientific image input/output modules.")
     (build-system python-build-system)
     (arguments `(#:tests? #f)) ; there are none
     (propagated-inputs
-      `(("python-numpy" ,python-numpy)))
+      (list python-numpy))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Read and write ImageJ ROI format")
     (description "Roifile is a Python library to read, write, create, and plot
@@ -7223,8 +7107,7 @@ regions of interest, geometric shapes, paths, text, etc for image overlays.")
     ;; Tests require lfdfiles, which depends on tifffile
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-imagecodecs" ,python-imagecodecs)))
+     (list python-numpy python-imagecodecs))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Read and write TIFF(r) files")
     (description "This package lets you read image and metadata from many
@@ -7254,10 +7137,8 @@ numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
     (arguments
      `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-numpy" ,python-numpy)
-       ("python-tifffile" ,python-tifffile)))
-    (native-inputs `(("python-cython" ,python-cython)))
+     (list python-click python-numpy python-tifffile))
+    (native-inputs (list python-cython))
     (home-page "https://www.lfd.uci.edu/~gohlke/")
     (synopsis "Work with LFD data files")
     (description
@@ -7291,11 +7172,9 @@ experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
                    (invoke "pytest" "-vv"))
                  #t))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-psutil" ,python-psutil)))
+     (list python-numpy python-pillow python-psutil))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://imageio.github.io/")
     (synopsis "Library for reading and writing a wide range of image data")
     (description
@@ -7318,7 +7197,7 @@ data, and scientific formats.")
     (outputs '("out" "doc"))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7400,10 +7279,10 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
                (with-directory-excursion (string-append cwd "/build/" libdir)
                  (invoke "pytest" "-vv"))))))))
     (native-inputs
-     `(("python-matplotlib" ,python-matplotlib)          ;for tests
-       ("python-pytest" ,python-pytest)))
+     (list python-matplotlib ;for tests
+           python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (synopsis "Wavelet transforms in Python")
     (description
      "PyWavelets is a library for wavelet transforms in Python.  Wavelets are
@@ -7436,7 +7315,7 @@ localized only in frequency instead of in time and frequency.")
              (setenv "HOME" "/tmp")
              #t)))))
     (inputs
-     `(("imagemagick" ,imagemagick)))
+     (list imagemagick))
     (home-page "https://github.com/dylanaraps/pywal")
     (synopsis "Color palette generator and applicator")
     (description
@@ -7458,13 +7337,10 @@ your favourite programs.")
          "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-requests_ntlm" ,python-requests_ntlm)
-       ("python-xmltodict" ,python-xmltodict)
-       ("python-kerberos" ,python-kerberos)))
+     (list python-six python-requests_ntlm python-xmltodict
+           python-kerberos))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/diyan/pywinrm/")
     (synopsis
      "Python library for Windows Remote Management (WinRM)")
@@ -7487,10 +7363,10 @@ any machine that can run Python.")
         "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
     (build-system python-build-system)
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi) ; used at run time
-       ("python-six" ,python-six)))
+     (list python-cffi ; used at run time
+           python-six))
     (arguments
      `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
        #:tests? #f
@@ -7539,19 +7415,16 @@ support for Python 3 and PyPy.  It is based on cffi.")
     (build-system python-build-system)
     (outputs '("out" "doc"))
     (inputs
-     `(("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("cairo" ,cairo)))
+     (list glib gtk+ gdk-pixbuf cairo))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-numpy
+           python-pytest
+           python-pytest-cov
+           python-pytest-runner
+           python-sphinx
+           python-sphinx-rtd-theme))
     (propagated-inputs
-     `(("python-xcffib" ,python-xcffib))) ; used at run time
+     (list python-xcffib)) ; used at run time
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7564,22 +7437,16 @@ support for Python 3 and PyPy.  It is based on cffi.")
                (("filenames = \\(library_filename,\\) \\+ filenames")
                 "pass")
                (("libcairo.so.2")
-                (string-append (assoc-ref inputs "cairo")
-                               "/lib/libcairo.so.2")))
+                (search-input-file inputs "/lib/libcairo.so.2")))
              (substitute* "cairocffi/pixbuf.py"
                (("libgdk_pixbuf-2.0.so.0")
-                (string-append (assoc-ref inputs "gdk-pixbuf")
-                               "/lib/libgdk_pixbuf-2.0.so.0"))
+                (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
                (("libgobject-2.0.so.0")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libgobject-2.0.so.0"))
+                (search-input-file inputs "/lib/libgobject-2.0.so.0"))
                (("libglib-2.0.so.0")
-                (string-append (assoc-ref inputs "glib")
-                               "/lib/libglib-2.0.so.0"))
+                (search-input-file inputs "/lib/libglib-2.0.so.0"))
                (("libgdk-3.so.0")
-                (string-append (assoc-ref inputs "gtk+")
-                               "/lib/libgdk-3.so.0")))
-             #t))
+                (search-input-file inputs "/lib/libgdk-3.so.0")))))
          (add-after 'unpack 'disable-linters
            ;; Their check fails; none of our business.
            (lambda _
@@ -7665,7 +7532,7 @@ etc.  The core of this module is a decorator factory.")
     ;; should be set to the path of the libdrmaa library.
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://pypi.org/project/drmaa/")
     (synopsis "Python bindings for the DRMAA library")
     (description
@@ -7692,9 +7559,7 @@ Python language binding specification.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list unzip python-pytest python-pytest-runner))
     (home-page "https://bitbucket.org/neogeny/grako")
     (synopsis "EBNF parser generator")
     (description
@@ -7728,11 +7593,9 @@ memoizing PEG/Packrat parser in Python.")
            (lambda _
              (invoke "python" "setup.py" "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-ply" ,python-ply)))
+     (list python-numpy python-ply))
     (home-page "https://github.com/bdcht/grandalf")
     (synopsis "Graph and drawing algorithms framework")
     (description
@@ -7777,9 +7640,7 @@ you to actually draw things with your favorite toolkit.")
     (arguments
      '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
     (propagated-inputs
-     `(("python-psutil" ,python-psutil)
-       ("python-drmaa" ,python-drmaa)
-       ("python-pyzmq" ,python-pyzmq)))
+     (list python-psutil python-drmaa python-pyzmq))
     (home-page "https://github.com/pygridtools/gridmap")
     (synopsis "Create jobs on a cluster directly from Python")
     (description
@@ -7803,12 +7664,9 @@ cluster without needing to write any wrapper code yourself.")
         (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-tox" ,python-tox)
-       ("which" ,which))) ;for tests
+     (list python-pytest python-mock python-tox which)) ;for tests
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)))
+     (list python-jinja2))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7844,7 +7702,7 @@ displayed.")
         (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -7896,7 +7754,7 @@ wraps Python's standard library threading and multiprocessing objects.")
        ("which" ,which)
        ("bash-full" ,bash)))                 ;full Bash for 'test_replwrap.py'
     (propagated-inputs
-     `(("python-ptyprocess" ,python-ptyprocess)))
+     (list python-ptyprocess))
     (home-page "http://pexpect.readthedocs.org/")
     (synopsis "Controlling interactive console applications")
     (description
@@ -7912,36 +7770,37 @@ child application and control it as if a human were typing commands.")
 (define-public python-setuptools-scm
   (package
     (name "python-setuptools-scm")
-    (version "3.4.3")
+    (version "6.3.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "setuptools_scm" version))
               (sha256
-               (base32
-                "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
+               (base32 "1wm0i27siyy1yqr9rv7lqvb65agay9051yi8jzmi8dgb3q4ai6m4"))))
     (build-system python-build-system)
+    (propagated-inputs
+     `(("python-packaging",python-packaging-bootstrap)
+       ("python-tomli" ,python-tomli)))
     (home-page "https://github.com/pypa/setuptools_scm/")
     (synopsis "Manage Python package versions in SCM metadata")
     (description
      "Setuptools_scm handles managing your Python package versions in
 @dfn{software configuration management} (SCM) metadata instead of declaring
 them as the version argument or in a SCM managed file.")
-    (license license:expat)))
-
-;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
-(define-public python-setuptools-scm/next
-  (package
-    (inherit python-setuptools-scm)
-    (version "5.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "setuptools_scm" version))
-       (sha256
-        (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-setuptools-scm))))))
 
 (define-public python2-setuptools-scm
-  (package-with-python2 python-setuptools-scm))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-setuptools-scm))))
+    (package/inherit base
+      (version "5.0.2")                  ;no python 2 support in version 6
+      (source (origin
+                (method url-fetch)
+                (uri (pypi-uri "setuptools_scm" version))
+                (sha256
+                 (base32
+                  "1j75i8avp9fhrkpbabsa8vyvbi49kmxlq6l10xir9qs96kfwx843"))))
+      (propagated-inputs '()))))
 
 (define-public python-sexpdata
   (package
@@ -7965,18 +7824,17 @@ functions like pickle, json or PyYAML module.")
 (define-public python-pathlib2
   (package
     (name "python-pathlib2")
-    (version "2.3.3")
+    (version "2.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pathlib2" version))
        (sha256
         (base32
-         "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
+         "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-scandir" ,python-scandir)
-       ("python-six" ,python-six)))
+     (list python-scandir python-six))
     (home-page "https://pypi.org/project/pathlib2/")
     (synopsis "Object-oriented file system paths")
     (description "The goal of pathlib2 is to provide a backport of the
@@ -7998,8 +7856,7 @@ older Python versions.")
           "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)))
+     (list python-setuptools-scm python-toml))
     (home-page "http://importlib-resources.readthedocs.io/")
     (synopsis "Read resources from Python packages")
     (description
@@ -8032,8 +7889,7 @@ older Python versions.")
                          ""))
                       #t)))))
     (propagated-inputs
-     `(("python-pathlib2" ,python2-pathlib2)
-       ("python-typing" ,python2-typing)))
+     (list python2-pathlib2 python2-typing))
     (home-page "https://gitlab.com/python-devs/importlib_resources")
     (synopsis "Backport of @code{importlib.resources} from Python 3.7")
     (description
@@ -8064,11 +7920,9 @@ for older versions of Python.")
          "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-zipp" ,python-zipp)))
+     (list python-zipp))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pyfakefs" ,python-pyfakefs)
-       ("python-packaging" ,python-packaging)))
+     (list python-setuptools-scm python-pyfakefs python-packaging))
     (home-page "https://importlib-metadata.readthedocs.io/")
     (synopsis "Read metadata from Python packages")
     (description
@@ -8167,14 +8021,14 @@ finding unresolved symbols in Python code and their corresponding imports.")
             "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-checkdocs" ,python-pytest-checkdocs)
-       ("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-rst.linker" ,python-rst.linker)
-       ("python-setuptools" ,python-setuptools)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-six" ,python-six)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-pytest
+           python-pytest-checkdocs
+           python-pytest-flake8
+           python-rst.linker
+           python-setuptools
+           python-setuptools-scm
+           python-six
+           python-sphinx))
     (home-page "https://github.com/jaraco/jaraco.packaging")
     (synopsis "Tools to supplement packaging Python releases")
     (description
@@ -8195,15 +8049,14 @@ releases.")
     (outputs '("out" "doc"))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-appdirs python-importlib-metadata))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-rst.linker" ,python-rst.linker)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-jaraco-packaging" ,python-jaraco-packaging)))
+     (list python-setuptools-scm
+           python-sphinx
+           python-rst.linker
+           python-pytest
+           python-pytest-runner
+           python-jaraco-packaging))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8246,7 +8099,7 @@ common operations on files to be invoked on those path objects directly.")
         (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
     (synopsis "Python module for simple generic functions")
     (description
@@ -8310,22 +8163,22 @@ away.")
              (setenv "HOME" (getcwd))
              #t)))))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-decorator" ,python-decorator)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-tornado" ,python-tornado)
-       ("python-traitlets" ,python-traitlets)))
-    (native-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-testpath" ,python-testpath)))
+     (list python-dateutil
+           python-decorator
+           python-ipykernel
+           python-ipython
+           python-ipython-genutils
+           python-jupyter-client
+           python-pyzmq
+           python-tornado
+           python-traitlets))
+    (native-inputs
+     (list python-ipython
+           python-mock
+           python-nose
+           python-pytest
+           python-pytest-cov
+           python-testpath))
     (home-page "https://ipython.org/")
     (synopsis "Interactive Parallel Computing with IPython")
     (description
@@ -8369,12 +8222,12 @@ CLI scripts:
                  (invoke "python" "example/example.py" "--local"))
                #t))))))
     (propagated-inputs
-     `(("python-ipyparallel" ,python-ipyparallel)
-       ("python-ipython" ,python-ipython)
-       ("python-netifaces" ,python-netifaces)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-setuptools" ,python-setuptools)
-       ("python-six" ,python-six)))
+     (list python-ipyparallel
+           python-ipython
+           python-netifaces
+           python-pyzmq
+           python-setuptools
+           python-six))
     (home-page "https://github.com/roryk/ipython-cluster-helper")
     (synopsis
      "Simplify IPython cluster start up and use for multiple schedulers")
@@ -8401,12 +8254,9 @@ cluster down and deletes the throwaway profile.")
        (modify-phases %standard-phases
          (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
     (propagated-inputs
-     `(("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-ipython-genutils python-decorator python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
-    (properties `((python2-variant . ,(delay python2-traitlets))))
+     (list python-pytest))
     (home-page "https://ipython.org")
     (synopsis "Configuration system for Python applications")
     (description
@@ -8418,13 +8268,6 @@ is a distinct layer on top of traitlets, so you can use traitlets in your code
 without using the configuration machinery.")
     (license license:bsd-3)))
 
-(define-public python2-traitlets
-  (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
-    (package/inherit traitlets
-      (propagated-inputs
-       `(("python2-enum34" ,python2-enum34)
-         ,@(package-propagated-inputs traitlets))))))
-
 (define-public python-jupyter-core
   (package
     (name "python-jupyter-core")
@@ -8451,12 +8294,12 @@ without using the configuration machinery.")
          (add-after 'unpack 'patch-testsuite
            (lambda _
              ;; test_not_on_path() and test_path_priority() try to run a test
-             ;; that loads jupyter_core, so we need PYTHONPATH
+             ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
              (substitute* "jupyter_core/tests/test_command.py"
                (("env = \\{'PATH': ''\\}")
-                "env = {'PATH': '', 'PYTHONPATH': os.environ['PYTHONPATH']}")
+                "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
                (("env = \\{'PATH':  str\\(b\\)\\}")
-                "env = {'PATH': str(b), 'PYTHONPATH': os.environ['PYTHONPATH']}"))
+                "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))
              #t))
          ;; Migration is running whenever etc/jupyter exists, but the
          ;; Guix-managed directory will never contain any migratable IPython
@@ -8470,10 +8313,9 @@ without using the configuration machinery.")
                  (assoc-ref outputs "out")
                  "/etc/jupyter/migrated")))))))
     (propagated-inputs
-     `(("python-traitlets" ,python-traitlets)))
+     (list python-traitlets))
     (native-inputs
-     `(("python-six" ,python-six)
-       ("python-pytest" ,python-pytest)))
+     (list python-six python-pytest))
     ;; This package provides the `jupyter` binary and thus also exports the
     ;; search paths.
     (native-search-paths
@@ -8520,14 +8362,10 @@ without using the configuration machinery.")
     (inputs
      `(("iproute" ,iproute)))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-dateutil python-jupyter-core python-pyzmq
+           python-tornado-6 python-traitlets))
     (native-inputs
      `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
        ("python-pytest-timeout" ,python-pytest-timeout)
        ("python-async-generator" ,python-async-generator)
        ("python-mock" ,python-mock)
@@ -8572,10 +8410,10 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (setenv "HOME" "/tmp")
-             (invoke "pytest" "-v")
-             #t))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp")
+               (invoke "pytest" "-v"))))
          (add-after 'install 'set-python-file-name
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Record the absolute file name of the 'python' executable in
@@ -8587,15 +8425,11 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
                   (string-append "\"" (which "python") "\"")))
                #t))))))
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)
-       ;; imported at runtime during connect
-       ("python-jupyter-client" ,python-jupyter-client)))
+     (list python-ipython python-tornado-6 python-traitlets
+           ;; imported at runtime during connect
+           python-jupyter-client))
     (native-inputs
-     `(("python-flaky" ,python-flaky)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list python-flaky python-nose python-pytest))
     (home-page "https://ipython.org")
     (synopsis "IPython Kernel for Jupyter")
     (description
@@ -8628,10 +8462,9 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
          "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)))
+     (list python-ipykernel))
     (inputs
-     `(("pari-gp" ,pari-gp)
-       ("readline" ,readline)))
+     (list pari-gp readline))
     (arguments
      `(#:tests? #f)) ; no test suite
     (home-page
@@ -8665,41 +8498,41 @@ callback signature using a prototype function.")
 (define-public python-ipython
   (package
     (name "python-ipython")
-    (version "7.20.0")
+    (version "7.27.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ipython" version ".tar.gz"))
        (sha256
-        (base32 "17pzzyfh6z7il1j49fb32glad04pqppqjsymj67gb30ah80ay8qr"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     `(("python-backcall" ,python-backcall)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-prompt-toolkit" ,python-prompt-toolkit-2)
-       ("python-terminado" ,python-terminado)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-jedi" ,python-jedi)
-       ("python-jinja2" ,python-jinja2)
-       ("python-mistune" ,python-mistune)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pickleshare" ,python-pickleshare)
-       ("python-simplegeneric" ,python-simplegeneric)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-traitlets" ,python-traitlets)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pygments" ,python-pygments)))
+        (base32 "04xgymypnbfgf2q0d5b0hanjbjsp53f055sh1p8xlq52vyzmxdaq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-backcall
+           python-pyzmq
+           python-prompt-toolkit-2
+           python-terminado
+           python-matplotlib
+           python-matplotlib-inline
+           python-numpy
+           python-numpydoc
+           python-jedi
+           python-jinja2
+           python-mistune
+           python-pexpect
+           python-pickleshare
+           python-simplegeneric
+           python-jsonschema
+           python-traitlets
+           python-nbformat
+           python-pygments))
     (inputs
-     `(("readline" ,readline)
-       ("which" ,which)))
+     (list readline which))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)
-       ("python-requests" ,python-requests) ;; for tests
-       ("python-testpath" ,python-testpath)
-       ("python-nose" ,python-nose)))
+     (list graphviz
+           pkg-config
+           python-requests ;; for tests
+           python-testpath
+           python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8734,7 +8567,10 @@ callback signature using a prototype function.")
              ;; (which depends on ipython).
              (delete-file "IPython/core/tests/test_display.py")
              ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
-             (delete-file "IPython/core/tests/test_interactiveshell.py"))))))
+             (delete-file "IPython/core/tests/test_interactiveshell.py")
+             ;; AttributeError: module 'matplotlib_inline' has no
+             ;; attribute 'backend_inline'
+             (delete-file "IPython/core/tests/test_pylabtools.py"))))))
     (home-page "https://ipython.org")
     (synopsis "IPython is a tool for interactive computing in Python")
     (description
@@ -8783,21 +8619,20 @@ computing.")
                (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
              #t)))))
     (inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-ipykernel" ,python-ipykernel)))
+     (list python-ipython python-ipykernel))
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
        ;; FIXME: It's possible that a smaller union would work just as well.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
-                                        texlive-generic-ifxetex
+                                        texlive-generic-iftex
                                         texlive-pdftex
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
                                         texlive-latex-eqparbox
-                                        texlive-latex-etoolbox
+                                        texlive-etoolbox
                                         texlive-latex-expdlist
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
@@ -8806,11 +8641,11 @@ computing.")
                                         texlive-latex-framed
                                         texlive-latex-geometry
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
+                                        texlive-hyperref
                                         texlive-latex-mdwtools
                                         texlive-latex-multirow
                                         texlive-latex-needspace
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-preview
                                         texlive-latex-tabulary
@@ -8819,7 +8654,7 @@ computing.")
                                         texlive-latex-trimspaces
                                         texlive-latex-ucs
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-varwidth
                                         texlive-latex-wrapfig)))
        ("texinfo" ,texinfo)))))
@@ -8836,6 +8671,15 @@ computing.")
         (base32
          "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
     (build-system python-build-system)
+    (arguments
+      (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'remove-vterm-tests
+              ;; According to Debian these tests are cursed.
+              ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
+              (lambda _
+                (delete-file "urwid/tests/test_vterm.py"))))))
     (home-page "http://urwid.org")
     (synopsis "Console user interface library for Python")
     (description
@@ -8882,9 +8726,9 @@ features useful for text console applications.")
                (invoke "python" "-m" "pytest"))
              #t)))))
     (propagated-inputs
-     `(("python-urwid" ,python-urwid)))
+     (list python-urwid))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/rr-/urwid_readline")
     (synopsis "Text input widget for urwid that supports readline shortcuts")
     (description
@@ -8917,12 +8761,12 @@ supports @code{readline} shortcuts.")
              (delete-file "tests/test_external.py")
              #t)))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-isort" ,python-isort)
-       ("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-hypothesis
+           python-isort
+           python-numpy
+           python-pytest
+           python-pytest-runner
+           python-tabulate))
     (home-page "https://github.com/life4/textdistance")
     (synopsis "Compute distance between the two texts")
     (description "@code{textdistance} is a pure Python library for comparing
@@ -8948,7 +8792,7 @@ distance between two or more sequences by many algorithms.")
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; no tests
-    (propagated-inputs `(("python-urwid" ,python-urwid)))
+    (propagated-inputs (list python-urwid))
     (home-page "https://github.com/pazz/urwidtrees")
     (synopsis "Tree widgets for urwid")
     (description "Urwidtrees is a Widget Container API for the @code{urwid}
@@ -8973,7 +8817,7 @@ toolkit.  Use it to build trees of widgets.")
     (arguments
      `(#:tests? #f))                    ;no test suite in release
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/ua-parser/uap-python")
     (synopsis "User agent parser")
     (description
@@ -8998,7 +8842,7 @@ toolkit.  Use it to build trees of widgets.")
     (arguments
      `(#:tests? #f))                  ;missing devices.json test file in release
     (propagated-inputs
-     `(("python-ua-parser" ,python-ua-parser)))
+     (list python-ua-parser))
     (home-page "https://github.com/selwin/python-user-agents")
     (synopsis "User Agent strings parsing library")
   (description
@@ -9012,17 +8856,17 @@ parsing (browser/HTTP) user agent strings.")
 (define-public python-dbus
   (package
     (name "python-dbus")
-    (version "1.2.16")
+    (version "1.2.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
                            "dbus-python-" version ".tar.gz"))
        (sha256
-        (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
+        (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("python" ,python-wrapper)
        ("dbus-glib" ,dbus-glib)))
@@ -9030,6 +8874,7 @@ parsing (browser/HTTP) user agent strings.")
     (description "python-dbus provides bindings for libdbus, the reference
 implementation of D-Bus.")
     (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
+    (properties `((python2-variant . ,(delay python2-dbus))))
     (license license:expat)))
 
 (define-public python2-dbus
@@ -9037,8 +8882,9 @@ implementation of D-Bus.")
     (name "python2-dbus")
     (inputs `(("python" ,python-2)
               ,@(alist-delete "python"
-                              (package-inputs python-dbus)
-                              equal?)))))
+                              (package-inputs python-dbus))))
+    (arguments
+     `(#:configure-flags '("PYTHON_VERSION=2")))))
 
 (define-public python-dbus-next
   (package
@@ -9056,7 +8902,7 @@ implementation of D-Bus.")
          "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "https://github.com/altdesktop/python-dbus-next")
     (synopsis "Zero-dependency DBus library for Python with asyncio support")
     (description
@@ -9078,8 +8924,8 @@ mobile environments.")
          "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))                    ; tests depend on system state
-    (native-inputs
-     `(("python-dbus" ,python-dbus)))
+    (propagated-inputs
+     (list python-dbus))
     (home-page "https://bitbucket.org/takluyver/pynotify2")
     (synopsis "Python interface to D-Bus notifications")
     (description
@@ -9117,7 +8963,7 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
          (replace 'check
            (lambda _ (invoke "./convert-py3k"))))))
     (propagated-inputs
-     `(("python-soupsieve" ,python-soupsieve)))
+     (list python-soupsieve))
     (home-page
      "https://www.crummy.com/software/BeautifulSoup/bs4/")
     (synopsis
@@ -9149,10 +8995,15 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
         (base32
          "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f))
-    ;;XXX: 2 tests fail currently despite claming they were to be
-    ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
-    ;;don't want to create a circular dependency.
+    (arguments
+      ;;XXX: 2 tests fail currently despite claming they were to be
+      ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
+      ;;don't want to create a circular dependency.
+      (list #:tests? #f
+            #:phases
+            #~(modify-phases %standard-phases
+                ;; Circular dependency with python-beautifulsoup4.
+                (delete 'sanity-check))))
     (home-page "https://github.com/facelessuser/soupsieve")
     (synopsis "CSS selector library")
     (description
@@ -9178,9 +9029,8 @@ some are not yet implemented).")
           (base32
            "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
       (propagated-inputs
-       `(("python2-backports-functools-lru-cache"
-          ,python2-backports-functools-lru-cache)
-         ,@(package-propagated-inputs base))))))
+       (modify-inputs (package-propagated-inputs base)
+         (prepend python2-backports-functools-lru-cache))))))
 
 (define-public python-netifaces
   (package
@@ -9226,9 +9076,9 @@ interfaces in an easy and portable manner.")
                       #t)))))
     ;; python-decorator is needed at runtime.
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)))
+     (list python-decorator))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://networkx.github.io/")
     (synopsis "Python module for creating and manipulating graphs and networks")
     (description
@@ -9252,8 +9102,7 @@ of the structure, dynamics, and functions of complex networks.")
       (arguments
        `(#:python ,python-2))
       (native-inputs
-       `(("python-nose" ,python2-nose)
-         ("unzip" ,unzip))))))
+       (list python2-nose unzip)))))
 
 (define-public python-datrie
   (package
@@ -9268,10 +9117,8 @@ of the structure, dynamics, and functions of complex networks.")
          "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-cython python-hypothesis python-pytest
+           python-pytest-runner))
     (home-page "https://github.com/kmike/datrie")
     (synopsis "Fast, efficiently stored trie for Python")
     (description
@@ -9292,10 +9139,9 @@ Python.")
          "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-docutils python-pyparsing))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/willu47/amply")
     (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
     (description
@@ -9316,7 +9162,7 @@ structures.")
          "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-amply" ,python-amply)))
+     (list python-amply))
     (home-page "https://github.com/coin-or/pulp")
     (synopsis "Linear Programming modeler")
     (description
@@ -9362,13 +9208,10 @@ algorithm.")
     (arguments
      `(#:test-target "pytest"))
     (propagated-inputs
-     `(("python-diff-match-patch" ,python-diff-match-patch)))
+     (list python-diff-match-patch))
     (native-inputs
-     `(("python-flaky" ,python-flaky)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-flaky python-pytest python-pytest-cov
+           python-pytest-runner python-pytest-timeout))
     (home-page "https://github.com/spyder-ide/three-merge")
     (synopsis "Library for merging two strings with respect to a base one")
     (description
@@ -9405,22 +9248,22 @@ approach.")
                                "/bin/snakemake")))
              #t)))))
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-configargparse" ,python-configargparse)
-       ("python-datrie" ,python-datrie)
-       ("python-docutils" ,python-docutils)
-       ("python-gitpython" ,python-gitpython)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-nbformat" ,python-nbformat)
-       ("python-networkx" ,python-networkx)
-       ("python-psutil" ,python-psutil)
-       ("python-pulp" ,python-pulp)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-ratelimiter" ,python-ratelimiter)
-       ("python-requests" ,python-requests)
-       ("python-toposort" ,python-toposort)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-appdirs
+           python-configargparse
+           python-datrie
+           python-docutils
+           python-gitpython
+           python-jinja2
+           python-jsonschema
+           python-nbformat
+           python-networkx
+           python-psutil
+           python-pulp
+           python-pyyaml
+           python-ratelimiter
+           python-requests
+           python-toposort
+           python-wrapt))
     (home-page "https://snakemake.readthedocs.io")
     (synopsis "Python-based execution environment for make-like workflows")
     (description
@@ -9452,13 +9295,13 @@ SVG, EPS, PNG and terminal output.")
 (define-public python-seaborn
   (package
     (name "python-seaborn")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "seaborn" version))
        (sha256
-        (base32 "1b81p9s6li3b606ivgbynrh102fclwlw74m8qxzsii9pv6p8xrs4"))
+        (base32 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
        (patches (search-patches "python-seaborn-kde-test.patch"))))
     (build-system python-build-system)
     (arguments
@@ -9475,13 +9318,9 @@ SVG, EPS, PNG and terminal output.")
              (when tests?
                (invoke "pytest" "seaborn")))))))
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)))
+     (list python-pandas python-matplotlib python-numpy python-scipy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list python-pytest xorg-server-for-tests))
     (home-page "https://seaborn.pydata.org/")
     (synopsis "Statistical data visualization")
     (description
@@ -9507,31 +9346,40 @@ and statistical routines from scipy and statsmodels.")
 
 (define-public python-mpmath
   (package
-  (name "python-mpmath")
-  (version "1.1.0")
-  (source (origin
-            (method url-fetch)
-            (uri (pypi-uri "mpmath" version))
-            (file-name (git-file-name name version))
-            (sha256
-             (base32
-              "1xlrcja213jpfhw25q1jl5pl10w1a2cc68x1c4mkicxsbzhan5zw"))))
-  (build-system python-build-system)
-  (native-inputs
-   `(("python-pytest" ,python-pytest)))
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (replace 'check
-         (lambda _
-           (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
-  (home-page "https://mpmath.org")
-  (synopsis "Arbitrary-precision floating-point arithmetic in python")
-  (description
-    "@code{mpmath} can be used as an arbitrary-precision substitute for
+    (name "python-mpmath")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fredrik-johansson/mpmath")
+                    (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-version
+           (lambda _
+             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
+             ;; ZIP does not support timestamps before 1980.
+             (setenv "SOURCE_DATE_EPOCH" "315532800")))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest python-setuptools-scm))
+    (home-page "https://mpmath.org")
+    (synopsis "Arbitrary-precision floating-point arithmetic in python")
+    (description
+     "@code{mpmath} can be used as an arbitrary-precision substitute for
 Python's float/complex types and math/cmath modules, but also does much
 more advanced mathematics.")
-  (license license:bsd-3)))
+    (license license:bsd-3)))
 
 (define-public python2-mpmath
   (package-with-python2 python-mpmath))
@@ -9548,7 +9396,7 @@ more advanced mathematics.")
         (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
     (build-system python-build-system)
     (inputs
-     `(("mpfr" ,mpfr)))
+     (list mpfr))
     (home-page "https://github.com/mdickinson/bigfloat")
     (synopsis "Arbitrary precision floating-point arithmetic for Python")
     (description
@@ -9576,7 +9424,7 @@ multiprecision arithmetic.")
                (or (which "python3") (which "python"))
                "-c" "import sympy; sympy.test(\"/core\")"))))))
     (propagated-inputs
-     `(("python-mpmath" ,python-mpmath)))
+     (list python-mpmath))
     (home-page "https://www.sympy.org/")
     (synopsis "Python library for symbolic mathematics")
     (description
@@ -9645,11 +9493,9 @@ falling into the Python interpreter.")
                (setenv "DISPLAY" ":1")
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("xorg-server" ,xorg-server)))
+     (list python-mock python-setuptools-scm xorg-server))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/python-xlib/python-xlib")
     (synopsis "Python X11 client library")
     (description
@@ -9674,7 +9520,7 @@ low-level X clients.  It is written entirely in Python.")
          "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six))) ; required for conversion, not at run-time
+     (list python-six)) ; required for conversion, not at run-time
     (home-page
      "https://docs.python.org/3/library/functools.html#functools.singledispatch")
     (synopsis "Backport of singledispatch feature from Python 3.4")
@@ -9731,7 +9577,14 @@ Python 2 and Python 3.")
     (license license:psfl)))
 
 (define-public python2-backports-csv
-  (package-with-python2 python-backports-csv))
+  (package
+    (inherit (package-with-python2 python-backports-csv))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; The sanity-check attempts attempts to import the non-existent
+         ;; module "backports".
+         (delete 'sanity-check))))))
 
 (define-public python2-backports-shutil-get-terminal-size
   (package
@@ -9751,11 +9604,9 @@ Python 2 and Python 3.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python2-pytest" ,python2-pytest)))
+     (list python2-pytest))
     (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
     (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
     (description
@@ -9829,11 +9680,9 @@ applications.")
              ;; Cython extensions have to be built before running the tests.
              (invoke "python" "setup.py" "build_ext" "--inplace"))))))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-cython python-pytest))
     (home-page "https://github.com/zeromq/pyzmq")
     (synopsis "Python bindings for 0MQ")
     (description
@@ -9854,7 +9703,7 @@ applications.")
     (arguments
      `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/corenting/immutabledict")
     (synopsis "Immutable wrapper around dictionaries")
     (description
@@ -9882,7 +9731,7 @@ replacement for dictionaries where immutability is desired.")
              (when tests?
                (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/carpedm20/emoji/")
     (synopsis "Emoji terminal output for Python")
     (description "This package provides Emoji terminal output for Python.  The
@@ -9929,8 +9778,7 @@ PEP 8.")
          "04kyh9hkpyc8jzj16d1kkk29b5n8miqdvbs0zm035n1z5z5kx6hz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-flake8-polyfill" ,python-flake8-polyfill)))
+     (list python-flake8 python-flake8-polyfill))
     (home-page "https://github.com/PyCQA/pep8-naming")
     (synopsis "Check PEP-8 naming conventions")
     (description
@@ -9954,9 +9802,7 @@ plugin for flake8 to check PEP-8 naming conventions.")
                (invoke "pytest")
                #t))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-testpath" ,python-testpath)))
+     (list python-mock python-pytest python-testpath))
     (properties `((python2-variant . ,(delay python2-pep517))))))
 
 ;; Skip the tests so we don't create a cyclical dependency with pytest.
@@ -9979,11 +9825,10 @@ plugin for flake8 to check PEP-8 naming conventions.")
         (method url-fetch)
         (uri (pypi-uri "pyflakes" version))
         (sha256
-          (base32
-            "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
+         (base32
+          "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
     (build-system python-build-system)
-    (home-page
-      "https://github.com/pyflakes/pyflakes")
+    (home-page "https://github.com/PyCQA/pyflakes")
     (synopsis "Passive checker of Python programs")
     (description
       "Pyflakes statically checks Python source code for common errors.")
@@ -10001,28 +9846,28 @@ plugin for flake8 to check PEP-8 naming conventions.")
               (uri (pypi-uri "pyflakes" version))
               (sha256
                (base32
-                "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))))
+                "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
+              (patches
+               (search-patches "python-pyflakes-test-location.patch"))))))
 
 (define-public python-mccabe
   (package
     (name "python-mccabe")
     (version "0.6.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "mccabe" version))
-        (sha256
-          (base32
-            "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mccabe" version))
+       (sha256
+        (base32
+         "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest-bootstrap)
-        ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/flintwork/mccabe")
+     (list python-toml python-pytest-bootstrap python-pytest-runner))
+    (home-page "https://github.com/PyCQA/mccabe")
     (synopsis "McCabe checker, plugin for flake8")
-    (description
-      "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
-complexity of Python source code.")
+    (description "This package provides a Flake8 plug-in to compute the McCabe
+cyclomatic complexity of Python source code.")
     (license license:expat)))
 
 (define-public python2-mccabe
@@ -10047,13 +9892,10 @@ complexity of Python source code.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-v"))))))
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-mccabe" ,python-mccabe)))
+     (list python-pycodestyle python-entrypoints python-pyflakes
+           python-mccabe))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://gitlab.com/pycqa/flake8")
     (synopsis
       "The modular source code checker: pep8, pyflakes and co")
@@ -10083,10 +9925,8 @@ complexity of Python source code.")
                (base32
                 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle-2.6)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-pyflakes" ,python-pyflakes-2.2)
-       ("python-mccabe" ,python-mccabe)))))
+     (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
+           python-mccabe))))
 
 (define-public python-flake8-bugbear
   (package
@@ -10110,11 +9950,9 @@ complexity of Python source code.")
                (("def test_does_not_crash_on_any_valid_code")
                 "def _test_does_not_crash_on_any_valid_code")))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-hypothesmith" ,python-hypothesmith)))
+     (list python-hypothesis python-hypothesmith))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)))
+     (list python-attrs python-flake8))
     (home-page "https://github.com/PyCQA/flake8-bugbear")
     (synopsis
       "Flake8 plugin for finding likely bugs and design problems in your program")
@@ -10137,9 +9975,7 @@ in pyflakes and pycodestyle.")
          "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-six" ,python-six)))
+     (list python-flake8 python-pycodestyle python-six))
     (home-page "https://github.com/planetlabs/flake8-continuation")
     (synopsis "Flake8 Line Continuation Plugin")
     (description "A Flake8 plugin that checks for the line continuation
@@ -10164,8 +10000,7 @@ These should be used in preference to using a backslash for line continuation.
         (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-more-itertools" ,python-more-itertools)))
+     (list python-attrs python-more-itertools))
     (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
     (synopsis "Flake8 plugin to encourage correct string literal concatenation")
     (description
@@ -10199,17 +10034,11 @@ unnecessary plus operators for explicit string literal concatenation.")
              (substitute* "setup.cfg"
                (("\\[pytest\\]")
                 "[tool:pytest]"))
-
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
+    (propagated-inputs
+     (list python-flake8))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-pep8" ,python-pep8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pep8 python-pycodestyle python-pytest))
     (home-page "https://gitlab.com/pycqa/flake8-polyfill")
     (synopsis "Polyfill package for Flake8 plugins")
     (description
@@ -10232,9 +10061,7 @@ plugins that intend to support Flake8 2.x and 3.x simultaneously.")
         (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-six" ,python-six)))
+     (list python-flake8 python-pycodestyle python-six))
     (home-page "https://github.com/jbkahn/flake8-print")
     (synopsis "Print statement checker plugin for Flake8")
     (description
@@ -10245,19 +10072,17 @@ files.")
 (define-public python-flake8-pyi
   (package
     (name "python-flake8-pyi")
-    (version "20.5.0")
+    (version "20.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "flake8-pyi" version))
        (sha256
         (base32
-         "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
+         "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-flake8" ,python-flake8)
-       ("python-pyflakes" ,python-pyflakes)))
+     (list python-attrs python-flake8 python-pyflakes))
     (home-page "https://github.com/ambv/flake8-pyi")
     (synopsis
       "Flake8 plugin that provides specializations for type hinting stub files")
@@ -10303,7 +10128,7 @@ lints.")
          "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-flake8" ,python-flake8)))
+     (list python-flake8))
     (home-page "https://github.com/zheller/flake8-quotes/")
     (synopsis "Flake8 lint for quotes")
     (description "This package provides a Flake8 lint for quotes.")
@@ -10322,7 +10147,7 @@ lints.")
          "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pycodestyle" ,python-pycodestyle)))
+     (list python-pycodestyle))
     (home-page "https://github.com/schlamar/flake8-todo")
     (synopsis "TODO notes checker, plugin for flake8")
     (description
@@ -10342,7 +10167,7 @@ TODO notes checker plugin for flake8.")
         (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyflakes" ,python-pyflakes)))
+     (list python-pyflakes))
     (home-page "https://github.com/myint/autoflake")
     (synopsis "Removes unused imports and unused variables")
     (description
@@ -10367,8 +10192,7 @@ It also removes useless @code{pass} statements.")
          "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-cython" ,python-cython)))
+     (list python-nose python-cython))
     (home-page "https://github.com/lepture/mistune")
     (synopsis "Markdown parser in pure Python")
     (description "This package provides a fast markdown parser in pure
@@ -10378,6 +10202,20 @@ Python.")
 (define-public python2-mistune
   (package-with-python2 python-mistune))
 
+;; 2.0 is not released yet, but some packages have started using it.
+(define-public python-mistune-next
+  (package
+    (inherit python-mistune)
+    (name "python-mistune-next")
+    (version "2.0.0rc1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "mistune" version))
+              (sha256
+               (base32
+                "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
+    (native-inputs (list python-nose))))
+
 (define-public python-markdown
   (package
     (name "python-markdown")
@@ -10391,8 +10229,7 @@ Python.")
          "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-nose python-pyyaml))
     (home-page "https://python-markdown.github.io/")
     (synopsis "Python implementation of Markdown")
     (description
@@ -10429,7 +10266,7 @@ markdown_py is also provided to convert Markdown files to HTML.")
          "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -10495,8 +10332,7 @@ pseudo terminal (pty), and interact with both the process and its pty.")
              (invoke "make" "test"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("which" ,which)))
+     (list python-coverage which))
     (synopsis "Simple testing framework for command line applications")
     (description
      "Cram is a functional testing framework for command line applications.
@@ -10539,7 +10375,7 @@ output.")
     (arguments
      `(#:tests? #f)) ; Tests require more dependencies.
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jackmaney/python-stdlib-list")
     (synopsis "Python Standard Libraries")
     (description "This package contains a list of Python Standard Libraries.")
@@ -10579,9 +10415,7 @@ add functionality and customization to your projects with their own plugins.")
                 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list unzip python-pytest python-pytest-runner))
     (home-page "https://github.com/fonttools/fonttools")
     (synopsis "Tools to manipulate font files")
     (description
@@ -10682,10 +10516,9 @@ third-party code.")
                 "1g2cdhdqrb6m7655qp61pn61pwj1ql61cdzhr2jvl3w4i8877ddr"))))
     (build-system python-build-system)
     (inputs
-     `(("fuse" ,fuse)
-       ("attr" ,attr)))
+     (list fuse attr))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Python bindings for FUSE")
     (description
      "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
@@ -10720,16 +10553,9 @@ third-party code.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v" "test")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+             (invoke "pytest" "-v" "test"))))))
+    (native-inputs
+     (list python-pytest))
     (synopsis "MessagePack (de)serializer")
     (description "MessagePack is a fast, compact binary serialization format,
 suitable for similar data to JSON.  This package provides CPython bindings for
@@ -10895,9 +10721,9 @@ Supported netlink families and protocols include:
                            (filter (lambda (f) (grep "from test." f))
                                    test-files)))))))))
     (propagated-inputs
-     `(("python-lark-parser" ,python-lark-parser)))
+     (list python-lark-parser))
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/vaidik/commentjson")
     (synopsis "Python library for adding comments to JSON files")
     (description "Comment JSON is a Python package that helps you create JSON
@@ -10930,9 +10756,7 @@ similar to the Python standard library's @code{json} module.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-commentjson" ,python-commentjson)
-       ("python-packaging" ,python-packaging)
-       ("python-pytest" ,python-pytest)))
+     (list python-commentjson python-packaging python-pytest))
     (home-page "https://github.com/sarugaku/resolvelib")
     (synopsis "Abstract dependencies resolver")
     (description "The ResolveLib library provides a @code{Resolver} class that
@@ -11029,9 +10853,9 @@ Unicode-aware.  It is not intended as an end-user tool.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (setenv "PYTHONPATH"
+               (setenv "GUIX_PYTHONPATH"
                        (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "nosetests" "-v")))))))
     (native-inputs
      `(("nose" ,python-nose)))
@@ -11107,7 +10931,7 @@ printing of sub-tables by specifying a row range.")
                      ;; Tries to open an outgoing connection.
                      "not test_ssl_outgoing"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/dabeaz/curio")
     (synopsis "Coroutine-based library for concurrent Python")
     (description
@@ -11170,15 +10994,11 @@ tasks, sockets, files, locks, and queues.")
                      (string-append "--hdf5="
                                     (assoc-ref inputs "hdf5"))))))))
     (propagated-inputs
-     `(("python-numexpr" ,python-numexpr)
-       ("python-numpy" ,python-numpy)))
+     (list python-numexpr python-numpy))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("pkg-config" ,pkg-config)))
+     (list python-cython pkg-config))
     (inputs
-     `(("hdf5" ,hdf5-1.10)
-       ("bzip2" ,bzip2)
-       ("zlib" ,zlib)))
+     (list hdf5-1.10 bzip2 zlib))
     (home-page "https://www.pytables.org/")
     (synopsis "Hierarchical datasets for Python")
     (description "PyTables is a package for managing hierarchical datasets and
@@ -11203,9 +11023,7 @@ designed to efficiently cope with extremely large amounts of data.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-curio" ,python-curio)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-curio python-pytest python-pytest-cov))
     (home-page "https://github.com/python-trio/sniffio")
     (synopsis "Detect which async library a program is running under")
     (description "This package detects which async library a program is
@@ -11227,11 +11045,9 @@ asyncio.")
          "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-black" ,python-black)
-       ("python-toml" ,python-toml)))
+     (list python-pytest python-black python-toml))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/shopkeep/pytest-black")
     (synopsis "Pytest plugin to enable format checking with black")
     (description
@@ -11252,12 +11068,12 @@ Python code formatter \"black\".")
          "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools" ,python-setuptools)
-       ("python-testpath" ,python-testpath)))
+     (list python-pygments
+           python-pytest
+           python-pytest-black
+           python-pytest-cov
+           python-setuptools
+           python-testpath))
     (home-page "https://github.com/flying-sheep/get_version")
     (synopsis "Version helper in the spirit of versioneer")
     (description
@@ -11292,8 +11108,7 @@ your package is installed, via @code{pkg_resources} (part of
                         "not test_infer_zip_from_disk"
                         " and not test_infer_tar_from_disk"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-benchmark" ,python-pytest-benchmark)))
+     (list python-pytest python-pytest-benchmark))
     (home-page "https://github.com/h2non/filetype.py")
     (synopsis "Infer file type and MIME type of any file/buffer")
     (description "@code{filetype} is a small and dependency free Python
@@ -11321,8 +11136,7 @@ signature of a file or buffer.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-xprocess" ,python-pytest-xprocess)))
+     (list python-pytest python-pytest-xprocess))
     (home-page "https://github.com/pallets/cachelib")
     (synopsis "Collection of cache libraries")
     (description "Cachelib is a library extracted from @code{werkzeug} which
@@ -11342,11 +11156,8 @@ provides a collection of cache libraries in the same API interface.")
          "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-get-version" ,python-get-version)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-black" ,python-pytest-black)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-get-version python-pytest python-pytest-black
+           python-pytest-cov python-setuptools))
     (home-page "https://github.com/flying-sheep/legacy-api-wrap")
     (synopsis "Legacy API wrapper")
     (description "This module defines a decorator to wrap legacy APIs.  The
@@ -11365,7 +11176,7 @@ primary use case is APIs defined before keyword-only parameters existed.")
         (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/Mimino666/langdetect")
     (synopsis "Language detection library")
     (description
@@ -11408,7 +11219,7 @@ suitable for a wide range of protocols based on the ASN.1 specification.")
           "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyasn1" ,python-pyasn1)))
+     (list python-pyasn1))
     (home-page "https://sourceforge.net/projects/pyasn1/")
     (synopsis "ASN.1 codec implementations")
     (description
@@ -11453,10 +11264,8 @@ implementations of ASN.1-based codecs and protocols.")
         (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-bitstruct" ,python-bitstruct)
-       ("python-diskcache" ,python-diskcache)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pyparsing" ,python-pyparsing)))
+     (list python-bitstruct python-diskcache python-prompt-toolkit
+           python-pyparsing))
     (home-page "https://github.com/eerimoq/asn1tools")
     (synopsis  "ASN.1 parsing, encoding and decoding")
     (description "This package provides ASN.1 parsing, encoding and decoding
@@ -11559,12 +11368,11 @@ specification.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "sasstests.py"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-werkzeug" ,python-werkzeug)))
+     (list python-pytest python-werkzeug))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://sass.github.io/libsass-python/")
     (synopsis "Straightforward binding of libsass for Python")
     (description
@@ -11586,6 +11394,7 @@ is binding LibSass.")
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))          ;circular dependency with python-aiohttp
+    (propagated-inputs (list python-idna))
     (home-page "https://github.com/aio-libs/idna-ssl")
     (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
     (description "Patch @code{ssl.match_hostname} for Unicode(idna)
@@ -11754,10 +11563,9 @@ applications from a list of lists of strings.  It supports multi-line rows.")
                   (replace 'check
                     (lambda _ (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (inputs
-     `(("libarchive" ,libarchive)))
+     (list libarchive))
     (home-page "https://github.com/Changaco/python-libarchive-c")
     (synopsis "Python interface to libarchive")
     (description
@@ -11831,8 +11639,7 @@ libmagic.")))
                       (delete-file "lib/debian/tests/test_debfile.py")
                       #t)))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-chardet" ,python-chardet)))
+     (list python-six python-chardet))
     (synopsis "Debian package related modules")
     (description
      ;; XXX: Use @enumerate instead of @itemize to work around
@@ -11866,10 +11673,9 @@ Debian-related files, such as:
             "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-pathlib" ,python-pathlib)
-        ("python-six" ,python-six)))
+      (list python-pathlib python-six))
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "http://py.errorist.io/json-spec")
     (synopsis
       "JSON Schema, JSON Pointer and JSON Reference for Python")
@@ -11898,15 +11704,14 @@ JSON Reference and JSON Pointer.")
             (when tests?
               (invoke "pytest" "-vv" "-m" "not benchmark")))))))
     (native-inputs
-      `(("python-colorama" ,python-colorama)
-        ("python-json-spec" ,python-json-spec)
-        ("python-jsonschema" ,python-jsonschema)
-        ("python-pylint" ,python-pylint)
-        ("python-pytest" ,python-pytest-6)
-        ("python-pytest-benchmark"
-         ,python-pytest-benchmark)
-        ("python-pytest-cache" ,python-pytest-cache)
-        ("python-validictory" ,python-validictory)))
+      (list python-colorama
+            python-json-spec
+            python-jsonschema
+            python-pylint
+            python-pytest
+            python-pytest-benchmark
+            python-pytest-cache
+            python-validictory))
     (home-page
       "https://github.com/horejsek/python-fastjsonschema")
     (synopsis
@@ -11939,16 +11744,14 @@ drafts 04, 06 and 07.")
              (when tests?
                (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-traitlets" ,python-traitlets)))
+     (list python-ipython-genutils python-jsonschema python-jupyter-core
+           python-traitlets))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-fastjsonschema" ,python-fastjsonschema) ; This is only active
-       ; when setting NBFORMAT_VALIDATOR="fastjsonschema", so include it for
-       ; testing only.
-       ("python-testpath" ,python-testpath)))
+     (list python-pytest
+           python-fastjsonschema ; This is only active
+           ; when setting NBFORMAT_VALIDATOR="fastjsonschema", so include it for
+           ; testing only.
+           python-testpath))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter Notebook format")
     (description "This package provides the reference implementation of the
@@ -11967,13 +11770,9 @@ Jupyter Notebook format and Python APIs for working with notebooks.")
         (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-webencodings" ,python-webencodings)
-       ("python-six" ,python-six)))
+     (list python-webencodings python-six))
     (native-inputs
-     `(("python-datrie" ,python-datrie)
-       ("python-genshi" ,python-genshi)
-       ("python-lxml" ,python-lxml)
-       ("python-pytest" ,python-pytest)))
+     (list python-datrie python-genshi python-lxml python-pytest))
     (home-page "https://github.com/mozilla/bleach")
     (synopsis "Whitelist-based HTML-sanitizing tool")
     (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
@@ -12033,9 +11832,9 @@ functions to find and load entry points.")
          "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sexpdata" ,python-sexpdata)))
+     (list python-sexpdata))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/tkf/python-epc")
     (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
     (description
@@ -12059,8 +11858,7 @@ from elisp.")
      ;; repository require online data.
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-requests python-simplejson))
     (home-page "https://github.com/MicroPyramid/forex-python")
     (synopsis "Foreign exchange rates and currency conversion")
     (description
@@ -12157,10 +11955,10 @@ time.")
                (setenv "HOME" "/tmp")
                (invoke "pytest" "-vv")))))))
     (inputs
-     `(("pandoc" ,pandoc)
-       ;; XXX: Disabled, needs substitute*.
-       ;;("inkscape" ,inkscape)
-       ))
+     (list pandoc
+           ;; XXX: Disabled, needs substitute*.
+           ;;("inkscape" ,inkscape)
+           ))
     (native-inputs
      `(("python-ipykernel" ,python-ipykernel)
        ;; XXX: Disabled, not in guix.
@@ -12168,52 +11966,54 @@ time.")
        ("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-pytest-dependency" ,python-pytest-dependency)
-       ("texlive" ,(texlive-union (list texlive-adjustbox
-                                        texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                        texlive-amsfonts
                                         texlive-booktabs
                                         texlive-caption
                                         texlive-eurosym
                                         texlive-fonts-rsfs
                                         texlive-generic-ulem
-                                        texlive-iftex
+                                        texlive-generic-iftex
                                         texlive-jknappen
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-fancyvrb
                                         texlive-latex-float
-                                        texlive-latex-fontspec
+                                        texlive-fontspec
                                         texlive-latex-geometry
-                                        texlive-latex-hyperref
+                                        texlive-grffile
+                                        texlive-hyperref
                                         texlive-latex-jknapltx
                                         texlive-latex-ms
-                                        texlive-latex-oberdiek
+                                        texlive-oberdiek
                                         texlive-latex-parskip
                                         texlive-latex-trimspaces
                                         texlive-latex-upquote
                                         texlive-latex-ucs
                                         texlive-lm
                                         texlive-mathpazo
+                                        texlive-stringenc
                                         texlive-tcolorbox
                                         texlive-titling
                                         texlive-tools
                                         texlive-xcolor
                                         texlive-zapfding)))))
     (propagated-inputs
-     `(("python-bleach" ,python-bleach)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-entrypoints" ,python-entrypoints)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-mistune" ,python-mistune)
-       ("python-nbclient" ,python-nbclient)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pandocfilters" ,python-pandocfilters)
-       ("python-pygments" ,python-pygments)
-       ("python-jupyterlab-pygments" ,python-jupyterlab-pygments)
-       ("python-testpath" ,python-testpath)
-       ("python-traitlets" ,python-traitlets)
-       ;; Required, even if [serve] is not used.
-       ("python-tornado" ,python-tornado-6)))
+     (list python-bleach
+           python-defusedxml
+           python-entrypoints
+           python-jinja2
+           python-jupyter-core
+           python-mistune
+           python-nbclient
+           python-nbformat
+           python-pandocfilters
+           python-pygments
+           python-jupyterlab-pygments
+           python-testpath
+           python-traitlets
+           ;; Required, even if [serve] is not used.
+           python-tornado-6))
     (home-page "https://jupyter.org")
     (synopsis "Converting Jupyter Notebooks")
     (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
@@ -12245,6 +12045,18 @@ convert an @code{.ipynb} notebook file into various static formats including:
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'use-our-home-for-tests
+           (lambda _
+             ;; The 'get_patch_env' function in this file reads:
+             ;;   'HOME': cls.home_dir
+             ;; but for some reason, that definition of HOME is not what the
+             ;; GLib/GIO trash mechanism honors, which would cause test
+             ;; failures.  Instead, set 'HOME' here to an existing directory
+             ;; and let the tests honor it.
+             (substitute* "notebook/tests/launchnotebook.py"
+               (("'HOME': .*," all)
+                (string-append "# " all "\n")))
+             (setenv "HOME" (getcwd))))
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              ;; These tests require a browser
@@ -12254,35 +12066,32 @@ convert an @code{.ipynb} notebook file into various static formats including:
                ;; Some tests do not expect all files to be installed in the
                ;; same directory, but JUPYTER_PATH contains multiple entries.
                (unsetenv "JUPYTER_PATH")
-               ;; Some tests need HOME
-               (setenv "HOME" "/tmp")
-               (with-directory-excursion "/tmp"
-                 (invoke "pytest" "-vv"
-                         ;; TODO: This tests fails because nbconvert does not
-                         ;; list "python" as a format.
-                         "-k" "not test_list_formats"))))))))
-    (propagated-inputs
-     `(("python-argon2-cffi" ,python-argon2-cffi)
-       ("python-ipykernel" ,python-ipykernel)
-       ("python-ipython-genutils" ,python-ipython-genutils)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-jupyter-core" ,python-jupyter-core)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)
-       ("python-prometheus-client" ,python-prometheus-client)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-send2trash" ,python-send2trash)
-       ("python-terminado" ,python-terminado)
-       ("python-tornado" ,python-tornado-6)
-       ("python-traitlets" ,python-traitlets)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nbval" ,python-nbval)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-requests" ,python-requests)
-       ("python-requests-unixsocket" ,python-requests-unixsocket)))
+               (invoke "pytest" "-vv"
+                       ;; TODO: This tests fails because nbconvert does not
+                       ;; list "python" as a format.
+                       "-k" "not test_list_formats")))))))
+    (propagated-inputs
+     (list python-argon2-cffi
+           python-ipykernel
+           python-ipython-genutils
+           python-jinja2
+           python-jupyter-client
+           python-jupyter-core
+           python-nbconvert
+           python-nbformat
+           python-prometheus-client
+           python-pyzmq
+           python-send2trash
+           python-terminado
+           python-tornado-6
+           python-traitlets))
+    (native-inputs
+     (list python-coverage
+           python-nbval
+           python-pytest
+           python-pytest-cov
+           python-requests
+           python-requests-unixsocket))
     (home-page "https://jupyter.org/")
     (synopsis "Web-based notebook environment for interactive computing")
     (description
@@ -12303,7 +12112,7 @@ interactive computing.")
          "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-notebook" ,python-notebook)))
+     (list python-notebook))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "This package provides interactive HTML widgets for Jupyter
@@ -12323,16 +12132,14 @@ notebooks.")
          "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)
-       ("python-jupyterlab-widgets" ,python-jupyterlab-widgets)
-       ("python-nbformat" ,python-nbformat)
-       ("python-traitlets" ,python-traitlets)
-       ("python-widgetsnbextension" ,python-widgetsnbextension)))
+     (list python-ipykernel
+           python-ipython
+           python-jupyterlab-widgets
+           python-nbformat
+           python-traitlets
+           python-widgetsnbextension))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-mock python-pytest python-pytest-cov))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "Ipywidgets are interactive HTML widgets for Jupyter
@@ -12344,22 +12151,20 @@ in the data.")
 (define-public python-jupyter-console
   (package
     (name "python-jupyter-console")
-    (version "6.1.0")
+    (version "6.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jupyter_console" version))
        (sha256
         (base32
-         "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
+         "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-jupyter-client" ,python-jupyter-client)
-       ("python-prompt-toolkit" ,python-prompt-toolkit-2)
-       ("python-pygments" ,python-pygments)))
+     (list python-ipykernel python-jupyter-client python-prompt-toolkit-2
+           python-pygments))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter terminal console")
     (description "This package provides a terminal-based console frontend for
@@ -12418,10 +12223,9 @@ Jupyter kernels such as IJulia and IRKernel.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipython" ,python-ipython)))
+     (list python-ipykernel python-ipython python-pyqt))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter Qt console")
     (description "This package provides a Qt-based console for Jupyter with
@@ -12458,10 +12262,9 @@ support for rich media output.")
                          "six>=1.11.0"))
                       #t)))))
     (propagated-inputs
-     `(("python-editorconfig" ,python-editorconfig)
-       ("python-six" ,python-six)))
+     (list python-editorconfig python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (synopsis "JavaScript unobfuscator and beautifier")
     (description "Beautify, unpack or deobfuscate JavaScript, leveraging
 popular online obfuscators.")
@@ -12481,12 +12284,12 @@ popular online obfuscators.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; there are none.
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("python-jupyter-console" ,python-jupyter-console)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-notebook" ,python-notebook)
-       ("python-qtconsole" ,python-qtconsole)))
+     (list python-ipykernel
+           python-ipywidgets
+           python-jupyter-console
+           python-nbconvert
+           python-notebook
+           python-qtconsole))
     (home-page "https://jupyter.org")
     (synopsis "Web application for interactive documents")
     (description
@@ -12508,9 +12311,7 @@ simulation, statistical modeling, machine learning and much more.")
         (base32
          "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-hypothesis python-pytest python-pytest-runner))
     (build-system python-build-system)
     ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
     (arguments `(#:tests? #f))
@@ -12536,7 +12337,7 @@ automatically detect a wide range of file encodings.")
         (base32 "0rr3iv2xw4rz5ijnfqk229fw85cq6p6rhqqsilm0ldzncblfg63h"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/ousret/charset_normalizer")
     (synopsis "Universal Charset Detector, alternative to Chardet")
     (description "This library helps you read text from an unknown charset
@@ -12559,15 +12360,18 @@ library provides codecs are supported.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
+         "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
+       (patches (search-patches "python-docopt-pytest6-compat.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "py.test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "py.test")))))))
     (home-page "http://docopt.org")
     (synopsis "Command-line interface description language for Python")
     (description "This library allows the user to define a command-line
@@ -12605,7 +12409,7 @@ programmatically with command-line parsers like @code{getopt} and
                #t))))
        #:tests? #f)) ; no test suite
     (propagated-inputs
-     `(("dialog" ,dialog)))
+     (list dialog))
     (home-page "http://pythondialog.sourceforge.net/")
     (synopsis "Python interface to the UNIX dialog utility")
     (description "A Python wrapper for the dialog utility.  Its purpose is to
@@ -12641,7 +12445,7 @@ This allows one to make simple text-mode user interfaces on Unix-like systems")
               (patches (search-patches "python-configobj-setuptools.patch"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (synopsis "Config file reading, writing and validation")
     (description "ConfigObj is a simple but powerful config file reader and
 writer: an ini file round tripper.  Its main feature is that it is very easy to
@@ -12665,7 +12469,7 @@ config files.")
                 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -12768,7 +12572,7 @@ the standard library.")
          (replace 'check
            (lambda _ (invoke "pytest" "tests.py"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/foutaise/texttable/")
     (synopsis "Python module for creating simple ASCII tables")
     (description "Texttable is a Python module for creating simple ASCII
@@ -12781,14 +12585,15 @@ tables.")
 (define-public python-atomicwrites
   (package
     (name "python-atomicwrites")
-    (version "1.3.0")
+    (version "1.4.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "atomicwrites" version))
              (sha256
               (base32
-               "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
+               "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
     (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;avoid circular dependency with pytest
     (synopsis "Atomic file writes in Python")
     (description "Library for atomic file writes using platform dependent tools
 for atomic file system operations.")
@@ -12831,16 +12636,15 @@ for atomic file system operations.")
            (lambda _
              (setenv "PBR_VERSION" "3.0.1"))))))
     (native-inputs
-     `(("python-pbr" ,python-pbr)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-catchlog" ,python-pytest-catchlog)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+     (list python-pbr
+           python-pytest
+           python-pytest-catchlog
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-runner
+           python-pytest-xdist))
     (propagated-inputs
-     `(("python-inflection" ,python-inflection)
-       ("python-tinycss" ,python-tinycss)))
+     (list python-inflection python-tinycss))
     (home-page "https://github.com/blambright/qstylizer")
     (synopsis "Qt stylesheet generation utility for PyQt/PySide")
     (description "@code{qstylizer} is a Python package designed to help with
@@ -12859,7 +12663,7 @@ the construction of PyQt/PySide stylesheets.")
                "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Utilities for multithreading in Click")
     (description "This package provides utilities for multithreading in Click
 applications.")
@@ -12878,7 +12682,7 @@ applications.")
                "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Logging for click applications")
     (description "This package provides a Python library for logging Click
 applications.")
@@ -12899,7 +12703,7 @@ applications.")
     (arguments
       `(#:tests? #f)) ; no target
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Extends click.Group")
     (description "This package extends click.Group to invoke a command without
 explicit subcommand name.")
@@ -12928,13 +12732,13 @@ explicit subcommand name.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-freezegun" ,python-freezegun)
-       ("python-pretend" ,python-pretend)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-simplejson" ,python-simplejson)
-       ("python-twisted" ,python-twisted)))
+     (list python-coverage
+           python-freezegun
+           python-pretend
+           python-pytest
+           python-pytest-asyncio
+           python-simplejson
+           python-twisted))
     (home-page "https://www.structlog.org/")
     (synopsis "Structured Logging for Python")
     (description "@code{structlog} changes logging in Python by adding structure
@@ -12953,8 +12757,7 @@ to your log entries.")
                "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (synopsis "Namespace control and lazy-import mechanism")
     (description "With apipkg you can control the exported namespace of a Python
 package and greatly reduce the number of imports for your users.  It is a small
@@ -12980,11 +12783,15 @@ pure Python module that works on virtually all Python versions.")
                   (replace 'check
                     (lambda* (#:key inputs outputs tests? #:allow-other-keys)
                       (when tests?
+                        ;; Unset PYTHONDONTWRITEBYTECODE to match the
+                        ;; expectations of a test in
+                        ;; 'testing/test_gateway.py'.
+                        (unsetenv "PYTHONDONTWRITEBYTECODE")
+
                         (add-installed-pythonpath inputs outputs)
                         (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (synopsis "Rapid multi-Python deployment")
     (description "Execnet provides a share-nothing model with
 channel-send/receive communication for distributing execution across many
@@ -13013,8 +12820,7 @@ minimal and fast API targeting the following uses:
                "19574j3jwssm2dkqykih4568xqfgjsa3hcd79yl5s2vfys3qvh8g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil python-pytz))
     (synopsis "Python library for parsing iCalendar files")
     (description "The icalendar package is a parser/generator of iCalendar
 files for use with Python.")
@@ -13058,9 +12864,9 @@ files for use with Python.")
          (replace 'check
            (lambda _ (invoke "py.test" "-v"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-args" ,python-args)))
+     (list python-args))
     (home-page "https://github.com/kennethreitz/clint")
     (synopsis "Command-line interface tools")
     (description
@@ -13084,7 +12890,7 @@ output, progress bar display, and pipes.")
                 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)))
+     (list python-appdirs))
     (home-page "https://github.com/alex/rply")
     (synopsis "Parser generator for Python")
     (description
@@ -13119,14 +12925,9 @@ with a new public API, and RPython support.")
              (setenv "HOME" "/tmp")
              (invoke "nosetests"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (propagated-inputs
-     `(("python-astor" ,python-astor)
-       ("python-colorama" ,python-colorama)
-       ("python-rply" ,python-rply)
-       ("python-funcparserlib"
-        ,python-funcparserlib)))
+     (list python-astor python-colorama python-rply python-funcparserlib))
     (home-page "http://hylang.org/")
     (synopsis "Lisp frontend to Python")
     (description
@@ -13289,18 +13090,17 @@ concurrent.futures package from Python 3.2")
          "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-utils" ,python-utils)))
+     (list python-six python-utils))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-freezegun" ,python-freezegun)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-flakes" ,python-pytest-flakes)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-flake8
+           python-freezegun
+           python-pycodestyle
+           python-pytest
+           python-pytest-cache
+           python-pytest-cov
+           python-pytest-flakes
+           python-pytest-pep8
+           python-sphinx))
     (home-page "https://github.com/WoLpH/python-progressbar")
     (synopsis "Text progress bar library for Python")
     (description
@@ -13350,6 +13150,18 @@ text.")
 (define-public python2-colorama
   (package-with-python2 python-colorama))
 
+;; awscli and botocore do not accept version 0.4.4
+(define-public python-colorama-for-awscli
+  (package
+    (inherit python-colorama)
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "colorama" version))
+       (sha256
+        (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
+
 (define-public python-moto
   (package
     (name "python-moto")
@@ -13366,9 +13178,7 @@ text.")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-hardcoded-executable-names
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((bash-exec (string-append
-                               (assoc-ref inputs "bash")
-                               "/bin/sh")))
+             (let ((bash-exec (search-input-file inputs "/bin/sh")))
                (substitute* "moto/batch/models.py"
                  (("/bin/sh") bash-exec))
                (substitute* (find-files "tests" "\\.py$")
@@ -13390,36 +13200,36 @@ text.")
                         " and not test_cancel_running_job"
                         " and not test_container_overrides"))))))))
     (native-inputs
-     `(("python-flask" ,python-flask)
-       ("python-flask-cors" ,python-flask-cors)
-       ("python-freezegun" ,python-freezegun)
-       ("python-parameterized" ,python-parameterized)
-       ("python-pytest" ,python-pytest)
-       ("python-sure" ,python-sure)))
+     (list python-flask
+           python-flask-cors
+           python-freezegun
+           python-parameterized
+           python-pytest
+           python-sure))
     (inputs
      `(("bash" ,bash-minimal)))
     (propagated-inputs
-     `(("python-aws-xray-sdk" ,python-aws-xray-sdk)
-       ("python-boto" ,python-boto)
-       ("python-boto3" ,python-boto3)
-       ("python-botocore" ,python-botocore)
-       ("python-cfn-lint" ,python-cfn-lint)
-       ("python-cryptography" ,python-cryptography)
-       ("python-dateutil" ,python-dateutil)
-       ("python-docker" ,python-docker)
-       ("python-idna" ,python-idna)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jose" ,python-jose)
-       ("python-jsondiff" ,python-jsondiff)
-       ("python-mock" ,python-mock)
-       ("python-pytz" ,python-pytz)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-responses" ,python-responses)
-       ("python-six" ,python-six)
-       ("python-sshpubkeys" ,python-sshpubkeys)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-xmltodict" ,python-xmltodict)))
+     (list python-aws-xray-sdk
+           python-boto
+           python-boto3
+           python-botocore
+           python-cfn-lint
+           python-cryptography
+           python-dateutil
+           python-docker
+           python-idna
+           python-jinja2
+           python-jose
+           python-jsondiff
+           python-mock
+           python-pytz
+           python-pyyaml
+           python-requests
+           python-responses
+           python-six
+           python-sshpubkeys
+           python-werkzeug
+           python-xmltodict))
     (home-page "https://github.com/spulec/moto")
     (synopsis "Mock out the boto library")
     (description
@@ -13440,7 +13250,7 @@ text.")
        "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
    (build-system python-build-system)
    (propagated-inputs
-    `(("python-pyasn1" ,python-pyasn1)))
+    (list python-pyasn1))
    (synopsis "Pure-Python RSA implementation")
    (description "Python-RSA is a pure-Python RSA implementation.  It supports
 encryption and decryption, signing and verifying signatures, and key
@@ -13465,7 +13275,7 @@ library as well as on the command line.")
        "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (list python-setuptools-scm))
    (synopsis "Plugin and hook calling mechanism for Python")
    (description "Pluggy is an extraction of the plugin manager as used by
 Pytest but stripped of Pytest specific details.")
@@ -13511,7 +13321,7 @@ Pytest but stripped of Pytest specific details.")
     (native-inputs
      ;; XXX: Not actually used since there are no tests but required for
      ;; build.
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://plumbum.readthedocs.io")
     (synopsis "Python shell combinators library")
     (description
@@ -13532,9 +13342,9 @@ code.")
          "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)))
+     (list python-packaging))
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (home-page "https://deprecation.readthedocs.io/")
     (synopsis "Python library to handle automated deprecations")
     (description
@@ -13562,17 +13372,17 @@ that deprecated code is eventually removed.")
      ;; pytest>=2.8.0 for installation.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-filelock" ,python-filelock)
-       ("python-packaging" ,python-packaging)
-       ("python-pluggy" ,python-pluggy)
-       ("python-py" ,python-py)
-       ("python-six" ,python-six)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
-    (native-inputs
-     `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
-       ("python-pytest" ,python-pytest)  ; >= 2.3.5
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-filelock
+           python-packaging
+           python-pluggy
+           python-py
+           python-six
+           python-toml
+           python-virtualenv))
+    (native-inputs
+     (list ; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
+           python-pytest ; >= 2.3.5
+           python-setuptools-scm))
     (home-page "https://tox.readthedocs.io")
     (synopsis "Virtualenv-based automation of test activities")
     (description "Tox is a generic virtualenv management and test command line
@@ -13595,7 +13405,7 @@ servers.")
        "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
    (build-system python-build-system)
    (native-inputs
-    `(("python-nose" ,python-nose)))
+    (list python-nose))
    (synopsis "JSON Matching Expressions")
    (description "JMESPath (pronounced “james path”) is a Python library that
 allows one to declaratively specify how to extract elements from a JSON
@@ -13618,10 +13428,9 @@ document.")
         (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
     (build-system python-build-system)
     (native-inputs
-     `(("cmake" ,cmake)
-       ("python-cython" ,python-cython)))
+     (list cmake python-cython))
     (inputs
-     `(("symengine" ,symengine)))
+     (list symengine))
     (home-page "https://github.com/symengine/symengine.py")
     (synopsis "Python library providing wrappers to SymEngine")
     (description
@@ -13645,10 +13454,9 @@ manipulation library.")
     ;; fail.
     (arguments '(#:tests? #false))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-numpy" ,python-numpy)))
+     (list python-nose python-numpy))
     (home-page "https://uncertainties-python-package.readthedocs.io/")
     (synopsis "Calculations with uncertainties")
     (description
@@ -13670,7 +13478,7 @@ expression.")
          "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/newville/asteval")
     (synopsis "Minimalistic evaluator of Python expressions")
     (description
@@ -13691,12 +13499,9 @@ using the @code{ast} module")
          "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-asteval" ,python-asteval)
-       ("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-uncertainties" ,python-uncertainties)))
+     (list python-asteval python-numpy python-scipy python-uncertainties))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://lmfit.github.io/lmfit-py/")
     (synopsis "Least-Squares minimization with bounds and constraints")
     (description
@@ -13725,8 +13530,7 @@ enhancements to optimization and data fitting problems.")
      ;; subset of this library, so keep it around for now, but disable tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-requests" ,python-requests)))
+     (list python-paramiko python-requests))
     (home-page "https://github.com/boto/boto")
     (synopsis "Python interfaces for Amazon Web Services")
     (description
@@ -13754,9 +13558,7 @@ This software is unmaintained, and new projects should use @code{boto3} instead.
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-jmespath" ,python-jmespath)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-dateutil python-jmespath python-urllib3))
     (home-page "https://github.com/boto/botocore")
     (synopsis "Low-level interface to AWS")
     (description "Botocore is a Python library that provides a low-level
@@ -13787,13 +13589,9 @@ interface to the Amazon Web Services (AWS) API.")
              (delete-file-recursively "tests/integration"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-nose python-mock python-pytest))
     (propagated-inputs
-     `(("python-botocore" ,python-botocore)
-       ("python-jmespath" ,python-jmespath)
-       ("python-s3transfer" ,python-s3transfer)))
+     (list python-botocore python-jmespath python-s3transfer))
     (synopsis "AWS SDK for Python")
     (description
      "Boto3 is a Python library for writing programs that interact with
@@ -13846,7 +13644,7 @@ in pure Python.")
                #t))))
        #:tests? #f))  ; no tests provided
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (inputs
      `(("xdotool" ,xdotool)
        ("libX11" ,libx11)))
@@ -13881,10 +13679,9 @@ python-xdo for newer bindings.)")
                           (format #t "test suite not run~%"))
                       #t)))))
     (propagated-inputs
-     `(("python-markupsafe" ,python-markupsafe)))
+     (list python-markupsafe))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (home-page "https://www.makotemplates.org/")
     (synopsis "Templating language for Python")
     (description "Mako is a templating language for Python that compiles
@@ -13929,7 +13726,7 @@ server with very acceptable performance.")
          "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pydanny/whichcraft")
     (synopsis "Cross-platform cross-python shutil.which functionality")
     (description
@@ -13949,22 +13746,19 @@ designed to work across multiple versions of Python.")
         (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-catchlog" ,python-pytest-catchlog)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
-    (propagated-inputs
-     `(("python-binaryornot" ,python-binaryornot)
-       ("python-click" ,python-click)
-       ("python-future" ,python-future)
-       ("python-jinja2" ,python-jinja2)
-       ("python-jinja2-time" ,python-jinja2-time)
-       ("python-poyo" ,python-poyo)
-       ("python-requests" ,python-requests)
-       ("python-slugify" ,python-slugify)
-       ("python-text-unidecode" ,python-text-unidecode)
-       ("python-whichcraft" ,python-whichcraft)))
+     (list python-freezegun python-pytest python-pytest-catchlog
+           python-pytest-cov python-pytest-mock))
+    (propagated-inputs
+     (list python-binaryornot
+           python-click
+           python-future
+           python-jinja2
+           python-jinja2-time
+           python-poyo
+           python-requests
+           python-slugify
+           python-text-unidecode
+           python-whichcraft))
     (home-page "https://github.com/cookiecutter/cookiecutter")
     (synopsis
      "Command-line utility that creates projects from project templates")
@@ -13987,11 +13781,9 @@ project template.")
          "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-webob" ,python-webob)
-       ("python-webtest" ,python-webtest)))
+     (list python-webob python-webtest))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-cssselect" ,python-cssselect)))
+     (list python-lxml python-cssselect))
     (home-page "https://github.com/gawel/pyquery")
     (synopsis "Make jQuery-like queries on xml documents")
     (description "pyquery allows you to make jQuery queries on xml documents.
@@ -14050,11 +13842,9 @@ and provides a uniform API regardless of which JSON implementation is used.")
          "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-mock" ,python-mock)))
+     (list python-case python-pytest-sugar python-mock))
     (propagated-inputs
-     `(("python-vine" ,python-vine)))
+     (list python-vine))
     (home-page "https://github.com/celery/py-amqp")
     (synopsis
      "Low-level AMQP client for Python (fork of amqplib)")
@@ -14088,8 +13878,7 @@ alternative when librabbitmq is not available.")
          "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-twisted" ,python-twisted)))
+     (list python-six python-twisted))
     (home-page "https://github.com/txamqp/txamqp")
     (synopsis "Communicate with AMQP peers and brokers using Twisted")
     (description
@@ -14114,15 +13903,10 @@ applications.")
          "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-case" ,python-case)
-       ("python-pyro4" ,python-pyro4)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytz" ,python-pytz)))
+     (list python-mock python-case python-pyro4 python-pytest-sugar
+           python-pytz))
     (propagated-inputs
-     `(("python-anyjson" ,python-anyjson)
-       ("python-amqp" ,python-amqp)
-       ("python-redis" ,python-redis)))
+     (list python-anyjson python-amqp python-redis))
     (home-page "https://kombu.readthedocs.io")
     (synopsis "Message passing library for Python")
     (description "The aim of Kombu is to make messaging in Python as easy as
@@ -14158,8 +13942,7 @@ RabbitMQ messaging server is the most popular implementation.")
          "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest" ,python-pytest)))
+     (list python-case python-pytest))
     (home-page "https://github.com/celery/billiard")
     (synopsis
      "Python multiprocessing fork with improvements and bugfixes")
@@ -14204,12 +13987,9 @@ Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
                 "pytest>=3.0"))
              #t)))))
     (native-inputs
-     `(("python-case" ,python-case)
-       ("python-pytest" ,python-pytest)))
+     (list python-case python-pytest))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)
-       ("python-billiard" ,python-billiard)
-       ("python-kombu" ,python-kombu)))
+     (list python-pytz python-billiard python-kombu))
     (home-page "https://celeryproject.org")
     (synopsis "Distributed Task Queue")
     (description "Celery is an asynchronous task queue/job queue based on
@@ -14305,27 +14085,27 @@ ISO 8859, etc.).")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv" "-k"
-                     ;; These tests try to download online data.
-                     (string-append "not test_PolyLineROI"
-                                    " and not test_getArrayRegion_axisorder"
-                                    " and not test_getArrayRegion"
-                                    " and not test_PlotCurveItem"
-                                    " and not test_NonUniformImage_colormap"
-                                    " and not test_NonUniformImage_lut"
-                                    " and not test_ImageItem_axisorder"
-                                    " and not test_ImageItem")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-xdist" ,python-pytest-xdist)))
+                     (string-append
+                      ;; These tests try to download online data.
+                      "not test_PolyLineROI"
+                      " and not test_getArrayRegion_axisorder"
+                      " and not test_getArrayRegion"
+                      " and not test_PlotCurveItem"
+                      " and not test_NonUniformImage_colormap"
+                      " and not test_NonUniformImage_lut"
+                      " and not test_ImageItem_axisorder"
+                      " and not test_ImageItem"
+                      ;; The test_reload test fails and suggests adding
+                      ;; "--assert=plain" to the pytest command, but it
+                      ;; doesn't solve the failure.
+                      " and not test_reload")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov python-pytest-xdist))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-numpy" ,python-numpy)
-       ("python-pyopengl" ,python-pyopengl)
-       ("python-scipy" ,python-scipy)
-       ("python-pyqt" ,python-pyqt)))
+     (list python-h5py python-numpy python-pyopengl python-scipy
+           python-pyqt))
     (home-page "http://www.pyqtgraph.org")
     (synopsis "Scientific graphics and GUI library for Python")
     (description
@@ -14358,10 +14138,9 @@ applications.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (home-page "https://github.com/CabbageDevelopment/qasync")
     (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
     (description
@@ -14430,8 +14209,7 @@ main process so that they are handled correctly.")
      '(;; The test suite relies on some non-portable Windows interfaces.
        #:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pyicu" ,python-pyicu)))
+     (list python-dateutil python-pyicu))
     (synopsis "Parse and generate vCard and vCalendar files")
     (description "Vobject is intended to be a full featured Python package for
 parsing and generating vCard and vCalendar files.  Currently, iCalendar files
@@ -14455,7 +14233,7 @@ way.")
                (base32
                 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
     (build-system python-build-system)
-    (native-inputs `(("python-pytest" ,python-pytest-6)))
+    (native-inputs (list python-pytest-6))
     (home-page "https://software.clapper.org/munkres/")
     (synopsis "Implementation of the Munkres algorithm")
     (description "The Munkres module provides an implementation of the Munkres
@@ -14463,9 +14241,6 @@ algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
 useful for solving the Assignment Problem.")
     (license license:bsd-3)))
 
-(define-public python2-munkres
-  (package-with-python2 python-munkres))
-
 (define-public python-whoosh
   (package
     (name "python-whoosh")
@@ -14480,7 +14255,7 @@ useful for solving the Assignment Problem.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/mchaput/whoosh")
     (synopsis "Full text indexing, search, and spell checking library")
     (description
@@ -14508,13 +14283,10 @@ checking library.")
           (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
     (build-system python-build-system)
     (inputs
-      `(("python-chardet" ,python-chardet)))
+      (list python-chardet))
     (native-inputs
-      `(("python-check-manifest" ,python-check-manifest)
-        ("python-flake8" ,python-flake8)
-        ("python-pytest" ,python-pytest)
-        ("python-pytest-cov" ,python-pytest-cov)
-        ("python-pytest-dependency" ,python-pytest-dependency)))
+      (list python-check-manifest python-flake8 python-pytest
+            python-pytest-cov python-pytest-dependency))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -14597,8 +14369,7 @@ anymore.")
     (arguments
      `(#:python ,python-2))
     (propagated-inputs
-     `(("python2-scandir" ,python2-scandir)
-       ("python2-six" ,python2-six)))
+     (list python2-scandir python2-six))
     (home-page "https://pypi.org/project/pathlib2/")
     (synopsis "Object-oriented file system paths - backport of standard
 pathlib module")
@@ -14649,7 +14420,7 @@ ambiguities (forward vs. backward slashes, etc.).
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv" "jellyfish/test.py")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jamesturk/jellyfish")
     (synopsis "Approximate and phonetic matching of strings")
     (description "Jellyfish uses a variety of string comparison and phonetic
@@ -14676,7 +14447,7 @@ encoding algorithms to do fuzzy string matching.")
      `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
        #:python ,python-2))
     (native-inputs
-     `(("python2-unittest2" ,python2-unittest2)))
+     (list python2-unittest2))
     (home-page "https://github.com/jdunck/python-unicodecsv")
     (synopsis "Unicode CSV module for Python 2")
     (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
@@ -14716,12 +14487,9 @@ module, adding support for Unicode strings.")
                          (find-files out "\\.gz$"))
                #t))))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-cryptography" ,python-cryptography)
-       ("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-chardet python-cryptography python-sortedcontainers))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-tox" ,python-tox)))
+     (list python-nose python-tox))
     (home-page "https://github.com/pdfminer/pdfminer.six")
     (synopsis "PDF parser and analyzer")
     (description "@code{pdfminer.six} is a community maintained fork of
@@ -14759,8 +14527,8 @@ can also be used to get the exact location, font or color of the text.")
            (lambda* (#:key inputs tests? #:allow-other-keys)
              (when tests?
                (invoke "pytest" "-vv")))))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
-    (inputs `(("libarchive" ,libarchive)))
+    (native-inputs (list python-pytest))
+    (inputs (list libarchive))
     (home-page "https://github.com/markokr/rarfile")
     (synopsis "RAR archive reader for Python")
     (description "This is Python module for RAR archive reading.  The interface
@@ -14789,11 +14557,8 @@ is made as zipfile like as possible.")
                                  "tests")
                (invoke "python" "-m" "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-commonmark" ,python-commonmark)
-       ("python-pygments" ,python-pygments)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-attrs python-colorama python-commonmark python-pygments
+           python-typing-extensions))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("tests"
@@ -14819,31 +14584,19 @@ syntax highlighting, markdown and more to the terminal.")
 (define-public python-magic
   (package
     (name "python-magic")
-    (version "0.4.15")
+    (version "0.4.24")
+    (home-page "https://github.com/ahupp/python-magic")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-magic" version))
+       (method git-fetch)
+       (uri (git-reference (url home-page) (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
-       (file-name (string-append name "-" version "-checkout"))))
+         "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
     (build-system python-build-system)
     (arguments
-     ;; The tests are unreliable, so don't run them.  The tests fail
-     ;; under Python3 because they were written for Python2 and
-     ;; contain import statements that do not work in Python3.  One of
-     ;; the tests fails under Python2 because its assertions are
-     ;; overly stringent; it relies on comparing output strings which
-     ;; are brittle and can change depending on the version of
-     ;; libmagic being used and the system on which the test is
-     ;; running.  In my case, under GuixSD 0.10.0, only one test
-     ;; failed, and it seems to have failed only because the version
-     ;; of libmagic that is packaged in Guix outputs a slightly
-     ;; different (but not wrong) string than the one that the test
-     ;; expected.
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   ;; Replace a specific method call with a hard-coded
                   ;; path to the necessary libmagic.so file in the
                   ;; store.  If we don't do this, then the method call
@@ -14853,24 +14606,22 @@ syntax highlighting, markdown and more to the terminal.")
                   (add-before 'build 'hard-code-path-to-libmagic
                     (lambda* (#:key inputs #:allow-other-keys)
                       (let ((file (assoc-ref inputs "file")))
-                        (substitute* "magic.py"
-                          (("ctypes.util.find_library\\('magic'\\)")
-                           (string-append "'" file "/lib/libmagic.so'")))
-                        #t)))
-                  (add-before 'install 'disable-egg-compression
-                    (lambda _
-                      (let ((port (open-file "setup.cfg" "a")))
-                        (display "\n[easy_install]\nzip_ok = 0\n"
-                                 port)
-                        (close-port port)
-                        #t))))))
+                        (substitute* "magic/loader.py"
+                          (("find_library\\('magic'\\)")
+                           (string-append "'" file "/lib/libmagic.so'"))))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      ;; The test suite mandates this variable.
+                      (setenv "LC_ALL" "en_US.UTF-8")
+                      (if tests?
+                          (invoke "python" "./test/test.py")
+                          (format #t "test suite not run~%")))))))
+    (native-inputs
+     (list which))
     (inputs
      ;; python-magic needs to be able to find libmagic.so.
-     `(("file" ,file)))
-    (home-page
-     "https://github.com/ahupp/python-magic")
-    (synopsis
-     "File type identification using libmagic")
+     (list file))
+    (synopsis "File type identification using libmagic")
     (description
      "This module uses ctypes to access the libmagic file type
 identification library.  It makes use of the local magic database and
@@ -14901,15 +14652,15 @@ the same purpose: to provide Python bindings for libmagic.")
      `(#:python ,python-2
        #:tests? #f))
     (propagated-inputs
-     `(("python2-dateutil" ,python2-dateutil)
-       ;; The python-file package also provides a magic.py module.
-       ;; This is an unfortunate state of affairs; however, s3cmd
-       ;; fails to install if it cannot find specifically the
-       ;; python-magic package.  Thus we include it, instead of using
-       ;; python-file.  Ironically, s3cmd sometimes works better
-       ;; without libmagic bindings at all:
-       ;; https://github.com/s3tools/s3cmd/issues/198
-       ("python2-magic" ,python2-magic)))
+     (list python2-dateutil
+           ;; The python-file package also provides a magic.py module.
+           ;; This is an unfortunate state of affairs; however, s3cmd
+           ;; fails to install if it cannot find specifically the
+           ;; python-magic package.  Thus we include it, instead of using
+           ;; python-file.  Ironically, s3cmd sometimes works better
+           ;; without libmagic bindings at all:
+           ;; https://github.com/s3tools/s3cmd/issues/198
+           python2-magic))
     (home-page "https://s3tools.org/s3cmd")
     (synopsis "Command line tool for S3-compatible storage services")
     (description
@@ -14933,9 +14684,9 @@ CloudFront content delivery network.")
             "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-nose" ,python-nose)))
+      (list python-nose))
     (inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:phases
         (modify-phases %standard-phases
@@ -15026,10 +14777,9 @@ to support both Python 2 and Python 3 with minimal overhead.")
             "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-cython" ,python-cython)
-        ("python-sphinx" ,python-sphinx)))
+      (list python-cython python-sphinx))
     (inputs
-      `(("pari-gp" ,pari-gp)))
+      (list pari-gp))
     (arguments
      `(#:modules ((guix build python-build-system)
                   ((guix build gnu-build-system) #:prefix gnu:)
@@ -15088,8 +14838,7 @@ respectively.")
                                    "            line += ' -L" pcre "/lib"
                                    " -L " libgc "/lib'")))
                   #t))))))
-  (inputs `(("pcre" ,pcre)
-            ("libgc" ,libgc)))
+  (inputs (list pcre libgc))
   (home-page "https://shedskin.github.io/")
   (synopsis "Experimental Python-2 to C++ Compiler")
   (description (string-append "This is an experimental compiler for a subset of
@@ -15128,7 +14877,7 @@ to occurrences in strings and comments.")
         (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
     (build-system python-build-system)
     (inputs
-     `(("file" ,file)))
+     (list file))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -15165,16 +14914,9 @@ own code, responding to click events and updating clock every second.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Upstream runs tests after installation and the package itself
-             ;; resides in a subdirectory. Extend PYTHONPATH so it will be
-             ;; found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" "tests" "README.rst"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-pytest python-six))
     (home-page "https://github.com/ionelmc/python-tblib")
     (synopsis "Traceback serialization library")
     (description
@@ -15256,10 +14998,9 @@ are synchronized with data exchanges on \"channels\".")
          "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-graphviz" ,python-graphviz)))
+     (list python-graphviz))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("graphviz" ,graphviz)))
+     (list python-mock graphviz))
     (home-page "https://mg.pov.lt/objgraph/")
     (synopsis "Draw Python object reference graphs with graphviz")
     (description
@@ -15364,13 +15105,6 @@ graphviz.")
                                     (string-join disabled-tests "\n")))))))
                   (replace 'check
                     (lambda _
-                      ;; Make sure the build directory is on PYTHONPATH.
-                      (setenv "PYTHONPATH"
-                              (string-append
-                               (getenv "PYTHONPATH") ":"
-                               (getcwd) "/build/"
-                               (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
                       ;; Use the build daemons configured number of workers.
                       (setenv "NWORKERS" (number->string (parallel-job-count)))
 
@@ -15382,14 +15116,11 @@ graphviz.")
        ("python-zope.event" ,python-zope-event)
        ("python-zope.interface" ,python-zope-interface)))
     (native-inputs
-     `(("python-six" ,python-six)
-
-       ;; For tests.
-       ("python-dnspython" ,python-dnspython)
-       ("python-psutil" ,python-psutil)))
+     (list python-six
+           ;; For tests.
+           python-dnspython python-psutil))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("libev" ,libev)))
+     (list c-ares libev))
     (home-page "https://www.gevent.org/")
     (synopsis "Coroutine-based network library")
     (description
@@ -15428,14 +15159,21 @@ format.")
                 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f))                    ; FIXME: some tests fail
-    (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-incremental" ,python-incremental)
-       ("python-hyperlink" ,python-hyperlink)
-       ("python-constantly" ,python-constantly)
-       ("python-automat" ,python-automat)))
+     '(#:tests? #f                    ; FIXME: some tests fail
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove scripts, because they depend on [conch]
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "src/twisted/python/_setup.py"
+               (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
+    (propagated-inputs
+     (list python-zope-interface
+           python-pyhamcrest
+           python-incremental
+           python-hyperlink
+           python-constantly
+           python-automat))
     (home-page "https://twistedmatrix.com/")
     (synopsis "Asynchronous networking framework written in Python")
     (description
@@ -15475,13 +15213,12 @@ focus on event-based network programming and multiprotocol integration.")
                     (lambda _
                       (invoke "nosetests"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-
-       ;; These are optional at runtime, and provided here for tests.
-       ("python-gevent" ,python-gevent)
-       ("python-tornado" ,python-tornado)
-       ("python-twisted" ,python-twisted)))
+     (list python-mock
+           python-nose
+           ;; These are optional at runtime, and provided here for tests.
+           python-gevent
+           python-tornado
+           python-twisted))
     (home-page "https://pika.readthedocs.org")
     (synopsis "Pure Python AMQP Client Library")
     (description
@@ -15547,7 +15284,7 @@ data in Python.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; XXX: needs zookeeper
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://kazoo.readthedocs.org")
     (synopsis "High-level Zookeeper client library")
     (description
@@ -15572,11 +15309,9 @@ programming errors.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-kazoo" ,python-kazoo)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-gevent python-kazoo python-tabulate))
     (inputs
-     `(("librdkafka" ,librdkafka)))
+     (list librdkafka))
     (home-page "https://pykafka.readthedocs.io/")
     (synopsis "Apache Kafka client for Python")
     (description
@@ -15640,7 +15375,8 @@ etc.")
               (uri (pypi-uri "chai" version))
               (sha256
                (base32
-                "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
+                "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
+              (patches (search-patches "python-chai-drop-python2.patch"))))
     (build-system python-build-system)
     (home-page "https://github.com/agoragames/chai")
     (synopsis "Mocking framework for Python")
@@ -15649,9 +15385,6 @@ etc.")
 objects, patterned after the Mocha library for Ruby.")
     (license license:bsd-3)))
 
-(define-public python2-chai
-  (package-with-python2 python-chai))
-
 (define-public python-inflection
   (package
     (name "python-inflection")
@@ -15664,7 +15397,7 @@ objects, patterned after the Mocha library for Ruby.")
                "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/jpvanhal/inflection")
     (synopsis "Python string transformation library")
     (description
@@ -15709,15 +15442,10 @@ Wikipedia code samples at
                 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
     (build-system python-build-system)
     (native-inputs
-     `( ;; For testing
-       ("python-mock" ,python-mock)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest" ,python-pytest)))
+     (list ;; For testing
+           python-mock python-pytest-mock python-pytest))
     (propagated-inputs
-     `(("python-backpack" ,python-backpack)
-       ("python-clikit" ,python-clikit)
-       ("python-pastel" ,python-pastel)
-       ("python-pylev" ,python-pylev)))
+     (list python-backpack python-clikit python-pastel python-pylev))
     (home-page "https://github.com/sdispater/cleo")
     (synopsis "Command-line arguments library for Python")
     (description
@@ -15740,8 +15468,7 @@ docstring and colored output.")
         (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-pyyaml))
     (home-page "https://github.com/sdispater/tomlkit")
     (synopsis "Style-preserving TOML library")
     (description
@@ -15794,7 +15521,7 @@ running in.")
          "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
        (patches (search-patches "python-memcached-syntax-warnings.patch"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page
      "https://github.com/linsomniac/python-memcached")
     (synopsis "Pure python memcached client")
@@ -15818,9 +15545,7 @@ more, possibly remote, memcached servers.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; no test in the PyPI tarball
     (propagated-inputs
-     `(("python-crashtest" ,python-crashtest)
-       ("python-pastel" ,python-pastel)
-       ("python-pylev" ,python-pylev)))
+     (list python-crashtest python-pastel python-pylev))
     (home-page "https://github.com/sdispater/clikit")
     (synopsis "Group of utilities to build command line interfaces")
     (description
@@ -15878,15 +15603,10 @@ strings require only one extra byte in addition to the strings themselves.")
            (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
                              "pytest"))))))
     (native-inputs
-     `(("memcached" ,memcached)
-       ("python-fakeredis" ,python-fakeredis)
-       ("python-flexmock" ,python-flexmock)
-       ("python-pifpaf" ,python-pifpaf)
-       ("python-pytest" ,python-pytest)))
+     (list memcached python-fakeredis python-flexmock python-pifpaf
+           python-pytest))
     (propagated-inputs
-     `(("python-memcached" ,python-memcached)
-       ("python-msgpack-python" ,python-msgpack-python)
-       ("python-redis" ,python-redis)))
+     (list python-memcached python-msgpack-python python-redis))
     (home-page "https://github.com/sdispater/cachy")
     (synopsis "Simple yet effective caching library")
     (description
@@ -15922,23 +15642,23 @@ database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
                (("packaging>=20.4,<21.0") "packaging>=20.0,<21.0"))
              #t)))))
     (propagated-inputs
-     `(("python-cachecontrol" ,python-cachecontrol)
-       ("python-cachy" ,python-cachy)
-       ("python-cleo" ,python-cleo)
-       ("python-clikit" ,python-clikit)
-       ("python-html5lib" ,python-html5lib)
-       ("python-keyring" ,python-keyring)
-       ("python-msgpack-transitional" ,python-msgpack-transitional)
-       ("python-packaging" ,python-packaging)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pip" ,python-pip)
-       ("python-pkginfo" ,python-pkginfo)
-       ("python-poetry-core" ,python-poetry-core)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
-       ("python-shellingham" ,python-shellingham)
-       ("python-tomlkit" ,python-tomlkit)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-cachecontrol
+           python-cachy
+           python-cleo
+           python-clikit
+           python-html5lib
+           python-keyring
+           python-msgpack-transitional
+           python-packaging
+           python-pexpect
+           python-pip
+           python-pkginfo
+           python-poetry-core
+           python-requests
+           python-requests-toolbelt-0.9.1
+           python-shellingham
+           python-tomlkit
+           python-virtualenv))
     (home-page "https://python-poetry.org")
     (synopsis "Python dependency management and packaging made easy")
     (description "Poetry is a tool for dependency management and packaging
@@ -15988,24 +15708,19 @@ some degree most natural languages too.")
              (delete-file "libcst/tests/test_pyre_integration.py")
              (delete-file "libcst/codemod/tests/test_codemod_cli.py")
              (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
-             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
-             #t))
+             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
          (add-before 'check 'generate-test-data
            (lambda _
-             (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "libcst.codegen.generate" "visitors")
              (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "unittest")
-             #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest")))))))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-isort" ,python-isort)))
+     (list python-black python-isort))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)
-       ("python-typing-inspect" ,python-typing-inspect)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-typing-extensions python-typing-inspect python-pyyaml))
     (home-page "https://github.com/Instagram/LibCST")
     (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
     (description
@@ -16023,6 +15738,14 @@ feels like an AST.")
                    ;; libcst/_add_slots.py
                    license:asl2.0))))
 
+(define-public python-libcst-minimal
+  (hidden-package
+   (package
+     (inherit python-libcst)
+     (name "python-libcst-minimal")
+     (arguments '(#:tests? #f))
+     (native-inputs '()))))
+
 (define-public python-typing-inspect
   (package
     (name "python-typing-inspect")
@@ -16032,11 +15755,11 @@ feels like an AST.")
               (uri (pypi-uri "typing_inspect" version))
               (sha256
                (base32
-                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
+                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
+              (patches (search-patches "python-typing-inspect-fix.patch"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy-extensions" ,python-mypy-extensions)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-mypy-extensions python-typing-extensions))
     (home-page "https://github.com/ilevkivskyi/typing_inspect")
     (synopsis "API for inspection of types in the Python @code{typing} module")
     (description
@@ -16055,7 +15778,7 @@ inspection of types defined in the Python standard typing module.")
                (base32
                 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (build-system python-build-system)
     (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
     (synopsis "Lazy object proxy for python")
@@ -16078,8 +15801,21 @@ until the object is actually required, and caches the result of said call.")
                (base32
                 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
-    (arguments '(#:tests? #f))          ; XXX: requires internet access
+    (arguments
+     `(#:tests? #f                      ; XXX: requires internet access
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-getprotobyname-calls
+           ;; These calls are problematic in the build environment as there is
+           ;; no /etc/protocols.  This breaks the sanity-check phase of any
+           ;; package depnding on this one.
+           (lambda _
+             (substitute* "dns/rdtypes/IN/WKS.py"
+               (("socket.getprotobyname\\('tcp'\\)")
+                "6")
+               (("socket.getprotobyname\\('udp'\\)")
+                "17")))))))
+    (native-inputs (list unzip))
     (home-page "https://www.dnspython.org")
     (synopsis "DNS toolkit for Python")
     (description
@@ -16155,8 +15891,7 @@ simple, lightweight implementation.")
                (("dnspython3") "dnspython"))
              #t)))))
     (propagated-inputs
-     `(("python-dnspython" ,python-dnspython)
-       ("python-idna" ,python-idna)))
+     (list python-dnspython python-idna))
     (home-page "https://github.com/JoshData/python-email-validator")
     (synopsis "Email address validation library for Python")
     (description
@@ -16191,7 +15926,7 @@ simple, lightweight implementation.")
                                       "and not test_125 "
                                       "and not test_131"))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/hamstah/ukpostcodeparser")
     (synopsis "UK Postcode parser for Python")
     (description
@@ -16219,43 +15954,20 @@ parsing UK postcodes.")
          (replace 'check
            (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
     (native-inputs
-     `( ;; For testing
-       ("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest-6)
-       ("python-random2" ,python-random2)
-       ("python-ukpostcodeparser" ,python-ukpostcodeparser)
-       ("python-validators" ,python-validators)))
+     (list ;; For testing
+           python-freezegun
+           python-pytest-6
+           python-random2
+           python-ukpostcodeparser
+           python-validators))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-text-unidecode" ,python-text-unidecode)))
+     (list python-dateutil python-text-unidecode))
     (home-page "https://github.com/joke2k/faker")
     (synopsis "Python package that generates fake data")
     (description
      "Faker is a Python package that generates fake data such as names,
 addresses, and phone numbers.")
-    (license license:expat)
-    (properties `((python2-variant . ,(delay python2-faker))))))
-
-;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
-(define-public python2-faker
-  (let ((base (package-with-python2 (strip-python2-variant
-                                     python-faker))))
-    (package
-      (inherit base)
-      (version "3.0.1")
-      (source (origin
-                (method url-fetch)
-                (uri (pypi-uri "Faker" version))
-                (sha256
-                 (base32
-                  "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
-      (native-inputs
-       `(("python-mock" ,python2-mock)
-         ,@(package-native-inputs base)))
-      (propagated-inputs
-       `(("python2-ipaddress" ,python2-ipaddress)
-         ("python2-six" ,python2-six)
-         ,@(package-propagated-inputs base))))))
+    (license license:expat)))
 
 (define-public python-pyaml
   (package
@@ -16269,9 +15981,9 @@ addresses, and phone numbers.")
                 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unidecode" ,python-unidecode)))
+     (list python-unidecode))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/mk-fg/pretty-yaml")
     (synopsis "YAML pretty-print library for Python")
     (description
@@ -16295,10 +16007,9 @@ YAML-serialized data.")
          "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-nose" ,python-nose)))
+     (list python-pytest python-nose python-toml))
     (propagated-inputs
-     `(("python-simplejson" ,python-simplejson)))
+     (list python-simplejson))
     (home-page "https://github.com/sdispater/backpack")
     (synopsis "Utilities for working with Python collections")
     (description "Backpack provides some useful utilities for working with
@@ -16331,9 +16042,9 @@ collections of data.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
     (synopsis "Library for building command line interfaces in Python")
     (description
@@ -16357,9 +16068,7 @@ characters, mouse support, and auto suggestions.")
         (base32
          "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)
-       ("python-six" ,python-six)
-       ("python-pygments" ,python-pygments)))
+     (list python-wcwidth python-six python-pygments))
     (properties '())))
 
 (define-public python2-prompt-toolkit
@@ -16385,10 +16094,15 @@ characters, mouse support, and auto suggestions.")
     (version "0.18.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "jedi" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/davidhalter/jedi")
+             (commit (string-append "v" version))
+             (recursive? #true)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1as9v6kv49j11al2mzjh72dd5mxxnfcjv0z5dbmwi6aalqk7c4vl"))))
+        (base32
+         "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -16400,12 +16114,9 @@ characters, mouse support, and auto suggestions.")
                (invoke "python" "-m" "pytest" "-vv"))
              #t)))))
     (native-inputs
-     `(("python-docopt" ,python-docopt)
-       ("python-colorama" ,python-colorama)
-       ("python-django" ,python-django-2.2)
-       ("python-pytest" ,python-pytest)))
+     (list python-colorama python-docopt python-django-2.2 python-pytest))
     (propagated-inputs
-     `(("python-parso" ,python-parso)))
+     (list python-parso))
     (home-page "https://github.com/davidhalter/jedi")
     (synopsis "Autocompletion and static analysis library for Python")
     (description
@@ -16413,8 +16124,8 @@ characters, mouse support, and auto suggestions.")
 Development Environments (@dfn{IDE}s) and text editors.  It understands Python
 on a deeper level than many other static analysis frameworks for Python.
 
-Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
-well.")
+Jedi understands docstrings and you can use Jedi autocompletion in your REPL
+as well.")
     (license license:expat)))
 
 (define-public ptpython
@@ -16431,18 +16142,15 @@ well.")
     (arguments
      `(#:tests? #f)) ;there are no tests
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-black" ,python-black)
-       ("python-jedi" ,python-jedi)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pygments" ,python-pygments)))
+     (list python-appdirs python-black python-jedi python-prompt-toolkit
+           python-pygments))
     (home-page "https://github.com/jonathanslenders/ptpython")
     (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
     (description
      "ptpython is a Python read-eval-print loop with IDE-like features.
-It supports syntax highlighting, multiline editing, autocompletion, mouse,
-color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
-etc.")
+     It supports syntax highlighting, multiline editing, autocompletion, mouse,
+     color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
+     etc.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay ptpython-2))))))
 
@@ -16485,15 +16193,13 @@ etc.")
     (arguments
      `(#:test-target "pytest"))
     (native-inputs
-     `(("python-easyprocess" ,python-easyprocess)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-easyprocess python-pytest python-pytest-runner))
     (home-page "https://github.com/ponty/entrypoint2")
     (synopsis "Command-line interface for Python modules")
     (description
      "@code{entrypoint2} is an easy to use command-line interface for Python
-modules based on @code{argparse}.  It translates function signature and
-documentation to argparse configuration.")
+     modules based on @code{argparse}.  It translates function signature and
+     documentation to argparse configuration.")
     (license license:bsd-3)))
 
 (define-public python-pyvirtualdisplay
@@ -16512,13 +16218,10 @@ documentation to argparse configuration.")
      ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
      `(#:tests? #f))
     (native-inputs
-     `(("python-entrypoint2" ,python-entrypoint2)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-entrypoint2 python-psutil python-pytest
+           python-pytest-runner))
     (propagated-inputs
-     `(("python-easyprocess" ,python-easyprocess)
-       ("python-pillow" ,python-pillow)))
+     (list python-easyprocess python-pillow))
     (home-page "https://github.com/ponty/pyvirtualdisplay")
     (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
     (description
@@ -16540,21 +16243,25 @@ documentation to argparse configuration.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-tests
+           ;; See https://github.com/torproject/stem/issues/56
+           (lambda _
+             (substitute* "run_tests.py"
+               (("test\\.task\\.MOCK_VERSION,")
+                ""))))
          (replace 'check
            (lambda _
              (invoke "./run_tests.py" "--unit")
              #t)))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)))
+     (list python-mock python-pycodestyle python-pyflakes))
     (home-page "https://stem.torproject.org/")
     (synopsis
      "Python controller library that allows applications to interact with Tor")
     (description
      "Stem is a Python controller library for Tor.  With it you can use Tor's
-control protocol to script against the Tor process and read descriptor data
-relays publish about themselves.")
+     control protocol to script against the Tor process and read descriptor data
+     relays publish about themselves.")
     (license license:lgpl3)))
 
 (define-public python-pyserial
@@ -16580,8 +16287,8 @@ relays publish about themselves.")
       "https://github.com/pyserial/pyserial")
     (synopsis "Python Serial Port Bindings")
     (description "@code{pyserial} provide serial port bindings for Python.  It
-supports different byte sizes, stop bits, parity and flow control with RTS/CTS
-and/or Xon/Xoff.  The port is accessed in RAW mode.")
+     supports different byte sizes, stop bits, parity and flow control with RTS/CTS
+     and/or Xon/Xoff.  The port is accessed in RAW mode.")
     (license license:bsd-3)))
 
 (define-public python2-pyserial
@@ -16598,17 +16305,17 @@ and/or Xon/Xoff.  The port is accessed in RAW mode.")
        (sha256
         (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-pyserial" ,python-pyserial)))
+    (propagated-inputs (list python-pyserial))
     (home-page "https://github.com/pyserial/pyserial-asyncio")
     (synopsis "Pyserial asynchronous I/O extension")
     (description "This package extends Pyserial with asynchronous I/O
-support.")
+     support.")
     (license license:bsd-3)))
 
 (define-public python-pymodbus
   (package
     (name "python-pymodbus")
-    (version "2.5.2")
+    (version "2.5.3")
     (source
      (origin
        (method git-fetch)
@@ -16618,61 +16325,92 @@ support.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "009blvzi56434f0qfjdg3r8q1flb1jcx2786wi0i0xf81025z9cf"))))
+         "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'disable-problematic-tests
                     (lambda _
-                      ;; The following test module rely on Python's own 'test'
-                      ;; module, which is not distributed in the Python
+                      ;; The following test modules rely on Python's own
+                      ;; 'test' module, which is not distributed in the Python
                       ;; package of Guix.
                       (delete-file "test/test_client_async_asyncio.py")
-                      (delete-file "test/test_client_sync_diag.py")))
+                      (delete-file "test/test_client_sync_diag.py")
+                      ;; The following test module requires the asynctest
+                      ;; library, abandoned without support for Python 3.9+
+                      ;; (see:
+                      ;; https://github.com/riptideio/pymodbus/issues/681).
+                      (delete-file "test/test_server_asyncio.py")))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (when tests?
                         (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-asynctest" ,python-asynctest)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-redis" ,python-redis)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-tornado" ,python-tornado)
-       ("python-twisted" ,python-twisted)))
-    (propagated-inputs
-     `(("python-pyserial" ,python-pyserial)
-       ("python-six" ,python-six)
-       ;; For the REPL.
-       ("python-aiohttp" ,python-aiohttp)
-       ("python-click" ,python-click)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-pygments" ,python-pygments)
-       ("python-pyserial-asyncio" ,python-pyserial-asyncio)))
+     (list python-mock
+           python-pytest
+           python-redis
+           python-sqlalchemy
+           python-tornado
+           python-twisted))
+    (propagated-inputs
+     (list python-pyserial
+           python-six
+           ;; For the REPL.
+           python-aiohttp
+           python-click
+           python-prompt-toolkit
+           python-pygments
+           python-pyserial-asyncio))
     (home-page "https://github.com/riptideio/pymodbus/")
     (synopsis "Modbus protocol stack in Python")
     (description "Pymodbus is a full Modbus protocol implementation using
-@code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
-communications core.  It includes the following @emph{client} features:
-@itemize
-@item full read/write protocol on discrete and register
-@item most of the extended protocol (diagnostic/file/pipe/setting/information)
-@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
-@item asynchronous and synchronous versions
-@item payload builder/decoder utilities
-@item pymodbus read eval print loop (REPL).
-@end itemize
-It also includes the following @emph{server} features:
-@itemize
-@item can function as a fully implemented Modbus server
-@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
-@item asynchronous and synchronous versions
-@item full server control context (device information, counters, etc)
-@item a number of backing contexts (database, redis, sqlite, a slave device).
-@end itemize")
+     @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
+     communications core.  It includes the following @emph{client} features:
+     @itemize
+     @item full read/write protocol on discrete and register
+     @item most of the extended protocol (diagnostic/file/pipe/setting/information)
+     @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
+     @item asynchronous and synchronous versions
+     @item payload builder/decoder utilities
+     @item pymodbus read eval print loop (REPL).
+     @end itemize
+     It also includes the following @emph{server} features:
+     @itemize
+     @item can function as a fully implemented Modbus server
+     @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
+     @item asynchronous and synchronous versions
+     @item full server control context (device information, counters, etc)
+     @item a number of backing contexts (database, redis, sqlite, a slave device).
+     @end itemize")
     (license license:bsd-3)))
 
+(define-public python-kivy-garden
+  (package
+    (name "python-kivy-garden")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "kivy-garden" version))
+       (sha256
+        (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'remove-bat-file
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (delete-file
+                         (string-append out "/bin/garden.bat"))))))))
+    (propagated-inputs
+     (list python-requests))
+    (home-page "https://github.com/kivy-garden/garden")
+    (synopsis "Garden tool for Kivy flowers")
+    (description
+     "This package provides the @command{garden} command to install packages
+for Kivy, the multitouch application platform.")
+    (license license:expat)))
+
 (define-public python-kivy
   (package
     (name "python-kivy")
@@ -16693,23 +16431,25 @@ It also includes the following @emph{server} features:
          (add-after 'patch-generated-file-shebangs 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "KIVY_SDL2_PATH"
-                     (string-append (assoc-ref inputs "sdl-union")
-                                    "/include/SDL2"))
-             #t)))))
+                     (search-input-directory inputs "/include/SDL2"))))
+         (add-before 'sanity-check 'set-home
+           (lambda _
+             ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
+             (setenv "HOME" (getcwd)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)))
+     (list pkg-config python-cython))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("mesa" ,mesa)
-       ("sdl-union"
-        ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
+     (list gstreamer
+           mesa
+           (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
+           python-docutils
+           python-kivy-garden
+           python-pygments))
     (home-page "https://kivy.org")
-    (synopsis
-     "Multitouch application framework")
+    (synopsis "Multitouch application framework")
     (description
-     "A software library for rapid development of
-hardware-accelerated multitouch applications.")
+     "Kivy is a software library for rapid development of hardware-accelerated
+multitouch applications.")
     (license license:expat)))
 
 (define-public python2-kivy
@@ -16737,12 +16477,11 @@ hardware-accelerated multitouch applications.")
               (("average_size=512") ""))
              #t)))))
     (propagated-inputs
-     `(("python-chardet" ,python-chardet)
-       ("python-hypothesis" ,python-hypothesis)))
+     (list python-chardet python-hypothesis))
     (home-page "https://github.com/audreyr/binaryornot")
     (synopsis "Package to check if a file is binary or text")
     (description "Ultra-lightweight pure Python package to check if a file is
-binary or text.")
+     binary or text.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay python2-binaryornot))))))
 
@@ -16770,20 +16509,15 @@ binary or text.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
+         (add-before 'check 'set-home
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/src/"
-                      ":" (getenv "PYTHONPATH")))
              (setenv "HOME" ""))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/ReFirmLabs/binwalk")
     (synopsis "Firmware analysis tool")
     (description "Binwalk is a tool for analyzing, reverse engineering, and
-extracting firmware images")
+     extracting firmware images")
     (license license:expat)))
 
 (define-public python-binwalk
@@ -16805,18 +16539,15 @@ extracting firmware images")
        ;; TODO Try packaging these resources.
        #:tests? #f))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-joblib" ,python-joblib)
-       ("python-regex" ,python-regex)
-       ("python-tqdm" ,python-tqdm)))
+     (list python-click python-joblib python-regex python-tqdm))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://nltk.org/")
     (synopsis "Natural Language Toolkit")
     (description "It provides interfaces to over 50 corpora and lexical
-resources such as WordNet, along with a suite of text processing libraries
-for classification, tokenization, stemming, tagging, parsing, and semantic
-reasoning, wrappers for natural language processing libraries.")
+     resources such as WordNet, along with a suite of text processing libraries
+     for classification, tokenization, stemming, tagging, parsing, and semantic
+     reasoning, wrappers for natural language processing libraries.")
     (license license:asl2.0)))
 
 ;; Versions >=3.5 breaks backward-compatibility,
@@ -16831,7 +16562,7 @@ reasoning, wrappers for natural language processing libraries.")
        (uri (pypi-uri "nltk" version ".zip"))
        (sha256
         (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
-    (propagated-inputs `(("python-six" ,python-six)))))
+    (propagated-inputs (list python-six))))
 
 (define-public python2-nltk
   (package-with-python2 python-nltk))
@@ -16848,7 +16579,7 @@ reasoning, wrappers for natural language processing libraries.")
                 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-certifi" ,python-certifi)))
+     (list python-certifi))
     (home-page "https://github.com/mongodb/mongo-python-driver")
     (synopsis "Python driver for MongoDB")
     (description "Python driver for MongoDB.")
@@ -16872,13 +16603,12 @@ reasoning, wrappers for natural language processing libraries.")
     (arguments
      '(#:tests? #f)) ; The tests are not distributed
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page "https://github.com/cablehead/python-consul")
     (synopsis "Python client for Consul")
     (description
      "Python client for @url{http://www.consul.io/,Consul}, a tool for service
-discovery, monitoring and configuration.")
+     discovery, monitoring and configuration.")
     (license license:expat)))
 
 (define-public python2-consul
@@ -16899,7 +16629,7 @@ discovery, monitoring and configuration.")
         (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (arguments
      ;; The tests require a bunch of not very nice packages with fixed
      ;; version requirements (e.g. python-coveralls).
@@ -16927,18 +16657,16 @@ discovery, monitoring and configuration.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-defusedxml" ,python-defusedxml)))
+     (list python-defusedxml))
     (home-page "https://github.com/eea/odfpy")
     (synopsis "Python API and tools to manipulate OpenDocument files")
     (description "Collection of libraries and utility programs written in
-Python to manipulate OpenDocument 1.2 files.")
+     Python to manipulate OpenDocument 1.2 files.")
     (license
      ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
      ;; number of files with other licenses.
@@ -16959,42 +16687,27 @@ Python to manipulate OpenDocument 1.2 files.")
                 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (ice-9 ftw))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append
-                        cwd "/build/"
-                        (find (cut string-prefix? "lib" <>)
-                              (scandir (string-append cwd "/build")))
-                        ":"
-                        (getenv "PYTHONPATH")))
-               (invoke "pytest" "-v")))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pytest-cov python-pytest-mock
+           python-pytest))
     (propagated-inputs ; TODO: Add python-fastnumbers.
-     `(("python-pyicu" ,python-pyicu)))
+     (list python-pyicu))
     (home-page "https://github.com/SethMMorton/natsort")
     (synopsis "Natural sorting for python and shell")
     (description
      "Natsort lets you apply natural sorting on lists instead of
-lexicographical.  If you use the built-in @code{sorted} method in python
-on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
-@code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
-@code{a4}, @code{a9}]}.  Natsort provides a function @code{natsorted} that
-identifies numbers and sorts them separately from strings.  It can also sort
-version numbers, real numbers, mixed types and more, and comes with a shell
-command @command{natsort} that exposes this functionality in the command line.")
+     lexicographical.  If you use the built-in @code{sorted} method in python
+     on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
+                                   @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
+                                   @code{a4}, @code{a9}]}.  Natsort provides a function @code{natsorted} that
+     identifies numbers and sorts them separately from strings.  It can also sort
+     version numbers, real numbers, mixed types and more, and comes with a shell
+     command @command{natsort} that exposes this functionality in the command line.")
     (license license:expat)))
 
 (define-public glances
@@ -17020,14 +16733,13 @@ command @command{natsort} that exposes this functionality in the command line.")
           #t))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-future" ,python-future)
-     ("python-psutil" ,python-psutil)))
+   (list python-future python-psutil))
   (home-page "https://github.com/nicolargo/glances")
   (synopsis "Cross-platform curses-based monitoring tool")
   (description
     "Glances is a curses-based monitoring tool for a wide variety of platforms.
-Glances uses the PsUtil library to get information from your system.  It
-monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
+     Glances uses the PsUtil library to get information from your system.  It
+     monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
   (license license:lgpl3+)))
 
 (define-public python-graphql-core
@@ -17052,19 +16764,16 @@ monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
                        (("'gevent==1.1rc1'") "'gevent'"))
              #t)))))
     (native-inputs
-     `(("python-gevent" ,python-gevent)
-       ("python-mock" ,python-mock)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-gevent python-mock python-pytest-mock))
     (propagated-inputs
-     `(("python-promise" ,python-promise)
-       ("python-six" ,python-six)))
+     (list python-promise python-six))
     (home-page "https://github.com/graphql-python/graphql-core")
     (synopsis "GraphQL implementation for Python")
     (description
      "GraphQL implementation for Python.  GraphQL is a data query language and
-runtime designed and used to request and deliver data to mobile and web apps.
-This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
-to Python.")
+     runtime designed and used to request and deliver data to mobile and web apps.
+     This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
+     to Python.")
     (license license:expat)))
 
 (define-public python-graphql-relay
@@ -17080,78 +16789,51 @@ to Python.")
           "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; The tests are not distributed
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "tests")))))))
+    (native-inputs
+     (list
+       python-pytest
+       python-pytest-asyncio))
     (propagated-inputs
-     `(("python-graphql-core" ,python-graphql-core)))
+     (list python-graphql-core))
     (home-page "https://github.com/graphql-python/graphql-relay-py")
     (synopsis "Relay implementation for Python")
     (description
      "This is a library to allow the easy creation of Relay-compliant servers
-using the GraphQL Python reference implementation of a GraphQL server.  It
-should be noted that the code is a exact port of the original
-@url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
-from Facebook.")
+     using the GraphQL Python reference implementation of a GraphQL server.  It
+     should be noted that the code is a exact port of the original
+     @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
+     from Facebook.")
     (license license:expat)))
 
 (define-public python-graphene
   (package
     (name "python-graphene")
-    (version "0.10.2")
+    (version "3.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "graphene" version))
         (sha256
          (base32
-          "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
+          "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-graphql-core" ,python-graphql-core)
-       ("python-graphql-relay" ,python-graphql-relay)
-       ("python-iso8601" ,python-iso8601)
-       ("python-promise" ,python-promise)
-       ("python-six" ,python-six)))
+     (list python-graphql-core python-graphql-relay python-aniso8601
+           python-promise python-six))
     (arguments
      `(#:tests? #f))                    ; no tests/ in the PyPI tarball
     (home-page "https://graphene-python.org/")
     (synopsis "GraphQL Framework for Python")
     (description
      "Graphene is a Python library for building GraphQL schemas/types.
-A GraphQL schema describes your data model, and provides a GraphQL server
-with an associated set of resolve methods that know how to fetch data.")
-    (license license:expat)))
-
-(define-public python-nautilus
-  (package
-    (name "python-nautilus")
-    (version "0.4.9")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "nautilus" version))
-        (sha256
-         (base32
-          "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
-    (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; fails to import test modules
-    (propagated-inputs
-     `(("python-bcrypt" ,python-bcrypt)
-       ("python-click" ,python-click)
-       ("python-consul" ,python-consul)
-       ("python-graphene" ,python-graphene)
-       ("python-jinja2" ,python-jinja2)
-       ("python-peewee" ,python-peewee)
-       ("python-pika" ,python-pika)
-       ("python-tornado" ,python-tornado)
-       ("python-wtforms" ,python-wtforms)))
-    (native-inputs
-     `(("python-nose2" ,python-nose2)))
-    (home-page "https://github.com/AlecAivazis/nautilus")
-    (synopsis "Library for creating microservice applications")
-    (description
-     "Nautilus is a framework for flux based microservices that looks to
-provide extendible implementations of common aspects of a cloud so that you can
-focus on building massively scalable web applications.")
+     A GraphQL schema describes your data model, and provides a GraphQL server
+     with an associated set of resolve methods that know how to fetch data.")
     (license license:expat)))
 
 (define-public python-random2
@@ -17163,20 +16845,22 @@ focus on building massively scalable web applications.")
               (uri (pypi-uri "random2" version ".zip"))
               (sha256
                (base32
-                "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
+                "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
+              (patches
+               (search-patches "python-random2-getrandbits-test.patch"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "http://pypi.python.org/pypi/random2")
     (synopsis "Python 3 version of the Python 2 @code{random} module")
     (description
      "This package provides a Python 3 ported version of Python 2.7’s
-@code{random} module.  It has also been back-ported to work in Python 2.6.
+     @code{random} module.  It has also been back-ported to work in Python 2.6.
 
-In Python 3, the implementation of @code{randrange()} was changed, so that
-even with the same seed you get different sequences in Python 2 and 3.
+     In Python 3, the implementation of @code{randrange()} was changed, so that
+     even with the same seed you get different sequences in Python 2 and 3.
 
-This package closes that gap, allowing stable random number generation
-between the different Python versions.")
+     This package closes that gap, allowing stable random number generation
+     between the different Python versions.")
     (license license:psfl)))
 
 (define-public python2-random2
@@ -17199,8 +16883,8 @@ between the different Python versions.")
     (home-page "https://github.com/shibukawa/snowball_py")
     (synopsis "Snowball stemming library collection for Python")
     (description "This package provides 16 word stemmer algorithms generated
-from Snowball algorithms.  It includes the 15 original ones plus the Poerter
-English stemmer.")
+     from Snowball algorithms.  It includes the 15 original ones plus the Poerter
+     English stemmer.")
     (license license:bsd-3)))
 
 (define-public python2-snowballstemmer
@@ -17243,17 +16927,17 @@ English stemmer.")
              ;; the Makefile will build anyway
              (invoke "make" "check"))))))
     (native-inputs
-     `(("procps" ,procps)))             ; required for tests
+     (list procps))             ; required for tests
     (home-page "https://github.com/dvarrazzo/py-setproctitle")
     (synopsis
      "Setproctitle implementation for Python to customize the process title")
     (description "The library allows a process to change its title (as displayed
-by system tools such as ps and top).
+                                                                       by system tools such as ps and top).
 
-Changing the title is mostly useful in multi-process systems, for
-example when a master process is forked: changing the children's title
-allows identifying the task each process is busy with.  The technique
-is used by PostgreSQL and the OpenSSH Server for example.")
+     Changing the title is mostly useful in multi-process systems, for
+     example when a master process is forked: changing the children's title
+     allows identifying the task each process is busy with.  The technique
+     is used by PostgreSQL and the OpenSSH Server for example.")
     (license license:bsd-3)
     (properties `((python2-variant . ,(delay python2-setproctitle))))))
 
@@ -17287,21 +16971,17 @@ is used by PostgreSQL and the OpenSSH Server for example.")
              (delete-file "tests/__init__.py")))
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" ))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page
      "https://github.com/jamesturk/validictory")
     (synopsis "General purpose Python data validator")
     (description "It allows validation of arbitrary Python data structures.
 
-The schema format is based on the JSON Schema
-proposal (http://json-schema.org), so combined with json the library is also
-useful as a validator for JSON data.")
+     The schema format is based on the JSON Schema
+     proposal (http://json-schema.org), so combined with json the library is also
+     useful as a validator for JSON data.")
   (license license:expat)))
 
 (define-public python2-validictory
@@ -17319,24 +16999,14 @@ useful as a validator for JSON data.")
         (base32
          "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/test/"
-                      ":" (getenv "PYTHONPATH")))
-             #t)))))
     (home-page
      "https://github.com/eliben/pyelftools")
     (synopsis
      "Analyze binary and library file information")
     (description "This Python library provides interfaces for parsing and
-analyzing two binary and library file formats; the Executable and Linking
-Format (ELF), and debugging information in the Debugging With Attributed
-Record Format (DWARF).")
+     analyzing two binary and library file formats ; the Executable and Linking
+     Format (ELF), and debugging information in the Debugging With Attributed
+     Record Format (DWARF).")
     (license license:public-domain)))
 
 (define-public python-pyev
@@ -17357,13 +17027,12 @@ Record Format (DWARF).")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libev (string-append (assoc-ref inputs "libev")
-                                         "/lib/libev.so.4")))
+             (let ((libev (search-input-file inputs "/lib/libev.so.4")))
                (substitute* "setup.py"
                  (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
                   (string-append "libev_dll_name = \"" libev "\"")))))))))
     (inputs
-     `(("libev" ,libev)))
+     (list libev))
     (home-page "https://github.com/gabrielfalcao/pyev")
     (synopsis "Python libev interface")
     (description "Pyev provides a Python interface to libev.")
@@ -17388,7 +17057,7 @@ Record Format (DWARF).")
     (synopsis "Gets image size of files in various formats in Python")
     (description
       "This package allows determination of image size from
-PNG, JPEG, JPEG2000 and GIF files in pure Python.")
+     PNG, JPEG, JPEG2000 and GIF files in pure Python.")
     (license license:expat)))
 
 (define-public python2-imagesize
@@ -17431,20 +17100,20 @@ PNG, JPEG, JPEG2000 and GIF files in pure Python.")
        (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-pexpect" ,python-pexpect)
-       ("python-wheel" ,python-wheel)
-       ("tcsh" ,tcsh)
-       ("fish" ,fish)
-       ("bash-full" ,bash)))            ;full Bash for 'test_file_completion'
+     (list python-coverage
+           python-flake8
+           python-pexpect
+           python-wheel
+           tcsh
+           fish
+           bash))            ;full Bash for 'test_file_completion'
     (home-page "https://github.com/kislyuk/argcomplete")
     (synopsis "Shell tab completion for Python argparse")
     (description "argcomplete provides extensible command line tab completion
-of arguments and options for Python scripts using @code{argparse}.  It's
-particularly useful for programs with many options or sub-parsers that can
-dynamically suggest completions; for example, when browsing resources over the
-network.")
+     of arguments and options for Python scripts using @code{argparse}.  It's
+     particularly useful for programs with many options or sub-parsers that can
+     dynamically suggest completions ; for example, when browsing resources over the
+     network.")
     (license license:asl2.0)
     (properties `((python2-variant . ,(delay python2-argcomplete))))))
 
@@ -17481,7 +17150,7 @@ network.")
            (lambda _
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/sprymix/csscompressor")
     (synopsis "Python port of YUI CSS Compressor")
     (description
@@ -17509,7 +17178,7 @@ network.")
     (home-page "http://opensource.perlig.de/rcssmin/")
     (synopsis "CSS Minifier")
     (description "The minifier is based on the semantics of the YUI compressor,
-which itself is based on the rule list by Isaac Schlueter.")
+     which itself is based on the rule list by Isaac Schlueter.")
     (license license:asl2.0)))
 
 (define-public python-rjsmin
@@ -17540,36 +17209,36 @@ which itself is based on the rule list by Isaac Schlueter.")
                (invoke "py.test" "-vv" "tests")
                #t))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://opensource.perlig.de/rjsmin/")
     (synopsis "Javascript Minifier")
     (description "@code{rJSmin} is a javascript minifier written in Python.  The
-minifier is based on the semantics of jsmin.c by Douglas Crockford.  The module
-is a re-implementation aiming for speed, so it can be used at runtime (rather
-than during a preprocessing step).")
+     minifier is based on the semantics of jsmin.c by Douglas Crockford.  The module
+     is a re-implementation aiming for speed, so it can be used at runtime (rather
+                                                                            than during a preprocessing step).")
     (license license:asl2.0)))
 
 (define-public python-xopen
   (package
     (name "python-xopen")
-    (version "0.5.0")
+    (version "0.8.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "xopen" version))
-        (sha256
-          (base32
-           "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "xopen" version))
+       (sha256
+        (base32
+         "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/marcelm/xopen/")
     (synopsis "Open compressed files transparently")
     (description "This module provides an @code{xopen} function that works like
-Python's built-in @code{open} function, but can also deal with compressed files.
-Supported compression formats are gzip, bzip2 and, xz, and are automatically
-recognized by their file extensions.  The focus is on being as efficient as
-possible on all supported Python versions.")
+     Python's built-in @code{open} function, but can also deal with compressed files.
+     Supported compression formats are gzip, bzip2 and, xz, and are automatically
+     recognized by their file extensions.  The focus is on being as efficient as
+     possible on all supported Python versions.")
     (license license:expat)))
 
 (define-public python2-xopen
@@ -17592,71 +17261,53 @@ possible on all supported Python versions.")
            "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'use-absolute-python
                     (lambda _
                       (substitute* "Cheetah/CheetahWrapper.py"
                         (("#!/usr/bin/env python")
-                         (string-append "#!" (which "python"))))
-                      #t))
+                         (string-append "#!" (which "python"))))))
                   (add-after 'unpack 'fix-tests
                     (lambda _
                       (substitute* "Cheetah/Tests/ImportHooks.py"
                         (("os.path.dirname\\(__file__\\)")
-                         (string-append "'" (getcwd) "/Cheetah/Tests'")))
-                      #t))
+                         (string-append "'" (getcwd) "/Cheetah/Tests'")))))
                   (replace 'check
                     (lambda _
-                      (let ((cwd (getcwd)))
-                        (setenv "PYTHONPATH"
-                                (string-append
-                                 cwd "/build/"
-                                 (find (cut string-prefix? "lib" <>)
-                                       (scandir (string-append cwd "/build")))
-                                 ":" (getenv "PYTHONPATH")))
-                        (setenv "PATH"
-                                (string-append (getenv "PATH")
-                                               ":" cwd "/bin"))
-                        (setenv "TMPDIR" "/tmp")
-
-                        (substitute* "Cheetah/Tests/Test.py"
-                          (("unittest.TextTestRunner\\(\\)")
-                           "unittest.TextTestRunner(verbosity=2)"))
-
-                        (invoke "python" "Cheetah/Tests/Test.py")))))))
-    (propagated-inputs
-     `(("python-markdown" ,python-markdown)))    ;optional
+                      (setenv "TMPDIR" "/tmp")
+                      (substitute* "Cheetah/Tests/Test.py"
+                        (("unittest.TextTestRunner\\(\\)")
+                         "unittest.TextTestRunner(verbosity=2)"))
+
+                      (invoke "python" "Cheetah/Tests/Test.py"))))))
+    (propagated-inputs
+     (list python-markdown))    ;optional
     (home-page "https://cheetahtemplate.org/")
     (synopsis "Template engine")
     (description "Cheetah is a text-based template engine and Python code
-generator.
-
-Cheetah can be used as a standalone templating utility or referenced as
-a library from other Python applications.  It has many potential uses,
-but web developers looking for a viable alternative to ASP, JSP, PHP and
-PSP are expected to be its principle user group.
-
-Features:
-@enumerate
-@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
-   text-based format.
-@item Cleanly separates content, graphic design, and program code.
-@item Blends the power and flexibility of Python with a simple template language
-   that non-programmers can understand.
-@item Gives template writers full access to any Python data structure, module,
-   function, object, or method in their templates.
-@item Makes code reuse easy by providing an object-orientated interface to
-   templates that is accessible from Python code or other Cheetah templates.
-   One template can subclass another and selectively reimplement sections of it.
-@item Provides a simple, yet powerful, caching mechanism that can dramatically
-   improve the performance of a dynamic website.
-@item Compiles templates into optimized, yet readable, Python code.
-@end enumerate")
+     generator.
+
+     Cheetah can be used as a standalone templating utility or referenced as
+     a library from other Python applications.  It has many potential uses,
+     but web developers looking for a viable alternative to ASP, JSP, PHP and
+     PSP are expected to be its principle user group.
+
+     Features:
+     @enumerate
+     @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
+     text-based format.
+     @item Cleanly separates content, graphic design, and program code.
+     @item Blends the power and flexibility of Python with a simple template language
+     that non-programmers can understand.
+     @item Gives template writers full access to any Python data structure, module,
+     function, object, or method in their templates.
+     @item Makes code reuse easy by providing an object-orientated interface to
+     templates that is accessible from Python code or other Cheetah templates.
+     One template can subclass another and selectively reimplement sections of it.
+     @item Provides a simple, yet powerful, caching mechanism that can dramatically
+     improve the performance of a dynamic website.
+     @item Compiles templates into optimized, yet readable, Python code.
+     @end enumerate")
     (license (license:x11-style "file://LICENSE"))))
 
 (define-public python2-cheetah
@@ -17694,16 +17345,13 @@ Features:
              (setenv "PYTHONHASHSEED" "random")
              #t)))))
     (propagated-inputs
-     `(("python-fastimport" ,python-fastimport)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-fastimport python-urllib3))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-geventhttpclient" ,python-geventhttpclient)
-       ("git" ,git)))
+     (list python-mock python-geventhttpclient git))
     (home-page "https://www.dulwich.io/")
     (synopsis "Git implementation in Python")
     (description "Dulwich is an implementation of the Git file formats and
-protocols written in pure Python.")
+     protocols written in pure Python.")
     ;; Can be used with either license.
     (license (list license:asl2.0 license:gpl2+))))
 
@@ -17724,22 +17372,19 @@ protocols written in pure Python.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "python" "test/test_pbkdf2.py"))))))
     (propagated-inputs
-     `(("python-pycrypto" ,python-pycrypto)))  ; optional
+     (list python-pycrypto))  ; optional
     (home-page "https://www.dlitz.net/software/python-pbkdf2/")
     (synopsis "Password-based key derivation")
     (description "This module implements the password-based key derivation
-function, PBKDF2, specified in RSA PKCS#5 v2.0.
+     function, PBKDF2, specified in RSA PKCS#5 v2.0.
 
-PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
-is part of the RSA Public Key Cryptography Standards series.  The provided
-implementation takes a password or a passphrase and a salt value (and
-optionally a iteration count, a digest module, and a MAC module) and provides
-a file-like object from which an arbitrarily-sized key can be read.")
+     PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
+     is part of the RSA Public Key Cryptography Standards series.  The provided
+     implementation takes a password or a passphrase and a salt value (and
+                                                                       optionally a iteration count, a digest module, and a MAC module) and provides
+     a file-like object from which an arbitrarily-sized key can be read.")
     (license license:expat)))
 
 (define-public python2-pbkdf2
@@ -17760,18 +17405,18 @@ a file-like object from which an arbitrarily-sized key can be read.")
      ;; FIXME: Tests require packaging 'pymaging'.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)     ; for SVG output
-       ("python-pillow" ,python-pillow) ; for PNG output
-       ("python-six" ,python-six)))
+     (list python-lxml ; for SVG output
+           python-pillow ; for PNG output
+           python-six))
     (home-page "https://github.com/lincolnloop/python-qrcode")
     (synopsis "QR Code image generator")
     (description "This package provides a pure Python QR Code generator
-module.  It uses the Python Imaging Library (PIL) to allow for the generation
-of QR Codes.
+     module.  It uses the Python Imaging Library (PIL) to allow for the generation
+     of QR Codes.
 
-In addition this package provides a command line tool to generate QR codes and
-either write these QR codes to a file or do the output as ascii art at the
-console.")
+     In addition this package provides a command line tool to generate QR codes and
+     either write these QR codes to a file or do the output as ascii art at the
+     console.")
     (license license:bsd-3)))
 
 (define-public python2-qrcode
@@ -17790,12 +17435,12 @@ console.")
          "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)))
+     (list python-docutils))
     (home-page "https://github.com/Snaipe/python-rst-to-ansi")
     (synopsis "Convert RST to ANSI-decorated console output")
     (description
      "Python module dedicated to rendering RST (reStructuredText) documents
-to ansi-escaped strings suitable for display in a terminal.")
+     to ansi-escaped strings suitable for display in a terminal.")
     (license license:expat)))
 
 (define-public python-ansi2html
@@ -17811,15 +17456,14 @@ to ansi-escaped strings suitable for display in a terminal.")
          "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-nose))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/ralphbean/ansi2html")
     (synopsis "Convert ANSI-decorated console output to HTML")
     (description
      "@command{ansi2html} is a Python library and command line utility for
-converting text with ANSI color codes to HTML or LaTeX.")
+     converting text with ANSI color codes to HTML or LaTeX.")
     (license license:gpl3+)))
 
 (define-public python2-ansi2html
@@ -17843,10 +17487,10 @@ converting text with ANSI color codes to HTML or LaTeX.")
     (synopsis "Terminal framework API")
     (description
      "Easy ANSI is a terminal framework API to give you an easy way to use
-colors, cursor control movements, and line/box drawing.  It is not meant as a
-replacement to more full-featured frameworks (such as curses or urwid), but as
-a tool to quickly create nice-looking screens in your terminal window.  You
-can even create animations with the cursor controls.")
+     colors, cursor control movements, and line/box drawing.  It is not meant as a
+     replacement to more full-featured frameworks (such as curses or urwid), but as
+     a tool to quickly create nice-looking screens in your terminal window.  You
+     can even create animations with the cursor controls.")
     (license license:expat)))
 
 (define-public python-ddt
@@ -17862,15 +17506,15 @@ can even create animations with the cursor controls.")
          "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/datadriventests/ddt")
     (synopsis "Data-Driven Tests")
     (description
      "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
-running it with different test data, and make it appear as multiple test
-cases.")
+     running it with different test data, and make it appear as multiple test
+     cases.")
     (license license:expat)))
 
 (define-public python-pycountry
@@ -17889,16 +17533,16 @@ cases.")
     (synopsis "ISO databases for languages, countries, currencies, etc.")
     (description
      "@code{pycountry} provides the ISO databases for the standards:
-@enumerate
-@item 639-3 (Languages)
-@item 3166 (Countries)
-@item 3166-3 (Deleted Countries)
-@item 3166-2 (Subdivisions of countries)
-@item 4217 (Currencies)
-@item 15924 (Scripts)
-@end enumerate
-It includes a copy from Debian’s pkg-isocodes and makes the data accessible
-through a Python API.")
+     @enumerate
+     @item 639-3 (Languages)
+     @item 3166 (Countries)
+     @item 3166-3 (Deleted Countries)
+     @item 3166-2 (Subdivisions of countries)
+     @item 4217 (Currencies)
+     @item 15924 (Scripts)
+     @end enumerate
+     It includes a copy from Debian’s pkg-isocodes and makes the data accessible
+     through a Python API.")
     (license license:lgpl2.1+)))
 
 (define-public python2-pycountry
@@ -17918,14 +17562,14 @@ through a Python API.")
     ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://github.com/ContinuumIO/pycosat")
     (synopsis "Bindings to picosat (a SAT solver)")
     (description
      "This package provides efficient Python bindings to @code{picosat} on
-the C level.  When importing pycosat, the @code{picosat} solver becomes part
-of the Python process itself.  @code{picosat} is a @dfn{Boolean Satisfiability
-Problem} (SAT) solver.")
+     the C level.  When importing pycosat, the @code{picosat} solver becomes part
+     of the Python process itself.  @code{picosat} is a @dfn{Boolean Satisfiability
+                                                                     Problem} (SAT) solver.")
     (license license:expat)))
 
 (define-public python2-pycosat
@@ -17956,13 +17600,13 @@ Problem} (SAT) solver.")
     (synopsis "Version of dict that keeps keys in insertion order")
     (description
      "This is an implementation of an ordered dictionary with @dfn{Key
-Insertion Order} (KIO: updates of values do not affect the position of the
-key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
-removed and put at the back).  The standard library module @code{OrderedDict},
-implemented later, implements a subset of @code{ordereddict} functionality.
-Sorted dictionaries are also provided.  Currently only with @dfn{Key Sorted
-Order} (KSO, no sorting function can be specified, but a transform can be
-specified to apply on the key before comparison (e.g. @code{string.lower})).")
+                                                                     Insertion Order} (KIO: updates of values do not affect the position of the
+                                                                     key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
+                                                                     removed and put at the back).  The standard library module @code{OrderedDict},
+     implemented later, implements a subset of @code{ordereddict} functionality.
+     Sorted dictionaries are also provided.  Currently only with @dfn{Key Sorted
+                                                                          Order} (KSO, no sorting function can be specified, but a transform can be
+                                                                          specified to apply on the key before comparison (e.g. @code{string.lower})).")
     (license license:expat)))
 
 (define-public python-pypeg2
@@ -17977,15 +17621,15 @@ specified to apply on the key before comparison (e.g. @code{string.lower})).")
         (base32
          "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-lxml" ,python-lxml)))
+    (propagated-inputs (list python-lxml))
     (arguments
      ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
      '(#:tests? #f))
     (home-page "https://fdik.org/pyPEG/")
     (synopsis "Parsing Expression Grammars in Python")
     (description "PyPEG is an intrinsic parser interpreter framework for
-Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
-parse many formal languages.")
+     Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
+     parse many formal languages.")
     (license license:gpl2)))
 
 (define-public python-incremental
@@ -18003,7 +17647,7 @@ parse many formal languages.")
     (home-page "https://github.com/hawkowl/incremental")
     (synopsis "Library for versioning Python projects")
     (description "Incremental is a small library that versions your Python
-projects.")
+     projects.")
     (license license:expat)))
 
 (define-public python2-incremental
@@ -18013,39 +17657,50 @@ projects.")
   (package
     (name "python-invoke")
     (home-page "https://www.pyinvoke.org/")
-    (version "1.5.0")
+    (version "1.6.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "invoke" version))
               (sha256
                (base32
-                "0l16v7zcbgi36z6pvmdrs5q4ks8lalcafi5d9nhrpcjzbc3n1igh"))))
+                "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
     (build-system python-build-system)
     (arguments
      ;; XXX: Requires many dependencies that are not yet in Guix.
      `(#:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'delete-python2-code
+           (lambda _
+             (delete-file-recursively "invoke/vendor/yaml2")))
          (add-after 'unpack 'fix-bash-path
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
                (substitute* "invoke/config.py"
                  (("shell = \"/bin/bash\"")
-                  (string-append "shell = \"" bash "/bin/bash\""))
-                 )
-               #t))))))
+                  (string-append "shell = \"" bash "/bin/bash\"")))))))))
     (inputs
      `(("bash" ,bash-minimal)))
     (synopsis "Pythonic task execution")
     (description
      "Invoke is a Python task execution tool and library, drawing inspiration
-from various sources to arrive at a powerful and clean feature set.  It is
-evolved from the Fabric project, but focuses on local and abstract concerns
-instead of servers and network commands.")
+     from various sources to arrive at a powerful and clean feature set.  It is
+     evolved from the Fabric project, but focuses on local and abstract concerns
+     instead of servers and network commands.")
     (license license:bsd-3)))
 
 (define-public python2-invoke
-  (package-with-python2 python-invoke))
+  (let ((parent (package-with-python2 python-invoke)))
+    (package
+      (inherit parent)
+      (arguments
+       (substitute-keyword-arguments (package-arguments parent)
+         ((#:phases phases #t)
+          `(modify-phases ,phases
+             (delete 'delete-python2-code)
+             (add-after 'unpack 'delete-python3-code
+               (lambda _
+                 (delete-file-recursively "invoke/vendor/yaml3"))))))))))
 
 (define-public python-automat
   (package
@@ -18062,19 +17717,24 @@ instead of servers and network commands.")
     ;; python-twisted depends on python-automat.  Twisted is optional, but the
     ;; tests fail if it is not available.  Also see
     ;; <https://github.com/glyph/automat/issues/71>.
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove script, because it depends on python-twisted.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\"automat-visualize = automat._visualize:tool\"") "")))))))
     (native-inputs
-     `(("python-m2r" ,python-m2r)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-graphviz" ,python-graphviz)))
+     (list python-m2r python-setuptools-scm python-graphviz))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-attrs" ,python-attrs)))
+     (list python-six python-attrs))
     (home-page "https://github.com/glyph/Automat")
     (synopsis "Self-service finite-state machines")
     (description "Automat is a library for concise, idiomatic Python
-expression of finite-state automata (particularly deterministic finite-state
-transducers).")
+     expression of finite-state automata (particularly deterministic finite-state
+                                                       transducers).")
     (license license:expat)))
 
 (define-public python2-automat
@@ -18092,15 +17752,13 @@ transducers).")
                 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-mistune" ,python-mistune)))
+     (list python-docutils python-mistune))
     (native-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-mock" ,python-mock)))
+     (list python-pygments python-mock))
     (home-page "https://github.com/miyakogi/m2r")
     (synopsis "Markdown to reStructuredText converter")
     (description "M2R converts a markdown file including reST markups to valid
-reST format.")
+     reST format.")
     (license license:expat)))
 
 (define-public python2-m2r
@@ -18120,8 +17778,8 @@ reST format.")
     (home-page "https://github.com/twisted/constantly")
     (synopsis "Symbolic constants in Python")
     (description "Constantly is a Python library that provides symbolic
-constant support.  It includes collections and constants with text, numeric,
-and bit flag values.")
+     constant support.  It includes collections and constants with text, numeric,
+     and bit flag values.")
     (license license:expat)))
 
 (define-public python2-constantly
@@ -18139,38 +17797,19 @@ and bit flag values.")
                 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (let ((cwd (getcwd)))
-                 (setenv "PYTHONPATH"
-                         (string-append
-                          cwd "/build/"
-                          (find (cut string-prefix? "lib" <>)
-                                (scandir (string-append cwd "/build")))
-                          ":"
-                          (getenv "PYTHONPATH")))
-                 (invoke "python" "-m" "pytest"))))))))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pympler" ,python-pympler)
-       ("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)
-       ("python-sphinx" ,python-sphinx)
-       ("python-zope-interface" ,python-zope-interface)))
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest")))))))
+    (native-inputs
+     (list python-coverage python-hypothesis python-pympler python-pytest
+           python-six))
     (home-page "https://github.com/python-attrs/attrs/")
     (synopsis "Attributes without boilerplate")
     (description "@code{attrs} is a Python package with class decorators that
-ease the chores of implementing the most common attribute-related object
-protocols.")
+     ease the chores of implementing the most common attribute-related object
+     protocols.")
     (license license:expat)))
 
 (define-public python2-attrs
@@ -18180,13 +17819,6 @@ protocols.")
   (package
     (inherit python-attrs)
     (name "python-attrs-bootstrap")
-    (version "19.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "attrs" version))
-              (sha256
-               (base32
-                "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
     (native-inputs `())
     (arguments `(#:tests? #f))))
 
@@ -18212,15 +17844,14 @@ protocols.")
        ;; fails due to deprecation warnings, etc.
        #:tests? #f))
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python-pep8" ,python-pep8)))
+     (list python-coverage-test-runner python-pep8))
     (propagated-inputs
-     `(("python-pyaml" ,python-pyaml)))
+     (list python-pyaml))
     (home-page "https://liw.fi/cliapp/")
     (synopsis "Python framework for command line programs")
     (description "@code{cliapp} is a Python framework for command line
-programs.  It contains the typical stuff such programs need to do, such
-as parsing the command line for options, and iterating over input files.")
+     programs.  It contains the typical stuff such programs need to do, such
+     as parsing the command line for options, and iterating over input files.")
     (license license:gpl2+)))
 
 (define-public python2-cliapp
@@ -18242,8 +17873,7 @@ as parsing the command line for options, and iterating over input files.")
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage-test-runner" ,python-coverage-test-runner)
-       ("python-pep8" ,python-pep8)))
+     (list python-coverage-test-runner python-pep8))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -18255,11 +17885,11 @@ as parsing the command line for options, and iterating over input files.")
            (lambda _ (invoke "make" "check"))))))
     (home-page "https://liw.fi/ttystatus/")
     (synopsis "Python library for showing progress reporting and
-status updates on terminals")
+     status updates on terminals")
     (description "@code{ttystatus} is a Python library for showing progress
-reporting and status updates on terminals, for command line programs.
-Output is automatically adapted to the width of the terminal: truncated
-if it does not fit, and resized if the terminal size changes.")
+     reporting and status updates on terminals, for command line programs.
+     Output is automatically adapted to the width of the terminal: truncated
+     if it does not fit, and resized if the terminal size changes.")
     (license license:gpl3+)))
 
 (define-public python2-ttystatus
@@ -18284,51 +17914,43 @@ if it does not fit, and resized if the terminal size changes.")
     (home-page "https://liw.fi/tracing/")
     (synopsis "Python debug logging helper")
     (description "@code{python2-tracing} is a python library for
-logging debug messages.  It provides a way to turn debugging messages
-on and off, based on the filename they occur in.  It is much faster
-than using @code{logging.Filter} to accomplish the same thing, which
-matters when code is run in production mode.  The actual logging still
-happens using the @code{logging} library.")
+     logging debug messages.  It provides a way to turn debugging messages
+     on and off, based on the filename they occur in.  It is much faster
+     than using @code{logging.Filter} to accomplish the same thing, which
+     matters when code is run in production mode.  The actual logging still
+     happens using the @code{logging} library.")
     (license license:gpl3+)))
 
 (define-public python-astroid
   (package
     (name "python-astroid")
-    (version "2.4.2")
+    (version "2.6.6")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "astroid" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/PyCQA/astroid")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Check to see if the version pinning has been removed.
-           (substitute* "astroid/__pkginfo__.py"
-             (("==1\\.4\\.\\*") ">=1.4.0"))
-           #t))))
+        (base32 "1amzf996inwmh4r3mlpzmch60xs6lrg86vppfnwl1y0l8r0y7zxh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-lazy-object-proxy python-wrapt))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://github.com/PyCQA/astroid")
     (synopsis "Common base representation of python source code for pylint and
-other projects")
+     other projects")
     (description "@code{python-astroid} provides a common base representation
-of python source code for projects such as pychecker, pyreverse, pylint, etc.
-
-It provides a compatible representation which comes from the _ast module.  It
-rebuilds the tree generated by the builtin _ast module by recursively walking
-down the AST and building an extended ast.  The new node classes have
-additional methods and attributes for different usages.  They include some
-support for static inference and local name scopes.  Furthermore, astroid
-builds partial trees by inspecting living objects.")
+     of python source code for projects such as pychecker, pyreverse, pylint, etc.
+
+     It provides a compatible representation which comes from the _ast module.  It
+     rebuilds the tree generated by the builtin _ast module by recursively walking
+     down the AST and building an extended ast.  The new node classes have
+     additional methods and attributes for different usages.  They include some
+     support for static inference and local name scopes.  Furthermore, astroid
+     builds partial trees by inspecting living objects.")
     (license license:lgpl2.1+)
     (properties `((python2-variant . ,(delay python2-astroid))))))
 
@@ -18346,26 +17968,26 @@ builds partial trees by inspecting living objects.")
         (base32
          "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
     (arguments
-      (substitute-keyword-arguments (package-arguments base)
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (add-after 'unpack 'remove-spurious-test
-              (lambda _
-                ;; https://github.com/PyCQA/astroid/issues/276
-                (delete-file "astroid/tests/unittest_brain.py")
-                #t))
-            (replace 'check
-              (lambda _
-                (invoke"python" "-m" "unittest" "discover"
-                                "-p" "unittest*.py")))))))
+     `(#:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-spurious-test
+           (lambda _
+             ;; https://github.com/PyCQA/astroid/issues/276
+             (delete-file "astroid/tests/unittest_brain.py")))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest" "discover"
+                       "-p" "unittest*.py")))))))
     (native-inputs `())
     (propagated-inputs
-      `(("python2-backports-functools-lru-cache"
-         ,python2-backports-functools-lru-cache)
-        ("python2-enum34" ,python2-enum34)
-        ("python2-singledispatch" ,python2-singledispatch)
-        ,@(alist-delete "python-typed-ast"
-                        (package-propagated-inputs base)))))))
+     (list python2-backports-functools-lru-cache
+           python2-enum34
+           python2-lazy-object-proxy
+           python2-singledispatch
+           python2-six
+           python2-wrapt)))))
 
 (define-public python-isbnlib
   (package
@@ -18383,36 +18005,90 @@ builds partial trees by inspecting living objects.")
     (home-page "https://github.com/xlcnd/isbnlib")
     (synopsis "Python library to work with ISBN strings")
     (description "@code{python-isbnlib} is a (pure) python library that provides
-several useful methods and functions to validate, clean, transform, hyphenate and
-get metadata for ISBN strings.  Its origin was as the core of isbntools.  This short
-version, is suitable to be include as a dependency in other projects.")
+     several useful methods and functions to validate, clean, transform, hyphenate and
+     get metadata for ISBN strings.  Its origin was as the core of isbntools.  This short
+     version, is suitable to be include as a dependency in other projects.")
     (license license:lgpl3+)))
 
 (define-public python-isort
   (package
     (name "python-isort")
-    (version "4.3.4")
+    (version "5.7.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              ;; Tests pass only from the Github sources
-              (url "https://github.com/timothycrosley/isort")
-              (commit version)))
+             ;; Tests pass only from the Github sources
+             (url "https://github.com/timothycrosley/isort")
+             (commit version)))
        (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file (find-files "." "\\.whl$")))
        (sha256
         (base32
-         "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
+         "0phq4s911mjjdyr5h5siz93jnpkqb2qgphgcfk6axncgxr8i7vi1"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; A foretaste of what our future python-build-system will need to
+         ;; do.
+         (replace 'build
+           (lambda _
+             (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "dist" "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl))))
+         (add-after 'install 'install-example-plugins
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Patch to use the core poetry API.
+               (substitute* '("example_isort_formatting_plugin/pyproject.toml"
+                              "example_shared_isort_profile/pyproject.toml")
+                 (("poetry>=0.12")
+                  "poetry-core>=1.0.0")
+                 (("poetry.masonry.api")
+                  "poetry.core.masonry.api"))
+               ;; Build the example plugins.
+               (for-each (lambda (source-directory)
+                           (invoke "python" "-m" "build" "--wheel"
+                                   "--no-isolation" "--outdir=dist"
+                                   source-directory))
+                         '("example_isort_formatting_plugin"
+                           "example_shared_isort_profile"))
+               ;; Install them to temporary storage, for the test.
+               (setenv "HOME" (getcwd))
+               (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
+                 (apply invoke "pip" "--no-cache-dir" "--no-input"
+                        "install"  "--user" "--no-deps" example-whls)))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "tests/unit/"
+                       "--ignore=tests/unit/test_deprecated_finders.py")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
+     `(("git" ,git-minimal)
+       ("python-black" ,python-black)
+       ("python-colorama" ,python-colorama)
+       ("python-hypothesmith" ,python-hypothesmith)
+       ("python-libcst" ,python-libcst-minimal)
+       ("python-poetry-core" ,python-poetry-core)
+       ("python-pylama" ,python-pylama)
+       ("python-pypa-build" ,python-pypa-build)
+       ("python-pytest-mock" ,python-pytest-mock)
        ("python-pytest" ,python-pytest)))
-    (home-page "https://github.com/timothycrosley/isort")
+    (home-page "https://github.com/PyCQA/isort")
     (synopsis "Python utility/library to sort python imports")
     (description "@code{python-isort} is a python utility/library to sort
-imports alphabetically, and automatically separated into sections.  It
-provides a command line utility, a python library and plugins for various
-editors.")
+     imports alphabetically, and automatically separated into sections.  It
+     provides a command line utility, a python library and plugins for various
+     editors.")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-isort))))))
 
@@ -18438,13 +18114,13 @@ editors.")
          "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python2-setuptools-scm" ,python2-setuptools-scm)))
+     (list python2-setuptools-scm))
     (arguments
      `(#:python ,python-2))
     (home-page "https://github.com/jaraco/backports.functools_lru_cache")
     (synopsis "Backport of functools.lru_cache from Python 3.3")
     (description "@code{python2-backports-functools-lru-cache} is a backport
-of @code{functools.lru_cache} from python 3.3.")
+     of @code{functools.lru_cache} from python 3.3.")
     (license license:expat)))
 
 (define-public python-configparser
@@ -18459,13 +18135,13 @@ of @code{functools.lru_cache} from python 3.3.")
         (base32
          "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
     (native-inputs
-     `(("python-setuptools_scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (build-system python-build-system)
     (home-page "https://github.com/jaraco/configparser/")
     (synopsis "Backport of configparser from python 3.5")
     (description "@code{python-configparser} is a backport of
-@code{configparser} from Python 3.5 so that it can be used directly
-in other versions.")
+     @code{configparser} from Python 3.5 so that it can be used directly
+     in other versions.")
     (license license:expat)))
 
 (define-public python2-configparser
@@ -18486,14 +18162,14 @@ in other versions.")
     (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
     (synopsis "Simple INI-file parser")
     (description "The @code{iniconfig} package provides a small and simple
-INI-file parser module having a unique set of features; @code{iniconfig}
-@itemize
-@item maintains the order of sections and entries;
-@item supports multi-line values with or without line-continuations;
-@item supports \"#\" comments everywhere;
-@item raises errors with proper line-numbers;
-@item raises an error when two sections have the same name.
-@end itemize")
+     INI-file parser module having a unique set of features ; @code{iniconfig}
+     @itemize
+     @item maintains the order of sections and entries              ;
+     @item supports multi-line values with or without line-continuations ;
+     @item supports \"#\" comments everywhere                            ;
+     @item raises errors with proper line-numbers                        ;
+     @item raises an error when two sections have the same name.
+     @end itemize")
     (license license:expat)))
 
 (define-public python-mamba
@@ -18509,13 +18185,12 @@ INI-file parser module having a unique set of features; @code{iniconfig}
     (build-system python-build-system)
     (arguments `(#:tests? #f))  ; No test
     (propagated-inputs
-     `(("python-clint" ,python-clint)
-       ("python-coverage" ,python-coverage)))
+     (list python-clint python-coverage))
     (home-page "https://nestorsalceda.com/mamba/")
     (synopsis "Test runner for Python")
     (description
      "Mamba is a Behaviour-Driven Development tool for Python developers.
-Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
+     Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
     (license license:expat)))
 
 (define-public python-mando
@@ -18530,16 +18205,15 @@ Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
                 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rst2ansi" ,python-rst2ansi)
-       ("python-six" ,python-six)))
+     (list python-rst2ansi python-six))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://mando.readthedocs.org/")
     (synopsis
      "Wrapper around argparse, allowing creation of complete CLI applications")
     (description
      "This package is a wrapper around argparse, allowing you to write complete CLI
-applications in seconds while maintaining all the flexibility.")
+     applications in seconds while maintaining all the flexibility.")
     (license license:expat)))
 
 (define-public python2-mando
@@ -18563,7 +18237,7 @@ applications in seconds while maintaining all the flexibility.")
     (synopsis "Python command-line parsing library")
     (description
      "This package is mostly for people who want to have @code{argparse} on
-older Pythons because it was not part of the standard library back then.")
+     older Pythons because it was not part of the standard library back then.")
     (license license:psfl)))
 
 (define-public python-mwclient
@@ -18582,14 +18256,10 @@ older Pythons because it was not part of the standard library back then.")
         (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests-oauthlib" ,python-requests-oauthlib)
-       ("python-six" ,python-six)))
+     (list python-requests-oauthlib python-six))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-responses" ,python-responses)))
+     (list python-mock python-pytest python-pytest-cov
+           python-pytest-runner python-responses))
     (home-page "https://github.com/btongminh/mwclient")
     (synopsis "MediaWiki API client")
     (description "This package provides a MediaWiki API client.")
@@ -18622,7 +18292,7 @@ older Pythons because it was not part of the standard library back then.")
     (synopsis "Convenient utilities not included with the standard Python install")
     (description
       "Python Utils is a collection of small Python functions and classes which
-make common patterns shorter and easier.")
+     make common patterns shorter and easier.")
     (license license:bsd-2)))
 
 (define-public python-diff-match-patch
@@ -18640,7 +18310,7 @@ make common patterns shorter and easier.")
     (home-page "https://code.google.com/p/google-diff-match-patch")
     (synopsis "Synchronize plain text")
     (description "Diff Match and Patch libraries offer robust algorithms to
-perform the operations required for synchronizing plain text.")
+     perform the operations required for synchronizing plain text.")
     (license license:asl2.0)))
 
 (define-public python2-diff-match-patch
@@ -18659,7 +18329,7 @@ perform the operations required for synchronizing plain text.")
           "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/tkhyn/dirsync")
     (synopsis "Advanced directory tree synchronisation tool")
     (description "Advanced directory tree synchronisation tool.")
@@ -18684,13 +18354,13 @@ perform the operations required for synchronizing plain text.")
     (synopsis "Fast computation of Levenshtein distance and string similarity")
     (description
      "The Levenshtein Python C extension module contains functions for fast computation of
-@enumerate
-@item Levenshtein (edit) distance, and edit operations
-@item string similarity
-@item approximate median strings, and generally string averaging
-@item string sequence and set similarity
-@end enumerate
-It supports both normal and Unicode strings.")
+     @enumerate
+     @item Levenshtein (edit) distance, and edit operations
+     @item string similarity
+     @item approximate median strings, and generally string averaging
+     @item string sequence and set similarity
+     @end enumerate
+     It supports both normal and Unicode strings.")
     (license license:gpl2+)))
 
 (define-public python2-levenshtein
@@ -18716,12 +18386,12 @@ It supports both normal and Unicode strings.")
     (synopsis "Directory iteration function")
     (description
      "Directory iteration function like os.listdir(), except that instead of
-returning a list of bare filenames, it yields DirEntry objects that include
-file type and stat information along with the name.  Using scandir() increases
-the speed of os.walk() by 2-20 times (depending on the platform and file
-system) by avoiding unnecessary calls to os.stat() in most cases.
+     returning a list of bare filenames, it yields DirEntry objects that include
+     file type and stat information along with the name.  Using scandir() increases
+     the speed of os.walk() by 2-20 times (depending on the platform and file
+                                                     system) by avoiding unnecessary calls to os.stat() in most cases.
 
-This package is part of the Python standard library since version 3.5.")
+     This package is part of the Python standard library since version 3.5.")
     (license license:bsd-3)))
 
 (define-public python2-scandir
@@ -18744,10 +18414,10 @@ This package is part of the Python standard library since version 3.5.")
     (synopsis "Python implementations of various stemming algorithms")
     (description
      "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
-stemming algorithms for English.  These implementations are straightforward and
-efficient, unlike some Python versions of the same algorithms available on the
-Web.  This package is an extraction of the stemming code included in the Whoosh
-search engine.")
+     stemming algorithms for English.  These implementations are straightforward and
+     efficient, unlike some Python versions of the same algorithms available on the
+     Web.  This package is an extraction of the stemming code included in the Whoosh
+     search engine.")
     (license license:public-domain)))
 
 (define-public python-factory-boy
@@ -18771,17 +18441,14 @@ search engine.")
     (description
      "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
 
-As a fixtures replacement tool, it aims to replace static, hard to maintain
-fixtures with easy-to-use factories for complex object.
+     As a fixtures replacement tool, it aims to replace static, hard to maintain
+     fixtures with easy-to-use factories for complex object.
 
-Instead of building an exhaustive test setup with every possible combination
-of corner cases, factory_boy allows you to use objects customized for the
-current test, while only declaring the test-specific fields")
+     Instead of building an exhaustive test setup with every possible combination
+     of corner cases, factory_boy allows you to use objects customized for the
+     current test, while only declaring the test-specific fields")
     (license license:expat)))
 
-(define-public python2-factory-boy
-  (package-with-python2 python-factory-boy))
-
 (define-public python-translate-toolkit
   (package
     (name "python-translate-toolkit")
@@ -18794,18 +18461,17 @@ current test, while only declaring the test-specific fields")
         (base32 "020pp7pbpnavxd41z90vyzzx06ci57mx9drkgbsb89wxxx4gal9v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
-    (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-chardet" ,python-chardet)
-       ("python-diff-match-patch" ,python-diff-match-patch)
-       ("python-levenshtein" ,python-levenshtein)
-       ("python-lxml" ,python-lxml)
-       ("python-six" ,python-six)
-       ("python-vobject" ,python-vobject)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-sphinx))
+    (propagated-inputs
+     (list python-babel
+           python-beautifulsoup4
+           python-chardet
+           python-diff-match-patch
+           python-levenshtein
+           python-lxml
+           python-six
+           python-vobject
+           python-pyyaml))
     (arguments
      ;; TODO: tests are not run, because they end with
      ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
@@ -18816,7 +18482,7 @@ current test, while only declaring the test-specific fields")
     (synopsis "Tools and API for translation and localization engineering")
     (description
      "Tools and API for translation and localization engineering.  It contains
-several utilities, as well as an API for building localization tools.")
+     several utilities, as well as an API for building localization tools.")
     (license license:gpl2+)))
 
 ;; Required for virtaal, newer versions do not build with python2
@@ -18833,28 +18499,15 @@ several utilities, as well as an API for building localization tools.")
           (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq")))))))
 
 (define-public python-packaging
-  (package
+  (package/inherit python-packaging-bootstrap
     (name "python-packaging")
-    (version "20.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "packaging" version))
-        ;; XXX: The URL in the patch file is wrong, it should be
-        ;; <https://github.com/pypa/packaging/pull/256>.
-        (patches (search-patches "python-packaging-test-arch.patch"))
-        (sha256
-         (base32
-          "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
-    (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (invoke "py.test" "-vv")
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-pretend" ,python-pretend)
        ("python-pytest" ,python-pytest)))
@@ -18864,8 +18517,8 @@ several utilities, as well as an API for building localization tools.")
     (home-page "https://github.com/pypa/packaging")
     (synopsis "Core utilities for Python packages")
     (description "Packaging is a Python module for dealing with Python packages.
-It offers an interface for working with package versions, names, and dependency
-information.")
+     It offers an interface for working with package versions, names, and dependency
+     information.")
     ;; From 'LICENSE': This software is made available under the terms of
     ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
     ;; Contributions to this software is made under the terms of *both* these
@@ -18875,29 +18528,6 @@ information.")
 (define-public python2-packaging
   (package-with-python2 python-packaging))
 
-;; Variants with minimal dependencies, for bootstrapping Pytest.
-(define-public python-packaging-bootstrap
-  (hidden-package
-   (package/inherit
-    python-packaging
-    (name "python-packaging-bootstrap")
-    (native-inputs '())
-    (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
-    (arguments '(#:tests? #f)))))
-
-(define-public python2-packaging-bootstrap
-  (hidden-package
-   (package/inherit
-    python2-packaging
-    (name "python2-packaging-bootstrap")
-    (native-inputs '())
-    (propagated-inputs
-     `(("python-pyparsing" ,python2-pyparsing)))
-    (arguments
-     `(#:tests? #f
-       ,@(package-arguments python2-packaging))))))
-
 (define-public python-relatorio
   (package
     (name "python-relatorio")
@@ -18911,20 +18541,16 @@ information.")
          "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-genshi" ,python-genshi)))
+     (list python-lxml python-genshi))
     (native-inputs
-     `(("python-magic" ,python-magic)))
+     (list python-magic))
     (home-page "https://relatorio.tryton.org/")
     (synopsis "Templating library able to output ODT and PDF files")
     (description "Relatorio is a templating library which provides a way to
-easily output ODT, ODS, PNG, SVG and several other kinds of files.  Support
-for more filetypes can be easily added by creating plugins for them.")
+     easily output ODT, ODS, PNG, SVG and several other kinds of files.  Support
+     for more filetypes can be easily added by creating plugins for them.")
     (license license:gpl3+)))
 
-(define-public python2-relatorio
-  (package-with-python2 python-relatorio))
-
 (define-public python-radon
   (package
     (name "python-radon")
@@ -18939,26 +18565,30 @@ for more filetypes can be easily added by creating plugins for them.")
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        ((".*'future'.*")
+                         "")
+                        (("colorama==0.4.1")
+                         "colorama>=0.4.1"))))
                   (replace 'check
                     (lambda _
                       (invoke "python" "radon/tests/run.py"))))))
     (propagated-inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-flake8-polyfill" ,python-flake8-polyfill)
-       ("python-mando" ,python-mando)))
+     (list python-colorama python-flake8-polyfill python-mando))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (home-page "https://radon.readthedocs.org/")
     (synopsis "Code Metrics in Python")
     (description "Radon is a Python tool which computes various code metrics.
-Supported metrics are:
-@itemize @bullet
-@item raw metrics: SLOC, comment lines, blank lines, &c.
-@item Cyclomatic Complexity (i.e.  McCabe’s Complexity)
-@item Halstead metrics (all of them)
-@item the Maintainability Index (a Visual Studio metric)
-@end itemize")
+     Supported metrics are:
+     @itemize @bullet
+     @item raw metrics: SLOC, comment lines, blank lines, &c.
+     @item Cyclomatic Complexity (i.e.  McCabe’s Complexity)
+     @item Halstead metrics (all of them)
+     @item the Maintainability Index (a Visual Studio metric)
+     @end itemize")
     (properties `((python2-variant . ,(delay python2-radon))))
     (license license:expat)))
 
@@ -18983,15 +18613,14 @@ Supported metrics are:
          "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mock" ,python-mock)
-       ("python-six" ,python-six)))
+     (list python-mock python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/gabrielfalcao/sure")
     (synopsis "Automated testing library in python for python")
     (description
      "Sure is a python library that leverages a DSL for writing assertions.
-Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
+     Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
     (license license:gpl3+)))
 
 (define-public python2-sure
@@ -19018,7 +18647,7 @@ Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
      "ANSI terminal tool for python, colored shell and other handy fancy features")
     (description
      "@code{Couleur} provides python programs a way to use the ANSI features in a unix
-terminal such as coloured output in the shell, overwriting output, indentation, etc.")
+     terminal such as coloured output in the shell, overwriting output, indentation, etc.")
     ;; README.md says ASL2.0, but all source code headers are LGPL3+.
     ;; https://github.com/gabrielfalcao/couleur/issues/11
     (license license:lgpl3+)))
@@ -19043,13 +18672,13 @@ terminal such as coloured output in the shell, overwriting output, indentation,
        ;; for which it does not have the permission to write.
        #:tests? #f))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (home-page "https://github.com/FSX/misaka")
     (synopsis "Python binding for Hoedown")
     (description
      "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
-library written in C.  It features a fast HTML renderer and functionality to make custom
-renderers (e.g. man pages or LaTeX).")
+     library written in C.  It features a fast HTML renderer and functionality to make custom
+     renderers (e.g. man pages or LaTeX).")
     (license license:expat)))
 
 (define-public python2-misaka
@@ -19071,9 +18700,7 @@ renderers (e.g. man pages or LaTeX).")
          "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-couleur" ,python2-couleur)
-       ("python-sure" ,python2-sure)
-       ("python-misaka" ,python2-misaka)))
+     (list python2-couleur python2-sure python2-misaka))
     (arguments
      `(#:python ,python-2
        #:phases
@@ -19089,9 +18716,9 @@ renderers (e.g. man pages or LaTeX).")
     (synopsis "Markdown-based test runner for python")
     (description
      "@code{Steadymark} allows documentation to be written in github-flavoured
-markdown.  The documentation may contain snippets of code surrounded by python
-code blocks and @code{Steadymark} will find these snippets and run them, making
-sure that there are no old malfunctional examples in the documentation examples.")
+     markdown.  The documentation may contain snippets of code surrounded by python
+     code blocks and @code{Steadymark} will find these snippets and run them, making
+     sure that there are no old malfunctional examples in the documentation examples.")
     (license license:expat)))
 
 (define-public python-jsonpointer
@@ -19109,7 +18736,7 @@ sure that there are no old malfunctional examples in the documentation examples.
   (home-page "https://github.com/stefankoegl/python-json-pointer")
   (synopsis "Identify specific nodes in a JSON document")
   (description "@code{jsonpointer} allows you to access specific nodes
-by path in a JSON document (see RFC 6901).")
+     by path in a JSON document (see RFC 6901).")
   (license license:bsd-3)))
 
 (define-public python2-jsonpointer
@@ -19132,11 +18759,11 @@ by path in a JSON document (see RFC 6901).")
          "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jsonpointer" ,python-jsonpointer)))
+     (list python-jsonpointer))
     (home-page "https://github.com/stefankoegl/python-json-patch")
     (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
     (description "@code{jsonpatch} is a library and program that allows
-applying JSON Patches according to RFC 6902.")
+     applying JSON Patches according to RFC 6902.")
     (license license:bsd-3)))
 
 (define-public python2-jsonpatch
@@ -19172,31 +18799,19 @@ applying JSON Patches according to RFC 6902.")
                 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v")))))))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)))
+             (invoke "pytest" "-v"))))))
+    (native-inputs
+     (list python-pytest))
     (home-page "https://rfc3986.readthedocs.io/")
     (synopsis "Parse and validate URI references")
     (description
      "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
-validation and authority parsing.  This module also supports RFC@tie{}6874
-which adds support for zone identifiers to IPv6 addresses.")
+     validation and authority parsing.  This module also supports RFC@tie{}6874
+     which adds support for zone identifiers to IPv6 addresses.")
     (license license:asl2.0)))
 
 (define-public python2-rfc3986
@@ -19217,7 +18832,7 @@ which adds support for zone identifiers to IPv6 addresses.")
     (home-page "https://pypi.org/project/rfc3987/")
     (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
     (description "@code{rfc3987} provides routines for parsing and
-validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
+     validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
     (license license:gpl3+)))
 
 (define-public python2-rfc3987
@@ -19250,13 +18865,13 @@ validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
                  (invoke "pytest" "tests/test_ipv6.py")
                  #t))))))
       (native-inputs
-       `(("python-pytest" ,python-pytest)))
+       (list python-pytest))
       (home-page "https://pypi.org/project/rfc6555/")
       (synopsis "Python implementation of RFC 6555")
       (description
        "Python implementation of the Happy Eyeballs Algorithm described in RFC
-6555.  Provided with a single file and dead-simple API to allow easy vendoring
-and integration into other projects.")
+     6555.  Provided with a single file and dead-simple API to allow easy vendoring
+     and integration into other projects.")
       (license license:asl2.0))))
 
 (define-public python-bagit
@@ -19272,14 +18887,12 @@ and integration into other projects.")
           "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)))
+     (list python-setuptools-scm python-coverage python-mock))
     (home-page "https://libraryofcongress.github.io/bagit-python/")
     (synopsis "Create and validate BagIt packages")
     (description "Bagit is a Python library and command line utility for working
-with BagIt style packages.  BagIt is a minimalist packaging format for digital
-preservation.")
+     with BagIt style packages.  BagIt is a minimalist packaging format for digital
+     preservation.")
     (license license:cc0)))
 
 (define-public python-prov
@@ -19295,19 +18908,15 @@ preservation.")
           "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-lxml" ,python-lxml)
-       ("python-networkx" ,python-networkx)
-       ("python-rdflib" ,python-rdflib)))
+     (list python-dateutil python-lxml python-networkx python-rdflib))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("python-pydot" ,python-pydot)))
+     (list graphviz python-pydot))
     (home-page "https://github.com/trungdong/prov")
     (synopsis
      "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
     (description
      "This package provides a library for W3C Provenance Data Model supporting
-PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
+     PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
     (license license:expat)))
 
 (define-public python-arcp
@@ -19323,23 +18932,23 @@ PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
           "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "http://arcp.readthedocs.io/")
     (synopsis
      "Archive and Package URI parser and generator")
     (description
      "@acronym{arcp, Archive and Package} provides functions for creating
-@code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
-packaged in an archive or package, like a ZIP file.  arcp URIs can be used to
-consume or reference hypermedia resources bundled inside a file archive or an
-application package, as well as to resolve URIs for archive resources within a
-programmatic framework.  This URI scheme provides mechanisms to generate a
-unique base URI to represent the root of the archive, so that relative URI
-references in a bundled resource can be resolved within the archive without
-having to extract the archive content on the local file system.  An arcp URI can
-be used for purposes of isolation (e.g. when consuming multiple archives),
-security constraints (avoiding \"climb out\" from the archive), or for
-externally identiyfing sub-resources referenced by hypermedia formats.")
+     @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
+     packaged in an archive or package, like a ZIP file.  arcp URIs can be used to
+     consume or reference hypermedia resources bundled inside a file archive or an
+     application package, as well as to resolve URIs for archive resources within a
+     programmatic framework.  This URI scheme provides mechanisms to generate a
+     unique base URI to represent the root of the archive, so that relative URI
+     references in a bundled resource can be resolved within the archive without
+     having to extract the archive content on the local file system.  An arcp URI can
+     be used for purposes of isolation (e.g. when consuming multiple archives),
+     security constraints (avoiding \"climb out\" from the archive), or for
+     externally identiyfing sub-resources referenced by hypermedia formats.")
     (license license:asl2.0)))
 
 (define-public python-shellescape
@@ -19367,15 +18976,15 @@ externally identiyfing sub-resources referenced by hypermedia formats.")
                (invoke "python" "tests/test_shellescape.py"))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/chrissimpkins/shellescape")
     (synopsis
      "Shell escape a string to safely use it as a token in a shell command")
     (description
      "The shellescape Python module defines the @code{shellescape.quote()}
-function that returns a shell-escaped version of a Python string.  This is a
-backport of the @code{shlex.quote()} function from Python 3.8 that makes it
-accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
+     function that returns a shell-escaped version of a Python string.  This is a
+     backport of the @code{shlex.quote()} function from Python 3.8 that makes it
+     accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
     (license license:expat)))
 
 (define-public python-validators
@@ -19395,24 +19004,18 @@ accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-decorator python-six))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pytest" ,python-pytest)))
+     (list python-flake8 python-isort python-pytest))
     (home-page "https://github.com/kvesteri/validators")
     (synopsis "Data validation library")
     (description
      "This package contains validators for different things such as email
-addresses, IP addresses, URLs, hashes and more.  It has been designed to
-be easy to use and not require defining a schema or form just to validate
-some input.")
+     addresses, IP addresses, URLs, hashes and more.  It has been designed to
+     be easy to use and not require defining a schema or form just to validate
+     some input.")
     (license license:expat)))
 
-(define-public python2-validators
-  (package-with-python2 python-validators))
-
 (define-public python-validate-email
   (package
     (name "python-validate-email")
@@ -19428,7 +19031,7 @@ some input.")
     (home-page "https://github.com/syrusakbary/validate_email")
     (synopsis "Verifies if an email address is valid and really exists")
     (description "@code{validate_email} can be used to verify if an email
-address is valid and really exists.")
+     address is valid and really exists.")
     (license license:lgpl3+)))
 
 (define-public python2-validate-email
@@ -19447,14 +19050,14 @@ address is valid and really exists.")
         "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-iso8601" ,python-iso8601)
-       ("python-jsonpointer" ,python-jsonpointer)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)
-       ("python-rfc3987" ,python-rfc3987)
-       ("python-six" ,python-six)
-       ("python-validate-email" ,python-validate-email)))
+     (list python-click
+           python-iso8601
+           python-jsonpointer
+           python-pyyaml
+           python-requests
+           python-rfc3987
+           python-six
+           python-validate-email))
     (home-page "https://github.com/pipermerriam/flex")
     (synopsis "Validates Swagger schemata")
     (description "@code{flex} can be used to validate Swagger schemata.")
@@ -19476,16 +19079,14 @@ address is valid and really exists.")
         "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-dateutil python-simplejson))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list python-pytest python-pytz))
     (home-page "https://github.com/marshmallow-code/marshmallow")
     (synopsis "Convert complex datatypes to and from native
-Python datatypes")
+     Python datatypes")
     (description "@code{marshmallow} provides a library for converting
-complex datatypes to and from native Python datatypes.")
+     complex datatypes to and from native Python datatypes.")
     (license license:expat)))
 
 (define-public python-marshmallow-3.2
@@ -19511,22 +19112,22 @@ complex datatypes to and from native Python datatypes.")
         (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-marshmallow" ,python-marshmallow-3.2)))
+     (list python-marshmallow-3.2))
     (native-inputs
-     `(("python-faker" ,python-faker)
-       ("python-flake8" ,python-flake8)
-       ("python-flake8-bugbear" ,python-flake8-bugbear)
-       ("python-flask" ,python-flask)
-       ("python-mock" ,python-mock)
-       ("python-pre-commit" ,python-pre-commit)
-       ("python-pytest" ,python-pytest)
-       ("python-tox" ,python-tox)))
+     (list python-faker
+           python-flake8
+           python-flake8-bugbear
+           python-flask
+           python-mock
+           python-pre-commit
+           python-pytest
+           python-tox))
     (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
     (synopsis "JSON:API 1.0 formatting with Marshmallow")
     (description
      "The marshmallow-jsonapi package provides a simple way to produce
-@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
-It includes optional utilities to integrate with Flask.")
+     @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
+     It includes optional utilities to integrate with Flask.")
     (license license:expat)))
 
 (define-public python-apispec
@@ -19543,29 +19144,22 @@ It includes optional utilities to integrate with Flask.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'disable-prance-tests
-                    (lambda _
-                      ;; Disable validation tests since they require the
-                      ;; optional 'prance' library which is not yet in Guix.
-                      (substitute* "tests/test_ext_marshmallow_openapi.py"
-                        (("def test_openapi_tools_validate.*" all)
-                         (string-append "@pytest.mark.xfail\n" all)))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv"))))))
+                      (invoke "pytest" "-vv"
+                              ;; Disable validation tests since they require
+                              ;; the optional 'prance' library which is not
+                              ;; yet in Guix.
+                              "-k" "not openapi_tools_validate"))))))
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-marshmallow" ,python-marshmallow)))
+     (list python-pytest python-marshmallow))
     (home-page "https://github.com/marshmallow-code/apispec")
     (synopsis "Swagger/OpenAPI specification generator")
     (description "@code{python-apispec} is a pluggable API specification
-generator.  It currently supports the OpenAPI specification, formerly known
-as Swagger.")
+     generator.  It currently supports the OpenAPI specification, formerly known
+     as Swagger.")
     (license license:expat)))
 
 (define-public python-flasgger
@@ -19590,29 +19184,23 @@ as Swagger.")
              (substitute* "Makefile"
                (("flake8 flasgger --ignore=F403")
                 "flake8 flasgger --ignore=E731,F403"))
-             (setenv "PYTHONPATH" (string-append (getcwd)
-                                                 ":"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-flask" ,python-flask)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-mistune" ,python-mistune)
-       ("python-six" ,python-six)))
-    (native-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-flake8" ,python-flake8)
-       ("python-flask-restful" ,python-flask-restful)
-       ("python-flex" ,python-flex)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-marshmallow" ,python-marshmallow)
-       ("python-apispec" ,python-apispec)))
+     (list python-flask python-pyyaml python-jsonschema python-mistune
+           python-six))
+    (native-inputs
+     (list python-decorator
+           python-flake8
+           python-flask-restful
+           python-flex
+           python-pytest
+           python-pytest-cov
+           python-marshmallow
+           python-apispec))
     (home-page "https://github.com/rochacbruno/flasgger/")
     (synopsis "Extract Swagger specs from your Flask project")
     (description "@code{python-flasgger} allows extracting Swagger specs
-from your Flask project.  It is a fork of Flask-Swagger.")
+     from your Flask project.  It is a fork of Flask-Swagger.")
     (license license:expat)))
 
 (define-public python-swagger-spec-validator
@@ -19628,14 +19216,12 @@ from your Flask project.  It is a fork of Flask-Swagger.")
          "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jsonschema" ,python-jsonschema)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-jsonschema python-pyyaml python-six))
     (home-page
      "https://github.com/Yelp/swagger_spec_validator")
     (synopsis "Validation of Swagger specifications")
     (description "@code{swagger_spec_validator} provides a library for
-validating Swagger API specifications.")
+     validating Swagger API specifications.")
     (license license:asl2.0)))
 
 (define-public python-apache-libcloud
@@ -19664,7 +19250,7 @@ validating Swagger API specifications.")
              (substitute* "libcloud/test/compute/test_ssh_client.py"
                (("class ShellOutSSHClientTests")
                 "@unittest.skip(\"Guix container doesn't have ssh service\")
-class ShellOutSSHClientTests"))
+     class ShellOutSSHClientTests"))
              #t))
          (add-before 'check 'copy-secret
            (lambda _
@@ -19672,20 +19258,16 @@ class ShellOutSSHClientTests"))
                         "libcloud/test/secrets.py")
              #t)))))
     (inputs
-     `(("openssh" ,openssh)))
+     (list openssh))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-requests" ,python-requests)))
+     (list python-paramiko python-requests))
     (native-inputs
-     `(("python-lockfile" ,python-lockfile)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-requests-mock" ,python-requests-mock)))
+     (list python-lockfile python-mock python-pytest python-pytest-runner
+           python-requests-mock))
     (home-page "https://libcloud.apache.org/")
     (synopsis "Unified Cloud API")
     (description "@code{libcloud} is a Python library for interacting with
-many of the popular cloud service providers using a unified API.")
+     many of the popular cloud service providers using a unified API.")
     (license license:asl2.0)))
 
 (define-public python-smmap
@@ -19700,11 +19282,11 @@ many of the popular cloud service providers using a unified API.")
         (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nosexcover" ,python-nosexcover)))
+     (list python-nosexcover))
     (home-page "https://github.com/Byron/smmap")
     (synopsis "Python sliding window memory map manager")
     (description "@code{smmap} is a pure Python implementation of a sliding
-window memory map manager.")
+     window memory map manager.")
     (license license:bsd-3)))
 
 (define-public python2-smmap
@@ -19728,13 +19310,13 @@ window memory map manager.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
              (invoke "python" "-c"
-                     "from regex.test_regex import test_main; test_main()"))))))
-    (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
-    (synopsis "Alternative regular expression module")
-    (description "This regular expression implementation is backwards-
+                     "from regex.test_regex import test_main ; test_main()"))))))
+     (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
+     (synopsis "Alternative regular expression module")
+     (description "This regular expression implementation is backwards-
 compatible with the standard @code{re} module, but offers additional
 functionality like full case-folding for case-insensitive matches in Unicode.")
-    (license license:psfl)))
+     (license license:psfl)))
 
 (define-public python2-regex
   (package-with-python2 python-regex))
@@ -19752,9 +19334,7 @@ functionality like full case-folding for case-insensitive matches in Unicode.")
          "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
     (build-system python-build-system)
     (inputs
-     `(("mesa" ,mesa)
-       ("freeglut" ,freeglut)
-       ("glu" ,glu)))
+     (list mesa freeglut glu))
     (arguments
      `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
                                         ;attribute 'OSMesa'
@@ -19798,8 +19378,7 @@ library.")
         (base32
          "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
     (inputs
-     `(("mesa" ,mesa)
-       ("python-numpy" ,python-numpy))) ; for cython module
+     (list mesa python-numpy)) ; for cython module
                                         ; numpy_formathandler, thus not propagated
     (arguments
      `(#:tests? #f
@@ -19831,8 +19410,7 @@ library.")
           (lambda _
             (delete-file "rencode/t.py")
             #t)))))
-   (native-inputs `(("pkg-config" ,pkg-config)
-                    ("python-cython" ,python-cython)))
+   (native-inputs (list pkg-config python-cython))
    (home-page "https://github.com/aresch/rencode")
    (synopsis "Serialization of heterogeneous data structures")
    (description
@@ -19860,11 +19438,8 @@ pure Python module.")
          "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ("python-radon" ,python-radon)
-       ("python-requests" ,python-requests)
-       ("python-flake8" ,python-flake8)
-       ("python-tox" ,python-tox)))
+     (list python-pyyaml python-radon python-requests python-flake8
+           python-tox))
     (arguments
      `(#:tests? #f                      ;test suite not shipped with the PyPI archive
        #:phases
@@ -19958,9 +19533,9 @@ ignoring formatting changes.")
                #t))))))
     (home-page "https://pydub.com")
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (propagated-inputs
-     `(("python-scipy" ,python-scipy)))
+     (list python-scipy))
     (synopsis "Manipulate audio with a high level interface in Python")
     (description
      "@code{pydub} makes it easy to manipulate audio in Python.  It relies on
@@ -19970,25 +19545,23 @@ ignoring formatting changes.")
 (define-public python-tqdm
   (package
     (name "python-tqdm")
-    (version "4.43.0")
+    (version "4.60.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "tqdm" version))
          (sha256
            (base32
-             "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
+             "1bjpy4mjg6ryp0ijvqi77vgs76l5hh3zrv3x4vmcwxrlbswvvppb"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (add-installed-pythonpath inputs outputs)
-                      ;; This invokation is taken from tox.ini.
-                      (invoke "nosetests" "--ignore-files=\"test_perf.py\""
-                              "-d" "-v" "tqdm/"))))))
+                    (lambda _
+                      (invoke "pytest" "-vv" "-k" "not perf"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest python-pytest-asyncio python-pytest-timeout
+           python-setuptools-scm python-toml))
     (home-page "https://github.com/tqdm/tqdm")
     (synopsis "Fast, extensible progress meter")
     (description
@@ -20048,12 +19621,12 @@ created by running @code{python setup.py develop}).")
          (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tqdm" ,python-tqdm)
-       ("python-packaging" ,python-packaging)
-       ("python-pkginfo" ,python-pkginfo)
-       ("python-readme-renderer" ,python-readme-renderer)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+     (list python-tqdm
+           python-packaging
+           python-pkginfo
+           python-readme-renderer
+           python-requests
+           python-requests-toolbelt))
     (home-page "https://github.com/pypa/twine")
     (synopsis "Collection of utilities for interacting with PyPI")
     (description
@@ -20112,7 +19685,7 @@ lines are read from a single file.")
     (native-inputs
      `(("python-pbr" ,python-pbr-minimal)))
     (propagated-inputs
-      `(("python-linecache2" ,python-linecache2)))
+      (list python-linecache2 python-six))
     (home-page
       "https://github.com/testing-cabal/traceback2")
     (synopsis "Backports of the traceback module")
@@ -20214,9 +19787,9 @@ services.")
          "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
     (synopsis "Setuptools_scm plugin for git archives")
     (description
@@ -20283,13 +19856,10 @@ Git.")
              (with-directory-excursion "pyclipper"
                (invoke "cython" "--cplus" "pyclipper.pyx")))))))
     (propagated-inputs
-     `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
+     (list python-setuptools-scm-git-archive))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-unittest2" ,python-unittest2)
-       ("unzip" ,unzip)))
+     (list python-cython python-pytest python-pytest-runner
+           python-unittest2 unzip))
     (home-page "https://github.com/greginvm/pyclipper")
     (synopsis "Wrapper for Angus Johnson's Clipper library")
     (description
@@ -20315,13 +19885,9 @@ Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
     (arguments
      `(#:python ,python-2))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-runner" ,python2-pytest-runner)))
+     (list unzip python2-pytest python2-pytest-runner))
     (propagated-inputs
-     `(("python-fonttools" ,python2-fonttools)
-       ("python-pyclipper" ,python2-pyclipper)
-       ("python-ufolib" ,python2-ufolib)))
+     (list python2-fonttools python2-pyclipper python2-ufolib))
     (home-page "https://github.com/typemytype/booleanOperations")
     (synopsis "Boolean operations on paths")
     (description
@@ -20395,10 +19961,9 @@ particularly convenient for use in tests.")
                                 (lambda (filename)
                                   (string-suffix? ".py" filename)))))))))
     (native-inputs
-     `(("python-tempdir" ,python-tempdir)
-       ("python-nose" ,python-nose)))
+     (list python-tempdir python-nose))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)))
+     (list python-h5py))
     (home-page "https://www.activepapers.org/")
     (synopsis "Executable papers for scientific computing")
     (description
@@ -20444,7 +20009,7 @@ such as figshare or Zenodo.")
                       (delete-file "setup.cfg")
                       (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/k-bx/python-semver")
     (synopsis "Python helper for Semantic Versioning")
     (description "This package provides a Python library for
@@ -20468,11 +20033,9 @@ such as figshare or Zenodo.")
     (arguments
      '(#:tests? #f)) ;FIXME: Some tests require network access.
     (native-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-dill" ,python-dill)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-cloudpickle python-dill python-msgpack))
     (propagated-inputs
-     `(("python-serpent" ,python-serpent)))
+     (list python-serpent))
     (home-page "https://pyro4.readthedocs.io")
     (synopsis "Distributed object middleware for Python")
     (description
@@ -20526,10 +20089,9 @@ is the new Pyro version that is actively developed.")
          "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
     (build-system python-build-system)
     (inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (propagated-inputs
-     `(("python-numpy" ,python2-numpy-1.8)
-       ("python-pyro" ,python2-pyro)))
+     (list python2-numpy-1.8 python2-pyro))
     (arguments
      ;; ScientificPython is not compatible with Python 3
      `(#:python ,python-2
@@ -20566,7 +20128,7 @@ not actively maintained and works only with Python 2 and NumPy < 1.9.")
          "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
     (build-system python-build-system)
     (native-inputs
-     `(("netcdf" ,netcdf)))
+     (list netcdf))
     (propagated-inputs
      `(("python-scientific" ,python2-scientific)
        ("python-tkinter" ,python-2 "tk")))
@@ -20648,9 +20210,9 @@ queue.")
          "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-heapdict" ,python-heapdict)))
+     (list python-heapdict))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://zict.readthedocs.io/en/latest/")
     (synopsis "Composable mutable mapping tools")
     (description "This package provides abstract @code{MutableMapping} classes
@@ -20699,9 +20261,8 @@ user's @file{~/Trash} directory.")
           `(modify-phases ,phases
              (add-before 'check 'setenv
                (lambda _
-                 (setenv "PYTHONPATH"
-                         (string-append (getcwd) ":" (getenv "PYTHONPATH")))
-                 #t)))))))))
+                 (setenv "GUIX_PYTHONPATH"
+                         (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH"))))))))))))
 
 (define-public python-pyfavicon
   (package
@@ -20719,9 +20280,7 @@ user's @file{~/Trash} directory.")
      ;; repository require online data.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-pillow" ,python-pillow)))
+     (list python-aiohttp python-beautifulsoup4 python-pillow))
     (home-page "https://github.com/bilelmoussaoui/pyfavicon")
     (synopsis "Async favicon fetcher")
     (description
@@ -20740,9 +20299,7 @@ user's @file{~/Trash} directory.")
         (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pathspec" ,python-pathspec)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-setuptools" ,python-setuptools)))
+     (list python-pathspec python-pyyaml python-setuptools))
     (home-page "https://github.com/adrienverge/yamllint")
     (synopsis "Linter for YAML files")
     (description
@@ -20799,14 +20356,9 @@ style guide, even if the original code didn't violate the style guide.")
                  "/bin/jq")))
              #t)))))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-xmltodict" ,python-xmltodict)
-       ("jq" ,jq)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-flake8" ,python-flake8)
-       ("python-wheel" ,python-wheel)))
+     (list python-argcomplete python-pyyaml python-xmltodict jq))
+    (native-inputs
+     (list python-coverage python-flake8 python-wheel))
     (home-page "https://github.com/kislyuk/yq")
     (synopsis "Command-line YAML/XML processor")
     (description
@@ -20868,7 +20420,7 @@ files, and Makefiles.")
           (lambda _
             (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/Suor/whatever")
     (synopsis "Make anonymous functions by partial application of operators")
     (description "@code{whatever} provides an easy way to make anonymous
@@ -20899,8 +20451,7 @@ functions by partial application of operators.")
            (lambda _
              (invoke "py.test"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-whatever" ,python-whatever)))
+     (list python-pytest python-whatever))
     (home-page "https://github.com/Suor/funcy")
     (synopsis "Functional tools")
     (description "@code{funcy} is a library that provides functional tools.
@@ -20985,11 +20536,9 @@ Week instances stringify to this form.")
                   (string-append "'" libzbar "/lib/libzbar.so.0'")))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)))
+     (list pkg-config python-numpy python-pillow))
     (inputs
-     `(("zbar" ,zbar)))
+     (list zbar))
     (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
     (synopsis "Read one-dimensional barcodes and QR codes")
     (description
@@ -21039,7 +20588,7 @@ and @code{tokens_to_src} to roundtrip.")
          "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tokenize-rt" ,python-tokenize-rt)))
+     (list python-tokenize-rt))
     (home-page "https://github.com/asottile/future-fstrings")
     (synopsis "Backport of fstrings to Python < 3.6")
     (description
@@ -21052,7 +20601,7 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
 (define-public python-typed-ast
   (package
     (name "python-typed-ast")
-    (version "1.4.0")
+    (version "1.4.2")
     (source
      (origin
        (method git-fetch)
@@ -21060,29 +20609,16 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
              (url "https://github.com/python/typed_ast")
              (commit version)))
        (sha256
-        (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
+        (base32 "1wr6pkvvrq6rzjjw88pd5xy8fy06msam4hlxbkglvdmwh4c083l0"))
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
-             (invoke "pytest")
-             #t)))))
-    (native-inputs `(("python-pytest" ,python-pytest)))
+             (invoke "pytest"))))))
+    (native-inputs (list python-pytest))
     (home-page "https://github.com/python/typed_ast")
     (synopsis "Fork of Python @code{ast} modules with type comment support")
     (description "This package provides a parser similar to the standard
@@ -21112,36 +20648,35 @@ based on the CPython 2.7 and 3.7 parsers.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-failing-tests
+         ;; Unfortunately, this doesn't seem to be enough to fix these two
+         ;; tests, but we'll patch this anyway.
+         (add-after 'unpack 'patch-shell-reference
            (lambda _
              (substitute* "tests/test_completion/test_completion.py"
-               (("def test_show_completion")
-                "def _test_show_completion")
-               (("def test_install_completion")
-                "def _test_install_completion"))
-             (substitute* "tests/test_completion/test_completion_install.py"
-               (("def test_completion_install_bash")
-                "def _test_completion_install_bash")
-               (("def test_completion_install_zsh")
-                "def _test_completion_install_zsh")
-               (("def test_completion_install_fish")
-                "def _test_completion_install_fish")
-               (("def test_completion_install_powershell")
-                "def _test_completion_install_powershell"))
-             #t))
+               (("\"bash\"") (string-append "\"" (which "bash") "\""))
+               (("\"/bin/bash\"") (string-append "\"" (which "bash") "\"")))))
          (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "python" "-m" "pytest" "tests/")
-             #t)))))
-    (propagated-inputs
-     `(("python-click" ,python-click)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-shellingham" ,python-shellingham)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp") ; some tests need it
+
+               ;; This is for completion tests
+               (with-output-to-file "/tmp/.bashrc" (lambda _ (display "# dummy")))
+
+               (setenv "GUIX_PYTHONPATH"
+                       (string-append (getcwd) ":"
+                                      (getenv "GUIX_PYTHONPATH")))
+               (let ((disabled-tests (list "test_show_completion"
+                                           "test_install_completion")))
+                 (invoke "python" "-m" "pytest" "tests/"
+                         "-k"
+                         (string-append "not "
+                                        (string-join disabled-tests
+                                                     " and not "))))))))))
+    (propagated-inputs
+     (list python-click))
+    (native-inputs
+     (list python-coverage python-pytest python-shellingham))
     (home-page "https://github.com/tiangolo/typer")
     (synopsis
       "Typer builds CLI based on Python type hints")
@@ -21215,13 +20750,13 @@ Included are implementations of:
 (define-public bpython
   (package
     (name "bpython")
-    (version "0.20.1")
+    (version "0.21")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bpython" version))
        (sha256
-        (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf"))))
+        (base32 "11wlf12nm6ggn9512y4yqs26s8gdgpx0h9ls94k7fsjgjy4rpal8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -21242,19 +20777,19 @@ Included are implementations of:
                 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
              #t)))))
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-curtsies" ,python-curtsies)
-       ("python-greenlet" ,python-greenlet)
-       ("python-six" ,python-six)
-       ("python-wcwidth" ,python-wcwidth)
-       ;; optional dependencies
-       ("python-urwid" ,python-urwid)   ; for bpython-urwid only
-       ("python-watchdog" ,python-watchdog)
-       ("python-jedi" ,python-jedi)))
-    (native-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-mock" ,python-mock)))
+     (list python-pygments
+           python-requests
+           python-curtsies
+           python-greenlet
+           python-six
+           python-cwcwidth
+           python-pyxdg
+           ;; optional dependencies
+           python-urwid ; for bpython-urwid only
+           python-watchdog
+           python-jedi))
+    (native-inputs
+     (list python-sphinx python-mock python-tox python-wheel))
     (home-page "https://bpython-interpreter.org/")
     (synopsis "Fancy interface to the Python interpreter")
     (description "Bpython is a fancy interface to the Python
@@ -21310,7 +20845,7 @@ file system events on Linux.")
          "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:python ,python-2
        #:tests? #f
@@ -21400,7 +20935,7 @@ working with iterables.")
         (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
     (build-system python-build-system)
     (inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://readthedocs.org/projects/latexcodec/")
     (synopsis "Work with LaTeX code in Python")
     (description "Lexer and codec to work with LaTeX code in Python.")
@@ -21418,11 +20953,9 @@ working with iterables.")
         (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (inputs
-     `(("python-latexcodec" ,python-latexcodec)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)))
+     (list python-latexcodec python-pyyaml python-six))
     (arguments
      `(#:test-target "nosetests"))
     (home-page "https://pybtex.org/")
@@ -21442,7 +20975,7 @@ in Python.  You can simply type pybtex instead of bibtex.")
        (sha256
         (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page "https://github.com/tadeck/onetimepass/")
     (synopsis "One-time password library")
     (description "Python one-time password library for HMAC-based (HOTP) and
@@ -21460,7 +20993,7 @@ time-based (TOTP) passwords.")
        (sha256
         (base32 "161k8771m7w60qakyvrwf9q62lvakmix7mpfylpy7713qs939f0j"))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -21489,7 +21022,7 @@ Parso is also able to list multiple syntax errors in your Python file.")
          "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-trio/async_generator")
     (synopsis "Async generators and context managers for Python 3.5+")
     (description "@code{async_generator} back-ports Python 3.6's native async
@@ -21564,9 +21097,9 @@ Glob2 currently based on the glob code from Python 3.3.1.")
          "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (propagated-inputs
-     `(("python-gevent" ,python-gevent)))
+     (list python-gevent))
     (home-page "https://gehrcke.de/gipc/")
     (synopsis "Child process management in the context of gevent")
     (description "Usage of Python's multiprocessing package in a
@@ -21588,7 +21121,7 @@ gevent-powered application.")
          "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -21662,14 +21195,13 @@ path components.")
                (("setup\\(")
                 "setup(\n    test_suite=\"test\",")))))))
     (propagated-inputs
-     `(("python-beautifultable" ,python-beautifultable)
-       ("python-dateutil" ,python-dateutil)
-       ("python-gitpython" ,python-gitpython)
-       ("python-globber" ,python-globber)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-sqlalchemy-utils"
-        ,python-sqlalchemy-utils)))
+     (list python-beautifultable
+           python-dateutil
+           python-gitpython
+           python-globber
+           python-matplotlib
+           python-sqlalchemy
+           python-sqlalchemy-utils))
     (home-page "https://github.com/asharov/git-hammer")
     (synopsis "Provide statistics for git repositories")
     (description
@@ -21701,7 +21233,7 @@ commit, but it also includes some other useful statistics.")
                   (string-append "'" fuse "/lib/libfuse.so'")))
                #t))))))
     (propagated-inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (home-page "https://github.com/fusepy/fusepy")
     (synopsis "Simple ctypes bindings for FUSE")
     (description "Python module that provides a simple interface to FUSE and
@@ -21734,9 +21266,9 @@ MacFUSE.  The binding is created using the standard @code{ctypes} library.")
                   (string-append "\"" fuse "/lib/libfuse.so\""))))
              #t)))))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)))
+     (list python-paramiko))
     (home-page "https://github.com/rianhunter/fusepyng")
     (synopsis "Simple ctypes bindings for FUSE")
     (description "@code{fusepyng} is a Python module that provides a simple
@@ -21744,6 +21276,25 @@ interface to FUSE on various operating systems.  It's just one file and is
 implemented using @code{ctypes}.")
     (license license:isc)))
 
+(define-public python-update-checker
+  (package
+    (name "python-update-checker")
+    (version "0.18.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "update-checker" version))
+       (sha256
+        (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-requests))
+    (native-inputs (list python-black python-flake8 python-pytest))
+    (home-page "https://github.com/bboe/update_checker")
+    (synopsis "Python module that will check for package updates")
+    (description "This package provides a Python module that will check for
+package updates.")
+    (license license:bsd-2)))
+
 (define-public python-userspacefs
   (package
     (name "python-userspacefs")
@@ -21757,7 +21308,7 @@ implemented using @code{ctypes}.")
           "06f2gsiypas270nqfjir4wwjlpkjp097pm6zchc7k20ggg32gv1k"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-fusepyng" ,python-fusepyng)))
+     (list python-fusepyng))
     (home-page "https://github.com/rianhunter/userspacefs")
     (synopsis "User-space file systems for Python")
     (description
@@ -21787,8 +21338,7 @@ user-space file systems in Python.")
                (("pytest < 5") "pytest < 7"))
              ;; We don't care about a coverage report.
              (substitute* "test/requirements.txt"
-               (("coverage.*") "coverage\n"))
-             #t))
+               (("coverage.*") "coverage\n"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
@@ -21796,19 +21346,11 @@ user-space file systems in Python.")
                (delete-file "test/test_js_client.py")
                (delete-file "test/test_tsd_types.py")
                (delete-file "test/test_python_gen.py")
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest"))
-             #t)))))
+               (invoke "pytest")))))))
     (propagated-inputs
-     `(("python-ply" ,python-ply)
-       ("python-six" ,python-six)))
+     (list python-ply python-six))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-coverage python-mock python-pytest python-pytest-runner))
     (home-page "https://github.com/dropbox/stone")
     (synopsis "Official Api Spec Language for Dropbox")
     (description
@@ -21878,9 +21420,7 @@ inferring type information using compile-time introspection.")
     (arguments
      `(#:tests? #f)) ;requires online data
     (propagated-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-packaging" ,python-packaging)
-       ("python-requests" ,python-requests)))
+     (list python-appdirs python-packaging python-requests))
     (home-page "https://github.com/fatiando/pooch")
     (synopsis "Manage your Python library's sample data files")
     (description
@@ -21902,10 +21442,9 @@ and corruption checks.")
          "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-monotonic" ,python-monotonic)
-       ("python-six" ,python-six)))
+     (list python-monotonic python-six))
     (native-inputs
-     `(("python-testtools" ,python-testtools)))
+     (list python-testtools))
     (home-page "https://github.com/harlowja/fasteners")
     (synopsis "Python package that provides useful locks")
     (description
@@ -21932,8 +21471,7 @@ and corruption checks.")
          "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-requests python-six))
     (home-page
      "https://github.com/dashea/requests-file")
     (synopsis "File transport adapter for Requests")
@@ -21963,14 +21501,16 @@ library to allow local file system access via @code{file://} URLs.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         ;; system-error "utime" "~A" ("No such file or directory")
+         (delete 'ensure-no-mtimes-pre-1980)
          (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-pytest))
     (propagated-inputs
-     `(("python-editdistance" ,python-editdistance)))
+     (list python-editdistance))
     (home-page "https://github.com/chriskuehl/identify")
     (synopsis "File identification library for Python")
     (description
@@ -21992,12 +21532,9 @@ identifying what the file is.")
          "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-responses))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-requests" ,python-requests)
-       ("python-requests-file" ,python-requests-file)))
+     (list python-idna python-requests python-requests-file))
     (home-page
      "https://github.com/john-kurkowski/tldextract")
     (synopsis
@@ -22036,12 +21573,9 @@ Public Suffix List's private domains as well.")
                ;; This test fails. It tries to open a network socket.
                (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-colorama" ,python-colorama)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-argcomplete python-colorama python-termcolor))
     (home-page "https://github.com/tldr-pages/tldr-python-client")
     (synopsis "Python command-line client for tldr pages")
     (description "This package provides the @code{tldr} command allowing users
@@ -22072,9 +21606,7 @@ effort to simplify the man pages with practical examples.")
              ;; This test fails. It tries to open a network socket.
              (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-coverage python-mock python-pytest))
     (home-page "https://ekalinin.github.io/nodeenv/")
     (synopsis "Create isolated node.js environments")
     (description
@@ -22097,7 +21629,7 @@ environments.")
          "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://github.com/Bemmu/PyNamecheap")
     (synopsis
@@ -22124,11 +21656,8 @@ environments.")
     (arguments
      `(#:tests? #f))                    ;requires internet access
     (propagated-inputs
-     `(("python-future" ,python-future)
-       ("python-pynamecheap" ,python-pynamecheap)
-       ("python-requests" ,python-requests)
-       ("python-tldextract" ,python-tldextract)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-future python-pynamecheap python-requests
+           python-tldextract python-urllib3))
     (home-page "https://github.com/AnalogJ/lexicon")
     (synopsis
      "Manipulate DNS records on various DNS providers")
@@ -22164,9 +21693,7 @@ Let's Encrypt.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-covdefaults" ,python-covdefaults)
-       ("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)))
+     (list python-covdefaults python-coverage python-pytest))
     (home-page "https://github.com/asottile/cfgv")
     (synopsis "Configuration validation library")
     (description
@@ -22199,14 +21726,14 @@ validation testing and application logic.")
 (define-public python-numba
   (package
     (name "python-numba")
-    (version "0.51.2")
+    (version "0.54.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "numba" version))
        (sha256
         (base32
-         "0s0777m8kq4l96i88zj78np7283v1n4878qfc1gvzb8l45bmkg8n"))))
+         "0gzl2hz9azav9mny4mga19096rrnpw5816r1h4iwrvb4r01wipzr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -22214,24 +21741,27 @@ validation testing and application logic.")
          (add-after 'unpack 'disable-proprietary-features
            (lambda _
              (setenv "NUMBA_DISABLE_HSA" "1")
-             (setenv "NUMBA_DISABLE_CUDA" "1")
-             #t))
+             (setenv "NUMBA_DISABLE_CUDA" "1")))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; This one test fails because a deprecation warning is printed.
+             (substitute* "numba/tests/test_import.py"
+               (("def test_no_accidental_warnings")
+                "def disabled_test_no_accidental_warnings"))))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             ;; Something is wrong with the PYTHONPATH when running the
-             ;; tests from the build directory, as it complains about not being
-             ;; able to import certain modules.
-             (with-directory-excursion "/tmp"
-               (setenv "HOME" (getcwd))
-               (invoke "python3" "-m" "numba.runtests" "-v" "-m")))))))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; Something is wrong with the PYTHONPATH when running the
+               ;; tests from the build directory, as it complains about not being
+               ;; able to import certain modules.
+               (with-directory-excursion "/tmp"
+                 (setenv "HOME" (getcwd))
+                 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
     (propagated-inputs
-     `(("python-llvmlite" ,python-llvmlite)
-       ("python-numpy" ,python-numpy)
-       ("python-singledispatch" ,python-singledispatch)))
+     (list python-llvmlite python-numpy python-singledispatch))
     (native-inputs                      ;for tests
-     `(("python-jinja2" ,python-jinja2)
-       ("python-pygments" ,python-pygments)))
+     (list python-jinja2 python-pygments))
     (home-page "https://numba.pydata.org")
     (synopsis "Compile Python code using LLVM")
     (description "Numba gives you the power to speed up your applications with
@@ -22292,17 +21822,12 @@ tool).")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-vv")))))))
     (inputs
-     `(("c-blosc" ,c-blosc)
-       ("lz4" ,lz4)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list c-blosc lz4 zlib
+           `(,zstd "lib")))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-numpy python-msgpack))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-cython python-pytest python-setuptools-scm))
     (home-page "https://github.com/zarr-developers/numcodecs")
     (synopsis "Buffer compression and transformation codecs")
     (description
@@ -22353,13 +21878,10 @@ codecs for use in data storage and communication applications.")
              (invoke "pytest" "-vv" "-k" "not lmdb")
              #t)))))
     (propagated-inputs
-     `(("python-asciitree" ,python-asciitree)
-       ("python-fasteners" ,python-fasteners)
-       ("python-numcodecs" ,python-numcodecs)
-       ("python-numpy" ,python-numpy)))
+     (list python-asciitree python-fasteners python-numcodecs
+           python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/zarr-developers/zarr-python")
     (synopsis "Chunked, compressed, N-dimensional arrays for Python")
     (description
@@ -22410,20 +21932,17 @@ N-dimensional arrays for Python.")
                          (find-files "dist" "\\.whl$")))
              #t)))))
     (propagated-inputs
-     `(("python-h5py" ,python-h5py)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-natsort" ,python-natsort)
-       ("python-numcodecs" ,python-numcodecs)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-scipy" ,python-scipy)
-       ("python-zarr" ,python-zarr)))
-    (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-pytest" ,python-pytest)
-       ("python-toml" ,python-toml)
-       ("python-flit" ,python-flit)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-h5py
+           python-importlib-metadata
+           python-natsort
+           python-numcodecs
+           python-packaging
+           python-pandas
+           python-scipy
+           python-zarr))
+    (native-inputs
+     (list python-joblib python-pytest python-toml python-flit
+           python-setuptools-scm))
     (home-page "https://github.com/theislab/anndata")
     (synopsis "Annotated data for data analysis pipelines")
     (description "Anndata is a package for simple (functional) high-level APIs
@@ -22453,7 +21972,7 @@ object-oriented library such as @code{scikit-learn}.")
                (invoke "nosetests" "-v"))
              #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://pypi.org/project/dill/")
     (synopsis "Serialize all of Python")
     (description "Dill extends Python's @code{pickle} module for serializing
@@ -22500,7 +22019,7 @@ the saved state of the original interpreter session.")
              (invoke "python" "-m" "multiprocess.tests")
              #t)))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)))
+     (list python-dill))
     (home-page "https://pypi.org/project/multiprocess/")
     (synopsis "Multiprocessing and multithreading in Python")
     (description
@@ -22531,7 +22050,7 @@ library's @code{threading} module.")
                (invoke "python" "-m" "pytest" "--doctest-modules"
                        "--pyargs" "toolz")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/pytoolz/toolz/")
     (synopsis "List processing tools and functional utilities")
     (description
@@ -22542,22 +22061,25 @@ functions, and dictionaries.")
 (define-public python-cytoolz
   (package
     (name "python-cytoolz")
-    (version "0.9.0.1")
+    (version "0.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cytoolz" version))
        (sha256
         (base32
-         "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
+         "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
     (build-system python-build-system)
     ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
     ;; 'exceptions'"
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-toolz" ,python-toolz)))
+     (list python-toolz))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/pytoolz/cytoolz")
     (synopsis "High performance functional utilities")
     (description
@@ -22566,6 +22088,22 @@ main differences are that @code{cytoolz} is faster and cytoolz offers a C API
 that is accessible to other projects developed in Cython.")
     (license license:bsd-3)))
 
+;; python-cooler doesn't work with 0.11 yet
+(define-public python-cytoolz-for-cooler
+  (package
+    (inherit python-cytoolz)
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cytoolz" version))
+       (sha256
+        (base32
+         "0p4a9nadsy1337gy2cnb5yanbn03j3zm6d9adyqad9bk3nlbpxc2"))
+       (modules '((guix build utils)))
+       (snippet
+        '(for-each delete-file (find-files "cytoolz" "\\.c$")))))))
+
 (define-public python-sortedcollections
   (package
     (name "python-sortedcollections")
@@ -22579,7 +22117,7 @@ that is accessible to other projects developed in Cython.")
          "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-sortedcontainers))
     (arguments '(#:tests? #f))  ; Tests not included in release tarball.
     (home-page "http://www.grantjenks.com/docs/sortedcollections/")
     (synopsis "Python Sorted Collections")
@@ -22656,24 +22194,15 @@ data.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'do-not-override-PYTHONPATH
-           (lambda _
-             ;; Append to PYTHONPATH instead of overriding it so
-             ;; that dependencies from Guix can be found.
-             (substitute* "tests/testutils.py"
-               (("env\\['PYTHONPATH'\\] = pythonpath")
-                "env['PYTHONPATH'] += os.pathsep + pythonpath"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (invoke "pytest" "-s" "-vv")
                  (format #t "test suite not run~%")))))))
     (native-inputs
-     `(;; For tests.
-       ("python-cloudpickle-testpkg" ,python-cloudpickle-testpkg)
-       ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest)
-       ("python-tornado" ,python-tornado-6)))
+     (list ;; For tests.
+           python-cloudpickle-testpkg python-psutil python-pytest
+           python-tornado-6))
     (home-page "https://github.com/cloudpipe/cloudpickle")
     (synopsis "Extended pickling support for Python objects")
     (description
@@ -22744,7 +22273,7 @@ they use the same path.")
     ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/blosc/python-blosc")
     (synopsis "Python wrapper for the Blosc data compressor library")
     (description "Blosc is a high performance compressor optimized for binary
@@ -22775,12 +22304,12 @@ This Python package wraps the Blosc library.")
          "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-blosc" ,python-blosc)
-       ("python-locket" ,python-locket)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-toolz" ,python-toolz)))
+     (list python-blosc
+           python-locket
+           python-numpy
+           python-pandas
+           python-pyzmq
+           python-toolz))
     (home-page "https://github.com/dask/partd/")
     (synopsis "Appendable key-value storage")
     (description "Partd stores key-value pairs.  Values are raw bytes.  We
@@ -22812,38 +22341,34 @@ decisions with any given backend.")
 (define-public python-dask
   (package
     (name "python-dask")
-    (version "2021.9.1")
+    (version "2021.11.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "dask" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dask/dask/")
+             (commit "5a8275dd53193b47457cdfadc0e2356ea3eb6ccd")))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0p6nd8wi30l29g5hdwk0453w6fxg4zvxq1y1ix0fa2f8rbr2n7z1"))))
+        (base32 "0h8w7c03mn6s2mmwbqd2sqay3k4vaqiwlsbvliziggw28042zfw2"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-broken-tests
-           (lambda _
-             ;; This test is marked as xfail when pytest-xdist is used.
-             (substitute* "dask/tests/test_threaded.py"
-               (("def test_interrupt\\(\\)" m)
-                (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
-                               m)))))
          (replace 'check
-           (lambda _ (invoke "pytest" "-vv"))))))
-    (propagated-inputs
-     `(("python-cloudpickle" ,python-cloudpickle)
-       ("python-fsspec" ,python-fsspec)
-       ("python-numpy" ,python-numpy)
-       ("python-packaging" ,python-packaging)
-       ("python-pandas" ,python-pandas)
-       ("python-partd" ,python-partd)
-       ("python-toolz" ,python-toolz)
-       ("python-pyyaml" ,python-pyyaml)))
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv")))))))
+    (propagated-inputs
+     (list python-cloudpickle
+           python-fsspec
+           python-numpy
+           python-packaging
+           python-pandas
+           python-partd
+           python-toolz
+           python-pyyaml))
+    (native-inputs
+     (list python-pytest python-pytest-runner python-pytest-rerunfailures))
     (home-page "https://github.com/dask/dask/")
     (synopsis "Parallel computing with task scheduling")
     (description
@@ -22867,8 +22392,8 @@ run on top of the dynamic task schedulers. ")
         (base32
          "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
     (build-system python-build-system)
-    (native-inputs `(("python-pytest" ,python-pytest)))
-    (inputs `(("python" ,python)))
+    (native-inputs (list python-pytest))
+    (inputs (list python))
     (home-page "https://github.com/luther9/ilinkedlist-py")
     (synopsis "Immutable linked list library")
     (description
@@ -22949,7 +22474,7 @@ on regular expressions.")
          "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/rholder/retrying")
     (synopsis "Library for adding retry behavior")
     (description "Retrying is a general-purpose retrying library to simplify
@@ -22982,14 +22507,14 @@ Features:
      ;; attribute 'empty_template_setup'".
      `(#:tests? #false))
     (propagated-inputs
-     `(("python-cfgv" ,python-cfgv)
-       ("python-identify" ,python-identify)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-nodeenv" ,python-nodeenv)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-cfgv
+           python-identify
+           python-importlib-metadata
+           python-importlib-resources
+           python-nodeenv
+           python-pyyaml
+           python-toml
+           python-virtualenv))
     (home-page "https://github.com/pre-commit/pre-commit")
     (synopsis "Framework for managing multi-language pre-commit hooks")
     (description
@@ -23029,7 +22554,7 @@ RFC 8265 and RFC 8266.")
          "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/abseil/abseil-py")
     (synopsis "Abseil Python common libraries")
     (description
@@ -23073,8 +22598,7 @@ source via the Abstract Syntax Tree.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are none
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-wheel" ,python-wheel)))
+     (list python-six python-wheel))
     (home-page "https://github.com/simonpercivall/astunparse")
     (synopsis "AST unparser for Python")
     (description "This package provides an AST unparser for Python.  It is a
@@ -23085,16 +22609,16 @@ distribution.")
 (define-public python-gast
   (package
     (name "python-gast")
-    (version "0.3.3")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "gast" version))
        (sha256
-        (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
+        (base32 "1xv77kzghiqfm4fnvlv0p878ma152dvcfkly3jij89lqigxcw7zq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-astunparse" ,python-astunparse)))
+     (list python-astunparse))
     (home-page "https://pypi.org/project/gast/")
     (synopsis "Generic Python AST that abstracts the underlying Python version")
     (description
@@ -23116,7 +22640,7 @@ module.")
          "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-babel" ,python-babel)))
+     (list python-babel))
     (home-page "https://github.com/dahlia/wikidata")
     (synopsis "Wikidata client library")
     (description
@@ -23138,7 +22662,7 @@ module.")
          "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/gnublade/doctest-ignore-unicode")
     (synopsis "Ignore Unicode literal prefixes in doctests")
     (description
@@ -23179,10 +22703,7 @@ class in a @acronym{DRY, Don't Repeat Yourself} way.")
     (arguments
      `(#:tests? #f)) ; No tests exist.
     (propagated-inputs
-     `(("python-extras" ,python-extras)
-       ("python-arrow" ,python-arrow)
-       ("python-numpy" ,python-numpy)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)))
+     (list python-extras python-arrow python-numpy python-ruamel.yaml))
     (home-page "https://construct.readthedocs.io")
     (synopsis "Declarative and symmetrical parser and builder for binary data")
     (description
@@ -23213,12 +22734,9 @@ make your work easier.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-pytest python-pytest-cov python-pytest-asyncio))
     (propagated-inputs
-     `(("python-async-generator" ,python-async-generator)
-       ("python-attrs" ,python-attrs)))
+     (list python-async-generator python-attrs))
     (home-page "https://github.com/python-trio/outcome")
     (synopsis "Capture the outcome of Python function calls")
     (description
@@ -23230,13 +22748,13 @@ project.")
 (define-public python-trio
   (package
     (name "python-trio")
-    (version "0.17.0")
+    (version "0.19.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trio" version))
        (sha256
-        (base32 "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78"))))
+        (base32 "1qgg4zhca81dxc1nlmcr5pl1bclmvdp3niqbyslwxs65bs732pl9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -23247,39 +22765,43 @@ project.")
              (setenv "HOME" "/tmp")
              #t))
          (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv" "-k"
-                     (string-append
-                     ;; This test times out.
-                     "not test_ki_protection_works"
-                     ;; Assertion errors.
-                     " and not test_guest_mode_ki"
-                     " and not test_run_in_trio_thread_ki"
-                     ;; These try to raise KeyboardInterrupt which does not work
-                     ;; in the build environment.
-                     " and not test_ki_self"
-                     " and not test_ki_wakes_us_up"
-                     ;; Failure in name resolution.
-                     " and not test_getnameinfo"
-                     " and not test_SocketType_resolve"
-                     ;; OSError: protocol not found.
-                     " and not test_getprotobyname")))))))
-    (native-inputs
-     `(("python-astor" ,python-astor)
-       ("python-ipython" ,python-ipython)
-       ("python-jedi" ,python-jedi)
-       ("python-pylint" ,python-pylint)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-trustme" ,python-trustme)))
-    (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-idna" ,python-idna)
-       ("python-outcome" ,python-outcome)
-       ("python-sniffio" ,python-sniffio)
-       ("python-sortedcontainers"
-        ,python-sortedcontainers)))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "-k"
+                       (string-append
+                         ;; This test times out.
+                         "not test_ki_protection_works"
+                         ;; Assertion errors.
+                         " and not test_guest_mode_ki"
+                         " and not test_run_in_trio_thread_ki"
+                         " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
+                         " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
+                         " and not test_locals_destroyed_promptly_on_cancel"
+                         ;; These try to raise KeyboardInterrupt which does not work
+                         ;; in the build environment.
+                         " and not test_ki_self"
+                         " and not test_ki_wakes_us_up"
+                         ;; Failure in name resolution.
+                         " and not test_getnameinfo"
+                         " and not test_SocketType_resolve"
+                         ;; OSError: protocol not found.
+                         " and not test_getprotobyname"))))))))
+    (native-inputs
+     (list python-astor
+           python-ipython
+           python-jedi
+           python-pylint
+           python-pyopenssl
+           python-pytest
+           python-pytest-cov
+           python-trustme))
+    (propagated-inputs
+     (list python-async-generator
+           python-attrs
+           python-idna
+           python-outcome
+           python-sniffio
+           python-sortedcontainers))
     (home-page "https://github.com/python-trio/trio")
     (synopsis "Friendly Python library for async concurrency and I/O")
     (description
@@ -23307,15 +22829,10 @@ programs that do multiple things at the same time with parallelized I/O.")
            (lambda _
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-pytest" ,python-pytest)))
+     (list python-attrs python-pytest))
     (propagated-inputs
-     `(("python-mypy" ,python-mypy)
-       ("python-mypy-extensions"
-        ,python-mypy-extensions)
-       ("python-trio" ,python-trio)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
+     (list python-mypy python-mypy-extensions python-trio
+           python-typing-extensions))
     (home-page "https://github.com/python-trio/trio-typing")
     (synopsis "Static type checking support for Trio and related projects")
     (description
@@ -23371,8 +22888,7 @@ and dates in \"human readable\" forms.  For example, it would display
           "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-twisted" ,python-twisted)
-       ("python-six" ,python-six)))
+     (list python-twisted python-six))
     (home-page "https://github.com/crossbario/txaio")
     (synopsis "Compatibility layer between Python asyncio and Twisted")
     (description "Txaio provides a compatibility layer between the Python
@@ -23392,7 +22908,7 @@ and dates in \"human readable\" forms.  For example, it would display
          "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/brentp/toolshed/")
     (synopsis "Collection of modules and functions for working with data")
     (description "This is a collection of well-tested, simple modules and
@@ -23412,7 +22928,7 @@ functions that aim to reduce boilerplate when working with data.")
          "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/spotify/annoy/")
     (synopsis "Approximate nearest neighbors library")
     (description
@@ -23434,8 +22950,7 @@ processes may share the same data.")
                 "0r79cx4v2dw4hzr0annkkxxis46c8hivq61sr39z6p7lcjsbk1ki"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-natsort" ,python-natsort)))
+     (list python-dateutil python-natsort))
     (home-page "https://github.com/kiorky/croniter")
     (synopsis "Iterate datetime objects with cron-like syntax")
     (description
@@ -23458,7 +22973,7 @@ format.")
      ;; Comptability tests fail so they are disabled.
      `(#:tests? #f))
     (inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "https://gitlab.com/doctormo/python-crontab/")
     (synopsis "Module for reading and writing crontab files")
     (description "This Python module can read, write crontab files, and
@@ -23504,7 +23019,7 @@ by Igor Pavlov.")
          (replace 'check
            (lambda _ (invoke "nosetests"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/pydron/ifaddr")
     (synopsis "Network interface and IP address enumeration library")
     (description "This package provides a network interface and IP address
@@ -23524,9 +23039,9 @@ enumeration library in Python.")
          "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-ifaddr" ,python-ifaddr)))
+     (list python-ifaddr))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -23583,17 +23098,16 @@ compatible).")
 (define-public python-bsddb3
   (package
     (name "python-bsddb3")
-    (version "6.2.6")
+    (version "6.2.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bsddb3" version))
        (sha256
-        (base32
-         "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
+        (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
     (build-system python-build-system)
     (inputs
-     `(("bdb" ,bdb)))
+     (list bdb))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -23629,7 +23143,7 @@ Complete support for Berkeley DB Base Replication.  Support for RPC.")
                 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://dbfread.readthedocs.io")
     (synopsis "Read DBF Files with Python")
     (description
@@ -23663,7 +23177,7 @@ one-off scripts.")
                                "    " m)))
              #t)))))
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)))
+     (list python-freezegun))
     (home-page
      "https://github.com/pydanny/cached-property")
     (synopsis
@@ -23691,12 +23205,9 @@ time-or-computationally-expensive properties quick and easy and works in Python
         (base32 "1q05pzca3wfwgnbg03l3bagnhh348yx68w4aa91rg3g8zlviwjz1"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-branca" ,python-branca)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-requests" ,python-requests)))
+     (list python-branca python-jinja2 python-numpy python-requests))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/python-visualization/folium")
     (synopsis "Make beautiful maps with Leaflet.js & Python")
     (description "@code{folium} makes it easy to visualize data that’s been
@@ -23747,7 +23258,7 @@ for manual interpretation.")
          "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "https://github.com/MKuranowski/pyroutelib3")
     (synopsis "Library for simple routing on OSM data")
     (description "Library for simple routing on OSM data")
@@ -23766,9 +23277,9 @@ for manual interpretation.")
          "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
+     (list python-pyparsing))
     (native-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/sciunto-org/python-bibtexparser")
     (synopsis "Python library to parse BibTeX files")
     (description "BibtexParser is a Python library to parse BibTeX files.")
@@ -23777,17 +23288,17 @@ for manual interpretation.")
 (define-public python-distro
   (package
     (name "python-distro")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "distro" version))
        (sha256
         (base32
-         "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
+         "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/nir0s/distro")
     (synopsis
      "OS platform information API")
@@ -23818,15 +23329,10 @@ information in various formats.")
          (replace 'check
            (lambda _ (invoke "pytest"))))))
     (propagated-inputs
-     `(("python-cairocffi" ,python-cairocffi)
-       ("python-cssselect2" ,python-cssselect2)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-pillow" ,python-pillow)
-       ("python-tinycss2" ,python-tinycss2)))
+     (list python-cairocffi python-cssselect2 python-defusedxml
+           python-pillow python-tinycss2))
     (native-inputs
-     `(("python-pytest-flake8" ,python-pytest-flake8)
-       ("python-pytest-isort" ,python-pytest-isort)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
     (home-page "https://cairosvg.org/")
     (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
     (description "CairoSVG is a SVG converter based on Cairo.  It can export
@@ -23893,9 +23399,7 @@ converters and more, those based on the library itself.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;missing dependencies
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-docopt" ,python-docopt)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-dateutil python-docopt python-pyyaml))
     (home-page "https://github.com/grokzen/pykwalify")
     (synopsis
      "Python lib/cli for JSON/YAML schema validation")
@@ -23907,31 +23411,34 @@ for YAML and JSON.")
 (define-public python-dbusmock
   (package
     (name "python-dbusmock")
-    (version "0.18.3")
+    (version "0.24.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-dbusmock" version))
        (sha256
         (base32
-         "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
+         "0kvjwn5sdp3rqcbclvxljkmk988l12dvppzfn3ldy3jxbyyn1mjn"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-shell-path
-           (lambda _
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "tests/test_code.py"
                (("/bin/bash") (which "bash")))
-             #t)))))
-    (native-inputs
-     `(;; For tests.
-       ("dbus" ,dbus) ; for dbus-daemon
-       ("python-nose" ,python-nose)
-       ("which" ,which)))
+             (substitute* "dbusmock/testcase.py"
+               (("'dbus-daemon'")
+                (string-append "'" (assoc-ref inputs "dbus")
+                               "/bin/dbus-daemon'"))))))))
+    (native-inputs
+     (list ;; For tests.
+           dbus ; for dbus-daemon
+           python-nose which))
+    (inputs
+     (list dbus))
     (propagated-inputs
-     `(("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)))
+     (list python-dbus python-pygobject))
     (home-page "https://github.com/martinpitt/python-dbusmock")
     (synopsis "Python library for mock D-Bus objects")
     (description "python-dbusmock allows for the easy creation of mock objects on
@@ -23956,9 +23463,7 @@ services to what you expect in your tests.")
     ;; XXX: No tests on PyPI, and the repository has no tags.
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-simplejson" ,python-simplejson)
-       ("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-dateutil python-simplejson python-sortedcontainers))
     (synopsis "Serialize Python types to/from JSON")
     (description
      "This package provides functionality to serialize arbitrary data types
@@ -24000,9 +23505,7 @@ register custom encoders and decoders.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest"))))))
     (native-inputs
-     `(("double-conversion" ,double-conversion)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-pytest" ,python-pytest)))
+     (list double-conversion python-setuptools-scm python-pytest))
     (home-page "https://github.com/ultrajson/ultrajson")
     (synopsis "Ultra fast JSON encoder and decoder for Python")
     (description
@@ -24038,10 +23541,7 @@ bindings for Python 3.")
                (invoke "py.test" "-v" "tests")
                #t)))))
       (propagated-inputs
-       `(("python-flexmock" ,python-flexmock)
-         ("python-pytest" ,python-pytest)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-six" ,python-six)))
+       (list python-flexmock python-pytest python-pytest-cov python-six))
       (home-page "https://github.com/oinume/iocapture")
       (synopsis "Python capturing tool for stdout and stderr")
       (description
@@ -24109,20 +23609,18 @@ standard error channel (stderr) in your program.")
                         " and not test_send_receive"
                         " and not test_socket_options"))))))))
     (propagated-inputs
-     `(("python-idna" ,python-idna)
-       ("python-sniffio" ,python-sniffio)
-       ("python-typing-extensions" ,python-typing-extensions)))
-    (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-iniconfig" ,python-iniconfig)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-trio" ,python-pytest-trio)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-trustme" ,python-trustme)
-       ("python-uvloop" ,python-uvloop)))
+     (list python-idna python-sniffio python-typing-extensions))
+    (native-inputs
+     (list python-coverage
+           python-hypothesis
+           python-iniconfig
+           python-mock
+           python-pytest-6
+           python-pytest-mock
+           python-pytest-trio
+           python-setuptools-scm
+           python-trustme
+           python-uvloop))
     (home-page "https://github.com/agronholm/anyio")
     (synopsis "Compatibility layer for multiple asynchronous event loops")
     (description
@@ -24152,11 +23650,8 @@ itself.")
            "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-iocapture" ,python-iocapture)
-         ("python-mock" ,python-mock)
-         ("python-pytest" ,python-pytest)
-         ("python-pytest-cov" ,python-pytest-cov)
-         ("python-pytest-xdist" ,python-pytest-xdist)))
+       (list python-iocapture python-mock python-pytest python-pytest-cov
+             python-pytest-xdist))
       (home-page "https://github.com/neithere/argh/")
       (synopsis "Argparse wrapper with natural syntax")
       (description
@@ -24181,7 +23676,7 @@ including the native API of @code{python-argparse}.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; there are none
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://pypi.org/project/ppft/")
     (synopsis "Fork of Parallel Python")
     (description
@@ -24216,8 +23711,7 @@ load balancing.")
              (invoke "py.test" "-vv")
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("which" ,which)))
+     (list python-pytest which))
     (home-page "https://pypi.org/project/pox/")
     (synopsis "Python utilities for file system exploration and automated builds")
     (description
@@ -24247,16 +23741,11 @@ essential tools are located.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "./tests/__main__.py"))))))
     (propagated-inputs
-     `(("python-dill" ,python-dill)
-       ("python-multiprocess" ,python-multiprocess)
-       ("python-pox" ,python-pox)
-       ("python-ppft" ,python-ppft)))
+     (list python-dill python-multiprocess python-pox python-ppft))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://pypi.org/project/pathos/")
     (synopsis
      "Parallel graph management and execution in heterogeneous computing")
@@ -24271,7 +23760,7 @@ the syntactic logic to configure and launch jobs in an execution environment.")
 (define-public python-flit
   (package
     (name "python-flit")
-    (version "3.2.0")
+    (version "3.3.0")
     ;; We fetch the sources via git because on pypi the package is split into
     ;; two parts: flit and flit_core; flit_core cannot be built without flit.
     (source (origin
@@ -24282,7 +23771,7 @@ the syntactic logic to configure and launch jobs in an execution environment.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0fpqxpz5bv2xpv1akmc0c8yfss6sj09wdzxrlf3qw1lp1jhbzpyc"))))
+                "0mvyymw3zqsnip4x4ca6anr5rbx30hcmpqwrnhjwcm7s8mycd01x"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -24327,8 +23816,7 @@ the syntactic logic to configure and launch jobs in an execution environment.")
                           (find-files "dist" "\\.whl$")))))))
        #:tests? #f)) ; XXX: Check requires network access.
     (propagated-inputs
-     `(("python-pytoml" ,python-pytoml)
-       ("python-toml" ,python-toml)))
+     (list python-pytoml python-toml))
     (native-inputs
      `(("python-docutils" ,python-docutils)
        ("python-responses" ,python-responses)
@@ -24413,7 +23901,7 @@ scripts to load entry points more quickly.")
         (base32
          "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
     (native-inputs
-     `(("python-tox" ,python-tox)))
+     (list python-tox))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -24444,7 +23932,7 @@ that take parsers as their arguments and return them as result values.")
     (arguments
      `(#:tests? #f))                    ;FIXME: tests fail, not sure why
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (build-system python-build-system)
     (home-page "https://github.com/avakar/speg")
     (synopsis "PEG-based parser interpreter with memoization")
@@ -24464,57 +23952,13 @@ memoization.")
         (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-speg" ,python-speg)))
+     (list python-speg))
     (home-page "https://github.com/avakar/pycson")
     (synopsis "Parser for Coffeescript Object Notation (CSON)")
     (description "This package is a parser for Coffeescript Object
 Notation (CSON).")
     (license license:expat)))
 
-(define-public python-asynctest
-  (package
-    (name "python-asynctest")
-    (version "0.13.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "asynctest" version))
-       (sha256
-        (base32
-         "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
-    (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
-         (add-after 'unpack 'disable-tests
-           (lambda* _
-             ;; XXX: 7 tests fail out of 220. Disable them for now.
-             (substitute* (list "test/test_selector.py"
-                                "test/test_mock.py")
-               (("def test_events_watched_outside_test_are_ignored")
-                "@unittest.skip('disabled by guix')
-    def test_events_watched_outside_test_are_ignored")
-               (("def test_awaited_from_autospec_mock.*" line)
-                (string-append line "        return True\n"))
-               (("def test_create_autospec_on_coroutine_and_using_assert_methods.*" line)
-                (string-append line "        return True\n"))
-               (("def test_patch_coroutine_with_multiple_scopes.*" line)
-                (string-append line "        return True\n"))
-               (("def test_multiple_patches_on_coroutine.*" line)
-                (string-append line "        return True\n"))
-               (("def test_patch_coroutine_only_when_running.*" line)
-                (string-append line "        return True\n")))
-             #t)))))
-    (home-page "https://github.com/Martiusweb/asynctest")
-    (synopsis "Extension of unittest for testing asyncio libraries")
-    (description
-     "The package asynctest is built on top of the standard unittest module
-and cuts down boilerplate code when testing libraries for asyncio.")
-    (license license:asl2.0)))
-
 (define-public python-aionotify
   (package
     (name "python-aionotify")
@@ -24559,8 +24003,7 @@ and cuts down boilerplate code when testing libraries for asyncio.")
            (lambda _
              (invoke "make" "SKIP_DEPS=1"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-coverage" ,python-coverage)))
+     (list python-nose python-coverage))
     (home-page "https://github.com/clarete/forbiddenfruit")
     (synopsis "Patch python built-in objects")
     (description "This project allows Python code to extend built-in types.")
@@ -24579,11 +24022,10 @@ and cuts down boilerplate code when testing libraries for asyncio.")
          "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ;; `which`, `kadmin.local` binaries called inside library
-       ("which" ,which)
-       ("mit-krb5" ,mit-krb5)))
-    (native-inputs `(("mit-krb5" ,mit-krb5)))
+     (list python-six
+           ;; `which`, `kadmin.local` binaries called inside library
+           which mit-krb5))
+    (native-inputs (list mit-krb5))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -24616,15 +24058,12 @@ tests.")
          "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-six" ,python-six)))
+     (list python-decorator python-six))
     (inputs
-     `(("mit-krb5" ,mit-krb5)))
+     (list mit-krb5))
     ;; for tests
     (native-inputs
-     `(("python-parameterized" ,python-parameterized)
-       ("python-k5test" ,python-k5test)
-       ("python-nose" ,python-nose)))
+     (list python-parameterized python-k5test python-nose))
     (home-page "https://github.com/pythongssapi/python-gssapi")
     (synopsis "Python GSSAPI Wrapper")
     (description
@@ -24646,8 +24085,7 @@ also be usable with other GSSAPI mechanisms.")
           "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("git" ,git)))
+     (list python-mock git))
     (home-page "https://github.com/mgedmin/check-manifest")
     (synopsis "Check MANIFEST.in in a Python source package for completeness")
     (description "Python package can include a MANIFEST.in file to help with
@@ -24699,12 +24137,9 @@ files.  These files are used to translate strings in android apps.")
              (delete-file "tests/test_snapshot_diff.py")
              #t)))))
     (propagated-inputs
-     `(("python-argh" ,python-argh)
-       ("python-pathtools" ,python-pathtools)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-argh python-pathtools python-pyyaml))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-timeout" ,python-pytest-timeout)))
+     (list python-pytest-cov python-pytest-timeout))
     (home-page "https://github.com/gorakhargosh/watchdog")
     (synopsis "File system events monitoring")
     (description "This package provides a way to monitor file system events
@@ -24715,7 +24150,7 @@ but portable.")
 (define-public python-watchgod
   (package
     (name "python-watchgod")
-    (version "0.6")
+    (version "0.7")
     (source
      (origin
        ;; There are no tests in the PyPI tarball.
@@ -24725,7 +24160,7 @@ but portable.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66"))))
+        (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -24735,19 +24170,14 @@ but portable.")
              (when tests?
                (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-docutils" ,python-docutils)
-       ("python-flake8" ,python-flake8)
-       ("python-isort" ,python-isort)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pyflakes" ,python-pyflakes)
-       ("python-pygments" ,python-pygments)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-aiohttp" ,python-pytest-aiohttp)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytest-sugar" ,python-pytest-sugar)
-       ("python-pytest-toolbox" ,python-pytest-toolbox)))
+     (list python-coverage
+           python-pygments
+           python-pytest
+           python-pytest-asyncio
+           python-pytest-cov
+           python-pytest-mock
+           python-pytest-sugar
+           python-pytest-toolbox))
     (home-page "https://github.com/samuelcolvin/watchgod")
     (synopsis "Simple, modern file watching and code reload in Python")
     (description
@@ -24768,7 +24198,7 @@ operating systems and an elegant approach to concurrency using threading.")
         (base32
          "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
     (build-system python-build-system)
-    (native-inputs `(("unzip" ,unzip)))
+    (native-inputs (list unzip))
     (home-page "https://bitbucket.org/techtonik/python-wget/")
     (synopsis "Pure Python download utility")
     (description "The python-wget library provides an API to download files
@@ -24794,21 +24224,21 @@ with features similar to the @command{wget} utility.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-android-stringslib" ,python-android-stringslib)
-        ("python-dateutil" ,python-dateutil)
-        ("python-gitlab" ,python-gitlab)
-        ("python-lxml" ,python-lxml)
-        ("python-polib" ,python-polib)
-        ("python-pyenchant" ,python-pyenchant)
-        ("python-pygit2" ,python-pygit2)
-        ("python-pygithub" ,python-pygithub)
-        ("python-pyqt" ,python-pyqt)
-        ("python-requests" ,python-requests)
-        ("python-ruamel.yaml" ,python-ruamel.yaml)
-        ("python-translation-finder" ,python-translation-finder)
-        ("python-watchdog" ,python-watchdog)))
-    (native-inputs
-     `(("qttools" ,qttools)))
+      (list python-android-stringslib
+            python-dateutil
+            python-gitlab
+            python-lxml
+            python-polib
+            python-pyenchant
+            python-pygit2
+            python-pygithub
+            python-pyqt
+            python-requests
+            python-ruamel.yaml
+            python-translation-finder
+            python-watchdog))
+    (native-inputs
+     (list qttools))
     (home-page "https://framagit.org/tyreunom/offlate")
     (synopsis "Offline translation interface for online translation tools")
     (description "Offlate offers a unified interface for different translation
@@ -24832,7 +24262,7 @@ an upload option to send your work back to the platform.")
          "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/ppannuto/python-titlecase")
     (synopsis "Capitalize strings similar to book titles")
     (description
@@ -24884,11 +24314,9 @@ custom PNG processing.")
          "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-pycodestyle" ,python-pycodestyle)
-       ("python-pytest" ,python-pytest)))
+     (list python-hypothesis python-pycodestyle python-pytest))
     (propagated-inputs
-     `(("python-levenshtein" ,python-levenshtein)))
+     (list python-levenshtein))
     (home-page "https://github.com/seatgeek/fuzzywuzzy")
     (synopsis "Fuzzy string matching in Python")
     (description "Approximate string matching using
@@ -24933,8 +24361,7 @@ your process.")
           "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-jinja2" ,python-jinja2)))
+     (list python-lxml python-jinja2))
     (home-page "https://gcovr.com/")
     (synopsis "Utility for generating code coverage results")
     (description
@@ -24956,7 +24383,10 @@ Python.")
         (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; TODO: package dependencies required for tests.
+     ;; TODO: package dependencies required for tests.
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'sanity-check))))
     (synopsis "Interface for Open Geospatial Consortium web service")
     (description
      "OWSLib is a Python package for client programming with Open Geospatial
@@ -24979,13 +24409,13 @@ content models.")
     ;; Testing requires undocumented setup changes, and so testing is disabled here.
     (arguments `(#:tests? #f))
     (propagated-inputs
-      `(("python-certifi" ,python-certifi)
-        ("python-six" ,python-six)
-        ("python-dateutil" ,python-dateutil)
-        ("python-urllib3" ,python-urllib3)
-        ("python-pyjwt" ,python-pyjwt)
-        ("python-cryptography" ,python-cryptography)
-        ("python-nose" ,python-nose)))
+      (list python-certifi
+            python-six
+            python-dateutil
+            python-urllib3
+            python-pyjwt
+            python-cryptography
+            python-nose))
     (synopsis "DocuSign Python Client")
     (description "The Official DocuSign Python Client Library used to interact
  with the eSign REST API.  Send, sign, and approve documents using this client.")
@@ -25005,7 +24435,7 @@ content models.")
          "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (home-page "https://github.com/xattr/xattr")
     (synopsis
      "Python wrapper for extended file system attributes")
@@ -25048,12 +24478,9 @@ we can stop writing custom parsers for syslog-type records.")
          "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-json-logger" ,python-json-logger)))
+     (list python-json-logger))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-six" ,python-six)))
+     (list python-mock python-pytest python-setuptools-scm python-six))
     (home-page "https://github.com/jd/daiquiri")
     (synopsis
      "Library to configure Python logging easily")
@@ -25081,20 +24508,17 @@ logging in Python.  It also provides some custom formatters and handlers.")
              (invoke "python" "setup.py" "testr" "--slowest"
                      "--testr-args=until-failure"))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-daiquiri" ,python-daiquiri)
-       ("python-fixtures" ,python-fixtures)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pbr" ,python-pbr)
-       ("python-psutil" ,python-psutil)
-       ("python-six" ,python-six)
-       ("python-xattr" ,python-xattr)))
-    (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-os-testr" ,python-os-testr)
-       ("python-requests" ,python-requests)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testtools" ,python-testtools)))
+     (list python-click
+           python-daiquiri
+           python-fixtures
+           python-jinja2
+           python-pbr
+           python-psutil
+           python-six
+           python-xattr))
+    (native-inputs
+     (list python-mock python-os-testr python-requests
+           python-testrepository python-testtools))
     (home-page "https://github.com/jd/pifpaf")
     (synopsis "Tools and fixtures to manage daemons for testing in Python")
     (description "Pifpaf is a suite of fixtures and a command-line tool that
@@ -25117,14 +24541,14 @@ evolved from its precursor @code{overtest}.")
          "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-html5lib" ,python-html5lib)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)
-       ("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)))
+     (list python-docutils
+           python-html5lib
+           python-nbconvert
+           python-nbformat
+           python-pytest
+           python-six))
     (native-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal)))
+     (list python-pbr-minimal))
     (home-page "https://github.com/minrk/pytest-check-links")
     (synopsis "Check links in files")
     (description "This package provides a pytest plugin that checks URLs for
@@ -25249,9 +24673,7 @@ information for your operating system.")
         (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-frozendict" ,python-frozendict)
-       ("python-simplejson" ,python-simplejson)))
+     (list python-six python-frozendict python-simplejson))
     (home-page "https://github.com/matrix-org/python-canonicaljson")
     (synopsis "Canonical JSON")
     (description
@@ -25281,13 +24703,10 @@ information for your operating system.")
         (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-canonicaljson" ,python-canonicaljson)
-       ("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-pynacl" ,python-pynacl)
-       ("python-typing-extensions" ,python-typing-extensions)
-       ("python-unpaddedbase64" ,python-unpaddedbase64)))
+     (list python-canonicaljson python-importlib-metadata python-pynacl
+           python-typing-extensions python-unpaddedbase64))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-setuptools-scm))
     (home-page "https://github.com/matrix-org/python-signedjson")
     (synopsis "Sign JSON objects with ED25519 signatures")
     (description
@@ -25331,8 +24750,7 @@ key.
         (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-pynacl" ,python-pynacl)))
+     (list python-six python-pynacl))
     (home-page "https://github.com/ecordell/pymacaroons")
     (synopsis "Python Macaroon Library")
     (description
@@ -25369,10 +24787,9 @@ enforcement of that policy.")
                         (invoke "nosetests" "-s" "test"))
                       #t)))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-gssapi" ,python-gssapi)
-       ("python-pyasn1" ,python-pyasn1)))
+     (list python-gssapi python-pyasn1))
     (synopsis "Python LDAP client")
     (description
      "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
@@ -25447,23 +24864,21 @@ tbutils
                 "_test_logCallsDefaultLoggerWrite"))
              #t)))))
     (propagated-inputs
-     `(("python-boltons" ,python-boltons)
-       ("python-pyrsistent" ,python-pyrsistent)
-       ("python-six" ,python-six)
-       ("python-zope-interface" ,python-zope-interface)))
-    (native-inputs
-     `(("python-black" ,python-black)
-       ("python-coverage" ,python-coverage)
-       ("python-dask" ,python-dask)
-       ("python-flake8" ,python-flake8)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-testtools" ,python-testtools)
-       ("python-twine" ,python-twine)
-       ("python-twisted" ,python-twisted)))
+     (list python-boltons python-pyrsistent python-six
+           python-zope-interface))
+    (native-inputs
+     (list python-black
+           python-coverage
+           python-dask
+           python-flake8
+           python-hypothesis
+           python-pytest
+           python-setuptools
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-testtools
+           python-twine
+           python-twisted))
     (home-page "https://github.com/itamarst/eliot/")
     (synopsis "Eliot: the logging system that tells you why it happened")
     (description
@@ -25486,13 +24901,13 @@ happened, and what caused it.")
          "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-coverage" ,python-coverage)
-       ("python-pretend" ,python-pretend)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-twisted" ,python-twisted)))
+     (list python-certifi
+           python-coverage
+           python-pretend
+           python-pyopenssl
+           python-pytest
+           python-sphinx
+           python-twisted))
     (home-page "https://pem.readthedocs.io/")
     (synopsis "Easy PEM file parsing in Python")
     (description
@@ -25518,9 +24933,7 @@ happened, and what caused it.")
            "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-pyopenssl" ,python-pyopenssl)
-         ("python-service-identity" ,python-service-identity)
-         ("python-twisted" ,python-twisted)))
+       (list python-pyopenssl python-service-identity python-twisted))
       (synopsis "Run TLS servers with Twisted")
       (description
        "This package provides an easy-to-use SNI endpoint for use
@@ -25539,23 +24952,22 @@ with the Twisted web framework.")
         (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-acme" ,python-acme)
-       ("python-attrs" ,python-attrs)
-       ("python-eliot" ,python-eliot)
-       ("python-josepy" ,python-josepy)
-       ("python-pem" ,python-pem)
-       ("python-treq" ,python-treq)
-       ("python-twisted" ,python-twisted)
-       ("python-txsni" ,python-txsni)))
-    (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-service-identity"
-        ,python-service-identity)
-       ("python-testrepository" ,python-testrepository)
-       ("python-testscenarios" ,python-testscenarios)
-       ("python-testtools" ,python-testtools)))
+     (list python-acme
+           python-attrs
+           python-eliot
+           python-josepy
+           python-pem
+           python-treq
+           python-twisted
+           python-txsni))
+    (native-inputs
+     (list python-fixtures
+           python-hypothesis
+           python-mock
+           python-service-identity
+           python-testrepository
+           python-testscenarios
+           python-testtools))
     (home-page "https://github.com/twisted/txacme")
     (synopsis "Twisted implexmentation of the ACME protocol")
     (description
@@ -25581,16 +24993,15 @@ networking engine for Python.")
          "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-dateutil" ,python-dateutil)
-       ("python-defusedxml" ,python-defusedxml)
-       ("python-importlib-resources"
-        ,python-importlib-resources)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-pytz" ,python-pytz)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)
-       ("python-xmlschema" ,python-xmlschema)))
+     (list python-cryptography
+           python-dateutil
+           python-defusedxml
+           python-importlib-resources
+           python-pyopenssl
+           python-pytz
+           python-requests
+           python-six
+           python-xmlschema))
     (home-page "https://idpy.org")
     (synopsis "Python implementation of SAML Version 2 Standard")
     (description
@@ -25614,9 +25025,9 @@ there are extensions that allow you to use it with other frameworks.")
         (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (synopsis "Extension for Click to register external CLI commands")
     (description "This package provides n extension module for Click to
 register external CLI commands via setuptools entry-points.")
@@ -25636,9 +25047,7 @@ register external CLI commands via setuptools entry-points.")
          "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-coverage python-pytest python-pytest-runner))
     (home-page "https://github.com/ulif/diceware/")
     (synopsis "Generates memorable passphrases")
     (description "This package generates passphrases by concatenating words
@@ -25659,18 +25068,18 @@ cryptographically signed ones).")
                 "1lk3qmy1hkaphk4n7ayfk0wl6m2yvd6r7qkam6yncqfzgkbc1phs"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-check-manifest" ,python-check-manifest)
-       ("python-coverage" ,python-coverage)
-       ("python-isort" ,python-isort)
-       ("python-mock" ,python-mock)
-       ("python-pydoctstyle" ,python-pydocstyle)
-       ("python-pytest-cache" ,python-pytest-cache)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-tox" ,python-tox)))
+     (list python-check-manifest
+           python-coverage
+           python-isort
+           python-mock
+           python-pydocstyle
+           python-pytest-cache
+           python-pytest-cov
+           python-pytest-pep8
+           python-pytest-runner
+           python-pytest
+           python-setuptools-scm
+           python-tox))
     (home-page "https://github.com/inveniosoftware/dictdiffer")
     (synopsis "Diff and patch Python dictionary objects")
     (description
@@ -25700,7 +25109,7 @@ dictionaries.")
        ;; symbol: objc_getClass".
        #:tests? #f))
     (propagated-inputs
-     `(("python-pyqt" ,python-pyqt)))
+     (list python-pyqt))
     (home-page "https://pyzo.org")
     (synopsis
      "Python IDE for scientific computing")
@@ -25748,7 +25157,7 @@ Open Sound Control 1.0} specification.")
             "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/alecthomas/voluptuous")
     (synopsis "Python data validation library")
     (description
@@ -25769,27 +25178,24 @@ intended for validating data coming into Python as JSON, YAML, etc.")
          "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-pyperclip" ,python-pyperclip)
-       ("python-wcwidth" ,python-wcwidth)))
-    (native-inputs
-     `(("python-codecov" ,python-codecov)
-       ("python-coverage" ,python-coverage)
-       ("python-doc8" ,python-doc8)
-       ("python-flake8" ,python-flake8)
-       ("python-invoke" ,python-invoke)
-       ("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-autobuild" ,python-sphinx-autobuild)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-tox" ,python-tox)
-       ("python-twine" ,python-twine)
-       ("which" ,which)))
+     (list python-attrs python-colorama python-pyperclip python-wcwidth))
+    (native-inputs
+     (list python-codecov
+           python-coverage
+           python-doc8
+           python-flake8
+           python-invoke
+           python-mock
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-setuptools-scm
+           python-sphinx
+           python-sphinx-autobuild
+           python-sphinx-rtd-theme
+           python-tox
+           python-twine
+           which))
     (home-page "https://github.com/python-cmd2/cmd2")
     (synopsis "Tool for building interactive command line applications")
     (description
@@ -25818,13 +25224,12 @@ be necessary when using @code{cmd}.")
        (modify-phases %standard-phases
          (add-before 'build 'qualify-libtidy
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libtidy (string-append (assoc-ref inputs "tidy")
-                                           "/lib/libtidy.so")))
+             (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
                (substitute* "tidylib/tidy.py"
                  (("ctypes\\.util\\.find_library\\('tidy'\\)")
                   (format #f "'~a'" libtidy)))
                #t))))))
-    (inputs `(("tidy" ,tidy)))
+    (inputs (list tidy))
     (home-page "https://github.com/countergram/pytidylib")
     (synopsis "Python wrapper for HTML Tidy library")
     (description
@@ -25912,7 +25317,7 @@ For the most part it's transliterated from C, the major differences are:
                #t))))
        #:tests? #f)) ; _curses.error: setupterm: could not find terminal
     (native-inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://github.com/Rockhopper-Technologies/jinxed")
     (synopsis "Jinxed Terminal Library")
     (description
@@ -25932,7 +25337,7 @@ For the most part it's transliterated from C, the major differences are:
          "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (home-page "https://svgutils.readthedocs.io")
     (synopsis "Python SVG editor")
     (description "This is an utility package that helps with editing and
@@ -25959,12 +25364,9 @@ placement and scaling of SVG figures and adding markers, such as labels.")
             (delete-file "blessed/win_terminal.py") #t))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-jinxed" ,python-jinxed)
-       ("python-six" ,python-six)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-jinxed python-six python-wcwidth))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/jquast/blessed")
     (synopsis "Wrapper around terminal capabilities")
     (description
@@ -25985,13 +25387,9 @@ positioning, and keyboard input.")
           "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-bleach" ,python-bleach)
-       ("python-docutils" ,python-docutils)
-       ("python-pygments" ,python-pygments)
-       ("python-six" ,python-six)))
+     (list python-bleach python-docutils python-pygments python-six))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (home-page "https://github.com/pypa/readme_renderer")
     (synopsis "Render README files in Warehouse")
     (description
@@ -26020,9 +25418,9 @@ and plain text.")
            (lambda _
              (invoke "python" "setup.py" "nosetests"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     (list python-zope-interface))
     (home-page "https://launchpad.net/lazr.delegates")
     (synopsis "Easily write objects that delegate behavior")
     (description
@@ -26051,10 +25449,9 @@ and delegating behavior.")
            (lambda _
              (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-lazr-delegates" ,python-lazr-delegates)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-lazr-delegates python-zope-interface))
     (home-page "https://launchpad.net/lazr.config")
     (synopsis "Create configuration schemas and process and validate configurations")
     (description
@@ -26079,10 +25476,9 @@ validation.")
           "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-atpublic python-zope-interface))
     (native-inputs
-     `(("python-nose2" ,python-nose2)))
+     (list python-nose2))
     (home-page "https://fluflbounce.readthedocs.io/en/latest/")
     (synopsis "Email bounce detectors")
     (description "The @code{flufl.bounce} library provides a set of heuristics
@@ -26105,7 +25501,7 @@ RFC 3464.")
           "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)))
+     (list python-atpublic))
     (home-page "https://flufli18n.readthedocs.io")
     (synopsis "API for Python internationalization")
     (description
@@ -26131,8 +25527,7 @@ different tasks.")
           "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-atpublic" ,python-atpublic)
-       ("python-psutil" ,python-psutil)))
+     (list python-atpublic python-psutil))
     (home-page "https://flufllock.readthedocs.io")
     (synopsis "NFS-safe file locking with timeouts for POSIX systems")
     (description
@@ -26156,7 +25551,7 @@ and have a maximum lifetime built-in.")
           "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose2" ,python-nose2)))
+     (list python-nose2))
     (home-page "https://gitlab.com/warsaw/flufl.testing")
     (synopsis "Collection of test tool plugins")
     (description
@@ -26179,10 +25574,9 @@ and have a maximum lifetime built-in.")
         (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
@@ -26209,15 +25603,10 @@ It adds a simple and readable way to print stuff during development.")
          "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytz" ,python-pytz)
-       ("python-regex" ,python-regex)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-tzlocal" ,python-tzlocal)))
+     (list python-dateutil python-pytz python-regex python-ruamel.yaml
+           python-tzlocal))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-parameterized" ,python-parameterized)
-       ("tzdata" ,tzdata-for-tests)))
+     (list python-mock python-parameterized tzdata-for-tests))
     (arguments
      `(;; TODO: Of 23320 tests, 6 fail and 53 error.
        #:tests? #f
@@ -26227,9 +25616,8 @@ It adds a simple and readable way to print stuff during development.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "share/zoneinfo")))))))
     (home-page "https://github.com/scrapinghub/dateparser")
     (synopsis
      "Date parsing library designed to parse dates from HTML pages")
@@ -26251,11 +25639,9 @@ dates in almost any string formats commonly found on web pages.")
             "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (propagated-inputs
-      `(("python-packaging" ,python-packaging)
-        ("python-pyyaml" ,python-pyyaml)
-        ("python-toml" ,python-toml)))
+      (list python-packaging python-pyyaml python-toml))
     (home-page "https://github.com/pyupio/dparse")
     (synopsis "Parser for Python dependency files")
     (description "This package provides a parser for Python dependency files.")
@@ -26274,9 +25660,7 @@ dates in almost any string formats commonly found on web pages.")
          "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-hypothesis" ,python-hypothesis)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)))
+     (list python-hypothesis python-mock python-nose))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -26319,10 +25703,7 @@ facility for filtering those results.")
                (("def test_check_live") "def _test_check_live"))
              #t)))))
     (propagated-inputs
-      `(("python-click" ,python-click)
-        ("python-dparse" ,python-dparse)
-        ("python-packaging" ,python-packaging)
-        ("python-requests" ,python-requests)))
+      (list python-click python-dparse python-packaging python-requests))
     (home-page "https://github.com/pyupio/safety")
     (synopsis "Check installed dependencies for known vulnerabilities")
     (description "Safety checks installed dependencies for known vulnerabilities.
@@ -26342,15 +25723,15 @@ By default it uses the open Python vulnerability database Safety DB.")
          "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
     (build-system python-build-system)
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (propagated-inputs
      `(("wheel" ,python-wheel)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
-                                        texlive-iftex
-                                        texlive-latex-hyperref
-                                        texlive-latex-oberdiek
+                                        texlive-generic-iftex
+                                        texlive-hyperref
+                                        texlive-oberdiek
                                         texlive-lm
                                         texlive-xcolor)))))
     (arguments
@@ -26362,8 +25743,6 @@ By default it uses the open Python vulnerability database Safety DB.")
              (substitute* "tests.py"
                (("test_basic_conversion_from_http_url")
                 "skip_test_basic_conversion_from_http_url"))
-             ;; Needed by texlive-union to generate fonts
-             (setenv "HOME" "/tmp")
              #t)))))
     (home-page "https://github.com/bebraw/pypandoc")
     (synopsis "Python wrapper for pandoc")
@@ -26384,7 +25763,7 @@ and pandoc-citeproc.")
          "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rply" ,python-rply)))
+     (list python-rply))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
@@ -26421,12 +25800,9 @@ equivalent schemata in the XML-based default RELAX NG syntax.")
                (invoke "py.test" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-rsa" ,python-rsa)
-       ("python-pyaes" ,python-pyaes)))
+     (list python-rsa python-pyaes))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)
-       ("python-pytest-trio" ,python-pytest-trio)))
+     (list python-pytest python-pytest-asyncio python-pytest-trio))
     (home-page "https://docs.telethon.dev")
     (synopsis "Full-featured Telegram client library for Python 3")
     (description "This library is designed to make it easy to write Python
@@ -26446,8 +25822,7 @@ programs that can interact with Telegram.")
          "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)
-       ("python-rnc2rng" ,python-rnc2rng)))
+     (list python-lxml python-rnc2rng))
     (home-page
      "https://github.com/brechtm/citeproc-py")
     (synopsis "Citations and bibliography formatter")
@@ -26473,12 +25848,9 @@ are plain text, reStructuredText and HTML.")
     (arguments
      `(#:tests? #f))  ; PyPI tarball lacks tests
     (native-inputs
-      `(("python-hypothesis" ,python-hypothesis)
-        ("python-pytest-cov" ,python-pytest-cov)
-        ("python-pytest-runner" ,python-pytest-runner)))
+      (list python-hypothesis python-pytest-cov python-pytest-runner))
     (propagated-inputs
-      `(("python-arrow" ,python-arrow)
-        ("python-six" ,python-six)))
+      (list python-arrow python-six))
     (home-page "https://inform.readthedocs.io")
     (synopsis "Print & logging utilities for communicating with user")
     (description
@@ -26502,7 +25874,7 @@ cleanly print different types of messages.")
     (arguments
      `(#:tests? #f))  ; PyPI tarball lacks tests
     (propagated-inputs
-      `(("python-inform" ,python-inform)))
+      (list python-inform))
     (home-page "https://nestedtext.org")
     (synopsis "Human readable and writable data interchange format")
     (description
@@ -26563,9 +25935,7 @@ module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
                (invoke "pytest" "--maxfail" "3" "--verbose"))
              #t)))))
     (native-inputs
-     `(("python-aiohttp" ,python-aiohttp)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-asyncio" ,python-pytest-asyncio)))
+     (list python-aiohttp python-pytest python-pytest-asyncio))
     (home-page "https://github.com/yuvipanda/simpervisor")
     (synopsis "Simple async process supervisor")
     (description
@@ -26586,7 +25956,7 @@ module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
         (base32
          "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; No test suite.
     (home-page "https://www.parallelpython.com")
@@ -26614,12 +25984,9 @@ applications with variable CPU loads).")
         (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("ghostscript" ,ghostscript)
-       ("pkg-config" ,pkg-config)
-       ("python-nose" ,python-nose)))
+     (list ghostscript pkg-config python-nose))
     (inputs
-     `(("djvulibre" ,djvulibre)
-       ("python-cython" ,python-cython)))
+     (list djvulibre python-cython))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -26681,12 +26048,16 @@ process.")
                        "src/zlib-1.2.8"))))))
     (build-system python-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("python2-wxpython" ,python2-wxpython)
-       ("zlib" ,zlib)))
+     (list libpng libtiff zlib))
     (arguments
-     `(#:python ,python-2))
+     `(#:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-wx-support
+           (lambda _
+             (substitute* "setup.py"
+               (("no_wx = False")
+                "no_wx = True")))))))
     (synopsis "Framework for building document analysis applications")
     (description
      "Gamera is a toolkit for building document image recognition systems.")
@@ -26706,7 +26077,7 @@ process.")
             "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-immutables" ,python-immutables)))
+      (list python-immutables))
     (home-page
       "https://github.com/MagicStack/contextvars")
     (synopsis "PEP 567 Backport")
@@ -26745,9 +26116,7 @@ disk files in asyncio applications.")
             "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-typing-extensions"
-         ,python-typing-extensions)
-        ("python-typing-inspect" ,python-typing-inspect)))
+      (list python-typing-extensions python-typing-inspect))
     (home-page "https://pyre-check.org")
     (synopsis
      "Type system extensions for use with @code{python-pyre}")
@@ -26820,9 +26189,9 @@ query Watchman to discover file changes.")
                (invoke "pytest" "tests"))
              #t)))))
     (propagated-inputs
-     `(("python-importlib-metadata" ,python-importlib-metadata)))
+     (list python-importlib-metadata))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://gitlab.com/dpizetta/helpdev")
     (synopsis
      "Extract information about the Python environment easily")
@@ -26864,10 +26233,9 @@ older versions of Python and so are packaged here.")
                 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (propagated-inputs
-     `(("python-logutils" ,python-logutils)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-logutils python-pyyaml))
     (home-page "https://github.com/gmr/helper")
     (synopsis "Library for writing configurable applications and daemons")
     (description
@@ -26900,11 +26268,9 @@ applications and daemons.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-cov python-pytest-runner))
     (propagated-inputs
-     `(("python-libsass" ,python-libsass)))
+     (list python-libsass))
     (home-page "https://github.com/spyder-ide/qtsass")
     (synopsis "Compile SCSS files to valid Qt stylesheets")
     (description
@@ -26933,8 +26299,7 @@ handling those variations.")
        ;; added as native-inputs.
        #:tests? #f))
     (propagated-inputs
-     `(("python-helpdev" ,python-helpdev)
-       ("python-qtpy" ,python-qtpy)))
+     (list python-helpdev python-qtpy))
     (home-page
      "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
     (synopsis
@@ -26966,7 +26331,7 @@ Qt applications.")
                  (invoke "pytest")))
              #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/scott-griffiths/bitstring")
     (synopsis
      "Simple construction, analysis and modification of binary data")
@@ -26988,7 +26353,7 @@ Qt applications.")
          "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)))
+     (list python-pyyaml))
     (home-page "https://github.com/beetbox/confuse")
     (synopsis "Painless YAML configuration")
     (description "Confuse is a configuration library for Python that uses
@@ -27011,10 +26376,9 @@ integration, human-readable errors, and standard OS-specific locations.")
     (arguments
      `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)))
+     (list python-cffi))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-pytest python-pytest-runner))
     (home-page "https://gitlab.com/rubdos/pyreflink")
     (synopsis "Python wrapper around reflink system call")
     (description
@@ -27049,16 +26413,15 @@ implementations.")
                            "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
              #t)))))
     (native-inputs
-      `(("cmake" ,cmake)
-        ("swig" ,swig)))
+      (list cmake swig))
     (inputs
-      `(("python-wrapper" ,python-wrapper)
-        ("qtbase" ,qtbase-5)
-        ("libxi" ,libxi)
-        ("libice" ,libice)
-        ("soqt" ,soqt)
-        ("glew" ,glew)
-        ("coin3D" ,coin3D-4)))
+      (list python-wrapper
+            qtbase-5
+            libxi
+            libice
+            soqt
+            glew
+            coin3D-4))
     (home-page "https://github.com/coin3d/pivy")
     (synopsis "Python bindings to Coin3D")
     (description
@@ -27079,7 +26442,7 @@ Application Programming Interface based on the Open Inventor 2.1 API.")
           "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-colorama" ,python-colorama)))
+      (list python-colorama))
     (home-page "https://github.com/MasterOdin/crayons")
     (synopsis "TextUI colors for Python")
     (description "This package gives you colored strings for the terminal.
@@ -27100,9 +26463,9 @@ restores the original state after the string is printed.")
          "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("sane-backends" ,sane-backends)))
+     (list sane-backends))
     (home-page "https://github.com/python-pillow/Sane")
     (synopsis "Python interface to the SANE scanner")
     (description "This package provides Python interface to the SANE scanner
@@ -27144,25 +26507,25 @@ and frame grabber interface.")
             (lambda* (#:key outputs #:allow-other-keys)
               (wrap-program
                   (string-append (assoc-ref outputs "out") "/bin/screenkey")
-                `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH"
-                  ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
-              #t)))))
+                  ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
     (inputs
-     `(("python-distutils-extra" ,python-distutils-extra)
-       ("python-tokenize-rt" ,python-tokenize-rt)
-       ("libx11" ,libx11)
-       ("libxtst" ,libxtst)
-       ("gtk+" ,gtk+)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pycairo" ,python-pycairo)
-       ("python-setuptools-git" ,python-setuptools-git)
-       ("python-babel" ,python-babel)))
+     (list python-distutils-extra
+           python-tokenize-rt
+           libx11
+           libxtst
+           gtk+
+           python-pygobject
+           python-pycairo
+           python-setuptools-git
+           python-babel))
     (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
     (synopsis
       "Screencast tool to display pressed keys")
     (description
-      "A screencast tool to display your keys inspired by Screenflick.")
+      "Screenkey is a screencast tool to display your keys inspired by
+Screenflick.")
     (license license:gpl3+)))
 
 (define-public python-jinja2-cli
@@ -27178,11 +26541,9 @@ and frame grabber interface.")
             "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-jinja2" ,python-jinja2)))
+      (list python-jinja2))
     (native-inputs
-      `(("python-flake8" ,python-flake8)
-        ("python-jinja2" ,python-jinja2)
-        ("python-pytest" ,python-pytest)))
+      (list python-flake8 python-jinja2 python-pytest))
     (home-page "https://github.com/mattrobenolt/jinja2-cli")
     (synopsis "Command-line interface to Jinja2")
     (description
@@ -27260,9 +26621,7 @@ iGoogle subscription lists.")
              (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
     (native-inputs
      ;; For tests.
-     `(("python-docutils" ,python-docutils)
-       ("python-nose" ,python-nose)
-       ("python-pygments" ,python-pygments)))
+     (list python-docutils python-nose python-pygments))
     (home-page "https://github.com/leohemsted/smartypants.py")
     (synopsis "Translate punctuation characters into smart quotes")
     (description
@@ -27294,10 +26653,10 @@ entities
            (lambda _
              (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-smartypants" ,python-smartypants)))
+     (list python-smartypants))
     (native-inputs
      ;; For tests.
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/mintchaos/typogrify")
     (synopsis "Filters to transform text into typographically-improved HTML")
     (description
@@ -27320,7 +26679,7 @@ Django template systems, the filters can be used in any environment.")
          "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/nir0s/ld")
     (synopsis "OS platform information API")
     (description
@@ -27359,8 +26718,7 @@ runs on, such as a reliable machine-readable ID, or version information.")
                (invoke "pytest"))
              #t)))))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-pytest" ,python-pytest)))
+     (list python-cython python-pytest))
     (home-page "https://github.com/scoder/quicktions")
     (synopsis "Fast fractions data type for rational numbers")
     (description
@@ -27385,10 +26743,7 @@ is the cythonized version of @code{fractions.Fraction}.")
     ;; pathvalidate tests depend on pytest-md-report, which
     ;; depends on pathvalidate.
     (native-inputs
-     `(("python-allpairspy" ,python-allpairspy)
-       ("python-click" ,python-click)
-       ("python-faker" ,python-faker)
-       ("python-pytest" ,python-pytest)))
+     (list python-allpairspy python-click python-faker python-pytest))
     (home-page "https://github.com/thombashi/pathvalidate")
     (synopsis "Sanitize strings representing paths")
     (description
@@ -27429,9 +26784,7 @@ result.")
          "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-commonmark" ,python-commonmark)
-       ("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-commonmark python-docutils python-sphinx))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'delete-test-sphinx
@@ -27458,7 +26811,7 @@ lets you write CommonMark inside of Docutils & Sphinx projects.")
          "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (home-page "https://github.com/materialsvirtuallab/pyhull")
     (synopsis "Python wrapper to Qhull")
     (description
@@ -27525,11 +26878,9 @@ and BMI2).")
                         (when tests?
                           (invoke "python" "setup.py" "nosetests")))))))
       (native-inputs
-       `(("python-nose" ,python-nose)
-         ("python-rednose" ,python-rednose)))
+       (list python-nose python-rednose))
       (propagated-inputs
-       `(("python-six" ,python-six)
-         ("python-opcodes" ,python-opcodes)))
+       (list python-six python-opcodes))
       (synopsis "Efficient assembly code generation in Python")
       (description
        "PeachPy is a Python framework for writing high-performance assembly kernels.
@@ -27542,6 +26893,53 @@ application binary interfaces (ABIs); it takes care of register allocation; it
 supports x86_64 instructions up to AVX-512 and SHA.")
       (license license:bsd-2))))
 
+(define-public python-sgmllib3k
+  (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
+        (revision "1"))
+    (package
+      (name "python-sgmllib3k")
+      (version
+       (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hsoft/sgmllib")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
+      (build-system python-build-system)
+      (home-page "https://github.com/hsoft/sgmllib")
+      (synopsis "Python 3 port of sgmllib")
+      (description "This packages provides an unmaintained port of sgmllib to
+Python 3.  It is used to parse text files formatted in @acronym{SGML,Standard
+Generalized Mark-up Language}.")
+      (license license:bsd-3))))
+
+(define-public python-cwcwidth
+  (package
+    (name "python-cwcwidth")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cwcwidth" version))
+       (sha256
+        (base32
+         "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
+    (build-system python-build-system)
+    (native-inputs
+     (list python-cython python-pytest python-setuptools-scm python-toml
+           python-wheel))
+    (home-page
+     "https://github.com/sebastinas/cwcwidth")
+    (synopsis "Python bindings for wc(s)width")
+    (description "This package provides bindings for wcwidth and wcswidth
+functions defined in POSIX.1-2001 and POSIX.1-2008.")
+    (license license:expat)))
+
 (define-public python-pyan3
   (package
     (name "python-pyan3")
@@ -27567,15 +26965,13 @@ supports x86_64 instructions up to AVX-512 and SHA.")
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                ;; Extend PYTHONPATH so the built package will be found.
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) ":" (getenv "PYTHONPATH")))
+               (setenv "GUIX_PYTHONPATH"
+                       (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-wheel" ,python-wheel)))
+     (list python-pytest python-pytest-cov python-wheel))
     (propagated-inputs
-     `(("python-jinja2" ,python-jinja2)))
+     (list python-jinja2))
     (home-page "https://github.com/Technologicat/pyan")
     (synopsis "Offline call graph generator for Python 3")
     (description "Pyan takes one or more Python source files, performs
@@ -27596,7 +26992,7 @@ graph can be output for rendering by GraphViz or yEd.")
         (base32
          "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-six" ,python-six)))
+    (propagated-inputs (list python-six))
     (home-page "https://github.com/mrocklin/multipledispatch/")
     (synopsis "Multiple dispatch for Python based on pattern matching")
     (description "This library provides an efficient mechanism for overloading
@@ -27616,8 +27012,7 @@ function implementations based on the types of the arguments.")
          "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-multipledispatch" ,python-multipledispatch)
-       ("python-toolz" ,python-toolz)))
+     (list python-multipledispatch python-toolz))
     (home-page "https://github.com/pythological/unification/")
     (synopsis "Logical unification in Python for solving symbolic expressions")
     (description "This library provides algorithms and data types for solving
@@ -27637,10 +27032,9 @@ symbolic expressions in pure Python using the technique of logical unification."
          "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest-6)
-       ("python-toml" ,python-toml)))
+     (list python-pytest-6 python-toml))
     (propagated-inputs
-     `(("python-logical-unification" ,python-logical-unification)))
+     (list python-logical-unification))
     (home-page "https://github.com/pythological/python-cons")
     (synopsis "Cons cell data structures and related algorithms for Python")
     (description
@@ -27661,8 +27055,7 @@ cons cells in Python.")
          "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cons" ,python-cons)
-       ("python-multipledispatch" ,python-multipledispatch)))
+     (list python-cons python-multipledispatch))
     (home-page "https://github.com/pythological/etuples")
     (synopsis "S-expressions in Python")
     (description
@@ -27691,22 +27084,19 @@ cons cells in Python.")
                         (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
                       #t)))))
     (native-inputs
-     `(("python-coveralls" ,python-coveralls)
-       ("python-pydocstyle" ,python-pydocstyle)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pylint" ,python-pylint)
-       ("python-black" ,python-black)
-       ("python-sympy" ,python-sympy)
-       ("python-versioneer" ,python-versioneer)
-       ("python-coverage" ,python-coverage)
-       ("python-pre-commit" ,python-pre-commit)))
-    (propagated-inputs
-     `(("python-toolz" ,python-toolz)
-       ("python-cons" ,python-cons)
-       ("python-multipledispatch" ,python-multipledispatch)
-       ("python-etuples" ,python-etuples)
-       ("python-logical-unification" ,python-logical-unification)))
+     (list python-coveralls
+           python-pydocstyle
+           python-pytest
+           python-pytest-cov
+           python-pylint
+           python-black
+           python-sympy
+           python-versioneer
+           python-coverage
+           python-pre-commit))
+    (propagated-inputs
+     (list python-toolz python-cons python-multipledispatch
+           python-etuples python-logical-unification))
     (home-page "https://github.com/pythological/kanren")
     (synopsis "Relational logic programming in pure Python")
     (description
@@ -27738,11 +27128,9 @@ systems in Python.")
                (delete-file "tests/test_ipython.py")
                (invoke "python" "-m" "pytest")))))))
     (propagated-inputs
-     `(("python-click" ,python-click)))
+     (list python-click))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-sh" ,python-sh)))
+     (list python-mock python-pytest python-sh))
     (home-page "https://github.com/theskumar/python-dotenv")
     (synopsis "Setup environment variables according to .env files")
     (description
@@ -27810,7 +27198,7 @@ YYYY-MM-DD at the beginning of the file or directory name.")
         (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page
      "https://developers.braintreepayments.com/python/sdk/server/overview")
     (synopsis "Braintree Python Library")
@@ -27853,23 +27241,21 @@ pythonic way.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (setenv "PYTHONPATH"
+               (setenv "GUIX_PYTHONPATH"
                        (string-append (getcwd) "/build/lib:"
-                                      (getenv "PYTHONPATH")))
+                                      (getenv "GUIX_PYTHONPATH")))
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-pandas" ,python-pandas)  ;; required for test-suite
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
-    (propagated-inputs
-     `(("python-markuppy" ,python-markuppy)
-       ("python-odfpy" ,python-odfpy)
-       ("python-openpyxl" ,python-openpyxl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tabulate" ,python-tabulate)
-       ("python-xlrd" ,python-xlrd)
-       ("python-xlwt" ,python-xlwt)))
+     (list python-pandas ;; required for test-suite
+           python-pytest python-pytest-cov python-setuptools-scm))
+    (propagated-inputs
+     (list python-markuppy
+           python-odfpy
+           python-openpyxl
+           python-pyyaml
+           python-tabulate
+           python-xlrd
+           python-xlwt))
     (home-page "https://tablib.readthedocs.io")
     (synopsis "Format agnostic tabular data library")
     (description "@code{tablib} is a format-agnostic tabular dataset library,
@@ -27894,11 +27280,9 @@ install @code{python-pandas}.")
         (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (propagated-inputs
-     `(("python-pycountry" ,python-pycountry)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tablib" ,python-tablib)))
+     (list python-pycountry python-pyyaml python-tablib))
     (home-page "https://bitbucket.org/wmj/csb43")
     (synopsis "Tools for converting from the Spanish banks' format CSB norm
 43 (CSB43)")
@@ -27946,11 +27330,9 @@ account (CODA) files as defined be the Belgian Febelfin bank standard.")
              (when tests?
                (invoke "nosetests" "-v")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-lxml" ,python-lxml)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-lxml python-six))
     (home-page "http://sites.google.com/site/ofxparse")
     (synopsis "Tools for working with the OFX (Open Financial Exchange) file
 format")
@@ -27975,7 +27357,7 @@ statements in OFX files.")
     (arguments
      '(#:tests? #f))  ;; tests require network
     (propagated-inputs
-     `(("python-requests" ,python-requests)))
+     (list python-requests))
     (home-page "https://github.com/stripe/stripe-python")
     (synopsis "Python bindings for the Stripe financial services' API")
     (description "This package provides access to the Stripe financial
@@ -27996,10 +27378,8 @@ compatible with a wide range of versions of the Stripe API.")
         (base32 "07hq5qrp7pqj63iczg01wbf5ii6f0ncd0dq5mzkdhsslmg9slbb3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-appdirs python-pytest python-pytest-cov
+           python-pytest-mock))
     (home-page "https://github.com/platformdirs/platformdirs")
     (synopsis "Determine the appropriate platform-specific directories")
     (description "When writing applications, finding the right location to
@@ -28059,9 +27439,9 @@ into a human readable HTML table representation.")
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-boltons" ,python-boltons)))
+     (list python-boltons))
     (home-page "https://github.com/mahmoud/face")
     (synopsis "CLI parsing and dispatching microframework")
     (description "@code{python-face} is a Pythonic microframework for building
@@ -28100,12 +27480,9 @@ command-line applications.
                                       ":" (getenv "PATH")))
                (invoke "pytest" "-v")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-pytest python-pyyaml))
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-boltons" ,python-boltons)
-       ("python-face" ,python-face)))
+     (list python-attrs python-boltons python-face))
     (home-page "https://github.com/mahmoud/glom")
     (synopsis "Declaratively restructure data")
     (description "Real applications have real data, and real data
@@ -28133,9 +27510,7 @@ and powerful way to handle real-world data, featuring:
          "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-msgpack" ,python-msgpack)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-toml" ,python-toml)))
+     (list python-msgpack python-ruamel.yaml python-toml))
     (home-page "https://github.com/cdgriffith/Box")
     (synopsis "Advanced Python dictionaries with dot notation access")
     (description
@@ -28170,7 +27545,7 @@ It implements advanced Python dictionaries with dot notation access.")
         (sha256
           (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
     (build-system python-build-system)
-    (propagated-inputs `(("python-fields" ,python-fields)))
+    (propagated-inputs (list python-fields))
     (home-page "https://github.com/ionelmc/python-aspectlib")
     (synopsis
       "Python monkey-patching and decorators")
@@ -28205,9 +27580,9 @@ simple mock/record and a complete capture/replay framework.")
     (inputs
      ;; libyajl is optional, but compiling with it makes faster
      ;; backends available to ijson:
-     `(("libyajl", libyajl)))
+     (list libyajl))
     (native-inputs
-     `(("python-pytest", python-pytest)))
+     (list python-pytest))
     (build-system python-build-system)
     (home-page "https://github.com/ICRAR/ijson")
     (synopsis "Iterative JSON parser with Python iterator interfaces")
@@ -28235,38 +27610,13 @@ interfaces.")
              (when tests?
                (invoke "pytest" "-vv" "orgparse/tests")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/karlicoss/orgparse")
     (synopsis "Emacs Org mode parser in Python")
     (description
      "This package is a Python module for reading Emacs Org mode files.")
     (license license:bsd-3)))
 
-(define-public python-sgmllib3k
-  (package
-    (name "python-sgmllib3k")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "sgmllib3k" version))
-       (sha256
-        (base32 "1s8jm3dgqabgf8x96931scji679qkhvczlv3qld4qxpsicfgns3q"))))
-    (build-system python-build-system)
-    ;; Requires a test.html input that is not supplied
-    (arguments
-     `(#:tests? #f))
-    (home-page "https://pypi.org/project/sgmllib3k/")
-    ;; Actual homepage seems to be down
-    ;; (home-page "https://hg.hardcoded.net/sgmllib")
-    (synopsis "Python 3 port of sgmllib")
-    (description
-     "This package provides an unmaintained port of sgmllib to Python 3.
-It is used to parse text files formatted in @acronym{SGML,Standard Generalized
-Mark-up Language}.")
-    (license license:bsd-3)))
-
 (define-public dynaconf
   (package
     (name "dynaconf")
@@ -28305,17 +27655,11 @@ Mark-up Language}.")
                (delete-file "tests/test_vault.py")
                (invoke "make" "test_only")))))))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-configobj" ,python-configobj)
-       ("python-dotenv" ,python-dotenv-0.13.0)
-       ("python-ruamel.yaml" ,python-ruamel.yaml)
-       ("python-toml" ,python-toml)))
+     (list python-click python-configobj python-dotenv-0.13.0
+           python-ruamel.yaml python-toml))
     (native-inputs
-     `(("python-django" ,python-django)
-       ("python-flask" ,python-flask)
-       ("python-pytest" ,python-pytest-6)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-django python-flask python-pytest-6 python-pytest-cov
+           python-pytest-mock))
     (home-page "https://www.dynaconf.com/")
     (synopsis "The dynamic configurator for your Python project")
     (description
@@ -28361,14 +27705,9 @@ development, testing, production]};
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest")))))))
     (native-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-mock" ,python-pytest-mock)))
+     (list python-numpy python-pytest python-pytest-mock))
     (propagated-inputs
-     `(("python-jedi" ,python-jedi)
-       ("python-pygments" ,python-pygments)
-       ("python-urwid" ,python-urwid)
-       ("python-urwid-readline" ,python-urwid-readline)))
+     (list python-jedi python-pygments python-urwid python-urwid-readline))
     (home-page "https://documen.tician.de/pudb/")
     (synopsis "Console-based Python debugger")
     (description
@@ -28389,8 +27728,8 @@ keyboard-friendly package.")
         (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
     (build-system python-build-system)
     (inputs
-     `(("wireless-tools" ,wireless-tools)))
-    (propagated-inputs `(("python-cffi" ,python-cffi)))
+     (list wireless-tools))
+    (propagated-inputs (list python-cffi))
     (home-page "https://github.com/nhoad/python-iwlib")
     (synopsis "Python module to interface with iwlib")
     (description
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 6fa0987d24..f0d2fd6eb8 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2017, 2019 Eric Bavier <bavier@member.fsf.org>
@@ -26,12 +26,12 @@
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016–2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
@@ -52,12 +52,12 @@
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -94,68 +94,104 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26))
+  #:use-module (srfi srfi-26)
+
+  #:export (customize-site
+            guix-pythonpath-search-path))
+
+(define* (customize-site version)
+  "Generate a install-sitecustomize.py phase, using VERSION."
+  `(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+     (let* ((out (assoc-ref outputs "out"))
+            (site-packages (string-append
+                            out "/lib/python"
+                            ,(version-major+minor version)
+                            "/site-packages"))
+            (sitecustomize.py (assoc-ref (or native-inputs inputs)
+                                         "sitecustomize.py"))
+            (dest (string-append site-packages "/sitecustomize.py")))
+       (mkdir-p site-packages)
+       (copy-file sitecustomize.py dest)
+       ;; Set the correct permissions on the installed file, else the byte
+       ;; compilation phase fails with a permission denied error.
+       (chmod dest #o644))))
+
+(define (guix-pythonpath-search-path version)
+  "Generate a GUIX_PYTHONPATH search path specification, using VERSION."
+  (search-path-specification (variable "GUIX_PYTHONPATH")
+                             (files (list (string-append
+                                           "lib/python"
+                                           (version-major+minor version)
+                                           "/site-packages")))))
 
 (define-public python-2.7
   (package
     (name "python2")
-    (version "2.7.17")
+    (version "2.7.18")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.python.org/ftp/python/"
-                          version "/Python-" version ".tar.xz"))
-      (sha256
-       (base32
-        "0hds28cg226m8j8sr394nm9yc4gxhvlv109w0avsf2mxrlrz0hsd"))
-      (patches (search-patches "python-2.7-search-paths.patch"
-                               "python-2-deterministic-build-info.patch"
-                               "python-2.7-site-prefixes.patch"
-                               "python-2.7-source-date-epoch.patch"
-                               "python-2.7-adjust-tests.patch"
-                               "python-cross-compile.patch"
-                               "python-2.7-CVE-2021-3177.patch"))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          ;; Ensure the bundled copies of these libraries are not used.
-          (for-each delete-file-recursively
-                    '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
+       (method url-fetch)
+       (uri (string-append "https://www.python.org/ftp/python/"
+                           version "/Python-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0hzgxl94hnflis0d6m4szjx0b52gah7wpmcg5g00q7am6xwhwb5n"))
+       (patches (search-patches "python-2.7-search-paths.patch"
+                                "python-2-deterministic-build-info.patch"
+                                "python-2.7-site-prefixes.patch"
+                                "python-2.7-source-date-epoch.patch"
+                                "python-2.7-adjust-tests.patch"
+                                "python-cross-compile.patch"
+                                "python-2.7-CVE-2021-3177.patch"
+                                "python-2.7-no-static-lib.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Ensure the bundled copies of these libraries are not used.
+           (for-each delete-file-recursively
+                     '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
 
-          (substitute* "Modules/Setup.dist"
-            ;; Link Expat instead of embedding the bundled one.
-            (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
+           (substitute* "Modules/Setup.dist"
+             ;; Link Expat instead of embedding the bundled one.
+             (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
 
-          ;; Suboptimal to delete failing tests here, but if we delete them in
-          ;; the arguments then we need to make sure to strip out that phase
-          ;; when it gets inherited by python and python-minimal.
-          (for-each delete-file
-                    '("Lib/test/test_compileall.py"
-                      "Lib/test/test_ctypes.py" ; fails on mips64el
-                      "Lib/test/test_distutils.py"
-                      "Lib/test/test_import.py"
-                      "Lib/test/test_shutil.py"
-                      "Lib/test/test_socket.py"
-                      "Lib/test/test_subprocess.py"))
-          #t))))
+           ;; Suboptimal to delete failing tests here, but if we delete them in
+           ;; the arguments then we need to make sure to strip out that phase
+           ;; when it gets inherited by python and python-minimal.
+           (for-each delete-file
+                     '("Lib/test/test_compileall.py"
+                       "Lib/test/test_ctypes.py" ; fails on mips64el
+                       "Lib/test/test_distutils.py"
+                       "Lib/test/test_import.py"
+                       "Lib/test/test_shutil.py"
+                       "Lib/test/test_socket.py"
+                       "Lib/test/test_subprocess.py"))))))
     (outputs '("out"
-               "tk"))                     ;tkinter; adds 50 MiB to the closure
+               "tk"                     ;tkinter; adds 50 MiB to the closure
+               "idle"))                 ;programming environment; weighs 5MB
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:configure-flags
-       (list "--enable-shared"                    ;allow embedding
-             "--with-system-expat"                ;for XML support
-             "--with-system-ffi"                  ;build ctypes
-             "--with-ensurepip=install"           ;install pip and setuptools
+       (list "--enable-shared"          ;allow embedding
+             "--with-system-expat"      ;for XML support
+             "--with-system-ffi"        ;build ctypes
+             "--with-ensurepip=install" ;install pip and setuptools
+             "--with-computed-gotos"    ;main interpreter loop optimization
              "--enable-unicode=ucs4"
 
+             ;; FIXME: These flags makes Python significantly faster, but
+             ;; leads to non-reproducible binaries.
+             ;; "--with-lto"               ;increase size by 20MB, but 15% speedup
+             ;; "--enable-optimizations"
+
              ;; Prevent the installed _sysconfigdata.py from retaining a reference
              ;; to coreutils.
              "INSTALL=install -c"
@@ -168,8 +204,13 @@
                      "ac_cv_file__dev_ptmx=no"
                      "ac_cv_file__dev_ptc=no")
                    '())
+             ;; -fno-semantic-interposition reinstates some optimizations by gcc
+             ;; leading to around 15% speedup. This is the default starting from
+             ;; python 3.10.
+             "CFLAGS=-fno-semantic-interposition"
              (string-append "LDFLAGS=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib"))
+                            (assoc-ref %outputs "out") "/lib"
+                            " -fno-semantic-interposition"))
        ;; With no -j argument tests use all available cpus, so provide one.
        #:make-flags
        (list (string-append
@@ -181,12 +222,12 @@
               ;; https://github.com/python/cpython/commit/529525fb5a8fd9b96ab4021311a598c77588b918.
               " --exclude test_urllib2_localnet test_httplib"))
 
-        #:modules ((ice-9 ftw) (ice-9 match)
-                   (guix build utils) (guix build gnu-build-system))
-        #:phases
-        (modify-phases %standard-phases
-          (add-before
-           'configure 'patch-lib-shells
+       #:modules ((ice-9 ftw) (ice-9 match)
+                  (guix build utils) (guix build gnu-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+             'configure 'patch-lib-shells
            (lambda _
              ;; This variable is used in setup.py to enable cross compilation
              ;; specific switches. As it is not set properly by configure
@@ -202,40 +243,34 @@
                                     "Lib/distutils/tests/test_spawn.py"
                                     "Lib/test/support/__init__.py"
                                     "Lib/test/test_subprocess.py"))
-               (("/bin/sh") (which "sh")))
-             #t))
-          ,@(if (hurd-system?)
-                `((add-before 'build 'patch-regen-for-hurd
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((libc (assoc-ref inputs "libc")))
-                        (substitute* "Lib/plat-generic/regen"
-                          (("/usr/include/") (string-append libc "/include/")))
-                        #t))))
-                '())
-          (add-before 'configure 'do-not-record-configure-flags
-            (lambda* (#:key configure-flags #:allow-other-keys)
-              ;; Remove configure flags from the installed '_sysconfigdata.py'
-              ;; and 'Makefile' so we don't end up keeping references to the
-              ;; build tools.
-              ;;
-              ;; Preserve at least '--with-system-ffi' since otherwise the
-              ;; thing tries to build libffi, fails, and we end up with a
-              ;; Python that lacks ctypes.
-              (substitute* "configure"
-                (("^CONFIG_ARGS=.*$")
-                 (format #f "CONFIG_ARGS='~a'\n"
-                         (if (member "--with-system-ffi" configure-flags)
-                             "--with-system-ffi"
-                             ""))))
-              #t))
-          (add-before
-           'check 'pre-check
+               (("/bin/sh") (which "sh")))))
+         ,@(if (hurd-system?)
+               `((add-before 'build 'patch-regen-for-hurd
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((libc (assoc-ref inputs "libc")))
+                       (substitute* "Lib/plat-generic/regen"
+                         (("/usr/include/") (string-append libc "/include/")))))))
+               '())
+         (add-before 'configure 'do-not-record-configure-flags
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             ;; Remove configure flags from the installed '_sysconfigdata.py'
+             ;; and 'Makefile' so we don't end up keeping references to the
+             ;; build tools.
+             ;;
+             ;; Preserve at least '--with-system-ffi' since otherwise the
+             ;; thing tries to build libffi, fails, and we end up with a
+             ;; Python that lacks ctypes.
+             (substitute* "configure"
+               (("^CONFIG_ARGS=.*$")
+                (format #f "CONFIG_ARGS='~a'\n"
+                        (if (member "--with-system-ffi" configure-flags)
+                            "--with-system-ffi"
+                            ""))))))
+         (add-before 'check 'pre-check
            (lambda _
              ;; 'Lib/test/test_site.py' needs a valid $HOME
-             (setenv "HOME" (getcwd))
-             #t))
-          (add-after
-           'unpack 'set-source-file-times-to-1980
+             (setenv "HOME" (getcwd))))
+         (add-after 'unpack 'set-source-file-times-to-1980
            ;; XXX One of the tests uses a ZIP library to pack up some of the
            ;; source tree, and fails with "ZIP does not support timestamps
            ;; before 1980".  Work around this by setting the file times in the
@@ -244,98 +279,130 @@
              (let ((circa-1980 (* 10 366 24 60 60)))
                (ftw "." (lambda (file stat flag)
                           (utime file circa-1980 circa-1980)
-                          #t))
-               #t)))
-          (add-after 'install 'remove-tests
-            ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
-            ;; because these files are used by some libraries out there.
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                (match (scandir (string-append out "/lib")
-                                (lambda (name)
-                                  (string-prefix? "python" name)))
-                  ((pythonX.Y)
-                   (let ((testdir (string-append out "/lib/" pythonX.Y
-                                                 "/test")))
-                     (with-directory-excursion testdir
-                       (for-each delete-file-recursively
-                                 (scandir testdir
-                                          (match-lambda
-                                            ((or "." "..") #f)
-                                            ("support" #f)
-                                            (file
-                                             (not
-                                              (string-prefix? "test_support."
-                                                              file))))))
-                       (call-with-output-file "__init__.py" (const #t))
-                       #t)))))))
-          (add-after 'remove-tests 'rebuild-bytecode
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                ;; Disable hash randomization to ensure the generated .pycs
-                ;; are reproducible.
-                (setenv "PYTHONHASHSEED" "0")
-                (for-each
-                 (lambda (opt)
-                   (format #t "Compiling with optimization level: ~a\n"
-                           (if (null? opt) "none" (car opt)))
-                   (for-each (lambda (file)
-                               (apply invoke
-                                      `(,,(if (%current-target-system)
-                                              "python2"
-                                              '(string-append out "/bin/python"))
-                                        ,@opt
-                                        "-m" "compileall"
-                                        "-f" ; force rebuild
-                                        ;; Don't build lib2to3, because it contains Python 3 code.
-                                        "-x" "lib2to3/.*"
-                                        ,file)))
-                             (find-files out "\\.py$")))
-                 (list '() '("-O") '("-OO")))
-                #t)))
-          (add-after 'install 'move-tk-inter
-            (lambda* (#:key outputs #:allow-other-keys)
-              ;; When Tkinter support is built move it to a separate output so
-              ;; that the main output doesn't contain a reference to Tcl/Tk.
-              (let ((out (assoc-ref outputs "out"))
-                    (tk  (assoc-ref outputs "tk")))
-                (when tk
-                  (match (find-files out "tkinter.*\\.so")
-                    ((tkinter.so)
-                     ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
-                     ;; want it under TK/lib/pythonX.Y/site-packages.
-                     (let* ((len    (string-length out))
-                            (target (string-append
-                                     tk "/"
-                                     (string-drop
-                                      (dirname (dirname tkinter.so))
-                                      len)
-                                     "/site-packages")))
-                       (install-file tkinter.so target)
-                       (delete-file tkinter.so)))))
-                #t))))))
+                          #t)))))
+         (add-after 'install 'remove-tests
+           ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
+           ;; because these files are used by some libraries out there.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (match (scandir (string-append out "/lib")
+                               (lambda (name)
+                                 (string-prefix? "python" name)))
+                 ((pythonX.Y)
+                  (let ((testdir (string-append out "/lib/" pythonX.Y
+                                                "/test")))
+                    (with-directory-excursion testdir
+                      (for-each delete-file-recursively
+                                (scandir testdir
+                                         (match-lambda
+                                           ((or "." "..") #f)
+                                           ("support" #f)
+                                           (file
+                                            (not
+                                             (string-prefix? "test_support."
+                                                             file))))))
+                      (call-with-output-file "__init__.py" (const #t))))
+                  (let ((libdir (string-append out "/lib/" pythonX.Y)))
+                    (for-each
+                     (lambda (directory)
+                       (let ((dir (string-append libdir "/" directory)))
+                         (when (file-exists? dir)
+                           (delete-file-recursively dir))))
+                     '("email/test" "ctypes/test" "unittest/test" "tkinter/test"
+                       "sqlite3/test" "bsddb/test" "lib-tk/test" "json/tests"
+                       "distutils/tests"))))))))
+         (add-after 'remove-tests 'move-tk-inter
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; When Tkinter support is built move it to a separate output so
+             ;; that the main output doesn't contain a reference to Tcl/Tk.
+             (let ((out (assoc-ref outputs "out"))
+                   (tk  (assoc-ref outputs "tk")))
+               (when tk
+                 (match (find-files out "tkinter.*\\.so")
+                   ((tkinter.so)
+                    ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
+                    ;; want it under TK/lib/pythonX.Y/site-packages.
+                    (let* ((len    (string-length out))
+                           (target (string-append
+                                    tk "/"
+                                    (string-drop
+                                     (dirname (dirname tkinter.so))
+                                     len)
+                                    "/site-packages")))
+                      (install-file tkinter.so target)
+                      (delete-file tkinter.so))))))))
+         (add-after 'move-tk-inter 'move-idle
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; when idle is built, move it to a separate output to save some
+             ;; space (5MB)
+             (let ((out (assoc-ref outputs "out"))
+                   (idle (assoc-ref outputs "idle")))
+               (when idle
+                 (for-each
+                  (lambda (file)
+                    (let ((target (string-append idle "/bin/" (basename file))))
+                      (install-file file (dirname target))
+                      (delete-file file)))
+                  (find-files (string-append out "/bin") "^idle"))
+                 (match (find-files out "^idlelib$" #:directories? #t)
+                   ((idlelib)
+                    (let* ((len (string-length out))
+                           (target (string-append idle "/"
+                                                  (string-drop idlelib len)
+                                                  "/site-packages")))
+                      (mkdir-p (dirname target))
+                      (rename-file idlelib target))))))))
+         (add-after 'move-idle 'rebuild-bytecode
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Disable hash randomization to ensure the generated .pycs
+               ;; are reproducible.
+               (setenv "PYTHONHASHSEED" "0")
+               (for-each
+                (lambda (output)
+                  (for-each (lambda (opt)
+                              (format #t "Compiling with optimization level: ~a\n"
+                                      (if (null? opt) "none" (car opt)))
+                              (apply invoke
+                                     `(,,(if (%current-target-system)
+                                             "python2"
+                                             '(string-append out "/bin/python"))
+                                       ,@opt
+                                       "-m" "compileall"
+                                       "-f" ; force rebuild
+                                       ;; Don't build lib2to3, because it contains
+                                       ;; Python 3 code.
+                                       "-x" "lib2to3/.*"
+                                       ,output)))
+                            ;; Python 2 has a single file extension (.pyo) for the
+                            ;; chosen level of optimization, so it doesn't make
+                            ;; sense to byte compile with more than one level.
+                            (list '() '("-OO"))))
+                (map cdr outputs)))))
+         (add-after 'install 'install-sitecustomize.py
+           ,(customize-site version)))))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("expat" ,expat)
-       ("gdbm" ,gdbm)
-       ("libffi" ,libffi)                         ; for ctypes
-       ("sqlite" ,sqlite)                         ; for sqlite extension
-       ("openssl" ,openssl)
-       ("readline" ,readline)
-       ("zlib" ,zlib)
-       ("tcl" ,tcl)
-       ("tk" ,tk)))                               ; for tkinter
+     (list bzip2
+           expat
+           gdbm
+           libffi ; for ctypes
+           sqlite ; for sqlite extension
+           openssl
+           readline
+           zlib
+           tcl
+           tk))                     ; for tkinter
     (native-inputs
      `(("pkg-config" ,pkg-config)
+       ("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))
        ;; When cross-compiling, a native version of Python itself is needed.
        ,@(if (%current-target-system)
              `(("python2" ,this-package)
                ("which" ,which))
              '())))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files '("lib/python2.7/site-packages")))))
+     (list (guix-pythonpath-search-path version)))
     (home-page "https://www.python.org")
     (synopsis "High-level, dynamically-typed programming language")
     (description
@@ -360,24 +427,25 @@ data types.")
     (name "python")
     (properties `((superseded . ,python-2)))))
 
-(define-public python-3.8
-  (package (inherit python-2)
+(define-public python-3.9
+  (package
+    (inherit python-2)
     (name "python")
-    (version "3.8.2")
+    (version "3.9.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
               (patches (search-patches
-                        "python-CVE-2020-26116.patch"
-                        "python-3.8-CVE-2021-3177.patch"
-                        "python-3-fix-tests.patch"
-                        "python-3.8-fix-tests.patch"
+                        "python-3-arm-alignment.patch"
                         "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
+                        "python-3-fix-tests.patch"
+                        "python-3-hurd-configure.patch"
+                        "python-3-search-paths.patch"
+                        "python-3-no-static-lib.patch"))
               (sha256
                (base32
-                "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6"))
+                "12hhw2685i68pwfx5hdkqngzhbji4ccyjmqb5rzvkigg6fpj0y9r"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -386,17 +454,16 @@ data types.")
                   (substitute* "Modules/Setup"
                     ;; Link Expat instead of embedding the bundled one.
                     (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                  #t))))
+                  ;; Delete windows binaries
+                  (for-each delete-file
+                            (find-files "Lib/distutils/command" "\\.exe$"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments python-2)
        ((#:make-flags _)
         `(list (string-append
                 (format #f "TESTOPTS=-j~d" (parallel-job-count))
-                ;; test_mmap fails on low-memory systems.
-                " --exclude test_mmap"
-                ;; test_socket may hang and eventually run out of memory
-                ;; on some systems: <https://bugs.python.org/issue34587>.
-                " test_socket"
+                ;; test_mmap fails on low-memory systems
+                " --exclude test_mmap test_socket"
                 ,@(if (hurd-target?)
                       '(" test_posix"      ;multiple errors
                         " test_time"
@@ -430,124 +497,90 @@ data types.")
                         " test_write_pty")
                       '()))))
        ((#:phases phases)
-       `(modify-phases ,phases
-          ,@(if (hurd-system?)
-                `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
-                '())
-          ,@(if (hurd-target?)
-                ;; The build system refuses to cross-compile for unknown targets
-                ;; even though it works fine.  Add GNU/Hurd target.
-                ;; TODO: Make it a patch in a future rebuild cycle.
-                '((add-before 'configure 'support-hurd-cross-compile
-                    (lambda _
-                      (substitute* "configure"
-                        (("\\*-\\*-vxworks.*" all)
-                         (string-append "*-*-gnu)\nac_sys_system=GNU\n;;\n" all)))
-                      #t)))
-                '())
-          (add-before 'check 'set-TZDIR
-            (lambda* (#:key inputs native-inputs #:allow-other-keys)
-              ;; test_email requires the Olson time zone database.
-              (setenv "TZDIR"
-                      (string-append (assoc-ref
-                                      (or native-inputs inputs) "tzdata")
-                                     "/share/zoneinfo"))
-              #t))
-          ;; Unset SOURCE_DATE_EPOCH while running the test-suite and set it
-          ;; again afterwards.  See <https://bugs.python.org/issue34022>.
-          (add-before 'check 'unset-SOURCE_DATE_EPOCH
-            (lambda _ (unsetenv "SOURCE_DATE_EPOCH") #t))
-          (add-after 'check 'reset-SOURCE_DATE_EPOCH
-            (lambda _ (setenv "SOURCE_DATE_EPOCH" "1") #t))
+        `(modify-phases ,phases
+           ,@(if (hurd-system?)
+                 `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
+                 '())
+           (add-after 'unpack 'remove-windows-binaries
+             (lambda _
+               ;; Delete .exe from embedded .whl (zip) files
+               (for-each
+                (lambda (whl)
+                  (let ((dir "whl-content")
+                        (circa-1980 (* 10 366 24 60 60)))
+                    (mkdir-p dir)
+                    (with-directory-excursion dir
+                      (let ((whl (string-append "../" whl)))
+                        (invoke "unzip" whl)
+                        (for-each delete-file
+                                  (find-files "." "\\.exe$"))
+                        (delete-file whl)
+                        ;; Reset timestamps to prevent them from ending
+                        ;; up in the Zip archive.
+                        (ftw "." (lambda (file stat flag)
+                                   (utime file circa-1980 circa-1980)
+                                   #t))
+                        (apply invoke "zip" "-X" whl
+                               (find-files "." #:directories? #t))))
+                    (delete-file-recursively dir)))
+                (find-files "Lib/ensurepip" "\\.whl$"))))
+           (add-before 'check 'set-TZDIR
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               ;; test_email requires the Olson time zone database.
+               (setenv "TZDIR"
+                       (string-append (assoc-ref
+                                       (or native-inputs inputs) "tzdata")
+                                      "/share/zoneinfo"))))
            (replace 'rebuild-bytecode
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
                  ;; Disable hash randomization to ensure the generated .pycs
                  ;; are reproducible.
                  (setenv "PYTHONHASHSEED" "0")
-                 (for-each
-                  (lambda (opt)
-                    (format #t "Compiling with optimization level: ~a\n"
-                            (if (null? opt) "none" (car opt)))
-                    (for-each (lambda (file)
-                                (apply invoke
-                                       `(,,(if (%current-target-system)
-                                               "python3"
-                                               '(string-append out
-                                                               "/bin/python3"))
-                                          ,@opt
-                                          "-m" "compileall"
-                                          "-f" ; force rebuild
-                                          ;; Don't build lib2to3, because it's Python 2 code.
-                                          "-x" "lib2to3/.*"
-                                          ,file)))
-                              (find-files out "\\.py$")))
-                  (list '() '("-O") '("-OO")))
-                 #t)))
-           ;; XXX: Apply patch on ARM platforms only to avoid a full rebuild.
-           ;; Remove this phase in the next rebuild cycle.
-           ,@(let ((system (or (%current-target-system)
-                               (%current-system))))
-               (if (any (cute string-prefix? <> system)
-                        '("arm" "aarch64"))
-                   '((add-after 'unpack 'apply-alignment-patch
-                       (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                        (invoke "patch" "-p1" "--force" "--input"
-                                (assoc-ref (or native-inputs inputs)
-                                           "arm-alignment.patch")))))
-                   '()))))))
-    (native-inputs
-     `(("tzdata" ,tzdata-for-tests)
 
-       ;; Disable unaligned accesses in the sha3 module on ARM as
-       ;; it causes a test failure when building 32-bit Python on a
-       ;; 64-bit kernel.  See <https://bugs.python.org/issue36515>.
-       ;; TODO: make this a regular patch in the next rebuild cycle.
-       ,@(let ((system (or (%current-target-system)
-                           (%current-system))))
-           (if (any (cute string-prefix? <> system)
-                    '("arm" "aarch64"))
-               `(("arm-alignment.patch" ,(search-patch "python-3-arm-alignment.patch")))
-               '()))
+                 (for-each (lambda (output)
+                             ;; XXX: Delete existing pycs generated by the build
+                             ;; system beforehand because the -f argument does
+                             ;; not necessarily overwrite all files, leading to
+                             ;; indeterministic results.
+                             (for-each (lambda (pyc)
+                                         (delete-file pyc))
+                                       (find-files output "\\.pyc$"))
 
+                             (apply invoke
+                                    `(,,(if (%current-target-system)
+                                            "python3"
+                                            '(string-append out
+                                                            "/bin/python3"))
+                                      "-m" "compileall"
+                                      "-o" "0" "-o" "1" "-o" "2"
+                                      "-f" ; force rebuild
+                                      "--invalidation-mode=unchecked-hash"
+                                      ;; Don't build lib2to3, because it's
+                                      ;; Python 2 code.
+                                      "-x" "lib2to3/.*"
+                                      ,output)))
+                           (map cdr outputs)))))
+           (replace 'install-sitecustomize.py
+             ,(customize-site version))))))
+    (native-inputs
+     `(("tzdata" ,tzdata-for-tests)
+       ("unzip" ,unzip)
+       ("zip" ,(@ (gnu packages compression) zip))
        ,@(if (%current-target-system)
              `(("python3" ,this-package))
              '())
        ,@(package-native-inputs python-2)))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files (list (string-append "lib/python"
-                                        (version-major+minor version)
-                                        "/site-packages"))))))))
-
-(define-public python-3.9
-  (package (inherit python-3.8)
-    (name "python-next")
-    (version "3.9.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.python.org/ftp/python/"
-                                  version "/Python-" version ".tar.xz"))
-              (patches (search-patches
-                        "python-3.9-fix-tests.patch"
-                        "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
-              (sha256
-               (base32
-                "0z94vv5qhlwvcgc4sy9sdiqs0220s84wx3b62vslh5419z2k881w"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Delete the bundled copy of libexpat.
-                  (delete-file-recursively "Modules/expat")
-                  (substitute* "Modules/Setup"
-                    ;; Link Expat instead of embedding the bundled one.
-                    (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                  #t))))))
+     (list (guix-pythonpath-search-path version)
+           ;; Used to locate tzdata by the zoneinfo module introduced in
+           ;; Python 3.9.
+           (search-path-specification
+            (variable "PYTHONTZPATH")
+            (files (list "share/zoneinfo")))))))
 
 ;; Current 3.x version.
-(define-public python-3 python-3.8)
+(define-public python-3 python-3.9)
 
 ;; Current major version.
 (define-public python python-3)
@@ -621,8 +654,8 @@ for more information.")))
                   (lambda (old new)
                     (symlink (string-append python old)
                              (string-append bin "/" new)))
-                  `("python3" ,"pydoc3" ,"idle3" ,"pip3")
-                  `("python"  ,"pydoc"  ,"idle"  ,"pip"))
+                  `("python3" ,"pydoc3" ,"pip3")
+                  `("python"  ,"pydoc"  ,"pip"))
                 ;; python-config outputs search paths based upon its location,
                 ;; use a bash wrapper to avoid changing its outputs.
                 (let ((bash (string-append (assoc-ref %build-inputs "bash")
@@ -633,8 +666,7 @@ for more information.")))
                     (lambda ()
                       (format #t "#!~a~%" bash)
                       (format #t "exec \"~a\" \"$@\"~%" old)
-                      (chmod new #o755)
-                      #t)))))))
+                      (chmod new #o755))))))))
     (synopsis "Wrapper for the Python 3 commands")
     (description
      "This package provides wrappers for the commands of Python@tie{}3.x such
@@ -697,7 +729,7 @@ To function properly, this package should not be installed together with the
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("libffi" ,libffi)))
+     (list libffi))
     (home-page "https://micropython.org/")
     (synopsis "Python implementation for microcontrollers and constrained systems")
     (description "MicroPython is a lean and efficient implementation of the
@@ -732,18 +764,18 @@ ease from the desktop to a microcontroller or embedded system.")
        ("nss-certs" ,nss-certs)         ; For ssl tests
        ("gzip" ,gzip)))
     (inputs
-     `(("libffi" ,libffi)
-       ("zlib" ,zlib)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("expat" ,expat)
-       ("bzip2" ,bzip2)
-       ("sqlite" ,sqlite)
-       ("gdbm" ,gdbm)
-       ("tcl" ,tcl)
-       ("tk" ,tk)
-       ("glibc" ,glibc)
-       ("xz" ,xz)))                     ; liblzma
+     (list libffi
+           zlib
+           ncurses
+           openssl
+           expat
+           bzip2
+           sqlite
+           gdbm
+           tcl
+           tk
+           glibc
+           xz))                     ; liblzma
     (arguments
      `(#:tests? #f                     ;FIXME: 43 out of 364 tests are failing
        #:modules ((ice-9 ftw) (ice-9 match)
@@ -791,7 +823,8 @@ ease from the desktop to a microcontroller or embedded system.")
                                         "/lib/libsqlite3.so.0'")))
                       (substitute* '("lib-python/3/subprocess.py")
                         ;; Fix shell path
-                        (("/bin/sh") (which "sh")))
+                        (("/bin/sh")
+                         (search-input-file inputs "/bin/sh")))
                       (substitute* '("lib-python/3/distutils/unixccompiler.py")
                         ;; gcc-toolchain does not provide symlink cc -> gcc
                         (("\"cc\"") "\"gcc\""))))
@@ -816,9 +849,6 @@ ease from the desktop to a microcontroller or embedded system.")
                                 "--allworkingmodules"))
                       ;; Build c modules and package everything, so tests work.
                       (with-directory-excursion "pypy/tool/release"
-                        (unsetenv "PYTHONPATH") ; Do not use the system’s python libs:
-                                        ; AttributeError: module 'enum' has no
-                                        ; attribute 'IntFlag'
                         (invoke "python2" "package.py"
                                 "--archive-name" "pypy-dist"
                                 "--builddir" (getcwd)))))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 4625d2220d..01bf961bbf 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -49,6 +49,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix deprecation)
   #:use-module (guix utils)
@@ -135,8 +136,7 @@
                (chdir "libqite")
                #t)))))
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)))
+       (list qtbase-5 qtmultimedia))
       (home-page "https://github.com/Ri0n/qite/")
       (synopsis "Qt Interactive Text Elements")
       (description "Qite manages interactive elements on QTextEdit.")
@@ -169,9 +169,7 @@
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "qt5ct.pro"
                (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
-                (string-append (assoc-ref inputs "qttools")
-                               "/bin/lrelease")))
-             #t))
+                (search-input-file inputs "/bin/lrelease")))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
@@ -184,10 +182,9 @@
          (add-after 'install 'qt-wrap
            (assoc-ref qt:%standard-phases 'qt-wrap)))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)))
+     (list qtbase-5 qtsvg))
     (synopsis "Qt5 Configuration Tool")
     (description "Qt5CT is a program that allows users to configure Qt5
 settings (such as icons, themes, and fonts) in desktop environments or
@@ -223,15 +220,13 @@ window managers, that don't provide Qt integration by themselves.")
       (arguments
        `(#:tests? #f                    ; No target
          #:configure-flags
-         (list
-          (string-append "-DCMAKE_CXX_FLAGS=-I"
-                         (assoc-ref %build-inputs "qtbase")
-                         "/include/qt5/QtXkbCommonSupport/"
-                         ,(package-version qtbase-5)))))
+         ,#~(list
+             (string-append "-DCMAKE_CXX_FLAGS=-I"
+                            #$(this-package-input "qtbase")
+                            "/include/qt5/QtXkbCommonSupport/"
+                            #$(package-version qtbase-5)))))
       (native-inputs
-       `(("cmake-shared" ,cmake-shared)
-         ("extra-cmake-modules" ,extra-cmake-modules)
-         ("pkg-config" ,pkg-config)))
+       (list cmake-shared extra-cmake-modules pkg-config))
       (inputs
        `(("qtbase" ,qtbase-5)
          ("qtwayland" ,qtwayland)
@@ -258,11 +253,9 @@ applications on Wayland.")
          (base32 "02dyqxjyxiqxrlz5g7v9ly8f095vs3iha39l75q6s8axs36y01lq"))))
     (native-inputs
      ;; Optional: lcov and cccc, both are for code coverage
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtscript" ,qtscript)))
+     (list qtbase-5 qtdeclarative qtscript))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -323,9 +316,9 @@ system, and the core design of Django is reused in Grantlee.")
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (propagated-inputs
-     `(("mesa" ,mesa)
-       ;; Use which the package, not the function
-       ("which" ,(@ (gnu packages base) which))))
+     (list mesa
+           ;; Use which the package, not the function
+           (@ (gnu packages base) which)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cups" ,cups)
@@ -372,14 +365,14 @@ system, and the core design of Django is reused in Grantlee.")
        ("xdg-utils" ,xdg-utils)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)
-       ("ruby" ,ruby)))
+     (list bison
+           flex
+           gperf
+           perl
+           pkg-config
+           python
+           vulkan-headers
+           ruby))
     (arguments
      `(#:configure-flags
        (let ((out (assoc-ref %outputs "out")))
@@ -710,11 +703,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
               (base32
                "0pjqrdmd1991x9h4rl8sf81pkd89hfd5h1a2gp3fjw96pk0w5hwb"))))
     (propagated-inputs `())
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 zlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -798,13 +789,13 @@ HostData=lib/qt5
                #t))))))
     (native-inputs `())
     (inputs
-     `(("jasper" ,jasper)
-       ("libmng" ,libmng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list jasper
+           libmng
+           libtiff
+           libwebp
+           mesa
+           qtbase-5
+           zlib))
     (synopsis "Additional Image Format plugins for Qt")
     (description "The QtImageFormats module contains plugins for adding
 support for MNG, TGA, TIFF and WBMP image formats.")))
@@ -822,10 +813,9 @@ support for MNG, TGA, TIFF and WBMP image formats.")))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt Extras for X11")
     (description "The QtX11Extras module includes the library to access X11
 from within Qt 5.")))
@@ -850,9 +840,8 @@ from within Qt 5.")))
                          (("qxmlquery") "# qxmlquery")
                          (("xmlpatterns ") "# xmlpatterns"))
                #t))))))
-    (native-inputs `(("perl" ,perl)
-                     ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+    (native-inputs (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt XML patterns module")
     (description "The QtXmlPatterns module is a XQuery and XPath engine for
 XML and custom data models.  It contains programs such as xmlpatterns and
@@ -883,15 +872,14 @@ xmlpatternsvalidator.")))
                    (("\\$\\{_qt5Core_install_prefix\\}") out)))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-wrapper" ,python-wrapper)
-       ("qtsvg" ,qtsvg)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list perl
+           pkg-config
+           python
+           python-wrapper
+           qtsvg
+           vulkan-headers))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt QML module (Quick 2)")
     (description "The Qt QML module provides a framework for developing
 applications and libraries with the QML language.  It defines and implements the
@@ -910,12 +898,9 @@ with JavaScript and C++.")))
               (base32
                "185zci61ip1wpjrygcw2m6v55lvninc0b8y2p3jh6qgpf5w35003"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list perl pkg-config qtdeclarative))
     (inputs
-     `(("bluez" ,bluez)
-       ("qtbase" ,qtbase-5)))
+     (list bluez qtbase-5))
     (synopsis "Qt Connectivity module")
     (description "The Qt Connectivity modules provides modules for interacting
 with Bluetooth and NFC.")))
@@ -934,9 +919,8 @@ with Bluetooth and NFC.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt Web Sockets module")
     (description "WebSocket is a web-based protocol designed to enable two-way
 communication between a client application and a remote host.  The Qt
@@ -966,9 +950,8 @@ consume data received from the server, or both.")))
                  (("QTest::newRow(\"twist\") << \"twist\"") "")) ;failing test
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative))
+    (inputs (list qtbase-5))
     (synopsis "Qt Sensors module")
     (description "The Qt Sensors API provides access to sensor hardware via QML
 and C++ interfaces.  The Qt Sensors API also provides a motion gesture
@@ -1005,18 +988,15 @@ recognition API for devices.")))
                          (string-append "PREFIX=" out)))))))
        ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list perl pkg-config python qtdeclarative))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("mesa" ,mesa)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ;; Gstreamer is needed for the mediaplayer plugin
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)))
+     (list alsa-lib
+           mesa
+           pulseaudio
+           qtbase-5
+           ;; Gstreamer is needed for the mediaplayer plugin
+           gstreamer
+           gst-plugins-base))
     (synopsis "Qt Multimedia module")
     (description "The Qt Multimedia module provides set of APIs to play and
 record media, and manage a collection of media content.  It also contains a
@@ -1053,10 +1033,7 @@ set of plugins for interacting with pulseaudio and GStreamer.")))
                (setenv "DBUS_FATAL_WARNINGS" "0")
                #t))))))
     (native-inputs
-     `(("glib" ,glib)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list glib perl pkg-config qtdeclarative))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1084,10 +1061,9 @@ compositor libraries.")))
              (sha256
               (base32
                "17gp5qzg4wdg8qlxk2p3mh8x1vk33rf33wic3fy0cws193bmkiar"))))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("eudev" ,eudev)))
+     (list qtbase-5 eudev))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:phases phases)
@@ -1129,9 +1105,7 @@ interacting with serial ports from within Qt.")))
                     (format #f "QStringLiteral(~s)" libcansocket.so)))
                  #t)))))))
     (inputs
-     `(("libsocketcan" ,libsocketcan)
-       ("qtbase" ,qtbase-5)
-       ("qtserialport" ,qtserialport)))
+     (list libsocketcan qtbase-5 qtserialport))
     (synopsis "Qt Serial Bus module")
     (description "The Qt Serial Bus API provides classes and functions to
 access the various industrial serial buses and protocols, such as CAN, ModBus,
@@ -1148,10 +1122,8 @@ and others.")))
               (base32
                "1h9y634phvvk557mhmf9z4lmxr41rl8x9mqy2lzp31mk8ffffzqj"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)))
-    (inputs `(("qtbase" ,qtbase-5)))
+     (list perl qtdeclarative qtwebsockets))
+    (inputs (list qtbase-5))
     (synopsis "Web communication library for Qt")
     (description "The Qt WebChannel module enables peer-to-peer communication
 between the host (QML/C++ application) and the client (HTML/JavaScript
@@ -1178,11 +1150,7 @@ popular web engines, Qt WebKit 2 and Qt WebEngine.")))
                #t))))))
     (native-inputs '())
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)
-       ("zlib" ,zlib)))
+     (list mesa qtbase-5 qtdeclarative qtwebsockets zlib))
     (synopsis "QPA plugin for running an application via a browser using
 streamed WebGL commands")
     (description "Qt back end that uses WebGL for rendering. It allows Qt
@@ -1202,10 +1170,9 @@ OpenGL ES 2.0 and can be used in HTML5 canvas elements")))
               (base32
                "1rw1wibmbxlj6xc86qs3y8h42al1vczqiksyxzaylxs9gqb4d7xy"))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Display web content in a QML application")
     (description "Qt WebView provides a way to display web content in a QML
 application without necessarily including a full web browser stack by using
@@ -1228,15 +1195,9 @@ native APIs where it makes sense.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtserialport" ,qtserialport)))
+     (list perl qtdeclarative qtquickcontrols qtserialport))
     (inputs
-     `(("icu4c" ,icu4c)
-       ("openssl" ,openssl)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)))
+     (list icu4c openssl qtbase-5 zlib))
     (synopsis "Qt Location and Positioning modules")
     (description "The Qt Location module provides an interface for location,
 positioning and geolocation plugins.")))
@@ -1255,12 +1216,9 @@ positioning and geolocation plugins.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list perl qtdeclarative vulkan-headers))
     (inputs
-     `(("mesa" ,mesa)
-       ("qtbase" ,qtbase-5)))
+     (list mesa qtbase-5))
     (synopsis "Qt Tools and Designer modules")
     (description "The Qt Tools module provides a set of applications to browse
 the documentation, translate applications, generate help files and other stuff
@@ -1278,10 +1236,9 @@ that helps in Qt development.")))
                "0gk74hk488k9ldacxbxcranr3arf8ifqg8kz9nm1rgdgd59p36d2"))
              (patches (search-patches "qtscript-disable-tests.patch"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("qttools" ,qttools)))
+     (list perl qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Qt Script module")
     (description "Qt provides support for application scripting with ECMAScript.
 The following guides and references cover aspects of programming with
@@ -1301,8 +1258,7 @@ ECMAScript and Qt.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Quick Controls and other Quick modules")
     (description "The QtScript module provides classes for making Qt
 applications scriptable.  This module provides a set of extra components that
@@ -1322,8 +1278,7 @@ can be used to build complete interfaces in Qt Quick.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Quick Controls 2 and other Quick 2 modules")
     (description "The Qt Quick Controls 2 module contains the Qt Labs Platform
 module that provides platform integration: native dialogs, menus and menu bars,
@@ -1344,8 +1299,7 @@ not available.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Graphical Effects module")
     (description "The Qt Graphical Effects module provides a set of QML types
 for adding visually impressive and configurable effects to user interfaces.
@@ -1365,8 +1319,7 @@ coloring, and many more.")))
               (base32
                "0p07bg93fdfn4gr2kv38qgnws5znhswajrxdfs8xc9l3i7vi2xn7"))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1400,8 +1353,7 @@ and mobile applications targeting TV-like form factors.")))
                    (("scion") "#"))
                  #t))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt SCXML module")
     (description "The Qt SCXML module provides functionality to create state
 machines from SCXML files.  This includes both dynamically creating state
@@ -1420,8 +1372,7 @@ also contains functionality to support data models and executable content.")))
               (base32
                "09rjx53519dfk4qj2gbn3vlxyriasyb747wpg1p11y7jkwqhs4l7"))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Purchasing module")
     (description "The Qt Purchasing module provides and in-app API for
 purchasing goods and services.")))
@@ -1440,8 +1391,7 @@ purchasing goods and services.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Charts module")
     (description "The Qt Charts module provides a set of easy to use chart
 components.  It uses the Qt Graphics View Framework, therefore charts can be
@@ -1464,8 +1414,7 @@ selecting one of the charts themes.")
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Data Visualization module")
     (description "The Qt Data Visualization module provides a way to visualize
 data in 3D as bar, scatter, and surface graphs. It is especially useful for
@@ -1495,7 +1444,7 @@ customized by using themes or by adding custom items and labels to them.")
                  (("oauth1 ") "# oauth1 "))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (synopsis "Qt Network Authorization module")
     (description "The Qt Network Authorization module provides an
 implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
@@ -1526,8 +1475,7 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
                    "integration_multiprocess"))
                #t))))))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Qt Remote Objects module")
     (description "The Qt Remote Objects module is an @dfn{inter-process
 communication} (IPC) module developed for Qt.  The idea is to extend existing
@@ -1549,12 +1497,9 @@ processes or computers.")))
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (native-inputs
-     `(("perl" ,perl)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list perl qtdeclarative qtmultimedia qtxmlpatterns))
     (synopsis "Qt Speech module")
     (description "The Qt Speech module enables a Qt application to support
 accessibility features such as text-to-speech, which is useful for end-users
@@ -1581,11 +1526,9 @@ message.")))
     (arguments
      `(#:tests? #f))                    ;no test
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("enchant" ,enchant)
-       ("qtbase" ,qtbase-5)))
+     (list enchant qtbase-5))
     (home-page "https://github.com/manisandro/qtspell")
     (synopsis "Spell checking for Qt text widgets")
     (description
@@ -1941,7 +1884,9 @@ using the Enchant spell-checking library.")
                (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
                        "--webengine-printing-and-pdf=no"
                        "--webengine-ffmpeg=system"
-                       "--webengine-icu=system"
+                       ;; FIXME: Building qtwebengine 5.12.2 with
+                       ;; icu4c >= 68 fails.
+                       ;;"--webengine-icu=system"
                        "--webengine-pepper-plugins=no"
                        "-webengine-proprietary-codecs")))))
        ;; Tests are disabled due to "Could not find QtWebEngineProcess error"
@@ -2004,7 +1949,7 @@ and binaries removed, and adds modular support for using system libraries.")
                     "singleapplication.h" "singleapplication_p.h"))
                  #t))))))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (home-page "https://github.com/itay-grudev/SingleApplication")
       (synopsis "Replacement of QtSingleApplication for Qt5 and Qt6")
       (description
@@ -2032,10 +1977,9 @@ instances.")
           "1idaivamp1jvbbai9yzv471c62xbqxhaawccvskaizihkd0lq0jx"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-packaging" ,python-packaging)))
+     (list python-toml python-packaging))
     (home-page "https://www.riverbankcomputing.com/software/sip/intro")
     (synopsis "Python binding creator for C and C++ libraries")
     (description
@@ -2114,10 +2058,9 @@ module provides support functions to the automatically generated code.")
         (patches (search-patches "pyqt-configure.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("qtbase" ,qtbase-5))) ; for qmake
+     (list qtbase-5)) ; for qmake
     (propagated-inputs
-     `(("python-sip" ,python-sip)
-       ("python-pyqt5-sip" ,python-pyqt5-sip)))
+     (list python-sip python-pyqt5-sip))
     (inputs
      `(("python" ,python-wrapper)
        ("qtbase" ,qtbase-5)
@@ -2223,10 +2166,9 @@ contain over 620 classes.")
          "0d56ak71r14w4f9r96vaj34qcn2rbln3s6ildvvyc707fjkzwwjd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("python-sip" ,python-sip)
-       ;; qtbase is required for qmake
-       ("qtbase" ,qtbase-5)))
+     (list python python-sip
+           ;; qtbase is required for qmake
+           qtbase-5))
     (inputs
      `(("python" ,python-wrapper)
        ("python-sip" ,python-sip)
@@ -2311,7 +2253,7 @@ itself.")
        "0nh0054c54ji3sm6d268fccf0y5f613spswwgwqd3rnn816hnljl"))))
    (build-system python-build-system)
    (inputs
-    `(("python-sip" ,python-sip)))
+    (list python-sip))
    (home-page "https://www.riverbankcomputing.com/static/Docs/PyQt-builder/")
    (synopsis "PEP 517 compliant PyQt build system")
    (description "PyQt-builder is a tool for generating Python bindings for C++
@@ -2378,7 +2320,7 @@ top of the PyQt bindings for Qt.  PyQt-builder is used to build PyQt itself.")
                  (("\\$\\$\\[QT_HOST_DATA\\]")
                  (string-append out "/lib/qt$${QT_MAJOR_VERSION}")))
                (invoke "qmake")))))))
-    (native-inputs `(("qtbase" ,qtbase-5)))
+    (native-inputs (list qtbase-5))
     (home-page "https://www.riverbankcomputing.co.uk/software/qscintilla/intro")
     (synopsis "Qt port of the Scintilla C++ editor control")
     (description "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++
@@ -2473,10 +2415,9 @@ This package provides the Python bindings.")))
           "0h4wgngn2yl35hapbjs24amkjfbzsvnna4ixfhn87snjnq5lmjbc"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (arguments
      `(#:tests? #f ; No tests included
        #:phases
@@ -2586,7 +2527,7 @@ securely.  It will not store any data unencrypted unless explicitly requested.")
                          '("qtlockedfile" "qtpropertybrowser" "qtservice"
                            "qtsingleapplication" "qtsoap")))))))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (synopsis "Collection of Qt extensions")
       (description "QtSolutions is a set of components extending Qt.
 @itemize
@@ -2619,9 +2560,7 @@ that can be only started once per user.
          (base32 "0hf0mpca248xlqn7xnzkfj8drf19gdyg5syzklvq8pibxiixwxj0"))))
   (build-system gnu-build-system)
   (inputs
-   `(("qtbase" ,qtbase-5)
-     ("qtsvg" ,qtsvg)
-     ("qttools" ,qttools)))
+   (list qtbase-5 qtsvg qttools))
   (arguments
    `(#:phases
      (modify-phases %standard-phases
@@ -2682,16 +2621,20 @@ different kinds of sliders, and much more.")
         (sha256
          (base32
           "1rm9sjkabxna67dl7myx9d9vpdyfxfdhrk9w7b94srkkjbd2d8cw"))
-        (patches (search-patches "qtwebkit-pbutils-include.patch"))))
+        (patches (search-patches "qtwebkit-pbutils-include.patch"
+                                 "qtwebkit-fix-building-with-bison-3.7.patch"
+                                 "qtwebkit-fix-building-with-glib-2.68.patch"
+                                 "qtwebkit-fix-building-with-icu-68.patch"
+                                 "qtwebkit-fix-building-with-python-3.9.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("ruby" ,ruby)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)))
+     (list perl
+           python
+           ruby
+           bison
+           flex
+           gperf
+           pkg-config))
     (inputs
      `(("icu" ,icu4c)
        ("glib" ,glib)
@@ -2765,10 +2708,9 @@ time Web content can be enhanced with native controls.")
          "09fz6v8rp28997f235yaifj8p4vvsyv45knc1iivgdvx7msgcd0m"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (home-page "https://filcuc.github.io/DOtherSide/index.html")
     (synopsis "C language library for creating bindings for the Qt QML language")
     (description
@@ -2803,9 +2745,9 @@ a binding language:
       (build-system cmake-build-system)
       (arguments `(#:tests? #f)) ; There are no tests
       (native-inputs
-       `(("qttools" ,qttools)))
+       (list qttools))
       (inputs
-       `(("qtbase" ,qtbase-5)))
+       (list qtbase-5))
       (home-page "https://gitlab.com/mattia.basaglia/Qt-Color-Widgets")
       (synopsis "Color management widgets")
       (description "QtColorWidgets provides a Qt color dialog that is more
@@ -2834,7 +2776,7 @@ color-related widgets.")
            (sha256
             (base32 "0vp8lpxvd1nlp4liqrlvslpqrgfn0wpiwizzdsjbj22zzb8vxikc"))))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -2879,12 +2821,12 @@ color-related widgets.")
                 "060ljj1nzyp4zfz2vasbv2i7gs5rfkkjwxxbisd0fdw01d5m01mk"))))
     (build-system cmake-build-system)
     (inputs
-     `(("clang-toolchain" ,clang-toolchain)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("python-wrapper" ,python-wrapper)
-       ("qtbase" ,qtbase-5)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list clang-toolchain
+           libxml2
+           libxslt
+           python-wrapper
+           qtbase-5
+           qtxmlpatterns))
     (arguments
      `(#:tests? #f
        ;; FIXME: Building tests fails
@@ -2930,25 +2872,25 @@ color-related widgets.")
     (source (package-source python-shiboken-2))
     (build-system cmake-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("clang-toolchain" ,clang-toolchain)
-       ("qtbase" ,qtbase-5)
-       ("qtdatavis3d" ,qtdatavis3d)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtscript" ,qtscript)
-       ("qtscxml" ,qtscxml)
-       ("qtsensors" ,qtsensors)
-       ("qtspeech" ,qtspeech)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtx11extras" ,qtx11extras)
-       ("qtxmlpatterns" ,qtxmlpatterns)))
+     (list libxml2
+           libxslt
+           clang-toolchain
+           qtbase-5
+           qtdatavis3d
+           qtlocation
+           qtmultimedia
+           qtquickcontrols
+           qtscript
+           qtscxml
+           qtsensors
+           qtspeech
+           qtsvg
+           qtwebchannel
+           qtwebsockets
+           qtx11extras
+           qtxmlpatterns))
     (propagated-inputs
-     `(("python-shiboken-2" ,python-shiboken-2)))
+     (list python-shiboken-2))
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("python" ,python-wrapper)
@@ -2999,9 +2941,7 @@ generate Python bindings for your C or C++ code.")
     (source (package-source python-shiboken-2))
     (build-system cmake-build-system)
     (inputs
-     `(("python-pyside-2" ,python-pyside-2)
-       ("python-shiboken-2" ,python-shiboken-2)
-       ("qtbase" ,qtbase-5)))
+     (list python-pyside-2 python-shiboken-2 qtbase-5))
     (native-inputs
      `(("python" ,python-wrapper)))
     (arguments
@@ -3045,10 +2985,9 @@ generate Python bindings for your C or C++ code.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke (cons "qmake" make-flags)))))))
     (native-inputs
-     `(("qtbase" ,qtbase-5)
-       ("qttools" ,qttools)))
+     (list qtbase-5 qttools))
     (inputs
-     `(("glu" ,glu)))
+     (list glu))
     (home-page "http://libqglviewer.com")
     (synopsis "Qt-based C++ library for the creation of OpenGL 3D viewers")
     (description
@@ -3085,11 +3024,9 @@ being fully customizable and easy to extend.")
     (build-system cmake-build-system)
     (arguments '(#:tests? #f)) ; There are no tests
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("cmake" ,cmake)))
+      (list pkg-config cmake))
     (inputs
-      `(("qtbase" ,qtbase-5)
-        ("coin3D" ,coin3D-4)))
+      (list qtbase-5 coin3D-4))
     (home-page "https://github.com/coin3d/soqt")
     (synopsis "Qt GUI component toolkit library for Coin")
     (description "SoQt is a Qt GUI component toolkit library for Coin.  It is
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index eab0eb09c2..d0a5ca494b 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -263,10 +263,10 @@ DrRacket IDE, are not included.")
      (inherit racket-minimal)
      (name "racket-minimal-bc-3m")
      (inputs
-      `(("libffi" ,libffi) ;; <- only for BC variants
-        ,@(fold alist-delete
-                (package-inputs racket-minimal)
-                '("zlib" "zlib:static" "lz4" "lz4:static"))))
+      (modify-inputs (package-inputs racket-minimal)
+        (delete "zlib" "zlib:static" "lz4" "lz4:static")
+        (prepend libffi ;; <- only for BC variants
+                 )))
      (native-inputs
       `(("libtool" ,libtool)
         ("racket" ,(if (%current-target-system)
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 9394bf974d..6e2cacfb4d 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -26,6 +26,7 @@
 
 (define-module (gnu packages radio)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -143,11 +144,9 @@ useful in modems implemented with @dfn{digital signal processing} (DSP).")
               (base32 "1n6dbg13q8ga5qhg1yiszwly4jj0rxqr6f1xwm9waaly5z493xsd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("libfec" ,libfec)))
+     (list fftwf libfec))
     (arguments
      `(;; For reproducibility, disable use of SSE3, SSE4.1, etc.
        #:configure-flags '("--enable-simdoverride")
@@ -185,9 +184,9 @@ mathematical operations, and much more.")
          "0lmvsnb4xw4hmz6zs0z5ilsah5hjz29g1s0050n59fllskqr3b8k"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON"
                            "-DINSTALL_UDEV_RULES=ON")
@@ -236,9 +235,9 @@ this package.  E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
         (base32 "0n699i5a9fzzhf80fcjlqq6p2a013rzlwmwv4nmwfafy6c8cr924"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      '(#:configure-flags '("-DINSTALL_UDEV_RULES=ON")
        #:tests? #f ; No tests
@@ -283,8 +282,7 @@ with this package.  E.g.: @code{(udev-rules-service 'airspyhf airspyhf)}")
         (base32 "1dy25zxk7wmg7ik82dx7h3bbbynvalbz1dxsl7kgm3374yxhnixv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("swig" ,swig)))
+     (list python swig))
     (native-search-paths
      (list (search-path-specification
             (variable "SOAPY_SDR_PLUGIN_PATH")
@@ -312,8 +310,7 @@ defined radio hardware devices with a common API.")
         (base32 "04krqinglgkjvx7klqik6yn8rb4mlpwzb6zvnmvm7szqci2agggz"))))
     (build-system cmake-build-system)
     (inputs
-     `(("airspyhf" ,airspyhf)
-       ("soapysdr" ,soapysdr)))
+     (list airspyhf soapysdr))
     (arguments
      `(#:tests? #f))  ; No test suite
     (home-page "https://github.com/pothosware/SoapyAirspyHF/wiki")
@@ -341,8 +338,7 @@ SoapySDR library.")
           (base32 "0l5890a240i1fan88jjdxaqswk3as410nlrv12a698fy9npqh4w4"))))
       (build-system cmake-build-system)
       (inputs
-       `(("hackrf" ,hackrf)
-         ("soapysdr" ,soapysdr)))
+       (list hackrf soapysdr))
       (arguments
        `(#:tests? #f))  ; No test suite
       (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
@@ -366,8 +362,7 @@ SoapySDR library.")
         (base32 "1dlnryj6k20pk7w7v4v13y099r7ikhvlzbgzgphmi5cxkdv0shrd"))))
     (build-system cmake-build-system)
     (inputs
-     `(("rtl-sdr" ,rtl-sdr)
-       ("soapysdr" ,soapysdr)))
+     (list rtl-sdr soapysdr))
     (arguments
      `(#:tests? #f))  ; No test suite
     (home-page "https://github.com/pothosware/SoapyRTLSDR/wiki")
@@ -389,9 +384,7 @@ SoapySDR library.")
         (base32 "13xzqnhvnw6yipv4izkq0s9ykyl9pc5ifpr1ii8xfp28ch706qyw"))))
     (build-system python-build-system)
     (inputs
-     `(("python2-libxml2" ,python2-libxml2)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-pyserial" ,python2-pyserial)))
+     (list python2-libxml2 python2-pygtk python2-pyserial))
     (arguments
      `(#:python ,python-2))
     (home-page "https://chirp.danplanet.com")
@@ -420,8 +413,7 @@ memory contents between them.")
           (base32 "0i7vkjjrq392gs9qaibr7j3v4hijqqg8458dn21dwh16ncrvr9bp"))))
       (build-system cmake-build-system)
       (inputs
-       `(("libpng" ,libpng)
-         ("libsndfile" ,libsndfile)))
+       (list libpng libsndfile))
       (arguments
        `(#:tests? #f))  ; no tests
       (home-page "https://github.com/Xerbo/aptdec")
@@ -464,12 +456,9 @@ and a dedicated receiver.")
                 "esac\nAC_SUBST([ICONV], [\"-liconv\"])"))
              #t)))))
     (inputs
-     `(("libiconv" ,libiconv)
-       ("libsndfile" ,libsndfile)
-       ("liquid-dsp" ,liquid-dsp)))
+     (list libiconv libsndfile liquid-dsp))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://github.com/windytan/redsea")
     (synopsis "Lightweight RDS to JSON decoder")
     (description "redsea is a lightweight command-line @dfn{FM Radio Data
@@ -505,10 +494,10 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("python-pyzmq" ,python-pyzmq)
        ("python-scipy" ,python-scipy)
        ("python-sphinx" ,python-sphinx)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-latex-amsmath
-                                        ;; TODO: Add newunicodechar.
-                                        texlive-latex-graphics)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                             texlive-latex-amsmath
+                                             ;; TODO: Add newunicodechar.
+                                             texlive-latex-graphics)))
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -583,8 +572,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
          (add-before 'check 'set-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" "/tmp")
-             (system (string-append (assoc-ref inputs "xorg-server")
-                                    "/bin/Xvfb :1 &"))
+             (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              #t))
          (replace 'check
@@ -598,7 +586,10 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
                            '(;; https://github.com/gnuradio/gnuradio/issues/3871
                              "qa_header_payload_demux"
                              ;; https://github.com/gnuradio/gnuradio/issues/4348
-                             "qa_packet_headerparser_b")
+                             "qa_packet_headerparser_b"
+                             ;; qa_rotator_cc sometimes fails, it looks like
+                             ;; a floating point number precision issue.
+                             "qa_rotator_cc")
                            "|"))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
@@ -625,7 +616,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
             (variable "GRC_BLOCKS_PATH")
             (files '("share/gnuradio/grc/blocks")))
            (search-path-specification
-            (variable "PYTHONPATH")
+            (variable "GUIX_PYTHONPATH")
             (files (list (string-append "lib/python"
                                         (version-major+minor
                                          (package-version python))
@@ -657,26 +648,22 @@ environment.")
           (base32 "1pk5gnyznfyy510lbqzg9ijcb1fnhmn547n24aiqyrxd6i6vv1ki"))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("doxygen" ,doxygen)
-         ("pkg-config" ,pkg-config)
-         ("pybind11" ,pybind11)
-         ("python-mako" ,python-mako)
-         ("python-six" ,python-six)))
+       (list doxygen pkg-config pybind11 python-mako python-six))
       (inputs
-       `(("airspyhf" ,airspyhf)
-         ("boost" ,boost)
-         ("fftwf" ,fftwf)
-         ("gmp" ,gmp)
-         ("gnuradio" ,gnuradio)
-         ("hackrf" ,hackrf)
-         ("libsndfile" ,libsndfile)
-         ("log4cpp" ,log4cpp)
-         ("python" ,python)
-         ("python-numpy" ,python-numpy)
-         ("python-pyqt" ,python-pyqt)
-         ("rtl-sdr" ,rtl-sdr)
-         ("soapysdr" ,soapysdr)
-         ("volk" ,volk)))
+       (list airspyhf
+             boost
+             fftwf
+             gmp
+             gnuradio
+             hackrf
+             libsndfile
+             log4cpp
+             python
+             python-numpy
+             python-pyqt
+             rtl-sdr
+             soapysdr
+             volk))
       (arguments
        `(#:modules ((guix build cmake-build-system)
                     ((guix build python-build-system) #:prefix python:)
@@ -715,12 +702,12 @@ to access different radio hardware.")
        ("doxygen" ,doxygen)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         ;; TODO: Add newunicodechar.
                                         texlive-latex-graphics)))))
     (inputs
-     `(("fftwf" ,fftwf)))
+     (list fftwf))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -728,9 +715,7 @@ to access different radio hardware.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "git-version-gen"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash")
-                               "/bin/bash")))
-             #t)))))
+                (search-input-file inputs "/bin/bash"))))))))
     (synopsis "DSP primitives for SDR")
     (description
      "This a C-language library for common DSP (Digital Signal Processing)
@@ -756,20 +741,20 @@ primitives for SDR (Software Defined Radio).")
           (base32 "12p193ngcs65nd3lynry119nhv40mikamqkw37wdln7lawx3nw7p"))))
       (build-system cmake-build-system)
       (native-inputs
-       `(("doxygen" ,doxygen)
-         ("pkg-config" ,pkg-config)
-         ("pybind11" ,pybind11)
-         ("python" ,python)
-         ("python-numpy" ,python-numpy)
-         ("python-six" ,python-six)))
+       (list doxygen
+             pkg-config
+             pybind11
+             python
+             python-numpy
+             python-six))
       (inputs
-       `(("boost" ,boost)
-         ("fftwf" ,fftwf)
-         ("gmp" ,gmp)
-         ("gnuradio" ,gnuradio)
-         ("libosmo-dsp" ,libosmo-dsp)
-         ("log4cpp" ,log4cpp)
-         ("volk" ,volk)))
+       (list boost
+             fftwf
+             gmp
+             gnuradio
+             libosmo-dsp
+             log4cpp
+             volk))
       (synopsis "GNU Radio block to correct IQ imbalance")
       (description
      "This is a GNU Radio block to correct IQ imbalance in quadrature
@@ -798,21 +783,19 @@ to the fix block above.
         (base32 "01p9cnwjxas3pkqr9m5fnrgm45cji0sfdqqa51hzy7izx9vgzaf8"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("pybind11" ,pybind11)
-       ("python-six" ,python-six)))
+     (list pkg-config pybind11 python-six))
     (inputs
-     `(("boost" ,boost)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("log4cpp" ,log4cpp)
-       ("python" ,python)
-       ("python-construct" ,python-construct)
-       ("python-numpy" ,python-numpy)
-       ("python-pyaml" ,python-pyaml)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("volk" ,volk)))
+     (list boost
+           gmp
+           gnuradio
+           log4cpp
+           python
+           python-construct
+           python-numpy
+           python-pyaml
+           python-pyzmq
+           python-requests
+           volk))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   ((guix build python-build-system) #:prefix python:)
@@ -851,23 +834,23 @@ satellites.")
         (base32 "0gz875fbg0ffdi7icm0hqg0dz33hdfszi70b7cax1fcgq5fr1j8c"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
-       ("fftwf" ,fftwf)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("gr-iqbal" ,gr-iqbal)
-       ("gr-osmosdr" ,gr-osmosdr)
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("log4cpp" ,log4cpp)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("volk" ,volk)))
+     (list alsa-lib
+           boost
+           fftwf
+           gmp
+           gnuradio
+           gr-iqbal
+           gr-osmosdr
+           jack-1
+           libsndfile
+           log4cpp
+           portaudio
+           pulseaudio
+           qtbase-5
+           qtsvg
+           volk))
     (arguments
      `(#:tests? #f))                    ; no tests
     (synopsis "Software defined radio receiver")
@@ -891,24 +874,21 @@ using GNU Radio and the Qt GUI toolkit.")
         (base32 "0y43241s3p8qzn7x6x28v5v2bf934riznj14bb7m6k6vgd849qzl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake gettext-minimal pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fltk" ,fltk)
-       ("eudev" ,eudev)
-       ("hamlib" ,hamlib)
-       ("libpng" ,libpng)
-       ("libsamplerate" ,libsamplerate)
-       ("libusb" ,libusb)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)
-       ("portaudio" ,portaudio)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           fltk
+           eudev
+           hamlib
+           libpng
+           libsamplerate
+           libusb
+           libx11
+           libxext
+           libxfixes
+           libxft
+           portaudio
+           pulseaudio))
     (synopsis "Software modem for amateur radio use")
     (description
      "Fldigi is a software modem for amateur radio use.  It is a sound card
@@ -933,15 +913,9 @@ hardware.")
         (base32 "0vxn1wy5b2zfq20k93rfgq34m1nd3mxd74h8l98f90d85fhcqggy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "Radio transceiver control program")
     (description
      "Flrig is a transceiver control program for amateur radio use.
@@ -965,15 +939,9 @@ or USB connection.")
         (base32 "0rygd5w04nspxdj8qj81gpb3mgijvlmii74s1f4mihqs5kb8nwh6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "Tool for AMP file transfer")
     (description
      "FLAMP is a program for transferring files by radio waves using AMP
@@ -996,15 +964,9 @@ or USB connection.")
         (base32 "0xkhr82smfr7wpb9xl05wf7bz3vi2mr4xkcr2s8v6mblhgsdhqwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fltk" ,fltk)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxft" ,libxft)))
+     (list fltk libx11 libxext libxfixes libxft))
     (synopsis "File encapsulation program")
     (description
      "Flwrap is a software utility for amateur radio use.  Its purpose is to
@@ -1051,11 +1013,9 @@ for correctness.")
              #t)))
        #:tests? #f)) ; no test suite
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("libusb" ,libusb)))
+     (list fftw fftwf libusb))
     (home-page "https://greatscottgadgets.com/hackrf/")
     (synopsis "User-space library and utilities for HackRF SDR")
     (description
@@ -1080,17 +1040,14 @@ you must extend 'udev-service-type' with this package.  E.g.:
         (base32 "0c578m04zs8dllbd4cv6nxb44y0dn8kiapzkih84ycfjzmnkhdrl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("lua" ,lua)
-       ("pkg-config" ,pkg-config)
-       ("python-wrapper" ,python-wrapper)
-       ("swig" ,swig)
-       ("tcl" ,tcl)))
+     (list doxygen
+           lua
+           pkg-config
+           python-wrapper
+           swig
+           tcl))
     (inputs
-     `(("gd" ,gd)
-       ("libusb" ,libusb)
-       ("libxml2" ,libxml2)
-       ("readline" ,readline)))
+     (list gd libusb libxml2 readline))
     (arguments
      `(#:configure-flags '("--disable-static"
                            "--with-lua-binding"
@@ -1154,17 +1111,14 @@ users.")
      '(#:configure-flags
        (list "--enable-fldigi-xmlrpc")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake perl pkg-config))
     (inputs
-     `(("cmocka" ,cmocka)
-       ("glib" ,glib)
-       ("hamlib" ,hamlib)
-       ("libusb" ,libusb) ;`Requires.private: libusb-1.0` in hamlib pkg-config
-       ("ncurses" ,ncurses)
-       ("xmlrpc-c" ,xmlrpc-c)))
+     (list cmocka
+           glib
+           hamlib
+           libusb ;`Requires.private: libusb-1.0` in hamlib pkg-config
+           ncurses
+           xmlrpc-c))
     (home-page "https://tlf.github.io/")
     (synopsis "Amateur radio contest logging for the terminal")
     (description "TLF is a @acronym{Text User Interface, TUI} amateur radio
@@ -1208,11 +1162,7 @@ instances over the network, and general QSO and DXpedition logging.")
         (base32 "0mdr4l7zii08615yn7z91spnvnqm5i9390bra9lz3aqyxrsiim91"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("ruby-asciidoctor" ,ruby-asciidoctor)))
+     (list asciidoc gfortran pkg-config qttools ruby-asciidoctor))
     (inputs
      `(("boost" ,boost)
        ("fftw" ,fftw)
@@ -1267,11 +1217,7 @@ weak-signal conditions.")
            #t))))
     (build-system qt-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("gfortran" ,gfortran)
-       ("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("ruby-asciidoctor" ,ruby-asciidoctor)))
+     (list asciidoc gfortran pkg-config qttools ruby-asciidoctor))
     (inputs
      `(("boost" ,boost)
        ("fftw" ,fftw)
@@ -1336,9 +1282,9 @@ operators.")
         (base32 "1myvlkfybb2ha8l0h96ca3iz206zzy9z5iizm0sbab2zzp78n1r9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1387,12 +1333,9 @@ gain and standing wave ratio.")
         (base32 "1fckfcgypmplzl1lidd04jxiabczlfx9mv21d6rbsfknghsjpn03"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("hackrf" ,hackrf)
-       ("libusb" ,libusb)
-       ("ncurses" ,ncurses)
-       ("rtl-sdr" ,rtl-sdr)))
+     (list hackrf libusb ncurses rtl-sdr))
     (arguments
      `(#:test-target "test"
        #:make-flags
@@ -1430,12 +1373,9 @@ their position, altitude, speed, etc.")
         (base32 "1f60nvahsplv1yszacc49mlbcnacgs1nwhdf8y9srmzg08xrfnfk"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libusb" ,libusb)
-       ("openssl" ,openssl)
-       ("rtl-sdr" ,rtl-sdr)
-       ("soapysdr" ,soapysdr)))
+     (list libusb openssl rtl-sdr soapysdr))
     (synopsis "Decoder for radio transmissions in ISM bands")
     (description
      "This is a generic data receiver, mainly for decoding radio transmissions
@@ -1458,8 +1398,7 @@ from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
         (base32 "01716cfhxfzsab9zjply9giaa4nn4b7rm3p3vizrwi7n253yiwm2"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("pulseaudio" ,pulseaudio)))
+     (list libx11 pulseaudio))
     (arguments
      '(#:tests? #f))                    ; no test suite
     (home-page "https://github.com/EliasOenal/multimon-ng")
@@ -1496,12 +1435,9 @@ modes:
         (base32 "1h5k402wjlj7xjniggwf0x7a5srlgglc2x4hy6lz6c30zwa7z8fm"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyserial" ,python-pyserial)
-       ("python-scipy" ,python-scipy)))
+     (list python-numpy python-pyqt python-pyserial python-scipy))
     (arguments
      '(#:tests? #f))
     (home-page "https://github.com/NanoVNA-Saver/nanovna-saver")
@@ -1524,16 +1460,16 @@ NanoVNA vector network analyzers.")
         (base32 "0f9hx6sy418cb23fadll298pqbc5l2lxsdivi4vgqbkvx7sw58zi"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("hamlib" ,hamlib)
-       ("openjpeg" ,openjpeg)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("v4l-utils" ,v4l-utils)))
+     (list alsa-lib
+           fftw
+           fftwf
+           hamlib
+           openjpeg
+           pulseaudio
+           qtbase-5
+           v4l-utils))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:phases
@@ -1571,8 +1507,7 @@ NanoVNA vector network analyzers.")
         (base32 "0xmz64m02knbrpasfij4rrq53ksxna5idxwgabcw4n2b1ig7pyx5"))))
     (build-system cmake-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("hamlib" ,hamlib)))
+     (list alsa-lib hamlib))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1608,7 +1543,7 @@ It can perform as:
         (base32 "14lzgldqzbbzydsy1cai3wln3hpyj1yhj8ji3wygyzr616fq9f7i"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ao" ,ao)))
+     (list ao))
     (home-page "https://www.nongnu.org/aldo/")
     (synopsis "Morse code tutor")
     (description
@@ -1636,12 +1571,9 @@ methods:
         (base32 "15wriwv91583kmmyijbzam3dpclzmg4qjyfzjv5f75x9b0gqabxm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ncurses" ,ncurses)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)))
+     (list alsa-lib ncurses pulseaudio qtbase-5))
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
@@ -1656,8 +1588,7 @@ methods:
                 "-lncurses"))
              (substitute* "src/libcw/libcw_pa.c"
                (("libpulse-simple.so" all)
-                (string-append (assoc-ref inputs "pulseaudio")
-                               "/lib/" all))))))))
+                (search-input-file inputs "/lib/libpulse-simple.so"))))))))
     (home-page "http://unixcw.sourceforge.net/")
     (synopsis "Morse code library and programs")
     (description
@@ -1692,7 +1623,8 @@ intended for people who want to learn receiving and sending morse code.")
        ("osm-gps-map" ,osm-gps-map)
        ("pulseaudio" ,pulseaudio)))
     (arguments
-     `(#:tests? #f ; No test suite
+     `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon")
+       #:tests? #f ; No test suite
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths
@@ -1725,15 +1657,14 @@ Identification System) messages sent by ships and coast stations.")
      '(#:import-path "github.com/nonoo/kappanhang"
        #:install-source? #f))
     (inputs
-     `(("go-github-com-akosmarton-papipes",go-github-com-akosmarton-papipes)
-       ("go-github-com-fatih-color" ,go-github-com-fatih-color)
-       ("go-github-com-google-goterm" ,go-github-com-google-goterm)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-mesilliac-pulse-simple"
-        ,go-github-com-mesilliac-pulse-simple)
-       ("go-github-com-pborman-getopt" ,go-github-com-pborman-getopt)
-       ("go-go-uber-org-multierr" ,go-go-uber-org-multierr)
-       ("go-go-uber-org-zap" ,go-go-uber-org-zap)))
+     (list go-github-com-akosmarton-papipes
+           go-github-com-fatih-color
+           go-github-com-google-goterm
+           go-github-com-mattn-go-isatty
+           go-github-com-mesilliac-pulse-simple
+           go-github-com-pborman-getopt
+           go-go-uber-org-multierr
+           go-go-uber-org-zap))
     (home-page "https://github.com/nonoo/kappanhang")
     (synopsis "Client for Icom RS-BA1 server")
     (description
@@ -1762,20 +1693,20 @@ Compatible hardware/software:
         (base32 "01dv6gvljz64zrjbr08mybr9aicvpq2c6qskww46lngdjyhk8xs1"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("faad2" ,faad2)
-       ("fftw" ,fftw)
-       ("libsndfile" ,libsndfile)
-       ("libpcap" ,libpcap)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qwt" ,qwt)
-       ("speexdsp" ,speexdsp)
-       ("zlib" ,zlib)))
+     (list faad2
+           fftw
+           libsndfile
+           libpcap
+           opus
+           pulseaudio
+           qtbase-5
+           qtsvg
+           qtwebkit
+           qwt
+           speexdsp
+           zlib))
     (arguments
      `(#:tests? #f
        #:phases
@@ -1790,24 +1721,18 @@ Compatible hardware/software:
                 (string-append "documentation.path = "
                                (assoc-ref outputs "out")
                                "/share/man/man1"))
-               (("/usr/include/pulse/")
-                (string-append (assoc-ref inputs "pulseaudio")
-                               "/include/pulse/"))
+               (("/usr/include/pulse")
+                (search-input-directory inputs "/include/pulse"))
                (("/usr/include/sndfile\\.h")
-                (string-append (assoc-ref inputs "libsndfile")
-                               "/include/sndfile.h"))
-               (("/usr/include/opus/")
-                (string-append (assoc-ref inputs "opus")
-                               "/include/opus/"))
-               (("/usr/include/speex/")
-                (string-append (assoc-ref inputs "speexdsp")
-                               "/include/speex/"))
-               (("/usr/include/qwt/")
-                (string-append (assoc-ref inputs "qwt")
-                               "/include/qwt/"))
+                (search-input-file inputs "/include/sndfile.h"))
+               (("/usr/include/opus")
+                (search-input-directory inputs "/include/opus"))
+               (("/usr/include/speex")
+                (search-input-directory inputs "/include/speex"))
+               (("/usr/include/qwt")
+                (search-input-directory inputs "/include/qwt"))
                (("\\$\\$OUT_PWD/include/neaacdec\\.h")
-                (string-append (assoc-ref inputs "faad2")
-                               "/include/neaacdec.h")))))
+                (search-input-file inputs "/include/neaacdec.h")))))
          (replace 'configure
            (lambda _
              (invoke "qmake"))))))
@@ -1833,22 +1758,22 @@ receiver.")
         (base32 "1xl1lanw0xgmgks67dbfb2h52jxnrd1i2zik56v0q8dwsr7f0daw"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("faad2" ,faad2)
-       ("fftwf" ,fftwf)
-       ("lame" ,lame)
-       ("libusb" ,libusb)
-       ("mpg123" ,mpg123)
-       ("rtl-sdr" ,rtl-sdr)
-       ("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("soapysdr" ,soapysdr)))
+     (list alsa-lib
+           faad2
+           fftwf
+           lame
+           libusb
+           mpg123
+           rtl-sdr
+           qtbase-5
+           qtcharts
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols2
+           soapysdr))
     (arguments
      `(#:configure-flags '("-DRTLSDR=ON"
                            "-DSOAPYSDR=ON")
@@ -1878,7 +1803,7 @@ defined radio with support for rtl-sdr.")
           (base32 "0ic35130lf66lk3wawgc5bcg711l7chv9al1hzdc1xrmq9qf9hri"))))
       (build-system gnu-build-system)
       (inputs
-       `(("fftwf" ,fftwf)))
+       (list fftwf))
       (arguments
        `(#:make-flags
          (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
@@ -1986,9 +1911,7 @@ Codec.")
           (base32 "0j339kx3n2plgfw7ikpp7b81h5n68wmsgflwljbh2sy8j62faik9"))))
       (build-system cmake-build-system)
       (inputs
-       `(("faad2" ,faad2)
-         ("fftwf" ,fftwf)
-         ("zlib" ,zlib)))
+       (list faad2 fftwf zlib))
       (arguments
        `(#:tests? #f  ; No test suite.
          #:phases
@@ -2017,8 +1940,7 @@ Audio Broadcasting}.")
         (base32 "0jgzpv4d6ckd0sdq6438rjh3m6knj6gx63627fajch74hxrvclzj"))))
     (build-system cmake-build-system)
     (inputs
-     `(("mbelib" ,mbelib)
-       ("serialdv" ,serialdv)))
+     (list mbelib serialdv))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:configure-flags
@@ -2045,7 +1967,7 @@ voice formats.")
 (define-public sdrangel
   (package
     (name "sdrangel")
-    (version "6.17.1")
+    (version "6.17.3")
     (source
      (origin
        (method git-fetch)
@@ -2054,61 +1976,68 @@ voice formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1yraif6dzs5sdskxnj937x613xz3zxnqim5mnk18vj2m0apcaqam"))))
+        (base32 "16la2g1xqahgnni1qhpnfbqlcqsiihxnm2d6nv2241khb3lhi0i9"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen graphviz pkg-config))
     (inputs
-     `(("airspyhf" ,airspyhf)
-       ("alsa-lib" ,alsa-lib)
-       ("aptdec" ,aptdec)
-       ("boost" ,boost)
-       ("cm256cc" ,cm256cc)
-       ("codec2" ,codec2)
-       ("dsdcc" ,dsdcc)
-       ("faad2" ,faad2)
-       ("ffmpeg" ,ffmpeg)
-       ("fftwf" ,fftwf)
-       ("hackrf" ,hackrf)
-       ("libdab" ,libdab)
-       ("libusb" ,libusb)
-       ("mbelib" ,mbelib)
-       ("opencv" ,opencv)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtcharts" ,qtcharts)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtserialport" ,qtserialport)
-       ("qtspeech" ,qtspeech)
-       ("qtwebsockets" ,qtwebsockets)
-       ("rtl-sdr" ,rtl-sdr)
-       ("serialdv" ,serialdv)
-       ("soapysdr" ,soapysdr)
-       ("sgp4" ,sgp4)
-       ("zlib" ,zlib)))
+     (list airspyhf
+           alsa-lib
+           aptdec
+           boost
+           cm256cc
+           codec2
+           dsdcc
+           faad2
+           ffmpeg
+           fftwf
+           hackrf
+           libdab
+           libusb
+           mbelib
+           opencv
+           opus
+           pulseaudio
+           qtbase-5
+           qtcharts
+           qtdeclarative
+           qtlocation
+           qtmultimedia
+           qtquickcontrols2
+           qtserialport
+           qtspeech
+           qtwebsockets
+           rtl-sdr
+           serialdv
+           soapysdr
+           sgp4
+           zlib))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:configure-flags
-       (list (string-append "-DAPT_DIR="
-                            (assoc-ref %build-inputs "aptdec"))
-             (string-append "-DDAB_DIR="
-                            (assoc-ref %build-inputs "libdab"))
-             (string-append "-DDSDCC_DIR="
-                            (assoc-ref %build-inputs "dsdcc"))
-             (string-append "-DMBE_DIR="
-                            (assoc-ref %build-inputs "mbelib"))
-             (string-append "-DSERIALDV_DIR="
-                            (assoc-ref %build-inputs "serialdv"))
-             (string-append "-DSGP4_DIR="
-                            (assoc-ref %build-inputs "sgp4"))
-             (string-append "-DSOAPYSDR_DIR="
-                            (assoc-ref %build-inputs "soapysdr")))))
+       ,#~(list (string-append "-DAPT_DIR="
+                               #$(this-package-input "aptdec"))
+                (string-append "-DDAB_DIR="
+                               #$(this-package-input "libdab"))
+                (string-append "-DDSDCC_DIR="
+                               #$(this-package-input "dsdcc"))
+                (string-append "-DMBE_DIR="
+                               #$(this-package-input "mbelib"))
+                (string-append "-DSERIALDV_DIR="
+                               #$(this-package-input "serialdv"))
+                (string-append "-DSGP4_DIR="
+                               #$(this-package-input "sgp4"))
+                (string-append "-DSOAPYSDR_DIR="
+                               #$(this-package-input "soapysdr")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-boost-compatibility
+           (lambda _
+             (substitute*
+                 '("plugins/channelrx/noisefigure/noisefigure.cpp"
+                   "plugins/channelrx/noisefigure/noisefigureenrdialog.cpp")
+               (("boost::math::barycentric_rational<double>")
+                "boost::math::interpolators::barycentric_rational<double>")))))))
     (home-page "https://github.com/f4exb/sdrangel/wiki")
     (synopsis "Software defined radio")
     (description
@@ -2131,8 +2060,8 @@ various hardware.")
         (base32 "1xwbz6yyca6wmzad5ykxw6i0r8jzc7i3jbzq7mhp8caiymd6knw3"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("gcc" ,gcc-10) ; A GCC more recent than version 7 is required.
-       ("pkg-config" ,pkg-config)))
+     (list gcc-10 ; A GCC more recent than version 7 is required.
+           pkg-config))
     (inputs
      `(("airspyhf" ,airspyhf)
        ("alsa-lib" ,alsa-lib)
@@ -2181,11 +2110,9 @@ various hardware.")
         (base32 "1x6nyn429pk0f7lqzskrgsbq09mq5787xd4piic95add6n1cc355"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("fftwf" ,fftwf)
-       ("liquid-dsp" ,liquid-dsp)
-       ("qtbase" ,qtbase-5)))
+     (list fftwf liquid-dsp qtbase-5))
     (home-page "https://github.com/miek/inspectrum")
     (synopsis "Radio signal analyser")
     (description
@@ -2208,10 +2135,7 @@ software-defined radio receivers.")
         (base32 "16a9afm0nkqx4pzwfxisspybimhqdyr3yjpr7ac7wgpp3520ikzi"))))
     (build-system qt-build-system)
     (inputs
-     `(("qcustomplot" ,qcustomplot)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtserialport" ,qtserialport)))
+     (list qcustomplot qtbase-5 qtmultimedia qtserialport))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:phases
@@ -2272,12 +2196,9 @@ spectrum waterfall.  It supports at least the following models:
         (base32 "13ipyh39l7p420j1j9kvwyskv2nqnimls1a3z1klsa1zivds9k7q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("fftwf" ,fftwf)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib fftwf libsndfile pulseaudio))
     (home-page "http://www.whence.com/minimodem/")
     (synopsis "Software audio FSK modem")
     (description
@@ -2307,12 +2228,12 @@ Caller-ID.")
           (base32 "0dbc6n4pxsa73wzxny773khc73r1dn3ma5hi7xv76vcykjvzkdi3"))))
       (build-system python-build-system)
       (inputs
-       `(("python-future" ,python-future)
-         ("python-ipython" ,python-ipython)
-         ("python-numpy" ,python-numpy)
-         ("python-pyserial" ,python-pyserial)
-         ("python-pyside-2" ,python-pyside-2)
-         ("python-pyusb" ,python-pyusb)))
+       (list python-future
+             python-ipython
+             python-numpy
+             python-pyserial
+             python-pyside-2
+             python-pyusb))
       (arguments
        `(#:tests? #f  ; Tests want to use a serial port
          #:phases
@@ -2362,7 +2283,7 @@ this package.  E.g.: @code{(udev-rules-service 'rfcat rfcat)}")
           (base32 "0qr8q00cv6q0ikjrph0qh07mlbvgk4yimccpkn3ir8ib5ma0r9sr"))))
       (build-system cmake-build-system)
       (inputs
-       `(("soapysdr" ,soapysdr)))
+       (list soapysdr))
       (arguments
        `(#:tests? #f)) ; No test suite.
       (home-page "https://github.com/rxseger/rx_tools")
@@ -2397,22 +2318,22 @@ of devices than RTL-SDR.")
        ("python" ,python)
        ("python-mako" ,python-mako)))
     (inputs
-     `(("armadillo" ,armadillo)
-       ("boost" ,boost)
-       ("gflags" ,gflags)
-       ("glog" ,glog)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("gr-osmosdr" ,gr-osmosdr)
-       ("lapack" ,lapack)
-       ("libpcap" ,libpcap)
-       ("log4cpp" ,log4cpp)
-       ("matio" ,matio)
-       ("openblas" ,openblas)
-       ("openssl" ,openssl)
-       ("protobuf" ,protobuf)
-       ("pugixml" ,pugixml)
-       ("volk" ,volk)))
+     (list armadillo
+           boost
+           gflags
+           glog
+           gmp
+           gnuradio
+           gr-osmosdr
+           lapack
+           libpcap
+           log4cpp
+           matio
+           openblas
+           openssl
+           protobuf
+           pugixml
+           volk))
     (arguments
      `(#:configure-flags
        (list "-DENABLE_GENERIC_ARCH=ON"
diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm
index 76ed4df6e4..45fa5d8606 100644
--- a/gnu/packages/rails.scm
+++ b/gnu/packages/rails.scm
@@ -56,8 +56,7 @@
                (("require \\\"bump/tasks\\\"") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-activesupport" ,ruby-activesupport)))
+     (list bundler ruby-activesupport))
     (synopsis "Ruby on Rails application preloader")
     (description
      "Spring is a Ruby on Rails application preloader.  It speeds up
@@ -82,11 +81,8 @@ migration.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-railties" ,ruby-railties)
-       ("ruby-sass" ,ruby-sass)
-       ("ruby-sprockets" ,ruby-sprockets)
-       ("ruby-sprockets-rails" ,ruby-sprockets-rails)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-railties ruby-sass ruby-sprockets ruby-sprockets-rails
+           ruby-tilt))
     (synopsis "Sass adapter for the Rails asset pipeline")
     (description
      "This library integrates the SASS stylesheet language into Ruby on
@@ -160,15 +156,15 @@ API.")
                (("gemspec") "gemspec\ngem 'tzinfo-data'\ngem 'sass'"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rails" ,ruby-rails)
-       ("ruby-rspec-rails" ,ruby-rspec-rails)
-       ;; This is needed for a test, but I'm unsure why
-       ("ruby-sass" ,ruby-sass)
-       ;; This is used as the ruby-execjs runtime
-       ("node" ,node)))
+     (list bundler
+           ruby-rails
+           ruby-rspec-rails
+           ;; This is needed for a test, but I'm unsure why
+           ruby-sass
+           ;; This is used as the ruby-execjs runtime
+           node))
     (propagated-inputs
-     `(("ruby-execjs" ,ruby-execjs)))
+     (list ruby-execjs))
     (synopsis "Parse CSS and add vendor prefixes to CSS rules")
     (description
      "This gem provides Ruby and Ruby on Rails integration with Autoprefixer,
@@ -193,7 +189,7 @@ Can I Use website.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)))
+    (list ruby-activesupport))
    (synopsis "Toolkit for building modeling frameworks like Active Record")
    (description
     "This package provides a toolkit for building modeling frameworks like
@@ -218,9 +214,7 @@ serialization, internationalization, and testing.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activemodel" ,ruby-activemodel)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-arel" ,ruby-arel)))
+    (list ruby-activemodel ruby-activesupport ruby-arel))
    (synopsis "Ruby library to connect to relational databases")
    (description
     "Active Record connects classes to relational database table to establish
@@ -243,13 +237,13 @@ an almost zero-configuration persistence layer for applications.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-railties" ,ruby-railties)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-rspec-support" ,ruby-rspec-support)))
+     (list ruby-actionpack
+           ruby-activesupport
+           ruby-railties
+           ruby-rspec-core
+           ruby-rspec-expectations
+           ruby-rspec-mocks
+           ruby-rspec-support))
     (synopsis "Use RSpec to test Ruby on Rails applications")
     (description
      "This package provides support for using RSpec to test Ruby on Rails
@@ -273,7 +267,7 @@ applications, in pace of the default Minitest testing library.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-loofah" ,ruby-loofah)))
+     (list ruby-loofah))
     (synopsis "HTML sanitization for Rails applications")
     (description
      "This gem is used to handle HTML sanitization in Rails applications.  If
@@ -298,10 +292,9 @@ directly.")
         "17vdh273cmmfpzy5m546dd13zqmimv54jjx0f7sl0zi5lwz0gnck"))))
    (build-system ruby-build-system)
    (native-inputs
-    `(("bundler" ,bundler)))
+    (list bundler))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-nokogiri" ,ruby-nokogiri)))
+    (list ruby-activesupport ruby-nokogiri))
    (synopsis "Compare HTML DOMs and assert certain elements exists")
    (description
     "This gem can compare HTML and assert certain elements exists.  This is
@@ -325,11 +318,8 @@ useful when writing tests.")
     '(;; No included tests
       #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activestorage" ,ruby-activestorage)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-actionpack ruby-activerecord ruby-activestorage
+           ruby-activesupport ruby-nokogiri))
     (synopsis "Edit and display rich text in Rails applications")
     (description
      "ActionText edits and displays rich text in Rails applications.")
@@ -352,11 +342,8 @@ useful when writing tests.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-builder" ,ruby-builder)
-      ("ruby-erubi" ,ruby-erubi)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)
-      ("ruby-rails-html-sanitizer" ,ruby-rails-html-sanitizer)))
+    (list ruby-activesupport ruby-builder ruby-erubi
+          ruby-rails-dom-testing ruby-rails-html-sanitizer))
    (synopsis "Conventions and helpers for building web pages")
    (description
     "ActionView provides conventions and helpers for building web pages in
@@ -380,12 +367,12 @@ Ruby.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionview" ,ruby-actionview)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-rack" ,ruby-rack)
-      ("ruby-rack-test" ,ruby-rack-test)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)
-      ("ruby-rails-html-sanitizer" ,ruby-rails-html-sanitizer)))
+    (list ruby-actionview
+          ruby-activesupport
+          ruby-rack
+          ruby-rack-test
+          ruby-rails-dom-testing
+          ruby-rails-html-sanitizer))
    (synopsis "Conventions for building and testing MVC web applications")
    (description
     "ActionPack provides conventions for building and testing MVC web
@@ -409,10 +396,8 @@ applications.  These work with any Rack-compatible server.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-nio4r" ,ruby-nio4r)
-      ("ruby-websocket-driver" ,ruby-websocket-driver)))
+    (list ruby-actionpack ruby-activesupport ruby-nio4r
+          ruby-websocket-driver))
    (synopsis "Integrate integrates WebSockets with Rails applications")
    (description
     "Action Cable integrates WebSockets with Rails applications.  Through
@@ -436,8 +421,7 @@ WebSockets it allows for real-time features in web applications.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-globalid" ,ruby-globalid)))
+    (list ruby-activesupport ruby-globalid))
    (synopsis "Declare job classes for multiple backends")
    (description
     "ActiveJob allows declaring job classes in a common way across Rails
@@ -461,12 +445,12 @@ applications.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activejob" ,ruby-activejob)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-marcel" ,ruby-marcel)
-       ("ruby-mimemagic" ,ruby-mimemagic)))
+     (list ruby-actionpack
+           ruby-activejob
+           ruby-activerecord
+           ruby-activesupport
+           ruby-marcel
+           ruby-mimemagic))
     (synopsis "Integrate file storage services in to Rails applications")
     (description
      "ActiveStorage integrates file storage services with Rails applications,
@@ -490,12 +474,12 @@ allowing files to be attached to ActiveRecord models.")
     '(;; No included tests
       #:tests? #f))
     (propagated-inputs
-     `(("ruby-actionpack" ,ruby-actionpack)
-       ("ruby-activejob" ,ruby-activejob)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activestorage" ,ruby-activestorage)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-mail" ,ruby-mail)))
+     (list ruby-actionpack
+           ruby-activejob
+           ruby-activerecord
+           ruby-activestorage
+           ruby-activesupport
+           ruby-mail))
     (synopsis "Receive and process incoming emails in Rails applications")
     (description
      "ActionMailbox receives and processes incoming emails in Rails applications.")
@@ -518,12 +502,12 @@ allowing files to be attached to ActiveRecord models.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-actionview" ,ruby-actionview)
-      ("ruby-activejob" ,ruby-activejob)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-mail" ,ruby-mail)
-      ("ruby-rails-dom-testing" ,ruby-rails-dom-testing)))
+    (list ruby-actionpack
+          ruby-actionview
+          ruby-activejob
+          ruby-activesupport
+          ruby-mail
+          ruby-rails-dom-testing))
    (synopsis "Work with emails using the controller/view pattern")
    (description
     "Compose, deliver, receive, and test emails using the controller/view
@@ -547,11 +531,8 @@ pattern.  Including support for multipart email and attachments.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-method-source" ,ruby-method-source)
-      ("ruby-rake" ,ruby-rake)
-      ("ruby-thor" ,ruby-thor)))
+    (list ruby-actionpack ruby-activesupport ruby-method-source ruby-rake
+          ruby-thor))
    (synopsis "Rails internals, including application bootup and generators")
    (description
     "@code{railties} provides the core Rails internals including handling
@@ -575,9 +556,7 @@ application bootup, plugins, generators, and Rake tasks.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("ruby-sprockets" ,ruby-sprockets)))
+    (list ruby-actionpack ruby-activesupport ruby-sprockets))
    (synopsis "Sprockets Rails integration")
    (description
     "Provides Sprockets implementation for the Rails Asset Pipeline.")
@@ -618,15 +597,9 @@ application bootup, plugins, generators, and Rake tasks.")
                (("group :test do") "group :test do\n  gem 'tzinfo-data'"))
              #t)))))
     (propagated-inputs
-     `(("ruby-actionview" ,ruby-actionview)
-       ("ruby-activemodel" ,ruby-activemodel)
-       ("ruby-bindex" ,ruby-bindex)
-       ("ruby-railties" ,ruby-railties)))
+     (list ruby-actionview ruby-activemodel ruby-bindex ruby-railties))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rails" ,ruby-rails)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rails ruby-mocha ruby-simplecov))
     (synopsis "Debugging tool for your Ruby on Rails applications")
     (description
      "This package allows you to create an interactive Ruby session in your
@@ -650,11 +623,9 @@ can also be launched manually in any page.")
     (arguments
      '(#:tests? #f)) ; TODO Tests require a running MySQL service
     (propagated-inputs
-     `(("ruby-activerecord" ,ruby-activerecord)))
+     (list ruby-activerecord))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-mysql2" ,ruby-mysql2)))
+     (list bundler ruby-yard ruby-mysql2))
     (synopsis "Advisory locking for ActiveRecord")
     (description
      "The With advisory lock gem adds advisory locking to ActiveRecord for
@@ -696,20 +667,20 @@ for locks.")
               (invoke "ruby" "-e" "gem 'rails'"))
             #t)))))
    (propagated-inputs
-    `(("ruby-actioncable" ,ruby-actioncable)
-      ("ruby-actionmailbox" ,ruby-actionmailbox)
-      ("ruby-actionmailer" ,ruby-actionmailer)
-      ("ruby-actionpack" ,ruby-actionpack)
-      ("ruby-actiontext" ,ruby-actiontext)
-      ("ruby-actionview" ,ruby-actionview)
-      ("ruby-activejob" ,ruby-activejob)
-      ("ruby-activemodel" ,ruby-activemodel)
-      ("ruby-activerecord" ,ruby-activerecord)
-      ("ruby-activestorage" ,ruby-activestorage)
-      ("ruby-activesupport" ,ruby-activesupport)
-      ("bundler" ,bundler)
-      ("ruby-railties" ,ruby-railties)
-      ("ruby-sprockets-rails" ,ruby-sprockets-rails)))
+    (list ruby-actioncable
+          ruby-actionmailbox
+          ruby-actionmailer
+          ruby-actionpack
+          ruby-actiontext
+          ruby-actionview
+          ruby-activejob
+          ruby-activemodel
+          ruby-activerecord
+          ruby-activestorage
+          ruby-activesupport
+          bundler
+          ruby-railties
+          ruby-sprockets-rails))
    (synopsis "Full-stack web framework optimized for programmer happiness")
    (description
     "Ruby on Rails is a full-stack web framework optimized for programmer
diff --git a/gnu/packages/ratpoison.scm b/gnu/packages/ratpoison.scm
index 42e17b63d9..0c0687032d 100644
--- a/gnu/packages/ratpoison.scm
+++ b/gnu/packages/ratpoison.scm
@@ -79,8 +79,7 @@
        ("readline" ,readline)
        ("xorgproto" ,xorgproto)))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (home-page "https://www.nongnu.org/ratpoison/")
     (synopsis "Simple mouse-free tiling window manager")
     (description
diff --git a/gnu/packages/rcm.scm b/gnu/packages/rcm.scm
index f8c7ba4200..5fab6250fd 100644
--- a/gnu/packages/rcm.scm
+++ b/gnu/packages/rcm.scm
@@ -48,8 +48,7 @@
                          (("/usr/bin/env") (which "env")))
                        #t)))
                   #:parallel-tests? #f))
-    (native-inputs `(("perl" ,perl)
-                     ("python-cram" ,python-cram)))
+    (native-inputs (list perl python-cram))
     (synopsis "Management suite for dotfiles")
     (description "The rcm suite of tools is for managing dotfiles directories.  This is
 a directory containing all the @code{.*rc} files in your home directory
diff --git a/gnu/packages/rdesktop.scm b/gnu/packages/rdesktop.scm
index adfbe7de06..12a1d3e9eb 100644
--- a/gnu/packages/rdesktop.scm
+++ b/gnu/packages/rdesktop.scm
@@ -65,12 +65,9 @@
                                "--disable-smartcard")
        #:tests? #f))                    ; No 'check' target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libx11" ,libx11)
-       ("libxcursor" ,libxcursor)
-       ("nettle" ,nettle)))
+     (list gnutls libx11 libxcursor nettle))
     (home-page "https://www.rdesktop.org/")
     (synopsis "Client for Windows Terminal Services")
     (description
@@ -94,13 +91,13 @@ to remotely control a user's Windows desktop.")
         (base32 "02zlg5r704zbryx09a5rjjf7q137kj16i9qh25dw9q1y69ri619n"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)))
+     (list docbook-xml
+           docbook-xsl
+           glib
+           libxml2
+           libxslt
+           pkg-config
+           xmlto))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cups" ,cups)
@@ -120,9 +117,7 @@ to remotely control a user's Windows desktop.")
        ("pulseaudio" ,pulseaudio)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)
-       ("openssl" ,openssl)
-       ("wayland" ,wayland)))
+     (list libxkbcommon openssl wayland))
     (arguments
      `(#:build-type "RELEASE"
        #:configure-flags
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index fb84d8053d..83e5912464 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -48,6 +48,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -70,10 +71,7 @@
                "1vc02im4mpc28zxzgli68k6j0dakh0k3s389bm436yvqajxg19xd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("zlib" ,zlib)))
+     (list curl libxml2 libxslt zlib))
     (arguments
      `(#:parallel-tests? #f))
     (home-page "https://librdf.org/raptor/")
@@ -105,8 +103,8 @@ HTML and JSON.")
                                       "clucene-contribs-lib.patch"))))
     (build-system cmake-build-system)
     (inputs
-     `(("boost" ,boost) ; could also use bundled copy
-       ("zlib" ,zlib)))
+     (list boost ; could also use bundled copy
+           zlib))
     (arguments
      `(#:test-target "cl_test"
        #:configure-flags '("-DBUILD_CONTRIBS_LIB=ON")
@@ -145,9 +143,9 @@ Java Lucene text search engine API to C++.")
              ;; Install in lib64 break rpath
              "-DCMAKE_INSTALL_LIBDIR:PATH=lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost" ,boost)))
+     (list boost))
     (home-page "https://github.com/luceneplusplus/LucenePlusPlus")
     (synopsis "Text search engine")
     (description "Lucene++ is an up to date C++ port of the popular Java
@@ -186,10 +184,7 @@ Lucene library, a high-performance, full-featured text search engine.")
        ("cyrus-sasl" ,cyrus-sasl)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/swh/LRDF")
     (synopsis "Lightweight RDF library for accessing LADSPA plugin metadata")
     (description
@@ -212,17 +207,13 @@ taxonomic inference capability.")
                "0z6rrwn4jsagvarg8d5zf0j352kjgi33py39jqd29gbhcnncj939"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("perl-xml-dom" ,perl-xml-dom) ; for the tests
-       ("pkg-config" ,pkg-config)))
+     (list perl perl-xml-dom ; for the tests
+           pkg-config))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libxml2" ,libxml2)
-       ("mpfr" ,mpfr)
-       ("pcre" ,pcre)
-       ("util-linux" ,util-linux "lib")))
+     (list libgcrypt libxml2 mpfr pcre
+           `(,util-linux "lib")))
     (propagated-inputs
-     `(("raptor2" ,raptor2))) ; stipulated by rasqal.pc
+     (list raptor2)) ; stipulated by rasqal.pc
     (arguments
      `(#:parallel-tests? #f
        ; test failure reported upstream, see
@@ -253,12 +244,12 @@ Turtle/N3 and read them in SPARQL XML, RDF/XML and Turtle/N3.")
                "109n0kp39p966dpiasad2bb7q66rwbcb9avjvimw28chnpvlf66y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl) ; needed for installation
-       ("pkg-config" ,pkg-config)))
+     (list perl ; needed for installation
+           pkg-config))
     (propagated-inputs
-     `(("rasqal" ,rasqal))) ; in Requires.private field of .pc
+     (list rasqal)) ; in Requires.private field of .pc
     (inputs
-     `(("bdb" ,bdb)))
+     (list bdb))
     (home-page "http://librdf.org/")
     (synopsis "RDF library")
     (description "The Redland RDF Library (librdf) provides the RDF API
@@ -323,11 +314,11 @@ ideal (e.g. in LV2 implementations or embedded applications).")
                                    (assoc-ref outputs "out") "/lib"))
             #t)))))
     (inputs
-     `(("pcre" ,pcre)))
+     (list pcre))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("serd" ,serd)))                 ; required by sord-0.pc
+     (list serd))                 ; required by sord-0.pc
     (home-page "https://drobilla.net/software/sord/")
     (synopsis "C library for storing RDF data in memory")
     (description
@@ -357,11 +348,9 @@ ideal (e.g. in LV2 implementations or embedded applications).")
        ;;       ;; sees the installed 2to3 version.
        ;;       (invoke "nosetests" "--where=./build/src"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-      `(("python-html5lib" ,python-html5lib)
-        ("python-isodate" ,python-isodate)
-        ("python-pyparsing" ,python-pyparsing)))
+      (list python-html5lib python-isodate python-pyparsing))
     (home-page "https://github.com/RDFLib/rdflib")
     (synopsis "Python RDF library")
     (description
@@ -386,9 +375,9 @@ powerful language for representing information.")
           "1v85f4hdlrrk0l1najmqmm79ijrvcj259kwsrrxiq1q5chr5azag"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://github.com/RDFLib/rdflib-jsonld")
     (synopsis "rdflib extension adding JSON-LD parser and serializer")
     (description "This package provides an rdflib extension adding JSON-LD
@@ -408,7 +397,7 @@ parser and serializer.")
           "0x7yz0lvqb6mkhl5fbml27sppmscgpf8v2ism9jzzf0h982ffzxm"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://github.com/hsolbrig/CFGraph")
     (synopsis "RDF Collections flattener for rdflib")
     (description
@@ -430,13 +419,9 @@ parser and serializer.")
                 "1vsq80jnix6cy78ayag7v8ajyw7h8dqyad1q6xkf2hzz3skvr34z"))))
     (build-system gnu-build-system)
     (inputs
-     `(("serd" ,serd)
-       ("zlib" ,zlib)))
+     (list serd zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/rdfhdt/hdt-cpp")
     (synopsis "C++ implementation of the HDT compression format")
     (description "Header Dictionary Triples (HDT) is a compression format for
@@ -461,9 +446,9 @@ C++ library as well as various command-line tools to to work with HDT.")
     (arguments
      '(#:tests? #f)) ; The test suite simply queries external HTTP endpoints.
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (propagated-inputs
-     `(("python-rdflib" ,python-rdflib)))
+     (list python-rdflib))
     (home-page "https://rdflib.dev/sparqlwrapper/")
     (synopsis "SPARQL Endpoint interface to Python")
     (description "Python wrapper around a SPARQL service.  It helps in creating
diff --git a/gnu/packages/re2c.scm b/gnu/packages/re2c.scm
index ba96727d56..eb9daf4622 100644
--- a/gnu/packages/re2c.scm
+++ b/gnu/packages/re2c.scm
@@ -40,7 +40,7 @@
     (build-system gnu-build-system)
     (home-page "https://re2c.org/")
     (native-inputs
-     `(("python" ,python)))             ; for the test driver
+     (list python))             ; for the test driver
     (synopsis "Lexer generator for C/C++")
     (description
      "@code{re2c} generates minimalistic hard-coded state machine (as opposed
diff --git a/gnu/packages/readline.scm b/gnu/packages/readline.scm
index c7db9e611d..5920f1c8e1 100644
--- a/gnu/packages/readline.scm
+++ b/gnu/packages/readline.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,13 +48,10 @@
   (list (readline-patch version seqno (base32 hash))
         ...))
 
-(define %patch-series-8.0
+(define %patch-series-8.1
   (patch-series
-   "8.0"
-   (1 "0sfh7wn0pr743xspnb1zndxndlv9rc0hcg14cbw5cmyg6f4ykrfq")
-   (2 "1xy8mv8xm8hsfixwp3ci9kfx3dii3y92cq27wwd0jq75y6zzxc1n")
-   (3 "1vza7sxjcsr2z295ij12nzgncdil1vb6as3mqy4m7svi1chv5pcl")
-   (4 "0k1rfx9w32lglxg564yvp0mw6jg6883p8ac2f2lxxqpf80m3vami")))
+   "8.1"
+   (1 "0i4ikdqgcjnb40y2ss3lm09rq56zih5rzma3bib50dk3d1d4cak8")))
 
 (define %patch-series-7.0
   (patch-series
@@ -68,20 +65,20 @@
 (define-public readline
   (package
     (name "readline")
-    (version (string-append "8.0."
-                            (number->string (length %patch-series-8.0))))
+    (version (string-append "8.1."
+                            (number->string (length %patch-series-8.1))))
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/readline/readline-"
                                   (version-major+minor version) ".tar.gz"))
               (sha256
                (base32
-                "0qg4924hf4hg0r0wbx2chswsr08734536fh5iagkd3a7f4czafg3"))
-              (patches (append %patch-series-8.0
+                "00ibp0n9crbwx15k9vvckq5wsipw98b1px8pd8i34chy2gpb9kpq"))
+              (patches (append %patch-series-8.1
                                (search-patches "readline-link-ncurses.patch")))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("ncurses" ,ncurses)))
+    (propagated-inputs (list ncurses))
     (arguments `(#:configure-flags
                  (list (string-append "LDFLAGS=-Wl,-rpath -Wl,"
                                       (assoc-ref %build-inputs "ncurses")
@@ -158,11 +155,9 @@ comfortable for anyone.")
         (base32 "1irlcdvj1ddxkfzwa7l2djxgp5xbqch9vaajk2s32x1h5cxl1f5r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("perl" ,perl)))
+     (list autoconf automake perl))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (synopsis "Wrapper to allow the editing of keyboard commands")
     (description
      "Rlwrap is a 'readline wrapper', a small utility that uses the GNU
diff --git a/gnu/packages/rednotebook.scm b/gnu/packages/rednotebook.scm
index 0c7e5994cd..f63104ad32 100644
--- a/gnu/packages/rednotebook.scm
+++ b/gnu/packages/rednotebook.scm
@@ -71,11 +71,7 @@
                  `("LD_LIBRARY_PATH" ":" prefix (,webkitgtk-path)))
                #t))))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-pygobject" ,python-pygobject)
-       ("webkitgtk" ,webkitgtk)))
+     (list gtk+ gtksourceview-3 python-pyyaml python-pygobject webkitgtk))
     ;; TODO: package the following for python3 (if possible), add them as
     ;; dependencies, and remove them from rednotebook source:
     ;; pygtkspellcheck, elib.intl, msgfmt, txt2tags
diff --git a/gnu/packages/robotics.scm b/gnu/packages/robotics.scm
index 87dcc6f890..a110d0e6bd 100644
--- a/gnu/packages/robotics.scm
+++ b/gnu/packages/robotics.scm
@@ -51,14 +51,14 @@
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (native-inputs (list pkg-config))
       (inputs
        ;; Optionally, add Python + Boost for Python bindings.
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (propagated-inputs
        ;; 'Viewer.h' includes 'QGLWidget'.
-       `(("qtbase" ,qtbase-5)                ;the viewer module needs Qt5 + MESA
-         ("mesa" ,mesa)))
+       (list qtbase-5 ;the viewer module needs Qt5 + MESA
+             mesa))
       (synopsis "Robot simulator")
       (description
        "Enki is a robot simulator written in C++.  It provides collision and
@@ -101,21 +101,20 @@ hundred times faster than real-time.")
       (arguments
        '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("valgrind" ,valgrind)))                 ;for tests
+       (list pkg-config valgrind))                 ;for tests
       (inputs
-       `(("dashel" ,dashel)
-         ("enki" ,enki)
-         ("protobuf" ,protobuf-3.5)               ;for logging
-         ("qtbase" ,qtbase-5)
-         ("qtsvg" ,qtsvg)
-         ("qttools" ,qttools)              ;for libQt5Help, needed by "studio"
-         ("qtwebkit" ,qtwebkit)
-         ("qtx11extras" ,qtx11extras)
-         ("eudev" ,eudev)
-         ("libxml2" ,libxml2)
-         ("sdl2" ,sdl2)
-         ("avahi" ,avahi)))            ;XXX: we need the libdnssd compat layer
+       (list dashel
+             enki
+             protobuf-3.5 ;for logging
+             qtbase-5
+             qtsvg
+             qttools ;for libQt5Help, needed by "studio"
+             qtwebkit
+             qtx11extras
+             eudev
+             libxml2
+             sdl2
+             avahi))            ;XXX: we need the libdnssd compat layer
       (synopsis "Event-based robot programming tools")
       (description
        "Aseba means @dfn{actuator and sensor event-based architecture}.
diff --git a/gnu/packages/rocm.scm b/gnu/packages/rocm.scm
index 9a015d2490..2ccc6d3251 100644
--- a/gnu/packages/rocm.scm
+++ b/gnu/packages/rocm.scm
@@ -49,7 +49,7 @@
                 "0sic2zxmzl2pb2865vvq55mbpcr8pby8v19pjdlm08pypqw5h6h6"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Tests try to use git commit
-    (native-inputs `(("git" ,git)))
+    (native-inputs (list git))
     (home-page "https://github.com/RadeonOpenCompute/rocm-cmake")
     (synopsis "ROCm cmake modules")
     (description "ROCm cmake modules provides cmake modules for common build
@@ -128,7 +128,7 @@ AMDGPU code objects.")
                 "0ffqhrrscmcydfqf61dk58d7nnxk6n2k68jhqfj7a4hvhlphb74f"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Not sure how to run tests.
-    (inputs `(("numactl" ,numactl)))
+    (inputs (list numactl))
     (home-page "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface")
     (synopsis "Radeon Open Compute Thunk Interface")
     (description "User-mode API interfaces used to interact with the ROCk
@@ -167,7 +167,7 @@ driver.")
        ("llvm" ,llvm-for-rocm)
        ("roct-thunk-interface" ,roct-thunk-interface)
        ("rocm-device-libs" ,rocm-device-libs))) ; For bitcode.
-    (native-inputs `(("xxd" ,xxd)))
+    (native-inputs (list xxd))
     (home-page "https://github.com/RadeonOpenCompute/ROCR-Runtime")
     (synopsis "ROCm Platform Runtime")
     (description "User-mode API interfaces and libraries necessary for host
@@ -258,12 +258,12 @@ allows runtimes to work on Windows as well as on Linux without much effort.")
                (with-output-to-file (string-append vendors "/amdocl64.icd")
                  (lambda _ (display sopath)))))))))
     (inputs
-     `(("mesa" ,mesa)
-       ("rocm-comgr" ,rocm-comgr)
-       ("rocr-runtime" ,rocr-runtime)
-       ("rocclr" ,rocclr)
-       ("opencl-icd-loader" ,opencl-icd-loader)
-       ("glew" ,glew)))
+     (list mesa
+           rocm-comgr
+           rocr-runtime
+           rocclr
+           opencl-icd-loader
+           glew))
     (native-inputs `())
     (synopsis "ROCm OpenCL Runtime")
     (description "OpenCL 2.0 compatible language runtime, supporting offline
@@ -295,8 +295,7 @@ and in-process/in-memory compilation.")
                 (string-append (assoc-ref inputs "kmod") "/bin/lsmod"))
                (("grep") (which "grep"))))))))
     (inputs
-     `(("rocr-runtime" ,rocr-runtime)
-       ("kmod" ,kmod)))
+     (list rocr-runtime kmod))
     (home-page "https://github.com/RadeonOpenCompute/rocminfo")
     (synopsis "ROCm Application for Reporting System Info")
     (description "List @acronym{HSA,Heterogeneous System Architecture} Agents
@@ -318,7 +317,7 @@ available to ROCm and show their properties.")
                 "0a14kwkjpiyljgzxblh031qibn6xgbxp6m12zdy1pmwb2c44jjmm"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; No tests.
-    (inputs `(("rocr-runtime" ,rocr-runtime)))
+    (inputs (list rocr-runtime))
     (home-page "https://github.com/RadeonOpenCompute/rocm_bandwidth_test")
     (synopsis "Bandwidth test for ROCm")
     (description "RocBandwidthTest is designed to capture the performance
diff --git a/gnu/packages/rpc.scm b/gnu/packages/rpc.scm
index f02fa66f6c..b4f4af9446 100644
--- a/gnu/packages/rpc.scm
+++ b/gnu/packages/rpc.scm
@@ -105,11 +105,7 @@
                    (find-files "." "\\.a$"))))
              #t)))))
     (inputs
-     `(("abseil-cpp" ,abseil-cpp)
-       ("c-ares" ,c-ares/cmake)
-       ("openssl" ,openssl)
-       ("re2" ,re2)
-       ("zlib" ,zlib)))
+     (list abseil-cpp c-ares/cmake openssl re2 zlib))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("protobuf" ,protobuf)
@@ -152,11 +148,11 @@ browsers to backend services.")
                               "src/core/lib/gpr/log_posix.cc"
                               "src/core/lib/iomgr/ev_epollex_linux.cc")
                  (("gettid\\(")
-                  "sys_gettid("))
-               #t))))))
+                  "sys_gettid("))))))))
     (native-inputs
-     `(("protobuf" ,protobuf-3.6)
-       ,@(alist-delete "protobuf" (package-native-inputs grpc))))))
+     (modify-inputs (package-native-inputs grpc)
+       (delete "abseil-cpp" "protobuf")
+       (prepend abseil-cpp-20200923.3 protobuf-3.6)))))
 
 (define-public python-grpcio
   (package
@@ -199,11 +195,9 @@ browsers to backend services.")
                         (("'cc'") "'gcc'"))
                       #t)))))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list c-ares openssl zlib))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://grpc.io")
     (synopsis "HTTP/2-based RPC framework")
     (description "This package provides a Python library for communicating
@@ -230,15 +224,14 @@ with the HTTP/2-based RPC framework gRPC.")
        (list (string-append "--with-boost="
                             (assoc-ref %build-inputs "boost")))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("flex" ,flex)
-       ("bison" ,bison)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           flex
+           bison))
     (inputs
-     `(("boost" ,boost)
-       ("libressl" ,libressl)))
+     (list boost libressl))
     (outputs '("out" "lib" "include"))
     (home-page "https://thrift.apache.org/")
     (synopsis
diff --git a/gnu/packages/rpm.scm b/gnu/packages/rpm.scm
index a42e2eae8e..96c6776d1a 100644
--- a/gnu/packages/rpm.scm
+++ b/gnu/packages/rpm.scm
@@ -55,17 +55,16 @@
                 "0m269nl8s31yjyz7kknv4jl9mx12xjpx2ly6wf66zs5613m4rj1z"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("lzlib" ,lzlib)
-       ("openssl" ,openssl)
-       ("popt" ,popt)
-       ("rpm" ,rpm)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list bzip2
+           lzlib
+           openssl
+           popt
+           rpm
+           xz
+           zlib
+           `(,zstd "lib")))
     (home-page "https://github.com/rpm-software-management/drpm")
     (synopsis "Delta RPM library")
     (description "This package provides a library for making, reading and
@@ -135,10 +134,9 @@ applying deltarpms, compatible with the original deltarpm packages.")
        ("python-pygobject" ,python-pygobject)))
     (propagated-inputs
      ;; glib and gobject are listed as 'Requires' in modulemd-2.0.pc.
-     `(("glib" ,glib)
-       ;; yaml and rpm are listed as 'Requires.private' in modulemd-2.0.pc.
-       ("libyaml" ,libyaml)
-       ("rpm" ,rpm)))
+     (list glib
+           ;; yaml and rpm are listed as 'Requires.private' in modulemd-2.0.pc.
+           libyaml rpm))
     (home-page "https://github.com/fedora-modularity/libmodulemd")
     (synopsis "C library for manipulating module metadata files")
     (description "The libmodulemd API provides a number of convenience tools
@@ -181,18 +179,16 @@ information on multiple streams, default data and translations).")
                 (format #f "set (BASHCOMP_DIR ~a\
 /share/bash-completion/completions)~%" (assoc-ref outputs "out")))))))))
     (native-inputs
-     `(("bash-completion" ,bash-completion)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list bash-completion pkg-config python))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("curl" ,curl)
-       ("drpm" ,drpm)
-       ("libmodulemd" ,libmodulemd)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)
-       ("zchunk" ,zchunk)))
+     (list bzip2
+           curl
+           drpm
+           libmodulemd
+           libxml2
+           openssl
+           sqlite
+           zchunk))
     (home-page "https://rpm-software-management.github.io/createrepo_c/")
     (synopsis "C implementation of the createrepo tool")
     (description "This package provides the @command{createrepo} command,
diff --git a/gnu/packages/rrdtool.scm b/gnu/packages/rrdtool.scm
index 13419e4d37..4390c5b0ca 100644
--- a/gnu/packages/rrdtool.scm
+++ b/gnu/packages/rrdtool.scm
@@ -55,13 +55,12 @@
        ("pango" ,pango)
        ("python" ,python-2)))
     (native-inputs
-     `(("groff" ,groff)
-       ("pkg-config" ,pkg-config)
-
-       ;; For tests.
-       ("bc" ,bc)
-       ("perl" ,perl)                   ; will also build Perl bindings
-       ("tzdata" ,tzdata-for-tests)))
+     (list groff
+           pkg-config
+           ;; For tests.
+           bc
+           perl ; will also build Perl bindings
+           tzdata-for-tests))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -73,9 +72,7 @@
          (add-before 'check 'prepare-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
-             #t))
+                     (search-input-directory inputs "share/zoneinfo"))))
          (add-after 'install 'remove-native-input-references
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index 956c942770..bce184da58 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -54,11 +54,9 @@
       (list "--without-included-zlib"
             "--without-included-popt")))
    (native-inputs
-    `(("perl" ,perl)))
+    (list perl))
    (inputs
-    `(("acl" ,acl)
-      ("popt" ,popt)
-      ("zlib" ,zlib)))
+    (list acl popt zlib))
    (synopsis "Remote (and local) file copying tool")
    (description
     "Rsync is a fast and versatile file copying tool.  It can copy locally,
@@ -89,7 +87,7 @@ files in the destination.")
             ;; Avoid these dependencies for now.
             "--disable-openssl")))
    (native-inputs
-    `(("perl" ,perl)))
+    (list perl))
    (inputs
     `(("acl" ,acl)
       ("lz4" ,lz4)
@@ -122,10 +120,9 @@ files in the destination.")
               "0bn29npmbw26akc6y54661irpdh6qcivcs6q48cgp3llklhhxp0q"))))
    (build-system cmake-build-system)
    (inputs
-    `(("popt" ,popt)))
+    (list popt))
    (native-inputs
-    `(("which" ,which)
-      ("perl" ,perl)))
+    (list which perl))
    (home-page "http://librsync.sourceforge.net/")
    (synopsis "Implementation of the rsync remote-delta algorithm")
    (description
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index a567f530a9..55af2beb8b 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Pjotr Prins <pjotr.guix@thebird.nl>
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -95,7 +95,7 @@
         license:gpl2+
         license:gpl3+))
 
-(define-public ruby
+(define-public ruby-2.6
   (package
     (name "ruby")
     (version "2.6.5")
@@ -135,12 +135,9 @@
                (("/bin/sh") (which "sh")))
              #t)))))
     (inputs
-     `(("readline" ,readline)
-       ("openssl" ,openssl)
-       ("libffi" ,libffi)
-       ("gdbm" ,gdbm)))
+     (list readline openssl libffi gdbm))
     (propagated-inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-search-paths
      (list (search-path-specification
             (variable "GEM_PATH")
@@ -153,11 +150,11 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.7
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.7.4")
     (source
      (origin
-       (inherit (package-source ruby))
+       (inherit (package-source ruby-2.6))
        (uri (string-append "https://cache.ruby-lang.org/pub/ruby/"
                            (version-major+minor version)
                            "/ruby-" version ".tar.gz"))
@@ -187,7 +184,7 @@ a focus on simplicity and productivity.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)))))
+     (list autoconf))))
 
 (define-public ruby-3.0
   (package
@@ -205,7 +202,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.5
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.5.9")
     (source
      (origin
@@ -219,7 +216,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.4
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.4.10")
     (source
      (origin
@@ -236,6 +233,8 @@ a focus on simplicity and productivity.")
                    (delete-file-recursively "ext/fiddle/libffi-3.2.1")
                    #t))))))
 
+(define-public ruby ruby-2.7)
+
 (define-public mruby
   (package
     (name "mruby")
@@ -287,8 +286,7 @@ a focus on simplicity and productivity.")
                (copy-recursively "build/host/lib" lib))
              #t)))))
     (native-inputs
-     `(("ruby" ,ruby)
-       ("bison" ,bison)))
+     (list ruby bison))
     (home-page "https://github.com/mruby/mruby")
     (synopsis "Lightweight Ruby")
     (description "mruby is the lightweight implementation of the Ruby
@@ -321,13 +319,10 @@ embedded within your application.")
                ((".*RuboCop.*") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-highline" ,ruby-highline)))
+     (list ruby-highline))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks ruby-simplecov))
     (home-page "https://github.com/commander-rb/commander")
     (synopsis "Library for building Ruby command-line executables")
     (description
@@ -352,8 +347,7 @@ elegant API.")
     (arguments
      `(#:tests? #f)) ;; TODO: NameError: uninitialized constant SPEC
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-code-statistics" ,ruby-code-statistics)))
+     (list bundler ruby-code-statistics))
     (synopsis
      "HighLine helps you build command-line interfaces")
     (description
@@ -444,11 +438,8 @@ packaging native C and Java extensions in Ruby.")
                (("Coveralls.wear!") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("rsync" ,rsync)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)))
+     (list bundler rsync ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks))
     (home-page "https://github.com/jbussdieker/ruby-rsync")
     (synopsis "Ruby wrapper around rsync")
     (description
@@ -520,15 +511,15 @@ an extensible architecture with a swappable backend.")
                  "/bin/")))
              #t)))))
     (inputs
-     `(("python-ipython" ,python-ipython)))
-    (propagated-inputs
-     `(("ruby-bond" ,ruby-bond)
-       ("ruby-data_uri" ,ruby-data_uri)
-       ("ruby-mimemagic" ,ruby-mimemagic)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-cztop" ,ruby-cztop)
-       ;; Optional inputs
-       ("ruby-pry" ,ruby-pry)))
+     (list python-ipython))
+    (propagated-inputs
+     (list ruby-bond
+           ruby-data_uri
+           ruby-mimemagic
+           ruby-multi-json
+           ruby-cztop
+           ;; Optional inputs
+           ruby-pry))
     (synopsis "Ruby kernel for Jupyter/IPython")
     (description
      "This package provides a Ruby kernel for Jupyter/IPython frontends (e.g.
@@ -571,7 +562,7 @@ notebook).")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)))
+     (list ruby-rspec-support))
     (synopsis "RSpec core library")
     (description "Rspec-core provides the RSpec test runner and example
 groups.")
@@ -624,8 +615,7 @@ standard diff-like tool.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)))
+     (list ruby-rspec-support ruby-diff-lcs))
     (synopsis "RSpec expectations library")
     (description "Rspec-expectations provides a simple API to express expected
 outcomes of a code example.")
@@ -642,7 +632,7 @@ outcomes of a code example.")
                (base32
                 "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9"))))
     (propagated-inputs
-     `(("ruby-diff-lcs" ,ruby-diff-lcs)))))
+     (list ruby-diff-lcs))))
 
 (define-public ruby-sorcerer
   (package
@@ -678,7 +668,7 @@ re-sourced, but they will be rendered in a single-line format.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite for the core package
     (propagated-inputs
-     `(("ruby-sorcerer" ,ruby-sorcerer)))
+     (list ruby-sorcerer))
     (synopsis "Core abstractions used by rspec-given and minitest-given")
     (description "Given_core is the basic functionality behind rspec-given and
 minitest-given, extensions that allow the use of Given/When/Then terminology
@@ -723,11 +713,9 @@ when defining specifications.")
              (delete-file "examples/integration/failing_messages_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list ruby-rspec ruby-minitest))
     (propagated-inputs
-     `(("ruby-given-core" ,ruby-given-core)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-given-core ruby-rspec))
     (synopsis "Given/When/Then for RSpec and Minitest")
     (description "Given is an RSpec extension that allows the use of
 Given/When/Then terminology when defining specifications, in a way similar to
@@ -777,13 +765,9 @@ the Cucumber Gherkin language.")
                (("\"aruba.*") "'aruba'\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list ruby-rspec-core ruby-rspec-expectations))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-ffi" ,ruby-ffi)
-       ("ruby-aruba" ,ruby-aruba)))
+     (list bundler ruby-cucumber ruby-ffi ruby-aruba))
     (synopsis "RSpec extension that provides the @code{its} method")
     (description
      "RSpec::Its provides the its method as a short-hand to specify the expected
@@ -816,8 +800,7 @@ eq(1)\\}}.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-support" ,ruby-rspec-support)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)))
+     (list ruby-rspec-support ruby-diff-lcs))
     (synopsis "RSpec stubbing and mocking library")
     (description "Rspec-mocks provides RSpec's \"test double\" framework, with
 support for stubbing and mocking.")
@@ -834,7 +817,7 @@ support for stubbing and mocking.")
                (base32
                 "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30"))))
     (propagated-inputs
-     `(("ruby-diff-lcs" ,ruby-diff-lcs)))))
+     (list ruby-diff-lcs))))
 
 (define-public ruby-rspec-rerun
   (package
@@ -851,7 +834,7 @@ support for stubbing and mocking.")
     (arguments
      '(;; No included tests
        #:tests? #f))
-    (propagated-inputs `(("ruby-rspec" ,ruby-rspec)))
+    (propagated-inputs (list ruby-rspec))
     (synopsis "Track failed RSpec tests to re-run them")
     (description
      "This package provides an automated way to track, and then re-run failed
@@ -878,9 +861,9 @@ RSpec tests.")
            (lambda _
              (invoke "rake" "spec"))))))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (propagated-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/laserlemon/rspec-wait")
     (synopsis "Wait for conditions in RSpec")
     (description
@@ -902,9 +885,7 @@ interactions.")
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list ruby-rspec-core ruby-rspec-mocks ruby-rspec-expectations))
     (synopsis "Behavior-driven development framework for Ruby")
     (description "RSpec is a behavior-driven development (BDD) framework for
 Ruby.  This meta-package includes the RSpec test runner, along with the
@@ -922,9 +903,7 @@ expectations and mocks frameworks.")
                (base32
                 "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"))))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core-2)
-       ("ruby-rspec-mocks" ,ruby-rspec-mocks-2)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations-2)))))
+     (list ruby-rspec-core-2 ruby-rspec-mocks-2 ruby-rspec-expectations-2))))
 
 ;; Bundler is yet another source of circular dependencies, so we must disable
 ;; its test suite as well.
@@ -1060,9 +1039,9 @@ configuration, and more.")
     ;; Test data required for most of the tests are not included.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("ruby-rjb" ,ruby-rjb)))
+     (list ruby-rjb))
     (synopsis "Ruby wrapper for the Ant build tool")
     (description "Antwrap is a Ruby module that wraps the Apache Ant build
 tool.  Antwrap can be used to invoke Ant tasks from a Ruby or a JRuby
@@ -1123,9 +1102,7 @@ line of code.")
                          "spec/objects_spec.rb"))
              (invoke "rspec" "-c" "spec"))))))
     (native-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-nokogiri ruby-rspec ruby-simplecov))
     (synopsis "Pretty print Ruby objects to visualize their structure")
     (description
      "Ruby dubugging companion: pretty print Ruby objects to visualize their
@@ -1155,8 +1132,7 @@ structure.  Supports custom object formatting via plugins.")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-pandoc-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((pandoc (string-append (assoc-ref inputs "pandoc")
-                                          "/bin/pandoc")))
+             (let ((pandoc (search-input-file inputs "/bin/pandoc")))
                (substitute* "lib/pandoc-ruby.rb"
                  (("@@pandoc_path = 'pandoc'")
                   (format #f "@@pandoc_path = '~a'" pandoc)))
@@ -1164,18 +1140,22 @@ structure.  Supports custom object formatting via plugins.")
                  (("('|\")pandoc" _ quote)
                   (string-append quote pandoc))
                  (("\\^pandoc")
-                  ".*pandoc"))
-               #t)))
+                  ".*pandoc")))))
+         (add-after 'unpack 'adjust-tests
+           ;; The tests expect filenames with spaces.  Because they don't have
+           ;; spaces the quotes around the output are dropped automatically.
+           (lambda _
+             (substitute* "test/test_pandoc_ruby.rb"
+               (("\\\\\"#\\{file\\.path\\}\\\\\"") "#{file.path}"))))
          (add-after 'extract-gemspec 'remove-Gemfile.lock
            (lambda _
              (delete-file "Gemfile.lock")
              (substitute* "pandoc-ruby.gemspec"
-               (("Gemfile\\.lock") ""))
-             #t)))))
+               (("Gemfile\\.lock") "")))))))
     (native-inputs
-     `(("ruby-mocha" ,ruby-mocha)))
+     (list ruby-mocha))
     (inputs
-     `(("pandoc" ,pandoc)))
+     (list pandoc))
     (synopsis "Ruby wrapper for Pandoc")
     (description "PandocRuby is a wrapper for Pandoc, a Haskell library with
 command line tools for converting one markup format to another.  Pandoc can
@@ -1201,7 +1181,7 @@ more.")
          "0523gddx88zql2mq6655k60gy2ac8vybpzkcf90lmd9nx7wl3fi9"))))
     (build-system ruby-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (arguments
      `(#:tests? #f))                    ; no included tests
     (synopsis "Ruby HTTP client library based on @code{libcurl}")
@@ -1248,11 +1228,9 @@ under the hood.")
                (("Bundler::GemHelper\\.install_tasks") "nil"))
              #t)))))
     (native-inputs
-     `(("ruby-rack-test" ,ruby-rack-test)
-       ("ruby-sinatra" ,ruby-sinatra)))
+     (list ruby-rack-test ruby-sinatra))
     (propagated-inputs
-     `(("ruby-temple" ,ruby-temple)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-temple ruby-tilt))
     (synopsis "Minimalist template language for Ruby")
     (description "Slim is a template language for Ruby that aims to reduce the
 syntax to the minimum while remaining clear.")
@@ -1262,7 +1240,7 @@ syntax to the minimum while remaining clear.")
 (define-public ruby-asciidoctor
   (package
     (name "ruby-asciidoctor")
-    (version "2.0.10")
+    (version "2.0.16")
     (source
      (origin
        (method git-fetch)               ;the gem release lacks a Rakefile
@@ -1272,20 +1250,12 @@ syntax to the minimum while remaining clear.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0jaxpnsdnx3qyjw5p2lsx1swny12q1i2vxw2kgdp4vlsyjv95z95"))))
+         "086i17v9rxx0sxac26xp8c5v75jqba6rqjlk57x94qjvrh8vzyw2"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "test:all"
        #:phases
        (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "asciidoctor.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t))
          (add-after 'extract-gemspec 'strip-version-requirements
            (lambda _
              (delete-file "Gemfile")
@@ -1294,18 +1264,19 @@ syntax to the minimum while remaining clear.")
                 (string-append stripped "\n")))
              #t)))))
     (native-inputs
-     `(("ruby-erubis" ,ruby-erubis)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-asciimath" ,ruby-asciimath)
-       ("ruby-coderay" ,ruby-coderay)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-haml" ,ruby-haml)
-       ("ruby-rouge" ,ruby-rouge)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-slim" ,ruby-slim)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-erubi
+           ruby-erubis
+           ruby-minitest
+           ruby-nokogiri
+           ruby-asciimath
+           ruby-coderay
+           ruby-cucumber
+           ruby-haml
+           ruby-rouge
+           ruby-rspec-expectations
+           ruby-simplecov
+           ruby-slim
+           ruby-tilt))
     (synopsis "Converter from AsciiDoc content to other formats")
     (description "Asciidoctor is a text processor and publishing toolchain for
 converting AsciiDoc content to HTML5, DocBook 5 (or 4.5), PDF, and other
@@ -1336,12 +1307,9 @@ formats.")
                         (("^RuboCop.*") ""))
                       #t)))))
     (native-inputs
-     `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-       ("ruby-pdf-reader" ,ruby-pdf-reader)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-pdf-inspector ruby-pdf-reader ruby-rspec ruby-simplecov))
     (propagated-inputs
-     `(("ruby-prawn" ,ruby-prawn)))
+     (list ruby-prawn))
     (synopsis "Icon fonts for use with the Prawn PDF toolkit")
     (description "@code{Prawn::Icon} provides various icon fonts including
 FontAwesome, PaymentFont and Foundation Icons for use with the Prawn PDF
@@ -1363,7 +1331,7 @@ toolkit.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f))          ;gem doesn't ship with test suite
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)))
+     (list ruby-addressable))
     (synopsis "Ruby Cascading Style Sheets (CSS) parser")
     (description "This package allows loading, parsing and cascading Cascading
 Style Sheets (CSS) rule sets in Ruby.")
@@ -1395,10 +1363,9 @@ Style Sheets (CSS) rule sets in Ruby.")
                         (invoke "rspec" "-Ilib" "-rprawn-svg"))
                       #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-css-parser" ,ruby-css-parser)
-       ("ruby-prawn" ,ruby-prawn)))
+     (list ruby-css-parser ruby-prawn))
     (synopsis "SVG renderer for the Prawn PDF library")
     (description "This library allows rendering Scalable Vector Graphics (SVG)
 graphics directly into a Portable Document Format (PDF) document using the
@@ -1434,11 +1401,9 @@ Prawn module.")
                         (invoke "rspec"))
                       #t)))))
     (native-inputs
-     `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-pdf-inspector ruby-rspec))
     (propagated-inputs
-     `(("ruby-pdf-reader" ,ruby-pdf-reader)
-       ("ruby-prawn" ,ruby-prawn)))
+     (list ruby-pdf-reader ruby-prawn))
     (synopsis "Prawn extension to include or combine PDF documents")
     (description "This @strong{unmaintained} package provides a Prawn
 extension that allows including other Portable Document Format (PDF) documents
@@ -1484,23 +1449,11 @@ loader for the file type associated with a filename extension, and it augments
          "1dmk94z6ivhrz5hsq68vl5vgydhkz89n394rha1ymddw3rymbfcv"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "treetop.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t)))))
+     `(#:test-target "spec"))
     (native-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-rr" ,ruby-rr)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-activesupport ruby-rr ruby-rspec))
     (propagated-inputs
-     `(("ruby-polyglot" ,ruby-polyglot)))
+     (list ruby-polyglot))
     (synopsis "Ruby-based parsing DSL based on parsing expression grammars")
     (description "This package provides a Ruby-based Parsing Expression
 Grammar (PEG) parser generator Domain Specific Language (DSL).")
@@ -1522,7 +1475,7 @@ Grammar (PEG) parser generator Domain Specific Language (DSL).")
     (arguments
      `(#:tests? #f))                    ; no included tests
     (propagated-inputs
-     `(("ruby-ethon" ,ruby-ethon)))
+     (list ruby-ethon))
     (synopsis "@code{libcurl} wrapper in Ruby")
     (description
      "Like a modern code version of the mythical beast with 100 serpent heads,
@@ -1555,14 +1508,10 @@ logic.")
              (setenv "HOME" "/tmp")
              #t)))))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)))
+     (list ruby-rubocop ruby-rubocop-ast))
     (native-inputs
-     `(("ruby-rack" ,ruby-rack)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-rack ruby-rspec ruby-rubocop-performance ruby-simplecov
+           ruby-yard))
     (synopsis "Code style checking for RSpec files")
     (description "This package provides a plugin for the RuboCop code style
 enforcing & linting tool.")
@@ -1609,11 +1558,9 @@ enforcing & linting tool.")
              (setenv "HOME" "/tmp")
              #t)))))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)))
+     (list ruby-rubocop ruby-rubocop-ast))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-bump ruby-yard))
     (synopsis "Performance optimizations checkers for Ruby code")
     (description "This package provides a collection of RuboCop cops to check
 for performance optimizations in Ruby code.")
@@ -1648,11 +1595,8 @@ for performance optimizations in Ruby code.")
            "0hrd32ygvf3i7h47ak8f623cz8ns9q7g60nnnvvlnywbggjaz3h6"))))
       (build-system ruby-build-system)
       (native-inputs
-       `(("ruby-coveralls" ,ruby-coveralls)
-         ("ruby-cucumber" ,ruby-cucumber)
-         ("ruby-pry" ,ruby-pry)
-         ("ruby-simplecov" ,ruby-simplecov)
-         ("ruby-rspec-given" ,ruby-rspec-given)))
+       (list ruby-coveralls ruby-cucumber ruby-pry ruby-simplecov
+             ruby-rspec-given))
       (arguments
        `(;; The cucumber task fails with error: "index 3 out of matches
          ;; (IndexError)", apparently due to our newer Cucumber version.
@@ -1717,23 +1661,11 @@ only what they care about.")
            (lambda _
              (delete-file "Gemfile")
              (delete-file "Gemfile.lock")
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "standard.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
              #t)))))
     (native-inputs
-     `(("ruby-gimme" ,ruby-gimme)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-gimme ruby-pry ruby-simplecov))
     (propagated-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)))
+     (list ruby-rubocop ruby-rubocop-performance))
     (synopsis "Ruby Style Guide, with linter & automatic code fixer")
     (description "Standard is a port of StandardJS.  Like StandardJS, it aims
 to save time in the following ways:
@@ -1767,20 +1699,9 @@ to save time in the following ways:
            (lambda _
              (substitute* (find-files "." "\\.rb$")
                (("require.*bundler/setup.*") ""))
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "chunky_png.gemspec"
-               (("`git ls-files`")
-                "`find . -type f -not -regex '.*\\.gem$' |sort |cut -c3-`"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-standard" ,ruby-standard)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-standard ruby-yard))
     (synopsis "Ruby library to handle PNG images")
     (description "ChunkyPNG is a pure Ruby library that can read and write
 Portable Network Graphics (PNG) images without depending on an external image
@@ -1826,7 +1747,7 @@ or a background processing library.")
             "1gj4awvs9ryf960m0iawg43jyjmfwcqgfwrbcfp890a57b9ag7q1"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Ruby library to hyphenate words in various languages")
     (description "Text::Hyphen is a Ruby library to hyphenate words in various
 languages using Ruby-fied versions of TeX hyphenation patterns.  It will
@@ -1860,85 +1781,66 @@ web pages.")
     (license license:expat)))
 
 (define-public ruby-asciidoctor-pdf
-  ;; Use the latest commit, as the last tag doesn't build with the
-  ;; latest Ruby dependencies in Guix.
-  (let ((revision "1")
-        (commit "d257440df895d1595a3825ef58b32e4b290ba1c3"))
-    (package
-      (name "ruby-asciidoctor-pdf")
-      (version (git-version "1.5.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)      ;no test suite in the distributed gem
-         (uri (git-reference
-               (url "https://github.com/asciidoctor/asciidoctor-pdf")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1563d11ghzsrsg4inwfwj6b9hb5sk5b429f49fwq5qg3sq76kgjj"))))
-      (build-system ruby-build-system)
-      (arguments
-       `(#:test-target "spec"
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'remove-failing-tests
-             ;; Two tests module fail for unknown reasons, *only* when
-             ;; ran in the build container (see:
-             ;; https://github.com/asciidoctor/asciidoctor-pdf/issues/1725#issuecomment-658777965).
-             (lambda _
-               (delete-file "spec/audio_spec.rb")
-               (delete-file "spec/video_spec.rb")
-               #t))
-           (add-after 'extract-gemspec 'strip-version-requirements
-             (lambda _
-               (substitute* "asciidoctor-pdf.gemspec"
-                 (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                  (string-append stripped "\n")))
-               #t))
-           (replace 'replace-git-ls-files
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (lambda _
-               (substitute* "asciidoctor-pdf.gemspec"
-                 (("`git ls-files -z`")
-                  "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
-               #t))
-           ;; The tests rely on the Gem being installed, so move the check phase
-           ;; after the install phase.
-           (delete 'check)
-           (add-after 'install 'check
-             (lambda* (#:key outputs tests? #:allow-other-keys)
-               (let ((new-gem (string-append (assoc-ref outputs "out")
-                                             "/lib/ruby/vendor_ruby")))
-                 (setenv "GEM_PATH"
-                         (string-append (getenv "GEM_PATH") ":" new-gem))
-                 (when tests?
-                   (invoke "rspec" "-t" "~visual" "-t" "~cli" "-t" "~network"))
-                 #t))))))
-      (native-inputs
-       `(("ruby-chunky-png" ,ruby-chunky-png)
-         ("ruby-coderay" ,ruby-coderay)
-         ("ruby-pdf-inspector" ,ruby-pdf-inspector)
-         ("ruby-rouge" ,ruby-rouge)
-         ("ruby-rspec" ,ruby-rspec)))
-      (propagated-inputs
-       `(("ruby-asciidoctor" ,ruby-asciidoctor)
-         ("ruby-concurrent-ruby" ,ruby-concurrent)
-         ("ruby-open-uri-cached" ,ruby-open-uri-cached)
-         ("ruby-prawn" ,ruby-prawn)
-         ("ruby-prawn-icon" ,ruby-prawn-icon)
-         ("ruby-prawn-svg" ,ruby-prawn-svg)
-         ("ruby-prawn-table" ,ruby-prawn-table)
-         ("ruby-prawn-templates" ,ruby-prawn-templates)
-         ("ruby-safe-yaml" ,ruby-safe-yaml)
-         ("ruby-text-hyphen" ,ruby-text-hyphen)
-         ("ruby-thread-safe" ,ruby-thread-safe)
-         ("ruby-treetop" ,ruby-treetop)
-         ("ruby-ttfunk" ,ruby-ttfunk)))
-      (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
-      (description "Asciidoctor PDF is an extension for Asciidoctor that
+  (package
+    (name "ruby-asciidoctor-pdf")
+    (version "1.6.1")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in the distributed gem
+       (uri (git-reference
+             (url "https://github.com/asciidoctor/asciidoctor-pdf")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1iyfy6n9d3rkyrfjmnnfb44c76mq1larmkv1x8n6p5nbm33wb9sf"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-failing-tests
+           ;; Two tests module fail for unknown reasons, *only* when
+           ;; ran in the build container (see:
+           ;; https://github.com/asciidoctor/asciidoctor-pdf/issues/1725#issuecomment-658777965).
+           (lambda _
+             (delete-file "spec/audio_spec.rb")
+             (delete-file "spec/video_spec.rb")))
+         (add-after 'extract-gemspec 'strip-version-requirements
+           (lambda _
+             (substitute* "asciidoctor-pdf.gemspec"
+               (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
+                (string-append stripped "\n")))))
+         ;; The tests rely on the Gem being installed, so move the check phase
+         ;; after the install phase.
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (let ((new-gem (string-append (assoc-ref outputs "out")
+                                           "/lib/ruby/vendor_ruby")))
+               (setenv "GEM_PATH"
+                       (string-append (getenv "GEM_PATH") ":" new-gem))
+               (when tests?
+                 (invoke "rspec" "-t" "~visual" "-t" "~cli" "-t" "~network"))))))))
+    (native-inputs
+     (list ruby-chunky-png ruby-coderay ruby-pdf-inspector ruby-rouge
+           ruby-rspec))
+    (propagated-inputs
+     `(("ruby-asciidoctor" ,ruby-asciidoctor)
+       ("ruby-concurrent-ruby" ,ruby-concurrent)
+       ("ruby-open-uri-cached" ,ruby-open-uri-cached)
+       ("ruby-prawn" ,ruby-prawn)
+       ("ruby-prawn-icon" ,ruby-prawn-icon)
+       ("ruby-prawn-svg" ,ruby-prawn-svg)
+       ("ruby-prawn-table" ,ruby-prawn-table)
+       ("ruby-prawn-templates" ,ruby-prawn-templates)
+       ("ruby-safe-yaml" ,ruby-safe-yaml)
+       ("ruby-text-hyphen" ,ruby-text-hyphen)
+       ("ruby-thread-safe" ,ruby-thread-safe)
+       ("ruby-treetop" ,ruby-treetop)
+       ("ruby-ttfunk" ,ruby-ttfunk)))
+    (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
+    (description "Asciidoctor PDF is an extension for Asciidoctor that
 converts AsciiDoc documents to Portable Document Format (PDF) using the Prawn
 PDF library.  It has features such as:
 @itemize
@@ -1961,13 +1863,13 @@ PDF library.  It has features such as:
 @item Custom TrueType (TTF) fonts
 @item Double-sided printing mode (margins alternate on recto and verso pages)
 @end itemize")
-      (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
-      (license license:expat))))
+    (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
+    (license license:expat)))
 
 (define-public ruby-ast
   (package
     (name "ruby-ast")
-    (version "2.4.1")
+    (version "2.4.2")
     (source
      (origin
        (method git-fetch)               ;no test included in gem from v2.4.1
@@ -1977,7 +1879,7 @@ PDF library.  It has features such as:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0k8vya256chimy473g818gim06m5rjgh6mz5sc5g8xz3csh3rysi"))))
+         "0vm94yml8rknr7z034vg6s3fpx6lml2prz9fn3hr67cx0143bb4h"))))
     (build-system ruby-build-system)
     (arguments
      '(#:phases
@@ -1989,24 +1891,25 @@ PDF library.  It has features such as:
                (("Coveralls::SimpleCov::Formatter") ""))
              #t))
          (add-after 'extract-gemspec 'remove-unnecessary-requirements
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "ast.gemspec"
                ((".*coveralls.*") "\n")
                (("%q<rest-client>.*") "%q<rest-client>.freeze, [\">= 0\"])\n")
                (("%q<mime-types>.*") "%q<mime-types>.freeze, [\">= 0\"])\n")
-               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n"))
+               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n")
+               (("12\\.3") "13.0"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-mime-times" ,ruby-mime-types)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-rest-client" ,ruby-rest-client)
-       ("ruby-bacon" ,ruby-bacon)
-       ("ruby-bacon-colored-output" ,ruby-bacon-colored-output)
-       ("ruby-racc" ,ruby-racc)))
+     (list bundler
+           ruby-bacon
+           ruby-bacon-colored-output
+           ruby-json-pure
+           ruby-kramdown
+           ruby-mime-types
+           ruby-racc
+           ruby-rest-client
+           ruby-simplecov
+           ruby-yard))
     (synopsis "Library for working with Abstract Syntax Trees")
     (description
      "@code{ast} is a Ruby library for working with Abstract Syntax Trees.
@@ -2036,7 +1939,7 @@ It does this through immutable data structures.")
        ;; Tests currently fail so disable them.
        ;; https://github.com/sporkmonger/rack-mount/pull/1
        `(#:tests? #f))
-      (propagated-inputs `(("ruby-rack" ,ruby-rack)))
+      (propagated-inputs (list ruby-rack))
       (synopsis "Stackable dynamic tree based Rack router")
       (description
        "@code{Rack::Mount} supports Rack's @code{X-Cascade} convention to
@@ -2059,10 +1962,9 @@ routes to be nested or stacked on top of each other.")
     (arguments
      `(#:test-target "rspec"))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)))
+     (list ruby-builder))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Generate XML reports of runs test")
     (description
      "@code{CI::Reporter} is an add-on to Ruby testing frameworks that allows
@@ -2097,7 +1999,7 @@ format.")
               ((".*RuboCop.*") ""))
             #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Method contracts for Ruby")
     (description
      "This library provides contracts for Ruby.  A contract describes the
@@ -2129,8 +2031,6 @@ value is found.")
                            (invoke "ruby" "-Ilib" "-Itest" "-rrubygems" file))
                          (find-files "test" ".*rb$")))
              #t)))))
-    (propagated-inputs
-     `(("ruby-rexml" ,ruby-rexml)))
     (synopsis "Simple JSON and XML parsing for Ruby")
     (description
      "@code{crack} provides really simple JSON and XML parsing, extracted from
@@ -2163,8 +2063,7 @@ code in Merb and Rails.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "Assertions for command-line dependencies in Ruby")
     (description
      "@code{cliver} provides a way to detect missing command-line
@@ -2201,9 +2100,8 @@ dependencies, including versions.")
                                (assoc-ref inputs "zeromq") "/lib"
                                "']"))))))))
     (inputs
-     `(("zeromq" ,zeromq)
-       ("czmq" ,czmq)))
-    (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
+     (list zeromq czmq))
+    (propagated-inputs (list ruby-ffi))
     (synopsis "Low-level Ruby bindings for CZMQ (generated using zproject)")
     (description
      "These Ruby bindings are not intended to be directly used, but rather
@@ -2236,12 +2134,11 @@ used by higher level bindings like those provided by CZTop.")
                                (assoc-ref inputs "zeromq") "/lib"
                                "']"))))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(("zeromq" ,zeromq)))
+     (list zeromq))
     (propagated-inputs
-     `(("ruby-czmq-ffi-gen" ,ruby-czmq-ffi-gen)))
+     (list ruby-czmq-ffi-gen))
     (synopsis "CZMQ Ruby bindings")
     (description
      "CZMQ Ruby bindings, based on the generated low-level FFI bindings of
@@ -2266,8 +2163,7 @@ support for security mechanisms.")
     ;; of the involved libraries.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-atoulme-saikuro" ,ruby-atoulme-saikuro)))
+     (list ruby-json-pure ruby-atoulme-saikuro))
     (synopsis "Generate complexity treemap based on saikuro analysis")
     (description
      "This gem generates a treemap showing the complexity of Ruby code on
@@ -2290,11 +2186,8 @@ complexity.")
     (arguments
      '(#:tests? #f))                    ; no included tests
     (propagated-inputs
-     `(("ruby-faraday" ,ruby-faraday)
-       ("ruby-jwt" ,ruby-jwt)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-multi-xml" ,ruby-multi-xml)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-faraday ruby-jwt ruby-multi-json ruby-multi-xml
+           ruby-rack))
     (synopsis "Ruby wrapper for the OAuth 2.0")
     (description
      "This package provides a Ruby wrapper for the OAuth 2.0 protocol built
@@ -2314,11 +2207,9 @@ with a similar style to the original OAuth spec.")
         (base32 "105mzgvmn2kjaacxw01h4wqv33r7hfn5z8fxlkk3jcjar14j71bh"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-hashie" ,ruby-hashie)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-rack-protection" ,ruby-rack-protection)))
+     (list ruby-hashie ruby-rack ruby-rack-protection))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Generalized Rack framework for multiple-provider authentication")
     (description
      "This package provides a generalized Rack framework for multiple-provider
@@ -2352,14 +2243,9 @@ authentication.")
                (("Coveralls::SimpleCov::Formatter") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-oauth2" ,ruby-oauth2)
-       ("ruby-omniauth" ,ruby-omniauth)))
+     (list ruby-oauth2 ruby-omniauth))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-rack-test" ,ruby-rack-test)
-       ("ruby-webmock" ,ruby-webmock)))
+     (list bundler ruby-rspec ruby-simplecov ruby-rack-test ruby-webmock))
     (synopsis "Abstract OAuth2 strategy for OmniAuth")
     (description
      "This library provides a generic OAuth2 strategy for OmniAuth.  It
@@ -2488,9 +2374,9 @@ support.")
     (arguments
      `(#:tests? #f))                    ; no included tests
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (synopsis "Very lightweight @code{libcurl} wrapper")
     (description
      "Ethon is a very basic @code{libcurl} wrapper using ffi.")
@@ -2514,14 +2400,14 @@ support.")
          "0c0vd2mmqq3ar4plbwi2wsbr31vn4h45i19r5km66skydnnbp1y6"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ;; The test suite tests all the available backends. Currenly, this just
-       ;; means the node backend.
-       ;;
-       ;; PASSED: test:node
-       ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
-       ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
-       ("node" ,node)))
+     (list bundler
+           ;; The test suite tests all the available backends. Currenly, this just
+           ;; means the node backend.
+           ;;
+           ;; PASSED: test:node
+           ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
+           ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
+           node))
     (synopsis "Run JavaScript code from Ruby")
     (description
      "ExecJS lets you run JavaScript code from Ruby.  It automatically picks a
@@ -2562,10 +2448,7 @@ a Ruby object.")
                          (string-append dep "\n")))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-maxitest" ,ruby-maxitest)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-bump ruby-maxitest ruby-rubocop ruby-rspec))
     (synopsis "Fake file system for Ruby")
     (description
      "This package provides a fake file system for use in test suites.  It
@@ -2606,8 +2489,7 @@ extensions.")
          "0xy8wmjwjcnv36zi042678ncjzpxvy351ccbv7mzkns2n3kxfp54"))))
     (build-system ruby-build-system)
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)))
+     (list zlib libxml2))
     (arguments
      '(#:tests? #f ; test suite hangs for unknown reason
        #:gem-flags
@@ -2638,8 +2520,7 @@ the GNOME Libxml2 XML toolkit.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-hamster" ,ruby-hamster)
-       ("ruby-open4" ,ruby-open4)))
+     (list ruby-hamster ruby-open4))
     (synopsis "Build and execute commands in Ruby")
     (description
      "@code{Lino} provides an interface to run external commands.  It provides
@@ -2732,8 +2613,7 @@ Ruby.")
                     (lambda _
                       (invoke "rspec" "spec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec ruby-simplecov))
     (synopsis "Ruby toolkit for building command-line interfaces")
     (description "Thor is a toolkit for building powerful command-line
 interfaces.")
@@ -2752,8 +2632,7 @@ interfaces.")
                 "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-timecop" ,ruby-timecop)))
+     (list ruby-rspec ruby-timecop))
     (synopsis "Logging utility library for Ruby")
     (description "Lumberjack is a simple logging utility that can be a drop in
 replacement for Logger or ActiveSupport::BufferedLogger.  It provides support
@@ -2805,12 +2684,11 @@ same log file.")
                (invoke "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (inputs
-     `(("libsodium" ,libsodium)))
+     (list libsodium))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Ruby FFI binding to libsodium")
     (description
      "This package provides Ruby FFI bindings to the Networking and
@@ -2837,7 +2715,7 @@ high-level toolkit for building cryptographic systems and protocols.")
     (arguments
      `(#:test-target "default"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "HMAC-based Key Derivation Function")
     (description
      "This package provides a Ruby implementation of RFC5869: @acronym{HKDF,
@@ -2860,8 +2738,7 @@ take some source key material and generate suitable cryptographic keys from it."
     (arguments
      `(#:tests? #f)) ; no tests included
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("bundler" ,bundler)))
+     (list ruby-rspec bundler))
     (synopsis "Ruby interface for modifying the environment")
     (description "Nenv provides a convenient wrapper for Ruby's ENV to modify
 and inspect the environment.")
@@ -2954,9 +2831,7 @@ operations with permutations of sequences, such as strings and arrays.")
               (("^RSpec") "require \"shellany\"\nRSpec"))
             #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-nenv" ,ruby-nenv)
-       ("bundler" ,bundler)))
+     (list ruby-rspec ruby-nenv bundler))
     (synopsis "Capture command output")
     (description "Shellany is a Ruby library providing functions to capture
 the output produced by running shell commands.")
@@ -2977,10 +2852,9 @@ the output produced by running shell commands.")
     ;; Tests are not included in the gem.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-shellany" ,ruby-shellany)
-       ("ruby-nenv" ,ruby-nenv)))
+     (list ruby-shellany ruby-nenv))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Wrapper library for notification libraries")
     (description "Notiffany is a Ruby wrapper library for notification
 libraries such as Libnotify.")
@@ -3025,13 +2899,9 @@ libraries such as Libnotify.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-wwtd" ,ruby-wwtd)))
+     (list ruby-activerecord ruby-bump ruby-rspec ruby-sqlite3 ruby-wwtd))
     (propagated-inputs
-     `(("ruby-parallel-tests" ,ruby-parallel-tests)))
+     (list ruby-parallel-tests))
     (synopsis "Run every test in a fork")
     (description
      "This package is a wrapper around @code{parallel_tests} that runs every
@@ -3094,10 +2964,9 @@ standard output stream.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (propagated-inputs
-     `(("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-progressbar" ,ruby-progressbar)))
+     (list ruby-rspec-core ruby-progressbar))
     (synopsis "Fuubar is an RSpec formatter that uses a progress bar")
     (description
      "Fuubar is an RSpec formatter that uses a progress bar instead of a
@@ -3121,8 +2990,7 @@ failure.")
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-tilt" ,ruby-tilt)
-       ("ruby-temple" ,ruby-temple)))
+     (list ruby-tilt ruby-temple))
     (synopsis "Haml is a Ruby library to generate HTML documents")
     (description
      "@acronym{Haml, HTML Abstraction Markup Language} is a layer on top of
@@ -3168,9 +3036,9 @@ engine.")
              (invoke "rspec"))
            #t)))))
   (propagated-inputs
-   `(("ruby-concurrent" ,ruby-concurrent)))
+   (list ruby-concurrent))
   (native-inputs
-   `(("ruby-rspec" ,ruby-rspec)))
+   (list ruby-rspec))
   (synopsis "Efficient, immutable, thread-safe collection classes for Ruby")
   (description
     "Hamster provides 6 persistent data structures: @code{Hash}, @code{Vector},
@@ -3201,8 +3069,7 @@ immutable queue or stack).")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "HashDiff computes the smallest difference between two hashes")
     (description
      "HashDiff is a Ruby library to compute the smallest difference between
@@ -3236,9 +3103,9 @@ two hashes.")
                       (lambda _
                         (invoke "rspec"))))))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)))
+       (list ruby-rspec))
       (propagated-inputs
-       `(("ruby-byebug" ,ruby-byebug)))
+       (list ruby-byebug))
       (synopsis "Ruby hyphenation patterns")
       (description
        "ruby-hydra is a Ruby library for working with hyphenation patterns.")
@@ -3270,7 +3137,7 @@ two hashes.")
                ((" -rubygems") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-formatador" ,ruby-formatador)))
+     (list ruby-formatador))
     (synopsis "Simple depth first Ruby testing")
     (description "Shindo is a simple depth first testing library for Ruby.")
     (home-page "https://github.com/geemus/shindo")
@@ -3290,8 +3157,7 @@ two hashes.")
     ;; Tests need Internet access.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-rspec ruby-yard))
     (synopsis "Rake tasks for managing and releasing Ruby Gems")
     (description "Rubygems-task provides Rake tasks for managing and releasing
 Ruby Gems.")
@@ -3323,10 +3189,7 @@ Ruby Gems.")
              (("/usr/bin/env ruby") (which "ruby")))
            #t)))))
   (native-inputs
-   `(("bundler" ,bundler)
-     ("ruby-simplecov" ,ruby-simplecov)
-     ("zip" ,zip)
-     ("unzip" ,unzip)))
+   (list bundler ruby-simplecov zip unzip))
   (synopsis "Ruby module is for reading and writing zip files")
   (description
     "The rubyzip module provides ways to read from and create zip files.")
@@ -3346,7 +3209,7 @@ Ruby Gems.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)) ; there are no tests
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Default HTML formatter for SimpleCov code coverage tool")
     (description "This package provides the default HTML formatter for
 the SimpleCov code coverage tool for Ruby version 1.9 and above.")
@@ -3368,11 +3231,9 @@ the SimpleCov code coverage tool for Ruby version 1.9 and above.")
     ;; Rubocop needs simplecov at build time.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)
-       ("ruby-docile" ,ruby-docile)
-       ("ruby-simplecov-html" ,ruby-simplecov-html)))
+     (list ruby-json ruby-docile ruby-simplecov-html))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Code coverage framework for Ruby")
     (description "SimpleCov is a code coverage framework for Ruby with a
 powerful configuration library and automatic merging of coverage across test
@@ -3415,8 +3276,7 @@ User Agents.")
    '(;; TODO: This should be default, but there is one test failure
      #:test-target "all_spec"))
   (native-inputs
-   `(("ruby-mspec" ,ruby-mspec)
-     ("ruby-activesupport" ,ruby-activesupport)))
+   (list ruby-mspec ruby-activesupport))
   (synopsis "Backports of the features in newer Ruby versions")
   (description
     "Backports enables more compatibility across Ruby versions by providing
@@ -3456,7 +3316,7 @@ features.")
     (arguments
      ;; No tests
      '(#:tests? #f))
-    (propagated-inputs `(("ruby-bacon" ,ruby-bacon)))
+    (propagated-inputs (list ruby-bacon))
     (synopsis "Extensions to Bacon, for disabling tests, before and after
 blocks and more")
     (description
@@ -3481,7 +3341,7 @@ disable tests, have before and after blocks that run once and more.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Colored output for Bacon test framework")
     (description
      "This package adds color through ANSI escape codes to Bacon test
@@ -3501,7 +3361,7 @@ output.")
                 "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Generic connection pool for Ruby")
     (description "Connection_pool provides a generic connection pooling
 interface for Ruby programs.")
@@ -3549,17 +3409,17 @@ interface for Ruby programs.")
                          "ActiveRecord::VERSION::MAJOR >= 4"))
                       #t)))))
     (native-inputs
-     `(;; For tests.
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-activesupport" ,ruby-activesupport)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-forking-test-runner" ,ruby-forking-test-runner)
-       ("ruby-i18n" ,ruby-i18n)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-single-cov" ,ruby-single-cov)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-wwtd" ,ruby-wwtd)))
+     (list ;; For tests.
+           ruby-activerecord
+           ruby-activesupport
+           ruby-bump
+           ruby-forking-test-runner
+           ruby-i18n
+           ruby-rubocop
+           ruby-rspec
+           ruby-single-cov
+           ruby-sqlite3
+           ruby-wwtd))
     (synopsis "Fast implementation of @code{GetText}")
     (description
      "This package provides an alternative implementation of the Ruby
@@ -3579,8 +3439,7 @@ interface for Ruby programs.")
                 "156rv95bgxfz6qw5y1r7c7bswr77918hygl8dyl14qzbqc5vyp18"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-connection-pool" ,ruby-connection-pool)
-       ("ruby-hoe" ,ruby-hoe)))
+     (list ruby-connection-pool ruby-hoe))
     (synopsis "Persistent HTTP connection manager")
     (description "Net::HTTP::Persistent manages persistent HTTP connections
 using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
@@ -3601,7 +3460,7 @@ using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
     (arguments
      '(#:tests? #f))                    ; No included tests
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Assert library with descriptive assertion messages")
     (description "Power-assert is an assertion library providing descriptive
 assertion messages for tests.")
@@ -3623,9 +3482,7 @@ assertion messages for tests.")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-yard))
     (synopsis "Useful extensions to core Ruby classes")
     (description
      "This package provides a few useful extensions to core Ruby classes,
@@ -3650,8 +3507,7 @@ including @code{Array}, @code{Enumerable}, @code{Hash}, @code{Numeric}, and
     ;; dependency cycle we disable tests.
     (arguments `(#:tests? #f))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-yard))
     (synopsis "Ruby library providing basic localization APIs")
     (description
      "Ruby-Locale is the pure ruby library which provides basic APIs for
@@ -3672,9 +3528,7 @@ localization.")
          "060zzj7c2kicdfk6cpnn40n9yjnhfrr13d0rsbdhdij68chp2861"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-tilt" ,ruby-tilt)
-       ("ruby-bacon" ,ruby-bacon)
-       ("ruby-erubis" ,ruby-erubis)))
+     (list ruby-tilt ruby-bacon ruby-erubis))
     (synopsis "Template compilation framework in Ruby")
     (description
      "Temple is an abstraction and framework for compiling templates to pure
@@ -3716,11 +3570,9 @@ Soundex, Metaphone, Double Metaphone, Porter Stemming.")
     ;; tests.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-locale" ,ruby-locale)
-       ("ruby-text" ,ruby-text)))
+     (list ruby-locale ruby-text))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-yard))
     (synopsis "GNU gettext-like program for Ruby")
     (description
      "Gettext is a GNU gettext-like program for Ruby.  The catalog
@@ -3744,10 +3596,9 @@ use GNU gettext tools for maintenance.")
     ;; To break the dependency cycle we disable tests.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-gettext" ,ruby-gettext)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-gettext ruby-yard))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Utility library to package internationalized libraries")
     (description
      "Packnga is a library to translate to many languages using YARD.")
@@ -3767,9 +3618,7 @@ use GNU gettext tools for maintenance.")
          "1a2ym3l068d0pxzzr95kvqx87zpdsarxslz9ygd4qfm9frrz0kgj"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-mocha ruby-rspec))
     (synopsis "Creates temporary files and directories for testing")
     (description
      "TestConstruct is a @acronym{DSL, Domain Specific Language} for creating
@@ -3780,20 +3629,18 @@ temporary files and directories during tests.")
 (define-public ruby-test-unit
   (package
     (name "ruby-test-unit")
-    (version "3.2.5")
+    (version "3.4.4")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "test-unit" version))
               (sha256
                (base32
-                "05bx36fw01iqz0xqhvjfrwjgnj1zx3b2vn6w1fzp19rchd7zqc52"))))
+                "15isy7vhppbfd0032klirj9gxp65ygkzjdwrmm28xpirlcsk6qpd"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-power-assert" ,ruby-power-assert)))
+     (list ruby-power-assert))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-packnga" ,ruby-packnga)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-packnga ruby-yard))
     (synopsis "Unit testing framework for Ruby")
     (description "@code{Test::Unit} is unit testing framework for Ruby, based
 on xUnit principles.  These were originally designed by Kent Beck, creator of
@@ -3827,10 +3674,9 @@ It allows writing tests, checking results and automated testing in Ruby.")
                (invoke "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)))
+     (list ruby-builder))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)))
+     (list bundler ruby-rspec-2))
     (synopsis "Write HTML pages in pure Ruby")
     (description
      "Markaby allows writing HTML packages in pure Ruby.  This is similar to
@@ -3862,9 +3708,7 @@ mixture of HTML and additional ERB syntax.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-nokogiri-diff" ,ruby-nokogiri-diff)))
+     (list ruby-rspec ruby-simplecov ruby-nokogiri-diff))
     (synopsis "Markdown interpreter in Ruby")
     (description
      "Maruku is a Markdown interpreter in Ruby.  It can export Markdown to
@@ -3898,8 +3742,7 @@ HTML, and PDF through LaTeX.")
                                  "/lib\""))))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-test-unit))
     (synopsis "Ruby library adding metaclass method to all objects")
     (description
      "Metaclass is a Ruby library adding a @code{metaclass} method to all Ruby
@@ -3919,7 +3762,7 @@ objects.")
                 "0br9k6zijj1zc25n8p7f2j1mwl58nfgdknf3q13h9k156jvrir06"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-ptools" ,ruby-ptools)))
+     (list ruby-ptools))
     (synopsis "Lightweight alternative to @code{mkmf}")
     (description
      "@code{mkmf-lite} is a light version of Ruby's @code{mkmf.rb} designed
@@ -3961,9 +3804,7 @@ to check for the presence of header files, constants, and so on.")
                (invoke "rspec" "spec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rake ruby-rspec))
     (synopsis "MSpec is a specialized framework for RubySpec")
     (description
      "MSpec is a specialized framework that is syntax-compatible with RSpec 2
@@ -4021,8 +3862,7 @@ specs for Ruby implementations in ruby/spec.")
      `(("mariadb-dev" ,mariadb "dev")
        ("zlib" ,zlib)))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rspec ruby-rake-compiler))
     (synopsis "MySQL library for Ruby, binding to libmysql")
     (description
      "This package provides a simple, fast MySQL library for Ruby, binding to
@@ -4047,8 +3887,7 @@ libmysql.")
          (replace 'check
           (lambda _ (invoke "rspec" "spec/"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Abstract base class with no predefined methods")
     (description
      "BlankSlate provides an abstract base class with no predefined
@@ -4075,9 +3914,7 @@ as a base class when writing classes that depend upon
      ;; https://github.com/cldwalker/bond/issues/46).
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)
-       ("ruby-bacon-bits" ,ruby-bacon-bits)
-       ("ruby-mocha-on-bacon" ,ruby-mocha-on-bacon)))
+     (list ruby-bacon ruby-bacon-bits ruby-mocha-on-bacon))
     (synopsis "Bond can provide custom autocompletion for arguments, methods
 and more")
     (description
@@ -4121,7 +3958,7 @@ irb's last-word approach.")
                         (find-files "./test" ".*\\.rb"))))
              #t)))))
     (inputs
-     `(("libidn" ,libidn)))
+     (list libidn))
     (synopsis "Ruby Bindings for the GNU LibIDN library")
     (description
      "Ruby Bindings for the GNU LibIDN library, an implementation of the
@@ -4162,10 +3999,9 @@ encoded form.")
                                  "/lib\""))))
              #t)))))
     (propagated-inputs
-     `(("ruby-blankslate" ,ruby-blankslate)))
+     (list ruby-blankslate))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-test-unit))
     (synopsis "Instantiate an arbitrary Ruby class")
     (description
      "Instantiator lets you instantiate an arbitrary Ruby class without
@@ -4199,12 +4035,9 @@ knowing anything about the constructor.")
                                 "/lib\""))))
             #t)))))
     (propagated-inputs
-     `(("ruby-instantiator" ,ruby-instantiator)
-       ("ruby-metaclass" ,ruby-metaclass)))
+     (list ruby-instantiator ruby-metaclass))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-blankslate" ,ruby-blankslate)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-blankslate ruby-test-unit))
     (synopsis "Dynamic inspection of the method hierarchy on a Ruby object")
     (description
      "Introspection provides tools to inspect the hierarchy of method
@@ -4234,9 +4067,7 @@ definitions on a Ruby object.")
                "task :test => %w[test:unit]"))
             #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-test-unit ruby-rake-compiler))
     (synopsis "Extensible Markdown to (X)HTML converter")
     (description
      "Redcarpet is an extensible Ruby library for Markdown processing and
@@ -4259,7 +4090,7 @@ conversion to (X)HTML.")
   (arguments
    '(#:tests? #f)) ; No included tests
   (propagated-inputs
-   `(("ruby-listen" ,ruby-listen)))
+   (list ruby-listen))
   (synopsis "Run a process, and restart when some monitored files change")
   (description
     "Rerun is a tool to launch programs, then monitor the file system, and
@@ -4313,7 +4144,7 @@ Ruby, but can be used for all programs.")
        ("ruby-rspec" ,ruby-rspec)
        ("ruby-wwtd" ,ruby-wwtd)))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Minitest with extra features")
     (description
      "Maxitest is a wrapper around Minitest with extra functionality such
@@ -4344,12 +4175,12 @@ number, support for interrupted tests, better backtraces, and more.")
                 "true\n"))
              #t)))))
     (native-inputs
-     `(("ruby-introspection" ,ruby-introspection)))
+     (list ruby-introspection))
     (synopsis "Mocking and stubbing library for Ruby")
     (description
      "Mocha is a mocking and stubbing library with JMock/SchMock syntax, which
 allows mocking and stubbing of methods on real (non-mock) classes.")
-    (home-page "https://mocha.jamesmead.org")
+    (home-page "https://mocha.jamesmead.org/")
     ;; Mocha can be used with either license at the users choice.
     (license (list license:expat license:ruby))))
 
@@ -4368,7 +4199,7 @@ allows mocking and stubbing of methods on real (non-mock) classes.")
     (arguments
      ;; rubygems.org release missing tests
      '(#:tests? #f))
-    (propagated-inputs `(("ruby-mocha" ,ruby-mocha)))
+    (propagated-inputs (list ruby-mocha))
     (synopsis "Mocha adapter for Bacon")
     (description
      "This package provides a Mocha adapter for Bacon, allowing you to use the
@@ -4389,9 +4220,7 @@ Mocha stubbing and mocking library with Bacon, a small RSpec clone.")
                 "07c4v97zl1daabmri9zlbzs6yvkl56z1q14bw74d53jdj0c17nhx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-mocha ruby-test-unit))
     (synopsis "Ruby implementation of the SSH2 client protocol")
     (description "@code{Net::SSH} is a pure-Ruby implementation of the SSH2
 client protocol.  It allows you to write programs that invoke and interact
@@ -4415,11 +4244,9 @@ with processes on remote servers, via SSH2.")
         (base32 "1nyn17sy71fn7zs3y6wbgcn35318c10flqgc0582409095x4h0sx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)
-       ("ruby-mocha" ,ruby-mocha)))
+     (list bundler ruby-test-unit ruby-mocha))
     (propagated-inputs
-     `(("ruby-net-ssh" ,ruby-net-ssh)))
+     (list ruby-net-ssh))
     (synopsis "Pure-Ruby SCP client library")
     (description "@code{Net::SCP} is a pure-Ruby implementation of the SCP
 client protocol.")
@@ -4429,16 +4256,16 @@ client protocol.")
 (define-public ruby-minitest
   (package
     (name "ruby-minitest")
-    (version "5.12.2")
+    (version "5.14.4")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "minitest" version))
               (sha256
                (base32
-                "0zjm24aiz42i9n37mcw8lydd7n0y7wfk27by06jx77ypcld3qvkw"))))
+                "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Small test suite library for Ruby")
     (description "Minitest provides a complete suite of Ruby testing
 facilities supporting TDD, BDD, mocking, and benchmarking.")
@@ -4491,12 +4318,9 @@ facilities supporting TDD, BDD, mocking, and benchmarking.")
                (("%q<cucumber>.*") "%q<cucumber>, [\">= 0\"])\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-test-construct" ,ruby-test-construct)))
+     (list bundler ruby-cucumber ruby-bump ruby-test-construct))
     (synopsis "Run code around tests in Minitest")
     (description
      "This library provides a way to run code around tests in Minitest,
@@ -4516,8 +4340,7 @@ written using either the unit test or spec style.")
                 "179d6pj56l9xzm46fqsqj10mzjkr1f9fv4cxa8wvchs97hqz33w1"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list ruby-hoe ruby-minitest))
     (synopsis "Fast test suite runner for minitest")
     (description "Minitest-sprint is a test runner for minitest that makes it
 easier to re-run individual failing tests.")
@@ -4536,9 +4359,9 @@ easier to re-run individual failing tests.")
                 "0zhdwcl6bgha61qiyfvr7zs7ywaxc33wmj9xhxl8jdmpdvifvfaj"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Bacon compatibility library for minitest")
     (description "Minitest-bacon extends minitest with bacon-like
 functionality, making it easier to migrate test suites from bacon to minitest.")
@@ -4558,9 +4381,9 @@ functionality, making it easier to migrate test suites from bacon to minitest.")
          "1zgjslp6d7dzcn8smj595idymgd5j603p9g2jqkfgi28sqbhz6m0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Allows a few specific tests to be focused on")
     (description
      "@code{minitest-focus} gives the ability focus on a few tests with ease
@@ -4594,8 +4417,7 @@ is to be run.")
              (lambda _
                (invoke "script/test"))))))
       (native-inputs
-       `(("bundler" ,bundler)
-         ("ruby-turn" ,ruby-turn)))
+       (list bundler ruby-turn))
       (synopsis "Pretty-print hashes and arrays in MiniTest")
       (description
        "@code{minitest-pretty_diff} monkey-patches
@@ -4631,8 +4453,7 @@ structures when tests fail.")
                (("require 'byebug'") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)))
+     (list bundler ruby-minitest))
     (synopsis "Extra features and changes to MiniTest")
     (description "@code{MiniTest Moar} add some additional features and
 changes some default behaviours in MiniTest.  For instance, Moar replaces the
@@ -4653,7 +4474,8 @@ MiniTest @code{Object#stub} with a global @code{stub} method.")
          "1hbq9jk904xkz868yha1bqcm6azm7kmjsll2k4pn2nrcib508h2a"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f          ; Test suite has bitrotted.
+       #:phases
        (modify-phases %standard-phases
          (add-before 'check 'clean-dependencies
            (lambda _
@@ -4663,10 +4485,8 @@ MiniTest @code{Object#stub} with a global @code{stub} method.")
                (("require 'minitest/bisect'") ""))
              #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-minitest-pretty-diff" ,ruby-minitest-pretty-diff)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-moar" ,ruby-minitest-moar)))
+     (list ruby-hoe ruby-minitest-pretty-diff ruby-minitest-focus
+           ruby-minitest-moar))
     (synopsis "Bonus assertions for @code{Minitest}")
     (description
      "Minitest bonus assertions provides extra MiniTest assertions.  For
@@ -4704,13 +4524,9 @@ instance, it provides @code{assert_true}, @code{assert_false} and
                ((".*%q<rubocop>.*") "\n"))
              #t)))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-builder" ,ruby-builder)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-progressbar" ,ruby-progressbar)))
+     (list ruby-ansi ruby-builder ruby-minitest ruby-progressbar))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-maruku" ,ruby-maruku)))
+     (list bundler ruby-maruku))
     (synopsis "Enhanced reporting for Minitest tests")
     (description
      "@code{minitest/reporters} provides a custom Minitest runner to improve
@@ -4738,7 +4554,7 @@ reporter.")
      ;; https://github.com/blowmage/minitest-rg/pull/13
      `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Coloured output for Minitest")
     (description
      "@code{minitest-rg} changes the colour of the output from Minitest.")
@@ -4759,7 +4575,7 @@ reporter.")
          "1pp3k2608spj4kvqy2y16hs18an917g6vwgvphrfhjviac83090x"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Adjust minitest behaviour for calling expectation methods")
     (description
      "Minitest-global_expectations allows continued use of expectation methods
@@ -4781,10 +4597,12 @@ minitest 5.12, and is planned to be removed from minitest 6.")
          "05z8r6sw3fz4s44fs1150ndlcmcy82vlxmhps5nncg8vk59k3gmf"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "spec"))
+     '(#:test-target "spec"
+       ;; Test suite is incompatible with ruby-2.7.
+       ;; https://github.com/jeremyevans/minitest-hooks/issues/19
+       #:tests? #f))
     (native-inputs
-     `(("ruby-sequel" ,ruby-sequel)
-       ("ruby-sqlite3" ,ruby-sqlite3)))
+     (list ruby-sequel ruby-sqlite3))
     (synopsis "Hooks for the minitest framework")
     (description
      "Minitest-hooks adds @code{around}, @code{before_all}, @code{after_all},
@@ -4849,7 +4667,7 @@ URIs using the normal URI.parse method.")
                 "0c9rk23ilhc0n4489y6lda2wzphpzh6ish6fahlbpjhxn82wb931"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Recursively merge hashes")
     (description
      "Deep Merge is a set of utility functions for @code{Hash}.  It permits
@@ -4874,8 +4692,7 @@ you to merge elements inside a hash together recursively.")
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       ;; Make the default git binary an absolute path to the
                       ;; store.
-                      (let ((git    (string-append (assoc-ref inputs "git")
-                                                   "/bin/git"))
+                      (let ((git    (search-input-file inputs "/bin/git"))
                             (config (string-append
                                      (assoc-ref outputs "out")
                                      "/lib/ruby/vendor_ruby/gems/git-"
@@ -4885,7 +4702,7 @@ you to merge elements inside a hash together recursively.")
                            (string-append "'" git "'")))
                         #t))))))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (synopsis "Ruby wrappers for Git")
     (description "Ruby/Git is a Ruby library that can be used to create, read
 and manipulate Git repositories by wrapping system calls to the git binary.")
@@ -4914,8 +4731,7 @@ and manipulate Git repositories by wrapping system calls to the git binary.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "HOCON config library")
     (description
      "This package provides Ruby support for the @acronym{HOCON,
@@ -4936,7 +4752,7 @@ objects back to a @code{String}.")
                 "0bfm8535g0rkn9cbjndkckf0f7a3wj0rg4rqhrpsgxnbfdf2lm0p"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Ruby command line option parser")
     (description "Slop provides a Ruby domain specific language for gathering
 options and parsing command line flags.")
@@ -4986,7 +4802,7 @@ Nokogiri, Ox, or REXML.")
                 "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Multipart POST library for Ruby")
     (description "Multipart-Post Adds multipart POST capability to Ruby's
 net/http library.")
@@ -4996,7 +4812,7 @@ net/http library.")
 (define-public ruby-multi-json
   (package
     (name "ruby-multi-json")
-    (version "1.13.1")
+    (version "1.15.0")
     (source
      (origin
        (method git-fetch)
@@ -5008,23 +4824,17 @@ net/http library.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "18wpb6p01rrkl4v33byh70vxj2a5jxkfxzv3pz8z6pssy4ymwkm4"))))
+         "0mkdvy6i00yyksjvnv6znh7wf89j9506qzzjq6bsbmbkyqrszp4d"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remove-signing-key-reference
+         (add-before 'check 'pre-check
            (lambda _
-             (substitute* "multi_json.gemspec"
-               ((".*spec.signing_key.*") ""))
-             #t)))))
+             ;; As seen in the .travis.yml file.
+             (setenv "SKIP_ADAPTERS" "gson,jr_jackson,nsjsonserialization"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-json-pure" ,ruby-json-pure)
-       ("ruby-oj" ,ruby-oj)
-       ("ruby-yajl-ruby" ,ruby-yajl-ruby)))
+     (list ruby-rspec ruby-json-pure ruby-oj ruby-yajl-ruby))
     (synopsis "Common interface to multiple JSON libraries for Ruby")
     (description
      "This package provides a common interface to multiple JSON libraries,
@@ -5094,7 +4904,7 @@ various relational database implementations.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-mimemagic" ,ruby-mimemagic)))
+     (list ruby-mimemagic))
     (synopsis "MIME type detection using magic numbers, filenames and extensions")
     (description
      "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
@@ -5160,7 +4970,10 @@ to reproduce user environments.")
                (base32
                 "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"))))))
 
-(define-public ruby-nokogiri
+;; TODO: In the next rebuild cycle, provide texlive a version of ruby-hydra
+;; that does not depend on byebug and rspec, so that their dependencies can
+;; be updated more freely.  For now pin this version to avoid rebuilds.
+(define-public ruby-nokogiri-1.10
   (package
     (name "ruby-nokogiri")
     (version "1.10.9")
@@ -5195,20 +5008,49 @@ to reproduce user environments.")
                                  "/lib'\n"))))
              #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (inputs
-     `(("zlib" ,zlib)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list zlib libxml2 libxslt))
     (propagated-inputs
-     `(("ruby-mini-portile" ,ruby-mini-portile-2)
-       ("ruby-pkg-config" ,ruby-pkg-config)))
+     (list ruby-mini-portile-2 ruby-pkg-config))
     (synopsis "HTML, XML, SAX, and Reader parser for Ruby")
     (description "Nokogiri (鋸) parses and searches XML/HTML, and features
 both CSS3 selector and XPath 1.0 support.")
     (home-page "http://www.nokogiri.org/")
     (license license:expat)))
 
+;; nokogiri requires this version exactly.
+(define-public ruby-mini-portile-2.6.1
+  (package
+    (inherit ruby-mini-portile)
+    (version "2.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mini_portile2" version))
+              (sha256
+               (base32
+                "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq"))))))
+
+(define-public ruby-nokogiri
+  (package
+    (inherit ruby-nokogiri-1.10)
+    (version "1.12.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "nokogiri" version))
+              (sha256
+               (base32
+                "1v02g7k7cxiwdcahvlxrmizn3avj2q6nsjccgilq1idc89cr081b"))))
+    (arguments
+     '(#:tests? #f                      ;XXX: no tests in rubygem
+       #:gem-flags (list "--" "--use-system-libraries"
+                         (string-append "--with-xml2-include="
+                                        (assoc-ref %build-inputs "libxml2")
+                                        "/include/libxml2"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs ruby-nokogiri-1.10)
+       (replace "ruby-mini-portile" ruby-mini-portile-2.6.1)))))
+
 (define-public ruby-method-source
   (package
     (name "ruby-method-source")
@@ -5231,7 +5073,7 @@ both CSS3 selector and XPath 1.0 support.")
                (("git ls-files") "find . -type f"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Retrieve the source code for Ruby methods")
     (description "Method_source retrieves the source code for Ruby methods.
 Additionally, it can extract source code from Proc and Lambda objects or just
@@ -5273,7 +5115,7 @@ for select languages.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f))          ;no test suite in gem
     (propagated-inputs
-     `(("ruby-gherkin" ,ruby-gherkin)))
+     (list ruby-gherkin))
     (synopsis "Gherkin test suite analysis tool")
     (description "CukeModeler facilitates modeling a test suite that is
 written in Gherkin (e.g.  Cucumber, SpecFlow, Lettuce, etc.).  It does this by
@@ -5334,15 +5176,15 @@ then be analyzed or manipulated more easily than the underlying AST layer.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-cuke-modeler" ,ruby-cuke-modeler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-spinach" ,ruby-spinach)))
+     (list ruby-bump
+           ruby-cucumber
+           ruby-cuke-modeler
+           ruby-minitest
+           ruby-rake
+           ruby-rspec
+           ruby-spinach))
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Run tests in parallel")
     (description
      "This package can speed up @code{Test::Unit}, @code{RSpec},
@@ -5365,14 +5207,11 @@ across multiple CPU cores.")
     (arguments
      '(#:tests? #f)) ; tests not included in gem
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-cliver" ,ruby-cliver)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-racc" ,ruby-racc)))
+     (list bundler ruby-cliver ruby-simplecov ruby-racc))
     (inputs
-     `(("ragel" ,ragel)))
+     (list ragel))
     (propagated-inputs
-     `(("ruby-ast" ,ruby-ast)))
+     (list ruby-ast))
     (synopsis "Ruby parser written in pure Ruby")
     (description
      "This package provides a Ruby parser written in pure Ruby.")
@@ -5393,7 +5232,7 @@ across multiple CPU cores.")
     (build-system ruby-build-system)
     (native-inputs
      ;; TODO: Add ruby-minitest-proveit once available.
-     `(("hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "ParseTree fork which includes generic S-exp processing tools")
     (description "The sexp_processor package is derived from ParseTree, but
 contrary to ParseTree, it includes all the generic S-exp processing tools.
@@ -5415,11 +5254,9 @@ Amongst the included tools are @code{Sexp}, @code{SexpProcessor} and
          "09qcdyjjw3p7g6cjm5m9swkms1xnv35ndiy7yw24cas16qrhha6c"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("hoe" ,ruby-hoe)
-       ("racc" ,ruby-racc)
-       ("unifdef" ,unifdef)))
+     (list ruby-hoe ruby-racc unifdef))
     (propagated-inputs
-     `(("ruby-sexp-processor" ,ruby-sexp-processor)))
+     (list ruby-sexp-processor))
     (home-page "https://github.com/seattlerb/ruby_parser/")
     (synopsis "Ruby parser written in pure Ruby")
     (description "The ruby_parser (RP) package provides a Ruby parser written
@@ -5448,7 +5285,7 @@ back to Ruby via the @code{ruby2ruby} library.")
                ;; Loosen the requirement for pdf-inspector
                (("~> 1\\.0\\.7") ">= 0")))))))
     (propagated-inputs
-     `(("ruby-coderay" ,ruby-coderay)))
+     (list ruby-coderay))
     (synopsis "Tool for writing manuals for Prawn and Prawn accessories")
     (description
      "This package provides a tool for writing manuals for Prawn and Prawn
@@ -5471,12 +5308,9 @@ accessories")
     (arguments
      '(#:test-target "spec"))
     (propagated-inputs
-     `(("ruby-highline" ,ruby-highline)
-       ("ruby-options" ,ruby-options)))
+     (list ruby-highline ruby-options))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-timecop" ,ruby-timecop)))
+     (list bundler ruby-rspec ruby-timecop))
     (synopsis
      "Ruby library for displaying progress bars")
     (description
@@ -5544,8 +5378,7 @@ The output can be customized with a formatting system.")
     (arguments
      '(#:tests? #f)) ; no tests
     (propagated-inputs
-     `(("ruby-coderay" ,ruby-coderay)
-       ("ruby-method-source" ,ruby-method-source)))
+     (list ruby-coderay ruby-method-source))
     (synopsis "Ruby REPL")
     (description "Pry is an IRB alternative and runtime developer console for
 Ruby.  It features syntax highlighting, a plugin architecture, runtime
@@ -5597,10 +5430,7 @@ invocation, and source and documentation browsing.")
                          "xit \"complains when coverage is bad\""))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-bump ruby-minitest ruby-rspec ruby-simplecov))
     (synopsis "Code coverage reporting tool")
     (description
      "This package provides actionable code coverage reports for Ruby
@@ -5621,7 +5451,7 @@ development tools to catch coverage problems early.")
           "1v1rk78khwq87ar300lwll570zxpkq9rjnpgc9mgsyd6mm9qjz4w"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Ruby lexer")
     (description
      "Oedipus Lex is a lexer generator in the same family as Rexical and Rex.
@@ -5661,17 +5491,16 @@ Oedipus matches on the first match, not the longest.")
           (lambda _
             (invoke "gem" "build" "guard.gemspec"))))))
     (propagated-inputs
-     `(("ruby-formatador" ,ruby-formatador)
-       ("ruby-listen" ,ruby-listen)
-       ("ruby-lumberjack" ,ruby-lumberjack)
-       ("ruby-nenv" ,ruby-nenv)
-       ("ruby-notiffany" ,ruby-notiffany)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-shellany" ,ruby-shellany)
-       ("ruby-thor" ,ruby-thor)))
+     (list ruby-formatador
+           ruby-listen
+           ruby-lumberjack
+           ruby-nenv
+           ruby-notiffany
+           ruby-pry
+           ruby-shellany
+           ruby-thor))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Tool to handle events on file system modifications")
     (description
      "Guard is a command line tool to easily handle events on file system
@@ -5698,9 +5527,7 @@ file or directories are modified.")
        ;; capybara is available.
        '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-colorize" ,ruby-colorize)
-       ("ruby-gherkin-ruby" ,ruby-gherkin-ruby)
-       ("ruby-json" ,ruby-json)))
+     (list ruby-colorize ruby-gherkin-ruby ruby-json))
     (synopsis "Gherkin-based BDD framework")
     (description
      "Spinach is a high-level @acronym{BDD, Behavior-driven development}
@@ -5744,14 +5571,9 @@ define executable specifications of your code.")
                (("group :secondary") "[].each"))
              #t)))))
     (propagated-inputs
-     `(("ruby-pandoc-ruby" ,ruby-pandoc-ruby)
-       ("ruby-sassc" ,ruby-sassc)))
+     (list ruby-pandoc-ruby ruby-sassc))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-builder" ,ruby-builder)
-       ("ruby-erubis" ,ruby-erubis)
-       ("ruby-markaby" ,ruby-markaby)))
+     (list bundler ruby-yard ruby-builder ruby-erubis ruby-markaby))
     (synopsis "Generic interface to multiple Ruby template engines")
     (description
      "Tilt is a thin interface over a number of different Ruby template
@@ -5819,7 +5641,7 @@ utilities for Ruby.")
     (propagated-inputs
      `(("ruby-concurrent-ruby" ,ruby-concurrent)))
     (native-inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "Time zone library for Ruby")
     (description "TZInfo is a Ruby library that provides daylight savings
 aware transformations between times in different time zones.")
@@ -5864,7 +5686,7 @@ aware transformations between times in different time zones.")
                (setenv "cc" ,(cc-for-target))
              #t)))))
     (propagated-inputs
-     `(("ruby-tzinfo" ,ruby-tzinfo)))
+     (list ruby-tzinfo))
     (native-inputs
      `(("tzdata"
         ,(file-union "tzdata-for-ruby-tzdata-info"
@@ -5927,9 +5749,9 @@ IANA Time Zone database packaged as Ruby modules for use with @code{TZInfo}.")
           (lambda _
             (invoke "gem" "build" "rb-inotify.gemspec"))))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (native-inputs
-     `(("ruby-yard" ,ruby-yard)))
+     (list ruby-yard))
     (synopsis "Ruby wrapper for Linux's inotify")
     (description "rb-inotify is a simple wrapper over the @code{inotify} Linux
 kernel subsystem for monitoring changes to files and directories.")
@@ -5949,7 +5771,7 @@ kernel subsystem for monitoring changes to files and directories.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)) ; no tests included
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Open the current REPL line in an editor")
     (description
      "This gem provides a plugin for the Ruby REPL to enable opening the
@@ -5982,11 +5804,9 @@ current line in an external editor.")
                "gem 'rake'\ngem 'rdoc'\ngem 'json'\n"))
             #t)))))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)))
+     (list ruby-json))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-hoe" ,ruby-hoe)))
+     (list bundler ruby-minitest ruby-hoe))
     (synopsis "Generate searchable RDoc documentation")
     (description
      "SDoc is an RDoc documentation generator to build searchable HTML
@@ -5997,13 +5817,13 @@ documentation for Ruby code.")
 (define-public ruby-tins
   (package
     (name "ruby-tins")
-    (version "1.15.0")
+    (version "1.29.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "tins" version))
               (sha256
                (base32
-                "09whix5a7ics6787zrkwjmp16kqyh6560p9f317syks785805f7s"))))
+                "0nzp88y19rqlcizp1nw8m44fvfxs9g3bhjpscz44dwfawfrmr0cb"))))
     (build-system ruby-build-system)
     ;; This gem needs gem-hadar at development time, but gem-hadar needs tins
     ;; at runtime.  To avoid the dependency on gem-hadar we disable rebuilding
@@ -6019,6 +5839,8 @@ documentation for Ruby code.")
             (substitute* "tins.gemspec"
               (("\"lib/spruz\", ") ""))
             (invoke "gem" "build" "tins.gemspec"))))))
+    (propagated-inputs
+     (list ruby-sync))
     (synopsis "Assorted tools for Ruby")
     (description "Tins is a Ruby library providing assorted tools.")
     (home-page "https://github.com/flori/tins")
@@ -6045,9 +5867,7 @@ documentation for Ruby code.")
           (lambda _
             (invoke "gem" "build" "gem_hadar.gemspec"))))))
     (propagated-inputs
-     `(("git" ,git)
-       ("ruby-tins" ,ruby-tins)
-       ("ruby-yard" ,ruby-yard)))
+     (list git ruby-tins ruby-yard))
     (synopsis "Library for the development of Ruby gems")
     (description
      "This library contains some useful functionality to support the
@@ -6094,7 +5914,7 @@ development of Ruby gems.")
     (propagated-inputs
      `(("ruby-minitest-4" ,ruby-minitest-4)))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Adapter library between minitest and test/unit")
     (description
      "This library bridges the gap between the small and fast minitest and
@@ -6127,10 +5947,9 @@ Ruby's large and slower test/unit.")
           (lambda _
             (invoke "gem" "build" "term-ansicolor.gemspec"))))))
     (propagated-inputs
-     `(("ruby-tins" ,ruby-tins)))
+     (list ruby-tins))
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("ruby-minitest-tu-shim" ,ruby-minitest-tu-shim)))
+     (list ruby-gem-hadar ruby-minitest-tu-shim))
     (synopsis "Ruby library to control the attributes of terminal output")
     (description
      "This Ruby library uses ANSI escape sequences to control the attributes
@@ -6154,7 +5973,7 @@ of terminal output.")
   (arguments
    '(#:tests? #f)) ; No included tests
   (propagated-inputs
-   `(("ruby-lino" ,ruby-lino)))
+   (list ruby-lino))
   (synopsis "Ruby wrapper around the Terraform command line interface")
   (description
    "This package provides a Ruby wrapper around the Terraform command line
@@ -6174,8 +5993,7 @@ interface so that Terraform can be more easily invoked from Ruby code.")
                 "0ld3ng37y92kv9vqnachw1l3n07hsc8hrnjs9d840liw0mysf1vp"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("bundler" ,bundler)))
+     (list ruby-gem-hadar bundler))
     (synopsis "Create a process tree data structure")
     (description
      "This library uses the output of the @code{ps} command to create a
@@ -6196,13 +6014,9 @@ process tree data structure for the current host.")
                 "196zhgcygrnx09bb9mh22qas03rl9avzx8qs0wnxznpin4pffwcl"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-tins" ,ruby-tins)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)
-       ("ruby-pstree" ,ruby-pstree)
-       ("ruby-pry-editline" ,ruby-pry-editline)))
+     (list ruby-tins ruby-term-ansicolor ruby-pstree ruby-pry-editline))
     (native-inputs
-     `(("ruby-gem-hadar" ,ruby-gem-hadar)
-       ("bundler" ,bundler)))
+     (list ruby-gem-hadar bundler))
     (synopsis "Command line tools for working with Ruby")
     (description
      "This package provides assorted command line tools that may be useful
@@ -6254,13 +6068,13 @@ a native C extension.")
 (define-public ruby-json-pure
   (package
     (name "ruby-json-pure")
-    (version "2.2.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "json_pure" version))
               (sha256
                (base32
-                "0m0j1mfwv0mvw72kzqisb26xjl236ivqypw1741dkis7s63b8439"))))
+                "00pziwkfqwk8vj19s65sdki31q1wvmf5v9b3sfglxm94qfvas1lx"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -6269,28 +6083,9 @@ a native C extension.")
            (lambda _
              (substitute* "Rakefile"
                ;; Since this is not a git repository, do not call 'git'.
-               (("`git ls-files`") "`find . -type f |sort`")
-               ;; Loosen dependency constraint.
-               (("'test-unit', '~> 2.0'") "'test-unit', '>= 2.0'"))
-             #t))
-         (add-after 'replace-git-ls-files 'regenerate-gemspec
-           (lambda _
-             ;; Regenerate gemspec so loosened dependency constraints are
-             ;; propagated.
-             (invoke "rake" "gemspec")))
-         (add-after 'regenerate-gemspec 'fix-json-java.gemspec
-           (lambda _
-             ;; This gemspec doesn't look to be generated by the above
-             ;; command, so patch it separately.
-             (substitute* "json-java.gemspec"
-               (("%q<test-unit>\\.freeze, \\[\"~> 2\\.0\"\\]")
-                "%q<test-unit>.freeze, [\">= 2.0\"]"))
-             #t)))))
+               (("`git ls-files`") "`find . -type f |sort`")))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ragel" ,ragel)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ragel ruby-simplecov ruby-test-unit which))
     (synopsis "JSON implementation in pure Ruby")
     (description
      "This package provides a JSON implementation written in pure Ruby.")
@@ -6325,9 +6120,7 @@ a native C extension.")
                (("Codacy::Reporter\\.start") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rbnacl" ,ruby-rbnacl)))
+     (list bundler ruby-rspec ruby-rbnacl))
     (synopsis "Ruby implementation of the JSON Web Token standard")
     (description
      "This package provides a pure Ruby implementation of the RFC 7519 OAuth
@@ -6391,16 +6184,13 @@ a native C extension.")
                ((".*rubocop.*") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(;; ruby-thor is used for the command line interface, and is referenced
-       ;; in the wrapper, and therefore just needs to be an input.
-       ("ruby-thor" ,ruby-thor)))
+     (list ;; ruby-thor is used for the command line interface, and is referenced
+           ;; in the wrapper, and therefore just needs to be an input.
+           ruby-thor))
     (propagated-inputs
-     `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
-       ("ruby-rb-inotify" ,ruby-rb-inotify)
-       ("ruby-dep" ,ruby-dep)))
+     (list ruby-rb-fsevent ruby-rb-inotify ruby-dep))
     (synopsis "Listen to file modifications")
     (description "The Listen gem listens to file modifications and notifies
 you about the changes.")
@@ -6410,37 +6200,27 @@ you about the changes.")
 (define-public ruby-loofah
   (package
     (name "ruby-loofah")
-    (version "2.3.1")
+    (version "2.13.0")
+    (home-page "https://github.com/flavorjones/loofah")
     (source
      (origin
-       (method url-fetch)
-       (uri (rubygems-uri "loofah" version))
+       ;; Build from git because the gem lacks tests.
+       (method git-fetch)
+       (uri (git-reference (url home-page)
+                           (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0npqav026zd7r4qdidq9x5nxcp2dzg71bnp421xxx7sngbxf2xbd"))))
+         "0rmsm7mckiq0gslfqdl02yvn500n42v84gq28qjqn4yq9jwfs9ga"))))
     (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-unnecessary-dependencies
-           (lambda _
-             ;; concourse is a development tool which is unused, so remove it
-             ;; so it's not required.
-             (substitute* "Rakefile"
-               (("require \"concourse\"") "")
-               (("Concourse\\.new.*") "task :concourse do\n"))
-             #t)))))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rr" ,ruby-rr)))
+     (list ruby-hoe ruby-hoe-markdown ruby-rr))
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-crass" ,ruby-crass)))
+     (list ruby-nokogiri ruby-crass))
     (synopsis "Ruby library for manipulating and transforming HTML/XML")
     (description
      "Loofah is a general library for manipulating and transforming HTML/XML
 documents and fragments.  It's built on top of Nokogiri and libxml2.")
-    (home-page "https://github.com/flavorjones/loofah")
     (license license:expat)))
 
 (define-public ruby-activesupport
@@ -6463,12 +6243,12 @@ documents and fragments.  It's built on top of Nokogiri and libxml2.")
              ;; There are no tests, instead attempt to load the library.
              (invoke "ruby" "-Ilib" "-r" "active_support"))))))
     (propagated-inputs
-     `(("ruby-concurrent" ,ruby-concurrent)
-       ("ruby-i18n" ,ruby-i18n)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-tzinfo" ,ruby-tzinfo)
-       ("ruby-tzinfo-data" ,ruby-tzinfo-data)
-       ("ruby-zeitwerk" ,ruby-zeitwerk)))
+     (list ruby-concurrent
+           ruby-i18n
+           ruby-minitest
+           ruby-tzinfo
+           ruby-tzinfo-data
+           ruby-zeitwerk))
     (synopsis "Ruby on Rails utility library")
     (description "ActiveSupport is a toolkit of support libraries and Ruby
 core extensions extracted from the Rails framework.  It includes support for
@@ -6514,11 +6294,11 @@ multibyte strings, internationalization, time zones, and testing.")
                 "1qg0iyw450lw6d0j1ghzg79a6l60nm1m4qmrzwzybi585861jxcx"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rake-compiler))
     (inputs
-     `(("gumbo-parser" ,gumbo-parser)))
+     (list gumbo-parser))
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-nokogiri))
     (synopsis "Ruby bindings to the Gumbo HTML5 parser")
     (description
      "Nokogumbo allows a Ruby program to invoke the Gumbo HTML5 parser and
@@ -6545,11 +6325,9 @@ access the result as a Nokogiri parsed document.")
                 "0lj0q9yhjp0q0in5majkshnki07mw8m2vxgndx4m5na6232aszl0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-crass" ,ruby-crass)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-nokogumbo" ,ruby-nokogumbo)))
+     (list ruby-crass ruby-nokogiri ruby-nokogumbo))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Whitelist-based HTML and CSS sanitizer")
     (description
      "Sanitize is a whitelist-based HTML and CSS sanitizer.  Given a list of
@@ -6557,6 +6335,24 @@ acceptable elements, attributes, and CSS properties, Sanitize will remove all
 unacceptable HTML and/or CSS from a string.")
     (license license:expat)))
 
+(define-public ruby-sync
+  (package
+    (name "ruby-sync")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sync" version))
+        (sha256
+         (base32
+          "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6"))))
+    (build-system ruby-build-system)
+    (synopsis "Ruby module with a two-phase lock and counter")
+    (description "This package provides a Ruby module that provides a two-phase
+lock with a counter.")
+    (home-page "https://github.com/ruby/sync")
+    (license license:bsd-2)))
+
 (define-public ruby-oj
   (package
     (name "ruby-oj")
@@ -6584,9 +6380,7 @@ unacceptable HTML and/or CSS from a string.")
                (("Bundler\\.with_clean_env") "1.times")
                (("bundle exec ") "")))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rspec ruby-rake-compiler))
     (synopsis "JSON parser for Ruby optimized for speed")
     (description
      "Oj is a JSON parser and generator for Ruby, where the encoding and
@@ -6664,11 +6458,9 @@ alternative to Marshal for Object serialization. ")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-hoe" ,ruby-hoe)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-hoe ruby-rspec))
     (inputs
-     `(("postgresql" ,postgresql)))
+     (list postgresql))
     (synopsis "Ruby interface to PostgreSQL")
     (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
 with PostgreSQL 9.0 and later.")
@@ -6678,31 +6470,6 @@ with PostgreSQL 9.0 and later.")
 (define-public ruby-byebug
   (package
     (name "ruby-byebug")
-    (version "9.0.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "byebug" version))
-       (sha256
-        (base32
-         "1kbfcn65rgdhi72n8x9l393b89rvi5z542459k7d1ggchpb0idb0"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (synopsis "Debugger for Ruby 2")
-    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
-TracePoint C API for execution control and the Debug Inspector C API for call
-stack navigation.  The core component provides support that front-ends can
-build on.  It provides breakpoint handling and bindings for stack frames among
-other things and it comes with a command line interface.")
-    (home-page "https://github.com/deivid-rodriguez/byebug")
-    (license license:bsd-2)))
-
-;;; TODO: Make it the default byebug in core-updates.
-(define-public ruby-byebug-11
-  (package
-    (inherit ruby-byebug)
-    (name "ruby-byebug")
     (version "11.1.3")
     (source
      (origin
@@ -6726,9 +6493,9 @@ other things and it comes with a command line interface.")
                (("load File\\.expand_path\\(\"bundle\".*") "")
                (("require \"bundler/setup\".*") "")))
            #t))))
+    (build-system ruby-build-system)
     (arguments
-     `(#:tests? #t
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-tmp-path-sensitive-test
            (lambda _
@@ -6739,18 +6506,32 @@ other things and it comes with a command line interface.")
          (add-before 'build 'compile
            (lambda _
              (invoke "rake" "compile")))
+         (add-before 'check 'disable-misbehaving-test
+           ;; Expects 5, gets 162. From a file containing ~10 lines.
+           (lambda _
+             (substitute* "test/commands/finish_test.rb"
+               (("test_finish_inside_autoloaded_files")
+                "finish_inside_autoloaded_files"))))
          (add-before 'check 'set-home
            (lambda _
              (setenv "HOME" (getcwd))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-chandler" ,ruby-chandler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-yard" ,ruby-yard)))))
+     (list bundler
+           ruby-chandler
+           ruby-minitest
+           ruby-pry
+           ruby-rake-compiler
+           ruby-rubocop
+           ruby-yard))
+    (synopsis "Debugger for Ruby 2")
+    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
+TracePoint C API for execution control and the Debug Inspector C API for call
+stack navigation.  The core component provides support that front-ends can
+build on.  It provides breakpoint handling and bindings for stack frames among
+other things and it comes with a command line interface.")
+    (home-page "https://github.com/deivid-rodriguez/byebug")
+    (license license:bsd-2)))
 
 (define-public ruby-netrc
   (package
@@ -6772,10 +6553,13 @@ other things and it comes with a command line interface.")
            (lambda _
              (for-each (lambda (file)
                          (invoke "ruby" "-Itest" file))
-                       (find-files "./test" "test_.*\\.rb"))
-             #t)))))
+                       (find-files "./test" "test_.*\\.rb"))))
+         (add-before 'check 'patch-tests-for-newer-ruby
+           (lambda _
+             (substitute* "test/test_netrc.rb"
+               (("Dir.pwd, '.netrc'") "Netrc.home_path, '.netrc'")))))))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)))
+     (list ruby-minitest))
     (synopsis "Library to read and update netrc files")
     (description
      "This library can read and update netrc files, preserving formatting
@@ -6807,9 +6591,7 @@ including comments and whitespace.")
                ((".*rake-compiler-dock.*") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list bundler ruby-rake-compiler ruby-test-unit))
     (synopsis "Unicode normalization form support library")
     (description
      "This package provides unicode normalization form support for Ruby.")
@@ -6833,9 +6615,7 @@ including comments and whitespace.")
                   "0n3gq8rx49f7ln6zqlshqfg2mgqyy30rsdjlnki5mv307ykc7ad4"))))
       (build-system ruby-build-system)
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)
-         ("ruby-yard" ,ruby-yard)
-         ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+       (list ruby-rspec ruby-yard ruby-rubygems-tasks))
       (synopsis "Calculate the differences between two tree-like structures")
       (description
        "This library provides functions to calculate the differences between two
@@ -6860,12 +6640,11 @@ tree-like structures.  It is similar to Ruby's built-in @code{TSort} module.")
                   "1ah2sfjh9n1p0ln2wkqzfl448ml7j4zfy6dhp1qgzq2m41php6rf"))))
       (build-system ruby-build-system)
       (propagated-inputs
-       `(("ruby-tdiff" ,ruby-tdiff)
-         ("ruby-nokogiri" ,ruby-nokogiri)))
+       (list ruby-tdiff
+             ;; Use a fixed version to prevent rebuilds; see ruby-nokogiri TODO.
+             ruby-nokogiri-1.10))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)
-         ("ruby-yard" ,ruby-yard)
-         ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+       (list ruby-rspec ruby-yard ruby-rubygems-tasks))
       (synopsis "Calculate the differences between two XML/HTML documents")
       (description
        "@code{Nokogiri::Diff} adds the ability to calculate the
@@ -6876,18 +6655,19 @@ differences (added or removed nodes) between two XML/HTML documents.")
 (define-public ruby-racc
   (package
     (name "ruby-racc")
-    (version "1.4.14")
+    (version "1.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "racc" version))
        (sha256
         (base32
-         "00yhs2ag7yy5v83mqvkbnhk9bvsh6mx3808k53n61ddzx446v1zl"))))
+         "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g"))))
     (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))            ; Fails while parsing test instructions.
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-hoe ruby-rake-compiler))
     (synopsis "LALR(1) parser generator for Ruby")
     (description
      "Racc is a LALR(1) parser generator.  It is written in Ruby itself, and
@@ -6945,8 +6725,7 @@ generates Ruby program.")
                                  (number->string (+ 33 size-diff))))))
              #t)))))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-minitest-global-expectations" ,ruby-minitest-global-expectations)))
+     (list ruby-minitest ruby-minitest-global-expectations))
     (synopsis "Unified web application interface for Ruby")
     (description "Rack provides a minimal, modular and adaptable interface for
 developing web applications in Ruby.  By wrapping HTTP requests and responses,
@@ -6977,7 +6756,7 @@ into a single method call.")
            (lambda _
              (invoke "ruby" "-Ilib" "-r" "rack/test"))))))
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis "Testing API for Rack applications")
     (description
      "Rack::Test is a small, simple testing API for Rack applications.  It can
@@ -7002,11 +6781,9 @@ testing libraries to build on.")
      '(;; Tests missing from the gem.
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)
-       ("ruby-rack-test" ,ruby-rack-test)))
+     (list bundler ruby-rspec-2 ruby-rack-test))
     (synopsis "Rack middleware that protects against typical web attacks")
     (description "Rack middleware that can be used to protect against typical
 web attacks.  It can protect all Rack apps, including Rails.  For instance, it
@@ -7038,8 +6815,7 @@ clickjacking, directory traversal, session hijacking and IP spoofing.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Colorize printed text on ANSI terminals")
     (description
      "@code{rainbow} provides a string presenter object to colorize strings by
@@ -7062,8 +6838,7 @@ wrapping them in ANSI escape codes.")
     (arguments
      '(#:tests? #f)) ; test files not included
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Ruby test double framework")
     (description
      "RR is a test double framework that features a rich selection of double
@@ -7104,13 +6879,9 @@ techniques and a terse syntax.")
              (delete-file "spec/integration/httpbin_spec.rb")
              #t)))))
     (propagated-inputs
-     `(("ruby-http-cookie" ,ruby-http-cookie)
-       ("ruby-mime-types" ,ruby-mime-types)
-       ("ruby-netrc" ,ruby-netrc)))
+     (list ruby-http-cookie ruby-mime-types ruby-netrc))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-webmock" ,ruby-webmock-2)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-webmock-2 ruby-rspec))
     (synopsis "Simple HTTP and REST client for Ruby")
     (description
      "@code{rest-client} provides a simple HTTP and REST client for Ruby,
@@ -7148,15 +6919,15 @@ inspired by the Sinatra microframework style of specifying actions:
                          (format #f "`find ~a -type f| sort`" files)))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-oedipus-lex" ,ruby-oedipus-lex)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-racc" ,ruby-racc)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-bump
+           ruby-oedipus-lex
+           ruby-pry
+           ruby-racc
+           ruby-rake
+           ruby-rspec
+           ruby-simplecov))
     (propagated-inputs
-     `(("ruby-parser" ,ruby-parser)))
+     (list ruby-parser))
     (synopsis "RuboCop's AST extensions and NodePattern functionality")
     (description "Rubocop::AST extends @code{ruby-parser} with classes used
 by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
@@ -7242,7 +7013,7 @@ better performance than @code{Regexp} and @code{String} methods from the
                          (string-append stripped "\n")))
                       #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Simple arrays of objects to arrays of ranges compressor")
     (description "RangeCompresses is a tiny library that allows compressing
 arrays of objects into arrays of ranges.  For example, it can turn the
@@ -7251,35 +7022,35 @@ following: @code{[1, 2, 3, 4, 6, 8, 9, 10]} into @code{[1..4, 6..6, 8..10]}.")
     (license license:expat)))
 
 (define-public ruby-regexp-property-values
-  (package
-    (name "ruby-regexp-property-values")
-    (version "1.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference              ;no test suite in distributed gem
-             (url "https://github.com/jaynetics/regexp_property_values")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0l3fjmscg1wxn7kc6bl022cc6k5d91pwb7daq1b5w36kvsx52w1j"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "default"))
-    (native-inputs
-     `(("ruby-character-set" ,ruby-character-set)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-range-compressor" ,ruby-range-compressor)
-       ("ruby-rspec" ,ruby-rspec)))
-    (synopsis "Inspect Ruby's regex engine property values")
-    (description "This small library lets you see which property values are
+  (let ((commit "03007a66c912949a7130b973cc0eca109c20811f")
+        (revision "1"))
+    (package
+      (name "ruby-regexp-property-values")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference              ;no test suite in distributed gem
+               (url "https://github.com/jaynetics/regexp_property_values")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1zsax784p16zdkf60lyq9z924zvsafhx9ckxx9srsgkyiqrifi1s"))))
+      (build-system ruby-build-system)
+      (arguments
+       '(#:test-target "default"))
+      (native-inputs
+       (list ruby-character-set ruby-rake ruby-rake-compiler
+             ruby-range-compressor ruby-rspec))
+      (synopsis "Inspect Ruby's regex engine property values")
+      (description "This small library lets you see which property values are
 supported by the regular expression engine of the Ruby version you are running
 and can directly read out their code point ranges.  In other words, it
 determines all supported values for @code{\\p{value}} expressions and what
 they match.")
-    (home-page "https://github.com/jaynetics/regexp_property_values")
-    (license license:expat)))
+      (home-page "https://github.com/jaynetics/regexp_property_values")
+      (license license:expat))))
 
 (define-public ruby-regexp-parser
   (package
@@ -7308,9 +7079,7 @@ they match.")
                       (delete-file-recursively "pkg")
                       #t)))))
     (native-inputs
-     `(("ragel" ,ragel)
-       ("ruby-regexp-property-values" ,ruby-regexp-property-values)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ragel ruby-regexp-property-values ruby-rspec))
     (synopsis "A regular expression parser library for Ruby ")
     (description "A Ruby gem for tokenizing, parsing, and transforming regular
 expressions.  It comprises the following components:
@@ -7343,7 +7112,7 @@ expressions.  It comprises the following components:
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Minitest/RSpec parallel test runner for CI environments")
     (description "The test-queue module is a parallel test runner,
 built using a centralized queue to ensure optimal distribution of
@@ -7406,14 +7175,13 @@ run.")
        ("ruby-webmock" ,ruby-webmock)
        ("ruby-yard" ,ruby-yard)))
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-rainbow" ,ruby-rainbow)
-       ("ruby-regexp-parser" ,ruby-regexp-parser)
-       ("ruby-rexml" ,ruby-rexml)
-       ("ruby-rubocop-ast" ,ruby-rubocop-ast)
-       ("ruby-progressbar" ,ruby-progressbar)
-       ("ruby-unicode-display-width" ,ruby-unicode-display-width)))
+     (list ruby-parallel
+           ruby-parser
+           ruby-rainbow
+           ruby-regexp-parser
+           ruby-rubocop-ast
+           ruby-progressbar
+           ruby-unicode-display-width))
     (synopsis "Ruby code style checking tool")
     (description
      "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
@@ -7463,7 +7231,7 @@ contexts without performance penalties.")
          "00rcscz16idp6dx0dk5yi5i0fz593i3r6anbn5bg2q07v3i025wm"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Creole markup language converter")
     (description
      "Creole is a lightweight markup language and this library for converting
@@ -7524,7 +7292,7 @@ abstraction for Ruby.")
          "1n9397j7kh4vvikfann1467qgksc679imlr50hax3lk1q3af8kdw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Iterations per second enhancement for the Ruby Benchmark module")
     (description "Benchmark-ips enhances the Ruby Benchmark module with the
 iterations per second count.  For short snippets of code, it can automatically
@@ -7558,10 +7326,10 @@ figure out how many times to run the code to get interesting data.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (inputs
-     `(("zeromq" ,zeromq)))
-    (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
+     (list zeromq))
+    (propagated-inputs (list ruby-ffi))
     (synopsis "Low-level Ruby FFI wrapper for the ZeroMQ networking library")
     (description "This library only provides the FFI wrapper for the ZeroMQ
 networking library.  It can be used to implement a Ruby API for the ZeroMQ
@@ -7587,9 +7355,9 @@ library.")
                               (lambda _
                                 (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-ffi-rzmq-core" ,ruby-ffi-rzmq-core)))
+     (list ruby-ffi-rzmq-core))
     (synopsis "High-level Ruby wrapper for the ZeroMQ networking library")
     (description "This library provides a high-level API that wraps the ZeroMQ
 networking library using the Ruby foreign function interface (FFI).  It is a
@@ -7611,8 +7379,7 @@ for FFI.")
          "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-faraday" ,ruby-faraday)))
+     (list ruby-addressable ruby-faraday))
     (synopsis "Experimental hypermedia agent for Ruby")
     (description "Sawyer is an experimental hypermedia agent for Ruby built on
 top of Faraday.")
@@ -7633,8 +7400,7 @@ top of Faraday.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite in the gem release
     (propagated-inputs
-     `(("ruby-faraday" ,ruby-faraday)
-       ("ruby-sawyer" ,ruby-sawyer)))
+     (list ruby-faraday ruby-sawyer))
     (synopsis "Ruby toolkit for the GitHub API")
     (description "Octokit wraps the GitHub API in a flat API client that
 follows Ruby conventions and requires little knowledge of REST.")
@@ -7654,10 +7420,9 @@ follows Ruby conventions and requires little knowledge of REST.")
          "1n8a4mr2jkcz5vaaps45g2rxa2pzy1wb7cylgw85xmmyyp14lnrr"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rubocop" ,ruby-rubocop)))
+     (list ruby-rubocop))
     (propagated-inputs
-     `(("ruby-netrc" ,ruby-netrc)
-       ("ruby-octokit" ,ruby-octokit)))
+     (list ruby-netrc ruby-octokit))
     (synopsis "Sync CHANGELOG entries to GitHub's release notes")
     (description "Chandler syncs a project's CHANGELOG file entries to
 GitHub's release notes to remove the need of manually entering release
@@ -7687,12 +7452,9 @@ notes.")
                       (setenv "HOME" (getcwd))
                       #t)))))
     (native-inputs
-     `(("ruby-chandler" ,ruby-chandler)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-chandler ruby-rubocop ruby-simplecov))
     (propagated-inputs
-     `(("ruby-byebug" ,ruby-byebug-11)
-       ("ruby-pry" ,ruby-pry)))
+     (list ruby-byebug ruby-pry))
     (synopsis "Step-by-step debugging and stack navigation in Pry")
     (description "This package adds step-by-step debugging and stack
 navigation capabilities to @code{pry}, using @code{byebug}.")
@@ -7723,8 +7485,7 @@ navigation capabilities to @code{pry}, using @code{byebug}.")
            (lambda _
              (invoke "rake" "compile"))))))
     (native-inputs
-     `(("ruby-mocha" ,ruby-mocha)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-mocha ruby-rake-compiler))
     (synopsis "Sampling profiler for Ruby code")
     (description
      "@code{stackprof} is a fast sampling profiler for Ruby code, with cpu,
@@ -7748,7 +7509,7 @@ wallclock and object allocation samplers.")
     ;; (see: https://github.com/banister/binding_of_caller/issues/76).
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-debug-inspector" ,ruby-debug-inspector)))
+     (list ruby-debug-inspector))
     (synopsis "Retrieve the binding of a method's caller")
     (description "The @code{binding_of_caller} module provides the
 @code{Binding#of_caller} method.  It allows accessing bindings from upper
@@ -7770,8 +7531,7 @@ frames in the call stack and can evaluate code in that context.")
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite in gem release
     (propagated-inputs
-     `(("ruby-binding-of-caller" ,ruby-binding-of-caller)
-       ("ruby-pry" ,ruby-pry)))
+     (list ruby-binding-of-caller ruby-pry))
     (synopsis "Call-stack navigation plugin for the Pry REPL")
     (description "@code{pry-stack_explorer} is a plugin for the Pry REPL that
 add support to navigate the call-stack.")
@@ -7800,14 +7560,14 @@ variable length integers (varint) in Ruby Protocol Buffers.")
 (define-public ruby-ruby-prof
   (package
     (name "ruby-ruby-prof")
-    (version "1.4.1")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "ruby-prof" version))
        (sha256
         (base32
-         "12cd91m08ih0imfpy4k87618hd4mhyz291a6bx2hcskza4nf6d27"))))
+         "1r3xalp91l07m0cwllcxjzg6nkviiqnxkcbgg5qnzsdji6rgy65m"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -7833,10 +7593,7 @@ variable length integers (varint) in Ruby Protocol Buffers.")
           (lambda _
             (invoke "rake" "compile"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest" ,ruby-minitest)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rdoc" ,ruby-rdoc)))
+     (list bundler ruby-minitest ruby-rake-compiler ruby-rdoc))
     (synopsis "Fast code profiler for Ruby")
     (description "RubyProf is a fast code profiler for Ruby.  Its features
 include:
@@ -7910,7 +7667,7 @@ Profiling multiple threads simultaneously is supported.
     (propagated-inputs
      `(("ruby-protobuf" ,ruby-protobuf-cucumber)))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/cucumber/messages-ruby")
     (synopsis "Cucumber Messages for Ruby (Protocol Buffers)")
     (description "Cucumber Messages for Ruby is a library which allows
@@ -7933,8 +7690,7 @@ Cucumber.")
                 "1dwa8632nc6kijv8p257jl64rsjmc0fimlaqvxlkdi2h9n1nympb"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-cucumber-messages ruby-rspec))
     (arguments
      `(#:test-target "spec"))
     (synopsis "Gherkin parser for Ruby")
@@ -8013,18 +7769,15 @@ It is intended be used by all Cucumber implementations to parse
          (add-before 'check 'set-home
            (lambda _ (setenv "HOME" "/tmp") #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-fuubar" ,ruby-fuubar)
-       ("ruby-simplecov" ,ruby-simplecov)))
-    (propagated-inputs
-     `(("ruby-childprocess" ,ruby-childprocess)
-       ("ruby-contracts" ,ruby-contracts)
-       ("ruby-cucumber" ,ruby-cucumber)
-       ("ruby-ffi" ,ruby-ffi)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-yard" ,ruby-yard)))
+     (list bundler ruby-rspec ruby-fuubar ruby-simplecov))
+    (propagated-inputs
+     (list ruby-childprocess
+           ruby-contracts
+           ruby-cucumber
+           ruby-ffi
+           ruby-rspec-expectations
+           ruby-thor
+           ruby-yard))
     (synopsis "Test command-line applications with Cucumber, RSpec or Minitest")
     (description
      "Aruba is an extension for Cucumber, RSpec and Minitest for testing
@@ -8059,8 +7812,8 @@ language.")
   (build-system ruby-build-system)
   (arguments
    `(#:test-target "spec"))
-  (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
-  (native-inputs `(("ruby-rspec" ,ruby-rspec)))
+  (propagated-inputs (list ruby-ffi))
+  (native-inputs (list ruby-rspec))
   (synopsis "Ruby interface for gathering system information")
   (description "The sys-uname library provides an interface for gathering
 information about your current platform.  It allows retrieving information
@@ -8092,10 +7845,9 @@ such as the OS name, OS version, system name, etc.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-sys-uname" ,ruby-sys-uname)))
+     (list ruby-cucumber-messages ruby-sys-uname))
     (synopsis "Function to create @code{Meta} messages for Cucumber Ruby")
     (description "The @code{createMeta} utility function allows generating
 system-specific @code{Meta} messages for Cucumber Ruby.")
@@ -8120,9 +7872,9 @@ system-specific @code{Meta} messages for Cucumber Ruby.")
                     (lambda _
                       (invoke "rspec"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)))
+     (list ruby-cucumber-messages))
     (synopsis "HTML formatter for Cucumber")
     (description "Cucumber HTML Formatter produces a HTML report for Cucumber
 runs.  It is built on top of cucumber-react and works with any Cucumber
@@ -8170,24 +7922,24 @@ master/html-formatter/ruby")
              (setenv "HOME" (getcwd))
              #t)))))
     (propagated-inputs
-     `(("ruby-builder" ,ruby-builder)
-       ("ruby-cucumber-core" ,ruby-cucumber-core)
-       ("ruby-cucumber-create-meta" ,ruby-cucumber-create-meta)
-       ("ruby-cucumber-html-formatter" ,ruby-cucumber-html-formatter)
-       ("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-cucumber-wire" ,ruby-cucumber-wire)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)
-       ("ruby-gherkin" ,ruby-gherkin)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-multi-test" ,ruby-multi-test)))
-    (native-inputs
-     `(;; Use a untested version of aruba, to avoid a circular dependency, as
-       ;; ruby-aruba depends on ruby-cucumber.
-       ("ruby-aruba" ,ruby-aruba-without-tests)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-rubocop" ,ruby-rubocop)))
+     (list ruby-builder
+           ruby-cucumber-core
+           ruby-cucumber-create-meta
+           ruby-cucumber-html-formatter
+           ruby-cucumber-messages
+           ruby-cucumber-wire
+           ruby-diff-lcs
+           ruby-gherkin
+           ruby-multi-json
+           ruby-multi-test))
+    (native-inputs
+     (list ;; Use a untested version of aruba, to avoid a circular dependency, as
+           ;; ruby-aruba depends on ruby-cucumber.
+           ruby-aruba-without-tests
+           ruby-rspec
+           ruby-pry
+           ruby-nokogiri
+           ruby-rubocop))
     (synopsis "Describe automated tests in plain language")
     (description "Cucumber is a tool for running automated tests written in
 plain language.  It's designed to support a Behaviour Driven Development (BDD)
@@ -8230,10 +7982,7 @@ software development workflow.")
                          (string-append stripped ")\n")))
                       #t)))))
     (propagated-inputs
-     `(("ruby-json" ,ruby-json)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-tins" ,ruby-tins)))
+     (list ruby-json ruby-term-ansicolor ruby-thor ruby-tins))
     (synopsis "Ruby implementation of the Coveralls API")
     (description "This package provides a Ruby implementation of the Coveralls
 API.")
@@ -8285,15 +8034,11 @@ in already-indented code.")
                  "'cucumber-tag-expressions', '>=2.0.0'\n"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-coveralls" ,ruby-coveralls)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-unindent" ,ruby-unindent)))
+     (list ruby-rspec ruby-coveralls ruby-rubocop ruby-simplecov
+           ruby-unindent))
     (propagated-inputs
-     `(("ruby-cucumber-messages" ,ruby-cucumber-messages)
-       ("ruby-gherkin" ,ruby-gherkin)
-       ("ruby-cucumber-tag-expressions" ,ruby-cucumber-tag-expressions)))
+     (list ruby-cucumber-messages ruby-gherkin
+           ruby-cucumber-tag-expressions))
     (synopsis "Core library for the Cucumber BDD app")
     (description "Cucumber is a tool for running automated tests
 written in plain language.  Because they're written in plain language,
@@ -8321,8 +8066,7 @@ and trust on your team.")
     (arguments
      '(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec ruby-simplecov))
     (synopsis "Simpler alternative to Regular Expressions")
     (description "Cucumber Expressions offer similar functionality to Regular
 Expressions, with a syntax that is easier to read and write.  Cucumber
@@ -8352,9 +8096,8 @@ Expressions are extensible with parameter types.")
                ((" 10\\.1") " 10.2"))
              #t)))))
     (propagated-inputs
-     `(("ruby-cucumber-core" ,ruby-cucumber-core)
-       ("ruby-cucumber-expressions" ,ruby-cucumber-expressions)
-       ("ruby-cucumber-messages" ,ruby-cucumber-messages)))
+     (list ruby-cucumber-core ruby-cucumber-expressions
+           ruby-cucumber-messages))
     (synopsis "Cucumber wire protocol plugin")
     (description "Cucumber's wire protocol allows step definitions to be
 implemented and invoked on any platform.")
@@ -8379,7 +8122,7 @@ implemented and invoked on any platform.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (synopsis "Cucumber tag expressions for Ruby")
     (description "Cucumber tag expression parser for Ruby.  A tag expression
 is an infix boolean expression used by Cucumber.")
@@ -8401,8 +8144,7 @@ is an infix boolean expression used by Cucumber.")
     (arguments
      '(#:test-target "default"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rake-compiler))
     (synopsis "Provides access for bindings relating to Ruby exceptions")
     (description
      "@code{bindex} provides a way to access the bindings that relate to
@@ -8426,7 +8168,7 @@ exception occurred.")
     (arguments
      `(#:tests? #f)) ; rake errors, missing shoulda
     (propagated-inputs
-     `(("ruby-log4r" ,ruby-log4r)))
+     (list ruby-log4r))
     (synopsis "Log4r wrapper for Ruby")
     (description "Bio-logger is a wrapper around Log4r adding extra logging
 features such as filtering and fine grained logging.")
@@ -8456,8 +8198,7 @@ features such as filtering and fine grained logging.")
                 "$LOAD_PATH << 'lib'; require 'yajl'"))
              #t)))))
      (native-inputs
-      `(("ruby-rake-compiler" ,ruby-rake-compiler)
-        ("ruby-rspec" ,ruby-rspec)))
+      (list ruby-rake-compiler ruby-rspec))
      (synopsis "Streaming JSON parsing and encoding library for Ruby")
      (description
       "Ruby C bindings to the Yajl JSON stream-based parser library.  The API
@@ -8564,10 +8305,9 @@ Test.run :default do |run|
 end")))
              (invoke "ruby" "-Ilib" "-rrubytest" ".test"))))))
     (native-inputs
-     `(("ruby-ae" ,ruby-ae)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-ae ruby-rspec))
     (propagated-inputs
-     `(("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-rubytest))
     (synopsis "Behavior-Driven Development (BDD) framework built on RubyTest")
     (description "Spectroscope is a Behavior-Driven Development (BDD)
 framework built on RubyTest, designed to emulate RSpec in most respects.  It
@@ -8617,12 +8357,9 @@ TomDoc format.")
                     (lambda _
                       (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
     (native-inputs
-     `(("ruby-rubytest-cli" ,ruby-rubytest-cli)
-       ("ruby-spectroscope" ,ruby-spectroscope)
-       ("ruby-ae" ,ruby-ae)))
+     (list ruby-rubytest-cli ruby-spectroscope ruby-ae))
     (propagated-inputs
-     `(("ruby-tomparse" ,ruby-tomparse)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-tomparse ruby-yard))
     (synopsis "TomDoc syntax for YARD")
     (description "This module adds support for the TomDoc documentation format
 to YARD, a documentation generation tool for Ruby.")
@@ -8661,7 +8398,7 @@ simple case of executing code based on the flags or parameters passed.")
                 "1mldhjn62g53vx4gq2qdqg2lgjvyrqxa8d0khf8347bbfgi16d32"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-clap" ,ruby-clap)))
+     (list ruby-clap))
     (synopsis "Run tests in separate processes")
     (description
      "Cutest runs tests in separate processes to avoid shared state.")
@@ -8699,8 +8436,7 @@ simple case of executing code based on the flags or parameters passed.")
     (inputs
      `(("pygments" ,python-pygments)))
     (native-inputs
-     `(("ruby-cutest" ,ruby-cutest)
-       ("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-cutest ruby-nokogiri))
     (synopsis "Thin Ruby wrapper around pygmentize")
     (description
      "Pygmentize provides a simple way to call pygmentize from within a Ruby
@@ -8723,9 +8459,9 @@ application.")
     (arguments
      '(#:tests? #f))               ; test suite tries to connect to google.com
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-rake-compiler))
     (synopsis "Single-threaded network event framework for Ruby")
     (description
      "EventMachine implements a single-threaded engine for arbitrary network
@@ -8775,9 +8511,7 @@ used to create both network servers and clients.")
              (delete-file-recursively "pkg")
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rake ruby-rspec))
     (synopsis "Simplifies checking for Ruby implementation")
     (description
      "@code{ruby_engine} provides an RubyEngine class that can be used to
@@ -8808,8 +8542,7 @@ name and provides query methods such as @{RubyEngine.mri?}.")
            (lambda _
              (invoke "ruby" "-Ilib" "bin/turn" "-h"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-minitest" ,ruby-minitest-4)))
+     (list ruby-ansi ruby-minitest-4))
     (synopsis "Alternate set of alternative runners for MiniTest")
     (description
      "TURN provides a set of alternative runners for MiniTest which are both
@@ -8836,7 +8569,7 @@ that TURN is no longer being maintained.")
          ;; This phase breaks the tests, as it patches some of the test data.
          (delete 'patch-source-shebangs))))
     (native-inputs
-     `(("ruby-bacon" ,ruby-bacon)))
+     (list ruby-bacon))
     (synopsis "Ruby library for MIME detection by extension or content")
     (description
      "@acronym{MIME, Multipurpose Internet Mail Extensions} detection by
@@ -8858,7 +8591,7 @@ database.")
          "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Registry for information about MIME media type definitions")
     (description
      "@code{mime-types-data} provides a registry for information about
@@ -8882,14 +8615,14 @@ look up the likely MIME type definitions.")
          "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-mime-types-data" ,ruby-mime-types-data)))
+     (list ruby-mime-types-data))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-fivemat" ,ruby-fivemat)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-rg" ,ruby-minitest-rg)
-       ("ruby-minitest-bonus-assertions" ,ruby-minitest-bonus-assertions)
-       ("ruby-minitest-hooks" ,ruby-minitest-hooks)))
+     (list ruby-hoe
+           ruby-fivemat
+           ruby-minitest-focus
+           ruby-minitest-rg
+           ruby-minitest-bonus-assertions
+           ruby-minitest-hooks))
     (synopsis "Library and registry for MIME content type definitions")
     (description "The mime-types library provides a library and registry for
 information about Multipurpose Internet Mail Extensions (MIME) content type
@@ -8957,11 +8690,9 @@ neither too verbose nor too minimal.")
            ;; This file exists in the repository but is not distributed.
            (lambda _ (invoke "touch" ".gemtest"))))))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-mini-portile" ,ruby-mini-portile)))
+     (list ruby-hoe ruby-rake-compiler ruby-mini-portile))
     (synopsis "Interface with SQLite3 databases")
     (description
      "This module allows Ruby programs to interface with the SQLite3 database
@@ -9020,7 +8751,7 @@ names.")
              ;; just import the library to test.
              (invoke "ruby" "-Ilib" "-r" "shoulda-matchers"))))))
     (propagated-inputs
-     `(("ruby-activesupport" ,ruby-activesupport)))
+     (list ruby-activesupport))
     (synopsis "Collection of testing matchers extracted from Shoulda")
     (description
      "Shoulda Matchers provides RSpec- and Minitest-compatible one-liners that
@@ -9060,8 +8791,7 @@ more complex, and error-prone.")
            ;; just import the library to test.
            (lambda _ (invoke "ruby" "-Ilib" "-r" "shoulda"))))))
     (propagated-inputs
-     `(("ruby-shoulda-context" ,ruby-shoulda-context)
-       ("ruby-shoulda-matchers" ,ruby-shoulda-matchers-2)))
+     (list ruby-shoulda-context ruby-shoulda-matchers-2))
     (synopsis "Context framework and matchers for testing")
     (description
      "@code{shoulda} is a meta-package combining @code{shoulda-context} and
@@ -9093,11 +8823,9 @@ more complex, and error-prone.")
                (("^gemspec") "gem 'test-unit'\ngemspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-unf-ext" ,ruby-unf-ext)))
+     (list ruby-unf-ext))
     (native-inputs
-     `(("ruby-shoulda" ,ruby-shoulda)
-       ("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list ruby-shoulda bundler ruby-test-unit))
     (synopsis "Unicode Normalization Form support to Ruby and JRuby")
     (description
      "@code{ruby-unf} is a wrapper library to bring Unicode Normalization Form
@@ -9121,7 +8849,7 @@ support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
     (arguments
      '(#:tests? #f)) ; No included tests
     (propagated-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis "Rack middleware providing authentication")
     (description
      "Warden is a Rack-based middleware that provides a mechanism for
@@ -9165,11 +8893,9 @@ authentication in Ruby web applications.")
                (invoke "bundle" "exec" "rspec"))
              #t)))))
     (propagated-inputs
-     `(("ruby-warden" ,ruby-warden)))
+     (list ruby-warden))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec-2)
-       ("ruby-rack-test" ,ruby-rack-test)))
+     (list bundler ruby-rspec-2 ruby-rack-test))
     (synopsis "OAuth 2.0 strategies for Warden")
     (description
      "This library extends Warden to support OAuth 2.0 authorized API
@@ -9190,12 +8916,9 @@ requests.")
          "1hdlbvfw316lkz251qnfk79drmaay7l51kidvicz41nhvw12xz8v"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-crack" ,ruby-crack)
-       ("ruby-hashdiff" ,ruby-hashdiff)))
+     (list ruby-addressable ruby-crack ruby-hashdiff))
     (synopsis "Allows stubbing and setting expectations on HTTP requests")
     (description
      "WebMock allows stubbing HTTP requests and setting expectations on HTTP
@@ -9272,9 +8995,7 @@ display width of strings in Ruby.")
                (("Bundler\\.setup.*") "nil\n"))
              #t)))))
     (native-inputs
-     `(("ruby-rdoc" ,ruby-rdoc)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubygems-tasks" ,ruby-rubygems-tasks)))
+     (list ruby-rdoc ruby-rspec ruby-rubygems-tasks))
     (synopsis "Ruby library to help check the Ruby version")
     (description "@code{ruby_version} provides a @code{RubyVersion} module to simplify
 checking for the right Ruby version in software.")
@@ -9295,7 +9016,7 @@ checking for the right Ruby version in software.")
    (arguments
     '(#:tests? #f))                     ; no included tests
    (propagated-inputs
-    `(("ruby-websocket-extensions" ,ruby-websocket-extensions)))
+    (list ruby-websocket-extensions))
    (synopsis "WebSocket protocol handler with pluggable I/O")
    (description
     "@code{websocket-driver} provides a complete implementation of the
@@ -9350,11 +9071,9 @@ extension plugins.")
                (("<test-unit>.freeze, \\[\\\"~> 2.5.5") "<test-unit>, [\">0"))
              #t)))))
     (propagated-inputs
-     `(("ruby-unf" ,ruby-unf)))
+     (list ruby-unf))
     (native-inputs
-     `(("ruby-shoulda" ,ruby-shoulda)
-       ("bundler" ,bundler)
-       ("ruby-test-unit" ,ruby-test-unit)))
+     (list ruby-shoulda bundler ruby-test-unit))
     (synopsis "Domain name manipulation library")
     (description
      "@code{domain_name} is a Domain name manipulation library.  It parses a
@@ -9387,7 +9106,7 @@ Suffix List.")
                 "Bundler::GemHelper.gemspec.version"))
              #t)))))
     (propagated-inputs
-     `(("ruby-domain-name" ,ruby-domain-name)))
+     (list ruby-domain-name))
     (native-inputs
      `(("rubysimplecov" ,ruby-simplecov)
        ("bundler" ,bundler)
@@ -9434,7 +9153,7 @@ It has built-in support for the legacy @code{cookies.txt} and
                          "test/runner.rb")
                  #t))))))
     (native-inputs
-     `(("ruby-rack" ,ruby-rack)))
+     (list ruby-rack))
     (synopsis
      "Make HTTP requests with support for HTTPS, Cookies, authentication and more")
     (description
@@ -9544,11 +9263,9 @@ subprocess.")
            (lambda _
              (invoke "rspec" "spec/bio-commandeer_spec.rb"))))))
     (propagated-inputs
-     `(("ruby-bio-logger" ,ruby-bio-logger)
-       ("ruby-systemu" ,ruby-systemu)))
+     (list ruby-bio-logger ruby-systemu))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (synopsis "Simplified running of shell commands from within Ruby")
     (description
      "Bio-commandeer provides an opinionated method of running shell commands
@@ -9581,7 +9298,7 @@ detail to ease debugging.")
            (lambda _
              (invoke "ruby" "-Ilib" "-r" "rubytest"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)))
+     (list ruby-ansi))
     (synopsis "Universal test harness for Ruby")
     (description
      "Rubytest is a testing meta-framework for Ruby.  It can handle any
@@ -9639,8 +9356,7 @@ make use of.")
            (lambda _
              (invoke "ruby" "-Ilib" "bin/qed" "--copyright"))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-brass" ,ruby-brass)))
+     (list ruby-ansi ruby-brass))
     (synopsis "Test framework utilizing literate programming techniques")
     (description
      "@dfn{Quality Ensured Demonstrations} (QED) is a test framework for
@@ -9705,9 +9421,9 @@ and locking between worker processes.")
                (symlink "../.index" file)
                #t))))))
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)))
+     (list ruby-ansi))
     (native-inputs
-     `(("ruby-qed" ,ruby-qed)))
+     (list ruby-qed))
     (synopsis "Assertions library")
     (description
      "Assertive Expressive (AE) is an assertions library specifically designed
@@ -9732,11 +9448,9 @@ for reuse by other test frameworks.")
        (modify-phases %standard-phases
          (replace 'check (lambda _ (invoke "qed"))))))
     (propagated-inputs
-     `(("ruby-ae" ,ruby-ae)
-       ("ruby-ansi" ,ruby-ansi)
-       ("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-ae ruby-ansi ruby-rubytest))
     (native-inputs
-     `(("ruby-qed" ,ruby-qed)))
+     (list ruby-qed))
     (synopsis "Test framework correlating code structure and test unit")
     (description
      "Lemon is a unit testing framework that enforces highly formal
@@ -9760,8 +9474,7 @@ focus concern on individual units of behavior.")
     (arguments
      `(#:tests? #f)) ; no tests
     (propagated-inputs
-     `(("ruby-ansi" ,ruby-ansi)
-       ("ruby-rubytest" ,ruby-rubytest)))
+     (list ruby-ansi ruby-rubytest))
     (synopsis "Command-line interface for rubytest")
     (description
      "Rubytest CLI is a command-line interface for running tests for
@@ -9789,9 +9502,7 @@ Rubytest-based test frameworks.  It provides the @code{rubytest} executable.")
              (invoke "qed")
              (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
     (native-inputs
-     `(("ruby-rubytest-cli" ,ruby-rubytest-cli)
-       ("ruby-qed" ,ruby-qed)
-       ("ruby-lemon" ,ruby-lemon)))
+     (list ruby-rubytest-cli ruby-qed ruby-lemon))
     (synopsis "Hash-like classes with extra features")
     (description
      "The Hashery is a tight collection of @code{Hash}-like classes.
@@ -9823,7 +9534,7 @@ specific use case.")
            (lambda _
              (invoke "rspec" "spec/rc4_spec.rb"))))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec-2)))
+     (list ruby-rspec-2))
     (synopsis "Implementation of the RC4 algorithm")
     (description
      "RubyRC4 is a pure Ruby implementation of the RC4 algorithm.")
@@ -9843,7 +9554,7 @@ specific use case.")
          "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Read Adobe Font Metrics (afm) files")
     (description
      "This library provides methods to read @dfn{Adobe Font Metrics} (afm)
@@ -9864,7 +9575,7 @@ files and use the data therein.")
          "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Encode and decode Ascii85 binary-to-text encoding")
     (description
      "This library provides methods to encode and decode Ascii85
@@ -9909,9 +9620,7 @@ binary-to-text encoding.  The main modern use of Ascii85 is in PostScript and
                (("RuboCop::RakeTask.new") ""))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-yard" ,ruby-yard)
-       ("bundler" ,bundler)))
+     (list ruby-rspec ruby-yard bundler))
     (synopsis "Font metrics parser for the Prawn PDF generator")
     (description
      "TTFunk is a TrueType font parser written in pure Ruby.  It is used as
@@ -9969,7 +9678,7 @@ or JRuby.")
          "10jmmbjm0lkglwxbn4rpqghgg1ipjxrswm117n50adhmy8yij650"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "Hoe plugins for tighter Git integration")
     (description
      "This package provides a set of Hoe plugins for tighter Git integration.
@@ -9978,17 +9687,50 @@ generation.")
     (home-page "https://github.com/jbarnette/hoe-git")
     (license license:expat)))
 
+(define-public ruby-hoe-markdown
+  (package
+    (name "ruby-hoe-markdown")
+    (version "1.4.0")
+    (home-page "https://github.com/flavorjones/hoe-markdown")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wb0yjdx9gx9r0cahpx42pblvglgh1i9pdfxjavq7f40nan2g076"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'check 'disable-bundler-dependency
+                    (lambda _
+                      (substitute* "spec/spec_helper.rb"
+                        (("require.*bundler/setup.*")
+                         "")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (propagated-inputs
+     (list ruby-rake))
+    (synopsis "Hoe plugin with Markdown helpers")
+    (description
+     "This package provides a Hoe plugin with various Markdown helpers, which
+can be used to e.g. hyperlink Markdown documentation between project files.")
+    (license license:expat)))
+
 (define-public ruby-sequel
   (package
     (name "ruby-sequel")
-    (version "4.49.0")
+    (version "5.47.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sequel" version))
        (sha256
         (base32
-         "010p4a60npppvgbyw7pq5xia8aydpgxdlhh3qjm2615kwjsw3fl8"))))
+         "03pmhj4kc3ga75wy397l57bvd18jxxmrk3qsznjw93b993qgvj3z"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.
@@ -10021,10 +9763,7 @@ associated records.")
              (setenv "RUBYLIB" "lib")
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-minitest-rg" ,ruby-minitest-rg)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-activesupport" ,ruby-activesupport)))
+     (list bundler ruby-minitest-rg ruby-mocha ruby-activesupport))
     (synopsis "Test mocks for time-dependent functions")
     (description
      "Timecop provides \"time travel\" and \"time freezing\" capabilities,
@@ -10095,8 +9834,7 @@ call.")
              (delete-file "spec/concurrent/scheduled_task_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-rspec))
     (synopsis "Concurrency tools for Ruby")
     (description
      "This library provides modern concurrency tools including agents,
@@ -10141,7 +9879,7 @@ libraries for compiling Ruby native extensions.")
          "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (synopsis "RFC 2617 HTTP digest authentication library")
     (description
      "This library implements HTTP's digest authentication scheme based on
@@ -10163,7 +9901,7 @@ of the more insecure basic authentication scheme.")
          "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-mini-mime" ,ruby-mini-mime)))
+     (list ruby-mini-mime))
     (arguments
      '(#:tests? #f)) ; no rakefile
     (synopsis "Mail library for Ruby")
@@ -10211,8 +9949,7 @@ from plain text email.")
          "1wn812llln9jzgybz2d7536q39z3gi99i6fi0j1dapcpzvhgrr0p"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list bundler ruby-rake-compiler))
     (synopsis "Extends math operations for increased precision")
     (description
      "This gem makes mathematical operations more precise in Ruby and
@@ -10278,7 +10015,7 @@ smart typographic punctuation HTML entities.")
     (arguments
      '(#:tests? #f)) ; no rakefile
     (propagated-inputs
-     `(("ruby-rubypants" ,ruby-rubypants)))
+     (list ruby-rubypants))
     (synopsis "Org-mode parser written in Ruby")
     (description
      "Org-ruby is an org-mode parser written in Ruby.  The most significant
@@ -10300,7 +10037,7 @@ Markdown.")
          "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (synopsis "Rake is a Make-like program implemented in Ruby")
     (description
      "Rake is a Make-like program where tasks and dependencies are specified
@@ -10323,10 +10060,9 @@ in standard Ruby syntax.")
     (arguments
      `(#:tests? #f))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (synopsis "Control external programs running in the background, in Ruby")
     (description "@code{childprocess} provides a gem to control external
 programs running in the background, in Ruby.")
@@ -10356,10 +10092,7 @@ programs running in the background, in Ruby.")
                (("RuboCop::RakeTask\\.new") ""))
              #t)))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-minitest-reporters" ,ruby-minitest-reporters)))
+     (list bundler ruby-yard ruby-mocha ruby-minitest-reporters))
     (home-page "https://simonecarletti.com/code/publicsuffix-ruby/")
     (synopsis "Domain name parser")
     (description "The gem @code{public_suffix} is a domain name parser,
@@ -10398,15 +10131,15 @@ all known public suffixes.")
              (delete-file "spec/addressable/net_http_compat_spec.rb")
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("bundler" ,bundler)
-       ("ruby-idn-ruby" ,ruby-idn-ruby)
-       ("ruby-sporkmonger-rack-mount" ,ruby-sporkmonger-rack-mount)
-       ("ruby-rspec-its" ,ruby-rspec-its-minimal)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-rspec
+           bundler
+           ruby-idn-ruby
+           ruby-sporkmonger-rack-mount
+           ruby-rspec-its-minimal
+           ruby-yard
+           ruby-simplecov))
     (propagated-inputs
-     `(("ruby-public-suffix" ,ruby-public-suffix)))
+     (list ruby-public-suffix))
     (home-page "https://github.com/sporkmonger/addressable")
     (synopsis "Alternative URI implementation")
     (description "Addressable is a replacement for the URI implementation that
@@ -10488,7 +10221,7 @@ for the terminal.")
                ;; colorator version
                (("= 1.2") "= 1.1"))
              #t)))))
-    (propagated-inputs `(("ruby-colorator" ,ruby-colorator)))
+    (propagated-inputs (list ruby-colorator))
     (home-page "https://github.com/wbailey/command_line_reporter")
     (synopsis "Report production while executing Ruby scripts")
     (description "This gem provides a DSL that makes it easy to write reports
@@ -10521,7 +10254,7 @@ your application.")
           "0x2kpfrcagj931masm5y1kwbnc6nxl60cqdcd3lyd1d2hz7kzlia"))))
   (build-system ruby-build-system)
   (native-inputs
-   `(("ruby-hoe" ,ruby-hoe)))
+   (list ruby-hoe))
   (synopsis "PEG library for Ruby")
   (description "KPeg is a simple PEG library for Ruby.  It provides an API as
 well as native grammar to build the grammar.  KPeg supports direct left
@@ -10562,10 +10295,7 @@ jquery\\.js\", ") ""))
            (lambda _
              (invoke "rake" "generate"))))))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-kpeg" ,ruby-kpeg)
-       ("ruby-racc" ,ruby-racc)
-       ("ruby-rubocop" ,ruby-rubocop)))
+     (list bundler ruby-kpeg ruby-racc ruby-rubocop))
     (home-page "https://ruby.github.io/rdoc/")
     (synopsis "HTML and command-line documentation utility")
     (description "RDoc produces HTML and command-line documentation for Ruby
@@ -10588,8 +10318,7 @@ documentation from the command-line.")
      ;; No test target
      `(#:tests? #f))
     (propagated-inputs
-     `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
-       ("ruby-rb-inotify" ,ruby-rb-inotify)))
+     (list ruby-rb-fsevent ruby-rb-inotify))
     (home-page "https://github.com/sass/listen")
     (synopsis "File modification notification library")
     (description "The Listen gem listens to file modifications and notifies you
@@ -10614,10 +10343,9 @@ about the changes.")
        ;; work with current software.
        #:tests? #f))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("ruby-rubygems-tasks" ,ruby-rubygems-tasks)
-       ("ruby-rdoc" ,ruby-rdoc)))
+     (list ruby-rubygems-tasks ruby-rdoc))
     (home-page "http://www.a-k-r.org/ruby-terminfo/")
     (synopsis "Terminfo binding for Ruby")
     (description "Ruby-terminfo provides terminfo binding for Ruby.")
@@ -10639,7 +10367,7 @@ about the changes.")
      ;; No tests
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/samg/diffy")
     (synopsis "Convenient diffing in ruby")
     (description "Diffy provides a convenient way to generate a diff from two
@@ -10693,10 +10421,9 @@ the @file{spec} directory.")
                 "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-sass-listen" ,ruby-sass-listen)))
+     (list ruby-sass-listen))
     (native-inputs
-     `(("ruby-sass-spec" ,ruby-sass-spec)
-       ("ruby-mathn" ,ruby-mathn)))
+     (list ruby-sass-spec ruby-mathn ruby-cmath))
     (home-page "https://sass-lang.com/")
     (synopsis "CSS extension language")
     (description "Sass is a CSS extension language.  It extends CSS with
@@ -10772,15 +10499,12 @@ features that don't exist yet like variables, nesting, mixins and inheritance.")
          ;; one in the gem.
          (delete 'extract-gemspec))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)
-       ("ruby-rake" ,ruby-rake)))
+     (list ruby-ffi ruby-rake))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-minitest-around" ,ruby-minitest-around)
-       ("ruby-test-construct" ,ruby-test-construct)))
+     (list bundler ruby-rake-compiler ruby-minitest-around
+           ruby-test-construct))
     (synopsis "Use libsss from Ruby")
     (description
      "This library provides Ruby q@acronym{FFI, Foreign Function Interface}
@@ -10801,7 +10525,7 @@ bindings to the libsass library.  This enables rendering
                 "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-sass" ,ruby-sass)))
+     (list ruby-sass))
     (arguments
      ;; No rakefile
      `(#:tests? #f))
@@ -10823,7 +10547,7 @@ in Jekyll.")
                 "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-listen" ,ruby-listen)))
+     (list ruby-listen))
     (arguments
      ;; No rakefile
      `(#:tests? #f))
@@ -10877,17 +10601,17 @@ interface.  It allows Jekyll to rebuild your site when a file changes.")
                (("git ls-files") "find"))
              #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-rspec-rerun" ,ruby-rspec-rerun)
-       ("bundler" ,bundler)
-       ("ruby-activerecord" ,ruby-activerecord)
-       ("ruby-progressbar" ,ruby-progressbar)
-       ("ruby-bump" ,ruby-bump)
-       ("procps" ,procps)
-       ("lsof" ,lsof)
-       ("ruby-mysql2" ,ruby-mysql2)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-i18n" ,ruby-i18n)))
+     (list ruby-rspec
+           ruby-rspec-rerun
+           bundler
+           ruby-activerecord
+           ruby-progressbar
+           ruby-bump
+           procps
+           lsof
+           ruby-mysql2
+           ruby-sqlite3
+           ruby-i18n))
     (home-page "https://github.com/grosser/parallel")
     (synopsis "Parallel processing in Ruby")
     (description "Parallel allows you to run any code in parallel Processes
@@ -10909,7 +10633,7 @@ suited for map-reduce or e.g. parallel downloads/uploads.")
     (arguments `(#:tests? #f)); No rakefile
     (home-page "https://github.com/square/cane")
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Code quality threshold checking")
     (description "Cane fails your build if code quality thresholds are not met.")
     (license license:asl2.0)))
@@ -10928,7 +10652,7 @@ suited for map-reduce or e.g. parallel downloads/uploads.")
     (home-page "https://github.com/yob/morecane")
     (arguments `(#:tests? #f)); No rakefile
     (propagated-inputs
-     `(("ruby-parallel" ,ruby-parallel)))
+     (list ruby-parallel))
     (synopsis "Extra checks for cane")
     (description "The cane gem provides a great framework for running quality
 checks over your ruby project as part of continuous integration build.  It
@@ -10958,15 +10682,9 @@ custom checks.  This gem provides a set of additional checks.")
                                   ((".*[Bb]undler.*") ""))
                                 #t)))))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-cane" ,ruby-cane)
-       ("ruby-morecane" ,ruby-morecane)))
+     (list ruby-rspec ruby-cane ruby-morecane))
     (propagated-inputs
-     `(("ruby-afm" ,ruby-afm)
-       ("ruby-ascii85" ,ruby-ascii85)
-       ("ruby-hashery" ,ruby-hashery)
-       ("ruby-rc4" ,ruby-rc4)
-       ("ruby-ttfunk" ,ruby-ttfunk)))
+     (list ruby-afm ruby-ascii85 ruby-hashery ruby-rc4 ruby-ttfunk))
     (home-page "https://github.com/yob/pdf-reader")
     (synopsis "PDF parser in Ruby")
     (description "The PDF::Reader library implements a PDF parser conforming as
@@ -11006,9 +10724,9 @@ access to the contents of a PDF file with a high degree of flexibility.")
                           ((".*yard.*") ""))
                         (invoke "rspec"))))))
       (native-inputs
-       `(("ruby-rspec" ,ruby-rspec)))
+       (list ruby-rspec))
       (propagated-inputs
-       `(("ruby-pdf-reader" ,ruby-pdf-reader)))
+       (list ruby-pdf-reader))
       (home-page "https://github.com/prawnpdf/pdf-inspector")
       (synopsis "Analysis classes for inspecting PDF output")
       (description "This library provides a number of PDF::Reader based tools for
@@ -11071,14 +10789,10 @@ functionality from Prawn.")
                  (invoke "rspec" "--exclude-pattern" "prawn_manual_spec.rb"))
                #t)))))
       (propagated-inputs
-       `(("ruby-pdf-core" ,ruby-pdf-core)
-         ("ruby-ttfunk" ,ruby-ttfunk)))
+       (list ruby-pdf-core ruby-ttfunk))
       (native-inputs
-       `(("ruby-pdf-inspector" ,ruby-pdf-inspector)
-         ("ruby-prawn-manual-builder" ,ruby-prawn-manual-builder)
-         ("ruby-rspec" ,ruby-rspec)
-         ("ruby-simplecov" ,ruby-simplecov)
-         ("ruby-yard" ,ruby-yard)))
+       (list ruby-pdf-inspector ruby-prawn-manual-builder ruby-rspec
+             ruby-simplecov ruby-yard))
       (home-page "https://prawnpdf.org/api-docs/2.0/")
       (synopsis "PDF generation for Ruby")
       (description "Prawn is a pure Ruby PDF generation library.")
@@ -11096,8 +10810,7 @@ functionality from Prawn.")
                 "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-prawn" ,ruby-prawn)
-       ("ruby-pdf-inspector" ,ruby-pdf-inspector)))
+     (list ruby-prawn ruby-pdf-inspector))
     (native-inputs
      `(("bundler" ,bundler)
        ("ruby-yard" ,ruby-yard)
@@ -11147,8 +10860,7 @@ functionality from Prawn.")
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)); FIXME: some test failures
     (native-inputs
-     `(("ruby-prawn" ,ruby-prawn)
-       ("ruby-prawn-table" ,ruby-prawn-table)))
+     (list ruby-prawn ruby-prawn-table))
     (home-page "https://kramdown.gettalong.org/")
     (synopsis "Markdown parsing and converting library")
     (description "Kramdown is a library for parsing and converting a superset
@@ -11171,7 +10883,7 @@ popular by the PHP @code{Markdown Extra} package and @code{Maruku}.")
     (arguments
      `(#:tests? #f))                    ;no rakefile
     (propagated-inputs
-     `(("ruby-kramdown" ,ruby-kramdown)))
+     (list ruby-kramdown))
     (synopsis "Kramdown parser for the GFM dialect of Markdown")
     (description
      "This is a parser for kramdown that converts Markdown documents in the
@@ -11195,8 +10907,7 @@ GFM dialect to HTML.")
      ;; No tests
      `(#:tests? #f))
     (native-inputs
-     `(("ruby-rake-compiler" ,ruby-rake-compiler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rake-compiler ruby-rspec))
     (home-page "https://github.com/tmm1/http_parser.rb")
     (synopsis "HTTP parser un Ruby")
     (description "This gem is a simple callback-based HTTP request/response
@@ -11219,11 +10930,9 @@ parser for writing http servers, clients and proxies.")
      ;; No tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("ruby-eventmachine" ,ruby-eventmachine)
-        ("ruby-http-parser.rb" ,ruby-http-parser.rb)))
+      (list ruby-eventmachine ruby-http-parser.rb))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (home-page "https://github.com/igrigorik/em-websocket")
     (synopsis "EventMachine based WebSocket server")
     (description "Em-websocket is an EventMachine based WebSocket server
@@ -11233,13 +10942,13 @@ implementation.")
 (define-public ruby-rouge
   (package
     (name "ruby-rouge")
-    (version "3.21.0")
+    (version "3.26.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rouge" version))
               (sha256
                (base32
-                "1agrrmj88k9jkk36ra1ml2c1jffpp595pkxmcla74ac9ia09vn3s"))))
+                "197k0vskf72wxx0gzwld2jzg27bb7982xlvnzy9adlvkzp7nh8vf"))))
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)); No rakefile
     (home-page "http://rouge.jneen.net/")
@@ -11265,7 +10974,7 @@ is compatible with stylesheets designed for pygments.")
                 "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory
     (home-page "https://github.com/intridea/hashie")
     (synopsis "Extensions to Ruby Hashes")
@@ -11285,7 +10994,7 @@ hashes more powerful.")
                 "14ijr2fsjwhrkjkcaz81d5xnfa4vvgvcflrff83avqw9klm011yw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-hoe" ,ruby-hoe)))
+     (list ruby-hoe))
     (home-page "https://github.com/adrianomitre/heredoc_unindent")
     (synopsis "Heredoc indentation cleaner")
     (description "This gem removes common margin from indented strings, such
@@ -11315,9 +11024,7 @@ indentation will probably be an issue and hence this gem.")
          "1a0wh7y3va2m7bjza95na2snw0vrdh9syz40mpjvjphbc4ph3pzg"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-hashie" ,ruby-hashie)
-       ("ruby-heredoc-unindent" ,ruby-heredoc-unindent)))
+     (list ruby-rspec ruby-hashie ruby-heredoc-unindent))
     (arguments
      '(#:test-target "spec"
        #:phases
@@ -11360,9 +11067,7 @@ YAML.load suitable for accepting user input in Ruby applications.")
                (invoke "rspec"))
              #t)))))
     (native-inputs
-     `(("ruby-coveralls" ,ruby-coveralls)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-coveralls ruby-rspec ruby-simplecov))
     (synopsis "Simple YAML check tool")
     (description
      "@code{yaml-lint} will simply try to load the YAML file with the built-in
@@ -11383,7 +11088,7 @@ Ruby yaml library.")
     (build-system ruby-build-system)
     (arguments `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)))
+     (list bundler))
     (home-page "https://github.com/jekyll/mercenary")
     (synopsis "Command-line apps library in Ruby")
     (description "Mercenary is a lightweight and flexible library for writing
@@ -11438,10 +11143,9 @@ methods for your source as @code{Forwardable::Extended}.")
                 "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-forwardable-extended" ,ruby-forwardable-extended)))
+     (list ruby-forwardable-extended))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     ;; Fails with: cannot load such file --
     ;; /tmp/guix-build-ruby-pathutil-0.16.0.drv-0/gem/benchmark/support/task
     (arguments `(#:tests? #f))
@@ -11481,9 +11185,9 @@ Pathname.")
                (invoke "rspec")))))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-unicode-display-width" ,ruby-unicode-display-width)))
+     (list ruby-unicode-display-width))
     (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)))
+     (list ruby-rspec))
     (home-page "https://github.com/tj/terminal-table")
     (synopsis "Simple, feature rich ASCII table generation library")
     (description
@@ -11546,7 +11250,7 @@ Unicode formatted tables.")
                 "1qzlqhpiqz28624fp0ak76hfy7908w6kpx62v7z43aiwjv0yc6q0"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("jekyll" ,jekyll)))
+     (list jekyll))
     (home-page "https://github.com/sverrirs/jekyll-paginate-v2")
     (synopsis "Pagination Generator for Jekyll 3")
     (description "The Pagination Generator forms the core of the pagination
@@ -11568,7 +11272,7 @@ logic in Jekyll.  It calculates and generates the pagination pages.")
     (arguments
      '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-multipart-post" ,ruby-multipart-post)))
+     (list ruby-multipart-post))
     (synopsis "Ruby HTTP/REST API client library")
     (description
      "Faraday is a HTTP/REST API client library which provides a common
@@ -11614,10 +11318,7 @@ interface over different adapters.")
               (invoke "rspec"))
             #t)))))
    (native-inputs
-    `(("bundler" ,bundler)
-      ("ruby-rake-compiler" ,ruby-rake-compiler)
-      ("ruby-rspec" ,ruby-rspec)
-      ("ruby-rubocop" ,ruby-rubocop)))
+    (list bundler ruby-rake-compiler ruby-rspec ruby-rubocop))
    (synopsis "New I/O for Ruby")
    (description
     "@code{nio} provides cross-platform asynchronous I/O primitives in Ruby
@@ -11641,7 +11342,7 @@ for scalable network clients and servers.")
     '(;; No included tests
       #:tests? #f))
    (propagated-inputs
-    `(("ruby-activesupport" ,ruby-activesupport)))
+    (list ruby-activesupport))
    (synopsis "Generate URIs idenfitying model instances in Ruby")
    (description
     "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
@@ -11665,8 +11366,7 @@ uniquely identify it.")
      '(;; No included tests
        #:tests? #f))
     (propagated-inputs
-     `(("ruby-concurrent" ,ruby-concurrent)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-concurrent ruby-rack))
     (synopsis "Sprockets is a Rack-based asset packaging system")
     (description
      "Sprockets is a Rack-based asset packaging system that concatenates and
@@ -11686,7 +11386,7 @@ serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
         (base32 "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "framework-agnostic way to render logic-free views")
     (description
      "Mustache is a framework-agnostic way to render logic-free views.
@@ -11738,20 +11438,20 @@ characteristics.")
      `(;; FIXME: Tests depend on rubocop-standard.
        #:tests? #f))
     (native-inputs
-     `(("ruby-awesome-print" ,ruby-awesome-print)
-       ("ruby-redcarpet" ,ruby-redcarpet)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-rubocop-performance" ,ruby-rubocop-performance)
-       ("ruby-pry-byebug" ,ruby-pry-byebug)))
-    (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-mercenary" ,ruby-mercenary)
-       ("ruby-nokogumbo" ,ruby-nokogumbo)
-       ("ruby-parallel" ,ruby-parallel)
-       ("ruby-rainbow" ,ruby-rainbow)
-       ("ruby-typhoeus" ,ruby-typhoeus)
-       ("ruby-yell" ,ruby-yell)))
+     (list ruby-awesome-print
+           ruby-redcarpet
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-performance
+           ruby-pry-byebug))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-mercenary
+           ruby-nokogumbo
+           ruby-parallel
+           ruby-rainbow
+           ruby-typhoeus
+           ruby-yell))
     (synopsis "Test your rendered HTML files to make sure they're accurate")
     (description
      "HTMLProofer is a set of tests to validate your HTML output.  These
@@ -11811,10 +11511,7 @@ entities.")
                 (string-append all " \"--exclude=.*\\.md\".freeze,")))
              #t)))))
     (propagated-inputs
-     `(("ruby-mustermann" ,ruby-mustermann)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-rack-protection" ,ruby-rack-protection)
-       ("ruby-tilt" ,ruby-tilt)))
+     (list ruby-mustermann ruby-rack ruby-rack-protection ruby-tilt))
     (synopsis "DSL for quick web applications creation in Ruby")
     (description
      "Sinatra is a DSL for quickly creating web applications in Ruby with
@@ -11838,9 +11535,7 @@ minimal effort.")
      ;; No tests.
      '(#:tests? #f))
     (propagated-inputs
-     `(("ruby-daemons" ,ruby-daemons)
-       ("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-rack" ,ruby-rack)))
+     (list ruby-daemons ruby-eventmachine ruby-rack))
     (synopsis "Thin and fast web server for Ruby")
     (description "Thin is a Ruby web server that glues together 3 Ruby libraries:
 @itemize
@@ -11876,8 +11571,7 @@ and stability,
                (("<thin>.freeze, \\[\\\"< 1.7\", ") "<thin>, ["))
              #t)))))
     (propagated-inputs
-     `(("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-thin" ,ruby-thin)))
+     (list ruby-eventmachine ruby-thin))
     (synopsis "Simple, upgradable WebSockets for Ruby Thin")
     (description "Skinny is a simple, upgradable WebSockets for Ruby, using
 the Thin library.")
@@ -11903,9 +11597,9 @@ the Thin library.")
                       (setenv "HOME" "/tmp")
                       #t)))))
     (propagated-inputs
-     `(("ruby-ffi" ,ruby-ffi)))
+     (list ruby-ffi))
     (native-inputs
-     `(("ruby-mkmf-lite" ,ruby-mkmf-lite)))
+     (list ruby-mkmf-lite))
     (synopsis "Gather file system information")
     (description
      "The @code{sys-filesystem} library provides a cross-platform interface
@@ -11950,13 +11644,13 @@ for gathering file system information, such as disk space and mount points.")
                  (("\"sinatra\", \"~> 1.2\"") "\"sinatra\", \">= 1.2\""))
                #t)))))
     (inputs
-     `(("ruby-eventmachine" ,ruby-eventmachine)
-       ("ruby-mail" ,ruby-mail)
-       ("ruby-rack" ,ruby-rack)
-       ("ruby-sinatra" ,ruby-sinatra)
-       ("ruby-skinny" ,ruby-skinny)
-       ("ruby-sqlite3" ,ruby-sqlite3)
-       ("ruby-thin" ,ruby-thin)))
+     (list ruby-eventmachine
+           ruby-mail
+           ruby-rack
+           ruby-sinatra
+           ruby-skinny
+           ruby-sqlite3
+           ruby-thin))
     (synopsis "SMTP server which catches messages to display them a browser")
     (description
      "MailCatcher runs a super simple SMTP server which catches any message
@@ -11984,10 +11678,9 @@ then check out http://127.0.0.1:1080 to see the mail.")
     (arguments
      `(#:test-target "spec"))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list bundler ruby-rspec))
     (inputs
-     `(("ruby-simplecov" ,ruby-simplecov)))
+     (list ruby-simplecov))
     (synopsis "Pure Ruby library for event-driven IO")
     (description
      "This package provides a pure Ruby library for event-driven IO.")
@@ -12014,7 +11707,7 @@ then check out http://127.0.0.1:1080 to see the mail.")
            (lambda _
              (invoke "gem" "build" ".gemspec"))))))
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)))
+     (list ruby-addressable))
     (synopsis "Ruby JSON Schema Validator")
     (description "This library provides Ruby with an interface for validating
 JSON objects against a JSON schema conforming to JSON Schema Draft 4.  Legacy
@@ -12048,11 +11741,9 @@ is also included.")
                ((".*RuboCop.*") ""))
              #t)))))
     (propagated-inputs
-     `(("ruby-json-schema" ,ruby-json-schema)))
+     (list ruby-json-schema))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec-core" ,ruby-rspec-core)
-       ("ruby-rspec-expectations" ,ruby-rspec-expectations)))
+     (list bundler ruby-rspec-core ruby-rspec-expectations))
     (synopsis
      "Compare Open API Initiative specification files")
     (description
@@ -12076,12 +11767,9 @@ backwards-compatible with an older API specification.")
          "0w7y5n74daajvl9gixr91nh8670d7mkgspkk3ql71m8azq3nffbg"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-nokogiri" ,ruby-nokogiri)))
+     (list ruby-nokogiri))
     (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-simplecov" ,ruby-simplecov)))
+     (list bundler ruby-rspec ruby-kramdown ruby-simplecov))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -12111,26 +11799,23 @@ application.")
          "1gf049rm0yvw4r8r5yyi890idbfg8qh0dikqx5prvkh11srl73bz"))))
     (build-system ruby-build-system)
     (propagated-inputs
-     `(("ruby-backport" ,ruby-backport)
-       ("bundler" ,bundler)
-       ("ruby-benchmark" ,ruby-benchmark)
-       ("ruby-e2mmap" ,ruby-e2mmap)
-       ("ruby-jaro-winkler" ,ruby-jaro-winkler)
-       ("ruby-kramdown" ,ruby-kramdown)
-       ("ruby-kramdown-parser-gfm" ,ruby-kramdown-parser-gfm)
-       ("ruby-maruku" ,ruby-maruku)
-       ("ruby-nokogiri" ,ruby-nokogiri)
-       ("ruby-parser" ,ruby-parser)
-       ("ruby-reverse-markdown" ,ruby-reverse-markdown)
-       ("ruby-rubocop" ,ruby-rubocop)
-       ("ruby-thor" ,ruby-thor)
-       ("ruby-tilt" ,ruby-tilt)
-       ("ruby-yard" ,ruby-yard)))
-    (native-inputs
-     `(("ruby-rspec" ,ruby-rspec)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-webmock" ,ruby-webmock)))
+     (list ruby-backport
+           bundler
+           ruby-benchmark
+           ruby-e2mmap
+           ruby-jaro-winkler
+           ruby-kramdown
+           ruby-kramdown-parser-gfm
+           ruby-maruku
+           ruby-nokogiri
+           ruby-parser
+           ruby-reverse-markdown
+           ruby-rubocop
+           ruby-thor
+           ruby-tilt
+           ruby-yard))
+    (native-inputs
+     (list ruby-rspec ruby-pry ruby-simplecov ruby-webmock))
     ;; FIXME: can't figure out how to run the tests properly:
 
     ;; An error occurred while loading spec_helper.
@@ -12198,9 +11883,7 @@ which snapshots to consider and what files to include.")
           "119fgdyb57gmss2yvfwfr47wcy8nny38sai72446krpihyavpizw"))))
     (build-system ruby-build-system)
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-minitest-focus" ,ruby-minitest-focus)
-       ("ruby-minitest-reporters" ,ruby-minitest-reporters)))
+     (list ruby-minitest ruby-minitest-focus ruby-minitest-reporters))
     (synopsis "Efficient and thread-safe code loader for Ruby")
     (description
      "Zeitwerk implements constant autoloading with Ruby semantics.  Each gem
@@ -12253,8 +11936,7 @@ eager loading.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-rspec" ,ruby-rspec)))
+     (list ruby-bump ruby-rspec))
     (synopsis "Run @file{.travis.yml} files locally")
     (description
      "WWTD is a @dfn{Travis Simulator} that lets you run test matrices
@@ -12278,11 +11960,9 @@ defined in @file{.travis.yml} on your local machine, using @code{rvm},
      `(#:tests? #f
        #:gem-flags (list  "--" "--use-system-libraries")))
     (inputs
-     `(("libgit2" ,libgit2)))
+     (list libgit2))
     (native-inputs
-     `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rake-compiler" ,ruby-rake-compiler)))
+     (list ruby-minitest ruby-pry ruby-rake-compiler))
     (synopsis "Ruby bindings to the libgit2 linkable C Git library")
     (description "Rugged is a library for accessing libgit2 in Ruby.  It gives
 you the speed and portability of libgit2 with the beauty of the Ruby
@@ -12371,7 +12051,7 @@ giving detailed reports on the time taken for each task.")
     (arguments
      `(#:tests? #false))     ;there are none
     (propagated-inputs
-      `(("jekyll" ,jekyll)))
+      (list jekyll))
     (synopsis
       "Jekyll plugin to generate an Atom feed of your Jekyll posts")
     (description
@@ -12396,7 +12076,7 @@ of your Jekyll posts.")
     (arguments
      `(#:tests? #false))     ;there are none
     (propagated-inputs
-      `(("jekyll" ,jekyll)))
+      (list jekyll))
     (synopsis
       "Automatically generate a sitemap.xml for your Jekyll site")
     (description
@@ -12421,7 +12101,7 @@ a sitemaps.org compliant sitemap for your Jekyll site.")
    (arguments
     `(#:tests? #false))
    (propagated-inputs
-    `(("jekyll" ,jekyll)))
+    (list jekyll))
    (synopsis
     "Jekyll plugin to add metadata tags for search engines and social networks")
    (description
@@ -12443,10 +12123,9 @@ and social networks to better index and display your site's content.")
         (base32
          "1jrsajzhzpnfa8hj6lbf7adn8hls56dz3yw1gvzgz9y4zkka3k9v"))))
     (build-system ruby-build-system)
-    (native-inputs `(("tzdata" ,tzdata-for-tests)))
+    (native-inputs (list tzdata-for-tests))
     (propagated-inputs
-     `(("ruby-mail" ,ruby-mail)
-       ("ruby-term-ansicolor" ,ruby-term-ansicolor)))
+     (list ruby-mail ruby-term-ansicolor))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'replace-git-ls-files
@@ -12482,3 +12161,27 @@ resource assignment, cost and revenue planning, risk and communication
 management, status tracking and reporting.")
     (home-page "https://taskjuggler.org")
     (license license:gpl2)))
+
+(define-public ruby-cmath
+  (package
+    (name "ruby-cmath")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cmath" version))
+       (sha256
+        (base32
+         "1xkz6xyhpkjbdvpdib8450w62rls1mjryz0gzbbnadxkxn82nb8m"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #false))
+    (native-inputs
+     (list bundler ruby-rake-compiler))
+    (synopsis "Trigonometric functions for complex numbers")
+    (description
+     "This gem is a library that provides trigonometric and transcendental
+functions for complex numbers.  The functions in this module accept integers,
+floating-point numbers or complex numbers as arguments.")
+    (home-page "https://github.com/ruby/cmath")
+    (license license:bsd-2)))
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index ab84065361..6d4f77adf8 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -145,10 +145,9 @@ low-end hardware and serving many concurrent requests.")
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-wait-timeout" ,rust-wait-timeout-0.2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (home-page "https://github.com/sharkdp/bat")
     (synopsis "@command{cat} clone with syntax highlighting and git integration")
     (description
@@ -228,9 +227,9 @@ highlighting tool to ease code review from your terminal.")
          ("rust-url" ,rust-url-2)
          ("rust-yaml-rust" ,rust-yaml-rust-0.4))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/fcsonline/drill")
     (synopsis "HTTP load testing application")
     (description
@@ -356,10 +355,9 @@ Features include:
                           (string-append share "/zsh/site-functions/_exa"))
                #t))))))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://the.exa.website/")
     (synopsis "Modern replacement for ls")
     (description "@code{exa} is a modern replacement for the command-line
@@ -431,7 +429,7 @@ also knows about symlinks, extended attributes, and Git.")
                (rename-file (string-append out "/etc/bash_completion.d/fd.bash")
                             (string-append out "/etc/bash_completion.d/fd"))
                #t))))))
-    (inputs `(("jemalloc" ,jemalloc)))
+    (inputs (list jemalloc))
     (home-page "https://github.com/sharkdp/fd")
     (synopsis "Simple, fast and user-friendly alternative to find")
     (description
@@ -483,8 +481,7 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
           "0m5lrvx6wwkxqdc5digm1k4diiaqcg5j4pia77s5nw1aam7k51hy"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.46
-       #:modules ((guix build cargo-build-system)
+     `(#:modules ((guix build cargo-build-system)
                   (guix build utils)
                   (srfi srfi-26))
        #:cargo-inputs
@@ -598,7 +595,7 @@ characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
                (wrap-program (string-append out "/bin/i3status-rs")
                  `("PATH" prefix ,paths))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("alsa-utils" ,alsa-utils)
        ("bash-minimal" ,bash-minimal)
@@ -672,9 +669,7 @@ bar.  It is also compatible with sway.")
              #t)))
        #:features '("pcre2")))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pcre2" ,pcre2)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc pcre2 pkg-config))
     (home-page "https://github.com/BurntSushi/ripgrep")
     (synopsis "Line-oriented search tool")
     (description
@@ -691,7 +686,7 @@ gitignore rules.")
       (origin
         (method url-fetch)
         (uri (crate-uri "cbindgen" version))
-        (file-name (string-append name "-" version ".crate"))
+        (file-name (string-append name "-" version ".tar.xz"))
         (sha256
          (base32
           "0673pq96hs7waavkv58v2pakpxpsfyjvbraa5kyl2b44phgdzcid"))))
@@ -743,7 +738,7 @@ gitignore rules.")
        #:cargo-development-inputs
        (("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
-     `(("python-cython" ,python-cython)))))
+     (list python-cython))))
 
 (define-public rust-cbindgen-0.16
   (package
@@ -875,8 +870,7 @@ gitignore rules.")
        #:cargo-development-inputs
        (("rust-boxxy" ,rust-boxxy-0.11))))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("libseccomp" ,libseccomp)))
+     (list libpcap libseccomp))
     (home-page "https://github.com/kpcyrd/sniffglue")
     (synopsis "Secure multithreaded packet sniffer")
     (description
@@ -913,8 +907,8 @@ of the project is to be runnable on untrusted networks without crashing.")
          ("rust-tokio" ,rust-tokio-0.2)
          ("rust-tui" ,rust-tui-0.16)
          ("rust-unicode-width" ,rust-unicode-width-0.1))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("openssl" ,openssl)))
+    (native-inputs (list pkg-config))
+    (inputs (list openssl))
     (home-page "https://github.com/Rigellute/spotify-tui")
     (synopsis "Terminal user interface for Spotify")
     (description "This package provides a terminal user interface for Spotify")
@@ -933,8 +927,7 @@ of the project is to be runnable on untrusted networks without crashing.")
         (base32 "0hzyqpjxya6g1ifb3hvjvj0zl2aigx898pz7h5pl46z50jp2pdc8"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:cargo-build-flags '("--release" "--features" "external-harfbuzz")
+     `(#:cargo-build-flags '("--release" "--features" "external-harfbuzz")
        #:cargo-inputs
        (("rust-atty" ,rust-atty-0.2)
         ("rust-byte-unit" ,rust-byte-unit-4)
@@ -983,7 +976,7 @@ of the project is to be runnable on untrusted networks without crashing.")
                     (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (copy-recursively "docs/src" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("harfbuzz" ,harfbuzz)
@@ -1070,11 +1063,9 @@ colorized view to stdout.")
         ("rust-regex" ,rust-regex-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libgit2" ,libgit2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libgit2 openssl zlib))
     (home-page "https://tokei.rs")
     (synopsis "Count code, quickly")
     (description
@@ -1177,8 +1168,7 @@ runs a command whenever it detects modifications.")
          "06bc3s5kjwpyr2cq79p0306a9bqp3xp928d750ybby9npq2dvj3z"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:install-source? #f             ; virtual manifest
+     `(#:install-source? #f             ; virtual manifest
        #:cargo-test-flags
        '("--release" "--"
          "--skip=tests::test_version_check"         ;; It need rustc's version
@@ -1305,8 +1295,7 @@ support for Rust.")
           "0fwdxhdj2963xr6xfqr56i7hikhsdv562vgxq2dj3h2mi3dil1k6"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52                ;inherited from rust-cargo
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cbindgen" ,rust-cbindgen-0.19)
         ("rust-cargo" ,rust-cargo-0.53) ;
         ("rust-anyhow" ,rust-anyhow-1)
@@ -1321,12 +1310,9 @@ support for Rust.")
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-regex" ,rust-regex-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl libssh2 openssl zlib))
     (home-page "https://github.com/lu-zero/cargo-c")
     (synopsis "Build and install C-compatible libraries")
     (description
@@ -1401,9 +1387,9 @@ C-compatible) software.")
         ("rust-remove-dir-all" ,rust-remove-dir-all-0.5.2)
         ("rust-tempfile" ,rust-tempfile-3))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/dbrgn/tealdeer/")
     (synopsis "Fetch and show tldr help pages for many CLI commands")
     (description
@@ -1451,7 +1437,7 @@ Full featured offline client with caching support.")
                     (man   (string-append out "/share/man/man1")))
                (install-file "Documentation/git-absorb.1" man)))))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/tummychow/git-absorb")
     (synopsis "Git tool for making automatic fixup commits")
     (description
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 73f94a3929..2a43e88727 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -4,13 +4,14 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
-;;; Copyright © 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
 ;;; Copyright © 2020, 2021 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -107,1372 +108,671 @@
     (inherit base-rust)
     (version version)
     (source
-      (origin
-        (inherit (package-source base-rust))
-        (uri (rust-uri version))
-        (sha256 (base32 checksum))))
+     (origin
+       (inherit (package-source base-rust))
+       (uri (rust-uri version))
+       (sha256 (base32 checksum))))
     (native-inputs
      (alist-replace "cargo-bootstrap" (list base-rust "cargo")
                     (alist-replace "rustc-bootstrap" (list base-rust)
                                    (package-native-inputs base-rust))))))
 
-(define-public mrustc
-  (let ((rustc-version "1.19.0"))
-    (package
-      (name "mrustc")
-      (version "0.9")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/thepowersgang/mrustc")
-                      (commit (string-append "v" version))))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))
-      (outputs '("out" "cargo"))
-      (build-system gnu-build-system)
-      (inputs
-       `(("zlib" ,zlib)))
-      (native-inputs
-       `(("bison" ,bison)
-         ("flex" ,flex)
-         ;; Required for the libstd sources.
-         ("rustc" ,(package-source rust-1.19))))
-      (arguments
-       `(#:test-target "test"
-         #:make-flags
-         (list ,(string-append "RUSTC_TARGET="
-                               (or (%current-target-system)
-                                   (nix-system->gnu-triplet-for-rust))))
-         #:phases
-         (modify-phases %standard-phases
-          (add-after 'unpack 'patch-date
-            (lambda _
-              (substitute* "Makefile"
-               (("shell date") "shell date -d @1"))
-              (substitute* "run_rustc/Makefile"
-               (("[$]Vtime ") "$V "))
-              #t))
-           (add-after 'patch-date 'unpack-target-compiler
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (invoke "tar" "xf" (assoc-ref inputs "rustc"))
-               (chdir ,(string-append "rustc-" rustc-version "-src"))
-               (invoke "patch" "-p0" ,(string-append "../rustc-" rustc-version
-                                                     "-src.patch"))
-               (chdir "..")
-               (setenv "RUSTC_VERSION" ,rustc-version)
-               (setenv "MRUSTC_TARGET_VER"
-                ,(version-major+minor rustc-version))
-               (setenv "OUTDIR_SUF" "")
-               #t))
-           (replace 'configure
-             (lambda* (#:key inputs #:allow-other-keys)
-               (setenv "CC" (string-append (assoc-ref inputs "gcc")
-                                           "/bin/gcc"))
-               (setenv "CXX" (string-append (assoc-ref inputs "gcc")
-                                            "/bin/g++"))
-               #t))
-           (add-after 'build 'build-minicargo
-             (lambda* (#:key make-flags #:allow-other-keys)
-               ;; TODO: minicargo.mk: RUSTC_VERSION=$(RUSTC_VERSION) RUSTC_CHANNEL=$(RUSTC_SRC_TY) OUTDIR_SUF=$(OUTDIR_SUF)
-               (apply invoke "make" "-f" "minicargo.mk" "LIBS" make-flags)
-               (apply invoke "make" "-C" "tools/minicargo" make-flags)))
-           ;(add-after 'check 'check-locally
-           ;  (lambda* (#:key make-flags #:allow-other-keys)
-           ;    ;; The enum test wouldn't work otherwise.
-           ;    ;; See <https://github.com/thepowersgang/mrustc/issues/137>.
-           ;    (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version))
-           ;    (apply invoke "make" "local_tests" make-flags)))
-           (replace 'install
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (tools-bin (string-append out "/tools/bin"))
-                      (cargo-out (assoc-ref outputs "cargo"))
-                      (cargo-bin (string-append cargo-out "/bin"))
-                      (lib (string-append out "/lib"))
-                      (lib/rust (string-append lib "/mrust"))
-                      (gcc (assoc-ref inputs "gcc"))
-                      (run_rustc (string-append out
-                                                "/share/mrustc/run_rustc")))
-                 ;; These files are not reproducible.
-                 (for-each delete-file (find-files "output" "\\.txt$"))
-                 ;(delete-file-recursively "output/local_tests")
-                 (mkdir-p (dirname lib/rust))
-                 (copy-recursively "output" lib/rust)
-                 (mkdir-p bin)
-                 (mkdir-p tools-bin)
-                 (install-file "bin/mrustc" bin)
-                 ;; minicargo uses relative paths to resolve mrustc.
-                 (install-file "tools/bin/minicargo" tools-bin)
-                 (install-file "tools/bin/minicargo" cargo-bin)
-                 (mkdir-p run_rustc)
-                 (copy-file "run_rustc/Makefile"
-                            (string-append run_rustc "/Makefile"))
-                 #t))))))
-      (synopsis "Compiler for the Rust programming language")
-      (description "Rust is a systems programming language that provides memory
-safety and thread safety guarantees.")
-      (home-page "https://github.com/thepowersgang/mrustc")
-      ;; Dual licensed.
-      (license (list license:asl2.0 license:expat)))))
-
-(define rust-1.19
+;;; Note: mrustc's only purpose is to be able to bootstap Rust; it's designed
+;;; to be used in source form.  The latest support for bootstrapping from
+;;; 1.39.0 is not yet released so use the latest commit (see:
+;;; https://github.com/thepowersgang/mrustc/issues/185).
+(define %mrustc-commit "474bec9cfd7862a20e7288cecd7fcf5e18648b9a")
+(define %mrustc-source
+  (let* ((version "0.9")
+         (commit %mrustc-commit)
+         (revision "1")
+         (name "mrustc"))
+    (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/thepowersgang/mrustc")
+            (commit commit)))
+      (file-name (git-file-name name (git-version version revision commit)))
+      (sha256
+       (base32
+        "1zacz5qia0r457mv74wvrvznnv4az5g2w9j8ji9ssy727wljhvz7")))))
+
+;;; Rust 1.39 is special in that it is built with mrustc, which shortens the
+;;; bootstrap path.
+(define rust-1.39
   (package
     (name "rust")
-    (version "1.19.0")
+    (version "1.39.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (rust-uri "1.19.0"))
-        (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))
-        (modules '((guix build utils)))
-        (snippet '(begin (delete-file-recursively "src/llvm") #t))
-        (patches (search-patches "rust-1.19-mrustc.patch"))))
+     (origin
+       (method url-fetch)
+       (uri (rust-uri version))
+       (sha256 (base32 "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl"))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file-recursively
+                           '("src/llvm-emscripten"
+                             "src/llvm-project"
+                             "vendor/jemalloc-sys/jemalloc")))
+       (patches (search-patches "rustc-1.39.0-src.patch"))
+       (patch-flags '("-p0"))))         ;default is -p1
     (outputs '("out" "cargo"))
-    (properties '((timeout . 72000)               ;20 hours
-                  (max-silent-time . 18000)))     ;5 hours (for armel)
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    (inputs
+     `(("libcurl" ,curl)
+       ("libssh2" ,libssh2)
+       ("llvm" ,llvm)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("pkg-config" ,pkg-config)
+       ;; Required for the libstd sources.
+       ("mrustc-source" ,%mrustc-source)))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
-       #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
+       #:modules ((guix build cargo-utils)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:test-target "test"
+       ;; Rust's own .so library files are not found in any RUNPATH, but
+       ;; that doesn't seem to cause issues.
+       #:validate-runpath? #f
+       #:make-flags
+       (list ,(string-append "RUSTC_TARGET="
+                             (or (%current-target-system)
+                                 (nix-system->gnu-triplet-for-rust)))
+             ,(string-append "RUSTC_VERSION=" version)
+             ,(string-append "MRUSTC_TARGET_VER="
+                             (version-major+minor version))
+             "OUTDIR_SUF=")           ;do not add version suffix to output dir
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'set-env
+         (add-after 'unpack 'patch-reference-to-cc
+           ;; This prevents errors like 'error: linker `cc` not found' when
+           ;; "cc" is not found on PATH.
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; Disable test for cross compilation support.
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             ;; guix llvm-3.9.1 package installs only shared libraries
-             (setenv "LLVM_LINK_SHARED" "1")
-             #t))
-         (add-after 'unpack 'patch-cargo-tomls
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "src/librustc_errors/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-term = \"0.4.4\"
-"))
-             (substitute* "src/librustc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-getopts = { path = \"../libgetopts\" }
-"))
-             (substitute* "src/librustdoc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-test = { path = \"../libtest\" }
-"))
-             #t))
-         (add-after 'unpack 'patch-tests
+             (let ((gcc (assoc-ref inputs "gcc")))
+               (substitute* (find-files "." "^link.rs$")
+                 (("\"cc\".as_ref")
+                  (format #f "~s.as_ref" (string-append gcc "/bin/gcc")))))))
+         (add-after 'unpack 'setup-mrustc-sources
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/libstd/process.rs"
-                 ;; The newline is intentional.
-                 ;; There's a line length "tidy" check in Rust which would
-                 ;; fail otherwise.
-                 (("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\"")))
-               (substitute* "src/libstd/net/tcp.rs"
-                 ;; There is no network in build environment
-                 (("fn connect_timeout_unroutable")
-                  "#[ignore]\nfn connect_timeout_unroutable"))
-               ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-               (substitute* "src/libstd/sys/unix/process/process_common.rs"
-                (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-               #t)))
-         (add-after 'patch-tests 'patch-aarch64-test
-           (lambda* _
-             (substitute* "src/librustc_back/dynamic_lib.rs"
-               ;; This test is known to fail on aarch64 and powerpc64le:
-               ;; https://github.com/rust-lang/rust/issues/45410
-               (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-             #t))
-         (add-after 'patch-tests 'use-readelf-for-tests
+             (copy-recursively (assoc-ref inputs "mrustc-source") "../mrustc")
+             ;; The Makefile of mrustc expects the sources directory of rustc
+             ;; to be at this location, and it simplifies things to make it
+             ;; so.
+             (symlink (getcwd)
+                      (string-append "../mrustc/rustc-" ,version "-src"))))
+         (add-after 'setup-mrustc-sources 'patch-makefiles
+           ;; This disables building the (unbundled) LLVM.
+           (lambda* (#:key inputs parallel-build? #:allow-other-keys)
+             (let ((llvm (assoc-ref inputs "llvm"))
+                   (job-spec (format #f "-j~a"
+                                     (if parallel-build?
+                                         (number->string (parallel-job-count))
+                                         "1"))))
+               (with-directory-excursion "../mrustc"
+                 (substitute* '("minicargo.mk"
+                                "run_rustc/Makefile")
+                   ;; Use the system-provided LLVM.
+                   (("LLVM_CONFIG := .*")
+                    (string-append "LLVM_CONFIG := " llvm "/bin/llvm-config\n"))
+                   (("\\$\\(LLVM_CONFIG\\): .*")
+                    "$(LLVM_CONFIG):\n")
+                   (("\\$Vcd \\$\\(RUSTCSRC\\)build && \\$\\(MAKE\\).*")
+                    "true\n"))
+                 (substitute* "Makefile"
+                   ;; Patch date and git obtained version information.
+                   ((" -D VERSION_GIT_FULLHASH=.*")
+                    (string-append
+                     " -D VERSION_GIT_FULLHASH=\\\"" ,%mrustc-commit "\\\""
+                     " -D VERSION_GIT_BRANCH=\\\"master\\\""
+                     " -D VERSION_GIT_SHORTHASH=\\\""
+                     ,(string-take %mrustc-commit 7) "\\\""
+                     " -D VERSION_BUILDTIME="
+                     "\"\\\"Thu, 01 Jan 1970 00:00:01 +0000\\\"\""
+                     " -D VERSION_GIT_ISDIRTY=0\n"))
+                   ;; Do not try to fetch sources from the Internet.
+                   ((": \\$\\(RUSTC_SRC_DL\\)")
+                    ":"))
+                 (substitute* "run_rustc/Makefile"
+                   (("[$]Vtime ")
+                    "$V ")
+                   ;; Unlock the number of parallel jobs for cargo.
+                   (("-j [[:digit:]]+ ")
+                    "")
+                   ;; Patch the shebang of a generated wrapper for rustc
+                   (("#!/bin/sh")
+                    (string-append "#!" (which "sh"))))))))
+         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
            (lambda* _
-             ;; nm doesn't recognize the file format because of the
-             ;; nonstandard sections used by the Rust compiler, but readelf
-             ;; ignores them.
-             (substitute* "src/test/run-make/atomic-lock-free/Makefile"
-               (("\tnm ")
-                "\treadelf -c "))
-             #t))
-         (add-after 'patch-tests 'remove-unsupported-tests
-           (lambda* _
-             ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-             ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-             (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-             #t))
-         (add-after 'patch-source-shebangs 'patch-cargo-checksums
-           (lambda* _
-             (use-modules (guix build cargo-utils))
-             (substitute* "src/Cargo.lock"
-               (("(\"checksum .* = )\".*\"" all name)
+             (substitute* "Cargo.lock"
+               (("(checksum = )\".*\"" all name)
                 (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (generate-all-checksums "src/vendor")
-             #t))
-         ;; This phase is overridden by newer versions.
+             (generate-all-checksums "vendor")))
+         (add-before 'configure 'configure-cargo-home
+           (lambda _
+             (let ((cargo-home (string-append (getcwd) "/.cargo")))
+               (mkdir-p cargo-home)
+               (setenv "CARGO_HOME" cargo-home))))
          (replace 'configure
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda _
+             (setenv "CC" "gcc")
+             (setenv "CXX" "g++")
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")
+             ;; This is a workaround for
+             ;; https://github.com/thepowersgang/mrustc/issues/138.
+             (setenv "LIBSSH2_SYS_USE_PKG_CONFIG" "yes")
+             ;; rustc still insists on having 'cc' on PATH in some places
+             ;; (e.g. when building the 'test' library crate).
+             (mkdir-p "/tmp/bin")
+             (symlink (which "gcc") "/tmp/bin/cc")
+             (setenv "PATH" (string-append "/tmp/bin:" (getenv "PATH")))))
+         (delete 'patch-generated-file-shebangs)
          (replace 'build
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))
-               (setenv "CFG_COMPILER_HOST_TRIPLE"
-                ,(nix-system->gnu-triplet (%current-system)))
-               (setenv "CFG_RELEASE" "")
-               (setenv "CFG_RELEASE_CHANNEL" "stable")
-               (setenv "CFG_LIBDIR_RELATIVE" "lib")
-               (setenv "CFG_VERSION" "1.19.0-stable-mrustc")
-               (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version))
-               ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.
-               (mkdir-p "output")
-               ;; mrustc 0.9 doesn't check the search paths for crates anymore.
-               (copy-recursively (string-append rustc-bootstrap "/lib/mrust")
-                                 "output")
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/rustc" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/rustc-build"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               (setenv "CFG_COMPILER_HOST_TRIPLE" #f)
-               (setenv "CFG_RELEASE" #f)
-               (setenv "CFG_RELEASE_CHANNEL" #f)
-               (setenv "CFG_VERSION" #f)
-               (setenv "CFG_PREFIX" #f)
-               (setenv "CFG_LIBDIR_RELATIVE" #f)
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/tools/cargo" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/cargo-build"
-                       "-L" "output/"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               ;; Now use the newly-built rustc to build the libraries.
-               ;; One day that could be replaced by:
-               ;; (invoke "output/cargo-build/cargo" "build"
-               ;;         "--manifest-path" "src/bootstrap/Cargo.toml"
-               ;;         "--verbose") ; "--locked" "--frozen"
-               ;; but right now, Cargo has problems with libstd's circular
-               ;; dependencies.
-               (mkdir-p "output/target-libs")
-               (for-each (match-lambda
-                          ((name . flags)
-                            (write name)
-                            (newline)
-                            (apply invoke
-                                   "output/rustc-build/rustc"
-                                   "-C" (string-append "linker="
-                                                       (getenv "CC"))
-                                   ;; Required for libterm.
-                                   "-Z" "force-unstable-if-unmarked"
-                                   "-L" "output/target-libs"
-                                   (string-append "src/" name "/lib.rs")
-                                   "-o"
-                                   (string-append "output/target-libs/"
-                                                  (car (string-split name #\/))
-                                                  ".rlib")
-                                   flags)))
-                         '(("libcore")
-                           ("libstd_unicode")
-                           ("liballoc")
-                           ("libcollections")
-                           ("librand")
-                           ("liblibc/src" "--cfg" "stdbuild")
-                           ("libunwind" "-l" "gcc_s")
-                           ("libcompiler_builtins")
-                           ("liballoc_system")
-                           ("libpanic_unwind")
-                           ;; Uses "cc" to link.
-                           ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread")
-                           ("libarena")
-
-                           ;; Test dependencies:
-
-                           ("libgetopts")
-                           ("libterm")
-                           ("libtest")))
-               #t)))
-         ;; This phase is overridden by newer versions.
-         (replace 'check
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (let* ((src-root (getcwd))
+                    (job-count (if parallel-build?
+                                   (parallel-job-count)
+                                   1))
+                    (job-spec (string-append "-j" (number->string job-count))))
+               ;; Adapted from:
+               ;; https://github.com/dtolnay/bootstrap/blob/master/build.sh.
+               (chdir "../mrustc")
+               (setenv "MINICARGO_FLAGS" job-spec)
+               (setenv "CARGO_BUILD_JOBS" (number->string job-count))
+               (display "Building rustc...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/rustc"
+                      job-spec make-flags)
+               (display "Building cargo...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/cargo"
+                      job-spec make-flags)
+               (display "Rebuilding stdlib with rustc...\n")
+               ;; Note: invoking make with -j would cause a compiler error
+               ;; (unexpected panic).
+               (apply invoke "make" "-C" "run_rustc" make-flags))))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (target-system ,(or (%current-target-system)
-                                        (nix-system->gnu-triplet
-                                         (%current-system))))
-                    (out-libs (string-append out "/lib/rustlib/"
-                                             target-system "/lib")))
-                                        ;(setenv "CFG_PREFIX" out)
-               (mkdir-p out-libs)
-               (copy-recursively "output/target-libs" out-libs)
-               (install-file "output/rustc-build/rustc"
-                             (string-append out "/bin"))
-               (install-file "output/rustc-build/rustdoc"
-                             (string-append out "/bin"))
-               (install-file "output/cargo-build/cargo"
-                             (string-append (assoc-ref outputs "cargo")
-                                            "/bin")))
-             #t)))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("bison" ,bison) ; For the tests
-       ("cmake" ,cmake-minimal)
-       ("flex" ,flex) ; For the tests
-       ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.
-       ;; See <https://bugs.gnu.org/37810>.  Use it on all Rusts for simplicity.
-       ("gdb" ,gdb-8.2) ; For the tests
-       ("procps" ,procps) ; For the tests
-       ("python-2" ,python-2)
-       ("rustc-bootstrap" ,mrustc)
-       ("cargo-bootstrap" ,mrustc "cargo")
-       ("pkg-config" ,pkg-config) ; For "cargo"
-       ("which" ,which)))
-    (inputs
-     `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)
-       ("openssl" ,openssl-1.0)
-       ("libssh2" ,libssh2) ; For "cargo"
-       ("libcurl" ,curl)))  ; For "cargo"
-
-    ;; rustc invokes gcc, so we need to set its search paths accordingly.
-    ;; Note: duplicate its value here to cope with circular dependencies among
-    ;; modules (see <https://bugs.gnu.org/31392>).
-    (native-search-paths
-     (list (search-path-specification
-            (variable "C_INCLUDE_PATH")
-            (files '("include")))
-           (search-path-specification
-            (variable "CPLUS_INCLUDE_PATH")
-            (files '("include/c++" "include")))
-           (search-path-specification
-            (variable "LIBRARY_PATH")
-            (files '("lib" "lib64")))))
-
-    (supported-systems
-     (delete "i686-linux"               ; fails to build, see #35519
-             %supported-systems))
+                    (cargo (assoc-ref outputs "cargo"))
+                    (bin (string-append out "/bin"))
+                    (rustc (string-append bin "/rustc"))
+                    (cargo-bin (string-append cargo "/bin"))
+                    (lib (string-append out "/lib"))
+                    (gnu-triplet ,(or (%current-target-system)
+                                      (nix-system->gnu-triplet-for-rust)))
+                    (system-lib-prefix (string-append lib "/rustlib/"
+                                                      gnu-triplet "/lib")))
+               (mkdir-p (dirname rustc))
+               (copy-file "run_rustc/output/prefix/bin/rustc_binary" rustc)
+               (wrap-program rustc
+                 `("LD_LIBRARY_PATH" = (,system-lib-prefix)))
+               (mkdir-p lib)
+               (copy-recursively "run_rustc/output/prefix/lib" lib)
+               (install-file "run_rustc/output/prefix/bin/cargo" cargo-bin)))))))
     (synopsis "Compiler for the Rust programming language")
     (description "Rust is a systems programming language that provides memory
 safety and thread safety guarantees.")
-    (home-page "https://www.rust-lang.org")
+    (home-page "https://github.com/thepowersgang/mrustc")
+
+    ;; So far mrustc is x86_64-only.  It may support i686 soon:
+    ;; <https://github.com/thepowersgang/mrustc/issues/78>.
+    (supported-systems '("x86_64-linux"))
+
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-1.20
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.19 "1.20.0"
-          "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      #t))
-          (patches '())))
-      (native-inputs
-       `(;; The tests fail with newer versions of GNU Make.
-         ("make" ,gnu-make-4.2)
-         ,@(package-native-inputs base-rust)))
-      (outputs '("out" "doc" "cargo"))
-      ;; Since rust-1.19 is local, it's quite probable that Hydra
-      ;; will build rust-1.19 only as a dependency of rust-1.20.
-      ;; But then Hydra will use the wrong properties, the ones here,
-      ;; for rust-1.19.  Therefore, we copied the properties of
-      ;; rust-1.19 here.
-      (properties '((timeout . 72000)               ;20 hours
-                    (max-silent-time . 18000)))     ;5 hours (for armel)
-      (arguments
-       (substitute-keyword-arguments (package-arguments rust-1.19)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-cargo-tests
-               (lambda _
-                 (substitute* "src/tools/cargo/tests/build.rs"
-                  (("/usr/bin/env") (which "env"))
-                  ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                  (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/death.rs"
-                  ;; This is stuck when built in container.
-                  (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; These tests pull in a dependency on "git", which changes
-                 ;; too frequently take part in the Rust toolchain.
-                 (substitute* "src/tools/cargo/tests/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test
-               ;; https://github.com/rust-lang/rust/issues/47863
-               (lambda _
-                 (substitute* "src/test/run-pass/out-of-stack.rs"
-                   (("// ignore-android") "// ignore-test\n// ignore-android"))
-                 #t))
-             (replace 'configure
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let* ((out (assoc-ref outputs "out"))
-                        (doc (assoc-ref outputs "doc"))
-                        (gcc (assoc-ref inputs "gcc"))
-                        (gdb (assoc-ref inputs "gdb"))
-                        (binutils (assoc-ref inputs "binutils"))
-                        (python (assoc-ref inputs "python-2"))
-                        (rustc (assoc-ref inputs "rustc-bootstrap"))
-                        (cargo (assoc-ref inputs "cargo-bootstrap"))
-                        (llvm (assoc-ref inputs "llvm"))
-                        (jemalloc (assoc-ref inputs "jemalloc")))
-                   (call-with-output-file "config.toml"
-                     (lambda (port)
-                       (display (string-append "
+(define rust-1.40
+  (package
+    (name "rust")
+    (version "1.40.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rust-uri version))
+       (sha256 (base32 "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx"))
+       (modules '((guix build utils)))
+       ;; llvm-emscripten is no longer bundled, as that codegen backend got
+       ;; removed.
+       (snippet '(for-each delete-file-recursively
+                           '("src/llvm-project"
+                             "vendor/jemalloc-sys/jemalloc")))))
+    (outputs '("out" "cargo"))
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    ;; Rust 1.40 does not ship rustc-internal libraries by default (see
+    ;; rustc-dev-split). This means that librustc_driver.so is no longer
+    ;; available in lib/rustlib/$target/lib, which is the directory
+    ;; included in the runpath of librustc_codegen_llvm-llvm.so.  This is
+    ;; detected by our validate-runpath phase as an error, but it is
+    ;; harmless as the codegen backend is loaded by librustc_driver.so
+    ;; itself, which must at that point have been already loaded.  As such,
+    ;; we skip validating the runpath for Rust 1.40.  Rust 1.41 stopped
+    ;; putting the codegen backend in a separate library, which makes this
+    ;; workaround only necessary for this release.
+    (arguments
+     `(#:validate-runpath? #f
+       ;; Only the final Rust is tested, not the intermediate bootstrap ones,
+       ;; for performance and simplicity.
+       #:tests? #f
+       #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
+       #:modules ((guix build cargo-utils)
+                  (guix build utils)
+                  (guix build gnu-build-system)
+                  (ice-9 match)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-env
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh"))
+             (setenv "CC" (search-input-file inputs "/bin/gcc"))
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")))
+         (add-after 'unpack 'add-cc-shim-to-path
+           (lambda _
+             (mkdir-p "/tmp/bin")
+             (symlink (which "gcc") "/tmp/bin/cc")
+             (setenv "PATH" (string-append "/tmp/bin:" (getenv "PATH")))))
+         (add-after 'unpack 'neuter-tidy
+           ;; We often need to patch tests with various Guix-specific paths.
+           ;; This often increases the line length and makes tidy, rustc's
+           ;; style checker, complain.  We could insert additional newlines or
+           ;; add an "// ignore-tidy-linelength" comment, but as an ignore
+           ;; comment must be used, both approaches are fragile due to
+           ;; upstream formatting changes.  As such, disable running the
+           ;; linter during tests, since it's intended for rustc developers
+           ;; anyway.
+           (lambda _
+             (substitute* "src/bootstrap/builder.rs"
+               ((".*::Tidy,.*")
+                ""))))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (gcc (assoc-ref inputs "gcc"))
+                    (python (assoc-ref inputs "python"))
+                    (binutils (assoc-ref inputs "binutils"))
+                    (rustc (assoc-ref inputs "rustc-bootstrap"))
+                    (cargo (assoc-ref inputs "cargo-bootstrap"))
+                    (llvm (assoc-ref inputs "llvm"))
+                    (jemalloc (assoc-ref inputs "jemalloc")))
+               ;; The compiler is no longer directly built against jemalloc, but
+               ;; rather via the jemalloc-sys crate (which vendors the jemalloc
+               ;; source). To use jemalloc we must enable linking to it (otherwise
+               ;; it would use the system allocator), and set an environment
+               ;; variable pointing to the compiled jemalloc.
+               (setenv "JEMALLOC_OVERRIDE"
+                       (search-input-file inputs
+                                          "/lib/libjemalloc_pic.a"))
+               (call-with-output-file "config.toml"
+                 (lambda (port)
+                   (display (string-append "
 [llvm]
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
-docs = true
-python = \"" python "/bin/python2" "\"
-gdb = \"" gdb "/bin/gdb" "\"
+docs = false
+python = \"" python "/bin/python" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
-docdir = \"" doc "/share/doc/rust" "\"
 sysconfdir = \"etc\"
 [rust]
+jemalloc=true
 default-linker = \"" gcc "/bin/gcc" "\"
 channel = \"stable\"
 rpath = true
-" ;; There are 2 failed codegen tests:
-;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
-;; These tests require a patched LLVM
-"codegen-tests = false
 [target." ,(nix-system->gnu-triplet-for-rust) "]
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
 cxx = \"" gcc "/bin/g++" "\"
 ar = \"" binutils "/bin/ar" "\"
-jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
-") port)))
-                   #t)))
-             (add-after 'configure 'provide-cc
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (symlink (string-append (assoc-ref inputs "gcc") "/bin/gcc")
-                          "/tmp/cc")
-                 (setenv "PATH" (string-append "/tmp:" (getenv "PATH")))
-                 #t))
-             (add-after 'provide-cc 'configure-archiver
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (substitute* "src/build_helper/lib.rs"
-                  ;; Make sure "ar" is always used as the archiver.
-                  (("\"musl\"") "\"\"")
-                  ;; Then substitute "ar" by our name.
-                  (("\"ar\"") (string-append "\""
-                               (assoc-ref inputs "binutils")
-                               "/bin/ar\"")))
-                 #t))
-             (delete 'patch-cargo-tomls)
-             (add-before 'build 'reset-timestamps-after-changes
-               (lambda* _
-                 (for-each
-                  (lambda (filename)
-                    ;; Rust 1.20.0 treats timestamp 0 as "file doesn't exist".
-                    ;; Therefore, use timestamp 1.
-                    (utime filename 1 1 1 1))
-                  (find-files "." #:directories? #t))
-                 #t))
-             (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")))
-             (replace 'check
-               (lambda* _
-                 ;; Disable parallel execution to prevent EAGAIN errors when
-                 ;; running tests.
-                 (invoke "./x.py" "-j1" "test" "-vv")
-                 (invoke "./x.py" "-j1" "test" "src/tools/cargo")
-                 #t))
-             (replace 'install
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (invoke "./x.py" "install")
-                 (substitute* "config.toml"
-                   ;; replace prefix to specific output
-                   (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
-                 (invoke "./x.py" "install" "cargo")))
-             (add-after 'install 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   #t)))
-             (add-after 'install 'wrap-rustc
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out"))
-                       (libc (assoc-ref inputs "libc"))
-                       (ld-wrapper (assoc-ref inputs "ld-wrapper")))
-                   ;; Let gcc find ld and libc startup files.
-                   (wrap-program (string-append out "/bin/rustc")
-                     `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
-                     `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib"))))
-                   #t))))))))))
+") port))))))
+         (replace 'build
+           (lambda* (#:key parallel-build? #:allow-other-keys)
+             (let ((job-spec (string-append
+                              "-j" (if parallel-build?
+                                       (number->string (parallel-job-count))
+                                       "1"))))
+               (invoke "./x.py" job-spec "build" "--stage=1"
+                       "src/libstd"
+                       "src/tools/cargo"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (cargo-out (assoc-ref outputs "cargo"))
+                    (gnu-triplet ,(or (%current-target-system)
+                                      (nix-system->gnu-triplet-for-rust)))
+                    (build (string-append "build/" gnu-triplet)))
+               ;; Manually do the installation instead of calling './x.py
+               ;; install', as that is slow and needlessly rebuilds some
+               ;; things.
+               (install-file (string-append build "/stage1/bin/rustc")
+                             (string-append out "/bin"))
+               (copy-recursively (string-append build "/stage1/lib")
+                                 (string-append out "/lib"))
+               (install-file (string-append build "/stage1-tools-bin/cargo")
+                             (string-append cargo-out "/bin")))))
+         (add-after 'install 'delete-install-logs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each (lambda (f)
+                         (false-if-exception (delete-file f)))
+                       (append-map (lambda (output)
+                                     (find-files (string-append
+                                                  output "/lib/rustlib")
+                                                 "(^install.log$|^manifest-)"))
+                                   (map cdr outputs)))))
+         (add-after 'install 'wrap-rustc
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (libc (assoc-ref inputs "libc"))
+                   (ld-wrapper (assoc-ref inputs "ld-wrapper")))
+               ;; Let gcc find ld and libc startup files.
+               (wrap-program (string-append out "/bin/rustc")
+                 `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
+                 `("LIBRARY_PATH" ":"
+                   suffix (,(string-append libc "/lib"))))))))))
+    (native-inputs
+     `(("cmake" ,cmake-minimal)
+       ("pkg-config" ,pkg-config)       ; For "cargo"
+       ("python" ,python-wrapper)
+       ("rustc-bootstrap" ,rust-1.39)
+       ("cargo-bootstrap" ,rust-1.39 "cargo")
+       ("which" ,which)))
+    (inputs
+     `(("jemalloc" ,jemalloc)
+       ("llvm" ,llvm)
+       ("openssl" ,openssl)
+       ("libssh2" ,libssh2)             ; For "cargo"
+       ("libcurl" ,curl)))              ; For "cargo"
+    ;; rustc invokes gcc, so we need to set its search paths accordingly.
+    ;; Note: duplicate its value here to cope with circular dependencies among
+    ;; modules (see <https://bugs.gnu.org/31392>).
+    (native-search-paths
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib" "lib64")))))
+    (synopsis "Compiler for the Rust progamming language")
+    (description "Rust is a systems programming language that provides memory
+safety and thread safety guarantees.")
+    (home-page "https://www.rust-lang.org")
+    ;; Dual licensed.
+    (license (list license:asl2.0 license:expat))))
 
-(define-public rust-1.21
-  (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"
-                    "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))
+(define rust-1.41
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.40 "1.41.1"
+                    "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
     (package
       (inherit base-rust)
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:validate-runpath? _ #t)
+          #t)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'configure 'remove-ar
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; Remove because toml complains about "unknown field".
-                 (substitute* "config.toml"
-                  (("^ar =.*") "\n"))
-                 #t)))))))))
-
-(define-public rust-1.22
-  (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"
-                    "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))
+             (delete 'add-cc-shim-to-path)
+             (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
+               (lambda* _
+                 (substitute* "Cargo.lock"
+                   (("(checksum = )\".*\"" all name)
+                    (string-append name "\"" ,%cargo-reference-hash "\"")))
+                 (generate-all-checksums "vendor"))))))))))
+
+(define rust-1.42
+  (rust-bootstrapped-package
+   rust-1.41 "1.42.0" "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
+
+(define rust-1.43
+  (rust-bootstrapped-package
+   rust-1.42 "1.43.0" "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
+
+;; This version requires llvm <= 11.
+(define rust-1.44
+  (rust-bootstrapped-package
+   rust-1.43 "1.44.1"
+   "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky"))
+
+(define rust-1.45
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.44 "1.45.2"
+                    "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
     (package
       (inherit base-rust)
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'unpack 'remove-flaky-test
+             (add-after 'unpack 'set-linker-locale-to-utf8
                (lambda _
-                 ;; See <https://github.com/rust-lang/rust/issues/43402>.
-                 (when (file-exists? "src/test/run-make/issue-26092")
-                   (delete-file-recursively "src/test/run-make/issue-26092"))
-                 #t)))))))))
-
-(define-public rust-1.23
-  (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"
-                    "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))
-    (package
-      (inherit base-rust)
+                 (substitute* (find-files "." "^linker.rs$")
+                   (("linker.env\\(\"LC_ALL\", \"C\"\\);")
+                    "linker.env(\"LC_ALL\", \"en_US.UTF-8\");")))))))))))
+
+(define rust-1.46
+  (rust-bootstrapped-package
+   rust-1.45 "1.46.0" "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid"))
+
+(define rust-1.47
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.46 "1.47.0"
+                    "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i")))
+    (package/inherit base-rust
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
           `(modify-phases ,phases
-             (delete 'configure-archiver)
-             (delete 'remove-ar)
-             (add-after 'unpack 'dont-build-native
-               (lambda _
-                 ;; XXX: Revisit this when we use gcc 6.
-                 (substitute* "src/binaryen/CMakeLists.txt"
-                  (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
-                 #t)))))))))
-
-(define-public rust-1.24
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.23 "1.24.1"
-          "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))
+             (replace 'build
+               ;; The standard library source location moved in this release.
+               (lambda* (#:key parallel-build? #:allow-other-keys)
+                 (let ((job-spec (string-append
+                                  "-j" (if parallel-build?
+                                           (number->string (parallel-job-count))
+                                           "1"))))
+                   (invoke "./x.py" job-spec "build" "--stage=1"
+                           "library/std"
+                           "src/tools/cargo")))))))))))
+
+(define rust-1.48
+  (rust-bootstrapped-package
+   rust-1.47 "1.48.0" "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf"))
+
+(define rust-1.49
+  (rust-bootstrapped-package
+   rust-1.48 "1.49.0" "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm"))
+
+(define rust-1.50
+  (rust-bootstrapped-package
+   rust-1.49 "1.50.0" "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
+
+(define rust-1.51
+  (rust-bootstrapped-package
+   rust-1.50 "1.51.0" "0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
+
+;;; The LLVM requiriment has been bumped to version 10 in Rust 1.52.  Use the
+;;; latest available.
+(define rust-1.52
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.51 "1.52.1"
+                    "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
     (package
       (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'use-readelf-for-tests)
-             (replace 'patch-aarch64-test
-               (lambda* _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 #t)))))))))
+      (inputs (alist-replace "llvm" (list llvm-12)
+                             (package-inputs base-rust))))))
+
+(define rust-1.53
+  (rust-bootstrapped-package
+   rust-1.52 "1.53.0" "1f95p259dfp5ca118bg107rj3rqwlswy65dxn3hg8sqgl4wwmxsw"))
 
-;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is
-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.
-;;; Keep using llvm 3.9.1 until builds become determenistic
-(define-public rust-1.25
+(define rust-1.54
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.24 "1.25.0"
-          "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))
+         (rust-bootstrapped-package
+          rust-1.53 "1.54.0"
+          "0xk9dhfff16caambmwij67zgshd8v9djw6ha0fnnanlv7rii31dc")))
     (package
       (inherit base-rust)
       (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      #t))
-          (patches (search-patches
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
+       (origin
+         (inherit (package-source base-rust))
+         (snippet '(delete-file-recursively "src/llvm-project"))))
+      (outputs (cons "rustfmt" (package-outputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:tests? _ #f)
+          #t)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-index-update
+             (add-after 'unpack 'relax-gdb-auto-load-safe-path
+               ;; Allow GDB to load binaries from any location, otherwise the
+               ;; gdbinfo tests fail.  This is only useful when testing with a
+               ;; GDB version newer than 8.2.
                (lambda _
-                 (substitute* "src/tools/cargo/tests/generate-lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))
-             (replace 'patch-aarch64-test
+                 (setenv "HOME" (getcwd))
+                 (with-output-to-file (string-append (getenv "HOME") "/.gdbinit")
+                   (lambda _
+                     (format #t "set auto-load safe-path /~%")))
+                 ;; Do not launch gdb with '-nx' which causes it to not execute
+                 ;; any init file.
+                 (substitute* "src/tools/compiletest/src/runtest.rs"
+                   (("\"-nx\".as_ref\\(\\), ")
+                    ""))))
+             (add-after 'unpack 'patch-cargo-env-shebang
+               (lambda _
+                 (substitute* '("src/tools/cargo/tests/testsuite/build.rs"
+                                "src/tools/cargo/tests/testsuite/fix.rs")
+                   ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment
+                   ;; variable which points to /usr/bin/env.  Since it's not a
+                   ;; shebang, it needs to be manually patched.
+                   (("/usr/bin/env")
+                    (which "env")))))
+             (add-after 'unpack 'disable-tests-requiring-git
                (lambda _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 ;; This test fails on aarch64 with llvm@6.0:
-                 ;; https://github.com/rust-lang/rust/issues/49807
-                 ;; other possible solution:
-                 ;; https://github.com/rust-lang/rust/pull/47688
-                 (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")
-                 #t))
-             (delete 'ignore-glibc-2.27-incompatible-test))))))))
-
-(define-public rust-1.26
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.25 "1.26.2"
-          "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches
-                     "rust-coresimd-doctest.patch"
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
-      (inputs
-       (alist-replace "openssl" (list openssl)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; binaryen was replaced with LLD project from LLVM
-             (delete 'dont-build-native)
-             (replace 'check
-               (lambda* _
-                 ;; Enable parallel execution.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo"))))
-             (replace 'remove-unsupported-tests
-               (lambda* _
-                 ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-                 ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-                 (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")
-                 #t))
-             (replace 'patch-cargo-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/build.rs"
-                   (("/usr/bin/env") (which "env"))
-                   ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                   (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/testsuite/death.rs"
-                   ;; This is stuck when built in container.
-                   (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/testsuite/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; Avoid dependency on "git".
                  (substitute* "src/tools/cargo/tests/testsuite/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel
-               (lambda* _
-                 ;; This test failed to work on "nightly" channel builds
-                 ;; https://github.com/rust-lang/cargo/issues/5648
-                 (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"
-                   (("fn test_resolving_minimum_version_with_transitive_deps")
-                    "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))
-                 #t))
-             (replace 'patch-cargo-index-update
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))))))
-      (supported-systems
-       (delete "aarch64-linux"          ; fails to build, see #47019
-               (package-supported-systems base-rust))))))
-
-(define-public rust-1.27
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.26 "1.27.2"
-          "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'install 'mkdir-prefix-paths
-               (lambda* (#:key outputs #:allow-other-keys)
-                 ;; As result of https://github.com/rust-lang/rust/issues/36989
-                 ;; `prefix' directory should exist before `install' call
-                 (mkdir-p (assoc-ref outputs "out"))
-                 (mkdir-p (assoc-ref outputs "cargo"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-thinlto-test
-               (lambda* _
-                 ;; thinlto required llvm 6.0 for work
-                 (substitute* "src/tools/cargo/tests/testsuite/path.rs"
-                   (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))
-                 #t)))))))))
-
-(define-public rust-1.28
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.27 "1.28.0"
-          "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (inputs
-       ;; Use LLVM 6.0
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'configure 'enable-codegen-tests
-               ;; Codegen tests should pass with llvm 6, so enable them.
-               (lambda* _
-                 (substitute* "config.toml"
-                   (("codegen-tests = false") ""))
-                 #t))
-             (add-after 'patch-tests 'disable-amd64-avx-test
-               ;; That test would fail on x86_64 machines without avx.
-               (lambda* _
-                 (substitute* "src/test/run-pass/issue-44056.rs"
-                   (("only-x86_64") "ignore-test"))
-                 #t))
-             ;; This is no longer needed as of 1.28
-             (delete 'disable-cargo-test-for-nightly-channel)
-             ;; The thinlto test should pass with llvm 6.
-             (delete 'disable-thinlto-test))))))))
-
-(define-public rust-1.29
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.28 "1.29.2"
-          "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch")))))))
-
-(define-public rust-1.30
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.29 "1.30.1"
-          "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/tools/clang")
-                      (delete-file-recursively "src/tools/lldb")
-                      #t))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-env-shebang
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((coreutils (assoc-ref inputs "coreutils")))
-                   (substitute* "src/tools/cargo/tests/testsuite/fix.rs"
-                     ;; Cargo has a test which explicitly sets a
-                     ;; RUSTC_WRAPPER environment variable which points
-                     ;; to /usr/bin/env. Since it's not a shebang, it
-                     ;; needs to be manually patched
-                     (("\"/usr/bin/env\"")
-                      (string-append "\"" coreutils "/bin/env\"")))
-                   #t)))
-             (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/package.rs"
-                   ;; These tests largely check that cargo outputs warning/error
-                   ;; messages as expected. It seems that cargo outputs an
-                   ;; absolute path to something in the store instead of the
-                   ;; expected relative path (e.g. `[..]`) so we'll ignore
-                   ;; these for now
-                   (("fn include") "#[ignore]\nfn include")
-                   (("fn exclude") "#[ignore]\nfn exclude"))
-                   #t))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
+                   (("fn author_prefers_cargo")
+                    "#[ignore]\nfn author_prefers_cargo")
+                   (("fn finds_author_git")
+                    "#[ignore]\nfn finds_author_git")
+                   (("fn finds_local_author_git")
+                    "#[ignore]\nfn finds_local_author_git"))))
+             (add-after 'unpack 'patch-command-exec-tests
+               ;; This test suite includes some tests that the stdlib's
+               ;; `Command` execution properly handles in situations where
+               ;; the environment or PATH variable are empty, but this fails
+               ;; since we don't have `echo` available at its usual FHS
+               ;; location.
                (lambda _
-                 (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                  #t)))))))))
-
-(define (patch-command-exec-tests-phase test-path)
-  "The command-exec.rs test moves around between releases.  We need to apply
-a Guix-specific patch to it for each release.  This function generates the phase
-that applies said patch, parametrized by the test-path.  This is done this way
-because the phase is more complex than the equivalents for other tests that
-move around."
- `(lambda* (#:key inputs #:allow-other-keys)
-    (let ((coreutils (assoc-ref inputs "coreutils")))
-      (substitute* ,test-path
-        ;; This test suite includes some tests that the stdlib's
-        ;; `Command` execution properly handles situations where
-        ;; the environment or PATH variable are empty, but this
-        ;; fails since we don't have `echo` available in the usual
-        ;; Linux directories.
-        ;; NB: the leading space is so we don't fail a tidy check
-        ;; for trailing whitespace, and the newlines are to ensure
-        ;; we don't exceed the 100 chars tidy check as well
-        ((" Command::new\\(\"echo\"\\)")
-         (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n")))
-      #t)))
-
-(define-public rust-1.31
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.30 "1.31.1"
-          "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/run-pass/command-exec.rs"))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
+                 (substitute* (match (find-files "." "^command-exec.rs$")
+                                ((file) file))
+                   (("Command::new\\(\"echo\"\\)")
+                    (format #f "Command::new(~s)" (which "echo"))))))
+             (add-after 'unpack 'patch-command-uid-gid-test
                (lambda _
-                 (substitute* "src/test/ui/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                 #t))
-             (add-after 'patch-tests 'patch-process-docs-rev-cmd
-               (lambda* _
-                 ;; Disable some doc tests which depend on the "rev" command
-                 ;; https://github.com/rust-lang/rust/pull/58746
-                 (substitute* "src/libstd/process.rs"
-                   (("```rust") "```rust,no_run"))
-                 #t)))))))))
-
-(define-public rust-1.32
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.31 "1.32.0"
-          "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin (delete-file-recursively "src/llvm")
-                           (delete-file-recursively "src/llvm-emscripten")
-                           (delete-file-recursively "src/tools/clang")
-                           (delete-file-recursively "src/tools/lldb")
-                           (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                           #t))
-          (patches (search-patches "rust-reproducible-builds.patch"))
-          ;; the vendor directory has moved to the root of
-          ;; the tarball, so we have to strip an extra prefix
-          (patch-flags '("-p2"))))
-      (inputs
-       ;; Downgrade to LLVM 6, all LTO tests appear to fail with LLVM 7.0.1
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; Cargo.lock and the vendor/ directory have been moved to the
-             ;; root of the rust tarball
-             (replace 'patch-cargo-checksums
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(\"checksum .* = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t))
-             (add-after 'enable-codegen-tests 'override-jemalloc
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; The compiler is no longer directly built against jemalloc,
-                 ;; but rather via the jemalloc-sys crate (which vendors the
-                 ;; jemalloc source). To use jemalloc we must enable linking to
-                 ;; it (otherwise it would use the system allocator), and set
-                 ;; an environment variable pointing to the compiled jemalloc.
-                 (substitute* "config.toml"
-                   (("^jemalloc =.*$") "")
-                   (("[[]rust[]]") "\n[rust]\njemalloc=true\n"))
-                 (setenv "JEMALLOC_OVERRIDE" (string-append (assoc-ref inputs "jemalloc")
-                                                            "/lib/libjemalloc_pic.a"))
-                 #t))
-             ;; Remove no longer relevant steps
-             (delete 'remove-flaky-test)
-             (delete 'patch-aarch64-test))))))))
-
-(define-public rust-1.33
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.32 "1.33.0"
-           "152x91mg7bz4ygligwjb05fgm1blwy2i70s2j03zc9jiwvbsh0as")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches '())
-          (patch-flags '("-p1"))))
-      (inputs
-       ;; Upgrade to jemalloc@5.1.0
-       (alist-replace "jemalloc" (list jemalloc)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'ignore-cargo-package-tests)
-             (add-after 'configure 'configure-test-threads
-               ;; Several rustc and cargo tests will fail if run on one core
-               ;; https://github.com/rust-lang/rust/issues/59122
-               ;; https://github.com/rust-lang/cargo/issues/6746
-               ;; https://github.com/rust-lang/rust/issues/58907
+                 (substitute* (match (find-files "." "^command-uid-gid.rs$")
+                                ((file) file))
+                   (("/bin/sh")
+                    (which "sh")))))
+             (add-after 'unpack 'skip-shebang-tests
+               ;; This test make sure that the parser behaves properly when a
+               ;; source file starts with a shebang. Unfortunately, the
+               ;; patch-shebangs phase changes the meaning of these edge-cases.
+               ;; We skip the test since it's drastically unlikely Guix's
+               ;; packaging will introduce a bug here.
+               (lambda _
+                 (delete-file "src/test/ui/parser/shebang/sneaky-attrib.rs")))
+             (add-after 'unpack 'patch-process-tests
                (lambda* (#:key inputs #:allow-other-keys)
-                 (setenv "RUST_TEST_THREADS" "2")
-                 #t)))))))))
-
-(define-public rust-1.34
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.33 "1.34.1"
-           "19s09k7y5j6g3y4d2rk6kg9pvq6ml94c49w6b72dmq8p9lk8bixh")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t)))))))
-
-(define-public rust-1.35
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.34 "1.35.0"
-           "0bbizy6b7002v1rdhrxrf5gijclbyizdhkglhp81ib3bf5x66kas")))
-    (package
-      (inherit base-rust)
-      (inputs
-       (alist-replace "llvm" (list llvm-8)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; The tidy test includes a pass which ensures large binaries
-             ;; don't accidentally get checked into the rust git repo.
-             ;; Unfortunately the test assumes that git is always available,
-             ;; so we'll comment out the invocation of this pass.
-             (add-after 'configure 'disable-tidy-bins-check
-               (lambda* _
-                 (substitute* "src/tools/tidy/src/main.rs"
-                   (("bins::check") "//bins::check"))
-                 #t)))))))))
-
-(define-public rust-1.36
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.35 "1.36.0"
-           "06xv2p6zq03lidr0yaf029ii8wnjjqa894nkmrm6s0rx47by9i04")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'patch-process-docs-rev-cmd))))))))
-
-(define-public rust-1.37
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.36 "1.37.0"
-           "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'configure 'configure-cargo-home
+                 (let ((bash (assoc-ref inputs "bash")))
+                   (substitute* "library/std/src/process/tests.rs"
+                     (("\"/bin/sh\"")
+                      (string-append "\"" bash "/bin/sh\"")))
+                   (substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
+                     (("fn test_process_mask")
+                      "#[allow(unused_attributes)]
+    #[ignore]
+    fn test_process_mask")))))
+             (add-after 'unpack 'disable-interrupt-tests
                (lambda _
-                 (let ((cargo-home (string-append (getcwd) "/.cargo")))
-                   (mkdir-p cargo-home)
-                   (setenv "CARGO_HOME" cargo-home)
-                   #t))))))))))
-
-(define-public rust-1.38
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.37 "1.38.0"
-           "101dlpsfkq67p0hbwx4acqq6n90dj4bbprndizpgh1kigk566hk4")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-9)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/ui/command-exec.rs"))
-             (add-after 'patch-tests 'patch-command-uid-gid-test
+                 ;; This test hangs in the build container; disable it.
+                 (substitute* (match (find-files "." "^freshness.rs$")
+                                ((file) file))
+                   (("fn linking_interrupted")
+                    "#[ignore]\nfn linking_interrupted"))
+                 ;; Likewise for the ctrl_c_kills_everyone test.
+                 (substitute* (match (find-files "." "^death.rs$")
+                                ((file) file))
+                   (("fn ctrl_c_kills_everyone")
+                    "#[ignore]\nfn ctrl_c_kills_everyone"))))
+             (add-after 'configure 'enable-docs
                (lambda _
-                 (substitute* "src/test/ui/command-uid-gid.rs"
-                   (("/bin/sh") (which "sh"))
-                   (("ignore-sgx") "ignore-sgx\n// ignore-tidy-linelength"))
-                 #t)))))))))
-
-(define-public rust-1.39
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.38 "1.39.0"
-           "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-cargo-checksums
-               ;; The Cargo.lock format changed.
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(checksum = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
-
-(define-public rust-1.40
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.39 "1.40.0"
-           "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; llvm-emscripten is no longer bundled, as that codegen backend
-          ;; got removed.
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t))))
-      (arguments
-       ;; Rust 1.40 does not ship rustc-internal libraries by default
-       ;; (see rustc-dev-split). This means that librustc_driver.so is no
-       ;; longer available in lib/rustlib/$target/lib, which is the directory
-       ;; included in the runpath of librustc_codegen_llvm-llvm.so.
-       ;; This is detected by our validate-runpath phase as an error, but it
-       ;; is harmless as the codegen backend is loaded by librustc_driver.so
-       ;; itself, which must at that point have been already loaded.
-       ;; As such, we skip validating the runpath for Rust 1.40.
-       ;; Rust 1.41 stopped putting the codegen backend in a separate library,
-       ;; which makes this workaround only necessary for this release.
-       (cons* #:validate-runpath? #f
-         (substitute-keyword-arguments (package-arguments base-rust)
-           ((#:phases phases)
-            `(modify-phases ,phases
-               ;; We often need to patch tests with various Guix-specific paths.
-               ;; This often increases the line length and makes tidy, rustc's
-               ;; style checker, complain. We could insert additional newlines
-               ;; or add an "// ignore-tidy-linelength" comment, but as an
-               ;; ignore comment must be used, both approaches are fragile due
-               ;; to upstream formatting changes. As such, disable running the
-               ;; linter during tests, since it's intended for rustc developers
-               ;; anyway.
-               ;;
-               ;; TODO(rebuild-rust): This phase could be added earlier to
-               ;; simplify a significant amount of code, but it would require
-               ;; rebuilding the entire rusty universe.
-               (add-after 'patch-tests 'neuter-tidy
-                 (lambda _
-                   (substitute* "src/bootstrap/builder.rs"
-                     (("^.*::Tidy,") ""))
-                   #t))
-               ;; TODO(rebuild-rust): Adapt the find-files approach for
-               ;; earlier testsuite patches.
-               (replace 'patch-command-uid-gid-test
-                 (lambda _
-                   (match (find-files "src/test" "command-uid-gid\\.rs")
-                     ((file)
-                      (substitute* file
-                        (("/bin/sh") (which "sh")))))
-                   #t))
-               (replace 'patch-command-exec-tests
-                 ,(patch-command-exec-tests-phase
-                    '(match (find-files "src/test" "command-exec\\.rs")
-                       ((file) file))))
-               ;; The test got removed in commit 000fe63b6fc57b09828930cacbab20c2ee6e6d15
-               ;; "Remove painful test that is not pulling its weight"
-               (delete 'remove-unsupported-tests)))))))))
-
-(define-public rust-1.41
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.40 "1.41.1"
-           "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:validate-runpath? _) #t))))))
-
-(define-public rust-1.42
-  (rust-bootstrapped-package rust-1.41 "1.42.0"
-    "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
-
-(define-public rust-1.43
-  (rust-bootstrapped-package rust-1.42 "1.43.0"
-    "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
-
-(define-public rust-1.44
-  (rust-bootstrapped-package rust-1.43 "1.44.1"
-    "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky"))
-
-(define-public rust-1.45
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.44 "1.45.2"
-           "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.45-linker-locale.patch"))))
-      (inputs
-        (alist-replace "llvm" (list llvm-10)
-                       (package-inputs base-rust)))
-      (arguments
-        (substitute-keyword-arguments (package-arguments base-rust)
-          ((#:phases phases)
-           `(modify-phases ,phases
-              ;; These tests make sure that the parser behaves properly when
-              ;; a source file starts with a shebang. Unfortunately,
-              ;; the patch-shebangs phase changes the meaning of these edge-cases.
-              ;; We skip the test since it's drastically unlikely Guix's packaging
-              ;; will introduce a bug here.
-              (add-after 'patch-tests 'skip-shebang-tests
-                (lambda _
-                  (with-directory-excursion "src/test/ui/parser/shebang"
-                    (delete-file "shebang-doc-comment.rs")
-                    (delete-file "sneaky-attrib.rs")
-                    #t)))
-              ;; This test case synchronizes itself by starting a localhost TCP
-              ;; server. This doesn't work as networking is not available.
-              (add-after 'patch-tests 'skip-networking-test
-                (lambda _
-                  (substitute* "src/tools/cargo/tests/testsuite/freshness.rs"
-                    (("fn linking_interrupted" all)
-                     (string-append "#[ignore] " all)))
-                 #t)))))))))
-
-(define-public rust-1.46
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.45 "1.46.0"
-           "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid")))
-    (package
-      (inherit base-rust)
-      (outputs (cons "rustfmt" (package-outputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
+                 (substitute* "config.toml"
+                   (("docs = false")
+                    "docs = true"))))
+             (add-after 'configure 'add-gdb-to-config
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((gdb (assoc-ref inputs "gdb")))
+                   (substitute* "config.toml"
+                     (("^python =.*" all)
+                      (string-append all
+                                     "gdb = \"" gdb "/bin/gdb\"\n"))))))
              (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")
-                 (invoke "./x.py" "build" "src/tools/rustfmt")))
-             (replace 'check
-               (lambda* _
-                 ;; Test rustfmt.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo")
-                   (invoke "./x.py" parallel-job-spec "test"
+               ;; Phase overridden to also build rustfmt.
+               (lambda* (#:key parallel-build? #:allow-other-keys)
+                 (let ((job-spec (string-append
+                                  "-j" (if parallel-build?
+                                           (number->string (parallel-job-count))
+                                           "1"))))
+                   (invoke "./x.py" job-spec "build"
+                           "library/std" ;rustc
+                           "src/tools/cargo"
                            "src/tools/rustfmt"))))
+             (replace 'check
+               ;; Phase overridden to also test rustfmt.
+               (lambda* (#:key tests? parallel-build? #:allow-other-keys)
+                 (when tests?
+                   (let ((job-spec (string-append
+                                    "-j" (if parallel-build?
+                                             (number->string (parallel-job-count))
+                                             "1"))))
+                     (invoke "./x.py" job-spec "test" "-vv"
+                             "library/std"
+                             "src/tools/cargo"
+                             "src/tools/rustfmt")))))
              (replace 'install
+               ;; Phase overridden to also install rustfmt.
                (lambda* (#:key outputs #:allow-other-keys)
                  (invoke "./x.py" "install")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'cargo' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                    (format #f "prefix = ~s" (assoc-ref outputs "cargo"))))
                  (invoke "./x.py" "install" "cargo")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'rustfmt' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "rustfmt") "\"")))
-                 (invoke "./x.py" "install" "rustfmt")))
-             (replace 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo"))
-                       (rustfmt-out (assoc-ref outputs "rustfmt")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file rustfmt-out file))
-                     '("install.log"
-                       "manifest-rustfmt-preview"))
-                   #t))))))))))
-
-(define-public rust-1.47
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.46 "1.47.0"
-          "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-11)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; The source code got rearranged: libstd is now in the newly created library folder.
-             (replace 'patch-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (substitute* "library/std/src/process.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
-                   ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-                   (substitute* "library/std/src/sys/unix/process/process_common.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-                   #t)))
-             (delete 'patch-cargo-checksums)
-             (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-               ;; Generate checksums after patching generated files (in
-               ;; particular, vendor/jemalloc/rep/Makefile).
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(checksum = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
-
-(define-public rust-1.48
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.47 "1.48.0"
-           "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; New patch required due to the second part of the source code rearrangement:
-          ;; the relevant source code is now in the compiler directory.
-          (patches (search-patches "rust-1.48-linker-locale.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; Some tests got split out into separate files.
-             (replace 'patch-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (substitute* "library/std/src/process/tests.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
-                   (substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-                   #t))))))))))
-
-(define-public rust-1.49
-  (rust-bootstrapped-package rust-1.48 "1.49.0"
-    "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm"))
-
-(define-public rust-1.50
-  (rust-bootstrapped-package rust-1.49 "1.50.0"
-    "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
-
-(define-public rust-1.51
-  (rust-bootstrapped-package rust-1.50 "1.51.0"
-    "0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
-
-(define-public rust-1.52
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.51 "1.52.1"
-           "165zs3xzp9dravybwslqs1qhn35agp6wacmzpymqg3qfdni26vrs")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-12)
-                       (package-inputs base-rust))))))
-
-;; TODO(staging): Bump this variable to the latest packaged rust.
-(define-public rust rust-1.45)
+                    (format #f "prefix = ~s" (assoc-ref outputs "rustfmt"))))
+                 (invoke "./x.py" "install" "rustfmt")))))))
+      ;; Add test inputs.
+      (native-inputs (cons* `("gdb" ,gdb)
+                            `("procps" ,procps)
+                            (package-native-inputs base-rust))))))
+
+;;; Note: Only the latest versions of Rust are supported and tested.  The
+;;; intermediate rusts are built for bootstrapping purposes and should not
+;;; be relied upon.  This is to ease maintenance and reduce the time
+;;; required to build the full Rust bootstrap chain.
+(define-public rust rust-1.54)
diff --git a/gnu/packages/sagemath.scm b/gnu/packages/sagemath.scm
index 7f060155ed..b603a2f151 100644
--- a/gnu/packages/sagemath.scm
+++ b/gnu/packages/sagemath.scm
@@ -55,12 +55,11 @@
          "0ymc4i9y60aazscc1blivirkr1rflzz6akkmvfzyn5l7mgnlbk83"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (propagated-inputs
-     `(("python-cysignals" ,python-cysignals)))
+     (list python-cysignals))
     (inputs
-     `(("gmp" ,gmp)
-       ("pari-gp" ,pari-gp)))
+     (list gmp pari-gp))
     (home-page "https://cypari2.readthedocs.io/")
     (synopsis
      "Python interface to the number theory library libpari")
@@ -91,11 +90,9 @@ but it can be used independently.")
                 "0ljvnmhxqdfsp0yy4c2hynhk5sggm63kkqsq4iwq4k9vsnx2xm97"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("gmp" ,gmp)
-       ("mpfr" ,mpfr)
-       ("mpc" ,mpc)))
+     (list gmp mpfr mpc))
     (home-page "https://github.com/aleaxit/gmpy")
     (synopsis
      "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x")
@@ -150,9 +147,7 @@ function for every found clique.")
          "0l68rikfr7k2l547gb3pp3g8cj5zzxwipm79xrb5r8ffj466ydxg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "Computations with braid groups")
     (description "libbraiding performs computations with braid groups,
 in particular it computes normal forms of group elements.")
@@ -176,11 +171,9 @@ in particular it computes normal forms of group elements.")
          "0sv3cwrf9v9sb5a8wbhjmarxvya13ma3j8y8592f9ymxlk5y0ldk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
-     `(("libgc" ,libgc)))
+     (list libgc))
     (synopsis "Computation of homfly polynomials of links")
     (description "libhomfly computes homfly polynomials of links,
 represented as strings.")
@@ -223,15 +216,9 @@ represented as strings.")
         (base32 "09d2p74x1arkydlxy6pw4p4byi7r8q7f29w373h4d8a215kadc6d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("flint" ,flint)
-       ("gmp" ,gmp)
-       ("python" ,python)
-       ("singular" ,singular)))
+     (list flint gmp python singular))
     (synopsis "Sage fork of GiNaC")
     (description "Pynac is a derivative of the C++ library GiNaC, which
 allows manipulation of symbolic expressions.  It currently provides the
@@ -260,7 +247,7 @@ on numerical types, while GiNaC depends on CLN for this purpose.")
     (native-inputs
      `(("python" ,python-2)))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -313,14 +300,9 @@ coefficients of which are modular integers.")
        (base32 "0qhgckd4fvbs40jw14mvw89rccv94d3df27kipd27hxd4cx7y80y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("m4ri" ,m4ri)))
+     (list boost libpng m4ri))
     (arguments
     ;; We are missing the boost unit test framework.
      `(#:tests? #f
@@ -426,7 +408,7 @@ zeta function and its twists by quadratic characters.")
                            '("bin" "include" "lib"))))
              #t)))))
     (inputs
-     `(("gmp" ,gmp)))
+     (list gmp))
     (home-page "http://www.mathe2.uni-bayreuth.de/stoll/programs/")
     (synopsis "Find rational points on hyperelliptic curves")
     (description "Ratpoints tries to find all rational points within
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 966ccc8c17..bb5b402eee 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
@@ -75,12 +75,9 @@
                 "1f2n0yzqsy5v5qv83731bi0mi86rrh11z8qjy1gjj8al9c3yh2b6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-
-       ;; To generate the manpages.
-       ("python-docutils" ,python-docutils))) ; rst2man
+     (list autoconf automake pkg-config
+           ;; To generate the manpages.
+           python-docutils)) ; rst2man
     (inputs
      `(("keytuils" ,keyutils)
        ("linux-pam" ,linux-pam)
@@ -243,30 +240,28 @@ external dependencies.")
        ;; test environment.
        #:tests? #f))
     (inputs
-     `(("acl" ,acl)
-       ("cmocka" ,cmocka)
-       ("cups" ,cups)
-       ("gamin" ,gamin)
-       ("dbus" ,dbus)
-       ("gpgme" ,gpgme)
-       ("gnutls" ,gnutls)
-       ("heimdal" ,heimdal)
-       ("jansson" ,jansson)
-       ("libarchive" ,libarchive)
-       ("libtirpc" ,libtirpc)
-       ("linux-pam" ,linux-pam)
-       ("lmdb" ,lmdb)
-       ("openldap" ,openldap)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("popt" ,popt)
-       ("readline" ,readline)
-       ("tdb" ,tdb)))
+     (list acl
+           cmocka
+           cups
+           gamin
+           dbus
+           gpgme
+           gnutls
+           heimdal
+           jansson
+           libarchive
+           libtirpc
+           linux-pam
+           lmdb
+           openldap
+           perl
+           python
+           popt
+           readline
+           tdb))
     (propagated-inputs
      ;; In Requires or Requires.private of pkg-config files.
-     `(("ldb" ,ldb)
-       ("talloc" ,talloc)
-       ("tevent" ,tevent)))
+     (list ldb talloc tevent))
     (native-inputs
      `(("perl-parse-yapp" ,perl-parse-yapp)
        ("pkg-config" ,pkg-config)
@@ -289,6 +284,18 @@ Samba is an important component to seamlessly integrate Linux/Unix Servers and
 Desktops into Active Directory environments using the winbind daemon.")
     (license gpl3+)))
 
+(define-public samba/fixed
+  ;; Version that rarely changes, depended on by libsoup.
+  (package/inherit samba
+    (version "4.13.10")
+    (source
+     (origin
+       (inherit (package-source samba))
+       (uri (string-append "https://download.samba.org/pub/samba/stable/"
+                           "samba-" version ".tar.gz"))
+       (sha256
+        (base32 "00q5hf2r71dyma785dckcyksv3082mqfgyy9q6k6rc6kqjwkirzh"))))))
+
 (define-public talloc
   (package
     (name "talloc")
@@ -313,9 +320,9 @@ Desktops into Active Directory environments using the winbind daemon.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://talloc.samba.org")
     (synopsis "Hierarchical, reference counted memory pool system")
     (description
@@ -379,12 +386,9 @@ destructors.  It is the core memory allocator used in Samba.")
                        (string-append "--prefix=" out)
                        "--bundled-libraries=NONE")))))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)))
+     (list cmocka pkg-config python which))
     (propagated-inputs
-     `(("talloc" ,talloc))) ; required by tevent.pc
+     (list talloc)) ; required by tevent.pc
     (synopsis "Event system library")
     (home-page "https://tevent.samba.org/")
     (description
@@ -430,14 +434,10 @@ many event types, including timers, signals, and the classic file descriptor eve
                                       "/lib/ldb/modules")
                        "--bundled-libraries=NONE")))))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("which" ,which)))
+     (list cmocka pkg-config python which))
     (propagated-inputs
      ;; ldb.pc refers to all these.
-     `(("talloc" ,talloc)
-       ("tdb" ,tdb)))
+     (list talloc tdb))
     (inputs
      `(,@(if (target-64bit?)
              `(("lmdb" ,lmdb))
@@ -486,8 +486,8 @@ key-value pair databases and a real LDAP database.")
                   (string-append libpcap "/include/pcap-bpf.h")))
                #t))))))
     (inputs
-     `(("libpcap" ,libpcap)
-       ("openssl" ,(@ (gnu packages tls) openssl))))
+     (list libpcap
+           (@ (gnu packages tls) openssl)))
     (synopsis "Implementation of the Point-to-Point Protocol")
     (home-page "https://ppp.samba.org/")
     (description
diff --git a/gnu/packages/sawfish.scm b/gnu/packages/sawfish.scm
index 4162fe43cd..ab715b4a7d 100644
--- a/gnu/packages/sawfish.scm
+++ b/gnu/packages/sawfish.scm
@@ -50,17 +50,9 @@
                 "1bmcjl1x1rdh514q9z3hzyjmjmwwwkziipjpjsl301bwmiwrd8a8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("makeinfo"   ,texinfo)
-       ("pkg-config" ,pkg-config)
-
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool"  ,libtool)))
+     (list texinfo pkg-config autoconf automake libtool))
     (inputs
-     `(("gdbm"     ,gdbm)
-       ("gmp"      ,gmp)
-       ("libffi"   ,libffi)
-       ("readline" ,readline)))
+     (list gdbm gmp libffi readline))
     (native-search-paths
      (list (search-path-specification
             (variable "REP_DL_LOAD_PATH")
@@ -107,14 +99,10 @@ implementing both small and large scale systems.")
              (delete-file "autogen.sh")
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
      ;; required by rep-gtk.pc.
-     `(("gtk+"   ,gtk+-2)
-       ("librep" ,librep)))
+     (list gtk+-2 librep))
     (home-page "https://sawfish.fandom.com/wiki/Rep-GTK")
     (synopsis "GTK+ binding for librep")
     (description
@@ -180,12 +168,12 @@ backend of Sawfish.")
        ("pkg-config"  ,pkg-config)
        ("which"       ,which)))
     (inputs
-     `(("libsm"       ,libsm)
-       ("libxft"      ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr"   ,libxrandr)
-       ("libxtst"     ,libxtst)
-       ("rep-gtk"     ,rep-gtk)))
+     (list libsm
+           libxft
+           libxinerama
+           libxrandr
+           libxtst
+           rep-gtk))
     (home-page "https://sawfish.tuxfamily.org")
     (synopsis "Configurable window manager")
     (description
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index 9d4abe88c6..02424f0da2 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -75,7 +75,7 @@
        ;; For scripts/pixma_gen_options.py.
        ("python" ,python-wrapper)))
     (inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -231,7 +231,7 @@ package contains the library and drivers.")))
                                         ,name "-" ,version)))
                (install-file "doc/README.txt" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("dbus" ,dbus)
        ("libconfuse" ,libconfuse)
@@ -315,7 +315,7 @@ provided the driver also exposes the buttons.")
                (rmdir (string-append out "/sbin"))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk+" ,gtk+-2)
        ("lcms" ,lcms)
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index d6299fc503..f9ffa25f5a 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
@@ -127,10 +127,6 @@
                (("\\./configure")
                 (string-append (which "sh") " configure")))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key system outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -178,8 +174,8 @@
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo
-                                        texlive-epsf)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo
+                                             texlive-epsf)))
        ("texinfo" ,texinfo)
        ("ghostscript" ,ghostscript)
        ("m4" ,m4)))
@@ -308,21 +304,20 @@ features an integrated Emacs-like editor and a large runtime library.")
                          (string-append "EMACSBRAND=emacs25")
                          (string-append "EMACSDIR=" dir))))))))
       (inputs
-       `(("emacs" ,emacs)                     ;UDE needs the X version of Emacs
-         ("libgc" ,libgc)
-         ("libunistring" ,libunistring)
-         ("libuv" ,libuv)
-         ("openssl" ,openssl)
-         ("sqlite" ,sqlite)
-
-         ;; Optional APIs for which Bigloo has bindings.
-         ("avahi" ,avahi)
-         ("libphidget" ,libphidget)
-         ("pcre" ,pcre)))
+       (list emacs ;UDE needs the X version of Emacs
+             libgc
+             libunistring
+             libuv
+             openssl
+             sqlite
+             ;; Optional APIs for which Bigloo has bindings.
+             avahi
+             libphidget
+             pcre))
       (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
       (propagated-inputs
-       `(("gmp" ,gmp)))                            ; bigloo.h refers to gmp.h
+       (list gmp))                            ; bigloo.h refers to gmp.h
       (home-page "https://www-sop.inria.fr/indes/fp/Bigloo/")
       (synopsis "Efficient Scheme compiler")
       (description
@@ -368,14 +363,14 @@ and between Scheme and Java programs.")
                                       "-copt \\$(CPICFLAGS) "
                                       "-L \\$(BUILDLIBDIR) "
                                       "-ldopt -Wl,-rpath," out "/lib"))))))))
-    (inputs `(("avahi" ,avahi)
-              ("bigloo" ,bigloo)
-              ("libgc" ,libgc)
-              ("libunistring" ,libunistring)
-              ("libuv" ,libuv)
-              ("pcre" ,pcre)
-              ("sqlite" ,sqlite)
-              ("which" ,which)))
+    (inputs (list avahi
+                  bigloo
+                  libgc
+                  libunistring
+                  libuv
+                  pcre
+                  sqlite
+                  which))
     (home-page "http://hop.inria.fr/")
     (synopsis "Multi-tier programming language for the Web 2.0")
     (description
@@ -588,8 +583,7 @@ regular-expression notation.")
                     (invoke "./configure"
                             (string-append "--prefix="
                                            (assoc-ref outputs "out"))))))))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (native-inputs (list unzip texinfo))
     (home-page "https://people.csail.mit.edu/jaffer/SLIB.html")
     (synopsis "Compatibility and utility library for Scheme")
     (description "SLIB is a portable Scheme library providing compatibility and
@@ -627,8 +621,7 @@ utility functions for all standard Scheme implementations.")
          (replace 'build
                   (lambda* (#:key inputs outputs #:allow-other-keys)
                     (setenv "SCHEME_LIBRARY_PATH"
-                            (string-append (assoc-ref inputs "slib")
-                                           "/lib/slib/"))
+                            (search-input-directory inputs "lib/slib"))
                     (invoke "make" "scmlit" "CC=gcc")
                     (invoke "make" "all")))
          (add-after 'install 'post-install
@@ -638,15 +631,13 @@ utility functions for all standard Scheme implementations.")
                         (delete-file req)
                         (format (open req (logior O_WRONLY O_CREAT))
                                 "(define (library-vicinity) ~s)\n"
-                                (string-append (assoc-ref inputs "slib")
-                                               "/lib/slib/"))
+                                (search-input-directory inputs "lib/slib"))
 
                         ;; We must generate the slibcat file.
                         (invoke (string-append out "/bin/scm")
                                 "-br" "new-catalog")))))))
-    (inputs `(("slib" ,slib)))
-    (native-inputs `(("unzip" ,unzip)
-                     ("texinfo" ,texinfo)))
+    (inputs (list slib))
+    (native-inputs (list unzip texinfo))
     (home-page "https://people.csail.mit.edu/jaffer/SCM")
     (synopsis "Scheme implementation conforming to R5RS and IEEE P1178")
     (description "GNU SCM is an implementation of Scheme.  This
@@ -668,7 +659,7 @@ linked with a SCM executable.")
                 "0rik3qnxqd8wjlazx8rw996pfzkjjg60v6hcbpcqzi7rgml8q4n8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -782,9 +773,9 @@ small program, it is easy to comprehend, get to grips with, and use.")
                                (string-append out "/bin"))
                  #t))))))
       (inputs
-       `(("libx11" ,libx11)))
+       (list libx11))
       (propagated-inputs
-       `(("libgc" ,libgc)))
+       (list libgc))
       (supported-systems '("x86_64-linux"))
       (home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
       (synopsis "Brutally efficient Scheme compiler")
@@ -821,7 +812,7 @@ generation.")
              (apply invoke "make" "install-all" make-flags))))
        #:tests? #f))  ; No check target.
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://www.t3x.org/s9fes/")
     (synopsis "Interpreter for R4RS Scheme")
     (description
@@ -909,13 +900,10 @@ The core is 12 builtin special forms and 33 builtin functions.")
                    #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libatomic-ops" ,libatomic-ops)
-       ("slib" ,slib)
-       ("zlib" ,zlib)))
+     (list libatomic-ops slib zlib))
     (native-inputs
-     `(("texinfo" ,texinfo)
-       ("openssl" ,openssl)            ; needed for tests
-       ("pkg-config" ,pkg-config)))    ; needed to find external libatomic-ops
+     (list texinfo openssl ; needed for tests
+           pkg-config))    ; needed to find external libatomic-ops
     (arguments
      `(#:configure-flags
        (list (string-append "--with-slib="
@@ -1042,13 +1030,9 @@ and list gauche extension packages.")
                (copy-recursively "../bin" bin)
                (copy-recursively "../lib" lib)))))))
     (native-inputs
-     `(("coreutils" ,coreutils)
-       ("util-linux" ,util-linux)))
+     (list coreutils util-linux))
     (propagated-inputs
-     `(("gambit-c" ,gambit-c)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)
-       ("sqlite" ,sqlite)))
+     (list gambit-c zlib openssl sqlite))
     (build-system gnu-build-system)
     (synopsis "Meta-dialect of Scheme with post-modern features")
     (description "Gerbil is an opinionated dialect of Scheme designed for Systems
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 4426d9d562..d244ed1434 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -52,8 +52,7 @@
     (native-inputs
      `(("makeinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("perl" ,perl)))
+     (list ncurses perl))
     (arguments
      `(#:configure-flags
        ;; By default, screen supports 16 colors, but we want 256 when
@@ -132,14 +131,13 @@ controlling terminal and attach to it later.")
          (add-after
           'install 'wrap-python-scripts
           (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let* ((python (string-append (assoc-ref inputs "python")
-                                          "/bin/python"))
+            (let* ((python (search-input-file inputs "/bin/python"))
                    (out    (assoc-ref outputs "out"))
                    (config (string-append out "/bin/byobu-config"))
                    (select (string-append out "/bin/byobu-select-session")))
               (wrap-program config
                 `("BYOBU_PYTHON" = (,python))
-                `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
               (wrap-program select
                 `("BYOBU_PYTHON" = (,python)))
               #t))))))
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index a9372735bf..1da289c010 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -91,9 +91,7 @@
        ("qtdeclarative" ,qtdeclarative)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)
-       ("util-linux" ,util-linux)))
+     (list pkg-config qttools util-linux))
     (home-page "https://www.scribus.net")
     (synopsis "Desktop publishing and page layout program")
     (description
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 2211ccab87..4c38e2f055 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -94,17 +94,14 @@
        #:tests? #f)) ; no check target
     (propagated-inputs
      ;; SDL headers include X11 headers.
-     `(("libx11" ,libx11)
-       ("libcap" ,libcap) ; 'libSDL.la' contain `-lcap'.
-       ;; TODO: Since building Mesa with Meson it is now necessary that Mesa is
-       ;; a propogated input. We still need to figure out why, possibly due to a
-       ;; change in pkg-config.
-       ("mesa" ,mesa)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxrandr" ,libxrandr)
-              ("glu" ,glu)
-              ("alsa-lib" ,alsa-lib)
-              ("pulseaudio" ,pulseaudio)))
+     (list libx11
+           libcap ; 'libSDL.la' contain `-lcap'.
+           ;; TODO: Since building Mesa with Meson it is now necessary that Mesa is
+           ;; a propogated input. We still need to figure out why, possibly due to a
+           ;; change in pkg-config.
+           mesa))
+    (native-inputs (list pkg-config))
+    (inputs (list libxrandr glu alsa-lib pulseaudio))
     (outputs '("out" "debug"))
     (synopsis "Cross platform game development library")
     (description "Simple DirectMedia Layer is a cross-platform development
@@ -116,7 +113,7 @@ joystick, and graphics hardware.")
 (define-public sdl2
   (package (inherit sdl)
     (name "sdl2")
-    (version "2.0.12")
+    (version "2.0.14")
     (source (origin
              (method url-fetch)
              (uri
@@ -124,7 +121,7 @@ joystick, and graphics hardware.")
                              version ".tar.gz"))
              (sha256
               (base32
-               "0qy8wbqvfkb5ps8kxgaaf2zzpkjqbsw712hlp74znbn0jpv6i4il"))))
+               "1g1jahknv5r4yhh1xq5sf0md20ybdw1zh1i15lry26sq39bmn8fq"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
@@ -207,7 +204,7 @@ system, such as sound redirection over the network.")
         ;; mmx is supported only on Intel processors.
         '()
         '(#:configure-flags '("--disable-mmx")))))
-    (propagated-inputs `(("sdl" ,sdl)))
+    (propagated-inputs (list sdl))
     (synopsis "SDL graphics primitives library")
     (description "SDL_gfx provides graphics drawing primitives, rotozoom and
 other supporting functions for SDL.")
@@ -234,7 +231,7 @@ other supporting functions for SDL.")
                            "--disable-png-shared"
                            "--disable-tif-shared"
                            "--disable-webp-shared")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     ;; libjpeg, libpng, and libtiff are propagated inputs because the
     ;; SDL_image headers include the headers of these libraries.  SDL is a
     ;; propagated input because the pkg-config file refers to SDL's pkg-config
@@ -291,7 +288,7 @@ WEBP, XCF, XPM, and XV.")
        ("libmad" ,libmad)
        ("libmikmod" ,libmikmod)
        ("libvorbis" ,libvorbis)))
-    (propagated-inputs `(("sdl" ,sdl)))
+    (propagated-inputs (list sdl))
     (synopsis "SDL multi-channel audio mixer library")
     (description "SDL_mixer is a multi-channel audio mixer library for SDL.
 It supports any number of simultaneously playing channels of 16 bit stereo
@@ -319,8 +316,8 @@ and set the path to the configuration file with @code{TIMIDITY_CFG}.")
                (base32
                 "1d5c9xqlf4s1c01gzv6cxmg0r621pq9kfgxcg3197xw4p25pljjz"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("sdl" ,sdl)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs (list sdl))
+    (native-inputs (list pkg-config))
     (outputs '("out" "debug"))
     (synopsis "SDL networking library")
     (description "SDL_net is a small, cross-platform networking library for
@@ -356,10 +353,7 @@ SDL.")
            ;; generates linking errors.
            (lambda _ (invoke "autoreconf" "-vif"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -393,10 +387,9 @@ tagged text in SDL applications.")
               (modules '((guix build utils)))
               (snippet '(delete-file-recursively "external"))))
     (build-system gnu-build-system)
-    (propagated-inputs `(("sdl" ,sdl)))
-    (inputs `(("freetype" ,freetype)
-              ("mesa" ,mesa)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs (list sdl))
+    (inputs (list freetype mesa))
+    (native-inputs (list pkg-config))
     (outputs '("out" "debug"))
     (synopsis "SDL TrueType font library")
     (description "SDL_ttf is a TrueType font rendering library for SDL.")
@@ -499,10 +492,11 @@ directory.")
             "--disable-music-midi-fluidsynth-shared"
             ,flags))))
     (inputs
-     `(("opusfile" ,opusfile)
-       ;; The default MOD library changed in SDL2 mixer.
-       ("libmodplug" ,libmodplug)
-       ,@(alist-delete "libmikmod" (package-inputs sdl-mixer))))
+     (modify-inputs (package-inputs sdl-mixer)
+       (delete "libmikmod")
+       (prepend opusfile
+                ;; The default MOD library changed in SDL2 mixer.
+                libmodplug)))
     (native-inputs
      `(("pkgconfig" ,pkg-config))) ; Needed to find the opus library.
     (propagated-inputs
@@ -564,8 +558,8 @@ directory.")
        ("libjpeg" ,libjpeg-turbo)
        ("xorg-server" ,xorg-server)))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("sdl-union" ,(sdl-union))))
+     (list guile-2.2
+           (sdl-union)))
     (arguments
      '(#:configure-flags
        (list (string-append "--with-sdl-prefix="
@@ -640,13 +634,9 @@ sound and device input (keyboards, joysticks, mice, etc.).")
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+     (list guile-3.0 pkg-config))
     (inputs
-     `(("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sdl2-mixer" ,sdl2-mixer)
-       ("sdl2-ttf" ,sdl2-ttf)))
+     (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
     (synopsis "Guile bindings for SDL2")
     (home-page "https://dthompson.us/projects/guile-sdl2.html")
     (description
@@ -694,12 +684,9 @@ interface.")
                  (install-file "bin/Release/SDL2-CS.dll" (string-append out "/lib"))
                  #t))))))
       (native-inputs
-       `(("mono" ,mono)))
+       (list mono))
       (inputs
-       `(("sdl2" ,sdl2)
-         ("sdl2-image" ,sdl2-image)
-         ("sdl2-mixer" ,sdl2-mixer)
-         ("sdl2-ttf" ,sdl2-ttf)))
+       (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
       (home-page "https://dthompson.us/projects/guile-sdl2.html")
       (synopsis "C# wrapper for SDL2")
       (description
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 8c5e5f7cdf..5d860fb756 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -75,8 +75,8 @@
               (sha256
                (base32 "0xsb4ihf3p767f0zx9p4janwni6r9sg5j6lry0002i8hmnsdnv8r"))))
     (build-system gnu-build-system)
-    (inputs `(("zlib" ,zlib)
-              ("util-linux" ,util-linux "lib")))
+    (inputs (list zlib
+                  `(,util-linux "lib")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -122,11 +122,9 @@ rich set of boolean query operators.")
                                             (package-version python))
                             "/site-packages/xapian"))))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx))) ;for documentation
+     (list python-sphinx)) ;for documentation
     (inputs
-     `(("python" ,python)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)))
+     (list python xapian zlib))
     (synopsis "Python bindings for the Xapian search engine library")
     (license gpl2+)))
 
@@ -143,9 +141,9 @@ rich set of boolean query operators.")
         (base32 "1pbl8pbgmbs3i8yik4p63g4pd9bhn0dp3d7l667dkvw0kccl66c7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-devel-leak" ,perl-devel-leak)))
+     (list perl-devel-leak))
     (inputs
-     `(("xapian" ,xapian)))
+     (list xapian))
     (home-page "https://metacpan.org/release/Search-Xapian")
     (synopsis "Perl XS frontend to the Xapian C++ search library")
     (description
@@ -167,8 +165,8 @@ simplified, more 'perlish' interface to some common operations.")
         (base32
          "1kd2jd74m8ksc8s7hh0haz0q0c3n0mr39bbky262kk4l58f1g068"))))
     (build-system gnu-build-system)
-    (native-inputs `(("catch" ,catch-framework)))
-    (inputs `(("unqlite" ,unqlite)))
+    (native-inputs (list catch-framework))
+    (inputs (list unqlite))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir-source
@@ -205,8 +203,7 @@ files and directories.")
     (source (package-source libtocc))
     (build-system gnu-build-system)
     (inputs
-     `(("libtocc" ,libtocc)
-       ("unqlite" ,unqlite)))
+     (list libtocc unqlite))
     (arguments
      `(#:tests? #f                      ;No tests
        #:phases (modify-phases %standard-phases
@@ -251,18 +248,18 @@ command line tool for interacting with libtocc.")
                (("requests\\[socks\\]==2.25.1") "requests>=2.25")
                (("==") ">=")))))))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-certifi" ,python-certifi)
-       ("python-dateutil" ,python-dateutil)
-       ("python-flask" ,python-flask)
-       ("python-flask-babel" ,python-flask-babel)
-       ("python-idna" ,python-idna)
-       ("python-jinja2" ,python-jinja2)
-       ("python-langdetect" ,python-langdetect)
-       ("python-lxml" ,python-lxml)
-       ("python-pygments" ,python-pygments)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-requests" ,python-requests)))
+     (list python-babel
+           python-certifi
+           python-dateutil
+           python-flask
+           python-flask-babel
+           python-idna
+           python-jinja2
+           python-langdetect
+           python-lxml
+           python-pygments
+           python-pyyaml
+           python-requests))
     (home-page "https://searx.github.io/searx/")
     (synopsis "Privacy-respecting metasearch engine")
     (description "Searx is a privacy-respecting, hackable metasearch engine.")
@@ -357,31 +354,29 @@ for parsing HTML files.")
                  `("PERL5LIB" ":" prefix
                    (,(getenv "PERL5LIB"))))))))))
     (inputs
-     `(("aspell" ,aspell)
-       ("chmlib" ,chmlib)
-       ("inotify-tools" ,inotify-tools)
-       ("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)
-       ("python" ,python)
-       ("qtbase" ,qtbase-5)
-       ("unzip" ,unzip)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-
-       ;; For filters
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("groff" ,groff)
-       ("gzip" ,gzip)
-       ("libiconv" ,libiconv)
-       ("perl" ,perl)
-       ("perl-image-exiftool" ,perl-image-exiftool)
-       ("poppler" ,poppler)
-       ("sed" ,sed)
-       ("tar" ,tar)))
+     (list aspell
+           chmlib
+           inotify-tools
+           libxslt
+           libxml2
+           python
+           qtbase-5
+           unzip
+           xapian
+           zlib
+           ;; For filters
+           gawk
+           grep
+           groff
+           gzip
+           libiconv
+           perl
+           perl-image-exiftool
+           poppler
+           sed
+           tar))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list pkg-config which))
     (home-page "https://www.lesbonscomptes.com/recoll/")
     (synopsis "Find documents based on their contents or file names")
     (description "Recoll finds documents based on their contents as well as
@@ -404,8 +399,7 @@ decompression.")
          (base32
           "1qk3pxgzyrpcz5qfyd5xs2hw9q1cbb7j5zd4kp1diq501wcj2vs9"))))
     (inputs
-     `(("qdbm" ,qdbm)
-       ("zlib" ,zlib)))
+     (list qdbm zlib))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
@@ -459,10 +453,10 @@ conflict with slocate compatibility.")
         (string-append
          "--sharedstatedir=" (assoc-ref %outputs "out") "/var"))))
     (inputs
-     `(("liburing" ,liburing)
-       ("zstd" ,zstd "lib")))
+     (list liburing
+           `(,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://plocate.sesse.net/")
     (synopsis "Faster locate")
     (description "Plocate is a @code{locate} based on posting lists,
@@ -495,11 +489,8 @@ suitable as a default locate on your system.")
     ;; building: xpdf, catdoc, MP3::Tag, Spreadsheet::ParseExcel,
     ;; HTML::Entities.
     (inputs
-     `(("perl" ,perl)
-       ("perl-uri" ,perl-uri)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-mime-types" ,perl-mime-types)))
+     (list perl perl-uri perl-html-parser perl-html-tagset
+           perl-mime-types))
     (arguments
      `(;; XXX: This fails to build with zlib (API mismatch) and tests fail
        ;; with libxml2, so disable both.
@@ -549,17 +540,14 @@ search the generated indexes.")
          "0ykz6hn3qj46w3c99d6q0pi5ncq2894simcl7vapv047zm3cylmd"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("poppler" ,poppler)
-       ("python-urwid" ,python-urwid)
-       ("xclip" ,xclip)
-       ("xdg-utils" ,xdg-utils)))
+     (list poppler python-urwid xclip xdg-utils))
     (inputs
-     `(("python-latexcodec" ,python-latexcodec)
-       ("python-pybtex" ,python-pybtex)
-       ("python-pycurl" ,python-pycurl)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-six" ,python-six)
-       ("python-xapian-bindings" ,python-xapian-bindings)))
+     (list python-latexcodec
+           python-pybtex
+           python-pycurl
+           python-pyyaml
+           python-six
+           python-xapian-bindings))
     (arguments
      `(#:modules ((ice-9 rdelim)
                   (guix build python-build-system)
@@ -627,12 +615,12 @@ bibliographic data and simple document and bibtex retrieval.")
                   #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("bzip2" ,bzip2)
-       ("less" ,less)
-       ("lz4" ,lz4)
-       ("lzip" ,lzip)  ;; lzma
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list bzip2
+           less
+           lz4
+           lzip ;; lzma
+           pcre2
+           zlib))
     (arguments
      `(#:tests? #f                  ; no way to rebuild the binary input files
        #:test-target "test"
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index d5ce6e100d..25b64e907b 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -10,6 +10,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
+;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Sergey Trofimov <sarg@sarg.org.ru>
 ;;; Copyright © 2021 Dhruvin Gandhi <contact@dhruvin.dev>
 ;;; Copyright © 2021 Ahmad Jarara <git@ajarara.io>
@@ -97,11 +98,9 @@
                (("/bin/echo") (which "echo")))
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libusb" ,libusb)
-       ("pcsc-lite" ,pcsc-lite)))
+     (list libusb pcsc-lite))
     (home-page "https://ccid.apdu.fr/")
     (synopsis "PC/SC driver for USB smart card devices")
     (description
@@ -136,15 +135,15 @@ readers and is needed to communicate with such devices through the
        ("pkg-config" ,pkg-config)
        ("perl" ,perl)))
     (inputs
-     `(("curl" ,curl)
-       ("libbsd" ,libbsd)
-       ("openssl" ,openssl)
-       ("gtk+" ,gtk+)
-       ("pcsc-lite" ,pcsc-lite)
-       ("p11-kit" ,p11-kit)
-       ("libproxy" ,libproxy)
-       ("libxml2" ,libxml2)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list curl
+           libbsd
+           openssl
+           gtk+
+           pcsc-lite
+           p11-kit
+           libproxy
+           libxml2
+           cyrus-sasl))
     (arguments
      `(#:configure-flags
        (list "--disable-static"
@@ -208,10 +207,9 @@ the low-level development kit for the Yubico YubiKey authentication device.")
      '(#:configure-flags '("--disable-gost"))) ; TODO Missing the OpenSSL
                                                ; engine for GOST
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("cppunit" ,cppunit)))
+     (list pkg-config cppunit))
     (synopsis "Software implementation of a generic cryptographic device")
     (description
      "SoftHSM 2 is a software implementation of a generic cryptographic device
@@ -222,21 +220,21 @@ with a PKCS #11 Cryptographic Token Interface.")
 (define-public pcsc-lite
   (package
     (name "pcsc-lite")
-    (version "1.9.0")
+    (version "1.9.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pcsclite.apdu.fr/files/"
                                   "pcsc-lite-" version ".tar.bz2"))
               (sha256
                (base32
-                "1y9f9zipnrmgiw0mxrvcgky8vfrcmg6zh40gbln5a93i2c1x8j01"))))
+                "0n9y9m1wr5bwanpnylpdza3sf7lawi63jjizrl1aj5yxf4y46mk9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers"
                            "--disable-libsystemd")))
     (native-inputs
-     `(("perl" ,perl)                   ; for pod2man
-       ("pkg-config" ,pkg-config)))
+     (list perl ; for pod2man
+           pkg-config))
     (inputs
      `(("libudev" ,eudev)))
     (home-page "https://pcsclite.apdu.fr/")
@@ -267,9 +265,8 @@ from a client application and provide access to the desired reader.")
     ;; yubico.com, so skip it.
     (arguments '(#:tests? #f))
 
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("help2man" ,help2man)))
-    (inputs `(("curl" ,curl)))
+    (native-inputs (list pkg-config help2man))
+    (inputs (list curl))
     (synopsis "C library to validate one-time-password YubiKeys")
     (description
      "YubiKey C Client Library (libykclient) is a C library used to validate a
@@ -300,22 +297,17 @@ website for more information about Yubico and the YubiKey.")
          ;; configuration file at runtime.
          (add-after 'unpack 'set-default-libpcsclite.so.1-path
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libpcsclite (string-append (assoc-ref inputs "pcsc-lite")
-                                               "/lib/libpcsclite.so.1")))
+             (let ((libpcsclite (search-input-file inputs
+                                                   "/lib/libpcsclite.so.1")))
                (substitute* "configure"
                  (("DEFAULT_PCSC_PROVIDER=\"libpcsclite\\.so\\.1\"")
                   (string-append
                    "DEFAULT_PCSC_PROVIDER=\"" libpcsclite "\"")))
                #t))))))
     (inputs
-     `(("readline" ,readline)
-       ("openssl" ,openssl)
-       ("pcsc-lite" ,pcsc-lite)
-       ("ccid" ,ccid)))
+     (list readline openssl pcsc-lite ccid))
     (native-inputs
-     `(("libxslt" ,libxslt)
-       ("docbook-xsl" ,docbook-xsl)
-       ("pkg-config" ,pkg-config)))
+     (list libxslt docbook-xsl pkg-config))
     (home-page "https://github.com/OpenSC/OpenSC/wiki")
     (synopsis "Tools and libraries related to smart cards")
     (description
@@ -340,17 +332,14 @@ authentication, encryption and digital signatures.  OpenSC implements the PKCS
                 "10xgdc51xvszkxmsvqnbjs8ixxz7rfnfahh3wn8glllynmszbhwi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gengetopt" ,gengetopt)
-       ("perl" ,perl)
-       ("pcsc-lite" ,pcsc-lite)
-       ("openssl" ,openssl)))
+     (list gengetopt perl pcsc-lite openssl))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
-       ("help2man" ,help2man)
-       ("check" ,check)
-       ("texlive-bin" ,texlive-bin)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen
+           graphviz
+           help2man
+           check
+           texlive-bin
+           pkg-config))
     (home-page "https://developers.yubico.com/yubico-piv-tool/")
     (synopsis "Interact with the PIV application on a YubiKey")
     (description
@@ -388,13 +377,11 @@ and other operations.  It includes a library and a command-line tool.")
                                               (assoc-ref %outputs "out")
                                               "/lib/udev/rules.d"))))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("libusb" ,libusb)
-       ;; The library "libyubikey" is also known as "yubico-c".
-       ("libyubikey" ,libyubikey)))
+     (list json-c-0.13 libusb
+           ;; The library "libyubikey" is also known as "yubico-c".
+           libyubikey))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("eudev" ,eudev)))
+     (list pkg-config eudev))
     (home-page "https://developers.yubico.com/yubikey-personalization/")
     (synopsis "Library and tools to personalize YubiKeys")
     (description
@@ -439,13 +426,13 @@ retrieve a YubiKey's serial number, and so forth.")
                (("lib = \"libpcsclite\\.so\\.1\";")
                 (simple-format #f
                                "lib = \"~a\";"
-                               (string-append (assoc-ref inputs "pcsc-lite")
-                                              "/lib/libpcsclite.so.1"))))
+                               (search-input-file inputs
+                                                  "/lib/libpcsclite.so.1"))))
              #t)))))
     (inputs
-     `(("pcsc-lite" ,pcsc-lite)))
+     (list pcsc-lite))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page "https://github.com/LudovicRousseau/pyscard")
     (synopsis "Smart card library for Python")
     (description
@@ -488,15 +475,14 @@ PCSC API Python wrapper module.")
                                "/xml/dtd/docbook/docbookx.dtd")))
              #t)))))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("hidapi" ,hidapi)))
+     (list json-c-0.13 hidapi))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("gengetopt" ,gengetopt)
-       ("pkg-config" ,pkg-config)
-       ("gtk-doc" ,gtk-doc)
-       ("docbook-xml" ,docbook-xml-4.3)
-       ("eudev" ,eudev)))
+     (list help2man
+           gengetopt
+           pkg-config
+           gtk-doc
+           docbook-xml-4.3
+           eudev))
     (home-page "https://developers.yubico.com/libu2f-host/")
     ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
     (synopsis "U2F host-side C library and tool")
@@ -528,18 +514,17 @@ operations.")
        (list "--enable-gtk-doc"
              "--enable-tests")))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ("libressl" ,libressl)))
+     (list json-c-0.13 libressl))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("check" ,check)
-       ("gengetopt" ,gengetopt)
-       ("help2man" ,help2man)
-       ("pkg-config" ,pkg-config)
-       ("gtk-doc" ,gtk-doc)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           check
+           gengetopt
+           help2man
+           pkg-config
+           gtk-doc
+           which))
     (home-page "https://developers.yubico.com/libu2f-server/")
     ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
     (synopsis "U2F server-side C library")
@@ -571,15 +556,9 @@ verifying the cryptographic operations.")
        (list (string-append "--with-pam-dir="
                             (assoc-ref %outputs "out") "/lib/security"))))
     (inputs
-     `(("libu2f-host" ,libu2f-host)
-       ("libu2f-server" ,libu2f-server)
-       ("linux-pam" ,linux-pam)))
+     (list libu2f-host libu2f-server linux-pam))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool asciidoc pkg-config))
     (home-page "https://developers.yubico.com/pam-u2f/")
     (synopsis "PAM module for U2F authentication")
     (description
@@ -611,19 +590,17 @@ your existing infrastructure.")
          (add-after 'unpack 'install-public-suffix-list
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-file
-              (string-append (assoc-ref inputs "public-suffix-list")
-                             "/share/public-suffix-list-"
-                             ,(package-version public-suffix-list)
-                             "/public_suffix_list.dat")
+              (search-input-file inputs
+                                 (string-append
+                                  "/share/public-suffix-list-"
+                                  ,(package-version public-suffix-list)
+                                  "/public_suffix_list.dat"))
               "fido2/public_suffix_list.dat")
              #t)))))
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-six" ,python-six)))
+     (list python-cryptography python-six))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyfakefs" ,python-pyfakefs)
-       ("public-suffix-list" ,public-suffix-list)))
+     (list python-mock python-pyfakefs public-suffix-list))
     (home-page "https://github.com/Yubico/python-fido2")
     (synopsis "Python library for communicating with FIDO devices over USB")
     (description
@@ -673,20 +650,17 @@ implementing a Relying Party.")
                  "')")))
              #t)))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-pyscard" ,python-pyscard)
-       ("python-pyusb" ,python-pyusb)
-       ("python-click" ,python-click)
-       ("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-fido2" ,python-fido2)))
+     (list python-six
+           python-pyscard
+           python-pyusb
+           python-click
+           python-cryptography
+           python-pyopenssl
+           python-fido2))
     (inputs
-     `(("yubikey-personalization" ,yubikey-personalization)
-       ("pcsc-lite" ,pcsc-lite)
-       ("libusb" ,libusb)))
+     (list yubikey-personalization pcsc-lite libusb))
     (native-inputs
-     `(("swig" ,swig)
-       ("python-mock" ,python-mock)))
+     (list swig python-mock))
     (home-page "https://developers.yubico.com/yubikey-manager/")
     (synopsis "Command line tool and library for configuring a YubiKey")
     (description
@@ -729,8 +703,7 @@ an unprivileged user.")
         ("rust-regex" ,rust-regex-1)
         ("rust-tempfile" ,rust-tempfile-3))))
     (inputs
-     `(("hidapi" ,hidapi)
-       ("gnupg" ,gnupg)))
+     (list hidapi gnupg))
     (home-page "https://github.com/d-e-s-o/nitrocli")
     (synopsis "Command line tool for Nitrokey devices")
     (description
@@ -753,17 +726,16 @@ devices.")
 
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("pcsc-lite" ,pcsc-lite)
-       ("openssl" ,openssl)))
+     (list qtbase-5
+           qtsvg
+           qtdeclarative
+           qtwebsockets
+           qtgraphicaleffects
+           qtquickcontrols2
+           pcsc-lite
+           openssl))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   (guix build qt-utils)
@@ -798,7 +770,7 @@ phone is required.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256 (base32 "12zy4cnlcffcb64lsx8198y09j1dwi0bcn9rr82q6i1k950yzd3p"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("zlib" ,zlib)
        ("udev" ,eudev)
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 4c2228871f..0000bc7bc9 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -2,6 +2,8 @@
 ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,49 +49,43 @@
 (define-public libsepol
   (package
     (name "libsepol")
-    (version "3.0")
-    (source (let ((release "20191204"))
-              (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/SELinuxProject/selinux")
-                      (commit release)))
-                (file-name (string-append "selinux-" release "-checkout"))
-                (sha256
-                 (base32
-                  "05rpzm72cgprd0ccr6lvx9hm8j8b5nkqi4avshlsyg7s3sdlcxjs")))))
+    (version "3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/SELinuxProject/selinux")
+                     (commit version)))
+              (file-name (git-file-name "selinux" version))
+              (sha256
+               (base32
+                "03p3lmvrvkcvsmiczsjzhyfgxlxdkdyq0p8igv3s3hdak5n92jjn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; tests require checkpolicy, which requires libsepol
        #:test-target "test"
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "SHLIBDIR=" out "/lib")
                (string-append "MAN3DIR=" out "/share/man/man3")
                (string-append "MAN5DIR=" out "/share/man/man5")
                (string-append "MAN8DIR=" out "/share/man/man8")
+               (string-append "CFLAGS=-Wno-error")
                (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'portability
            (lambda _
              (substitute* "src/ibpkeys.c"
                (("#include \"ibpkey_internal.h\"" line)
                 (string-append line "\n#include <inttypes.h>\n"))
-               (("%#lx") "%#\" PRIx64 \""))
-             #t)))))
+               (("%#lx") "%#\" PRIx64 \"")))))))
     (native-inputs
-     `(("flex" ,flex)))
+     (list flex))
     (home-page "https://selinuxproject.org/")
     (synopsis "Library for manipulating SELinux policies")
     (description
@@ -106,23 +102,18 @@ boolean settings).")
     (arguments
      `(#:tests? #f ; there is no check target
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "LIBSEPOLA="
                               (assoc-ref %build-inputs "libsepol")
                               "/lib/libsepol.a")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t)))))
+           (lambda _ (chdir ,name))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -159,7 +150,7 @@ module into a binary representation.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -209,13 +200,12 @@ the core SELinux management utilities.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-before 'install 'adjust-semanage-conf-location
              (lambda _
                (substitute* "src/Makefile"
                  (("DEFAULT_SEMANAGE_CONF_LOCATION=/etc")
-                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))
-               #t))
+                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -256,7 +246,7 @@ binary policies.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))))))
+             (lambda _ (chdir ,name)))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -279,7 +269,7 @@ binary policies.")
             `(modify-phases ,phases
                (delete 'portability)
                (replace 'enter-dir
-                 (lambda _ (chdir "python/sepolgen") #t))
+                 (lambda _ (chdir "python/sepolgen")))
                ;; By default all Python files would be installed to
                ;; $out/gnu/store/...-python-.../, so we override the
                ;; PACKAGEDIR to fix this.
@@ -301,8 +291,7 @@ binary policies.")
                                         (assoc-ref inputs "python"))
                                        "/site-packages/sepolgen")))
                      (substitute* "src/share/Makefile"
-                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out"))))
-                   #t)))))))
+                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out")))))))))))
     (inputs
      `(("python" ,python-wrapper)))
     (native-inputs '())
@@ -342,8 +331,7 @@ based on required access.")
          (add-after 'unpack 'set-SEPOL-variable
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "SEPOL"
-                     (string-append (assoc-ref inputs "libsepol")
-                                    "/lib/libsepol.a"))))
+                     (search-input-file inputs "/lib/libsepol.a"))))
          (add-after 'unpack 'remove-Werror
            (lambda _
              (substitute* "setup.py"
@@ -356,14 +344,11 @@ based on required access.")
                 (string-append "join(\"" (assoc-ref outputs "out") "/\"")))
              #t)))))
     (propagated-inputs
-     `(("python-networkx" ,python-networkx)))
+     (list python-networkx))
     (inputs
-     `(("libsepol" ,libsepol)
-       ("libselinux" ,libselinux)))
+     (list libsepol libselinux))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("swig" ,swig)))
+     (list bison flex swig))
     (home-page "https://github.com/TresysTechnology/setools")
     (synopsis "Tools for SELinux policy analysis")
     (description "SETools is a collection of graphical tools, command-line
@@ -379,7 +364,7 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
      `(#:test-target "test"
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
-         (list "CC=gcc"
+         (list (string-append "CC=" ,(cc-for-target))
                (string-append "PREFIX=" out)
                (string-append "LOCALEDIR=" out "/share/locale")
                (string-append "BASHCOMPLETIONDIR=" out
@@ -401,9 +386,8 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'ignore-/usr-tests
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Rewrite lookup paths for header files.
@@ -411,10 +395,9 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
                             "setfiles/Makefile"
                             "run_init/Makefile")
                (("/usr(/include/security/pam_appl.h)" _ file)
-                (string-append (assoc-ref inputs "pam") file))
+                (search-input-file inputs file))
                (("/usr(/include/libaudit.h)" _ file)
-                (string-append (assoc-ref inputs "audit") file)))
-             #t)))))
+                (search-input-file inputs file))))))))
     (inputs
      `(("audit" ,audit)
        ("pam" ,linux-pam)
diff --git a/gnu/packages/sequoia.scm b/gnu/packages/sequoia.scm
index 2c68f43e36..3757fdd971 100644
--- a/gnu/packages/sequoia.scm
+++ b/gnu/packages/sequoia.scm
@@ -55,22 +55,19 @@
     (build-system cargo-build-system)
     (outputs '("out" "python"))
     (native-inputs
-     `(("clang" ,clang)
-       ("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)
-       ("python-wrapper" ,python-wrapper)))
+     (list clang pkg-config python-pytest python-pytest-runner
+           python-wrapper))
     (inputs
-     `(("capnproto" ,capnproto)
-       ("gmp" ,gmp)
-       ("nettle" ,nettle)
-       ("openssl" ,openssl)
-       ("python" ,python)
-       ("python-cffi" ,python-cffi)
-       ("sqlite" ,sqlite)))
+     (list capnproto
+           gmp
+           nettle
+           openssl
+           python
+           python-cffi
+           sqlite))
     (arguments
      `(#:tests? #f ;; building the tests requires 9.7GB total
-       #:rust ,rust-1.46
+       #:rust ,rust
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-backtrace" ,rust-backtrace-0.3)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index e24ef973b5..5cf39ac7f4 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -3,13 +3,14 @@
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2016, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -31,6 +32,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix hg-download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
@@ -75,8 +77,7 @@
          (add-after 'unpack 'chdir
            (lambda _ (chdir "lang/c++"))))))
     (inputs
-     `(("boost" ,boost)
-       ("snappy" ,snappy)))
+     (list boost snappy))
     (home-page "https://avro.apache.org/")
     (synopsis "Data serialization system")
     (description "Apache Avro is a data serialization system.  Avro provides:
@@ -110,8 +111,7 @@ implement RPC protocols.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs "include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -159,7 +159,7 @@ implement RPC protocols.")
                (mkdir-p doc)
                (copy-recursively "doc/html" doc)))))))
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     (list doxygen))
     (home-page "https://uscilab.github.io/cereal/")
     (synopsis "C++11 library for serialization")
     (description
@@ -189,10 +189,9 @@ such as compact binary encodings, XML, or JSON.")
         (base32 "0yzhq50ijvwrfkr97knhvn54lj3f4hr3zy39yq8wpf6xll94s4bf"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("googletest" ,googletest-1.8)
-       ("pkg-config" ,pkg-config)))
+     (list googletest-1.8 pkg-config))
     (propagated-inputs
-     `(("zlib" ,zlib))) ;; Msgpack installs two headers (zbuffer.h,
+     (list zlib)) ;; Msgpack installs two headers (zbuffer.h,
     ;; zbuffer.hpp) which #include <zlib.h>.  However, 'guix gc --references'
     ;; does not detect a store reference to zlib since these headers are not
     ;; compiled.
@@ -225,7 +224,7 @@ serialization.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     (list libtool))
     (home-page "https://github.com/tarruda/libmpack")
     (synopsis "Small binary serialization library")
     (description "Libmpack is a small binary serialization and RPC library
@@ -277,7 +276,7 @@ that implements both the msgpack and msgpack-rpc specifications.")
                                "mpack-src")
              #t)))))
     (inputs
-     `(("lua" ,lua)))
+     (list lua))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("libmpack" ,(package-source libmpack))))
@@ -379,9 +378,9 @@ that implements both the msgpack and msgpack-rpc specifications.")
              (setenv "CC" "gcc")
              (invoke "make" "test"))))))
     (inputs
-     `(("libyaml" ,libyaml)))
+     (list libyaml))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "C library for reading and writing YAML")
     (description
      "LibCYAML is a C library written in ISO C11 for reading and writing
@@ -409,7 +408,7 @@ in which the loaded data is arranged in memory.")
     (arguments
      '(#:configure-flags '("-DYAML_BUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("python" ,python)))
+     (list python))
     (home-page "https://github.com/jbeder/yaml-cpp")
     (synopsis "YAML parser and emitter in C++")
     (description "YAML parser and emitter in C++ matching the YAML 1.2 spec.")
@@ -418,16 +417,17 @@ in which the loaded data is arranged in memory.")
 (define-public jsoncpp
   (package
     (name "jsoncpp")
-    (version "1.9.2")
+    (version "1.9.4")
     (home-page "https://github.com/open-source-parsers/jsoncpp")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page) (commit version)))
               (file-name (git-file-name name version))
-              (patches (search-patches "jsoncpp-fix-inverted-case.patch"))
+              (patches
+               (search-patches "jsoncpp-pkg-config-version.patch"))
               (sha256
                (base32
-                "037d1b1qdmn3rksmn1j71j26bv4hkjv7sn7da261k853xb5899sg"))))
+                "0qnx5y6c90fphl9mj9d20j2dfgy6s5yr5l0xnzid0vh71zrp6jwv"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
@@ -496,9 +496,7 @@ it a convenient format to store user input files.")
                       ":"))))
                 #t)))))
       (inputs
-       `(("bash-minimal" ,bash-minimal)
-         ("grep" ,grep)
-         ("sed" ,sed)))
+       (list bash-minimal grep sed))
       (synopsis "Pipeable JSON parser written in shell")
       (description
         "This package provides a JSON parser written in shell, compatible with
@@ -558,7 +556,7 @@ RPC system.  Think JSON, except binary.  Or think Protocol Buffers, except faste
          (base32
           "1fj4554msq0rrz14snbj908dzqj46gh7jg9w9j0akn2b7q911m5a"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "http://mongoc.org/libbson/current/index.html")
     (synopsis "C BSON library")
     (description "Libbson can create and parse BSON documents.  It can also
@@ -569,21 +567,23 @@ it is comparable to protobuf.")
 (define-public python-ruamel.yaml
   (package
     (name "python-ruamel.yaml")
-    (version "0.15.83")
+    (version "0.16.13")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ruamel.yaml" version))
        (sha256
         (base32
-         "0p4i8ad28cbbbjja8b9274irkhnphhvhap3aym6yb8xfp1d72kpw"))))
+         "0hm9yg785f46bkrgqknd6fdvmkby9dpzjnm0b63qf0i748acaj5v"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
+    (propagated-inputs
+     (list python-ruamel.yaml.clib))
     (arguments
      `(;; TODO: Tests require packaging "ruamel.std.pathlib".
        #:tests? #f))
-    (home-page "https://bitbucket.org/ruamel/yaml")
+    (home-page "https://sourceforge.net/projects/ruamel-yaml/")
     (synopsis "YAML 1.2 parser/emitter")
     (description
      "This package provides YAML parser/emitter that supports roundtrip
@@ -593,8 +593,43 @@ and has round-trip loaders and dumpers.  It supports comments.  Block
 style and key ordering are kept, so you can diff the source.")
     (license license:expat)))
 
-(define-public python2-ruamel.yaml
-  (package-with-python2 python-ruamel.yaml))
+(define-public python-ruamel.yaml.clib
+  (package
+    (name "python-ruamel.yaml.clib")
+    (version "0.2.6")
+    (source
+      (origin
+        ;; pypi release code has cythonized code without corresponding source.
+        (method hg-fetch)
+        (uri (hg-reference
+               (url "http://hg.code.sf.net/p/ruamel-yaml-clib/code")
+               (changeset version)))
+        (file-name (string-append name "-" version "-checkout"))
+        (sha256
+         (base32
+          "05m3y7pjfbaarqbbgw1k6gs6cnnmxnwadjipxvw1aaaqk3s236cs"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            (delete-file "_ruamel_yaml.c")))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f  ; This package is split from python-ruamel.yaml and
+                    ; depends on modules from it for the test suite.
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'sanity-check) ; Depends on python-ruamel.yaml
+         (add-after 'unpack 'cythonize-code
+           (lambda _
+             (invoke "cython" "_ruamel_yaml.pyx"))))))
+    (native-inputs
+     (list python-cython))
+    (home-page "https://sourceforge.net/p/ruamel-yaml-clib/code/ci/default/tree")
+    (synopsis "C version of reader, parser and emitter for ruamel.yaml")
+    (description
+     "This package provides a C version of the reader, parser and emitter for
+@code{ruamel.yaml} derived from libyaml.")
+    (license license:expat)))
 
 (define-public python-cbor
   (package
@@ -663,8 +698,7 @@ game development and other performance-critical applications.")
           "00w9hwz7sj3fkdjc378r066vdy6lpxmn6vfac3qx956k8lvpxxj5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pandas" ,python-pandas)
-       ("python-pyarrow" ,python-pyarrow)))
+     (list python-pandas python-pyarrow))
     (home-page "https://github.com/wesm/feather")
     (synopsis "Python wrapper to the Feather file format")
     (description "This package provides a Python wrapper library to the
diff --git a/gnu/packages/serveez.scm b/gnu/packages/serveez.scm
index 981d70ef70..b19d0ca596 100644
--- a/gnu/packages/serveez.scm
+++ b/gnu/packages/serveez.scm
@@ -50,9 +50,9 @@
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs
-     `(("lzip" ,lzip)))
+     (list lzip))
     (inputs
-     `(("guile" ,guile-2.2)))
+     (list guile-2.2))
     (home-page "https://www.gnu.org/software/serveez/")
     (synopsis "Framework for implementing IP-based servers")
     (description
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 33290862bf..3de26f7201 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
@@ -97,7 +98,7 @@
            #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("libedit" ,libedit)))
+     (list libedit))
     (arguments
      '(#:configure-flags '("--with-libedit")))
     (home-page "http://gondor.apana.org.au/~herbert/dash")
@@ -129,14 +130,11 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
            (delete-file-recursively "pcre2")))))
     (build-system cmake-build-system)
     (inputs
-     `(("fish-foreign-env" ,fish-foreign-env)
-       ("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)      ; don't use the bundled PCRE2
-       ("python" ,python)))  ; for fish_config and manpage completions
+     (list fish-foreign-env ncurses pcre2 ; don't use the bundled PCRE2
+           python))  ; for fish_config and manpage completions
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("groff" ,groff)                 ; for 'fish --help'
-       ("procps" ,procps)))             ; for the test suite
+     (list doxygen groff ; for 'fish --help'
+           procps))             ; for the test suite
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -296,16 +294,15 @@ and syntax highlighting.")
                           ,(string-append func-path "/fenv.apply.fish")
                           ,(string-append func-path "/fenv.main.fish"))
              (("bash")
-              (string-append (assoc-ref %build-inputs "bash") "/bin/bash"))
+              (search-input-file %build-inputs "/bin/bash"))
              (("sed")
-              (string-append (assoc-ref %build-inputs "sed") "/bin/sed"))
+              (search-input-file %build-inputs "/bin/sed"))
              ((" tr ")
-              (string-append " " (assoc-ref %build-inputs "coreutils")
-                             "/bin/tr ")))))))
+              (string-append " "
+                             (search-input-file %build-inputs "/bin/tr")
+                             " ")))))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("sed" ,sed)))
+     (list bash coreutils sed))
     (home-page "https://github.com/oh-my-fish/plugin-foreign-env")
     (synopsis "Foreign environment interface for fish shell")
     (description "@code{fish-foreign-env} wraps bash script execution in a way
@@ -340,12 +337,8 @@ into fish.")
               (("/bin/rm")  (which "rm"))
               (("/bin\\)")  (string-append (dirname (which "rm")) ")")))
             #t)))))
-    (inputs `(("readline" ,readline)
-              ("perl" ,perl)))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list readline perl))
+    (native-inputs (list autoconf automake libtool pkg-config))
     (synopsis "Alternative implementation of the rc shell by Byron Rakitzis")
     (description
      "This is a reimplementation by Byron Rakitzis of the Plan 9 shell.  It
@@ -376,9 +369,9 @@ has a small feature set similar to a traditional Bourne shell.")
            (lambda _
              (chdir ".."))))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (synopsis "Extensible shell with higher-order functions")
     (description
      "Es is an extensible shell.  The language was derived from the Plan 9
@@ -392,7 +385,7 @@ written by Paul Haahr and Byron Rakitzis.")
 (define-public tcsh
   (package
     (name "tcsh")
-    (version "6.22.02")
+    (version "6.22.03")
     (source (origin
               (method url-fetch)
               ;; Old tarballs are moved to old/.
@@ -402,15 +395,14 @@ written by Paul Haahr and Byron Rakitzis.")
                                         "old/tcsh-" version ".tar.gz")))
               (sha256
                (base32
-                "0nw8prz1n0lmr82wnpyhrzmki630afn7p9cfgr3vl00vr9c72a7d"))
+                "1dv24bsp6faayinvwds092ylk9sb6894rl9ddm87y31a7mjzsb5y"))
               (patches (search-patches "tcsh-fix-autotest.patch"))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("perl" ,perl)))
+     (list autoconf perl))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
         (modify-phases %standard-phases
@@ -427,6 +419,16 @@ written by Paul Haahr and Byron Rakitzis.")
               ;; Take care of pwd
               (substitute* '("tests/commands.at" "tests/variables.at")
                 (("/bin/pwd") (which "pwd")))
+              (substitute* "Makefile"
+                ;; Likewise for /usr/bin/env.
+                (("/usr/bin/env") "env")
+                ;; Don't reset the environment (PATH, etc).
+                (("\\$\\(ENVCMD\\) -") "$(ENVCMD)"))
+              ;; This test does not expect the home directory from
+              ;; /etc/passwd to be '/'.
+              (substitute* "tests/subst.at"
+                (("\\$\\(id -un\\)/foo")
+                 "$(id -un)//foo"))
               ;; The .at files create shell scripts without shebangs. Erk.
               (substitute* "tests/commands.at"
                 (("./output.sh") "/bin/sh output.sh"))
@@ -514,10 +516,8 @@ history mechanism, job control and a C-like syntax.")
                          (("command -p") "command ")
                          (("'command' -p") "'command' "))
                        #t)))))
-    (native-inputs `(("autoconf" ,autoconf)))
-    (inputs `(("ncurses" ,ncurses)
-              ("pcre" ,pcre)
-              ("perl" ,perl)))
+    (native-inputs (list autoconf))
+    (inputs (list ncurses pcre perl))
     (synopsis "Powerful shell for interactive use and scripting")
     (description "The Z shell (zsh) is a Unix shell that can be used
 as an interactive login shell and as a powerful command interpreter
@@ -565,7 +565,7 @@ ksh, and tcsh.")
        ;; information.
        #:tests? #f))
     (inputs
-     `(("python-ply" ,python-ply)))
+     (list python-ply))
     (home-page "https://xon.sh/")
     (synopsis "Python-ish shell")
     (description
@@ -607,11 +607,9 @@ use of experts and novices alike.")
                  (symlink rxpath "rx"))
                #t)))))
       (inputs
-       `(("scheme48" ,scheme48)
-         ("scheme48-rx" ,scheme48-rx)))
+       (list scheme48 scheme48-rx))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)))
+       (list autoconf automake))
       (home-page "https://github.com/scheme/scsh")
       (synopsis "Unix shell embedded in Scheme")
       (description
@@ -687,7 +685,7 @@ Its features include:
            "0qiny71ww5nhzy4mnc8652hn0mlxyb67h333gbdxp4j4qxsi13q4"))))
       (build-system gnu-build-system)
       (inputs
-       `(("linenoise" ,linenoise)))
+       (list linenoise))
       (arguments
        `(#:tests? #f
          #:make-flags (list "CC=gcc"
@@ -774,9 +772,9 @@ The OpenBSD Korn Shell is a cleaned up and enhanced ksh.")
         (base32 "0x33plxqhh5202hgqidgccz5hpg8d2q71ylgnm437g60mfi9z0px"))))
     (build-system meson-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f))                    ; no tests included
     (home-page "https://github.com/dimkr/loksh")
@@ -860,7 +858,7 @@ Shell (pdksh).")
                  (invoke/quiet oil "osh" "-c" "echo hi")
                  (invoke/quiet oil "osh" "-n" "configure"))))))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (home-page "https://www.oilshell.org")
     (synopsis "Programming language and Bash-compatible Unix shell")
     (description "Oil is a programming language with automatic translation for
@@ -890,9 +888,9 @@ scripts.")
                  #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (arguments
      '(#:make-flags '("XFAIL_TESTS=tests/redirects.org")))
     (home-page "https://savannah.nongnu.org/projects/gash/")
@@ -925,10 +923,9 @@ as part of the Guix bootstrap process.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("gash" ,gash)))
+     (list guile-3.0 gash))
     (home-page "https://savannah.nongnu.org/projects/gash/")
     (synopsis "Core POSIX utilities written in Guile Scheme")
     (description "Gash-Utils provides Scheme implementations of many
@@ -954,8 +951,7 @@ files and text.")
         (base32 "1db521jrs0yxwmvkkl8wssa8qyi0m62n69l7xxl2gpyz1v8nvw76"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.52
-       #:tests? #false                  ;missing files
+     `(#:tests? #false                  ;missing files
        #:features '("extra")
        #:cargo-inputs
        (("rust-ctrlc" ,rust-ctrlc-3)
@@ -1014,15 +1010,14 @@ files and text.")
         ("rust-rstest" ,rust-rstest-0.10)
         ("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (inputs
-     `(("curl" ,curl)
-       ("libgit2" ,libgit2)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl
+           libgit2
+           libx11
+           libxcb
+           openssl
+           zlib))
     (home-page "https://www.nushell.sh")
     (synopsis "Shell that understands the structure of the data")
     (description
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 61cc124815..56984a08e4 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -129,14 +129,11 @@ chart.")
                            ("doc/boxes.1"  "share/man/man1/")
                            ("boxes-config" "etc/")))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-
-       ;; For the tests.
-       ("xxd" ,xxd)))
+     (list bison flex
+           ;; For the tests.
+           xxd))
     (inputs
-     `(("libunistring" ,libunistring)
-       ("pcre2" ,pcre2)))
+     (list libunistring pcre2))
     (home-page "https://boxes.thomasjensen.com")
     (synopsis "Command line ASCII boxes")
     (description
@@ -159,13 +156,13 @@ text.")
                 "1g3pij5qn2j7v7jjac2a63lxd97mcsgw6xq6k5p7835q9fjiid98"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("ruby" ,ruby)
-       ("ruby-byebug" ,ruby-byebug)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rspec-wait" ,ruby-rspec-wait)
-       ("tmux" ,tmux)
-       ("zsh" ,zsh)))
+     (list ruby
+           ruby-byebug
+           ruby-pry
+           ruby-rspec
+           ruby-rspec-wait
+           tmux
+           zsh))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -209,7 +206,7 @@ as you type.")
                 "039g3n59drk818ylcyvkciv8k9mf739cv6v4vis1h9fv9whbcmwl"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("zsh" ,zsh)))
+     (list zsh))
     (arguments
      ;; FIXME: Tests fail when running test regexp
      ;; there is no pcre module in the Guix zsh package
@@ -333,7 +330,7 @@ between various shells or commands.")
                   (string-append "\"" libc "/lib/libc.so.6\"\n"))
                  (("\"df\"")
                   (string-append "\"" coreutils "/bin/df\"")))))))))
-    (inputs `(("coreutils" ,coreutils)))
+    (inputs (list coreutils))
     (home-page "https://github.com/andreafrancia/trash-cli")
     (synopsis "Trash can management tool")
     (description
@@ -386,11 +383,8 @@ are already there.")
                  (invoke "make" "clean")))
              #t)))))
     (native-inputs
-     `(("go-github-com-burntsushi-toml" ,go-github-com-burntsushi-toml)
-       ("go-github-com-direnv-go-dotenv" ,go-github-com-direnv-go-dotenv)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-golang-org-x-mod" ,go-golang-org-x-mod)
-       ("which" ,which)))
+     (list go-github-com-burntsushi-toml go-github-com-direnv-go-dotenv
+           go-github-com-mattn-go-isatty go-golang-org-x-mod which))
     (home-page "https://direnv.net/")
     (synopsis "Environment switcher for the shell")
     (description
@@ -464,12 +458,9 @@ below the current cursor position, scrolling the screen if necessary.")
                  (("ncursesw\\/curses.h") "ncurses.h")))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (synopsis "Navigate and search command history with shell history suggest box")
     (description "HSTR (HiSToRy) is a command-line utility that brings
 improved Bash and Zsh command completion from the history.  It aims to make
@@ -571,7 +562,7 @@ city, state, zip, or area code, it will check out.")
                    #t))))
     (build-system gnu-build-system)
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (home-page "https://www.nongnu.org/renameutils/")
     (synopsis "File renaming utilities")
     (description "The file renaming utilities (renameutils for short) are a
diff --git a/gnu/packages/simh.scm b/gnu/packages/simh.scm
index b911b30b00..81d26bbde0 100644
--- a/gnu/packages/simh.scm
+++ b/gnu/packages/simh.scm
@@ -40,7 +40,7 @@
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpcap" ,libpcap)))
+     (list libpcap))
     (arguments
      '(#:tests? #f
        #:make-flags (list
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index 23580322bb..240549be47 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -100,11 +101,9 @@
        ("scotch" ,pt-scotch32)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bison" ,bison)))
+     (list bison))
     (propagated-inputs
-     `(("gzip" ,gzip)
-       ("gnuplot" ,gnuplot)
-       ("openmpi" ,openmpi)))
+     (list gzip gnuplot openmpi))
     (outputs '("debug"                  ;~60MB
                "out"))
     (arguments
@@ -256,12 +255,11 @@ problems for efficient solution on parallel systems.")
             "0lhqsq8ypdak0ahr2jnyvg07yrqp6wicjxi6k56zx24wp3qg60sc"))))
     (build-system python-build-system)
     (inputs
-     `(("openmpi" ,openmpi)
-       ("python-numpy" ,python-numpy)))
+     (list openmpi python-numpy))
     (native-inputs
-     `(("python-pytest-cov" ,python-pytest-cov)))
+     (list python-pytest-cov))
     (propagated-inputs
-     `(("python-mpi4py" ,python-mpi4py)))
+     (list python-mpi4py))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -270,16 +268,13 @@ problems for efficient solution on parallel systems.")
          (replace 'check
            (lambda _
              (setenv "HOME" "/tmp")
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; Disable parallel tests to avoid race condition.  See
                ;; https://github.com/pytest-dev/pytest-cov/issues/237.
                (substitute* "runtests.sh"
                  (("for p in 1 4 8 16; do")
                   "for p in 1; do"))
-               (invoke "./runtests.sh"))
-             #t)))))
+               (invoke "./runtests.sh")))))))
     (home-page "https://bitbucket.org/fenics-project/dijitso/")
     (synopsis "Distributed just-in-time building of shared libraries")
     (description
@@ -307,19 +302,15 @@ the complexity of that interface.  Parallel support depends on the
             "10dz8x3lm68x2w3kkqcjask38h0zkhhak26jdbkppr8g9y8wny7p"))))
     (build-system python-build-system)
     (inputs
-     `(("python-numpy" ,python-numpy)))
+     (list python-numpy))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
-             (with-directory-excursion "test"
-               (invoke "py.test"))
-             #t)))))
+             (invoke "py.test" "test"))))))
     (home-page "https://bitbucket.org/fenics-project/ufl/")
     (synopsis "Unified language for form-compilers")
     (description "The Unified Form Language (UFL) is a domain specific
@@ -344,17 +335,14 @@ UFL is part of the FEniCS Project.")
             "13sc7lma3d2mh43an7i4kkdbbk4cmvxjk45wi43xnjd7qc38zg4b"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-sympy" ,python-sympy)))
+     (list python-numpy python-sympy))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: three FIAT test modules are known to fail
                ;; with recent versions of pytest (>= 4).  These are
@@ -364,8 +352,7 @@ UFL is part of the FEniCS Project.")
                (invoke "py.test" "unit/"
                        "--ignore=unit/test_fiat.py"
                        "--ignore=unit/test_quadrature.py"
-                       "--ignore=unit/test_reference_element.py"))
-             #t)))))
+                       "--ignore=unit/test_reference_element.py")))))))
     (home-page "https://bitbucket.org/fenics-project/fiat/")
     (synopsis "Tabulation of finite element function spaces")
     (description
@@ -394,19 +381,15 @@ FIAT is part of the FEniCS Project.")
             "1f2a44ha65fg3a1prrbrsz4dgvibsv0j5c3pi2m52zi93bhwwgg9"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (propagated-inputs
-     `(("python-fenics-dijitso" ,python-fenics-dijitso)
-       ("python-fenics-fiat" ,python-fenics-fiat)
-       ("python-fenics-ufl" ,python-fenics-ufl)))
+     (list python-fenics-dijitso python-fenics-fiat python-fenics-ufl))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: the tests in subdirectory
                ;; 'unit/ufc/finite_element' require the ffc_factory
@@ -631,8 +614,7 @@ user interface to the FEniCS core components and external libraries.")
              ;; Define paths to store locations.
              (setenv "PYBIND11_DIR" (assoc-ref %build-inputs "pybind11"))
              ;; Move to python sub-directory.
-             (chdir "python")
-             #t))
+             (chdir "python")))
          (add-after 'build 'mpi-setup
            ,%openmpi-setup)
          (add-before 'check 'pre-check
@@ -674,14 +656,8 @@ user interface to the FEniCS core components and external libraries.")
                  "d for d in demos if d[0].stem not in "
                  "excludeList]\n")))
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/build/lib.linux-x86_64-"
-                      ,(version-major+minor (package-version python)) ":"
-                      (getenv "PYTHONPATH")))
              ;; Restrict OpenBLAS to MPI-only in preference to MPI+OpenMP.
-             (setenv "OPENBLAS_NUM_THREADS" "1")
-             #t))
+             (setenv "OPENBLAS_NUM_THREADS" "1")))
          (replace 'check
            (lambda _
              (with-directory-excursion "test"
@@ -693,8 +669,7 @@ user interface to the FEniCS core components and external libraries.")
                                        (min 3 (parallel-job-count)))
                        "python" "-B" "-m"
                        "pytest" "unit" "--ignore"
-                       "unit/nls/test_PETScSNES_solver.py"))
-             #t))
+                       "unit/nls/test_PETScSNES_solver.py"))))
          (add-after 'install 'install-demo-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((demos (string-append
@@ -708,8 +683,7 @@ user interface to the FEniCS core components and external libraries.")
                                (unless (equal? "." dir)
                                  (mkdir-p tgt-dir)
                                  (install-file file tgt-dir))))
-                           (find-files "." ".*\\.(py|gz|xdmf)$"))))
-             #t)))))
+                           (find-files "." ".*\\.(py|gz|xdmf)$")))))))))
     (home-page "https://fenicsproject.org/")
     (synopsis "High-level environment for solving differential equations")
     (description
@@ -745,7 +719,7 @@ FEniCS core components and external libraries.")
                  "16v08dx7h7n4wyddzbwimazwyj74ynis12mpjfkay4243npy44b8"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("inetutils" ,inetutils))) ; for 'hostname', used in the check phase
+       (list inetutils)) ; for 'hostname', used in the check phase
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -925,16 +899,14 @@ command-line utility for mesh optimisation.")
             #t))))
     (build-system python-build-system)
     (inputs
-     `(("fenics" ,fenics)
-       ("openmpi" ,openmpi)
-       ("pybind11" ,pybind11)))
+     (list fenics openmpi pybind11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-coverage" ,python-coverage)
-       ("python-decorator" ,python-decorator)
-       ("python-flake8" ,python-flake8)
-       ("python-pkgconfig" ,python-pkgconfig)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config
+           python-coverage
+           python-decorator
+           python-flake8
+           python-pkgconfig
+           python-pytest))
     (propagated-inputs
      `(("scipy" ,python-scipy)))
     (arguments
diff --git a/gnu/packages/skarnet.scm b/gnu/packages/skarnet.scm
index a282399024..31349e858b 100644
--- a/gnu/packages/skarnet.scm
+++ b/gnu/packages/skarnet.scm
@@ -70,7 +70,7 @@ and file system operations.  It is used by all skarnet.org software.")
       (sha256
        (base32 "0msmzf5zwjcsgjlvvq28rd2i0fkdb2skmv8ii0ix8dhyckwwjmav"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -112,8 +112,7 @@ complexity.")))
      (sha256
       (base32 "1a3lj0xfhn1w3a4ygqsxy8q4dr3n48hnwml4xzdpz3nrikhy8if5"))))
    (build-system gnu-build-system)
-   (inputs `(("skalibs" ,skalibs)
-             ("execline" ,execline)))
+   (inputs (list skalibs execline))
    (arguments
     `(#:configure-flags (list
                         (string-append "--with-lib="
@@ -157,7 +156,7 @@ functionality with a very small amount of code.")))
      (sha256
       (base32 "0nczzjprvp6wirzycgf5h32dlgx4r8grzkqhif27n3ii6f5g78yw"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -186,10 +185,7 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
      (sha256
       (base32 "1fn3g9gkwgmnxallhk82f5rly81pnkilj7n49g5fbfmaalsq96mh"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)
-              ("execline" ,execline)
-              ("s6" ,s6)
-              ("s6-dns" ,s6-dns)))
+    (inputs (list skalibs execline s6 s6-dns))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -229,9 +225,7 @@ clock synchronization.")))
      (sha256
       (base32 "1xyaplwzvqnb53mg59a7jklakzwsiqivp6qggsry3sbaw4hf3d5j"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)
-              ("execline" ,execline)
-              ("s6" ,s6)))
+    (inputs (list skalibs execline s6))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -271,7 +265,7 @@ environment.")))
      (sha256
       (base32 "132jj5qk8x40kw6lrrn7jiqhvqj9d2h6g6mhl8zma1sp37bg0i84"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
@@ -304,9 +298,7 @@ systems and other constrained environments, but they work everywhere.")))
       (base32 "0grqk111d6aqym1c4l9j26fdqcgra1hvwb9vdgylrfbvn1c3hlpb"))))
     (build-system gnu-build-system)
     (inputs
-     `(("execline" ,execline)
-       ("s6" ,s6)
-       ("skalibs" ,skalibs)))
+     (list execline s6 skalibs))
     (arguments
      '(#:configure-flags
        (list
@@ -349,7 +341,7 @@ all the details.")))
      (sha256
       (base32 "0hr49nl0d7a6i5w8cfg43xzvzayb8kpqij9xg7bmw2fyvc2z338z"))))
     (build-system gnu-build-system)
-    (inputs `(("skalibs" ,skalibs)))
+    (inputs (list skalibs))
     (arguments
      '(#:configure-flags (list
                           (string-append "--with-lib="
diff --git a/gnu/packages/skribilo.scm b/gnu/packages/skribilo.scm
index e5d764ae28..1b000e0688 100644
--- a/gnu/packages/skribilo.scm
+++ b/gnu/packages/skribilo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,20 +65,24 @@
                                  " -c"))))
              #t)))
 
-       #:parallel-build? #f))
+       #:parallel-build? #f
 
-    (native-inputs `(("pkg-config" ,pkg-config)))
+       ;; XXX: Temporarily disable tests because they rely on
+       ;; 'test-runner-current' *not* returning #f after 'test-end', which is
+       ;; no longer the case in Guile >= 3.0.6.  This is fixed upstream.
+       #:tests? #f))
 
-    (inputs `(("guile" ,guile-3.0)
-              ("imagemagick" ,imagemagick)
-              ("ghostscript" ,ghostscript)        ; for 'convert'
-              ("ploticus" ,ploticus)
-              ("lout" ,lout)))
+    (native-inputs (list pkg-config))
+
+    (inputs (list guile-3.0
+                  imagemagick
+                  ghostscript ; for 'convert'
+                  ploticus
+                  lout))
 
     ;; The 'skribilo' command needs them, and for people using Skribilo as a
     ;; library, these inputs are needed as well.
-    (propagated-inputs `(("guile-reader" ,guile-reader)
-                         ("guile-lib" ,guile-lib)))
+    (propagated-inputs (list guile-reader guile-lib))
 
     (home-page "https://www.nongnu.org/skribilo/")
     (synopsis "Document production tool written in Guile Scheme")
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index 404a4535ca..c8de04667f 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -57,20 +57,23 @@
        #:parallel-build? #f  ; there's at least one race
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'reduce-array-test-size
+           ;; Reduce the size of the array, otherwise the array.sl/array.slc
+           ;; tests fails with "Unable to create a multi-dimensional array of
+           ;; the desired size" on 32 bit systems.
+           (lambda _
+             (substitute* "src/test/array.sl"
+               (("10000,10000,10000,10000,10000,10000")
+                "10,10,10,10,10,10"))))
          (add-before 'configure 'substitute-before-config
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((ncurses (assoc-ref inputs "ncurses")))
                (substitute* "configure"
                  (("MISC_TERMINFO_DIRS=\"\"")
                   (string-append "MISC_TERMINFO_DIRS="
-                                 "\"" ncurses "/share/terminfo" "\"")))
-               #t))))))
+                                 "\"" ncurses "/share/terminfo" "\"")))))))))
     (inputs
-     `(("readline" ,readline)
-       ("zlib" ,zlib)
-       ("libpng" ,libpng)
-       ("pcre" ,pcre)
-       ("ncurses" ,ncurses)))
+     (list readline zlib libpng pcre ncurses))
     (home-page "https://www.jedsoft.org/slang/")
     (synopsis "Library for interactive applications and extensibility")
     (description
@@ -98,10 +101,7 @@ slsh, which is part of the S-Lang distribution.")
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (inputs
-     `(("slang" ,slang)
-       ("popt" ,popt)
-       ("python" ,python)
-       ("fribidi" ,fribidi)))
+     (list slang popt python fribidi))
     (arguments
      `(#:tests? #f    ; no test suite
        #:configure-flags
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index 26f7ab2c76..c89e95316a 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -61,12 +61,12 @@
       (patches (search-patches "smalltalk-multiplication-overflow.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; XXX: To be removed with the next release of Smalltalk.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("zip" ,zip)))
+     (list pkg-config
+           ;; XXX: To be removed with the next release of Smalltalk.
+           autoconf
+           automake
+           libtool
+           zip))
     ;; TODO: These optional dependencies raise the closure size to ~1 GiB
     ;; from the current ~100 MiB, although some of them might be very
     ;; useful for end users:
@@ -79,11 +79,7 @@
     ;;  - sqlite
     ;;  - zlib
     (inputs
-     `(("gmp" ,gmp)
-       ("libffi" ,libffi)
-       ("libltdl" ,libltdl)
-       ("libsigsegv" ,libsigsegv)
-       ("lightning" ,lightning)))
+     (list gmp libffi libltdl libsigsegv lightning))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -146,15 +142,15 @@ such as ones for networking and GUI programming.")
               "(VM_BUILD_STRING \\\"Built with GNU Guix\\\")"))
            #t))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("dbus" ,dbus)
-       ("freetype" ,freetype)
-       ("libffi" ,libffi)
-       ("libxrender" ,libxrender)
-       ("mesa" ,mesa)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib
+           dbus
+           freetype
+           libffi
+           libxrender
+           mesa
+           pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no check target
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index c7e8da35e2..1d1ccf6d8c 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -47,11 +47,7 @@
                 "1y3i919kzylvhwfsi6adnc0ah0xahl6ncna0g5bcjyhxsq2416rn"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gmp" ,gmp)
-       ("lesstif" ,lesstif)
-       ("libffi" ,libffi)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)))
+     (list gmp lesstif libffi libx11 libxt))
     (arguments
      '(#:configure-flags
        (list "--with-system-libffi=yes"
diff --git a/gnu/packages/solidity.scm b/gnu/packages/solidity.scm
new file mode 100644
index 0000000000..a5b5002ce8
--- /dev/null
+++ b/gnu/packages/solidity.scm
@@ -0,0 +1,90 @@
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages solidity)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public solidity
+  (let ((commit "3f05b770bdbf60eca866382049ea191dd701409a"))
+    (package
+      (name "solidity")
+      (version "0.7.4")
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/ethereum/solidity")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1mswhjymiwnd3n7h3sjvjx5x8223yih0yvfcr0zpqr4aizpfx5z8"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'create-commit_hash.txt
+             (lambda _
+               (with-output-to-file "commit_hash.txt"
+                 (lambda _
+                   (display
+                    (substring ,commit 0 8))))))
+           (delete 'configure)
+           (delete 'install)
+           (replace 'build
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Unbundle jsoncpp
+               (delete-file "./cmake/jsoncpp.cmake")
+               (substitute* "CMakeLists.txt"
+                 (("include\\(jsoncpp\\)") ""))
+               ;; Bug list is always sorted since we only build releases
+               (substitute* "./test/cmdlineTests.sh"
+                 (("\"\\$REPO_ROOT\"/scripts/update_bugs_by_version\\.py") ""))
+               (substitute* "./scripts/build.sh"
+                 (("sudo\\ make\\ install") "make install")
+                 (("cmake\\ ..")
+                  (string-append "cmake .. -DCMAKE_INSTALL_PREFIX="
+                                 (assoc-ref outputs "out"))))
+               (setenv "CIRCLECI" "1")
+               (invoke "./scripts/build.sh")
+               #t))
+           (replace 'check
+             (lambda _
+               (invoke "./scripts/tests.sh")
+               #t)))))
+      (inputs
+       (list boost-static jsoncpp z3))
+      (native-inputs
+       `(("python" ,python)
+         ("tput" ,ncurses)
+         ("xargs" ,findutils)))
+      (home-page "https://solidity.readthedocs.io")
+      (synopsis "Contract-Oriented Programming Language")
+      (description
+       "Solidity is a statically-typed curly-braces programming language
+designed for developing smart contracts that run on the Ethereum Virtual
+Machine.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm
index cbc46b32b4..9e687fb632 100644
--- a/gnu/packages/speech.scm
+++ b/gnu/packages/speech.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
@@ -110,7 +110,7 @@
                          (find-files out "\\.a$"))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
      `(("alsa" ,alsa-lib)))
     (synopsis "Speech synthesis system")
@@ -165,9 +165,8 @@ building tools.")
                (("/bin/ln") "ln"))
              #t)))))
        (inputs
-        `(("portaudio" ,portaudio)
-          ("pulseaudio" ,pulseaudio)))
-       (native-inputs `(("unzip" ,unzip)))
+        (list portaudio pulseaudio))
+       (native-inputs (list unzip))
        (home-page "http://espeak.sourceforge.net/")
        (synopsis "Software speech synthesizer")
        (description "eSpeak is a software speech synthesizer for English and
@@ -200,13 +199,9 @@ based on human speech recordings.")
        ;; XXX: Some tests require an audio device.
        #:tests? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("which" ,which)))
+     (list autoconf automake libtool which))
     (inputs
-     `(("libcap" ,libcap)
-       ("pcaudiolib" ,pcaudiolib)))
+     (list libcap pcaudiolib))
     (synopsis "Software speech synthesizer")
     (description
      "eSpeak NG is a software speech synthesizer for more than 100 languages.
@@ -228,7 +223,7 @@ synthesis, and the ability to use MBROLA voices.")
                 "09fv4fcpmw9g1j0zml0k5kk1lgjw2spr8gn51llbkaaph6v8d62a"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "The MIT Language Modeling toolkit")
     (description "The MIT Language Modeling (MITLM) toolkit is a set of
 tools designed for the efficient estimation of statistical n-gram language
@@ -366,6 +361,11 @@ be used by the sighted.")
                               "config/make_system.mak")
                  (("/bin/sh") (which "sh"))))
              #t))
+         (add-after 'unpack-and-patch-speech-tools 'set-fcommon
+           (lambda _
+             (substitute* "../speech_tools/config/rules/defaults.mak"
+               (("\\(CFLAGS\\)") "(CFLAGS) -fcommon")
+               (("\\(CXXFLAGS\\)") "(CXXFLAGS) -fcommon"))))
          (add-after 'unpack 'patch-/bin/sh
            (lambda _
              (substitute* '("config/test_make_rules"
@@ -505,7 +505,7 @@ be used by the sighted.")
          (add-before 'configure 'bootstrap
            (lambda _ (invoke "autoreconf" "-vif"))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -572,12 +572,9 @@ control.")
        (sha256
         (base32 "1v476kpw09ljj8mavasj4hya2w11jwlx7q22rh1lsn9jkkam5i2a"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("espeak-ng" ,espeak-ng)
-       ("libsndfile" ,libsndfile)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib espeak-ng libsndfile pulseaudio))
     (build-system gnu-build-system)
     (native-search-paths
      (list (search-path-specification
@@ -610,13 +607,13 @@ It can also speak English through eSpeak or Festival.")
     (arguments
      `(#:parallel-tests? #f))           ;tests fail otherwise
     (native-inputs
-     `(("bison" ,bison)
-       ("doxygen" ,doxygen)
-       ("perl" ,perl)                   ;for tests
-       ("python" ,python)
-       ("swig" ,swig)))
+     (list bison
+           doxygen
+           perl ;for tests
+           python
+           swig))
     (inputs
-     `(("pulseaudio" ,pulseaudio)))
+     (list pulseaudio))
     (home-page "https://cmusphinx.github.io/")
     (synopsis "Support library required by Pocketsphinx and Sphinxtrain")
     (description "This package contains the basic libraries shared by
@@ -639,15 +636,10 @@ manipulating acoustic feature and audio files.")
         (base32 "1n9yazzdgvpqgnfzsbl96ch9cirayh74jmpjf7svs4i7grabanzg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ;for tests
-       ("python" ,python)
-       ("swig" ,swig)))
+     (list pkg-config perl ;for tests
+           python swig))
     (inputs
-     `(("gstreamer" ,gstreamer)
-       ("libcap" ,libcap)
-       ("pulseaudio" ,pulseaudio)
-       ("sphinxbase" ,sphinxbase)))
+     (list gstreamer libcap pulseaudio sphinxbase))
     (home-page "https://cmusphinx.github.io/")
     (synopsis "Recognizer library written in C")
     (description "PocketSphinx is one of Carnegie Mellon University's
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 9aafcb9213..3ac5b5e22c 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,6 +46,7 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
@@ -56,51 +58,50 @@
 (define-public python-sphinx
   (package
     (name "python-sphinx")
-    (version "3.3.1")
+    (version "4.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Sphinx" version))
        (sha256
         (base32
-         "0023vc2i29pjxmvdqbz1wdbi7gbj56y1br1b2z8h8wa44li5k38y"))))
+         "19jq21py7m061v8142y2dbqrbv0adqcdjmharrdy34a432wqs1wl"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             ;; Requires Internet access.
-             (delete-file "tests/test_build_linkcheck.py")
-             (substitute* "tests/test_build_latex.py"
-               (("@pytest.mark.sphinx\\('latex', testroot='images'\\)")
-                "@pytest.mark.skip()"))
-             (invoke "make" "test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Requires Internet access.
+               (delete-file "tests/test_build_linkcheck.py")
+               (substitute* "tests/test_build_latex.py"
+                 (("@pytest.mark.sphinx\\('latex', testroot='images'\\)")
+                  "@pytest.mark.skip()"))
+               (invoke "make" "test")))))))
     (propagated-inputs
-     `(("python-babel" ,python-babel)
-       ("python-docutils" ,python-docutils)
-       ("python-jinja2" ,python-jinja2)
-       ("python-imagesize" ,python-imagesize)
-       ("python-packaging" ,python-packaging)
-       ("python-pygments" ,python-pygments)
-       ("python-requests" ,python-requests)
-       ("python-snowballstemmer" ,python-snowballstemmer)
-       ("python-sphinx-alabaster-theme"
-        ,python-sphinx-alabaster-theme)
-       ("python-sphinxcontrib-applehelp" ,python-sphinxcontrib-applehelp)
-       ("python-sphinxcontrib-devhelp" ,python-sphinxcontrib-devhelp)
-       ("python-sphinxcontrib-htmlhelp" ,python-sphinxcontrib-htmlhelp)
-       ("python-sphinxcontrib-jsmath" ,python-sphinxcontrib-jsmath)
-       ("python-sphinxcontrib-qthelp" ,python-sphinxcontrib-qthelp)
-       ("python-sphinxcontrib-serializinghtml"
-        ,python-sphinxcontrib-serializinghtml)))
+     (list python-babel
+           python-docutils
+           python-jinja2
+           python-imagesize
+           python-packaging
+           python-pygments
+           python-requests
+           python-snowballstemmer
+           python-sphinx-alabaster-theme
+           python-sphinxcontrib-applehelp
+           python-sphinxcontrib-devhelp
+           python-sphinxcontrib-htmlhelp
+           python-sphinxcontrib-jsmath
+           python-sphinxcontrib-qthelp
+           python-sphinxcontrib-serializinghtml))
     (native-inputs
-     `(("graphviz" ,graphviz)
-       ("imagemagick" ,imagemagick)                    ;for "convert"
-       ("python-html5lib" ,python-html5lib)
-       ("python-mock" ,python-mock)
-       ("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     (list graphviz
+           imagemagick ;for "convert"
+           python-html5lib
+           python-mock
+           python-nose
+           python-pytest))
     (home-page "https://www.sphinx-doc.org")
     (synopsis "Python documentation generator")
     (description "Sphinx is a tool that makes it easy to create documentation
@@ -132,27 +133,28 @@ sources.")
                            ;; <https://github.com/sphinx-doc/sphinx/issues/4710>.
                            '("tests/test_api_translator.py"
                              "tests/test_setup_command.py"
+                             ;; Websupport is provided by a separate package
+                             "tests/test_websupport.py"
                              ;; This one fails for unknown reasons.
                              "tests/test_correct_year.py"))))))))
-      (native-inputs `(("python2-mock" ,python2-mock)
-                       ("python2-enum34" ,python2-enum34)
-                       ,@(package-native-inputs base)))
+      (native-inputs (modify-inputs (package-native-inputs base)
+                       (prepend python2-mock python2-enum34)))
       ;; Sphinx 2 has some dependencies that do not support Python 2, so
       ;; we keep our own propagated-inputs here instead of inheriting.
       (propagated-inputs
-       `(("python2-pytz" ,python2-pytz)
-         ("python2-typing" ,python2-typing)
-         ("python2-imagesize" ,python2-imagesize)
-         ("python2-sphinx-alabaster-theme" ,python2-sphinx-alabaster-theme)
-         ("python2-babel" ,python2-babel)
-         ("python2-snowballstemmer" ,python2-snowballstemmer)
-         ("python2-docutils" ,python2-docutils-0.14)
-         ("python2-jinja2" ,python2-jinja2)
-         ("python2-packaging" ,python2-packaging)
-         ("python2-pygments" ,python2-pygments)
-         ("python2-requests" ,python2-requests)
-         ("python2-six" ,python2-six)
-         ("python2-sphinxcontrib-websupport" ,python2-sphinxcontrib-websupport))))))
+       (list python2-pytz
+             python2-typing
+             python2-imagesize
+             python2-sphinx-alabaster-theme
+             python2-babel
+             python2-snowballstemmer
+             python2-docutils-0.14
+             python2-jinja2
+             python2-packaging
+             python2-pygments
+             python2-requests
+             python2-six
+             python2-sphinxcontrib-websupport)))))
 
 (define-public python-sphinxcontrib-applehelp
   (package
@@ -189,10 +191,7 @@ Apple help books.")
     (arguments
      `(#:tests? #f)) ; XXX: Check requires network access.
     (propagated-inputs
-     `(("python-flit" ,python-flit)
-       ("python-setuptools" ,python-setuptools)
-       ("python-sphinx" ,python-sphinx)
-       ("python-wheel" ,python-wheel)))
+     (list python-flit python-setuptools python-sphinx python-wheel))
     (home-page "https://github.com/choldgraf/sphinx-copybutton")
     (synopsis "Sphinx extension to add \"copy\" buttons to code blocks")
     (description
@@ -233,8 +232,7 @@ to code blocks.")
          "1x9af78vamjjcdrrhiah3wg613jv7gm8yh9vvqfrmf4vam6mimyg"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-sphinx))
     (home-page "https://github.com/jupyter/sphinxcontrib_github_alt")
     (synopsis "Link to GitHub pages from Sphinx docs")
     (description
@@ -245,13 +243,13 @@ users from Sphinx docs.")
 (define-public python-sphinxcontrib-htmlhelp
   (package
     (name "python-sphinxcontrib-htmlhelp")
-    (version "1.0.3")
+    (version "2.0.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "sphinxcontrib-htmlhelp" version))
               (sha256
                (base32
-                "16v5jdnibwrqjdr5aqchgyzpwy3rgamwhdf4kidv5nxj65zbpxg8"))))
+                "1ckd5xx4ngd6f4prxbc1bbvnafy1gg06j3bxyj5kk7v21lnvpy7m"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                    ;XXX: circular dependency on Sphinx
@@ -295,7 +293,7 @@ math in HTML via JavaScript.")
     (arguments '(#:tests? #f)) ; No tests.
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (synopsis "News Feed extension for Sphinx")
     (description "Sphinxcontrib-newsfeed is an extension for adding a simple
 Blog, News or Announcements section to a Sphinx website.")
@@ -317,7 +315,7 @@ Blog, News or Announcements section to a Sphinx website.")
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (synopsis "Sphinx extension to include program output")
     (description "A Sphinx extension to literally insert the output of arbitrary
 commands into documents, helping you to keep your command examples up to date.")
@@ -350,13 +348,13 @@ documents.")
 (define-public python-sphinxcontrib-serializinghtml
   (package
     (name "python-sphinxcontrib-serializinghtml")
-    (version "1.1.4")
+    (version "1.1.5")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "sphinxcontrib-serializinghtml" version))
               (sha256
                (base32
-                "1g3pbx0g88zd9xzcrbaypa2k60axrh92vf5j76wsk0p9hv6fr87a"))))
+                "0lk91cl9bi4ynhz971zjs0bsr7jwxx8mx2f40psrx06zvzjnspxa"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                    ;XXX: circular dependency on Sphinx
@@ -379,7 +377,7 @@ documents.")
                 "1hhaxmqc7wh8gnyw5jaqckliknvk0p21y12wk3bdmncgkaf9ar8f"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter")
     (synopsis "Sphinx SVG to PDF converter extension")
     (description "A Sphinx extension to convert SVG images to PDF in case the
@@ -405,10 +403,29 @@ builder does not support SVG images natively (e.g. LaTeX).")
     (description "This package provides a Python API to easily integrate
 Sphinx documentation into your web application.  It provides tools to
 integrate Sphinx documents in web templates and to handle searches.")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-sphinxcontrib-websupport))))))
 
+;; 1.1.2 is the last version to support Python 2.
 (define-public python2-sphinxcontrib-websupport
-  (package-with-python2 python-sphinxcontrib-websupport))
+  (package
+    (inherit (package-with-python2
+              (strip-python2-variant python-sphinxcontrib-websupport)))
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sphinxcontrib-websupport" version))
+              (sha256
+               (base32
+                "1z7fqra0xm1cdp8vvp80fcvnjlywym7bzz80m0liq7fz1zxvw08m"))))
+    (arguments
+     `(#:tests? #f
+       #:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'sanity-check))))
+    (propagated-inputs
+     (list python2-six))))
 
 (define-public python-sphinx-gallery
   (package
@@ -439,13 +456,13 @@ integrate Sphinx documents in web templates and to handle searches.")
                         ;; AssertionError.
                         " and not test_embed_links_and_styles"))))))))
     (native-inputs
-     `(("python-joblib" ,python-joblib)
-       ("python-matplotlib" ,python-matplotlib)
-       ("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-joblib
+           python-matplotlib
+           python-numpy
+           python-pillow
+           python-pytest
+           python-pytest-cov
+           python-sphinx))
     (home-page "https://sphinx-gallery.github.io/stable/index.html")
     (synopsis "Generate an examples gallery automatically")
     (description
@@ -490,8 +507,7 @@ use in your Sphinx docs.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; No tests.
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-zope-interface" ,python-zope-interface)))
+     (list python-sphinx python-zope-interface))
     (synopsis "Auto-generate Sphinx API docs from Zope interfaces")
     (description "This package defines an extension for the Sphinx documentation
 system.  The extension allows generation of API documentation by
@@ -525,8 +541,7 @@ introspection of @code{zope.interface} instances in code.")
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-pytest python-sphinx))
     (home-page "https://github.com/sbrunner/sphinx-prompt")
     (synopsis "Sphinx directive to add unselectable prompt")
     (description
@@ -545,7 +560,7 @@ introspection of @code{zope.interface} instances in code.")
                 "00nwwjj2d2ym4s2kk217x7jkx1hnczc3fvm8yxbqmsp6b0nxfqd6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pygments" ,python-pygments)))
+     (list python-pygments))
     (home-page "https://alabaster.readthedocs.io/")
     (synopsis "Configurable sidebar-enabled Sphinx theme")
     (description "Alabaster is a visually (c)lean, responsive, configurable
@@ -567,11 +582,9 @@ theme for the Sphinx documentation system.  It's the default theme of Sphinx.")
         (base32 "05wc8f5hb3jsg2vh2jf7jsyan8d4i09ifrz2c8fp6f7x1zw9iav0"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (native-inputs
-     `(("python-commonmark" ,python-commonmark)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-commonmark python-pytest python-sphinx-rtd-theme))
     (home-page "https://github.com/ribozz/sphinx-argparse")
     (synopsis "Sphinx extension for documenting argparse commands and options")
     (description
@@ -593,7 +606,7 @@ argparse commands and options")
     ;; FIXME: The 'pypi' release archive does not contain tests.
     (arguments '(#:tests? #f))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://bitbucket.org/ecollins/cloud_sptheme")
     (synopsis "'Cloud' theme for Sphinx documenter")
     (description "This package contains the \"Cloud\" theme for Sphinx and some
@@ -616,7 +629,7 @@ related extensions.")
           "1rnkzrrsbnifn3vsb4pfaia3nlvgvw6ndpxp7lzjrh23qcwid34v"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/guzzle/guzzle_sphinx_theme")
     (synopsis "Sphinx theme used by Guzzle")
     (description "This package provides guzzle_sphinx_theme, a theme for the
@@ -641,7 +654,7 @@ and several other projects.")
     (build-system python-build-system)
     (arguments '(#:tests? #f)) ; No tests.
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/snide/sphinx_rtd_theme/")
     (synopsis "ReadTheDocs.org theme for Sphinx")
     (description "A theme for Sphinx used by ReadTheDocs.org.")
@@ -663,8 +676,7 @@ and several other projects.")
          "055h95fkdld7s49878fqjx1nri1drj1czc184vrb7i60mf2yqg9n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-docutils python-sphinx))
     (home-page "https://github.com/michaeljones/breathe")
     (synopsis "ReStructuredText and Sphinx bridge to Doxygen")
     (description "This package is an extension to reStructuredText and Sphinx
@@ -683,8 +695,7 @@ to be able to read and render the Doxygen xml output.")
         (base32 "1d1q0sanjp4nkfvhsxi75zf3xjyyi8nzxvl3v7l0jy9ld70nwnmj"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sphinx" ,python-sphinx)
-       ("python-click" ,python-click)))
+     (list python-sphinx python-click))
     (home-page "https://github.com/sphinx-doc/sphinx-intl")
     (synopsis
      "Sphinx utility that makes it easy to translate and to apply translation")
@@ -716,9 +727,7 @@ translate and to apply translation to Sphinx generated document.")
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "-m" "pytest")))))))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-beautifulsoup4 python-pytest python-sphinx))
     (home-page "https://github.com/wpilibsuite/sphinxext-opengraph")
     (synopsis "Sphinx Extension to enable OpenGraph support")
     (description
@@ -754,15 +763,15 @@ translate and to apply translation to Sphinx generated document.")
                (invoke "pytest" "-v"))
              #t)))))
     (propagated-inputs
-     `(("python-argh" ,python-argh)
-       ("python-livereload" ,python-livereload)
-       ("python-pathtools" ,python-pathtools)
-       ("python-port-for" ,python-port-for)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-tornado" ,python-tornado)
-       ("python-watchdog" ,python-watchdog)))
+     (list python-argh
+           python-livereload
+           python-pathtools
+           python-port-for
+           python-pyyaml
+           python-tornado
+           python-watchdog))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/GaretJax/sphinx-autobuild")
     (synopsis "Rebuild Sphinx documentation when a change is detected")
     (description
@@ -784,14 +793,10 @@ enabled web server.")
          "086v9mg21pvfx0lfqjx2xf36hnzrsripfg345xi59f7xwb9scjr4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-setuptools-scm python-sphinx))
     (native-inputs
-     `(("python-dataclasses" ,python-dataclasses)
-       ("python-pytest" ,python-pytest)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphobjinv" ,python-sphobjinv)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-dataclasses python-pytest python-sphinx
+           python-sphobjinv python-typing-extensions))
     (home-page "https://pypi.org/project/sphinx-autodoc-typehints/")
     (synopsis "Type hints for the Sphinx autodoc extension")
     (description "This extension allows you to use Python 3 annotations for
@@ -811,12 +816,12 @@ documenting acceptable argument types and return value types of functions.")
             "0j56bxdj08vn3q1804qwb1ywhga1mdg1awgm7i64wfpfwi8df2zm"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-docutils" ,python-docutils)
-        ("python-jinja2" ,python-jinja2)
-        ("python-nbconvert" ,python-nbconvert)
-        ("python-nbformat" ,python-nbformat)
-        ("python-sphinx" ,python-sphinx)
-        ("python-traitlets" ,python-traitlets)))
+      (list python-docutils
+            python-jinja2
+            python-nbconvert
+            python-nbformat
+            python-sphinx
+            python-traitlets))
     (home-page "https://nbsphinx.readthedocs.io/")
     (synopsis "Jupyter Notebook Tools for Sphinx")
     (description "@code{python-nbsphinx} is a Sphinx extension that
@@ -840,11 +845,8 @@ executed during the Sphinx build process.")
          "126lgm54c94ay3fci512ap4l607gak90pbz0fk98syxvj5izrrzx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-attrs" ,python-attrs)
-       ("python-certifi" ,python-certifi)
-       ("python-fuzzywuzzy" ,python-fuzzywuzzy)
-       ("python-jsonschema" ,python-jsonschema)
-       ("python-levenshtein" ,python-levenshtein)))
+     (list python-attrs python-certifi python-fuzzywuzzy
+           python-jsonschema python-levenshtein))
     (home-page "https://github.com/bskinn/sphobjinv")
     (synopsis "Sphinx cross-reference tool")
     (description "Sphinx objects.inv inspection/manipulation tool.")
@@ -863,12 +865,10 @@ executed during the Sphinx build process.")
          "1wma60787m2451nn4bc4jw7bzqksplplb84wqxm34iaw70499z1p"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
-       ("python-ipywidgets" ,python-ipywidgets)
-       ("python-nbconvert" ,python-nbconvert)
-       ("python-nbformat" ,python-nbformat)))
+     (list python-ipython python-ipywidgets python-nbconvert
+           python-nbformat))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jupyter/jupyter-sphinx/")
     (synopsis "Jupyter Sphinx Extensions")
     (description
@@ -891,9 +891,9 @@ widgets, and supports thebelab for live code execution with minimal effort.")
          "06hzim0d3fd72kf30fyjbbm5n8ibyybic0kf62gm79qp50zjwr5w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/sphinx-contrib/autoprogram")
     (synopsis "Documenting CLI programs")
     (description
@@ -916,23 +916,22 @@ automated way to document command-line programs.  It scans
          "055bh3hyh72pafiylvgpsjlk18wm15gg4azc5rjlsww5z475iq1j"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)))
+     (list python-beautifulsoup4))
     (native-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-docutils" ,python-docutils)
-       ("python-jupyter-sphinx" ,python-jupyter-sphinx)
-       ("python-numpy" ,python-numpy)
-       ("python-numpydoc" ,python-numpydoc)
-       ("python-pandas" ,python-pandas)
-       ("python-plotly" ,python-plotly)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-regressions"
-        ,python-pytest-regressions)
-       ("python-recommonmark" ,python-recommonmark)
-       ("python-sphinx" ,python-sphinx)
-       ("python-xarray" ,python-xarray)
-       ("python-docutils" ,python-docutils)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-beautifulsoup4
+           python-docutils
+           python-jupyter-sphinx
+           python-numpy
+           python-numpydoc
+           python-pandas
+           python-plotly
+           python-pytest
+           python-pytest-regressions
+           python-recommonmark
+           python-sphinx
+           python-xarray
+           python-docutils
+           python-sphinx))
     (home-page "https://github.com/pydata/pydata-sphinx-theme")
     (synopsis "Bootstrap-based Sphinx theme")
     (description
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 9c88b63108..1eb92d8f96 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -64,12 +64,9 @@
                 "19jnpzlanq0a1m5lmlcsp50wxf7icxvpvclx7hnf0zxw8azngqd3"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libusb" ,libusb)))
+     (list libusb))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (synopsis "Tools for sending USB device traffic over a network")
     (description
      "Usbredir is a network protocol for sending USB device traffic over a
@@ -92,11 +89,9 @@ different (virtual) machine than the one to which the USB device is attached.")
                 "06kf0q4l52gzx5p63l8850hff8pmhp7xv1hk8zgx2apbw18y6jd5"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libepoxy" ,libepoxy)
-        ("mesa" ,mesa)
-        ("udev" ,eudev)))
+      (list libepoxy mesa eudev))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Virtual 3D GPU library")
     (description "A virtual 3D GPU library that enables a virtualized operating
 system to use the host GPU to accelerate 3D rendering.")
@@ -147,15 +142,14 @@ which allows users to view a desktop computing environment.")
                 "1drvj8y35gnxbnrxsipwi15yh0vs9ixzv4wslz6r3lra8w3bfa0z"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("gstreamer" ,gstreamer)
-        ("gst-plugins-base" ,gst-plugins-base)
-        ("gst-plugins-good" ,gst-plugins-good)
-        ("spice-protocol" ,spice-protocol)
-
-        ;; These are required by the pkg-config files.
-        ("gtk+" ,gtk+)
-        ("pixman" ,pixman)
-        ("openssl" ,openssl)))
+      (list gstreamer
+            gst-plugins-base
+            gst-plugins-good
+            spice-protocol
+            ;; These are required by the pkg-config files.
+            gtk+
+            pixman
+            openssl))
     (inputs
       `(("glib-networking" ,glib-networking)
         ("gobject-introspection" ,gobject-introspection)
@@ -227,31 +221,36 @@ which allows users to view a desktop computing environment.")
                 "1xd0xffw0g5vvwbq4ksmm3jjfq45f9dw20xpmi82g1fj9f7wy85k"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("openssl" ,openssl)
-        ("pixman" ,pixman)
-        ("spice-protocol" ,spice-protocol)))
+      (list openssl pixman spice-protocol))
     (inputs
-      `(("cyrus-sasl" ,cyrus-sasl)
-        ("glib" ,glib)
-        ("libjpeg-turbo" ,libjpeg-turbo)
-        ("libcacard" ,libcacard)        ; smartcard support
-        ("lz4" ,lz4)
-        ("opus" ,opus)
-        ("orc" ,orc)
-        ("zlib" ,zlib)))
+      (list cyrus-sasl
+            glib
+            libjpeg-turbo
+            libcacard ; smartcard support
+            lz4
+            opus
+            orc
+            zlib))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("python" ,python)
-        ("spice-gtk" ,spice-gtk)
-
-        ;; These are needed for the server listen tests.
-        ("glib-networking" ,glib-networking)
-        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+      (list pkg-config
+            python
+            spice-gtk
+            ;; These are needed for the server listen tests.
+            glib-networking
+            gsettings-desktop-schemas))
     (arguments
       `(#:configure-flags
         '("--enable-lz4"
           "--enable-automated-tests")
 
+        #:phases
+        (modify-phases %standard-phases
+          ;; XXX: Otherwise the server listen tests fails with
+          ;;   Failed to create /homeless-shelter/.config/glib-2.0/settings
+          (add-before 'check 'set-XDG_CONFIG_HOME
+            (lambda _
+              (setenv "XDG_CONFIG_HOME" "/tmp"))))
+
         ;; Several tests appear to be opening the same sockets concurrently.
         #:parallel-tests? #f))
     (synopsis "Server implementation of the SPICE protocol")
@@ -305,21 +304,20 @@ Internet and from a wide variety of machine architectures.")
                (("ps -ef")
                 "ps -efww")))))))
     (inputs
-      `(("alsa-lib" ,alsa-lib)
-        ("dbus" ,dbus)
-        ("glib" ,glib)
-        ("gtk+" ,gtk+)
-        ("libdrm" ,libdrm)
-        ("libpciaccess" ,libpciaccess)
-        ("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxfixes" ,libxfixes)
-        ("libxinerama" ,libxinerama)
-        ("libxrandr" ,libxrandr)
-        ("spice-protocol" ,spice-protocol)))
+      (list alsa-lib
+            dbus
+            glib
+            gtk+
+            libdrm
+            libpciaccess
+            libx11
+            libxext
+            libxfixes
+            libxinerama
+            libxrandr
+            spice-protocol))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("procps" ,procps)))             ;tests use 'ps'
+     (list pkg-config procps))             ;tests use 'ps'
     (synopsis "Spice agent for Linux")
     (description "Spice-vdagent enables sharing the clipboard and guest display
 resolution scaling on graphical console window resize.")
@@ -340,29 +338,17 @@ resolution scaling on graphical console window resize.")
                (base32
                 "1rrjlclm6ad63gah1fa4yfwrz4z6vgq2yrybbvzvvdbxrgl4vgzv"))))
     (build-system meson-build-system)
-    (arguments
-     '(#:tests? #f                      ; TODO Tests require gnutls built with
-                                        ; p11-kit
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-tests
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "tests/setup-softhsm2.sh"
-               (("\\/usr\\/lib64\\/pkcs11\\/libsofthsm2\\.so")
-                (string-append (assoc-ref inputs "softhsm")
-                               "/lib/softhsm/libsofthsm2.so"))))))))
     (propagated-inputs
-     `(("glib" ,glib)                   ; Requires: in the pkg-config file
-       ("nss" ,nss)                     ; Requires.private: in the pkg-config
-       ("pcsc-lite" ,pcsc-lite)))       ; file
+     (list glib ; Requires: in the pkg-config file
+           nss ; Requires.private: in the pkg-config
+           pcsc-lite))       ; file
     (native-inputs
-     `(("openssl" ,openssl)
-       ("nss" ,nss "bin")
-       ("opensc" ,opensc)
-       ("softhsm" ,softhsm)
-       ("gnutls" ,gnutls)
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list openssl
+           `(,nss "bin")
+           opensc
+           gnutls
+           pkg-config
+           which))
     (synopsis "Emulate and share smart cards with virtual machines")
     (description
      "The @acronym{CAC,Common Access Card} library can be used to emulate and
@@ -384,11 +370,7 @@ share smart cards from client system to local or remote virtual machines.")
                 "00y9vi69sja4pkrfnvrkwsscm41bqrjzvp8aijb20pvg6ymczhj7"))))
     (build-system gnu-build-system)
     (inputs
-      `(("gtk+" ,gtk+)
-        ("gtk-vnc" ,gtk-vnc)
-        ("libcap" ,libcap)
-        ("libxml2" ,libxml2)
-        ("spice-gtk" ,spice-gtk)))
+      (list gtk+ gtk-vnc libcap libxml2 spice-gtk))
     (native-inputs
       `(("glib:bin" ,glib "bin")
         ("intltool" ,intltool)
diff --git a/gnu/packages/spreadsheet.scm b/gnu/packages/spreadsheet.scm
index 99ff1bbff0..b81c67d63f 100644
--- a/gnu/packages/spreadsheet.scm
+++ b/gnu/packages/spreadsheet.scm
@@ -68,16 +68,14 @@
                %standard-phases
                  (delete 'configure))))
       (inputs
-        `(("gnuplot" ,gnuplot)
-          ("libxls" ,libxls)
-          ("libxlsxwriter" ,libxlsxwriter)
-          ("libxml2" ,libxml2)
-          ("libzip" ,libzip)
-          ("ncurses" ,ncurses)))
+        (list gnuplot
+              libxls
+              libxlsxwriter
+              libxml2
+              libzip
+              ncurses))
       (native-inputs
-        `(("pkg-config" ,pkg-config)
-          ("which" ,which)
-          ("bison" ,bison)))
+        (list pkg-config which bison))
       (synopsis "Spreadsheet program with vim-like keybindings")
       (description
  "@code{sc-im} is a highly configurable spreadsheet program
diff --git a/gnu/packages/sqlite.scm b/gnu/packages/sqlite.scm
index 007b8f94f1..f03567608d 100644
--- a/gnu/packages/sqlite.scm
+++ b/gnu/packages/sqlite.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
 ;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -45,34 +45,32 @@
 ;;; This module has been separated from (gnu packages databases) to reduce the
 ;;; number of module references for core packages.
 
+(define (sqlite-uri version year)
+  (let ((numeric-version
+         (match (string-split version #\.)
+           ((first-digit other-digits ...)
+            (string-append first-digit
+                           (string-pad-right
+                            (string-concatenate
+                             (map (cut string-pad <> 2 #\0)
+                                  other-digits))
+                            6 #\0))))))
+    (string-append "https://sqlite.org/" (number->string year)
+                   "/sqlite-autoconf-" numeric-version ".tar.gz")))
+
 (define-public sqlite
   (package
    (name "sqlite")
-   (version "3.31.1")
+   (version "3.36.0")
    (source (origin
             (method url-fetch)
-            (uri (let ((numeric-version
-                        (match (string-split version #\.)
-                          ((first-digit other-digits ...)
-                           (string-append first-digit
-                                          (string-pad-right
-                                           (string-concatenate
-                                            (map (cut string-pad <> 2 #\0)
-                                                 other-digits))
-                                           6 #\0))))))
-                   (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                  numeric-version ".tar.gz")))
+            (uri (sqlite-uri version 2021))
+            (patches (search-patches "sqlite-hurd.patch"))
             (sha256
              (base32
-              "1bj936svd8i5g25xd1bj52hj4zca01fgl3sqkj86z9q5pkz4wa32"))))
-   (replacement sqlite/fixed)
+              "1qxwkfvd185dfcqbakrzikrsw6ffr5jp1gl3dch9dsdyjvmw745x"))))
    (build-system gnu-build-system)
-   (inputs `(("readline" ,readline)))
-   (native-inputs (if (hurd-target?)
-                      ;; TODO move into origin on the next rebuild cycle.
-                      `(("hurd-locking-mode.patch"
-                         ,@(search-patches "sqlite-hurd.patch")))
-                      '()))
+   (inputs (list readline))
    (outputs '("out" "static"))
    (arguments
     `(#:configure-flags
@@ -80,25 +78,13 @@
       ;; -DSQLITE_ENABLE_UNLOCK_NOTIFY and -DSQLITE_ENABLE_DBSTAT_VTAB
       ;; to CFLAGS.  GNU Icecat will refuse to use the system SQLite
       ;; unless these options are enabled.
-      (list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE "
+      (list (string-append "CFLAGS=-O2 -g -DSQLITE_SECURE_DELETE "
                            "-DSQLITE_ENABLE_FTS3 "
                            "-DSQLITE_ENABLE_UNLOCK_NOTIFY "
                            "-DSQLITE_ENABLE_DBSTAT_VTAB "
                            ;; Column metadata is required by GNU Jami and Qt, et.al.
                            "-DSQLITE_ENABLE_COLUMN_METADATA"))
       #:phases (modify-phases %standard-phases
-                 ;; TODO: remove in the next rebuild cycle
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'patch-sqlite/hurd
-                           (lambda* (#:key inputs native-inputs
-                                     #:allow-other-keys)
-                             (let ((patch (assoc-ref
-                                           (if ,(%current-target-system)
-                                               native-inputs
-                                               inputs)
-                                           "hurd-locking-mode.patch")))
-                               (invoke "patch" "-p1" "--force" "-i" patch)))))
-                       '())
                  (add-after 'install 'move-static-library
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let* ((out    (assoc-ref outputs "out"))
@@ -123,23 +109,13 @@ widely deployed SQL database engine in the world.  The source code for SQLite
 is in the public domain.")
    (license license:public-domain)))
 
-(define-public sqlite/fixed
+(define-public sqlite-3.33
   (package
     (inherit sqlite)
-    (version "3.32.3")
+    (version "3.33.0")
     (source (origin
               (method url-fetch)
-              (uri (let ((numeric-version
-                          (match (string-split version #\.)
-                            ((first-digit other-digits ...)
-                             (string-append first-digit
-                                            (string-pad-right
-                                             (string-concatenate
-                                              (map (cut string-pad <> 2 #\0)
-                                                   other-digits))
-                                             6 #\0))))))
-                     (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                    numeric-version ".tar.gz")))
+              (uri (sqlite-uri version 2020))
               (sha256
                (base32
                 "0rlbaq177gcgk5dswd3akbhv2nvvzljrbhgy18hklbhw7h90f5d3"))))))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index e8c7a92199..ae64e99948 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -91,7 +91,7 @@
                (base32
                 "1rpysj65j9ls30bf2c5k5hykzzjfknrihs58imp178bx1wqzw4jl"))))
     (inputs
-     `(("readline" ,readline)))
+     (list readline))
     (arguments
      `(#:make-flags
        (list ,(string-append "CC=" (cc-for-target))
@@ -144,9 +144,7 @@ file names.
 
        ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite.
        #:tests? #f))
-    (inputs `(("zlib" ,zlib)
-              ("libgcrypt" ,libgcrypt)
-              ("mit-krb5" ,mit-krb5)))
+    (inputs (list zlib libgcrypt mit-krb5))
     (synopsis "SSH client library")
     (description
      "libssh is a C library implementing the SSHv2 and SSHv1 protocol for client
@@ -172,8 +170,7 @@ applications.")
    (build-system gnu-build-system)
    ;; The installed libssh2.pc file does not include paths to libgcrypt and
    ;; zlib libraries, so we need to propagate the inputs.
-   (propagated-inputs `(("libgcrypt" ,libgcrypt)
-                        ("zlib" ,zlib)))
+   (propagated-inputs (list libgcrypt zlib))
    (arguments `(#:configure-flags `("--with-libgcrypt")))
    (synopsis "Client-side C library implementing the SSH2 protocol")
    (description
@@ -197,8 +194,7 @@ a server that supports the SSH-2 protocol.")
               (base32
                "1s8z6f7mi1pwsl79cqai8cr350m5lf2ifcxff57wx6mvm478k425"))))
    (build-system gnu-build-system)
-   (native-inputs `(("groff" ,groff)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list groff pkg-config))
    (inputs `(("libedit" ,libedit)
              ("openssl" ,openssl)
              ,@(if (hurd-target?)
@@ -319,11 +315,12 @@ Additionally, various channel-specific options can be negotiated.")
               (uri (git-reference
                     (url home-page)
                     (commit (string-append "v" version))))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1xpxkvgj7wgcl450djkcrmrf957mcy2f36hfs5g6kpla1gax2d1g"))
-              (modules '((guix build utils)))))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"
+                                       "guile-ssh-read-error.patch"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -368,16 +365,14 @@ Additionally, various channel-specific options can be negotiated.")
                                      (string-append examples "/sssh.scm"))
                         (delete-file-recursively bin)
                         #t))))))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("libtool" ,libtool)
-                     ("texinfo" ,texinfo)
-                     ("pkg-config" ,pkg-config)
-                     ("which" ,which)
-                     ("guile" ,guile-3.0))) ;needed when cross-compiling.
-    (inputs `(("guile" ,guile-3.0)
-              ("libssh" ,libssh)
-              ("libgcrypt" ,libgcrypt)))
+    (native-inputs (list autoconf
+                         automake
+                         libtool
+                         texinfo
+                         pkg-config
+                         which
+                         guile-3.0)) ;needed when cross-compiling.
+    (inputs (list guile-3.0 libssh libgcrypt))
     (synopsis "Guile bindings to libssh")
     (description
      "Guile-SSH is a library that provides access to the SSH protocol for
@@ -389,21 +384,31 @@ libssh library.")
   (package
     (inherit guile-ssh)
     (name "guile2.0-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
-     `(("guile" ,guile-2.0) ;needed when cross-compiling.
-       ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
-    (inputs `(("guile" ,guile-2.0)
-              ,@(alist-delete "guile" (package-inputs guile-ssh))))))
+     (modify-inputs (package-native-inputs guile-ssh)
+       (delete "guile")
+       (prepend guile-2.0 ;needed when cross-compiling.
+                )))
+    (inputs (modify-inputs (package-inputs guile-ssh)
+              (replace "guile" guile-2.0)))))
 
 (define-public guile2.2-ssh
   (package
     (inherit guile-ssh)
     (name "guile2.2-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
-     `(("guile" ,guile-2.2) ;needed when cross-compiling.
-       ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
-    (inputs `(("guile" ,guile-2.2)
-              ,@(alist-delete "guile" (package-inputs guile-ssh))))))
+     (modify-inputs (package-native-inputs guile-ssh)
+       (delete "guile")
+       (prepend guile-2.2 ;needed when cross-compiling.
+                )))
+    (inputs (modify-inputs (package-inputs guile-ssh)
+              (replace "guile" guile-2.2)))))
 
 (define-public corkscrew
   ;; The last 2.0 release hails from 2009.  Use a fork (submitted upstream as
@@ -445,11 +450,9 @@ libssh library.")
                  (install-file "README.md" doc)
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake pkg-config))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (home-page "https://github.com/patpadgett/corkscrew")
       (synopsis "SSH tunneling through HTTP(S) proxies")
       (description
@@ -487,7 +490,7 @@ with optional @acronym{TLS, Transport-Level Security} to protect credentials.")
                (wrap-program (string-append bin "/mosh")
                              `("PATH" ":" prefix (,bin)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
@@ -530,9 +533,7 @@ responsive, especially over Wi-Fi, cellular, and long-distance links.")
      `(#:configure-flags '("--disable-bundled-libtom")
        #:tests? #f))    ; there is no "make check" or anything similar
     (inputs
-     `(("libtomcrypt" ,libtomcrypt)
-       ("libtommath" ,libtommath)
-       ("zlib" ,zlib)))
+     (list libtomcrypt libtommath zlib))
     (synopsis "Small SSH server and client")
     (description "Dropbear is a relatively small SSH server and
 client.  It runs on a variety of POSIX-based platforms.  Dropbear is
@@ -596,28 +597,25 @@ basis for almost any application.")
               (patches (search-patches "lsh-fix-x11-forwarding.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("m4" ,m4)
-       ("guile" ,guile-2.0)
-       ("gperf" ,gperf)
-       ("psmisc" ,psmisc)))                       ; for `killall'
+     (list autoconf
+           automake
+           m4
+           guile-2.0
+           gperf
+           psmisc))                       ; for `killall'
     (inputs
-     `(("nettle" ,nettle-2)
-       ("linux-pam" ,linux-pam)
-
-       ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in
-       ;; Readline 6.3.
-       ("readline" ,readline-6.2)
-
-       ("liboop" ,liboop)
-       ("zlib" ,zlib)
-       ("gmp" ,gmp)
-
-       ;; The server (lshd) invokes xauth when X11 forwarding is requested.
-       ;; This adds 24 MiB (or 27%) to the closure of lsh.
-       ("xauth" ,xauth)
-       ("libxau" ,libxau)))             ;also required for x11-forwarding
+     (list nettle-2
+           linux-pam
+           ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in
+           ;; Readline 6.3.
+           readline-6.2
+           liboop
+           zlib
+           gmp
+           ;; The server (lshd) invokes xauth when X11 forwarding is requested.
+           ;; This adds 24 MiB (or 27%) to the closure of lsh.
+           xauth
+           libxau))             ;also required for x11-forwarding
     (arguments
      '(;; Skip the `configure' test that checks whether /dev/ptmx &
        ;; co. work as expected, because it relies on impurities (for
@@ -722,7 +720,7 @@ authentication}.")
         (base32 "0xqjw8df68f4kzkns5gcah61s5wk0m44qdk2z1d6388w6viwxhsz"))))
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; There is no "make check" or anything similar
-    (inputs `(("openssh" ,openssh)))
+    (inputs (list openssh))
     (synopsis "Automatically restart SSH sessions and tunnels")
     (description "autossh is a program to start a copy of @command{ssh} and
 monitor it, restarting it as necessary should it die or stop passing traffic.")
@@ -777,11 +775,9 @@ monitor it, restarting it as necessary should it die or stop passing traffic.")
                (("which") (which "which")))
              #t)))))
     (inputs
-     `(("openssh" ,openssh)
-       ("mit-krb5" ,mit-krb5)
-       ("perl" ,perl)))
+     (list openssh mit-krb5 perl))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://github.com/chaos/pdsh")
     (synopsis "Parallel distributed shell")
     (description "Pdsh is a an efficient, multithreaded remote shell client
@@ -803,13 +799,10 @@ shell services and remote host selection.")
          "0lnhh2h1mj79j66ni883s9f3xldnbjb10vh80g24b7m003mm524c"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-gssapi" ,python-gssapi)
-       ("python-bcrypt" ,python-bcrypt)))
+     (list python-cryptography python-pyopenssl python-gssapi
+           python-bcrypt))
     (native-inputs
-     `(("openssh" ,openssh)
-       ("openssl" ,openssl)))
+     (list openssh openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -843,8 +836,8 @@ framework.")
        (sha256
         (base32 "11b87vyamcw4rvgxz74jxwkr9ly0h9ldp2wqsi5wc19p0r06la5j"))))
     (build-system python-build-system)
-    (inputs `(("openssh" ,openssh)))
-    (propagated-inputs `(("python-pyyaml" ,python-pyyaml)))
+    (inputs (list openssh))
+    (propagated-inputs (list python-pyyaml))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'build 'record-openssh-file-name
@@ -916,8 +909,7 @@ clients at a time.")
                 "1bcy9flrzbvams5p77swwiygv54ac58ia7hpic1bvg30b3wpvv7b"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-paramiko" ,python-paramiko)
-       ("python-tornado" ,python-tornado)))
+     (list python-paramiko python-tornado))
     (home-page "https://webssh.huashengdun.org/")
     (synopsis "Web application to be used as an SSH client")
     (description "This package provides a web application to be used as an SSH
diff --git a/gnu/packages/sssd.scm b/gnu/packages/sssd.scm
index 9191440970..7f7c71972a 100644
--- a/gnu/packages/sssd.scm
+++ b/gnu/packages/sssd.scm
@@ -92,19 +92,16 @@
                         (("\\$\\(XMLTO\\)" xmlto)
                          (string-append xmlto " --searchpath " xsldir "/html"))))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libtool" ,libtool)
-       ("libxslt" ,libxslt)
-       ("util-linux" ,util-linux) ; For `rev` command used in tests.
-       ("xmlto" ,xmlto)))
+     (list autoconf
+           automake
+           docbook-xml
+           docbook-xsl
+           libtool
+           libxslt
+           util-linux ; For `rev` command used in tests.
+           xmlto))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("mit-krb5" ,mit-krb5)
-       ("samba" ,samba)
-       ("openldap" ,openldap)))
+     (list cyrus-sasl mit-krb5 samba openldap))
     (home-page "https://gitlab.freedesktop.org/realmd/adcli/")
     (synopsis "Helper library and tools for Active Directory client operations")
     (description "@command{adcli} is a command‐line tool to join a computer to
@@ -199,40 +196,40 @@ fundamental object types for C.")
                (("tcase_add_test\\(tc_utils, resp_str_to_array_test\\);") ""))
              #t)))))
     (inputs
-     `(("augeas" ,augeas)
-       ("bind" ,isc-bind "utils")
-       ("c-ares" ,c-ares)
-       ("curl" ,curl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("dbus" ,dbus)
-       ("ding-libs" ,ding-libs)
-       ("glib" ,glib)
-       ("gnutls" ,gnutls)
-       ("http-parser" ,http-parser)
-       ("jansson" ,jansson)
-       ("ldb" ,ldb)
-       ("libselinux" ,libselinux)
-       ("libsemanage" ,libsemanage)
-       ("libunistring" ,libunistring)
-       ("linux-pam" ,linux-pam)
-       ("mit-krb5" ,mit-krb5)
-       ("nss" ,nss)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("popt" ,popt)
-       ("samba" ,samba)
-       ("talloc" ,talloc)
-       ("tdb" ,tdb)
-       ("tevent" ,tevent)))
+     (list augeas
+           `(,isc-bind "utils")
+           c-ares
+           curl
+           cyrus-sasl
+           dbus
+           ding-libs
+           glib
+           gnutls
+           http-parser
+           jansson
+           ldb
+           libselinux
+           libsemanage
+           libunistring
+           linux-pam
+           mit-krb5
+           nss
+           openldap
+           openssl
+           pcre
+           popt
+           samba
+           talloc
+           tdb
+           tevent))
     (native-inputs
-     `(("check" ,check-0.14)
-       ("docbook-xsl" ,docbook-xsl)
-       ("docbook-xml" ,docbook-xml)
-       ("libxml2" ,libxml2)             ; for xmllint
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("util-linux" ,util-linux "lib"))) ;for uuid.h, reqired for KCM
+     (list check-0.14
+           docbook-xsl
+           docbook-xml
+           libxml2 ; for xmllint
+           libxslt
+           pkg-config
+           `(,util-linux "lib"))) ;for uuid.h, reqired for KCM
     (home-page "https://pagure.io/SSSD/sssd/")
     (synopsis "System security services daemon")
     (description "SSSD is a system daemon.  Its primary function is to provide
diff --git a/gnu/packages/stalonetray.scm b/gnu/packages/stalonetray.scm
index c803fb06f6..57cdc5e2d8 100644
--- a/gnu/packages/stalonetray.scm
+++ b/gnu/packages/stalonetray.scm
@@ -37,7 +37,7 @@
        (sha256
         (base32
          "0k7xnpdb6dvx25d67v0crlr32cdnzykdsi9j889njiididc8lm1n"))))
-    (inputs `(("libx11" ,libx11)))
+    (inputs (list libx11))
     (build-system gnu-build-system)
     (home-page "http://stalonetray.sourceforge.net")
     (synopsis "Standalone freedesktop.org and KDE systray implementation")
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 599d6a8fc3..c2578c35a9 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com>
 ;;; Copyright © 2020 Tim Howes <timhowes@lavabit.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
@@ -108,23 +109,23 @@
         "0lqrash677b09zxdlxp89z6k02y4i23mbqg83956dwl69wc53dan"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("gettext" ,gettext-minimal)
-       ("gsl" ,gsl)
-       ("libxml2" ,libxml2)
-       ("pango" ,pango)
-       ("readline" ,readline)
-       ("gtk" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("spread-sheet-widget" ,spread-sheet-widget)
-       ("zlib" ,zlib)))
+     (list cairo
+           gettext-minimal
+           gsl
+           libxml2
+           pango
+           readline
+           gtk+
+           gtksourceview-3
+           spread-sheet-widget
+           zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)           ;for tests
-       ("glib" ,glib "bin")             ;for glib-genmarshal
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-2)             ;for tests
-       ("texinfo" ,texinfo)))
+     (list autoconf ;for tests
+           `(,glib "bin") ;for glib-genmarshal
+           perl
+           pkg-config
+           python-2 ;for tests
+           texinfo))
     (home-page "https://www.gnu.org/software/pspp/")
     (synopsis "Statistical analysis")
     (description
@@ -151,8 +152,7 @@ be output in text, PostScript, PDF or HTML.")
     (build-system gnu-build-system)
     (home-page "http://mcmc-jags.sourceforge.net/")
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("lapack" ,lapack)))
+     (list gfortran lapack))
     (synopsis "Gibbs sampler")
     (description "JAGS is Just Another Gibbs Sampler.  It is a program for
 analysis of Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC)
@@ -221,9 +221,8 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
                (("compress = TRUE") "compress = FALSE"))))
          (add-before 'configure 'patch-coreutils-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((coreutils (assoc-ref inputs "coreutils"))
-                   (uname-bin (string-append coreutils "/bin/uname"))
-                   (rm-bin (string-append coreutils "/bin/rm")))
+             (let ((uname-bin (search-input-file inputs "/bin/uname"))
+                   (rm-bin (search-input-file inputs "/bin/rm")))
                (substitute* "src/scripts/R.sh.in"
                  (("uname") uname-bin))
                (substitute* "src/unix/sys-std.c"
@@ -304,8 +303,8 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZ" "UTC+1")
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))))
+                     (search-input-directory inputs
+                                             "share/zoneinfo"))))
          (add-after 'build 'make-info
           (lambda _ (invoke "make" "info")))
          (add-after 'build 'install-info
@@ -345,18 +344,19 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo) ; for building HTML manuals
-       ("texlive" ,(texlive-union (list texlive-ae
+       ("texlive" ,(texlive-updmap.cfg (list texlive-ae
                                         texlive-inconsolata
                                         texlive-fonts-ec
-                                        texlive-amsfonts/patched
+                                        texlive-grfext
+                                        texlive-amsfonts
                                         texlive-latex-base
                                         texlive-latex-fancyvrb
                                         texlive-latex-graphics
-                                        texlive-latex-hyperref
-                                        texlive-latex-oberdiek
+                                        texlive-hyperref
+                                        texlive-oberdiek
                                         texlive-latex-tools
                                         texlive-latex-upquote
-                                        texlive-latex-url
+                                        texlive-url
                                         texlive-latex-xkeyval)))
        ("tzdata" ,tzdata-for-tests)
        ("xz" ,xz)))
@@ -514,7 +514,7 @@ Applied Statistics with S\" (4th edition, 2002) by Venables and Ripley.")
          "0dxyxk59fs90713qisanlvk4p0d3l8n8n7zdd4d5c290naaaw83q"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)))
+     (list r-mass))
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "R functions for classification")
     (description
@@ -536,7 +536,7 @@ k-nearest neighbour, Learning Vector Quantization and Self-Organizing Maps.")
          "168l653ygkg21fwrqrf7lsqi5p6jzhgmcvhrwv7lznkdzdhag2jw"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/cluster")
     (synopsis "Methods for cluster analysis")
     (description
@@ -598,7 +598,7 @@ for reading and writing some dBase files.")
     (properties `((upstream-name . "KernSmooth")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/KernSmooth")
     (synopsis "Functions for kernel smoothing")
     (description
@@ -642,7 +642,7 @@ also flexible enough to handle most nonstandard requirements.")
     (properties `((upstream-name . "Matrix")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "http://Matrix.R-forge.R-project.org/")
     (synopsis "Sparse and dense matrix classes and methods")
     (description
@@ -662,9 +662,9 @@ and operations on them using LAPACK and SuiteSparse.")
         (base32 "1qw0sq64iybyidj0s8m76z4i1gxb1fn27s29i63fw5hvvy7aj9rx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nlme")
     (synopsis "Linear and nonlinear mixed effects models")
     (description
@@ -684,8 +684,7 @@ nonlinear mixed-effects models.")
       (base32 "1fyx8b0xjyx75mp90v314gayzydkca5y90p76jnwxzfnhxbys4nd"))))
    (build-system r-build-system)
    (propagated-inputs
-    `(("r-matrix" ,r-matrix)
-      ("r-nlme" ,r-nlme)))
+    (list r-matrix r-nlme))
    (home-page "https://cran.r-project.org/web/packages/mgcv")
    (synopsis "Mixed generalised additive model computation")
    (description
@@ -766,7 +765,7 @@ analysis.")
          "0zrikancm9shixvgng89f1610sphlwljczi0fnjbdqn4l85rrarz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://github.com/therneau/survival")
     (synopsis "Survival analysis")
     (description
@@ -782,22 +781,22 @@ curves, Cox models, and parametric accelerated failure time models.")
     (build-system trivial-build-system)
     (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
-     `(("r-minimal" ,r-minimal)
-       ("r-boot" ,r-boot)
-       ("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-codetools" ,r-codetools)
-       ("r-foreign" ,r-foreign)
-       ("r-kernsmooth" ,r-kernsmooth)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-nnet" ,r-nnet)
-       ("r-rpart" ,r-rpart)
-       ("r-spatial" ,r-spatial)
-       ("r-survival" ,r-survival)))))
+     (list r-minimal
+           r-boot
+           r-class
+           r-cluster
+           r-codetools
+           r-foreign
+           r-kernsmooth
+           r-lattice
+           r-mass
+           r-matrix
+           r-mgcv
+           r-nlme
+           r-nnet
+           r-rpart
+           r-spatial
+           r-survival))))
 
 (define-public r-bit
   (package
@@ -812,7 +811,7 @@ curves, Cox models, and parametric accelerated failure time models.")
          "0s7isadibxp2wr62r5cpbyh9z31sczzfz4j3rm7gxgjfpqgq8174"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "http://ff.r-forge.r-project.org")
     (synopsis "Class for vectors of 1-bit booleans")
     (description
@@ -835,7 +834,7 @@ binary booleans, @code{TRUE} and @code{FALSE} can be stored with 1 bit only.")
          "0y0m7q1rwam1g88cjx7zyi07mj5dipxd9jkl90f294syx8k6ipr5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bit" ,r-bit)))
+     (list r-bit))
     (home-page "http://ff.r-forge.r-project.org/")
     (synopsis "S3 class for vectors of 64 bit integers")
     (description
@@ -968,7 +967,7 @@ see package vignette.  To quote Rene Magritte, \"Ceci n'est pas un pipe.\"")
         (base32 "16g1fzisbpqb15yh3pqf3iia4csppva5dnv1z88x9dg263xskwyh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-colorspace" ,r-colorspace)))
+     (list r-colorspace))
     (home-page "https://cran.r-project.org/web/packages/munsell")
     (synopsis "Munsell colour system")
     (description
@@ -1010,7 +1009,7 @@ in which the whole-plots or split-plots or both can be freely exchangeable.")
        (sha256
         (base32 "11sjjdn146w95s1vsfmmgdls082cbnm1slv98xvyjhsl2mpx4mga"))))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rcpp" ,r-rcpp)))
+    (propagated-inputs (list r-rcpp))
     (home-page "http://had.co.nz/plyr")
     (synopsis "Tools for Splitting, Applying and Combining Data")
     (description
@@ -1072,7 +1071,7 @@ designed by Cynthia Brewer as described at http://colorbrewer2.org")
     (properties `((upstream-name . "sendmailR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)))
+     (list r-base64enc))
     (home-page
      "https://cran.r-project.org/web/packages/sendmailR")
     (synopsis "Send email using R")
@@ -1093,8 +1092,8 @@ solution for sending email, including attachments, from within R.")
         (base32
          "0r959gzyqkq9683qdfy95g9plwpj3c73n9lhf0a6byybw4scq519"))))
     (build-system r-build-system)
-    (inputs `(("icu4c" ,icu4c)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list icu4c))
+    (native-inputs (list pkg-config))
     (home-page "http://stringi.rexamine.com/")
     (synopsis "Character string processing facilities")
     (description
@@ -1119,9 +1118,7 @@ transliteration, concatenation, date-time formatting and parsing, etc.")
         (base32 "1p9ip7p87gbbg4s6d3d392svvzz2b5dqdq2c8ilgvn4s78nlsq47"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-stringi" ,r-stringi)))
+     (list r-glue r-magrittr r-stringi))
     (home-page "https://github.com/hadley/stringr")
     (synopsis "Simple, consistent wrappers for common string operations")
     (description
@@ -1144,9 +1141,7 @@ the input of another.")
         (base32 "1n0jrajpvc8hjkh9z4g8bwq63qy5vy5cgl2pzjardyih4ngcz3fq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-plyr" ,r-plyr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)))
+     (list r-plyr r-rcpp r-stringr))
     (home-page "https://github.com/hadley/reshape")
     (synopsis "Flexibly reshape data: a reboot of the \"reshape\" package")
     (description
@@ -1166,19 +1161,19 @@ using just two functions: melt and dcast (or acast).")
         (base32 "1si46bf9p09qzs208hqffwcb40305p361whmwhc1pwrsmx7jjxdh"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-glue" ,r-glue)
-       ("r-gtable" ,r-gtable)
-       ("r-isoband" ,r-isoband)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-tibble" ,r-tibble)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-svglite" ,r-svglite) ; Needed for 'ggsave'
-       ("r-withr" ,r-withr)))
+     (list r-digest
+           r-glue
+           r-gtable
+           r-isoband
+           r-mass
+           r-mgcv
+           r-tibble
+           r-rlang
+           r-scales
+           r-svglite ; Needed for 'ggsave'
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://ggplot2.tidyverse.org")
     (synopsis "An implementation of the grammar of graphics")
     (description
@@ -1202,10 +1197,9 @@ aesthetic attributes.")
                 "0skbj487b6f6pj2iz4yq2b9gbgb39cv5dyzhdl3w7ay1k0s5z9ph"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-mass" ,r-mass)))
+     (list r-ggplot2 r-mass))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/andrie/ggdendro")
     (synopsis "Create Dendrograms and Tree Diagrams Using ggplot2")
     (description "This is a set of tools for dendrograms and tree plots using
@@ -1230,14 +1224,11 @@ agnes cluster diagrams.")
          "1p3ip0qwpg8f63jfx0b8vbac6l20ddid8xvxzkfi6i858pybnawp"))))
     (build-system r-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("freetype2" ,freetype)
-       ("zlib" ,zlib)))
+     (list cairo freetype zlib))
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-rcpp r-systemfonts))
     (home-page "https://cran.r-project.org/web/packages/gdtools")
     (synopsis "Utilities for graphical rendering")
     (description
@@ -1258,13 +1249,11 @@ and to generate base64 encoded string from raster matrix.")
          "19ggknw5322yw7r1bzhw0bqggcrpn0qxddk7kblpqnra2zz2brkn"))))
     (build-system r-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-systemfonts" ,r-systemfonts)))
+     (list r-cpp11 r-systemfonts))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/svglite")
     (synopsis "SVG graphics device")
     (description
@@ -1324,7 +1313,7 @@ evaluation (NSE) in R.")
                 "0i0kfyg43nryyka2bjlgz4x75w965224qp36wz1hl7a2lswb6ajp"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstats-db/DBI")
     (synopsis "R database interface")
     (description
@@ -1384,7 +1373,7 @@ adapted for other output formats, such as HTML or LaTeX.")
                 "0353aj975mj0yjc91z76bbfy86y7d5cvlqqyfr93cdng14nnd0dx"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://yihui.org/formatr/")
     (synopsis "Format R code automatically")
     (description
@@ -1406,7 +1395,7 @@ There is also a Shiny app as a user interface in this package.")
                 "0kgdv2vf1lz3b5kbal9s83gg6812nw7fvrq0rkyr0v4k1lwi3zxy"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xfun" ,r-xfun)))
+     (list r-xfun))
     ;; We cannot add knitr to the inputs, because highr depends on xfun, which
     ;; is an input to knitr.
     #;
@@ -1455,8 +1444,7 @@ data derived from /etc/mime.types in UNIX-type systems.")
     ;; package.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("r-mime" ,r-mime)
-       ("r-xfun" ,r-xfun)))
+     (list r-mime r-xfun))
     (home-page "https://github.com/rstudio/markdown")
     (synopsis "Markdown rendering for R")
     (description
@@ -1495,11 +1483,7 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
                 "0hcf5gii0qlvv15f86y6h08qp0hd9lcrykzj0mdfjdfi52sgbkkf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-evaluate" ,r-evaluate)
-       ("r-highr" ,r-highr)
-       ("r-stringr" ,r-stringr)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)))
+     (list r-evaluate r-highr r-stringr r-xfun r-yaml))
     (home-page "https://yihui.org/knitr/")
     (synopsis "General-purpose package for dynamic report generation in R")
     (description
@@ -1524,9 +1508,7 @@ generation in R using Literate Programming techniques.")
     (properties `((upstream-name . "knitrBootstrap")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-markdown" ,r-markdown)))
+     (list r-knitr r-rmarkdown r-markdown))
     (home-page "https://github.com/jimhester/knitrBootstrap")
     (synopsis "Knitr bootstrap framework")
     (description
@@ -1564,10 +1546,7 @@ the execution time of R expressions.")
                 "02vp1y7zhv22id43j5c0gdcgn9171dyypqp8rqrlc3w5a7n565kv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-lobstr" ,r-lobstr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-stringr" ,r-stringr)))
+     (list r-codetools r-lobstr r-rcpp r-stringr))
     (home-page "https://github.com/hadley/pryr")
     (synopsis "Tools for computing on the R language")
     (description
@@ -1587,8 +1566,7 @@ understand the language at a deeper level.")
                 "1bzcv7pmls3bx2w5ccv1pm20wycbfqba1v76k0fjgmjsm6hy76pz"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cachem" ,r-cachem)
-       ("r-rlang" ,r-rlang)))
+     (list r-cachem r-rlang))
     (home-page "https://github.com/hadley/memoise")
     (synopsis "Memoise functions for R")
     (description
@@ -1648,27 +1626,27 @@ R packages that praise their users.")
                 "11s98q0gm37z1cqzwvdm9pq26v0zbdq9vc5ssl1nsxhsi42v2577"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brio" ,r-brio)
-       ("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-crayon" ,r-crayon)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-evaluate" ,r-evaluate)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pkgload" ,r-pkgload)
-       ("r-praise" ,r-praise)
-       ("r-processx" ,r-processx)
-       ("r-ps" ,r-ps)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-waldo" ,r-waldo)
-       ("r-withr" ,r-withr)))
+     (list r-brio
+           r-callr
+           r-cli
+           r-crayon
+           r-desc
+           r-digest
+           r-ellipsis
+           r-evaluate
+           r-jsonlite
+           r-lifecycle
+           r-magrittr
+           r-pkgload
+           r-praise
+           r-processx
+           r-ps
+           r-r6
+           r-rlang
+           r-waldo
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/testthat")
     (synopsis "Unit testing for R")
     (description
@@ -1729,16 +1707,16 @@ like tidy evaluation.")
          "14l2i6ri3v5y0h8g0ahc4kz0pdqsp5yabxk2w8wavss6y44xjcsv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-fansi" ,r-fansi)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pkgconfig" ,r-pkgconfig)
-       ("r-pillar" ,r-pillar)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-fansi
+           r-lifecycle
+           r-magrittr
+           r-pkgconfig
+           r-pillar
+           r-rlang
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/tibble")
     (synopsis "Simple data frames")
     (description
@@ -1758,19 +1736,19 @@ and printing capabilities than traditional data frames.")
                 "0g8jsxclj9cgm7a2lyazy78sj62rbzw812lsw3fdsbz0pknkmznj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-generics" ,r-generics)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-pillar" ,r-pillar)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis
+           r-generics
+           r-glue
+           r-lifecycle
+           r-magrittr
+           r-pillar
+           r-r6
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/dplyr")
     (synopsis "Tools for working with data frames in R")
     (description
@@ -1796,23 +1774,23 @@ database.")
          "025wqpmxdhzblb0pf58m3qh5h6bf5x8qvkf47vyl1cjsp13wz95b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-blob" ,r-blob)
-       ("r-dbi" ,r-dbi)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-vctrs" ,r-vctrs)
-       ("r-withr" ,r-withr)))
+     (list r-assertthat
+           r-blob
+           r-dbi
+           r-dplyr
+           r-ellipsis
+           r-glue
+           r-lifecycle
+           r-magrittr
+           r-purrr
+           r-r6
+           r-rlang
+           r-tibble
+           r-tidyselect
+           r-vctrs
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/tidyverse/dbplyr")
     (synopsis "Dplyr back end for databases")
     (description
@@ -1835,7 +1813,7 @@ features require SQL translation to be provided by the package author.")
          "1f98rpfjmhd92rdc3j004plyfpjailz6j0ycysbac0kgj83haxc2"))))
     (build-system r-build-system)
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/acepack")
     (synopsis "Functions for regression transformations")
     (description
@@ -1878,7 +1856,7 @@ side.")
          "1vcw16qww4v4547w0gfvhqg60l051bsdlxa6zfcgcj9xbxf6dlyr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/locfit")
     (synopsis "Local regression, likelihood and density estimation")
     (description
@@ -1916,10 +1894,9 @@ times.")
                 "0arx5wna0sh0vf5q8rjhh8nqdmnvg2pdpbhljl9l0x4kwm8vjhgp"))))
     (build-system r-build-system)
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/Rdatatable/data.table/wiki")
     (synopsis "Enhanced version of data.frame R object")
     (description
@@ -1942,7 +1919,7 @@ and fast file reading.")
          "077xfm0gphvhsay75amd9v90zk57kjgrrlgih04fyrbqqblc1gjs"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "http://xtable.r-forge.r-project.org/")
     (synopsis "Export R tables to LaTeX or HTML")
     (description
@@ -1952,25 +1929,24 @@ and fast file reading.")
 (define-public python-patsy
   (package
     (name "python-patsy")
-    (version "0.5.1")
+    (version "0.5.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "patsy" version))
               (sha256
                (base32
-                "149rbrdzwns0ay88caf1zsm1r53v1q5np1mrb36na50y432cw5gi"))))
+                "17dn72519gvwifw3i8mzwlslxmxkl8ihzfrxg1iblsk70iwdwlsh"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "nosetests" "-v"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests? (invoke "pytest" "-vv")))))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-six" ,python-six)))
+     (list python-numpy python-scipy python-six))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-pytest))
     (home-page "https://github.com/pydata/patsy")
     (synopsis "Describe statistical models and build design matrices")
     (description
@@ -2015,15 +1991,10 @@ building design matrices.")
                               line)))
             #t)))))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-scipy" ,python-scipy)
-       ("python-pandas" ,python-pandas)
-       ("python-patsy" ,python-patsy)
-       ("python-matplotlib" ,python-matplotlib)))
+     (list python-numpy python-scipy python-pandas python-patsy
+           python-matplotlib))
     (native-inputs
-     `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)
-       ("python-sphinx" ,python-sphinx)))
+     (list python-cython python-nose python-sphinx))
     (home-page "http://statsmodels.sourceforge.net/")
     (synopsis "Statistical modeling and econometrics in Python")
     (description
@@ -2065,7 +2036,7 @@ inference for statistical models.")
                 "13z5dwfpnyyhpsbpg4xr9g5c1685jhqj90f4x4qkcykr6kykqba2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/coda")
     (synopsis "This is a package for Output Analysis and Diagnostics for MCMC")
     (description "This package provides functions for summarizing and plotting
@@ -2087,9 +2058,7 @@ chain.")
             "09f5kh2mwygqpnvf53k0r54k0cvaafxm9x4nm819gwv05k2g9dpc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-pixmap" ,r-pixmap)
-       ("r-sp" ,r-sp)))
+     (list r-mass r-pixmap r-sp))
     (home-page "http://pbil.univ-lyon1.fr/ADE-4")
     (synopsis "Multivariate data analysis and graphical display")
     (description
@@ -2110,11 +2079,9 @@ and environmental data in the framework of Euclidean exploratory methods.")
          "1kx400v62xkd5xal7rzz7jcarz94ac8g1sh4i2dqr78qwgkzj8nz"))))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list libxml2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (home-page "https://github.com/hadley/xml2")
     (synopsis "Parse XML with R")
     (description
@@ -2135,7 +2102,7 @@ files in R.  It is built on top of the libxml2 C library.")
          "1gm3wr8xqpqiby7q1dr3zxim77v0bvvrqi0hlazf5g3gnkrp2zc3"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://github.com/wesleyburr/multitaper/")
     (synopsis "Multitaper spectral analysis tools")
     (description
@@ -2160,8 +2127,7 @@ jackknifed confidence intervals are available for most estimates.")
                 "1cbwwbz8lqx2n33xr4q904whvld22s63rpyy1nn93395l7ssrakr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-xml2" ,r-xml2)))
+     (list r-curl r-xml2))
     (home-page "https://github.com/metacran/rversions")
     (synopsis "Query R versions, including 'r-release' and 'r-oldrel'")
     (description
@@ -2224,7 +2190,7 @@ R version.")
          "193gkifr9spp0x0rwnjq1spdhjkfkh4mv27iklskcj604075phhd"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)))
+     (list r-backports))
     (home-page "https://github.com/mllg/checkmate")
     (synopsis "Fast and versatile argument checks")
     (description
@@ -2247,7 +2213,7 @@ worries about execution time overhead.")
     (properties `((upstream-name . "BBmisc")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-checkmate" ,r-checkmate)))
+     (list r-checkmate))
     (home-page "https://github.com/berndbischl/BBmisc")
     (synopsis "Miscellaneous functions for R package development")
     (description
@@ -2268,8 +2234,7 @@ of R packages.")
          "0vfm6kmpmgsamda5p0sl771kbnsscan31l2chzssyw93kwmams7d"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bbmisc" ,r-bbmisc)
-       ("r-checkmate" ,r-checkmate)))
+     (list r-bbmisc r-checkmate))
     (home-page "https://github.com/mllg/fail")
     (synopsis "File abstraction interface layer (FAIL)")
     (description
@@ -2291,16 +2256,16 @@ or source files in a key-value fashion.")
     (properties `((upstream-name . "BatchJobs")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-backports" ,r-backports)
-       ("r-bbmisc" ,r-bbmisc)
-       ("r-brew" ,r-brew)
-       ("r-checkmate" ,r-checkmate)
-       ("r-data-table" ,r-data-table)
-       ("r-dbi" ,r-dbi)
-       ("r-digest" ,r-digest)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-sendmailr" ,r-sendmailr)
-       ("r-stringi" ,r-stringi)))
+     (list r-backports
+           r-bbmisc
+           r-brew
+           r-checkmate
+           r-data-table
+           r-dbi
+           r-digest
+           r-rsqlite
+           r-sendmailr
+           r-stringi))
     (home-page "https://github.com/tudo-r/BatchJobs")
     (synopsis "Batch computing with R")
     (description
@@ -2341,9 +2306,7 @@ module, Java Server Pages, and Python's psp module.")
          "0jfnwn1kpiill8v4hmzdk90yz4gk2ha0prr2p0hq36s40v3y8842"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-crayon" ,r-crayon)
-       ("r-r6" ,r-r6)
-       ("r-rprojroot" ,r-rprojroot)))
+     (list r-crayon r-r6 r-rprojroot))
     (home-page "https://github.com/r-pkgs/desc")
     (synopsis "Manipulate DESCRIPTION Files")
     (description
@@ -2387,21 +2350,21 @@ tables, autolinks and strikethrough text.")
                 "1zf55wywlpy7mk7zfyi3s9fhhg1m9kvafzj46iqw5cbvnlg3ssdk"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-brew" ,r-brew)
-       ("r-commonmark" ,r-commonmark)
-       ("r-cpp11" ,r-cpp11)
-       ("r-desc" ,r-desc)
-       ("r-digest" ,r-digest)
-       ("r-knitr" ,r-knitr)
-       ("r-pkgload" ,r-pkgload)
-       ("r-purrr" ,r-purrr)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-stringi" ,r-stringi)
-       ("r-stringr" ,r-stringr)
-       ("r-xml2" ,r-xml2)))
+     (list r-brew
+           r-commonmark
+           r-cpp11
+           r-desc
+           r-digest
+           r-knitr
+           r-pkgload
+           r-purrr
+           r-r6
+           r-rlang
+           r-stringi
+           r-stringr
+           r-xml2))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/klutometis/roxygen")
     (synopsis "In-source documentation system for R")
     (description
@@ -2422,12 +2385,11 @@ collation, and NAMESPACE files.")
          "1xy1w0rljzsgvsg91fh9hs6h9rx58mza1vg6rig9ykp9m2ml3hag"))))
     (build-system r-build-system)
     (inputs
-     `(("libressl" ,libressl)))
+     (list libressl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("r-knitr" ,r-knitr)))
+     (list pkg-config r-knitr))
     (propagated-inputs
-     `(("r-askpass" ,r-askpass)))
+     (list r-askpass))
     (home-page "https://github.com/jeroenooms/openssl")
     (synopsis "Toolkit for encryption, signatures and certificates")
     (description
@@ -2455,13 +2417,9 @@ integers.")
                 "1y8y1g1dkgv9jafrk1kj6pzxpw95c0rr9lplblfq2byrs1pfsas6"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-curl" ,r-curl)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-openssl" ,r-openssl)
-       ("r-mime" ,r-mime)
-       ("r-r6" ,r-r6)))
+     (list r-curl r-jsonlite r-openssl r-mime r-r6))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/httr")
     (synopsis "Tools for working with URLs and HTTP")
     (description
@@ -2483,10 +2441,9 @@ functions make it easy to control additional request components.")
                 "13nlrhma6kavvhranb43w3003vadfkyrn2f4l3r63iqavj0s3xzq"))))
     (build-system r-build-system)
     (inputs
-     `(("libgit2" ,libgit2)
-       ("zlib" ,zlib)))
+     (list libgit2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ropensci/git2r")
     (synopsis "Access Git repositories with R")
     (description
@@ -2507,7 +2464,7 @@ pure C implementation of the Git core methods.")
                 "12vdfzzjc6mv4h105l8cp108j3hjk0mqmg23m6mqr3jarfymphxa"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/rstudioapi")
     (synopsis "Safely access the RStudio API")
     (description
@@ -2527,28 +2484,28 @@ informative error messages when it's not available.")
                 "01cg2ykg0av6z7bgl41njcxcii8vjj8ipch26xazp4yjai8abw3i"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-callr" ,r-callr)
-       ("r-cli" ,r-cli)
-       ("r-desc" ,r-desc)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-fs" ,r-fs)
-       ("r-httr" ,r-httr)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-memoise" ,r-memoise)
-       ("r-pkgbuild" ,r-pkgbuild)
-       ("r-pkgload" ,r-pkgload)
-       ("r-rcmdcheck" ,r-rcmdcheck)
-       ("r-remotes" ,r-remotes)
-       ("r-rlang" ,r-rlang)
-       ("r-roxygen2" ,r-roxygen2)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-rversions" ,r-rversions)
-       ("r-sessioninfo" ,r-sessioninfo)
-       ("r-testthat" ,r-testthat)
-       ("r-usethis" ,r-usethis)
-       ("r-withr" ,r-withr)))
+     (list r-callr
+           r-cli
+           r-desc
+           r-ellipsis
+           r-fs
+           r-httr
+           r-lifecycle
+           r-memoise
+           r-pkgbuild
+           r-pkgload
+           r-rcmdcheck
+           r-remotes
+           r-rlang
+           r-roxygen2
+           r-rstudioapi
+           r-rversions
+           r-sessioninfo
+           r-testthat
+           r-usethis
+           r-withr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/devtools")
     (synopsis "Tools to make developing R packages easier")
     (description "The devtools package is a collection of package development
@@ -2567,7 +2524,7 @@ tools to simplify the devolpment of R packages.")
                 "1j5srffi748yxphwli56lkbh4cga0kmz38dyzganzkw0nx66mya8"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/jimhester/withr")
     (synopsis "Run code with temporarily modified global state")
     (description
@@ -2589,11 +2546,7 @@ were originally a part of the r-devtools package.")
          "0qlh4s1g9rbm6c3s906dhw3xsz28m8fg6cyynlkhvis533dk0pvb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-pkgconfig" ,r-pkgconfig)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis r-lifecycle r-pkgconfig r-rlang r-vctrs))
     (home-page "https://github.com/rstats-db/hms")
     (synopsis "Pretty time of day")
     (description
@@ -2613,19 +2566,19 @@ time-of-day values, based on the @code{difftime} class.")
                 "03d7y4k9w5vcm7fwlcaw715ff7d953i92jwbp7ynrqcr09kw6zm0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cli" ,r-cli)
-       ("r-clipr" ,r-clipr)
-       ("r-cpp11" ,r-cpp11)
-       ("r-crayon" ,r-crayon)
-       ("r-hms" ,r-hms)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-tibble" ,r-tibble)
-       ("r-r6" ,r-r6)
-       ("r-rlang" ,r-rlang)
-       ("r-tzdb" ,r-tzdb)
-       ("r-vroom" ,r-vroom)))
+     (list r-cli
+           r-clipr
+           r-cpp11
+           r-crayon
+           r-hms
+           r-lifecycle
+           r-tibble
+           r-r6
+           r-rlang
+           r-tzdb
+           r-vroom))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/readr")
     (synopsis "Read tabular data")
     (description
@@ -2682,10 +2635,7 @@ scaling functions for R.")
     (properties `((upstream-name . "latticeExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-jpeg" ,r-jpeg)
-       ("r-lattice" ,r-lattice)
-       ("r-png" ,r-png)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+     (list r-jpeg r-lattice r-png r-rcolorbrewer))
     (home-page "http://latticeextra.r-forge.r-project.org/")
     (synopsis "Extra graphical utilities based on lattice")
     (description
@@ -2707,7 +2657,7 @@ well as additional utilities such as panel and axis annotation functions.")
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/RcppCore/RcppArmadillo")
     (synopsis "Rcpp integration for the Armadillo linear algebra library")
     (description
@@ -2753,7 +2703,7 @@ vectors.")
     (properties `((upstream-name . "caTools")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)))
+     (list r-bitops))
     (home-page "https://cran.r-project.org/web/packages/caTools")
     (synopsis "Various tools including functions for moving window statistics")
     (description
@@ -2776,7 +2726,7 @@ encoder/decoder, round-off-error-free sum and cumsum, etc.")
          "07wy07yhms8zln9qb0iwx69dq08h4lrdi8kavjcplfxcskq638az"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/krlmlr/rprojroot")
     (synopsis "Finding files in project subdirectories")
     (description
@@ -2799,18 +2749,18 @@ certain criterion, e.g., it contains a certain regular file.")
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-evaluate" ,r-evaluate)
-       ("r-htmltools" ,r-htmltools)
-       ("r-jquerylib" ,r-jquerylib)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-knitr" ,r-knitr)
-       ("r-stringr" ,r-stringr)
-       ("r-tinytex" ,r-tinytex)
-       ("r-xfun" ,r-xfun)
-       ("r-yaml" ,r-yaml)
-       ("pandoc" ,pandoc)))
+     (list r-evaluate
+           r-htmltools
+           r-jquerylib
+           r-jsonlite
+           r-knitr
+           r-stringr
+           r-tinytex
+           r-xfun
+           r-yaml
+           pandoc))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rmarkdown.rstudio.com")
     (synopsis "Convert R Markdown documents into a variety of formats")
     (description
@@ -2850,9 +2800,9 @@ variety of formats.")
     (properties `((upstream-name . "gridExtra")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gtable" ,r-gtable)))
+     (list r-gtable))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ;for building vignettes
+     (list r-knitr)) ;for building vignettes
     (home-page "https://github.com/baptiste/gridextra")
     (synopsis "Miscellaneous functions for \"Grid\" graphics")
     (description
@@ -2891,8 +2841,7 @@ that package, other packages are unaffected.")
                 "1yn7f13icaix0apxp4drnciwdn8bx8xmbd129jd7ck4rcly0axj9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-rlang r-vctrs))
     (home-page "https://github.com/hadley/blob")
     (synopsis "Simple S3 Class for representing vectors of binary data")
     (description "Raw vectors in R are useful for storing a single binary
@@ -2914,15 +2863,15 @@ a column in data frame.")
     (properties `((upstream-name . "RSQLite")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dbi" ,r-dbi)
-       ("r-memoise" ,r-memoise)
-       ("r-plogr" ,r-plogr)
-       ("r-rcpp" ,r-rcpp)
-       ("r-bit64" ,r-bit64)
-       ("r-blob" ,r-blob)
-       ("r-pkgconfig" ,r-pkgconfig)))
+     (list r-dbi
+           r-memoise
+           r-plogr
+           r-rcpp
+           r-bit64
+           r-blob
+           r-pkgconfig))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/rstats-db/RSQLite")
     (synopsis "SQLite interface for R")
     (description
@@ -2960,7 +2909,7 @@ if (certs != \"\") { .opts = merge.list(.opts, list(cainfo=certs)) }
     (inputs
      `(("libcurl" ,curl)))
     (propagated-inputs
-     `(("r-bitops" ,r-bitops)))
+     (list r-bitops))
     (home-page "http://www.omegahat.net/RCurl")
     (synopsis "General network client interface for R")
     (description
@@ -2988,10 +2937,9 @@ ldap, and also supports cookies, redirects, authentication, etc.")
      `((upstream-name . "XML")))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
+     (list libxml2 zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.omegahat.net/RSXML")
     (synopsis "Tools for parsing and generating XML within R")
     (description
@@ -3041,7 +2989,7 @@ plotted and compared with the asymptotic curve.")
     (properties `((upstream-name . "lambda.r")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-formatr" ,r-formatr)))
+     (list r-formatr))
     (home-page "https://cran.r-project.org/web/packages/lambda.r")
     (synopsis "Functional programming extension for R")
     (description
@@ -3086,8 +3034,7 @@ options defined in other packages.")
     (properties `((upstream-name . "futile.logger")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-futile-options" ,r-futile-options)
-       ("r-lambda-r" ,r-lambda-r)))
+     (list r-futile-options r-lambda-r))
     (home-page "https://cran.r-project.org/web/packages/futile.logger")
     (synopsis "Logging utility for R")
     (description
@@ -3151,7 +3098,7 @@ worker processes and collect and return the results on the master.")
     (properties
      `((upstream-name . "SparseM")))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (build-system r-build-system)
     (home-page "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html")
     (synopsis "Sparse linear algebra")
@@ -3194,10 +3141,9 @@ data.")
          "1qb83b1jvpmk8d6kfibkm5q2hiki0x5gipy758mwa62n56gdcnpv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-codetools" ,r-codetools)
-       ("r-iterators" ,r-iterators)))
+     (list r-codetools r-iterators))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/foreach")
     (synopsis "Foreach looping construct for R")
     (description
@@ -3225,8 +3171,7 @@ parallel.")
     (properties `((upstream-name . "doParallel")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-iterators))
     (home-page "https://cran.r-project.org/web/packages/doParallel")
     (synopsis "Foreach parallel adaptor for the 'parallel' package")
     (description
@@ -3248,8 +3193,7 @@ using the parallel package.")
     (properties `((upstream-name . "doMC")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-foreach" ,r-foreach)
-       ("r-iterators" ,r-iterators)))
+     (list r-foreach r-iterators))
     (home-page "https://cran.r-project.org/web/packages/doMC")
     (synopsis "Foreach parallel adaptor for the 'parallel' package")
     (description
@@ -3599,15 +3543,15 @@ using the multicore functionality of the parallel package.")
                                  (string-append (assoc-ref inputs "js-selectize")
                                                 "/share/javascript/selectize.min.js")))))))))
       (propagated-inputs
-       `(("r-crosstalk" ,r-crosstalk)
-         ("r-htmltools" ,r-htmltools)
-         ("r-htmlwidgets" ,r-htmlwidgets)
-         ("r-jquerylib" ,r-jquerylib)
-         ("r-jsonlite" ,r-jsonlite)
-         ("r-magrittr" ,r-magrittr)
-         ("r-promises" ,r-promises)))
+       (list r-crosstalk
+             r-htmltools
+             r-htmlwidgets
+             r-jquerylib
+             r-jsonlite
+             r-magrittr
+             r-promises))
       (inputs
-       `(("js-selectize" ,js-selectize)))
+       (list js-selectize))
       (native-inputs
        `(("r-knitr" ,r-knitr)
          ("uglifyjs" ,node-uglify-js)
@@ -3684,7 +3628,7 @@ flexible than the orphaned \"base64\" package.")
          "1h7mzrqdjc41814cf6c93sbyl7nxwvsf3x8apl9rhmydgdlk7qkf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/irlba")
     (synopsis "Methods for eigendecomposition of large matrices")
     (description
@@ -3705,15 +3649,14 @@ analysis of large sparse or dense matrices.")
       (base32 "0nij8v44b5dvp1vc843sfkl9ds83n6g687m2p37q1rdn82m3bg34"))))
    (build-system r-build-system)
    (native-inputs
-    `(("gfortran" ,gfortran)
-      ("r-knitr" ,r-knitr)))
+    (list gfortran r-knitr))
    (propagated-inputs
-    `(("r-foreach" ,r-foreach)
-      ("r-matrix" ,r-matrix)
-      ("r-rcpp" ,r-rcpp)
-      ("r-rcppeigen" ,r-rcppeigen)
-      ("r-shape" ,r-shape)
-      ("r-survival" ,r-survival)))
+    (list r-foreach
+          r-matrix
+          r-rcpp
+          r-rcppeigen
+          r-shape
+          r-survival))
    (home-page "https://www.jstatsoft.org/article/view/v033i01")
    (synopsis "Lasso and elastic-net regularized generalized linear models")
    (description
@@ -3737,13 +3680,13 @@ path-wise fashion.")
          "14ggsd24n5g5rvn0wl4w90ipxzmywqikh28llj89q6kpxwnv4iff"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-codetools" ,r-codetools)
-       ("r-digest" ,r-digest)
-       ("r-registry" ,r-registry)
-       ("r-stringr" ,r-stringr)
-       ("r-withr" ,r-withr)
-       ("r-xtable" ,r-xtable)))
+     (list r-assertthat
+           r-codetools
+           r-digest
+           r-registry
+           r-stringr
+           r-withr
+           r-xtable))
     (home-page "https://renozao.github.io/pkgmaker")
     (synopsis "Package development utilities")
     (description
@@ -3784,7 +3727,7 @@ package registries.")
          "0kd7x214cqw7hzpmk1iqy1bn7j6x0ady0yz2hsdbclbq9k57d33z"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)))
+     (list r-digest))
     (home-page "https://renozao.github.io/rngtools")
     (synopsis "Utility functions for working with random number generators")
     (description
@@ -3809,7 +3752,7 @@ the way current RNG settings can be changed.")
     (properties `((upstream-name . "Rtsne")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (home-page "https://github.com/jkrijthe/Rtsne")
     (synopsis "T-distributed stochastic neighbor embedding")
     (description
@@ -3832,8 +3775,7 @@ Stochastic Neighbor Embedding using a Barnes-Hut implementation.")
          "09i2hmyf1bxansqp24p9n9djlzzarclqs173gjjv3fg0giga3ycv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-proxy" ,r-proxy)))
+     (list r-class r-proxy))
     (home-page "https://cran.r-project.org/web/packages/e1071")
     (synopsis "Miscellaneous functions for probability theory")
     (description
@@ -3875,10 +3817,7 @@ bigmemory and synchronicity packages.")
          "1kgsk64aifjm3mfj102y3va7x1abypq2zi0cqbnjhl8fqyzp69hx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-bigmemory-sri" ,r-bigmemory-sri)
-       ("r-rcpp" ,r-rcpp)
-       ("r-uuid" ,r-uuid)))
+     (list r-bh r-bigmemory-sri r-rcpp r-uuid))
     (home-page "http://www.bigmemory.org")
     (synopsis "Boost mutex functionality in R")
     (description "This package provides support for synchronization
@@ -3900,9 +3839,7 @@ message passing.")
          "03pg8mxdc7q0249visjmc8bc3xmwxsfg3i2n6higicj4cfz7zihq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-bh" ,r-bh)
-       ("r-rcpp" ,r-rcpp)
-       ("r-bigmemory-sri" ,r-bigmemory-sri)))
+     (list r-bh r-rcpp r-bigmemory-sri))
     (home-page "http://www.bigmemory.org")
     (synopsis "Manage large matrices with shared memory or memory-mapped files")
     (description "This package provides methods to create, store, access, and
@@ -3948,7 +3885,7 @@ want to migrate to S4.")
     (properties `((upstream-name . "R.oo")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)))
+     (list r-r-methodss3))
     (home-page "https://github.com/HenrikBengtsson/R.oo")
     (synopsis "R object-oriented programming with or without references")
     (description
@@ -3971,8 +3908,7 @@ maintenance for package developers.")
     (properties `((upstream-name . "R.utils")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)))
+     (list r-r-methodss3 r-r-oo))
     (home-page "https://github.com/HenrikBengtsson/R.utils")
     (synopsis "Various programming utilities")
     (description
@@ -3998,10 +3934,7 @@ developing R packages.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.cache")
     (synopsis "Light-weight caching of objects and results")
     (description
@@ -4029,11 +3962,7 @@ persistent (on the file system).")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-r-cache" ,r-r-cache)
-       ("r-r-methodss3" ,r-r-methodss3)
-       ("r-r-oo" ,r-r-oo)
-       ("r-r-utils" ,r-r-utils)))
+     (list r-digest r-r-cache r-r-methodss3 r-r-oo r-r-utils))
     (home-page "https://github.com/HenrikBengtsson/R.rsp")
     (synopsis "Dynamic generation of scientific reports")
     (description
@@ -4060,7 +3989,7 @@ vignettes.")
                 "0j14q2bkc14v35s5k03sw44zsssrd2qjljlwzj014qxs74hk0kpz"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://mvtnorm.R-forge.R-project.org")
     (synopsis "Package for multivariate normal and t-distributions")
     (description "This package can compute multivariate normal and
@@ -4085,7 +4014,7 @@ t-probabilities, quantiles, random deviates and densities.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("r-r-rsp" ,r-r-rsp))) ;used to build vignettes
+     (list r-r-rsp)) ;used to build vignettes
     (home-page "https://github.com/HenrikBengtsson/matrixStats")
     (synopsis "Methods applying to vectors and matrix rows and columns")
     (description
@@ -4108,11 +4037,9 @@ memory usage.")
                 "048kwhbhd49g86cq11fl7vm0whwhjl5gs9xjn040lwcjv78qrdb9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-ggplot2 r-gridextra r-viridislite))
     (native-inputs
-     `(("r-knitr" ,r-knitr))) ; for vignettes
+     (list r-knitr)) ; for vignettes
     (home-page "https://github.com/sjmgarnier/viridis")
     (synopsis "Matplotlib default color map")
     (description
@@ -4164,13 +4091,9 @@ more complete @code{viridis} package.")
          "0ss8mq05mwif64cj8zmrfx0ljgy3n0fvyv7f37782shr8rknmsqq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-glue" ,r-glue)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-ellipsis r-glue r-purrr r-rlang r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/tidyselect")
     (synopsis "Select from a set of strings")
     (description
@@ -4193,19 +4116,19 @@ selection.")
          "0h8jfsmn4r7zgfyjmg2qkjd54n0sncq07xjh4mdf2cx4k2z9h30b"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cpp11" ,r-cpp11)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ellipsis" ,r-ellipsis)
-       ("r-magrittr" ,r-magrittr)
-       ("r-glue" ,r-glue)
-       ("r-lifecycle" ,r-lifecycle)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)
-       ("r-tibble" ,r-tibble)
-       ("r-vctrs" ,r-vctrs)))
+     (list r-cpp11
+           r-dplyr
+           r-ellipsis
+           r-magrittr
+           r-glue
+           r-lifecycle
+           r-purrr
+           r-rlang
+           r-tidyselect
+           r-tibble
+           r-vctrs))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/tidyr")
     (synopsis "Tidy data with `spread()` and `gather()` functions")
     (description
@@ -4230,10 +4153,9 @@ and tidyr provides no margins or aggregation.")
          "0bbhs5pwxh474w62sq6gqvih7habancxng9wd4f2rgn6lv9zhhb2"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr))) ; for vignettes
+     (list gfortran r-knitr)) ; for vignettes
     (home-page "https://github.com/edzer/hexbin")
     (synopsis "Hexagonal binning routines")
     (description
@@ -4254,10 +4176,9 @@ It uses and relies on grid graphics and formal (S4) classes and methods.")
          "1cj091rsjdj2xz16qhynyw72gh5cyhznifcfbrbygndfr4xwksr3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
-       ("r-rlang" ,r-rlang)))
+     (list r-magrittr r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/hadley/purrr")
     (synopsis "Functional programming tools")
     (description
@@ -4277,27 +4198,27 @@ features present in other programming languages.")
                 "16iqj7sv49mva6siibsci7iijsbnk7pqvfns9al0k35w9mjmr6dx"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-crosstalk" ,r-crosstalk)
-       ("r-digest" ,r-digest)
-       ("r-data-table" ,r-data-table)
-       ("r-dplyr" ,r-dplyr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-htmltools" ,r-htmltools)
-       ("r-htmlwidgets" ,r-htmlwidgets)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-lazyeval" ,r-lazyeval)
-       ("r-magrittr" ,r-magrittr)
-       ("r-promises" ,r-promises)
-       ("r-purrr" ,r-purrr)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)
-       ("r-viridislite" ,r-viridislite)))
+     (list r-base64enc
+           r-crosstalk
+           r-digest
+           r-data-table
+           r-dplyr
+           r-ggplot2
+           r-htmltools
+           r-htmlwidgets
+           r-httr
+           r-jsonlite
+           r-lazyeval
+           r-magrittr
+           r-promises
+           r-purrr
+           r-rcolorbrewer
+           r-rlang
+           r-scales
+           r-tibble
+           r-tidyr
+           r-vctrs
+           r-viridislite))
     (home-page "https://plot.ly/r")
     (synopsis "Create interactive web graphics")
     (description
@@ -4363,8 +4284,7 @@ character vector.")
          "16fgi3annn34c3cxi0pxf62mmmmxi21hp0zzlv7bkfsjqy4g4f2x"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rematch" ,r-rematch)
-       ("r-tibble" ,r-tibble)))
+     (list r-rematch r-tibble))
     (home-page "https://github.com/rsheets/cellranger")
     (synopsis "Translate spreadsheet cell ranges to rows and columns")
     (description
@@ -4385,16 +4305,16 @@ character vector.")
          "11q07nxys72wkxx9mawmjyf20gvwvrb7h3gpa73h6lgh2vgrwnv8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-cellranger" ,r-cellranger)
-       ("r-dplyr" ,r-dplyr)
-       ("r-httr" ,r-httr)
-       ("r-jsonlite" ,r-jsonlite)
-       ("r-purrr" ,r-purrr)
-       ("r-readr" ,r-readr)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-xml2" ,r-xml2)))
+     (list r-cellranger
+           r-dplyr
+           r-httr
+           r-jsonlite
+           r-purrr
+           r-readr
+           r-stringr
+           r-tibble
+           r-tidyr
+           r-xml2))
     (home-page "https://github.com/jennybc/googlesheets")
     (synopsis "Manage Google spreadsheets from R")
     (description "This package provides tools to interact with Google Sheets
@@ -4427,8 +4347,7 @@ from within R.")
                (("-mtune=native") ""))
              #t)))))
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-matrix" ,r-matrix)))
+     (list r-lattice r-matrix))
     (home-page "https://spams-devel.gforge.inria.fr")
     (synopsis "Toolbox for solving sparse estimation problems")
     (description "SPAMS (SPArse Modeling Software) is an optimization toolbox
@@ -4459,7 +4378,7 @@ following problems:
          "1labh0ycdm2xcjssj8bhnyjvbk44mcdsi0rb2p8rfqa428mrq9cf"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-openssl" ,r-openssl)))
+     (list r-openssl))
     (home-page "https://cran.r-project.org/web/packages/base64")
     (synopsis "Base64 encoder and decoder")
     (description
@@ -4481,24 +4400,24 @@ package instead.")
     (properties `((upstream-name . "Hmisc")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-base64enc" ,r-base64enc)
-       ("r-cluster" ,r-cluster)
-       ("r-data-table" ,r-data-table)
-       ("r-foreign" ,r-foreign)
-       ("r-formula" ,r-formula)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
-       ("r-gtable" ,r-gtable)
-       ("r-lattice" ,r-lattice)
-       ("r-latticeextra" ,r-latticeextra)
-       ("r-htmltable" ,r-htmltable)
-       ("r-htmltools" ,r-htmltools)
-       ("r-nnet" ,r-nnet)
-       ("r-rpart" ,r-rpart)
-       ("r-survival" ,r-survival)
-       ("r-viridis" ,r-viridis)))
+     (list r-base64enc
+           r-cluster
+           r-data-table
+           r-foreign
+           r-formula
+           r-ggplot2
+           r-gridextra
+           r-gtable
+           r-lattice
+           r-latticeextra
+           r-htmltable
+           r-htmltools
+           r-nnet
+           r-rpart
+           r-survival
+           r-viridis))
     (home-page "http://biostat.mc.vanderbilt.edu/Hmisc")
     (synopsis "Miscellaneous data analysis and graphics functions")
     (description
@@ -4629,9 +4548,9 @@ tests for whether a value is missing, empty or contains only @code{NA} and
          "0zwdj7lscgxr8r62ii8hbdh4mb7sa9w4f5nv32zzrxdvymcpya2b"))))
     (build-system r-build-system)
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (propagated-inputs
-     `(("r-gtools" ,r-gtools)))
+     (list r-gtools))
     (home-page "https://cran.r-project.org/web/packages/gdata")
     (synopsis "Various R programming tools for data manipulation")
     (description
@@ -4669,11 +4588,9 @@ including:
          "0f8khaymz383w2ksnk80d4kpnvgmdk37pbycpsnl2vabaz11kbpr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-catools" ,r-catools)
-       ("r-gtools" ,r-gtools)
-       ("r-kernsmooth" ,r-kernsmooth)))
+     (list r-catools r-gtools r-kernsmooth))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/gplots")
     (synopsis "Various R programming tools for plotting data")
     (description
@@ -4711,9 +4628,9 @@ including:
     (properties `((upstream-name . "ROCR")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-gplots" ,r-gplots)))
+     (list r-gplots))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://rocr.bioinf.mpi-sb.mpg.de/")
     (synopsis "Visualizing the performance of scoring classifiers")
     (description
@@ -4741,15 +4658,15 @@ mechanism.")
                 "1ps7ix0hc84s0p0ra6bkjxky3cffs1rvdcagqzj78lbdq22dk5j8"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-flextable" ,r-flextable)
-       ("r-magrittr" ,r-magrittr)
-       ("r-officer" ,r-officer)
-       ("r-rcolorbrewer" ,r-rcolorbrewer)
-       ("r-rstudioapi" ,r-rstudioapi)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)))
+     (list r-flextable
+           r-magrittr
+           r-officer
+           r-rcolorbrewer
+           r-rstudioapi
+           r-scales
+           r-stringr))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/ztable")
     (synopsis "Zebra-striped tables in LaTeX and HTML formats for R")
     (description
@@ -4830,9 +4747,7 @@ representation of R code.")
                 "0crk29p5vi1r3a988kms4y7r0iqwgwzsikgvh18r9wbzyr98bb5v"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-beeswarm" ,r-beeswarm)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-vipor" ,r-vipor)))
+     (list r-beeswarm r-ggplot2 r-vipor))
     (home-page "https://github.com/eclarke/ggbeeswarm")
     (synopsis "Categorical scatter (violin point) plots")
     (description
@@ -4853,11 +4768,7 @@ data at that region, and avoids over-plotting.")
                 "0rw5f6axyz1pqn6qx9jwm38hjzn8bqs1nfjkvm96z3xnyn61cdbv"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-purrr" ,r-purrr)
-       ("r-scales" ,r-scales)
-       ("r-stringr" ,r-stringr)
-       ("r-tibble" ,r-tibble)))
+     (list r-ggplot2 r-purrr r-scales r-stringr r-tibble))
     (home-page "https://cran.rstudio.com/web/packages/ggthemes")
     (synopsis "Extra themes, scales and geoms for @code{ggplot2}")
     (description "This package provides extra themes and scales for
@@ -4880,7 +4791,7 @@ Wall Street Journal, among others.  This package also provides
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/statmod")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Statistical modeling")
     (description
      "This package provides a collection of algorithms and functions to aid
@@ -4928,13 +4839,13 @@ approximate, exact searches, fixed radius searches, bd and kb trees.")
          "0fcc8rq745nsghp27dk0lgih90y4zx8hrzcvsn6ih786yv7qxhvl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-knitr" ,r-knitr)
-       ("r-rmarkdown" ,r-rmarkdown)
-       ("r-dplyr" ,r-dplyr)
-       ("r-readr" ,r-readr)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-magrittr" ,r-magrittr)
-       ("r-stringr" ,r-stringr)))
+     (list r-knitr
+           r-rmarkdown
+           r-dplyr
+           r-readr
+           r-ggplot2
+           r-magrittr
+           r-stringr))
     (home-page "https://mran.microsoft.com/package/fivethirtyeight/")
     (synopsis "Data and code behind the stories at FiveThirtyEight")
     (description "This R package provides access to the code and data sets
@@ -4975,12 +4886,9 @@ Farebrother's algorithm or Liu et al.'s algorithm.")
          "0j7d5vhzdxn1blrsfafx5z8lhq122rp8230hp9czrpsnnhjydp67"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ggplot2" ,r-ggplot2)
-       ("r-gtable" ,r-gtable)
-       ("r-rlang" ,r-rlang)
-       ("r-scales" ,r-scales)))
+     (list r-ggplot2 r-gtable r-rlang r-scales))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/wilkelab/cowplot")
     (synopsis "Streamlined plot theme and plot annotations for ggplot2")
     (description
@@ -5002,10 +4910,7 @@ letters, as is often required for scientific publications.")
          "08whic8hmmzi55b7azwj11l2x5r9s5qbyrv7s9jr08156vqkw0zg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-kernlab" ,r-kernlab)
-       ("r-segmented" ,r-segmented)
-       ("r-survival" ,r-survival)))
+     (list r-mass r-kernlab r-segmented r-survival))
     (home-page "https://cran.r-project.org/web/packages/mixtools")
     (synopsis "Tools for analyzing finite mixture models")
     (description
@@ -5026,7 +4931,7 @@ mixture models.")
          "0blj44wqrx6lmym1m9v6wkz8zxzbjax2zl6swgdczci0ixb5nx34"))))
     (build-system r-build-system)
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://web.stanford.edu/~hastie/Papers/LARS/")
     (synopsis "Least angle regression software")
     (description
@@ -5075,7 +4980,7 @@ perform @dfn{independent component analysis} (ICA) and projection pursuit.")
     (build-system r-build-system)
     (home-page "https://www.stat.berkeley.edu/~breiman/RandomForests/")
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (synopsis "Breiman and Cutler's random forests for classification and regression")
     (description
 "This package provides the Breiman and Cutler's random forests algorithm, based on a
@@ -5135,9 +5040,7 @@ to change in the future.")
          "0jangf89174p0idh9afbicfiln2sz8jxc3bjc6n0j9036dw9n09n"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-modeltools" ,r-modeltools)
-       ("r-nnet" ,r-nnet)))
+     (list r-lattice r-modeltools r-nnet))
     (home-page "https://cran.r-project.org/web/packages/flexmix")
     (synopsis "Flexible mixture modeling")
     (description
@@ -5161,8 +5064,7 @@ models, generalized linear models and model-based clustering.")
          "0j79a1nidwxl62x8j97k09qjxladp9irw5z1x1q5gyy6zxskvh8i"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)
-       ("r-knitr" ,r-knitr)))
+     (list gfortran r-knitr))
     (home-page "https://www.stat.washington.edu/mclust/")
     (synopsis "Gaussian mixture modelling for model-based clustering etc.")
     (description
@@ -5185,8 +5087,7 @@ and resampling-based inference.")
          "0hg4d7y1w18jpgvw10z8833bbbcnlkwiasx0wh6iwa2pnnybq8gl"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)))
+     (list r-mass r-mclust))
     (home-page "https://cran.r-project.org/web/packages/prabclus")
     (synopsis "Parametric bootstrap tests for spatial neighborhood clustering")
     (description
@@ -5232,9 +5133,9 @@ can be efficiently implemented directly in the R language.")
          "0i9wf4aq8zpn2np6z2rjja21ks9n740dgkiv0qfwdzk3ah3vapyp"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-deoptimr" ,r-deoptimr)))
+     (list r-deoptimr))
     (home-page "http://robustbase.r-forge.r-project.org/")
     (synopsis "Basic robust statistics")
     (description
@@ -5256,7 +5157,7 @@ regression methodology including model selections and multivariate statistics.")
     (properties `((upstream-name . "pcaPP")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mvtnorm" ,r-mvtnorm)))
+     (list r-mvtnorm))
     (home-page "https://cran.r-project.org/web/packages/pcaPP")
     (synopsis "Robust PCA by projection pursuit")
     (description
@@ -5277,12 +5178,9 @@ analysis} (PCA) by projection pursuit.")
          "0i69gv55c86gkclwhch0jzdfyb20l20mx1nx1xp9qz71nd4klpvr"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-pcapp" ,r-pcapp)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-lattice r-mvtnorm r-pcapp r-robustbase))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/rrcov")
     (synopsis "Scalable robust estimators with high breakdown Point")
     (description
@@ -5304,7 +5202,7 @@ estimation and robust multivariate analysis with high breakdown point.")
     (properties `((upstream-name . "fit.models")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-lattice" ,r-lattice)))
+     (list r-lattice))
     (home-page "https://cran.r-project.org/web/packages/fit.models")
     (synopsis "Compare fitted models")
     (description
@@ -5331,13 +5229,9 @@ generally.")
          "0z8i0qqlsa6vpl457qir3dlsynhjfn2g22436d776vxwyqjx4vs9"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fit-models" ,r-fit-models)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-robustbase" ,r-robustbase)
-       ("r-rrcov" ,r-rrcov)))
+     (list r-fit-models r-lattice r-mass r-robustbase r-rrcov))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/robust")
     (synopsis "Port of the S+ \"Robust Library\"")
     (description
@@ -5380,15 +5274,15 @@ of the points.")
          "0f7sfmpcycr9y7cy5gasyjm2ardxa62kglqms92mcr68jrp01c19"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)
-       ("r-cluster" ,r-cluster)
-       ("r-diptest" ,r-diptest)
-       ("r-flexmix" ,r-flexmix)
-       ("r-kernlab" ,r-kernlab)
-       ("r-mass" ,r-mass)
-       ("r-mclust" ,r-mclust)
-       ("r-prabclus" ,r-prabclus)
-       ("r-robustbase" ,r-robustbase)))
+     (list r-class
+           r-cluster
+           r-diptest
+           r-flexmix
+           r-kernlab
+           r-mass
+           r-mclust
+           r-prabclus
+           r-robustbase))
     (home-page "https://cran.r-project.org/web/packages/fpc")
     (synopsis "Flexible procedures for clustering")
     (description
@@ -5412,7 +5306,7 @@ groupings.")
     (properties `((upstream-name . "VGAM")))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://www.stat.auckland.ac.nz/~yee/VGAM")
     (synopsis "Vector generalized linear and additive models")
     (description
@@ -5456,9 +5350,9 @@ showing the progress is useful e.g. bootstrap.")
          "036drja6xz7awja9iwb76x91415p26fb0jmg7y7v0p65m6j978fg"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)))
+     (list r-rcpp))
     (inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://optimizer.r-forge.r-project.org")
     (synopsis "Derivative-free optimization algorithms by quadratic approximation")
     (description
@@ -5480,8 +5374,7 @@ based on an interface to Fortran implementations by M. J. D. Powell.")
     (properties `((upstream-name . "RcppEigen")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-matrix" ,r-matrix)))
+     (list r-rcpp r-matrix))
     (home-page "http://eigen.tuxfamily.org")
     (synopsis "Rcpp integration for the Eigen templated linear algebra library")
     (description
@@ -5505,8 +5398,7 @@ decompositions of such matrices, and solutions of linear systems.")
     (properties `((upstream-name . "ModelMetrics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-data-table" ,r-data-table)))
+     (list r-rcpp r-data-table))
     (home-page "https://cran.r-project.org/web/packages/ModelMetrics")
     (synopsis "Rapid calculation of model metrics")
     (description
@@ -5528,7 +5420,7 @@ metrics for evaluating models.")
     (properties `((upstream-name . "MatrixModels")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-matrix" ,r-matrix)))
+     (list r-matrix))
     (home-page "https://cran.r-project.org/web/packages/MatrixModels")
     (synopsis "Modelling with sparse and dense matrices")
     (description
@@ -5548,12 +5440,9 @@ using modular prediction and response module classes.")
         (base32 "01fnp6ndh7npxj76xlynndacsgmcfr9kgh2waw0clx3mmwlwilbi"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (propagated-inputs
-     `(("r-conquer" ,r-conquer)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixmodels" ,r-matrixmodels)
-       ("r-sparsem" ,r-sparsem)))
+     (list r-conquer r-matrix r-matrixmodels r-sparsem))
     (home-page "https://www.r-project.org")
     (synopsis "Quantile regression")
     (description
@@ -5577,11 +5466,10 @@ expected shortfall risk are also included.")
          "1zznk9f2w2g02zqzay21k8xqzfvc6icxfzp6bx2wpd77sm7vf25g"))))
     (build-system r-build-system)
     (native-inputs
-     `(("r-knitr" ,r-knitr) ; for building vignettes
-       ("pkg-config" ,pkg-config)
-       ("gfortran" ,gfortran)))
+     (list r-knitr ; for building vignettes
+           pkg-config gfortran))
     (inputs
-     `(("nlopt" ,nlopt)))
+     (list nlopt))
     (home-page "https://cran.r-project.org/web/packages/nloptr")
     (synopsis "R interface to NLopt")
     (description
@@ -5605,17 +5493,17 @@ algorithms.")
          "1i9f8kl2qj48j75dbn1vmwxz1xlbikdr7v2yq542w6dq74z8gyi5"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-boot" ,r-boot)
-       ("r-lattice" ,r-lattice)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-minqa" ,r-minqa)
-       ("r-nloptr" ,r-nloptr)
-       ("r-nlme" ,r-nlme)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-boot
+           r-lattice
+           r-mass
+           r-matrix
+           r-minqa
+           r-nloptr
+           r-nlme
+           r-rcpp
+           r-rcppeigen))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/lme4")
     (synopsis "Linear mixed-effects models using eigen and S4")
     (description
@@ -5638,15 +5526,15 @@ C++ library for numerical linear algebra and RcppEigen glue.")
          "1if7msv9i7jhg1as1f7m81a95dnwhwj3yfs24bqr0f6r0ch4b8xj"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-broom" ,r-broom)
-       ("r-dplyr" ,r-dplyr)
-       ("r-lme4" ,r-lme4)
-       ("r-magrittr" ,r-magrittr)
-       ("r-mass" ,r-mass)
-       ("r-matrix" ,r-matrix)
-       ("r-numderiv" ,r-numderiv)))
+     (list r-broom
+           r-dplyr
+           r-lme4
+           r-magrittr
+           r-mass
+           r-matrix
+           r-numderiv))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://people.math.aau.dk/~sorenh/software/pbkrtest/")
     (synopsis "Methods for linear mixed model comparison")
     (description
@@ -5686,18 +5574,18 @@ Companion to Applied Regression, Third Edition, Sage.")
         (base32 "00kk8l71508f73kyn21is1mx6kjbrzdq3ls94c5ajhiqmvpsd6dq"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-abind" ,r-abind)
-       ("r-cardata" ,r-cardata)
-       ("r-lme4" ,r-lme4)
-       ("r-maptools" ,r-maptools)
-       ("r-mass" ,r-mass)
-       ("r-mgcv" ,r-mgcv)
-       ("r-nlme" ,r-nlme)
-       ("r-nnet" ,r-nnet)
-       ("r-pbkrtest" ,r-pbkrtest)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-abind
+           r-cardata
+           r-lme4
+           r-maptools
+           r-mass
+           r-mgcv
+           r-nlme
+           r-nnet
+           r-pbkrtest
+           r-quantreg))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://r-forge.r-project.org/projects/car/")
     (synopsis "Companion to applied regression")
     (description
@@ -5739,7 +5627,7 @@ even in multithreaded code, typically using OpenMP.")
          "03xsvsg9bqvgl98ywid3h91mmlhax5s6wvmypp3hq91vmc5kvxlp"))))
     (properties `((upstream-name . "tmvnsim")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://www.r-project.org")
     (synopsis "Truncated multivariate normal simulation")
     (description
@@ -5768,9 +5656,9 @@ normals.")
            "0d7ka4l4fl1wi77r2r81dc91n6cbj2xrb3lsizz5y0ziscva0sjw"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-tmvnsim" ,r-tmvnsim)))
+     (list r-tmvnsim))
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "http://azzalini.stat.unipd.it/SW/Pkg-mnormt")
     (synopsis "Multivariate normal and \"t\" distributions")
     (description
@@ -5813,9 +5701,7 @@ first and second order derivatives.")
          "0sl8qzy9isy5fq8qxh1fg5285jzgy895nbgz8gdq5d0r6zdwrmmb"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-mnormt" ,r-mnormt)
-       ("r-numderiv" ,r-numderiv)
-       ("r-quantreg" ,r-quantreg)))
+     (list r-mnormt r-numderiv r-quantreg))
     (home-page "http://azzalini.stat.unipd.it/SN")
     (synopsis "The skew-normal and skew-t distributions")
     (description
@@ -5840,10 +5726,7 @@ multivariate case.")
     (build-system r-build-system)
     ;; These are all suggested packages, not build dependencies.
     (propagated-inputs
-     `(("r-cluster" ,r-cluster)
-       ("r-mclust" ,r-mclust)
-       ("r-mvtnorm" ,r-mvtnorm)
-       ("r-sn" ,r-sn)))
+     (list r-cluster r-mclust r-mvtnorm r-sn))
     (home-page "https://cran.r-project.org/web/packages/tclust")
     (synopsis "Robust trimmed clustering")
     (description
@@ -5865,9 +5748,7 @@ diagnostic tools (@code{ctlcurves} and @code{DiscrFact}).")
          "02idcc6zbdz4wsi1mcwh7qyhmlbwvnzxwkdvvppxw7n2rh54z4v0"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-rcpp" ,r-rcpp)
-       ("r-matrix" ,r-matrix)
-       ("r-rcppeigen" ,r-rcppeigen)))
+     (list r-rcpp r-matrix r-rcppeigen))
     (home-page "https://github.com/imbs-hl/ranger")
     (synopsis "Fast implementation of random forests")
     (description
@@ -5909,11 +5790,9 @@ genome-wide association studies can be analyzed efficiently.")
     (properties `((upstream-name . "Cairo")))
     (build-system r-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("libxt" ,libxt)
-       ("zlib" ,zlib)))
+     (list cairo libxt zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.rforge.net/Cairo/")
     (synopsis "R graphics device using Cairo graphics library")
     (description
@@ -5944,10 +5823,9 @@ is supported.")
          "199b00cql07gf3rf4hh5ba34amnk0ai40zhx73dq1mpkn7ynxml7"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-generics" ,r-generics)
-       ("r-cpp11" ,r-cpp11)))
+     (list r-generics r-cpp11))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://cran.r-project.org/web/packages/lubridate/")
     (synopsis "Make dealing with dates a little easier")
     (description
@@ -6000,12 +5878,9 @@ and the corresponding decision threshold.")
          "12d2nv2w15085jscgidmjdnr1ryymciflcmal6ldmgp2fkl9dyy4"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ellipsis" ,r-ellipsis)
-       ("r-magrittr" ,r-magrittr)
-       ("r-tibble" ,r-tibble)
-       ("r-rlang" ,r-rlang)))
+     (list r-ellipsis r-magrittr r-tibble r-rlang))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://forcats.tidyverse.org")
     (synopsis "Tools for working with factors")
     (description "This package provides helpers for reordering factor
@@ -6042,7 +5917,7 @@ manually \"recoding\").")
                   "#define isnan std::isnan"))
                #t)))))
       (propagated-inputs
-       `(("r-rcpp" ,r-rcpp)))
+       (list r-rcpp))
       (home-page "https://bitbucket.org/tanaylab/tgstat/")
       (synopsis "Tanay's group statistical utilities")
       (description
@@ -6068,7 +5943,7 @@ tools.")
            "0xy6c7s7mn1yx191154bwbv1bl424bnvc80syqpl1vdl28ba46rj"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-yaml" ,r-yaml)))
+       (list r-yaml))
       (home-page "https://bitbucket.org/tanaylab/tgconfig/")
       (synopsis "Infrastructure for managing package parameters")
       (description
@@ -6093,7 +5968,7 @@ parameters.")
                   "0qa8liylffpxgdg8xcgjar5dsvczqhn3akd4w35113hnyg1m4xyg"))))
       (build-system r-build-system)
       (propagated-inputs
-       `(("r-png" ,r-png)))
+       (list r-png))
       (home-page "https://github.com/Gibbsdavidl/CatterPlots")
       (synopsis "Scatter plots with cat shaped points")
       (description "Did you ever wish you could make scatter plots with cat
@@ -6145,48 +6020,37 @@ to any arbitrary string.  In this case, it is up to you to set valid values.")
           "1cysswxr5glrdblyl2zsmywcj7xhxn3wmyihxinrz9gm8gmaacax"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((cwd (getcwd)))
-               (setenv "TZ" "UTC")
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
+               (setenv "TZ" "UTC"))
              ;; test_vector_complex has issues when run in our environment.
-             (invoke "pytest" "-v" "rpy2/tests/" "-k" "not test_vector_complex"))))))
+             (invoke "pytest" "-v" "rpy2/tests/"
+                     "-k" "not test_vector_complex"))))))
     (propagated-inputs
-     `(("python-cffi" ,python-cffi)
-       ("python-six" ,python-six)
-       ("python-jinja2" ,python-jinja2)
-       ("python-numpy" ,python-numpy)
-       ("python-pandas" ,python-pandas)
-       ("python-pytz" ,python-pytz)
-       ("python-ipython" ,python-ipython)
-       ("python-tzlocal" ,python-tzlocal)))
+     (list python-cffi
+           python-six
+           python-jinja2
+           python-numpy
+           python-pandas
+           python-pytz
+           python-ipython
+           python-tzlocal))
     (inputs
-     `(("readline" ,readline)
-       ("icu4c" ,icu4c)
-       ("pcre" ,pcre)
-       ("r-minimal" ,r-minimal)
-       ("r-survival" ,r-survival)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-dplyr" ,r-dplyr)
-       ("r-dbplyr" ,r-dbplyr)
-       ("python-numpy" ,python-numpy)))
+     (list readline
+           icu4c
+           pcre
+           r-minimal
+           r-survival
+           r-ggplot2
+           r-rsqlite
+           r-dplyr
+           r-dbplyr
+           python-numpy))
     (native-inputs
-     `(("zlib" ,zlib)
-       ("python-pytest" ,python-pytest)))
+     (list zlib python-pytest))
     (home-page "https://rpy2.github.io")
     (synopsis "Python interface to the R language")
     (description "rpy2 is a redesign and rewrite of rpy.  It is providing a
@@ -6223,9 +6087,9 @@ functions.")
                  (("Scheff.+-Tukey") "Scheffe-Tukey")))
              #t)))))
     (propagated-inputs
-     `(("java-jtransforms" ,java-jtransforms)))
+     (list java-jtransforms))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://jdistlib.sourceforge.net/")
     (synopsis "Java library of statistical distributions")
     (description "JDistlib is the Java Statistical Distribution Library, a
@@ -6299,14 +6163,12 @@ Java package that provides routines for various statistical distributions.")
              (replace 'check
                (lambda _ (invoke "make" "test")))))))
       (native-inputs
-       `(("perl" ,perl)
-         ("r-roxygen2" ,r-roxygen2)
-         ("texinfo" ,texinfo)))
+       (list perl r-roxygen2 texinfo))
       (inputs
        `(("emacs" ,emacs-minimal)
          ("r-minimal" ,r-minimal)))
       (propagated-inputs
-       `(("emacs-julia-mode" ,emacs-julia-mode)))
+       (list emacs-julia-mode))
       (home-page "https://ess.r-project.org/")
       (synopsis "Emacs mode for statistical analysis programs")
       (description
@@ -6330,10 +6192,8 @@ statistical analysis programs such as R, Julia, and JAGS.")
         (base32 "0a4wx73jkngw5nbq1fa4jfhba6bsmyn6vnsf887x3xhb5v3ykhsg"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-ess" ,emacs-ess)
-       ("emacs-poly-noweb" ,emacs-poly-noweb)
-       ("emacs-polymode-markdown" ,emacs-polymode-markdown)
-       ("emacs-polymode" ,emacs-polymode)))
+     (list emacs-ess emacs-poly-noweb emacs-polymode-markdown
+           emacs-polymode))
     (properties '((upstream-name . "poly-R")))
     (home-page "https://github.com/polymode/poly-markdown")
     (synopsis "Polymodes for the R language")
@@ -6357,12 +6217,9 @@ files, including Rmarkdown files.")
         (base32 "00sdmaq0qzp6kyv53fpfi6jf3iv4pd0ap0gmw3mbfip52bbnl55w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gnu-gettext)
-       ("libtool" ,libtool)))
+     (list autoconf automake gnu-gettext libtool))
     (inputs
-     `(("zlib" ,zlib)))                 ; libz
+     (list zlib))                 ; libz
     (synopsis "Convert SAS, Stata, and SPSS files")
     (description "Command-line tool and C library for reading files from
 popular stats packages like SAS, Stata and SPSS.")
@@ -6383,7 +6240,7 @@ popular stats packages like SAS, Stata and SPSS.")
     (properties `((upstream-name . "QuantPsyc")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-boot" ,r-boot) ("r-mass" ,r-mass)))
+      (list r-boot r-mass))
     (home-page "https://cran.r-project.org/web/packages/QuantPsyc/")
     (synopsis "Quantitative Psychology Tools")
     (description
@@ -6405,8 +6262,8 @@ mediation and estimating power.")
     (properties `((upstream-name . "clubSandwich")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-sandwich" ,r-sandwich)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+     (list r-sandwich))
+    (native-inputs (list r-knitr))
     (home-page "https://github.com/jepusto/clubSandwich")
     (synopsis "Cluster-Robust (Sandwich) Variance Estimators with Small-Sample
 Corrections")
@@ -6443,10 +6300,7 @@ Methods are provided for a variety of fitted models, including @code{lm()} and
     (properties `((upstream-name . "puniform")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-adgoftest" ,r-adgoftest)
-       ("r-metafor" ,r-metafor)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+     (list r-adgoftest r-metafor r-rcpp r-rcpparmadillo))
     (home-page
      "https://github.com/RobbievanAert/puniform")
     (synopsis
@@ -6536,7 +6390,7 @@ or eta squared effect size.")
     (properties `((upstream-name . "kknn")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-igraph" ,r-igraph) ("r-matrix" ,r-matrix)))
+      (list r-igraph r-matrix))
     (home-page "https://github.com/KlausVigo/kknn")
     (synopsis "Weighted k-Nearest Neighbors")
     (description
@@ -6556,7 +6410,7 @@ or eta squared effect size.")
             "12hkdi77vkic05p2vhap025xdcg1n53ywm239v18713pihdlj63l"))))
     (properties `((upstream-name . "logspline")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page
       "https://cran.r-project.org/web/packages/logspline/")
     (synopsis
@@ -6583,17 +6437,16 @@ interface).  The recommended routine @code{logspline()} uses an algorithm from
     (properties `((upstream-name . "effects")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-cardata" ,r-cardata)
-        ("r-colorspace" ,r-colorspace)
-        ("r-estimability" ,r-estimability)
-        ("r-insight" ,r-insight)
-        ("r-lattice" ,r-lattice)
-        ("r-lme4" ,r-lme4)
-        ("r-nnet" ,r-nnet)
-        ("r-survey" ,r-survey)))
+      (list r-cardata
+            r-colorspace
+            r-estimability
+            r-insight
+            r-lattice
+            r-lme4
+            r-nnet
+            r-survey))
     (native-inputs
-      `(("r-knitr" ,r-knitr)
-        ("r-car", r-car)))
+      (list r-knitr r-car))
     (home-page "https://www.r-project.org")
     (synopsis
       "Effect Displays for Linear, Generalized Linear, and Other Models")
@@ -6616,17 +6469,17 @@ various statistical models with linear predictors.")
     (properties `((upstream-name . "BayesFactor")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-coda" ,r-coda)
-        ("r-gtools" ,r-gtools)
-        ("r-hypergeo" ,r-hypergeo)
-        ("r-matrix" ,r-matrix)
-        ("r-matrixmodels" ,r-matrixmodels)
-        ("r-mvtnorm" ,r-mvtnorm)
-        ("r-pbapply" ,r-pbapply)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rcppeigen" ,r-rcppeigen)
-        ("r-stringr" ,r-stringr)))
-    (native-inputs `(("r-knitr" ,r-knitr)))
+      (list r-coda
+            r-gtools
+            r-hypergeo
+            r-matrix
+            r-matrixmodels
+            r-mvtnorm
+            r-pbapply
+            r-rcpp
+            r-rcppeigen
+            r-stringr))
+    (native-inputs (list r-knitr))
     (home-page
       "https://richarddmorey.github.io/BayesFactor/")
     (synopsis
@@ -6649,7 +6502,7 @@ designs, one-way designs, general ANOVA designs, and linear regression.")
                 "01j1h412yfjx5r4dd0w8rhlf55997spgb6zd6pawy19rgw0byp1h"))))
     (build-system r-build-system)
     (native-inputs
-     `(("gfortran" ,gfortran)))
+     (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/norm/")
     (synopsis "Analysis of multivariate normal datasets with missing values")
     (description "Multiple imputation of multivariate continuous data under a
@@ -6669,21 +6522,21 @@ normal model.")
                 "0l3l2x85v3srilww483kpgp4zlwixyml257b0cqly8kcpwawlinm"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-dplyr" ,r-dplyr)
-       ("r-norm" ,r-norm)
-       ("r-forcats" ,r-forcats)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-glue" ,r-glue)
-       ("r-magrittr" ,r-magrittr)
-       ("r-purrr" ,r-purrr)
-       ("r-rlang" ,r-rlang)
-       ("r-tibble" ,r-tibble)
-       ("r-tidyr" ,r-tidyr)
-       ("r-upsetr" ,r-upsetr)
-       ("r-viridis" ,r-viridis)
-       ("r-visdat" ,r-visdat)))
+     (list r-dplyr
+           r-norm
+           r-forcats
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-purrr
+           r-rlang
+           r-tibble
+           r-tidyr
+           r-upsetr
+           r-viridis
+           r-visdat))
     (native-inputs
-     `(("r-knitr" ,r-knitr)))
+     (list r-knitr))
     (home-page "https://github.com/njtierney/naniar")
     (synopsis
      "Data structures, summaries, and visualisations for missing data")
@@ -6732,7 +6585,7 @@ Michael Lim & Trevor Hastie (2015)")
             "1w1yhwwrmh95bklacz44wjwynxd8cj3z8b9zvsnzmk18m5a4k0fl"))))
     (properties `((upstream-name . "datasauRus")))
     (build-system r-build-system)
-    (native-inputs `(("r-knitr" ,r-knitr)))
+    (native-inputs (list r-knitr))
     (home-page
       "https://github.com/lockedata/datasauRus")
     (synopsis "Datasets from the Datasaurus Dozen")
@@ -6763,7 +6616,7 @@ Annealing\" @url{doi:10.1145/3025453.3025912}.")
           (base32 "1lnj41gynaar5isyijg5nbll64qdxa12dnqvz7lxhaclqcjskqna"))))
     (properties `((upstream-name . "lmom")))
     (build-system r-build-system)
-    (native-inputs `(("gfortran" ,gfortran)))
+    (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/package=lmom")
     (synopsis "L-Moments for R")
     (description
@@ -6785,7 +6638,7 @@ extreme-value distribution.")
           (base32 "1wrw7i5bq7rb2ahadm57y9fmr697r7lp9ln7ajcd592b0nn60n4i"))))
     (properties `((upstream-name . "gld")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-e1071" ,r-e1071) ("r-lmom" ,r-lmom)))
+    (propagated-inputs (list r-e1071 r-lmom))
     (home-page
       "https://cran.r-project.org/package=gld")
     (synopsis
@@ -6818,7 +6671,7 @@ L-Moments and Distributional Least Absolutes.")
           (base32 "0acm01njg3arlzwknv5v1sdsz5ab0bdh04sn1bmf91hcg3li8qd7"))))
     (properties `((upstream-name . "Exact")))
     (build-system r-build-system)
-    (propagated-inputs `(("r-rootsolve" ,r-rootsolve)))
+    (propagated-inputs (list r-rootsolve))
     (home-page "https://cran.r-project.org/package=Exact")
     (synopsis "Unconditional Exact Test")
     (description
@@ -6848,17 +6701,17 @@ Calculates confidence intervals for the difference in proportion.")
     (properties `((upstream-name . "DescTools")))
     (build-system r-build-system)
     (propagated-inputs
-      `(("r-bh" ,r-bh)
-        ("r-boot" ,r-boot)
-        ("r-data-table" ,r-data-table)
-        ("r-exact" ,r-exact)
-        ("r-expm" ,r-expm)
-        ("r-gld" ,r-gld)
-        ("r-mass" ,r-mass)
-        ("r-mvtnorm" ,r-mvtnorm)
-        ("r-rcpp" ,r-rcpp)
-        ("r-rstudioapi" ,r-rstudioapi)))
-    (native-inputs `(("gfortran" ,gfortran)))
+      (list r-bh
+            r-boot
+            r-data-table
+            r-exact
+            r-expm
+            r-gld
+            r-mass
+            r-mvtnorm
+            r-rcpp
+            r-rstudioapi))
+    (native-inputs (list gfortran))
     (home-page "https://andrisignorell.github.io/DescTools/")
     (synopsis "Tools for Descriptive Statistics")
     (description
@@ -6908,15 +6761,15 @@ from contributed R packages as well.")
                  (with-output-to-file "exit.lsp"
                    (lambda () (display "(exit)")))
                  (invoke "./xlisp" "tests/test" "exit")))))))
-      (inputs `(("tcsh" ,tcsh)
-	        ("libx11" ,libx11)
-	        ("libxmu" ,libxmu)
-	        ("libxext" ,libxext)
-	        ("libxpm" ,libxpm)
-	        ("libxaw" ,libxaw)
-	        ("ncurses" ,ncurses)
-	        ("gnuplot" ,gnuplot)))
-      (native-inputs `(("pkg-config" ,pkg-config)))
+      (inputs (list tcsh
+                    libx11
+                    libxmu
+                    libxext
+                    libxpm
+                    libxaw
+                    ncurses
+                    gnuplot))
+      (native-inputs (list pkg-config))
       (synopsis "Statistical analysis environment with interactive graphics")
       (description "XLISP-STAT is a statistical environment based on a Lisp
 dialect called XLISP.  To facilitate statistical computations, standard
diff --git a/gnu/packages/stb.scm b/gnu/packages/stb.scm
index 094ece536d..4ee1b4ebd2 100644
--- a/gnu/packages/stb.scm
+++ b/gnu/packages/stb.scm
@@ -75,7 +75,7 @@ the C programming language.")
     (name name)
     (version version)
     (source #f)
-    (inputs `(("stb" ,stb)))
+    (inputs (list stb))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
diff --git a/gnu/packages/stenography.scm b/gnu/packages/stenography.scm
index 979b2c29ef..969395cbcf 100644
--- a/gnu/packages/stenography.scm
+++ b/gnu/packages/stenography.scm
@@ -45,18 +45,16 @@
         (base32 "1b2ys77bkjsdmyg97i7lq3lj45q56bycvsm06d4rs656kxhvc0a3"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-mock python-pytest python-setuptools-scm))
     (inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-pyqt" ,python-pyqt)
-       ("python-babel" ,python-babel)
-       ("python-dbus" ,python-dbus)
-       ("python-hidapi" ,python-hidapi)
-       ("python-pyserial" ,python-pyserial)
-       ("python-wxpython" ,python-wxpython)
-       ("python-xlib" ,python-xlib)))
+     (list python-appdirs
+           python-pyqt
+           python-babel
+           python-dbus
+           python-hidapi
+           python-pyserial
+           python-wxpython
+           python-xlib))
     (home-page "https://www.openstenoproject.org/plover/")
     (synopsis "Stenography engine")
     (description
diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm
index 4dfae1e80e..094d7ade74 100644
--- a/gnu/packages/storage.scm
+++ b/gnu/packages/storage.scm
@@ -39,6 +39,7 @@
   #:use-module (gnu packages disk)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
@@ -46,9 +47,11 @@
   #:use-module (gnu packages nss)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml))
@@ -56,18 +59,19 @@
 (define-public ceph
   (package
     (name "ceph")
-    (version "14.2.16")
+    (version "16.2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.ceph.com/tarballs/ceph-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0lmdri415hqczc9565s5m5568pnj97ipqxgnw6085kps0flwq5zh"))
+                "104xmc84d4ycdn7f4z09kvzwl1vlywxp3hbfxhgq0kcmgikb4wad"))
               (patches
                (search-patches
                 "ceph-disable-cpu-optimizations.patch"
-                "ceph-fix-snappy-breaking-change.patch"))
+                "ceph-boost-compat.patch"
+                "ceph-rocksdb-compat.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -78,9 +82,8 @@
                               ;"src/xxHash"
                               ;"src/zstd"
                               ;"src/civetweb"
-                              ;"src/seastar/fmt"
-                              "src/test/downloads"
                               "src/c-ares"
+                              "src/fmt"
                               "src/googletest"
                               "src/rapidjson"
                               "src/spdk"
@@ -113,7 +116,7 @@
                "-DBUILD_SHARED_LIBS=ON"
                "-DWITH_SYSTEM_ROCKSDB=ON"
                "-DWITH_SYSTEM_BOOST=ON"
-               "-DWITH_PYTHON3=ON"
+
                ;; TODO: Enable these when available in Guix.
                "-DWITH_MGR_DASHBOARD_FRONTEND=OFF"       ;requires node + nodeenv
                "-DWITH_BABELTRACE=OFF"
@@ -124,6 +127,9 @@
                ;; Use jemalloc instead of tcmalloc.
                "-DALLOCATOR=jemalloc"
 
+               ;; Don't install systemd unit files.
+               "-DWITH_SYSTEMD=OFF"
+
                ;; Do not bother building the tests; we are not currently running
                ;; them, and they do not build with system googletest as of 14.2.5.
                "-DWITH_TESTS=OFF"))
@@ -141,15 +147,12 @@
                (substitute* "cmake/modules/Distutils.cmake"
                  ;; Prevent creation of Python eggs.
                  (("setup.py install")
-                  "setup.py install --single-version-externally-managed --root=/"))
-
-               (substitute* (find-files "src/pybind" "^setup\\.py$")
-                 ;; Here we inject an extra line to the `setup.py' of the
+                  "setup.py install --single-version-externally-managed --root=/")
+                 ;; Inject the -rpath linker argument when linking
                  ;; Python C libraries so RUNPATH gets set up correctly.
-                 (("^([[:blank:]]+)extra_compile_args=(.*)$" _ indent args)
-                  (string-append indent "extra_compile_args=" args
-                                 indent "extra_link_args=['-Wl,-rpath="
-                                 lib "/lib'],\n")))
+                 (("LDFLAGS=(.*)\n" _ flags)
+                  (string-append "LDFLAGS=\\\"" flags
+                                 " -Wl,-rpath=" lib "/lib\\\"\n")))
 
                ;; Statically link libcrc32 because it does not get installed,
                ;; yet several libraries end up referring to it.
@@ -159,8 +162,7 @@
 
                (substitute* "udev/50-rbd.rules"
                  (("/usr/bin/ceph-rbdnamer")
-                  (string-append out "/bin/ceph-rbdnamer")))
-               #t)))
+                  (string-append out "/bin/ceph-rbdnamer"))))))
          (add-before 'install 'set-install-environment
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -171,46 +173,39 @@
                                     "/site-packages")))
                ;; The Python install scripts refuses to function if
                ;; the install directory is not on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH")))
-               #t)))
+               (setenv "PYTHONPATH" py3sitedir))))
          (add-after 'install 'wrap-python-scripts
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (scripts '("ceph" "ceph-mgr" "ceph-volume"))
-                    (prettytable (assoc-ref inputs "python-prettytable"))
-                    (six (assoc-ref inputs "python-six"))
+                    (scripts '("bin/ceph" "bin/cephfs-top" "sbin/ceph-volume"))
+                    (dependencies (map (lambda (input)
+                                         (assoc-ref inputs input))
+                                       '("python-prettytable" "python-pyyaml")))
                     (sitedir (lambda (package)
                                (string-append package
                                               "/lib/python"
                                               ,(version-major+minor
                                                 (package-version python))
                                               "/site-packages")))
-                    (PYTHONPATH (string-append
-                                 (sitedir out) ":"
-                                 (sitedir six) ":"
-                                 (sitedir prettytable))))
+                    (PYTHONPATH (string-join (map sitedir (cons out dependencies))
+                                             ":")))
                (for-each (lambda (executable)
-                           (wrap-program (string-append out "/bin/" executable)
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
-                         scripts)
-               #t))))))
+                           (wrap-program (string-append out "/" executable)
+                             `("GUIX_PYTHONPATH" ":" prefix (,PYTHONPATH))))
+                         scripts)))))))
     (outputs
      '("out" "lib"))
     (native-inputs
-     `(("gperf" ,gperf)
-       ("pkg-config" ,pkg-config)
-       ("python-cython" ,python-cython)
-       ("python-sphinx" ,python-sphinx)
-       ("yasm" ,yasm)))
+     (list gperf pkg-config python-cython python-sphinx yasm))
     (inputs
      `(("boost" ,boost)
        ("curl" ,curl)
        ("cryptsetup" ,cryptsetup)
        ("expat" ,expat)
        ("fcgi" ,fcgi)
+       ("fmt" ,fmt)
        ("fuse" ,fuse)
+       ("icu4c" ,icu4c)
        ("jemalloc" ,jemalloc)
        ("keyutils" ,keyutils)
        ("leveldb" ,leveldb)
@@ -227,12 +222,13 @@
        ("ncurses" ,ncurses)
        ("nss" ,nss)
        ("python-prettytable" ,python-prettytable) ;used by ceph_daemon.py
-       ("python-six" ,python-six)                 ;for ceph-mgr + plugins
-       ("python" ,python-wrapper)
+       ("python-pyyaml" ,python-pyyaml)           ;from python-common/setup.py
+       ("python" ,python)
        ("rapidjson" ,rapidjson)
        ("rdma-core" ,rdma-core)
        ("rocksdb" ,rocksdb)
        ("snappy" ,snappy)
+       ("sqlite" ,sqlite)
        ("udev" ,eudev)
        ("util-linux" ,util-linux)
        ("util-linux:lib" ,util-linux "lib")
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index e22880e78e..51757407e1 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -259,10 +259,7 @@ a custom raw video format with a simple container.")
                     output)))
               #t))))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)))
+     (list freetype libx11 libxft libxinerama))
     (home-page "https://dwm.suckless.org/")
     (synopsis "Dynamic window manager")
     (description
@@ -294,10 +291,7 @@ optimising the environment for the application in use and the task performed.")
        #:phases
        (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("freetype" ,freetype)
-       ("libxft" ,libxft)
-       ("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list freetype libxft libx11 libxinerama))
     (home-page "https://tools.suckless.org/dmenu/")
     (synopsis "Dynamic menu")
     (description
@@ -324,10 +318,8 @@ numbers of user-defined menu items efficiently.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" %output))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)
-       ("alsa-lib" ,alsa-lib)           ; tinyalsa (unpackaged) would suffice
-       ("libmpdclient" ,libmpdclient)))
+     (list libx11 libxkbfile alsa-lib ; tinyalsa (unpackaged) would suffice
+           libmpdclient))
     (home-page "https://git.2f30.org/spoon/")
     (synopsis "Set dwm status")
     (description
@@ -353,10 +345,7 @@ numbers of user-defined menu items efficiently.")
              (string-append "PREFIX=" %output))
        #:phases (modify-phases %standard-phases (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)))
+     (list libx11 libxext libxinerama libxrandr))
     (home-page "https://tools.suckless.org/slock/")
     (synopsis "Simple X session lock")
     (description
@@ -392,8 +381,8 @@ numbers of user-defined menu items efficiently.")
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)))
     (native-inputs
-     `(("ncurses" ,ncurses) ;provides tic program
-       ("pkg-config" ,pkg-config)))
+     (list ncurses ;provides tic program
+           pkg-config))
     (home-page "https://st.suckless.org/")
     (synopsis "Simple terminal emulator")
     (description
@@ -427,18 +416,18 @@ drawing.")
          (add-before 'build 'set-dmenu-and-xprop-file-name
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "config.def.h"
-               (("dmenu") (string-append (assoc-ref inputs "dmenu") "/bin/dmenu"))
-               (("xprop") (string-append (assoc-ref inputs "xprop") "/bin/xprop")))
+               (("dmenu") (search-input-file inputs "/bin/dmenu"))
+               (("xprop") (search-input-file inputs "/bin/xprop")))
              #t)))))
     (inputs
      `(("dmenu" ,dmenu)
        ("gcr" ,gcr)
        ("glib-networking" ,glib-networking)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("xprop" ,xprop)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://surf.suckless.org/")
     (synopsis "Simple web browser")
     (description
@@ -474,7 +463,7 @@ point surf to another URI by setting its XProperties.")
                (string-append "INCS=-I. " (pkg-config "--cflags"))
                (string-append "LIBS=" (pkg-config "--libs") " -lm")))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libpng" ,libpng)
        ("libx11" ,libx11)
@@ -510,7 +499,7 @@ few minutes.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://tools.suckless.org/x/wmname/")
     (synopsis "Print or set the window manager name")
     (description "@command{wmname} prints/sets the window manager name
@@ -538,7 +527,7 @@ assuming a reparenting window manager for instance.")
        (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" %output))))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://git.2f30.org/xbattmon/")
     (synopsis "Simple battery monitor for X")
     (description
@@ -656,8 +645,7 @@ left.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("cups-minimal" ,cups-minimal)
-       ("zlib" ,zlib)))
+     (list cups-minimal zlib))
     (home-page "https://git.2f30.org/prout/")
     (synopsis "Smaller lp command")
     (description
@@ -693,7 +681,7 @@ cups server to be installed.")
              (substitute* "Makefile"
                (("lcurses") "lncurses")))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://git.2f30.org/noice/")
     (synopsis "Small file browser")
     (description
@@ -796,7 +784,7 @@ initially intended to be used on musl-based Linux distributions.
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("libpng" ,libpng)))
+     (list libpng))
     (home-page "https://git.2f30.org/colors/")
     (synopsis "Extract colors from pictures")
     (description
@@ -834,7 +822,7 @@ colormap to stdout.")
          (modify-phases %standard-phases
            (delete 'configure))))       ; no configure script
       (inputs
-       `(("gawk" ,gawk)))
+       (list gawk))
       (home-page "https://github.com/cls/libutf")
       (synopsis "Plan 9 compatible UTF-8 library")
       (description
@@ -892,10 +880,7 @@ as -1, to be used instead of U+FFFD.
                  (install-file "lchat.1" man1)
                  #t))))))
       (inputs
-       `(("grep" ,grep)
-         ("ncurses" ,ncurses)
-         ("libutf" ,libutf)
-         ("libbsd" ,libbsd)))
+       (list grep ncurses libutf libbsd))
       (home-page "https://github.com/younix/lchat")
       (synopsis "Line chat is a frontend for the irc client ii from suckless")
       (description
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index 86c1407da9..1f4bd0922a 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
@@ -35,7 +35,7 @@
 (define-public swig
   (package
     (name "swig")
-    (version "4.0.1")
+    (version "4.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/" name "/" name "/"
@@ -43,25 +43,15 @@
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
-               "1ac7g0gd8ndwv3ybqn5vjgqxa7090bby4db164a7mn9ssp8b803s"))))
+               "1z06m5zv87mha6hvys1iay810ghc1jngilfby1ms2n4d1mryjfym"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'workaround-gcc-bug
-           (lambda _
-             ;; XXX: Don't add the -isystem flag, or GCCs #include_next
-             ;; won't be able to find <stdlib.h>.
-             (substitute* "configure"
-               (("-isystem ") "-I"))
-             #t)))))
-    (native-inputs `(("boost" ,boost)
-                     ("pcre" ,pcre "bin")       ;for 'pcre-config'
-                     ;; The following are for tests and examples:
-                     ("guile" ,guile-3.0)
-                     ("perl" ,perl)))
+    (native-inputs (list boost
+                         `(,pcre "bin") ;for 'pcre-config'
+                         ;; The following are for tests and examples:
+                         guile-3.0
+                         perl))
                      ;;("python" ,python-wrapper)
-    (inputs `(("pcre" ,pcre)))
+    (inputs (list pcre))
     (home-page "http://swig.org/")
     (synopsis
      "Interface compiler that connects C/C++ code to higher-level languages")
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index e9fc913ad5..ce815ed5c7 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -156,9 +156,8 @@
                (("ON CACHE") "OFF CACHE"))
              (substitute* "src/gui/CMakeLists.txt"
                (("@kwidgetsaddons@")
-                (string-append (assoc-ref inputs "kwidgetsaddons")
-                               "/include/KF5/KWidgetsAddons/")))
-             #t))
+                (search-input-directory inputs
+                                        "/include/KF5/KWidgetsAddons/")))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests write to $HOME.
@@ -180,33 +179,32 @@
        ("qttools" ,qttools)
        ("ruby" ,ruby)))
     (inputs
-     `(("appstream" ,appstream)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("glib" ,glib)
-       ("kconfig" ,kconfig)
-       ("kcoreaddons" ,kcoreaddons)
-       ("kio" ,kio)
-       ("kjs" ,kjs)
-       ("kwidgetsaddons" ,kwidgetsaddons)
-       ("libcloudproviders" ,libcloudproviders)
-       ("libzip" ,libzip)
-       ("openssl" ,openssl)
-       ("python-nautilus" ,python-nautilus)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtkeychain" ,qtkeychain)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsolutions" ,qtsolutions)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtwebkit" ,qtwebkit)
-       ("sqlite" ,sqlite)
-       ("xdg-utils" ,xdg-utils)
-       ("zlib" ,zlib)))
+     (list appstream
+           desktop-file-utils
+           glib
+           kconfig
+           kcoreaddons
+           kio
+           kjs
+           kwidgetsaddons
+           libcloudproviders
+           libzip
+           openssl
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtkeychain
+           qtquickcontrols2
+           qtsolutions
+           qtsvg
+           qtwebchannel
+           qtwebsockets
+           qtwebkit
+           sqlite
+           xdg-utils
+           zlib))
     (propagated-inputs
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (synopsis "Desktop sync client for Nextcloud")
     (description "Nextcloud-Desktop is a tool to synchronize files from
 Nextcloud Server with your computer.")
@@ -237,9 +235,7 @@ Nextcloud Server with your computer.")
      `(#:tests? #f
        #:configure-flags '("--with-pcre")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (inputs
      `(("c-ares" ,c-ares)
        ("crypto++" ,crypto++)
@@ -287,13 +283,11 @@ distributions.")
                                           "/etc/bash_completion.d"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For documentation
-       ("asciidoc" ,asciidoc)))
+     (list pkg-config
+           ;; For documentation
+           asciidoc))
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("openssl" ,openssl)))
+     (list curl glib openssl))
     (home-page "https://megatools.megous.com/")
     (synopsis "Command line client application for mega.nz")
     (description "Megatools is a collection of programs for accessing the mega.nz service
@@ -358,10 +352,7 @@ See also: megacmd, the official tool set by MEGA.")
        ("pkg-config" ,pkg-config)
        ("qtlinguist" ,qttools)))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtkeychain" ,qtkeychain)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list qtbase-5 qtkeychain sqlite zlib))
     (home-page "https://owncloud.org")
     (synopsis "Folder synchronization with an ownCloud server")
     (description "The ownCloudSync system lets you always have your latest
@@ -403,8 +394,7 @@ silently and reliably flow across to every other.")
                #t))))
        #:tests? #f)) ; no test target
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtwebkit" ,qtwebkit)))
+     (list qtbase-5 qtwebkit))
     (home-page "https://github.com/sieren/QSyncthingTray")
     (synopsis "Traybar Application for Syncthing")
     (description
@@ -467,7 +457,7 @@ their folder.
                (install-file "../source/doc/manpage/lsyncd.1" man)
                #t))))))
     (native-inputs
-     `(("lua" ,lua-5.2)))
+     (list lua-5.2))
     (home-page "https://github.com/axkibe/lsyncd")
     (synopsis "Synchronize local directories with remote targets")
     (description "Lsyncd watches a local directory trees event monitor
@@ -496,10 +486,9 @@ and does not hamper local file system performance.")
           (base32 "16i1q8f0jmfd43rb8d70l2b383vr5ib4kh7iq3yd345q7xjz9c2j"))))
       (build-system copy-build-system)
       (inputs
-       `(("scsh" ,scsh)))
+       (list scsh))
       (propagated-inputs
-       `(("rsync" ,rsync)
-         ("unison" ,unison)))
+       (list rsync unison))
       (arguments
        `(#:install-plan '(("usync" "bin/usync"))
          #:phases (modify-phases %standard-phases
@@ -533,18 +522,16 @@ written in @command{scsh}.  It makes use of @command{unison} and
               (patches (search-patches "casync-renameat2-declaration.patch"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("rsync" ,rsync)))                         ;for tests
+     (list pkg-config python-sphinx rsync))                         ;for tests
     (inputs
-     `(("xz" ,xz)                                 ;for liblzma
-       ("zstd" ,zstd "lib")
-       ("curl" ,curl)
-       ("acl" ,acl)
-       ("libselinux" ,libselinux)
-       ("fuse" ,fuse)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list xz ;for liblzma
+           `(,zstd "lib")
+           curl
+           acl
+           libselinux
+           fuse
+           openssl
+           zlib))
     (synopsis "File synchronization and backup system")
     (description
      "casync is a @dfn{content-addressable data synchronizer} that can be used
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 8ae3c3d840..c93628214a 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -184,17 +184,16 @@ Protocol.")
                    `("GI_TYPELIB_PATH" ":" prefix
                      (,(getenv "GI_TYPELIB_PATH"))))))))))
       (inputs
-       `(("gtk+" ,gtk+)
-         ("libappindicator" ,libappindicator)
-         ("libnotify" ,libnotify)
-         ("librsvg" ,librsvg)
-         ("python-bcrypt" ,python-bcrypt)
-         ("python-dateutil" ,python-dateutil)
-         ("python-pycairo" ,python-pycairo)
-         ("python-pygobject" ,python-pygobject)
-         ("python-nautilus" ,python-nautilus)
-         ("psmisc" ,psmisc)
-         ("syncthing" ,syncthing)))
+       (list gtk+
+             libappindicator
+             libnotify
+             librsvg
+             python-bcrypt
+             python-dateutil
+             python-pycairo
+             python-pygobject
+             psmisc
+             syncthing))
       ;; (native-inputs
       ;;  `(("python2-setuptools" ,python2-setuptools)))
       (home-page "https://github.com/syncthing/syncthing-gtk")
@@ -249,8 +248,7 @@ firewall.")
                 "1m1xna1kb78pkmr1lfmvvnpk9j7c4x71j3a7c6vj7zpzc4srpsmf"))))
     (build-system go-build-system)
     (inputs
-     `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
+     (list go-github-com-pkg-errors go-github-com-urfave-cli))
     (arguments
      `(#:import-path "github.com/AudriusButkevicius/recli"))
     (synopsis "Reflection-based CLI generator")
@@ -486,9 +484,7 @@ database/sql package.")
                 "1jj4rbdpy87rbl79czg5hs5dyn6xlbnk0bnvyzi71dsxan57nixw"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-oschwald-maxminddb-golang"
-        ,go-github-com-oschwald-maxminddb-golang)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-github-com-oschwald-maxminddb-golang go-golang-org-x-sys))
     (arguments
      `(#:import-path "github.com/oschwald/geoip2-golang"
        #:tests? #f)) ; Requires some unpackaged software and test data
@@ -513,7 +509,7 @@ GeoLite2 and GeoIP2 databases in Go.")
                 "100wd5qv00pkcm6cb8c4x5gavc9jnn7drh6xrqh85hzci4rils66"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-golang-org-x-sys))
     (arguments
      `(#:import-path "github.com/oschwald/maxminddb-golang"
        #:tests? #f)) ; Requires some unpackaged software and test data
@@ -570,7 +566,7 @@ higher-level API for doing so.")
                                                       (%current-system))))
          #:import-path "github.com/rcrowley/go-metrics"))
       (propagated-inputs
-       `(("go-github-com-stathat-go" ,go-github-com-stathat-go)))
+       (list go-github-com-stathat-go))
       (synopsis "Go port of Coda Hale's Metrics library")
       (description "This package provides a Go implementation of Coda Hale's
 Metrics library.")
@@ -594,7 +590,7 @@ Metrics library.")
     (arguments
      `(#:import-path "github.com/sasha-s/go-deadlock"))
     (propagated-inputs
-     `(("go-github-com-petermattis-goid" ,go-github-com-petermattis-goid)))
+     (list go-github-com-petermattis-goid))
     (synopsis "Deadlock detection in go")
     (description "This package provides tools for detecting deadlocks at
 run-time in Go.")
@@ -618,7 +614,7 @@ run-time in Go.")
                   "0mnkzrz4di13g6ggd54my7bkb9nwk8f5k672dyasn467wsg7bf8f"))))
       (build-system go-build-system)
       (propagated-inputs
-       `(("go-github-com-golang-snappy" ,go-github-com-golang-snappy)))
+       (list go-github-com-golang-snappy))
       (arguments
        `(#:import-path "github.com/syndtr/goleveldb/leveldb"
          #:unpack-path "github.com/syndtr/goleveldb"
@@ -778,7 +774,7 @@ using sh's word-splitting rules.")
       (arguments
        '(#:import-path "github.com/syncthing/notify"))
       (propagated-inputs
-       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+       (list go-golang-org-x-sys))
       (synopsis "File system event notification library")
       (description "This package provides @code{notify}, a file system event
 notification library in Go.")
@@ -835,8 +831,7 @@ bounds.")
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)))
+       (list go-github-com-golang-protobuf-proto))
       (synopsis "Data model artifacts for Prometheus")
       (description "This package provides data model artifacts for Prometheus.")
       (home-page "https://github.com/prometheus/client_model")
@@ -864,8 +859,7 @@ bounds.")
        '(#:import-path "github.com/matttproud/golang_protobuf_extensions/pbutil"
          #:unpack-path "github.com/matttproud/golang_protobuf_extensions"))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)))
+       (list go-github-com-golang-protobuf-proto))
       (synopsis "Streaming Protocol Buffers in Go")
       (description "This package provides various Protocol Buffer
 extensions for the Go language, namely support for record length-delimited
@@ -904,12 +898,9 @@ message streaming.")
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)
-         ("go-github-com-matttproud-golang-protobuf-extensions-pbutil"
-          ,go-github-com-matttproud-golang-protobuf-extensions-pbutil)
-         ("go-github-com-prometheus-client-model"
-          ,go-github-com-prometheus-client-model)))
+       (list go-github-com-golang-protobuf-proto
+             go-github-com-matttproud-golang-protobuf-extensions-pbutil
+             go-github-com-prometheus-client-model))
       (synopsis "Prometheus metrics")
       (description "This package provides tools for reading and writing
 Prometheus metrics.")
@@ -963,16 +954,12 @@ system, kernel, and process metrics from the @file{/proc} pseudo file system.")
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
-       `(("go-github-com-beorn7-perks-quantile"
-          ,go-github-com-beorn7-perks-quantile)
-         ("go-github-com-golang-protobuf-proto"
-          ,go-github-com-golang-protobuf-proto)
-         ("go-github-com-prometheus-client-model"
-          ,go-github-com-prometheus-client-model)
-         ("go-github-com-prometheus-common"
-          ,go-github-com-prometheus-common)
-         ("go-github-com-prometheus-procfs" ,go-github-com-prometheus-procfs)
-         ("go-github-com-cespare-xxhash" ,go-github-com-cespare-xxhash)))
+       (list go-github-com-beorn7-perks-quantile
+             go-github-com-golang-protobuf-proto
+             go-github-com-prometheus-client-model
+             go-github-com-prometheus-common
+             go-github-com-prometheus-procfs
+             go-github-com-cespare-xxhash))
       (synopsis "HTTP server and client tools for Prometheus")
       (description "This package @code{promhttp} provides HTTP client and
 server tools for Prometheus metrics.")
@@ -1019,7 +1006,7 @@ Go language.")
      '(#:import-path "github.com/go-ldap/ldap/v3"
        #:tests? #f)) ; test suite requires internet access
     (propagated-inputs
-     `(("go-github-com-go-asn1-ber-asn1-ber" ,go-github-com-go-asn1-ber-asn1-ber)))
+     (list go-github-com-go-asn1-ber-asn1-ber))
     (home-page "https://github.com/go-ldap/ldap")
     (synopsis "LDAP v3 functionality for Go")
     (description "This package provides basic LDAP v3 functionality in the Go
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index fef315c5b9..fc6a07edfb 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -145,7 +146,7 @@
        ("sqlite" ,sqlite)
        ("x11" ,libx11)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Client for Twitter")
     (description "Cawbird is a Twitter client built with GTK and Vala.
 It supports all features except non-mention notifications, polls, threads and
@@ -182,9 +183,8 @@ cards.")
                                           (package-version python))
                                         "/site-packages")))
                (wrap-program (string-append bin "giara")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH") ,lib))
-                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH") ,lib))
+                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -206,9 +206,9 @@ cards.")
        ("python-pycairo" ,python-pycairo)
        ("python-pygobject" ,python-pygobject)
        ("python-requests" ,python-requests)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Client for Reddit")
     (description "Giara is a reddit app, built with Python, GTK and Handy.")
     (home-page "https://giara.gabmus.org/")
@@ -233,18 +233,17 @@ cards.")
        ;; For building documentation.
        ("asciidoctor" ,ruby-asciidoctor)))
     (inputs
-     `(("curl" ,curl)
-       ("json-c" ,json-c)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("stfl" ,stfl)
-       ("sqlite" ,sqlite)))
+     (list curl
+           json-c
+           libxml2
+           ncurses
+           stfl
+           sqlite))
     (arguments
      `(#:modules ((guix build cargo-build-system)
                   (guix build utils)
                   ((guix build gnu-build-system) #:prefix gnu:))
        #:vendor-dir "vendor"
-       #:rust ,rust-1.51    ; or newer
        #:install-source? #f
        #:cargo-inputs
        (("rust-backtrace" ,rust-backtrace-0.3)
@@ -274,29 +273,21 @@ cards.")
            (lambda* (#:key vendor-dir #:allow-other-keys)
              ;; Don't keep the whole tarball in the vendor directory
              (delete-file-recursively
-               (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))
-             #t))
+               (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
          (add-after 'unpack 'patch-source
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "Makefile"
-               (("Cargo.lock") ""))
-             #t))
+               (("Cargo.lock") "")
+               ;; Replace the prefix in the Makefile.
+               (("/usr/local") (assoc-ref outputs "out")))))
          (replace 'build
-           (lambda* args
-             ((assoc-ref gnu:%standard-phases 'build)
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out"))))))
+           (assoc-ref gnu:%standard-phases 'build))
          (replace 'check
-           (lambda* args
+           (lambda args
              ((assoc-ref gnu:%standard-phases 'check)
-              #:test-target "test"
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out"))))))
+              #:test-target "test")))
          (replace 'install
-           (lambda* args
-             ((assoc-ref gnu:%standard-phases 'install)
-              #:make-flags
-              (list (string-append "prefix=" (assoc-ref %outputs "out")))))))))
+           (assoc-ref gnu:%standard-phases 'install)))))
     (native-search-paths
      ;; Newsboat respects CURL_CA_BUNDLE.
      (package-native-search-paths curl))
@@ -332,8 +323,8 @@ file system, and many more features.")
        ;; For building documentation.
        ("asciidoc" ,asciidoc)))
     (inputs
-     `(("json-c" ,json-c-0.13)
-       ,@(alist-delete "json-c" (package-inputs newsboat))))
+     (modify-inputs (package-inputs newsboat)
+       (replace "json-c" json-c-0.13)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -373,10 +364,10 @@ file system, and many more features.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/liferea")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -389,24 +380,24 @@ file system, and many more features.")
        ("pkg-config" ,pkg-config)
        ("which" ,which)))
     (inputs
-     `(("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gnome-keyring" ,gnome-keyring)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gstreamer" ,gstreamer)
-       ("json-glib" ,json-glib)
-       ("libnotify" ,libnotify)
-       ("libpeas" ,libpeas)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("pango" ,pango)
-       ("python" ,python)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("sqlite" ,sqlite)
-       ("webkitgtk" ,webkitgtk)))
+     (list glib
+           glib-networking
+           gnome-keyring
+           gsettings-desktop-schemas
+           gstreamer
+           json-glib
+           libnotify
+           libpeas
+           libsecret
+           libsoup
+           libxml2
+           libxslt
+           pango
+           python
+           python-pycairo
+           python-pygobject
+           sqlite
+           webkitgtk))
     (home-page "https://lzone.de/liferea/")
     (synopsis "News reader for GTK/GNOME")
     (description "Liferea is a desktop feed reader/news aggregator that
@@ -432,24 +423,20 @@ a simple interface that makes it easy to organize and browse feeds.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "HOME" (getcwd))
              (setenv "TERM" "linux")
-             (setenv "TERMINFO" (string-append (assoc-ref inputs "ncurses")
-                                               "/share/terminfo"))
-             #t)))
+             (setenv "TERMINFO"
+                     (search-input-directory inputs "share/terminfo")))))
        #:tests? #f)) ; tests fail: _curses.error: nocbreak() returned ERR
     (propagated-inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-decorator" ,python-decorator)
-       ("python-kitchen" ,python-kitchen)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-decorator python-kitchen
+           python-requests python-six))
     (native-inputs
-     `(("ncurses" ,ncurses)
-       ("python-coveralls" ,python-coveralls)
-       ("python-coverage" ,python-coverage)
-       ("python-mock" ,python-mock)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list ncurses
+           python-coveralls
+           python-coverage
+           python-mock
+           python-pylint
+           python-pytest
+           python-vcrpy))
     (home-page "https://github.com/michael-lazar/rtv")
     (synopsis "Terminal viewer for Reddit (Reddit Terminal Viewer)")
     (description
@@ -478,18 +465,15 @@ a simple interface that makes it easy to organize and browse feeds.")
              (when tests?
                (invoke "pytest")))))))
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-decorator" ,python-decorator)
-       ("python-kitchen" ,python-kitchen)
-       ("python-requests" ,python-requests)
-       ("python-six" ,python-six)))
+     (list python-beautifulsoup4 python-decorator python-kitchen
+           python-requests python-six))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-coveralls" ,python-coveralls)
-       ("python-mock" ,python-mock)
-       ("python-pylint" ,python-pylint)
-       ("python-pytest" ,python-pytest)
-       ("python-vcrpy" ,python-vcrpy)))
+     (list python-coverage
+           python-coveralls
+           python-mock
+           python-pylint
+           python-pytest
+           python-vcrpy))
     (home-page "https://gitlab.com/ajak/tuir")
     (synopsis "Terminal viewer for Reddit (Terminal UI for Reddit)")
     (description
@@ -513,8 +497,7 @@ a simple interface that makes it easy to organize and browse feeds.")
     (arguments
      `(#:python ,python-2.7))
     (inputs
-     `(("python2-feedparser" ,python2-feedparser)
-       ("python2-pytidylib" ,python2-pytidylib)))
+     (list python2-feedparser python2-pytidylib))
     (home-page "https://offog.org/code/rawdog/")
     (synopsis "RSS Aggregator Without Delusions Of Grandeur")
     (description
@@ -564,14 +547,9 @@ formats, including all versions of RSS and Atom.")
                                     (assoc-ref inputs "qttools")
                                     "/bin/lrelease")))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))
+     (list pkg-config qttools))
     (inputs
-     `(("qtwebkit" ,qtwebkit)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("phonon" ,phonon)
-       ("sqlite" ,sqlite)))
+     (list qtwebkit qtbase-5 qtmultimedia phonon sqlite))
     (home-page "https://quiterss.org/")
     (synopsis "RSS/Atom news feeds reader written on Qt/C++")
     (description "QuiteRSS is an RSS/Atom news feeds reader written on Qt/C++
@@ -598,13 +576,13 @@ that aims to be quite fast and comfortable to its user.")
          (add-after 'unpack 'patch-mpv-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "gfeeds/confManager.py"
-               (("mpv") (string-append (assoc-ref inputs "mpv") "/bin/mpv")))
+               (("mpv") (search-input-file inputs "/bin/mpv")))
              #t))
          (add-after 'install 'wrap-gfeeds
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program (string-append
                             (assoc-ref outputs "out") "/bin/gfeeds")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
                `("XDG_DATA_DIRS" ":" prefix (,(getenv "XDG_DATA_DIRS"))))
              #t)))))
@@ -614,26 +592,26 @@ that aims to be quite fast and comfortable to its user.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("hicolor-icon-theme" ,hicolor-icon-theme)
-       ("libhandy" ,libhandy)
-       ("mpv" ,mpv)
-       ("python" ,python)
-       ("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-dateutil" ,python-dateutil)
-       ("python-feedparser" ,python-feedparser)
-       ("python-html5lib" ,python-html5lib)
-       ("python-listparser" ,python-listparser)
-       ("python-lxml" ,python-lxml)
-       ("python-pillow" ,python-pillow)
-       ("python-pygments" ,python-pygments)
-       ("python-pytz" ,python-pytz)
-       ("python-readability" ,python-readability)
-       ("python-requests" ,python-requests)
-       ("webkitgtk" ,webkitgtk)
-       ("python-pygobject" ,python-pygobject)))
+     (list glib
+           gsettings-desktop-schemas
+           gtk+
+           hicolor-icon-theme
+           libhandy
+           mpv
+           python
+           python-beautifulsoup4
+           python-dateutil
+           python-feedparser
+           python-html5lib
+           python-listparser
+           python-lxml
+           python-pillow
+           python-pygments
+           python-pytz
+           python-readability
+           python-requests
+           webkitgtk
+           python-pygobject))
     (home-page "https://gfeeds.gabmus.org/")
     (synopsis "Easy-to-use GTK+ RSS/Atom feed reader")
     (description "Feeds is an RSS/Atom feed reader made with GTK+
diff --git a/gnu/packages/synergy.scm b/gnu/packages/synergy.scm
index b241d29f6a..df109e862b 100644
--- a/gnu/packages/synergy.scm
+++ b/gnu/packages/synergy.scm
@@ -73,7 +73,7 @@
                  (("/usr") out))
                #t))))))
     (native-inputs
-     `(("qttools" ,qttools)))           ; for Qt5LinguistTools
+     (list qttools))           ; for Qt5LinguistTools
     (inputs
      `(("avahi" ,avahi)
        ("python"  ,python-wrapper)
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index 79999ccfea..79ef567ecd 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -104,7 +104,7 @@ following the Japanese kanban (boarding) style.")
           (base32 "0c8zn7l0xq65wp07h7mxnb5ww56d1443l2vkjvx5sj6wpcchfn0s"))))
       (build-system python-build-system)
       (native-inputs
-       `(("python-cram" ,python-cram)))
+       (list python-cram))
       (synopsis "Command-line todo list manager")
       (description
        "@command{t} is a command-line todo list manager for people that want
@@ -125,8 +125,8 @@ to finish tasks, not organize them.")
                 "0kq8n2y4srax48yp7shz7ngac0q75dnvdbr9z9f9ldyqncr61ah0"))))
     (build-system cmake-build-system)
     (inputs
-     `(("gnutls" ,gnutls)
-       ("util-linux" ,util-linux "lib")))
+     (list gnutls
+           `(,util-linux "lib")))
     (arguments
      `(#:tests? #f ; No tests implemented.
        #:phases
@@ -189,7 +189,7 @@ a task.")
 (define-public blanket
   (package
     (name "blanket")
-    (version "0.4.1")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -198,7 +198,7 @@ a task.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rk9xxiflj8rf75q56s907xp3jzxc7r88njlmxg07gl6i35mmcmi"))))
+        (base32 "00i821zqfbigxmc709322r16z75qsw4rg23yhv35gza9sl65bzkg"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -210,11 +210,11 @@ a task.")
              (let* ((out               (assoc-ref outputs "out"))
                     (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                     (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
-                    (python-path       (getenv "PYTHONPATH")))
+                    (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/blanket")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -224,14 +224,14 @@ a task.")
        ("gtk+:bin" ,gtk+ "bin")
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-good" ,gst-plugins-good) ;for ScaleTempo plugin
-       ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy)
-       ("python-gst" ,python-gst)
-       ("python-pygobject" ,python-pygobject)))
+     (list appstream-glib
+           gsettings-desktop-schemas
+           gst-plugins-bad
+           gst-plugins-good ;for ScaleTempo plugin
+           gtk+
+           libhandy
+           python-gst
+           python-pygobject))
     (home-page "https://github.com/rafaelmardojai/blanket")
     (synopsis "Ambient sound and noise player")
     (description
diff --git a/gnu/packages/task-runners.scm b/gnu/packages/task-runners.scm
index 1c1fa69894..60a393267b 100644
--- a/gnu/packages/task-runners.scm
+++ b/gnu/packages/task-runners.scm
@@ -45,7 +45,7 @@
         (base32 "17n11lqhywq4z62w2rakdq80v7mxf83rgln19vj4v4nxpwd2hjjw"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-tekwizely-go-parsing" ,go-github-com-tekwizely-go-parsing)))
+     (list go-github-com-tekwizely-go-parsing))
     (arguments
      `(#:import-path "github.com/tekwizely/run"))
     (synopsis "Easily manage and invoke small scripts and wrappers")
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 5f1438667d..427f281686 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,12 +24,39 @@
   #:use-module (guix licenses)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages))
 
 (define-public tbb
   (package
     (name "tbb")
+    (version "2021.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/oneapi-src/oneTBB")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ih727g802j9lvwkqhw021bk1wb7xlvfgd0vl1i6jng4am1wv7vq"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DTBB_STRICT=OFF"))) ;; Don't fail on warnings
+    (home-page "https://www.threadingbuildingblocks.org")
+    (synopsis "C++ library for parallel programming")
+    (description
+     "Threading Building Blocks (TBB) is a C++ runtime library that abstracts
+the low-level threading details necessary for optimal multi-core performance.
+It uses common C++ templates and coding style to eliminate tedious threading
+implementation work.  It provides parallel loop constructs, asynchronous
+tasks, synchronization primitives, atomic operations, and more.")
+    (license asl2.0)))
+
+(define-public tbb-2020
+  (package
+    (name "tbb")
     (version "2020.3")
     (source (origin
               (method git-fetch)
@@ -55,8 +83,7 @@
                     (("os_kernel_version:=.*")
                      "os_kernel_version:=5\n")
                     (("os_version:=.*")
-                     "os_version:=1\n"))
-                  #t))))
+                     "os_version:=1\n"))))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -68,8 +95,7 @@
          (add-after 'unpack 'fail-on-test-errors
            (lambda _
              (substitute* "Makefile"
-               (("-\\$\\(MAKE") "$(MAKE"))
-             #t))
+               (("-\\$\\(MAKE") "$(MAKE"))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "build/linux.gcc.inc"
@@ -94,8 +120,7 @@
                 (find-files "build/guix_release" "\\.so"))
                (copy-recursively "doc" doc)
                (copy-recursively "examples" examples)
-               (copy-recursively "include" include)
-               #t))))))
+               (copy-recursively "include" include)))))))
     (home-page "https://www.threadingbuildingblocks.org")
     (synopsis "C++ library for parallel programming")
     (description
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 4d052dbdaf..f05642a3f9 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -44,20 +44,19 @@
 (define-public tcl
   (package
     (name "tcl")
-    (version "8.6.10")
+    (version "8.6.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/tcl/Tcl/"
                                   version "/tcl" version "-src.tar.gz"))
               (sha256
                (base32
-                "1vc7imilx6kcb5319r7hnrp4jn5pqb41an3vr3azhgcfcgvdp5ji"))
-              (patches (search-patches "tcl-fix-cross-compilation.patch"))))
+                "0n4211j80mxr6ql0xx52rig8r885rcbminfpjdb2qrw6hmk8c14c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    (lambda _ (chdir "unix") #t))
+                    (lambda _ (chdir "unix")))
                  (add-after 'install 'install-private-headers
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Private headers are needed by Expect.
@@ -68,8 +67,7 @@
                        ;; Programs such as Ghostscript rely on it.
                        (with-directory-excursion bin
                          (symlink (car (find-files "." "tclsh"))
-                                  "tclsh"))
-                       #t))))
+                                  "tclsh"))))))
 
        ;; By default, man pages are put in PREFIX/man, but we want them in
        ;; PREFIX/share/man.  The 'validate-documentation-location' phase is
@@ -135,9 +133,9 @@
                 (string-append out "/libtmp") (string-append out "/lib")))
              #t)))))
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (inputs
-     `(("tcllib" ,tcllib)))
+     (list tcllib))
     (home-page "http://incrtcl.sourceforge.net/")
     (synopsis "Object Oriented programming (OOP) extension for Tcl")
     (description
@@ -160,11 +158,11 @@ multiple inheritance and public and private classes and variables.")
         "0d1cp5hggjl93xwc8h1y6adbnrvpkk0ywkd00inz9ndxn21xm9s9"))))
     (build-system gnu-build-system)
     (inputs
-     `(;; TODO: Add these optional dependencies.
-       ;; ("libX11" ,libX11)
-       ;; ("xorgproto" ,xorgproto)
-       ;; ("tk" ,tk)
-       ("tcl" ,tcl)))
+     (list ;; TODO: Add these optional dependencies.
+           ;; ("libX11" ,libX11)
+           ;; ("xorgproto" ,xorgproto)
+           ;; ("tk" ,tk)
+           tcl))
     (arguments
      '(#:configure-flags
        (let ((out (assoc-ref %outputs "out"))
@@ -197,7 +195,7 @@ X11 GUIs.")
 (define-public tk
   (package
     (name "tk")
-    (version "8.6.10")
+    (version "8.6.11.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/tcl/Tcl/"
@@ -205,38 +203,31 @@ X11 GUIs.")
                                  version "-src.tar.gz"))
              (sha256
               (base32
-               "11p3ycqbr5116vpaxv6fl6md6gcav1ffspgr8wrlc2lxhn543pv3"))
+               "1gh9k7l76qg9l0sb78ijw9xz4xl1af47aqbdifb6mjpf3cbsnv00"))
              (patches (search-patches "tk-find-library.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-before
-                   'configure 'pre-configure
-                   (lambda _
-                     (chdir "unix")
-                     #t))
-                  (add-after
-                   'install 'create-wish-symlink
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let ((out (assoc-ref outputs "out")))
-                       (symlink (string-append out "/bin/wish"
-                                               ,(version-major+minor
+                  (add-before 'configure 'pre-configure
+                    (lambda _ (chdir "unix")))
+                  (add-after 'install 'create-wish-symlink
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (symlink (string-append out "/bin/wish"
+                                                ,(version-major+minor
                                                   (package-version tk)))
-                                (string-append out "/bin/wish")))
-                     #t))
-                  (add-after
-                   'install 'add-fontconfig-flag
-                   (lambda* (#:key inputs outputs #:allow-other-keys)
-                     ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
-                     ;; 'tkConfig.sh'.
-                     (let ((out        (assoc-ref outputs "out"))
-                           (fontconfig (assoc-ref inputs "fontconfig")))
-                       (substitute* (find-files out
-                                                "^(tkConfig\\.sh|tk\\.pc)$")
-                         (("-lfontconfig")
-                          (string-append "-L" fontconfig
-                                         "/lib -lfontconfig")))
-                       #t))))
+                                 (string-append out "/bin/wish")))))
+                  (add-after 'install 'add-fontconfig-flag
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
+                      ;; 'tkConfig.sh'.
+                      (let ((out        (assoc-ref outputs "out"))
+                            (fontconfig (assoc-ref inputs "fontconfig")))
+                        (substitute* (find-files out
+                                                 "^(tkConfig\\.sh|tk\\.pc)$")
+                          (("-lfontconfig")
+                           (string-append "-L" fontconfig
+                                          "/lib -lfontconfig")))))))
 
        #:configure-flags
        (list (string-append "--with-tcl="
@@ -251,13 +242,12 @@ X11 GUIs.")
 
        ;; The tests require a running X server, so we just skip them.
        #:tests? #f))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("libxft" ,libxft)
               ("fontconfig" ,fontconfig)
               ("tcl" ,tcl)))
     ;; tk.h refers to X11 headers, hence the propagation.
-    (propagated-inputs `(("libx11" ,libx11)
-                         ("libxext" ,libxext)))
+    (propagated-inputs (list libx11 libxext))
 
     (home-page "https://www.tcl.tk/")
     (synopsis "Graphical user interface toolkit for Tcl")
@@ -279,7 +269,7 @@ interfaces (GUIs) in the Tcl language.")
               (base32
                "0pha40m97fzafjnq8vwkbi5sml6xv8jki6qi60rxrzmxlrqp5aij"))))
     (build-system perl-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs `(("libx11" ,libx11)
               ("libpng" ,libpng)
               ("libjpeg" ,libjpeg-turbo)))
@@ -314,7 +304,7 @@ interfaces (GUIs) in the Tcl language.")
                 "173abxaazdmf210v651708ab6h7xhskvd52krxk6ifam337qgzh1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -339,10 +329,9 @@ utility functions and modules all written in high-level Tcl.")
                 "03y0bzgwbh7nnyqkh8n00bbkq2fyblq39s3bdb6mawna0bbn0wwg"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (propagated-inputs
-     `(("tcllib" ,tcllib)
-       ("tk" ,tk))) ; for "wish"
+     (list tcllib tk)) ; for "wish"
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -385,11 +374,9 @@ modules for Tk, all written in high-level Tcl.  Examples of provided widgets:
               (patches (search-patches "tclxml-3.2-install.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list tcl libxml2 libxslt))
     (propagated-inputs
-     `(("tcllib" ,tcllib))) ; uri
+     (list tcllib)) ; uri
     (native-search-paths
      (list (search-path-specification
             (variable "TCLLIBPATH")
@@ -438,8 +425,7 @@ callback is evaluated.")
                                               (assoc-ref %outputs "out")
                                               "/lib"))))
     (inputs
-     `(("tcl" ,tcl)
-       ("tk" ,tk)))
+     (list tcl tk))
     (home-page "http://tclx.sourceforge.net/")
     (synopsis "System programming extensions for Tcl")
     (description
@@ -468,8 +454,7 @@ debugging tools.")
     (arguments
      `(#:import-path "github.com/nsf/gothic"))
     (propagated-inputs
-     `(("tk" ,tk)
-       ("tcl" ,tcl)))
+     (list tk tcl))
     (home-page "https://github.com/nsf/gothic")
     (synopsis "Tcl/Tk Go bindings")
     (description "Gothic contains Go bindings for Tcl/Tk.  The package contains
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index a1822b3892..9c9c5a01a5 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -260,10 +260,7 @@ Telegram project, for its use in telegram desktop client.")
                    "libcrypto opus alsa libpulse"))
                 #t)))))
        (native-inputs
-        `(("autoconf" ,autoconf)
-          ("automake" ,automake)
-          ("libtool" ,libtool)
-          ("pkg-config" ,pkg-config)))))))
+        (list autoconf automake libtool pkg-config))))))
 
 (define-public telegram-desktop
   (package
@@ -562,7 +559,7 @@ Telegram project, for its use in telegram desktop client.")
        ("xxhash" ,xxhash)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (synopsis "Telegram Desktop")
     (description "Telegram desktop is the official desktop version of the
 Telegram instant messenger.")
@@ -682,15 +679,9 @@ formerly a part of telegram-cli, but now being maintained separately.")
                         ("libs" "lib/tgl"))
                       args))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (inputs
-       `(("libevent" ,libevent)
-         ("libgcrypt" ,libgcrypt)
-         ("tl-parser" ,tl-parser)
-         ("zlib" ,zlib)))
+       (list libevent libgcrypt tl-parser zlib))
       (synopsis "Telegram Library")
       (description "TGL is the telegram library for telegram-cli.")
       (home-page "https://github.com/vysheng/tgl")
@@ -766,23 +757,20 @@ formerly a part of telegram-cli, but now being maintained separately.")
                          #:exclude ("tg-server.pub")))
                       args))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)))
+       (list autoconf automake libtool pkg-config))
       (inputs
-       `(("jansson" ,jansson)
-         ("libconfig" ,libconfig)
-         ("libevent" ,libevent)
-         ("libgcrypt" ,libgcrypt)
-         ("lua" ,lua)
-         ("openssl" ,openssl)
-         ("perl" ,perl)
-         ("python" ,python)
-         ("readline" ,readline)
-         ("tgl" ,tgl)
-         ("tl-parser" ,tl-parser)
-         ("zlib" ,zlib)))
+       (list jansson
+             libconfig
+             libevent
+             libgcrypt
+             lua
+             openssl
+             perl
+             python
+             readline
+             tgl
+             tl-parser
+             zlib))
       (synopsis "Telegram Messenger CLI")
       (description "TG is the command-line interface for Telegram Messenger.")
       (home-page "https://github.com/vysheng/tg")
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 30b14578b6..1cf2fa8edf 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Demis Balbach <db@minikn.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -114,12 +115,9 @@
        (list "--enable-maintainer-mode"
              "CC=" ,(cc-for-target))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("pkg-config" ,pkg-config)))
+     (list automake autoconf pkg-config))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)))
+     (list qtbase-5 qtdeclarative))
     (synopsis "Phone Simulator for modem testing")
     (description
      "Phonesim is a modem emulator that oFono uses for development and
@@ -149,7 +147,7 @@ GSM (or other) hardware.")
     (arguments
      `(#:tests? #f))                    ; No target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Libre iLBC codec")
     (description "LibiLBC is a packaging friendly copy of the iLBC codec from
 the WebRTC project.  It provides a base for distribution packages and can be
@@ -290,7 +288,7 @@ reimplementation.")
             (sha256 (base32
                      "1mv080rvrhyxyhgqiqr8r9jdqhg3xhfawjvfj5zgj47h59nggjba"))))
    (build-system gnu-build-system)
-   (inputs `(("gnutls" ,gnutls)))
+   (inputs (list gnutls))
    (synopsis "Common C++ framework for threaded applications")
    (description "GNU uCommon C++ is meant as a very light-weight C++ library
 to facilitate using C++ design patterns even for very deeply embedded
@@ -311,9 +309,8 @@ support.")
             (sha256 (base32
                      "17ili8l7zqbbkzr1rcy4hlnazkf50mds41wg6n7bfdsx3c7cldgh"))))
    (build-system gnu-build-system)
-   (inputs `(("ucommon" ,ucommon)
-             ("libgcrypt" ,libgcrypt)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ucommon libgcrypt))
+   (native-inputs (list pkg-config))
    (synopsis "Implementation of RTP (real-time transport protocol)")
    (description  "GNU ccRTP is an implementation of RTP, the real-time transport
 protocol from the IETF.  It is suitable both for high capacity servers and
@@ -344,10 +341,9 @@ packet-manipulation library.")
     (arguments
      `(#:tests? #f))                    ; No target
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ccrtp" ,ccrtp)
-       ("ucommon" ,ucommon)))
+     (list ccrtp ucommon))
     (synopsis "C++ Implementation of ZRTP protocol")
     (description  "GNU ZRTP C++ provides a library that adds ZRTP support to the
 GNU ccRTP stack and serves as library for other RTP stacks
@@ -389,7 +385,7 @@ to initiate and control SIP sessions.")
             (sha256 (base32
                      "17cna8kpc8nk1si419vgr6r42k2lda0rdk50vlxrw8rzg0xp2xrw"))))
    (build-system gnu-build-system)
-   (inputs `(("osip" ,osip)))
+   (inputs (list osip))
    (synopsis "Sip abstraction library")
    (description "EXosip is a library that hides the complexity of using the
 SIP protocol for multimedia session establishment.  This protocol is mainly to
@@ -431,9 +427,7 @@ multiplayer games.")
                   ,(string-append "EXOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "exosip")
                                   "/include"))))
-   (inputs `(("ucommon" ,ucommon)
-             ("exosip" ,exosip)
-             ("osip" ,osip)))
+   (inputs (list ucommon exosip osip))
    (synopsis "Secure peer-to-peer VoIP server for the SIP protocol")
    (description "GNU SIP Witch is a peer-to-peer Voice-over-IP server that
 uses the SIP protocol.  Calls can be made from behind NAT firewalls and
@@ -458,8 +452,8 @@ internet.")
                (base32
                 "1gswpjm4jacfxmgglbf8hxi3yzsag4drk4q943p0wkmv21zj8l78"))))
     (native-inputs
-     `(("psmisc" ,psmisc)               ;some tests require 'killall'
-       ("procps" ,procps)))
+     (list psmisc ;some tests require 'killall'
+           procps))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "runtest"
@@ -501,9 +495,7 @@ supporting cryptographic kernel.")
            "0d269474kk1933c55hx4azw3sak5ycfrxkw6ida0sb2cm00kfich"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list autoconf automake libtool))
       (home-page "https://gitlab.savoirfairelinux.com/sflphone/libiax2")
       (synopsis "Inter-Asterisk-Protocol library")
       (description "LibIAX2 implements the Inter-Asterisk-Protocol for relaying
@@ -532,11 +524,7 @@ Voice-over-IP (VoIP) communications.")
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))  ; no "check" target
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("gmp" ,gmp)
-       ("libogg" ,libogg)
-       ("ncurses" ,ncurses)
-       ("opus" ,opus)))
+     (list alsa-lib gmp libogg ncurses opus))
     (synopsis "Simple VoIP program to create conferences from the terminal")
     (description
      "Seren is a simple VoIP program based on the Opus codec that allows you
@@ -590,8 +578,8 @@ address of one of the participants.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (invoke "qmake" "main.pro" "QMAKE_LRELEASE=lrelease"
                      (string-append "MUMBLE_PYTHON="
-                                    (string-append (assoc-ref inputs "python")
-                                                   "/bin/python3"))
+                                    (search-input-file inputs
+                                                       "/bin/python3"))
                      (string-append "CONFIG+="
                                     (string-join
                                      ;; Options used are listed in the same order
@@ -668,24 +656,22 @@ address of one of the participants.")
                          (find-files "release/plugins" "\\.so$"))
                #t))))))
     (inputs
-     `(("avahi" ,avahi)
-       ("boost" ,boost)
-       ("libsndfile" ,libsndfile/fixed)
-       ("libxi" ,libxi)
-       ("mesa" ,mesa) ; avoid bundled
-       ("openssl" ,openssl)
-       ("opus" ,opus) ; avoid bundled
-       ("protobuf" ,protobuf)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("speech-dispatcher" ,speech-dispatcher)
-       ("speex" ,speex) ; avoid bundled
-       ("speexdsp" ,speexdsp))) ; avoid bundled
+     (list avahi
+           boost
+           libsndfile/fixed
+           libxi
+           mesa ; avoid bundled
+           openssl
+           opus ; avoid bundled
+           protobuf
+           pulseaudio
+           qtbase-5
+           qtsvg
+           speech-dispatcher
+           speex ; avoid bundled
+           speexdsp)) ; avoid bundled
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("qttools" ,qttools)))
+     (list pkg-config python qttools))
     (synopsis "Low-latency, high quality voice chat software")
     (description
      "Mumble is an low-latency, high quality voice chat
@@ -727,25 +713,23 @@ Mumble consists of two applications for separate usage:
         "-DWITH_G729=On"                ; For G729 Codec Support
         "-DWITH_SPEEX=On")))            ; For Speex Codec Support
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)
-       ("qttools" ,qttools)))
+     (list bison flex qttools))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bcg729" ,bcg729)
-       ("zrtpcpp" ,zrtpcpp)
-       ("ccrtp" ,ccrtp)
-       ("file" ,file)
-       ("libilbc" ,libilbc)
-       ("libsndfile" ,libsndfile)
-       ("libxml2" ,libxml2)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("readline" ,readline)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)
-       ("ucommon" ,ucommon)))
+     (list alsa-lib
+           bcg729
+           zrtpcpp
+           ccrtp
+           file
+           libilbc
+           libsndfile
+           libxml2
+           qtbase-5
+           qtdeclarative
+           qtquickcontrols
+           readline
+           speex
+           speexdsp
+           ucommon))
     (synopsis "Softphone for voice over IP and instant messaging")
     (description "Twinkle is a softphone for your voice over IP and instant
 messaging communcations using the SIP protocol.  You can use it for direct
@@ -873,20 +857,17 @@ your calls and messages.")
                (("pjnath-test pjmedia-test pjsip-test pjsua-test")
                 "pjmedia-test pjsip-test")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("bcg729" ,bcg729)
-       ("gnutls" ,gnutls)
-       ("gsm" ,gsm)
-       ("libsamplerate" ,libsamplerate)
-       ("libsrtp" ,libsrtp)
-       ("opus" ,opus)
-       ("portaudio" ,portaudio)
-       ("speex" ,speex)
-       ("speexdsp" ,speexdsp)))
+     (list bcg729
+           gnutls
+           gsm
+           libsamplerate
+           libsrtp
+           opus
+           portaudio
+           speex
+           speexdsp))
     (home-page "https://www.pjsip.org")
     (synopsis "Session Initiation Protocol (SIP) stack")
     (description "PJProject provides an implementation of the Session
@@ -915,10 +896,7 @@ Initiation Protocol (SIP) and a multimedia framework.")
          "122kn3jx6v0kkldlzlpzvlwqxgp6pmzxsjhrhcxw12bx9c08sar5"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("openssl" ,openssl)
-       ("opus" ,opus)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib openssl opus pulseaudio))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -928,14 +906,11 @@ Initiation Protocol (SIP) and a multimedia framework.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "os/linux/AudioPulse.cpp"
                (("libpulse\\.so")
-                (string-append (assoc-ref inputs "pulseaudio")
-                              "/lib/libpulse.so")))
+                (search-input-file inputs "/lib/libpulse.so")))
              (substitute* '("os/linux/AudioInputALSA.cpp"
                             "os/linux/AudioOutputALSA.cpp")
                (("libasound\\.so")
-                (string-append (assoc-ref inputs "alsa-lib")
-                               "/lib/libasound.so")))
-             #t)))))
+                (search-input-file inputs "/lib/libasound.so"))))))))
     (synopsis "VoIP library for Telegram clients")
     (description "A collection of libraries and header files for implementing
 telephony functionality into custom Telegram clients.")
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 1b88d3813b..953e996953 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -62,7 +62,6 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages build-tools)   ;for meson-0.55
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -165,8 +164,7 @@ less to gain, as only the helper process is running with privileges (e.g.,
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libconfuse" ,libconfuse)
-       ("vte" ,vte)))
+     (list libconfuse vte))
     (synopsis "GTK+-based drop-down terminal")
     (description "Tilda is a terminal emulator similar to normal terminals like
 gnome-terminal (GNOME) or Konsole (KDE), with the difference that it drops down
@@ -216,7 +214,7 @@ configurable through a graphical wizard.")
        ("xdg-utils" ,xdg-utils)
        ("ncurses" ,ncurses)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
 
     ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
     ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
@@ -254,7 +252,7 @@ insert mode and command mode where keybindings have different functions.")
            (lambda _ (invoke "nosetests" "-v"))))))
     (native-inputs
      ;; For tests.
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://asciinema.org")
     (synopsis "Terminal session recorder")
     (description
@@ -289,9 +287,8 @@ text-based approach to terminal recording.")
       (arguments
        `(#:configure-flags '("-DBUILD_TESTING=ON")))
       (native-inputs
-       `(("check" ,check)
-         ("libxkbcommon" ,libxkbcommon) ; for xkbcommon-keysyms.h
-         ("pkg-config" ,pkg-config)))
+       (list check libxkbcommon ; for xkbcommon-keysyms.h
+             pkg-config))
       (synopsis "Xterm state machine library")
       (description "TSM is a state machine for DEC VT100-VT520 compatible
 terminal emulators.  It tries to support all common standards while keeping
@@ -345,13 +342,13 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
                           (("sd_booted\\(\\)")
                            "1")))))))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("libxslt" ,libxslt)                       ;to build the man page
-         ("libxml2" ,libxml2)                       ;for XML_CATALOG_FILES
-         ("docbook-xsl" ,docbook-xsl)))
+       (list pkg-config
+             autoconf
+             automake
+             libtool
+             libxslt ;to build the man page
+             libxml2 ;for XML_CATALOG_FILES
+             docbook-xsl))
       (inputs
        `(("libdrm" ,libdrm)
          ("libtsm" ,libtsm)
@@ -409,10 +406,8 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
              (substitute* "t/40ti-override.c"
                (("vt750") "vt100")))))
        #:test-target "test"))
-    (inputs `(("ncurses" ,ncurses)))
-    (native-inputs `(("libtool" ,libtool)
-                     ("perl-test-harness" ,perl-test-harness)
-                     ("pkg-config" ,pkg-config)))
+    (inputs (list ncurses))
+    (native-inputs (list libtool perl-test-harness pkg-config))
     (synopsis "Keyboard entry processing library for terminal-based programs")
     (description
      "Libtermkey handles all the necessary logic to recognise special keys, UTF-8
@@ -504,7 +499,7 @@ Vietnamese, and bi-directional scripts like Arabic and Hebrew.")
                         out "/share/terminfo")
                        "mtm.ti")))))))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
     ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
     (native-search-paths
@@ -617,8 +612,7 @@ has no notion of what's interesting, but it's very good at that notifying part."
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("perl" ,perl)))
+     (list libtool perl))
     (home-page "https://github.com/mauke/unibilium")
     (synopsis "Terminfo parsing library")
     (description "Unibilium is a basic C terminfo library.  It doesn't depend
@@ -648,8 +642,7 @@ should be thread-safe.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("perl" ,perl)))
+     (list libtool perl))
     (home-page "http://www.leonerd.org.uk/code/libvterm/")
     (synopsis "VT220/xterm/ECMA-48 terminal emulator library")
     (description "Libvterm is an abstract C99 library which implements a VT220
@@ -776,10 +769,7 @@ embedded kernel situations.")
                     #t))))
       (build-system gnu-build-system)
       (inputs
-       `(("qtbase" ,qtbase-5)
-         ("qtdeclarative" ,qtdeclarative)
-         ("qtgraphicaleffects" ,qtgraphicaleffects)
-         ("qtquickcontrols" ,qtquickcontrols)))
+       (list qtbase-5 qtdeclarative qtgraphicaleffects qtquickcontrols))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -845,21 +835,16 @@ eye-candy, customizable, and reasonably lightweight.")
                 "15h01ijx87i60bdgjjap1ymwlxggsxc6iziykh3bahj8432s1836"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       ;; Using a "release" build is recommended both for performance, and
+     `(;; Using a "release" build is recommended both for performance, and
        ;; also to address a GCC 10 issue when doing PGO builds.
        #:build-type "release"
        ;; Enable LTO as recommended by INSTALL.md.
        #:configure-flags '("-Db_lto=true")))
     (native-inputs
-     `(("ncurses" ,ncurses)             ;for 'tic'
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list ncurses ;for 'tic'
+           pkg-config scdoc wayland-protocols))
     (inputs
-     `(("fcft" ,fcft)
-       ("libxkbcommon" ,libxkbcommon)
-       ("wayland" ,wayland)))
+     (list fcft libxkbcommon wayland))
     (synopsis "Wayland-native terminal emulator")
     (description
      "@command{foot} is a terminal emulator for systems using the Wayland
@@ -888,8 +873,7 @@ a server/client mode.")
        ("perl" ,perl)                   ; for pod2man
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libxft" ,libxft)
-       ("vte" ,vte)))
+     (list libxft vte))
     (home-page "https://launchpad.net/sakura")
     (synopsis "A simple but powerful libvte-based terminal emulator")
     (description "@code{Sakura} is a terminal emulator based on GTK+ and VTE.
@@ -916,8 +900,7 @@ desktop installed to have a decent terminal emulator.")
       (arguments
        '(#:import-path "github.com/nsf/termbox-go"))
       (propagated-inputs
-       `(("go-github.com-mattn-go-runewidth"
-          ,go-github.com-mattn-go-runewidth)))
+       (list go-github.com-mattn-go-runewidth))
       (synopsis "@code{termbox} provides a minimal API for text-based user
 interfaces")
       (description
@@ -944,13 +927,13 @@ programmer to write text-based user interfaces.")
     (arguments
      `(#:import-path "github.com/junegunn/fzf"))
     (inputs
-     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
-       ("go-github-com-mattn-go-shellwords" ,go-github-com-mattn-go-shellwords)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-github-com-gdamore-tcell" ,go-github-com-gdamore-tcell)
-       ("go-github-com-saracen-walker" ,go-github-com-saracen-walker)
-       ("go-golang.org-x-sync-errgroup" ,go-golang.org-x-sync-errgroup)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+     (list go-github.com-mattn-go-runewidth
+           go-github-com-mattn-go-shellwords
+           go-github-com-mattn-go-isatty
+           go-github-com-gdamore-tcell
+           go-github-com-saracen-walker
+           go-golang.org-x-sync-errgroup
+           go-golang-org-x-crypto))
     (home-page "https://github.com/junegunn/fzf")
     (synopsis "Command-line fuzzy-finder")
     (description "This package provides an interactive command-line filter
@@ -1024,8 +1007,7 @@ usable with any list--including files, command history, processes and more.")
       (arguments
        '(#:import-path "github.com/howeyc/gopass"))
       (propagated-inputs
-       `(("go-golang-org-x-crypto"
-          ,go-golang-org-x-crypto)))
+       (list go-golang-org-x-crypto))
       (synopsis "Retrieve password from a terminal or piped input in Go")
       (description
        "@code{gopass} is a Go package for retrieving a password from user
@@ -1055,10 +1037,9 @@ terminal or piped input.")
              (delete-file "tests/test_input_output.py")
              #t)))))
     (propagated-inputs
-     `(("python-wcwidth" ,python-wcwidth)))
+     (list python-wcwidth))
     (native-inputs
-     `(("python-pytest-runner" ,python-pytest-runner)
-       ("python-pytest" ,python-pytest)))
+     (list python-pytest-runner python-pytest))
     (home-page "https://pyte.readthedocs.io/")
     (synopsis "Simple VTXXX-compatible terminal emulator")
     (description "@code{pyte} is an in-memory VTxxx-compatible terminal
@@ -1090,8 +1071,7 @@ of VT100 terminal.")
      ;; FIXME: Test suite is unable to detect TTY conditions.
      `(#:tests? #f))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-six" ,python-six)))
+     (list python-nose python-six))
     (home-page "https://github.com/erikrose/blessings")
     (synopsis "Python module to manage terminal color, styling, and
 positioning")
@@ -1109,14 +1089,14 @@ than a terminal.")
 (define-public python-curtsies
   (package
     (name "python-curtsies")
-    (version "0.3.4")
+    (version "0.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "curtsies" version))
        (sha256
         (base32
-         "019bpf5wmng4f6ic2ykg893ypfihpfvzi6dhblcagfwbincl79ac"))))
+         "1g8dwafx4vx06isjkn28r3cwb0hw1bv67lgygaz34yk66lrzz1x5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1125,12 +1105,9 @@ than a terminal.")
            (lambda _
              (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-blessings" ,python-blessings)
-       ("python-wcwidth" ,python-wcwidth)))
+     (list python-blessings python-cwcwidth))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pyte" ,python-pyte)
-       ("python-nose" ,python-nose)))
+     (list python-mock python-pyte python-nose))
     (home-page "https://github.com/bpython/curtsies")
     (synopsis "Library for curses-like terminal interaction with colored
 strings")
@@ -1155,14 +1132,9 @@ per-line fullscreen terminal rendering, and keyboard input event reporting.")
          "0x5c31yq7ansmiy20a0qf59wagba9v3pq97mlkxrqxn4n1gcc6vi"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("libssh" ,libssh)
-       ("msgpack" ,msgpack)
-       ("ncurses" ,ncurses)))
+     (list libevent libssh msgpack ncurses))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://tmate.io/")
     (synopsis "Terminal sharing application")
     (description "tmate is a terminal sharing application that allows you to
@@ -1309,9 +1281,7 @@ comfortably in a pager or editor.
                (copy-recursively tests "external/googletest"))
              #t)))))
     (inputs
-     `(("gflags" ,gflags)
-       ("libsodium" ,libsodium)
-       ("protobuf" ,protobuf)))
+     (list gflags libsodium protobuf))
     (native-inputs
      `(("googletest" ,(package-source googletest))))
     (home-page "https://mistertea.github.io/EternalTerminal/")
@@ -1341,7 +1311,7 @@ while also supporting native scrolling and @command{tmux} control mode
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -1490,7 +1460,7 @@ basic input/output.")
                     (bin   (string-append out "/bin"))
                     (share (string-append out "/share"))
                     (icons (string-append share "/icons/hicolor/scalable/apps"))
-                    (tic   (string-append (assoc-ref inputs "ncurses") "/bin/tic"))
+                    (tic   (search-input-file inputs "/bin/tic"))
                     (man   (string-append share "/man/man1"))
                     (alacritty-bin "target/release/alacritty"))
                ;; Install the executable.
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index bfca91310a..8c426ce0b3 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -19,6 +19,7 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,8 +38,10 @@
 
 (define-module (gnu packages tex)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -46,6 +49,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system texlive)
   #:use-module (guix utils)
+  #:use-module (guix deprecation)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (gnu packages)
@@ -122,7 +126,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                           (string-append doc "/doc")))
                        '())
                  (mkdir-p out)
-                 (copy-recursively (assoc-ref inputs "source") out)
+                 (copy-recursively "." out)
                  ,@(if with-documentation?
                        '((delete-file-recursively (string-append out "/doc")))
                        '())
@@ -151,7 +155,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                               "-checkout"))
     (sha256
      (base32
-      "0lk7shx768sxvgr85y8bnmmnj8x4bbkgpxrz3z8jp8avi33prw83"))))
+      "04xzf5gr3ylyh3ls09imrx4mwq3qp1k97r9njzlan6hlff875rx2"))))
 
 (define (texlive-hyphen-package name code locations hash)
   "Return a TeX Live hyphenation package with the given NAME, using source
@@ -224,111 +228,101 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
 (define texlive-extra-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-extra.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-extra.tar.xz")
     (sha256 (base32
-             "13ncf2an4nlqv18lki6y2p6pcsgs1i54zqkhfwprax5j53bk70j8"))))
+             "171kg1n9zapw3d2g47d8l0cywa99bl9m54xkqvp9625ks22z78s6"))))
 
 (define texlive-texmf-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-texmf.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-texmf.tar.xz")
     (sha256 (base32
-             "00n4qh9fj8v9zzy3y488hpfq1g3dnnh72y4yjsaikfcqpi59gv62"))))
+             "070gczcm1h9rx29w2f02xd3nhd84c4k28nfmm8qgp69yq8vd84pz"))))
 
 (define-public texlive-bin
   (package
-   (name "texlive-bin")
-   (version "20190410")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "ftp://tug.org/historic/systems/texlive/2019/"
-                          "texlive-" version "-source.tar.xz"))
-      (sha256
-       (base32
-        "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj"))
-      (patches
-       (let ((arch-patch
-              (lambda (name revision hash)
-                (origin
-                  (method url-fetch)
-                  (uri (string-append "https://raw.githubusercontent.com"
-                                      "/archlinux/svntogit-packages/" revision
-                                      "/repos/extra-x86_64/" name))
-                  (file-name (string-append "texlive-bin-" name))
-                  (sha256 (base32 hash)))))
-             (arch-revision "49d7fe25e5ea63f136ebc20270c1d8fc9b00041c"))
-         (list
-          (arch-patch "pdftex-poppler0.76.patch" arch-revision
-                      "03vc88dz37mjjyaspzv0fik2fp5gp8qv82114869akd1dhszbaax")
-          (search-patch "texlive-bin-poppler-0.83.patch")
-          (arch-patch "texlive-poppler-0.84.patch" arch-revision
-                      "1ia6cr99krk4ipx4hdi2qdb98bh2h26mckjlpxdzrjnfhlnghksa")
-          (search-patch "texlive-bin-poppler-0.86.patch"))))
-      (modules '((guix build utils)
-                 (ice-9 ftw)))
-      (snippet
-       '(begin
-          (with-directory-excursion "libs"
-            (let ((preserved-directories '("." ".." "lua53" "luajit")))
-              ;; Delete bundled software, except Lua which cannot easily be
-              ;; used as an external dependency.
-              (for-each delete-file-recursively
-                        (scandir "."
-                                 (lambda (file)
-                                   (and (not (member file preserved-directories))
-                                        (eq? 'directory (stat:type (stat file)))))))))
-          ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
-          #t))))
-   (build-system gnu-build-system)
-   (inputs
-    `(("texlive-extra-src" ,texlive-extra-src)
-      ("texlive-scripts"
-       ,(origin
-          (method svn-fetch)
-          (uri (svn-reference
-                (url (string-append "svn://www.tug.org/texlive/tags/"
-                                    %texlive-tag "/Master/texmf-dist/"
-                                    "/scripts/texlive"))
-                (revision %texlive-revision)))
-          (file-name (string-append "texlive-scripts-"
-                                    (number->string %texlive-revision)
-                                    "-checkout"))
-          (sha256
-           (base32
-            "1cj04svl8bpfwjr4gqfcc04rmklz3aggrxvgj7q5bxrh7c7g18xh"))))
-      ("cairo" ,cairo)
-      ("fontconfig" ,fontconfig)
-      ("fontforge" ,fontforge)
-      ("freetype" ,freetype)
-      ("gd" ,gd)
-      ("gmp" ,gmp)
-      ("ghostscript" ,ghostscript)
-      ("graphite2" ,graphite2)
-      ("harfbuzz" ,harfbuzz)
-      ("icu4c" ,icu4c)
-      ("libpaper" ,libpaper)
-      ("libpng" ,libpng)
-      ("libxaw" ,libxaw)
-      ("libxt" ,libxt)
-      ("mpfr" ,mpfr)
-      ("perl" ,perl)
-      ("pixman" ,pixman)
-      ("poppler" ,poppler)
-      ("potrace" ,potrace)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
-      ("ruby" ,ruby)
-      ("tcsh" ,tcsh)
-      ("teckit" ,teckit)
-      ("zlib" ,zlib)
-      ("zziplib" ,zziplib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:out-of-source? #t
-      #:configure-flags
+    (name "texlive-bin")
+    (version "20210325")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://tug.org/historic/systems/texlive/2021/"
+                           "texlive-" version "-source.tar.xz"))
+       (sha256
+        (base32
+         "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        '(begin
+           (with-directory-excursion "libs"
+             (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf")))
+               ;; Delete bundled software, except Lua which cannot easily be
+               ;; used as an external dependency, pplib and xpdf which aren't
+               ;; supported as system libraries (see m4/kpse-xpdf-flags.m4).
+               (for-each delete-file-recursively
+                         (scandir "."
+                                  (lambda (file)
+                                    (and (not (member file preserved-directories))
+                                         (eq? 'directory (stat:type (stat file)))))))))
+           ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
+           #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("texlive-extra-src" ,texlive-extra-src)
+       ("config" ,config)
+       ("texlive-scripts"
+        ,(origin
+           (method svn-fetch)
+           (uri (svn-reference
+                 (url (string-append "svn://www.tug.org/texlive/tags/"
+                                     %texlive-tag "/Master/texmf-dist/"
+                                     "/scripts/texlive"))
+                 (revision %texlive-revision)))
+           (file-name (string-append "texlive-scripts-"
+                                     (number->string %texlive-revision)
+                                     "-checkout"))
+           (sha256
+            (base32
+             "10xpa4nnz1biap7qfv7fb0zk6132ki5g1j8w0bqwkggfncdfl07d"))))
+       ("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("fontforge" ,fontforge)
+       ("freetype" ,freetype)
+       ("gd" ,gd)
+       ("gmp" ,gmp)
+       ("ghostscript" ,ghostscript)
+       ("graphite2" ,graphite2)
+       ("harfbuzz" ,harfbuzz)
+       ("icu4c" ,icu4c)
+       ("libpaper" ,libpaper)
+       ("libpng" ,libpng)
+       ("libxaw" ,libxaw)
+       ("libxt" ,libxt)
+       ("mpfr" ,mpfr)
+       ("perl" ,perl)
+       ("pixman" ,pixman)
+       ("potrace" ,potrace)
+       ("python" ,python)
+       ("ruby" ,ruby)
+       ("tcsh" ,tcsh)
+       ("teckit" ,teckit)
+       ("zlib" ,zlib)
+       ("zziplib" ,zziplib)))
+    (native-inputs
+     (list pkg-config))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:out-of-source? #t
+       #:configure-flags
        '("--disable-static"
          "--disable-native-texlive-build"
+         "--enable-shared"
+         "--with-banner-add=/GNU Guix"
          "--with-system-cairo"
          "--with-system-freetype2"
          "--with-system-gd"
@@ -341,16 +335,15 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
          "--with-system-libpng"
          "--with-system-mpfr"
          "--with-system-pixman"
-         "--with-system-poppler"
          "--with-system-potrace"
          "--with-system-teckit"
-         "--with-system-xpdf"
          "--with-system-zlib"
          "--with-system-zziplib"
          ;; LuaJIT is not ported to powerpc64le* yet.
          ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
                                                  (%current-system)))
                '("--disable-luajittex"
+                 "--disable-luajithbtex"
                  "--disable-mfluajit")
                '()))
 
@@ -363,102 +356,187 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                            (string-prefix? "mips64" s)
                            (string-prefix? "powerpc64le" s))))
 
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'configure-ghostscript-executable
-          ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
-          ;; and the "gs" ghostscript executable on Unix. It detects Unix by
-          ;; checking for the existence of the /usr/bin directory. Since
-          ;; Guix System does not have /usr/bin, it is also detected as Windows.
-          (lambda* (#:key inputs #:allow-other-keys)
-            (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
-              (("gswin32c") "gs"))
-            (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
-              (("\"gs\"")
-               (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
-            #t))
-        (add-after 'unpack 'use-code-for-new-poppler
-          (lambda _
-            (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftoepdf.cc")
-            (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftosrc.cc")
-            #t))
-        (add-after 'unpack 'patch-dvisvgm-build-files
-          (lambda _
-            ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
-            ;; the appropriate linker flags are not added.
-            (substitute* "texk/dvisvgm/configure"
-              (("^have_libgs=yes" all)
-               (string-append all "\nHAVE_LIBGS=1")))
-            #t))
-        (add-after 'unpack 'disable-failing-test
-          (lambda _
-            ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
-            ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
-            (substitute* "texk/web2c/omegafonts/check.test"
-              (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
-               "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
-            #t))
-        (add-after 'install 'postint
-          (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-            (let* ((out (assoc-ref outputs "out"))
-                   (share (string-append out "/share"))
-                   (texlive-extra (assoc-ref inputs "texlive-extra-src"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-              (substitute* (string-append share "/texmf-dist/web2c/texmf.cnf")
-                ;; Don't truncate lines.
-                (("^error_line = .*$") "error_line = 254\n")
-                (("^half_error_line = .*$") "half_error_line = 238\n")
-                (("^max_print_line = .*$") "max_print_line = 1000\n"))
-              ;; Create symbolic links for the latex variants and their
-              ;; man pages.
-              (with-directory-excursion (string-append out "/bin/")
-                (for-each symlink
-                          '("pdftex" "pdftex"   "xetex"   "luatex")
-                          '("latex"  "pdflatex" "xelatex" "lualatex")))
-              (with-directory-excursion (string-append share "/man/man1/")
-                (symlink "luatex.1" "lualatex.1"))
-              ;; Unpack texlive-extra and install tlpkg.
-              (mkdir "texlive-extra")
-              (with-directory-excursion "texlive-extra"
-                (apply unpack (list #:source texlive-extra))
-                (apply patch-source-shebangs (list #:source texlive-extra))
-                (invoke "mv" "tlpkg" share))
-              (let ((scripts (string-append share "/texmf-dist/scripts/texlive/")))
-                (mkdir-p scripts)
-                (copy-recursively (assoc-ref inputs "texlive-scripts") scripts)
-                ;; Make sure that fmtutil can find its Perl modules.
-                (substitute* (string-append scripts "fmtutil.pl")
-                  (("\\$TEXMFROOT/") (string-append share "/"))))
-
-              ;; texlua shebangs are not patched by the patch-source-shebangs
-              ;; phase because the texlua executable does not exist at that
-              ;; time.
-              (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
-              (with-directory-excursion out
-                (patch-source-shebangs))))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "TEXMF")
-           (files '("share/texmf-dist"))
-           (separator #f))
-          (search-path-specification
-           (variable "TEXMFCNF")
-           (files '("share/texmf-dist/web2c"))
-           (separator #f))))
-   (synopsis "TeX Live, a package of the TeX typesetting system")
-   (description
-    "TeX Live provides a comprehensive TeX document production system.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'configure-ghostscript-executable
+           ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
+           ;; and the "gs" ghostscript executable on Unix. It detects Unix by
+           ;; checking for the existence of the /usr/bin directory. Since
+           ;; Guix System does not have /usr/bin, it is also detected as Windows.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
+               (("gswin32c") "gs"))
+             (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
+               (("\"gs\"")
+                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
+             #t))
+         (add-after 'unpack 'patch-dvisvgm-build-files
+           (lambda _
+             ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
+             ;; the appropriate linker flags are not added.
+             (substitute* "texk/dvisvgm/configure"
+               (("^have_libgs=yes" all)
+                (string-append all "\nHAVE_LIBGS=1")))
+             #t))
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
+             ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
+             (substitute* "texk/web2c/omegafonts/check.test"
+               (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
+                "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
+             #t))
+         ,@(if (target-ppc32?)
+             ;; Some mendex tests fail on some architectures.
+             `((add-after 'unpack 'skip-mendex-tests
+                 (lambda _
+                   (substitute* '("texk/mendexk/tests/mendex.test"
+                                  "texk/upmendex/tests/upmendex.test")
+                     (("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1")
+                      "srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77")))))
+             '())
+         (add-after 'unpack 'unpack-texlive-extra
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-extra")
+             (with-directory-excursion "texlive-extra"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-extra-src"))))))
+         (add-after 'unpack-texlive-extra 'unpack-texlive-scripts
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-scripts")
+             (with-directory-excursion "texlive-scripts"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-scripts"))))))
+         (add-after 'unpack-texlive-scripts 'patch-scripts
+           (lambda _
+             (let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
+                                     (find-files "texk/texlive/linked_scripts"
+                                                 "\\.sh$")
+                                     (find-files "texlive-scripts" "\\.sh$")))
+                    (commands '("awk" "basename" "cat" "grep" "mkdir" "rm"
+                                "sed" "sort" "uname"))
+                    (command-regexp (format #f "\\b(~a)\\b"
+                                            (string-join commands "|")))
+                    (iso-8859-1-encoded-scripts
+                     '("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh"
+                       "texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh")))
+
+               (define (substitute-commands scripts)
+                 (substitute* scripts
+                   ((command-regexp dummy command)
+                    (which command))))
+
+               (substitute-commands (lset-difference string= scripts
+                                                     iso-8859-1-encoded-scripts))
+
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute-commands iso-8859-1-encoded-scripts))
+
+               #t)))
+         (add-after 'check 'customize-texmf.cnf
+           ;; The default texmf.cnf is provided by this package, texlive-bin.
+           ;; Every variable of interest is set relatively to the GUIX_TEXMF
+           ;; environment variable defined via a search path specification
+           ;; further below.  The configuration file is patched after the test
+           ;; suite has run, as it relies on the default configuration to find
+           ;; its paths (and the GUIX_TEXMF variable isn't set yet).
+           (lambda _
+             ;; The current directory is build/ because of the out-of-tree
+             ;; build.
+             (let* ((source    (first (scandir ".." (cut string-suffix?
+                                                         "source" <>))))
+                    (texmf.cnf (string-append "../" source
+                                              "/texk/kpathsea/texmf.cnf")))
+               (substitute* texmf.cnf
+                 (("^TEXMFROOT = .*")
+                  "TEXMFROOT = {$GUIX_TEXMF}/..\n")
+                 (("^TEXMF = .*")
+                  "TEXMF = {$GUIX_TEXMF}\n")
+                 (("^%TEXMFCNF = .*")
+                  "TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
+                 ;; Don't truncate lines.
+                 (("^error_line = .*$") "error_line = 254\n")
+                 (("^half_error_line = .*$") "half_error_line = 238\n")
+                 (("^max_print_line = .*$") "max_print_line = 1000\n")))
+             #t))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+             (let* ((out (assoc-ref outputs "out"))
+                    (patch-source-shebangs (assoc-ref %standard-phases
+                                                      'patch-source-shebangs))
+                    (share (string-append out "/share"))
+                    (scripts (string-append share
+                                            "/texmf-dist/scripts/texlive"))
+                    (source (string-append
+                             "../" (first (scandir ".." (cut string-suffix?
+                                                             "source" <>)))))
+                    (tl-extra-root (string-append source "/texlive-extra"))
+                    (tl-extra-dir (first
+                                   (scandir tl-extra-root
+                                            (negate
+                                             (cut member <> '("." ".."))))))
+                    (tlpkg-src (string-append tl-extra-root "/" tl-extra-dir
+                                              "/tlpkg"))
+                    (config.guess (search-input-file inputs
+                                                     "/bin/config.guess")))
+
+               ;; Create symbolic links for the latex variants and their
+               ;; man pages.
+               (with-directory-excursion (string-append out "/bin/")
+                 (for-each symlink
+                           '("pdftex" "pdftex"   "xetex"   "luatex")
+                           '("latex"  "pdflatex" "xelatex" "lualatex")))
+               (with-directory-excursion (string-append share "/man/man1/")
+                 (symlink "luatex.1" "lualatex.1"))
+
+               ;; Install tlpkg.
+               (copy-recursively tlpkg-src (string-append share "/tlpkg"))
+
+               ;; Install texlive-scripts.
+               (copy-recursively (string-append
+                                  source "/texlive-scripts/source/")
+                                 scripts)
+
+               ;; Make sure that fmtutil can find its Perl modules.
+               (substitute* (string-append scripts "/fmtutil.pl")
+                 (("\\$TEXMFROOT/")
+                  (string-append share "/")))
+
+               ;; Likewise for updmap.pl.
+               (substitute* (string-append scripts "/updmap.pl")
+                 (("\\$TEXMFROOT/tlpkg")
+                  (string-append share "/tlpkg")))
+
+               ;; Likewise for the tlmgr.
+               (substitute* (string-append scripts "/tlmgr.pl")
+                 ((".*\\$::installerdir = \\$Master.*" all)
+                  (format #f "  $Master = ~s;~%~a" share all)))
+
+               ;; Install the config.guess script, required by tlmgr.
+               (with-directory-excursion share
+                 (mkdir-p "tlpkg/installer/")
+                 (symlink config.guess "tlpkg/installer/config.guess"))
+
+               ;; texlua shebangs are not patched by the patch-source-shebangs
+               ;; phase because the texlua executable does not exist at that
+               ;; time.
+               (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
+               (with-directory-excursion out
+                 (patch-source-shebangs))))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_TEXMF")
+            (files '("share/texmf-dist")))))
+    (synopsis "TeX Live, a package of the TeX typesetting system")
+    (description
+     "TeX Live provides a comprehensive TeX document production system.
 It includes all the major TeX-related programs, macro packages, and fonts
 that are free software, including support for many languages around the
 world.
 
 This package contains the binaries.")
-   (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
-   (home-page "https://www.tug.org/texlive/")))
+    (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
+    (home-page "https://www.tug.org/texlive/")))
 
 (define-public texlive-libkpathsea
   (package/inherit texlive-bin
@@ -493,6 +571,12 @@ This package contains the binaries.")
     (description "kpathsea is a library, whose purpose is to return a filename
 from a list of user-specified directories similar to how shells look up
 executables.  It is maintained as a part of TeX Live.")))
+
+(define-syntax-rule (define-deprecated-package old-name name)
+  "Define OLD-NAME as a deprecated package alias for NAME."
+  (define-deprecated/public old-name name
+    (deprecated-package (symbol->string 'old-name) name)))
+
 
 (define texlive-docstrip
   (package
@@ -500,7 +584,7 @@ executables.  It is maintained as a part of TeX Live.")))
               "texlive-docstrip"
               (list "/tex/latex/base/docstrip.tex")
               (base32
-               "1f9sx1lp7v34zwm186msf03q2h28rrg0lh65z59zc0cvqffs6dvb")
+               "1pxbqbia0727vg01xv8451szm55z2w8sb0vv3kf4iqx5ibb6m0d2")
               #:trivial? #t))
     (home-page "https://www.ctan.org/texlive")
     (synopsis "Utility to strip documentation from TeX files.")
@@ -515,7 +599,7 @@ documentation from TeX files.  It is part of the LaTeX base.")
               (list "/tex/generic/unicode-data/"
                     "/doc/generic/unicode-data/")
               (base32
-               "0zy4v9y667cka5fi4dnc6x500907812y7pcaf63s5qxi8l7khxxy")
+               "1d41zvjsig7sqf2j2m89dnbv3gicpb16r04b4ikps4gabhbky83k")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/unicode-data")
     (synopsis "Unicode data and loaders for TeX")
@@ -530,8 +614,7 @@ set up and one for initializing XeTeX character classes as has been carried
 out to date by @code{unicode-letters.tex}. ")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-unicode-data
-  (deprecated-package "texlive-generic-unicode-data" texlive-unicode-data))
+(define-deprecated-package texlive-generic-unicode-data texlive-unicode-data)
 
 (define-public texlive-hyphen-base
   (package
@@ -548,7 +631,7 @@ out to date by @code{unicode-letters.tex}. ")
                     "/tex/generic/hyphen/hypht1.tex"
                     "/tex/generic/hyphen/zerohyph.tex")
               (base32
-               "0f19nml4hdx9lh7accqdk1b9ismwfm2523l5zsc4kb4arysgcakz")
+               "1sagn9aybs34m1s6m3zwya5g5kbiwfnw8ifcgxssygmzzs88dgjp")
               #:trivial? #t))
     (home-page "https://tug.org/texlive/")
     (synopsis "Core hyphenation support files")
@@ -569,7 +652,7 @@ default versions of those), etc.")
                     "/fonts/enc/dvips/base/"
                     "/tex/generic/dvips/")
               (base32
-               "1qr7h0ahycmz5wmpv54glfss9jqdmmyymj6kim626d1c8v9bmg86")
+               "0rns1hpjy4fmsskmkwx197j8qbgdmyj0j9214sq9vhpa6nv7czm3")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/dvips")
     (synopsis "DVI to PostScript drivers")
@@ -594,24 +677,24 @@ allow existing format source files to be used with newer engines, for example
 to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
     (license license:public-domain)))
 
-(define-public texlive-generic-tex-ini-files
-  (deprecated-package "texlive-generic-tex-ini-files" texlive-tex-ini-files))
+(define-deprecated-package texlive-generic-tex-ini-files texlive-tex-ini-files)
 
-(define-public texlive-metafont-base
+(define-public texlive-metafont
   (package
-    (name "texlive-metafont-base")
+    (name "texlive-metafont")
     (version (number->string %texlive-revision))
     (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
+              (method svn-multi-fetch)
+              (uri (svn-multi-reference
                     (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/metafont"))
+                                        %texlive-tag "/Master/texmf-dist"))
+                    (locations '("/metafont/"
+                                 "/fonts/source/public/modes/"))
                     (revision %texlive-revision)))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yl4n8cn5xqk2nc22zgzq6ymd7bhm6xx1mz3azip7i3ki4bhb5q5"))))
+                "17y72xmz5a36vdsq7pfrwj0j4c7llrm9j5kcq349cpaas7r32lmb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -620,14 +703,17 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((cwd (getcwd)))
+             (let* ((cwd (getcwd))
+                    (mf (string-append cwd "/metafont"))
+                    (modes (string-append cwd "/fonts/source/public/modes")))
                (setenv "MFINPUTS"
-                       (string-append cwd "/base:"
-                                      cwd "/misc:"
-                                      cwd "/roex:"
-                                      cwd "/feynmf:"
-                                      cwd "/mfpic:"
-                                      cwd "/config")))
+                       (string-append modes ":"
+                                      mf "/base:"
+                                      mf "/misc:"
+                                      mf "/roex:"
+                                      mf "/feynmf:"
+                                      mf "/mfpic:"
+                                      mf "/config")))
              (mkdir "build")
              (with-directory-excursion "build"
                (invoke "inimf" "mf.mf"))))
@@ -635,20 +721,24 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
                     (base (string-append out "/share/texmf-dist/web2c"))
-                    (mf   (string-append out "/share/texmf-dist/metafont/base")))
+                    (mf   (string-append out "/share/texmf-dist/metafont/")))
                (mkdir-p base)
                (mkdir-p mf)
                (install-file "build/mf.base" base)
-               (copy-recursively "base" mf)
-               #t))))))
+               (with-directory-excursion "metafont"
+                 (for-each (lambda (where)
+                             (copy-recursively where (string-append mf where)))
+                           (list "base" "misc" "config")))))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)))
+     (list texlive-bin))
     (home-page "https://www.ctan.org/pkg/metafont")
     (synopsis "Metafont base files")
     (description "This package provides the Metafont base files needed to
 build fonts using the Metafont system.")
     (license license:knuth)))
 
+(define-deprecated-package texlive-metafont-base texlive-metafont)
+
 (define-public texlive-fontinst
   (let ((template (simple-texlive-package
                    "texlive-fontinst"
@@ -673,11 +763,9 @@ build fonts using the Metafont system.")
                          "/tex/fontinst/latinetx/"
                          "/tex/fontinst/latinmtx/"
                          "/tex/fontinst/mathmtx/"
-                         "/tex/fontinst/smblmtx/"
-
-                         "/scripts/texlive/fontinst.sh")
+                         "/tex/fontinst/smblmtx/")
                    (base32
-                    "0lprwib7n2ygfxvrw675vhif7ghyip2x6k70kqs9syp8lqxiizf8")
+                    "195jsijrpv828pqy99gm13j31nsc8bsa58zlbln2r0h5j9l44b5g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -727,8 +815,7 @@ build fonts using the Metafont system.")
                                 "fontdoc.sty")))
                    #t)))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-docstrip" ,texlive-docstrip)))
+       (list texlive-bin texlive-docstrip))
       (home-page "https://www.ctan.org/pkg/fontinst")
       (synopsis "Tools for converting and installing fonts for TeX and LaTeX")
       (description "This package provides TeX macros for converting Adobe Font
@@ -739,8 +826,7 @@ metrics (and related information) for a font family that TeX needs to do any
 typesetting in these fonts.")
       (license license:lppl1.1+))))
 
-(define-public texlive-tex-fontinst-base
-  (deprecated-package "texlive-tex-fontinst-base" texlive-fontinst))
+(define-deprecated-package texlive-tex-fontinst-base texlive-fontinst)
 
 (define-public texlive-fontname
   (package
@@ -749,7 +835,7 @@ typesetting in these fonts.")
               (list "/doc/fonts/fontname/fontname.texi"
                     "/fonts/map/fontname/")
               (base32
-               "0h5im5rnhycrrkd6z10f17m2caa8lv594wf482b68qjmnxfrqnxj")
+               "009qvjpw48lajp0gxpvdk10n5qw3q41cpq05ycns67mxwkcaywq6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fontname")
     (synopsis "Scheme for naming fonts in TeX")
@@ -766,7 +852,7 @@ documents.")
                          "/fonts/map/dvips/cm/cmtext-bsr-interpolated.map"
                          "/doc/fonts/cm/")
                    (base32
-                    "09mvl94qrwlb9b4pkigi151l256v3djhwl4m5lgvk6yhn5y75zrp")
+                    "1ky4gvcn8qn3d61bvb39512b8r92igv6il7vh02hw04223yj6q8i")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -780,7 +866,7 @@ documents.")
           `(modify-phases ,phases
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -823,8 +909,7 @@ documents.")
                    (copy-recursively "pk" pk)
                    #t)))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)))
+       (list texlive-bin texlive-metafont))
       (home-page "https://www.ctan.org/pkg/cm")
       (synopsis "Computer Modern fonts for TeX")
       (description "This package provides the Computer Modern fonts by Donald
@@ -833,8 +918,7 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern
 8A.")
       (license license:knuth))))
 
-(define-public texlive-fonts-cm
-  (deprecated-package "texlive-fonts-cm" texlive-cm))
+(define-deprecated-package texlive-fonts-cm texlive-cm)
 
 (define-public texlive-cm-super
   (let ((template (simple-texlive-package
@@ -868,8 +952,7 @@ originals.")
       ;; With font exception
       (license license:gpl2+))))
 
-(define-public texlive-fonts-cm-super
-  (deprecated-package "texlive-fonts-cm-super" texlive-cm-super))
+(define-deprecated-package texlive-fonts-cm-super texlive-cm-super)
 
 (define-public texlive-courier
   (package
@@ -889,7 +972,7 @@ originals.")
                     "/tex4ht/ht-fonts/alias/adobe/courier/"
                     "/tex4ht/ht-fonts/unicode/adobe/courier/")
               (base32
-               "1hfgisdi7mjf5156ax6d6zsbiq42zkmp1x5lg17rgzf61k6d6z1y")
+               "05lglavi073glj26k9966351hka5ac22g4vim61dkfy001vz4i7r")
               #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
@@ -898,6 +981,45 @@ font from Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
+(define-public texlive-tex-gyre
+  (package
+    (inherit (simple-texlive-package
+              "texlive-tex-gyre"
+              '("/doc/fonts/tex-gyre/GUST-FONT-LICENSE.txt"
+                "/fonts/afm/public/tex-gyre/"
+                "/fonts/enc/dvips/tex-gyre/"
+                "/fonts/map/dvips/tex-gyre/"
+                "/fonts/opentype/public/tex-gyre/"
+                "/fonts/tfm/public/tex-gyre/"
+                "/fonts/type1/public/tex-gyre/"
+                "/tex/latex/tex-gyre/")
+              (base32
+               "1ldnlmclghm3gnyv02r8a6cqybygz2ifq07mhykhf43h1pw3aq7k")
+              #:trivial? #t))
+    (home-page "https://ctan.org/pkg/tex-gyre")
+    (synopsis "TeX fonts extending URW fonts")
+    (description
+     "The TeX-GYRE bundle consist of multiple font families:
+@itemize @bullet
+@item Adventor, based on the URW Gothic L family of fonts;
+@item Bonum, based on the URW Bookman L family;
+@item Chorus, based on URW Chancery L Medium Italic;
+@item Cursor, based on URW Nimbus Mono L;
+@item Heros, based on URW Nimbus Sans L;
+@item Pagella, based on URW Palladio L;
+@item Schola, based on the URW Century Schoolbook L family;
+@item Termes, based on the URW Nimbus Roman No9 L family of fonts.
+@end itemize
+
+The constituent standard faces of each family have been greatly extended
+(though Chorus omits Greek support and has no small-caps family).  Each
+family is available in Adobe Type 1 and Open Type formats, and LaTeX
+support (for use with a variety of encodings) is provided.")
+    ;; The GUST font license (GFL) is legally identical to the LaTeX Project
+    ;; Public License (LPPL), version 1.3c or later, but comes with an
+    ;; additional but not legally binding clause.
+    (license license:lppl1.3c+)))
+
 (define-public texlive-lm
   (package
     (inherit (simple-texlive-package
@@ -912,7 +1034,7 @@ font from Adobe's basic set.")
                     "/fonts/type1/public/lm/"
                     "/tex/latex/lm/")
               (base32
-               "0i1hwr8rp0jqyvs4qyplrirscd4w7lsgwsncyv3yzy80bsa56jq5")
+               "0yyk0dr4yms82mwy4dc03zf5igyhgcb65icdah042rk23rlpxygv")
               #:trivial? #t))
     (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/")
     (synopsis "Latin Modern family of fonts")
@@ -924,76 +1046,69 @@ Computers & Typesetting series.")
     ;; additional but not legally binding clause.
     (license license:lppl1.3c+)))
 
-(define-public texlive-fonts-lm
-  (deprecated-package "texlive-fonts-lm" texlive-lm))
+(define-deprecated-package texlive-fonts-lm texlive-lm)
 
-(define-public texlive-fonts-knuth-lib
-  (package
-    (name "texlive-fonts-knuth-lib")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/fonts/source/public/knuth-lib"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0in9aqyi8jkyf9d16z0li50z5fpwj1iwgwm83gmvwqcf7chfs04y"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
-       #:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
-               ;; Tell mf where to find mf.base
-               (setenv "MFBASES"
-                       (string-append mf "/share/texmf-dist/web2c"))
-               ;; Tell mf where to look for source files
-               (setenv "MFINPUTS"
-                       (string-append (getcwd) ":"
-                                      mf "/share/texmf-dist/metafont/base")))
-             (mkdir "build")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" font)
-                         (invoke "mf" "-progname=mf"
-                                 "-output-directory=build"
-                                 (string-append "\\"
-                                                "mode:=ljfour; "
-                                                "mag:=1; "
-                                                "batchmode; "
-                                                "input " font)))
-                       (find-files "." "(manfnt|logo.+)\\.mf$"))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (tfm (string-append
-                          out "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
-                    (mf  (string-append
-                          out "/share/texmf-dist/fonts/source/public/knuth-lib")))
-               (for-each (cut install-file <> tfm)
-                         (find-files "build" "\\.*"))
-               (for-each (cut install-file <> mf)
-                         (find-files "." "\\.mf"))
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)))
-    (home-page "https://www.ctan.org/pkg/knuth-lib")
-    (synopsis "Small library of METAFONT sources")
-    (description "This is a collection of core TeX and METAFONT macro files
+(define-public texlive-knuth-lib
+  (let ((template (simple-texlive-package
+                   "texlive-knuth-lib"
+                   (list "/fonts/source/public/knuth-lib/"
+                         "/tex/generic/knuth-lib/"
+                         "/tex/plain/knuth-lib/")
+                   (base32
+                    "1cxyqqprp8sj2j4zp9l0wry8cq2awpz3a8i5alzpc4ndg7a6pgdf")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (srfi srfi-26)))
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let ((mf (assoc-ref inputs "texlive-metafont")))
+                     ;; Tell mf where to find mf.base
+                     (setenv "MFBASES"
+                             (string-append mf "/share/texmf-dist/web2c"))
+                     ;; Tell mf where to look for source files
+                     (setenv "MFINPUTS"
+                             (string-append (getcwd) ":"
+                                            mf "/share/texmf-dist/metafont/base")))
+                   (mkdir "build")
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "batchmode; "
+                                                      "input " font)))
+                             (find-files "." "(manfnt|logo.+)\\.mf$")))
+                 #t))
+             (add-after 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let* ((out (assoc-ref outputs "out"))
+                          (tfm (string-append
+                                out "/share/texmf-dist/fonts/tfm/public/knuth-lib")))
+                     (for-each (cut install-file <> tfm)
+                               (find-files "build" "\\.tfm"))
+                     #t))))))))
+      (native-inputs
+       (list texlive-bin texlive-metafont))
+      (home-page "https://www.ctan.org/pkg/knuth-lib")
+      (synopsis "Small library of METAFONT sources")
+      (description "This is a collection of core TeX and METAFONT macro files
 from Donald Knuth, including the plain format, plain base, and the MF logo
 fonts.")
-    (license license:knuth)))
+      (license license:knuth))))
+
+(define-deprecated-package texlive-fonts-knuth-lib texlive-knuth-lib)
 
 (define-public texlive-fonts-latex
   (package
@@ -1022,7 +1137,7 @@ fonts.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -1060,9 +1175,7 @@ fonts.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/latex-fonts")
     (synopsis "Collection of fonts used in LaTeX distributions")
     (description "This is a collection of fonts for use with standard LaTeX
@@ -1071,27 +1184,78 @@ class), line and circle fonts (for use in the picture environment) and LaTeX
 symbol fonts.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-mflogo
-  (package
-    (name "texlive-latex-mflogo")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "mflogo"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "15i2ib6nvhf31g1b92c6njf7n0g29znlq7hbfp9ii7qabhcwwvrj"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/mflogo"))
-    (home-page "http://www.ctan.org/pkg/mflogo")
-    (synopsis "LaTeX support for Metafont logo fonts")
-    (description
-     "This package provides LaTeX and font definition files to access the
+(define-public texlive-mflogo
+  (let ((template (simple-texlive-package
+                   "texlive-mflogo"
+                   (list "/doc/latex/mflogo/"
+                         "/source/latex/mflogo/"
+                         "/fonts/source/public/mflogo/logosl8.mf")
+                   (base32
+                    "1vb4mg7fh4k54g7nqwiw3qm4iir8whpfnspis76l4sddzar1amh7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build texlive-build-system)
+            (guix build utils)
+            (srfi srfi-1)
+            (srfi srfi-26)))
+         ((#:tex-directory _ #t)
+          "latex/mflogo")
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/mflogo") #t))
+             (add-after 'build 'build-font-metrics
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((root "../../..")
+                       (mf (assoc-ref inputs "texlive-metafont"))
+                       (kl (assoc-ref inputs "texlive-knuth-lib")))
+                   ;; Tell mf where to find mf.base
+                   (setenv "MFBASES"
+                           (string-append mf "/share/texmf-dist/web2c"))
+                   ;; Tell mf where to look for source files
+                   (setenv "MFINPUTS"
+                           (string-append root ":"
+                                          mf "/share/texmf-dist/metafont/base:"
+                                          kl "/share/texmf-dist/fonts/source/public/knuth-lib:"
+                                          root "/fonts/source/public/mflogo/"))
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "scrollmode; "
+                                                      "input " (basename font))))
+                             (find-files (string-append root
+                                                        "/fonts/source/public/mflogo/")
+                                         "\\.mf$")))
+                 #t))
+             (add-before 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (tfm (string-append
+                              out "/share/texmf-dist/fonts/tfm/public/mflogo")))
+                   (for-each (lambda (file)
+                               (install-file file tfm)
+                               (delete-file file))
+                             (find-files "build" "\\.tfm"))
+                   #t)))))))
+      (native-inputs
+       (list texlive-bin texlive-metafont texlive-knuth-lib))
+      (home-page "http://www.ctan.org/pkg/mflogo")
+      (synopsis "LaTeX support for Metafont logo fonts")
+      (description
+       "This package provides LaTeX and font definition files to access the
 Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
 logos in LaTeX documents.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-mflogo texlive-mflogo)
 
 (define-public texlive-mflogo-font
   (package
@@ -1114,8 +1278,7 @@ source; they have since been autotraced and reissued in Adobe Type 1 format by
 Taco Hoekwater.")
     (license license:knuth)))
 
-(define-public texlive-fonts-mflogo-font
-  (deprecated-package "texlive-fonts-mflogo-font" texlive-mflogo-font))
+(define-deprecated-package texlive-fonts-mflogo-font texlive-mflogo-font)
 
 (define-public texlive-amsfonts
   (let ((template (simple-texlive-package
@@ -1147,171 +1310,11 @@ Taco Hoekwater.")
           `(modify-phases ,phases
              (add-before 'build 'build-fonts
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
-                 (let ((build (string-append (getcwd) "/build-fonts")))
-                   (mkdir-p build)
-                   (with-directory-excursion "fonts/source/public/amsfonts"
-                     (for-each (lambda (font)
-                                 (format #t "building font ~a\n" (basename font ".mf"))
-                                 (with-directory-excursion (dirname font)
-                                   (invoke "mf" "-progname=mf"
-                                           (string-append "-output-directory=" build)
-                                           (string-append "\\"
-                                                          "mode:=ljfour; "
-                                                          "mag:=1; "
-                                                          "nonstopmode; "
-                                                          "input "
-                                                          (getcwd) "/"
-                                                          (basename font ".mf")))))
-                               (find-files "." "[0-9]+\\.mf$"))))
+                 ;; Allow self fonts sources and other resources to be
+                 ;; discovered.
+                 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF")
+                                                     ":" (getcwd)))
 
-                 ;; There are no metafont sources for the Euler fonts, so we
-                 ;; convert the afm files instead.
-                 (let ((build (string-append (getcwd) "/build-fonts/euler")))
-                   (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
-                     (for-each (lambda (font)
-                                 (format #t "converting afm font ~a\n" (basename font ".afm"))
-                                 (invoke "afm2tfm" font
-                                         (string-append build "/"
-                                                        (basename font ".tfm"))))
-                               (find-files "." "\\.afm$")))
-
-                   ;; Frustratingly, not all fonts can be created this way.  To
-                   ;; generate eufm8.tfm, for example, we first scale down
-                   ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
-                   ;; the pl file.
-                   (setenv "TEXINPUTS"
-                           (string-append build "//:"
-                                          (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
-                   (with-directory-excursion build
-                     (for-each (match-lambda
-                                 (((target-base target-size)
-                                   (source-base source-size))
-                                  (let ((factor (number->string
-                                                 (truncate/ (* 1000 target-size)
-                                                            source-size))))
-                                    (invoke "tex"
-                                            "-interaction=scrollmode"
-                                            (string-append "\\input fontinst.sty "
-                                                           "\\transformfont{" target-base "}"
-                                                           "{\\scalefont{" factor "}"
-                                                           "{\\fromafm{" source-base "}}} "
-                                                           "\\bye")))
-                                  (invoke "pltotf"
-                                          (string-append target-base ".pl")
-                                          (string-append target-base ".tfm"))
-                                  (delete-file (string-append target-base ".pl"))))
-
-                               '((("eufm8" 8) ("eufm10" 10))
-
-                                 (("eufb6" 6) ("eufb7" 7))
-                                 (("eufb8" 8) ("eufb10" 10))
-                                 (("eufb9" 9) ("eufb10" 10))
-
-                                 (("eufm6" 6) ("eufb7" 7))
-                                 (("eufm9" 9) ("eufb10" 10))
-
-                                 (("eurb6" 6) ("eurb7" 7))
-                                 (("eurb8" 8) ("eurb10" 10))
-                                 (("eurb9" 9) ("eurb10" 10))
-
-                                 (("eurm6" 6) ("eurm7" 7))
-                                 (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
-             (add-after 'install 'install-generated-fonts
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (copy-recursively "build-fonts"
-                                   (string-append
-                                    (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
-      (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
-      (home-page "https://www.ctan.org/pkg/amsfonts")
-      (synopsis "TeX fonts from the American Mathematical Society")
-      (description
-       "This package provides an extended set of fonts for use in mathematics,
-including: extra mathematical symbols; blackboard bold letters (uppercase
-only); fraktur letters; subscript sizes of bold math italic and bold Greek
-letters; subscript sizes of large symbols such as sum and product; added sizes
-of the Computer Modern small caps font; cyrillic fonts (from the University of
-Washington); Euler mathematical fonts.  All fonts are provided as Adobe Type 1
-files, and all except the Euler fonts are provided as Metafont source.  The
-distribution also includes the canonical Type 1 versions of the Computer
-Modern family of fonts.  The Euler fonts are supported by separate packages;
-details can be found in the documentation.")
-      (license license:silofl1.1))))
-
-;; XXX: we can only change texlive-amsfonts on the core-updates branch.  This
-;; patched version generates only tfm files for fonts provided by the source
-;; files of this package, not variants of the fonts provided by texlive-cm.
-(define-public texlive-amsfonts/patched
-  (let ((template (simple-texlive-package
-                   "texlive-amsfonts"
-                   (list "/source/latex/amsfonts/"
-                         "/fonts/source/public/amsfonts/"
-                         "/fonts/type1/public/amsfonts/"
-                         "/fonts/afm/public/amsfonts/"
-                         "/fonts/map/dvips/amsfonts/"
-                         "/tex/plain/amsfonts/"
-                         "/doc/fonts/amsfonts/")
-                   (base32
-                    "15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
-    (package
-      (inherit template)
-      (arguments
-       (substitute-keyword-arguments (package-arguments template)
-         ((#:build-targets _ #t)
-          '(list "amsfonts.ins"))
-         ((#:tex-directory _ #t)
-          "latex/amsfonts")
-         ((#:modules modules '())
-          `((guix build texlive-build-system)
-            (guix build utils)
-            (ice-9 match)
-            (srfi srfi-1)
-            (srfi srfi-26)))
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'build 'build-fonts
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
                  (let ((build (string-append (getcwd) "/build-fonts")))
                    (mkdir-p build)
                    (with-directory-excursion "fonts/source/public/amsfonts"
@@ -1333,7 +1336,7 @@ details can be found in the documentation.")
                  ;; convert the afm files instead.
                  (let ((build (string-append (getcwd) "/build-fonts/euler")))
                    (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
+                   (with-directory-excursion "fonts/afm/public/amsfonts/euler"
                      (for-each (lambda (font)
                                  (format #t "converting afm font ~a\n" (basename font ".afm"))
                                  (invoke "afm2tfm" font
@@ -1347,10 +1350,9 @@ details can be found in the documentation.")
                    ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
                    ;; the pl file.
                    (setenv "TEXINPUTS"
-                           (string-append build "//:"
+                           (string-append ":" build "//:"
                                           (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
+                                          (getcwd) "/source/latex/amsfonts//:"))
                    (with-directory-excursion build
                      (for-each (match-lambda
                                  (((target-base target-size)
@@ -1385,19 +1387,15 @@ details can be found in the documentation.")
 
                                  (("eurm6" 6) ("eurm7" 7))
                                  (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
+                                 (("eurm9" 9) ("eurm10" 10))))))))
              (add-after 'install 'install-generated-fonts
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (copy-recursively "build-fonts"
                                    (string-append
                                     (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
+       (list (texlive-updmap.cfg (list texlive-fontinst))))
       (home-page "https://www.ctan.org/pkg/amsfonts")
       (synopsis "TeX fonts from the American Mathematical Society")
       (description
@@ -1413,11 +1411,9 @@ Modern family of fonts.  The Euler fonts are supported by separate packages;
 details can be found in the documentation.")
       (license license:silofl1.1))))
 
-(define-public texlive-fonts-amsfonts
-  (deprecated-package "texlive-fonts-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-fonts-amsfonts texlive-amsfonts)
 
-(define-public texlive-latex-amsfonts
-  (deprecated-package "texlive-latex-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-latex-amsfonts texlive-amsfonts)
 
 (define-public texlive-mkpattern
   (package
@@ -1461,7 +1457,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
              ;; Build tfm font.
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -1486,9 +1482,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
                                  "/share/texmf-dist/fonts/tfm/public/etex/"))
                  #t))))))
       (native-inputs
-       `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)
-         ("texlive-cm" ,texlive-cm)))
+       (list texlive-bin texlive-metafont texlive-cm))
       (home-page "https://www.ctan.org/pkg/etex")
       (synopsis "Extended version of TeX")
       (description
@@ -1505,7 +1499,7 @@ incorporates the e-TeX extensions.")
               "texlive-tex-plain"
               (list "/tex/plain/")
               (base32
-               "1m4qpaszwfv7j8a85rlwl7rs4iv5nlj67c1vvn6ysly72h9gjydb")
+               "0gwygkm8i2jmpf7bfg6fb6824rl7fq4a2s0wni73v0fz6s4chr1n")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
@@ -1612,11 +1606,9 @@ language.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-bulgarian" "bg"
-              (list "/doc/generic/hyph-utf8/bg/azbukaExtended.pdf"
-                    "/doc/generic/hyph-utf8/bg/azbukaExtended.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
               (base32
-               "0ngrgw2rmipxss76rgfk62x9nnsgwmaxxna2jqxxhybai3q39mx5")))
+               "0m254y71j3qrb71klvfalfmic3kjy31l85b9cgpdm5yznlsq3i8d")))
     (synopsis "Hyphenation patterns for Bulgarian")
     (description "The package provides hyphenation patterns for the Bulgarian
 language in T2A and UTF-8 encodings.")
@@ -1640,9 +1632,10 @@ T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-chinese" "zh-latn-pinyin"
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
+              '("/tex/generic/hyph-utf8/patterns/ptex/hyph-zh-latn-pinyin.ec.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
               (base32
-               "1j68mry2zy91m1kbzwhin5q2jajf6xh48npdds8wvp1sqmzih2a3")))
+               "1hhh30hcjymm2igpllly04cavsfmd6xrjkd9zax6b2wdxn3ka4pm")))
     (synopsis "Hyphenation patterns for unaccented Chinese pinyin")
     (description "The package provides hyphenation patterns for unaccented
 Chinese pinyin T1/EC and UTF-8 encodings.")
@@ -1784,12 +1777,24 @@ be replaced by files tailored to individual languages.")
               "texlive-hyphen-finnish" "fi"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi.tex")
               (base32
-               "1f72b4ydb4zddvw2i004948khmwzigxkdkwfym5v1kkq0183sfpj")))
+               "1pa8sjs9zvnv1y6dma4s60sf9cr4zrvhxwm6i8cnshm84q16w4bc")))
     (synopsis "Hyphenation patterns for Finnish")
     (description "The package provides hyphenation patterns for Finnish in
 T1/EC and UTF-8 encodings.")
     (license license:public-domain)))
 
+(define-public texlive-hyphen-schoolfinnish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-schoolfinnish" "fi-x-school"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi-x-school.tex")
+              (base32
+               "1w5n6gaclgifbbnafg32vz3mfaibyldvh4yh1ya3sq9fwfmv035c")))
+    (synopsis "Hyphenation patterns for Finnish for school")
+    (description "The package provides hyphenation patterns for Finnish for
+school in T1/EC and UTF-8 encodings.")
+    (license license:public-domain)))
+
 (define-public texlive-hyphen-french
   (package
     (inherit (texlive-hyphen-package
@@ -1851,7 +1856,7 @@ T8M, T8K, and UTF-8 encodings.")
                     "/tex/generic/dehyph/dehyphtex.tex"
                     "/tex/generic/dehyph/README")
               (base32
-               "0wp5by5kkf4ac6li5mbppqzw11500wa7f22p5vpz3m1kwd15zavw")))
+               "17cc5hd0fr3ykpgly9nxaiz4sik3kmfn2wyxz1fkdnqqhl3i41a0")))
     (synopsis "Hyphenation patterns for German")
     (description "This package provides hyphenation patterns for German in
 T1/EC and UTF-8 encodings, for traditional and reformed spelling, including
@@ -1881,10 +1886,10 @@ in monotonic and polytonic spelling in LGR and UTF-8 encodings.")
     (inherit (texlive-hyphen-package
               "texlive-hyphen-hungarian" "hu"
               (list "/doc/generic/huhyphen/"
-                    "/doc/generic/hyph-utf8/hu/"
+                    "/doc/generic/hyph-utf8/languages/hu/"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-hu.tex")
               (base32
-               "1j1b8kksg9r8nmjyjvvz8fr3hgcrjj6jlybf9p06nwrrwm2r8j8f")))
+               "006d2290lcsqzh9ljansbaj9k52s17zgkw0kpsspn5l7a8n00zcl")))
     (synopsis "Hyphenation patterns for Hungarian")
     (description "This package provides hyphenation patterns for Hungarian in
 T1/EC and UTF-8 encodings.")
@@ -1996,11 +2001,12 @@ Europe, in T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-latin" '("la-x-classic" "la-x-liturgic" "la")
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-la-x-classic.ec.tex")
               (base32
-               "0rxg8a4s5cpj8vlkz5a74a036axda5jqgvr3f9aj2cc2x9f2f3w9")))
+               "119rf6sk1f639ky6zr9njn21nsxzgfmjci94y26745qs8w08ilkl")))
     (synopsis "Liturgical Latin hyphenation patterns")
     (description "This package provides hyphenation patterns for Latin in
 T1/EC and UTF-8 encodings, mainly in modern spelling (u when u is needed and v
@@ -2042,6 +2048,19 @@ L7X and UTF-8 encodings.")
     ;; the hyph-utf8 package we choose the LPPL license.
     (license license:lppl)))
 
+(define-public texlive-hyphen-macedonian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-macedonian" "mk"
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-mk.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-mk.macedonian.tex")
+              (base32
+               "1fv6y8gpic5ciw8cclfxc8h3wr5xir1j0a7shixja1pmdyz7db2b")))
+    (synopsis "Macedonian hyphenation patterns")
+    (description "This package provides hypenation patterns for Macedonian.")
+    ;; XXX: License just says 'GPL'.  Assume GPL2 since the file predates GPL3.
+    (license license:gpl2+)))
+
 (define-public texlive-hyphen-mongolian
   (package
     (inherit (texlive-hyphen-package
@@ -2180,10 +2199,10 @@ T2A and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-sanskrit" "sa"
-              (list "/doc/generic/hyph-utf8/sa/hyphenmin.txt"
+              (list "/doc/generic/hyph-utf8/languages/sa/hyphenmin.txt"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex")
               (base32
-               "0gi2qk0wf388h9n25gzhv0cdz67ph83wal8h3iz2sqnpdjsw8kpc")))
+               "1bkzj8swj4lbswf1vr4pb1jg6dixzs7p8h8zm8s8as52h442aida")))
     (synopsis "Sanskrit hyphenation patterns")
     (description "This package provides hyphenation patterns for Sanskrit and
 Prakrit in longdesc transliteration, and in Devanagari, Bengali, Kannada,
@@ -2241,7 +2260,7 @@ T1/EC and UTF-8 encodings.")
               "texlive-hyphen-spanish" "es"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-es.tex")
               (base32
-               "1h3yg9vcq0lf7hxv0ahkqmyg269dxjs8m2mz8sgz5l1fxmvahvaj")))
+               "05lbvjkj304xxghyihk8js0kmg97ddlgijld3bp81bc28h4cav0v")))
     (synopsis "Hyphenation patterns for Spanish")
     (description "The package provides hyphenation patterns for Spanish in
 T1/EC and UTF-8 encodings.")
@@ -2361,7 +2380,7 @@ T1/EC and UTF-8 encodings.")
                     "/doc/generic/hyph-utf8/img/miktex-languages.png"
                     "/doc/generic/hyph-utf8/img/texlive-collection.png")
               (base32
-               "1bar5mc808ch20anhqrdxcwiych359qsvr7mggxpg2l2kq5xdyq0")))
+               "0rgp0zn36gwzqwpmjb9h01ns3m19v3r7lpw1h0pc9bx115w6c9jx")))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -2397,7 +2416,7 @@ T1/EC and UTF-8 encodings.")
              (setenv "TFMFONTS"
                      (string-append (assoc-ref inputs "texlive-cm")
                                     "/share/texmf-dist/fonts/tfm/public/cm:"
-                                    (assoc-ref inputs "texlive-fonts-knuth-lib")
+                                    (assoc-ref inputs "texlive-knuth-lib")
                                     "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
              ;; ...and find all tex files in this environment.
              (setenv "TEXINPUTS"
@@ -2445,14 +2464,14 @@ T1/EC and UTF-8 encodings.")
                 (string-append out "/share/texmf-dist/tex/luatex/hyph-utf8/")))
              #t)))))
     (native-inputs
-     `(("ruby" ,ruby)
-       ("texlive-bin" ,texlive-bin)
-       ;; The following packages are needed for build "tex.fmt", which we need
-       ;; for a working "tex".
-       ("texlive-tex-plain" ,texlive-tex-plain)
-       ("texlive-cm" ,texlive-cm)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
-       ("texlive-hyphen-base" ,texlive-hyphen-base)))
+     (list ruby
+           texlive-bin
+           ;; The following packages are needed for build "tex.fmt", which we need
+           ;; for a working "tex".
+           texlive-tex-plain
+           texlive-cm
+           texlive-knuth-lib
+           texlive-hyphen-base))
     (home-page "https://ctan.org/pkg/hyph-utf8")
     (synopsis "Hyphenation patterns expressed in UTF-8")
     (description "Modern native UTF-8 engines such as XeTeX and LuaTeX need
@@ -2484,8 +2503,7 @@ converters, will completely supplant the older patterns.")
                    license:public-domain
                    license:wtfpl2))))
 
-(define-public texlive-generic-hyph-utf8
-  (deprecated-package "texlive-generic-hyph-utf8" texlive-hyph-utf8))
+(define-deprecated-package texlive-generic-hyph-utf8 texlive-hyph-utf8)
 
 (define-public texlive-dehyph-exptl
   (package
@@ -2494,11 +2512,10 @@ converters, will completely supplant the older patterns.")
               (list "/tex/generic/dehyph-exptl/"
                     "/doc/generic/dehyph-exptl/")
               (base32
-               "1fnqc63gz8gvdyfz45bx8dxn1r1rwrypahs3bqd2vlc8ff76xp86")
+               "0l57a0r4gycp94kz6lrxqvh9m57j2shmbr2laf5zjb0qnrisq46d")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-hyphen-base" ,texlive-hyphen-base)
-       ("texlive-hyph-utf8" ,texlive-hyph-utf8)))
+     (list texlive-hyphen-base texlive-hyph-utf8))
     (home-page "http://projekte.dante.de/Trennmuster/WebHome")
     (synopsis "Hyphenation patterns for German")
     (description "The package provides experimental hyphenation patterns for
@@ -2509,8 +2526,7 @@ bundle.")
     ;; under LPPL.
     (license (list license:expat license:lppl))))
 
-(define-public texlive-generic-dehyph-exptl
-  (deprecated-package "texlive-generic-dehyph-exptl" texlive-dehyph-exptl))
+(define-deprecated-package texlive-generic-dehyph-exptl texlive-dehyph-exptl)
 
 (define-public texlive-ukrhyph
   (package
@@ -2555,11 +2571,7 @@ T2A.")
                      (invoke "make" "-f"
                              (string-append cwd "/source/generic/ruhyphen/Makefile"))))))))))
       (native-inputs
-       `(("coreutils" ,coreutils)
-         ("gawk" ,gawk)
-         ("sed" ,sed)
-         ("grep" ,grep)
-         ("perl" ,perl)))
+       (list coreutils gawk sed grep perl))
       (home-page "https://www.ctan.org/pkg/ruhyphen")
       (synopsis "Hyphenation patterns for Russian")
       (description "The package provides a collection of Russian hyphenation
@@ -2601,7 +2613,7 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
                     "/web2c/tcvn-t5.tcx"
                     "/web2c/viscii-t5.tcx")
               (base32
-               "191i8n3g46p53bb9dkx2ggwpzy7skgg0pbklsrpx8x4ayd86wcaf")
+               "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
               #:trivial? #t))
     (home-page "https://www.tug.org/texlive/")
     (synopsis "Files related to the path searching library for TeX")
@@ -2617,7 +2629,7 @@ mechanism.  This package provides supporting files.")
               "texlive-latexconfig"
               (list "/tex/latex/latexconfig/")
               (base32
-               "1wa7yhdpnz1nyidwgli68fyr33jn951bnniqrih5lj98k09rqc3h")
+               "10ynmd8b9b9l1wl1mva23yz4zir53p6r5z31s39wmxz19pj12qvx")
               #:trivial? #t))
     (home-page "https://www.tug.org/")
     (synopsis "Configuration files for LaTeX-related formats")
@@ -2643,7 +2655,7 @@ formats.")
                          "/tex/latex/base/testpage.tex"
                          "/tex/latex/base/texsys.cfg")
                    (base32
-                    "0m0gjb4hbsf2iqkkx3px4f28r2scjvsjv4zb2whkbnb44apyw1f0")
+                    "0msyjz0937rc7hs77v6la152sdiwd73qj41z1mlyh0m3dns9qz4g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -2677,7 +2689,7 @@ formats.")
                                '(("texlive-etex" . "/etex")
                                  ("texlive-cm" . "/cm")
                                  ("texlive-fonts-latex" . "/latex-fonts")
-                                 ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                                 ("texlive-knuth-lib" . "/knuth-lib")))
                           ":"))
                  (let ((cwd (getcwd)))
                    (setenv "TEXINPUTS"
@@ -2687,7 +2699,8 @@ formats.")
                             cwd "/build:"
                             (string-join
                              (map (match-lambda ((_ . dir) dir)) inputs)
-                             "//:"))))
+                             "//:")))
+                   (setenv "LUAINPUTS" (string-append cwd "/build:")))
 
                  ;; This is the actual build step.
                  (mkdir "build")
@@ -2704,12 +2717,13 @@ formats.")
                  (let ((disabled-formats
                         '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
                           "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                          "platex-dev eptex" "uplatex-dev euptex"
                           "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
-                          "luacsplain luatex"
-                          ,@(if (string-prefix? "powerpc64le"
-                                                (or (%current-target-system)
-                                                    (%current-system)))
-                              '("luajittex") '())
+                          "luacsplain luatex" "optex luatex"
+                          ;; LuaJIT is not ported to powerpc64le* yet and
+                          ;; building these fail on powerpc.
+                          ,@(if (target-powerpc?)
+                              '("luajittex" "luajithbtex" "mfluajit") '())
                           "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
                           "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
                           "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
@@ -2724,7 +2738,10 @@ formats.")
                    (make-file-writable "web2c/fmtutil.cnf")
                    (substitute* "web2c/fmtutil.cnf"
                      (((string-append "^(" (string-join disabled-formats "|") ")") m)
-                      (string-append "#! " m))))
+                      (string-append "#! " m))
+                     (("translate-file=cp227")
+                      (format #f "translate-file=~a/share/texmf-dist/web2c/cp227"
+                              (assoc-ref inputs "texlive-kpathsea")))))
                  (invoke "fmtutil-sys" "--all"
                          "--fmtdir=web2c"
                          (string-append "--cnffile=web2c/fmtutil.cnf"))
@@ -2760,7 +2777,7 @@ formats.")
          ("texlive-kpathsea" ,texlive-kpathsea)
          ("texlive-cm" ,texlive-cm)
          ("texlive-fonts-latex" ,texlive-fonts-latex)
-         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)
          ("texlive-luatexconfig"
           ,(texlive-origin
             "texlive-luatexconfig" (number->string %texlive-revision)
@@ -2768,74 +2785,82 @@ formats.")
                   "/tex/generic/config/luatexiniconfig.tex"
                   "/web2c/texmfcnf.lua")
             (base32
-             "1gi87wy12r8w8fhx9ajcid382dmqzf6b9070b5nndvbbjrvhwf23")))))
+             "0yjx7nw9mgfgnq1givkzbxh7z7ncw1liaddjgm7n2nwn0aw6xfdg")))))
       (propagated-inputs
-       `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
-         ("texlive-etex" ,texlive-etex)
-         ("texlive-hyph-utf8" ,texlive-hyph-utf8)
-         ("texlive-hyphen-base" ,texlive-hyphen-base)
-         ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans)
-         ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek)
-         ("texlive-hyphen-armenian" ,texlive-hyphen-armenian)
-         ("texlive-hyphen-basque" ,texlive-hyphen-basque)
-         ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian)
-         ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian)
-         ("texlive-hyphen-catalan" ,texlive-hyphen-catalan)
-         ("texlive-hyphen-chinese" ,texlive-hyphen-chinese)
-         ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic)
-         ("texlive-hyphen-coptic" ,texlive-hyphen-coptic)
-         ("texlive-hyphen-croatian" ,texlive-hyphen-croatian)
-         ("texlive-hyphen-czech" ,texlive-hyphen-czech)
-         ("texlive-hyphen-danish" ,texlive-hyphen-danish)
-         ("texlive-hyphen-dutch" ,texlive-hyphen-dutch)
-         ("texlive-hyphen-english" ,texlive-hyphen-english)
-         ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto)
-         ("texlive-hyphen-estonian" ,texlive-hyphen-estonian)
-         ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic)
-         ("texlive-hyphen-finnish" ,texlive-hyphen-finnish)
-         ("texlive-hyphen-french" ,texlive-hyphen-french)
-         ("texlive-hyphen-friulan" ,texlive-hyphen-friulan)
-         ("texlive-hyphen-galician" ,texlive-hyphen-galician)
-         ("texlive-hyphen-georgian" ,texlive-hyphen-georgian)
-         ("texlive-hyphen-german" ,texlive-hyphen-german)
-         ("texlive-hyphen-greek" ,texlive-hyphen-greek)
-         ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian)
-         ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic)
-         ("texlive-hyphen-indic" ,texlive-hyphen-indic)
-         ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian)
-         ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua)
-         ("texlive-hyphen-irish" ,texlive-hyphen-irish)
-         ("texlive-hyphen-italian" ,texlive-hyphen-italian)
-         ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji)
-         ("texlive-hyphen-latin" ,texlive-hyphen-latin)
-         ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
-         ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
-         ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
-         ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
-         ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
-         ("texlive-hyphen-pali" ,texlive-hyphen-pali)
-         ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese)
-         ("texlive-hyphen-polish" ,texlive-hyphen-polish)
-         ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese)
-         ("texlive-hyphen-romanian" ,texlive-hyphen-romanian)
-         ("texlive-hyphen-romansh" ,texlive-hyphen-romansh)
-         ("texlive-hyphen-russian" ,texlive-hyphen-russian)
-         ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit)
-         ("texlive-hyphen-serbian" ,texlive-hyphen-serbian)
-         ("texlive-hyphen-slovak" ,texlive-hyphen-slovak)
-         ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian)
-         ("texlive-hyphen-spanish" ,texlive-hyphen-spanish)
-         ("texlive-hyphen-swedish" ,texlive-hyphen-swedish)
-         ("texlive-hyphen-thai" ,texlive-hyphen-thai)
-         ("texlive-hyphen-turkish" ,texlive-hyphen-turkish)
-         ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen)
-         ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian)
-         ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian)
-         ("texlive-hyphen-welsh" ,texlive-hyphen-welsh)
-         ("texlive-unicode-data" ,texlive-unicode-data)
-         ("texlive-ukrhyph" ,texlive-ukrhyph)
-         ("texlive-ruhyphen" ,texlive-ruhyphen)
-         ("texlive-latexconfig" ,texlive-latexconfig)))
+       (list texlive-dehyph-exptl
+             texlive-etex
+             texlive-hyph-utf8
+             texlive-hyphen-base
+             texlive-hyphen-afrikaans
+             texlive-hyphen-ancientgreek
+             texlive-hyphen-armenian
+             texlive-hyphen-basque
+             texlive-hyphen-belarusian
+             texlive-hyphen-bulgarian
+             texlive-hyphen-catalan
+             texlive-hyphen-chinese
+             texlive-hyphen-churchslavonic
+             texlive-hyphen-coptic
+             texlive-hyphen-croatian
+             texlive-hyphen-czech
+             texlive-hyphen-danish
+             texlive-hyphen-dutch
+             texlive-hyphen-english
+             texlive-hyphen-esperanto
+             texlive-hyphen-estonian
+             texlive-hyphen-ethiopic
+             texlive-hyphen-finnish
+             texlive-hyphen-schoolfinnish
+             texlive-hyphen-french
+             texlive-hyphen-friulan
+             texlive-hyphen-galician
+             texlive-hyphen-georgian
+             texlive-hyphen-german
+             texlive-hyphen-greek
+             texlive-hyphen-hungarian
+             texlive-hyphen-icelandic
+             texlive-hyphen-indic
+             texlive-hyphen-indonesian
+             texlive-hyphen-interlingua
+             texlive-hyphen-irish
+             texlive-hyphen-italian
+             texlive-hyphen-kurmanji
+             texlive-hyphen-latin
+             texlive-hyphen-latvian
+             texlive-hyphen-lithuanian
+             texlive-hyphen-macedonian
+             texlive-hyphen-mongolian
+             texlive-hyphen-norwegian
+             texlive-hyphen-occitan
+             texlive-hyphen-pali
+             texlive-hyphen-piedmontese
+             texlive-hyphen-polish
+             texlive-hyphen-portuguese
+             texlive-hyphen-romanian
+             texlive-hyphen-romansh
+             texlive-hyphen-russian
+             texlive-hyphen-sanskrit
+             texlive-hyphen-serbian
+             texlive-hyphen-slovak
+             texlive-hyphen-slovenian
+             texlive-hyphen-spanish
+             texlive-hyphen-swedish
+             texlive-hyphen-thai
+             texlive-hyphen-turkish
+             texlive-hyphen-turkmen
+             texlive-hyphen-ukrainian
+             texlive-hyphen-uppersorbian
+             texlive-hyphen-welsh
+             texlive-unicode-data
+             texlive-ukrhyph
+             texlive-ruhyphen
+             texlive-latex-l3kernel
+             texlive-latex-l3backend
+             ;; TODO: This dependency isn't needed for LaTeX version 2021-06-01
+             ;; and later. See:
+             ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+             texlive-latex-l3packages
+             texlive-latexconfig))
       (home-page "https://www.ctan.org/pkg/latex-base")
       (synopsis "Base sources of LaTeX")
       (description
@@ -2845,6 +2870,60 @@ with the required packages, constitutes what every LaTeX distribution should
 contain.")
       (license license:lppl1.3c+))))
 
+(define-public texlive-latex-atveryend
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-atveryend"
+              '("/doc/latex/atveryend/README.md"
+                "/tex/latex/atveryend/")
+              (base32
+               "1gz5ssxjlqa53a8blsmdk2qjahzc910ldh26xjxfxgqnqb03rqx7")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atveryend")
+    (synopsis "Hooks at the very end of a document")
+    (description
+     "This LaTeX packages provides two hooks for @code{\\end@{document@}}
+that are executed after the hook of @code{\\AtEndDocument}:
+@code{\\AfterLastShipout} can be used for code that is to be executed right
+after the last @code{\\clearpage} before the @file{.aux} file is closed.
+@code{\\AtVeryEndDocument} is used for code after closing and final reading
+of the @file{.aux} file.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-auxhook
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-auxhook"
+              '("/doc/latex/auxhook/README.md"
+                "/tex/latex/auxhook/")
+              (base32
+               "1xh445shr00rh43nnz03xh8k2mdrxgsr03lllqpgvwhm6yzsydkf")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/auxhook")
+    (synopsis "Hooks for auxiliary files")
+    (description
+     "This package provides hooks for adding code at the beginning of
+@file{.aux} files.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-epstopdf-pkg
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-epstopdf-pkg"
+              '("/doc/latex/epstopdf-pkg/"
+                "/tex/latex/epstopdf-pkg/")
+              (base32
+               "0zl6jiyp2cvvyqx3lwxdkcvvnkqgbwj4issq07cagf61gljq6fns")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/epstopdf-pkg")
+    (synopsis "Call @command{epstopdf} \"on the fly\"")
+    (description
+     "The package adds support for EPS files in the @code{graphicx} package
+when running under pdfTeX.  If an EPS graphic is detected, the package
+spawns a process to convert the EPS to PDF, using the script
+@command{epstopdf}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-filecontents
   (package
     (name "texlive-latex-filecontents")
@@ -2855,7 +2934,7 @@ contain.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1h78zw0vhldx478zs4v86ajg7vpkysd1kg3npc480qqls3q6ba40"))))
+                "1cmfigg5jx3hmdyh4gv8kwxi7dg076ldkxmr46s05xvhzjig1z9x"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/filecontents"))
     (home-page "https://www.ctan.org/pkg/filecontents")
@@ -2870,31 +2949,6 @@ overwrite existing files and letting you use @code{filecontents} /
 @code{filecontents*} anywhere.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-ifxetex
-  (package
-    (name "texlive-generic-ifxetex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "generic" "ifxetex"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0w2xj7n0szavj329kds09q626szkc378p3w0sk022q0ln4ksz86d"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/ifxetex"
-       #:tex-format "xelatex"))
-    (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
-    (home-page "https://www.ctan.org/pkg/ifxetex")
-    (synopsis "Am I running under XeTeX?")
-    (description
-     "This is a simple package which provides an @code{\\ifxetex} conditional,
-so that other code can determine that it is running under XeTeX.  The package
-requires the e-TeX extensions to the TeX primitive set.")
-    (license license:lppl1.3c+)))
-
 (define-public texlive-epsf
   (package
     (inherit (simple-texlive-package
@@ -2915,8 +2969,7 @@ bundle of packages.  (The latex-graphics bundle is also available to Plain TeX
 users, via its Plain TeX version.)")
     (license license:public-domain)))
 
-(define-public texlive-generic-epsf
-  (deprecated-package "texlive-generic-epsf" texlive-epsf))
+(define-deprecated-package texlive-generic-epsf texlive-epsf)
 
 (define-public texlive-latex-fancyvrb
   (package
@@ -2925,7 +2978,7 @@ users, via its Plain TeX version.)")
               (list "/doc/latex/fancyvrb/README"
                     "/tex/latex/fancyvrb/")
               (base32
-               "1dwkcradz9nwpjwmv1sjzn77lvw25ypr0rrgmf1kd8pd2mw7dxcn")
+               "0pdilgpw4zc0ipp4z9kdi61nymifyjy2mfpk74xk2cw9vhynkk3w")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fancyvrb")
     (synopsis "Sophisticated verbatim text")
@@ -2945,8 +2998,10 @@ verbatim source).")
               (list "/doc/latex/graphics-def/README.md"
                     "/tex/latex/graphics-def/")
               (base32
-               "0zrbn9cwfnnrrl3b2zsd74ldksp9jwpvjh7z93ild1m75crpb39a")
+               "0b66fy06safyrd717rfr476g1gz6nqfv1vqvam7ac2yy0g0djb17")
               #:trivial? #t))
+    (propagated-inputs
+     (list texlive-latex-epstopdf-pkg))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "Color and graphics option files")
     (description
@@ -2982,12 +3037,11 @@ set default \"driver\" options for the color and graphics packages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0nlfhn55ax89rcvpkrl9570671b62kcr4c9l5ch3w5zw9vmi00dz"))))
+                "0fgjl58f25zvagssz4dwmmsclzw8cr7mx00kdrbx2kcnamcb7h8d"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/graphics"))
     (propagated-inputs
-     `(("texlive-graphics-cfg" ,texlive-graphics-cfg)
-       ("texlive-graphics-def" ,texlive-graphics-def)))
+     (list texlive-graphics-cfg texlive-graphics-def))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "LaTeX standard graphics bundle")
     (description
@@ -2997,6 +3051,22 @@ documents.  It comprises the packages color, graphics, graphicx, trig, epsfig,
 keyval, and lscape.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-latex-hycolor
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hycolor"
+              (list "/doc/latex/hycolor/README.md"
+                    "/tex/latex/hycolor/")
+              (base32
+               "026lfb4l7b3q8g6zc68siqandhb1x98cbycn7njknqva6s99aiqn")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Color for hyperref and bookmark")
+    (description
+     "This package provides the code for the @code{color} option that is
+used by @code{hyperref} and @code{bookmark}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-xcolor
   (let ((template (simple-texlive-package
                    "texlive-xcolor"
@@ -3034,32 +3104,122 @@ row colors plus repeated non-aligned material (like horizontal lines) in
 tables.")
       (license license:lppl1.2+))))
 
-(define-public texlive-latex-xcolor
-  (deprecated-package "texlive-latex-xcolor" texlive-xcolor))
+(define-deprecated-package texlive-latex-xcolor texlive-xcolor)
 
-(define-public texlive-latex-hyperref
-  (package
-    (name "texlive-latex-hyperref")
-    (version "6.84a2")
-    ;; The sources in the TeX Live SVN repository do not contain hluatex.dtx,
-    ;; so we fetch the release from GitHub.
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ho-tex/hyperref/"
-                                  "archive/release-" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1d3rmjgzh0025a1dza55zb6nzzlgd1y9snwx45wq1c1vf42m79h2"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/hyperref"))
-    (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek) ; for ltxcmds.sty
-       ("texlive-latex-url" ,texlive-latex-url)))
-    (home-page "https://www.ctan.org/pkg/hyperref")
-    (synopsis "Extensive support for hypertext in LaTeX")
-    (description
-     "The @code{hyperref} package is used to handle cross-referencing commands
+(define-public texlive-xmltex
+  (let ((template (simple-texlive-package
+                   "texlive-xmltex"
+                   (list
+                    "/doc/otherformats/xmltex/"
+                    "/tex/xmltex/")
+                   (base32
+                    "023gv9axq05vwqz50fnkig24dzahwlc4raks2s8xc4pzrv2dv1zy"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "tex/xmltex/base")
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-before 'install 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "tex" "\\.(ini|tex)$"))
+                 (invoke "fmtutil-sys" "--byfmt" "xmltex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfxmltex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/xmltex"))
+                   (symlink pdftex (string-append out "/bin/pdfxmltex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; The following fonts are propagated as a texlive-updmap.cfg as the font
+       ;; maps need to be recreated for the fonts to be usable.  They are
+       ;; required by xmltex through mlnames.sty and unicode.sty.
+       `(("texlive" ,(texlive-updmap.cfg
+                      (list
+                       texlive-amsfonts
+                       texlive-babel
+                       texlive-courier
+                       texlive-helvetic
+                       texlive-hyperref
+                       texlive-symbol
+                       texlive-tipa
+                       texlive-times
+                       texlive-zapfding
+                       ;; The following fonts, while not required, are used if
+                       ;; available:
+                       texlive-stmaryrd
+                       texlive-wasy)))))
+      (native-inputs
+       (list texlive-tex-ini-files))
+      (home-page "https://www.ctan.org/pkg/xmltex/")
+      (synopsis "Support for parsing XML documents")
+      (description "The package provides an implementation of a parser for
+documents matching the XML 1.0 and XML Namespace Recommendations.  Element and
+attribute names, as well as character data, may use any characters allowed in
+XML, using UTF-8 or a suitable 8-bit encoding.")
+      (license license:lppl1.0+))))        ;per xmltex/base/readme.txt
+
+(define-public texlive-hyperref
+  (let ((template (simple-texlive-package
+                   "texlive-hyperref"
+                   (list "/doc/latex/hyperref/"
+                         "/source/latex/hyperref/"
+                         ;; These files are not generated from the sources
+                         "/tex/latex/hyperref/minitoc-hyper.sty"
+                         "/tex/latex/hyperref/ntheorem-hyper.sty"
+                         "/tex/latex/hyperref/xr-hyper.sty")
+                   (base32
+                    "0nmbxaq676m2y9fgdji0bxqchmrli4hwhspijaszx51b3ki6bj2h"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/hyperref")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/hyperref") #t))))))
+      (propagated-inputs
+       (list texlive-generic-atbegshi
+             texlive-generic-bitset
+             texlive-generic-etexcmds
+             texlive-generic-gettitlestring
+             texlive-generic-iftex
+             texlive-generic-infwarerr
+             texlive-generic-intcalc
+             texlive-generic-kvdefinekeys
+             texlive-generic-kvsetkeys
+             texlive-generic-ltxcmds
+             texlive-generic-pdfescape
+             texlive-latex-auxhook
+             texlive-latex-atveryend
+             texlive-latex-hycolor
+             texlive-latex-kvoptions
+             texlive-latex-letltxmacro
+             texlive-latex-pdftexcmds
+             texlive-latex-refcount
+             texlive-latex-rerunfilecheck
+             texlive-url))
+      (home-page "https://www.ctan.org/pkg/hyperref")
+      (synopsis "Extensive support for hypertext in LaTeX")
+      (description
+       "The @code{hyperref} package is used to handle cross-referencing commands
 in LaTeX to produce hypertext links in the document.  The package provides
 backends for the @code{\\special} set defined for HyperTeX DVI processors; for
 embedded @code{pdfmark} commands for processing by Acrobat
@@ -3067,11 +3227,13 @@ Distiller (@code{dvips} and Y&Y's @code{dvipsone}); for Y&Y's @code{dviwindo};
 for PDF control within pdfTeX and @code{dvipdfm}; for TeX4ht; and for VTeX's
 pdf and HTML backends.  The package is distributed with the @code{backref} and
 @code{nameref} packages, which make use of the facilities of @code{hyperref}.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-hyperref texlive-hyperref)
 
-(define-public texlive-latex-oberdiek
+(define-public texlive-oberdiek
   (package
-    (name "texlive-latex-oberdiek")
+    (name "texlive-oberdiek")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -3079,7 +3241,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0pi2d6gsddcs9wprdbar46s91kdc5fxl1m79g7xrbccsx8s9xbml"))))
+                "1cadrkpdqs65gxsaszfgfd8wqp8pvpik2sjmlyq3hz5p9yna3p9m"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/oberdiek"
@@ -3093,7 +3255,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
                (("ifpdf.ins") "ifpdf.dtx"))
              #t)))))
     (propagated-inputs
-     `(("texlive-generic-ifxetex" ,texlive-generic-ifxetex)))
+     (list texlive-generic-iftex))
     (home-page "https://www.ctan.org/pkg/oberdiek")
     (synopsis "Bundle of packages submitted by Heiko Oberdiek")
     (description
@@ -3102,6 +3264,28 @@ better accessibility support for PDF files; extensible chemists reaction
 arrows; record information about document class(es) used; and many more.")
     (license license:lppl1.3+)))
 
+(define-deprecated-package texlive-latex-oberdiek texlive-oberdiek)
+
+(define-public texlive-latex-rerunfilecheck
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-rerunfilecheck"
+              '("/doc/latex/rerunfilecheck/"
+                "/tex/latex/rerunfilecheck/")
+              (base32
+               "1myz0d5bxhxvl4220ikywh921qld8n324kk9kscqbc5iw4063g56")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-uniquecounter
+           texlive-latex-atveryend texlive-latex-kvoptions
+           texlive-latex-pdftexcmds))
+    (home-page "https://www.ctan.org/pkg/rerunfilecheck")
+    (synopsis "Checksum based rerun checks on auxiliary files")
+    (description
+     "This package provides additional rerun warnings if some auxiliary
+files have changed.  It is based on MD5 checksum, provided by pdfTeX.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-tools
   (package
     (name "texlive-latex-tools")
@@ -3112,11 +3296,23 @@ arrows; record information about document class(es) used; and many more.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1wqvn4z0s92h5iqzrvxw7hinzp95avjk9v8lnqbqr4kz6nv4xb9l"))))
+                "1vm5wfyd0vbmv31a29fc7k8y14xiw00msvdx9n7dzsn9zpfjflqs"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/tools"
-       #:build-targets '("tools.ins")))
+       #:build-targets '("tools.ins")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'provide-array-2016-10-06.sty
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; XXX: array.sty does:
+                      ;;  "DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}"
+                      ;; ...which causes some users (hypre) to look for that
+                      ;; file specifically.  Provide it.
+                      (with-directory-excursion (string-append
+                                                 (assoc-ref outputs "out")
+                                                 "/share/texmf-dist/tex"
+                                                 "/latex/tools")
+                        (symlink "array.sty" "array-2016-10-06.sty")))))))
     (home-page "https://www.ctan.org/pkg/latex-tools")
     (synopsis "LaTeX standard tools bundle")
     (description
@@ -3151,8 +3347,7 @@ of file names.")
     ;; the latest version is 1.3c.
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-url
-  (deprecated-package "texlive-latex-url" texlive-url))
+(define-deprecated-package texlive-latex-url texlive-url)
 
 (define-public texlive-tetex
   (package
@@ -3181,10 +3376,15 @@ Live distribution.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s77z2cbv841l45qrpf0s8qhzfa4wi689lg7zkw88qg18nzvy0ly"))))
+                "068xkinrkl6qjf8r6a9i0msvnzp4y7a3gnd2h12ws0km1dv19r20"))))
     (build-system texlive-build-system)
     (arguments
-     '(#:tex-directory "latex/l3kernel"))
+     '(#:tex-directory "latex/l3kernel"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     (list texlive-docstrip))
     (home-page "https://www.ctan.org/pkg/l3kernel")
     (synopsis "LaTeX3 programmers’ interface")
     (description
@@ -3195,20 +3395,59 @@ code are built: it is an API for TeX programmers.  The packages are set up so
 that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-l3packages
+(define-public texlive-latex-l3backend
   (package
-    (name "texlive-latex-l3packages")
+    (name "texlive-latex-l3backend")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
-              (uri (texlive-ref "latex" "l3packages"))
+              (uri (texlive-ref "latex" "l3backend"))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1cv4fk9pabh7mkxhfsdmh4k8xpmzg1psgcsvd11c869m7n3a629h"))))
+                "0mlwyzssqn6wkyv9hzp24d40p8f20zrjqgvqyqs1rd7q7awan42a"))))
+    (build-system texlive-build-system)
+    (arguments
+     '(#:tex-directory "latex/l3backend"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     (list texlive-docstrip))
+    (home-page "https://www.ctan.org/pkg/l3backend")
+    (synopsis "LaTeX3 backend drivers")
+    (description
+     "This package forms parts of expl3, and contains the code used to
+interface with backends (drivers) across the expl3 codebase. The functions
+here are defined differently depending on the engine in use. As such, these
+are distributed separately from l3kernel to allow this code to be updated on
+an independent schedule.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-l3packages
+  (package
+    (name "texlive-latex-l3packages")
+    (version (number->string %texlive-revision))
+    (source (texlive-origin name version
+                            '("/source/latex/l3packages/"
+                              ;; These files have been generated with a
+                              ;; bespoke source tree and then modified by
+                              ;; hand. It's unfeasible to recreate them. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047188.html
+                              "/tex/latex/l3packages/xparse/xparse-2018-04-12.sty"
+                              "/tex/latex/l3packages/xparse/xparse-2020-10-01.sty"
+
+                              ;; TODO: This file can be removed when using
+                              ;; LaTeX version 2021-06-01 or newer. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+                              "/tex/latex/l3packages/xparse/xparse-generic.tex")
+                            (base32 "05rjxdqhhg7z1z2rmhmwj2qf09xygymayy3jzj9fdphk0pab3amm")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/l3packages"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f
        ;; build-targets must be specified manually since they are in
        ;; sub-directories.
        #:build-targets '("l3keys2e.ins" "xparse.ins" "xfrac.ins" "xfp.ins" "xtemplate.ins")
@@ -3220,18 +3459,25 @@ that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
            (lambda _
              (let ((cwd (getcwd)))
                (setenv "TEXINPUTS"
-                       (string-append cwd "/l3keys2e:"
-                                      cwd "/xparse:"
-                                      cwd "/xfrac:"
-                                      cwd "/xfp:"
-                                      cwd "/xtemplate"
+                       (string-append cwd "/source/latex/l3packages/l3keys2e:"
+                                      cwd "/source/latex/l3packages/xparse:"
+                                      cwd "/source/latex/l3packages/xfrac:"
+                                      cwd "/source/latex/l3packages/xfp:"
+                                      cwd "/source/latex/l3packages/xtemplate"
                                       ;; The terminating ":" is required to include the
                                       ;; l3kernel input as well.
                                       ":")))
-             #t)))
+             #t))
+         (add-after 'install 'copy-generated-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((dest (string-append (assoc-ref outputs "out")
+                                        "/share/texmf-dist/tex/latex/l3packages")))
+               (copy-recursively "tex/latex/l3packages/xparse" dest)))))
        ))
+    (native-inputs
+     (list texlive-docstrip))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
+     (list texlive-latex-l3kernel))
     (home-page "https://www.ctan.org/pkg/l3packages")
     (synopsis "High-level LaTeX3 concepts")
     (description
@@ -3250,58 +3496,166 @@ programming tools and kernel support.  Packages provided in this release are:
 @end enumerate\n")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-fontspec
+(define-public texlive-dvips-l3backend
   (package
-    (name "texlive-latex-fontspec")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "fontspec"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1223cw029n6zff7pqpwbsq1x8v3w63smczkmnybqxkw5h2za8gbz"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/fontspec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-default-fontspec.cfg
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-output-to-file
-                 (string-append (assoc-ref outputs "out")
-                                "/share/texmf-dist/tex/latex/fontspec/fontspec.cfg")
-               (lambda _
-                 (display "\
-%%% FONTSPEC.CFG %%%
-%
-% This configuration file sets up TeX Ligatures by default for all fonts loaded
-% with `\\setmainfont` and `\\setsansfont`.
-%
-% In addition, `\\setmonofont` has default features to enforce \"monospace\"
-% settings with regard to space stretchability and shrinkability.
-
-\\defaultfontfeatures
- [\\rmfamily,\\sffamily]
- {Ligatures=TeX}
-
-\\defaultfontfeatures
- [\\ttfamily]
- {WordSpace={1,0,0},
-  HyphenChar=None,
-  PunctuationSpace=WordSpace}
-")))
-             #t)))))
-    (propagated-inputs
-     `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
-    (home-page "https://www.ctan.org/pkg/fontspec")
-    (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+    (inherit (simple-texlive-package
+              "texlive-dvips-l3backend"
+              (list
+               "/dvips/l3backend/")
+              (base32
+               "1hvj153h1pn93h6n76dv3mg9ai0mcz9q9mysfiqjfpqzijz9ikky")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/l3backend")
+    (synopsis "LaTeX3 backend drivers for dvips")
     (description
-     "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
+     "This package forms parts of expl3, and contains the code used to
+interface with backends (drivers) across the expl3 codebase.  The functions
+here are defined for the dvips engine only.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-fontspec
+  (let ((template (simple-texlive-package
+                   "texlive-fontspec"
+                   (list "/doc/latex/fontspec/"
+                         "/source/latex/fontspec/"
+                         "/tex/latex/fontspec/fontspec.cfg")
+                   (base32
+                    "06rms8dw1j67v3rgv6xmfykdmgbxi5rp78yxc782cy1sw07blgsg"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/fontspec")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/fontspec/") #t))))))
+      (propagated-inputs
+       (list texlive-latex-l3packages))
+      (home-page "https://www.ctan.org/pkg/fontspec")
+      (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+      (description
+       "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
 automatic and unified interface to feature-rich AAT and OpenType fonts through
 the NFSS in LaTeX running on XeTeX or LuaTeX engines.  The package requires
 the l3kernel and xparse bundles from the LaTeX 3 development team.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-fontspec texlive-fontspec)
+
+(define-public texlive-grffile
+  (let ((template (simple-texlive-package
+                   "texlive-grffile"
+                   (list "/doc/latex/grffile/README.md"
+                         "/source/latex/grffile/grffile.dtx")
+                   (base32
+                    "1ib2n4d52faipvxdvdh4ar1p5j997h7cza26sfyd8z3qdf0naqgx"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/grffile")
+         ((#:build-targets _ #t)
+          '(list "grffile.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/grffile/")))))))
+      (home-page "https://www.ctan.org/pkg/grffile")
+      (synopsis "Extended file name support for graphics (legacy package)")
+      (description
+       "The original grffile package extended the file name processing of the
+@code{graphics} package to support a larger range of file names.  The base
+LaTeX code now supports multiple dots and spaces, and this package by default
+is a stub that just loads @code{graphicx}.")
+      (license license:lppl1.3c+))))
+
+(define-public texlive-stringenc
+  (let ((template (simple-texlive-package
+                   "texlive-stringenc"
+                   (list "/doc/latex/stringenc/README.md"
+                         "/source/latex/stringenc/stringenc.dtx")
+                   (base32
+                    "19sfi5jxldxmy79pxmapmgmn3iknf8wjczasvlrrwv0gyycxdzhw"))))
+    (package
+      (inherit template)
+      (outputs '("doc" "out"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/stringenc")
+         ((#:build-targets _ #t)
+          '(list "stringenc.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/stringenc/")))
+             (add-after 'copy-files 'clean-up
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (delete-file-recursively
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/build"))
+                 (delete-file
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/stringenc.dtx"))
+                 (install-file
+                  (string-append (assoc-ref inputs "source") "/source/latex/stringenc/stringenc.dtx")
+                  (string-append (assoc-ref outputs "out") "/share/texmf-dist/source/latex/stringenc/"))
+                 (install-file
+                  (string-append (assoc-ref inputs "source") "/doc/latex/stringenc/README.md")
+                  (string-append (assoc-ref outputs "doc") "/doc/latex/stringenc/"))))))))
+      (home-page "https://www.ctan.org/pkg/stringenc")
+      (synopsis "Converting a string between different encodings")
+      (description
+       "This package provides @code{\\StringEncodingConvert} for converting a
+string between different encodings.  Both LaTeX and plain-TeX are supported.")
+      (license license:lppl1.3c+))))
+
+(define-public texlive-l3build
+  (let ((template (simple-texlive-package
+                   "texlive-l3build"
+                   (list "/doc/latex/l3build/"
+                         "/doc/man/man1/l3build.1"
+                         "/scripts/l3build/"
+                         "/tex/latex/l3build/"
+                         ;; TODO: The dtx file builds only the documentation.
+                         ;; We avoid this for a simpler package definition,
+                         ;; but it may be possible to exclude
+                         ;; /doc/latex/l3build and the man page in the future.
+                         "/source/latex/l3build/")
+                   (base32
+                    "1fcay05jj53qgp2b98jpawi0id298fs5xc4y1r5krrfr4sp4hd59")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'install 'patch-shebangs-again
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 ;; XXX: Since the 'patch-shebangs' phase cannot change the
+                 ;; original source files patch the shebangs again here.
+                 (let* ((coreutils (assoc-ref inputs "coreutils"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (path (list (string-append coreutils "/bin")
+                                    (string-append texlive-bin "/bin"))))
+                   (for-each (lambda (file)
+                               (format #t "~a~%" file)
+                               (patch-shebang file path))
+                             (find-files (assoc-ref outputs "out")))
+                   #t)))))))
+      (inputs
+       (list coreutils texlive-bin))
+      (home-page "https://github.com/latex3/luaotfload")
+      (synopsis "Testing and building system for LaTeX")
+      (description
+       "The l3build module is designed to support the development of
+high-quality LaTeX code by providing: a unit testing system, automated
+typesetting of code sources, and a reliable packaging system for CTAN
+releases.  The bundle consists of a Lua script to run the tasks and a
+@code{.tex} file which provides the testing environment.")
+      (license license:lppl1.3c+))))
 
 ;; The SVN directory contains little more than a dtx file that generates three
 ;; of the many lua files that should be installed as part of this package.
@@ -3329,9 +3683,7 @@ the l3kernel and xparse bundles from the LaTeX 3 development team.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("unzip" ,unzip)
-       ("zip" ,zip)))
+     (list texlive-bin unzip zip))
     (home-page "https://github.com/lualatex/lualibs")
     (synopsis "Lua modules for general programming (in the (La)TeX world)")
     (description
@@ -3341,97 +3693,102 @@ this bundle for use independent of ConTeXt.")
     ;; GPL version 2 only
     (license license:gpl2)))
 
-(define-public texlive-luatex-luaotfload
+;; TODO: We should be able to build this from the sources on Github with
+;; texlive-l3build, but I haven't been able to get it to work.
+(define-public texlive-luaotfload
+  (let ((template (simple-texlive-package
+                   "texlive-luaotfload"
+                   (list "/doc/luatex/luaotfload/"
+                         "/doc/man/man1/luaotfload-tool.1"
+                         "/doc/man/man5/luaotfload.conf.5"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.lua"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.tex"
+                         "/scripts/luaotfload/luaotfload-tool.lua"
+                         "/tex/luatex/luaotfload/")
+                   (base32
+                    "10wznvxx3qsl88n560py5vyx5r3a3914anbqfhwcmhmwg097xxl4")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (propagated-inputs
+       (list texlive-luatex-lualibs))
+      (home-page "https://github.com/lualatex/luaotfload")
+      (synopsis "OpenType font loader for LuaTeX")
+      (description
+       "Luaotfload is an adaptation of the ConTeXt font loading system for the
+Plain and LaTeX formats.  It allows OpenType fonts to be loaded with font
+features accessible using an extended font request syntax while providing
+compatibilitywith XeTeX.  By indexing metadata in a database it facilitates
+loading fonts by their proper names instead of file names.")
+      ;; GPL version 2 only
+      (license license:gpl2))))
+
+(define-deprecated-package texlive-luatex-luaotfload texlive-luaotfload)
+
+;; FIXME: This package is a temporary workaround to provide ‘lualatex.fmt’ for
+;; the LuaTeX engine. It is needed because it was discovered too late in the
+;; core-updates-frozen cycle that texlive-latex-base only provides it for
+;; LuaHBTeX. See https://issues.guix.gnu.org/51252.
+(define-public texlive-latex-luatex
   (package
-    (name "texlive-luatex-luaotfload")
-    (version "2.8-fix-2")
-    ;; The release tarball does not contain all source files.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lualatex/luaotfload")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0l5l7iq3dxcxl65qaghcpjg27yd9iw1sxa8pnd7xlvlm09dhfdnf"))))
+    (name "texlive-latex-luatex")
+    (version (number->string %texlive-revision))
+    (source #f)
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist")
-             "all")
-       #:parallel-build? #f ; not supported
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 rdelim)
+                  (ice-9 string-fun))
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
+         (delete 'unpack)
+         (delete 'bootstrap)
+         (delete 'configure)
+         (delete 'check)
+         (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "doc/Makefile"
-               (("rst2man") "rst2man.py")
-               ;; Don't build the PDF.  This requires more of LaTeX.
-               (("\\$\\(DOCPDF\\)") ""))
-
-             (substitute* "Makefile"
-               ;; We don't build the PDF, so don't attempt to install it.
-               (("cp \\$\\(RESOURCES\\) \\$\\(DOCPDF\\)")
-                "cp $(RESOURCES)")
-               (("= \\$\\(DOCPDF\\)") "= ")
-               ;; Fix name of fontloader file
-               (("^LOADER.*= \\$\\(BUILDDIR\\)/fontloader-\\$\\(shell date \\+%F\\).lua")
-                "LOADER = $(BUILDDIR)/fontloader.lua"))
-
-             (mkdir "build")
-
-             ;; Don't download this file.
-             (copy-file (assoc-ref inputs "glyphlist")
-                        "build/glyphlist.txt")
-
-             ;; Don't use git
-             (let ((notes
-                    `((committer . "Philipp Gesang <phg@phi-gamma.net>")
-                      (description . ,version)
-                      (loader . "fontloader.lua")
-                      (revision . "ad480924393fffa2896156e1a32c22f5c61120dd")
-                      (timestamp . "2019-01-01 00:00:00 +0000"))))
-               (substitute* "scripts/mkstatus"
-                 (("local notes.*=.*")
-                  (string-append "local notes = {"
-                                 (string-join
-                                  (map (lambda (entry)
-                                         (format "[\"~a\"]=\"~a\","
-                                                 (symbol->string (car entry))
-                                                 (cdr entry)))
-                                       notes))
-                                 "}"))))
-             #t)))))
+             (mkdir "web2c")
+             (let ((fmtutil.cnf-in (open-file
+                                    (string-append
+                                     (assoc-ref inputs "texlive-kpathsea")
+                                     "/share/texmf-dist/web2c/fmtutil.cnf")
+                                    "r"))
+                   (fmtutil.cnf-out (open-file "web2c/fmtutil.cnf" "w")))
+
+               ;; Copy ‘lualatex’ format lines to the new fmtutil.cnf, changing
+               ;; the engine from ‘luahbtex’ to ‘luatex’.
+               (do ((line "" (read-line fmtutil.cnf-in 'concat)))
+                   ((eof-object? line))
+                 (when (string-prefix? "lualatex" line)
+                   (display (string-replace-substring line "luahbtex" "luatex")
+                            fmtutil.cnf-out)))
+               (close-port fmtutil.cnf-out)
+               (close-port fmtutil.cnf-in)
+
+               (invoke "fmtutil" "--sys" "--all" "--fmtdir=web2c"
+                       "--cnffile=web2c/fmtutil.cnf")
+
+               ;; Don't risk this file interfering with anything else.
+               (delete-file "web2c/fmtutil.cnf"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((web2c (string-append %output "/share/texmf-dist/web2c")))
+               (mkdir-p web2c)
+               (copy-recursively "web2c" web2c)))))))
     (native-inputs
-     `(("zip" ,zip)
-       ("unzip" ,unzip)
-       ("graphviz" ,graphviz)
-       ("lualatex" ,(texlive-union (list texlive-luatex-lualibs
-                                         texlive-context-base)))
-       ("python-docutils" ,python-docutils)
-       ("glyphlist"
-        ,(origin
-           (method url-fetch)
-           (uri (string-append "https://raw.githubusercontent.com/adobe-type-tools/"
-                               "agl-aglfn/b2a04cb906f9257cc06a2fe0ad4b3d663bc02136/"
-                               "glyphlist.txt"))
-           (sha256
-            (base32 "1s6svfw23rqzdvflv8frgd4xrwvrmsj8szwzqgcd39dp9rpjafjp"))))))
-    (propagated-inputs
-     `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
-    (home-page "https://github.com/lualatex/luaotfload")
-    (synopsis "OpenType font loader for LuaTeX")
-    (description
-     "Luaotfload is an adaptation of the ConTeXt font loading system for the
-Plain and LaTeX formats.  It allows OpenType fonts to be loaded with font
-features accessible using an extended font request syntax while providing
-compatibilitywith XeTeX.  By indexing metadata in a database it facilitates
-loading fonts by their proper names instead of file names.")
-    ;; GPL version 2 only
-    (license license:gpl2)))
+     (list texlive-bin
+           texlive-babel
+           texlive-cm
+           texlive-fonts-latex
+           texlive-kpathsea
+           texlive-latex-base
+           texlive-lm
+           texlive-tex-ini-files))
+    (home-page (package-home-page texlive-latex-base))
+    (synopsis "LuaLaTeX format files for LuaTeX")
+    (description "This package is necessary to use LaTeX with the LuaTeX engine.")
+    (license (package-license texlive-latex-base))))
 
 (define-public texlive-latex-amsmath
   (package
@@ -3443,7 +3800,7 @@ loading fonts by their proper names instead of file names.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0qgk2332dacsxn1z95qzp35gbs7wrzl1ipjdhnmk1r897msm4sf5"))))
+                "172zybw7rp05jca8wl6x0mh6z6gncdyi1j9wdfyjnhbvqw0z4wi4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/amsmath"))
     (home-page "https://www.ctan.org/pkg/amsmath")
@@ -3462,64 +3819,84 @@ mathematics, and @code{ntheoremntheorem}, for specifying theorem (and similar)
 definitions.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-amscls
-  (package
-    (name "texlive-latex-amscls")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "amscls"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0c2j9xh4qpi0x1vvcxdjxq6say0zhyr569fryi5cmhp8bclh4kca"))))
-    (build-system texlive-build-system)
-    (arguments
-     `(#:tex-directory "latex/amscls"))
-    (home-page "https://www.ctan.org/pkg/amscls")
-    (synopsis "AMS document classes for LaTeX")
-    (description
-     "This bundle contains three AMS classes: @code{amsartamsart} (for writing
+(define-public texlive-amscls
+  (let ((template (simple-texlive-package
+                   "texlive-amscls"
+                   (list "/doc/latex/amscls/"
+                         "/source/latex/amscls/"
+                         "/bibtex/bst/amscls/")
+                   (base32
+                    "0vw0b815slvfqfd8qffyfzb3xfvyv6k77m12xp0l67hs8p08s5b7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/amscls")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/amscls/") #t))))))
+      (home-page "https://www.ctan.org/pkg/amscls")
+      (synopsis "AMS document classes for LaTeX")
+      (description
+       "This bundle contains three AMS classes: @code{amsartamsart} (for writing
 articles for the AMS), @code{amsbookamsbook} (for books) and
 @code{amsprocamsproc} (for proceedings), together with some supporting
 material.  The material is made available as part of the AMS-LaTeX
 distribution.")
-    (license license:lppl1.3c+)))
+      (license license:lppl1.3c+))))
 
-(define-public texlive-latex-babel
-  (package
-    (name "texlive-latex-babel")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "babel"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1rwqq841i1rxywymzwkw0cw2yhgvxwjx5mgygfasvypwrwll6f6s"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/babel"
-       #:phases
-       (modify-phases %standard-phases
-         ;; This package tries to produce babel.aux twice but refuses to
-         ;; overwrite the first one.
-         (add-before 'build 'fix-ins
-           (lambda _
-             (substitute* "babel.ins"
-               (("askonceonly") "askforoverwritefalse"))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/babel")
-    (synopsis "Multilingual support for Plain TeX or LaTeX")
-    (description
-     "The package manages culturally-determined typographical (and other)
+(define-deprecated-package texlive-latex-amscls texlive-amscls)
+
+(define-public texlive-babel
+  (let ((template (simple-texlive-package
+                   "texlive-babel"
+                   (list "/doc/latex/babel/"
+                         "/source/latex/babel/"
+                         "/makeindex/babel/")
+                   (base32
+                    "0qr5vjp79g1c1l6k173qhfdfabgbky73wymzhm56pazx4a8r08wz"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/babel")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/babel/") #t))
+             ;; This package tries to produce babel.aux twice but refuses to
+             ;; overwrite the first one.
+             (add-before 'build 'fix-ins
+               (lambda _
+                 (substitute* "babel.ins"
+                   (("askonceonly") "askforoverwritefalse"))
+                 #t))
+             (add-after 'install 'install-locales
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((locale-directory
+                        (string-append (assoc-ref outputs "out")
+                                       "/share/texmf-dist/tex/generic/babel/locale/")))
+                   (mkdir-p locale-directory)
+                   (invoke "unzip" "locale.zip" "-d"
+                           locale-directory))))))))
+      (native-inputs
+       (list unzip))
+      (home-page "https://www.ctan.org/pkg/babel")
+      (synopsis "Multilingual support for Plain TeX or LaTeX")
+      (description
+       "The package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages.  A document may
 select a single language to be supported, or it may select several, in which
 case the document may switch from one language to another in a variety of
 ways.  Babel uses contributed configuration files that provide the detail of
 what has to be done for each language.  Users of XeTeX are advised to use the
 polyglossia package rather than Babel.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-babel texlive-babel)
 
 (define-public texlive-generic-babel-english
   (package
@@ -3553,7 +3930,7 @@ for Canadian and USA text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "129f9w41cb6yyrr6kpv3zz9ml6334hyq1wcz7j9jn47p0hlxqfk8"))))
+                "1x9hnr9gz5mqdb97cinivn9xjnfr4qi996aa4cnr2sm2dsbhqxnp"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "generic/babel-german"))
     (home-page "https://www.ctan.org/pkg/babel-german")
@@ -3571,7 +3948,7 @@ Swiss varieties of German.")
                    "texlive-babel-swedish"
                    (list "/source/generic/babel-swedish/")
                    (base32
-                    "0swdg2l5i7cbcvy4q4xgsnwwnbxiyvs6f5b72kiw7mjn24v27g8f"))))
+                    "03rp4n9wkqyckman765r8v8j2pg5fg9frbfxsnhq0i2mr0yhbr6v"))))
     (package
       (inherit template)
       (arguments
@@ -3614,67 +3991,133 @@ T2* and X2 encodings. These encodings cover (between them) pretty much every
 language that is written in a Cyrillic alphabet.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-psnfss
-  (package
-    (name "texlive-latex-psnfss")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "psnfss"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1920dcq8613yzprasbg80fh4fcjcidvvl54wkx438nimyxcri7qz"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/psnfss"))
-    (home-page "https://www.ctan.org/pkg/psnfss")
-    (synopsis "Font support for common PostScript fonts")
-    (description
-     "The PSNFSS collection includes a set of files that provide a complete
-working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
-    (license license:lppl1.2+)))
-
-;; TODO: this should supersede texlive-latex-psnfss, but we can't do this
-;; before the next rebuild cycle.
 (define-public texlive-psnfss
   (let ((template (simple-texlive-package
                    "texlive-psnfss"
                    (list "/doc/latex/psnfss/"
                          "/source/latex/psnfss/"
                          "/fonts/map/dvips/psnfss/"
-                         ;; Only the sty files are generated.  We need all the .fd
-                         ;; files.
-                         "/tex/latex/psnfss/")
+
+                         ;; Only the .sty files are generated from the sources.
+                         "/tex/latex/psnfss/8rbch.fd"
+                         "/tex/latex/psnfss/8rpag.fd"
+                         "/tex/latex/psnfss/8rpbk.fd"
+                         "/tex/latex/psnfss/8rpcr.fd"
+                         "/tex/latex/psnfss/8rphv.fd"
+                         "/tex/latex/psnfss/8rpnc.fd"
+                         "/tex/latex/psnfss/8rppl.fd"
+                         "/tex/latex/psnfss/8rptm.fd"
+                         "/tex/latex/psnfss/8rput.fd"
+                         "/tex/latex/psnfss/8rpzc.fd"
+                         "/tex/latex/psnfss/omlbch.fd"
+                         "/tex/latex/psnfss/omlpag.fd"
+                         "/tex/latex/psnfss/omlpbk.fd"
+                         "/tex/latex/psnfss/omlpcr.fd"
+                         "/tex/latex/psnfss/omlphv.fd"
+                         "/tex/latex/psnfss/omlpnc.fd"
+                         "/tex/latex/psnfss/omlppl.fd"
+                         "/tex/latex/psnfss/omlptm.fd"
+                         "/tex/latex/psnfss/omlptmcm.fd"
+                         "/tex/latex/psnfss/omlput.fd"
+                         "/tex/latex/psnfss/omlpzc.fd"
+                         "/tex/latex/psnfss/omlzplm.fd"
+                         "/tex/latex/psnfss/omlzpple.fd"
+                         "/tex/latex/psnfss/omlztmcm.fd"
+                         "/tex/latex/psnfss/omsbch.fd"
+                         "/tex/latex/psnfss/omspag.fd"
+                         "/tex/latex/psnfss/omspbk.fd"
+                         "/tex/latex/psnfss/omspcr.fd"
+                         "/tex/latex/psnfss/omsphv.fd"
+                         "/tex/latex/psnfss/omspnc.fd"
+                         "/tex/latex/psnfss/omsppl.fd"
+                         "/tex/latex/psnfss/omsptm.fd"
+                         "/tex/latex/psnfss/omsput.fd"
+                         "/tex/latex/psnfss/omspzc.fd"
+                         "/tex/latex/psnfss/omspzccm.fd"
+                         "/tex/latex/psnfss/omszplm.fd"
+                         "/tex/latex/psnfss/omszpple.fd"
+                         "/tex/latex/psnfss/omsztmcm.fd"
+                         "/tex/latex/psnfss/omxpsycm.fd"
+                         "/tex/latex/psnfss/omxzplm.fd"
+                         "/tex/latex/psnfss/omxzpple.fd"
+                         "/tex/latex/psnfss/omxztmcm.fd"
+                         "/tex/latex/psnfss/ot1bch.fd"
+                         "/tex/latex/psnfss/ot1pag.fd"
+                         "/tex/latex/psnfss/ot1pbk.fd"
+                         "/tex/latex/psnfss/ot1pcr.fd"
+                         "/tex/latex/psnfss/ot1phv.fd"
+                         "/tex/latex/psnfss/ot1pnc.fd"
+                         "/tex/latex/psnfss/ot1ppl.fd"
+                         "/tex/latex/psnfss/ot1pplj.fd"
+                         "/tex/latex/psnfss/ot1pplx.fd"
+                         "/tex/latex/psnfss/ot1ptm.fd"
+                         "/tex/latex/psnfss/ot1ptmcm.fd"
+                         "/tex/latex/psnfss/ot1put.fd"
+                         "/tex/latex/psnfss/ot1pzc.fd"
+                         "/tex/latex/psnfss/ot1zplm.fd"
+                         "/tex/latex/psnfss/ot1zpple.fd"
+                         "/tex/latex/psnfss/ot1ztmcm.fd"
+                         "/tex/latex/psnfss/t1bch.fd"
+                         "/tex/latex/psnfss/t1pag.fd"
+                         "/tex/latex/psnfss/t1pbk.fd"
+                         "/tex/latex/psnfss/t1pcr.fd"
+                         "/tex/latex/psnfss/t1phv.fd"
+                         "/tex/latex/psnfss/t1pnc.fd"
+                         "/tex/latex/psnfss/t1ppl.fd"
+                         "/tex/latex/psnfss/t1pplj.fd"
+                         "/tex/latex/psnfss/t1pplx.fd"
+                         "/tex/latex/psnfss/t1ptm.fd"
+                         "/tex/latex/psnfss/t1put.fd"
+                         "/tex/latex/psnfss/t1pzc.fd"
+                         "/tex/latex/psnfss/ts1bch.fd"
+                         "/tex/latex/psnfss/ts1pag.fd"
+                         "/tex/latex/psnfss/ts1pbk.fd"
+                         "/tex/latex/psnfss/ts1pcr.fd"
+                         "/tex/latex/psnfss/ts1phv.fd"
+                         "/tex/latex/psnfss/ts1pnc.fd"
+                         "/tex/latex/psnfss/ts1ppl.fd"
+                         "/tex/latex/psnfss/ts1pplj.fd"
+                         "/tex/latex/psnfss/ts1pplx.fd"
+                         "/tex/latex/psnfss/ts1ptm.fd"
+                         "/tex/latex/psnfss/ts1put.fd"
+                         "/tex/latex/psnfss/ts1pzc.fd"
+                         "/tex/latex/psnfss/ufplm.fd"
+                         "/tex/latex/psnfss/ufplmbb.fd"
+                         "/tex/latex/psnfss/upsy.fd"
+                         "/tex/latex/psnfss/upzd.fd")
                    (base32
-                    "04y7v4bghpzky6c3l6qadx7s47m69jh1y615g91rxcn8z3r190di")
-                   #:trivial? #false)))
+                    "11f14dzhwsy4pli21acccip43d36nf3pac33ihjffnps1i2mhqkd"))))
     (package
       (inherit template)
       (arguments
        (substitute-keyword-arguments (package-arguments template)
-         ((#:tex-directory _ '())
+         ((#:tex-directory _ #t)
           "latex/psnfss")
          ((#:phases phases)
           `(modify-phases ,phases
              (add-after 'unpack 'chdir
-               (lambda _ (chdir "source/latex/psnfss")))))))
+               (lambda _
+                 (chdir "source/latex/psnfss") #t))))))
+      (native-inputs
+       (list texlive-cm))
       (home-page "https://www.ctan.org/pkg/psnfss")
       (synopsis "Font support for common PostScript fonts")
       (description
        "The PSNFSS collection includes a set of files that provide a complete
 working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
+PostScript fonts.  The base set of text fonts covered by PSNFSS includes the
+AvantGarde, Bookman, Courier, Helvetica, New Century Schoolbook, Palatino,
+Symbol, Times Roman and Zapf Dingbats fonts.  In addition, the fonts Bitstream
+Charter and Adobe Utopia are covered.  Separate packages are provided to load
+each font for use as the main text font.  The package @code{helvet} allows
+Helvetica to be loaded with its size scaled to something more appropriate for
+use as a Sans-Serif font to match Times, while @code{pifont} provides the
+means to select single glyphs from symbol fonts.  The bundle as a whole is
+part of the LaTeX required set of packages.")
       (license license:lppl1.2+))))
 
+(define-deprecated-package texlive-latex-psnfss texlive-psnfss)
+
 ;; For user profiles
 (define-public texlive-base
   (let ((default-packages
@@ -3682,17 +4125,19 @@ packages.")
                 texlive-dvips
                 texlive-fontname
                 texlive-cm
+                texlive-cm-super ; to avoid bitmap fonts
                 texlive-fonts-latex
-                texlive-metafont-base
+                texlive-metafont
                 texlive-latex-base
+                texlive-kpathsea       ;for mktex.opt
                 ;; LaTeX packages from the "required" set.
                 texlive-latex-amsmath
-                texlive-latex-amscls
-                texlive-latex-babel
+                texlive-amscls
+                texlive-babel
                 texlive-generic-babel-english
                 texlive-latex-cyrillic
                 texlive-latex-graphics
-                texlive-latex-psnfss
+                texlive-psnfss
                 texlive-latex-tools
                 texlive-tetex)))
     (package
@@ -3720,144 +4165,86 @@ It includes little more than the required set of LaTeX packages.")
                      '()
                      default-packages)))))
 
-(define-public texlive-default-updmap.cfg
-  (origin
-    (method url-fetch)
-    (uri (string-append "https://tug.org/svn/texlive/tags/"
-                        %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                        "?revision=" (number->string %texlive-revision)))
-    (file-name (string-append "updmap.cfg-"
-                              (number->string %texlive-revision)))
-    (sha256
-     (base32
-      "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))
-
-;; For use in package definitions only
-(define-public texlive-union
+;;; TODO: Add a TeX Live profile hook computing fonts maps (and others?)
+;;; configuration from the packages in the profile, similar to what's done
+;;; below.
+(define-public texlive-updmap.cfg
   (lambda* (#:optional (packages '()))
-    "Return 'texlive-union' package which is a union of PACKAGES and the
-standard LaTeX packages."
+    "Return a 'texlive-updmap.cfg' package which contains the fonts map
+configuration of a base set of packages plus PACKAGES."
     (let ((default-packages (match (package-propagated-inputs texlive-base)
                               (((labels packages) ...) packages))))
-      (package (inherit texlive-base)
-        (name "texlive-union")
-        (build-system trivial-build-system)
+      (package
+        (version (number->string %texlive-revision))
+        (source (origin
+                  (method url-fetch)
+                  (uri (string-append "https://tug.org/svn/texlive/tags/"
+                                      %texlive-tag
+                                      "/Master/texmf-dist/web2c/updmap.cfg"
+                                      "?revision=" version))
+                  (file-name "updmap.cfg")
+                  (sha256
+                   (base32
+                    "0zhpyld702im6352fwp41f2hgfkpj2b4j1kfsjqbkijlcmvb6w2c"))))
+        (name "texlive-updmap.cfg")
+        (build-system copy-build-system)
         (arguments
-         '(#:modules ((guix build union)
+         '(#:modules ((guix build copy-build-system)
                       (guix build utils)
-                      (guix build texlive-build-system)
-                      (guix build gnu-build-system)
-                      (guix build gremlin)
-                      (guix elf))
-           #:builder
-           (begin
-             (use-modules (ice-9 match)
-                          (ice-9 popen)
-                          (srfi srfi-26)
-                          (guix build union)
-                          (guix build utils)
-                          (guix build texlive-build-system))
-             (let* ((out       (assoc-ref %outputs "out"))
-                    (texmf.cnf (string-append out "/share/texmf-dist/web2c/texmf.cnf")))
-               ;; Build a modifiable union of all inputs (but exclude bash and
-               ;; the updmap.cfg file)
-               (match (filter (match-lambda
-                                ((name . _)
-                                 (not (member name '("bash"
-                                                     "coreutils"
-                                                     "sed"
-                                                     "updmap.cfg")))))
-                              %build-inputs)
-                 (((names . directories) ...)
-                  (union-build (assoc-ref %outputs "out")
-                               directories
-                               #:create-all-directories? #t
-                               #:log-port (%make-void-port "w"))))
-
-               ;; The configuration file "texmf.cnf" is provided by the
-               ;; "texlive-bin" package.  We take it and override only the
-               ;; setting for TEXMFROOT and TEXMF.  This file won't be consulted
-               ;; by default, though, so we still need to set TEXMFCNF.
-               (substitute* texmf.cnf
-                 (("^TEXMFROOT = .*")
-                  (string-append "TEXMFROOT = " out "/share\n"))
-                 (("^TEXMF = .*")
-                  "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-               (setenv "PATH" (string-append
-                               (assoc-ref %build-inputs "bash") "/bin:"
-                               (assoc-ref %build-inputs "coreutils") "/bin:"
-                               (assoc-ref %build-inputs "sed") "/bin:"
-                               (string-append out "/bin")))
-               (for-each
-                (cut wrap-program <>
-                     `("TEXMFCNF" ":" suffix (,(dirname texmf.cnf)))
-                     `("TEXMF"    ":" suffix (,(string-append out "/share/texmf-dist"))))
-                (find-files (string-append out "/bin") ".*"))
-
-               ;; Remove invalid maps from config file.
-               (let ((web2c (string-append out "/share/texmf-config/web2c/"))
-                     (maproot (string-append out "/share/texmf-dist/fonts/map/")))
-                 (mkdir-p web2c)
-                 (copy-file
-                  (assoc-ref %build-inputs "updmap.cfg")
-                  (string-append web2c "updmap.cfg"))
-                 (make-file-writable (string-append web2c "updmap.cfg"))
+                      (ice-9 popen)
+                      (ice-9 textual-ports))
+           #:install-plan '(("updmap.cfg" "share/texmf-config/web2c/")
+                            ("map" "share/texmf-dist/fonts/map"))
+           #:phases
+           (modify-phases %standard-phases
+             (add-before 'install 'regenerate-updmap.cfg
+               (lambda _
+                 (make-file-writable "updmap.cfg")
 
+                 ;; Disable unavailable map files.
                  (let* ((port (open-pipe* OPEN_WRITE "updmap-sys"
                                           "--syncwithtrees"
                                           "--nohash"
-                                          (string-append "--cnffile=" web2c "updmap.cfg"))))
+                                          "--cnffile" "updmap.cfg")))
                    (display "Y\n" port)
                    (when (not (zero? (status:exit-val (close-pipe port))))
                      (error "failed to filter updmap.cfg")))
+
+                 ;; Set TEXMFSYSVAR to a sane and writable value; updmap fails
+                 ;; if it cannot create its log file there.
+                 (setenv "TEXMFSYSVAR" (getcwd))
+
                  ;; Generate maps.
                  (invoke "updmap-sys"
-                         (string-append "--cnffile=" web2c "updmap.cfg")
-                         (string-append "--dvipdfmxoutputdir="
-                                        maproot "dvipdfmx/updmap/")
-                         (string-append "--dvipsoutputdir="
-                                        maproot "dvips/updmap/")
-                         (string-append "--pdftexoutputdir="
-                                        maproot "pdftex/updmap/"))
-                 ;; Having this file breaks all file lookups later.
-                 (delete-file (string-append out "/share/texmf-dist/ls-R")))
-               #t))))
-        (inputs
-         `(("bash" ,bash)
-           ,@(map (lambda (package)
-                    (list (package-name package) package))
-                  (append default-packages packages))))
-        (native-inputs
-         `(("coreutils" ,coreutils)
-           ("sed" ,sed)
-           ("updmap.cfg"
-            ,(origin
-               (method url-fetch)
-               (uri (string-append "https://tug.org/svn/texlive/tags/"
-                                   %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                                   "?revision=" (number->string %texlive-revision)))
-               (file-name (string-append "updmap.cfg-"
-                                         (number->string %texlive-revision)))
-               (sha256
-                (base32
-                 "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))))
+                         "--cnffile"           "updmap.cfg"
+                         "--dvipdfmxoutputdir" "map/dvipdfmx/updmap/"
+                         "--dvipsoutputdir"    "map/dvips/updmap/"
+                         "--pdftexoutputdir"   "map/pdftex/updmap/"))))))
+        (propagated-inputs (map (lambda (package)
+                                  (list (package-name package) package))
+                                (append default-packages packages)))
         (home-page (package-home-page texlive-bin))
-        (synopsis "Union of TeX Live packages")
-        (description "This package provides a subset of the TeX Live
-distribution.")
-        (license (fold (lambda (package result)
-                         (match (package-license package)
-                           ((lst ...)
-                            (append lst result))
-                           ((? license:license? license)
-                            (cons license result))))
-                       '()
-                       (append default-packages packages)))))))
+        (synopsis "TeX Live fonts map configuration")
+        (description "This package contains the fonts map configuration file
+generated for the base TeX Live packages as well as, optionally, user-provided
+ones.")
+        (license (delete-duplicates
+                  (fold (lambda (package result)
+                          (match (package-license package)
+                            ((lst ...)
+                             (append lst result))
+                            ((? license:license? license)
+                             (cons license result))))
+                        '()
+                        (append default-packages packages))))))))
+
+(define-deprecated/alias texlive-union texlive-updmap.cfg)
+(export texlive-union)
 
 ;; For use in package definitions only
 (define-public texlive-tiny
   (package
-    (inherit (texlive-union))
+    (inherit (texlive-updmap.cfg))
     (name "texlive-tiny")
     (description "This is a very limited subset of the TeX Live distribution.
 It includes little more than the required set of LaTeX packages.")))
@@ -3874,7 +4261,7 @@ It includes little more than the required set of LaTeX packages.")))
                     "/fonts/type1/public/tipa/"
                     "/tex/latex/tipa/")
               (base32
-               "1h53dscv8z6fsa0ax5dys3x11b2f1g60l22hpdf7c88cvdhcs8sn")
+               "0cqzf8vb10b8jw99m9gflskxa4c3rpiznxglix6chl5lai5sgw44")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tipa")
     (synopsis "Fonts and macros for IPA phonetics characters")
@@ -4017,7 +4404,7 @@ package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1zyl2pcz2x529gzj5m93a1s4ipymdabf7qdjl3l1673pizd4hfyv"))))
+                "0rhn74ywv000b89w8qjf1i0qsk6kd1mjapfwis14jwjvbjqgvj95"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/draftwatermark"))
     (home-page "https://www.ctan.org/pkg/draftwatermark")
@@ -4081,6 +4468,37 @@ for a variety of alignment purposes, as is evidenced by the examples in
 also provided.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-etoc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-etoc"
+              '("/doc/latex/etoc/README.md"
+                "/doc/latex/etoc/etoc.pdf"
+                "/tex/latex/etoc/")
+              (base32
+               "0198cn75m1y8ggbfv1qlnif0d9275f6mxqsansyqw4np0rv6q9sv")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/etoc")
+    (synopsis "Completely customisable TOCs")
+    (description
+     "This package gives the user complete control of how the entries of
+the table of contents should be constituted from the name, number, and page
+number of each sectioning unit.  The layout is controlled by the definition
+of ‘line styles’ for each sectioning level used in the document.
+
+The package provides its own custom line styles (which may be used as
+examples), and continues to support the standard formatting inherited from
+the LaTeX document classes, but the package can also allow the user to
+delegate the details to packages dealing with list making environments (such
+as enumitem).  The package’s default global style typesets tables of contents
+in a multi-column format, with either a standard heading, or a ruled title
+(optionally with a frame around the table).
+
+The @code{\\tableofcontents} command may be used arbitrarily many times in
+the same document, while @code{\\localtableofcontents} provides a ‘local’
+table of contents.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-expdlist
   (package
     (name "texlive-latex-expdlist")
@@ -4135,8 +4553,23 @@ mode.  The functionality is provided by purely expandable macros or by faster
 but non-expandable ones.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-filemod
-  (deprecated-package "texlive-latex-filemod" texlive-filemod))
+(define-deprecated-package texlive-latex-filemod texlive-filemod)
+
+(define-public texlive-latex-hanging
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hanging"
+              '("/tex/latex/hanging/")
+              (base32
+               "0s86yaxyfv9zxf4svwg9s13by9vrw38apfg0hsfchsimsdd6gsbb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/hanging")
+    (synopsis "Typeset hanging paragraphs")
+    (description
+     "The @code{hanging} package facilitates the typesetting of hanging
+paragraphs.  The package also enables typesetting with hanging punctuation,
+by making punctuation characters active.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-fira
   (package
@@ -4212,6 +4645,41 @@ that are compatible with @code{natbib}: @code{plainnat}, @code{unsrtnat},
 designed from the start to be compatible with @code{natbib}.")
     (license license:lppl)))
 
+(define-public texlive-latex-newunicodechar
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-newunicodechar"
+              '("/doc/latex/newunicodechar/" "/tex/latex/newunicodechar/")
+              (base32
+               "0pwx3ylhvk5hxjnalas00grrbwla79j424i27hrm0zgflq7wsbrj")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/newunicodechar")
+    (synopsis "Definitions of the meaning of Unicode characters")
+    (description
+     "This package provides a friendly interface for defining the meaning of
+Unicode characters.  The document should be processed by (pdf)LaTeX with the
+Unicode option of @code{inputenc} or @code{inputenx}, or by XeLaTeX/LuaLaTeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-pdftexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-pdftexcmds"
+              '("/doc/generic/pdftexcmds/"
+                "/tex/generic/pdftexcmds/")
+              (base32
+               "1hph0djbfc8hlwfc41rzlf8l3ccyyvc0n7a0qdrr9881jwd6iv1b")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-iftex texlive-generic-infwarerr
+           texlive-generic-ltxcmds))
+    (home-page "https://www.ctan.org/pkg/pdftexcmds")
+    (synopsis "LuaTeX support for pdfTeX utility functions")
+    (description
+     "This package makes a number of utility functions from pdfTeX
+available for luaTeX by reimplementing them using Lua.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-psfrag
   (package
     (name "texlive-latex-psfrag")
@@ -4247,16 +4715,16 @@ rotated.")
                "12clzcw2cl7g2chr2phgmmiwxw4859cln1gbx1wgp8bl9iw590nc")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-latex-bigfoot" ,texlive-latex-bigfoot) ; for suffix
-       ("texlive-latex-filemod" ,texlive-latex-filemod)
-       ("texlive-latex-graphics" ,texlive-latex-graphics)
-       ("texlive-latex-ifplatform" ,texlive-latex-ifplatform)
-       ("texlive-latex-l3kernel" ,texlive-latex-l3kernel) ; for expl3
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
-       ("texlive-latex-psfrag" ,texlive-latex-psfrag)
-       ("texlive-latex-tools" ,texlive-latex-tools) ; for shellesc
-       ("texlive-latex-trimspaces" ,texlive-latex-trimspaces)
-       ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+     (list texlive-latex-bigfoot ; for suffix
+           texlive-filemod
+           texlive-latex-graphics
+           texlive-latex-ifplatform
+           texlive-latex-l3kernel ; for expl3
+           texlive-oberdiek
+           texlive-latex-psfrag
+           texlive-latex-tools ; for shellesc
+           texlive-latex-trimspaces
+           texlive-latex-xkeyval))
     (home-page "https://www.ctan.org/pkg/pstool")
     (synopsis "Process PostScript graphics within pdfLaTeX documents")
     (description
@@ -4266,8 +4734,26 @@ drastically speeding up compilation time when only a single figure needs
 re-processing.")
     (license license:lppl)))
 
-(define-public texlive-latex-pstool
-  (deprecated-package "texlive-latex-pstool" texlive-pstool))
+(define-deprecated-package texlive-latex-pstool texlive-pstool)
+
+(define-public texlive-latex-refcount
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-refcount"
+              (list "/doc/latex/refcount/"
+                    "/tex/latex/refcount/")
+              (base32
+               "0pkmqj2qihndlv3ks33xzqw91q46jx79r3aygj68d8dflyddi583")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/refcount")
+    (synopsis "Counter operations with label references")
+    (description
+     "This package provides the @code{\\setcounterref} and
+@code{\\addtocounterref} commands which use the section (or other) number
+from the reference as the value to put into the counter.  It also provides
+@code{\\setcounterpageref} and @code{\\addtocounterpageref} that do the
+corresponding thing with the page reference of the label.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-seminar
   (package
@@ -4289,8 +4775,41 @@ recent classes such as powerdot or beamer, both of which are tuned to
 21st-century presentation styles.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-seminar
-  (deprecated-package "texlive-latex-seminar" texlive-seminar))
+(define-deprecated-package texlive-latex-seminar texlive-seminar)
+
+(define-public texlive-latex-stackengine
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-stackengine"
+              (list "/doc/latex/stackengine/"
+                    "/tex/latex/stackengine/")
+              (base32
+               "1rbw3dmb6kl3wlnpxacr8cmp2ivac1kpnb33k7r5s3lp1q59ck38")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/stackengine")
+    (synopsis "Customised stacking of objects")
+    (description
+     "The package provides a versatile way to stack objects vertically in a
+variety of customizable ways.  A number of useful macros are provided, all
+of which make use of the @code{stackengine} core.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-latex-tocloft
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-tocloft"
+              '("/doc/latex/tocloft/" "/tex/latex/tocloft/")
+              (base32
+               "0mg3hpzq7wpm6mnnvb0rp3wby56zyxkyai8d2h3f4vk93zrc6awk")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/tocloft")
+    (synopsis "Control table of contents")
+    (description
+     "This package provides control over the typography of the
+@dfn{Table of Contents}, @dfn{List of Figures} and @dfn{List of Tables},
+and the ability to create new ‘List of ...’. The ToC @code{\\parskip} may
+be changed. ")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-trimspaces
   (package
@@ -4316,7 +4835,7 @@ recent classes such as powerdot or beamer, both of which are tuned to
                (("pstool.tex") "trimspaces.tex"))
              #t)))))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/trimspaces")
     (synopsis "Trim spaces around an argument or within a macro")
     (description
@@ -4380,8 +4899,7 @@ hyperlink to the target of the DOI.")
     ;; Any version of the LPPL.
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-doi
-  (deprecated-package "texlive-latex-doi" texlive-doi))
+(define-deprecated-package texlive-latex-doi texlive-doi)
 
 (define-public texlive-etoolbox
   (package
@@ -4390,7 +4908,7 @@ hyperlink to the target of the DOI.")
               (list "/doc/latex/etoolbox/"
                     "/tex/latex/etoolbox/")
               (base32
-               "1cc1vw1ach55g4ff4x30by8k1mg01w199ccxvn72f5khlnnxial0")
+               "070iaj540rglf0c80l0hjkwg6aa7qyskhh4iwyhf7n8vrg5cjjab")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/etoolbox")
     (synopsis "e-TeX tools for LaTeX")
@@ -4404,8 +4922,7 @@ some LaTeX kernel commands; nevertheless, the package will not modify any part
 of the LaTeX kernel.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-etoolbox
-  (deprecated-package "texlive-latex-etoolbox" texlive-etoolbox))
+(define-deprecated-package texlive-latex-etoolbox texlive-etoolbox)
 
 (define-public texlive-latex-fncychap
   (package
@@ -4565,11 +5082,11 @@ BibLaTeX, and is considered experimental.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0a8f38c2ds1flxcr0apdpyaaz3k6fyalz6dkbrmcv9srjc40mh3n"))))
+                "0a9nrmiwksnpa6iaapirqid974ai56qgin2n4h9mggy9v8gp7r71"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/geometry"))
     (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek))) ;for ifpdf
+     (list texlive-oberdiek)) ;for ifpdf
     (home-page "https://www.ctan.org/pkg/geometry")
     (synopsis "Flexible and complete interface to document dimensions")
     (description
@@ -4616,7 +5133,7 @@ array environments; verbatim handling; and syntax diagrams.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0na7v4hsyx5s67cpjj2dbnq8j67k8lln6b19hmj631gfs27slss1"))))
+                "1ci6hr8hx4g2x359n6wqvw6w8fv42cjjpzxxxd3pn6av5nkaiav3"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/polyglossia"))
     (home-page "https://www.ctan.org/pkg/polyglossia")
@@ -4636,7 +5153,7 @@ and XeLaTeX; it relies on the @code{fontspec} package, version 2.0 at least.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "14b2bc7cqz4ckxxycim9sw6jkrr1pahivm1rdbpz5k6hl967w1s3"))))
+                "19fd0bqxjkzc16bza3w20pnsc90gbhbllm244b3h6sink4dlnn54"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/supertabular"))
     (home-page "https://www.ctan.org/pkg/supertabular")
@@ -4662,7 +5179,7 @@ situations where longtable has problems.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16jy02m089m7n6v9vbfi4xjgngc1fnvsmmppk8axfwzbhdky3c9c"))))
+                "1qcmcsxdsibca0mad559vhz36xaxsbkivgv1hc98vdyd90fg4y31"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4756,7 +5273,7 @@ considered obsolete; alternatives are the @code{typearea} package from the
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0rxfpr8vq3brwx5rc7qn91ixlp9zva4zrms8a579fqa1g5yva7vg"))))
+                "1gc2brr2rs495w7qi6spdva1xrza94x7a36dncjdkghnsq8r92h4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/appendix"))
     (home-page "https://www.ctan.org/pkg/appendix")
@@ -4769,6 +5286,23 @@ environment is provided which can be used instead of the @code{\\appendix}
 command.")
     (license license:lppl)))
 
+(define-public texlive-latex-bookmark
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-bookmark"
+              (list "/doc/latex/bookmark/"
+                    "/tex/latex/bookmark/")
+              (base32
+               "0xwjdah0p4an0fknvgj9y5phl62sf522z6570pvy6c09hkz0j4h1")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/bookmark")
+    (synopsis "Bookmark (outline) organization for hyperref")
+    (description
+     "This package implements a new bookmark (outline) organization for the
+@code{hyperref} package.  Bookmark properties such as style and color.  Other
+action types are available (URI, GoToR, Named).")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-changebar
   (package
     (name "texlive-latex-changebar")
@@ -4806,7 +5340,7 @@ drivers, and VTeX and pdfTeX.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1s1rv6zgw105w2j6ffhnk914qrix87y1ndzri1q72g2kbr91zlbg"))))
+                "0m4r52gw9vwsi1pzwh0cy03jxhwizymi4a2fj3jfs5rrvh105r5y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4836,7 +5370,7 @@ copy-and-paste functions work properly.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16vd99p01a0y30xr5yf1z2j5da9x8gy21vb30wk08jh31zffbaqj"))))
+                "1qa0mh0fy9hcvfsmprv6q50q0qzdjjfbxi3axap26z6zg3qj68bc"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/colortbl"))
     (home-page "https://www.ctan.org/pkg/colortbl")
@@ -4895,7 +5429,7 @@ floats, center, flushleft, and flushright, lists, and pages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0hrwspqkqfahxyzzsnjyrxlgxj06zw1f3636gx76pvl4xhvdj1cj"))))
+                "1h2zv7cps0pknqhy2dyfclyi002lmsfshm0rn6ywfl9p4fnvh0bc"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4963,6 +5497,24 @@ the same place.  The package also has a range of techniques for labelling
 footnotes with symbols rather than numbers.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-letltxmacro
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-letltxmacro"
+              (list "/doc/latex/letltxmacro/"
+                    "/tex/latex/letltxmacro/")
+              (base32
+               "0yy1m1jiyxq2pssp0pidaa2swx6lyxw3zwpm2r8m0v2r3lvsyyxx")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/letltxmacro")
+    (synopsis "Let assignment for macros")
+    (description
+     "TeX’s @code{\\let} assignment does not work for LaTeX macros with
+optional arguments, or for macros that are defined as robust macros by
+@code{\\DeclareRobustCommand}.  This package defines @code{\\LetLtxMacro}
+that also takes care of the involved internal macros.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-listings
   (package
     (name "texlive-latex-listings")
@@ -4973,7 +5525,7 @@ footnotes with symbols rather than numbers.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1fbrhqj22vzakn30j71fc41l8nliqbv1dmxm0zlwi2qjjbq6fwav"))))
+                "082zri3gp8s6p2difhk1pbix2vzmvsf6fmld2z78v35xwk3fiya0"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/listings"
@@ -5026,6 +5578,24 @@ transliterate semitic languages; patches to make (La)TeX formulae embeddable
 in SGML; use maths minus in text as appropriate; simple Young tableaux.")
     (license license:gpl2)))
 
+(define-public texlive-latex-kvoptions
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-kvoptions"
+              (list "/doc/latex/kvoptions/"
+                    "/tex/latex/kvoptions/")
+              (base32
+               "02i4n2n3j4lg68d3nam08m63kb4irc99wfhyc2z51r02lm1wwmvw")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-kvsetkeys texlive-generic-ltxcmds))
+    (home-page "https://www.ctan.org/pkg/kvoptions")
+    (synopsis "Key/value format for package options")
+    (description
+     "This package provides facilities for using key-value format in
+package options.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-fonts-ec
   (package
     (name "texlive-fonts-ec")
@@ -5053,7 +5623,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5087,9 +5657,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/ec")
     (synopsis "Computer modern fonts in T1 and TS1 encodings")
     (description
@@ -5146,7 +5714,7 @@ via the CM-super, Latin Modern and (in a restricted way) CM-LGC font sets.")
                     "/fonts/type1/public/inconsolata/"
                     "/tex/latex/inconsolata/")
               (base32
-               "1a77w26m4c4j0202s1qkikz7ha6cxlv8zxhzi9s3l0x1l2pl7cr2")
+               "19lvma52vk7x8d7j4s9ymjwm3w2k08860fh6dkzn76scgpdm4wlb")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/inconsolata")
     (synopsis "Monospaced font with support files for use with TeX")
@@ -5185,8 +5753,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-times
-  (deprecated-package "texlive-fonts-adobe-times" texlive-times))
+(define-deprecated-package texlive-fonts-adobe-times texlive-times)
 
 (define-public texlive-palatino
   (package
@@ -5214,8 +5781,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-palatino
-  (deprecated-package "texlive-fonts-adobe-palatino" texlive-palatino))
+(define-deprecated-package texlive-fonts-adobe-palatino texlive-palatino)
 
 (define-public texlive-zapfding
   (package
@@ -5240,8 +5806,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-zapfding
-  (deprecated-package "texlive-fonts-adobe-zapfding" texlive-zapfding))
+(define-deprecated-package texlive-fonts-adobe-zapfding texlive-zapfding)
 
 (define-public texlive-fonts-rsfs
   (package
@@ -5270,7 +5835,7 @@ Adobe's basic set.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5304,9 +5869,7 @@ Adobe's basic set.")
                          (find-files "." "\\.mf"))
                #t))))))
     (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
-       ("texlive-cm" ,texlive-cm)))
+     (list texlive-bin texlive-metafont texlive-cm))
     (home-page "https://www.ctan.org/pkg/rsfs")
     (synopsis "Ralph Smith's Formal Script font")
     (description
@@ -5328,7 +5891,7 @@ one of the packages @code{calrsfs} and @code{mathrsfs}.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0y2y08kr3w6asm9lblj9yywqmhaal36fq71zzcbfsc7cvwf641q7"))))
+                "12f7pbhiav4iz3rra5vq85v9f14h8j1ybi42kvnkzgjsay87p7gf"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/eso-pic"))
     (home-page "https://www.ctan.org/pkg/eso-pic")
@@ -5390,7 +5953,7 @@ splines, and filled circles and ellipses.  The package uses @code{tpic}
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vm9xp67hzif0pqab4r3ialf0cyhi0fa4p8kxgp1ymcf85pqip14"))))
+                "1j8svflnx9w897mdavyf1f0n256wh4bbclrhv5vx7b501gmlbp7d"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5422,7 +5985,7 @@ in the form @code{key=value} are available, for example:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "07vbcp6avdwldr870cwf65av2s9lfyzcpp8gpld53yw6lcxgaipj"))))
+                "1kak9i6nwz6vc4xjj6lbvkb69s49pis6qynjzvsjraxbdw28y2dq"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/multirow"))
     (home-page "https://www.ctan.org/pkg/multirow")
@@ -5447,7 +6010,7 @@ entry at the \"natural\" width of its text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1pr6ym3ad7x14ng7gmhsmywh3685d2cnm5qgyrqbigng2r6fcc1k"))))
+                "1ygsr0rsdabj61zask3346xrwiphz5i6f1nfb9k4d3234psh09kb"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5483,7 +6046,7 @@ positions; a grid for orientation is available.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0j1fhm1m9k6rz80lmch3x44g20y9nm4abaaf8czb0q8hzwlx5aq5"))))
+                "1zll8jci8lsd7y44j567akf6y8fp2p7qq23rs527zhr0br9mn3sh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5513,7 +6076,7 @@ designed class) helps alleviate this untidiness.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s4izcah7im67889qz4d26pcfpasmm35sj1rw4ragkkdk3rlbbbd"))))
+                "140kl8r7g2ak2frjn5pmwiwibfynyfwp897r9vk8pypmn390lzr2"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/pdfpages"))
     (home-page "https://www.ctan.org/pkg/pdfpages")
@@ -5527,38 +6090,47 @@ package supports pdfTeX (pdfLaTeX) and VTeX.  With VTeX it is even possible to
 use this package to insert PostScript files, in addition to PDF files.")
     (license license:lppl1.3+)))
 
-(define-public texlive-fonts-stmaryrd
-  (package
-    (name "texlive-fonts-stmaryrd")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "fonts" "stmaryrd"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "08pn4ca3vl6qm9l3wm5h5iyjsrg411kkm1yana329xwg2j14s9n6"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/stmaryrd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-ins
-           (lambda _
-             (substitute* "stmaryrd.ins"
-               (("^%% LaTeX2e.*") "\\input docstrip\n")
-               (("fontdef\\}\\}" line)
-                (string-append line "\n\\endbatchfile")))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/stmaryrd")
-    (synopsis "St Mary Road symbols for theoretical computer science")
-    (description
-     "The fonts were originally distributed as Metafont sources only, but
+(define-public texlive-stmaryrd
+  (let ((template (simple-texlive-package
+                   "texlive-stmaryrd"
+                   (list "/fonts/afm/public/stmaryrd/"
+                         "/fonts/map/dvips/stmaryrd/"
+                         "/fonts/source/public/stmaryrd/"
+                         "/fonts/tfm/public/stmaryrd/"
+                         "/fonts/type1/public/stmaryrd/"
+                         "/source/fonts/stmaryrd/"
+                         "/doc/fonts/stmaryrd/")
+                   (base32
+                    "0yn0yl6x1z9ab5gb56lhvkqabd2agz3ggxifwxkiysrj5780j29z"))))
+    (package
+      (inherit template)
+      (arguments (substitute-keyword-arguments (package-arguments template)
+                   ((#:tex-directory _ #t)
+                    "latex/stmaryrd")
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (add-after 'unpack 'chdir
+                         (lambda _
+                           (chdir "source/fonts/stmaryrd")
+                           #t))
+                       (add-after 'chdir 'patch-ins
+                         (lambda _
+                           (substitute* "stmaryrd.ins"
+                             (("^%% LaTeX2e.*") "\\input docstrip\n")
+                             (("fontdef\\}\\}" line)
+                              (string-append line "\n\\endbatchfile")))
+                           #t))))))
+      (home-page "https://www.ctan.org/pkg/stmaryrd")
+      (synopsis "St Mary Road symbols for theoretical computer science")
+      (description
+       "The fonts were originally distributed as Metafont sources only, but
 Adobe Type 1 versions are also now available.  Macro support is provided for
 use under LaTeX; the package supports the @code{only} option (provided by the
 @code{somedefs} package) to restrict what is loaded, for those who don't need
 the whole font.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-fonts-stmaryrd texlive-stmaryrd)
 
 (define-public texlive-latex-subfigure
   (package
@@ -5683,8 +6255,7 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
     ;; Any version of the GPL with font exception.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-txfonts
-  (deprecated-package "texlive-fonts-txfonts" texlive-txfonts))
+(define-deprecated-package texlive-fonts-txfonts texlive-txfonts)
 
 (define-public texlive-fonts-iwona
   (package
@@ -5709,14 +6280,13 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
          (use-modules (guix build utils))
          (let ((target (string-append (assoc-ref %outputs "out")
                                       "/share/texmf-dist/"))
-               (unzip  (string-append (assoc-ref %build-inputs "unzip")
-                                      "/bin/unzip")))
+               (unzip  (search-input-file %build-inputs "/bin/unzip")))
            (invoke unzip (assoc-ref %build-inputs "source"))
            (mkdir-p target)
            (copy-recursively "iwona" target)
            #t))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://jmn.pl/en/kurier-i-iwona/")
     (synopsis "Sans-serif typeface for TeX")
     (description "Iwona is a two-element sans-serif typeface. It was created
@@ -5734,12 +6304,10 @@ of ink traps which typify the Kurier font.")
               "texlive-jknappen"
               (list "/fonts/source/jknappen/"
                     "/fonts/tfm/jknappen/"
-                    "/fonts/source/jknappen/"
-                    "/fonts/tfm/jknappen/"
                     "/tex4ht/ht-fonts/alias/jknappen/"
                     "/tex4ht/ht-fonts/unicode/jknappen/")
               (base32
-               "1v5wk5il41bddzr81h5636h3cjz0w1qann5g9garsb7qfch9fhws")
+               "0xvy3c845jc7iw1h9rcm1r2yvm1ni1sm9r9k9j2cfc82xy43rwij")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/jknappen")
     (synopsis "Miscellaneous packages by Jörg Knappen")
@@ -5778,6 +6346,89 @@ Simple Young tableaux.
 @end table")
     (license license:gpl2)))                    ;per the 00readme_txt file.
 
+(define-public texlive-jadetex
+  (let ((template (simple-texlive-package
+                   "texlive-jadetex"
+                   (list "/doc/man/man1/jadetex.1"
+                         "/doc/man/man1/jadetex.man1.pdf"
+                         "/doc/man/man1/pdfjadetex.1"
+                         "/doc/man/man1/pdfjadetex.man1.pdf"
+                         "/source/jadetex/base/"
+                         ;; The following files are not generated from
+                         ;; sources.
+                         "/tex/jadetex/base/jadetex.ini"
+                         "/tex/jadetex/base/pdfjadetex.ini"
+                         "/tex/jadetex/base/uentities.sty")
+                   (base32
+                    "03chyc3vjqgxcj985gy4k0bd0lf1n4a6sgbhc7k84jparjk3hx4i"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "jadetex/base")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'unify-source-directory
+               (lambda _
+                 (chdir "source/jadetex/base")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "../../../tex/jadetex/base"))
+                 #t))
+             (add-after 'build 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (symlink f (basename f)))
+                           (find-files "build"))
+                 (invoke "fmtutil-sys" "--byfmt" "jadetex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfjadetex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/jadetex"))
+                   (symlink pdftex (string-append out "/bin/pdfjadetex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; Propagate the texlive-updmap.cfg input used by xmltex, which provides the
+       ;; required fonts for its use.
+       (list texlive-xmltex texlive-kpathsea)) ;for fmtutil.cnf template
+      (native-inputs
+       (list texlive-cm ;for cmex10 and others
+             texlive-fonts-latex ;for lasy6
+             ;; The t1cmr.fd file of texlive-latex-base refers to the ecrm font,
+             ;; provided by the jknappen package collection.
+             texlive-jknappen
+             texlive-generic-ulem
+             texlive-hyperref
+             texlive-latex-colortbl
+             texlive-latex-fancyhdr
+             texlive-latex-graphics ;for color.sty
+             texlive-latex-tools ;for array.sty
+             texlive-marvosym
+             texlive-tex-ini-files)) ;for pdftexconfig
+      (home-page "https://www.ctan.org/pkg/jadetex/")
+      (synopsis "TeX macros to produce TeX output using OpenJade")
+      (description "JadeTeX is a companion package to the OpenJade DSSSL
+processor.  OpenJade applies a DSSSL stylesheet to an SGML or XML document.
+The output of this process can be in a number of forms, including a set of
+high level LaTeX macros.  It is the task of the JadeTeX package to transform
+these macros into DVI/PostScript (using the @command{jadetex} command) or
+Portable Document Format (PDF) form (using the @command{pdfjadetex}
+command).")
+      ;; The license text is found at the header of the jadetex.dtx file.
+      (license license:expat))))
+
 (define-public texlive-libertine
   (package
     (inherit (simple-texlive-package
@@ -5793,7 +6444,7 @@ Simple Young tableaux.
 
                     "/tex/latex/libertine/")
               (base32
-               "1v2vimpfi0b08sd79dadrck7wkpa0bphiakwyvhjc3ygq9k5bp8k")
+               "1d5r80isyvs2v3i8pzlhsn7ns6bn8ldkbs82g25widraixlhg6yg")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/libertine")
     (synopsis "Use Linux Libertine and Biolinum fonts with LaTeX")
@@ -5851,7 +6502,7 @@ LGR.  The package doesn't (currently) support mathematics.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "04nmkhqx6jxcxx9a30zbcd5smxi5fd0cbp132bki7fnvhspnhg21"))))
+                "1kw7dvxvdfbf31zw0n8r0g5xak3vcdf25n33fqw93j59zpc5nvbl"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5902,23 +6553,48 @@ now contains a package @code{fix-cm},f which performs the task of
 @code{ec} fonts.")
     (license license:lppl)))
 
-(define-public texlive-latex-lh
-  (package
-    (name "texlive-latex-lh")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "lh"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "00gdiwh3sfhh1iimjhpja7lm7k4vzqzql2irgwnpz94qvh25zwi5"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/lh"))
-    (home-page "https://www.ctan.org/pkg/lh")
-    (synopsis "Cyrillic fonts that support LaTeX standard encodings")
-    (description
-     "The LH fonts address the problem of the wide variety of alphabets that
+(define-public texlive-lh
+  (let ((template (simple-texlive-package
+                   "texlive-lh"
+                   (list "/doc/fonts/lh/"
+                         "/source/fonts/lh/"
+                         "/source/latex/lh/"
+                         "/fonts/source/lh/"
+                         "/tex/plain/lh/")
+                   (base32
+                    "0vw75i52asi5sssp8k9r8dy4ihvqbvmbsl3dini3ls8cky15lz37"))))
+    (package
+      (inherit template)
+      (outputs '("out" "doc"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/lh")
+         ((#:build-targets _ '())
+          ''("nfssfox.ins" "lcyfonts.ins" "ot2fonts.ins" "t2ccfonts.ins"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/lh")))
+             (replace 'copy-files
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((source (assoc-ref inputs "source"))
+                        (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc"))
+                        (target (string-append (assoc-ref outputs "out")
+                                               "/share/texmf-dist"))
+                        (tex (string-append target "/tex/latex/lh/")))
+                   (copy-recursively "build/" tex)
+                   (copy-recursively (string-append source "/fonts/source/lh")
+                                     (string-append target "/fonts/source/lh"))
+                   (copy-recursively (string-append source "/tex/plain/lh")
+                                     (string-append target "/tex/plain/lh"))
+                   (copy-recursively (string-append source "/doc")
+                                     doc))))))))
+      (home-page "https://www.ctan.org/pkg/lh")
+      (synopsis "Cyrillic fonts that support LaTeX standard encodings")
+      (description
+       "The LH fonts address the problem of the wide variety of alphabets that
 are written with Cyrillic-style characters.  The fonts are the original basis
 of the set of T2* and X2 encodings that are now used when LaTeX users need to
 write in Cyrillic languages.  Macro support in standard LaTeX encodings is
@@ -5927,7 +6603,9 @@ offers support for other (more traditional) encodings.  The fonts, in the
 standard T2* and X2 encodings are available in Adobe Type 1 format, in the
 CM-Super family of fonts.  The package also offers its own LaTeX support for
 OT2 encoded fonts, CM bright shaped fonts and Concrete shaped fonts.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-lh texlive-lh)
 
 (define-public texlive-marvosym
   (package
@@ -5969,7 +6647,7 @@ the derived Type 1 font, together with support files for TeX (LaTeX).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1xyd57c8z1xi0kbqpbad61flcazz68i9ssxrag0gjvci3irxi8xh"))))
+                "140k9dz2g2vj5ypgyqx3px9c1y9a820y8kq139p96lw0yk6839aw"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5998,7 +6676,7 @@ than the bitmaps Metafont creates.")
               (uri (texlive-ref "latex" "acmart"))
               (sha256
                (base32
-                "18rl67p2zhngskisnhv78mksv8q8q658l6igkswzswldixmkpphq"))
+                "12wxav9r6v7dlfja9myrwz7famgfpcfwd292qzmgg283xgngh9kd"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acmart"))
@@ -6052,7 +6730,7 @@ get a narrower “natural” width.")
                     "/tex/plain/wasy/"
                     "/doc/fonts/wasy/")
               (base32
-               "10dxbqgv42niybj65hj6y47x8lsl83m48rgw2v2s50k05wbghwbm")
+               "1swzxgld3lndi5q0q6zkwbw06ndh13fvp04as7zpwyhh646s0hbx")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/wasy")
     (synopsis "Waldi symbol fonts")
@@ -6061,9 +6739,9 @@ in the Metafont and Adobe Type 1 formats.  Support under LaTeX is provided by
 the @code{wasysym} package.")
     (license license:public-domain)))
 
-(define-public texlive-latex-wasysym
+(define-public texlive-wasysym
   (package
-    (name "texlive-latex-wasysym")
+    (name "texlive-wasysym")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -6071,7 +6749,7 @@ the @code{wasysym} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1sgwbfwjjf70g54hh93gsd9jp9nm67w6n74x9d72a56n07jbk5hv"))))
+                "0zxcf0pfqf439cfwl0r5dd93b0v4pbiih36n2pwshdlvnmy0nr50"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/wasysym"))
     (home-page "https://www.ctan.org/pkg/wasysym")
@@ -6083,6 +6761,8 @@ male and female symbols and astronomical symbols, as well as the complete
 implements an easy to use interface for these symbols.")
     (license license:lppl)))
 
+(define-deprecated-package texlive-latex-wasysym texlive-wasysym)
+
 (define-public texlive-latex-wrapfig
   (package
     (name "texlive-latex-wrapfig")
@@ -6167,7 +6847,7 @@ package of that name now exists.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1hpsk4yp08qvbl43kqiv0hhwxv3gcqqxcpahyv6ch2b38pbj4bh6"))))
+                "0hnf821yvki9bzfkz79ns9m1msjp3yvd4dhf3268wrpr1zjx6w8v"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/preview"
@@ -6199,7 +6879,7 @@ files.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0jmasg40bk53zdd2jc8nc18jvdai3p2wmamy7hwli8gls4nf25qp"))))
+                "09pd4wynksg1y1ddxnqbhk2dc185zw5nyi794d86n3qx8l014ijy"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acronym"))
     (home-page "https://www.ctan.org/pkg/acronym")
@@ -6227,18 +6907,18 @@ e-TeX.")
                     "/tex/generic/pdftex/glyphtounicode.tex"
                     "/tex/generic/pdftex/pdfcolor.tex")
               (base32
-               "0wsgbl0jrqc1qzgf23dla6b95lv2h8x6xvs5466d8jdrih6pwriq")
+               "1wx928rqsv0x1a8vc7aq49w3nglr4bmlhl822slqglymfxrmb91b")
               #:trivial? #t))
     ;; TODO: add this missing package:
     ;; dehyph
     (propagated-inputs
-     `(("texlive-cm" ,texlive-cm)
-       ("texlive-etex" ,texlive-etex)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
-       ("texlive-hyphen-base" ,texlive-hyphen-base)
-       ("texlive-kpathsea" ,texlive-kpathsea)
-       ("texlive-tex-ini-files" ,texlive-tex-ini-files)
-       ("texlive-tex-plain" ,texlive-tex-plain)))
+     (list texlive-cm
+           texlive-etex
+           texlive-knuth-lib
+           texlive-hyphen-base
+           texlive-kpathsea
+           texlive-tex-ini-files
+           texlive-tex-plain))
     (home-page "https://www.ctan.org/pkg/pdftex")
     (synopsis "TeX extension for direct creation of PDF")
     (description
@@ -6246,20 +6926,19 @@ e-TeX.")
 directly generate PDF documents instead of DVI.")
     (license license:gpl2+)))
 
-(define-public texlive-generic-pdftex
-  (deprecated-package "texlive-generic-pdftex" texlive-pdftex))
+(define-deprecated-package texlive-generic-pdftex texlive-pdftex)
 
 (define texlive-texmf
   (package
    (name "texlive-texmf")
-   (version "20190410")
+   (version "20210325")
    (source texlive-texmf-src)
    (build-system gnu-build-system)
    (inputs
     `(("texlive-bin" ,texlive-bin)
       ("lua" ,lua)
       ("perl" ,perl)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
+      ("python" ,python)
       ("ruby" ,ruby)
       ("tcsh" ,tcsh)))
    (arguments
@@ -6290,9 +6969,15 @@ directly generate PDF documents instead of DVI.")
                      (share (string-append out "/share"))
                      (texmfroot (string-append share "/texmf-dist/web2c"))
                      (texmfcnf (string-append texmfroot "/texmf.cnf"))
+                     (fmtutilcnf (string-append texmfroot "/fmtutil.cnf"))
                      (texlive-bin (assoc-ref inputs "texlive-bin"))
                      (texbin (string-append texlive-bin "/bin"))
                      (tlpkg (string-append texlive-bin "/share/tlpkg")))
+                ;; LuaJIT is not ported to powerpc64* yet.
+                (if ,(target-ppc64le?)
+                    (substitute* fmtutilcnf
+                      (("^(luajittex|luajithbtex|mfluajit)" m)
+                       (string-append "#! " m))))
                 ;; Register SHARE as TEXMFROOT in texmf.cnf.
                 (substitute* texmfcnf
                   (("TEXMFROOT = \\$SELFAUTOPARENT")
@@ -6329,10 +7014,10 @@ This package contains the complete tree of texmf-dist data.")
 (define-public texlive
   (package
    (name "texlive")
-   (version "20190410")
+   (version "20210325")
    (source #f)
    (build-system trivial-build-system)
-   (inputs `(("bash" ,bash) ; for wrap-program
+   (inputs `(("bash" ,bash-minimal)     ;for wrap-program
              ("texlive-bin" ,texlive-bin)
              ("texlive-texmf" ,texlive-texmf)))
    (native-search-paths
@@ -6392,7 +7077,7 @@ This package contains the complete TeX Live distribution.")
 (define-public perl-text-bibtex
   (package
     (name "perl-text-bibtex")
-    (version "0.85")
+    (version "0.88")
     (source
      (origin
        (method url-fetch)
@@ -6400,7 +7085,7 @@ This package contains the complete TeX Live distribution.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "036kxgbn1jf70pfm2lmjlzjwnhbkd888fp5lyvmkjpdd15gla18h"))))
+         "0b7lmjvfmypps1nw6nsdikgaakm0n0g4186glaqazg5xd1p5h55h"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6418,10 +7103,8 @@ This package contains the complete TeX Live distribution.")
                (("lib64") "lib"))
              #t)))))
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-config-autoconf" ,perl-config-autoconf)
-       ("perl-extutils-libbuilder" ,perl-extutils-libbuilder)
-       ("perl-module-build" ,perl-module-build)))
+     (list perl-capture-tiny perl-config-autoconf perl-extutils-libbuilder
+           perl-module-build))
     (home-page "https://metacpan.org/release/Text-BibTeX")
     (synopsis "Interface to read and parse BibTeX files")
     (description "@code{Text::BibTeX} is a Perl library for reading, parsing,
@@ -6437,20 +7120,16 @@ values (strings, macros, or numbers) pasted together.")
     ;; checking the Biber/BibLaTeX compatibility matrix in the BibLaTeX manual
     ;; at <https://ctan.org/pkg/biblatex>.
     (name "biber")
-    (version "2.12")
+    (version "2.16")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/plk/biber/")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              ;; TODO: Patch awaiting inclusion upstream (see:
-              ;; https://github.com/plk/biber/issues/239).
-              (patches (search-patches "biber-fix-encoding-write.patch"
-                                       "biber-sortinithash.patch"))
               (sha256
                (base32
-                "1g1hi6zvf2hmrjly1sidjaxy5440gfqm4p7p3n7kayshnjsmlskx"))))
+                "0586q8y1f2k23mvb02ccm3qsb35cwskafksixsjaih7a7xcf5gxx"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6465,46 +7144,45 @@ values (strings, macros, or numbers) pasted together.")
                                     "/lib/perl5/site_perl")))))
              #t)))))
     (inputs
-     `(("perl-autovivification" ,perl-autovivification)
-       ("perl-class-accessor" ,perl-class-accessor)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-data-compare" ,perl-data-compare)
-       ("perl-data-uniqid" ,perl-data-uniqid)
-       ("perl-datetime-format-builder" ,perl-datetime-format-builder)
-       ("perl-datetime-calendar-julian" ,perl-datetime-calendar-julian)
-       ("perl-file-slurper" ,perl-file-slurper)
-       ("perl-ipc-cmd" ,perl-ipc-cmd)
-       ("perl-ipc-run3" ,perl-ipc-run3)
-       ("perl-list-allutils" ,perl-list-allutils)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-log-log4perl" ,perl-log-log4perl)
-       ;; We cannot use perl-unicode-collate here, because otherwise the
-       ;; hardcoded hashes in the tests would differ.  See
-       ;; https://mail-archive.com/debian-bugs-dist@lists.debian.org/msg1469249.html
-       ;;("perl-unicode-collate" ,perl-unicode-collate)
-       ("perl-unicode-normalize" ,perl-unicode-normalize)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("perl-encode-eucjpascii" ,perl-encode-eucjpascii)
-       ("perl-encode-jis2k" ,perl-encode-jis2k)
-       ("perl-encode-hanextra" ,perl-encode-hanextra)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-libxml-simple" ,perl-xml-libxml-simple)
-       ("perl-xml-libxslt" ,perl-xml-libxslt)
-       ("perl-xml-writer" ,perl-xml-writer)
-       ("perl-sort-key" ,perl-sort-key)
-       ("perl-text-csv" ,perl-text-csv)
-       ("perl-text-csv-xs" ,perl-text-csv-xs)
-       ("perl-text-roman" ,perl-text-roman)
-       ("perl-uri" ,perl-uri)
-       ("perl-text-bibtex" ,perl-text-bibtex)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-business-isbn" ,perl-business-isbn)
-       ("perl-business-issn" ,perl-business-issn)
-       ("perl-business-ismn" ,perl-business-ismn)
-       ("perl-lingua-translit" ,perl-lingua-translit)))
+     (list perl-autovivification
+           perl-class-accessor
+           perl-data-dump
+           perl-data-compare
+           perl-data-uniqid
+           perl-datetime-format-builder
+           perl-datetime-calendar-julian
+           perl-file-slurper
+           perl-io-string
+           perl-ipc-cmd
+           perl-ipc-run3
+           perl-list-allutils
+           perl-list-moreutils
+           perl-mozilla-ca
+           perl-regexp-common
+           perl-log-log4perl
+           perl-parse-recdescent
+           perl-unicode-collate
+           perl-unicode-normalize
+           perl-unicode-linebreak
+           perl-encode-eucjpascii
+           perl-encode-jis2k
+           perl-encode-hanextra
+           perl-xml-libxml
+           perl-xml-libxml-simple
+           perl-xml-libxslt
+           perl-xml-writer
+           perl-sort-key
+           perl-text-csv
+           perl-text-csv-xs
+           perl-text-roman
+           perl-uri
+           perl-text-bibtex
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-business-isbn
+           perl-business-issn
+           perl-business-ismn
+           perl-lingua-translit))
     (native-inputs
      `(("perl-config-autoconf" ,perl-config-autoconf)
        ("perl-extutils-libbuilder" ,perl-extutils-libbuilder)
@@ -6545,7 +7223,7 @@ other things it comes with full Unicode support.")
              ;; build it.
              (invoke "python" "setup.py" "build" "--pdf=False" "install"
                      (string-append "--prefix=" (assoc-ref outputs "out"))))))))
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (home-page "https://launchpad.net/rubber")
     (synopsis "Wrapper for LaTeX and friends")
     (description
@@ -6583,13 +7261,9 @@ PDF documents.")
                        (string-append "METAINFODIR=" out "/share/metainfo")
                        "texmaker.pro")))))))
     (inputs
-     `(("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-5)
-       ("qtscript" ,qtscript)
-       ("qtwebkit" ,qtwebkit)
-       ("zlib" ,zlib)))
+     (list poppler-qt5 qtbase-5 qtscript qtwebkit zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://www.xm1math.net/texmaker/")
     (synopsis "LaTeX editor")
     (description "Texmaker is a program that integrates many tools needed to
@@ -6624,11 +7298,11 @@ develop documents with LaTeX, in a single application.")
              (delete-file "book.pdf")
              #t)))))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts
-                                        texlive-fonts-adobe-palatino
-                                        texlive-fonts-adobe-zapfding
-                                        texlive-fonts-knuth-lib
-                                        texlive-fonts-mflogo-font
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                        texlive-palatino
+                                        texlive-zapfding
+                                        texlive-knuth-lib
+                                        texlive-mflogo-font
                                         texlive-pdftex)))
        ("automake" ,automake)))
     (home-page "https://www.gnu.org/software/teximpatient/")
@@ -6657,47 +7331,44 @@ and Karl Berry.")
                   #t))))
     (build-system qt-build-system)
     (arguments
-     `(#:configure-flags `("-DLYX_USE_QT=QT5"
-                           "-DLYX_EXTERNAL_BOOST=1"
-                           "-DLYX_INSTALL=1"
-                           "-DLYX_RELEASE=1"
-                           "-DLYX_PROGRAM_SUFFIX=OFF"
-                           ,(string-append "-DLYX_INSTALL_PREFIX="
-                                           (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-python
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("lib/configure.py"
-                            "src/support/ForkedCalls.cpp"
-                            "src/support/Systemcall.cpp"
-                            "src/support/os.cpp"
-                            "src/support/filetools.cpp")
-               (("\"python ")
-                (string-append "\""
-                               (assoc-ref inputs "python")
-                               "/bin/python3 ")))
-             #t))
-         (add-after 'unpack 'add-missing-test-file
-           (lambda _
-             ;; Create missing file that would cause tests to fail.
-             (with-output-to-file "src/tests/check_layout.cmake"
-               (const #t))
-             #t)))))
+     (list #:configure-flags
+           #~(list "-DLYX_USE_QT=QT5"
+                   "-DLYX_EXTERNAL_BOOST=1"
+                   "-DLYX_INSTALL=1"
+                   "-DLYX_RELEASE=1"
+                   "-DLYX_PROGRAM_SUFFIX=OFF"
+                   (string-append "-DLYX_INSTALL_PREFIX=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-python
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* '("lib/configure.py"
+                                  "src/support/ForkedCalls.cpp"
+                                  "src/support/Systemcall.cpp"
+                                  "src/support/os.cpp"
+                                  "src/support/filetools.cpp")
+                     (("\"python ")
+                      (string-append "\""
+                                     (assoc-ref inputs "python")
+                                     "/bin/python3 ")))))
+               (add-after 'unpack 'add-missing-test-file
+                 (lambda _
+                   ;; Create missing file that would cause tests to fail.
+                   (with-output-to-file "src/tests/check_layout.cmake"
+                     (const #t)))))))
     (inputs
-     `(("boost" ,boost)
-       ("hunspell" ,hunspell)           ; Note: Could also use aspell instead.
-       ("libx11" ,libx11)
-       ("mythes" ,mythes)
-       ("python" ,python)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("zlib" ,zlib)))
+     (list boost
+           hunspell ; Note: Could also use aspell instead.
+           libx11
+           mythes
+           python
+           qtbase-5
+           qtsvg
+           zlib))
     (propagated-inputs
-     `(("texlive" ,(texlive-union (list texlive-fonts-ec)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-fonts-ec)))))
     (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
+     (list python pkg-config))
     (home-page "https://www.lyx.org/")
     (synopsis "Document preparation system with GUI")
     (description "LyX is a document preparation system.  It excels at letting
@@ -6721,7 +7392,7 @@ required: automatic sectioning and pagination, spell checking and so forth.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s86v2b6b1vky1svmmn8pn0l2gz3v280mvjbr2d9l2sjyarlgz9w"))))
+                "0a1v70k6231323y1lazfda1y9568w8hn7c8jhc7rblkhdfv3slw7"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6761,7 +7432,7 @@ specification.  It replaces the now obsolete @code{movie15} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yhp51w8yr10c10pc9196q7hlw80brzqinnqbjw81d0sf2p0llc5"))))
+                "1mrz1mj59m27bfya52vi4lm84ifisaf30pmf8id1biqwcq4jyynh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6802,7 +7473,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0m4wx3yjb5al1qsv995z8fii8xxy96mcfihbnlx43lpgayiwz35s"))))
+                "04ww5abfm7dx81d21yr2gwy9jswaalnfm2384xp4cyx7srd9spfv"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/ms"
@@ -6838,7 +7509,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
      '(#:tex-directory "latex/needspace"
        #:tex-format "latex"))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/needspace")
     (synopsis "Insert pagebreak if not enough space")
     (description
@@ -6864,7 +7535,7 @@ page, a new page will be started.")
      '(#:tex-directory "latex/changepage"
        #:tex-format "latex"))
     (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+     (list texlive-latex-filecontents))
     (home-page "https://www.ctan.org/pkg/changepage")
     (synopsis "Margin adjustment and detection of odd/even pages")
     (description
@@ -6925,7 +7596,7 @@ is preferred in many parts of the world, as distinct from that which is used in
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1rzdniqq9zk39w8ch8ylx3ywh2mj87s4ivchrsk2b8nx06jyn797"))))
+         "161ka7sckiakcr1fgydxpc580sr16vp4sp3avjl2v9jn1pd2pwp0"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6962,7 +7633,7 @@ striking out (line through words) and crossing out (/// over words).")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dscrgwyr71vgx35mzb316xl669arzagfgq50fdv3nxga63959b3"))))
+         "1jk10rxz5f8vh46am11b40hxhhikk67h9jr3z877q5qc8kwppgza"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("texlive-latex-pgf-generic"
@@ -6976,9 +7647,9 @@ striking out (line through words) and crossing out (/// over words).")
            (file-name (string-append "texlive-latex-pgf-generic" version "-checkout"))
            (sha256
             (base32
-             "0hk5x2j15n4pps279cmkbjl1dvhasq3mbhna5xdvp2qgh635ahks"))))))
+             "05zdq7y3am109m5534ahqqp9x5iar3ha68v1r4zkrdly2mijxz2j"))))))
     (propagated-inputs
-     `(("texlive-latex-xcolor" ,texlive-latex-xcolor)))
+     (list texlive-xcolor))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -7020,7 +7691,7 @@ produce either PostScript or PDF output.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vz9zg7s5w52xr323zgglzprfrvba2zvyzf6b8vrdf4wdghlpv4z"))))
+                "1m6i8162r6ka19q517llrf0lax80rrsq564qirwk1chv5dqsmnfi"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7065,6 +7736,163 @@ refers to the version of scrbook, scrreprt, scrartcl, scrlttr2 and
 typearea (which are the main parts of the bundle).")
     (license license:lppl1.3+)))
 
+(define-public texlive-generic-atbegshi
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-atbegshi"
+              '("/doc/latex/atbegshi/"
+                "/tex/generic/atbegshi/")
+              (base32
+               "184fr5kd3wl44ix63lwb3ll7dhiikkyw1czbnzrl4am4rx0zh4d8")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atbegshi")
+    (synopsis "Execute commands at @code{\\shipout} time")
+    (description
+     "This package is a modern reimplementation of package @code{everyshi},
+providing various commands to be executed before a @code{\\shipout} command.
+It makes use of e-TeX’s facilities if they are available.  The package may
+be used either with LaTeX or with plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bigintcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bigintcalc"
+              '("/doc/latex/bigintcalc/README.md"
+                "/tex/generic/bigintcalc/")
+              (base32
+               "19grk4p1dh566hgpzhnjyjnrw57hpjijcpr7ci401n9jszcc1xkz")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-latex-pdftexcmds))
+    (home-page "https://www.ctan.org/pkg/bigintcalc")
+    (synopsis "Integer calculations on very large numbers")
+    (description
+     "This package provides expandable arithmetic operations with big
+integers that can exceed TeX's number limits.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bitset
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bitset"
+              '("/doc/latex/bitset/README.md"
+                "/tex/generic/bitset/")
+              (base32
+               "0inj6qpzizvsbxdfsaijnl4iq976kyrnchnm3gc1kc2w389zrn1l")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-intcalc
+           texlive-generic-bigintcalc))
+    (home-page "https://www.ctan.org/pkg/bitset")
+    (synopsis "Handle bit-vector datatype")
+    (description
+     "This package defines and implements the data type bit set, a vector
+of bits.  The size of the vector may grow dynamically.  Individual bits
+can be manipulated.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-etexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-etexcmds"
+              '("/doc/latex/etexcmds/README.md"
+                "/tex/generic/etexcmds/")
+              (base32
+               "11y6pnlq13bp0ybi7c82g8ds8085zv1zaslgqv3dzhgi3dklpc0c")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-infwarerr texlive-generic-iftex))
+    (home-page "https://www.ctan.org/pkg/etexcmds")
+    (synopsis "Avoid name clashes with e-TeX commands")
+    (description
+     "New primitive commands are introduced in e-TeX; sometimes the names
+collide with existing macros.  This package solves the name clashes by
+adding a prefix to e-TeX’s commands.  For example, ε-TeX’s
+@code{\\unexpanded} is provided as @code{\\etex@@unexpanded}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-gettitlestring
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-gettitlestring"
+              '("/doc/latex/gettitlestring/"
+                "/tex/generic/gettitlestring/")
+              (base32
+               "1p4hg9mac03rzvj9dw0ws3zdh55fy1ns954f912algw9f2aq4xgp")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/gettitlestring")
+    (synopsis "Clean up title references")
+    (description
+     "This package provides commands for cleaning up the title string
+(such as removing @code{\\label} commands) for packages that typeset such
+strings.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-infwarerr
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-infwarerr"
+              '("/tex/generic/infwarerr/")
+              (base32
+               "19nlrbfmqbkjrrx9x75s9nd6crg1lzimb2fr3hfblaivj6lx8p4r")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/infwarerr")
+    (synopsis "Information/warning/error macros")
+    (description
+     "This package provides a complete set of macros for information,
+warning and error messages.  Under LaTeX, the commands are wrappers for
+the corresponding LaTeX commands; under Plain TeX they are available as
+complete implementations.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-intcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-intcalc"
+              '("/tex/generic/intcalc/")
+              (base32
+               "0llrnayqwdqxi91yh7panbbiljina3bynv2hxhi6sssaw3pyd92l")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/intcalc")
+    (synopsis "Expandable arithmetic operations with integers")
+    (description
+     "This package provides expandable arithmetic operations with integers,
+using the e-TeX extension @code{\\numexpr} if it is available.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvdefinekeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvdefinekeys"
+              '("/tex/generic/kvdefinekeys/")
+              (base32
+               "12nn74skhwiszbdhawqds31caz6d59a5pjmwar0r8lmk4f1jr3xh")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvdefinekeys")
+    (synopsis "Define keys for use in the @code{kvsetkeys} package")
+    (description
+     "This package provides the @code{\\kv@@define@@key} (analogous to
+keyval’s @code{\\define@@key}, to define keys for use by @code{kvsetkeys}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvsetkeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvsetkeys"
+              '("/tex/generic/kvsetkeys/")
+              (base32
+               "149vpmv4vms269dzq4sghlngg380sasvxnb3sx9rfs7d9j0finvi")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvsetkeys")
+    (synopsis "Key value parser with default handler support")
+    (description
+     "This package provides @code{\\kvsetkeys}, a variant of @code{\\setkeys}
+from the @code{keyval} package.  Users can specify a handler that deals with
+unknown options.  Active commas and equal signs may be used, and only one
+level of curly braces are removed from the values.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-generic-listofitems
   (package
     (name "texlive-generic-listofitems")
@@ -7079,7 +7907,7 @@ typearea (which are the main parts of the bundle).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1x4wnpca97rnbvvg6wjmbkxxvnfva274q9ahzx746b435q93z3i1"))))
+                "1wnbnfrhi6hgqa78jsw6hljzi03i5x99mlr5n2419hgws52hk67y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7099,6 +7927,57 @@ the parsing character has been selected by the user, and to access any of
 these items with a simple syntax.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-generic-ltxcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-ltxcmds"
+              '("/tex/generic/ltxcmds/")
+              (base32
+               "1lr77yai2qivlx26s5094czpfxmg96bhxps5wbm8xn7cpsw0zbd9")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ltxcmds")
+    (synopsis "LaTeX kernel commands extracted for general use")
+    (description
+     "This package exports some utility macros from the LaTeX kernel into
+a separate namespace and also makes them available for other formats such
+as plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-pdfescape
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-pdfescape"
+              '("/tex/generic/pdfescape/")
+              (base32
+               "1vbdjmm9bi9ngzz2z1b8jnf6nzf9xsaj5pvyswg13y4dr00mnz6n")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/pdfescape")
+    (synopsis "pdfTeX's escape features for plain TeX")
+    (description
+     "This package implements pdfTeX's escape features (@code{\\pdfescapehex},
+@code{\\pdfunescapehex}, @code{\\pdfescapename}, @code{\\pdfescapestring})
+using TeX or e-TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-uniquecounter
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-uniquecounter"
+              '("/doc/latex/uniquecounter/"
+                "/tex/generic/uniquecounter/")
+              (base32
+               "1bjh8vwiqlkmjqndnh4xp116524x4m3hdcyq2s231jiqy8il8dcc")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-bigintcalc texlive-generic-infwarerr))
+    (home-page "https://www.ctan.org/pkg/uniquecounter")
+    (synopsis "Unlimited unique counter")
+    (description
+     "This package provides a kind of counter that provides unique number
+values.  Several counters can be created with different names.  The numeric
+values are not limited.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-readarray
   (package
     (name "texlive-latex-readarray")
@@ -7126,7 +8005,7 @@ these items with a simple syntax.")
            (copy-recursively (assoc-ref %build-inputs "source") target)
            #t))))
     (propagated-inputs
-     `(("texlive-generic-listofitems" ,texlive-generic-listofitems)))
+     (list texlive-generic-listofitems))
     (home-page "https://www.ctan.org/pkg/readarray")
     (synopsis "Read, store and recall array-formatted data")
     (description
@@ -7163,7 +8042,7 @@ formatted text.")
            (copy-recursively (assoc-ref %build-inputs "source") target)
            #t))))
     (propagated-inputs
-     `(("texlive-latex-readarray" ,texlive-latex-readarray)))
+     (list texlive-latex-readarray))
     (home-page "https://www.ctan.org/pkg/verbatimbox")
     (synopsis "Deposit verbatim text in a box")
     (description
@@ -7247,11 +8126,9 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
 @code{diag} package, which was previously distributed stand-alone.")
       (license license:gpl3+))))
 
-(define-public texlive-fonts-xypic
-  (deprecated-package "texlive-fonts-xypic" texlive-xypic))
+(define-deprecated-package texlive-fonts-xypic texlive-xypic)
 
-(define-public texlive-generic-xypic
-  (deprecated-package "texblive-generic-xypic" texlive-xypic))
+(define-deprecated-package texlive-generic-xypic texlive-xypic)
 
 (define-public texlive-bibtex
   (package
@@ -7268,7 +8145,7 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1wijqq605cbhn2bdaryby3xpkwmnk9ixcrjn5zwlfrxbgfblzfmz"))))
+         "0fr0s3jhrvplddb42if570dxllz54fa0pf4d2am27h8m385nghbf"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7303,7 +8180,7 @@ package, such as @command{natbib} as well).")
               #:trivial? #t))
     ;; This provides charter.map.
     (propagated-inputs
-     `(("texlive-psnfss" ,texlive-psnfss)))
+     (list texlive-psnfss))
     (home-page "https://www.ctan.org/pkg/charter")
     (synopsis "Charter fonts for TeX")
     (description "This package provides a copy of the Charter Type-1 fonts
@@ -7313,8 +8190,7 @@ Support for use with LaTeX is available in @code{freenfss}, part of
     (license (license:non-copyleft
               "http://mirrors.ctan.org/fonts/charter/readme.charter"))))
 
-(define-public texlive-fonts-charter
-  (deprecated-package "texlive-fonts-charter" texlive-charter))
+(define-deprecated-package texlive-fonts-charter texlive-charter)
 
 (define-public texlive-context
   (package
@@ -7357,7 +8233,6 @@ Support for use with LaTeX is available in @code{freenfss}, part of
                     "/doc/man/man1/mtx-watch.1"
                     "/doc/man/man1/mtx-youless.1"
 
-                    
                     "/bibtex/bst/context/"
                     "/context/"
 
@@ -7391,26 +8266,29 @@ Support for use with LaTeX is available in @code{freenfss}, part of
                     "/tex/generic/context/"
                     "/tex/latex/context/")
               (base32
-               "1npaw9jy41iv9qiilbmcljvc28rjzyjkan6mfcxizv2sbirymwp1")
+               "1rsw760f52rj62i7ms89xgxdi0qw6hag5fs5hb667nclr4kdkam8")
               #:trivial? #t))
     ;; TODO: add these missing packages:
     ;; xetex, luatex, lm-math, manfnt-font, and mptopdf
     (propagated-inputs
-     `(("texlive-amsfonts" ,texlive-amsfonts)
-       ("texlive-lm" ,texlive-lm)
-       ("texlive-pdftex" ,texlive-pdftex)
-       ("texlive-metapost" ,texlive-metapost)
-       ("texlive-fonts-stmaryrd" ,texlive-fonts-stmaryrd)
-       ("texlive-mflogo-font" ,texlive-mflogo-font)))
+     (list texlive-amsfonts
+           texlive-lm
+           texlive-pdftex
+           texlive-metapost
+           texlive-stmaryrd
+           texlive-mflogo-font))
     (home-page "https://www.ctan.org/pkg/context")
     (synopsis "Full featured, parameter driven macro package for TeX")
-    (description "A full featured, parameter driven macro package, which fully
-supports advanced interactive documents.  See the ConTeXt garden for a wealth
-of support information.")
-    (license license:gpl2+)))
+    (description "ConTeXt is a full featured, parameter driven macro package,
+which fully supports advanced interactive documents.  See the ConTeXt garden
+for a wealth of support information.")
+    ;; The GPL applies to all code; alternatively, the LaTeX license may be used.
+    ;; The CC-BY-SA license applies to all documentation.
+    (license (list license:lppl1.3c+
+                   license:gpl2+
+                   license:cc-by-sa4.0))))
 
-(define-public texlive-context-base
-  (deprecated-package "texlive-context-base" texlive-context))
+(define-deprecated-package texlive-context-base texlive-context)
 
 (define-public texlive-beamer
   (package
@@ -7419,13 +8297,11 @@ of support information.")
               (list "/doc/latex/beamer/"
                     "/tex/latex/beamer/")
               (base32
-               "1fqzbkmw2kfxihab8j4dadc3v68xap6v2ghpp2064fna47xlwy1c")
+               "091n27n4l3iac911bvmpp735ffryyzaq46mkclgn3q9jsvc4ngiv")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-latex-hyperref" ,texlive-latex-hyperref)
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
-       ("texlive-latex-etoolbox" ,texlive-latex-etoolbox)
-       ("texlive-latex-pgf" ,texlive-latex-pgf)))
+     (list texlive-hyperref texlive-oberdiek texlive-etoolbox
+           texlive-latex-pgf))
     (home-page "https://www.ctan.org/pkg/beamer")
     (synopsis "LaTeX class for producing presentations and slides")
     (description "The beamer LaTeX class can be used for producing slides.
@@ -7441,8 +8317,7 @@ effects, varying slide transitions and animations.")
     ;; dual-licensed under either FDLv1.3+ or LPPL1.3c+.
     (license (list license:lppl1.3c+ license:gpl2+ license:fdl1.3+))))
 
-(define-public texlive-latex-beamer
-  (deprecated-package "texlive-latex-beamer" texlive-beamer))
+(define-deprecated-package texlive-latex-beamer texlive-beamer)
 
 (define-public texlive-latex-xmpincl
   (package
@@ -7467,58 +8342,44 @@ the metadata is stored in an XML file, and this XML stream is then embedded in
 the file to which it applies.")
     (license license:gpl3+)))
 
-(define-public texlive-latex-pdfx
-  (package
-    (name "texlive-latex-pdfx")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "pdfx"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "18294h0cr05fs424m3x6aq24z5hf5zmiflalkj4kvpmsyyqqsj74"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/pdfx"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-encoding
-           (lambda _
-             (substitute* "pdfx.dtx"
-               (("    .+umaczy") "umaczy"))
-             #t))
-         (add-before 'install 'install-tex-files
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/pdfx")))
-               (mkdir-p target)
-               (copy-recursively (assoc-ref inputs "texlive-tex-pdfx") target)
-               ;; Install the generated version in the "install" phase.
-               (delete-file (string-append target "/pdfx.sty"))
-               #t))))))
-    (propagated-inputs
-     `(("texlive-pdftex" ,texlive-pdftex)))
-    (native-inputs
-     `(("texlive-tex-pdfx"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/pdfx"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "texlive-tex-latex-pdfx-" version "-checkout"))
-           (sha256
-            (base32
-             "171ffvpkj2fab4ljcxv3l6l5c8ga8zavdhmhfq07id8zyyr619ip"))))))
-    (home-page "https://www.ctan.org/pkg/pdfx")
-    (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
-    (description
-     "This package helps LaTeX users to create PDF/X, PDF/A and other
+(define-public texlive-pdfx
+  (let ((template (simple-texlive-package
+                   "texlive-pdfx"
+                   (list "/doc/latex/pdfx/"
+                         "/source/latex/pdfx/"
+                         "/tex/latex/pdfx/")
+                   (base32
+                    "1z4j4d92k2fjmf8jfap4zn7ij97d9rz2jcs9aslcac07ag4x5bdp"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/pdfx")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-generated-file
+               (lambda _
+                 ;; Generate this file from sources
+                 (delete-file "tex/latex/pdfx/pdfx.sty")
+                 #t))
+             (add-after 'delete-generated-file 'chdir
+               (lambda _ (chdir "source/latex/pdfx") #t))
+             (add-after 'chdir 'fix-encoding
+               (lambda _
+                 (substitute* "pdfx.dtx"
+                   (("    .+umaczy") "umaczy"))
+                 #t))))))
+      (propagated-inputs
+       (list texlive-pdftex))
+      (home-page "https://www.ctan.org/pkg/pdfx")
+      (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
+      (description
+       "This package helps LaTeX users to create PDF/X, PDF/A and other
 standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
-    (license license:lppl1.2+)))
+      (license license:lppl1.2+))))
+
+(define-deprecated-package texlive-latex-pdfx texlive-pdfx)
 
 (define-public texlive-ydoc
   (let ((template (simple-texlive-package
@@ -7542,21 +8403,11 @@ standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ydoc") #t))
              (add-after 'copy-files 'move-files
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((share (string-append (assoc-ref outputs "out")
-                                              "/share/texmf-dist"))
-                        (target (string-append share "/tex/generic/ydoc"))
-                        (doc (string-append (assoc-ref outputs "doc")
-                                            "/share/texmf-dist/doc") ))
-                   (mkdir-p target)
-                   (for-each
-                    (lambda (file)
-                      (rename-file (string-append share "/tex/latex/ydoc/" file)
-                                   (string-append target "/" file)))
-                    '("ydocincl.tex" "ydocstrip.tex"))
-                   (mkdir-p doc)
-                   (rename-file (string-append share "/doc") doc)
-                   #t)))))))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((source (assoc-ref inputs "source"))
+                       (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc")))
+                   (copy-recursively (string-append source "/doc")  doc))))))))
       (home-page "http://www.ctan.org/pkg/ydoc")
       (synopsis "Macros for documentation of LaTeX classes and packages")
       (description "The package provides macros and environments to document
@@ -7576,7 +8427,7 @@ change.")
                          "/tex/generic/pstricks/"
                          "/tex/latex/pstricks/")
                    (base32
-                    "0sdxdd0qi4sccw9il7d4s7jivs24pq99cdzfnrf0gkqjb1y8s7cl")
+                    "15c9iqfq2y9c8c78cvqb6vzd5a5rm7qq5x7m05jq1hb8sgqrqb0j")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7609,7 +8460,7 @@ or shading the cells of tables.")
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-pstricks" ,texlive-pstricks)))
+       (list texlive-pstricks))
       (home-page "http://www.ctan.org/pkg/pst-text")
       (synopsis "Text and character manipulation in PSTricks")
       (description "Pst-text is a PSTricks based package for plotting text along
@@ -7622,7 +8473,7 @@ of the old package @code{pst-char}.")
                    "texlive-marginnote"
                    (list "/source/latex/marginnote/marginnote.dtx")
                    (base32
-                    "1vj1k8xm11gjdfj60as42d8lsv3dbzrm5dlgqcfk89d9dzm3k39j"))))
+                    "152bwxhnssj40rr72r6cfirvqbnc0h7xnagfrbz58v2xck53qhg1"))))
     (package
       (inherit template)
       (home-page "http://www.ctan.org/pkg/marginnote")
@@ -7643,13 +8494,13 @@ may be used instead of @code{\\marginpar} at almost every place where
 frames made with the @code{framed} package.")
       (license license:lppl1.3c+))))
 
-(define-public texlive-iftex
+(define-public texlive-generic-iftex
   (let ((template (simple-texlive-package
-                   "texlive-iftex"
+                   "texlive-generic-iftex"
                    (list "/doc/generic/iftex/"
-                         "/tex/generic/iftex/iftex.sty")
+                         "/tex/generic/iftex/")
                    (base32
-                    "089zvw31gby150n1k0zdk2c0q97pgbqs46phxydaqil64b55nnl7")
+                    "147xa5kl4kjs05nj8v3kd7dpr5xkz3xp3gdvjih32ccd7527f5vp")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7663,13 +8514,17 @@ package also provides the @code{\\RequirePDFTeX}, @code{\\RequireXeTeX}, and
 LuaTeX (respectively) is not the engine in use.")
       (license license:lppl1.3+))))
 
+(define-deprecated-package texlive-iftex texlive-generic-iftex)
+
+(define-deprecated-package texlive-generic-ifxetex texlive-generic-iftex)
+
 (define-public texlive-tools
   (let ((template (simple-texlive-package
                    "texlive-tools"
                    (list "/doc/latex/tools/"
                          "/source/latex/tools/")
                    (base32
-                    "1ivhij7171wvrgcjn4wah84wxwpd21d0chh3zxab4pj067c8d0mh"))))
+                    "1xas0b69r3d5x4zhcqysgybyqaikd9avv6r1bdckb947id3iaz58"))))
     (package
       (inherit template)
       (arguments
@@ -7704,7 +8559,7 @@ are part of the LaTeX required tools distribution, comprising the packages:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0wancavix39j240pd8m9cgmwsijwx6jd6n54v8wg0x2rk5m44myp"))))
+                "0w4x82wmdvcmy8z3p55xvpz5q7jac1q1j591hi8mngfyqa8rda1c"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/xkeyval"
@@ -7749,19 +8604,19 @@ are part of the LaTeX required tools distribution, comprising the packages:
                            "xkvutils.tex"))
                #t))))))
     (native-inputs
-     `(("texlive-latex-base" ,texlive-latex-base)
-       ("texlive-cm" ,texlive-cm)
-       ("texlive-lm" ,texlive-lm)
-       ("texlive-url" ,texlive-url)
-       ("texlive-graphics-def" ,texlive-graphics-def)
-       ("texlive-xcolor" ,texlive-xcolor)
-       ("texlive-latex-footmisc" ,texlive-latex-footmisc)
-       ("texlive-latex-listings" ,texlive-latex-listings)
-       ("texlive-iftex" ,texlive-iftex)
-       ("texlive-pstricks" ,texlive-pstricks)
-       ("texlive-pst-text" ,texlive-pst-text)
-       ("texlive-tools" ,texlive-tools)
-       ("texlive-latex-pgf" ,texlive-latex-pgf)))
+     (list texlive-latex-base
+           texlive-cm
+           texlive-lm
+           texlive-url
+           texlive-graphics-def
+           texlive-xcolor
+           texlive-latex-footmisc
+           texlive-latex-listings
+           texlive-generic-iftex
+           texlive-pstricks
+           texlive-pst-text
+           texlive-tools
+           texlive-latex-pgf))
     (home-page "http://www.ctan.org/pkg/xkeyval")
     (synopsis "Extension of the keyval package")
     (description
@@ -7788,9 +8643,9 @@ keys.")
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/standalone"))
     (propagated-inputs
-     `(("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+     (list texlive-latex-xkeyval))
     (native-inputs
-     `(("texlive-ydoc" ,texlive-ydoc)))
+     (list texlive-ydoc))
     (home-page "http://www.ctan.org/pkg/standalone")
     (synopsis "Compile TeX pictures stand-alone or as part of a document")
     (description "A class and package is provided which allows TeX pictures or
@@ -7812,7 +8667,7 @@ The behaviour in standalone mode may adjusted using a configuration file
              (list "/source/latex/siunitx/siunitx.dtx"
                    "/doc/latex/siunitx/README.md")
              (base32
-              "11kf6znkgw7y5qmw75qk6px6pqf57bwr53q0673zaiyq20lif96c")))
+              "05kl7yid2npp2gbfshnv2xd08w81fkh5h2n5wd9xcpbhlqjzx9sj")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/siunitx"
@@ -7822,8 +8677,7 @@ The behaviour in standalone mode may adjusted using a configuration file
          (add-after 'unpack 'chdir
            (lambda _ (chdir "source/latex/siunitx") #t)))))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)
-       ("texlive-latex-l3packages" ,texlive-latex-l3packages)))
+     (list texlive-latex-l3kernel texlive-latex-l3packages))
     (home-page "http://www.ctan.org/pkg/siunitx")
     (synopsis "Comprehensive SI units package")
     (description
@@ -7852,7 +8706,7 @@ package to handle all of the possible unit-related needs of LaTeX users.")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dqid48vgh25wmw8xzmx6x3pfgz1y9f0r8aza1yxq2mjny5yf68x"))))
+         "1mycxzl761p2zzmva8xsjbxbvrxx3vhi5p160mh9kiqwhrs5biz5"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/booktabs"))
     (home-page "http://www.ctan.org/pkg/booktabs")
@@ -7870,12 +8724,12 @@ to what constitutes a good table in this context.  The package offers
                    (list "/doc/latex/csquotes/"
                          "/tex/latex/csquotes/")
                    (base32
-                    "088gvi60d7sdl6fgg68fbz30fnpqc3yrpkx80sfw7vwgar3wm3av")
+                    "17y5mrmjmi7n0cgq4cnqr55f4bni6lx1pfdv5pzsmbrzha3mhbfg")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)))
+       (list texlive-etoolbox))
       (home-page "https://www.ctan.org/pkg/csquotes")
       (synopsis "Context sensitive quotation facilities")
       (description "This package provides advanced facilities for inline and
@@ -7901,7 +8755,7 @@ styles as well as the optional active quotes are freely configurable.")
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)))
+       (list texlive-etoolbox))
       (home-page "https://www.ctan.org/pkg/logreq")
       (synopsis "Support for automation of the LaTeX workflow")
       (description "The package helps to automate a typical LaTeX
@@ -7928,13 +8782,12 @@ XML file.
                    (list "/doc/latex/biblatex/"
                          "/tex/latex/biblatex/")
                    (base32
-                    "11kzvny50iklzkamr0rqd5x532q8rxny1xhmf96jl8mzj1d2zmay")
+                    "091cz2vrq22d1fr05wljd8vbllsz95q2hn2p8hhrwb2l2xrmxwn8")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-logreq" ,texlive-logreq)
-         ("texlive-url" ,texlive-url)))
+       (list texlive-logreq texlive-url))
       (home-page "https://www.ctan.org/pkg/biblatex")
       (synopsis "Sophisticated bibliographies in LaTeX")
       (description "BibLaTeX is a complete reimplementation of the
@@ -7967,13 +8820,12 @@ section.
                    (list "/doc/latex/todonotes/"
                          "/tex/latex/todonotes/")
                    (base32
-                    "0lvxsskz4bdfxhd59hf77kiq8k4nh2spb66vc6hifdgi21z8r8wm")
+                    "1jqw8jy73488bdr971w0dnlggsvicagpnpx8ddqkma920ba8rabp")
                    #:trivial? #t)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)))
+       (list texlive-latex-pgf texlive-latex-xkeyval))
       (home-page "http://www.ctan.org/pkg/todonotes")
       (synopsis "Marking things to do in a LaTeX document")
       (description "The @code{todonotes} package lets the user mark
@@ -8006,7 +8858,7 @@ included in the @code{units} bundle.")
                    (list "/doc/latex/microtype/"
                          "/tex/latex/microtype/")
                    (base32
-                    "0xmjpzbj4nqmnl5m7xx1bshdk2c8n57rmbvn0j479ypj4wdlq9iy")
+                    "07861ixrjzxm0l24z82ivhaj4v6xm4ijbaabp66jxsf8s8h7dq9n")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8031,7 +8883,7 @@ the bundle.")
                    (list "/doc/latex/caption/"
                          "/tex/latex/caption/")
                    (base32
-                    "09gmh8yjj9f5zak8r18g87w9p5jn7flnvmlhxmvdq6992mbdc6hg")
+                    "1isnn375d14xsx398j3m8rbb0pdk12kijw4xcgl82xici170klwq")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8208,7 +9060,7 @@ a repackaging, for use with TeX, of the Bitstream Vera family.")
                     "/fonts/vf/public/fourier/"
                     "/tex/latex/fourier/")
               (base32
-               "1vs2xdx6f6hd01zlslx3y93g3dsa7k3yhqpnhgkizgjmz0r9ipz1")
+               "04d575nd4yvl58g9dfab9mrjxiv4792bdkz4bjvlkx6x257vlfzn")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fourier")
     (synopsis "Utopia fonts for LaTeX documents")
@@ -8254,7 +9106,7 @@ matching maths fonts are provided by the @code{fourier} and
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "19mhp9l7cjw0sbq55c9lz0l2pffkyhyir3i63jqynifjmglbgkl7"))))
+         "0j3w1y66pkf3bjl9dh5xy3lfg33rg08s4wx37a3jcndvcji20j3f"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/fontaxes"))
     (home-page "http://www.ctan.org/pkg/fontaxes")
@@ -8297,7 +9149,7 @@ footnote style author/affiliation input in the @command{\\author} command,
               (list "/doc/latex/mweights/"
                     "/tex/latex/mweights/")
               (base32
-               "1k2xclk54q3xgn48hji23q52nivkzgwf0s30bmm6k83f7v57qv8h")
+               "12493g3yz06mhiybnphqbp49fjzy36clzw63b74mkfhsg1pq7h1b")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/mweights")
     (synopsis "Support for multiple-weight font packages")
@@ -8323,7 +9175,7 @@ or if it differs from the weight desired for another font family.  The
                     "/fonts/vf/impallari/cabin/"
                     "/tex/latex/cabin/")
               (base32
-               "0dfq9gqch80iyvp58spmpmqfc9h61sjvnddm81ba0af1p8ag8sfg")
+               "1gqqqbj7i18fs1ss5n3axd821hzq5kbv1dl7dqxp4gba619f1rli")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/cabin")
     (synopsis "Humanist Sans Serif font with LaTeX support")
@@ -8354,7 +9206,7 @@ use with [pdf]LaTeX.")
                     "/fonts/vf/public/newtx/"
                     "/tex/latex/newtx/")
               (base32
-               "0rqjj33m6xkhrjzjhf24kxdg61az5sqsbcl0m7xqkf4akqybn22d")
+               "0h0wm3cd0wxag5x7vy3vgr42jd8m6ffkl90pnkvqdxzbnfdjv3l6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/newtx")
     (synopsis "Repackaging of the TX fonts with improved metrics")
@@ -8382,7 +9234,7 @@ mathematics package that matches Libertine text quite well.")
                     "/fonts/vf/public/xcharter/"
                     "/tex/latex/xcharter/")
               (base32
-               "0krm4h53lw7h9jbmv5nc89fm4x7i8l574aig1l4mw8w3ziknwmi7")
+               "0d8rvcmvxrlxqqxpirxqbhmiijpsz5y4vvldh1jnc018aannjlhm")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/xcharter")
     (synopsis "Extension of the Bitstream Charter fonts")
@@ -8495,7 +9347,7 @@ floats merely delays the arrival of the inevitable error message.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ifmtarg")))))))
       (inputs
-       `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
+       (list texlive-latex-filecontents))
       (home-page "https://www.ctan.org/pkg/ifmtarg")
       (synopsis "If-then-else command for processing potentially empty arguments")
       (description "This package provides a command for the LaTeX programmer for
@@ -8522,7 +9374,7 @@ testing whether an argument is empty.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/pagenote")))))))
       (propagated-inputs
-       `(("texlive-ifmtarg" ,texlive-ifmtarg)))
+       (list texlive-ifmtarg))
       (home-page "https://www.ctan.org/pkg/pagenote")
       (synopsis "Notes at end of document")
       (description "The pagenote package provides tagged notes on a separate
@@ -8550,7 +9402,7 @@ page (also known as ‘end notes’).")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/titling")))))))
       (native-inputs
-       `(("texlive-cm" ,texlive-cm)))
+       (list texlive-cm))
       (home-page "https://www.ctan.org/pkg/titling")
       (synopsis "Control typesetting of the \\maketitle command")
       (description "The @code{titling} package provides control over the
@@ -8580,7 +9432,7 @@ a physical page.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ifoddpage")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/ifoddpage")
       (synopsis "Determine if the current page is odd or even")
       (description "This package provides an @code{\\ifoddpage} conditional to
@@ -8610,7 +9462,7 @@ the conditional @code{\\ifoddpageoronside} is provided which is also true in
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/storebox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/storebox")
       (synopsis "Storing information for reuse")
       (description "The package provides \"store boxes\" whose user interface
@@ -8639,7 +9491,7 @@ DVI is output, store boxes behave the same as save boxes.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/collectbox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (home-page "https://www.ctan.org/pkg/collectbox")
       (synopsis "Collect and process macro arguments as boxes")
       (description "The package provides macros to collect and process a macro
@@ -8653,13 +9505,38 @@ Arguments may contain verbatim material or other special use of characters.
 The macros were designed for use within other macros.")
       (license license:lppl1.3))))
 
+(define-public texlive-grfext
+  (let ((template (simple-texlive-package
+                   "texlive-grfext"
+                   (list "/doc/latex/grfext/README.md"
+                         "/source/latex/grfext/grfext.dtx")
+                   (base32
+                    "1cdvjp9gcnixxlbl8ibwz1yr799gwax5hm686hwmwsigdgafhzgq"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "latex/grfext")
+         ((#:build-targets _ '())
+          ''("grfext.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/grfext")))))))
+      (home-page "https://github.com/ho-tex/grfext")
+      (synopsis "Manipulate the graphics package's list of extensions")
+      (description "This package provides macros for adding to, and reordering
+the list of graphics file extensions recognised by package graphics.")
+      (license license:lppl1.3c+))))
+
 (define-public texlive-adjustbox
   (let ((template (simple-texlive-package
                    "texlive-adjustbox"
                    (list "/doc/latex/adjustbox/"
                          "/source/latex/adjustbox/")
                    (base32
-                    "14vd0yd50bky2pbbjkn59q1aglnqpdhh8vwjdyan0jkzljsr2ch8"))))
+                    "074nxbnl184b6iwhis5n85pilq3b2pld3bbrq0wc30hw462m898k"))))
     (package
       (inherit template)
       (arguments
@@ -8673,14 +9550,14 @@ The macros were designed for use within other macros.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/adjustbox")))))))
       (native-inputs
-       `(("texlive-ydoc" ,texlive-ydoc)))
+       (list texlive-ydoc))
       (propagated-inputs
-       `(("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-varwidth" ,texlive-latex-varwidth)
-         ("texlive-latex-xkeyval" ,texlive-latex-xkeyval)
-         ("texlive-collectbox" ,texlive-collectbox)
-         ("texlive-ifoddpage" ,texlive-ifoddpage)
-         ("texlive-storebox" ,texlive-storebox)))
+       (list texlive-latex-pgf
+             texlive-latex-varwidth
+             texlive-latex-xkeyval
+             texlive-collectbox
+             texlive-ifoddpage
+             texlive-storebox))
       (home-page "https://www.ctan.org/pkg/adjustbox")
       (synopsis "Graphics package-alike macros for “general” boxes")
       (description "The package provides several macros to adjust boxed
@@ -8700,15 +9577,13 @@ provided box macros are @code{\\lapbox}, @code{\\marginbox},
                    (list "/doc/latex/tcolorbox/"
                          "/tex/latex/tcolorbox/")
                    (base32
-                    "172lcnk6964alsga5w6kcvjhpjjcw1g9df73k8pyhl5lf4fmxa29")
+                    "1qnsbblkadzdn1fx2k21xnlwcb35pg9xya24chkm66jmidi22qp0")
                    #:trivial? #true)))
     (package
       (inherit template)
       (propagated-inputs
-       `(("texlive-etoolbox" ,texlive-etoolbox)
-         ("texlive-latex-environ" ,texlive-latex-environ)
-         ("texlive-latex-pgf" ,texlive-latex-pgf)
-         ("texlive-latex-tools" ,texlive-latex-tools)))
+       (list texlive-etoolbox texlive-latex-environ texlive-latex-pgf
+             texlive-latex-tools))
       (home-page "https://www.ctan.org/pkg/tcolorbox")
       (synopsis "Colored boxes, for LaTeX examples and theorems, etc")
       (description "This package provides an environment for colored and
@@ -8737,7 +9612,7 @@ parts.")
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/ebproof"))
     (propagated-inputs
-     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
+     (list texlive-latex-l3kernel))
     (home-page "http://www.ctan.org/pkg/ebproof")
     (synopsis
      "Formal proofs in the style of sequent calculus")
@@ -8917,7 +9792,7 @@ handle complex tests.")
     (arguments
      `(#:test-target "test"))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://www.gerd-neugebauer.de/software/TeX/BibTool/en")
     (synopsis "Tool for manipulating BibTeX databases")
     (description
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index a2fe989f1a..13fb92d14a 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
-;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
@@ -59,26 +59,21 @@
      ;; with the native compiler, the environment is reset. This leads to
      ;; multiple environment variables missing. Do not reset the environment
      ;; to prevent that.
-     (if (%current-target-system)
-         '(#:phases
-           (modify-phases %standard-phases
-             (add-before 'configure 'fix-cross-configure
-               (lambda _
-                 (substitute* "configure"
-                   (("env -i")
-                    "env "))
-                 #t))))
-         '()))
-    (inputs `(("ncurses" ,ncurses)
-              ;; TODO: remove `if' in the next rebuild cycle.
-              ,@(if (%current-target-system)
-                    `(("perl" ,perl))
-                    '())))
+     `(#:phases
+       (if ,(%current-target-system)
+            (modify-phases %standard-phases
+              (add-before 'configure 'fix-cross-configure
+                (lambda _
+                  (substitute* "configure"
+                    (("env -i")
+                     "env "))
+                  #t)))
+            %standard-phases)))
+    (inputs (list ncurses perl))
     ;; When cross-compiling, texinfo will build some of its own binaries with
     ;; the native compiler. This means ncurses is needed both in both inputs
     ;; and native-inputs.
-    (native-inputs `(("perl" ,perl)
-                     ("ncurses" ,ncurses)))
+    (native-inputs (list perl ncurses))
 
     (native-search-paths
      ;; This is the variable used by the standalone Info reader.
@@ -121,11 +116,10 @@ is on expressing the content semantically, avoiding physical markup commands.")
               (sha256
                (base32
                 "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d"))))
-    (inputs `(("ncurses" ,ncurses)
-              ("xz" ,xz)))
+    (inputs (list ncurses xz))
     (native-inputs
-      `(("automake" ,automake)
-        ,@(package-native-inputs texinfo)))
+      (modify-inputs (package-native-inputs texinfo)
+        (prepend automake)))
     (arguments
      (substitute-keyword-arguments (package-arguments texinfo)
        ((#:phases phases)
@@ -210,7 +204,7 @@ is on expressing the content semantically, avoiding physical markup commands.")
                   (utime "texi2html.pl" 0 0 0 0)
                   #t))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (arguments
      ;; Tests fail because of warnings on stderr from Perl 5.22.  Adjusting
      ;; texi2html.pl to avoid the warnings seems non-trivial, so we simply
@@ -276,8 +270,7 @@ Texi2HTML.")
                 (string-append "\"" (which "clear") "\"")))
              #t)))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 0034aeabd6..13a1c1c071 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
 ;;; Copyright © 2020 Mark Meyer <mark@ofosos.org>
 ;;; Copyright © 2020 Maxime Devos <maximedevos@telenet.be>
@@ -36,6 +36,7 @@
 (define-module (gnu packages text-editors)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cargo)
@@ -145,11 +146,7 @@
            (sha256
             (base32 "1jsvg2lg3xqfgi79x08kx94mc34mh62ivca10vsci6fqsk68jbd0"))
            (file-name (git-file-name "vis-test" version))))))
-    (inputs `(("lua" ,lua)
-              ("ncurses" ,ncurses)
-              ("libtermkey" ,libtermkey)
-              ("lua-lpeg" ,lua-lpeg)
-              ("tre" ,tre)))
+    (inputs (list lua ncurses libtermkey lua-lpeg tre))
     (synopsis "Vim-like text editor")
     (description
      "Vis aims to be a modern, legacy free, simple yet efficient vim-like text
@@ -195,10 +192,8 @@ based command language.")
          (add-before 'build 'chdir
            (lambda _ (chdir "src") #t)))))
     (native-inputs
-     `(("gcc", gcc-10) ; See https://github.com/mawww/kakoune/issues/4318
-       ("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("ruby" ,ruby)))
+     (list gcc-10 ; See https://github.com/mawww/kakoune/issues/4318
+           asciidoc pkg-config ruby))
     (synopsis "Vim-inspired code editor")
     (description
      "Kakoune is a code editor heavily inspired by Vim, as such most of its
@@ -278,7 +273,7 @@ Rust.")
         ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (inputs
-     `(("clang" ,clang)))
+     (list clang))
     (home-page "https://github.com/justinbarclay/parinfer-rust")
     (synopsis "Infer parentheses for Clojure, Lisp and Scheme")
     (description
@@ -301,7 +296,7 @@ can load dynamic libraries.")
         (base32
          "1pmr598xxxm9j9dl93kq4dv36zyw0q2dh6d7x07hf134y9hhlnj9"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)))
+    (inputs (list ncurses))
     (home-page "http://joe-editor.sourceforge.net/")
     (synopsis "Console screen editor")
     (description
@@ -387,13 +382,12 @@ bindings and many of the powerful features of GNU Emacs.")
                                ":"))))
                         #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list pkg-config xorg-server-for-tests))
     (inputs
      `(("aspell" ,aspell)
        ("boost" ,boost)
        ("ctags" ,universal-ctags)
-       ("gtkmm" ,gtkmm)
+       ("gtkmm" ,gtkmm-3)
        ("gtksourceviewmm" ,gtksourceviewmm)
        ("libclang" ,clang-11)     ;XXX: must be the same version as Mesas LLVM
        ("libgit2" ,libgit2)))
@@ -421,10 +415,9 @@ systems.")
                 "0b0az2wvqgvam7w0ns1j8xp2llslm1rx6h7zcsy06a7j0yp257cm"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)))
+     (list gtk+-2))
     (home-page "http://tarot.freeshell.org/leafpad/")
     (synopsis "GTK+ based text editor")
     (description "Leafpad is a GTK+ text editor that emphasizes simplicity.  As
@@ -450,12 +443,9 @@ compiled, requires few libraries, and starts up quickly. ")
                   "1alyghm2wpakzdfag0g4g8gb1h9l4wdg7mnhq8bk0iq5ryqia16a"))))
       (build-system glib-or-gtk-build-system)
       (native-inputs
-       `(("intltool" ,intltool)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("pkg-config" ,pkg-config)))
+       (list intltool autoconf automake pkg-config))
       (inputs
-       `(("gtk+" ,gtk+)))
+       (list gtk+))
       (home-page "http://tarot.freeshell.org/leafpad/")
       (synopsis "GTK+ 3 based text editor")
       (description "L3afpad is a GTK+ 3 text editor that emphasizes simplicity.  As
@@ -490,7 +480,7 @@ compiled, requires few libraries, and starts up quickly. ")
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
-     `(("nasm" ,nasm)))
+     (list nasm))
     (home-page "https://sites.google.com/site/e3editor/")
     (synopsis "Tiny text editor written in assembly")
     (description
@@ -521,35 +511,31 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
                           (substitute* "GNUmakefile"
                             (("/usr/bin/") ""))))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("diffutils" ,diffutils)
-       ("libbsd" ,libbsd)
-       ("ncurses" ,ncurses)))
+    (native-inputs (list pkg-config))
+    (inputs (list diffutils libbsd ncurses))
     (arguments
      ;; No test suite available.
-     `(#:tests? #f
-       #:make-flags (list (string-append "prefix=" %output)
-                          (string-append "CC=" ,(cc-for-target))
-                          (string-append "PKG_CONFIG=" ,(pkg-config-for-target)))
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)   ; no configure script
-                  (add-before 'build 'correct-location-of-diff
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (substitute* "buffer.c"
-                        (("/usr/bin/diff")
-                         (string-append (assoc-ref inputs "diffutils")
-                                        "/bin/diff")))))
-                  (add-before 'install 'patch-tutorial-location
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (substitute* "mg.1"
-                        (("/usr") (assoc-ref outputs "out")))))
-                  (add-after 'install 'install-tutorial
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let* ((out (assoc-ref outputs "out"))
-                             (doc (string-append out "/share/doc/mg")))
-                        (install-file "tutorial" doc)))))))
+     (list #:tests? #f
+           #:make-flags
+           #~(list (string-append "prefix=" #$output)
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "PKG_CONFIG=" #$(pkg-config-for-target)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ;no configure script
+               (add-before 'build 'correct-location-of-diff
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "buffer.c"
+                     (("/usr/bin/diff")
+                      (search-input-file inputs "/bin/diff")))))
+               (add-before 'install 'patch-tutorial-location
+                 (lambda _
+                   (substitute* "mg.1"
+                     (("/usr") #$output))))
+               (add-after 'install 'install-tutorial
+                 (lambda _
+                   (let ((doc (string-append #$output "/share/doc/mg")))
+                     (install-file "tutorial" doc)))))))
     (home-page "https://homepage.boetes.org/software/mg/")
     (synopsis "Microscopic GNU Emacs clone")
     (description
@@ -611,11 +597,9 @@ OpenBSD team.")
                (install-file "config.eg" doc)
                #t))))))
     (native-inputs
-     `(("texinfo" ,texinfo)))
+     (list texinfo))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxv" ,libxv)))
+     (list libx11 libxext libxv))
     (home-page "https://bellard.org/qemacs/")
     (synopsis "Small but powerful text editor")
     (description "QEmacs (for Quick Emacs) is a very small but
@@ -681,18 +665,17 @@ scripts/input/X11/C/Shell/HTML/Dired): 49KB.
                 "19cf55b86yj2b5hdazbyw4iyp6xq155243aiyg4m0vhwh0h79nwh"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("qttools" ,qttools)))           ; for lrelease
+     (list pkg-config qttools))           ; for lrelease
     (inputs
-     `(("hunspell" ,hunspell)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtsvg" ,qtsvg)
-       ("qtwebchannel" ,qtwebchannel)))
+     (list hunspell
+           qtbase-5
+           qtdeclarative
+           qtmultimedia
+           qtquickcontrols
+           qtsvg
+           qtwebchannel))
     (propagated-inputs                  ; To get native-search-path
-     `(("qtwebengine" ,qtwebengine)))
+     (list qtwebengine))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -765,7 +748,8 @@ environment with Markdown markup.")
                (let ((bin (string-append out "/bin"))
                      (executable (string-append share "/bin/manuskript")))
                  (wrap-program executable
-                   (list "PYTHONPATH" 'prefix (list (getenv "PYTHONPATH"))))
+                   (list "GUIX_PYTHONPATH" 'prefix
+                         (list (getenv "GUIX_PYTHONPATH"))))
                  (mkdir-p bin)
                  (with-directory-excursion bin
                    (symlink (string-append share "/bin/manuskript")
@@ -788,11 +772,7 @@ environment with Markdown markup.")
                    #:categories "Office;WordProcessor;"))
                #t))))))
     (inputs
-     `(("pandoc" ,pandoc)
-       ("python-lxml" ,python-lxml)
-       ("python-markdown" ,python-markdown)
-       ("python-pyqt" ,python-pyqt)
-       ("qtsvg" ,qtsvg)))
+     (list pandoc python-lxml python-markdown python-pyqt qtsvg))
     (home-page "http://www.theologeek.ch/manuskript/")
     (synopsis "Tool for writers")
     (description "Manuskript provides a rich environment to help
@@ -861,7 +841,7 @@ in plain text file format.")
            (sha256
             (base32 "1s29p4brmcsc3xsww3gk85dg45f1kk3iykh1air3ij0hymf5dyqy"))))))
     (inputs
-     `(("pcre2" ,pcre2)))
+     (list pcre2))
     (home-page "https://editorconfig.org/")
     (synopsis "EditorConfig core library written in C")
     (description "EditorConfig makes it easy to maintain the correct coding
@@ -884,8 +864,7 @@ editors.")
         (base32 "1gl6k1bwrk1y7hjyl4xvlqvmk5crl4jvsk8wrfp7ynbdin6n2i48"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xdg-utils" ,xdg-utils)))       ;for xdg-icon-resource
+     (list pkg-config xdg-utils))       ;for xdg-icon-resource
     (inputs
      `(("freetype" ,freetype)
        ("guile" ,guile-1.8)
@@ -957,7 +936,7 @@ Octave.  TeXmacs is completely extensible via Guile.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("gtk+" ,gtk+)))
+     (list gtk+))
     (home-page "https://www.scintilla.org/")
     (synopsis "Code editor for GTK+")
     (description "Scintilla is a source code editing component for
@@ -983,20 +962,20 @@ and multiple fonts.")
         (base32 "0inmmb9wra2w99pfv6p64d66s2zrhafc8drhwmga7gj89mp1gzxb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("doxygen" ,doxygen)
-       ("glib" ,glib "bin")
-       ("intltool" ,intltool)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-docutils" ,python-docutils))) ;for rst2html
+     (list autoconf
+           automake
+           doxygen
+           `(,glib "bin")
+           intltool
+           libtool
+           pkg-config
+           python-docutils)) ;for rst2html
     (inputs
-     `(("gtk+" ,gtk+)
-       ;; FIXME: Geany bundles a 3.X release of Scintilla.  It is not
-       ;; currently possible to replace it with our Scintilla package.
-       ;; ("scintilla" ,scintilla)
-       ))
+     (list gtk+
+           ;; FIXME: Geany bundles a 3.X release of Scintilla.  It is not
+           ;; currently possible to replace it with our Scintilla package.
+           ;; ("scintilla" ,scintilla)
+           ))
     (arguments
      `(#:imported-modules ((guix build glib-or-gtk-build-system)
                            ,@%gnu-build-system-modules)
@@ -1059,7 +1038,7 @@ The basic features of Geany are:
     (native-inputs
      `(("gettext" ,gettext-minimal)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "http://www.moria.de/~michael/fe/")
     (synopsis "Small folding editor")
     (description "Fe is a small folding editor.  It folds
@@ -1095,10 +1074,9 @@ card.  It offers:
                 "0sg2f6lxq6cjkpd3dvlxxns82hvq826rjnams5in97pssmknr77g"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("texinfo" ,texinfo)))
+     (list perl texinfo))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:tests? #f
        #:make-flags
@@ -1149,7 +1127,7 @@ files.  It was originally developed on the Amiga 3000T.")
        (modify-phases %standard-phases
          (delete 'configure))))         ;no configure script
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://devel.ringlet.net/editors/hexer/")
     (synopsis "Multi buffer editor for binary files with vi-like interface")
     (description "Hexer is a multi-buffer editor for binary files for Unix-like
@@ -1184,11 +1162,8 @@ similar to vi/ex.")
                                (assoc-ref outputs "out")
                                "/share', *path_parts)"))))))))
     (inputs
-     `(("python2-lxml" ,python2-lxml)
-       ("python2-pygtk" ,python2-pygtk)
-       ("python2-simplejson" ,python2-simplejson)
-       ("python2-translate-toolkit" ,python2-translate-toolkit)
-       ("python2-pycurl" ,python2-pycurl)))
+     (list python2-lxml python2-pygtk python2-simplejson
+           python2-translate-toolkit python2-pycurl))
     (synopsis "Graphical translation tool")
     (description "Virtaal is a powerful yet simple translation tool with an
 uncluttered user interface.  It supports a multitude of translation formats
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 7e7293ac16..2ab0b05d9b 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -22,6 +22,7 @@
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -111,8 +112,7 @@ to DOS format and vice versa.")
         (base32 "0m59sd1ca0zw1aydpc3m8sw03nc885knmccqryg7byzmqs585ia6"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python)
-       ("python-cython" ,python-cython)))
+     (list python python-cython))
     (home-page "https://github.com/rrthomas/recode")
     (synopsis "Text encoding converter")
     (description "The Recode library converts files between character sets and
@@ -417,7 +417,7 @@ input bits thoroughly but are not suitable for cryptography.")
         (base32 "0dc9fxcdmppbs9s06jvq61zbk552laxps0xyk098gj41697ihd96"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)))
+     (list gettext-minimal))
     (home-page "https://billposer.org/Software/a2b.html")
     (synopsis "Convert between ASCII, hexadecimal and binary representations")
     (description "The two programs are useful for generating test data, for
@@ -475,8 +475,7 @@ useful when it is desired to reformat numbers.
                  (("^iconv ") (string-append iconv "/bin/iconv ")))
              #t))))))
     (inputs
-     `(("ascii2binary" ,ascii2binary)
-       ("libiconv" ,libiconv)))
+     (list ascii2binary libiconv))
     (home-page "https://billposer.org/Software/unidesc.html")
     (synopsis "Find out what is in a Unicode file")
     (description "Useful tools when working with Unicode files when one
@@ -750,15 +749,9 @@ in a portable way.")
              (invoke "autoreconf" "-vif")
              #t)))))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("readline" ,readline)
-       ("slang" ,slang)))
+     (list ncurses perl readline slang))
     (native-inputs
-     `(("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list libtool autoconf automake pkg-config))
     (home-page "https://www.lbreyer.com/dbacl.html")
     (synopsis "Bayesian text and email classifier")
     (description
@@ -794,9 +787,7 @@ categories.")
     (build-system gnu-build-system)
     (arguments `(#:tests? #f))  ; FIXME maketest.sh does not work.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/williamh/dotconf")
     (synopsis "Configuration file parser library")
     (description
@@ -853,8 +844,8 @@ categories.")
                           (with-directory-excursion
                               (format #f "../drm_tools-~a" ,version)
                             (invoke "sh" "test_all.sh")))))))))
-    (native-inputs `(("which" ,which))) ;for tests
-    (inputs `(("pcre" ,pcre)))
+    (native-inputs (list which)) ;for tests
+    (inputs (list pcre))
     (home-page "http://drmtools.sourceforge.net/")
     (synopsis "Utilities to manipulate text and binary files")
     (description "The drm_tools package contains the following commands:
@@ -929,8 +920,7 @@ Filter, list, or split a tar file.
        #:tests? #f
        #:jar-name "rsyntaxtextarea.jar"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://bobbylight.github.io/RSyntaxTextArea/")
     (synopsis "Syntax highlighting text component for Java Swing")
     (description "RSyntaxTextArea is a syntax highlighting, code folding text
@@ -969,7 +959,7 @@ source code.")
                  (delete-file "bycython.cpp")
                  (invoke "cython" "--cplus" "bycython.pyx")))))))
       (native-inputs
-       `(("python-cython" ,python-cython)))
+       (list python-cython))
       (home-page "https://www.github.com/aflc/editdistance")
       (synopsis "Fast implementation of the edit distance (Levenshtein distance)")
       (description
@@ -1019,8 +1009,7 @@ text.")
                 "06vdikjvpj6qdb41d8wzfnyj44jpnknmlgbhbr1w215420lpb5xj"))))
     (build-system gnu-build-system)
     (inputs
-     `(("unzip" ,unzip)
-       ("perl" ,perl)))
+     (list unzip perl))
     (arguments
      `(#:tests? #f                      ; No tests.
        #:make-flags (list (string-append "BINDIR="
@@ -1132,7 +1121,7 @@ documents into plain text.")
          ;; no configure script
          (delete 'configure))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://github.com/dstosberg/odt2txt/")
     (synopsis "Converter from OpenDocument Text to plain text")
     (description "odt2txt is a command-line tool which extracts the text out
@@ -1210,7 +1199,7 @@ OpenDocument presentations (*.odp).")
                (chdir "python")
                (mkdir-p dist)
                (setenv "PYTHONPATH"
-                       (string-append dist ":" (getenv "PYTHONPATH")))
+                       (string-append dist ":" (getenv "GUIX_PYTHONPATH")))
                (invoke "python" "setup.py" "install"
                        "--root=/" "--single-version-externally-managed"
                        (string-append "--prefix=" out))
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index b60fab5db5..728f5ebce7 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -86,7 +86,7 @@ to a file.")
         (base32
          "02kaambsgpjx3zi42j6l11rwms2p35b9hsk4f3kdf979gd3kcqg8"))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (build-system python-build-system)
     (home-page "https://github.com/wroberts/pytimeparse")
     (synopsis "Time expression parser")
@@ -110,7 +110,7 @@ expressions.")
     ;; repository lacks a setup.py!  How to build from git?
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-cleo" ,python-cleo)))
+     (list python-cleo))
     (home-page "https://github.com/sdispater/pytzdata")
     (synopsis "Timezone database for Python")
     (description
@@ -159,8 +159,7 @@ saving time.  Almost all of the Olson timezones are supported.")
     ;; lacks a setup.py!
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytzdata" ,python-pytzdata)))
+     (list python-dateutil python-pytzdata))
     (home-page "https://github.com/sdispater/pendulum")
     (synopsis "Alternate API for Python datetimes")
     (description "Pendulum is a drop-in replacement for the standard
@@ -172,14 +171,14 @@ Pendulum instances.")
 (define-public python-dateutil
   (package
     (name "python-dateutil")
-    (version "2.8.1")
+    (version "2.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-dateutil" version))
        (sha256
         (base32
-         "0g42w7k5007iv9dam6gnja2ry8ydwirh99mgdll35s12pyfzxsvk"))))
+         "11iy7m4bp2lgfkcl0r6xzf34bvk7ppjmsyn2ygfikbi72v6cl8q1"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -195,11 +194,9 @@ Pendulum instances.")
 
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-pytest-cov python-setuptools-scm))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://dateutil.readthedocs.io/en/stable/")
     (synopsis "Extensions to the standard datetime module")
     (description
@@ -226,12 +223,9 @@ datetime module, available in Python 2.3+.")
          "0jxqkjks7z9dn222cqgvskp4wr6d92aglinxq7pd2w4mzdc7r09x"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-pyicu" ,python-pyicu)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-nose python-pyicu python-pytest python-pytest-runner))
     (propagated-inputs
-     `(("python-future" ,python-future)))
+     (list python-future))
     (home-page "https://github.com/bear/parsedatetime/")
     (synopsis "Parse human-readable date/time text")
     (description
@@ -260,7 +254,7 @@ datetime module, available in Python 2.3+.")
     ;; Pytz should only be required for Python 2, but the test suite fails
     ;; without it.
     (native-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (home-page "https://github.com/closeio/ciso8601")
     (synopsis
      "Fast ISO8601 date time parser")
@@ -295,9 +289,9 @@ Python datetime objects.")
                (("def test_fail") "def _test_fail"))
              #t)))))
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (native-inputs
-     `(("python-mock" ,python-mock)))
+     (list python-mock))
     (home-page "https://github.com/regebro/tzlocal")
     (synopsis "Local timezone information for Python")
     (description
@@ -320,7 +314,7 @@ under several distributions that's hard or impossible to figure out.")
          "1n7jkz68kk5pwni540pr5zdh99bf6ywydk1p5pdrqisrawylldif"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-six" ,python-six)))
+     (list python-six))
     (home-page "https://github.com/gweis/isodate/")
     (synopsis "Python date parser and formatter")
     (description
@@ -349,7 +343,7 @@ ISO 8601 dates, time and duration.")
                     (lambda _
                       (invoke "pytest" "-vv" "iso8601"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://bitbucket.org/micktwomey/pyiso8601")
     (synopsis "Module to parse ISO 8601 dates")
     (description
@@ -396,9 +390,9 @@ value (in fractional seconds) of a clock which never goes backwards.")
          "06jv7ar7lpvvk0dixzwdr3wgm0g1lipxs429s2z7knwwa7hwpf41"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pytz" ,python-pytz)))
+     (list python-pytz))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     (list python-nose))
     (home-page "https://github.com/kurtraschke/pyRFC3339")
     (synopsis "Python timestamp library")
     (description "Python library for generating and parsing RFC 3339-compliant
@@ -430,15 +424,15 @@ timestamps.")
                        ;; Remove when python-dateutil > 2.8.1.
                        "-k" "not test_parse_tz_name_zzz")))))))
     (native-inputs
-     `(;; For testing
-       ("python-chai" ,python-chai)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-mock" ,python-pytest-mock)
-       ("python-pytz" ,python-pytz)
-       ("python-simplejson" ,python-simplejson)))
+     (list ;; For testing
+           python-chai
+           python-pytest
+           python-pytest-cov
+           python-pytest-mock
+           python-pytz
+           python-simplejson))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "https://github.com/arrow-py/arrow")
     (synopsis "Dates and times for Python")
     (description
@@ -450,17 +444,15 @@ datetime type.")
 (define-public python-aniso8601
   (package
     (name "python-aniso8601")
-    (version "1.3.0")
+    (version "9.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "aniso8601" version))
        (sha256
         (base32
-         "1waj54iv3n3lw1fapbz8a93yjgrybgpc86wif5baxdh1arpj9df3"))))
+         "0wxry6riyqajl02mkad8g2q98sx5jr13zndj3fandpzfcxv13qvj"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
     (home-page "https://bitbucket.org/nielsenb/aniso8601")
     (synopsis "Python library for parsing ISO 8601 strings")
     (description
@@ -503,7 +495,7 @@ datetime type.")
              #t))
          (delete 'configure))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://salsa.debian.org/debian/datefudge")
     (synopsis "Pretend the system date is different")
     (description
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 905197525d..6bf9c05c39 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -15,8 +15,10 @@
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;;
@@ -41,6 +43,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system perl)
@@ -55,6 +58,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages libbsd)
@@ -63,6 +67,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -78,7 +83,7 @@
 (define-public libtasn1
   (package
     (name "libtasn1")
-    (version "4.16.0")
+    (version "4.17.0")
     (source
      (origin
       (method url-fetch)
@@ -86,11 +91,11 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "179jskl7dmfp1rd2khkzmlibzgki4wi6hvmmwfv7q49r728b03qf"))))
+        "19a53i1ajs4dd8nnlr2i6gbzvla84ay71g3y1phvh8krx8f5brzc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs (list perl))
     (home-page "https://www.gnu.org/software/libtasn1/")
     (synopsis "ASN.1 library")
     (description
@@ -113,7 +118,7 @@ specifications.")
         "1fc64g45ykmv73kdndr4zdm4wxhimhrir4rxnygxvwkych5l81w0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://lionet.info/asn1c")
     (synopsis "ASN.1 to C compiler")
     (description "The ASN.1 to C compiler takes ASN.1 module
@@ -140,13 +145,33 @@ in intelligent transportation networks.")
        (base32 "1dn6br4v033d3gp2max9lsr3y4q0nj6iyr1yq3kzi8ym7lal13wa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(,@(if (hurd-target?)
+             `(("autoconf" ,autoconf)
+               ("automake" ,automake)
+               ("gettext" ,gettext-minimal) ;for autopoint
+               ("libtool" ,libtool))
+             '())
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("libffi" ,libffi)
+       ,@(if (hurd-target?)
+             `(("libbsd" ,libbsd)
+               ("hurd-patch" ,(search-patch "p11-kit-hurd.patch")))
+             '())
        ("libtasn1" ,libtasn1)))
     (arguments
      `(#:configure-flags '("--without-trust-paths")
        #:phases (modify-phases %standard-phases
+                  ,@(if (hurd-target?)
+                        '((add-after 'unpack 'apply-hurd-patch
+                            (lambda* (#:key inputs #:allow-other-keys)
+                              (let ((patch (assoc-ref inputs "hurd-patch")))
+                                (invoke "patch" "-p1" "--batch" "-i"
+                                        patch))))
+                          (replace 'bootstrap
+                            (lambda _
+                              (invoke "autoreconf" "-fiv"))))
+                        '())
                   (add-before 'check 'prepare-tests
                     (lambda _
                       ;; "test-runtime" expects XDG_RUNTIME_DIR to be set up
@@ -187,8 +212,7 @@ living in the same process.")
 (define-public gnutls
   (package
     (name "gnutls")
-    (version "3.6.15")
-    (replacement gnutls-3.6.16)
+    (version "3.7.2")
     (source (origin
               (method url-fetch)
               ;; Note: Releases are no longer on ftp.gnu.org since the
@@ -198,19 +222,20 @@ living in the same process.")
                                   "/gnutls-" version ".tar.xz"))
               (patches (search-patches "gnutls-skip-trust-store-test.patch"
                                        "gnutls-cross.patch"
-                                       "gnutls-CVE-2021-20231.patch"
-                                       "gnutls-CVE-2021-20232.patch"))
+                                       "gnutls-guile-eintr-eagain.patch"))
               (sha256
                (base32
-                "0n0m93ymzd0q9hbknxc2ycanz49sqlkyyf73g9fk7n787llc7a0f"))))
+                "0li7mwjnm64mbxhacz0rpf6i9qd83f53fvbrx96alpqqk9d6qvk4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? ,(not (or (%current-target-system)
                           (hurd-target?)))
-       ;; Ensure we don't keep a reference to net-tools.
-       #:disallowed-references ,(if (hurd-target?) '() (list net-tools))
+       ;; Ensure we don't keep a reference to the tools used for testing.
+       #:disallowed-references ,(if (hurd-target?)
+                                    '()
+                                    (list net-tools iproute socat))
        #:configure-flags
-       (list
+       (cons*
              ;; GnuTLS doesn't consult any environment variables to specify
              ;; the location of the system-wide trust store.  Instead it has a
              ;; configure-time option.  Unless specified, its configure script
@@ -231,13 +256,25 @@ living in the same process.")
              (string-append "--with-guile-extension-dir="
                             "$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions")
 
-             ;; FIXME: Temporarily disable p11-kit support since it is not
-             ;; working on mips64el.
-             "--without-p11-kit")
+             (let ((system ,(or (%current-target-system)
+                                (%current-system))))
+               (if (string-prefix? "mips64el" system)
+                   (list
+                    ;; FIXME: Temporarily disable p11-kit support since it is
+                    ;; not working on mips64el.
+                    "--without-p11-kit")
+                   '())))
 
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'install 'move-doc
+                  ;; fastopen.sh fails to connect to the server in the builder
+                  ;; environment (see:
+                  ;; https://gitlab.com/gnutls/gnutls/-/issues/1095).
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      (substitute* "tests/fastopen.sh"
+                        (("^unset RETCODE")
+                         "exit 77\n")))) ;skip
+                  (add-after 'install 'move-doc
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Copy the 4.1 MiB of section 3 man pages to "doc".
                      (let* ((out    (assoc-ref outputs "out"))
@@ -246,8 +283,7 @@ living in the same process.")
                             (oldman (string-append out "/share/man/man3")))
                        (mkdir-p mandir)
                        (copy-recursively oldman mandir)
-                       (delete-file-recursively oldman)
-                       #t))))))
+                       (delete-file-recursively oldman)))))))
     (outputs '("out"                              ;4.4 MiB
                "debug"
                "doc"))                            ;4.1 MiB of man pages
@@ -257,20 +293,29 @@ living in the same process.")
              '())
        ,@(if (hurd-target?)
              '()
-             `(("net-tools" ,net-tools)))
+             `(("net-tools" ,net-tools)
+               ("iproute" ,iproute)               ;for 'ss'
+               ("socat" ,socat)))                 ;several tests rely on it
        ("pkg-config" ,pkg-config)
+       ("texinfo" ,texinfo)
        ("which" ,which)
-       ,@(if (hurd-target?) '()
+       ,@(if (hurd-target?)
+             '()
              `(("datefudge" ,datefudge)))         ;tests rely on 'datefudge'
        ("util-linux" ,util-linux)))               ;one test needs 'setsid'
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (propagated-inputs
      ;; These are all in the 'Requires.private' field of gnutls.pc.
      `(("libtasn1" ,libtasn1)
        ("libidn2" ,libidn2)
        ("nettle" ,nettle)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ,@(let ((system (or (%current-target-system)
+                           (%current-system))))
+           (if (string-prefix? "mips64el" system)
+               '()
+               `(("p11-kit" ,p11-kit))))))
     (home-page "https://www.gnu.org/software/gnutls/")
     (synopsis "Transport layer security library")
     (description
@@ -282,68 +327,6 @@ required structures.")
     (properties '((ftp-server . "ftp.gnutls.org")
                   (ftp-directory . "/gcrypt/gnutls")))))
 
-;; Replacement package to fix CVE-2021-20305.
-(define gnutls-3.6.16
-  (package
-    (inherit gnutls)
-    (version "3.6.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnupg/gnutls/v"
-                                  (version-major+minor version)
-                                  "/gnutls-" version ".tar.xz"))
-              (patches (search-patches "gnutls-skip-trust-store-test.patch"
-                                       "gnutls-cross.patch"))
-              (sha256
-               (base32
-                "1czk511pslz367shf32f2jvvkp7y1323bcv88c2qng98mj0v6y8v"))))
-    (arguments
-     (if (%current-target-system)
-         (substitute-keyword-arguments (package-arguments gnutls)
-           ((#:phases phases '%standard-phases)
-            `(modify-phases ,phases
-               (add-before 'configure 'build-eccdata-headers
-                 (lambda* (#:key configure-flags #:allow-other-keys)
-                   ;; Build the 'ecc/eccdata' program using the native
-                   ;; compiler, not the cross-compiler as happens by default,
-                   ;; and use it to build lib/nettle/ecc/ecc-*.h.  In GnuTLS
-                   ;; 3.6.15, this was not necessary because the tarball
-                   ;; contained pre-generated lib/nettle/ecc/ecc-*.h files as
-                   ;; well as 'ecc/eccdata.stamp'.
-                   (let ((jobs  (number->string (parallel-job-count)))
-                         (patch (assoc-ref %standard-phases
-                                           'patch-generated-file-shebangs)))
-                     (mkdir "+native-build")
-                     (with-directory-excursion "+native-build"
-                       ;; Build natively, with the native compiler, GMP, etc.
-                       (invoke "../configure"
-                               (string-append "SHELL=" (which "sh"))
-                               (string-append "CONFIG_SHELL=" (which "sh"))
-                               "NETTLE_CFLAGS=   " "NETTLE_LIBS=   "
-                               "HOGWEED_CFLAGS=   " "HOGWEED_LIBS=   "
-                               "LIBTASN1_CFLAGS=   " "LIBTASN1_LIBS=   "
-                               "ac_cv_func_nettle_rsa_sec_decrypt=yes"
-                               "--without-p11-kit" "--disable-guile")
-                       (patch)
-                       (invoke "make" "-C" "gl" "-j" jobs)
-                       (invoke "make" "-C" "lib/nettle" "V=1" "-j" jobs))
-
-                     ;; Copy the files we obtained during native build.
-                     (for-each (lambda (file)
-                                 (install-file file "lib/nettle/ecc"))
-                               (find-files
-                                "+native-build/lib/nettle/ecc"
-                                "^(eccdata\\.stamp|ecc-.*\\.h)$"))))))))
-         (package-arguments gnutls)))
-    (native-inputs
-     (if (%current-target-system)
-         `(("libtasn1" ,libtasn1)                 ;for 'ecc/eccdata'
-           ("libidn2" ,libidn2)
-           ("nettle" ,nettle)
-           ("zlib" ,zlib)
-           ,@(package-native-inputs gnutls))
-         (package-native-inputs gnutls)))))
-
 (define-public gnutls/guile-2.0
   ;; GnuTLS for Guile 2.0.
   (package/inherit gnutls
@@ -368,148 +351,37 @@ required structures.")
               ,@(alist-delete "guile"
                               (package-inputs gnutls))))))
 
-(define-public openssl
-  (package
-   (name "openssl")
-   (version "1.1.1j")
-   (replacement openssl-1.1.1l)
-   (source (origin
-             (method url-fetch)
-             (uri (list (string-append "https://www.openssl.org/source/openssl-"
-                                       version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/"
-                                       "openssl-" version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/old/"
-                                       (string-trim-right version char-set:letter)
-                                       "/openssl-" version ".tar.gz")))
-             (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
-             (sha256
-              (base32
-               "1gw17520vh13izy1xf5q0a2fqgcayymjjj5bk0dlkxndfnszrwma"))))
-   (build-system gnu-build-system)
-   (outputs '("out"
-              "doc"         ;6.8 MiB of man3 pages and full HTML documentation
-              "static"))    ;6.4 MiB of .a files
-   (native-inputs `(("perl" ,perl)))
-   (arguments
-    `(#:parallel-tests? #f
-      #:test-target "test"
-
-      ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
-      ;; so we explicitly disallow it here.
-      #:disallowed-references ,(list (canonical-package perl))
-      #:phases
-      (modify-phases %standard-phases
-       ,@(if (%current-target-system)
-           '((add-before
-               'configure 'set-cross-compile
-               (lambda* (#:key target outputs #:allow-other-keys)
-                 (setenv "CROSS_COMPILE" (string-append target "-"))
-                 (setenv "CONFIGURE_TARGET_ARCH"
-                         (cond
-                           ((string-prefix? "i586" target)
-                            "hurd-x86")
-                           ((string-prefix? "i686" target)
-                            "linux-x86")
-                           ((string-prefix? "x86_64" target)
-                            "linux-x86_64")
-                           ((string-prefix? "mips64el" target)
-                            "linux-mips64")
-                           ((string-prefix? "arm" target)
-                            "linux-armv4")
-                           ((string-prefix? "aarch64" target)
-                            "linux-aarch64")
-                           ((string-prefix? "powerpc64le" target)
-                            "linux-ppc64le")
-                           ((string-prefix? "powerpc64" target)
-                            "linux-ppc64")
-                           ((string-prefix? "powerpc" target)
-                            "linux-ppc")))
-                 #t)))
-           '())
-        (replace 'configure
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (lib (string-append out "/lib")))
-              ;; It's not a shebang so patch-source-shebangs misses it.
-              (substitute* "config"
-                (("/usr/bin/env")
-                 (string-append (assoc-ref %build-inputs "coreutils")
-                                "/bin/env")))
-              (invoke ,@(if (%current-target-system)
-                          '("./Configure")
-                          '("./config"))
-                      "shared"       ;build shared libraries
-                      "--libdir=lib"
-
-                      ;; The default for this catch-all directory is
-                      ;; PREFIX/ssl.  Change that to something more
-                      ;; conventional.
-                      (string-append "--openssldir=" out
-                                     "/share/openssl-"
-                                     ,(package-version this-package))
+(define (target->openssl-target target)
+  "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling
+OpenSSL for TARGET."
+  ;; Keep this code outside the build code,
+  ;; such that new targets can be added
+  ;; without causing rebuilds for other targets.
+  (cond ((string-prefix? "i586" target)
+         "hurd-x86")
+        ((string-prefix? "i686" target)
+         "linux-x86")
+        ((string-prefix? "x86_64" target)
+         "linux-x86_64")
+        ((string-prefix? "mips64el" target)
+         "linux-mips64")
+        ((string-prefix? "arm" target)
+         "linux-armv4")
+        ((string-prefix? "aarch64" target)
+         "linux-aarch64")
+        ((string-prefix? "powerpc64le" target)
+         "linux-ppc64le")
+        ((string-prefix? "powerpc64" target)
+         "linux-ppc64")
+        ((string-prefix? "powerpc" target)
+         "linux-ppc")
+        ((string-prefix? "riscv64" target)
+         ;; linux64-riscv64 isn't recognized until 3.0.0.
+         "linux-generic64")))
 
-                      (string-append "--prefix=" out)
-                      (string-append "-Wl,-rpath," lib)
-                      ,@(if (%current-target-system)
-                          '((getenv "CONFIGURE_TARGET_ARCH"))
-                          '())))))
-        (add-after 'install 'move-static-libraries
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Move static libraries to the "static" output.
-            (let* ((out    (assoc-ref outputs "out"))
-                   (lib    (string-append out "/lib"))
-                   (static (assoc-ref outputs "static"))
-                   (slib   (string-append static "/lib")))
-              (for-each (lambda (file)
-                          (install-file file slib)
-                          (delete-file file))
-                        (find-files lib "\\.a$"))
-              #t)))
-        (add-after 'install 'move-extra-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-               ;; Move man3 pages and full HTML documentation to "doc".
-               (let* ((out    (assoc-ref outputs "out"))
-                      (man3   (string-append out "/share/man/man3"))
-                      (html (string-append out "/share/doc/openssl"))
-                      (doc    (assoc-ref outputs "doc"))
-                      (man-target (string-append doc "/share/man/man3"))
-                      (html-target (string-append doc "/share/doc/openssl")))
-                 (copy-recursively man3 man-target)
-                 (delete-file-recursively man3)
-                 (copy-recursively html html-target)
-                 (delete-file-recursively html)
-                 #t)))
-        (add-after
-         'install 'remove-miscellany
-         (lambda* (#:key outputs #:allow-other-keys)
-           ;; The 'misc' directory contains random undocumented shell and Perl
-           ;; scripts.  Remove them to avoid retaining a reference on Perl.
-           (let ((out (assoc-ref outputs "out")))
-             (delete-file-recursively (string-append out "/share/openssl-"
-                                                     ,(package-version this-package)
-                                                     "/misc"))
-             #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "SSL_CERT_DIR")
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs")))
-          (search-path-specification
-           (variable "SSL_CERT_FILE")
-           (file-type 'regular)
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs/ca-certificates.crt")))))
-   (synopsis "SSL/TLS implementation")
-   (description
-    "OpenSSL is an implementation of SSL/TLS.")
-   (license license:openssl)
-   (home-page "https://www.openssl.org/")))
-
-;; Replacement package to fix multiple CVEs.
-(define openssl-1.1.1l
+(define-public openssl
   (package
-    (inherit openssl)
+    (name "openssl")
     (version "1.1.1l")
     (source (origin
               (method url-fetch)
@@ -523,7 +395,118 @@ required structures.")
               (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
               (sha256
                (base32
-                "1lbblxps2fhmz7bqh058iywh5wxfignbfx1s1kz2fj63b5g3wyhb"))))))
+                "1lbblxps2fhmz7bqh058iywh5wxfignbfx1s1kz2fj63b5g3wyhb"))))
+    (build-system gnu-build-system)
+    (outputs '("out"
+               "doc"        ;6.8 MiB of man3 pages and full HTML documentation
+               "static"))   ;6.4 MiB of .a files
+    (native-inputs (list perl))
+    (arguments
+     `(#:parallel-tests? #f
+       #:test-target "test"
+
+       ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
+       ;; so we explicitly disallow it here.
+       #:disallowed-references ,(list (canonical-package perl))
+       #:phases
+       ,#~
+       (modify-phases %standard-phases
+         #$@(if (%current-target-system)
+                #~((add-before
+                       'configure 'set-cross-compile
+                     (lambda* (#:key target #:allow-other-keys)
+                       (setenv "CROSS_COMPILE" (string-append target "-"))
+                       (setenv "CONFIGURE_TARGET_ARCH"
+                               #$(target->openssl-target
+                                  (%current-target-system))))))
+                #~())
+         ;; This test seems to be dependant on kernel features.
+         ;; https://github.com/openssl/openssl/issues/12242
+         #$@(if (or (target-arm?)
+                    (target-riscv64?))
+                #~((replace 'check
+                     (lambda* (#:key tests? test-target #:allow-other-keys)
+                       (when tests?
+                         (invoke "make" "TESTS=-test_afalg" test-target)))))
+                #~())
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (let* ((out #$output)
+                    (lib (string-append out "/lib")))
+               ;; It's not a shebang so patch-source-shebangs misses it.
+               (substitute* "config"
+                 (("/usr/bin/env")
+                  (string-append (assoc-ref %build-inputs "coreutils")
+                                 "/bin/env")))
+               (apply
+                invoke #$@(if (%current-target-system)
+                              #~("./Configure")
+                              #~("./config"))
+                "shared"                ;build shared libraries
+                "--libdir=lib"
+
+                ;; The default for this catch-all directory is
+                ;; PREFIX/ssl.  Change that to something more
+                ;; conventional.
+                (string-append "--openssldir=" out
+                               "/share/openssl-"
+                               #$(package-version this-package))
+
+                (string-append "--prefix=" out)
+                (string-append "-Wl,-rpath," lib)
+                #$@(if (%current-target-system)
+                       #~((getenv "CONFIGURE_TARGET_ARCH"))
+                       #~())
+                configure-flags)
+               ;; Output the configure variables.
+               (invoke "perl" "configdata.pm" "--dump"))))
+         (add-after 'install 'move-static-libraries
+           (lambda _
+             ;; Move static libraries to the "static" output.
+             (let* ((out    #$output)
+                    (lib    (string-append out "/lib"))
+                    (static #$output:static)
+                    (slib   (string-append static "/lib")))
+               (for-each (lambda (file)
+                           (install-file file slib)
+                           (delete-file file))
+                         (find-files lib "\\.a$")))))
+         (add-after 'install 'move-extra-documentation
+           (lambda _
+             ;; Move man pages and full HTML documentation to "doc".
+             (let* ((out    #$output)
+                    (man    (string-append out "/share/man"))
+                    (html   (string-append out "/share/doc/openssl"))
+                    (doc    #$output:doc)
+                    (man-target (string-append doc "/share/man"))
+                    (html-target (string-append doc "/share/doc/openssl")))
+               (mkdir-p (dirname man-target))
+               (mkdir-p (dirname html-target))
+               (rename-file man man-target)
+               (rename-file html html-target))))
+         (add-after
+             'install 'remove-miscellany
+           (lambda _
+             ;; The 'misc' directory contains random undocumented shell and Perl
+             ;; scripts.  Remove them to avoid retaining a reference on Perl.
+             (delete-file-recursively (string-append #$output "/share/openssl-"
+                                                     #$(package-version this-package)
+                                                     "/misc")))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "SSL_CERT_DIR")
+            (separator #f)              ;single entry
+            (files '("etc/ssl/certs")))
+           (search-path-specification
+            (variable "SSL_CERT_FILE")
+            (file-type 'regular)
+            (separator #f)              ;single entry
+            (files '("etc/ssl/certs/ca-certificates.crt")))))
+    (synopsis "SSL/TLS implementation")
+    (description
+     "OpenSSL is an implementation of SSL/TLS.")
+    (license license:openssl)
+    (home-page "https://www.openssl.org/")))
 
 ;; We will not add any new uses of this package. If you add new code that uses
 ;; this package, your change will be reverted!
@@ -567,7 +550,7 @@ required structures.")
          ;; Parallel build is not supported in 1.0.x.
          ((#:parallel-build? _ #f) #f)
          ((#:phases phases)
-          `(modify-phases ,phases
+          #~(modify-phases #$phases
              (add-before 'patch-source-shebangs 'patch-tests
                (lambda* (#:key inputs native-inputs #:allow-other-keys)
                  (let ((bash (assoc-ref (or native-inputs inputs) "bash")))
@@ -590,9 +573,9 @@ required structures.")
                ;; Override this phase because OpenSSL 1.0 does not understand -rpath.
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((out (assoc-ref outputs "out")))
-                   (invoke ,@(if (%current-target-system)
-                                 '("./Configure")
-                                 '("./config"))
+                   (invoke #$@(if (%current-target-system)
+                                  #~("./Configure")
+                                  #~("./config"))
                            "shared"                 ;build shared libraries
                            "--libdir=lib"
 
@@ -600,12 +583,12 @@ required structures.")
                            ;; PREFIX/ssl.  Change that to something more
                            ;; conventional.
                            (string-append "--openssldir=" out
-                                          "/share/openssl-" ,version)
+                                          "/share/openssl-" #$version)
 
                            (string-append "--prefix=" out)
-                           ,@(if (%current-target-system)
-                                 '((getenv "CONFIGURE_TARGET_ARCH"))
-                                 '())))))
+                           #$@(if (%current-target-system)
+                                  '((getenv "CONFIGURE_TARGET_ARCH"))
+                                  '())))))
              (delete 'move-extra-documentation)
              (add-after 'install 'move-man3-pages
                (lambda* (#:key outputs #:allow-other-keys)
@@ -630,7 +613,7 @@ required structures.")
                  ;; scripts.  Remove them to avoid retaining a reference on Perl.
                  (let ((out (assoc-ref outputs "out")))
                    (delete-file-recursively (string-append out "/share/openssl-"
-                                                           ,version "/misc"))
+                                                           #$version "/misc"))
                    #t))))))))))
 
 (define-public libressl
@@ -699,21 +682,21 @@ netcat implementation that supports TLS.")
                (install-file "docs/_build/man/acme-python.1" man)
                #t))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ;; For documentation
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("texinfo" ,texinfo)))
+     (list python-pytest
+           ;; For documentation
+           python-sphinx
+           python-sphinxcontrib-programoutput
+           python-sphinx-rtd-theme
+           texinfo))
     (propagated-inputs
-     `(("python-josepy" ,python-josepy)
-       ("python-requests" ,python-requests)
-       ("python-requests-toolbelt" ,python-requests-toolbelt)
-       ("python-pytz" ,python-pytz)
-       ("python-pyrfc3339" ,python-pyrfc3339)
-       ("python-pyasn1" ,python-pyasn1)
-       ("python-cryptography" ,python-cryptography)
-       ("python-pyopenssl" ,python-pyopenssl)))
+     (list python-josepy
+           python-requests
+           python-requests-toolbelt
+           python-pytz
+           python-pyrfc3339
+           python-pyasn1
+           python-cryptography
+           python-pyopenssl))
     (home-page "https://github.com/certbot/certbot")
     (synopsis "ACME protocol implementation in Python")
     (description "ACME protocol implementation in Python")
@@ -747,28 +730,28 @@ netcat implementation that supports TLS.")
                     (install-file "docs/_build/man/certbot.7" man7)
                     #t))))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ;; For documentation
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
-       ("python-sphinx-repoze-autointerface" ,python-sphinx-repoze-autointerface)
-       ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
-       ("texinfo" ,texinfo)))
+     (list python-mock
+           python-pytest
+           ;; For documentation
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-sphinx-repoze-autointerface
+           python-sphinxcontrib-programoutput
+           texinfo))
     (propagated-inputs
-     `(("python-acme" ,python-acme)
-       ("python-cryptography" ,python-cryptography)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-pyrfc3339" ,python-pyrfc3339)
-       ("python-pyopenssl" ,python-pyopenssl)
-       ("python-configobj" ,python-configobj)
-       ("python-configargparse" ,python-configargparse)
-       ("python-distro" ,python-distro)
-       ("python-zope-component" ,python-zope-component)
-       ("python-parsedatetime" ,python-parsedatetime)
-       ("python-psutil" ,python-psutil)
-       ("python-requests" ,python-requests)
-       ("python-pytz" ,python-pytz)))
+     (list python-acme
+           python-cryptography
+           python-zope-interface
+           python-pyrfc3339
+           python-pyopenssl
+           python-configobj
+           python-configargparse
+           python-distro
+           python-zope-component
+           python-parsedatetime
+           python-psutil
+           python-requests
+           python-pytz))
     (synopsis "Let's Encrypt client by the Electronic Frontier Foundation")
     (description "Certbot automatically receives and installs X.509 certificates
 to enable Transport Layer Security (TLS) on servers.  It interoperates with the
@@ -794,7 +777,7 @@ certificates for free.")
                (base32
                 "1pfgh4h3szcpvqlcimc60pjbk9zwls99x5863sva0wc47i4dl010"))))
     (build-system perl-build-system)
-    (inputs `(("openssl" ,openssl)))
+    (inputs (list openssl))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -829,11 +812,9 @@ servers or clients for more complicated applications.")
           "0djl5i6kibl7862b6ih29q8dhg5zpwzq77q9j8hp6xngshx40ws1"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-crypt-openssl-guess" ,perl-crypt-openssl-guess)))
+   (list perl-crypt-openssl-guess))
   (inputs
-    `(("perl-crypt-openssl-bignum" ,perl-crypt-openssl-bignum)
-      ("perl-crypt-openssl-random" ,perl-crypt-openssl-random)
-      ("openssl" ,openssl)))
+    (list perl-crypt-openssl-bignum perl-crypt-openssl-random openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-RSA")
@@ -868,7 +849,7 @@ OpenSSL libraries).")
         (base32
           "1p22znbajq91lbk2k3yg12ig7hy5b4vy8igxwqkmbm4nhgxp4ki3"))))
   (build-system perl-build-system)
-  (inputs `(("openssl" ,openssl)))
+  (inputs (list openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-Bignum")
@@ -916,9 +897,9 @@ correct OpenSSL include path.  It is intended for use in your
         (base32 "1x6ffps8q7mnawmcfq740llzy7i10g3319vap0wiw4d33fm6z1zh"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-crypt-openssl-guess" ,perl-crypt-openssl-guess)))
+   (list perl-crypt-openssl-guess))
   (inputs
-   `(("openssl" ,openssl)))
+   (list openssl))
   (arguments perl-crypt-arguments)
   (home-page
     "https://metacpan.org/release/Crypt-OpenSSL-Random")
@@ -950,17 +931,15 @@ number generator")
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((pem (string-append (assoc-ref inputs "libressl")
-                                       "/etc/ssl/cert.pem")))
+             (let ((pem (search-input-file inputs "/etc/ssl/cert.pem")))
                (substitute* "http.c"
                  (("/etc/ssl/cert.pem") pem))
                #t)))
          (delete 'configure)))) ; no './configure' script
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libbsd" ,libbsd)
-       ("libressl" ,libressl)))
+     (list libbsd libressl))
     (synopsis "Let's Encrypt client by the OpenBSD project")
     (description "acme-client is a Let's Encrypt client implemented in C.  It
 uses a modular design, and attempts to secure itself by dropping privileges and
@@ -1009,8 +988,7 @@ then ported to the GNU / Linux environment.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python)))
+     (list perl python))
     (synopsis "Small TLS library")
     (description
      "@code{mbed TLS}, formerly known as PolarSSL, makes it trivially easy
@@ -1106,17 +1084,16 @@ coding footprint.")
                               "sed"))))))
            #t))))
     (inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("diffutils" ,diffutils)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("openssl" ,openssl)
-       ("sed" ,sed)))
+     (list bash
+           coreutils
+           curl
+           diffutils
+           gawk
+           grep
+           openssl
+           sed))
     (native-inputs
-     `(("gzip" ,gzip)
-       ("tar" ,tar)))
+     (list gzip tar))
     ;; The following definition is copied from the cURL package to prevent a
     ;; cycle between the curl and tls modules.
     (native-search-paths
@@ -1208,9 +1185,7 @@ compatibility is also supported.")
      '(#:configure-flags
        '("--enable-reproducible-build")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (synopsis "SSL/TLS implementation")
     (description "The wolfSSL embedded SSL library (formerly CyaSSL) is an
 SSL/TLS library written in ANSI C and targeted for embedded, RTOS, and
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 682fa9737a..76f80a4da6 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -55,8 +55,7 @@
                "0pyhmipg6vxvxjk7mr410007qk98rh5q0mljvkdaisibz2j565am"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("ncurses" ,ncurses)))
+     (list libevent ncurses))
     (home-page "https://github.com/tmux/tmux/wiki")
     (synopsis "Terminal multiplexer")
     (description
@@ -162,19 +161,14 @@ windows.")
         (base32 "068vy92f2668vrjvd3laqvxd48cmna66f2msdmwk2hm9qxklgf51"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("procps" ,procps)))             ;tests need top
+     (list procps))             ;tests need top
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("tmux" ,tmux)))
+     (list python-pytest tmux))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              ;; Fix <https://github.com/tmux-python/libtmux/issues/265>.
              (setenv "LANG" "en_US.utf8")
              ;; Skip tests that I suspect fail because of a change
@@ -216,11 +210,9 @@ with live tmux sessions.")
                       (invoke "tmux" "new-session" "-d")
                       (invoke "make" "test"))))))
     (propagated-inputs
-     `(("python-libtmux" ,python-libtmux)))
+     (list python-libtmux))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-sphinx" ,python-sphinx)
-       ("tmux" ,tmux)))
+     (list python-coverage python-sphinx tmux))
     (home-page "https://github.com/edouardklein/daemux")
     (synopsis "Start, stop, restart and check daemons via tmux")
     (description
@@ -244,7 +236,7 @@ them, etc., by attaching to the corresponding pane in tmux.")
                 "09fmnn1q76r1l4cv7clmfr3j9cjmd053kq238d0qj2i486948ivv"))))
     (build-system trivial-build-system)
     (inputs
-     `(("bash" ,bash)))
+     (list bash))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index a881e68241..725373bd98 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -64,7 +64,8 @@
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0sj7qn6d6js6gk4vjfkc7p9g021czbfaq00yfq3mn5ycnhvimkhm"))))
+               "0sj7qn6d6js6gk4vjfkc7p9g021czbfaq00yfq3mn5ycnhvimkhm"))
+             (patches (search-patches "tor-sandbox-i686.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -75,18 +76,28 @@
          (add-before 'check 'skip-practracker
            ;; This is a style linter.  It doesn't get to throw fatal errors.
            (lambda _
-             (setenv "TOR_DISABLE_PRACTRACKER" "set")
-             #t)))))
+             (setenv "TOR_DISABLE_PRACTRACKER" "set")))
+         ,@(if (or (target-aarch64?)
+                   (target-ppc32?))
+             ;; Work around upstream issue relating to sandboxing and glibc-2.33.
+             ;; This is similar to the issue the tor-sandbox-i686 patch fixes
+             ;; but for other architectures.
+             ;; https://gitlab.torproject.org/tpo/core/tor/-/issues/40381
+             ;; https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/446
+             `((add-before 'check 'adjust-test-suite
+                 (lambda _
+                   (substitute* "src/test/test_include.sh"
+                     ((".*Sandbox 1.*") "")))))
+             '()))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))             ; for tests
+     (list pkg-config python))             ; for tests
     (inputs
-     `(("libevent" ,libevent)
-       ("libseccomp" ,libseccomp)
-       ("openssl" ,openssl)
-       ("xz" ,xz)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list libevent
+           libseccomp
+           openssl
+           xz
+           zlib
+           `(,zstd "lib")))
     (home-page "https://www.torproject.org/")
     (synopsis "Anonymous network router to improve privacy on the Internet")
     (description
@@ -143,7 +154,7 @@ This package only provides a client to the Tor Network.")))
                 "08inrkap29gikb6sdmb58z43hw4abwrfw7ny40c4xzdkss0vkwdr"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libcap" ,libcap)))
+     (list libcap))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'build 'absolutize
@@ -204,14 +215,9 @@ rejects UDP traffic from the application you're using.")
                  (("^logdir") "#logdir")
                  (("^logfile") "#logfile"))))))))
     (inputs
-     `(("brotli" ,brotli)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("w3m" ,w3m)
-       ("zlib" ,zlib)))
+     (list brotli openssl pcre w3m zlib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (home-page "https://www.privoxy.org")
     (synopsis "Web proxy with advanced filtering capabilities for enhancing privacy")
     (description
@@ -226,7 +232,7 @@ networks.")
 (define-public onionshare-cli
   (package
     (name "onionshare-cli")
-    (version "2.3.2")
+    (version "2.4")
     (source
       (origin
         (method git-fetch)
@@ -235,26 +241,27 @@ networks.")
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1qk0zvbaws9md1lmi0al1jc8v86l65nf7n3w1s36iwsfzazc6clv"))))
+         (base32 "157ryxm4p1q7b3nj32v9fziw1li6s6s203b7ll80js14cbp6dj9d"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
      ;; TODO: obfs4proxy
-     `(("python-click" ,python-click)
-       ("python-colorama" ,python-colorama)
-       ("python-eventlet" ,python-eventlet)
-       ("python-flask" ,python-flask)
-       ("python-flask-httpauth" ,python-flask-httpauth)
-       ("python-flask-socketio" ,python-flask-socketio)
-       ("python-psutil" ,python-psutil)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-pysocks" ,python-pysocks)
-       ("python-requests" ,python-requests)
-       ("python-stem" ,python-stem)
-       ("python-unidecode" ,python-unidecode)
-       ("python-urllib3" ,python-urllib3)
-       ("tor" ,tor)))
+     (list python-click
+           python-colorama
+           python-eventlet
+           python-flask
+           python-flask-httpauth
+           python-flask-socketio
+           python-pynacl
+           python-psutil
+           python-pycryptodome
+           python-pysocks
+           python-requests
+           python-stem
+           python-unidecode
+           python-urllib3
+           tor))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -264,18 +271,21 @@ networks.")
                                 "desktop/src/onionshare/gui_common.py")
                (("shutil\\.which\\(\\\"tor\\\"\\)")
                 (string-append "\"" (which "tor") "\"")))
-             #t))
+             (substitute* "cli/tests/test_cli_common.py"
+               (("/usr/share/tor")
+                (string-append (assoc-ref inputs "tor") "/share/tor")))))
          (add-before 'build 'change-directory
-           (lambda _ (chdir "cli") #t))
+           (lambda _ (chdir "cli")))
          (replace 'check
-           (lambda _
-             (setenv "HOME" "/tmp")
-             ;; Greendns is not needed for testing, and if eventlet tries to
-             ;; load it, an OSError is thrown when getprotobyname is called.
-             ;; Thankfully there is an environment variable to disable the
-             ;; greendns import, so use it:
-             (setenv "EVENTLET_NO_GREENDNS" "yes")
-             (invoke "pytest" "-v" "./tests"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "HOME" "/tmp")
+               ;; Greendns is not needed for testing, and if eventlet tries to
+               ;; load it, an OSError is thrown when getprotobyname is called.
+               ;; Thankfully there is an environment variable to disable the
+               ;; greendns import, so use it:
+               (setenv "EVENTLET_NO_GREENDNS" "yes")
+               (invoke "pytest" "-v" "./tests")))))))
     (home-page "https://onionshare.org/")
     (synopsis "Securely and anonymously share files")
     (description "OnionShare lets you securely and anonymously share files,
@@ -294,7 +304,7 @@ OnionShare.")
       ((#:phases phases)
        `(modify-phases ,phases
          (replace 'change-directory
-           (lambda _ (chdir "desktop/src") #t))
+           (lambda _ (chdir "desktop/src")))
          (add-after 'unpack 'patch-tests
            (lambda _
              ;; Disable tests that require starting servers, which will hang
@@ -334,22 +344,19 @@ OnionShare.")
                              (display line out)
                              (loop))))))))))
          (replace 'check
-           (lambda _
-             ;; Some tests need a writable homedir:
-             (setenv "HOME" "/tmp")
-             ;; Ensure installed modules can be found:
-             (setenv "PYTHONPATH"
-                     (string-append %output "/lib/python"
-                                    ,(version-major+minor (package-version python))
-                                    "/site-packages:"
-                                    (getenv "PYTHONPATH")))
-             ;; Avoid `getprotobyname` issues:
-             (setenv "EVENTLET_NO_GREENDNS" "yes")
-             ;; Make Qt render "offscreen":
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             ;; Must be run from "desktop" dir:
-             (chdir "..")
-             (invoke "./tests/run.sh")))
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               ;; Some tests need a writable homedir:
+               (setenv "HOME" "/tmp")
+               ;; Ensure installed modules can be found:
+               (add-installed-pythonpath inputs outputs)
+               ;; Avoid `getprotobyname` issues:
+               (setenv "EVENTLET_NO_GREENDNS" "yes")
+               ;; Make Qt render "offscreen":
+               (setenv "QT_QPA_PLATFORM" "offscreen")
+               ;; Must be run from "desktop" dir:
+               (with-directory-excursion ".."
+                 (invoke "./tests/run.sh")))))
          (add-after 'install 'install-data
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -357,21 +364,21 @@ OnionShare.")
                (install-file "org.onionshare.OnionShare.svg"
                              (string-append share "/icons/hicolor/scalable/apps"))
                (install-file "org.onionshare.OnionShare.desktop"
-                             (string-append share "/applications"))
-               #t)))))))
+                             (string-append share "/applications")))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
      ;; TODO: obfs4proxy
-     `(("onionshare-cli" ,onionshare-cli)
-       ("python-shiboken-2" ,python-shiboken-2)
-       ("python-pyside-2" ,python-pyside-2)
-       ("python-qrcode" ,python-qrcode)
-       ;; The desktop client uses onionshare-cli like a python module.  But
-       ;; propagating onionshare-cli's inputs is not great, since a user would
-       ;; not expect to have those installed when using onionshare-cli as a
-       ;; standalone utility.  So add onionshare-cli's inputs here.
-       ,@(package-inputs onionshare-cli)))
+     (modify-inputs (package-inputs onionshare-cli)
+       (prepend onionshare-cli
+                python-shiboken-2
+                python-pyside-2
+                python-qrcode
+                ;; The desktop client uses onionshare-cli like a python module.  But
+                ;; propagating onionshare-cli's inputs is not great, since a user would
+                ;; not expect to have those installed when using onionshare-cli as a
+                ;; standalone utility.  So add onionshare-cli's inputs here.
+                )))
     (description "OnionShare lets you securely and anonymously share files,
 host websites, and chat with friends using the Tor network.")))
 
@@ -388,7 +395,7 @@ host websites, and chat with friends using the Tor network.")))
          "02rrlllz2ci6i6cs3iddyfns7ang9a54jrlygd2jw1f9s6418ll8"))))
     (build-system python-build-system)
     (inputs
-     `(("python-stem" ,python-stem)))
+     (list python-stem))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -446,12 +453,12 @@ Potential client and exit connections are scrubbed of sensitive information.")
     (native-inputs
      `(("glib:bin" ,glib "bin")))       ; for glib-compile-schemas.
     (inputs
-     `(("python-fire" ,python-fire)
-       ("python-psutil" ,python-psutil)
-       ("python-pygobject" ,python-pygobject)
-       ("python-requests" ,python-requests)
-       ("python-stem" ,python-stem)
-       ("python-termcolor" ,python-termcolor)))
+     (list python-fire
+           python-psutil
+           python-pygobject
+           python-requests
+           python-stem
+           python-termcolor))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm
index 52a4d0bb15..80928474aa 100644
--- a/gnu/packages/toys.scm
+++ b/gnu/packages/toys.scm
@@ -61,10 +61,9 @@
            #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)))
+     (list imake))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (arguments
      `(#:tests? #f ; no tests
        #:phases
@@ -113,7 +112,7 @@ mouse pointer around the screen while you work.")
         (base32 "1zrfd71zx2px2xpapg45s8xvi81xii63yl0h60q72j71zh4sif8b"))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -178,10 +177,9 @@ typing @command{sl} instead of @command{ls}.")
              #t)))
        #:tests? #f))                    ; no test suite
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://joeyh.name/code/filters/")
     (synopsis "Various amusing text filters")
     (description
@@ -257,7 +255,7 @@ The GNU project hosts a similar collection of filters, the GNU talkfilters.")
        ("libxt" ,libxt)
        ("libxxml2" ,libxml2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.ratrabbit.nl/ratrabbit/content/xsnow/introduction")
     (synopsis "Let it snow on the desktop")
     (description "@code{Xsnow} animates snowfall and Santa with reindeer on
@@ -329,10 +327,9 @@ of the Nyan Cat / Poptart Cat animation.")
                                         ,(package-version this-package))))
                (install-file "README.md" doc)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (home-page "https://gitlab.com/jallbrit/cbonsai")
     (synopsis "Grow bonsai trees in a terminal")
     (description "Cbonsai is a bonsai tree generator using ASCII art.  It
diff --git a/gnu/packages/tryton.scm b/gnu/packages/tryton.scm
index d5cfb63e1b..6ba7539b4a 100644
--- a/gnu/packages/tryton.scm
+++ b/gnu/packages/tryton.scm
@@ -51,20 +51,19 @@
         (base32 "1jp5cadqpwkcnml8r1hj6aak5kc8an2d5ai62p96x77nn0dp3ny4"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-genshi" ,python-genshi)
-       ("python-lxml" ,python-lxml)
-       ("python-magic" ,python-magic)
-       ("python-passlib" ,python-passlib)
-       ("python-polib" ,python-polib)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-relatorio" ,python-relatorio)
-       ("python-sql" ,python-sql)
-       ("python-werkzeug" ,python-werkzeug)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-dateutil
+           python-genshi
+           python-lxml
+           python-magic
+           python-passlib
+           python-polib
+           python-psycopg2
+           python-relatorio
+           python-sql
+           python-werkzeug-1.0 ;setup.py requires werkzeug<2
+           python-wrapt))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pillow" ,python-pillow)))
+     (list python-mock python-pillow))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -113,12 +112,12 @@ and security.")
      `(("glib-compile-schemas" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)))
     (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf+svg)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk+" ,gtk+)
-       ("python-dateutil" ,python-dateutil)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list librsvg
+           gsettings-desktop-schemas
+           gtk+
+           python-dateutil
+           python-pycairo
+           python-pygobject))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton Client")
     (description
@@ -140,7 +139,7 @@ and security.")
     (arguments
      `(#:tests? #f))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)))
+     (list python-dateutil))
     (home-page "http://www.tryton.org/")
     (synopsis "Library to access a Tryton server as a client")
     (description
@@ -172,7 +171,7 @@ the build system."
 ;;;  Tryton modules - please sort alphabetically
 ;;;
 
-(define %standard-trytond-native-inputs
+(define (%standard-trytond-native-inputs)
   ;; native-inputs required by most of the tryton module for running the test
   `(("python-dateutil" ,python-dateutil)
     ("python-genshi" ,python-genshi)
@@ -183,7 +182,7 @@ the build system."
     ("python-proteus" ,python-proteus)
     ("python-relatorio" ,python-relatorio)
     ("python-sql" ,python-sql)
-    ("python-werkzeug" ,python-werkzeug)
+    ("python-werkzeug" ,python-werkzeug-1.0)
     ("python-wrapt" ,python-wrapt)))
 
 (define-public trytond-account
@@ -198,13 +197,10 @@ the build system."
         (base32 "0j1mn8sd5n8rkwgfvcy9kf8s7s3qxvnilnc72i83ac573zj922xc"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list python-simpleeval trytond trytond-company trytond-currency
+           trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for accounting")
     (description
@@ -228,14 +224,11 @@ most of accounting needs.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_asset"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-account-product trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-account-asset")
     (synopsis "Tryton module for assets management")
     (description "The @emph{Account Asset} Tryton module adds the depreciation
@@ -254,11 +247,9 @@ of fixed assets.")
         (base32 "1l4zxsh9f3ndsgj3224xv23nr7gbg5kwrydwgv34nlkyxp5557dk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_be"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-eu" ,trytond-account-eu)))
+     (list trytond trytond-account trytond-account-eu))
     (home-page "https://docs.tryton.org/projects/modules-account-be")
     (synopsis "Tryton module with Belgian chart of accounts")
     (description "The @emph{Account BE} Tryton module defines the standard
@@ -278,14 +269,12 @@ chart of account for Belgium.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_cash_rounding"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-currency" ,trytond-currency)))
+     (list trytond trytond-account trytond-currency))
     (home-page
      "https://docs.tryton.org/projects/modules-account-cash-rounding")
     (synopsis "Tryton module to round cash amount")
@@ -306,13 +295,10 @@ amounts to be rounded using the cash rounding factor of the currency.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_credit_limit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-dunning" ,trytond-account-dunning)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-credit-limit")
     (synopsis "Tryton module for account credit limit")
     (description "The @emph{Account Credit Limit} Tryton module for manages
@@ -331,10 +317,9 @@ credit limit of parties.")
         (base32 "1dhgspabr2bm0y6qkzh5kz6badhf23arzkw7lra1zsn52r23j9dl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_de_skr03"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)))
+     (list trytond trytond-account))
     (home-page "https://docs.tryton.org/projects/modules-account-de-skr03")
     (synopsis "Tryton module with German chart of accounts SKR03")
     (description "This package provides the German SKR03 chart of accounts for
@@ -353,13 +338,10 @@ Tryton.")
         (base32 "005yw868wxv8fhp7dlqd2z19hhjlmk4cgqa36axdfjmbwxvh1r6r"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_deposit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-deposit")
     (synopsis "Tryton module for accounting deposit")
     (description "The @emph{Account Deposit} Tryton module adds support for
@@ -382,12 +364,9 @@ the party.")
         (base32 "0d5wabn5g1gzmllihkdhzqix934184v303pp20927qxpzb2pm3qw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-dunning")
     (synopsis "Tryton module for account dunning")
     (description "The @emph{Account Dunning} Tryton module adds dunning for
@@ -406,12 +385,10 @@ receivable move lines.")
         (base32 "0sbh2rnziw5fhlbaq4n8q9rwqcgz35rik77dbvhflyyjdxh51vfq"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_email"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-account-dunning-letter" ,trytond-account-dunning-letter)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account-dunning trytond-account-dunning-letter
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-dunning-email")
     (synopsis "Tryton module for account dunning email")
@@ -432,12 +409,10 @@ emails.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_fee"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-dunning-letter" ,trytond-account-dunning-letter)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-account-product" ,trytond-account-product)))
+     (list trytond trytond-account-dunning trytond-account-product))
     (home-page "https://docs.tryton.org/projects/modules-account-dunning-fee")
     (synopsis "Tryton module for account dunning fee")
     (description "This package provides a Tryton module for generating
@@ -456,13 +431,10 @@ accounting moves as fees when processing dunning.")
         (base32 "0xb0mpf7n8jjgm8sb52q5sb2fjs1ap1gc0p33csdgz2lyh66lh3b"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_dunning_letter"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-dunning" ,trytond-account-dunning)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-dunning
+           trytond-company trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-dunning-letter")
     (synopsis "Tryton module for account dunning letter")
@@ -483,15 +455,12 @@ letters.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_es"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-asset" ,trytond-account-asset)
        ("trytond-account-payment-sepa" ,trytond-account-payment-sepa)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-eu" ,trytond-account-eu)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-eu
+           trytond-account-invoice trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-es")
     (synopsis "Tryton with Spanish chart of accounts")
     (description "This package provides the following Spanish charts of
@@ -522,14 +491,14 @@ A wizard allows to generate the following AEAT files:
         (base32 "1x3w7iijkckv20q8lpqb5fnfrvddm130f51mcpnh4hlyx14q1c5i"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_eu"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-eu")
     (synopsis "Tryton module for european accounting")
     (description "This package provides a Tryton module implementing common
@@ -552,11 +521,9 @@ accounting requirements in Europe.  It includes:
         (base32 "1zpzdnd68gsjrz4as019amygdh8yad8wvwrm22dbccwmbbnyvqpg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_fr"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-party-siret" ,trytond-party-siret)))
+     (list trytond trytond-account trytond-party-siret))
     (home-page "https://docs.tryton.org/projects/modules-account-fr")
     (synopsis "Tryton module with French chart of accounts")
     (description "This package provides the French standard chart of account
@@ -576,16 +543,16 @@ for Tryton.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_fr_chorus"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-edocument-uncefact" ,trytond-edocument-uncefact)))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-party-siret" ,trytond-party-siret)))
+     (list python-requests
+           trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-party
+           trytond-party-siret))
     (home-page "https://docs.tryton.org/projects/modules-account-fr-chorus")
     (synopsis "Tryton module to communicate with the French Chorus Pro
 portal")
@@ -609,15 +576,15 @@ using the credential from the accounting configuration.")
         (base32 "0r8zigb4qmv40kf835x8jd7049nnhk5g7g0aibvfd0y9p28lspnz"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-product
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for invoicing")
     (description
@@ -640,10 +607,9 @@ term.")
         (base32 "152jxsl6v2wclk1wjhykbyvianh47cp2yg575hkx18dfynyp7nmw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_correction"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)))
+     (list trytond trytond-account-invoice))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-correction")
     (synopsis "Tryton module to correct invoice")
@@ -665,12 +631,10 @@ original quantity, once with the inverted quantity.")
         (base32 "1ay9cpf6z8j3gamwy52z88qg31s09wkp6k5flv20f9c00hvly452"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_defer"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-company))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-defer")
     (synopsis "Tryton module to defer expense and revenue")
@@ -690,11 +654,9 @@ defer the expense or the revenue of an invoice line over many periods.")
         (base32 "0pq1raj6v76vqsb2mk1bfv1vg1ngfk9iiai30rlzj2zcl53phcvj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account-invoice trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-history")
     (synopsis "Tryton module to historize invoices")
@@ -714,10 +676,9 @@ the historization of the invoice and its related fields.")
         (base32 "1affxhinyzz1lqfq621f76fixnx523fi7qrxwsqa4f1b6g31651a"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_line_standalone"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)))
+     (list trytond trytond-account-invoice))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-line-standalone")
     (synopsis "Tryton module to have standalone invoice lines")
@@ -737,11 +698,9 @@ allows to create invoice line not linked to an invoice.")
         (base32 "0wam7v92ldajpx3529x2cfvczgwv8ayr6hi6bwj8fi736p9x2kbp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_secondary_unit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account-invoice trytond-product))
     (home-page
      "https://docs.tryton.org/projects/modules-account-invoice-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on invoice line")
@@ -761,12 +720,9 @@ a secondary unit of measure on invoice line.")
         (base32 "1228n6vsx0rdjsy3idvpyssa3n21nhvz9gqaacwa46c0hp2251bp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_invoice_stock"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module to link stock and invoice")
     (description
@@ -792,14 +748,11 @@ average price of the posted invoice lines that are linked to it.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-payment")
     (synopsis "Tryton module for payment")
     (description "This package provides a Tryton module for generating grouped
@@ -818,13 +771,10 @@ payments for receivable or payable Account Move Lines.")
         (base32 "0dgw47q4m5l13bhfl1kdpajh0q94pazdrq9sqzf1vg9mggai2gvi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_braintree"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-braintree" ,python-braintree)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-party" ,trytond-party)))
+     (list python-braintree trytond trytond-account
+           trytond-account-payment trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-braintree")
     (synopsis "Tryton module for Braintree payment")
@@ -847,12 +797,11 @@ methods.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_clearing"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-statement" ,trytond-account-statement)
        ("trytond-account-statement-rule" ,trytond-account-statement-rule)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)))
+     (list trytond trytond-account-payment))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-clearing")
     (synopsis "Tryton module for payment clearing")
@@ -874,14 +823,14 @@ journal.")
         (base32 "0clnl2lql5q0gh48lad3vw47xajgd3cdj4kbmvdi72jh775p174w"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_sepa"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-stdnum
+           trytond
+           trytond-account-payment
+           trytond-bank
+           trytond-company
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-payment-sepa")
     (synopsis "Tryton module for SEPA payment")
     (description "The @emph{Account Payment SEPA} Tryton module allows to
@@ -900,14 +849,14 @@ generate SEPA files for a Payment Group.")
         (base32 "0ccn5s360w78wqnq86qfyci8wii4n1n3pd9wvwsnbrpmabj1byv1"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_sepa_cfonb"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-account-payment-sepa" ,trytond-account-payment-sepa)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account-payment
+           trytond-account-payment-sepa
+           trytond-bank
+           trytond-company
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-sepa-cfonb")
     (synopsis "Tryton module for CFONB SEPA payment")
@@ -927,13 +876,10 @@ CFONB flavors to SEPA messages.")
         (base32 "18hr2lrrx9asb0d3cjcpska4bv825yjln9cbqjzg0xbl36z6w3s2"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_payment_stripe"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stripe" ,python-stripe)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-party" ,trytond-party)))
+     (list python-stripe trytond trytond-account trytond-account-payment
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-payment-stripe")
     (synopsis "Tryton module for Stripe payment")
@@ -954,13 +900,10 @@ checkout form to handle Setup Intent and Payment Intent by card.")
         (base32 "1z0dn1p22smzb4a9v451224wrpxcw94inl7jxkarc0q088gasn7d"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_product"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-analytic-account
+           trytond-company trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module to add accounting on product")
     (description
@@ -983,15 +926,15 @@ and category.")
         (base32 "0nlak4kv2ampb5v2zbsvabnirvdi53h6vr35kp2zmrv4alpjsla0"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-bank
+           trytond-company
+           trytond-currency
+           trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-statement")
     (synopsis "Tryton module with account statements")
     (description "The @emph{Account Statement} Tryton module allows to book
@@ -1010,13 +953,10 @@ statements.  Statement can be used for bank statement, cash daybook etc.")
         (base32 "09mkxb9m9167lpca8pb8k4rvnwhsng6b6pmhw9c21w2r4q0hppxv"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_aeb43"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-csb43" ,python-csb43)
-       ("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)))
+     (list python-csb43 python-stdnum trytond trytond-account-statement
+           trytond-bank))
     (home-page
      "https://docs.tryton.org/projects/trytond-account-statement-aeb43")
     (synopsis "Tryton module to import AEB43 statements")
@@ -1037,12 +977,10 @@ defined by the Spanish banking association.")
         (base32 "11gryxh2b2py0h6f89nj2y42cwb8rrxjn0r5jbhrcsfhb2kh1x3w"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_coda"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-febelfin-coda" ,python-febelfin-coda)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)))
+     (list python-febelfin-coda trytond trytond-account-statement
+           trytond-bank))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-coda")
     (synopsis "Tryton module to import CODA statements")
@@ -1063,13 +1001,10 @@ defined by Belgian \"febelfin\".")
         (base32 "1n24lwp1lfw59xdd7mqaz6ncr5b0bldr2qniqdnkvyaav0h8h5px"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_ofx"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-ofxparse" ,python-ofxparse)
-       ("trytond" ,trytond)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-bank" ,trytond-bank)
-       ("trytond-party" ,trytond-party)))
+     (list python-ofxparse trytond trytond-account-statement trytond-bank
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-ofx")
     (synopsis "Tryton module to import OFX statements")
@@ -1089,14 +1024,14 @@ the import of the @emph{OFX} files as statement.")
         (base32 "0kg6lf2wa5scwxggr8p7r7j6jd3a34qv2dcs9w18ra1qvg6p4kmp"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_statement_rule"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-statement" ,trytond-account-statement)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-statement
+           trytond-company
+           trytond-party))
     (home-page
      "https://docs.tryton.org/projects/modules-account-statement-rule")
     (synopsis "Tryton module to automate statement import with rules")
@@ -1122,19 +1057,18 @@ linked to the origin.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_anglo_saxon"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-sale-supply-drop-shipment"
         ,trytond-sale-supply-drop-shipment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-account-stock-continental"
-        ,trytond-account-stock-continental)))
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-account-stock-continental))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-anglo-saxon")
     (synopsis "Tryton module for anglo-saxon real-time stock valuation")
@@ -1155,17 +1089,14 @@ anglo-saxon accounting model for stock valuation.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_continental"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-sale-supply-drop-shipment"
         ,trytond-sale-supply-drop-shipment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account trytond-account-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-continental")
     (synopsis "Tryton module for continental real-time stock valuation")
@@ -1185,13 +1116,10 @@ continental accounting model for stock valuation.")
         (base32 "1p5xgd76585i55zcwvsi2gqhl0br9gbw398ap7m0cvadxfa6nxch"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_landed_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-landed-cost")
     (synopsis "Tryton module for landed cost")
@@ -1211,14 +1139,10 @@ allocate landed cost on Supplier Shipments after their reception.")
         (base32 "10i0ww3k2cgdg227lv6h8ag2j6rm07maylbh3n0grwxfy8dbq34m"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_stock_landed_cost_weight"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-stock-landed-cost" ,trytond-account-stock-landed-cost)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond trytond-account-stock-landed-cost trytond-product
+           trytond-product-measurements trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-account-stock-landed-cost-weight")
     (synopsis "Tryton module for landed cost per weight")
@@ -1239,12 +1163,9 @@ from the Product Measurements")
         (base32 "1di8brrj4jpx99i0553whyh2fddayvwq06dwdshb3iibgv4357cr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "account_tax_cash"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-account-invoice trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-account-tax-cash")
     (synopsis "Tryton module to support tax report on cash basis")
     (description "The @emph{Account Tax Cash} Tryton module allows to make tax
@@ -1264,15 +1185,13 @@ report on cash basis.")
     (build-system python-build-system)
     (arguments (tryton-arguments "account_tax_rule_country"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-purchase" ,trytond-purchase)
        ("trytond-sale" ,trytond-sale)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-country" ,trytond-country)))
+     (list trytond trytond-account trytond-country))
     (home-page
      "https://docs.tryton.org/projects/modules-account-tax-rule-country")
     (synopsis "Tryton module to add countries on tax rules")
@@ -1293,13 +1212,10 @@ criteria.")
         (base32 "09j9xz41n5hk3j7w63xbw1asd3p00prqvl652qcm9x1nrlmqiw3r"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_account"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-account trytond-company trytond-currency
+           trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for analytic accounting")
     (description
@@ -1324,12 +1240,10 @@ required to analyse accounting using multiple different axes.")
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_invoice"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-asset" ,trytond-account-asset)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-analytic-account" ,trytond-analytic-account)))
+     (list trytond trytond-account-invoice trytond-analytic-account))
     (home-page "https://docs.tryton.org/projects/modules-analytic-invoice")
     (synopsis "Tryton module to add analytic accounting on invoice")
     (description "The @emph{Analytic Invoice} Tryton module allows to set
@@ -1348,12 +1262,10 @@ analytic accounts on invoice line.")
         (base32 "1yx3w3p98y11qw99jy02kal9393y6jpxazsfcznsffgigw2vl3y6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_purchase"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-analytic-invoice" ,trytond-analytic-invoice)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-analytic-account trytond-analytic-invoice
+           trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-analytic-purchase")
     (synopsis "Tryton module to add analytic accounting on purchase")
     (description "The @emph{Analytic Purchase} Tryton module allows to set
@@ -1372,12 +1284,10 @@ analytic accounts on purchase line.")
         (base32 "07l97jmg67468pihymfcjagqbbfdcmry3654f24zbmnljxy2qm1x"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "analytic_sale"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-analytic-account" ,trytond-analytic-account)
-       ("trytond-analytic-invoice" ,trytond-analytic-invoice)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-analytic-account trytond-analytic-invoice
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-analytic-sale")
     (synopsis "Tryton module to add analytic accounting on sale")
     (description "The @emph{Analytic Sale} Tryton module allows to set
@@ -1397,11 +1307,10 @@ analytic accounts on sale line.")
     (build-system python-build-system)
     (arguments (tryton-arguments "attendance"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-timesheet" ,trytond-timesheet)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-company))
     (home-page "https://docs.tryton.org/projects/modules-attendance")
     (synopsis "Tryton module for recording employee attendance")
     (description "The @emph{Attendance} Tryton module allows you to track the
@@ -1422,9 +1331,9 @@ detail of the time of entrance and exit")
         (base32 "1g46mimgjkz2lvh90p2ffmkfgwl7w03iqnvqlcghwpxk5vyxw3sj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "authentication_sms"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-authentication-sms")
     (synopsis "Tryton module to authenticate users via SMS")
     (description "The @emph{Authentication SMS} Tryton module allows users to
@@ -1445,12 +1354,9 @@ configuration file.")
         (base32 "0qwgp2s88n4hcqqxg1g34lmmvq5spdlkm978gzn6s96kmmzang0c"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "bank"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list python-stdnum trytond trytond-currency trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-bank")
     (synopsis "Tryton module with banks")
     (description "The @emph{Bank} Tryton module defines the concept of bank
@@ -1469,12 +1375,9 @@ and account.")
         (base32 "0kp08jb5f86bzfyn99qs4k1047svdrkhz3jxv3jw46vrpc2s0c1y"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-country trytond-party trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-carrier")
     (synopsis "Tryton module with carriers")
     (description "The @emph{Carrier} Tryton module defines the concept
@@ -1494,13 +1397,11 @@ of carrier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_percentage"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-shipment-cost" ,trytond-purchase-shipment-cost)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)))
+     (list trytond trytond-carrier trytond-currency))
     (home-page "https://docs.tryton.org/projects/modules-carrier-percentage")
     (synopsis "Tryton module to add cost method based on percentage")
     (description "The @emph{Carrier Percentage} Tryton module adds a cost
@@ -1520,11 +1421,10 @@ method \"on percentage\" on carrier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_subdivision"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)))
+     (list trytond trytond-carrier))
     (home-page "https://docs.tryton.org/projects/modules-carrier-subdivision")
     (synopsis "Tryton module that allows carriers selection to be restricted
 by subdivision")
@@ -1555,16 +1455,16 @@ or a specific postal code.")
     (build-system python-build-system)
     (arguments (tryton-arguments "carrier_weight"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-shipment-cost" ,trytond-purchase-shipment-cost)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)))
+     (list trytond
+           trytond-carrier
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-product-measurements))
     (home-page "https://docs.tryton.org/projects/modules-carrier-weight")
     (synopsis "Tryton module to add cost method based on weight")
     (description "The @emph{Carrier Weight} Tryton module adds a cost method
@@ -1585,16 +1485,16 @@ the weight is greater or equal but smaller than the next line.")
     (build-system python-build-system)
     (arguments (tryton-arguments "commission"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale" ,trytond-sale)))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval
+           trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-product
+           trytond-party
+           trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-commission")
     (synopsis "Tryton module for commission")
     (description "The @emph{Commission} Tryton module allows to manageq
@@ -1614,12 +1514,10 @@ invoice, following the agent's commission plan.")
         (base32 "113wzwjip8virdh9bnh14vl29wb3w7a32skk5yibja819s19ycdn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "commission_waiting"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-commission" ,trytond-commission)))
+     (list trytond trytond-account trytond-account-invoice
+           trytond-commission))
     (home-page "https://docs.tryton.org/projects/modules-commission-waiting")
     (synopsis "Tryton module for commission waiting")
     (description "The @emph{Commission Waiting} Tryton module allows to
@@ -1639,11 +1537,9 @@ to a waiting account defined on the agent.")
         (base32 "1q4qdyg32dn00pn3pj2yjl3jhxaqpv7a1cv5s5c95cpy5p46p02n"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "company"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-currency trytond-party))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with companies and employees")
     (description
@@ -1666,10 +1562,9 @@ company and employee and extend the user model.")
         (base32 "0aasp12l66zcys9w3qc4ysi2krd5c9x3xxaxvr29j7zl7nz05bwx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "company_work_time"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list trytond trytond-company))
     (home-page "https://docs.tryton.org/projects/modules-company-work-time")
     (synopsis "Tryton module to add work time on company")
     (description "The @emph{Company Work Time} Tryton module adds work time
@@ -1694,10 +1589,9 @@ month and a year of work.")
     (build-system python-build-system)
     ;; Doctest contains one test that requires internet access.
     (arguments (tryton-arguments "country" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-pycountry" ,python-pycountry)
-       ("trytond" ,trytond)))
+     (list python-pycountry trytond))
     (home-page "http://www.tryton.org/")
     (synopsis "Tryton module with countries")
     (description
@@ -1721,12 +1615,11 @@ month and a year of work.")
     ;; Doctest 'scenario_currency_rate_update.rst' fails.
     (arguments (tryton-arguments "currency" "--no-doctest"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("python-forex-python" ,python-forex-python)
        ("python-pycountry" ,python-pycountry)))
     (propagated-inputs
-     `(("python-sql" ,python-sql)
-       ("trytond" ,trytond)))
+     (list python-sql trytond))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with currencies")
     (description
@@ -1749,13 +1642,10 @@ currency and rate.")
         (base32 "1qilj1b9zr35z15313xbvgklf87dgxddvkcnymklwp9n7vs7hrz5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "customs"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval trytond trytond-country trytond-currency
+           trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-customs")
     (synopsis "Tryton module for customs")
     (description "The @emph{Customs} Tryton module allows to define customs
@@ -1774,9 +1664,9 @@ duty based on the tariff code.")
         (base32 "1drqiks8r7y58wz0skfa39v9yqx9fi5x0ymrrjd87wybw9q3kv46"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "dashboard"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-dashboard")
     (synopsis "Tryton module for dashboard")
     (description "The @emph{Dashboard} Tryton module allows users to
@@ -1796,12 +1686,11 @@ configure their dashboard.")
     (build-system python-build-system)
     (arguments (tryton-arguments "edocument_uncefact"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("python-lxml" ,python-lxml)
        ("trytond-account-invoice" ,trytond-account-invoice)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-edocument-unece" ,trytond-edocument-unece)))
+     (list trytond trytond-edocument-unece))
     (home-page "https://docs.tryton.org/projects/modules-edocument-uncefact")
     (synopsis "Tryton module for electronic document UN/CEFACT")
     (description "The @emph{Edocument UN/CEFACT} Tryton module implements
@@ -1824,11 +1713,9 @@ electronic document from UN/CEFACT.  Supported formats are:
         (base32 "1ri3gjvk0h0sljbgh7h2j0rbr3953p3k21l8x6rhrnh1q2rqgi70"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "edocument_unece"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-account trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-edocument-unece")
     (synopsis "Tryton module for electronic document UNECE codes")
     (description "The @emph{Edocument UNECE} Tryton module adds several codes
@@ -1855,7 +1742,7 @@ from the UNECE.  Supported formats are:
     (build-system python-build-system)
     (arguments (tryton-arguments "incoterm"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account" ,trytond-account)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
@@ -1869,9 +1756,7 @@ from the UNECE.  Supported formats are:
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-company trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-incoterm")
     (synopsis "Tryton module for incoterms")
     (description "The @emph{Incoterm} Tryton module is used to manage the
@@ -1891,10 +1776,9 @@ versions of 2010 and 2020.")
         (base32 "1iylbpp66qjff1mkp0w3a703pracpcv3bv25i2bafkmcjiv9b4jl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "ldap_authentication"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-ldap3" ,python-ldap3)
-       ("trytond" ,trytond)))
+     (list python-ldap3 trytond))
     (home-page "https://docs.tryton.org/projects/modules-ldap-authentication")
     (synopsis "Tryton module to authenticate users through LDAP")
     (description "The @emph{LDAP Authentication} Tryton module allows to
@@ -1913,9 +1797,9 @@ authenticate users via a LDAP server.")
         (base32 "0mh85sx5xj06zjmf9fhcislkwlp7k54fz14k3ia1xxpw5f953y3c"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-marketing")
     (synopsis "Tryton module to group marketing features")
     (description "The @emph{Marketing} Tryton module defines the
@@ -1935,12 +1819,10 @@ fundamentals for marketing modules.")
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing_automation"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-party" ,trytond-party)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-marketing" ,trytond-marketing)
-       ("trytond-web-shortener" ,trytond-web-shortener)))
+     (list trytond trytond-marketing trytond-web-shortener))
     (home-page "https://docs.tryton.org/projects/modules-marketing-automation")
     (synopsis "Tryton module to plan, coordinate and manage marketing
 campaigns")
@@ -1961,13 +1843,10 @@ that are executed on selected records.")
         (base32 "07zh1pni4kpm6bsgyizz0a5k64nyxc9laxxaih9py7d24p9pgvky"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "marketing_email"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-marketing" ,trytond-marketing)
-       ("trytond-party" ,trytond-party)
-       ("trytond-web-shortener" ,trytond-web-shortener)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list trytond trytond-marketing trytond-party trytond-web-shortener
+           trytond-web-user))
     (home-page "https://docs.tryton.org/projects/modules-marketing-email")
     (synopsis "Tryton module to manage marketing mailing lists")
     (description "This package provides a Tryton module for managing marketing
@@ -1987,13 +1866,13 @@ mailing lists.")
     (build-system python-build-system)
     (arguments (tryton-arguments "notification_email"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-commission" ,trytond-commission)
        ("trytond-company" ,trytond-company)
        ("trytond-party" ,trytond-party)
        ("trytond-web-user" ,trytond-web-user)))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-notification-email")
     (synopsis "Tryton module for sending email notifications")
     (description "The @emph{Notification Email} Tryton module allows to define
@@ -2015,11 +1894,9 @@ to the email.")
     (build-system python-build-system)
     ;; Doctest 'scenario_party_phone_number.rst' fails.
     (arguments (tryton-arguments "party" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-country" ,trytond-country)))
+     (list python-stdnum trytond trytond-country))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for parties and addresses")
     (description
@@ -2043,11 +1920,10 @@ addresses.")
     (build-system python-build-system)
     (arguments (tryton-arguments "party_avatar"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-company" ,trytond-company)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-avatar")
     (synopsis "Tryton module that adds avatars to parties")
     (description "The @emph{Party Avatar} Tryton module adds an avatar to each
@@ -2066,10 +1942,9 @@ party.")
         (base32 "03lkjmhinxm75schfn596vyg8459fx2spdyh372ikra3zdp8pg75"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "party_relationship"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-relationship")
     (synopsis "Party Relationship module for Tryton")
     (description "The @emph{Party Relationship} Tryton module allows to define
@@ -2088,10 +1963,9 @@ different types of relations between parties.")
         (base32 "1xmfjiqn7wzwja34abrxn3bj39z0799pdxd8bcz7l5dxrnqxwc38"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "party_siret"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-party-siret")
     (synopsis "Tryton module to add SIRET/SIREN on parties")
     (description "The @emph{Party SIRET} Tryton module adds the French company
@@ -2110,11 +1984,9 @@ identification numbers SIREN and SIRET on party and address.")
         (base32 "1xvvqxkvzyqy6fn2sj5h3zj0g17igzwx6s18sxkdz72vqz6kpv0l"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)))
+     (list python-stdnum trytond trytond-company))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module with products")
     (description
@@ -2137,10 +2009,9 @@ Template and Product.")
         (base32 "0brvwvm3q2ik4vjb9cwd6jxddrmpp2vcafw8k675gy0xbbp1ddik"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_attribute"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-attribute")
     (synopsis "Tryton module with product attributes")
     (description "The @emph{Product Attribute} Tryton module defines the
@@ -2159,10 +2030,9 @@ models `Attribute` and `Attribute Set` for products.")
         (base32 "1sq42siqq8w6dd8jnqnkzy3npaf9g2nrdzazkl6nw5dysvpsz8cr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_classification"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page
      "https://docs.tryton.org/projects/modules-product-classification")
     (synopsis "Tryton module to implement product classification")
@@ -2183,10 +2053,9 @@ reference field classification to the product template.")
         (base32 "1pkk0z4bl1pz2yxs46b18fj35zwa80dnbickjg1ad66n9yrmifk6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_classification_taxonomic"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-classification" ,trytond-product-classification)))
+     (list trytond trytond-product-classification))
     (home-page
      "https://docs.tryton.org/projects/modules-product-classification-taxonomic")
     (synopsis "Tryton module to implement product classification taxonomic")
@@ -2206,11 +2075,9 @@ adds the taxonomic classification to the products.")
         (base32 "1zksnawvnbf1l2hkyxw4m85ysjy6i8kbx103sz4p9a9bgvjn3ai6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_fifo"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-product-cost-fifo")
     (synopsis "Tryton module to add FIFO cost method")
     (description "The @emph{Product Cost FIFO} Tryton module add a
@@ -2229,11 +2096,9 @@ first-in-first-out option in the `Cost Method` field of the product form.")
         (base32 "01cxx1lmcxwangk3q8lhbkd97w208qxpk96mqxv2hgds77xr42cj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-product-cost-history")
     (synopsis "Tryton module to historize product cost")
     (description "The @emph{Product Cost History} Tryton module adds a `Cost
@@ -2257,15 +2122,12 @@ and assets.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_cost_warehouse"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-stock-continental" ,trytond-account-stock-continental)
        ("trytond-product-cost-fifo" ,trytond-product-cost-fifo)
        ("trytond-product-cost-history" ,trytond-product-cost-history)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-product-cost-warehouse")
     (synopsis "Tryton module to compute product cost per warehouse")
@@ -2286,7 +2148,7 @@ cost price of products to be calculated separately for each warehouse.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_kit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice" ,trytond-account-invoice)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
        ("trytond-company" ,trytond-company)
@@ -2294,8 +2156,7 @@ cost price of products to be calculated separately for each warehouse.")
        ("trytond-sale" ,trytond-sale)
        ("trytond-stock" ,trytond-stock)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-kit")
     (synopsis "Tryton module to manage product kits and components")
     (description "The @emph{Product Kit} Tryton Module adds kits and
@@ -2315,10 +2176,9 @@ purchased using a single line.")
         (base32 "0za3p0wxh2kb6f49455pggnpmy0vfiwj95j5c3l63x8q5yp8vdjl"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_measurements"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)))
+     (list trytond trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-measurements")
     (synopsis "Tryton module to add measurements to product")
     (description "The @emph{Product Measurements} Tryton module adds this
@@ -2337,12 +2197,9 @@ following measurements to Product:")
         (base32 "1csr2g7wx89kykhm76dyrjn0nicvjmc4razqfqpj9rhdpwppdgr6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)))
+     (list python-simpleeval trytond trytond-company trytond-product))
     (home-page "https://docs.tryton.org/projects/modules-product-price-list")
     (synopsis "Tryton module with price list")
     (description "The @emph{Product Price List} Tryton module provides formula
@@ -2362,11 +2219,10 @@ to compute prices per product or category.")
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list_dates"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-price-list" ,trytond-sale-price-list)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-price-list" ,trytond-product-price-list)))
+     (list trytond trytond-product-price-list))
     (home-page
      "https://docs.tryton.org/projects/modules-product-price-list-dates")
     (synopsis "Tryton module to add dates on price list")
@@ -2386,10 +2242,9 @@ date and end date conditions to the price list lines.")
         (base32 "15jdw9qj2fffml9x4vdlzp3iz5gs2l597hpf5y5p887mmx9aa8cn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "product_price_list_parent"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product-price-list" ,trytond-product-price-list)))
+     (list trytond trytond-product-price-list))
     (home-page
      "https://docs.tryton.org/projects/modules-product-price-list-parent")
     (synopsis "Tryton module to use price from another price list")
@@ -2410,12 +2265,9 @@ which contains the unit price computed by the parent price list.")
         (base32 "0ys1wg52bs3i7yjrrkm9ycn07xz7fsb2pqc4a2bj44691pvrclpk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-production")
     (synopsis "Tryton module for production")
     (description "The @emph{Production} Tryton module defines basics
@@ -2434,13 +2286,10 @@ for production management: Bill of material and production order.")
         (base32 "08pp80d4jfw7qmhvds60i63pb2nad489xwkf2ybbzdkrzhcgrrjk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_outsourcing"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-product trytond-production
+           trytond-production-routing trytond-purchase))
     (home-page
      "https://docs.tryton.org/projects/modules-production-outsourcing")
     (synopsis "Tryton module to outsource production")
@@ -2463,11 +2312,10 @@ the production.")
     (build-system python-build-system)
     (arguments (tryton-arguments "production_routing"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply-production" ,trytond-stock-supply-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)))
+     (list trytond trytond-production))
     (home-page "https://docs.tryton.org/projects/modules-production-routing")
     (synopsis "Tryton module for production routing")
     (description "The @emph{Production Routing} Tryton module defines the
@@ -2486,10 +2334,9 @@ routings for production: Routing, Step and Operation.")
         (base32 "0jl2jnm0lwybwjw2w4nb7ih2s3z7lp00l6zm5vsx4phcvfvzcxgi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_split"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)))
+     (list trytond trytond-production))
     (home-page "https://docs.tryton.org/projects/modules-production-split")
     (synopsis "Tryton module to split production")
     (description "The @emph{Production Split} Tryton module adds on the
@@ -2511,14 +2358,14 @@ quantity.")
         (base32 "01a09snawlr224s5aqhrdkal14qry4hlfsglnsk09yzbw6fx196b"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_work"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-production
+           trytond-production-routing
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-production-work")
     (synopsis "Tryton module for production work")
     (description "The @emph{Production Work} Tryton module allows to manage
@@ -2538,12 +2385,10 @@ work cost.")
         (base32 "1r7k25wddd381g0p5pj3m8jqvbg8g6ss0ifnhhjya3b6x0d41jz9"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "production_work_timesheet"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production-routing" ,trytond-production-routing)
-       ("trytond-production-work" ,trytond-production-work)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-production-routing trytond-production-work
+           trytond-timesheet))
     (home-page
      "https://docs.tryton.org/projects/modules-production-work-timesheet")
     (synopsis "Tryton module for timesheet on production work")
@@ -2563,13 +2408,10 @@ enter timesheet for production works.")
         (base32 "1xlqzg07csr9a89jjgmk5n4d9dd2s3qahg2x8arf3vqqnrqw1g0f"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-company-work-time" ,trytond-company-work-time)
-       ("trytond-party" ,trytond-party)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-company-work-time
+           trytond-party trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project")
     (synopsis "Tryton module with projects")
     (description "The @emph{Project} Tryton module provides the concepts of
@@ -2588,16 +2430,16 @@ project and task and the basis for simple project management.")
         (base32 "0wxgpsn5kwfz4f51icmc0p7r615lpr286ifwyz0xnd6rrh0glvmw"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project_invoice"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-product" ,trytond-product)
-       ("trytond-project" ,trytond-project)
-       ("trytond-project-revenue" ,trytond-project-revenue)
-       ("trytond-timesheet" ,trytond-timesheet)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-product
+           trytond-product
+           trytond-project
+           trytond-project-revenue
+           trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project-invoice")
     (synopsis "Tryton module to invoice projects")
     (description "The @emph{Project Invoice} Tryton module adds invoice
@@ -2625,12 +2467,9 @@ methods on projects.  The methods are:
         (base32 "0yanvfmg4nmbc322h6w9m7asv4bm95y2wksi4rrvlbs84njgvhnq"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "project_plan"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-project" ,trytond-project)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-project trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-project-plan")
     (synopsis "Tryton module to add planning capabilities on projects")
     (description "The @emph{Project Plan} Tryton module adds planning features
@@ -2650,15 +2489,15 @@ on top of the Project module.")
     (build-system python-build-system)
     (arguments (tryton-arguments "project_revenue"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-project" ,trytond-project)
-       ("trytond-timesheet" ,trytond-timesheet)
-       ("trytond-timesheet-cost" ,trytond-timesheet-cost)))
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-project
+           trytond-timesheet
+           trytond-timesheet-cost))
     (home-page "https://docs.tryton.org/projects/modules-project-revenue")
     (synopsis "Tryton module to add revenue on project")
     (description "The @emph{Project Revenue} Tryton module computes revenue
@@ -2681,18 +2520,18 @@ the linked time sheets and the linked purchase lines.")
         (base32 "12drjw30ik3alckn6xrny4814vzi3ysh17wgiawiy9319yahsvay"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for purchase")
     (description
@@ -2714,13 +2553,10 @@ the linked time sheets and the linked purchase lines.")
         (base32 "0bgk5ib7y1nzdrfx00g9qr2lxmjkascvh1caps21r12czz0iz5fx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_amendment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-history" ,trytond-purchase-history)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-purchase
+           trytond-purchase-history trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-purchase-amendment")
     (synopsis "Tryton module to amend purchases")
     (description "The @emph{Purchase Amendment} Tryton module allows you to
@@ -2750,10 +2586,9 @@ amendment is composed of action lines which can:
         (base32 "18mb1vqmf9c934jp2qjwj4mi0sx99m8005vxc42mjj1f5qkxxsgg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-purchase-history")
     (synopsis "Tryton module to historize purchases")
     (description "The @emph{Purchase History} Tryton module activates the
@@ -2773,12 +2608,10 @@ time the purchase is reset to draft.")
         (base32 "1qwa8a1vxalvb6r3d1w5wwpa9kx7w8c879x1zb4wwc9nqpdji8v0"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_invoice_line_standalone"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice-line-standalone"
-        ,trytond-account-invoice-line-standalone)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-account-invoice-line-standalone
+           trytond-purchase))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-invoice-line-standalone")
     (synopsis "Tryton module for standalone invoice line from purchase")
@@ -2798,14 +2631,14 @@ makes purchase to generate invoice lines instead of invoices.")
         (base32 "0y54b677dy1jpmclgxvbzs2zsypzkyvmdbx1i58j16hs24l8h0c8"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-purchase" ,trytond-purchase)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-company
+           trytond-party
+           trytond-product-price-list
+           trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-purchase-price-list")
     (synopsis "Tryton module to add price list on purchase")
     (description "The @emph{Purchase Price List} Tryton Module allows price
@@ -2825,11 +2658,9 @@ lists to be defined for suppliers.")
     (build-system python-build-system)
     ;; Doctest 'scenario_purchase_request.rst' fails.
     (arguments (tryton-arguments "purchase_request" "--no-doctest"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-product trytond-purchase))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for purchase requests")
     (description
@@ -2855,15 +2686,15 @@ generated by other process from Tryton.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_request_quotation"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-purchase-requisition" ,trytond-purchase-requisition)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase-request" ,trytond-purchase-request)))
+     (list trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-purchase-request))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-request-quotation")
     (synopsis "Tryton module for purchase request quotation")
@@ -2885,15 +2716,15 @@ supplier.")
         (base32 "0hiz4q4cq7zz6xxl6bkk0vn71hc2wgasnhda5h41cmi69jphhzzk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_requisition"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request))
     (home-page "https://docs.tryton.org/projects/modules-purchase-requisition")
     (synopsis "Tryton module to enter requests for product
 supply (requisition)")
@@ -2917,16 +2748,13 @@ be created.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_secondary_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-secondary-unit"
         ,trytond-account-invoice-secondary-unit)
        ("trytond-stock-secondary-unit" ,trytond-stock-secondary-unit)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product
+           trytond-purchase trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on purchase line")
@@ -2951,17 +2779,14 @@ the product with its factor against the purchase unit.")
     (build-system python-build-system)
     (arguments (tryton-arguments "purchase_shipment_cost"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
        ("trytond-account-stock-anglo-saxon" ,trytond-account-stock-anglo-saxon)
        ("trytond-account-stock-continental" ,trytond-account-stock-continental)
        ("trytond-purchase" ,trytond-purchase)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-carrier trytond-currency trytond-product
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-purchase-shipment-cost")
     (synopsis "Tryton module for purchase shipment costs")
@@ -2981,19 +2806,19 @@ shipment costs to Supplier Shipment.")
         (base32 "0wk5lhj74vl7zs4l3x176iwfqr3jnq37xhiksgnajsrjrl54bgfg"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-account-product" ,trytond-account-product)
-       ("trytond-company" ,trytond-company)
-       ("trytond-country" ,trytond-country)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-account-invoice-stock
+           trytond-account-product
+           trytond-company
+           trytond-country
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale")
     (synopsis "Tryton module for sale")
     (description "The @emph{Sale} Tryton module helps organise and manage
@@ -3016,14 +2841,11 @@ to be generated that contain aggregated sales figures.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_advance_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-supply" ,trytond-sale-supply)))
     (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-sale" ,trytond-sale)))
+     (list python-simpleeval trytond trytond-account
+           trytond-account-invoice trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-advance-payment")
     (synopsis "Tryton module for sale advance payment")
@@ -3043,13 +2865,10 @@ for advance payment management on the sale.")
         (base32 "1vkcyfp30hng2vj1h1pvwrlvp9b59pkzzlmgnj6gvs867l8f2zva"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_amendment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-history" ,trytond-sale-history)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-sale
+           trytond-sale-history trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-amendment")
     (synopsis "Tryton module to amend sales")
     (description "The @emph{Sale Amendment} Tryton module allows you to change
@@ -3069,13 +2888,10 @@ composed of action lines which can:")
         (base32 "0wbs7kawrzz39z0jw34ygdb85qja49xfb75ahbwgqd185wf3jvgz"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_complaint"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-company trytond-party
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-complaint")
     (synopsis "Tryton module for sale complaints")
     (description "The @emph{Sale Complaint} Tryton module defines the
@@ -3094,14 +2910,14 @@ composed of action lines which can:")
         (base32 "1qj4lg5gjsqg27sv6l5afb3rgw46y008ywy6742w9ab6misy57dh"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_credit_limit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-credit-limit" ,trytond-account-credit-limit)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-sale" ,trytond-sale)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account-credit-limit
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-credit-limit")
     (synopsis "Tryton module for sale credit limit")
     (description "The @emph{Sale Credit Limit} Tryton module adds confirmed
@@ -3121,11 +2937,9 @@ credit limit of the party when confirming a sale.")
         (base32 "0ss976dcx6k2z2gdbhcgdp6d561b2vwwgf83xdl2pc28q2d3rmh6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_discount"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-product trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-discount")
     (synopsis "Tryton module that manages discount on sale")
     (description "The @emph{Sale Discount} Tryton module adds discount on sale
@@ -3144,14 +2958,14 @@ line.")
         (base32 "0n6fxv573bszhfw1ik16y9754jfp6r2rrliprm6iv7v5ld3r1yqi"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_extra"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-price-list" ,trytond-sale-price-list)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-product-price-list
+           trytond-sale
+           trytond-sale-price-list))
     (home-page "https://docs.tryton.org/projects/modules-sale-extra")
     (synopsis "Tryton module for sale extra")
     (description "The @emph{Sale Extra} Tryton module allows to add extra line
@@ -3170,15 +2984,15 @@ on sale based on criteria.")
         (base32 "0bbcgm7xs5hmn3axz62jkarhl9v43nk9mk9zldlf9qrfqy89fd80"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_gift_card"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-gift-card")
     (synopsis "Tryton module to manage gift cards")
     (description "The @emph{Sale Gift Card} Tryton module manages the selling
@@ -3197,10 +3011,9 @@ and redeeming of gift cards.")
         (base32 "1pp5lmmpiqakcmwxv392v1miiisbb0yl55gjb618ngx6ayrd0vdv"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_history"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-history")
     (synopsis "Tryton module to historize sales")
     (description "The @emph{Sale History} Tryton module activates the
@@ -3220,12 +3033,9 @@ time the sale is reset to draft.")
         (base32 "1h8lcm8dg3i6644c50d9y1lca9x7k8l6cvwzkabvzixm54mflqsx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_invoice_grouping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-party trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-invoice-grouping")
     (synopsis "Tryton module to group sale invoices")
@@ -3245,17 +3055,17 @@ option to define how invoice lines generated from sales will be grouped.")
         (base32 "0rvj73382h2ha6jqhini0fzpn40w190qij1r7k2fa0c9ls15rrp5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_opportunity"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-opportunity")
     (synopsis "Tryton module with leads and opportunities")
     (description "The @emph{Sale Opportunity} Tryton module defines the
@@ -3275,13 +3085,11 @@ lead/opportunity model.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_payment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-payment-clearing" ,trytond-account-payment-clearing)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-payment" ,trytond-account-payment)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-account-invoice trytond-account-payment
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-payment")
     (synopsis "Tryton module that manage payments on sale")
     (description "The @emph{Sale Payment} Tryton module extends Sale to allow
@@ -3300,13 +3108,10 @@ payments prior to the creation of any invoice.")
         (base32 "0xg0i12a7billpdv13arvc3j5jsbn9gzis8snkl84315ayz3irq4"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_price_list"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-company trytond-party
+           trytond-product-price-list trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-price-list")
     (synopsis "Tryton module to add price list on sale")
     (description "The @emph{Sale Price List} Tryton module adds support for
@@ -3326,12 +3131,10 @@ price list on sale.  A price list can be set per party or as default.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_product_customer"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-amendment" ,trytond-sale-amendment)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+     (list trytond trytond-product trytond-sale))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-product-customer")
     (synopsis "Tryton module to manage customer product on sale")
@@ -3351,15 +3154,15 @@ customer's names and codes for products or variants.")
         (base32 "1bvk14sjlqrlg2wakihrcbz8vl40hr6isbc3ijdsv5g1khl3j74i"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_promotion"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-price-list" ,trytond-product-price-list)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-price-list" ,trytond-sale-price-list)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-simpleeval
+           trytond
+           trytond-company
+           trytond-product
+           trytond-product-price-list
+           trytond-sale
+           trytond-sale-price-list))
     (home-page "https://docs.tryton.org/projects/modules-sale-promotion")
     (synopsis "Tryton module for sale promotion")
     (description "The @emph{Sale Promotion} module allows to apply promotions
@@ -3378,11 +3181,9 @@ on sale based on criteria.")
         (base32 "1hkbsamsf6swx05ij2yh7b3nvmcnlvf9xbz9r7hfs6blx2jkxs3p"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_promotion_coupon"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-promotion" ,trytond-sale-promotion)))
+     (list trytond trytond-sale trytond-sale-promotion))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-promotion-coupon")
     (synopsis "Tryton module for sale promotion coupon")
@@ -3403,17 +3204,14 @@ to the promotions.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_secondary_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-account-invoice-secondary-unit"
         ,trytond-account-invoice-secondary-unit)
        ("trytond-sale-product-customer" ,trytond-sale-product-customer)
        ("trytond-stock-secondary-unit" ,trytond-stock-secondary-unit)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-account-invoice trytond-product trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on sale line")
     (description "The @emph{Sale Secondary Unit} Tryton module adds a
@@ -3435,17 +3233,17 @@ unit is defined on the product with its factor against the sale unit.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_cost"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-sale-promotion" ,trytond-sale-promotion)
        ("trytond-stock-shipment-cost" ,trytond-stock-shipment-cost)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond
+           trytond-account-invoice
+           trytond-carrier
+           trytond-currency
+           trytond-product
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-shipment-cost")
     (synopsis "Tryton module for sale shipment cost")
     (description "The @emph{Sale Shipment Cost} Tryton module adds shipment
@@ -3464,12 +3262,9 @@ cost for sale.")
         (base32 "0n1h50j6c4za7a16pgn916cqjxxrd2qs16hb2h42wsp5p2bkfww2"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_grouping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-party trytond-sale trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-shipment-grouping")
     (synopsis "Tryton module to group sale stock moves")
@@ -3489,11 +3284,9 @@ define how stock moves generated from sales will be grouped.")
         (base32 "0zigl695hyw7zyk86y1ng6mnvd9v8dbk05c5n6q14yvh4gz3ri5l"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_shipment_tolerance"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-sale trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-shipment-tolerance")
     (synopsis "Tryton module to define tolerance for sale shipment")
@@ -3518,13 +3311,10 @@ raised.")
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_stock_quantity"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-sale trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-stock-quantity")
     (synopsis "Tryton module to add stock warning on sale")
     (description "The @emph{Sale Stock Quantity} Tryton module checks the
@@ -3546,15 +3336,15 @@ stock forecasts.")
         (base32 "092ljl0ywybwchp4qfki752nclqc6hkx2h99cd1h3g998jv3l72x"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_subscription"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-account-invoice
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-sale))
     (home-page "https://docs.tryton.org/projects/modules-sale-subscription")
     (synopsis "Tryton module for subscription")
     (description "The @emph{Sale Subscription} module defines subscription,
@@ -3573,11 +3363,9 @@ services and recurrence rule models.")
         (base32 "1j160sqfvzqv0ah85w2bsc4fixrxhzjq0lbin2bgasmdm3yqfqdj"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_subscription_asset"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-sale-subscription" ,trytond-sale-subscription)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-sale-subscription trytond-stock-lot))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-subscription-asset")
     (synopsis "Tryton module to handle asset in the sale subscriptions")
@@ -3597,13 +3385,10 @@ notion of asset to the sale subscription module.")
         (base32 "0lk4pj2fr1q603wnia96i7fzym8pncpvy0hg41q4dkr380nm3qzs"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-purchase trytond-purchase-request trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-sale-supply")
     (synopsis "Tryton module for sale supply")
     (description "The @emph{Sale Supply} Tryton module adds a \"supply on sale
@@ -3626,16 +3411,16 @@ supply method.")
         (base32 "0gm2m5zm7vrm1vb34svqby7h91ka3mhln3367zmwr17yfyqf68dk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply_drop_shipment"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-sale-supply" ,trytond-sale-supply)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-company
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request
+           trytond-sale
+           trytond-sale-supply
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-supply-drop-shipment")
     (synopsis "Tryton module for sale supply drop shipment")
@@ -3658,11 +3443,9 @@ shipment is created and linked to both the purchase and the sale.")
         (base32 "03v702r4sfmql5yv6414gi2y72psvr3zq3xmx049w5nsywc2585v"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "sale_supply_production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-production" ,trytond-production)
-       ("trytond-sale-supply" ,trytond-sale-supply)))
+     (list trytond trytond-production trytond-sale-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-sale-supply-production")
     (synopsis "Tryton module to supply sales from production")
@@ -3686,14 +3469,14 @@ back to the default supply method.")
         (base32 "1v6pvkwj6vhjqbz2zn0609kb7kx4g0dsn1xhvax4z2dqigh7ywpx"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-simpleeval" ,python-simpleeval)
-       ("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-simpleeval
+           trytond
+           trytond-company
+           trytond-currency
+           trytond-party
+           trytond-product))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for stock and inventory")
     (description
@@ -3719,11 +3502,10 @@ inventory to control and update stock levels.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_assign_manual"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-assign-manual")
     (synopsis "Tryton module to assign manually stock move")
     (description "The @emph{Stock Assign Manual} Tryton module adds a wizard
@@ -3744,18 +3526,17 @@ location to pick products.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_consignment"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-invoice" ,trytond-account-invoice)
-       ("trytond-account-invoice-line-standalone"
-        ,trytond-account-invoice-line-standalone)
-       ("trytond-account-invoice-stock" ,trytond-account-invoice-stock)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond
+           trytond-account-invoice
+           trytond-account-invoice-line-standalone
+           trytond-account-invoice-stock
+           trytond-product
+           trytond-purchase
+           trytond-sale
+           trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-consignment")
     (synopsis "Tryton module to manage consignment stock")
     (description "The @emph{Stock Consignment} Tryton module allow to manage
@@ -3774,12 +3555,9 @@ consignment stock from supplier or at customer warehouse.")
         (base32 "1l3ks2jbz95qqbv9jsvakrxgazyq1kkk3fspwvrg1d10rv6xmb58"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_forecast"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-forecast")
     (synopsis "Tryton module with stock forecasts")
     (description "The @emph{Stock Forecast} Tryton module provide a simple way
@@ -3799,12 +3577,9 @@ other stock mechanisms to anticipate customer demand.")
         (base32 "0mvgday5qhmx89xikklr2ad2xa7zxkiysxa2bqsf76imvx4801q6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_inventory_location"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-inventory-location")
     (synopsis "Tryton module to create inventories by locations")
@@ -3825,11 +3600,10 @@ wizard \"Create Inventories\" under the \"Inventories\" sub-menu.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_location_move"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-supply" ,trytond-stock-supply)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-location-move")
     (synopsis "Tryton module to move storage locations")
     (description "The @emph{Stock Location} move Tryton module allows to
@@ -3849,10 +3623,9 @@ define some Locations as movable
         (base32 "0lpvgk5s7v30c0hicqc2m6apv8gzd1d6229yv1lrp2g62yp9pa9f"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_location_sequence"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-location-sequence")
     (synopsis "Tryton module to add sequence on location")
@@ -3872,11 +3645,9 @@ ordering to location.")
         (base32 "18cwrvnrzjk1wb765gr6hp3plpdpwz1a7cwimjhxi47iw7w5c84g"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for lot of products")
     (description
@@ -3898,12 +3669,9 @@ ordering to location.")
         (base32 "1x8sjhgbakqbgfhrrl7b1b0961riqibs6q6lmgmyrvjyrxx0hpig"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot_sled"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-product trytond-stock trytond-stock-lot))
     (home-page "https://docs.tryton.org/projects/modules-stock-lot-sled")
     (synopsis "Tryton module for shelf life expiration date of product lots")
     (description "The @emph{Stock Lot Sled} Tryton module adds the \"Shelf
@@ -3925,13 +3693,10 @@ it is no more used to compute the forecast quantity of the stock.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_lot_unit"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-lot" ,trytond-stock-lot)))
+     (list trytond trytond-product trytond-stock trytond-stock-lot))
     (home-page "https://docs.tryton.org/projects/modules-stock-lot-unit")
     (synopsis "Tryton module to define unit on stock lot")
     (description "The @emph{Stock Lot Unit} Tryton module allows to define a
@@ -3950,12 +3715,9 @@ unit and quantity on stock lot.")
         (base32 "1jbpl141wyc19v27bcyqsph8p2zf9yqprm55yl642mvwq55bshq8"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-package")
     (synopsis "Tryton module for stock packaging")
     (description "The @emph{Stock Package} Tryton module allows to store
@@ -3974,17 +3736,16 @@ packaging information about customer and supplier return shipments.")
         (base32 "09j7v64wmpiw1bh9byjq4shsd5474rq0mfx7wwak8hn0v5ni7imn"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package_shipping"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-carrier" ,trytond-carrier)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-package" ,trytond-stock-package)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-carrier
+           trytond-product
+           trytond-product-measurements
+           trytond-sale-shipment-cost
+           trytond-stock
+           trytond-stock-package
+           trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-package-shipping")
     (synopsis "Tryton base module for interacting with shipping services")
@@ -4004,17 +3765,16 @@ interact with shipping service providers.")
         (base32 "1dw6amd1kvpsldk14m656c0hpazf1ljzz2zri00nqq11d9x8xab5"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_package_shipping_ups"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-package" ,trytond-stock-package)
-       ("trytond-stock-package-shipping" ,trytond-stock-package-shipping)
-       ("trytond-stock-shipment-measurements"
-        ,trytond-stock-shipment-measurements)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list python-requests
+           trytond
+           trytond-party
+           trytond-product
+           trytond-stock
+           trytond-stock-package
+           trytond-stock-package-shipping
+           trytond-stock-shipment-measurements))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-package-shipping-ups")
     (synopsis "UPS connector for the Tryton application plateform")
@@ -4035,12 +3795,10 @@ you to generate the UPS labels per package using the UPS webservices.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_product_location"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-product-location")
     (synopsis "Tryton module to add default location on product")
@@ -4064,12 +3822,10 @@ warehouse.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_quantity_early_planning"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-quantity-early-planning")
     (synopsis "Tryton module to plan earlier shipments and productions")
@@ -4090,13 +3846,10 @@ reducing stock level by proposing to consume earlier.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_quantity_issue"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-production" ,trytond-production)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-company trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-quantity-issue")
     (synopsis "Tryton module to manage quantity issue with stock")
     (description "The @emph{Stock Quantity Issue} Tryton module helps to solve
@@ -4115,11 +3868,9 @@ stock quantity issues.")
         (base32 "0s4nryiirdbndm2sz5aqpk2mzw9zxah92gmh6433sj5zyc6a22if"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_secondary_unit"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-secondary-unit")
     (synopsis "Tryton module to add a secondary unit on stock move")
     (description "The @emph{Stock Secondary Unit} Tryton module adds a
@@ -4138,11 +3889,9 @@ secondary unit of measure on the stock move.")
         (base32 "13c940pz5ivqj9qk6b5nbid2xfkjnnijjmbz1bn7ic7ydfpiqy8j"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_shipment_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-shipment-cost")
     (synopsis "Tryton module for stock shipment cost")
     (description "The @emph{Stock Shipment Cost} Tryton Module adds a shipment
@@ -4163,13 +3912,11 @@ price.  This cost is added to the product margin reports.")
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_shipment_measurements"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-stock-package" ,trytond-stock-package)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-product-measurements" ,trytond-product-measurements)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-product trytond-product-measurements
+           trytond-stock))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-shipment-measurements")
     (synopsis "Tryton module to add measurements to shipment")
@@ -4190,10 +3937,9 @@ measurement and the quantity of their moves.")
         (base32 "0ynvmmdxgzgg6mn8ckhl7jr9ircq4bpwsl0xpzk83r6mhlvlrxpm"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_split"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock" ,trytond-stock)))
+     (list trytond trytond-stock))
     (home-page "https://docs.tryton.org/projects/modules-stock-split")
     (synopsis "Tryton module to split stock move")
     (description "The @emph{Stock Split} Tryton module adds on the stock move
@@ -4214,15 +3960,15 @@ there can be a move with the remaining quantity.")
         (base32 "1p5l3yjjy6l25kk9xnhbl691l3v8gfg9fhc87jc6qszhxlqxk730"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
-    (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-purchase" ,trytond-purchase)
-       ("trytond-purchase-request" ,trytond-purchase-request)
-       ("trytond-stock" ,trytond-stock)))
+    (native-inputs (%standard-trytond-native-inputs))
+    (propagated-inputs
+     (list trytond
+           trytond-account
+           trytond-party
+           trytond-product
+           trytond-purchase
+           trytond-purchase-request
+           trytond-stock))
     (home-page "https://www.tryton.org/")
     (synopsis "Tryton module for stock supply")
     (description
@@ -4245,10 +3991,9 @@ mechanisms and introduces the concepts of order point.")
         (base32 "1b6q2zk0qnsxdhlqgsnb49prgn6sgqlpr84vy31a2p83mwiz0fqr"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_day"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-purchase" ,trytond-purchase)))
+     (list trytond trytond-purchase))
     (home-page "https://docs.tryton.org/projects/modules-stock-supply-day")
     (synopsis "Tryton module to add supply weekdays")
     (description "The @emph{Stock Supply Day} Tryton module adds a Week Days
@@ -4269,11 +4014,9 @@ a supplying may happens at any day of the week.")
         (base32 "0i5dc9ddd6mfx3zjlcq16isw52b8qy7igaj2lv8jqvkdrc19yfha"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_forecast"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-stock-forecast" ,trytond-stock-forecast)
-       ("trytond-stock-supply" ,trytond-stock-supply)))
+     (list trytond trytond-stock-forecast trytond-stock-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-supply-forecast")
     (synopsis "Tryton module to add forecast to supply computation")
@@ -4293,13 +4036,10 @@ forecast into account to compute purchase requests.")
         (base32 "1qyvj61hwn3xgjqagnr7d28qkiniw5fp0b5vmn9wii9grf7p4m8d"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "stock_supply_production"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-product" ,trytond-product)
-       ("trytond-production" ,trytond-production)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-stock-supply" ,trytond-stock-supply)))
+     (list trytond trytond-product trytond-production trytond-stock
+           trytond-stock-supply))
     (home-page
      "https://docs.tryton.org/projects/modules-stock-supply-production")
     (synopsis "Tryton module for stock supply of production")
@@ -4319,11 +4059,9 @@ supply mechanisms via production request.")
         (base32 "0airh5jvcdjbkb71p684dr5qgsnpam2hhmq6gswclgnx3nd1lz6a"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "timesheet"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-company-work-time" ,trytond-company-work-time)))
+     (list trytond trytond-company trytond-company-work-time))
     (home-page "https://docs.tryton.org/projects/modules-timesheet")
     (synopsis "Tryton module with timesheets")
     (description "The @emph{Timesheet} Tryton module allows to track the time
@@ -4344,12 +4082,9 @@ periods.")
         (base32 "0pjsdgad2plbx8k6mh6mpa6qbz6lp30nnpv7ydyz0gsgb6jz7li6"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "timesheet_cost"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-company" ,trytond-company)
-       ("trytond-party" ,trytond-party)
-       ("trytond-timesheet" ,trytond-timesheet)))
+     (list trytond trytond-company trytond-party trytond-timesheet))
     (home-page "https://docs.tryton.org/projects/modules-timesheet-cost")
     (synopsis "Tryton module to add cost on timesheet")
     (description "The @emph{Timesheet Cost} Tryton module adds cost price per
@@ -4368,9 +4103,9 @@ employee.")
         (base32 "11sjz46kagrpig5n05pp52yph4z0l1zm140q9wsagjcmzkx7s6gf"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "user_role"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-user-role")
     (synopsis "Tryton module to manage roles on users")
     (description "This package provides a Tryton module for assigning roles to
@@ -4392,17 +4127,17 @@ user for a period of time only.")
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-product-attribute" ,trytond-product-attribute)))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account" ,trytond-account)
-       ("trytond-company" ,trytond-company)
-       ("trytond-currency" ,trytond-currency)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-stock" ,trytond-stock)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list trytond
+           trytond-account
+           trytond-company
+           trytond-currency
+           trytond-product
+           trytond-sale
+           trytond-stock
+           trytond-web-user))
     (home-page "https://docs.tryton.org/projects/modules-web-shop")
     (synopsis "Tryton module that provides a common base for webshops")
     (description "The @emph{Web Shop} Tryton module facilitates storing
@@ -4422,20 +4157,20 @@ configuration of an online web shop.")
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop_vue_storefront"))
     (native-inputs
-     `(,@%standard-trytond-native-inputs
+     `(,@(%standard-trytond-native-inputs)
        ("trytond-carrier" ,trytond-carrier)
        ("trytond-product-attribute" ,trytond-product-attribute)
        ("trytond-sale-promotion-coupon" ,trytond-sale-promotion-coupon)
        ("trytond-sale-shipment-cost" ,trytond-sale-shipment-cost)))
     (propagated-inputs
-     `(("python-elasticsearch" ,python-elasticsearch)
-       ("python-stdnum" ,python-stdnum)
-       ("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)
-       ("trytond-product" ,trytond-product)
-       ("trytond-sale" ,trytond-sale)
-       ("trytond-web-shop" ,trytond-web-shop)
-       ("trytond-web-user" ,trytond-web-user)))
+     (list python-elasticsearch
+           python-stdnum
+           trytond
+           trytond-party
+           trytond-product
+           trytond-sale
+           trytond-web-shop
+           trytond-web-user))
     (home-page
      "https://docs.tryton.org/projects/modules-web-shop-vue-storefront")
     (synopsis "Tryton module to integrate with Vue Storefront")
@@ -4455,13 +4190,10 @@ Vue Storefront 1.x.")
         (base32 "0j4yv9q0f39bkyqlcn7kpnlqi9wc4qfjs8zic69za6xw2c86zgzm"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shop_vue_storefront_stripe"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-account-payment-stripe" ,trytond-account-payment-stripe)
-       ("trytond-sale-payment" ,trytond-sale-payment)
-       ("trytond-web-shop" ,trytond-web-shop)
-       ("trytond-web-shop-vue-storefront" ,trytond-web-shop-vue-storefront)))
+     (list trytond trytond-account-payment-stripe trytond-sale-payment
+           trytond-web-shop trytond-web-shop-vue-storefront))
     (home-page
      "https://docs.tryton.org/projects/modules-web-shop-vue-storefront-stripe")
     (synopsis "Tryton module to support Stripe payment with Vue Storefront")
@@ -4481,9 +4213,9 @@ provides support of Stripe payment for Vue Storefront integration.")
         (base32 "0vxwnsy7xzxawn7fmm6ykdrhih6ahrwwx6fzd6kz7qbwh4nmqcpk"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_shortener"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)))
+     (list trytond))
     (home-page "https://docs.tryton.org/projects/modules-web-shortener")
     (synopsis "Tryton module to plug a URL to an action")
     (description "The @emph{Web Shortener} Tryton module allows URLs to be
@@ -4503,10 +4235,9 @@ optionally triggers action.")
         (base32 "1k07d1kcfm2hwwqcyy8k5mjbhhgrnji0hadn487zsx1zp50r6rds"))))
     (build-system python-build-system)
     (arguments (tryton-arguments "web_user"))
-    (native-inputs `(,@%standard-trytond-native-inputs))
+    (native-inputs (%standard-trytond-native-inputs))
     (propagated-inputs
-     `(("trytond" ,trytond)
-       ("trytond-party" ,trytond-party)))
+     (list trytond trytond-party))
     (home-page "https://docs.tryton.org/projects/modules-web-user")
     (synopsis "Tryton module to manage Web users")
     (description "The @emph{Web User} Tryton module provides facilities to
diff --git a/gnu/packages/tv.scm b/gnu/packages/tv.scm
index 88df5c90bf..3927aca776 100644
--- a/gnu/packages/tv.scm
+++ b/gnu/packages/tv.scm
@@ -54,20 +54,20 @@
                 "<sys/stat.h>\n#include <sys/sysmacros.h>"))
              #t)))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxt" ,libxt)
-       ("libxtst" ,libxtst)
-       ("libxinerama" ,libxinerama)
-       ("libxv" ,libxv)
-       ("libxxf86vm" ,libxxf86vm)
-       ("libpng" ,libpng)
-       ("libxml2" ,libxml2)
-       ("freetype" ,freetype)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           libx11
+           libxext
+           libxt
+           libxtst
+           libxinerama
+           libxv
+           libxxf86vm
+           libpng
+           libxml2
+           freetype
+           zlib))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://tvtime.sourceforge.net")
     (synopsis "Television viewer")
     (description
diff --git a/gnu/packages/uglifyjs.scm b/gnu/packages/uglifyjs.scm
index 275553bb60..b65d52b8df 100644
--- a/gnu/packages/uglifyjs.scm
+++ b/gnu/packages/uglifyjs.scm
@@ -37,8 +37,7 @@
         (base32 "0q1f91xwwm829cl5v727d4qkxy4yh7wri3pgl89f0m3a4y1n7hi4"))))
     (build-system node-build-system)
     (native-inputs
-     `(("node-acorn" ,node-acorn)
-       ("node-semver" ,node-semver)))
+     (list node-acorn node-semver))
     (home-page "https://lisperator.net/uglifyjs/")
     (synopsis "JavaScript parser / mangler / compressor / beautifier toolkit")
     (description "UglifyJS is a JavaScript compressor/minifier written in
diff --git a/gnu/packages/uml.scm b/gnu/packages/uml.scm
index ad766beece..83f10a08a1 100644
--- a/gnu/packages/uml.scm
+++ b/gnu/packages/uml.scm
@@ -54,8 +54,7 @@
              #t))
          (add-after 'delete-extra-from-classpath 'patch-usr-bin-dot
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((dot (string-append (assoc-ref inputs "graphviz")
-                                       "/bin/dot")))
+             (let ((dot (search-input-file inputs "/bin/dot")))
                (substitute*
                    "src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizLinux.java"
                  (("/usr/bin/dot") dot)))
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index ffdebdf1de..22d3f88cd0 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -63,7 +63,7 @@
      ;; the configure phase.
      `(#:make-flags
        (list
-        (string-append "SH=" (assoc-ref %build-inputs "bash") "/bin/sh")
+        (string-append "SH=" (search-input-file %build-inputs "/bin/sh"))
         (string-append "INSTALLPREFIX=" (assoc-ref %outputs "out"))
         ,(string-append "CC=" (cc-for-target))
 
@@ -105,7 +105,7 @@ over IRC, instant messaging, network games, and most server software.")
       (sha256
        (base32 "1b5mnn01cx840paggxrajg63gqzmw8mi4p14jhi9r4qyvam80709"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system gnu-build-system)
     (arguments
      ;; The tests require a network device capable of multicasting which is
diff --git a/gnu/packages/usb-modeswitch.scm b/gnu/packages/usb-modeswitch.scm
index 2ca4da5e3c..2092e4cdaf 100644
--- a/gnu/packages/usb-modeswitch.scm
+++ b/gnu/packages/usb-modeswitch.scm
@@ -44,8 +44,7 @@
                (base32
                 "1ygahl3r26r38ai8yyblq9nhf3v5i6n6r6672p5wf88wg5h9n0rz"))))
     (build-system trivial-build-system)
-    (native-inputs `(("tar" ,tar)
-                     ("bzip2" ,bzip2)))
+    (native-inputs (list tar bzip2))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -87,10 +86,8 @@ file for use with USB_ModeSwitch.")
               (sha256
                (base32
                 "0d7s8p92r36danjd15y1zaznf6rbk17kxyg9367nabz56vhxk5ai"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libusb" ,libusb)
-              ("jimtcl" ,jimtcl)
-              ("usb-modeswitch-data" ,usb-modeswitch-data)))
+    (native-inputs (list pkg-config))
+    (inputs (list libusb jimtcl usb-modeswitch-data))
     (outputs '("out" "dispatcher"))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/uucp.scm b/gnu/packages/uucp.scm
index 120417dea1..e10de59aa2 100644
--- a/gnu/packages/uucp.scm
+++ b/gnu/packages/uucp.scm
@@ -142,19 +142,18 @@ between computers.")
          (add-after 'install 'remove-go-references
            (assoc-ref go:%standard-phases 'remove-go-references)))))
     (inputs
-     `(("go-github-com-davecgh-go-xdr" ,go-github-com-davecgh-go-xdr)
-       ("go-github-com-dustin-go-humanize" ,go-github-com-dustin-go-humanize)
-       ("go-github-com-flynn-noise" ,go-github-com-flynn-noise)
-       ("go-github-com-gorhill-cronexpr" ,go-github-com-gorhill-cronexpr)
-       ("go-github-com-hjson-hjson-go" ,go-github-com-hjson-hjson-go)
-       ("go-github-com-klauspost-compress" ,go-github-com-klauspost-compress)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-term" ,go-golang-org-x-term)
-       ("go-lukechampine-com-blake3" ,go-lukechampine-com-blake3)))
+     (list go-github-com-davecgh-go-xdr
+           go-github-com-dustin-go-humanize
+           go-github-com-flynn-noise
+           go-github-com-gorhill-cronexpr
+           go-github-com-hjson-hjson-go
+           go-github-com-klauspost-compress
+           go-golang-org-x-crypto
+           go-golang-org-x-net
+           go-golang-org-x-term
+           go-lukechampine-com-blake3))
     (native-inputs
-     `(("go" ,go)
-       ("texinfo" ,texinfo)))
+     (list go texinfo))
     (home-page "http://www.nncpgo.org/")
     (synopsis "Store and forward utilities")
     (description "NNCP (Node to Node copy) is a collection of utilities
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 4036bd461b..e044541282 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -35,7 +35,7 @@
     (name "valgrind")
     ;; Note: check "guix refresh -l -e '(@ (gnu packages valgrind) valgrind)'"
     ;; when updating this package to find which branch it should go to.
-    (version "3.16.1")
+    (version "3.17.0")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -44,7 +44,7 @@
                                         "/valgrind-" version ".tar.bz2")))
               (sha256
                (base32
-                "1jik19rcd34ip8a5c9nv5wfj8k8maqb8cyclr4xhznq2gcpkl7y9"))
+                "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
               (patches (search-patches "valgrind-enable-arm.patch"))))
     (build-system gnu-build-system)
     (outputs '("doc"                              ;16 MB
@@ -74,7 +74,7 @@
                (rename-file orig dest)
                #t))))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://www.valgrind.org/")
     (synopsis "Debugging and profiling tool suite")
     (description
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 162b0ad832..0b5f0eade1 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
@@ -40,6 +40,7 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 François J. <francois-oss@avalenn.eu>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;;
@@ -651,11 +652,23 @@ everything from small to very large projects with speed and efficiency.")
        ("native-perl" ,perl)
        ("gettext" ,gettext-minimal)))
     (inputs
-     `(("curl" ,curl)                             ;for HTTP(S) access
-       ("expat" ,expat)                           ;for 'git push' over HTTP(S)
-       ("openssl" ,openssl)
-       ("perl" ,perl)
-       ("zlib" ,zlib)))))
+     (list curl ;for HTTP(S) access
+           expat ;for 'git push' over HTTP(S)
+           openssl
+           perl
+           zlib))))
+
+(define-public git-minimal/fixed
+  ;; Version that rarely changes, depended on by Graphene/GTK+.
+  (package/inherit git-minimal
+    (version "2.33.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://kernel.org/software/scm/git/git-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0bqz401dyp8wnjj3k5ahrniwk4dalndysqazzwdvv25hqbkacm70"))))))
 
 (define-public git2cl
   (let ((commit "1d74d4c0d933fc69ed5cec838c73502584dead05"))
@@ -673,7 +686,7 @@ everything from small to very large projects with speed and efficiency.")
                   "0wnnbm2sjvfj0qrksj89jlnl69miwl0vk3wrrvgvpclgys3na2g1"))))
       (build-system copy-build-system)
       (inputs
-       `(("perl" ,perl)))
+       (list perl))
       (arguments
        `(#:install-plan '(("git2cl" "bin/git2cl"))))
       (home-page "https://savannah.nongnu.org/projects/git2cl")
@@ -722,12 +735,12 @@ logs to GNU ChangeLog format.")
                    (git (assoc-ref inputs "git")))
                (wrap-program (string-append out "/bin/gl")
                  `("PATH" ":" prefix (,(string-append git "/bin")))
-                 `("PYTHONPATH" ":" =
+                 `("GUIX_PYTHONPATH" ":" =
                    (,(string-append out "/lib/python"
                                     ,(version-major+minor
                                       (package-version python))
                                     "/site-packages:")
-                    ,(getenv "PYTHONPATH"))))
+                    ,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (native-inputs
      `(("git-for-tests" ,git-minimal)))
@@ -774,19 +787,20 @@ to GitHub contributions calendar.")
 (define-public libgit2
   (package
     (name "libgit2")
-    (version "1.1.0")
+    (version "1.3.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/libgit2/libgit2/"
-                                  "releases/download/v" version
-                                  "/libgit2-" version ".tar.gz"))
+              ;; Since v1.1.1, release artifacts are no longer offered (see:
+              ;; https://github.com/libgit2/libgit2/discussions/5932#discussioncomment-1682729).
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libgit2/libgit2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fjdglkh04qv3b4alg621pxa689i0wlf8m7nf2755zawjr2zhwxd"))
-              (patches (search-patches "libgit2-mtime-0.patch"))
-              (snippet '(begin
-                          (delete-file-recursively "deps") #t))
-              (modules '((guix build utils)))))
+                "0vgpb2175a5dhqiy1iwywwppahgqhi340i8bsvafjpvkw284vazd"))
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "deps"))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -808,8 +822,7 @@ to GitHub contributions calendar.")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              (substitute* "tests/clar/fs.h"
                (("/bin/cp") (which "cp"))
-               (("/bin/rm") (which "rm")))
-             #t))
+               (("/bin/rm") (which "rm")))))
          ;; Run checks more verbosely, unless we are cross-compiling.
          (replace 'check
            (lambda* (#:key (tests? #t) #:allow-other-keys)
@@ -818,16 +831,12 @@ to GitHub contributions calendar.")
                  ;; Tests may be disabled if cross-compiling.
                  (format #t "Test suite not run.~%")))))))
     (inputs
-     `(("libssh2" ,libssh2)
-       ("http-parser" ,http-parser)))
+     (list libssh2 http-parser))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (propagated-inputs
      ;; These libraries are in 'Requires.private' in libgit2.pc.
-     `(("openssl" ,openssl)
-       ("pcre2" ,pcre2)
-       ("zlib" ,zlib)))
+     (list openssl pcre2 zlib))
     (home-page "https://libgit2.org/")
     (synopsis "Library providing Git core methods")
     (description
@@ -837,23 +846,23 @@ write native speed custom Git applications in any language with bindings.")
     ;; GPLv2 with linking exception
     (license license:gpl2)))
 
-(define-public libgit2-0.28
+(define-public libgit2-1.1
   (package
     (inherit libgit2)
-    (version "0.28.5")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://github.com/libgit2/libgit2/releases/"
-                            "download/v" version
-                            "/libgit2-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0hjgpqjjmkciw1i8jqkx9q2vhdc4fc99qajhrj2bq8ziwsp6hyrb"))
-        (patches (search-patches "libgit2-mtime-0.patch"))
-        (modules '((guix build utils)))
-        (snippet '(begin
-                    (delete-file-recursively "deps") #t))))))
+    (name "libgit2")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/libgit2/libgit2/"
+                                  "releases/download/v" version
+                                  "/libgit2-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fjdglkh04qv3b4alg621pxa689i0wlf8m7nf2755zawjr2zhwxd"))
+              (patches (search-patches "libgit2-mtime-0.patch"))
+              (snippet '(begin
+                          (delete-file-recursively "deps") #t))
+              (modules '((guix build utils)))))))
 
 (define-public git-crypt
   (package
@@ -870,11 +879,9 @@ write native speed custom Git applications in any language with bindings.")
         (base32 "1ba5s0fvmd9hhnfhfsjrm40v0qpxfnwc8vmm55m0k4dryzkzx66q"))))
     (build-system gnu-build-system)
     (inputs
-     `(("git" ,git)
-       ("openssl" ,openssl)))
+     (list git openssl))
     (native-inputs
-     `(("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)))
+     (list docbook-xsl libxslt))
     (arguments
      `(#:tests? #f ; No tests.
        #:phases
@@ -1027,16 +1034,13 @@ collaboration using typical untrusted file hosts or services.")
               (lambda (file)
                 (wrap-program (string-append (assoc-ref outputs "out")
                                              "/lib/cgit/filters/" file)
-                  `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                  `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
               '("syntax-highlighting.py"
                 "html-converters/md2html"))
              #t)))))
     (native-inputs
      ;; For building manpage.
-     `(("asciidoc" ,asciidoc)
-       ("gzip" ,gzip)
-       ("bzip2" ,bzip2)
-       ("xz" ,xz)))
+     (list asciidoc gzip bzip2 xz))
     (inputs
      `(;; Building cgit requires a Git source tree.
        ("git-source"
@@ -1084,12 +1088,10 @@ a built-in cache to decrease server I/O pressure.")
                                (assoc-ref inputs "git") "/bin/git"
                                "'"))
                (("/usr/sbin/sendmail")
-                (string-append (assoc-ref inputs "sendmail")
-                               "/sbin/sendmail")))
-             #t)))))
+                (search-input-file inputs
+                                   "/sbin/sendmail"))))))))
     (inputs
-     `(("git" ,git)
-       ("sendmail" ,sendmail)))
+     (list git sendmail))
     (home-page "https://github.com/git-multimail/git-multimail")
     (synopsis "Send notification emails for Git pushes")
     (description
@@ -1180,10 +1182,9 @@ default) of the repository.")
                       (setenv "TRAVIS" "1")
                       (invoke "nosetests" "-v"))))))
     (propagated-inputs
-     `(("python-smmap" ,python-smmap)))
+     (list python-smmap))
     (native-inputs
-     `(("git" ,git)
-       ("python-nose" ,python-nose)))
+     (list git python-nose))
     (home-page "https://github.com/gitpython-developers/gitdb")
     (synopsis "Python implementation of the Git object database")
     (description
@@ -1215,13 +1216,11 @@ allowing to handle large objects with a small memory footprint.")
                                         (assoc-ref inputs "git")
                                         "/bin/git\""))))))))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (propagated-inputs
-     `(("python-gitdb" ,python-gitdb)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-gitdb python-typing-extensions))
     (native-inputs
-     `(("python-ddt" ,python-ddt)
-       ("python-nose" ,python-nose)))
+     (list python-ddt python-nose))
     (home-page "https://github.com/gitpython-developers/GitPython")
     (synopsis "Python library for interacting with Git repositories")
     (description
@@ -1288,7 +1287,7 @@ will work.")
                (base32
                 "13q4mnrxr03wz2dkhzy73j384g299m4d545cnhxcaznvdwfany4h"))))
     (build-system gnu-build-system)
-    (inputs `(("shflags" ,shflags)))
+    (inputs (list shflags))
     (arguments
      '(#:tests? #f                    ; no tests
        #:make-flags (list (string-append "prefix="
@@ -1331,9 +1330,9 @@ lot easier.")
         (base32 "1jp74qsgw3f9c8xgaaqvmhfh4ar3n1ns5ncm8glvqyywlxldxi0n"))))
     (build-system python-build-system)
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (inputs
-     `(("git" ,git)))
+     (list git))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1383,13 +1382,9 @@ manipulate them in various ways.")
         (base32 "1gx5nbqyprgy6picns5hxky3lyzkqfq3xhm614f0wcdi58xrsdh0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (inputs
-     `(("git" ,git)
-       ("perl" ,perl)
-       ("perl-test-harness" ,perl-test-harness)
-       ("perl-shell-command" ,perl-shell-command)
-       ("perl-test-most" ,perl-test-most)))
+     (list git perl perl-test-harness perl-shell-command perl-test-most))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1473,8 +1468,7 @@ also walk each side of a merge and test those changes individually.")
                   (delete 'build)
                   (add-before 'install 'patch-scripts
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((perl (string-append (assoc-ref inputs "perl")
-                                                 "/bin/perl")))
+                      (let ((perl (search-input-file inputs "/bin/perl")))
                         ;; This seems to take care of every shell script that
                         ;; invokes Perl.
                         (substitute* (find-files "." ".*")
@@ -1511,8 +1505,7 @@ also walk each side of a merge and test those changes individually.")
                       (substitute* '("src/lib/Gitolite/Hooks/PostUpdate.pm"
                                      "src/lib/Gitolite/Hooks/Update.pm")
                         (("/usr/bin/perl")
-                         (string-append (assoc-ref inputs "perl")
-                                        "/bin/perl")))
+                         (search-input-file inputs "/bin/perl")))
 
                       (substitute* "src/lib/Gitolite/Common.pm"
                         (("\"ssh-keygen")
@@ -1550,15 +1543,11 @@ also walk each side of a merge and test those changes individually.")
                                   (list out coreutils findutils git))))
                         #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("coreutils" ,coreutils)
-       ("findutils" ,findutils)
-       ("inetutils" ,inetutils)))
+     (list perl coreutils findutils inetutils))
     ;; git and openssh are propagated because trying to patch the source via
     ;; regexp matching is too brittle and prone to false positives.
     (propagated-inputs
-     `(("git" ,git)
-       ("openssh" ,openssh)))
+     (list git openssh))
     (home-page "https://gitolite.com")
     (synopsis "Git access control layer")
     (description
@@ -1617,18 +1606,15 @@ control to Git repositories.")
                  `("GUILE_LOAD_PATH" ":" prefix (,mods))
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake guile-3.0 pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("guile-commonmark" ,guile-commonmark)
-       ("guile-fibers" ,guile-fibers)
-       ("guile-gcrypt" ,guile-gcrypt)
-       ("guile-git" ,guile-git)
-       ("guile-syntax-highlight" ,guile-syntax-highlight-for-gitile)
-       ("gnutls" ,gnutls)))
+     (list guile-3.0
+           guile-commonmark
+           guile-fibers
+           guile-gcrypt
+           guile-git
+           guile-syntax-highlight-for-gitile
+           gnutls))
     (home-page "https://git.lepiller.eu/gitile")
     (synopsis "Simple Git forge written in Guile")
     (description "Gitile is a Git forge written in Guile that lets you
@@ -1681,16 +1667,14 @@ visualize your public Git repositories on a web interface.")
                        ;; Ruby and Node tests require node and gem.
                        "--ignore=tests/languages/node_test.py"
                        "--ignore=tests/languages/ruby_test.py"
-                       ;; FIXME: Python tests fail because of distlib version
-                       ;; mismatch.  Even with python-distlib/next it is
-                       ;; pulling version 0.3.0, while 0.3.1 is required.
-                       "--ignore=tests/languages/python_test.py" "-k"
+                       "-k"
                        (string-append
                         ;; TODO: these tests fail with AssertionError.  It may
                         ;; be possible to fix them.
                         "not test_install_existing_hooks_no_overwrite"
                         " and not test_uninstall_restores_legacy_hooks"
-                        " and not test_installed_from_venv")))))
+                        " and not test_installed_from_venv"
+                        " and not test_healthy_venv_creator")))))
          (add-before 'reset-gzip-timestamps 'make-gz-writable
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure .gz files are writable so that the
@@ -1702,19 +1686,19 @@ visualize your public Git repositories on a web interface.")
      `(("git" ,git-minimal)
        ("python-covdefaults" ,python-covdefaults)
        ("python-coverage" ,python-coverage)
-       ("python-distlib" ,python-distlib/next)
+       ("python-distlib" ,python-distlib)
        ("python-pytest" ,python-pytest)
        ("python-pytest-env" ,python-pytest-env)
        ("python-re-assert" ,python-re-assert)
        ("which" ,which)))
     ;; Propagate because pre-commit is also used as a module.
     (propagated-inputs
-     `(("python-cfgv" ,python-cfgv)
-       ("python-identify" ,python-identify)
-       ("python-nodeenv" ,python-nodeenv)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-toml" ,python-toml)
-       ("python-virtualenv" ,python-virtualenv)))
+     (list python-cfgv
+           python-identify
+           python-nodeenv
+           python-pyyaml
+           python-toml
+           python-virtualenv))
     (home-page "https://pre-commit.com/")
     (synopsis "Framework for managing and maintaining pre-commit hooks")
     (description
@@ -1795,13 +1779,11 @@ execution of any hook written in any language before every commit.")
                          ;; output by default.  Prevent timeouts due to silence.
                          "-v"))))))))
     (native-inputs
-     `(("python-docutils", python-docutils)
-       ;; The following inputs are only needed to run the tests.
-       ("python-nose" ,python-nose)
-       ("unzip" ,unzip)
-       ("which" ,which)))
+     (list python-docutils
+           ;; The following inputs are only needed to run the tests.
+           python-nose unzip which))
     (inputs
-     `(("python" ,python)))
+     (list python))
     ;; Find third-party extensions.
     (native-search-paths
      (list (search-path-specification
@@ -1834,7 +1816,7 @@ interface.")
      ;; Tests need mercurial source code.
      '(#:tests? #f))
     (propagated-inputs
-      `(("mercurial" ,mercurial)))
+      (list mercurial))
     (home-page "https://www.mercurial-scm.org/doc/evolution/")
     (synopsis "Flexible evolution of Mercurial history")
     (description "Evolve is a Mercurial extension for faster and safer mutable
@@ -1877,10 +1859,8 @@ history.  It implements the changeset evolution concept for Mercurial.")
          (modify-phases %standard-phases
            (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gpg (string-append (assoc-ref inputs "gnupg")
-                                       "/bin/gpg"))
-                   (openssl (string-append (assoc-ref inputs "openssl")
-                                           "/bin/openssl")))
+             (let ((gpg (search-input-file inputs "/bin/gpg"))
+                   (openssl (search-input-file inputs "/bin/openssl")))
                (substitute* "commitsigs.py"
                  (("b'gpg',") (string-append "b'" gpg "',"))
                  (("b'openssl',") (string-append "b'" openssl "',")))))))
@@ -1890,10 +1870,9 @@ history.  It implements the changeset evolution concept for Mercurial.")
                                              (assoc-ref %build-inputs "python"))
                                             "/site-packages/hgext3rd/commitsigs.py")))))
       (native-inputs
-       `(("python" ,python)))
+       (list python))
       (inputs
-       `(("gnupg" ,gnupg)
-         ("openssl" ,openssl)))
+       (list gnupg openssl))
       (home-page "https://foss.heptapod.net/mercurial/commitsigs")
       (synopsis "Automatic signing of changeset hashes")
       (description "This package provides a Mercurial extension for signing
@@ -1915,12 +1894,9 @@ can be used for signing.")
                "0y46dbhiblcvg8k41bdydr3fivghwk73z040ki5825d24ynf67ng"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list libxml2 openssl zlib))
     (arguments
      `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
        ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
@@ -2014,9 +1990,9 @@ following features:
                                         "-Wl,-rpath="
                                         out "/lib")))))))))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ;; For the Perl bindings.
-        ("swig" ,swig)))
+      (list pkg-config
+            ;; For the Perl bindings.
+            swig))
     (inputs
       `(("apr" ,apr)
         ("apr-util" ,apr-util)
@@ -2058,7 +2034,7 @@ projects, from individuals to large-scale enterprise operations.")
                        (install-file
                          "src/rcsfreeze"
                          (string-append (assoc-ref outputs "out") "/bin")))))))
-    (native-inputs `(("ed" ,ed)))
+    (native-inputs (list ed))
     (home-page "https://www.gnu.org/software/rcs/")
     (synopsis "Per-file local revision control system")
     (description
@@ -2108,8 +2084,7 @@ added to the file, and the author of each line.")
      ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
      '(#:tests? #f
        #:configure-flags (list "--with-external-zlib")))
-    (inputs `(("zlib" ,zlib)
-              ("nano" ,nano)))                    ; the default editor
+    (inputs (list zlib nano))                    ; the default editor
     (home-page "http://cvs.nongnu.org")
     (synopsis "Historical centralized version control system")
     (description
@@ -2142,10 +2117,9 @@ RCS, PRCS, and Aegis packages.")
      `(("git" ,git)
        ("python" ,python-wrapper)))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ;; These are needed for the tests.
-       ("cvs" ,cvs)
-       ("rcs" ,rcs)))
+     (list asciidoc
+           ;; These are needed for the tests.
+           cvs rcs))
     (home-page "http://www.catb.org/esr/cvs-fast-export/")
     (synopsis "Export an RCS or CVS history as a fast-import stream")
     (description "This program analyzes a collection of RCS files in a CVS
@@ -2171,10 +2145,10 @@ masters from remote CVS hosts.")
               (base32
                "0am6axxdvkm2vwgg0gjrd930yv4dlsdbf0rdv0zh5bhy1ir64rph"))))
     (build-system gnu-build-system)
-    (inputs `(("perl" ,perl)))
+    (inputs (list perl))
     (native-inputs
-     `(("emacs" ,emacs-minimal)     ; for `ctags'
-       ("inetutils" ,inetutils)))   ; for `hostname', used in the tests
+     (list emacs-minimal ; for `ctags'
+           inetutils))   ; for `hostname', used in the tests
     (home-page "https://www.gnu.org/software/vc-dwim/")
     (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
     (description
@@ -2241,8 +2215,7 @@ reviewing large, complex patch files.")
                (substitute* "tests/Makefile"
                  (("test-delta ") ""))))))))
     ;; These are needed for the tests
-    (native-inputs `(("git" ,git)
-                     ("cvs" ,cvs)))
+    (native-inputs (list git cvs))
     (home-page "https://www.gnu.org/software/cssc/")
     (synopsis "File-based version control like SCCS")
     (description  "GNU CSSC provides a replacement for the legacy Unix source
@@ -2277,16 +2250,16 @@ accessed and migrated on modern systems.")
        ("zlib" ,zlib)
        ("gettext" ,gettext-minimal)))
     (native-inputs
-     `(("bison" ,bison)
-       ("groff" ,groff)
-       ("perl" ,perl)
-       ;; Various tests require the following:
-       ("cvs" ,cvs)
-       ("flex" ,flex)
-       ("cook" ,cook)
-       ("subversion" ,subversion)
-       ("rcs" ,rcs)
-       ("ed" ,ed)))
+     (list bison
+           groff
+           perl
+           ;; Various tests require the following:
+           cvs
+           flex
+           cook
+           subversion
+           rcs
+           ed))
     (arguments
      `(#:configure-flags (list "--with-no-aegis-configured"
                                "--sharedstatedir=/var/com/aegis"
@@ -2398,18 +2371,17 @@ any project with more than one developer, is one of Aegis's major functions.")
      `(("python" ,python-wrapper)
        ("tzdata" ,tzdata)))
     (native-inputs
-     `( ;; For building documentation.
-       ("asciidoc" ,asciidoc)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)
-       ("xmlto" ,xmlto)
-
-       ;; For tests.
-       ("cvs" ,cvs)
-       ("git" ,git)
-       ("mercurial" ,mercurial)
-       ("subversion" ,subversion)))
+     (list ;; For building documentation.
+           asciidoc
+           docbook-xml
+           docbook-xsl
+           libxml2
+           xmlto
+           ;; For tests.
+           cvs
+           git
+           mercurial
+           subversion))
     (home-page "http://www.catb.org/~esr/reposurgeon/")
     (synopsis "Edit version-control repository history")
     (description "Reposurgeon enables risky operations that version-control
@@ -2437,11 +2409,9 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
                 "19va4jn46s0vjv9f337g3ad6hy1f285ynl27i9gkd9l70b9q90n4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("xmlto" ,xmlto)))
+     (list asciidoc xmlto))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list ncurses readline))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2472,8 +2442,7 @@ output of the @code{git} command.")
        (sha256
         (base32 "1x1cbn2b27h5r0ah5xc06fkalfdci2ngrgd4wibxjw0h88h0nvgq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)))
+    (native-inputs (list autoconf automake))
     (home-page "https://github.com/0-wiz-0/findnewest/releases")
     (synopsis "Print the modification time of the latest file")
     (description
@@ -2513,14 +2482,14 @@ modification time.")
                            "perl-uri" "perl-try-tiny"))))
                #t))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-encode-locale" ,perl-encode-locale)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl
+           perl-encode-locale
+           perl-html-parser
+           perl-http-date
+           perl-http-message
+           perl-libwww
+           perl-try-tiny
+           perl-uri))
     (home-page "https://myrepos.branchable.com/")
     (synopsis "Multiple repository management tool")
     (description
@@ -2557,8 +2526,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
                (for-each (lambda (file) (install-file file man))
                          (find-files "." "\\.1$"))))))))
     (propagated-inputs
-     `(("python-packaging" ,python-packaging)
-       ("python-requests" ,python-requests)))
+     (list python-packaging python-requests))
     (home-page
      "https://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git")
     (synopsis "Framework to smartly mirror git repositories")
@@ -2588,9 +2556,7 @@ based on a manifest file published by servers.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ; No tests.
     (inputs
-     `(("python-dkimpy" ,python-dkimpy)
-       ("python-dnspython" ,python-dnspython)
-       ("python-requests" ,python-requests)))
+     (list python-dkimpy python-dnspython python-requests))
     (home-page "https://git.kernel.org/pub/scm/utils/b4/b4.git")
     (synopsis "Tool for working with patches in public-inbox archives")
     (description
@@ -2626,10 +2592,8 @@ Features include:
        #:builder
        (begin
          (use-modules (guix build utils))
-         (let ((bash (string-append (assoc-ref %build-inputs "bash")
-                                    "/bin/bash"))
-               (rclone (string-append (assoc-ref %build-inputs "rclone")
-                                      "/bin/rclone")))
+         (let ((bash (search-input-file %build-inputs "/bin/bash"))
+               (rclone (search-input-file %build-inputs "/bin/rclone")))
            (copy-file (string-append (assoc-ref %build-inputs "source")
                                      "/git-annex-remote-rclone")
                       "git-annex-remote-rclone")
@@ -2640,8 +2604,7 @@ Features include:
                          (string-append %output "/bin"))
            #t))))
     (inputs
-     `(("bash" ,bash)
-       ("rclone" ,rclone)))
+     (list bash rclone))
     (home-page "https://github.com/DanielDent/git-annex-remote-rclone")
     (synopsis "Use rclone-supported cloud storage providers with git-annex")
     (description "This wrapper around rclone makes any destination supported
@@ -2651,7 +2614,7 @@ by rclone usable with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.11")
+    (version "2.14")
     (source
      (origin
        (method url-fetch)
@@ -2659,20 +2622,18 @@ by rclone usable with git-annex.")
               "https://www.fossil-scm.org/index.html/uv/"
               "fossil-src-" version ".tar.gz"))
        (sha256
-        (base32 "0c9nzx42wxfmym9vf1pnbdb1c7gp7a7zqky60izxsph7w2xh8nix"))
+        (base32 "1fazl117ph5z7xg7h6w7i32sf7rsa67499rg2llsxn3d34hckl5q"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            (delete-file-recursively "compat") #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("tcl" ,tcl)                     ;for configuration only
-       ("which" ,which)                 ;for tests only
-       ("ed" ,ed)))                     ;ditto
+     (list tcl ;for configuration only
+           which ;for tests only
+           ed))                     ;ditto
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)
-       ("sqlite" ,sqlite)))
+     (list openssl zlib sqlite))
     (arguments
      `(#:configure-flags (list "--with-openssl=auto"
                                "--disable-internal-sqlite")
@@ -2730,7 +2691,7 @@ a built-in wiki, built-in file browsing, built-in tickets system, etc.")
        (modify-phases %standard-phases
          (delete 'configure)))) ; No configure script
     (inputs
-     `(("libgit2" ,libgit2)))
+     (list libgit2))
     (home-page "https://git.codemadness.org/stagit/")
     (synopsis "Static git page generator")
     (description "Stagit creates static pages for git repositories, the results can
@@ -2756,17 +2717,17 @@ be served with a HTTP file server of your choice.")
                             (assoc-ref %build-inputs "boost")
                             "/lib"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("boost"     ,boost)
-       ("ftgl"      ,ftgl)
-       ("glew"      ,glew)
-       ("glm"       ,glm)
-       ("glu"       ,glu)
-       ("libpng"    ,libpng)
-       ("mesa"      ,mesa)
-       ("pcre"      ,pcre)
-       ("sdl-union" ,(sdl-union (list sdl2 sdl2-image)))))
+     (list boost
+           ftgl
+           glew
+           glm
+           glu
+           libpng
+           mesa
+           pcre
+           (sdl-union (list sdl2 sdl2-image))))
     (home-page "https://gource.io/")
     (synopsis "3D visualisation tool for source control repositories")
     (description "@code{gource} provides a software version control
@@ -2810,8 +2771,7 @@ specific files and directories.")
              (invoke "./srctest"))))))
     (native-inputs
      ;; For testing.
-     `(("git" ,git)
-       ("perl" ,perl)))
+     (list git perl))
     (inputs
      `(("python" ,python-wrapper)
        ("rcs" ,rcs)))
@@ -2855,8 +2815,7 @@ directory full of HOWTOs.")
                #t))
            (add-before 'install 'patch-git
              (lambda* (#:key inputs #:allow-other-keys)
-               (let ((git (string-append (assoc-ref inputs "git")
-                                         "/bin/git")))
+               (let ((git (search-input-file inputs "/bin/git")))
                  (substitute* "bin/git-when-merged"
                    (("'git'") (string-append "'" git "'")))
                  #t)))
@@ -2864,7 +2823,7 @@ directory full of HOWTOs.")
              (lambda* (#:key outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
                                             "/bin/git-when-merged")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t)))))
       (inputs
        `(("git" ,git)
@@ -2900,8 +2859,7 @@ how information about the merge is displayed.")
          (delete 'configure)
          (add-before 'install 'patch-git
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((git (string-append (assoc-ref inputs "git")
-                                       "/bin/git")))
+             (let ((git (search-input-file inputs "/bin/git")))
                (substitute* "git-imerge"
                  (("'git'") (string-append "'" git "'")))
                #t)))
@@ -2909,7 +2867,7 @@ how information about the merge is displayed.")
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/git-imerge")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
              #t)))))
     (inputs
      `(("git" ,git)
@@ -2954,16 +2912,16 @@ interrupted, published, and collaborated on while in progress.")
                (invoke "make" "man"))
              #t))
          (add-after 'install 'install-man-pages
-           (lambda _
+           (lambda* (#:key outputs #:allow-other-keys)
              (with-directory-excursion "src/github.com/git-lfs/git-lfs/man"
-               (let ((out (assoc-ref %outputs "out")))
+               (let ((out (assoc-ref outputs "out")))
                  (for-each
                    (lambda (manpage)
                      (install-file manpage (string-append out "/share/man/man1")))
                    (find-files "." "^git-lfs.*\\.1$"))))
              #t)))))
     ;; make `ronn` available during build for man page generation
-    (native-inputs `(("ronn-ng" ,ronn-ng)))
+    (native-inputs (list ronn-ng))
     (home-page "https://git-lfs.github.com/")
     (synopsis "Git extension for versioning large files")
     (description
@@ -2987,7 +2945,7 @@ file contents on a remote server.")
         (base32 "11n46bngvca5wbdbfcxzjhjbfdbad7sgf7h9gf956cb1q8swsdm0"))))
     (build-system copy-build-system)
     (inputs
-     `(("xdg-utils" ,xdg-utils)))
+     (list xdg-utils))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3053,7 +3011,7 @@ guessing the URL pattern from the @code{origin} remote.")
 
        #:test-target "test"))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (synopsis "Historical distributed version-control system")
     (description
      "GNU Arch, aka. @code{tla}, was one of the first free distributed
@@ -3077,8 +3035,7 @@ for historians.")
                (base32
                 "0q0byg2bpibl3lbn4zibwcfxzlx2x5krajxmpwgizf32qjp5lh6n"))))
     (inputs
-     `(("perl" ,perl)
-       ("ncurses" ,ncurses)))
+     (list perl ncurses))
     (build-system copy-build-system)
     (arguments
      '(#:phases
@@ -3181,10 +3138,10 @@ defects faster.")
                   "1k03zgcbhl91cgyh4k7ywyjp00y63q4bqbimncqh5b3lni8l8j5l"))))
       (build-system python-build-system)
       (native-inputs
-       `(("git" ,git) ;for tests
-         ("python-pytest" ,python-pytest)))
+       (list git ;for tests
+             python-pytest))
       (propagated-inputs
-       `(("python-pyyaml" ,python-pyyaml)))
+       (list python-pyyaml))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -3193,11 +3150,10 @@ defects faster.")
                (substitute* "tests/test_main.py"
                  (("'gita\\\\n'") "'source\\n'")
                  (("'gita'") "'source'"))
-               (invoke (string-append (assoc-ref inputs "git") "/bin/git")
+               (invoke (search-input-file inputs "/bin/git")
                        "init")
                (add-installed-pythonpath inputs outputs)
-               (invoke (string-append (assoc-ref inputs "python-pytest")
-                                      "/bin/pytest")
+               (invoke (search-input-file inputs "/bin/pytest")
                        "-vv" "tests")))
            (add-after 'install 'install-shell-completions
              (lambda* (#:key outputs #:allow-other-keys)
@@ -3298,7 +3254,7 @@ using the remote repository URL's host and path.")
        '(("git-filter-repo" "libexec/git-core/")
          ("Documentation/man1/" "share/man/man1")
          ("/" "" #:include ()))))
-    (inputs `(("python" ,python)))                ;for the shebang
+    (inputs (list python))                ;for the shebang
     (home-page "https://github.com/newren/git-filter-repo")
     (synopsis "Quickly rewrite Git repository history")
     (description
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index eeabb11bcf..9b57d3cbb8 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2015, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
@@ -38,7 +38,7 @@
 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Alex McGrath <amk@amk.ie>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
@@ -52,6 +52,7 @@
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2021 Robin Templeton <robin@terpri.org>
 ;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
@@ -79,6 +80,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (guix hg-download)
@@ -104,6 +106,7 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
@@ -209,10 +212,15 @@
     (arguments
      `(#:configure-flags
        (list
-        "--enable-libv4l2"
+        "CFLAGS=-O2 -g -fcommon"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-libv4l2"
         "--enable-libmpeg2"
         "--enable-libmpeg2convert"
-        "--enable-v4l"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-v4l"
         ;;; XXX: Not available.
         ;"--enable-bktr"
         ;"--enable-sunau"
@@ -274,7 +282,7 @@
        ("lzo" ,lzo)
        ("mjepgtools" ,mjpegtools)
        ("sdl" ,sdl)
-       ("v4l-utils" ,v4l-utils)
+       ;; ("v4l-utils" ,v4l-utils)
        ("x11" ,libx11)
        ("x264" ,libx264)
        ("xaw" ,libxaw)
@@ -310,7 +318,7 @@ video and audio streams from a DVD.")
     (arguments
      `(#:tests? #f)) ; Test script is stand-alone
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (synopsis "SVT HEVC encoder")
     (description "Scalable Video Technology (SVT) is a software-based video
 coding technology that is highly optimized for Intel's Xeon processors.  Using
@@ -389,14 +397,12 @@ video decode, encode and filtering on Intel's Gen graphics hardware platforms.")
                 (string-append doc "/share/gtk-doc"))
                #t))))))
     (native-inputs
-     `(("dash" ,dash)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list dash gtk-doc/stable pkg-config))
     (inputs
      `(("glew" ,glew)
        ("opengl" ,mesa)))
     (propagated-inputs
-     `(("orc" ,orc)))
+     (list orc))
     (synopsis "Dirac video codec")
     (description "Schroedinger is a project implementing the Dirac video codec in
 ANSI C code.  It is meant to be highly optimized and portable.  It is developed
@@ -427,24 +433,22 @@ as a joint effort between the BBC and Fluendo.")
         (search-patches "libquicktime-ffmpeg.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list gettext-minimal doxygen pkg-config))
     (inputs
-     `(("alsa" ,alsa-lib)
-       ("ffmpeg" ,ffmpeg)
-       ("gtk+-2" ,gtk+-2)
-       ("lame" ,lame)
-       ("libdv" ,libdv)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libvorbis" ,libvorbis)
-       ("opengl" ,mesa)
-       ("schroedinger" ,schroedinger)
-       ("x11" ,libx11)
-       ("x264" ,libx264)
-       ("xaw" ,libxaw)
-       ("xv" ,libxv)))
+     (list alsa-lib
+           ffmpeg
+           gtk+-2
+           lame
+           libdv
+           libjpeg-turbo
+           libpng
+           libvorbis
+           mesa
+           schroedinger
+           libx11
+           libx264
+           libxaw
+           libxv))
     (synopsis "Quick Time Library")
     (description "The goal of this project is to enhance the quicktime4linux
 library.")
@@ -486,7 +490,7 @@ library.")
          (add-after 'unpack 'chdir
            (lambda* _
              (chdir "mjpg-streamer-experimental"))))))
-    (inputs `(("libjpeg-turbo" ,libjpeg-turbo)))
+    (inputs (list libjpeg-turbo))
     (synopsis "Stream JPEG over IP network")
     (description "Command line application that copies JPEG frames from one or
 more input plugins to multiple output plugins.  It can be used to stream JPEG
@@ -510,11 +514,7 @@ receiving MJPG streams.")
         (base32 "0kvhxr5hkabj9v7ah2rzkbirndfqdijd9hp8v52c1z6bxddf019w"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libdv" ,libdv)
-       ("libpng" ,libpng)
-       ("libquicktime" ,libquicktime)
-       ("sdl" ,sdl)))
+     (list gtk+-2 libdv libpng libquicktime sdl))
     (synopsis "Tools for handling MPEG")
     (description "Mjpeg tools is a suite of programs which support video capture,
 editing, playback, and compression to MPEG of MJPEG video.  Edit, play and
@@ -568,10 +568,7 @@ and mmsh protocols.")
                (("is != NULL") "is.good()"))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("ffmpeg" ,ffmpeg-2.8)
        ("jpeg" ,libjpeg-turbo)
@@ -646,10 +643,7 @@ other software.")
        #:configure-flags
        (list "--with-sdl2")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
      `(("linux-headers" ,linux-libre-headers)
        ("sdl2" ,sdl2)))
@@ -697,9 +691,9 @@ touchscreen devices and the ability to apply filters to their input events.")
              (mkdir-p (string-append out "/bin"))
              #t))))))
   (native-inputs
-   `(("nasm" ,nasm)))
+   (list nasm))
   (inputs
-   `(("liba52" ,liba52)))
+   (list liba52))
   (synopsis "Advanced MPEG editing and manipulation library")
   (description "Libmpeg3 decodes MP2, MP3, AC3, MPEG-1 video, MPEG-2 video,
 and DVD footage in a single library.  It supports many esoteric features like
@@ -721,12 +715,22 @@ stream decoding")
                 "1vkh19gb76agvh4h87ysbrgy82hrw88lnsvhynjf4vng629dmpgv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("makeinfo" ,texinfo)))
+     `(("config" ,config)
+       ("makeinfo" ,texinfo)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     (list ncurses))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'update-config-scripts
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
+             ;; Replace outdated config.guess and config.sub.
+             (for-each (lambda (file)
+                         (install-file
+                          (search-input-file
+                           (or native-inputs inputs)
+                           (string-append "/bin/" file)) "."))
+                       '("config.guess" "config.sub"))))
          (replace 'configure
                   (lambda* (#:key build inputs outputs #:allow-other-keys)
                     ;; This old `configure' script doesn't support
@@ -737,17 +741,6 @@ stream decoding")
                       (invoke "./configure"
                               (string-append "--prefix=" out)
                               (string-append "--build=" build)
-                              ;; The ancient config.guess is unable to
-                              ;; guess the host triplet on mips64el.
-                              ,@(if (string=? "mips64el-linux"
-                                              (%current-system))
-                                    '("--host=mips64el-unknown-linux-gnu")
-                                    '())
-                              ;; The same is also true with aarch64.
-                              ,@(if (string=? "aarch64-linux"
-                                              (%current-system))
-                                    '("--host=aarch64-unknown-linux-gnu")
-                                    '())
                               (string-append "--with-ncurses="
                                              ncurses))))))))
     (home-page "http://aa-project.sourceforge.net/aalib/")
@@ -772,12 +765,9 @@ old-fashioned output methods with powerful ascii-art renderer.")
         (base32 "1dvyf21iv9hrgv99szc24386vkacmhidm5b4d31hqqjs3b6di692"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libepoxy" ,libepoxy)
-       ("mpv" ,mpv)))
+     (list gtk+ libepoxy mpv))
     (home-page "https://github.com/celluloid-player/celluloid")
     (synopsis "GTK+ frontend for the mpv media player")
     (description "Celluloid is a simple GTK+ frontend for the mpv media player.
@@ -806,9 +796,7 @@ mpv's powerful playback capabilities.")
     (build-system gnu-build-system)
     ;; XXX We need to run ./bootstrap because of the build system fixes above.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (arguments `(#:configure-flags '("--enable-shared")
                  #:phases
                  (modify-phases %standard-phases
@@ -838,9 +826,7 @@ television and DVD.  It is also known as AC-3.")
                 "0fmnbzpl481i7kchx4hbvb507r5pfgyrzfrlrs7jk3bicycm75qv"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python))) ; to detect the version
+     (list perl pkg-config python)) ; to detect the version
     (arguments
      `(#:tests? #f                      ; downloads many video clips
        #:configure-flags
@@ -879,12 +865,12 @@ shared library and encoder and decoder command-line executables.")
                (base32
                 "1m3i322n2fwgrvbs1yck7g5md1dbg22bhq5xdqmjpz5m7j4jxqny"))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxv" ,libxv)
-       ("libsm" ,libsm)
-       ("libice" ,libice)
-       ("sdl" ,sdl)))
+     (list libx11
+           libxext
+           libxv
+           libsm
+           libice
+           sdl))
     (build-system gnu-build-system)
     (home-page "http://libmpeg2.sourceforge.net/")
     (synopsis "MPEG1 and MPEG2 video decoder library")
@@ -912,8 +898,7 @@ shared library and encoder and decoder command-line executables.")
                   "1i6v9h3xx9pi0zmlj3anwwjxqa63sbhy9crrif8dphipwfn9hyg5"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("nasm" ,nasm)))
+       (list pkg-config nasm))
       ;; TODO: Add gpac input
       (arguments
        `(#:tests? #f                    ;no check target
@@ -972,24 +957,24 @@ H.264 (MPEG-4 AVC) video streams.")
     (build-system gnu-build-system)
     (outputs '("out" "gui")) ; "mkvtoolnix-gui" brings the closure size from ~300 MB to 1.5+ GB.
     (inputs
-     `(("boost" ,boost)
-       ("bzip2" ,bzip2)
-       ("cmark" ,cmark)
-       ("libebml" ,libebml)
-       ("file" ,file)
-       ("flac" ,flac)
-       ("fmt" ,fmt)
-       ("libdvdread" ,libdvdread)
-       ("libmatroska" ,libmatroska)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("lzo" ,lzo)
-       ("pcre2" ,pcre2)
-       ("pugixml" ,pugixml)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("utfcpp" ,utfcpp)
-       ("zlib" ,zlib)))
+     (list boost
+           bzip2
+           cmark
+           libebml
+           file
+           flac
+           fmt
+           libdvdread
+           libmatroska
+           libogg
+           libvorbis
+           lzo
+           pcre2
+           pugixml
+           qtbase-5
+           qtmultimedia
+           utfcpp
+           zlib))
     (native-inputs
      `(("docbook-xsl" ,docbook-xsl)
        ("gettext" ,gettext-minimal)
@@ -1022,10 +1007,8 @@ H.264 (MPEG-4 AVC) video streams.")
              #t)))
          (add-before 'configure 'add-googletest
            (lambda* (#:key inputs #:allow-other-keys)
-             (symlink
-               (string-append (assoc-ref inputs "googletest")
-                              "/include/gtest") "lib/gtest")
-             #t))
+             (symlink (search-input-directory inputs "/include/gtest")
+                      "lib/gtest")))
          (replace 'build
            (lambda _
              (let ((-j (list "-j" (number->string (parallel-job-count)))))
@@ -1148,41 +1131,39 @@ H.264 (MPEG-4 AVC) video streams.")
                      `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib)))
                 (find-files bin-dir))))))))
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-simple" ,perl-test-simple)))
+     (list perl-module-build perl-test-pod perl-test-simple))
     (inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-digest-md5" ,perl-digest-md5)
-       ("perl-encode" ,perl-encode)
-       ("ffmpeg" ,ffmpeg)
-       ("perl-file-path" ,perl-file-path)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-getopt-long" ,perl-getopt-long)
-       ("perl-gtk3" ,perl-gtk3)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-lwp-useragent-cached" ,perl-lwp-useragent-cached)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-mime-base64" ,perl-mime-base64)
-       ("perl-pathtools" ,perl-pathtools)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-storable" ,perl-storable)
-       ("perl-term-ansicolor" ,perl-term-ansicolor)
-       ("perl-term-readline-gnu" ,perl-term-readline-gnu)
-       ("perl-text-parsewords" ,perl-text-parsewords)
-       ("perl-text-tabs+wrap" ,perl-text-tabs+wrap)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("perl-uri-escape" ,perl-uri-escape)
-       ("wget" ,wget)
-       ("xdg-utils" ,xdg-utils)
-       ("youtube-dl" ,youtube-dl)
-       ("yt-dlp" ,yt-dlp)))
+     (list perl-data-dump
+           perl-digest-md5
+           perl-encode
+           ffmpeg
+           perl-file-path
+           perl-file-sharedir
+           perl-getopt-long
+           perl-gtk3
+           perl-http-message
+           perl-json
+           perl-json-xs
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-lwp-useragent-cached
+           perl-memoize
+           perl-mime-base64
+           perl-pathtools
+           perl-scalar-list-utils
+           perl-storable
+           perl-term-ansicolor
+           perl-term-readline-gnu
+           perl-text-parsewords
+           perl-text-tabs+wrap
+           perl-unicode-linebreak
+           perl-uri-escape
+           wget
+           xdg-utils
+           youtube-dl
+           yt-dlp))
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (home-page "https://github.com/trizen/pipe-viewer")
     (synopsis "CLI+GUI YouTube Client")
     (description "Pipe-Viewer is a lightweight application for searching and
@@ -1309,8 +1290,7 @@ designed to encode video or images into an H.265 / HEVC encoded bitstream.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("nasm" ,nasm)))
+     (list pkg-config nasm))
     (propagated-inputs
      `(("freetype" ,freetype)
        ("fribidi" ,fribidi)
@@ -1338,15 +1318,15 @@ ASS/SSA (Advanced Substation Alpha/SubStation Alpha) subtitle format.")
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("freeglut" ,freeglut)
-       ("ftgl" ,ftgl)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list freeglut
+           ftgl
+           imlib2
+           libx11
+           mesa
+           ncurses
+           zlib))
     (home-page "http://caca.zoy.org/wiki/libcaca")
     (synopsis "Colour ASCII-art library")
     (description "libcaca is a graphics library that outputs text instead of
@@ -1369,9 +1349,7 @@ canvas operations.")
                 "0sjz0s0nrv7jcpvh1i432x3jza0y5yycmzw84cfncb2qby0i62rs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://www.videolan.org/developers/libdca.html")
     (synopsis "DTS Coherent Acoustics decoder")
     (description "libdca is a library for decoding DTS Coherent Acoustics
@@ -1391,8 +1369,8 @@ streams.")
                (base32
                 "1fl96f2xh2slkv1i1ix7kqk576a0ak1d33cylm0mbhm96d0761d3"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxv" ,libxv)))
+    (native-inputs (list pkg-config))
+    (inputs (list libxv))
     (home-page "http://libdv.sourceforge.net/")
     (synopsis "DV video (IEC 61834 and SMPTE 314M) codec")
     (description "The Quasar DV codec (libdv) is a software codec for DV
@@ -1415,7 +1393,7 @@ SMPTE 314M.")
         (base32 "06h81sxyz2riic0gpzik6ffcnq32wrqphi8c6k55glcdymiimyfs"))))
     (build-system cmake-build-system)
     (inputs
-     `(("libebml" ,libebml)))
+     (list libebml))
     (arguments
      `(#:configure-flags
        (list "-DBUILD_SHARED_LIBS=YES")
@@ -1452,15 +1430,14 @@ libebml is a C++ library to read and write EBML files.")
                          (assoc-ref %build-inputs "vulkan-headers")
                          "/share/vulkan/registry/vk.xml"))))
     (native-inputs
-     `(("python-mako" ,python-mako)
-       ("pkg-config" ,pkg-config)))
+     (list python-mako pkg-config))
     (inputs
-     `(("lcms" ,lcms)
-       ("libepoxy" ,libepoxy)
-       ("mesa" ,mesa)
-       ("shaderc" ,shaderc)
-       ("vulkan-headers" ,vulkan-headers)
-       ("vulkan-loader" ,vulkan-loader)))
+     (list lcms
+           libepoxy
+           mesa
+           shaderc
+           vulkan-headers
+           vulkan-loader))
     (home-page "https://code.videolan.org/videolan/libplacebo")
     (synopsis "GPU-accelerated image/video processing library")
     (description "libplacebo is, in a nutshell, the core rendering algorithms
@@ -1472,24 +1449,24 @@ quality and performance.")
 (define-public libva
   (package
     (name "libva")
-    (version "2.10.0")
+    (version "2.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/intel/libva/releases/download/"
                            version "/libva-" version ".tar.bz2"))
        (sha256
-        (base32 "0dh2zjn6wi74ga75r6pbrrj8hjm213zyxvn9bv78z0fra1dy70gs"))))
+        (base32 "0q6l193x9whd80sjd5mx8cb7c0fcljb19nhfpla5h49nkzrq7lzs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list libdrm
+           libx11
+           libxext
+           libxfixes
+           mesa
+           wayland))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1537,13 +1514,9 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
        (list "--enable-wayland"
              "--enable-x11")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libva" ,libva)
-       ("libx11" ,libx11)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list libdrm libva libx11 mesa wayland))
     (home-page "https://01.org/linuxmedia/vaapi")
     (synopsis "Collection of testing utilities for VA-API")
     (description
@@ -1607,12 +1580,12 @@ operate properly.")
        ("xvid" ,xvid)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bc" ,bc)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("speex" ,speex)
-       ("yasm" ,yasm)))
+     (list bc
+           perl
+           pkg-config
+           texinfo
+           speex
+           yasm))
     (arguments
      `(#:test-target "fate"
        #:configure-flags
@@ -1771,9 +1744,8 @@ audio/video codec library.")
                  "--enable-libaom"
                  "--enable-librav1e"
                  "--enable-libsrt")))))
-    (inputs (fold alist-delete
-                  (package-inputs ffmpeg)
-                  '("dav1d" "libaom" "rav1e" "srt")))))
+    (inputs (modify-inputs (package-inputs ffmpeg)
+              (delete "dav1d" "libaom" "rav1e" "srt")))))
 
 (define-public ffmpeg-2.8
   (package
@@ -1821,9 +1793,8 @@ audio/video codec library.")
                (format #t "setting LD_LIBRARY_PATH to ~s~%" path)
                (setenv "LD_LIBRARY_PATH" path)
                #t))))))
-    (inputs (fold alist-delete
-                  (package-inputs ffmpeg)
-                  '("dav1d" "libaom" "rav1e" "srt")))))
+    (inputs (modify-inputs (package-inputs ffmpeg)
+              (delete "dav1d" "libaom" "rav1e" "srt")))))
 
 (define-public ffmpeg-for-stepmania
   (hidden-package
@@ -1868,12 +1839,9 @@ audio/video codec library.")
                 "1bakbr714j7yxdal1f5iq0gcl4cxggbbgj227ihdh5kvygqlwich"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("gvfs" ,gvfs)))
+     (list ffmpeg libjpeg-turbo libpng gvfs))
     (arguments
      `(#:configure-flags (list "-DENABLE_GIO=ON" "-DENABLE_THUMBNAILER=ON")))
     (home-page "https://github.com/dirkvdb/ffmpegthumbnailer")
@@ -2049,8 +2017,7 @@ streaming protocols.")
     (build-system gnu-build-system)
     ;; FIXME: Add additional inputs once available.
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+     (list pkg-config yasm))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("cdparanoia" ,cdparanoia)
@@ -2142,9 +2109,8 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
                (base32 "0kqckrgvpx42gdmnc644lpwbimwf1am256xd670w2b8sbrjv3bm9"))))
     (build-system waf-build-system)
     (native-inputs
-     `(("perl" ,perl) ; for zsh completion file
-       ("pkg-config" ,pkg-config)
-       ("python-docutils" ,python-docutils)))
+     (list perl ; for zsh completion file
+           pkg-config python-docutils))
     ;; Missing features: libguess, V4L2
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -2236,41 +2202,36 @@ projects while introducing many more.")
                 "12nvcl0cfix1xay9hfi7856vg4lpv8y5b0a22212bsjbvl5g22rc"))))
     (build-system qt-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))
+     (list qttools))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("qtbase" ,qtbase-5)
-       ("zlib" ,zlib)
-       ("mpv" ,mpv)))
+     (list bash-minimal qtbase-5 zlib mpv))
     (arguments
-     `(#:tests? #false             ; no tests
-       #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                          (string-append "CC=" ,(cc-for-target))
-                          ;; A KLUDGE to turn off invoking lrelease on the
-                          ;; project for now, because it fails consistently
-                          ;; with "WARNING: Could not find qmake spec
-                          ;; 'default'". See below.
-                          "LRELEASE=true")
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         ;; Due to the above, we must run lrelease separately on each .ts file
-         ;; (as opposed to running `lrelease-pro smplayer.pro` for the entire
-         ;; project, as the Makefile does normally without the above kludge).
-         (add-after 'build 'compile-ts-files
-           (lambda _
-             (for-each (lambda (file)
-                         (invoke "lrelease" file))
-                       (find-files "./" "\\.ts$"))
-             #true))
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (mpv (assoc-ref inputs "mpv")))
-               (wrap-program (string-append out "/bin/smplayer")
-                 `("PATH" ":" prefix
-                   ,(list (string-append mpv "/bin")))))
-             #true)))))
+     (list #:tests? #false              ; no tests
+           #:make-flags #~(list (string-append "PREFIX=" #$output)
+                                (string-append "CC=" #+(cc-for-target))
+                                ;; A KLUDGE to turn off invoking lrelease on the
+                                ;; project for now, because it fails consistently
+                                ;; with "WARNING: Could not find qmake spec
+                                ;; 'default'". See below.
+                                "LRELEASE=true")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               ;; Due to the above, we must run lrelease separately on each .ts file
+               ;; (as opposed to running `lrelease-pro smplayer.pro` for the entire
+               ;; project, as the Makefile does normally without the above kludge).
+               (add-after 'build 'compile-ts-files
+                 (lambda _
+                   (for-each (lambda (file)
+                               (invoke "lrelease" file))
+                             (find-files "./" "\\.ts$"))))
+               (add-after 'install 'wrap-executable
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (mpv (assoc-ref inputs "mpv")))
+                     (wrap-program (string-append out "/bin/smplayer")
+                       `("PATH" ":" prefix
+                         ,(list (string-append mpv "/bin"))))))))))
     (home-page "https://www.smplayer.info")
     (synopsis "Complete front-end for MPlayer, a media player")
     (description "SMPlayer is a graphical user interface (GUI) for
@@ -2308,10 +2269,9 @@ the last played position, etc.")
              (setenv "CC" (which "gcc"))
              (invoke "make"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("mpv" ,mpv)))
+     (list glib mpv))
     (home-page "https://github.com/hoyon/mpv-mpris")
     (synopsis "MPRIS plugin for mpv")
     (description "This package provides an @dfn{MPRIS} (Media Player Remote
@@ -2360,8 +2320,7 @@ To load this plugin, specify the following option when starting mpv:
        ;; custom directory, but there seems to be no tarball with all files.
        #:tests? #f))
     (native-inputs
-     `(("perl" ,perl)
-       ("yasm" ,yasm)))
+     (list perl yasm))
     (synopsis "VP8/VP9 video codec")
     (description "libvpx is a codec for the VP8/VP9 video compression format.")
     (license license:bsd-3)
@@ -2443,9 +2402,9 @@ To load this plugin, specify the following option when starting mpv:
                                    (string-append zsh "/_youtube-dl"))
                         #t))))))
     (native-inputs
-     `(("zip" ,zip)))
+     (list zip))
     (inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (synopsis "Download videos from YouTube.com and other sites")
     (description
      "Youtube-dl is a small command-line program to download videos from
@@ -2606,11 +2565,9 @@ original project.")
                      Categories=AudioVideo;Audio;Video;Network~%")))
                #t))))))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)))
+     (list gettext-minimal))
     (inputs
-     `(("python2-twodict" ,python2-twodict)
-       ("python2-wxpython" ,python2-wxpython)
-       ("youtube-dl" ,youtube-dl)))
+     (list python2-twodict python2-wxpython youtube-dl))
     (home-page "https://github.com/MrS0m30n3/youtube-dl-gui")
     (synopsis
      "GUI (Graphical User Interface) for @command{youtube-dl}")
@@ -2635,7 +2592,7 @@ other site that youtube-dl supports.")
                 "0gn86i6nfsw395r9a3i88nv2g08s5bgjps7w4qawb9gvk4h7zqap"))))
     (build-system python-build-system)
     (inputs
-     `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
+     (list ffmpeg))             ; for multi-part and >=1080p videos
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2643,8 +2600,7 @@ other site that youtube-dl supports.")
            ;; Explicitly invoke the input ffmpeg, instead of whichever one
            ;; happens to be in the user's $PATH at run time.
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((ffmpeg (string-append (assoc-ref inputs "ffmpeg")
-                                          "/bin/ffmpeg")))
+             (let ((ffmpeg (search-input-file inputs "/bin/ffmpeg")))
                (substitute* "src/you_get/processor/ffmpeg.py"
                  ;; Don't blindly replace all occurrences of ‘'ffmpeg'’: the
                  ;; same string is also used when sniffing ffmpeg's output.
@@ -2673,24 +2629,23 @@ audio, images) from the Web.  It can use either mpv or vlc for playback.")
                 "0xdybiihd66b79rbsawjhxs9snm78gld5ziz3gnp8vdcw0bshwz7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-gtk2" ,perl-gtk2)
-       ("perl-json" ,perl-json)
-       ("perl-json-xs" ,perl-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-lwp-useragent-cached" ,perl-lwp-useragent-cached)
-       ("perl-memoize" ,perl-memoize)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-term-readline-gnu" ,perl-term-readline-gnu)
-       ("perl-unicode-linebreak" ,perl-unicode-linebreak)
-       ("xdg-utils" ,xdg-utils)
-
-       ;; Some videos play without youtube-dl, but others silently fail to.
-       ("youtube-dl" ,youtube-dl)))
+     (list perl-data-dump
+           perl-file-sharedir
+           perl-gtk2
+           perl-json
+           perl-json-xs
+           perl-libwww
+           perl-lwp-protocol-https
+           perl-lwp-useragent-cached
+           perl-memoize
+           perl-mozilla-ca
+           perl-term-readline-gnu
+           perl-unicode-linebreak
+           xdg-utils
+           ;; Some videos play without youtube-dl, but others silently fail to.
+           youtube-dl))
     (arguments
      `(#:modules ((guix build perl-build-system)
                   (guix build utils)
@@ -2782,7 +2737,7 @@ Both command-line and GTK2 interface are available.")
                  (("\"libbdplus\"")
                   (string-append "\"" libbdplus "/lib/libbdplus\"")))
                #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -2812,9 +2767,9 @@ players, like VLC or MPlayer.")
     (arguments
      `(#:configure-flags '("--with-libdvdcss=yes")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("libdvdcss" ,libdvdcss)))
+     (list libdvdcss))
     (home-page "http://dvdnav.mplayerhq.hu/")
     (synopsis "Library for reading video DVDs")
     (description
@@ -2839,13 +2794,9 @@ installed).")
          "1drfc47hikfzc9d7hjk34rw10iqw01d2vwmn91pv73ppx4nsj81h"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libdvdread" ,libdvdread)
-       ("libpng" ,libpng)
-       ("imagemagick" ,imagemagick)
-       ("libxml2" ,libxml2)
-       ("freetype" ,freetype)))
+     (list libdvdread libpng imagemagick libxml2 freetype))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Generates a DVD-Video movie from a MPEG-2 stream")
     (description "@command{dvdauthor} will generate a DVD-Video movie from a
 MPEG-2 stream containing VOB packets.")
@@ -2866,9 +2817,9 @@ MPEG-2 stream containing VOB packets.")
                 "0cv7j8irsv1n2dadlnhr6i1b8pann2ah6xpxic41f04my6ba6rp5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libdvdread" ,libdvdread)))
+     (list libdvdread))
     (home-page "http://dvdnav.mplayerhq.hu/")
     (synopsis "Library for video DVD navigation features")
     (description
@@ -2935,9 +2886,9 @@ device without having to bother about the decryption.")
                  `("GUILE_LOAD_PATH" ":" prefix (,site))
                  `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,compiled)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-3.0)))
+     (list guile-3.0))
     (synopsis "SubRip to WebVTT subtitle converter")
     (description "srt2vtt converts SubRip formatted subtitles to WebVTT format
 for use with HTML5 video.")
@@ -3098,11 +3049,7 @@ capabilities.")
        ("pkg-config" ,pkg-config)
        ("yasm" ,yasm)))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("libass" ,libass)
-       ("python" ,python)
-       ("tesseract-ocr" ,tesseract-ocr)
-       ("zimg" ,zimg)))
+     (list ffmpeg libass python tesseract-ocr zimg))
     (home-page "http://www.vapoursynth.com/")
     (synopsis "Video processing framework")
     (description "VapourSynth is a C++ library and Python module for video
@@ -3128,7 +3075,7 @@ format changes.")
                (base32
                 "1xyg3amgg27zf7188kss7y248s0xhh1vv8rrk0j9bcsd5nasxsmf"))))
     (build-system gnu-build-system)
-    (native-inputs `(("yasm" ,yasm)))
+    (native-inputs (list yasm))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -3161,19 +3108,17 @@ and custom quantization matrices.")
     (build-system python-build-system)
     (home-page "https://github.com/streamlink/streamlink")
     (native-inputs
-     `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-requests-mock" ,python-requests-mock)))
+     (list python-freezegun python-pytest python-mock
+           python-requests-mock))
     (propagated-inputs
-     `(("python-pysocks" ,python-pysocks)
-       ("python-websocket-client" ,python-websocket-client)
-       ("python-iso3166" ,python-iso3166)
-       ("python-iso639" ,python-iso639)
-       ("python-isodate" ,python-isodate)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-pysocks
+           python-websocket-client
+           python-iso3166
+           python-iso639
+           python-isodate
+           python-pycryptodome
+           python-requests
+           python-urllib3))
     (synopsis "Extract streams from various services")
     (description "Streamlink is command-line utility that extracts streams
 from sites like Twitch.tv and pipes them into a video player of choice.")
@@ -3216,8 +3161,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
                                             "/bin"))
                #t)))))
       (inputs
-       `(("python-requests" ,python-requests)
-         ("streamlink" ,streamlink)))
+       (list python-requests streamlink))
       (home-page "https://github.com/BasioMeusPuga/twitchy")
       (synopsis "Command-line interface for Twitch.tv")
       (description
@@ -3249,31 +3193,31 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
                       "-Wl,-rpath="
                       (assoc-ref outputs "out") "/lib")))))))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("alsa-plugins" ,alsa-plugins "pulseaudio")
-       ("ffmpeg" ,ffmpeg)
-       ("fftw" ,fftw)
-       ("frei0r-plugins" ,frei0r-plugins)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("libxml2" ,libxml2)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("libebur128" ,libebur128)
-       ("libexif" ,libexif)
-       ("libvorbis" ,libvorbis)
-       ("rubberband" ,rubberband)
-       ("libsamplerate" ,libsamplerate)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtsvg" ,qtsvg)
-       ("rtaudio" ,rtaudio)
-       ("sdl2" ,sdl2)
-       ("sdl2-image" ,sdl2-image)
-       ("sox" ,sox)
-       ("vidstab" ,vidstab)))
+     (list alsa-lib
+           `(,alsa-plugins "pulseaudio")
+           ffmpeg
+           fftw
+           frei0r-plugins
+           gdk-pixbuf
+           gtk+
+           libxml2
+           jack-1
+           ladspa
+           libebur128
+           libexif
+           libvorbis
+           rubberband
+           libsamplerate
+           pulseaudio
+           qtbase-5
+           qtsvg
+           rtaudio
+           sdl2
+           sdl2-image
+           sox
+           vidstab))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.mltframework.org/")
     (synopsis "Author, manage, and run multitrack audio/video compositions")
     (description
@@ -3308,8 +3252,8 @@ tools, XML authoring components, and an extensible plug-in based API.")
                             "/lib/glib-2.0/include"))
        ,@(package-arguments mlt)))
     (inputs
-     `(("gtk+", gtk+-2)
-       ,@(alist-delete "gtk+" (package-inputs mlt))))))
+     (modify-inputs (package-inputs mlt)
+       (replace "gtk+" gtk+-2)))))
 
 (define-public v4l-utils
   (package
@@ -3358,8 +3302,7 @@ tools, XML authoring components, and an extensible plug-in based API.")
                (rmdir (string-append out "/share/applications"))
                #t))))))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list perl pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("glu" ,glu)
@@ -3417,8 +3360,7 @@ be used for realtime video capture via Linux-specific APIs.")
             (separator #f)                         ;single entry
             (files '("share/obs/obs-plugins")))))
     (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)))
+     (list cmocka pkg-config))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("curl" ,curl)
@@ -3475,8 +3417,7 @@ and JACK.")
      `(#:tests? #f
        #:configure-flags
        (list "-DGLOBAL_INSTALLATION=ON" "-DUSE_CMAKE_LIBDIR=ON")))
-    (inputs `(("obs" ,obs)
-              ("fftw" ,fftw)))
+    (inputs (list obs fftw))
     (home-page "https://github.com/univrsal/spectralizer")
     (synopsis "OBS plugin for audio visualization")
     (description "This OBS plugins allows you to vizualize MPD and internal
@@ -3511,8 +3452,7 @@ OBS audio sources.")
                (("PERMISSIONS") ")"))
              #t)))))
     (inputs
-     `(("obs" ,obs)
-       ("qtbase" ,qtbase-5)))
+     (list obs qtbase-5))
     (home-page "https://github.com/Palakis/obs-websocket")
     (synopsis "OBS plugin for remote control via WebSockets")
     (description "This OBS plugin allows you to establish a WebSocket channel
@@ -3536,12 +3476,10 @@ programs on your current machine or on other machines.")
           "1faiq2gdb7qis3m1hilm4pz8lkmkab75vzm608dbiazahhybf96p"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs `() )
-    (inputs `(("obs" ,obs)
-              ("libx11" ,libx11 "out")
-              ("wayland" ,wayland)
-              ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list obs
+                  `(,libx11 "out") wayland wayland-protocols))
     (home-page "https://hg.sr.ht/~scoopta/wlrobs")
     (synopsis "OBS plugin for Wayland (wlroots) screen capture")
     (description
@@ -3565,11 +3503,9 @@ Wayland compositors.")
           "1hc4mcrbr1yhfiy4zfd8wc2iiqbp90z6jswap0jia20vmyk5lqld"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11 "out")
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list `(,libx11 "out") libxext xorgproto))
     (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
     (synopsis "Video Decode and Presentation API")
     (description "VDPAU is the Video Decode and Presentation API for UNIX.  It
@@ -3599,12 +3535,9 @@ present in modern GPUs.")
            (lambda _
              (invoke "autoreconf" "-fiv"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libx11" ,libx11)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libx11 pkg-config))
     (propagated-inputs
-     `(("libvdpau" ,libvdpau)))
+     (list libvdpau))
     (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
     (synopsis "Tool to query the capabilities of a VDPAU implementation")
     (description "Vdpauinfo is a tool to query the capabilities of a VDPAU
@@ -3632,11 +3565,9 @@ implementation.")
     (arguments
      '(#:tests? #f)) ; Tests require a running X11 server, with VA-API support.
     (native-inputs
-     `(("libvdpau" ,libvdpau)
-       ("pkg-config" ,pkg-config)))
+     (list libvdpau pkg-config))
     (inputs
-     `(("libva" ,libva)
-       ("mesa" ,mesa)))
+     (list libva mesa))
     (home-page "https://github.com/i-rinat/libvdpau-va-gl")
     (synopsis "VDPAU driver with VA-API/OpenGL backend")
     (description
@@ -3660,17 +3591,17 @@ scaling and VA-API (if available) to accelerate video decoding.")
                (base32
                 "17kjgmkl45zma64a5dg1hyvnjkzk4vl8milgi6ic7hlsbmywpig7"))))
     (build-system gnu-build-system)
-    (inputs `(("popt" ,popt)
-              ("zlib" ,zlib)
-              ("libx11" ,libx11)
-              ("libice" ,libice)
-              ("libsm" ,libsm)
-              ("libxfixes" ,libxfixes)
-              ("libxdamage" ,libxdamage)
-              ("libxext" ,libxext)
-              ("alsa-lib" ,alsa-lib)
-              ("libvorbis" ,libvorbis)
-              ("libtheora" ,libtheora)))
+    (inputs (list popt
+                  zlib
+                  libx11
+                  libice
+                  libsm
+                  libxfixes
+                  libxdamage
+                  libxext
+                  alsa-lib
+                  libvorbis
+                  libtheora))
     (home-page "https://enselic.github.io/recordmydesktop/")
     (synopsis "Desktop session video recorder")
     (description
@@ -3698,16 +3629,16 @@ making @dfn{screencasts}.")
     ;; README.md, the program builds and functions properly without them.
     ;; As a result, they are omitted. Please add them back if problems appear.
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ffmpeg" ,ffmpeg)
-       ("glu" ,glu)
-       ("jack" ,jack-1)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     (list alsa-lib
+           ffmpeg
+           glu
+           jack-1
+           libxi
+           libxinerama
+           pulseaudio
+           qtbase-5
+           qtx11extras))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list "-DWITH_QT5=TRUE")
@@ -3743,8 +3674,7 @@ Other features include a live preview and live streaming.")
      ;; GCC 7.  Also, 'configure' does CXXFLAGS=$CFLAGS, hence this hack.
      '(#:configure-flags '("CFLAGS=-O2 -g -std=c++03")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("sdl" ,sdl2)))
     (home-page "https://icculus.org/smpeg/")
@@ -3775,7 +3705,7 @@ and MPEG system streams.")
                (base32
                 "0jfi085rf3fa5xsn0vd3nqf32my8ph9c6a9445y7a8lrlz4dms64"))))
     (inputs
-     `(("sdl" ,sdl)))))
+     (list sdl))))
 
 (define-public libbdplus
   (package
@@ -3789,7 +3719,7 @@ and MPEG system streams.")
        (sha256
         (base32 "02n87lysqn4kg2qk7d1ffrp96c44zkdlxdj0n16hbgrlrpiwlcd6"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libbdplus.html")
     (synopsis "Library for decrypting certain Blu-Ray discs")
@@ -3809,10 +3739,9 @@ specifications.")
        (sha256
         (base32 "11skjqjlldmbjkyxdcz4fmcn6y4p95r1xagbcnjy4ndnzf0l723d"))))
     (inputs
-     `(("libgcrypt" ,libgcrypt)))
+     (list libgcrypt))
     (native-inputs
-     `(("bison" ,bison)
-       ("flex" ,flex)))
+     (list bison flex))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libaacs.html")
     (synopsis "Library for decrypting certain Blu-Ray discs")
@@ -3840,10 +3769,13 @@ Content System specification.")
      ;; test suite results differ depending on the country and also introduce
      ;; non-determinism in the tests.
      ;; https://github.com/mps-youtube/mps-youtube/issues/556
-     `(#:tests? #f))
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  ;; Loading this as a library will create cache directories,
+                  ;; etc; which fails in the build container.
+                  (delete 'sanity-check))))
     (propagated-inputs
-     `(("python-pafy" ,python-pafy)
-       ("python-pygobject" ,python-pygobject))) ; For mpris2 support
+     (list python-pafy python-pygobject)) ; For mpris2 support
     (home-page "https://github.com/mps-youtube/mps-youtube")
     (synopsis "Terminal based YouTube player and downloader")
     (description
@@ -3991,14 +3923,9 @@ of modern, widely supported codecs.")
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libva" ,libva)
-       ("libx11" ,libx11)))
+     (list libdrm libva libx11))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4040,8 +3967,7 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
                 "0ffav46pz3sbj92nipd62z03fibyqgclfq9w8lgr80s6za6zdk5s"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("nasm" ,nasm)
-       ("python" ,python)))
+     (list nasm python))
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           "CC=gcc")
@@ -4080,7 +4006,10 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
     (outputs '("out"
                "static")) ; 3.7MiB .a file
     (arguments
-     `(#:phases
+     `(;; Build as C++2003 to avoid C++11 "narrowing conversion" errors.
+       #:configure-flags '("CXXFLAGS=-O2 -g -std=c++03")
+
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'remove-dates
            (lambda _
@@ -4103,8 +4032,7 @@ post-processing of video formats like MPEG2, H.264/AVC, and VC-1.")
                          (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("help2man" ,help2man)
-       ("dejagnu" ,dejagnu)))
+     (list help2man dejagnu))
     (home-page "https://code.google.com/archive/p/mp4v2/")
     (synopsis "API to create and modify mp4 files")
     (description
@@ -4129,15 +4057,10 @@ practically any type of media.")
                 "1jm4mk539wf3crgpcddgwdixshwdzm37mkb5441lifhcz2mykdsn"))))
     ;; TODO add a Big Buck Bunny webm for tests.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (propagated-inputs
-     `(("zlib" ,zlib)
-       ("tinyxml2" ,tinyxml2)
-       ("curl" ,curl) ; In Requires.private of libmediainfo.pc.
-       ("libzen" ,libzen)))
+     (list zlib tinyxml2 curl ; In Requires.private of libmediainfo.pc.
+           libzen))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; see above TODO
@@ -4192,12 +4115,9 @@ MPEG-2, MPEG-4, DVD (VOB)...
                (base32
                 "07h2a1lbw5ak6c9bcn8qydchl0wpgk945rf9sfcqjyv05h5wll6y"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("libmediainfo" ,libmediainfo)))
+     (list libmediainfo))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; lacks tests
@@ -4248,7 +4168,7 @@ many codecs and formats supported by libmediainfo.")
                (install-file "AtomicParsley" bin))
              #t)))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (synopsis "Metadata editor for MPEG-4 files")
     (description "AtomicParsley is a lightweight command line program for
 reading, parsing and setting metadata into MPEG-4 files, in particular,
@@ -4288,7 +4208,7 @@ iTunes-style metadata.")
                       (invoke "./genMakefiles"
                               "linux-with-shared-libraries"))))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "http://www.live555.com/liveMedia/")
     (synopsis "Set of C++ libraries for multimedia streaming")
     (description "This code forms a set of C++ libraries for multimedia
@@ -4339,11 +4259,11 @@ and ITU-T H.222.0.")
      '(#:configure-flags
        (list "--enable-avresample")))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (propagated-inputs
-     `(("ffmpeg" ,ffmpeg)))
+     (list ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Cross-platform wrapper around ffmpeg/libav")
     (description
       "FFMpegSource is a wrapper library around ffmpeg/libav that allows
@@ -4394,21 +4314,19 @@ programmers to access a standard API to open and decompress media files.")
                     "#include <boost/gil.hpp>"))
                  #t)))))
     (inputs
-     `(("boost" ,boost)
-       ("ffms2" ,ffms2)
-       ("fftw" ,fftw)
-       ("hunspell" ,hunspell)
-       ("mesa" ,mesa)
-       ("libass" ,libass)
-       ("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)
-       ("libx11" ,libx11)
-       ("freetype" ,freetype)
-       ("wxwidgets-gtk2" ,wxwidgets-gtk2)))
+     (list boost
+           ffms2
+           fftw
+           hunspell
+           mesa
+           libass
+           alsa-lib
+           pulseaudio
+           libx11
+           freetype
+           wxwidgets-gtk2))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils pkg-config))
     (home-page "http://www.aegisub.org/")
     (synopsis "Subtitle engine")
     (description
@@ -4436,31 +4354,32 @@ tools for styling them, including a built-in real-time video preview.")
               (url "https://gitlab.gnome.org/GNOME/pitivi.git")
               (commit %version)))
         (file-name (git-file-name name version))
+        (patches (search-patches "pitivi-fix-build-with-meson-0.60.patch"))
         (sha256
          (base32 "08x2fs2bak1fbmkvjijgx1dsawispv91bpv5j5gkqbv5dfgf7wah"))))
      (build-system meson-build-system)
      (inputs
-      `(("glib" ,glib)
-        ("gst-editing-services" ,gst-editing-services)
-        ("gstreamer" ,gstreamer)
-        ("gst-plugins-base" ,gst-plugins-base)
-        ("gst-plugins-good" ,gst-plugins-good)
-        ("gst-plugins-bad"
-         ,(gst-plugins/selection gst-plugins-bad
-                                 #:plugins '("debugutils" "transcoder")
-                                 #:configure-flags '("-Dintrospection=enabled")))
-        ("gst-libav" ,gst-libav)
-        ("gsound" ,gsound)
-        ("gtk+" ,gtk+)
-        ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
-        ("libpeas" ,libpeas)
-        ("libnotify" ,libnotify)
-        ("pango" ,pango)
-        ("python-gst" ,python-gst)
-        ("python-numpy" ,python-numpy)
-        ("python-matplotlib" ,python-matplotlib)
-        ("python-pycairo" ,python-pycairo)
-        ("python-pygobject" ,python-pygobject)))
+      (list glib
+            gst-editing-services
+            gstreamer
+            gst-plugins-base
+            gst-plugins-good
+            (gst-plugins/selection gst-plugins-bad #:plugins
+                                   '("debugutils" "transcode")
+                                   #:configure-flags
+                                   '("-Dintrospection=enabled"))
+            gst-libav
+            gsound
+            gtk+
+            librsvg
+            libpeas
+            libnotify
+            pango
+            python-gst
+            python-numpy
+            python-matplotlib
+            python-pycairo
+            python-pygobject))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
@@ -4468,6 +4387,9 @@ tools for styling them, including a built-in real-time video preview.")
        ("pkg-config" ,pkg-config)))
      (arguments
       `(#:glib-or-gtk? #t
+        ;; Pitivi is not yet compatible with Meson 0.60:
+        ;; https://gitlab.gnome.org/GNOME/pitivi/-/issues/2593
+        #:meson ,meson-0.59
         #:phases
         (modify-phases %standard-phases
           (add-after 'glib-or-gtk-wrap 'wrap-other-dependencies
@@ -4475,7 +4397,7 @@ tools for styling them, including a built-in real-time video preview.")
               (let ((prog (string-append (assoc-ref outputs "out")
                                          "/bin/pitivi")))
                 (wrap-program prog
-                  `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                  `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                   `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
                   ;; We've only added inputs for what Pitivi deems either
                   ;; necessary or optional.  Let the user's packages take
@@ -4507,8 +4429,7 @@ to newbies and professionals alike.")
     (arguments
      '(#:configure-flags '("LIBS=-lm")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("doxygen" ,doxygen)))
+     (list pkg-config doxygen))
     (home-page "http://gmerlin.sourceforge.net")
     (synopsis "Low level library for multimedia API building")
     (description
@@ -4550,10 +4471,9 @@ alpha blending etc).")
              #t)))))
     ;; TODO: opencv for additional face detection filters.
     (inputs
-     `(("gavl" ,gavl)
-       ("cairo" ,cairo)))
+     (list gavl cairo))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.dyne.org/software/frei0r/")
     (synopsis "Minimalistic plugin API for video effects")
     (description
@@ -4648,7 +4568,7 @@ changed.  Or in other words, it can detect motion.")
                        (install-file (string-append source "/subdl") bin)
                        (patch-shebang (string-append bin "/subdl")
                                       (list (string-append python "/bin")))))))
-      (inputs `(("python" ,python)))
+      (inputs (list python))
       (synopsis "Command-line tool for downloading subtitles from opensubtitles.org")
       (description "Subdl is a command-line tool for downloading subtitles from
 opensubtitles.org.  By default, it will search for English subtitles, display
@@ -4685,7 +4605,7 @@ save it to the appropriate filename.")
                (invoke "./configure" (string-append "--prefix=" out)
                        "--disable-static")))))))
     (native-inputs
-     `(("which" ,which)))
+     (list which))
     (home-page "https://l-smash.github.io/l-smash/")
     (synopsis "MP4 multiplexer and demultiplexer library")
     (description
@@ -4776,17 +4696,16 @@ create smoother and stable videos.")
        ("swig" ,swig)
        ("unittest++" ,unittest-cpp)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("zlib" ,zlib)))
+     (list alsa-lib zlib))
     (propagated-inputs                  ;all referenced in installed headers
-     `(("cppzmq" ,cppzmq)
-       ("ffmpeg" ,ffmpeg)
-       ("imagemagick" ,imagemagick)
-       ("jsoncpp" ,jsoncpp)
-       ("libopenshot-audio" ,libopenshot-audio)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia" ,qtmultimedia)
-       ("zeromq" ,zeromq)))
+     (list cppzmq
+           ffmpeg
+           imagemagick
+           jsoncpp
+           libopenshot-audio
+           qtbase-5
+           qtmultimedia
+           zeromq))
     (arguments
      `(#:configure-flags
        (list (string-append "-DPYTHON_MODULE_PATH:PATH=" %output "/lib/python"
@@ -4802,9 +4721,8 @@ create smoother and stable videos.")
              (setenv "ZMQDIR"
                      (assoc-ref inputs "zeromq"))
              (setenv "UNITTEST_DIR"
-                     (string-append (assoc-ref inputs "unittest++")
-                                    "/include/UnitTest++"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "include/UnitTest++")))))))
     (home-page "https://openshot.org")
     (synopsis "Video-editing, animation, and playback library")
     (description "OpenShot Library (libopenshot) is a powerful C++ video
@@ -4832,14 +4750,14 @@ API.  It includes bindings for Python, Ruby, and other languages.")
            (delete-file-recursively "src/images/fonts") #t))))
     (build-system python-build-system)
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("font-dejavu" ,font-dejavu)
-       ("libopenshot" ,libopenshot)
-       ("python" ,python)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyzmq" ,python-pyzmq)
-       ("python-requests" ,python-requests)
-       ("qtsvg" ,qtsvg)))
+     (list ffmpeg
+           font-dejavu
+           libopenshot
+           python
+           python-pyqt
+           python-pyzmq
+           python-requests
+           qtsvg))
     (arguments
      `(#:modules ((guix build python-build-system)
                   (guix build qt-utils)
@@ -4933,26 +4851,26 @@ transitions, and effects and then export your film to many common formats.")
        ("python" ,python-wrapper)
        ("qttools" ,qttools)))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("frei0r-plugins" ,frei0r-plugins)
-       ("jack" ,jack-1)
-       ("ladspa" ,ladspa)
-       ("lame" ,lame)
-       ("libvpx" ,libvpx)
-       ("libx264" ,libx264)
-       ("mlt" ,mlt)
-       ("pulseaudio" ,pulseaudio)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtgraphicaleffects" ,qtgraphicaleffects)
-       ("qtmultimedia" ,qtmultimedia)
-       ("qtquickcontrols" ,qtquickcontrols)
-       ("qtquickcontrols2" ,qtquickcontrols2)
-       ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)
-       ("qtwebsockets" ,qtwebsockets)
-       ("qtx11extras" ,qtx11extras)
-       ("sdl2" ,sdl2)))
+     (list ffmpeg
+           frei0r-plugins
+           jack-1
+           ladspa
+           lame
+           libvpx
+           libx264
+           mlt
+           pulseaudio
+           qtbase-5
+           qtdeclarative
+           qtgraphicaleffects
+           qtmultimedia
+           qtquickcontrols
+           qtquickcontrols2
+           qtsvg
+           qtwebkit
+           qtwebsockets
+           qtx11extras
+           sdl2))
     (home-page "https://www.shotcut.org/")
     (synopsis "Video editor built on the MLT framework")
     (description
@@ -4975,7 +4893,7 @@ and audio capture, network stream playback, and many more.")
         (sha256
          (base32 "0bkps488h9s15ylvkm4fmfywgrpbw570glawpnv6khpq9n223dzl"))))
     (build-system meson-build-system)
-    (native-inputs `(("nasm" ,nasm)))
+    (native-inputs (list nasm))
     (home-page "https://code.videolan.org/videolan/dav1d")
     (synopsis "AV1 decoder")
     (description "dav1d is a new AV1 cross-platform decoder, and focused on
@@ -4999,12 +4917,8 @@ speed and correctness.")
           (base32
            "01qbcgfl3g9kfwn1jf1z9pdj3bvf5lmg71d1vwkcllc2az24bjqp"))))
       (build-system meson-build-system)
-      (native-inputs `(("libdrm" ,libdrm)
-                       ("pkg-config" ,pkg-config)))
-      (inputs `(("ffmpeg" ,ffmpeg)
-                ("pulseaudio" ,pulseaudio)
-                ("wayland" ,wayland)
-                ("wayland-protocols" ,wayland-protocols)))
+      (native-inputs (list libdrm pkg-config))
+      (inputs (list ffmpeg pulseaudio wayland wayland-protocols))
       (home-page "https://github.com/atomnuker/wlstream")
       (synopsis "Screen capture tool for Wayland sessions")
       (description "Wlstream is a screen capture tool for recording audio and
@@ -5029,22 +4943,29 @@ video from a Wayland session.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("python-pygobject" ,python-pygobject)
-       ("gtk+" ,gtk+)
-       ("python-pycairo" ,python-pycairo) ; Required or else clicking on a subtitle line fails.
-       ("python-chardet" ,python-chardet) ; Optional: Character encoding detection.
-       ("gtkspell3" ,gtkspell3)           ; Optional: Inline spell-checking.
-       ("iso-codes" ,iso-codes)           ; Optional: Translations.
-       ("gstreamer" ,gstreamer)
-       ("gst-libav" ,gst-libav)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-bad" ,gst-plugins-bad)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)))
+     (list python-pygobject
+           gtk+
+           python-pycairo ; Required or else clicking on a subtitle line fails.
+           python-chardet ; Optional: Character encoding detection.
+           gtkspell3 ; Optional: Inline spell-checking.
+           iso-codes ; Optional: Translations.
+           gstreamer
+           gst-libav
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-bad
+           gst-plugins-ugly))
     (arguments
      `(#:tests? #f                      ; Tests seem to require networking.
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-builtin-byte-compilation
+           (lambda _
+             ;; The setup.py script attempts to compile bytecode and fails.
+             ;; We compile bytecode in a separate phase, so just disable it.
+             (substitute* "setup.py"
+               (("distutils\\.util\\.byte_compile\\(.*")
+                ""))))
          ;; gaupol's setup.py script does not support one of the Python build
          ;; system's default flags, "--single-version-externally-managed".
          (replace 'install
@@ -5059,8 +4980,7 @@ video from a Wayland session.")
                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
                (wrap-program (string-append out "/bin/gaupol")
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
-             #t))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))))
          (add-after 'unpack 'patch-data-dir
            ;; Fix some path variables that setup.py seems to garble.
            (lambda* (#:key outputs #:allow-other-keys)
@@ -5069,8 +4989,7 @@ video from a Wayland session.")
                  (("DATA_DIR = \\{!r\\}\"\\.format\\(data_dir\\)")
                   (string-append "DATA_DIR = '" out "/share/gaupol'\""))
                  (("LOCALE_DIR = \\{!r\\}\"\\.format\\(locale_dir\\)")
-                  (string-append "LOCALE_DIR = '" out "/share/locale'\"")))
-               #t))))))
+                  (string-append "LOCALE_DIR = '" out "/share/locale'\"")))))))))
     (synopsis "Editor for text-based subtitles")
     (description
      "Gaupol supports multiple subtitle file formats and provides means of
@@ -5112,7 +5031,7 @@ to convenience of translating and batch processing of multiple documents.")
                #t)))))
       (native-inputs
        ;; For tests.
-       `(("sdl2" ,sdl2)))
+       (list sdl2))
       (home-page "https://github.com/FNA-XNA/Theorafile")
       (synopsis "Ogg Theora Video Decoder Library")
       (description "Theorafile is a library for quickly and easily decoding Ogg
@@ -5133,8 +5052,7 @@ Theora videos.  Theorafile was written to be used for FNA's VideoPlayer.")
         (base32 "1rl3h7waqja8blmbpmwy01q9fgr5r0c32b8dy3pbf59bp3xmd37g"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libdvdcss" ,libdvdcss)
-       ("libdvdread" ,libdvdread)))
+     (list libdvdcss libdvdread))
     (home-page "http://dvdbackup.sourceforge.net")
     (synopsis "DVD video ripper")
     (description
@@ -5172,7 +5090,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
                (copy-recursively "../source/Docs" doc)
                #t))))))
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (synopsis "AV1 video codec")
     (description "SVT-AV1 is an AV1 codec implementation.  The encoder is a
 work-in-progress, aiming to support video-on-demand and live streaming
@@ -5207,7 +5125,7 @@ applications.  It only supports Intel-compatible CPUs (x86).")
                (copy-recursively "../source/Docs" doc)
                #t))))))
     (native-inputs
-     `(("yasm" ,yasm)))
+     (list yasm))
     (home-page "https://github.com/OpenVisualCloud/SVT-VP9")
     (synopsis "VP9 video encoder")
     (description "SVT-VP9 is a VP9 video encoder implementation.  It is focused
@@ -5226,6 +5144,8 @@ on supporting video-on-demand and live encoding on Intel Xeon processors.")
        (sha256
         (base32 "1zkgnj2sfvckix360wwk1v5s43g69snm45m0drnzyv7hgf5g7q1q"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (synopsis "Scan ATSC/DVB-C/DVB-S/DVB-T channels")
     (description
      "This is a small command line utility used to perform frequency scans for
@@ -5342,7 +5262,8 @@ for cases where libaom (the reference encoder) is too slow.")
     (build-system meson-build-system)
     (arguments '(#:glib-or-gtk? #t))
     (inputs
-     `(("gtk+" ,gtk+)))
+     `(("gtk+" ,gtk+)
+       ("python" ,python-wrapper)))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gettext" ,gettext-minimal)
@@ -5376,13 +5297,9 @@ can also directly record to WebM or MP4 if you prefer.")
                 "1cw6kpcbl33wh95pvy32xrsrm6kkk1awccr3phyh885xjs3b3iim"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("ffmpeg" ,ffmpeg)
-       ("pulseaudio" ,pulseaudio)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("libx264" ,libx264)))
+     (list ffmpeg pulseaudio wayland wayland-protocols libx264))
     (home-page "https://github.com/ammen99/wf-recorder")
     (synopsis "Screen recorder for wlroots-based compositors")
     (description
@@ -5407,18 +5324,17 @@ wlroots-based compositors.  More specifically, those that support
      ;; There are no tests and "make check" would fail on an intltool error.
      '(#:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("eudev" ,eudev)
-       ("libusb" ,libusb)
-       ("v4l-utils" ,v4l-utils)                   ;libv4l2
-       ("ffmpeg" ,ffmpeg)                         ;libavcodec, libavutil
-       ("sdl2" ,sdl2)
-       ("gsl" ,gsl)
-       ("portaudio" ,portaudio)
-       ("alsa-lib" ,alsa-lib)))
+     (list gtk+
+           eudev
+           libusb
+           v4l-utils ;libv4l2
+           ffmpeg ;libavcodec, libavutil
+           sdl2
+           gsl
+           portaudio
+           alsa-lib))
     (home-page "http://guvcview.sourceforge.net/")
     (synopsis "Control your webcam and capture videos and images")
     (description
@@ -5472,9 +5388,7 @@ brightness, contrast, and frame rate.")
                    prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
                #t))))))
     (inputs
-     `(("perl-mojolicious" ,perl-mojolicious)
-       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-mojolicious perl-lwp-protocol-https perl-xml-libxml))
     (home-page "https://github.com/get-iplayer/get_iplayer")
     (synopsis "Download or stream available BBC iPlayer TV and radio programmes")
     (description "@code{get_iplayer} lists, searches and records BBC iPlayer
@@ -5500,8 +5414,7 @@ BBC iPlayer output.")
                 "1spx81p5wf59ksl3r3gvf78d77sh7gj8a6lw773iv67bphfivmn8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libvorbis" ,libvorbis)
-       ("libdvdread" ,libdvdread)))
+     (list libvorbis libdvdread))
     (synopsis "Information, extraction or creation for OGG media streams")
     (description
      "These tools allow information about (@code{ogminfo}) or extraction from
@@ -5528,7 +5441,7 @@ includes @code{dvdxchap} tool for extracting chapter information from DVD.")
      `(#:tests? #f ; Cannot figure out how to run the unit tests
        #:configure-flags '("-DENABLE_RE2C=ON")))
     (native-inputs
-     `(("re2c" ,re2c)))
+     (list re2c))
     (synopsis "CEA608 / CEA708 closed-caption codec")
     (description "Libcaption creates and parses closed-caption data,
 providing an encoder / decoder for the EIA608 and CEA708 closed-caption
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index aca7c5cac2..642384adfc 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -112,8 +112,7 @@
            (lambda* (#:key inputs #:allow-other-keys)
              ;; One of the tests tests timezone-dependent functions.
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
 
              ;; Make sure the TERM environment variable is set for the tests
              (setenv "TERM" "xterm")
@@ -157,10 +156,7 @@
                           (string-append vimdir "/vimrc"))
                #t))))))
     (inputs
-     `(("gawk" ,gawk)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("tcsh" ,tcsh)))                 ; For runtime/tools/vim32
+     (list gawk ncurses perl tcsh))                 ; For runtime/tools/vim32
     (native-inputs
      `(("libtool" ,libtool)
        ("guix.vim" ,(search-auxiliary-file "guix.vim"))
@@ -248,9 +244,8 @@ with the editor vim.")))
                      (zero? (system (string-append xorg-server "/bin/Xvfb "
                                                     display " &")))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)
-       ,@(package-native-inputs vim)))
+     (modify-inputs (package-native-inputs vim)
+       (prepend pkg-config xorg-server-for-tests)))
     (inputs
      `(("acl" ,acl)
        ("atk" ,atk)
@@ -775,8 +770,7 @@ refactor Vim in order to:
        (modify-phases %standard-phases
          (add-after 'configure 'reference-nvim
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((nvim (string-append (assoc-ref inputs "neovim")
-                                        "/bin/nvim")))
+             (let ((nvim (search-input-file inputs "/bin/nvim")))
                ;; This substitution should change one line, and replaces the default
                ;; value in the struct of options with an absolute store reference.
                (substitute* "../source/src/main.c"
@@ -785,11 +779,9 @@ refactor Vim in order to:
          (add-before 'build 'set-home
            (lambda _ (setenv "HOME" "/tmp"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("efl" ,efl)
-       ("msgpack" ,msgpack)
-       ("neovim" ,neovim)))
+     (list efl msgpack neovim))
     (home-page "https://github.com/jeanguyomarch/eovim/")
     (synopsis "EFL GUI for Neovim")
     (description "Graphical Neovim interface based on the @acronym{EFL, Enlightenment
@@ -841,11 +833,9 @@ and support for fonts with ligatures.")
                 (delete-file-recursively (string-append vifm "/vim")))
               #t)))))
     (native-inputs
-     `(("groff" ,groff))) ; for the documentation
+     (list groff)) ; for the documentation
     (inputs
-     `(("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)))
+     (list libx11 ncurses perl))
     (home-page "https://vifm.info/")
     (synopsis "Flexible vi-like file manager using ncurses")
     (description "Vifm is a file manager providing a @command{vi}-like usage
@@ -890,8 +880,7 @@ With the package comes a plugin to use vifm as a vim file selector.")
                 "13qgwkqbx012j5spis1aw8rb120rw0zphgjy1j58irax8r6j1ikb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-greenlet python-msgpack))
     (arguments
      `(#:tests? #f))
     (home-page "https://github.com/neovim/pynvim")
@@ -1285,7 +1274,7 @@ additions:
                   (string-append all "\n"
                                  leader ctags "/bin/ctags']")))))))))
     (inputs
-     `(("universal-ctags" ,universal-ctags)))
+     (list universal-ctags))
     (home-page "https://github.com/preservim/tagbar")
     (synopsis "Vim plugin that displays tags in a window, ordered by scope")
     (description
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index d29b5f4978..0031037920 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018. 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -174,7 +174,7 @@
      `(#:tests? ,(or (%current-target-system)
                      (not (string=? "i686-linux" (%current-system))))
        #:configure-flags
-       (let ((gcc (string-append (assoc-ref %build-inputs "gcc") "/bin/gcc"))
+       (let ((gcc (search-input-file %build-inputs "/bin/gcc"))
              (out (assoc-ref %outputs "out")))
          (list (string-append "--cc=" gcc)
                ;; Some architectures insist on using HOST_CC.
@@ -250,7 +250,7 @@
          ;; Configure, build and install QEMU user-emulation static binaries.
          (add-after 'configure 'configure-user-static
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((gcc (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
+             (let* ((gcc (search-input-file inputs "/bin/gcc"))
                     (static (assoc-ref outputs "static"))
                     ;; This is the common set of configure flags; it is
                     ;; duplicated here to isolate this phase from manipulations
@@ -336,8 +336,7 @@ exec smbd $@")))
                      ("perl" ,perl)
                      ("flex" ,flex)
                      ("bison" ,bison)
-                     ;; Using meson 0.57.1 enables reproducible QEMU builds.
-                     ("meson" ,meson-next)
+                     ("meson" ,meson)
                      ("ninja" ,ninja)
                      ("pkg-config" ,pkg-config)
                      ("python-wrapper" ,python-wrapper)
@@ -346,7 +345,7 @@ exec smbd $@")))
                      ("texinfo" ,texinfo)
                      ;; The following static libraries are required to build
                      ;; the static output of QEMU.
-                     ("glib-static" ,glib-static)
+                     ("glib:static" ,glib "static")
                      ("pcre:static" ,pcre "static")
                      ("zlib:static" ,zlib "static")))
     (home-page "https://www.qemu.org")
@@ -420,12 +419,22 @@ server and embedded PowerPC, and S390 guests.")
            (delete 'install-user-static)))))
 
     ;; Remove dependencies on optional libraries, notably GUI libraries.
-    (native-inputs (fold alist-delete (package-native-inputs qemu)
-                         '("gettext" "glib:static" "pcre:static" "zlib:static")))
-    (inputs (fold alist-delete (package-inputs qemu)
-                  '("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
-                    "usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2"
-                    "libcacard")))))
+    (native-inputs (modify-inputs (package-native-inputs qemu)
+                     (delete "gettext" "glib:static" "pcre:static"
+                             "zlib:static")))
+    (inputs (modify-inputs (package-inputs qemu)
+              (delete "libusb"
+                      "mesa"
+                      "sdl2"
+                      "spice"
+                      "virglrenderer"
+                      "gtk+"
+                      "usbredir"
+                      "libdrm"
+                      "libepoxy"
+                      "pulseaudio"
+                      "vde2"
+                      "libcacard")))))
 
 (define (system->qemu-target system)
   (cond
@@ -489,8 +498,7 @@ server and embedded PowerPC, and S390 guests.")
                  (("/usr/include") include)))))
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("nasm" ,nasm)
-       ("perl" ,perl)))
+     (list nasm perl))
     (synopsis "Library for x86 emulation")
     (description "Libx86emu is a small library to emulate x86 instructions.  The
 focus here is not a complete emulation but to cover enough for typical
@@ -522,8 +530,7 @@ firmware blobs.  You can
                                        "ganeti-sphinx-compat.patch"
                                        "ganeti-haskell-compat.patch"
                                        "ganeti-haskell-pythondir.patch"
-                                       "ganeti-disable-version-symlinks.patch"
-                                       "ganeti-preserve-PYTHONPATH.patch"))))
+                                       "ganeti-disable-version-symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:imported-modules (,@%gnu-build-system-modules
@@ -531,7 +538,7 @@ firmware blobs.  You can
                            (guix build python-build-system))
        #:modules (,@%gnu-build-system-modules
                   ((guix build haskell-build-system) #:prefix haskell:)
-                  ((guix build python-build-system) #:select (python-version))
+                  ((guix build python-build-system) #:select (site-packages))
                   (srfi srfi-1)
                   (srfi srfi-26)
                   (ice-9 match)
@@ -631,7 +638,8 @@ firmware blobs.  You can
              ;; .sphinx-build-real executable name created by the Sphinx wrapper.
              (substitute* "configure"
                (("\\$SPHINX --version 2>&1")
-                "$SPHINX --version 2>&1 | sed 's/.sphinx-build-real/sphinx-build/g'"))))
+                "$SPHINX --version 2>&1 \
+| sed 's/.sphinx-build-real/sphinx-build/g'"))))
 
          ;; The build system invokes Cabal and GHC, which do not work with
          ;; GHC_PACKAGE_PATH: <https://github.com/haskell/cabal/issues/3728>.
@@ -678,34 +686,16 @@ firmware blobs.  You can
                 "")
                ;; This test requires networking.
                (("test/py/import-export_unittest\\.bash")
-                ""))
-
-             ;; Many of the Makefile targets reset PYTHONPATH before running
-             ;; the Python interpreter, which does not work very well for us.
-             (substitute* "Makefile"
-               (("PYTHONPATH=")
-                (string-append "PYTHONPATH=" (getenv "PYTHONPATH") ":")))))
+                ""))))
          (add-after 'build 'build-bash-completions
            (lambda _
-             (let ((orig-pythonpath (getenv "PYTHONPATH")))
-               (setenv "PYTHONPATH" (string-append ".:" orig-pythonpath))
-               (invoke "./autotools/build-bash-completion")
-               (setenv "PYTHONPATH" orig-pythonpath))))
+             (setenv "PYTHONPATH" ".")
+             (invoke "./autotools/build-bash-completion")
+             (unsetenv "PYTHONPATH")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Set TZDIR so that time zones are found.
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo"))
-
-             ;; This test checks whether PYTHONPATH is untouched, and extends
-             ;; it to include test directories if so.  Add an else branch for
-             ;; our modified PYTHONPATH, in order to prevent a confusing test
-             ;; failure where expired certificates are not cleaned because
-             ;; check-cert-expired is silently crashing.
-             (substitute* "test/py/ganeti-cleaner_unittest.bash"
-               (("then export PYTHONPATH=(.*)" all testpath)
-                (string-append all "else export PYTHONPATH="
-                               (getenv "PYTHONPATH") ":" testpath "\n")))
+             (setenv "TZDIR" (search-input-directory inputs "share/zoneinfo"))
 
              (substitute* "test/py/ganeti.utils.process_unittest.py"
                ;; This test attempts to run an executable with
@@ -758,19 +748,16 @@ firmware blobs.  You can
                                         ((commands ... prog)
                                          (cons (basename prog) progs))))
                                 (loop (read-line port) progs)))))))))))
-         ;; Wrap all executables with PYTHONPATH.  We can't borrow the phase
-         ;; from python-build-system because we also need to wrap the scripts
-         ;; in $out/lib/ganeti such as "node-daemon-setup".
+         ;; Wrap all executables with GUIX_PYTHONPATH.  We can't borrow
+         ;; the phase from python-build-system because we also need to wrap
+         ;; the scripts in $out/lib/ganeti such as "node-daemon-setup".
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (sbin (string-append out "/sbin"))
                     (lib (string-append out "/lib"))
-                    (python (assoc-ref inputs "python"))
-                    (major+minor (python-version python))
-                    (PYTHONPATH (string-append lib "/python" major+minor
-                                               "/site-packages:"
-                                               (getenv "PYTHONPATH"))))
+                    (PYTHONPATH (string-append (site-packages inputs outputs)
+                                               ":" (getenv "GUIX_PYTHONPATH"))))
                (define (shell-script? file)
                  (call-with-ascii-input-file file
                    (lambda (port)
@@ -791,7 +778,8 @@ firmware blobs.  You can
 
                (for-each (lambda (file)
                            (wrap-program file
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
+                             `("GUIX_PYTHONPATH" ":" prefix
+                               (,PYTHONPATH))))
                          (append-map (cut find-files <> wrap?)
                                      (list (string-append lib "/ganeti")
                                            sbin)))))))))
@@ -894,8 +882,7 @@ commodity hardware.")
     (arguments
      '(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("util-linux" ,util-linux)
        ("qemu-img" ,qemu-minimal)))
@@ -986,8 +973,7 @@ Guix to build virtual machines.")
                                  "variants.list"))
                       #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
      `(("debianutils" ,debianutils)
        ("debootstrap" ,debootstrap)
@@ -1003,7 +989,7 @@ Debian or a derivative using @command{debootstrap}.")
 (define-public libosinfo
   (package
     (name "libosinfo")
-    (version "1.7.1")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
@@ -1011,7 +997,7 @@ Debian or a derivative using @command{debootstrap}.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "1s97sv24bybggjx6hgqba2qdqz3ivfpd4cmkh4zm5y59sim109mv"))))
+         "0nd360c9ampw8hb6xh5g45q858df2r4jj9q88bcl6gzgaj0l3wxl"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -1026,13 +1012,12 @@ Debian or a derivative using @command{debootstrap}.")
              (substitute* "osinfo/osinfo_loader.c"
                (("path = DATA_DIR.*")
                 (string-append "path = \"" (assoc-ref inputs "osinfo-db")
-                               "/share/osinfo\";")))
-             #t)))))
+                               "/share/osinfo\";"))))))))
     (inputs
-     `(("libsoup" ,libsoup)
+     `(("libsoup" ,libsoup-minimal-2)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
-       ("osinfo-db" ,osinfo-db)))
+       ("osinfo-db" ,osinfo-db-next)))
     (native-inputs
      `(("glib" ,glib "bin")  ; glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
@@ -1081,13 +1066,9 @@ all common programming languages.  Vala bindings are also provided.")
                 "1sgsic9dzj3wv2k5bx2vhcgappivhp1glkqfc2yrgr6jas052351"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook2x" ,docbook2x)))
+     (list pkg-config docbook2x))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libcap" ,libcap)
-       ("libseccomp" ,libseccomp)
-       ("libselinux" ,libselinux)))
+     (list gnutls libcap libseccomp libselinux))
     (arguments
      `(#:configure-flags
        (list (string-append "--docdir=" (assoc-ref %outputs "out")
@@ -1131,12 +1112,9 @@ manage system or application containers.")
     (arguments
      '(#:configure-flags '("--localstatedir=/var")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("fuse" ,fuse)))
+     (list fuse))
     (build-system gnu-build-system)
     (synopsis "FUSE-based file system for LXC")
     (description "LXCFS is a small FUSE file system written with the intention
@@ -1221,11 +1199,11 @@ It started as a side project of LXC but can be used by any run-time.")
                  (install-file "scripts/bash/lxd" completions-dir)))
              #t)))))
     (native-inputs
-     `(;; test dependencies:
-       ;; ("go-github-com-rogpeppe-godeps" ,go-github-com-rogpeppe-godeps)
-       ;; ("go-github-com-tsenart-deadcode" ,go-github-com-tsenart-deadcode)
-       ;; ("go-golang-org-x-lint" ,go-golang-org-x-lint)
-       ("pkg-config" ,pkg-config)))
+     (list ;; test dependencies:
+           ;; ("go-github-com-rogpeppe-godeps" ,go-github-com-rogpeppe-godeps)
+           ;; ("go-github-com-tsenart-deadcode" ,go-github-com-tsenart-deadcode)
+           ;; ("go-golang-org-x-lint" ,go-golang-org-x-lint)
+           pkg-config))
     (inputs
      `(("acl" ,acl)
        ("eudev" ,eudev)
@@ -1257,14 +1235,14 @@ pretty simple, REST API.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "7.6.0")
+    (version "7.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/libvirt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0hb1fq0yx41n36c3n1a54b5p37n0m7abs917d76v7aqas03735lg"))
+        (base32 "131fyxb05rrcr9ih4mhhjyw3cgsxh5l12vj4y109q9vlynsz5742"))
        (patches (search-patches "libvirt-add-install-prefix.patch"))))
     (build-system meson-build-system)
     (arguments
@@ -1285,7 +1263,6 @@ pretty simple, REST API.")
              (string-append "-Dinstall_prefix=" (assoc-ref %outputs "out"))
              "--sysconfdir=/etc"
              "--localstatedir=/var")
-       #:meson ,meson-0.55
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-directory-confusion
@@ -1359,22 +1336,17 @@ to integrate other virtualization mechanisms if needed.")
                (base32
                 "1gdcvqz88qkp402zra9csc6391f2xki1270x683n6ixakl3gf8w4"))))
     (build-system meson-build-system)
+    (arguments
+     `(#:meson ,meson-0.59))          ;KeyError: 'install_dir' with meson 0.60
     (inputs
-     `(("openssl" ,openssl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("lvm2" ,lvm2)                   ; for libdevmapper
-       ("libyajl" ,libyajl)))
+     (list openssl cyrus-sasl lvm2 ; for libdevmapper
+           libyajl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib" ,glib "bin")
-       ("vala" ,vala)))
+     (list pkg-config intltool
+           `(,glib "bin") vala))
     (propagated-inputs
      ;; ‘Required:’ by the installed .pc files.
-     `(("glib" ,glib)
-       ("libvirt" ,libvirt)
-       ("libxml2" ,libxml2)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list glib libvirt libxml2 gobject-introspection))
     (home-page "https://libvirt.org")
     (synopsis "GLib wrapper around libvirt")
     (description "libvirt-glib wraps the libvirt library to provide a
@@ -1392,14 +1364,14 @@ three libraries:
 (define-public python-libvirt
   (package
     (name "python-libvirt")
-    (version "7.3.0")
+    (version "7.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/python/libvirt-python-"
                            version ".tar.gz"))
        (sha256
-        (base32 "15pn8610ybf03xff3vbz3apz2ph42k2kh6k19r020l9nvc6jcv37"))))
+        (base32 "0nakisj2ady5a41k4zc95k0kp749f4ppmxgr91b1h1dzbzxcydc5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1414,12 +1386,11 @@ three libraries:
                (setenv "LIBVIRT_API_COVERAGE" "whynot")
                (invoke "python" "setup.py" "test")))))))
     (inputs
-     `(("libvirt" ,libvirt)))
+     (list libvirt))
     (propagated-inputs
-     `(("python-lxml" ,python-lxml)))
+     (list python-lxml))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-pytest" ,python-pytest)))
+     (list pkg-config python-pytest))
     (home-page "https://libvirt.org")
     (synopsis "Python bindings to libvirt")
     (description "This package provides Python bindings to the libvirt
@@ -1462,8 +1433,8 @@ virtualization library.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Xen is not available for now - so only patch qemu.
              (substitute* "virtManager/createconn.py"
-               (("/usr(/bin/qemu-system)" _ suffix)
-                (string-append (assoc-ref inputs "qemu") suffix)))
+               (("/usr(/bin/qemu-system-[a-zA-Z0-9_-]+)" _ suffix)
+                (search-input-file inputs suffix)))
              #t))
          (add-before 'wrap 'wrap-with-GI_TYPELIB_PATH
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -1497,26 +1468,26 @@ virtualization library.")
              #t))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
-         (add-after 'install 'glib-or-gtk-wrap
+         (add-after 'wrap 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (inputs
-     `(("dconf" ,dconf)
-       ("gtk+" ,gtk+)
-       ("gtk-vnc" ,gtk-vnc)
-       ("gtksourceview" ,gtksourceview)
-       ("libvirt" ,libvirt)
-       ("libvirt-glib" ,libvirt-glib)
-       ("libosinfo" ,libosinfo)
-       ("vte" ,vte)
-       ("python-libvirt" ,python-libvirt)
-       ("python-requests" ,python-requests)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-libxml2" ,python-libxml2)
-       ("spice-gtk" ,spice-gtk)))
+     (list dconf
+           gtk+
+           gtk-vnc
+           gtksourceview
+           libvirt
+           libvirt-glib
+           libosinfo
+           vte
+           python-libvirt
+           python-requests
+           python-pycairo
+           python-pygobject
+           python-libxml2
+           spice-gtk))
     ;; virt-manager searches for qemu-img or kvm-img in the PATH.
     (propagated-inputs
-     `(("qemu" ,qemu)))
+     (list qemu))
     (native-inputs
      `(("glib" ,glib "bin")             ; glib-compile-schemas
        ("gobject-introspection" ,gobject-introspection)
@@ -1562,11 +1533,13 @@ domains, their live performance and resource utilization statistics.")
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              (string-append "LIBDIR=" (assoc-ref %outputs "out")
                             "/lib")
-             (string-append "ASCIIDOC=" (assoc-ref %build-inputs "asciidoc")
-                            "/bin/asciidoc")
+             (string-append "ASCIIDOC="
+                            (search-input-file %build-inputs
+                                               "/bin/asciidoc"))
              (string-append "PYTHON=python3")
-             (string-append "XMLTO=" (assoc-ref %build-inputs "xmlto")
-                            "/bin/xmlto"))
+             (string-append "XMLTO="
+                            (search-input-file %build-input
+                                               "/bin/xmlto")))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)            ; no configure script
@@ -1591,8 +1564,9 @@ domains, their live performance and resource utilization statistics.")
              ;; /usr/include/..., which obviously does not exist.
              (let* ((file "google/protobuf/descriptor.proto")
                     (target (string-append "images/" file))
-                    (source (string-append (assoc-ref inputs "protobuf")
-                                           "/include/" file)))
+                    (source (search-input-file
+                             inputs
+                             (string-append "include/" file))))
                (delete-file target)
                (symlink source target))))
          (add-after 'install 'wrap
@@ -1603,9 +1577,9 @@ domains, their live performance and resource utilization statistics.")
                                          ,(version-major+minor
                                            (package-version python))
                                          "/site-packages"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/crit")
-                 `("PYTHONPATH" ":" prefix (,site ,path))))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,site ,path))))))
          (add-after 'install 'delete-static-libraries
            ;; Not building/installing these at all doesn't seem to be supported.
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1623,13 +1597,13 @@ domains, their live performance and resource utilization statistics.")
        ("libbsd" ,libbsd)
        ("nftables" ,nftables)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("protobuf-c" ,protobuf-c)
-       ("asciidoc" ,asciidoc)
-       ("xmlto" ,xmlto)
-       ("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)))
+     (list pkg-config
+           perl
+           protobuf-c
+           asciidoc
+           xmlto
+           docbook-xml
+           docbook-xsl))
     (home-page "https://criu.org")
     (synopsis "Checkpoint and restore in user space")
     (description "Using this tool, you can freeze a running application (or
@@ -1697,9 +1671,7 @@ Machine Protocol.")
                ("sdl2-ttf" ,sdl2-ttf)
                ("spice-protocol" ,spice-protocol)
                ("wayland" ,wayland)))
-     (native-inputs `(("libconfig" ,libconfig)
-                      ("nettle" ,nettle)
-                      ("pkg-config" ,pkg-config)))
+     (native-inputs (list libconfig nettle pkg-config))
      (arguments
       `(#:tests? #f ;; No tests are available.
         #:make-flags '("CC=gcc")
@@ -1772,7 +1744,7 @@ monitor/GPU.")
      `(("go-md2man" ,go-github-com-go-md2man)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libseccomp" ,libseccomp)))
+     (list libseccomp))
     (synopsis "Open container initiative runtime")
     (home-page "https://opencontainers.org/")
     (description
@@ -1844,17 +1816,16 @@ Open Container Initiative (OCI) image layout and its tagged images.")
                 "0n22sdif437ddg5ch0ipwim3fg0n6ihc9bfi52qkhy3r1grz04hs"))))
     (build-system go-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("go-github-com-go-md2man" ,go-github-com-go-md2man)))
+     (list pkg-config go-github-com-go-md2man))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("eudev" ,eudev)
-       ("libassuan" ,libassuan)
-       ("libselinux" ,libselinux)
-       ("libostree" ,libostree)
-       ("lvm2" ,lvm2)
-       ("glib" ,glib)
-       ("gpgme" ,gpgme)))
+     (list btrfs-progs
+           eudev
+           libassuan
+           libselinux
+           libostree
+           lvm2
+           glib
+           gpgme))
     (arguments
      '(#:import-path "github.com/containers/skopeo"
        #:install-source? #f
@@ -1965,7 +1936,7 @@ virtual machines.")
              (delete-file-recursively (string-append (assoc-ref outputs "out") "/tmp"))
              #t)))))
     (inputs
-     `(("libcap" ,libcap)))
+     (list libcap))
     (native-inputs
      `(("python" ,python-wrapper)
        ("util-linux" ,util-linux)))
@@ -1994,7 +1965,7 @@ by default and can be made read-only.")
     (arguments
      `(#:tests? #f))                    ; no tests exist
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (home-page "http://bochs.sourceforge.net/")
     (synopsis "Emulator for x86 PC")
     (description
@@ -2213,7 +2184,7 @@ which is a hypervisor.")
 (define-public osinfo-db-tools
   (package
     (name "osinfo-db-tools")
-    (version "1.8.0")
+    (version "1.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://releases.pagure.org/libosinfo/osinfo-db-tools-"
@@ -2221,23 +2192,19 @@ which is a hypervisor.")
 
               (sha256
                (base32
-                "038q3gzdbkfkhpicj0755mw1q4gbvn57pslpw8n2dp3lds9im0g9"))))
+                "1h23a8nzdxjyvw44dwh903563n3b1z5skx8g0b1p1v5cif3iqpr5"))))
     (build-system meson-build-system)
     (inputs
-     `(("libsoup" ,libsoup)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("json-glib" ,json-glib)
-       ("libarchive" ,libarchive)))
+     (list libsoup-minimal-2 libxml2 libxslt json-glib libarchive))
     (native-inputs
-     `(("perl" ,perl)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ;; Tests
-       ("python" ,python)
-       ("pytest" ,python-pytest)
-       ("requests" ,python-requests)))
+     (list perl
+           gobject-introspection
+           gettext-minimal
+           pkg-config
+           ;; Tests
+           python
+           python-pytest
+           python-requests))
     (home-page "https://gitlab.com/libosinfo/osinfo-db-tools")
     (synopsis "Tools for managing the osinfo database")
     (description "This package contains a set of tools to assist
@@ -2270,8 +2237,7 @@ administrators and developers in managing the database.")
            (mkdir-p osinfo-dir)
            (invoke osinfo-db-import "--dir" osinfo-dir source)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("osinfo-db-tools" ,osinfo-db-tools)))
+     (list intltool osinfo-db-tools))
     (home-page "https://gitlab.com/libosinfo/osinfo-db")
     (synopsis "Database of information about operating systems")
     (description "Osinfo-db provides the database files for use with the
@@ -2279,6 +2245,19 @@ libosinfo library.  It provides information about guest operating systems for
 use with virtualization provisioning tools")
     (license license:lgpl2.0+)))
 
+;; XXX: Support for guix-1.3 has been added upstream but no release were
+;; created. Remove it when a new osinfo-db release is out.
+(define-public osinfo-db-next
+  (package
+    (inherit osinfo-db)
+    (version "20211127")
+    (source (origin
+              (method url-fetch)
+              (uri "https://othacehe.org/files/osinfo-db-20211127.tar.xz")
+              (sha256
+               (base32
+                "0kvgdsvpm51a6vqs4k6zmdbc5vvj8mnsgm4pa7h79d9gg244gb3s"))))))
+
 (define-public python-transient
   (package
     (name "python-transient")
@@ -2301,20 +2280,16 @@ use with virtualization provisioning tools")
                          ">="))
                       #t)))))
     (propagated-inputs
-     `(("python-beautifultable" ,python-beautifultable)
-       ("python-click" ,python-click)
-       ("python-importlib-resources"
-        ,python-importlib-resources)
-       ("python-lark-parser" ,python-lark-parser)
-       ("python-marshmallow" ,python-marshmallow)
-       ("python-progressbar2" ,python-progressbar2)
-       ("python-requests" ,python-requests)
-       ("python-toml" ,python-toml)))
+     (list python-beautifultable
+           python-click
+           python-importlib-resources
+           python-lark-parser
+           python-marshmallow
+           python-progressbar2
+           python-requests
+           python-toml))
     (native-inputs
-     `(("python-black" ,python-black)
-       ("python-mypy" ,python-mypy)
-       ("python-pyhamcrest" ,python-pyhamcrest)
-       ("python-twine" ,python-twine)))
+     (list python-black python-mypy python-pyhamcrest python-twine))
     (home-page
      "https://github.com/ALSchwalm/transient")
     (synopsis
diff --git a/gnu/packages/vlang.scm b/gnu/packages/vlang.scm
index def858da17..108e09d450 100644
--- a/gnu/packages/vlang.scm
+++ b/gnu/packages/vlang.scm
@@ -102,7 +102,7 @@
               (copy-file "v.mod" vmod))
             #t)))))
    (inputs
-    `(("glib" ,glib)))
+    (list glib))
    (native-inputs
     `(("vc"
        ;; Versions are not consistently tagged, but the matching commit will
diff --git a/gnu/packages/vnc.scm b/gnu/packages/vnc.scm
index 10ae2b6e87..924e219f10 100644
--- a/gnu/packages/vnc.scm
+++ b/gnu/packages/vnc.scm
@@ -119,7 +119,7 @@
        ("ffmpeg" ,ffmpeg)
        ("freerdp" ,freerdp)             ; for rdp plugin
        ("gcrypt" ,libgcrypt)
-       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("librsvg" ,librsvg)
        ("glib" ,glib)
        ("gnome-keyring" ,gnome-keyring)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
@@ -127,7 +127,7 @@
        ("harfbuzz" ,harfbuzz)
        ("json-glib" ,json-glib)
        ("libsecret" ,libsecret)         ; for secret plugin
-       ("libsoup" ,libsoup)
+       ("libsoup" ,libsoup-minimal-2)
        ("libssh" ,libssh)               ; for ssh plugin
        ("libvnc" ,libvnc)               ; for vnc plugin
        ("openssl" ,openssl)
@@ -145,7 +145,7 @@
        ("xdg-utils" ,xdg-utils)
        ("xkbfile" ,libxkbfile)))        ; for nx plugin
     (propagated-inputs
-     `(("dconf" ,dconf)))
+     (list dconf))
     (home-page "https://remmina.org/")
     (synopsis "Remote Desktop Client")
     (description "Remmina is a client to use other desktops remotely.
@@ -175,21 +175,19 @@ RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network protocols are supported.")
                       (with-directory-excursion "vncviewer"
                         (invoke "make" "install")))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("gettext-minimal" ,gettext-minimal)
-       ("automake" ,automake)))
+     (list autoconf gettext-minimal automake))
     (inputs
-     `(("zlib" ,zlib)
-       ("gnutls" ,gnutls)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("fltk" ,fltk)
-       ("linux-pam" ,linux-pam)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxtst" ,libxtst)
-       ("libxrandr" ,libxrandr)
-       ("libxdamage" ,libxdamage)
-       ("pixman" ,pixman)))
+     (list zlib
+           gnutls
+           libjpeg-turbo
+           fltk
+           linux-pam
+           libx11
+           libxext
+           libxtst
+           libxrandr
+           libxdamage
+           pixman))
     (home-page "https://tigervnc.org/")
     (synopsis "High-performance, platform-neutral
 implementation of VNC (client)")
@@ -227,13 +225,11 @@ application which is needed to connect to VNC servers.")
        ,@(package-inputs tigervnc-client)
        ,@(package-native-inputs xorg-server)))
     (inputs
-     `(("perl" ,perl)
-       ("coreutils" ,coreutils)
-       ("xauth" ,xauth)
-       ,@(package-inputs xorg-server)))
+     (modify-inputs (package-inputs xorg-server)
+       (prepend perl coreutils xauth)))
     (propagated-inputs
-     `(("xauth" ,xauth)
-       ,@(package-propagated-inputs xorg-server)))
+     (modify-inputs (package-propagated-inputs xorg-server)
+       (prepend xauth)))
     (arguments
      (substitute-keyword-arguments
          (package-arguments xorg-server)
@@ -362,7 +358,7 @@ where the server is installed.")))
                          "gcc -I"))
                       #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gnutls" ,gnutls)
        ("libgcrypt" ,libgcrypt)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index a59762f733..358913d5db 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2016, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
 ;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -240,7 +240,7 @@
          (add-after 'python-wrap 'qt-wrap
            (assoc-ref qt:%standard-phases 'qt-wrap)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("iproute" ,iproute)
        ("iptables" ,iptables)
@@ -254,19 +254,13 @@
        ("qtquickcontrols" ,qtquickcontrols)
        ("qtquickcontrols2" ,qtquickcontrols2)))
     (propagated-inputs
-     `(("go-0xacab-org-leap-shapeshifter"
-        ,go-0xacab-org-leap-shapeshifter)
-       ("go-github-com-apparentlymart-go-openvpn-mgmt"
-        ,go-github-com-apparentlymart-go-openvpn-mgmt)
-       ("go-github-com-emersion-go-autostart"
-        ,go-github-com-emersion-go-autostart)
-       ("go-github-com-keybase-go-ps"
-        ,go-github-com-keybase-go-ps)
-       ("go-github-com-rakyll-statik"
-        ,go-github-com-rakyll-statik)
-       ("go-github-com-sevlyar-go-daemon"
-        ,go-github-com-sevlyar-go-daemon)
-       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+     (list go-0xacab-org-leap-shapeshifter
+           go-github-com-apparentlymart-go-openvpn-mgmt
+           go-github-com-emersion-go-autostart
+           go-github-com-keybase-go-ps
+           go-github-com-rakyll-statik
+           go-github-com-sevlyar-go-daemon
+           go-golang-org-x-sys))
     (synopsis "Generic VPN client by LEAP")
     (description "Bitmask, by @acronym{LEAP, LEAP Encryption Access Project},
 is an application to provide easy and secure encrypted communication with a
@@ -289,9 +283,8 @@ Networks and The Calyx Institute, where the former is default.")
                 "1cz8n75ksl0l908zc5l3rnfm1hv7130s2w8710799fr5sxrdbszi"))))
     (build-system gnu-build-system)
     (home-page "http://software.schmorp.de/pkg/gvpe.html")
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("openssl" ,openssl)
-              ("zlib" ,zlib)))
+    (native-inputs (list pkg-config))
+    (inputs (list openssl zlib))
     (synopsis "Secure VPN among multiple nodes over an untrusted network")
     (description
      "The GNU Virtual Private Ethernet creates a virtual network
@@ -323,7 +316,7 @@ endpoints.")
                                "/bin/" command)))
              (substitute* "src/libstrongswan/utils/process.c"
                (("/bin/sh")
-                (string-append (assoc-ref inputs "bash") "/bin/sh")))
+                (search-input-file inputs "/bin/sh")))
 
              (substitute* "src/libstrongswan/tests/suites/test_process.c"
                (("/bin/sh") (which "sh"))
@@ -331,8 +324,8 @@ endpoints.")
                (("cat") (which "cat")))))
          (add-before 'check 'set-up-test-environment
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
-                                            "/share/zoneinfo")))))
+             (setenv "TZDIR"
+                     (search-input-directory inputs "share/zoneinfo")))))
        #:configure-flags
        (list
         "--disable-ldap"
@@ -384,18 +377,16 @@ endpoints.")
         ;; Use libcap by default.
         "--with-capabilities=libcap")))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("curl" ,curl)
-       ("gmp" ,gmp)
-       ("libcap" ,libcap)
-       ("libgcrypt" ,libgcrypt)
-       ("libsoup" ,libsoup)
-       ("linux-pam" ,linux-pam)
-       ("openssl" ,openssl)))
+     (list coreutils
+           curl
+           gmp
+           libcap
+           libgcrypt
+           libsoup
+           linux-pam
+           openssl))
     (native-inputs
-     `(("coreutils" ,coreutils)
-       ("pkg-config" ,pkg-config)
-       ("tzdata" ,tzdata-for-tests)))
+     (list coreutils pkg-config tzdata-for-tests))
     (synopsis "IKEv1/v2 keying daemon")
     (description "StrongSwan is an IPsec implementation originally based upon
 the FreeS/WAN project.  It contains support for IKEv1, IKEv2, MOBIKE, IPv6,
@@ -441,9 +432,7 @@ file for more details.")
             (sha256 (base32
                      "1128860lis89g1s21hqxvap2nq426c9j4bvgghncc1zj0ays7kj6"))))
    (build-system gnu-build-system)
-   (inputs `(("libgcrypt" ,libgcrypt)
-             ("perl" ,perl)
-             ("vpnc-scripts" ,vpnc-scripts)))
+   (inputs (list libgcrypt perl vpnc-scripts))
    (arguments
     `(#:tests? #f ; there is no check target
       #:phases
@@ -488,13 +477,13 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                  (base32
                   "1pmi4n58q81pmn9arvfixhvv6vkkf3rpwac3hwnwyl882q5q0ccx"))))
       (build-system gnu-build-system)
-      (inputs `(("guile" ,guile-3.0) ; for the wrapper scripts
-                ("coreutils" ,coreutils)
-                ("grep" ,grep)
-                ("iproute2" ,iproute)    ; for ‘ip’
-                ("net-tools" ,net-tools) ; for ‘ifconfig’, ‘route’
-                ("sed" ,sed)
-                ("which" ,which)))
+      (inputs (list guile-3.0 ; for the wrapper scripts
+                    coreutils
+                    grep
+                    iproute ; for ‘ip’
+                    net-tools ; for ‘ifconfig’, ‘route’
+                    sed
+                    which))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -529,10 +518,12 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
              ;; Wrap scripts with paths to their common hard dependencies.
              ;; Optional dependencies will need to be installed by the user.
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
+               (let ((out (assoc-ref outputs "out"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (script)
                     (wrap-script (string-append out "/etc/vpnc/" script)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (name)
                                 (let ((input (assoc-ref inputs name)))
@@ -579,10 +570,9 @@ the entire VPN in a network namespace accessible only through SSH.")
                 "03323nnhb4y9nzwva04mq7xg03dvdrgp689g89f69jqc261skcqx"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list autoconf automake))
     (inputs
-     `(("libevent" ,libevent)))
+     (list libevent))
     (home-page "https://github.com/cernekee/ocproxy")
     (synopsis "OpenConnect proxy")
     (description
@@ -604,12 +594,9 @@ the user specifically asks to proxy, so the @dfn{VPN} interface no longer
              (base32 "1cdsx4nsrwawbsisfkldfc9i4qn60g03vxb13nzppr2br9p4rrih"))))
    (build-system gnu-build-system)
    (propagated-inputs
-    `(("libxml2" ,libxml2)
-      ("gnutls" ,gnutls)
-      ("zlib" ,zlib)))
+    (list libxml2 gnutls zlib))
    (inputs
-    `(("lz4" ,lz4)
-      ("vpnc-scripts" ,vpnc-scripts)))
+    (list lz4 vpnc-scripts))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("pkg-config" ,pkg-config)))
@@ -661,26 +648,26 @@ and probably others.")
                                        (assoc-ref inputs "qtwebengine")
                                        "/lib/qt5/libexec/QtWebEngineProcess")))
                (wrap-program bin
+                 #:sh (search-input-file inputs "bin/bash")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (inputs
-     `(("openconnect" ,openconnect)
-       ("python-attrs" ,python-attrs)
-       ("python-colorama" ,python-colorama)
-       ("python-keyring" ,python-keyring)
-       ("python-lxml" ,python-lxml)
-       ("python-prompt-toolkit" ,python-prompt-toolkit)
-       ("python-requests" ,python-requests)
-       ("python-pyqt" ,python-pyqt)
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pysocks" ,python-pysocks)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-structlog" ,python-structlog)
-       ("python-toml" ,python-toml)
-       ("qtwebengine" ,qtwebengine)))
+     (list openconnect
+           python-attrs
+           python-colorama
+           python-keyring
+           python-lxml
+           python-prompt-toolkit
+           python-requests
+           python-pyqt
+           python-pyqtwebengine
+           python-pysocks
+           python-pyxdg
+           python-structlog
+           python-toml
+           qtwebengine))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-setuptools-scm" ,python-setuptools-scm)))
+     (list python-pytest python-setuptools-scm))
     (home-page "https://github.com/vlaci/openconnect-sso")
     (synopsis "OpenConnect wrapper script supporting Azure AD (SAMLv2)")
     (description
@@ -703,12 +690,9 @@ and probably others.")
                 "1qsfgpxg553s8rc9cyrc4k96z0pislxsdxb9wyhp8fdprkak2mw2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autotools" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("openssl" ,openssl)
-       ("ppp" ,ppp)))
+     (list openssl ppp))
     (home-page "https://github.com/adrienverge/openfortivpn")
     (synopsis "Client for PPP+SSL VPN tunnel services")
     (description "Openfortivpn is a client for PPP+SSL VPN tunnel services.  It
@@ -732,12 +716,9 @@ this process.  It is compatible with Fortinet VPNs.")
     (arguments
      '(#:configure-flags '("--enable-iproute2=yes")))
     (native-inputs
-     `(("iproute2" ,iproute)))
+     (list iproute))
     (inputs
-     `(("lz4" ,lz4)
-       ("lzo" ,lzo)
-       ("openssl" ,openssl)
-       ("linux-pam" ,linux-pam)))
+     (list lz4 lzo openssl linux-pam))
     (home-page "https://openvpn.net/")
     (synopsis "Virtual private network daemon")
     (description
@@ -774,6 +755,7 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
              (let ((entrypoint (string-append (assoc-ref outputs "out")
                                               "/bin/.protonvpn-real")))
                (wrap-program entrypoint
+                            #:sh (search-input-file inputs "bin/bash")
                             `("PATH" ":" prefix
                               ,(map (lambda (name)
                                       (let ((input (assoc-ref inputs name)))
@@ -788,18 +770,18 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
                                           "which")))))
              #t)))))
     (native-inputs
-     `(("python-docopt" ,python-docopt)))
+     (list python-docopt))
     (inputs
-     `(("dialog" ,dialog)
-       ("iproute2" ,iproute)
-       ("iptables" ,iptables)
-       ("ncurses" ,ncurses)
-       ("openvpn" ,openvpn)
-       ("procps" ,procps)
-       ("python-jinja2" ,python-jinja2)
-       ("python-pythondialog" ,python-pythondialog)
-       ("python-requests" ,python-requests)
-       ("which" ,which)))
+     (list dialog
+           iproute
+           iptables
+           ncurses
+           openvpn
+           procps
+           python-jinja2
+           python-pythondialog
+           python-requests
+           which))
     (synopsis "Command-line client for ProtonVPN")
     (description
      "This is the official command-line interface for ProtonVPN, a secure
@@ -825,9 +807,7 @@ VPN.  The gratis tier offers unlimited bandwidth for up to 10 devices.")
      '(#:configure-flags
        '("--sysconfdir=/etc"
          "--localstatedir=/var")))
-    (inputs `(("zlib" ,zlib)
-              ("lzo" ,lzo)
-              ("openssl" ,openssl)))
+    (inputs (list zlib lzo openssl))
     (home-page "https://tinc-vpn.org")
     (synopsis "Virtual Private Network (VPN) daemon")
     (description
@@ -858,12 +838,12 @@ private network between hosts on the internet.")
                (("/bin/sh") "sh"))
              #t)))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ;; For tests only.
-       ("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-runner" ,python-pytest-runner)))
+     (list python-setuptools-scm
+           ;; For tests only.
+           python-flake8
+           python-mock
+           python-pytest-cov
+           python-pytest-runner))
     (home-page "https://github.com/sshuttle/sshuttle")
     (synopsis "VPN that transparently forwards connections over SSH")
     (description "sshuttle creates an encrypted virtual private network (VPN)
@@ -897,14 +877,10 @@ DNS domain name queries.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (inputs
-     `(("python-argcomplete" ,python-argcomplete)
-       ("python-prettytable" ,python-prettytable)
-       ("python-pyyaml" ,python-pyyaml)))
+     (list python-argcomplete python-prettytable python-pyyaml))
     ;; For tests only.
     (native-inputs
-     `(("python-fixtures" ,python-fixtures)
-       ("python-pbr" ,python-pbr)
-       ("python-testtools" ,python-testtools)))
+     (list python-fixtures python-pbr python-testtools))
     (home-page "https://github.com/albertodonato/sshoot")
     (synopsis "sshuttle VPN session manager")
     (description "sshoot provides a command-line interface to manage multiple
@@ -929,11 +905,9 @@ with configuration options for most of @command{sshuttle}’s features.")
     (arguments
      '(#:tests? #f))                    ; no tests
     (inputs
-     `(("nspr" ,nspr)
-       ("nss" ,nss)
-       ("openssl" ,openssl)))
+     (list nspr nss openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/ambrop72/badvpn")
     (synopsis "Peer-to-peer virtual private network (VPN)")
     (description "@code{BadVPN} is a collection of virtual private
@@ -1060,6 +1034,7 @@ WireGuard was added to Linux 5.6.")
                     (coreutils (string-append (assoc-ref inputs "coreutils")
                                               "/bin")))
                (wrap-program (string-append out "/bin/wg-quick")
+                 #:sh (search-input-file inputs "bin/bash")
                  `("PATH" ":" prefix ,(append inputs-sbin
                                               (list coreutils))))))))))
     (inputs
@@ -1106,15 +1081,12 @@ public keys and can roam across IP addresses.")
                     (lambda* (#:key inputs #:allow-other-keys)
                       (substitute* "l2tp.h"
                         (("/usr/sbin/pppd")
-                         (string-append (assoc-ref inputs "ppp")
-                                        "/sbin/pppd")))
+                         (search-input-file inputs "/sbin/pppd")))
                       (setenv "KERNELSRC"
                               (assoc-ref inputs "linux-libre-headers"))
                       #t)))
        #:tests? #f))                    ; no tests provided
-    (inputs `(("libpcap" ,libpcap)
-              ("linux-libre-headers" ,linux-libre-headers)
-              ("ppp" ,ppp)))
+    (inputs (list libpcap linux-libre-headers ppp))
     (home-page "https://www.xelerance.com/software/xl2tpd/")
     (synopsis "Layer 2 Tunnelling Protocol Daemon (RFC 2661)")
     (description
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index ac91f8451c..f5c619a2b2 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -91,9 +93,8 @@ and for the GLSL.std.450 extended instruction set.
                                (string-append
                                 "-DSPIRV-Headers_SOURCE_DIR="
                                 (assoc-ref %build-inputs "spirv-headers")))))
-    (inputs `(("spirv-headers" ,spirv-headers)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("python" ,python)))
+    (inputs (list spirv-headers))
+    (native-inputs (list pkg-config python))
     (home-page "https://github.com/KhronosGroup/SPIRV-Tools")
     (synopsis "API and commands for processing SPIR-V modules")
     (description
@@ -136,10 +137,8 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
                 (string-append (assoc-ref inputs "spirv-tools") "/bin")))
              #t)))))
     (inputs
-     `(("glslang" ,glslang)
-       ("spirv-headers" ,spirv-headers)
-       ("spirv-tools" ,spirv-tools)))
-    (native-inputs `(("python" ,python)))
+     (list glslang spirv-headers spirv-tools))
+    (native-inputs (list python))
     (home-page "https://github.com/KhronosGroup/SPIRV-Cross")
     (synopsis "Parser for and converter of SPIR-V to other shader languages")
     (description
@@ -168,8 +167,7 @@ SPIR-V, aiming to emit GLSL or MSL that looks like human-written code.")
      '(#:tests? #f                      ;FIXME: requires bundled SPIRV-Tools
        #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list pkg-config python))
     (home-page "https://github.com/KhronosGroup/glslang")
     (synopsis "OpenGL and OpenGL ES shader front end and validator")
     (description
@@ -222,7 +220,14 @@ interpretation of the specifications for these languages.")
          "15gx9ab6w1sjq9hkpbas7z2f8f47j6mlln6p3w26qmydjj8gfjjv"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
+     `(#:configure-flags
+       ,#~(list
+           (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
+                          #$(this-package-input "vulkan-headers"))
+           (string-append "-DCMAKE_INSTALL_INCLUDEDIR="
+                          #$(this-package-input "vulkan-headers")
+                          "/include"))
+       #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'unpack-googletest
                     (lambda* (#:key inputs #:allow-other-keys)
                       (let ((gtest (assoc-ref inputs "googletest:source")))
@@ -243,8 +248,9 @@ interpretation of the specifications for these languages.")
        ("libxrandr" ,libxrandr)
        ("pkg-config" ,pkg-config)
        ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)
        ("wayland" ,wayland)))
+    (inputs
+     (list vulkan-headers))
     (home-page
      "https://github.com/KhronosGroup/Vulkan-Loader")
     (synopsis "Khronos official ICD loader and validation layers for Vulkan")
@@ -276,14 +282,9 @@ and the ICD.")
          "129wzk7xj3vn3c8b4p7fzkd0npl58118s2i1d88gsfnlix54nagq"))))
     (build-system cmake-build-system)
     (inputs
-     `(("glslang" ,glslang)
-       ("libxrandr" ,libxrandr)
-       ("vulkan-loader" ,vulkan-loader)
-       ("wayland" ,wayland)))
+     (list glslang libxrandr vulkan-loader wayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("vulkan-headers" ,vulkan-headers)))
+     (list pkg-config python vulkan-headers))
     (arguments
      `(#:tests? #f                      ;no tests
        #:configure-flags (list (string-append "-DGLSLANG_INSTALL_DIR="
@@ -344,12 +345,9 @@ API.")
                          ,(package-version glslang))))
              #t)))))
     (inputs
-     `(("glslang" ,glslang)
-       ("python" ,python)
-       ("spirv-headers" ,spirv-headers)
-       ("spirv-tools" ,spirv-tools)))
+     (list glslang python spirv-headers spirv-tools))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/google/shaderc")
     (synopsis "Tools for shader compilation")
     (description "Shaderc is a collection of tools, libraries, and tests for
@@ -390,16 +388,16 @@ shader compilation.")
         ("libtool" ,libtool)
         ("pkg-config" ,pkg-config)))
      (inputs
-      `(("libx11" ,libx11)
-        ("libxcb" ,libxcb)
-        ("spirv-headers" ,spirv-headers)
-        ("spirv-tools" ,spirv-tools)
-        ("vulkan-headers" ,vulkan-headers)
-        ("vulkan-loader" ,vulkan-loader)
-        ("wine-minimal" ,wine-minimal) ; Needed for 'widl'.
-        ("xcb-util" ,xcb-util)
-        ("xcb-util-keysyms" ,xcb-util-keysyms)
-        ("xcb-util-wm" ,xcb-util-wm)))
+      (list libx11
+            libxcb
+            spirv-headers
+            spirv-tools
+            vulkan-headers
+            vulkan-loader
+            wine-minimal ; Needed for 'widl'.
+            xcb-util
+            xcb-util-keysyms
+            xcb-util-wm))
      (home-page "https://source.winehq.org/git/vkd3d.git/")
      (synopsis "Direct3D 12 to Vulkan translation library")
      (description "vkd3d is a library for translating Direct3D 12 to Vulkan.")
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
index 934a6d9e38..5239cd43a0 100644
--- a/gnu/packages/w3m.scm
+++ b/gnu/packages/w3m.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -40,7 +42,7 @@
 (define-public w3m
   (package
     (name "w3m")
-    (version "0.5.3+git20200502")
+    (version "0.5.3+git20210102")
     (source (origin
               (method git-fetch)
               ;; Debian's fork of w3m is the only one that is still maintained.
@@ -50,26 +52,27 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0yyfhwcwy1dvdbirj6zqwk4gl8z9npfavs0k7ipcg5fd16vnx7mi"))))
+                "0amq1wfjp5mhqjmvrc0yhxjlx1335p78d7ap8iykfjn5h8yhmrg5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f  ; no check target
        ;; Use $EDITOR instead of a hard-coded value.
-       #:configure-flags '("--with-editor=")
+       #:configure-flags (list "--with-editor="
+                               "--with-imagelib=imlib2")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'fix-perl
            (lambda _ (substitute* '("scripts/w3mmail.cgi.in"
                                     "scripts/dirlist.cgi.in")
-                       (("@PERL@") (which "perl")))
-             #t)))))
+                       (("@PERL@") (which "perl"))))))))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("libgc" ,libgc)
-       ("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list gdk-pixbuf
+           imlib2
+           libgc
+           libx11
+           ncurses
+           openssl
+           zlib))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)
diff --git a/gnu/packages/wdiff.scm b/gnu/packages/wdiff.scm
index 20fc0bc06f..ec0769447f 100644
--- a/gnu/packages/wdiff.scm
+++ b/gnu/packages/wdiff.scm
@@ -47,9 +47,9 @@
                         (("#! /bin/sh")
                          (string-append "#!" (which "sh")))))))))
     (native-inputs
-     `(("which" ,which)
-       ;; For some reason wdiff.info gets rebuilt.
-       ("texinfo" ,texinfo)))
+     (list which
+           ;; For some reason wdiff.info gets rebuilt.
+           texinfo))
     (home-page "https://www.gnu.org/software/wdiff/")
     (synopsis "Word difference finder")
     (description
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index f2c5cb0be7..0fcb12d894 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -51,6 +51,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -125,10 +126,12 @@
            (assoc-ref glib-or-gtk:%standard-phases
                       'glib-or-gtk-wrap)))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")
+     `(("desktop-file-utils" ,desktop-file-utils) ;for tests
+       ("glib:bin" ,glib "bin")
        ("gtk+:bin" ,gtk+ "bin")
        ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("which" ,which))) ;for tests
     (inputs
      `(("adwaita-icon-theme" ,adwaita-icon-theme)
        ("gcr" ,gcr)
@@ -139,10 +142,9 @@
        ("json-glib" ,json-glib)
        ("libarchive" ,libarchive)
        ("libpeas" ,libpeas)
-       ("libsoup" ,libsoup)
        ("sqlite" ,sqlite)
        ("vala" ,vala)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (synopsis "Lightweight graphical web browser")
     (description "@code{Midori} is a lightweight, Webkit-based web browser.
 It features integration with GTK+3, configurable web search engine, bookmark
@@ -179,8 +181,7 @@ management, extensions such as advertisement blocker and colorful tabs.")
                (invoke "./configure"
                        (string-append "--prefix=" out)
                        "--enable-graphics")))))))
-    (native-inputs `(("linux-libre-headers" ,linux-libre-headers)
-                     ("pkg-config" ,pkg-config)))
+    (native-inputs (list linux-libre-headers pkg-config))
     (inputs `(("gpm" ,gpm)
               ("libevent" ,libevent)
               ("libjpeg" ,libjpeg-turbo)
@@ -222,10 +223,10 @@ features including, tables, builtin image display, bookmarks, SSL and more.")
        ("glib-networking" ,glib-networking)
        ("lua5.1-filesystem" ,lua5.1-filesystem)
        ("luajit" ,luajit)
-       ("webkitgtk" ,webkitgtk)
+       ("webkitgtk" ,webkitgtk-with-libsoup2)
        ("sqlite" ,sqlite)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:make-flags
@@ -284,16 +285,15 @@ and the GTK+ toolkit.")
                (base32
                 "06jhv8ibfw1xkf8d8zrnkc2aw4d462s77hlp6f6xa6k8awzxvmkg"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))
-    (inputs `(("ncurses" ,ncurses)
-              ("libidn" ,libidn)
-              ("openssl" ,openssl)
-              ("libgcrypt" ,libgcrypt)
-              ("unzip" ,unzip)
-              ("zlib" ,zlib)
-              ("gzip" ,gzip)
-              ("bzip2" ,bzip2)))
+    (native-inputs (list pkg-config perl))
+    (inputs (list ncurses
+                  libidn
+                  openssl
+                  libgcrypt
+                  unzip
+                  zlib
+                  gzip
+                  bzip2))
     (arguments
      `(#:configure-flags
        (let ((openssl (assoc-ref %build-inputs "openssl")))
@@ -441,13 +441,13 @@ access.")
                 (base32
                  "1kvkxkisi3czldnb43ig60l55pi4a3m2a4ixp7krhpf9fc5wp294")))))))
       (inputs
-       `(("cmark" ,cmark)
-         ("font-google-noto" ,font-google-noto)
-         ("font-openmoji" ,font-openmoji)
-         ("openssl" ,openssl)
-         ("qtbase" ,qtbase-5)
-         ("qtmultimedia" ,qtmultimedia)
-         ("qtsvg" ,qtsvg)))
+       (list cmark
+             font-google-noto
+             font-openmoji
+             openssl
+             qtbase-5
+             qtmultimedia
+             qtsvg))
       (home-page "https://kristall.random-projects.net")
       (synopsis "Small-internet graphical client")
       (description "Graphical small-internet client with with many features
@@ -472,23 +472,23 @@ interface.")
         (base32 "05n64mw9lzzxpxr7lhakbkm9ir3x8p0rwk6vbbg01aqg5iaanyj0"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-attrs" ,python-attrs))) ; for tests
+     (list python-attrs)) ; for tests
     (inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-cssutils" ,python-cssutils)
-       ("python-importlib-resources" ,python-importlib-resources)
-       ("python-jinja2" ,python-jinja2)
-       ("python-markupsafe" ,python-markupsafe)
-       ("python-pygments" ,python-pygments)
-       ("python-pypeg2" ,python-pypeg2)
-       ("python-pyyaml" ,python-pyyaml)
-       ;; FIXME: python-pyqtwebengine needs to come before python-pyqt so
-       ;; that it's __init__.py is used first.
-       ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pyqt" ,python-pyqt)
-       ;; While qtwebengine is provided by python-pyqtwebengine, it's
-       ;; included here so we can wrap QTWEBENGINEPROCESS_PATH.
-       ("qtwebengine" ,qtwebengine)))
+     (list python-colorama
+           python-cssutils
+           python-importlib-resources
+           python-jinja2
+           python-markupsafe
+           python-pygments
+           python-pypeg2
+           python-pyyaml
+           ;; FIXME: python-pyqtwebengine needs to come before python-pyqt so
+           ;; that it's __init__.py is used first.
+           python-pyqtwebengine
+           python-pyqt
+           ;; While qtwebengine is provided by python-pyqtwebengine, it's
+           ;; included here so we can wrap QTWEBENGINEPROCESS_PATH.
+           qtwebengine))
     (arguments
      `(;; FIXME: With the existance of qtwebengine, tests can now run.  But
        ;; they are still disabled because test phase hangs.  It's not readily
@@ -563,9 +563,9 @@ GUI.  It is based on PyQt5 and QtWebEngine.")
     (inputs
      `(("glib-networking" ,glib-networking)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("webkitgtk" ,webkitgtk)))
+       ("webkitgtk" ,webkitgtk-with-libsoup2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://fanglingsu.github.io/vimb/")
     (synopsis "Fast and lightweight Vim-like web browser")
     (description "Vimb is a fast and lightweight vim like web browser based on
@@ -713,18 +713,17 @@ is fully configurable and extensible in Common Lisp.")
      `(#:tests? #false                  ;no tests
        #:configure-flags (list "-DTFDN_ENABLE_SSE41=OFF")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
+     (list pkg-config zip))
     (inputs
-     `(("fribidi" ,fribidi)
-       ("harfbuzz" ,harfbuzz)
-       ("libunistring" ,libunistring)
-       ("libwebp" ,libwebp)
-       ("mpg123" ,mpg123)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
+     (list fribidi
+           harfbuzz
+           libunistring
+           libwebp
+           mpg123
+           openssl
+           pcre
+           sdl2
+           zlib))
     (home-page "https://gmi.skyjake.fi/lagrange/")
     (synopsis "Graphical Gemini client")
     (description
@@ -754,10 +753,9 @@ history, and page outlines.")
        `(#:tests? #f ; no check target
          #:make-flags (list (string-append "CC=" ,(cc-for-target)))))
       (inputs
-       `(("openssl" ,openssl)))
+       (list openssl))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("scdoc" ,scdoc)))
+       (list pkg-config scdoc))
       (home-page "https://sr.ht/~sircmpwn/gmni")
       (synopsis "Minimalist command line Gemini client")
       (description "The gmni package includes:
@@ -919,9 +917,7 @@ interface.")
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libevent"  ,libevent)
-       ("libressl"  ,libressl)
-       ("ncurses"   ,ncurses)))
+     (list libevent libressl ncurses))
     (home-page "https://git.omarpolo.com/telescope/about/")
     (synopsis "Gemini client with a terminal interface")
     (description "Telescope is a w3m-like browser for Gemini.")
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 8bb02ee887..fff7e48ba3 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -40,17 +40,19 @@
 ;;; Copyright © 2019, 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Jack Hill <jackhill@jackhill.us>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -241,8 +243,7 @@
                           "postcollector")))
              #t)))))
     (inputs
-     `(("http-parser" ,http-parser)
-       ("qtbase" ,qtbase-5)))
+     (list http-parser qtbase-5))
     (home-page "https://github.com/azadkuh/qhttp/")
     (synopsis "Qt-based HTTP Library")
     (description
@@ -262,11 +263,8 @@
               (base32
                "1x1qp10pfh33x1b56liwsjl0jamjm5lkk7j3lj87c1ygzs0ivq10"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pcre" ,pcre "bin")))       ;for 'pcre-config'
-    (inputs `(("apr" ,apr)
-              ("apr-util" ,apr-util)
-              ("openssl" ,openssl)
-              ("perl" ,perl))) ; needed to run bin/apxs
+    (native-inputs (list `(,pcre "bin")))       ;for 'pcre-config'
+    (inputs (list apr apr-util openssl perl)) ; needed to run bin/apxs
     (arguments
      `(#:test-target "test"
        #:configure-flags (list "--enable-rewrite"
@@ -349,9 +347,9 @@ Interface} specification.")
        #:cargo-development-inputs
        (("rust-assert-cmd" ,rust-assert-cmd-1))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (home-page "https://github.com/Y2Z/monolith")
     (synopsis "Command line tool for saving web pages as a single HTML file")
     (description
@@ -382,11 +380,7 @@ the same, being completely separated from the Internet.")
                (base32
                 "1ziv3xargxhxycd5hp6r3r5mww54nvvydiywcpsamg3i9r3jzxyi"))))
     (build-system gnu-build-system)
-    (inputs `(("libxml2" ,libxml2)
-              ("libxslt" ,libxslt)
-              ("openssl" ,openssl)
-              ("pcre" ,pcre)
-              ("zlib" ,zlib)))
+    (inputs (list libxml2 libxslt openssl pcre zlib))
     (arguments
      `(#:tests? #f                      ; no test target
        #:phases
@@ -517,9 +511,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                  (copy-recursively "libxslt" output)
                  #t))))))
       (native-inputs
-       `(("libxml2" ,libxml2)
-         ("libxslt" ,libxslt)
-         ("nginx-xslscript" ,nginx-xslscript)))
+       (list libxml2 libxslt nginx-xslscript))
       (home-page "https://nginx.org")
       (synopsis "Documentation for the nginx web server")
       (description
@@ -882,9 +874,8 @@ stream.  Remote control of the module is possible over HTTP.")
        ("pcre:bin" ,pcre "bin")
        ("zlib" ,zlib)))
     (native-inputs
-     `(("perl" ,perl) ; for tests
-       ("pkg-config" ,pkg-config)
-       ("which" ,which)))
+     (list perl ; for tests
+           pkg-config which))
     (home-page "https://www.lighttpd.net/")
     (synopsis "Lightweight HTTP and reverse proxy server")
     (description
@@ -912,9 +903,7 @@ CGI, authentication, output compression, URL rewriting and many more.")
     ;; Parallel building is not supported.
     (arguments `(#:parallel-build? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     ;; This is an archived fork of the original home page, www.fastcgi.com.
     (home-page "https://fastcgi-archives.github.io/")
     (synopsis "Language-independent, high-performant extension to CGI")
@@ -951,11 +940,9 @@ APIs.")
                ((" -Werror") ""))
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("fcgi" ,fcgi)))
+     (list fcgi))
     (home-page "https://nginx.localdomain.pl/wiki/FcgiWrap")
     (synopsis "Simple server for running CGI applications over FastCGI")
     (description "Fcgiwrap is a simple server for running CGI applications
@@ -976,17 +963,15 @@ servers that may need it).")
         (base32 "1y1kn4929k299fbf6sw9lxcsdlq9fvq777p6yrzk591rr9xhkx8h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-libwww perl-module-build-tiny perl-test-requires))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-parser-xs" ,perl-http-parser-xs)
-       ("perl-net-server" ,perl-net-server)
-       ("perl-plack" ,perl-plack)
-       ("perl-test-tcp" ,perl-test-tcp)))
+     (list perl-data-dump
+           perl-http-date
+           perl-http-message
+           perl-http-parser-xs
+           perl-net-server
+           perl-plack
+           perl-test-tcp))
     (home-page "https://metacpan.org/release/Starman")
     (synopsis "PSGI/Plack web server")
     (description "Starman is a PSGI perl web server that has unique features
@@ -1010,13 +995,12 @@ and UNIX socket support.")
     (arguments
      `(#:configure-flags
        (list  "--disable-plugin"         ;NPAPI plugins are obsolete nowadays.
-             (string-append "BIN_BASH=" (assoc-ref %build-inputs "bash")
-                            "/bin/bash")
+              (string-append "BIN_BASH="
+                             (search-input-file %build-inputs "/bin/bash"))
              (string-append "--with-jdk-home=" (assoc-ref %build-inputs "jdk")))))
     (outputs '("out" "doc"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
+     (list pkg-config zip))
     (inputs
      `(("gtk+" ,gtk+)
        ("jdk" ,icedtea "jdk")))
@@ -1033,7 +1017,7 @@ libraries for working with JNLP applets.")
 (define-public jansson
   (package
     (name "jansson")
-    (version "2.12")
+    (version "2.13.1")
     (source (origin
              (method url-fetch)
              (uri
@@ -1041,7 +1025,7 @@ libraries for working with JNLP applets.")
                              version ".tar.bz2"))
              (sha256
               (base32
-               "1lp1mv8pjp5yziws66cy0dhpcam4bbjqhffk13v4vgdybp674pb4"))))
+               "1g8h18vh8gyxlwfmvdivdp1siad26ywj5zr4j4avgdyjg7wa147f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
@@ -1055,7 +1039,7 @@ data.")
 (define-public json-c
   (package
     (name "json-c")
-    (version "0.14")
+    (version "0.15")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1063,8 +1047,7 @@ data.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "0w381krr99q5a2rypx4g437fa7gzgl82i64sgnrs6g5jr44dwxxk"))
-              (patches (search-patches "json-c-CVE-2020-12762.patch"))))
+               "1im484iz08j3gmzpw07v16brwq46pxxj65i996kkp2vivcfhmn5q"))))
     (build-system cmake-build-system)
     (home-page "https://github.com/json-c/json-c/wiki")
     (synopsis "JSON implementation in C")
@@ -1187,7 +1170,7 @@ project)
          (add-before 'check 'render-offscreen
            (lambda _ (setenv "QT_QPA_PLATFORM" "offscreen") #t)))))
     (inputs
-     `(("qtbase" ,qtbase-5)))
+     (list qtbase-5))
     (home-page "http://qjson.sourceforge.net")
     (synopsis "Library that maps JSON data to QVariant objects")
     (description "QJson is a Qt-based library that maps JSON data to
@@ -1211,8 +1194,7 @@ instances, while JSON's objects will be mapped to @code{QVariantMap}.")
                 "1b2jdqs526ac635yb2whm049spcsk7almnnr6r5b4yqhq922anw3"))))
     (build-system gnu-build-system)
     (inputs
-     `(("qca" ,qca)
-       ("qtbase" ,qtbase-5)))
+     (list qca qtbase-5))
     (arguments
      '(#:tests? #f                      ;FIXME: some tests are failing
        #:phases
@@ -1350,9 +1332,7 @@ efficiently.  It gives the application developer no more than 4 methods.")
                (invoke (string-append (assoc-ref outputs "out") "/bin/ktImportText")
                        "ec.tsv")))))))
    (inputs
-    `(("curl" ,curl)
-      ("make" ,gnu-make)
-      ("perl" ,perl)))
+    (list curl gnu-make perl))
    (home-page "https://github.com/marbl/Krona/wiki")
    (synopsis "Hierarchical data exploration with zoomable HTML5 pie charts")
    (description
@@ -1452,9 +1432,8 @@ parser written in ANSI C and a small validating JSON generator.")
      ;; doesn't use 'add_test', and it's unclear how to run the test suite.
      '(#:tests? #f))
 
-    (native-inputs `(("perl" ,perl)))             ; to build the HTML doc
-    (inputs `(("zlib" ,zlib)
-              ("openssl" ,openssl)))
+    (native-inputs (list perl))             ; to build the HTML doc
+    (inputs (list zlib openssl))
     (synopsis "WebSockets library written in C")
     (description
      "Libwebsockets is a library that allows C programs to establish client
@@ -1524,8 +1503,7 @@ other systems that want to manipulate WebAssembly files.")
         (base32 "1ww4fhl8qf12hkv6jaild8zzsygdspxm1gqpk2f63gv1xfi31wpm"))
        (patches (search-patches "websocketpp-fix-for-cmake-3.15.patch"))))
     (build-system cmake-build-system)
-    (inputs `(("boost" ,boost)
-              ("openssl" ,openssl)))
+    (inputs (list boost openssl))
     (arguments '(#:configure-flags '("-DBUILD_TESTS=ON")
                  #:phases
                  (modify-phases %standard-phases
@@ -1561,12 +1539,12 @@ high performance.")
      ;; Parallel builds don't reliably succeed.
      `(#:parallel-build? #f))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("cunit" ,cunit)                 ; for tests
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)))
+     (list autoconf
+           automake
+           cunit ; for tests
+           libtool
+           pkg-config
+           python-sphinx))
     (home-page "https://tatsuhiro-t.github.io/wslay/")
     (synopsis "C WebSocket library")
     (description "@code{Wslay} is an event-based C library for the WebSocket
@@ -1595,8 +1573,7 @@ perform the opening handshake in HTTP.")
        ;; For tests.
        ("python" ,python-wrapper)))
     (inputs
-     `(("libidn2" ,libidn2)
-       ("libunistring" ,libunistring)))
+     (list libidn2 libunistring))
     (home-page "https://github.com/rockdaboot/libpsl")
     (synopsis "C library for the Publix Suffix List")
     (description
@@ -1643,9 +1620,7 @@ UTS#46.")
                       (setenv "AUTOMAKE" "automake --foreign")
                       (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("libtool" ,libtool)))
+     (list automake autoconf libtool))
     (synopsis "HTML validator and tidier")
     (description "HTML Tidy is a command-line tool and C library that can be
 used to validate and fix HTML data.")
@@ -1727,7 +1702,7 @@ and other data, for distribution on the web.")
              ;; (setenv "XML_DEBUG_CATALOG" "1")
              #t)))))
     (native-inputs
-     `(("perl" ,perl)))                 ; for tests
+     (list perl))                 ; for tests
     (home-page "https://tinyproxy.github.io/")
     (synopsis "Light-weight HTTP/HTTPS proxy daemon")
     (description "Tinyproxy is a light-weight HTTP/HTTPS proxy
@@ -1750,7 +1725,7 @@ unavailable.")
        (sha256
         (base32
          "05g09sg9qkkhnc2mxldm1w1xkxzs2ylybkjzs28w8ydbjc3pand2"))))
-    (native-inputs `(("texinfo" ,texinfo)))
+    (native-inputs (list texinfo))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -1788,10 +1763,9 @@ of people.")
      `(#:tests? #f)) ; FIXME: 2 out of 6 tests fail with "ImportError: No module
      ; named 'stubout'". The tests can be run by replacing the check phase with
      ; the command "python setup.py nosetests --verbosity=3".
-    (native-inputs `(; Required for tests:
-                     ("python-mox3" ,python-mox3)
-                     ("python-nose" ,python-nose)))
-    (propagated-inputs `(("python-numpy" ,python-numpy)))
+    (native-inputs (list ; Required for tests:
+                         python-mox3 python-nose))
+    (propagated-inputs (list python-numpy))
     (home-page "https://github.com/novnc/websockify")
     (synopsis "WebSockets support for any application/server")
     (description "Websockify translates WebSockets traffic to normal socket
@@ -1816,7 +1790,7 @@ directions.")
     (arguments
      `(#:configure-flags '("--with-gnutls")
        #:tests? #f))                         ; no test target
-    (native-inputs `(("flex" ,flex)))
+    (native-inputs (list flex))
     (inputs `(("gnutls" ,gnutls)
               ("libcrypt" ,libgcrypt)))
     (home-page "https://www.gedanken.org.uk/software/wwwoffle/")
@@ -1841,10 +1815,9 @@ changes, and much more.")
                 "07w1aq8y8wld43wmbk2q8134p3bfkp2vma78mmsfgw2jn1bh3xhd"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-nss")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (propagated-inputs
-     `(("curl" ,curl)
-       ("nss" ,nss)))
+     (list curl nss))
     (home-page "https://sourceforge.net/projects/liboauth")
     (synopsis "C library implementing the OAuth API")
     (description
@@ -1888,14 +1861,14 @@ parse media stream properties.")
        (sha256
         (base32 "00x9gbmzc5cns0gnfag0hsphcr3cb33vbbb9s7ppvvd6bxz2z1mm"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("libquvi-scripts" ,libquvi-scripts)
-       ("lua" ,lua-5.1)
-       ("openssl" ,openssl)
-       ("zlib" ,zlib)))
+     (list curl
+           cyrus-sasl
+           libquvi-scripts
+           lua-5.1
+           openssl
+           zlib))
     (arguments
      ;; Lua provides no .pc file, so add CFLAGS/LIBS manually.
      '(#:configure-flags
@@ -1922,10 +1895,9 @@ URLs and extracting their actual media files.")
        (sha256
         (base32 "09lhl6dv5zpryasx7yjslfrcdcqlsbwapvd5lg7w6sm5x5n3k8ci"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("curl" ,curl)
-       ("libquvi" ,libquvi)))
+     (list curl libquvi))
     (home-page "http://quvi.sourceforge.net/")
     (synopsis "Media stream URL parser")
     (description "quvi is a command-line-tool suite to extract media files
@@ -1946,13 +1918,11 @@ from streaming URLs.  It is a command-line wrapper for the libquvi library.")
         (base32 "1k47gbgpp52049andr28y28nbwh9m36bbb0g8p0aka3pqlhjv72l"))))
     (build-system scons-build-system)
     (propagated-inputs
-     `(("apr" ,apr)
-       ("apr-util" ,apr-util)
-       ("openssl" ,openssl)))
+     (list apr apr-util openssl))
     (inputs
-     `(;; TODO: Fix build with gss.
-       ;;("gss" ,gss)
-       ("zlib" ,zlib)))
+     (list ;; TODO: Fix build with gss.
+           ;;("gss" ,gss)
+           zlib))
     (arguments
      `(#:scons-flags (list (string-append "APR=" (assoc-ref %build-inputs "apr"))
                            (string-append "APU=" (assoc-ref %build-inputs "apr-util"))
@@ -2033,9 +2003,7 @@ minimum to provide high performance operation.")
              (setenv "LIBSASS_VERSION" ,version)
              #t)))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://sass-lang.com/libsass")
     (synopsis "SASS Compiler, implemented as a C/C++ library")
     (description
@@ -2086,7 +2054,7 @@ stylesheets, you'll need to use another program that uses this library,
              (setenv "SASSC_VERSION" ,version)
              #t)))))
     (inputs
-     `(("libsass" ,libsass)))
+     (list libsass))
     (synopsis "CSS pre-processor")
     (description "SassC is a compiler written in C for the CSS pre-processor
 language known as SASS.")
@@ -2100,21 +2068,16 @@ language known as SASS.")
     (inherit sassc)
     (name "sassc")
     (inputs
-     `(("libsass" ,
-        (package
-          (inherit libsass)
-          (name "libsass")
-          (version "3.5.5")
-          (source
-           (origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/sass/libsass")
-                   (commit version)))
-             (file-name (git-file-name name version))
-             (sha256
-              (base32
-               "0830pjcvhzxh6yixj82x5k5r1xnadjqzi16kp53213icbly0r9ma"))))))))
+     (list (package (inherit libsass)
+                    (name "libsass")
+                    (version "3.5.5")
+                    (source (origin (method git-fetch)
+                                    (uri (git-reference (url
+                                                             "https://github.com/sass/libsass")
+                                                        (commit version)))
+                                    (file-name (git-file-name name version))
+                                    (sha256 (base32
+                                                    "0830pjcvhzxh6yixj82x5k5r1xnadjqzi16kp53213icbly0r9ma")))))))
     (properties '((hidden? . #t)))))
 
 
@@ -2131,13 +2094,10 @@ language known as SASS.")
         (base32 "05xcl7j65vakx7x79jqjikyw0nzf60bc2w6hhc0q5sklxq1ral4l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-test-mocktime" ,perl-test-mocktime)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl-http-message perl-module-build-tiny perl-test-mocktime
+           perl-try-tiny perl-uri))
     (propagated-inputs
-     `(("perl-posix-strftime-compiler" ,perl-posix-strftime-compiler)))
+     (list perl-posix-strftime-compiler))
     (arguments `(#:tests? #f))          ; TODO: Timezone test failures
     (home-page "https://metacpan.org/release/Apache-LogFormat-Compiler")
     (synopsis "Compile a log format string to perl-code")
@@ -2166,8 +2126,7 @@ to perl-code, for faster generation of access_log lines.")
            ;; versions of perl-authen-sasl.
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t)))))
     (propagated-inputs
-     `(("perl-digest-hmac" ,perl-digest-hmac)
-       ("perl-gssapi" ,perl-gssapi)))
+     (list perl-digest-hmac perl-gssapi))
     (home-page "https://metacpan.org/release/Authen-SASL")
     (synopsis "SASL authentication framework")
     (description "Authen::SASL provides an SASL authentication framework.")
@@ -2188,12 +2147,9 @@ to perl-code, for faster generation of access_log lines.")
          "0j1rrld13cjk7ks92b5hv3xw4rfm2lvmksb4rlzd8mx0a0wj0rc5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-http-request-ascgi" ,perl-http-request-ascgi)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-http-request-ascgi perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-data-visitor" ,perl-data-visitor)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-data-visitor perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Action-RenderView")
     (synopsis "Sensible default Catalyst action")
     (description "This Catalyst action implements a sensible default end
@@ -2213,20 +2169,19 @@ action, which will forward to the first available view.")
                 "086bykggzalbjfk0islac4b48g9s2ypj7y81d6ns1lq0aax1py6c"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-test-requires perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-cpanel-json-xs" ,perl-cpanel-json-xs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-moose" ,perl-moose)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-params-validate" ,perl-params-validate)
-       ("perl-uri-find" ,perl-uri-find)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl-catalyst-runtime
+           perl-class-inspector
+           perl-config-general
+           perl-cpanel-json-xs
+           perl-libwww
+           perl-moose
+           perl-mro-compat
+           perl-namespace-autoclean
+           perl-params-validate
+           perl-uri-find
+           perl-xml-simple))
     (home-page "https://metacpan.org/release/Catalyst-Action-REST")
     (synopsis "Automated REST Method Dispatching")
     (description "This Action handles doing automatic method dispatching for
@@ -2251,19 +2206,12 @@ regular method.")
          "0i5ja7690fs9nhxcij6lw51j804sm8s06m5mvk1n8pi8jljrymvw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-plugin-authorization-roles"
-        ,perl-catalyst-plugin-authorization-roles)
-       ("perl-catalyst-plugin-session-state-cookie"
-        ,perl-catalyst-plugin-session-state-cookie)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)))
+     (list perl-catalyst-plugin-authorization-roles
+           perl-catalyst-plugin-session-state-cookie perl-dbd-sqlite
+           perl-module-install perl-test-www-mechanize-catalyst))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-catalyst-plugin-authentication"
-        ,perl-catalyst-plugin-authentication)
-       ("perl-dbix-class" ,perl-dbix-class)
-       ("perl-catalyst-model-dbic-schema" ,perl-catalyst-model-dbic-schema)))
+     (list perl-catalyst-runtime perl-catalyst-plugin-authentication
+           perl-dbix-class perl-catalyst-model-dbic-schema))
     (home-page
      "https://metacpan.org/release/Catalyst-Authentication-Store-DBIx-Class")
     (synopsis "Storage class for Catalyst authentication using DBIx::Class")
@@ -2287,10 +2235,9 @@ DBIx::Class.")
          "0wfj4vnn2cvk6jh62amwlg050p37fcwdgrn9amcz24z6w4qgjqvz"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)))
+     (list perl-catalyst-runtime perl-moose))
     (home-page
      "https://metacpan.org/release/Catalyst-Component-InstancePerContext")
     (synopsis "Create only one instance of Moose component per context")
@@ -2311,24 +2258,23 @@ instance of a component on each request.")
         (base32 "1r8arq7sw37d0mjyfzkc3pg1a9plgydqbscryc8qpvba4swpljls"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-catalyst-action-renderview" ,perl-catalyst-action-renderview)
-       ("perl-catalyst-plugin-configloader" ,perl-catalyst-plugin-configloader)
-       ("perl-catalyst-plugin-static-simple" ,perl-catalyst-plugin-static-simple)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-file-changenotify" ,perl-file-changenotify)
-       ("perl-file-copy-recursive" ,perl-file-copy-recursive)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-template-toolkit" ,perl-template-toolkit)))
+     (list perl-catalyst-action-renderview
+           perl-catalyst-plugin-configloader
+           perl-catalyst-plugin-static-simple
+           perl-catalyst-runtime
+           perl-config-general
+           perl-file-changenotify
+           perl-file-copy-recursive
+           perl-file-sharedir
+           perl-module-install
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-namespace-autoclean
+           perl-namespace-clean
+           perl-path-class
+           perl-template-toolkit))
     (home-page "https://metacpan.org/release/Catalyst-Devel")
     (synopsis "Catalyst Development Tools")
     (description "The Catalyst-Devel distribution includes a variety of
@@ -2353,12 +2299,10 @@ modules.")
          "06jq1lmpq88rmp9zik5gqczg234xac0hiyc3l698iif7zsgcyb80"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build) ;needs Module::Build >= 0.4004
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)))
+     (list perl-module-build ;needs Module::Build >= 0.4004
+           perl-namespace-autoclean perl-catalyst-runtime))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-text-simpletable" ,perl-text-simpletable)))
+     (list perl-moose perl-text-simpletable))
     (home-page "https://metacpan.org/release/Catalyst-DispatchType-Regex")
     (synopsis "Regex DispatchType for Catalyst")
     (description "Dispatch type managing path-matching behaviour using
@@ -2384,31 +2328,28 @@ when the dispatch type is first seen in your application.")
           "1spfjcjc0b9dv3k2gbanqj1m1cqzyxb32p76dhdwizzpbvpi3a96"))))
   (build-system perl-build-system)
   (native-inputs
-   `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-     ("perl-module-install" ,perl-module-install)
-     ("perl-test-exception" ,perl-test-exception)
-     ("perl-test-requires" ,perl-test-requires)))
+   (list perl-dbd-sqlite perl-module-install perl-test-exception
+         perl-test-requires))
   (propagated-inputs
-   `(("perl-carp-clan" ,perl-carp-clan)
-     ("perl-catalyst-component-instancepercontext"
-      ,perl-catalyst-component-instancepercontext)
-     ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-     ("perl-catalystx-component-traits" ,perl-catalystx-component-traits)
-     ("perl-dbix-class" ,perl-dbix-class)
-     ("perl-dbix-class-cursor-cached" ,perl-dbix-class-cursor-cached)
-     ("perl-dbix-class-schema-loader" ,perl-dbix-class-schema-loader)
-     ("perl-hash-merge" ,perl-hash-merge)
-     ("perl-list-moreutils" ,perl-list-moreutils)
-     ("perl-module-runtime" ,perl-module-runtime)
-     ("perl-moose" ,perl-moose)
-     ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
-     ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
-     ("perl-moosex-types" ,perl-moosex-types)
-     ("perl-moosex-types-loadableclass" ,perl-moosex-types-loadableclass)
-     ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-     ("perl-namespace-clean" ,perl-namespace-clean)
-     ("perl-tie-ixhash" ,perl-tie-ixhash)
-     ("perl-try-tiny" ,perl-try-tiny)))
+   (list perl-carp-clan
+         perl-catalyst-component-instancepercontext
+         perl-catalyst-runtime
+         perl-catalystx-component-traits
+         perl-dbix-class
+         perl-dbix-class-cursor-cached
+         perl-dbix-class-schema-loader
+         perl-hash-merge
+         perl-list-moreutils
+         perl-module-runtime
+         perl-moose
+         perl-moosex-markasmethods
+         perl-moosex-nonmoose
+         perl-moosex-types
+         perl-moosex-types-loadableclass
+         perl-namespace-autoclean
+         perl-namespace-clean
+         perl-tie-ixhash
+         perl-try-tiny))
   (home-page "https://metacpan.org/release/Catalyst-Model-DBIC-Schema")
   (synopsis "DBIx::Class::Schema Model Class")
   (description "This is a Catalyst Model for DBIx::Class::Schema-based
@@ -2429,10 +2370,8 @@ Models.")
          "0811rj45q4v2y8wka3wb9d5m4vbyhcmkvddf2wz4x69awzjbhgc7"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-runtime perl-datetime perl-moose
+           perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-AccessLog")
     (synopsis "Request logging from within Catalyst")
     (description "This Catalyst plugin enables you to create \"access logs\"
@@ -2455,19 +2394,18 @@ for you.  It will work even with Catalyst debug logging turned off.")
          "0v6hb4r1wv3djrnqvnjcn3xx1scgqzx8nyjdg9lfc1ybvamrl0rn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-string-rewriteprefix" ,perl-string-rewriteprefix)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-catalyst-plugin-session
+           perl-catalyst-runtime
+           perl-class-inspector
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-namespace-autoclean
+           perl-string-rewriteprefix
+           perl-test-exception
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Authentication")
     (synopsis "Infrastructure plugin for the Catalyst authentication framework")
     (description "The authentication plugin provides generic user support for
@@ -2491,14 +2429,10 @@ system authorises them to do).")
          "0l83lkwmq0lngwh8b1rv3r719pn8w1gdbyhjqm74rnd0wbjl8h7f"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-exception))
     (propagated-inputs
-     `(("perl-catalyst-plugin-authentication"
-        ,perl-catalyst-plugin-authentication)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-set-object" ,perl-set-object)
-       ("perl-universal-isa" ,perl-universal-isa)))
+     (list perl-catalyst-plugin-authentication perl-catalyst-runtime
+           perl-set-object perl-universal-isa))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Authorization-Roles")
     (synopsis "Role-based authorization for Catalyst")
@@ -2520,10 +2454,8 @@ authorization for Catalyst based on Catalyst::Plugin::Authentication.")
          "0llyj3v5nx9cx46jdbbvxf1lc9s9cxq5ml22xmx3wkb201r5qgaa"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-gd-securityimage" ,perl-gd-securityimage)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-catalyst-plugin-session perl-catalyst-runtime
+           perl-gd-securityimage perl-http-date))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Captcha")
     (synopsis "Captchas for Catalyst")
     (description "This plugin creates and validates Captcha images for
@@ -2544,13 +2476,10 @@ Catalyst.")
         (base32 "0w8r3bbxqnlykvra6sx3sh3wh8ylkj914xg5ql6nw11ddy56jaly"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-path-class" ,perl-path-class)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-path-class perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-config-any" ,perl-config-any)
-       ("perl-data-visitor" ,perl-data-visitor)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-config-any perl-data-visitor
+           perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-ConfigLoader")
     (synopsis "Load config files of various types")
     (description "This module will attempt to load find and load configuration
@@ -2571,18 +2500,15 @@ formats.")
         (base32 "0a451997zc2vjx7rvndgx1ldbrpic8sfbddyvncynh0zr8bhlqc5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-module-install perl-test-deep perl-test-exception))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-object-signature" ,perl-object-signature)
-       ("perl-test-www-mechanize-psgi" ,perl-test-www-mechanize-psgi)))
+     (list perl-catalyst-runtime
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-namespace-clean
+           perl-object-signature
+           perl-test-www-mechanize-psgi))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Session")
     (synopsis "Catalyst generic session plugin")
     (description "This plugin links the two pieces required for session
@@ -2604,13 +2530,10 @@ management in web applications together: the state, and the store.")
          "1rvxbfnpf9x2pc2zgpazlcgdlr2dijmxgmcs0m5nazs0w6xikssb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-plugin-session perl-catalyst-runtime perl-moose
+           perl-mro-compat perl-namespace-autoclean))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Session-State-Cookie")
     (synopsis "Maintain session IDs using cookies")
@@ -2635,13 +2558,12 @@ cookie mechanism.")
          "0x3j6zv3wr41jlwr6yb2jpmcx019ibyn11y8653ffnwhpzbpzsxs"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cache-fastmmap" ,perl-cache-fastmmap)
-       ("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-path-class" ,perl-path-class)))
+     (list perl-cache-fastmmap
+           perl-catalyst-plugin-session
+           perl-catalyst-runtime
+           perl-moosex-emulate-class-accessor-fast
+           perl-mro-compat
+           perl-path-class))
     (home-page
      "https://metacpan.org/release/Catalyst-Plugin-Session-Store-FastMmap")
     (synopsis "FastMmap session storage backend")
@@ -2664,11 +2586,9 @@ memory interprocess cache.  It is based on Cache::FastMmap.")
          "1b2ksz74cpigxqzf63rddar3vfmnbpwpdcbs11v0ml89pb8ar79j"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-devel-stacktrace perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-StackTrace")
     (synopsis "Stack trace on the Catalyst debug screen")
     (description "This plugin enhances the standard Catalyst debug screen by
@@ -2691,13 +2611,10 @@ number, file name, and code context surrounding the line number.")
          "0m4l627p2fvzr4i6sgdxhdvsx4wpa6qmaibsbxlg5x5yjs7k7drn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-types" ,perl-moosex-types)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)))
+     (list perl-catalyst-runtime perl-mime-types perl-moose
+           perl-moosex-types perl-namespace-autoclean))
     (home-page "https://metacpan.org/release/Catalyst-Plugin-Static-Simple")
     (synopsis "Simple serving of static pages")
     (description "The Static::Simple plugin is designed to make serving static
@@ -2723,45 +2640,40 @@ MIME type directly to the browser, without being processed through Catalyst.")
          "001yk1i0xwn4v308qx15nvnp6v9qfdigdlvz1rgw5zpnq7kwnq1a"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (propagated-inputs
-     `(("perl-cgi-simple" ,perl-cgi-simple)
-       ("perl-cgi-struct" ,perl-cgi-struct)
-       ("perl-class-c3-adopt-next" ,perl-class-c3-adopt-next)
-       ("perl-class-date" ,perl-class-date)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-http-body" ,perl-http-body)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-emulate-class-accessor-fast"
-        ,perl-moosex-emulate-class-accessor-fast)
-       ("perl-moosex-getopt" ,perl-moosex-getopt)
-       ("perl-moosex-methodattributes" ,perl-moosex-methodattributes)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-perlio-utf8-strict" ,perl-perlio-utf8_strict)
-       ("perl-plack" ,perl-plack)
-       ("perl-plack-middleware-fixmissingbodyinredirect"
-        ,perl-plack-middleware-fixmissingbodyinredirect)
-       ("perl-plack-middleware-methodoverride"
-        ,perl-plack-middleware-methodoverride)
-       ("perl-plack-middleware-removeredundantbody"
-        ,perl-plack-middleware-removeredundantbody)
-       ("perl-plack-middleware-reverseproxy"
-        ,perl-plack-middleware-reverseproxy)
-       ("perl-plack-test-externalserver" ,perl-plack-test-externalserver)
-       ("perl-safe-isa" ,perl-safe-isa)
-       ("perl-string-rewriteprefix" ,perl-string-rewriteprefix)
-       ("perl-text-simpletable" ,perl-text-simpletable)
-       ("perl-tree-simple" ,perl-tree-simple)
-       ("perl-tree-simple-visitorfactory" ,perl-tree-simple-visitorfactory)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)
-       ("perl-uri-ws" ,perl-uri-ws)))
+     (list perl-cgi-simple
+           perl-cgi-struct
+           perl-class-c3-adopt-next
+           perl-class-date
+           perl-class-load
+           perl-data-dump
+           perl-http-body
+           perl-http-message
+           perl-json-maybexs
+           perl-libwww
+           perl-module-pluggable
+           perl-moose
+           perl-moosex-emulate-class-accessor-fast
+           perl-moosex-getopt
+           perl-moosex-methodattributes
+           perl-namespace-clean
+           perl-path-class
+           perl-perlio-utf8_strict
+           perl-plack
+           perl-plack-middleware-fixmissingbodyinredirect
+           perl-plack-middleware-methodoverride
+           perl-plack-middleware-removeredundantbody
+           perl-plack-middleware-reverseproxy
+           perl-plack-test-externalserver
+           perl-safe-isa
+           perl-string-rewriteprefix
+           perl-text-simpletable
+           perl-tree-simple
+           perl-tree-simple-visitorfactory
+           perl-try-tiny
+           perl-uri
+           perl-uri-ws))
     (home-page "https://metacpan.org/release/Catalyst-Runtime")
     (synopsis "The Catalyst Framework Runtime")
     (description "Catalyst is a modern framework for making web applications.
@@ -2785,14 +2697,10 @@ run an application on the web, either by doing them itself, or by letting you
          "02kir63d5cs2ipj3fn1qlmmx3gqi1xqzrxfr4pv5vjhjgsm0zgx7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-catalystx-roleapplicator" ,perl-catalystx-roleapplicator)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-catalyst-runtime perl-catalystx-roleapplicator
+           perl-http-message perl-module-install))
     (propagated-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-uri" ,perl-uri)))
+     (list perl-moose perl-namespace-autoclean perl-uri))
     (home-page
      "https://metacpan.org/release/Catalyst-TraitFor-Request-ProxyBase")
     (synopsis "Replace request base with value passed by HTTP proxy")
@@ -2816,12 +2724,12 @@ replaced with the contents of the X-Request-Base header.")
          "1qgq6y9iwfbhbkbgpw9czang2ami6z8jk1zlagrzdisy4igqzkvs"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-simple" ,perl-test-simple)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)
-       ("perl-text-csv" ,perl-text-csv)
-       ("perl-xml-simple" ,perl-xml-simple)))
+     (list perl-catalyst-runtime
+           perl-module-install
+           perl-test-simple
+           perl-test-www-mechanize-catalyst
+           perl-text-csv
+           perl-xml-simple))
     (home-page "https://metacpan.org/release/Catalyst-View-Download")
     (synopsis "Download data in many formats")
     (description "The purpose of this module is to provide a method for
@@ -2843,12 +2751,9 @@ table based report in a variety of formats (CSV, HTML, etc.).")
          "1v4xkzazs743sc7cd1kxkbi99cf00a4dadyyancckcbpi9p3znn5"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-yaml" ,perl-yaml)))
+     (list perl-module-install perl-yaml))
     (inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-json-maybexs" ,perl-json-maybexs)
-       ("perl-mro-compat" ,perl-mro-compat)))
+     (list perl-catalyst-runtime perl-json-maybexs perl-mro-compat))
     (home-page "https://metacpan.org/release/Catalyst-View-JSON")
     (synopsis "Catalyst JSON view")
     (description "Catalyst::View::JSON is a Catalyst View handler that returns
@@ -2868,13 +2773,13 @@ stash data in JSON format.")
       (base32 "0jzgpkgq5pwq82zlb0nykdyk40dfpsyn9ilz91d0wpixgi9i5pr8"))))
   (build-system perl-build-system)
   (propagated-inputs
-   `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-     ("perl-class-accessor" ,perl-class-accessor)
-     ("perl-data-dump" ,perl-data-dump)
-     ("perl-mro-compat" ,perl-mro-compat)
-     ("perl-path-class" ,perl-path-class)
-     ("perl-template-timer" ,perl-template-timer)
-     ("perl-template-toolkit" ,perl-template-toolkit)))
+   (list perl-catalyst-runtime
+         perl-class-accessor
+         perl-data-dump
+         perl-mro-compat
+         perl-path-class
+         perl-template-timer
+         perl-template-toolkit))
   (home-page "https://metacpan.org/release/Catalyst-View-TT")
   (synopsis "Template View Class")
   (description "This module is a Catalyst view class for the Template
@@ -2895,16 +2800,14 @@ Toolkit.")
          "0iq4ci8m6g2c4g01fvdl568y7pjz28f3widk986v3pyhr7ll8j88"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-moose" ,perl-moose)
-       ("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moosex-methodattributes" ,perl-moosex-methodattributes)))
+     (list perl-moose perl-catalyst-runtime perl-moosex-methodattributes))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-traits-pluggable" ,perl-moosex-traits-pluggable)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-list-moreutils" ,perl-list-moreutils)))
+     (list perl-catalyst-runtime
+           perl-class-load
+           perl-moose
+           perl-moosex-traits-pluggable
+           perl-namespace-autoclean
+           perl-list-moreutils))
     (home-page "https://metacpan.org/release/CatalystX-Component-Traits")
     (synopsis "Trait Loading and Resolution for Catalyst Components")
     (description "Adds a \"COMPONENT\" in Catalyst::Component method to your
@@ -2928,9 +2831,7 @@ MooseX::Traits::Pluggable.")
          "0vwaapxn8g5hs2xp63c4dwv9jmapmji4272fakssvgc9frklg3p2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-relatedclassroles" ,perl-moosex-relatedclassroles)))
+     (list perl-catalyst-runtime perl-moose perl-moosex-relatedclassroles))
     (home-page "https://metacpan.org/release/CatalystX-RoleApplicator")
     (synopsis "Apply roles to Catalyst classes")
     (description "CatalystX::RoleApplicator applies roles to Catalyst
@@ -2952,13 +2853,10 @@ application classes.")
          "08jvibq4v8xjj0c3cr93h0w8w0c88ajwjn37xjy7ygxl9krlffp6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-www-mechanize-catalyst" ,perl-test-www-mechanize-catalyst)))
+     (list perl-module-install perl-test-www-mechanize-catalyst))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("starman" ,starman)))
+     (list perl-catalyst-runtime perl-moose perl-namespace-autoclean
+           starman))
     (home-page "https://metacpan.org/release/CatalystX-Script-Server-Starman")
     (synopsis "Catalyst development server with Starman")
     (description "This module provides a Catalyst extension to replace the
@@ -2978,11 +2876,9 @@ development server with Starman.")
         (base32 "1bxrpxv95js8yinicminxdg41xvd85haj2gvlywg3zqdb66smqy8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-deep perl-test-nowarnings perl-test-warn))
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-parser))
     (home-page "https://metacpan.org/release/CGI")
     (synopsis "Handle Common Gateway Interface requests and responses")
     (description "CGI.pm is a stable, complete and mature solution for
@@ -3006,7 +2902,7 @@ headers.")
         (base32
          "163ixq9kninqq094z2rnkg9pv3bcmvjphlww4vksfrzhq3h9pjdf"))))
     (build-system perl-build-system)
-    (inputs `(("perl-cgi" ,perl-cgi)))
+    (inputs (list perl-cgi))
     (home-page
      "https://metacpan.org/release/CGI-FormBuilder")
     (synopsis
@@ -3032,8 +2928,8 @@ form-based applications.")
          "1xsl2pz1jrh127pq0b01yffnj4mnp9nvkp88h5mndrscq9hn8xa6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
-    (inputs `(("perl-cgi" ,perl-cgi)))
+     (list perl-module-build))
+    (inputs (list perl-cgi))
     (home-page
      "https://metacpan.org/release/CGI-Session")
     (synopsis
@@ -3056,10 +2952,8 @@ HTTP requests.")
         (base32 "13c7iwnnavky10ab87pi8jc1kqph03s0rhvj7myn7szhbfisc4gn"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-io-stringy" ,perl-io-stringy) ; for IO::Scalar
-       ("perl-module-build" ,perl-module-build)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)))
+     (list perl-io-stringy ; for IO::Scalar
+           perl-module-build perl-test-exception perl-test-nowarnings))
     (home-page "https://metacpan.org/release/CGI-Simple")
     (synopsis "CGI interface that is CGI.pm compliant")
     (description "CGI::Simple provides a relatively lightweight drop in
@@ -3081,7 +2975,7 @@ parameter parsing, file upload, cookie handling and header generation.")
          "0v4xq2qpryr7i6jngw1wpn8yr2kiib10yxp4aih90vfdznkqsgfi"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (home-page "https://metacpan.org/release/CGI-Struct")
     (synopsis "Build structures from CGI data")
     (description "This is a module for building structured data from CGI
@@ -3102,10 +2996,9 @@ inputs, in a manner reminiscent of how PHP does.")
          "0h6qqdg1yzqkdxp7hqlp0qa7d1y64nilgimxs79dys2ryjfpcknh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-datetime perl-http-date))
     (home-page "https://metacpan.org/release/DateTime-Format-HTTP")
     (synopsis "Date conversion routines")
     (description "This module provides functions that deal with the date
@@ -3126,7 +3019,7 @@ formats used by the HTTP protocol.")
          "060jzf45dlwysw5wsm7av1wvpl06xgk415kwwpvv89r6wda3md5d"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/Digest-MD5-File")
     (synopsis "MD5 sums for files and urls")
     (description "Digest::MD5::File is a Perl extension for getting MD5 sums
@@ -3179,10 +3072,7 @@ with Encode::decode(locale => $string).")
          (add-after 'unpack 'set-env
            (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1"))))))
     (inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-class-errorhandler perl-html-parser perl-libwww perl-uri))
     (home-page "https://metacpan.org/release/Feed-Find")
     (synopsis "Syndication feed auto-discovery")
     (description "@code{Feed::Find} implements feed auto-discovery for finding
@@ -3204,7 +3094,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
                "0vmzw1mhv580flzkla80gvwfpficnhlbqr1dnlf9x50bw7n18k62"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-date" ,perl-http-date)))
+     (list perl-http-date))
     (license license:perl-license)
     (synopsis "Perl directory listing parser")
     (description
@@ -3227,17 +3117,17 @@ which can be used to parse directory listings.")
                 "perl-finance-quote-unuse-mozilla-ca.patch"))))
    (build-system perl-build-system)
    (propagated-inputs
-    `(("perl-cgi" ,perl-cgi)
-      ("perl-datetime" ,perl-datetime)
-      ("perl-html-parser" ,perl-html-parser)
-      ("perl-html-tableextract" ,perl-html-tableextract)
-      ("perl-html-tree" ,perl-html-tree)
-      ("perl-http-cookies" ,perl-http-cookies)
-      ("perl-http-message" ,perl-http-message)
-      ("perl-json" ,perl-json)
-      ("perl-libwww" ,perl-libwww)
-      ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
-      ("perl-uri" ,perl-uri)))
+    (list perl-cgi
+          perl-datetime
+          perl-html-parser
+          perl-html-tableextract
+          perl-html-tree
+          perl-http-cookies
+          perl-http-message
+          perl-json
+          perl-libwww
+          perl-lwp-protocol-https
+          perl-uri))
    (home-page "https://metacpan.org/release/Finance-Quote")
    (synopsis "Stock and mutual fund quotes")
    (description
@@ -3282,7 +3172,7 @@ described in RFC 2744.")
          "0axknss8c368r5i082yhkfj8mq0w4nglfrpcxcayyzzj13qimvzk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-tree" ,perl-html-tree)))
+     (list perl-html-tree))
     (home-page "https://metacpan.org/release/HTML-Element-Extended")
     (synopsis "Manipulate tables of HTML::Element")
     (description
@@ -3303,11 +3193,8 @@ composed of HTML::Element style components.")
         (base32 "14i4ldyvdvhdhvfhh9kiq6z853q2f84biq8vcpv1k5w2r80wdiin"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-uri" ,perl-uri)))
+     (list perl-html-parser perl-html-tagset perl-http-message
+           perl-lwp-mediatypes perl-uri))
     (home-page "https://metacpan.org/release/HTML-Form")
     (synopsis "Perl class representing an HTML form element")
     (description "Objects of the HTML::Form class represents a single HTML
@@ -3330,14 +3217,14 @@ composed of HTML::Element style components.")
          "06p7w4zd42b2yh541mlzyqj40lwmvvn3fyqi8big4mf34la7m2jm"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-cpan-meta" ,perl-test-cpan-meta)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-eol" ,perl-test-eol)
-       ("perl-test-memory-cycle" ,perl-test-memory-cycle)
-       ("perl-test-notabs" ,perl-test-notabs)))
+     (list perl-module-build
+           perl-test-cpan-meta
+           perl-test-differences
+           perl-test-eol
+           perl-test-memory-cycle
+           perl-test-notabs))
     (inputs
-     `(("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-parser))
     (home-page
      "https://metacpan.org/release/HTML-Scrubber")
     (synopsis
@@ -3359,9 +3246,7 @@ composed of HTML::Element style components.")
         (base32 "0lk02xpfxcg7ij4dvpsa4wjlzhmiizj0jfr3rwmdpbj69nvc93br"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl-html-parser perl-html-tagset perl-libwww))
     (home-page "https://metacpan.org/release/HTML-Lint")
     (synopsis "Check for HTML errors in a string or file")
     (description "HTML::Lint is a pure-Perl HTML parser and checker for
@@ -3382,8 +3267,7 @@ syntactic legitmacy.")
          "01jimmss3q68a89696wmclvqwb2ybz6xgabpnbp6mm6jcni82z8a"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-html-element-extended" ,perl-html-element-extended)
-       ("perl-html-parser" ,perl-html-parser)))
+     (list perl-html-element-extended perl-html-parser))
     (home-page "https://metacpan.org/release/HTML-TableExtract")
     (synopsis "Extract contents from HTML tables")
     (description
@@ -3405,12 +3289,9 @@ in tables within an HTML document, either as text or encoded element trees.")
          "1gyvm4qlwm9y6hczkpnrdfl303ggbybr0nqxdjw09hii8yw4sdzh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-module-build perl-test-fatal))
     (propagated-inputs
-     `(("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tagset" ,perl-html-tagset)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl-html-parser perl-html-tagset perl-libwww))
     (home-page "https://metacpan.org/release/HTML-Tree")
     (synopsis "Work with HTML in a DOM-like tree structure")
     (description "This distribution contains a suite of modules for
@@ -3431,8 +3312,7 @@ representing, creating, and extracting information from HTML syntax trees.")
                "12v05ywlnsi9lc17z32k9jxx3sj1viy7y1wpl7n4az76v7hwfa7c"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-html-tagset" ,perl-html-tagset)
-       ("perl-http-message" ,perl-http-message)))
+     (list perl-html-tagset perl-http-message))
     (license license:perl-license)
     (synopsis "Perl HTML parser class")
     (description
@@ -3475,7 +3355,7 @@ kinds of HTML parsing operations.")
                 "17qjw8swj2q4b1ic285pndgrkmvpsqw0j68nhqzpk1daydhsyiv5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cgi" ,perl-cgi)))
+     (list perl-cgi))
     (home-page "https://metacpan.org/release/HTML-Template")
     (synopsis "HTML-like templates")
     (description
@@ -3502,10 +3382,9 @@ you to separate design from the data.")
          "15vj488i62mdp4ps9k77h39prj70i7anb6b0j8nm7l9vbdc2q3gw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)))
+     (list perl-test-deep))
     (propagated-inputs
-     `(("perl-file-temp" ,perl-file-temp)
-       ("perl-http-message" ,perl-http-message))) ;For HTTP::Headers
+     (list perl-file-temp perl-http-message)) ;For HTTP::Headers
     (home-page "https://metacpan.org/release/HTTP-Body")
     (synopsis "HTTP Body Parser")
     (description "HTTP::Body parses chunks of HTTP POST data and supports
@@ -3526,13 +3405,9 @@ and multipart/form-data.")
         (base32 "0jk0ps4i67dhhhwaxwwa9nkv3n6n5w44xlnwyzvk59735pwvyjh0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-requires" ,perl-test-requires)
-       ("perl-time-mock" ,perl-time-mock)
-       ("perl-uri" ,perl-uri)))
+     (list perl-test-deep perl-test-requires perl-time-mock perl-uri))
     (inputs
-     `(("perl-time-local" ,perl-time-local)
-       ("perl-http-date" ,perl-http-date)))
+     (list perl-time-local perl-http-date))
     (home-page "https://metacpan.org/release/HTTP-CookieJar")
     (synopsis "Minimalist HTTP user agent cookie jar")
     (description "This module implements a minimalist HTTP user agent cookie
@@ -3553,7 +3428,7 @@ jar in conformance with RFC 6265 <http://tools.ietf.org/html/rfc6265>.")
                "13rnz3233vbsfariya4njiyfaj6k94j6bvlyh3dmfmh24hpqgx77"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)))
+     (list perl-http-message))
     (license license:perl-license)
     (synopsis "Perl HTTP cookie jars")
     (description
@@ -3576,8 +3451,7 @@ object knows about.")
                "1hmd2isrkilf0q0nkxms1q64kikjmcw9imbvrjgky6kh89vqdza3"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)))
+     (list perl-http-message perl-lwp-mediatypes))
     (license license:perl-license)
     (synopsis "Perl simple http server class")
     (description
@@ -3620,7 +3494,7 @@ used by the HTTP protocol (and then some more).")
        (base32
         "0z77nflj8zdcfg70kc93glq5kmd6qxn2nf7h70x4xhfg25wkvr1q"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-cgi" ,perl-cgi)))
+    (native-inputs (list perl-cgi))
     (home-page "https://metacpan.org/release/HTTP-Lite")
     (synopsis "Lightweight HTTP implementation")
     (description "@code{HTTP::Lite} is a stand-alone lightweight
@@ -3649,13 +3523,10 @@ processing of request data as it arrives.")
                "04lih0fn89jpyk74c4aq1rzq18h8v4zd3x0lik2r9dl8sdqd2q6h"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-try-tiny))
     (propagated-inputs
-     `(("perl-encode-locale" ,perl-encode-locale)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-io-html" ,perl-io-html)
-       ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
-       ("perl-uri" ,perl-uri)))
+     (list perl-encode-locale perl-http-date perl-io-html
+           perl-lwp-mediatypes perl-uri))
     (license license:perl-license)
     (synopsis "Perl HTTP style message")
     (description
@@ -3676,7 +3547,7 @@ processing of request data as it arrives.")
                "05p053vjs5g91v5cmjnny7a3xzddz5k7vnjw81wfh01ilqg9qwhw"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)))
+     (list perl-http-message))
     (license license:perl-license)
     (synopsis "Perl http content negotiation")
     (description
@@ -3702,8 +3573,7 @@ fields in the request.")
          "0idwq3jk595xil65lmxz128ha7s3r2n5zknisddpgwnqrghs3igq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-http-message" ,perl-http-message)
-       ("perl-uri" ,perl-uri)))
+     (list perl-http-message perl-uri))
     (home-page "https://metacpan.org/release/HTTP-Parser")
     (synopsis "Parse HTTP/1.1 requests")
     (description "This is an HTTP request parser.  It takes chunks of text as
@@ -3726,7 +3596,7 @@ supported.")
          "02d84xq1mm53c7jl33qyb7v5w4372vydp74z6qj0vc96wcrnhkkr"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/HTTP-Parser-XS")
     (synopsis "Fast HTTP request parser")
     (description "HTTP::Parser::XS is a fast, primitive HTTP request/response
@@ -3747,8 +3617,7 @@ parser.")
          "1smwmiarwcgq7vjdblnb6ldi2x1s5sk5p15p7xvm5byiqq3znnwl"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)
-       ("perl-http-message" ,perl-http-message)))
+     (list perl-class-accessor perl-http-message))
     (home-page "https://metacpan.org/release/HTTP-Request-AsCGI")
     (synopsis "Set up a CGI environment from an HTTP::Request")
     (description "This module provides a convenient way to set up a CGI
@@ -3769,7 +3638,7 @@ environment from an HTTP::Request.")
          "0k6bg7k6mjixfzxdkkdrhqvaqmdhjszx0zsk8g0bimiby6j9z4yq"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-cgi" ,perl-cgi)))
+     (list perl-cgi))
     (arguments
      ;; See the discussion of a related tests issue at
      ;; https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00346.html
@@ -3804,11 +3673,8 @@ http-based UI to your existing tools.")
          "11wkxxqj3ff84rgj9q2gzkdgscwp3fzj205846k9ycqinlpsmgfx"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-http-cookiejar" ,perl-http-cookiejar)
-       ("perl-io-socket-ip" ,perl-io-socket-ip)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-ssleay" ,perl-net-ssleay)))
+     (list perl-http-cookiejar perl-io-socket-ip perl-io-socket-ssl
+           perl-mozilla-ca perl-net-ssleay))
     (home-page "https://metacpan.org/release/HTTP-Tiny")
     (synopsis "HTTP/1.1 client")
     (description "This is a very simple HTTP/1.1 client, designed for doing
@@ -3832,8 +3698,7 @@ It supports proxies and redirection.  It also correctly resumes after EINTR.")
          "199sa722amvwhq0czjfb7psj3hbqmvni5vxkrm579r5943pg0rax"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-which" ,perl-file-which)
-       ("perl-ipc-run3" ,perl-ipc-run3)))
+     (list perl-file-which perl-ipc-run3))
     (home-page "https://metacpan.org/release/HTTP-Tinyish")
     (synopsis "@code{HTTP::Tiny} compatible HTTP client wrappers")
     (description
@@ -3876,7 +3741,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
        (sha256
         (base32 "0ihlpxrkq1xrvhnq52nhghanskic718ch8kpp642afgq72i4b6l4"))))
     (build-system perl-build-system)
-    (native-inputs `(("perl-module-build" ,perl-module-build)))
+    (native-inputs (list perl-module-build))
     (home-page "https://metacpan.org/release/IO-Socket-IP")
     (synopsis "Family-neutral IP socket supporting both IPv4 and IPv6")
     (description "This module provides a protocol-independent way to use IPv4
@@ -3886,21 +3751,19 @@ and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
 (define-public perl-io-socket-ssl
   (package
     (name "perl-io-socket-ssl")
-    (version "2.066")
+    (version "2.068")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SU/SULLR/"
                                   "IO-Socket-SSL-" version ".tar.gz"))
               (sha256
                (base32
-                "1kgbws7dwp2hh16qid7169dfkhmcwg7dz9ffbm6k0id5h53hciqd"))
-              (patches (search-patches
-                        "perl-io-socket-ssl-openssl-1.0.2f-fix.patch"))))
+                "1ycgzg1l7p07y5wc0vzgnj122vm51p5aqpi4s56pp0piaq0gq824"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-net-ssleay" ,perl-net-ssleay)
-       ;; for IDN support
-       ("perl-uri" ,perl-uri)))
+     (list perl-net-ssleay
+           ;; for IDN support
+           perl-uri))
     (synopsis "Nearly transparent SSL encapsulation for IO::Socket::INET")
     (description
      "IO::Socket::SSL makes using SSL/TLS much easier by wrapping the
@@ -3925,22 +3788,20 @@ select or poll.")
                "0869hn711d6fd6yil8p88wij6p1zdrbnycy7p9p176q39ajd7l61"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-needs" ,perl-test-needs)
-       ("perl-test-requiresinternet" ,perl-test-requiresinternet)))
+     (list perl-test-fatal perl-test-needs perl-test-requiresinternet))
     (propagated-inputs
-     `(("perl-encode-locale" ,perl-encode-locale)
-       ("perl-file-listing" ,perl-file-listing)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-http-cookies" ,perl-http-cookies)
-       ("perl-http-daemon" ,perl-http-daemon)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-negotiate" ,perl-http-negotiate)
-       ("perl-net-http" ,perl-net-http)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)
-       ("perl-www-robotrules" ,perl-www-robotrules)))
+     (list perl-encode-locale
+           perl-file-listing
+           perl-html-parser
+           perl-http-cookies
+           perl-http-daemon
+           perl-http-date
+           perl-http-message
+           perl-http-negotiate
+           perl-net-http
+           perl-try-tiny
+           perl-uri
+           perl-www-robotrules))
     (license license:perl-license)
     (synopsis "Perl modules for the WWW")
     (description
@@ -3967,10 +3828,9 @@ help you implement simple HTTP servers.")
          "176f6vbk1018i0y7xj9d406ndbjgwzan2j9nihxnsahzg2vr2vz2"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-libwww perl-uri))
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (home-page "https://metacpan.org/release/LWP-Online")
     (synopsis "Checks whether your process has access to the web")
     (description "This module attempts to answer, as accurately as it can, one
@@ -3995,7 +3855,7 @@ not have DNS.  We might not have a network card at all!")
                "1n8rg6csv3dsvymg06cmxipimr6cb1g9r903ghm1qsmiv89cl6wg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)))
+     (list perl-test-fatal))
     (license license:perl-license)
     (synopsis "Perl module to guess the media type for a file or a URL")
     (description
@@ -4019,12 +3879,9 @@ exists it is used instead.")
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-requiresinternet" ,perl-test-requiresinternet)))
+     (list perl-test-requiresinternet))
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-http" ,perl-net-http)))
+     (list perl-io-socket-ssl perl-libwww perl-mozilla-ca perl-net-http))
     (home-page "https://metacpan.org/release/LWP-Protocol-https")
     (synopsis "HTTPS support for LWP::UserAgent")
     (description "The LWP::Protocol::https module provides support for using
@@ -4045,7 +3902,7 @@ https schemed URLs with LWP.")
          "1hw7wy7f82kl61xjwkgmhv1ixgg56dhgfr45wxn6ahc0qys5mkix"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/LWP-UserAgent-Cached")
     (synopsis "Simple caching for LWP::UserAgent")
     (description "LWP::UserAgent::Cached is an LWP::UserAgent subclass with
@@ -4067,7 +3924,7 @@ instead of making an HTTP request.")
          "0lyvbpjng7yfvyha9rp2y2c6liz5hhplmd2grc8jlsfkih7dbn06"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)))
+     (list perl-libwww))
     (home-page "https://metacpan.org/release/LWP-UserAgent-Determined")
     (synopsis "Virtual browser that retries errors")
     (description "LWP::UserAgent::Determined works just like LWP::UserAgent,
@@ -4091,10 +3948,10 @@ and retry a few times.")
         "0gfhw3jbs25yya2dryv8xvyn9myngcfcmsybj7gkq62fnznil16c"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ;; Users should instead make sure SSL_ca_path is set properly.
-       ;; ("perl-mozilla-ca" ,perl-mozilla-ca)
-       ("perl-net-dns" ,perl-net-dns)))
+     (list perl-libwww
+           ;; Users should instead make sure SSL_ca_path is set properly.
+           ;; ("perl-mozilla-ca" ,perl-mozilla-ca)
+           perl-net-dns))
     (home-page "https://metacpan.org/release/LWPx-ParanoidAgent")
     (synopsis "Security enhanced subclass of LWP::UserAgent")
     (description "@code{LWPx::ParanoidAgent} is a class subclassing
@@ -4121,28 +3978,26 @@ is limited to http and https.")
                  "perl-net-amazon-s3-moose-warning.patch"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-libwww perl-test-exception))
     (propagated-inputs
-     `(("perl-data-stream-bulk" ,perl-data-stream-bulk)
-       ("perl-datetime-format-http" ,perl-datetime-format-http)
-       ("perl-digest-hmac" ,perl-digest-hmac)
-       ("perl-digest-md5-file" ,perl-digest-md5-file)
-       ("perl-file-find-rule" ,perl-file-find-rule)
-       ("perl-http-date" ,perl-http-date)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-lwp-useragent-determined" ,perl-lwp-useragent-determined)
-       ("perl-mime-types" ,perl-mime-types)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-strictconstructor" ,perl-moosex-strictconstructor)
-       ("perl-moosex-types-datetime-morecoercions"
-        ,perl-moosex-types-datetime-morecoercions)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-term-encoding" ,perl-term-encoding)
-       ("perl-term-progressbar-simple" ,perl-term-progressbar-simple)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-data-stream-bulk
+           perl-datetime-format-http
+           perl-digest-hmac
+           perl-digest-md5-file
+           perl-file-find-rule
+           perl-http-date
+           perl-http-message
+           perl-lwp-useragent-determined
+           perl-mime-types
+           perl-moose
+           perl-moosex-strictconstructor
+           perl-moosex-types-datetime-morecoercions
+           perl-path-class
+           perl-regexp-common
+           perl-term-encoding
+           perl-term-progressbar-simple
+           perl-uri
+           perl-xml-libxml))
     (home-page "https://metacpan.org/release/Net-Amazon-S3")
     (synopsis "Perl interface to Amazon S3")
     (description "This module provides a Perlish interface to Amazon S3.")
@@ -4162,8 +4017,7 @@ is limited to http and https.")
                "1i7fk6q1iaxzgf82mjd5hg77hvy7dbb79488cijg16dyfrds6nip"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
-       ("perl-uri" ,perl-uri)))
+     (list perl-io-socket-ssl perl-uri))
     (license license:perl-license)
     (synopsis "Perl low-level HTTP connection (client)")
     (description
@@ -4214,7 +4068,7 @@ or to multiple server ports.")
          "001a6dcfahf7kkyirqkc8jd4fh4fkal7n7vm9c4dblqrvmdc8abv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list perl-io-socket-ssl))
     (home-page "https://metacpan.org/release/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
     (description "SSL support for Net::SMTP.")
@@ -4234,22 +4088,21 @@ or to multiple server ports.")
          "081jg0xddzpg2anmqi9i6d7vs6c8z7k557bf8xl6vgb3h95pin5w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)
-       ("perl-file-sharedir-install" ,perl-file-sharedir-install)))
+     (list perl-test-requires perl-file-sharedir-install))
     (propagated-inputs
-     `(("perl-apache-logformat-compiler" ,perl-apache-logformat-compiler)
-       ("perl-devel-stacktrace" ,perl-devel-stacktrace)
-       ("perl-devel-stacktrace-ashtml" ,perl-devel-stacktrace-ashtml)
-       ("perl-file-sharedir" ,perl-file-sharedir)
-       ("perl-hash-multivalue" ,perl-hash-multivalue)
-       ("perl-http-body" ,perl-http-body)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-tiny" ,perl-http-tiny)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-stream-buffered" ,perl-stream-buffered)
-       ("perl-test-tcp" ,perl-test-tcp)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-uri" ,perl-uri)))
+     (list perl-apache-logformat-compiler
+           perl-devel-stacktrace
+           perl-devel-stacktrace-ashtml
+           perl-file-sharedir
+           perl-hash-multivalue
+           perl-http-body
+           perl-http-message
+           perl-http-tiny
+           perl-libwww
+           perl-stream-buffered
+           perl-test-tcp
+           perl-try-tiny
+           perl-uri))
     (home-page "https://metacpan.org/release/Plack")
     (synopsis "Perl Superglue for Web frameworks and servers (PSGI toolkit)")
     (description "Plack is a set of tools for using the PSGI stack.  It
@@ -4273,10 +4126,9 @@ WSGI.")
          "0xf2visi16hgwgyp9q0cjr10ikbn474hjia5mj8mb2scvbkrbni8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-requires" ,perl-test-requires)))
+     (list perl-module-install perl-test-requires))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-Deflater")
     (synopsis "Compress response body with Gzip or Deflate")
     (description
@@ -4302,9 +4154,8 @@ servers.")
          "14dkrmccq7a5vpymx5dv8032gfcvhsw2i6v5sh3c4ym5ymlx08kc"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-html-parser" ,perl-html-parser) ;for HTML::Entities
-       ("perl-http-message" ,perl-http-message)
-       ("perl-plack" ,perl-plack)))     ;for Plack::Test
+     (list perl-html-parser ;for HTML::Entities
+           perl-http-message perl-plack))     ;for Plack::Test
     (home-page
      "https://metacpan.org/release/Plack-Middleware-FixMissingBodyInRedirect")
     (synopsis "Plack::Middleware which sets body for redirect response")
@@ -4326,9 +4177,9 @@ already set.")
         (base32 "1wdmmav3rbhv49zpw311zrxxqmg1fz3f3q9src0ypgs8zcp5myyv"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-MethodOverride")
     (synopsis "Override REST methods to Plack apps via POST")
     (description "This middleware allows for POST requests that pretend to be
@@ -4351,7 +4202,7 @@ can say what method it actually meant.")
         (base32 "0zh83001rn5aqwpc1pn3di2h3ibzlf2dvkmkv05hnadpss9mzm40"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page
      "https://metacpan.org/release/Plack-Middleware-RemoveRedundantBody")
     (synopsis "Plack::Middleware which removes body for HTTP response")
@@ -4373,9 +4224,9 @@ required.")
         (base32 "0a512n62pnk5ayj3zdzyj50iy1qi8nwh6ygks2h7nrh7gp9k2jc7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Middleware-ReverseProxy")
     (synopsis "Supports app to run as a reverse proxy backend")
     (description "Plack::Middleware::ReverseProxy resets some HTTP headers,
@@ -4396,7 +4247,7 @@ and stop fake requests using @code{enable_if} directive in your app.psgi.")
         (base32 "1l1yj1l25679x7cbpd27ii7s1f1ajpkspif9xqnl21hczrbmrbsv"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)))
+     (list perl-plack))
     (home-page "https://metacpan.org/release/Plack-Test-ExternalServer")
     (synopsis "Run HTTP tests on external live servers")
     (description "This module allows your to run your Plack::Test tests
@@ -4417,7 +4268,7 @@ either mocked HTTP or a locally spawned server.")
         (base32 "0mvv9rqwrwlcfh8qrs0s47p85rhlnw15d4gbpyi802bddp0c6lry"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-test-sharedfork" ,perl-test-sharedfork)))
+     (list perl-test-sharedfork))
     (arguments `(#:tests? #f))          ;related to signaling in t/05_sigint.t
     (home-page "https://metacpan.org/release/Test-TCP")
     (synopsis "Testing TCP programs")
@@ -4437,13 +4288,13 @@ either mocked HTTP or a locally spawned server.")
         (base32 "1jsywlbxhqw39ij7s8vmgff5vys58vlfaq27072awacnxc65aal4"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-carp-assert-more" ,perl-carp-assert-more)
-       ("perl-html-form" ,perl-html-form)
-       ("perl-html-lint" ,perl-html-lint)
-       ("perl-http-server-simple" ,perl-http-server-simple)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-test-longstring" ,perl-test-longstring)
-       ("perl-www-mechanize" ,perl-www-mechanize)))
+     (list perl-carp-assert-more
+           perl-html-form
+           perl-html-lint
+           perl-http-server-simple
+           perl-libwww
+           perl-test-longstring
+           perl-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize")
     (synopsis "Testing-specific WWW::Mechanize subclass")
     (description "Test::WWW::Mechanize is a subclass of the Perl module
@@ -4463,21 +4314,20 @@ WWW::Mechanize that incorporates features for web application testing.")
         (base32 "1cdc2q16vs6fb335pzaislz2rx1ph9acaxyp7v5hv9xbwwddwfqq"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-catalyst-plugin-session" ,perl-catalyst-plugin-session)
-       ("perl-catalyst-plugin-session-state-cookie"
-        ,perl-catalyst-plugin-session-state-cookie)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-utf8" ,perl-test-utf8)))
+     (list perl-catalyst-plugin-session
+           perl-catalyst-plugin-session-state-cookie
+           perl-module-install
+           perl-test-exception
+           perl-test-pod
+           perl-test-utf8))
     (propagated-inputs
-     `(("perl-catalyst-runtime" ,perl-catalyst-runtime)
-       ("perl-class-load" ,perl-class-load)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-moose" ,perl-moose)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-test-www-mechanize" ,perl-test-www-mechanize)
-       ("perl-www-mechanize" ,perl-www-mechanize)))
+     (list perl-catalyst-runtime
+           perl-class-load
+           perl-libwww
+           perl-moose
+           perl-namespace-clean
+           perl-test-www-mechanize
+           perl-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize-Catalyst")
     (synopsis "Test::WWW::Mechanize for Catalyst")
     (description "The Test::WWW::Mechanize::Catalyst module meshes the
@@ -4499,10 +4349,9 @@ testing of Catalyst applications without needing to start up a web server.")
          "0fsh2i05kf1kfavv2r9kmnjl7qlyqrd11ikc0qcqzzxsqzzjkg9r"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-pod" ,perl-test-pod)))
+     (list perl-test-pod))
     (propagated-inputs
-     `(("perl-plack" ,perl-plack)
-       ("perl-test-www-mechanize" ,perl-test-www-mechanize)))
+     (list perl-plack perl-test-www-mechanize))
     (home-page "https://metacpan.org/release/Test-WWW-Mechanize-PSGI")
     (synopsis "Test PSGI programs using WWW::Mechanize")
     (description "PSGI is a specification to decouple web server environments
@@ -4515,18 +4364,18 @@ applications.")
 (define-public perl-uri
   (package
     (name "perl-uri")
-    (version "1.76")
+    (version "5.05")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/authors/id/O/OA/OALDERS/"
                                  "URI-" version ".tar.gz"))
              (sha256
               (base32
-               "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
+               "1v3r3ck67w272kzfgm1nd3wb41av1hlnza56vkxxj1i7s3917hd5"))))
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
-     `(("perl-test-needs" ,perl-test-needs)))
+     (list perl-test-needs))
     (license license:perl-license)
     (synopsis "Perl Uniform Resource Identifiers (absolute and relative)")
     (description
@@ -4550,9 +4399,7 @@ and updated by RFC 2732.")
     (arguments
      `(#:tests? #f)) ; Tests require internet connection to succeed
     (inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)))
+     (list perl-class-errorhandler perl-libwww perl-uri))
     (home-page "https://metacpan.org/release/URI-Fetch")
     (synopsis "Smart URI fetching/caching")
     (description "@code{URI::Fetch} is a smart client for fetching HTTP pages,
@@ -4574,9 +4421,9 @@ and time-saving way.")
          "1mk3jv8x0mcq3ajrn9garnxd0jc7sw4pkwqi88r5apqvlljs84z2"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-Find")
     (synopsis "Find URIs in arbitrary text")
     (description "This module finds URIs and URLs (according to what URI.pm
@@ -4599,7 +4446,7 @@ URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
          "1vs1wm80sq685944g1l4a0fxcbccc00c0f9648yabdmcf90hwsvf"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (home-page "https://metacpan.org/release/URI-ws")
     (synopsis "WebSocket support for URI package")
     (description "With this module, the URI package provides the same set of
@@ -4619,12 +4466,10 @@ methods for WebSocket URIs as it does for HTTP URIs.")
                 "1phibcmam2hklrddzj79l43va1gcqpyszbw21ynxq53ynmhjvbk8"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (native-inputs
-     `(("perl-test-pod-coverage" ,perl-test-pod-coverage)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-json" ,perl-json)))
+     (list perl-test-pod-coverage perl-test-pod perl-module-install
+           perl-json))
     (home-page "https://metacpan.org/release/URI-Template")
     (synopsis "Object for handling URI templates")
     (description "This perl module provides a wrapper around URI templates as described in
@@ -4657,8 +4502,8 @@ RFC 6570.")
                                               (getenv "PERL5LIB")))
                        #t)))))
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
-    (inputs `(("curl" ,curl)))
+     (list perl-module-install))
+    (inputs (list curl))
     (synopsis "Perl extension interface for libcurl")
     (description
      "This is a Perl extension interface for the libcurl file downloading
@@ -4679,20 +4524,17 @@ library.")
         (base32 "0cb14m1vhaf0mgn2fqwi5hm72xhfi77hpq2g57swgy0w83x7m27b"))))
     (build-system perl-build-system)
     (native-inputs                      ;only for tests
-     `(("perl-cgi" ,perl-cgi)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-output" ,perl-test-output)
-       ("perl-test-warnings" ,perl-test-warnings)))
+     (list perl-cgi perl-test-deep perl-test-fatal perl-test-output
+           perl-test-warnings))
     (propagated-inputs
-     `(("perl-html-form" ,perl-html-form)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-http-message" ,perl-http-message)
-       ("perl-http-server-simple" ,perl-http-server-simple)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-test-warn" ,perl-test-warn)
-       ("perl-uri" ,perl-uri)))
+     (list perl-html-form
+           perl-html-parser
+           perl-html-tree
+           perl-http-message
+           perl-http-server-simple
+           perl-libwww
+           perl-test-warn
+           perl-uri))
     (home-page "https://metacpan.org/release/WWW-Mechanize")
     (synopsis "Web browsing in a Perl object")
     (description "WWW::Mechanize is a Perl module for stateful programmatic
@@ -4712,24 +4554,24 @@ web browsing, used for automating interaction with websites.")
                 "1yxplx1q1qk2fvnzqrbk01lz26fy1lyhay51a3ky7q3jgh9p01rb"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-feed-find" ,perl-feed-find)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-uri-fetch" ,perl-uri-fetch)
-       ("perl-test-simple" ,perl-test-simple)
-       ("perl-xml-atom" ,perl-xml-atom)
-       ("perl-xml-rss" ,perl-xml-rss)))
+     (list perl-class-errorhandler
+           perl-datetime
+           perl-datetime-format-mail
+           perl-datetime-format-w3cdtf
+           perl-feed-find
+           perl-module-install
+           perl-module-pluggable
+           perl-uri-fetch
+           perl-test-simple
+           perl-xml-atom
+           perl-xml-rss))
     (inputs
-     `(("perl-data-page" ,perl-data-page)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)
-       ("perl-uri-template" ,perl-uri-template)
-       ("perl-xml-feed" ,perl-xml-feed)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-data-page
+           perl-libwww
+           perl-uri
+           perl-uri-template
+           perl-xml-feed
+           perl-xml-libxml))
     (home-page "https://metacpan.org/release/WWW-OpenSearch")
     (synopsis "Search A9 OpenSearch compatible engines")
     (description
@@ -4751,7 +4593,7 @@ http://opensearch.a9.com} compatible search engines.")
                "07m50dp5n5jxv3m93i55qvnd67a6g7cvbvlik115kmc8lbkh5da6"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-uri" ,perl-uri)))
+     (list perl-uri))
     (license license:perl-license)
     (synopsis "Perl database of robots.txt-derived permissions")
     (description
@@ -4765,17 +4607,17 @@ their web site.")
 (define-public python-feedparser
   (package
     (name "python-feedparser")
-    (version "6.0.2")
+    (version "6.0.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "feedparser" version ".tar.gz"))
        (sha256
         (base32
-         "0x0hm9brh3j71645pydvlkrwxaaca9dnwd7xahwjyjaz882s200v"))))
+         "0qcnkyjjfj5gg5rhd1j4zzlqx5h34bma18zwgj68q95b0l543q2w"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-sgmllib3k" ,python-sgmllib3k)))
+     (list python-sgmllib3k))
     (arguments
      '(#:tests? #f))
     (home-page
@@ -4884,16 +4726,16 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                  #t)))
            (delete 'strip))))           ; As the .go files aren't compatible
       (inputs
-       `(("guix" ,guix)
-         ("guile-fibers" ,guile-fibers)
-         ("guile-json" ,guile-json-4)
-         ("guile-email" ,guile-email)
-         ("guile-prometheus" ,guile-prometheus)
-         ("guile-squee" ,guile-squee)
-         ("ephemeralpg" ,ephemeralpg)
-         ("util-linux" ,util-linux)
-         ("postgresql" ,postgresql-13)
-         ("sqitch" ,sqitch)))
+       (list guix
+             guile-fibers
+             guile-json-4
+             guile-email
+             guile-prometheus
+             guile-squee
+             ephemeralpg
+             util-linux
+             postgresql-13
+             sqitch))
       (native-inputs
        `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
          ("autoconf" ,autoconf)
@@ -4928,9 +4770,7 @@ PostgreSQL database.")
      `(#:tests? #f))         ;tests require bundling googletest sources
     ;; The release tarball lacks the generated files.
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list autoconf automake libtool))
     (home-page "https://github.com/google/gumbo-parser")
     (synopsis "HTML5 parsing library")
     (description
@@ -4996,14 +4836,14 @@ embedded_plugins =
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("jansson" ,jansson)
-       ("libxml2" ,libxml2)
-       ("libyaml" ,libyaml)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("zlib" ,zlib)
-       ;; For plugins.
-       ("python" ,python)))
+     (list jansson
+           libxml2
+           libyaml
+           openssl
+           pcre
+           zlib
+           ;; For plugins.
+           python))
     (home-page "https://uwsgi-docs.readthedocs.org/")
     (synopsis "Application container server")
     (description
@@ -5031,12 +4871,12 @@ It uses the uwsgi protocol for all the networking/interprocess communications.")
            (delete-file-recursively "modules")
            #t))))
     (inputs
-     `(("oniguruma" ,oniguruma)))
+     (list oniguruma))
     (native-inputs
-     `(;; TODO fix gems to generate documentation
-       ;;("ruby" ,ruby)
-       ;;("bundler" ,bundler)
-       ("valgrind" ,valgrind)))
+     (list ;; TODO fix gems to generate documentation
+           ;;("ruby" ,ruby)
+           ;;("bundler" ,bundler)
+           valgrind))
     (build-system gnu-build-system)
     (home-page "https://stedolan.github.io/jq/")
     (synopsis "Command-line JSON processor")
@@ -5088,13 +4928,17 @@ fast and flexible way of exploring HTML from the terminal.")
         (base32 "0bqizz69hxk8rn4z57asz1d45vizl1rj6i5k3rzxn2x3qcik514h"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ;; For check phase.
-       ("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection
+           ;; For check phase.
+           glib-networking gsettings-desktop-schemas pkg-config))
     (inputs
-     `(("libsoup" ,libsoup)))
+     `(("libsoup" ,libsoup-minimal-2)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-home-for-tests
+           (lambda _
+             (setenv "HOME" "/tmp"))))))
     (home-page "https://gitlab.com/groups/uhttpmock")
     (synopsis "Library for mocking web service APIs which use HTTP or HTTPS")
     (description
@@ -5192,9 +5036,7 @@ libraries.")
          "1n2794y2l0c8nv8z2pxwfnbn882987ifmxjv60zdxkhcndhswarj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)))                 ;for test harness
+     (list netsurf-buildsystem pkg-config perl))                 ;for test harness
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libparserutils/")
     (synopsis "Parser building library")
@@ -5218,13 +5060,13 @@ C.  It is developed as part of the NetSurf project.")
        (patches (search-patches "hubbub-sort-entities.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("doxygen" ,doxygen)
-       ("json-c" ,json-c-0.12)      ; check whether json-c-0.12 can be removed
-       ("perl" ,perl)))
+     (list netsurf-buildsystem
+           pkg-config
+           doxygen
+           json-c-0.12 ; check whether json-c-0.12 can be removed
+           perl))
     (propagated-inputs
-     `(("libparserutils" ,libparserutils))) ;for libhubbub.pc
+     (list libparserutils)) ;for libhubbub.pc
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/hubbub/")
     (synopsis "HTML5 compliant parsing library")
@@ -5335,18 +5177,18 @@ NetSurf project.")
        ("perl-yaml-tiny" ,perl-yaml-tiny)
        ("po4a" ,po4a)))
     (propagated-inputs
-     `(("perl-cgi-formbuilder" ,perl-cgi-formbuilder)
-       ("perl-cgi-session" ,perl-cgi-session)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-html-scrubber" ,perl-html-scrubber)
-       ("perl-html-template" ,perl-html-template)
-       ("perl-json" ,perl-json)
-       ("perl-mail-sendmail" ,perl-mail-sendmail)
-       ("perl-text-markdown-discount" ,perl-text-markdown-discount)
-       ("perl-timedate" ,perl-timedate)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-yaml-libyaml" ,perl-yaml-libyaml)))
+     (list perl-cgi-formbuilder
+           perl-cgi-session
+           perl-html-parser
+           perl-html-scrubber
+           perl-html-template
+           perl-json
+           perl-mail-sendmail
+           perl-text-markdown-discount
+           perl-timedate
+           perl-uri
+           perl-xml-simple
+           perl-yaml-libyaml))
     (home-page "https://ikiwiki.info/")
     (synopsis "Wiki compiler, capable of generating HTML")
     (description
@@ -5369,9 +5211,7 @@ commenting.")
          "0p0c2q9lsj4vs97aa7vjllfhw33zv3dpysdkjblzhib6dpfs2alv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check-0.14)))          ;for tests
+     (list netsurf-buildsystem pkg-config check-0.14))          ;for tests
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libwapcaplet/")
     (synopsis "String internment library")
@@ -5392,15 +5232,18 @@ developed as part of the Netsurf project.")
                            "libcss-" version "-src.tar.gz"))
        (sha256
         (base32
-         "1p66sdiiqm7w4jkq23hsf08khsnmq93hshh9f9m8sbirjdpf3p6j"))))
+         "1p66sdiiqm7w4jkq23hsf08khsnmq93hshh9f9m8sbirjdpf3p6j"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; This can be removed with the next release.
+           (substitute* "src/select/computed.c"
+             (("css_unit unit;") "css_unit unit = CSS_UNIT_PX;"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)))
+     (list netsurf-buildsystem pkg-config perl))
     (propagated-inputs                  ;needed for libcss.pc
-     `(("libparserutils" ,libparserutils)
-       ("libwapcaplet" ,libwapcaplet)))
+     (list libparserutils libwapcaplet))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libcss/")
     (synopsis "CSS parser and selection library")
@@ -5423,18 +5266,17 @@ written in C.  It is developed as part of the NetSurf project.")
          "0jpg5hx3y0mdxk5szd47dyijqimd2321brbqk2620pp5f4j0gvlq"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)                   ;for test harness
-       ("perl-libxml" ,perl-libxml)
-       ("perl-switch" ,perl-switch)
-       ("perl-xml-xpath" ,perl-xml-xpath)))
+     (list netsurf-buildsystem
+           pkg-config
+           perl ;for test harness
+           perl-libxml
+           perl-switch
+           perl-xml-xpath))
     (inputs
-     `(("libparserutils" ,libparserutils)
-       ("libwapcaplet" ,libwapcaplet)))
+     (list libparserutils libwapcaplet))
     (propagated-inputs
-     `(("expat" ,expat)                 ;needed for headers and linking
-       ("hubbub" ,hubbub)))             ;for libdom.pc
+     (list expat ;needed for headers and linking
+           hubbub))             ;for libdom.pc
     (arguments
      `(#:tests? #f                 ;TODO: re-enable. tests take a looong time.
        ,@netsurf-buildsystem-arguments))
@@ -5459,13 +5301,11 @@ developed as part of the NetSurf project.")
          "10bpkmvfpydj74im3r6kqm9vnvgib6afy0alx71q5n0w5yawy39c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("gperf" ,gperf-3.0)))
+     (list netsurf-buildsystem pkg-config gperf-3.0))
     (inputs
-     `(("libwapcaplet" ,libwapcaplet)))
+     (list libwapcaplet))
     (propagated-inputs
-     `(("libdom" ,libdom)))             ;for libsvgtiny.pc
+     (list libdom))             ;for libsvgtiny.pc
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libsvgtiny/")
     (synopsis "Library for parsing SVG files")
@@ -5490,7 +5330,7 @@ project.")
          "0krjg69a2amxjsahdgm3wmy9ngnyr3gfs2a1zhdlbvb0z1jr7i3r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libnsbmp/")
     (synopsis "Decoding library for BMP and ICO files")
@@ -5513,7 +5353,7 @@ written in C.  It is developed as part of the NetSurf project.")
          "0jwshypgmx16xlsbx3d8njk8a5khazlplca5mxd3rdbhrlsabbly"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libnsgif/")
     (synopsis "Decoding library for GIF files")
@@ -5536,11 +5376,11 @@ C.  It is developed as part of the NetSurf project.")
          "1l2k0kdv9iv18svhv360vszjavhl4g09cp8a8yb719pgsylxr67w"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("pkg-config" ,pkg-config)
-       ("check" ,check)                 ; For tests
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list netsurf-buildsystem
+           pkg-config
+           check ; For tests
+           bison
+           flex))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Logging library")
@@ -5564,7 +5404,7 @@ client applications.  It is developed as part of the NetSurf project.")
          "1w5fyy2i60a3v3if3iqcn9sy9sycx6966rcx53v85gja6hb6a33r"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Utility library for NetSurf")
@@ -5587,7 +5427,7 @@ developed as part of the NetSurf project.")
          "02q28n5i6fwqcz1nn167rb71k1q95mx38mfah6zi1lvqrc2q5ifk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)))
+     (list netsurf-buildsystem))
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/")
     (synopsis "Library to generate a static Public Suffix List")
@@ -5610,9 +5450,7 @@ Public Suffix List.  It is developed as part of the NetSurf project.")
          "1cqwgwca49jvmijwiyaab2bwxicgxdrnlpinf8kp3nha02nm73ad"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("bison" ,bison)
-       ("flex" ,flex)))
+     (list netsurf-buildsystem bison flex))
     (arguments
      (substitute-keyword-arguments netsurf-buildsystem-arguments
        ((#:make-flags flags)
@@ -5642,14 +5480,14 @@ w3c webidl files and a binding configuration file.")
                                 "netsurf-message-timestamp.patch"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("netsurf-buildsystem" ,netsurf-buildsystem)
-       ("nsgenbind" ,nsgenbind)
-       ("libidn" ,libidn)               ;only for tests
-       ("check" ,check)
-       ("perl" ,perl)
-       ("perl-html-parser" ,perl-html-parser)
-       ("pkg-config" ,pkg-config)
-       ("xxd" ,xxd)))
+     (list netsurf-buildsystem
+           nsgenbind
+           libidn ;only for tests
+           check
+           perl
+           perl-html-parser
+           pkg-config
+           xxd))
     (inputs
      `(("curl" ,curl)
        ("gtk+" ,gtk+)
@@ -5723,7 +5561,7 @@ w3c webidl files and a binding configuration file.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("test/bloom.c" "test/hashtable.c")
                (("/usr/share/dict/words")
-                (string-append (assoc-ref inputs "miscfiles") "/share/web2")))
+                (search-input-file inputs "/share/web2")))
              #t))
          (add-after 'install 'install-more
            (lambda* (#:key outputs #:allow-other-keys)
@@ -5780,10 +5618,7 @@ handling many of the web standards in use today.")
                (with-directory-excursion man
                  (invoke "gzip" "elvi.1sr"))))))))
     (inputs
-     `(("perl" ,perl)
-       ("perl-www-opensearch" ,perl-www-opensearch)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww" ,perl-libwww)))
+     (list perl perl-www-opensearch perl-html-parser perl-libwww))
     (synopsis "Unix command line interface to the www")
     (description "Surfraw (Shell Users' Revolutionary Front Rage Against the Web)
 provides a unix command line interface to a variety of popular www search engines
@@ -5843,10 +5678,9 @@ config files---you only have to specify the www root.")
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add dependency on geoip-tools.
-     `(("glib" ,glib)
-       ("ncurses" ,ncurses)))
+     (list glib ncurses))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://goaccess.io")
     (synopsis "Analyze Web server logs in real time")
     (description
@@ -5901,8 +5735,7 @@ on the fly.")
        ("procps" ,procps)
        ("python" ,python)))
     (inputs
-     `(("libev" ,libev)
-       ("openssl" ,openssl)))
+     (list libev openssl))
     (synopsis "Scalable TLS proxy")
     (description
      "Hitch is a performant TLS proxy based on @code{libev}.  It terminates
@@ -5966,7 +5799,7 @@ tools like SSH (Secure Shell) to reach the outside world.")
    `(("iproute" ,iproute)
      ("netcat" ,netcat)
      ("procps" ,procps)))
-  (inputs `(("openssl" ,openssl)))
+  (inputs (list openssl))
   (arguments
    `(#:configure-flags
      (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")))
@@ -6062,13 +5895,13 @@ deployments.")
        ("python-sphinx" ,python-sphinx)
        ("rst2man" ,python-docutils)))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("coreutils" ,coreutils)
-       ("jemalloc" ,jemalloc)
-       ("ncurses" ,ncurses)
-       ("pcre2" ,pcre2)
-       ("python" ,python)
-       ("readline" ,readline)))
+     (list bash-minimal
+           coreutils
+           jemalloc
+           ncurses
+           pcre2
+           python
+           readline))
     (synopsis "Web application accelerator")
     (description
      "Varnish is a high-performance HTTP accelerator.  It acts as a caching
@@ -6094,18 +5927,15 @@ configuration language.")
                 "0qq5g6bbd1a1ml1wk8jj9z39a899jzqbf7aizr3pvyz0f4kz8mis"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For bootstrapping.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-
-       ;; For generating manuals.
-       ("rst2man" ,python-docutils)))
+     (list pkg-config
+           ;; For bootstrapping.
+           autoconf
+           automake
+           libtool
+           ;; For generating manuals.
+           python-docutils))
     (inputs
-     `(("python" ,python)
-       ("varnish" ,varnish)))
+     (list python varnish))
     (synopsis "Collection of Varnish modules")
     (description
      "This package provides a collection of modules (@dfn{vmods}) for the Varnish
@@ -6132,10 +5962,7 @@ additional capabilities.")
      `(#:configure-flags '("--with-loadavg")
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/openSUSE/xinetd")
     (synopsis "Internet services daemon")
     (description "@code{xinetd}, a more secure replacement for @code{inetd},
@@ -6181,7 +6008,7 @@ used to start services with both privileged and non-privileged port numbers.")
                          (find-files lib "\\.a$"))
                #t))))))
     (native-inputs
-     `(("libxslt" ,libxslt)))
+     (list libxslt))
     (home-page "http://www.html-tidy.org/")
     (synopsis "HTML Tidy with HTML5 support")
     (description
@@ -6242,11 +6069,8 @@ functions of Tidy.")
                  `("PATH" ":" prefix (,mbed)))))))))
     (inputs
      ;; TODO: package "hiawatha-monitor", an optional dependency of "hiawatha".
-     `(("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)
-       ("mbedtls-apache" ,mbedtls-for-hiawatha)
-       ("nghttp2" ,nghttp2 "lib")
-       ("zlib" ,zlib)))
+     (list libxslt libxml2 mbedtls-for-hiawatha
+           `(,nghttp2 "lib") zlib))
     (home-page "https://www.hiawatha-webserver.org")
     (synopsis "Webserver with focus on security")
     (description
@@ -6268,11 +6092,8 @@ exploit attempts.")
          "1dc92lnk846hpilslrqnr63x55cxll4qx88gif8fm521gv9cbyvr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-decorator" ,python-decorator)
-       ("python-flask" ,python-flask)
-       ("python-itsdangerous" ,python-itsdangerous)
-       ("python-markupsafe" ,python-markupsafe)
-       ("python-six" ,python-six)))
+     (list python-decorator python-flask python-itsdangerous
+           python-markupsafe python-six))
     (home-page "https://github.com/Runscope/httpbin")
     (synopsis "HTTP request and response service")
     (description "Testing an HTTP Library can become difficult sometimes.
@@ -6294,9 +6115,7 @@ JSON-encoded.")
          "1y0v2v7xpzpyd4djwp7ad8ifnlxp8r1y6dfbxg5ckzvllkgridn5"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-httpbin" ,python-httpbin)
-       ("python-pytest" ,python-pytest)))
+     (list python-six python-httpbin python-pytest))
     (home-page
      "https://github.com/kevin1024/pytest-httpbin")
     (synopsis
@@ -6380,13 +6199,13 @@ message stream (in a web server that is per connection).")
 (define-public python-httpretty
   (package
     (name "python-httpretty")
-    (version "1.0.5")
+    (version "1.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "httpretty" version))
        (sha256
-        (base32 "1dg0nfl7i9kjnq98ww98x2afzav4mpgiwzvjc43ily1x9my94g75"))))
+        (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f  ; Tests require network access.
@@ -6395,16 +6214,15 @@ message stream (in a web server that is per connection).")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "nosetests"))
-             #t)))))
+               (invoke "nosetests")))))))
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-eventlet" ,python-eventlet)
-       ("python-nose" ,python-nose)
-       ("python-rednose" ,python-rednose)
-       ("python-requests" ,python-requests)
-       ("python-sure" ,python-sure)
-       ("python-tornado" ,python-tornado)))
+     (list python-coverage
+           python-eventlet
+           python-nose
+           python-rednose
+           python-requests
+           python-sure
+           python-tornado))
     (home-page "https://httpretty.readthedocs.io")
     (synopsis "HTTP client mock for Python")
     (description "@code{httpretty} is a helper for faking web requests,
@@ -6473,17 +6291,15 @@ command-line arguments or read from stdin.")
                       "not test_get_item_with_kwargs"
                       " and not test_ia")))))))
     (propagated-inputs
-     `(("python-requests" ,python-requests)
-       ("python-jsonpatch" ,python-jsonpatch-0.4)
-       ("python-docopt" ,python-docopt)
-       ("python-clint" ,python-clint)
-       ("python-six" ,python-six)
-       ("python-schema" ,python-schema-0.5)
-       ("python-backports-csv" ,python-backports-csv)))
+     (list python-requests
+           python-jsonpatch-0.4
+           python-docopt
+           python-clint
+           python-six
+           python-schema-0.5
+           python-backports-csv))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-pytest-capturelog" ,python-pytest-capturelog)
-       ("python-responses" ,python-responses)))
+     (list python-pytest python-pytest-capturelog python-responses))
     (home-page "https://github.com/jjjake/internetarchive")
     (synopsis "Command-line interface to archive.org")
     (description "@code{ia} is a command-line tool for using
@@ -6505,12 +6321,12 @@ internetarchive python module for programmatic access to archive.org.")
            "0zlkzqnpz7a4iavsq5vaz0nf5nr7qm5znpg1vlpz6rwnx6hikjdb"))))
       (build-system python-build-system)
       (propagated-inputs
-       `(("python-docopt" ,python-docopt)
-         ("python-pygments" ,python-pygments)
-         ("python-requests" ,python-requests)
-         ("python-nose" ,python-nose)
-         ("python-lxml" ,python-lxml)
-         ("python-pyaml" ,python-pyaml)))
+       (list python-docopt
+             python-pygments
+             python-requests
+             python-nose
+             python-lxml
+             python-pyaml))
       (inputs
        `(("test-clf"
           ,(origin
@@ -6597,10 +6413,8 @@ Instagram and YouTube.")
          "1j97dc9a4yhpscwadhv5dxp7036pnrxiaky18l8ddr3pvxdjvkxs"))))
     (build-system python-build-system)
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-dnspython" ,python-dnspython)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-requests" ,python-requests)))
+     (list python-beautifulsoup4 python-dnspython python-pyxdg
+           python-requests))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("python-pytest" ,python-pytest)
@@ -6610,9 +6424,8 @@ Instagram and YouTube.")
      `(#: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 "py.test" "tests")))))))
     (home-page "https://linkchecker.github.io/linkchecker/")
     (synopsis "Check websites for broken links")
@@ -6653,14 +6466,14 @@ file links.")
         ("rust-percent-encoding" ,rust-percent-encoding-2)
         ("rust-url" ,rust-url-2))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("atk" ,atk)
-       ("cairo" ,cairo)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+)
-       ("libressl" ,libressl)
-       ("pango" ,pango)))
+     (list atk
+           cairo
+           gdk-pixbuf
+           gtk+
+           libressl
+           pango))
     (home-page "https://git.sr.ht/~julienxx/castor")
     (synopsis "Graphical client for plain-text protocols")
     (description
@@ -6708,8 +6521,7 @@ encoder/decoder based on the draft-12 specification for UBJSON.")
                   #t))))
     (build-system ant-build-system)
     (inputs
-     `(("java-commons-daemon" ,java-commons-daemon)
-       ("java-ecj" ,java-ecj)))
+     (list java-commons-daemon java-ecj))
     (arguments
      `(#:build-target "deploy"
        #:tests? #f; requires downloading some files.
@@ -7207,8 +7019,7 @@ infrastructure")))
        #:source-dir "jetty-util-ajax/src/main/java"
        #:tests? #f)); require junit 5
     (inputs
-     `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)))))
+     (list java-eclipse-jetty-util java-javaee-servletapi))))
 
 (define-public java-eclipse-jetty-servlet
   (package
@@ -7283,10 +7094,10 @@ container.")))
              (chdir "jetty-xml")
              #t)))))
     (inputs
-     `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)))
+     (list java-eclipse-jetty-util))
     (native-inputs
-     `(("java-eclipse-jetty-io" ,java-eclipse-jetty-io)
-       ,@(package-native-inputs java-eclipse-jetty-util)))))
+     (modify-inputs (package-native-inputs java-eclipse-jetty-util)
+       (prepend java-eclipse-jetty-io)))))
 
 (define-public java-eclipse-jetty-xml-9.2
   (package
@@ -7329,14 +7140,14 @@ container.")))
              (chdir "jetty-webapp")
              #t)))))
     (inputs
-     `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)
-       ("java-eclipse-jetty-http" ,java-eclipse-jetty-http)
-       ("java-eclipse-jetty-io" ,java-eclipse-jetty-io)
-       ("java-eclipse-jetty-server" ,java-eclipse-jetty-server)
-       ("java-eclipse-jetty-servlet" ,java-eclipse-jetty-servlet)
-       ("java-eclipse-jetty-security" ,java-eclipse-jetty-security)
-       ("java-eclipse-jetty-xml" ,java-eclipse-jetty-xml)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)))))
+     (list java-eclipse-jetty-util
+           java-eclipse-jetty-http
+           java-eclipse-jetty-io
+           java-eclipse-jetty-server
+           java-eclipse-jetty-servlet
+           java-eclipse-jetty-security
+           java-eclipse-jetty-xml
+           java-javaee-servletapi))))
 
 (define-public java-eclipse-jetty-webapp-9.2
   (package
@@ -7397,9 +7208,7 @@ container.")))
                    (find-files "." ".*.properties"))))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-gson" ,java-gson)))
+     (list java-junit java-hamcrest-core java-gson))
     (home-page "https://jsoup.org")
     (synopsis "HTML parser")
     (description "Jsoup is a Java library for working with real-world HTML.  It
@@ -7428,7 +7237,7 @@ best of DOM, CSS, and jQuery-like methods.")
        ;; Tests all fail with InstantiationException from mockito
        #:tests? #f))
     (propagated-inputs
-     `(("java-commons-codec" ,java-commons-codec)))
+     (list java-commons-codec))
     (home-page "https://github.com/mttkay/signpost")
     (synopsis "Lightweight client-side OAuth library for Java")
     (description "Signpost is the easy and intuitive solution for signing
@@ -7490,10 +7299,9 @@ based on this library, allowing Perl programmers to easily validate HTML.")
                  "-L" (assoc-ref inputs "tidyp") "/lib")))
              #t)))))
     (inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("tidyp" ,tidyp)))
+     (list perl-libwww tidyp))
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     (list perl-test-exception))
     (home-page "https://metacpan.org/release/HTML-Tidy")
     (synopsis "(X)HTML validation in a Perl object")
     (description "@code{HTML::Tidy} is an HTML checker in a handy dandy
@@ -7583,7 +7391,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 (define-public nghttp2
   (package
     (name "nghttp2")
-    (version "1.41.0")
+    (version "1.44.0")
     (source
      (origin
        (method url-fetch)
@@ -7592,16 +7400,14 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
                            "nghttp2-" version ".tar.xz"))
        (sha256
         (base32
-         "1hk77vngjmvvzb5y1gi1aqwf6qywrc7yak08zvzb7x81qs6mphmb"))))
+         "0p9wvva4g8hwj55x19rbyvnq2dbsnf65rphhxnpqs7ll54xlg6an"))))
     (build-system gnu-build-system)
     (outputs (list "out"
                    "lib"))              ; only libnghttp2
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; Required by tests.
-       ("cunit" ,cunit)
-       ("tzdata" ,tzdata-for-tests)))
+     (list pkg-config
+           ;; Required by tests.
+           cunit python tzdata-for-tests))
     (inputs
      ;; Required to build the tools (i.e. without ‘--enable-lib-only’).
      `(("c-ares" ,c-ares)
@@ -7620,7 +7426,10 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
              "--enable-app"             ; build all the tools
              "--enable-hpack-tools"     ; ...all the tools
              "--disable-examples"
-             "--disable-static")        ; don't bother building .a files
+             "--disable-static"         ; don't bother building .a files
+             ,@(if (%current-target-system)
+                   '("--disable-python-bindings")
+                   '()))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'break-circular-reference
@@ -7759,8 +7568,7 @@ instructions on how to use Guix in a shared HPC environment.")
                 "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libressl" ,libressl)
-       ("zlib" ,zlib)))
+     (list libressl zlib))
     (home-page "https://www.httrack.com/")
     (synopsis "Easy-to-use offline browser utility")
     (description "HTTrack allows you to download a World Wide Web site from
@@ -7790,11 +7598,8 @@ HTTrack is fully configurable, and has an integrated help system.")
     (arguments
      `(#:tests? #f))                    ;FIXME: many tests need network access
     (inputs
-     `(("python-beautifulsoup4" ,python-beautifulsoup4)
-       ("python-certifi" ,python-certifi)
-       ("python-cryptography" ,python-cryptography)
-       ("python-html5lib" ,python-html5lib)
-       ("python-urllib3" ,python-urllib3)))
+     (list python-beautifulsoup4 python-certifi python-cryptography
+           python-html5lib python-urllib3))
     (home-page "https://github.com/jarun/buku")
     (synopsis "Bookmark manager")
     (description
@@ -7848,8 +7653,7 @@ Anonip can also be uses as a Python module in your own Python application.")
          "0kckcwvqklavd855np9aq5js6mg84isrlwchr504yigwma0sm7hm"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-github-com-robfig-cron" ,go-github-com-robfig-cron)
-       ("go-golang-org-x-time" ,go-golang-org-x-time)))
+     (list go-github-com-robfig-cron go-golang-org-x-time))
     (arguments
      `(#:import-path "github.com/tsileo/poussetaches"))
     (home-page "https://github.com/tsileo/poussetaches")
@@ -7920,7 +7724,7 @@ of the DOM tree
            (lambda _
              (chdir "Build"))))))
     (inputs
-     `(("freetype" ,freetype)))
+     (list freetype))
     (home-page "https://github.com/libRocket/libRocket") ; http://librocket.com/ is down.
     (synopsis "HTML/CSS user interface library")
     (description "libRocket is a C++ user interface package based on the HTML
@@ -7961,11 +7765,9 @@ solution for any project's interface needs:
                                               "/etc/mime.types"))
        #:make-flags (list (string-append "CC=" ,(cc-for-target)))))
     (inputs
-     `(("mailcap" ,mailcap)
-       ("openssl" ,openssl)))
+     (list mailcap openssl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (synopsis "Simple Gemini protocol server")
     (description "gmnisrv is a simple Gemini protocol server written in C.")
     (license (list license:gpl3+
@@ -7995,8 +7797,7 @@ solution for any project's interface needs:
        ("xapian" ,xapian)
        ("zstd" ,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("googletest" ,googletest)))
+     (list pkg-config googletest))
     (home-page "https://wiki.openzim.org/wiki/Main_Page")
     (synopsis "Reference implementation of the ZIM specification")
     (description "The openZIM project proposes offline storage solutions for
@@ -8033,15 +7834,15 @@ for ZIM files.")
                                "/bin/aria2c\"")))
              #t)))))
     (inputs
-     `(("aria2" ,aria2)
-       ("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("libzim" ,libzim)
-       ("pugixml" ,pugixml)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list aria2
+           curl
+           icu4c
+           libmicrohttpd
+           libzim
+           pugixml
+           xapian
+           zlib
+           `(,zstd "lib")))
     (native-inputs
      `(("mustache" ,(origin
                       (method git-fetch)
@@ -8104,19 +7905,19 @@ It contains the code shared by all Kiwix ports.")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (inputs
-     `(("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("kiwix-lib" ,kiwix-lib)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("libzim" ,libzim)
-       ("pugixml" ,pugixml)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative" ,qtdeclarative)
-       ("qtwebchannel" ,qtwebchannel)
-       ("qtwebengine" ,qtwebengine)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list curl
+           icu4c
+           kiwix-lib
+           libmicrohttpd
+           libzim
+           pugixml
+           qtbase-5
+           qtdeclarative
+           qtwebchannel
+           qtwebengine
+           xapian
+           zlib
+           `(,zstd "lib")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qmake" ,qtbase-5)))
@@ -8139,17 +7940,17 @@ offline (such as Wikipedia), without any access to Internet.")
                 "1npf9ddhpkmx97gxmvmwmi8a69md8kh2szimd9rpg6ggd4big03a"))))
     (build-system meson-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("icu4c" ,icu4c)
-       ("kiwix-lib" ,kiwix-lib)
-       ("libmicrohttpd" ,libmicrohttpd)
-       ("libzim" ,libzim)
-       ("pugixml" ,pugixml)
-       ("xapian" ,xapian)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list curl
+           icu4c
+           kiwix-lib
+           libmicrohttpd
+           libzim
+           pugixml
+           xapian
+           zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://wiki.kiwix.org/wiki/Software")
     (synopsis "Kiwix command line tools")
     (description "The Kiwix tools are a collection of Kiwix-related command line
@@ -8178,9 +7979,7 @@ tools:
                  (base32
                   "1ffzia679axcsccx2fxjpxhb0i5xc42zxn446x6c1170w6v69qf6"))))
       (build-system cmake-build-system)
-      (native-inputs `(("gtest" ,googletest)
-                       ("doxygen" ,doxygen)
-                       ("graphviz" ,graphviz)))
+      (native-inputs (list googletest doxygen graphviz))
       (synopsis "Strictly RFC 3986 compliant URI parsing and handling library")
       (description "uriparser is a strictly RFC 3986 compliant URI parsing and
 handling library written in C89 (\"ANSI C\").  uriparser is fast and supports
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 16096be57b..65ad122f9c 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
+  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
@@ -84,9 +86,9 @@
      `(("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     `(("mesa" ,mesa)))
+     (list mesa))
     (propagated-inputs
-     `(("libxkbcommon" ,libxkbcommon)))
+     (list libxkbcommon))
     (synopsis "General-purpose library for WPE")
     (description "LibWPE is general-purpose library specifically developed for
 the WPE-flavored port of WebKit.")
@@ -108,12 +110,9 @@ the WPE-flavored port of WebKit.")
     (arguments
      `(#:tests? #f))                    ;no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libwpe" ,libwpe)
-       ("mesa" ,mesa)
-       ("wayland" ,wayland)))
+     (list glib libwpe mesa wayland))
     (home-page "https://wpewebkit.org/")
     (synopsis "Wayland WPE backend")
     (description
@@ -239,7 +238,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
               (patches (search-patches "webkitgtk-share-store.patch"
                                        "webkitgtk-bind-all-fonts.patch"))))
     (build-system cmake-build-system)
-    (outputs '("out" "doc"))
+    (outputs '("out" "doc" "debug"))
     (arguments
      `(#:tests? #f ; no tests
        #:build-type "Release" ; turn off debugging symbols to save space
@@ -253,10 +252,6 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                           (string-append ; uses lib64 by default
                            "-DLIB_INSTALL_DIR="
                            (assoc-ref %outputs "out") "/lib")
-
-                          ;; XXX TODO: Use libsoup@3.
-                          "-DUSE_SOUP2=ON"
-
                           ;; XXX Adding GStreamer GL support would apparently
                           ;; require adding gst-plugins-bad to the inputs,
                           ;; which might entail a security risk as a result of
@@ -277,8 +272,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
              (let ((store-directory (%store-directory)))
                (substitute*
                    "Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp"
-                 (("@storedir@") store-directory))
-               #t)))
+                 (("@storedir@") store-directory)))))
          (add-after 'unpack 'patch-gtk-doc-scan
            (lambda* (#:key inputs #:allow-other-keys)
              (for-each (lambda (file)
@@ -286,27 +280,13 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                            (("http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd")
                             (string-append (assoc-ref inputs "docbook-xml")
                                            "/xml/dtd/docbook/docbookx.dtd"))))
-                       (find-files "Source" "\\.sgml$"))
-             #t))
+                       (find-files "Source" "\\.sgml$"))))
          (add-after 'unpack 'embed-absolute-wpebackend-reference
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((wpebackend-fdo (assoc-ref inputs "wpebackend-fdo")))
                (substitute* "Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp"
                  (("libWPEBackend-fdo-([\\.0-9]+)\\.so" all version)
-                  (string-append wpebackend-fdo "/lib/" all)))
-               #t)))
-         (add-before 'configure 'prepare-build-environment
-           (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "CC" "clang")
-             (setenv "CXX" "clang++")
-             ;; XXX Until we switch back to using GCC,
-             ;; work around <https://bugs.gnu.org/51591>.
-             ,@(if (target-x86-32?)
-                   '((substitute* "Source/WTF/wtf/CheckedArithmetic.h"
-                       (("#define USE_MUL_OVERFLOW 1")
-                        "#define USE_MUL_OVERFLOW 0")))
-                   '())
-             #t))
+                  (string-append wpebackend-fdo "/lib/" all))))))
          ,@(if (target-x86-64?)
                '()
                '((add-after 'unpack 'disable-sse2
@@ -320,11 +300,9 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                    (doc (assoc-ref outputs "doc")))
                (mkdir-p (string-append doc "/share"))
                (rename-file (string-append out "/share/gtk-doc")
-                            (string-append doc "/share/gtk-doc"))
-               #t))))))
+                            (string-append doc "/share/gtk-doc"))))))))
     (native-inputs
-     `(("clang" ,clang-11)
-       ("bison" ,bison)
+     `(("bison" ,bison)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
@@ -336,8 +314,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
        ("docbook-xml" ,docbook-xml) ; For documentation generation
        ("ruby" ,ruby)))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)))
+     (list gtk+ libsoup))
     (inputs
      `(("at-spi2-core" ,at-spi2-core)
        ("bubblewrap" ,bubblewrap)
@@ -380,3 +357,18 @@ HTML/CSS applications to full-fledged web browsers.")
                    license:lgpl2.1+
                    license:bsd-2
                    license:bsd-3))))
+
+;;; Required by gnome-online-accounts; as webkitgtk 2.34 propagates libsoup 3,
+;;; which causes the build to fail.
+;;; Also required by e.g. emacs-next-pgtk,  emacs-xwidgets, and some other
+;;; Gnome packages for webkit2gtk-4.0. See also the upstream tracker for
+;;; libsoup 3: https://gitlab.gnome.org/GNOME/libsoup/-/issues/218
+(define-public webkitgtk-with-libsoup2
+  (package/inherit webkitgtk
+    (name "webkitgtk-with-libsoup2")
+    (arguments (substitute-keyword-arguments (package-arguments webkitgtk)
+                 ((#:configure-flags flags)
+                  `(cons "-DUSE_SOUP2=ON" ,flags))))
+    (propagated-inputs
+     (alist-replace "libsoup" (list libsoup-minimal-2)
+                    (package-propagated-inputs webkitgtk)))))
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index b537f6fa95..d794bd7bad 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -45,7 +45,7 @@
 (define-public wget
   (package
     (name "wget")
-    (version "1.20.3")
+    (version "1.21.1")
     (source
      (origin
       (method url-fetch)
@@ -53,19 +53,17 @@
                           version ".tar.lz"))
       (sha256
        (base32
-        "1frajd86ds8vz2hprq30wq8ya89z9dcxnwm8nwk12bbc47l7qq39"))))
+        "1bchzkacjsc5c0x01ngaana9fs5j12wfw1c8qxps1yp68x9vx6yv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libidn2" ,libidn2)
-       ("libpsl" ,libpsl)))
+     (list gnutls libidn2 libpsl))
     (native-inputs
-     `(("lzip" ,lzip)
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("python" ,python)               ;for testenv suite
-       ("perl-http-daemon" ,perl-http-daemon)
-       ("perl-io-socket-ssl" ,perl-io-socket-ssl)))
+     (list lzip
+           pkg-config
+           perl
+           python ;for testenv suite
+           perl-http-daemon
+           perl-io-socket-ssl))
     (home-page "https://www.gnu.org/software/wget/")
     (synopsis "Non-interactive command-line utility for downloading files")
     (description
@@ -127,8 +125,7 @@ in downloaded documents to relative links.")
                #t))))
        #:tests? #f))                    ; no test target
     (inputs
-     `(("wget" ,wget)
-       ("xclip" ,xclip)))
+     (list wget xclip))
     (home-page "https://wgetpaste.zlin.dk/")
     (synopsis "Script that automates pasting to a number of pastebin services")
     (description
@@ -171,7 +168,7 @@ online pastebin services.")
       ("zlib" ,zlib)))
    ;; TODO: Add libbrotlidec, libnghttp2.
    (native-inputs
-    `(("pkg-config" ,pkg-config)))
+    (list pkg-config))
    (home-page "https://gitlab.com/gnuwget/wget2")
    (synopsis "Successor of GNU Wget")
    (description "GNU Wget2 is the successor of GNU Wget, a file and recursive
diff --git a/gnu/packages/wicd.scm b/gnu/packages/wicd.scm
index fec39ad530..073d440479 100644
--- a/gnu/packages/wicd.scm
+++ b/gnu/packages/wicd.scm
@@ -123,7 +123,10 @@
                        "--no-install-kde"
                        "--no-install-gnome-shell-extensions"
 
-                       "--distro=guixsd"
+                       ;; Don't pass --distro= despite setup.py's complaints.
+                       ;; Guix isn't recognised, and if it ever would be we'd
+                       ;; rather ask upstream to follow standards instead.
+
                        "--wicdgroup=netdev"
                        "--loggroup=root"
                        "--logperms=0640"
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 4361cccd8d..f44a402042 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -222,8 +222,8 @@ integrate Windows applications into your desktop.")
   (package
     (inherit wine)
     (name "wine64")
-    (inputs `(("wine" ,wine)
-              ,@(package-inputs wine)))
+    (inputs (modify-inputs (package-inputs wine)
+              (prepend wine)))
     (arguments
      `(#:make-flags
        (list "SHELL=bash"
@@ -325,8 +325,8 @@ integrate Windows applications into your desktop.")
   (package
     (inherit wine)
     (name "wine-minimal")
-    (native-inputs (fold alist-delete (package-native-inputs wine)
-               '("gettext" "perl" "pkg-config")))
+    (native-inputs (modify-inputs (package-native-inputs wine)
+                     (delete "gettext" "perl" "pkg-config")))
     (inputs `())
     (arguments
      `(#:validate-runpath? #f
@@ -364,8 +364,7 @@ integrate Windows applications into your desktop.")
         (base32 "0d5m9pvafr0iw99ny7rgzfmw7zw45q5wfcw68zj88mvzs47xkgms"))))
     (build-system trivial-build-system)
     (native-inputs
-     `(("bash" ,bash)
-       ("coreutils" ,coreutils)))
+     (list bash coreutils))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -413,15 +412,15 @@ integrate Windows applications into your desktop.")
          (file-name (string-append name "-" wine-version ".tar.xz"))
          (sha256
           (base32 "1bc4zmqpdqs1ncz3qisp8a313pqzi5a31gq1s99ivb60vk325rcr")))))
-    (inputs `(("autoconf" ,autoconf)    ; for autoreconf
-              ("ffmpeg" ,ffmpeg)
-              ("gtk+" ,gtk+)
-              ("libva" ,libva)
-              ("mesa" ,mesa)
-              ("python" ,python)
-              ("util-linux" ,util-linux) ; for hexdump
-              ("wine-staging-patchset-data" ,wine-staging-patchset-data)
-              ,@(package-inputs wine)))
+    (inputs (modify-inputs (package-inputs wine)
+              (prepend autoconf ; for autoreconf
+                       ffmpeg
+                       gtk+
+                       libva
+                       mesa
+                       python
+                       util-linux ; for hexdump
+                       wine-staging-patchset-data)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -435,10 +434,10 @@ integrate Windows applications into your desktop.")
                     (let* ((out (assoc-ref outputs "out"))
                            (icd (string-append out "/share/vulkan/icd.d")))
                       (mkdir-p icd)
-                      (copy-file (string-append (assoc-ref inputs "mesa")
+                      (copy-file (search-input-file inputs
                                  "/share/vulkan/icd.d/radeon_icd.i686.json")
                                  (string-append icd "/radeon_icd.i686.json"))
-                      (copy-file (string-append (assoc-ref inputs "mesa")
+                      (copy-file (search-input-file inputs
                                  "/share/vulkan/icd.d/intel_icd.i686.json")
                                  (string-append icd "/intel_icd.i686.json"))
                       (wrap-program (string-append out "/bin/wine-preloader")
@@ -490,8 +489,8 @@ integrated into the main branch.")
   (package
     (inherit wine-staging)
     (name "wine64-staging")
-    (inputs `(("wine-staging" ,wine-staging)
-              ,@(package-inputs wine-staging)))
+    (inputs (modify-inputs (package-inputs wine-staging)
+              (prepend wine-staging)))
     (arguments
      `(#:make-flags
        (list "SHELL=bash"
diff --git a/gnu/packages/wireservice.scm b/gnu/packages/wireservice.scm
index b704111db0..f0dcce717c 100644
--- a/gnu/packages/wireservice.scm
+++ b/gnu/packages/wireservice.scm
@@ -209,15 +209,11 @@ for xls and xlsx files support to all @code{agate.Table} instances.")))
                 "1ffmbzk4rxnl1yhqfl58v7kvl5m9cbvjm8v7xp4mvr00sgs91lvv"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-psycopg2" ,python-psycopg2) ; to test PostgreSQL support
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
+     (list python-psycopg2 ; to test PostgreSQL support
+           python-sphinx python-sphinx-rtd-theme))
     (inputs
-     `(("python-agate-dbf" ,python-agate-dbf)
-       ("python-agate-excel" ,python-agate-excel)
-       ("python-agate-sql" ,python-agate-sql)
-       ("python-six" ,python-six)
-       ("python-text-unidecode" ,python-text-unidecode)))
+     (list python-agate-dbf python-agate-excel python-agate-sql
+           python-six python-text-unidecode))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 0733198e65..20f9abec67 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2020 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
@@ -83,7 +83,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages build-tools) ;for meson-0.55
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages calendar)
   #:use-module (gnu packages check)
   #:use-module (gnu packages datastructures)
@@ -150,12 +150,12 @@
         (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("libxinerama" ,libxinerama)
-       ("sxhkd" ,sxhkd)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb
+           libxinerama
+           sxhkd
+           xcb-util
+           xcb-util-keysyms
+           xcb-util-wm))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -184,21 +184,19 @@ the leaves of a full binary tree.")
        (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (inputs
-     `(("dzen"        ,dzen)
-       ("dmenu"       ,dmenu)
-       ("glib"        ,glib)
-       ("glibmm"      ,glibmm)
-       ("xterm"       ,xterm)
-       ("xsetroot"    ,xsetroot)
-       ("libx11"      ,libx11)
-       ("libxext"     ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr"   ,libxrandr)
-       ("libxft"      ,libxft)))
+     (list dzen
+           dmenu
+           glib
+           glibmm
+           xterm
+           xsetroot
+           libx11
+           libxext
+           libxinerama
+           libxrandr
+           libxft))
     (native-inputs
-     `(("asciidoc"   ,asciidoc)
-       ("pkg-config" ,pkg-config)
-       ("python"     ,python)))
+     (list asciidoc pkg-config python))
     (arguments
      '(#:tests? #f
        #:configure-flags
@@ -267,19 +265,17 @@ or musca).
        #:out-of-source? #t
        #:tests? #f)) ; no test suite
     (inputs
-     `(("openlibm" ,openlibm)
-       ("libconfuse" ,libconfuse)
-       ("libyajl" ,libyajl)
-       ("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)
-       ("libnl" ,libnl)
-       ("libcap" ,libcap)
-       ("asciidoc" ,asciidoc)))
+     (list openlibm
+           libconfuse
+           libyajl
+           alsa-lib
+           pulseaudio
+           libnl
+           libcap
+           asciidoc))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("docbook-xsl" ,docbook-xsl)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("xmlto" ,xmlto)))
+     (list pkg-config docbook-xsl libxml2 ;for XML_CATALOG_FILES
+           xmlto))
     (home-page "https://i3wm.org/i3status/")
     (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
     (description "i3status is a small program for generating a status bar for
@@ -324,30 +320,30 @@ commands would.")
                  (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
                #t))))))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util-xrm" ,xcb-util-xrm)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libev" ,libev)
-       ("libyajl" ,libyajl)
-       ("xmlto" ,xmlto)
-       ("perl-pod-simple" ,perl-pod-simple)
-       ("libx11" ,libx11)
-       ("pcre" ,pcre)
-       ("startup-notification" ,startup-notification)
-       ("pango" ,pango)
-       ("cairo" ,cairo)))
+     (list libxcb
+           xcb-util
+           xcb-util-cursor
+           xcb-util-keysyms
+           xcb-util-wm
+           xcb-util-xrm
+           libxkbcommon
+           libev
+           libyajl
+           xmlto
+           perl-pod-simple
+           libx11
+           pcre
+           startup-notification
+           pango
+           cairo))
     (native-inputs
-     `(("which" ,which)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("asciidoc" ,asciidoc)
-       ;; For building the documentation.
-       ("libxml2" ,libxml2)
-       ("docbook-xsl" ,docbook-xsl)))
+     (list which
+           perl
+           pkg-config
+           asciidoc
+           ;; For building the documentation.
+           libxml2
+           docbook-xsl))
     (home-page "https://i3wm.org/")
     (synopsis "Tiling window manager")
     (description "i3 is a tiling X11 window manager that dynamically manages
@@ -403,16 +399,16 @@ from many programming languages.")
                 "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("libev" ,libev)
-       ("linux-pam" ,linux-pam)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list cairo
+           libev
+           linux-pam
+           libxcb
+           libxkbcommon
+           xcb-util
+           xcb-util-image
+           xcb-util-xrm))
     (home-page "https://i3wm.org/i3lock/")
     (synopsis "Lightweight screen locker")
     (description
@@ -436,19 +432,17 @@ Despite the name it should work with any X11 window manager.")
                 "1bd5nrlga5g1sz1f64gnc3dqy8yfrr4q1ss59krymbpxa1hhf55c"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake)
-       ("autoconf" ,autoconf)))
+     (list pkg-config automake autoconf))
     (inputs
-     `(("cairo" ,cairo)
-       ("mesa" ,mesa)
-       ("libev" ,libev)
-       ("linux-pam" ,linux-pam)
-       ("libxcb" ,libxcb)
-       ("libxkbcommon" ,libxkbcommon)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list cairo
+           mesa
+           libev
+           linux-pam
+           libxcb
+           libxkbcommon
+           xcb-util
+           xcb-util-image
+           xcb-util-xrm))
     (home-page "https://github.com/karulont/i3lock-blur")
     (synopsis "Lightweight screen locker with transparent blurring background")
     (description
@@ -472,9 +466,7 @@ manager.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://github.com/vivien/i3blocks")
     (synopsis "Minimalist scheduler for status bar scripts")
     (description "i3blocks executes your command lines and generates a
@@ -496,8 +488,7 @@ i3status.")
                 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-anyevent" ,perl-anyevent)
-       ("perl-json-xs" ,perl-json-xs)))
+     (list perl-anyevent perl-json-xs))
     (home-page "https://metacpan.org/release/AnyEvent-I3")
     (synopsis
      "Communicate with the i3 window manager through perl")
@@ -538,7 +529,7 @@ You can then subscribe to events or send messages and receive their replies.")
                         ;; Avoid unspecified return value.
                         #t))))))
     (propagated-inputs
-     `(("i3-wm" ,i3-wm)))
+     (list i3-wm))
     (home-page "https://github.com/ziberna/i3-py")
     (synopsis "Python interface to the i3 window manager")
     (description "This package allows you to interact from a Python program
@@ -578,26 +569,24 @@ subscribe to events.")
                  (string-append "pangocairo = ffi.dlopen(\""
                   (assoc-ref inputs "pango") "/lib/libpangocairo-1.0.so.0\")\n"))))))))
     (inputs
-      `(("glib" ,glib)
-        ("pango" ,pango)
-        ("pulseaudio" ,pulseaudio)))
+      (list glib pango pulseaudio))
     (propagated-inputs
-      `(("python-cairocffi" ,python-cairocffi)
-        ("python-cffi" ,python-cffi)
-        ("python-dateutil" ,python-dateutil)
-        ("python-dbus-next" ,python-dbus-next)
-        ("python-iwlib" ,python-iwlib)
-        ("python-keyring" ,python-keyring)
-        ("python-mpd2" ,python-mpd2)
-        ("python-pyxdg" ,python-pyxdg)
-        ("python-xcffib" ,python-xcffib)))
+      (list python-cairocffi
+            python-cffi
+            python-dateutil
+            python-dbus-next
+            python-iwlib
+            python-keyring
+            python-mpd2
+            python-pyxdg
+            python-xcffib))
     (native-inputs
-      `(("pkg-config" ,pkg-config)
-        ("python-flake8" ,python-flake8)
-        ("python-pep8-naming" ,python-pep8-naming)
-        ("python-psutil" ,python-psutil)
-        ("python-pytest-cov" ,python-pytest-cov)
-        ("python-setuptools-scm" ,python-setuptools-scm)))
+      (list pkg-config
+            python-flake8
+            python-pep8-naming
+            python-psutil
+            python-pytest-cov
+            python-setuptools-scm))
     (home-page "http://qtile.org")
     (synopsis "Hackable tiling window manager written and configured in Python")
     (description "Qtile is simple, small, and extensible.  It's easy to write
@@ -638,8 +627,7 @@ your own layouts, widgets, and built-in commands.")
                           ;; Avoid unspecified return value.
                           #t))))))
       (inputs
-       `(("python-i3-py" ,python-i3-py)
-         ("dmenu" ,dmenu)))
+       (list python-i3-py dmenu))
       (home-page "https://github.com/proxypoke/quickswitch-for-i3")
       (synopsis "Quickly change to and locate windows in the i3 window manager")
       (description
@@ -675,9 +663,7 @@ prompt.")
        ("xcb-util-image" ,xcb-util-image)
        ("xcb-util-xrm" ,xcb-util-xrm)))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (home-page "https://github.com/PandorasFox/i3lock-color")
     (synopsis "Screen locker with color configuration support")
     (description
@@ -713,14 +699,10 @@ Features include:
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (icons (string-append out "/share/i3lock-fancy/icons/"))
-                    (wmctrl (string-append (assoc-ref inputs "wmctrl")
-                                           "/bin/wmctrl"))
-                    (mconvert (string-append (assoc-ref inputs "imagemagick")
-                                             "/bin/convert"))
-                    (mimport (string-append (assoc-ref inputs "imagemagick")
-                                            "/bin/import"))
-                    (awk (string-append (assoc-ref inputs "gawk")
-                                        "/bin/gawk")))
+                    (wmctrl (search-input-file inputs "/bin/wmctrl"))
+                    (mconvert (search-input-file inputs "/bin/convert"))
+                    (mimport (search-input-file inputs "/bin/import"))
+                    (awk (search-input-file inputs "/bin/gawk")))
 
                (substitute* "lock"
                  (("\\$\\(command -V wmctrl\\)") wmctrl)
@@ -743,10 +725,7 @@ Features include:
                (copy-recursively "icons" icons)
                #t))))))
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("wmctrl" ,wmctrl)
-       ("i3lock" ,i3lock)
-       ("gawk" ,gawk)))
+     (list imagemagick wmctrl i3lock gawk))
     (home-page "https://github.com/meskarune/i3lock-fancy")
     (synopsis "Screen locker with screenshot function")
     (description
@@ -773,13 +752,13 @@ desktop environment.")
               (patches (search-patches "xmonad-dynamic-linking.patch"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-data-default"          ,ghc-data-default)
-       ("ghc-quickcheck"            ,ghc-quickcheck)
-       ("ghc-semigroups"            ,ghc-semigroups)
-       ("ghc-setlocale"             ,ghc-setlocale)
-       ("ghc-utf8-string"           ,ghc-utf8-string)
-       ("ghc-x11"                   ,ghc-x11)))
+     (list ghc-extensible-exceptions
+           ghc-data-default
+           ghc-quickcheck
+           ghc-semigroups
+           ghc-setlocale
+           ghc-utf8-string
+           ghc-x11))
     (arguments
      `(#:cabal-revision
        ("1" "0yqh96qqphllr0zyz5j93cij5w2qvf39xxnrb52pz0qz3pywz9wd")
@@ -824,27 +803,26 @@ tiled on several screens.")
                 "1k1n3ff0ikdmfq0mi8r2vpqg1iq6hsw1drvxps6k98rvvn87pws6"))))
     (build-system haskell-build-system)
     (native-inputs
-     `(("ghc-hspec" ,ghc-hspec)
-       ("hspec-discover" ,hspec-discover)))
+     (list ghc-hspec hspec-discover))
     (inputs
-     `(("ghc-alsa-core" ,ghc-alsa-core)
-       ("ghc-alsa-mixer" ,ghc-alsa-mixer)
-       ("ghc-dbus" ,ghc-dbus)
-       ("ghc-hinotify" ,ghc-hinotify)
-       ("ghc-http" ,ghc-http)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-iwlib" ,ghc-iwlib)
-       ("ghc-libmpd" ,ghc-libmpd)
-       ("ghc-netlink" ,ghc-netlink)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-parsec-numbers" ,ghc-parsec-numbers)
-       ("ghc-regex-compat" ,ghc-regex-compat)
-       ("ghc-temporary" ,ghc-temporary)
-       ("ghc-timezone-olson" ,ghc-timezone-olson)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-x11-xft" ,ghc-x11-xft)
-       ("libxpm" ,libxpm)))
+     (list ghc-alsa-core
+           ghc-alsa-mixer
+           ghc-dbus
+           ghc-hinotify
+           ghc-http
+           ghc-http-conduit
+           ghc-http-types
+           ghc-iwlib
+           ghc-libmpd
+           ghc-netlink
+           ghc-old-locale
+           ghc-parsec-numbers
+           ghc-regex-compat
+           ghc-temporary
+           ghc-timezone-olson
+           ghc-x11
+           ghc-x11-xft
+           libxpm))
     (arguments
      `(#:configure-flags (list "--flags=all_extensions")
        #:phases
@@ -876,8 +854,7 @@ Haskell, no knowledge of the language is required to install and use it.")
         (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-strict" ,ghc-strict)
-       ("ghc-xdg-basedir" ,ghc-xdg-basedir)))
+     (list ghc-strict ghc-xdg-basedir))
     (home-page "http://dmwit.com/yeganesh/")
     (synopsis "Small wrapper around dmenu")
     (description "@code{yeganesh} is a small wrapper around demnu.  Like
@@ -902,14 +879,14 @@ particular, it displays commonly-chosen options before uncommon ones.")
      `(#:cabal-revision
        ("1" "0vimkby2gq6sgzxzbvz67caba609xqlv2ii2gi8a1cjrnn6ib011")))
     (propagated-inputs
-     `(("ghc-old-time" ,ghc-old-time)
-       ("ghc-random" ,ghc-random)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
-       ("ghc-semigroups" ,ghc-semigroups)
-       ("ghc-x11" ,ghc-x11)
-       ("ghc-x11-xft" ,ghc-x11-xft)
-       ("xmonad" ,xmonad)))
+     (list ghc-old-time
+           ghc-random
+           ghc-utf8-string
+           ghc-extensible-exceptions
+           ghc-semigroups
+           ghc-x11
+           ghc-x11-xft
+           xmonad))
     (home-page "https://xmonad.org")
     (synopsis "Third party extensions for xmonad")
     (description
@@ -932,9 +909,7 @@ tiling window manager for X.")
        (patches (search-patches "evilwm-lost-focus-bug.patch"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxrandr" ,libxrandr)))
+     (list libx11 libxext libxrandr))
     (arguments
      `(#:modules ((srfi srfi-26)
                   (guix build utils)
@@ -999,18 +974,18 @@ drags, snap-to-border support, and virtual desktops.")
                      Type=Application~%" ,name ,synopsis out)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxpm"  ,libxpm)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)))
+     (list freetype
+           fribidi
+           imlib2
+           libx11
+           libxext
+           libxft
+           libxinerama
+           libxpm
+           libxrandr
+           libxrender))
     (description "Fluxbox is a window manager.  It is light on resources
 and easy to handle yet full of features to make an easy and fast desktop
 experience.")
@@ -1031,21 +1006,15 @@ experience.")
                (base32
                 "0vkwyci4z4jj2aczxkrmj0861j5jczjr8isasa7gml93nlvyw7gv"))))
     (build-system meson-build-system)
-    (arguments
-     `( #:meson ,meson-0.55
-        #:build-type "release"))
+    (arguments `(#:build-type "release"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)
-       ("tllist" ,tllist)
-       ("gcc" ,gcc-10)     ;TODO: Remove when the default compiler is > GCC 7.
-       ("scdoc" ,scdoc)))
+     (list pkg-config
+           wayland-protocols
+           tllist
+           gcc-10 ;TODO: Remove when the default compiler is > GCC 7.
+           scdoc))
     (inputs
-     `(("wlroots" ,wlroots)
-       ("wayland" ,wayland)
-       ("fcft" ,fcft)
-       ("dbus" ,dbus)
-       ("libpng" ,libpng)))
+     (list wlroots wayland fcft dbus libpng))
     (home-page "https://codeberg.org/dnkl/fnott")
     (synopsis "Keyboard driven and lightweight Wayland notification daemon")
     (description "Fnott is a keyboard driven and lightweight notification daemon
@@ -1078,41 +1047,42 @@ for wlroots-based Wayland compositors.")
                "\"~c\"")))
            #t))
        (patches
-        (search-patches "awesome-reproducible-png.patch"))))
+        (search-patches "awesome-reproducible-png.patch"
+                        "awesome-4.3-fno-common.patch"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("docbook-xsl" ,docbook-xsl)
-       ("doxygen" ,doxygen)
-       ("gperf" ,gperf)
-       ("imagemagick" ,imagemagick)
-       ("libxml2" ,libxml2)             ;for XML_CATALOG_FILES
-       ("lua-ldoc" ,lua-ldoc)
-       ("pkg-config" ,pkg-config)
-       ("xmlto" ,xmlto)))
+     (list asciidoc
+           docbook-xsl
+           doxygen
+           gperf
+           imagemagick
+           libxml2 ;for XML_CATALOG_FILES
+           lua-ldoc
+           pkg-config
+           xmlto))
     (inputs
-     `(("cairo" ,cairo)
-       ("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
-       ("imlib2" ,imlib2)
-       ("libev" ,libev)
-       ("libxcb" ,libxcb)
-       ("libxcursor" ,libxcursor)
-       ("libxdg-basedir" ,libxdg-basedir)
-       ("libxkbcommon" ,libxkbcommon)
-       ("lua" ,lua)
-       ("lua-lgi" ,lua-lgi)
-       ("pango" ,pango)
-       ("startup-notification" ,startup-notification)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-xrm" ,xcb-util-xrm)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list cairo
+           dbus
+           gdk-pixbuf
+           glib
+           gobject-introspection
+           imlib2
+           libev
+           libxcb
+           libxcursor
+           libxdg-basedir
+           libxkbcommon
+           lua
+           lua-lgi
+           pango
+           startup-notification
+           xcb-util
+           xcb-util-cursor
+           xcb-util-image
+           xcb-util-keysyms
+           xcb-util-renderutil
+           xcb-util-xrm
+           xcb-util-wm))
     (arguments
      `(#:modules ((guix build cmake-build-system)
                   (guix build utils)
@@ -1160,7 +1130,8 @@ for wlroots-based Wayland compositors.")
                (setenv "LD_LIBRARY_PATH" cairo)
                (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
                (setenv "LUA_CPATH" lua-cpath)
-               #t)))
+               (setenv "HOME" (getcwd))
+               (setenv "XDG_CACHE_HOME" (getcwd)))))
          (replace 'check
            (lambda _
              ;; There aren't any tests, so just make sure the binary
@@ -1207,7 +1178,7 @@ dynamic and extensible using the Lua programming language.")
         (base32 "0hbn8bid43725njqcfklvan3n4hwpfx8nq8xkkdwkmpd37kfq594"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python" ,python)))
+     (list python))
     (synopsis "Heuristics-driven menu generator")
     (description
      "MenuMaker is a menu generation utility for a number of X window
@@ -1245,12 +1216,9 @@ all of them.  Currently supported window managers include:
          "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("python-2" ,python-2)
-       ("gtk+-2" ,gtk+-2)))
+     (list python-2 gtk+-2))
     (native-inputs
-     `(("python2-pygtk" ,python2-pygtk)
-       ("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list python2-pygtk gtk-doc pkg-config))
     (synopsis "Library for registering global keyboard shortcuts")
     (description
      "Keybinder is a library for registering global keyboard shortcuts.
@@ -1274,11 +1242,9 @@ Keybinder works with GTK-based applications using the X Window System.")
          "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list gtk+ gobject-introspection))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)
-       ("pkg-config" ,pkg-config)))
+     (list gtk-doc pkg-config))
     (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
     (description
      "Keybinder is a library for registering global keyboard shortcuts.
@@ -1335,8 +1301,7 @@ Keybinder works with GTK-based applications using the X Window System.")
        ("xcb-util-wm" ,xcb-util-wm)
        ("xcb-util-keysyms" ,xcb-util-keysyms)))
     (native-inputs
-     `(("libxt" ,libxt)
-       ("pkg-config" ,pkg-config)))
+     (list libxt pkg-config))
     (synopsis "Minimalistic automatic tiling window manager")
     (description
      "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
@@ -1396,12 +1361,9 @@ It is inspired by Xmonad and dwm.  Its major features include:
                            output)))
                #t))))))
     (inputs
-     `(("libxft" ,libxft)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)))
+     (list libxft libxrandr libxinerama))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("bison" ,bison)))
+     (list pkg-config bison))
     (home-page "https://github.com/leahneukirchen/cwm")
     (synopsis "OpenBSD fork of the calmwm window manager")
     (description "Cwm is a stacking window manager for X11.  It is an OpenBSD
@@ -1411,7 +1373,7 @@ project derived from the original Calm Window Manager.")
 (define-public dwl
   (package
     (name "dwl")
-    (version "0.2")
+    (version "0.2.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1420,7 +1382,7 @@ project derived from the original Calm Window Manager.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0r5hsxpckkrq1y7bjfq58rlc5xy45z499rg628q3nh289978ail1"))))
+                "0js8xjc2rx1ml6s58s90jrak5n7vh3kj5na2j4yy3qy0cb501xcm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -1432,9 +1394,9 @@ project derived from the original Calm Window Manager.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("wlroots" ,wlroots)))
+     (list wlroots))
     (home-page "https://github.com/djpohly/dwl")
     (synopsis "Dynamic window manager for Wayland")
     (description
@@ -1461,12 +1423,9 @@ limited size and a few external dependencies.  It is configurable via
                 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
     (build-system gnu-build-system)
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gtkmm" ,gtkmm-2)
-       ("glib" ,glib)
-       ("glibmm" ,glibmm)))
+     (list gtk+-2 gtkmm-2 glib glibmm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "http://projects.l3ib.org/nitrogen/")
     (synopsis "Background browser and setter for X windows")
     (description
@@ -1504,20 +1463,20 @@ its size
      ;; Internet.
      '(#:tests? #f))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("cairo" ,cairo)
-       ("i3-wm" ,i3-wm)
-       ("jsoncpp" ,jsoncpp)
-       ("libmpdclient" ,libmpdclient)
-       ("libnl" ,libnl)
-       ("libxcb" ,libxcb)
-       ("pulseaudio" ,pulseaudio)
-       ("xcb-proto" ,xcb-proto)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-cursor" ,xcb-util-cursor)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util-xrm" ,xcb-util-xrm)))
+     (list alsa-lib
+           cairo
+           i3-wm
+           jsoncpp
+           libmpdclient
+           libnl
+           libxcb
+           pulseaudio
+           xcb-proto
+           xcb-util
+           xcb-util-cursor
+           xcb-util-image
+           xcb-util-wm
+           xcb-util-xrm))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx) ; for the manual
@@ -1535,7 +1494,7 @@ functionality to display information about the most commonly used services.")
 (define-public wlroots
   (package
     (name "wlroots")
-    (version "0.12.0")
+    (version "0.14.1")
     (source
      (origin
        (method git-fetch)
@@ -1544,12 +1503,10 @@ functionality to display information about the most commonly used services.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01j38lmgs2c6fq68v8b75pkilia2wsgzgp46ivfbi9hhx47kgcfn"))))
+        (base32 "1sshp3lvlkl1i670kxhwsb4xzxl8raz6769kqvgmxzcb63ns9ay1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags '("-Dlogind-provider=elogind")
-       #:meson ,meson-0.55
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'hardcode-paths
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1559,20 +1516,20 @@ functionality to display information about the most commonly used services.")
                                             "/bin/Xwayland")))
              #t)))))
     (propagated-inputs
-     `(;; As required by wlroots.pc.
-       ("elogind" ,elogind)
-       ("eudev" ,eudev)
-       ("libinput" ,libinput)
-       ("libxkbcommon" ,libxkbcommon)
-       ("mesa" ,mesa)
-       ("pixman" ,pixman)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xcb-util-errors" ,xcb-util-errors)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xorg-server-xwayland" ,xorg-server-xwayland)))
+     (list ;; As required by wlroots.pc.
+           eudev
+           libinput
+           libxkbcommon
+           mesa
+           pixman
+           seatd
+           wayland
+           wayland-protocols
+           xcb-util-errors
+           xcb-util-wm
+           xorg-server-xwayland))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/swaywm/wlroots")
     (synopsis "Pluggable, composable, unopinionated modules for building a
 Wayland compositor")
@@ -1583,7 +1540,7 @@ modules for building a Wayland compositor.")
 (define-public sway
   (package
     (name "sway")
-    (version "1.5.1")
+    (version "1.6.1")
     (source
      (origin
        (method git-fetch)
@@ -1592,7 +1549,7 @@ modules for building a Wayland compositor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xsa3h8zhf29p0mi90baxpr76jkd9pd1gr97ky8cnjbcs4isj9j0"))))
+        (base32 "0j4sdbsrlvky1agacc0pcz9bwmaxjmrapjnzscbd2i0cria2fc5j"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -1610,23 +1567,19 @@ modules for building a Wayland compositor.")
                 (string-append "'" (assoc-ref inputs "scdoc")
                                "/bin/scdoc'")))
              #t)))))
-    (inputs `(("cairo" ,cairo)
-              ("elogind" ,elogind)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("json-c" ,json-c)
-              ("libevdev" ,libevdev)
-              ("libinput" ,libinput)
-              ("libxkbcommon" ,libxkbcommon)
-              ("pango" ,pango)
-              ("swaybg" ,swaybg)
-              ("wayland" ,wayland)
-              ("wlroots" ,wlroots)))
+    (inputs (list cairo
+                  elogind
+                  gdk-pixbuf
+                  json-c
+                  libevdev
+                  libinput
+                  libxkbcommon
+                  pango
+                  swaybg
+                  wayland
+                  wlroots))
     (native-inputs
-     `(("linux-pam" ,linux-pam)
-       ("mesa" ,mesa)
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list linux-pam mesa pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Wayland compositor compatible with i3")
     (description "Sway is a i3-compatible Wayland compositor.")
@@ -1648,11 +1601,8 @@ modules for building a Wayland compositor.")
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dlogind-provider=elogind")))
-    (inputs `(("elogind" ,elogind)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list elogind wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/swayidle")
     (synopsis "Idle management daemon for Wayland compositors")
     (description "Swayidle is a idle management daemon for Wayland compositors.")
@@ -1672,15 +1622,10 @@ modules for building a Wayland compositor.")
        (sha256
         (base32 "0r95p4w11dwm5ra614vddz83r8j7z6gd120z2vcchy7m9b0f15kf"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("libxkbcommon" ,libxkbcommon)
-              ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
-              ("wayland" ,wayland)))
-    (native-inputs `(("pango" ,pango)
-                     ("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo gdk-pixbuf libxkbcommon
+                  ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
+                  wayland))
+    (native-inputs (list pango pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Screen locking utility for Wayland compositors")
     (description "Swaylock is a screen locking utility for Wayland compositors.")
@@ -1732,12 +1677,8 @@ display a clock or apply image manipulation techniques to the background image."
        (sha256
         (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo gdk-pixbuf wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/swaywm/sway")
     (synopsis "Screen wallpaper utility for Wayland compositors")
     (description "Swaybg is a wallpaper utility for Wayland compositors.")
@@ -1757,25 +1698,21 @@ display a clock or apply image manipulation techniques to the background image."
        (sha256
         (base32 "109a49f064ma5js2d7maribmfalswbmmhq2fraa7hfz5pf2jxs2w"))))
     (build-system meson-build-system)
-    (inputs `(("date" ,date)
-              ("fmt" ,fmt)
-              ("gtk-layer-shell" ,gtk-layer-shell)
-              ("gtkmm" ,gtkmm)
-              ("jsoncpp" ,jsoncpp)
-              ("libdbusmenu" ,libdbusmenu)
-              ("libinput" ,libinput)
-              ("libmpdclent" ,libmpdclient)
-              ("libnl" ,libnl)
-              ("libxml2" ,libxml2)
-              ("pulseaudio" ,pulseaudio)
-              ("spdlog" ,spdlog)
-              ("wayland" ,wayland)))
+    (inputs (list date
+                  fmt
+                  gtk-layer-shell
+                  gtkmm-3
+                  jsoncpp
+                  libdbusmenu
+                  libinput
+                  libmpdclient
+                  libnl
+                  libxml2
+                  pulseaudio
+                  spdlog
+                  wayland))
     (native-inputs
-     `(("gcc" ,gcc-8)                   ; for #include <filesystem>
-       ("glib:bin" ,glib "bin")
-       ("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list `(,glib "bin") pkg-config scdoc wayland-protocols))
     (home-page "https://github.com/Alexays/Waybar")
     (synopsis "Wayland bar for Sway and Wlroots based compositors")
     (description "Waybar is a highly customisable Wayland bar for Sway and
@@ -1796,8 +1733,8 @@ Wlroots based compositors.")
        (sha256
         (base32 "10c8zzp78s5bw34vvjhilipa28bsdx3jbyhnxgp8f8kawh3cvgsc"))))
     (build-system meson-build-system)
-    (inputs `(("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list wayland))
+    (native-inputs (list pkg-config))
     (home-page "https://github.com/emersion/wlr-randr")
     (synopsis "Utility to manage Wayland compositor outputs")
     (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
@@ -1817,14 +1754,8 @@ Wlroots based compositors.")
        (sha256
         (base32 "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"))))
     (build-system meson-build-system)
-    (inputs `(("cairo" ,cairo)
-              ("elogind" ,elogind)
-              ("gdk-pixbuf" ,gdk-pixbuf)
-              ("pango" ,pango)
-              ("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)
-                     ("wayland-protocols" ,wayland-protocols)))
+    (inputs (list cairo elogind gdk-pixbuf pango wayland))
+    (native-inputs (list pkg-config scdoc wayland-protocols))
     (home-page "https://wayland.emersion.fr/mako")
     (synopsis "Lightweight Wayland notification daemon")
     (description "Mako is a lightweight notification daemon for Wayland
@@ -1845,9 +1776,8 @@ compositors that support the layer-shell protocol.")
        (sha256
         (base32 "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92"))))
     (build-system meson-build-system)
-    (inputs `(("wayland" ,wayland)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("scdoc" ,scdoc)))
+    (inputs (list wayland))
+    (native-inputs (list pkg-config scdoc))
     (home-page "https://wayland.emersion.fr/kanshi")
     (synopsis "Hotswappable output profiles for Wayland")
     (description "Kanshi allows you to define output profiles that are
@@ -1990,9 +1920,7 @@ productive, customizable lisp based systems.")
     (inherit stumpwm-contrib)
     (name "stumpish")
     (inputs
-     `(("bash" ,bash)
-       ("rlwrap" ,rlwrap)
-       ("xprop" ,xprop)))
+     (list bash rlwrap xprop))
     (build-system trivial-build-system)
     (arguments
      '(#:modules ((guix build utils))
@@ -2002,12 +1930,9 @@ productive, customizable lisp based systems.")
          (copy-recursively (assoc-ref %build-inputs "source") ".")
          (chdir "util/stumpish")
          (substitute* "stumpish"
-           (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
-                                      "/bin/rlwrap"))
-           (("xprop") (string-append (assoc-ref %build-inputs "xprop")
-                                      "/bin/xprop"))
-           (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
-                                       "/bin/bash")))
+           (("rlwrap") (search-input-file %build-inputs "/bin/rlwrap"))
+           (("xprop") (search-input-file %build-inputs "/bin/xprop"))
+           (("/bin/sh") (search-input-file %build-inputs "/bin/bash")))
          (install-file "stumpish" (string-append %output "/bin")))))
     (home-page "https://github.com/stumpwm/stumpwm-contrib")
     (synopsis "StumpWM interactive shell")
@@ -2308,9 +2233,9 @@ PNG files.")
          (modify-phases %standard-phases
            (delete 'configure))))
       (inputs
-       `(("libxcb" ,libxcb)))
+       (list libxcb))
       (native-inputs
-       `(("perl" ,perl)))
+       (list perl))
       (home-page "https://github.com/LemonBoy/bar")
       (synopsis "Featherweight status bar")
       (description
@@ -2337,10 +2262,8 @@ wasting your precious memory.")
                  (base32
                   "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
       (inputs
-       `(("freetype" ,freetype)
-         ("libxft" ,libxft)
-         ("libx11" ,libx11)
-         ,@(package-inputs lemonbar)))
+       (modify-inputs (package-inputs lemonbar)
+         (prepend freetype libxft libx11)))
       (arguments
        (substitute-keyword-arguments (package-arguments lemonbar)
          ((#:make-flags make-flags)
@@ -2381,7 +2304,7 @@ support, for easier unicode usage.")))))
                 "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (arguments
      `(#:tests? #f ;no test suite
        #:make-flags
@@ -2411,11 +2334,7 @@ button is pressed on the root window.")
                 "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)
-       ("libxft" ,libxft)
-       ("freetype" ,freetype)
-       ("imlib2" ,imlib2)))
+     (list libx11 libxinerama libxft freetype imlib2))
     (arguments
      `(#:tests? #f ;no test suite
        #:make-flags
@@ -2467,15 +2386,15 @@ selected to stdout.  It can be controlled both via mouse and via keyboard.")
                #t))))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxpm" ,libxpm)
-       ("libpng" ,libpng)
-       ("freetype" ,freetype)
-       ("imlib2" ,imlib2)
-       ("sed" ,sed)))
+     (list libx11
+           libxft
+           libxpm
+           libpng
+           freetype
+           imlib2
+           sed))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:tests? #f)) ;no test suite
     (home-page "https://sourceforge.net/projects/idesk/")
@@ -2501,10 +2420,7 @@ start-up.")
                 "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("imlib2" ,imlib2)))
+     (list libx11 libxft libxinerama imlib2))
     (arguments
      `(#:make-flags
        (list (string-append "CC=" ,(cc-for-target))
@@ -2525,7 +2441,7 @@ shows a notification for the user on the screen.")
 (define-public cagebreak
   (package
     (name "cagebreak")
-    (version "1.6.0")
+    (version "1.8.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2534,15 +2450,13 @@ shows a notification for the user on the screen.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02gxmypfj75amdd8lwdkkk7imw7lwmghpyk8h9asljy9aq6ymdqp"))))
+                "0296mnzk7qd0zvnhw716jvpp7madjsar373ixx4qcff0m0jwfrxm"))))
     (build-system meson-build-system)
     (arguments '(#:configure-flags '("-Dxwayland=true")))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
-     `(("pango" ,pango)
-       ("wlroots" ,wlroots)))
+     (list libevdev pango wlroots))
     (home-page "https://github.com/project-repo/cagebreak")
     (synopsis "Tiling wayland compositor inspired by ratpoison")
     (description
@@ -2566,10 +2480,7 @@ for wayland conceptually based on the X11 window manager
         (base32
          "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("libtool" ,libtool)))
+     (list autoconf automake pkg-config libtool))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f)) ;; no tests
@@ -2582,19 +2493,17 @@ read and write, and compatible with JSON.")
 (define-public hikari
   (package
     (name "hikari")
-    (version "2.2.3")
+    (version "2.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hikari.acmelabs.space/releases/"
                            "hikari-" version ".tar.gz"))
        (sha256
-        (base32 "1d023cphzi15k434n60l1rp5awxmdijvsxfrm59fmsvd5rjxh9q7"))))
+        (base32 "1jvy21irh6s7czff2hk63spswqibjcjhrpsgmrki5bii9ddi73wy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("bmake" ,bmake)
-       ("pkg-config" ,pkg-config)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list bmake pkg-config wayland-protocols))
     (inputs
      `(("cairo" ,cairo)
        ("libinput" ,libinput)
@@ -2645,7 +2554,7 @@ capabilities.  It is heavily inspired by the Calm Window manager(cwm).")
         (base32 "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (arguments
      `(#:tests? #f                      ;no tests
        #:phases
@@ -2676,12 +2585,9 @@ program and unhides it after quitting.")
         (base32
          "1mvhwaqa9bng9wh3jg3b7y8gl7nprbydmhg963xg0r076jyzv0cg"))))
     (native-inputs
-     `(("libxmu" ,libxmu)
-       ("pkg-config" ,pkg-config)))
+     (list libxmu pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("gtk+" ,gtk+-2)))
+     (list libx11 gdk-pixbuf gtk+-2))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -2717,11 +2623,9 @@ which do not support it.")
                 "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("gtk-layer-shell" ,gtk-layer-shell)
-       ("gtk+" ,gtk+)))
+     (list gtk-layer-shell gtk+))
     (arguments
      '(#:tests? #f
        #:phases
diff --git a/gnu/packages/wordnet.scm b/gnu/packages/wordnet.scm
index 03dadd431e..f46cc27b76 100644
--- a/gnu/packages/wordnet.scm
+++ b/gnu/packages/wordnet.scm
@@ -86,8 +86,7 @@
     (outputs '("out"
                "tk"))                             ; for the Tcl/Tk GUI
 
-    (inputs `(("tk" ,tk)
-              ("tcl" ,tcl)))
+    (inputs (list tk tcl))
     (home-page "https://wordnet.princeton.edu/")
     (synopsis "Lexical database for the English language")
     (description
diff --git a/gnu/packages/wv.scm b/gnu/packages/wv.scm
index a8c0d3cbaf..1fdcf0ac2b 100644
--- a/gnu/packages/wv.scm
+++ b/gnu/packages/wv.scm
@@ -43,14 +43,9 @@
         (base32 "17f16lkdv1c3amaz2hagiicih59ynpp4786k1m2qa1sw68xhswsc"))))
     (build-system gnu-build-system)
     (inputs
-      `(("glib" ,glib)
-        ("libgsf" ,libgsf)
-        ("libjpeg" ,libjpeg-turbo)
-        ("libpng" ,libpng)
-        ("zlib" ,zlib)))
+      (list glib libgsf libjpeg-turbo libpng zlib))
     (native-inputs
-      `(("glib" ,glib "bin")
-        ("pkg-config" ,pkg-config)))
+      (list `(,glib "bin") pkg-config))
     (synopsis "Microsoft Word conversion library and utilities")
     (description
      "wv converts files written by Word 2000, 97, 95, and 6 (known internally as
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 54d385fd53..17765327bc 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -79,7 +79,7 @@
        ("shared-mime-info" ,shared-mime-info)
        ("xdg-utils" ,xdg-utils)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:configure-flags
        '("--with-regex" "--with-libmspack"
@@ -100,8 +100,7 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'refer-to-inputs
            (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((mime (string-append (assoc-ref inputs "shared-mime-info")
-                                         "/share/mime")))
+             (let* ((mime (search-input-directory inputs "/share/mime")))
                (substitute* "src/unix/utilsx11.cpp"
                  (("wxExecute\\(xdg_open \\+")
                   (string-append "wxExecute(\"" (which "xdg-open") "\"")))
@@ -174,9 +173,8 @@ and many other languages.")
               (sha256
                (base32
                 "14kl1rsngm70v3mbyv1mal15iz2b18k97avjx8jn7s81znha1c7f"))))
-           (inputs `(("gstreamer" ,gstreamer)
-                     ("gst-plugins-base" ,gst-plugins-base)
-                     ,@(package-inputs wxwidgets)))
+           (inputs (modify-inputs (package-inputs wxwidgets)
+                     (prepend gstreamer gst-plugins-base)))
            (arguments
             (substitute-keyword-arguments (package-arguments wxwidgets)
               ((#:configure-flags flags)
@@ -216,7 +214,7 @@ and many other languages.")
              (setenv "WXWIN" (assoc-ref inputs "wxwidgets"))
              ;; Copy the waf executable to the source directory since it needs
              ;; to be in a writable directory.
-             (copy-file (string-append (assoc-ref inputs "python-waf") "/bin/waf")
+             (copy-file (search-input-file inputs "/bin/waf")
                         "bin/waf")
              (setenv "WAF" "bin/waf")
              ;; The build script tries to copy license files from the
@@ -232,15 +230,11 @@ and many other languages.")
                (("'build']") "'build_py', '--use_syswx']"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("wxwidgets" ,wxwidgets)))
+     (list gtk+ wxwidgets))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-waf" ,python-waf)))
+     (list pkg-config python-waf))
     (propagated-inputs
-     `(("python-numpy" ,python-numpy)
-       ("python-pillow" ,python-pillow)
-       ("python-six" ,python-six)))
+     (list python-numpy python-pillow python-six))
     (home-page "https://wxpython.org/")
     (synopsis "Cross platform GUI toolkit for Python")
     (description "wxPython is a cross-platform GUI toolkit for the Python
@@ -306,14 +300,15 @@ provide a 100% native look and feel for the application.")
              (setenv "WXWIN" (assoc-ref inputs "wxwidgets"))
              (use-modules (ice-9 popen) (ice-9 rdelim))
              (let ((port (open-pipe* OPEN_READ
-                                     (string-append (assoc-ref inputs "wxwidgets")
-                                                    "/bin/wx-config") "--cppflags")))
+                                     (search-input-file inputs
+                                                        "/bin/wx-config")
+                                     "--cppflags")))
                (setenv "CPPFLAGS" (read-string port))
                (close-pipe port))
              #t)))))
     (native-inputs
-     `(("mesa" ,mesa) ; for glcanvas
-       ("pkg-config" ,pkg-config)))
+     (list mesa ; for glcanvas
+           pkg-config))
     (inputs
      `(("gtk+" ,gtk+-2) ; for wxPython/src/helpers.cpp
        ("wxwidgets" ,wxwidgets-gtk2)))
@@ -335,15 +330,12 @@ provide a 100% native look and feel for the application.")
         (base32 "0agmmwg0zlsw1idygvqjpj1nk41akzlbdha0hsdk1k8ckz6niq8d"))))
     (build-system glib-or-gtk-build-system)
     (inputs
-     `(("wxwidgets" ,wxwidgets-3.1)
-       ("cairo" ,cairo)
-       ("ffmpeg" ,ffmpeg)))
+     (list wxwidgets-3.1 cairo ffmpeg))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; In Requires.private of libwxsvg.pc.
-     `(("libexif" ,libexif)
-       ("pango" ,pango)))
+     (list libexif pango))
     (synopsis "C++ library to create, manipulate and render SVG files")
     (description "wxSVG is a C++ library to create, manipulate and render
 @dfn{Scalable Vector Graphics} (SVG) files with the wxWidgets toolkit.")
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 90822cd6bf..f345d9f5a3 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2013, 2015, 2017, 2018, 2019, 2021y Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Alexander I.Grafov <grafov@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
@@ -42,6 +42,7 @@
 ;;; Copyright © 2020 James Smith <jsubuntuxp@disroot.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Renzo Poddighe <renzo@poddighe.nl>
@@ -49,6 +50,7 @@
 ;;; Copyright © 2021 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
 ;;; Copyright © 2021 ikasero <ahmed@ikasero.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -140,9 +142,7 @@
         (base32 "0f5070k2bwarghl1vq886pl52xck1x5p7x3qhlfchsc2y3dcqms9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb xcb-util xcb-util-wm))
     (arguments
      `(#:tests? #f                      ;no test suite
        #:make-flags (list (string-append "CC=" ,(cc-for-target))
@@ -227,17 +227,15 @@ program.")
         (base32 "0msw9b1hdy3gbq9w5d04mfizhyirz1c648x84mlcbzl8salm7vpg"))))
     (build-system python-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xrandr" ,xrandr)
-       ("libxcb" ,libxcb)))
+     (list xrandr libxcb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((xrandr (string-append (assoc-ref inputs "xrandr")
-                                          "/bin/xrandr")))
+             (let ((xrandr (search-input-file inputs "/bin/xrandr")))
                (substitute* "contrib/etc/xdg/autostart/autorandr.desktop"
                  (("/usr") (assoc-ref outputs "out")))
                (substitute* "autorandr.py"
@@ -298,8 +296,7 @@ used to further tweak the behaviour of the different profiles.")
        ("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list doxygen pkg-config))
     (home-page "https://github.com/Cloudef/bemenu")
     (synopsis "Dynamic menu library and client program inspired by dmenu")
     (description
@@ -327,10 +324,7 @@ with X11 or Wayland, or in a text terminal with ncurses.")
    `(#:configure-flags '("-DCMAKE_BUILD_TYPE=Release")
      #:tests? #f)) ; Test suite is a rather manual process.
   (inputs
-   `(("qtbase" ,qtbase-5)
-     ("qtscript" ,qtscript)
-     ("qtsvg" ,qtsvg)
-     ("qtx11extras" ,qtx11extras)))
+   (list qtbase-5 qtscript qtsvg qtx11extras))
   (synopsis "Clipboard manager with advanced features")
   (description "CopyQ is clipboard manager with editing and scripting
 features.  CopyQ monitors system clipboard and saves its content in customized
@@ -354,11 +348,8 @@ application.")
     (arguments
      `(#:tests? #f))                    ;tests need /dev/uinput
     (inputs
-     `(("python-appdirs" ,python-appdirs)
-       ("python-evdev" ,python-evdev)
-       ("python-inotify-simple" ,python-inotify-simple)
-       ("python-xlib" ,python-xlib)
-       ("python-six" ,python-six)))
+     (list python-appdirs python-evdev python-inotify-simple python-xlib
+           python-six))
     (home-page "https://github.com/mooz/xkeysnail")
     (synopsis "Keyboard remapping tool for the X11 environment")
     (description
@@ -385,8 +376,7 @@ layers (evdev and uinput), making remapping work in almost all the places.")
     (arguments
      `(#:tests? #f))                    ;no test target
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)))
+     (list libx11 libxkbfile))
     (home-page "https://github.com/grwlf/xkb-switch")
     (synopsis "Switch your X keyboard layouts from the command line")
     (description
@@ -412,10 +402,8 @@ state.")
     (arguments
      '(#:tests? #f))                              ;there is no test suite
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
-    (inputs `(("libxmu" ,libxmu)
-              ("libxt" ,libxt)))
+     (list autoconf automake))
+    (inputs (list libxmu libxt))
     (home-page "https://github.com/astrand/xclip")
     (synopsis "Command line interface to X11 clipboard")
     (description "Xclip is a command line interface to the X11 clipboard.  It
@@ -426,26 +414,24 @@ avoiding password prompts when X11 forwarding has already been setup.")
 (define-public libxkbcommon
   (package
     (name "libxkbcommon")
-    (version "1.0.3")
+    (version "1.3.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0lmwglj16anhpaq0h830xsl1ivknv75i4lir9bk88aq73s2jy852"))))
+               "0ysynzzgzd9jdrh1321r4bgw8wd5zljrlyn5y1a31g39xacf02bv"))))
     (build-system meson-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxml2" ,libxml2)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xkeyboard-config" ,xkeyboard-config)))
+     (list libx11
+           libxcb
+           libxml2
+           wayland
+           wayland-protocols
+           xkeyboard-config))
     (native-inputs
-     `(("bison" ,bison)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)))
+     (list bison doxygen pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "-Dxkb-config-root="
@@ -489,15 +475,11 @@ X11 (yet).")
            (lambda _
              (invoke "autoreconf" "-vfi"))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; For bootstrapping from git.
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config
+           ;; For bootstrapping from git.
+           autoconf automake libtool))
     (inputs
-     `(("libxtst" ,libxtst)
-       ("libx11" ,libx11)))
+     (list libxtst libx11))
     (home-page "https://www.yoctoproject.org/tools-resources/projects/matchbox")
     (synopsis "X virtual keyboard library")
     (description
@@ -530,13 +512,13 @@ X11 (yet).")
                (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
                (setenv "CC" "gcc")
                #t))))))
-    (native-inputs `(("perl" ,perl))) ; for pod2man
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxi" ,libxi)
-              ("libxinerama" ,libxinerama)
-              ("libxtst" ,libxtst)
-              ("libxkbcommon" ,libxkbcommon)))
+    (native-inputs (list perl)) ; for pod2man
+    (inputs (list libx11
+                  libxext
+                  libxi
+                  libxinerama
+                  libxtst
+                  libxkbcommon))
     (home-page "https://www.semicomplete.com/projects/xdotool/")
     (synopsis "Fake keyboard/mouse input, window management, and more")
     (description "Xdotool lets you simulate keyboard input and mouse activity,
@@ -570,9 +552,7 @@ between desktops, and change the number of desktops.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util-wm xcb-util))
     (home-page "https://github.com/baskerville/xdo")
     (synopsis "Small X utility to perform elementary actions on windows")
     (description
@@ -593,12 +573,9 @@ options are given, the action applies to the focused window.")
         (base32 "0lq5j7fryx1wn998jq6h3icz1h6pqrsbs3adskjzjyhn5l6yrg2p"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxrender" ,libxrender)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxrender libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/")    ; no dedicated Xeyes page exists
     (synopsis "Follow-the-mouse X demo")
     (description "Xeyes is a demo program for x.org.  It shows eyes
@@ -609,7 +586,7 @@ following the mouse.")
 (define-public pixman
   (package
     (name "pixman")
-    (version "0.38.4")
+    (version "0.40.0")
     (source
      (origin
        (method url-fetch)
@@ -618,29 +595,32 @@ following the mouse.")
          "https://www.cairographics.org/releases/pixman-"
          version ".tar.gz"))
        (sha256
-        (base32 "1ryxzdf048x7wsx4dlvrr1p00gzwfs7lybnhgc7ygbj0dvyxcrns"))
+        (base32 "1z13n96m7x91j25qq9wlkxsbq04wfwjhw66ir17frna06zn0s83d"))
        (patches
         (search-patches
          "pixman-CVE-2016-5296.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags
+       (list
+        "--disable-static"
+        "--enable-timers"
+        "--enable-gnuplot")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("zlib" ,zlib)))
+     (list libpng zlib))
     (synopsis "Low-level pixel manipulation library")
     (description "Pixman is a low-level software library for pixel
 manipulation, providing features such as image compositing and trapezoid
 rasterisation.")
     (home-page "http://www.pixman.org/")
-    (license license:x11)))
+    (license license:expat)))
 
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.103")
+    (version "2.4.107")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -648,7 +628,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "08h2nnf4w96b4ql7485mvjgbbsb8rwc0qa93fdm1cq34pbyszq1z"))))
+                "127qf1rzhaf13vdd75a58v5q34617hvangjlfnlkcdh37gqcwm65"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -663,12 +643,13 @@ rasterisation.")
 
        #:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda _
-                      (invoke "meson" "test" "--timeout-multiplier" "5"))))))
-    (inputs
-     `(("libpciaccess" ,libpciaccess)))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "meson" "test" "--timeout-multiplier" "5")))))))
+    (propagated-inputs
+     (list libpciaccess))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://dri.freedesktop.org/wiki/")
     (synopsis "Direct rendering userspace library")
     (description "The Direct Rendering Infrastructure, also known as the DRI,
@@ -720,10 +701,9 @@ tracking.")
         (base32
          "0jmyryrpqb35y9hd5sgxqy2z0r1snw7d3ljw0jak0n0cjdz1yf9w"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("xcb-util" ,xcb-util)))
+     (list libx11 xcb-util))
     (home-page "https://www.freedesktop.org/wiki/Software/startup-notification/")
     (synopsis "Application startup notification and feedback library")
     (description
@@ -753,11 +733,9 @@ System style license, and has no special dependencies.")
                             (assoc-ref %outputs "out")
                             "/share/man"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxmu" ,libxmu)
-       ("glib" ,glib)))
+     (list libx11 libxmu glib))
     (home-page "http://tomas.styblo.name/wmctrl/")
     (synopsis "Command-line tool to control X window managers")
     (description
@@ -783,18 +761,15 @@ move windows, switch between desktops, etc.).")
         (base32 "0rls08mpalx4xp5ysmg7m5lgx9q8g8m8q40m47f11mqa84z88nd1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf autoconf-archive automake pkg-config))
     (inputs
-     `(("giblib" ,giblib)
-       ("imlib2" ,imlib2)
-       ("libbsd" ,libbsd)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxext" ,libxext)
-       ("libXfixes" ,libxfixes)))
+     (list giblib
+           imlib2
+           libbsd
+           libx11
+           libxcomposite
+           libxext
+           libxfixes))
     (home-page "https://github.com/resurrecting-open-source-projects/scrot")
     (synopsis "Command-line screen capture utility for X Window System")
     (description
@@ -822,12 +797,12 @@ of the screen selected by mouse.")
     (arguments
      '(#:tests? #f)) ; no "check" target
     (inputs
-     `(("glew" ,glew)
-       ("glm" ,glm)
-       ("icu4c" ,icu4c)
-       ("libxext" ,libxext)
-       ("libxrender" ,libxrender)
-       ("mesa" ,mesa)))
+     (list glew
+           glm
+           icu4c
+           libxext
+           libxrender
+           mesa))
     (home-page "https://github.com/naelstrof/slop")
     (synopsis "Select a region and print its bounds to stdout")
     (description
@@ -901,7 +876,7 @@ include cursor in the resulting image.")
                (invoke "make" "install" "install.man"
                        (string-append "BINDIR=" bin)
                        (string-append "MANDIR=" man1))))))))
-    (inputs `(("libx11" ,libx11)))
+    (inputs (list libx11))
     (home-page "http://ftp.x.org/contrib/utilities/")
     (synopsis "Hide idle mouse cursor")
     (description
@@ -939,13 +914,9 @@ things less distracting.")
                  (modify-phases %standard-phases
                    (delete 'configure))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libev" ,libev)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)))
+     (list libx11 libev libxfixes libxi))
     (native-inputs
-     `(("asciidoc" ,asciidoc)
-       ("pkg-config" ,pkg-config)))
+     (list asciidoc pkg-config))
     (home-page "https://github.com/Airblader/unclutter-xfixes")
     (synopsis "Hide idle mouse cursor")
     (description
@@ -980,12 +951,9 @@ things less distracting.")
          "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)))
+     (list libpng libx11 libxi libxtst))
     (native-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (synopsis "Tools to automate tasks in X such as detecting on screen images")
     (description
      "Xautomation can control X from the command line for scripts, and
@@ -1019,10 +987,7 @@ to find buttons, etc, on the screen to click on.")
        #:phases (modify-phases %standard-phases
                   (delete 'configure)))) ; no configure script
     (inputs
-     `(("libx11" ,libx11)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)
-       ("libxt" ,libxt)))
+     (list libx11 libxfixes libxi libxt))
     (synopsis "Banish the mouse cursor")
     (description
      "@command{xbanish} hides the mouse cursor when you start typing, and
@@ -1080,10 +1045,7 @@ X Window System.")
      '(#:configure-flags
        (list (string-append "--mandir=" %output "/share/man"))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxt" ,libxt)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 libxt libxext libxinerama))
     (home-page "https://sourceforge.net/projects/libxosd/")
     (synopsis "X On Screen Display")
     (description
@@ -1104,12 +1066,9 @@ transparent text on your screen.")
         (base32 "080pwz8pvqqq068lavzz48dl350iszpdswjd86bjk6zra5h5d10q"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("scdoc" ,scdoc)))
+     (list pkg-config scdoc))
     (inputs
-     `(("libseccomp" ,libseccomp)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list libseccomp wayland wayland-protocols))
     (home-page "https://github.com/francma/wob")
     (synopsis "Lightweight overlay bar for Wayland")
     (description
@@ -1151,11 +1110,9 @@ backlight, progress, or anything bar for Wayland.")
                   (format #f "\"~a/bin/~a\"" out command)))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("guile" ,guile-2.2)
-       ("libx11" ,libx11)
-       ("tk" ,tk)))
+     (list guile-2.2 libx11 tk))
     (home-page "https://www.nongnu.org/xbindkeys/")
     (synopsis "Associate a combination of keys with a shell command")
     (description
@@ -1184,11 +1141,7 @@ Guile will work for XBindKeys.")
         (base32 "1winwzdy9yxvxnrv8gqpigl9y0c2px27mnms62bdilp4x6llrs9r"))))
     (build-system gnu-build-system)
     (inputs
-     `(("asciidoc" ,asciidoc)
-       ("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list asciidoc libxcb xcb-util xcb-util-keysyms xcb-util-wm))
     (arguments
      `(#:phases (modify-phases %standard-phases (delete 'configure))
        #:tests? #f  ; no check target
@@ -1266,9 +1219,8 @@ compact configuration syntax.")
        ("libX11" ,libx11)
        ("libXt" ,libxt)))
     (native-inputs
-     `(("ncurses" ,ncurses)         ;trigger the installation of terminfo data
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list ncurses ;trigger the installation of terminfo data
+           perl pkg-config))
     ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
     ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
     (native-search-paths
@@ -1307,10 +1259,9 @@ within a single process.")
                           "MANDIR=/share/man/man1"
                           ,(string-append "CC=" (cc-for-target)))))
     (inputs
-     `(("libxtst" ,libxtst)
-       ("libx11" ,libx11)))
+     (list libxtst libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://github.com/alols/xcape")
     (synopsis "Use a modifier key in X.org as another key")
     (description
@@ -1335,18 +1286,15 @@ Escape key when Left Control is pressed and released on its own.")
     (arguments
      `(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ;; For tests.
-       ("python" ,python)))
+     (list pkg-config
+           ;; For tests.
+           python))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libgudev" ,libgudev)
-       ("eudev" ,eudev)
-       ("libxml2" ,libxml2)))
+     (list gtk+ libgudev eudev libxml2))
     (propagated-inputs
      ;; libwacom includes header files that include GLib, and libinput uses
      ;; those header files.
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://linuxwacom.github.io/")
     (synopsis "Helper library for Wacom tablet settings")
     (description
@@ -1379,13 +1327,9 @@ Wacom tablet applet.")
                             "/share/X11/xorg.conf.d"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xorg-server" ,xorg-server)
-       ("libxrandr" ,libxrandr)
-       ("libxinerama" ,libxinerama)
-       ("libxi" ,libxi)
-       ("eudev" ,eudev)))
+     (list xorg-server libxrandr libxinerama libxi eudev))
     (home-page "https://linuxwacom.github.io/")
     (synopsis "Wacom input driver for X")
     (description
@@ -1440,33 +1384,28 @@ the X.Org X Server version 1.7 and later (X11R7.5 or later).")
          (add-after 'split-outputs 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((gtk (assoc-ref outputs "gtk"))
-                    (python-version
-                     (@ (guix build python-build-system) python-version))
-                    (python (assoc-ref inputs "python"))
-                    (sitedir (string-append gtk "/lib/python"
-                                            (python-version python)
-                                            "/site-packages")))
+                    (site-packages (@ (guix build python-build-system)
+                                      site-packages))
+                    (site (site-packages inputs outputs)))
                (wrap-program (string-append gtk "/bin/redshift-gtk")
-                 `("PYTHONPATH" ":" prefix
-                   (,(string-append sitedir ":" (getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(string-append site ":" (getenv "GUIX_PYTHONPATH"))))
                  `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (outputs '("out" "gtk"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libx11" ,libx11)
-       ("libxcb" ,libxcb)
-       ("libxxf86vm" ,libxxf86vm)
-       ("glib" ,glib)                   ;for Geoclue2 support
-
-       ;; To build the GTK3 GUI, we need these.
-       ("gtk+" ,gtk+)
-       ("python" ,python)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyxdg" ,python-pyxdg)))
+     (list libdrm
+           libx11
+           libxcb
+           libxxf86vm
+           glib ;for Geoclue2 support
+           ;; To build the GTK3 GUI, we need these.
+           gtk+
+           python
+           python-pygobject
+           python-pyxdg))
     (home-page "https://github.com/jonls/redshift")
     (synopsis "Adjust the color temperature of your screen")
     (description
@@ -1513,18 +1452,14 @@ color temperature should be set to match the lamps in your room.")
                             (("^_") ""))
                           #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("intltool" ,intltool)))
+       (list autoconf automake libtool pkg-config intltool))
       (inputs
-       `(("libdrm" ,libdrm)
-         ("libx11" ,libx11)
-         ("libxcb" ,libxcb)
-         ("libxxf86vm" ,libxxf86vm)
-         ("glib" ,glib)                 ; for Geoclue2 support
-         ("wayland" ,wayland)))
+       (list libdrm
+             libx11
+             libxcb
+             libxxf86vm
+             glib ; for Geoclue2 support
+             wayland))
       (home-page "https://github.com/minus7/redshift")
       (synopsis "Adjust the color temperature of your screen (with Wayland support)")
       (description
@@ -1561,7 +1496,7 @@ protocol.")
              ;; to Python libraries.
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/gammastep-indicator")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix
                  (,(getenv "GI_TYPELIB_PATH")))))))))
     (native-inputs
@@ -1620,8 +1555,7 @@ less if you are working in front of the screen at night.")
                                          (assoc-ref %outputs "out")
                                          "/lib/X11/app-defaults"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("libx11" ,libx11)
        ("libxext" ,libxext)
@@ -1679,13 +1613,9 @@ demos.  It also acts as a nice screen locker.")
                             (delete 'configure)
                             (delete 'check))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)
-       ("dbus" ,dbus)))
+     (list glib libx11 libxext libxscrnsaver dbus))
     (synopsis "Forward freedesktop.org Idle Inhibition Service calls to Xss")
     (description "xssproxy implements the @code{org.freedesktop.ScreenSaver}
 D-Bus interface described in the Idle Inhibition Service Draft by the
@@ -1696,30 +1626,43 @@ Saver extension) library.")
     (license license:gpl3+)))
 
 (define-public xsel
-  (package
-    (name "xsel")
-    (version "1.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.vergenet.net/~conrad/software"
-                                  "/xsel/download/xsel-" version ".tar.gz"))
-              (sha256
-               (base32
-                "070lbcpw77j143jrbkh0y1v10ppn1jwmjf92800w7x42vh4cw9xr"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("libxt" ,libxt)))
-    (home-page "http://www.vergenet.net/~conrad/software/xsel/")
-    (synopsis "Manipulate X selection")
-    (description
-     "XSel is a command-line program for getting and setting the contents of
+  ;; The 1.2.0 release no longer compiles with GCC 8 and upper, see:
+  ;; https://github.com/kfish/xsel/commit/d88aa9a8dba9228e6780d6bb5a5720a36f854918.
+  (let ((commit "062e6d373537c60829fa9b5dcddbcd942986b3c3")
+        (revision "1"))
+    (package
+      (name "xsel")
+      (version (git-version "1.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/kfish/xsel")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0fbf80zsc22vcqp59r9fdx4icxhrkv7l3lphw83326jrmkzy6kri"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               (invoke "autoreconf" "-vfi"))))))
+      (native-inputs (list autoconf automake libtool))
+      (inputs
+       (list libxt))
+      (home-page "http://www.vergenet.net/~conrad/software/xsel/")
+      (synopsis "Manipulate X selection")
+      (description
+       "XSel is a command-line program for getting and setting the contents of
 the X selection.  Normally this is only accessible by manually highlighting
 information and pasting it with the middle mouse button.
 
 XSel reads from standard input and writes to standard output by default,
 but can also follow a growing file, display contents, delete entries and more.")
-    (license (license:x11-style "file://COPYING"
-                                "See COPYING in the distribution."))))
+      (license (license:x11-style "file://COPYING"
+                                  "See COPYING in the distribution.")))))
 
 (define-public xdpyprobe
   (package
@@ -1735,7 +1678,7 @@ but can also follow a growing file, display contents, delete entries and more.")
                 "1h09wd2qcg08rj5hcakvdh9q01hkrj8vxly94ax3ch2x06lm0zq8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (home-page "https://github.com/alezost/xdpyprobe")
     (synopsis "Probe X server for connectivity")
     (description
@@ -1816,15 +1759,15 @@ by name.")
                (("/etc") "${CMAKE_INSTALL_PREFIX}/etc"))
              #t)))))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("imlib2" ,imlib2)
-       ("librsvg" ,librsvg)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxft" ,libxft)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("startup-notification" ,startup-notification)))
+     (list gtk+-2
+           imlib2
+           librsvg
+           libxcomposite
+           libxdamage
+           libxft
+           libxinerama
+           libxrandr
+           startup-notification))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -1880,11 +1823,8 @@ actions, a built-in clock, a battery monitor and a system tray.")
               (substitute* "Makefile" (("include config.mk") ""))
               #t)))))
      (inputs
-      `(("libx11"      ,libx11)
-        ("libxft"      ,libxft)
-        ("libxpm"      ,libxpm)
-        ("libxinerama" ,libxinerama)))
-     (native-inputs `(("pkg-config" ,pkg-config)))
+      (list libx11 libxft libxpm libxinerama))
+     (native-inputs (list pkg-config))
      (synopsis "General purpose messaging, notification and menuing program for X11")
      (description "Dzen is a general purpose messaging, notification and menuing
 program for X11.  It was designed to be fast, tiny and scriptable in any language.")
@@ -1911,7 +1851,7 @@ program for X11.  It was designed to be fast, tiny and scriptable in any languag
               ("fontconfig" ,fontconfig)
               ("libxft" ,libxft)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -1951,12 +1891,9 @@ minimalistic tiling window managers such as herbstluftwm and bspwm.")
                   #t))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("m4" ,m4)
-       ("libx11" ,libx11))) ; for tests
+     (list pkg-config m4 libx11)) ; for tests
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util))
     (home-page "https://github.com/Airblader/xcb-util-xrm")
     (synopsis "XCB utility functions for the X resource manager")
     (description
@@ -2002,10 +1939,7 @@ XCB util-xrm module provides the following libraries:
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no test suite
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxrandr" ,libxrandr)
-              ("libxxf86vm" ,libxxf86vm)))
+    (inputs (list libx11 libxext libxrandr libxxf86vm))
     (synopsis "Tiny monitor calibration loader for XFree86 (or X.org)")
     (description "xcalib is a tiny tool to load the content of vcgt-Tags in ICC
 profiles to the video card's gamma ramp.  It does work with most video card
@@ -2030,12 +1964,8 @@ invert colors on a specific display/screen.")
     (arguments '(#:configure-flags `("--enable-sound"
                                      "--enable-wave"
                                      "--enable-alsa")))
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))
-    (inputs `(("libx11" ,libx11)
-              ("alsa-lib" ,alsa-lib)))
+    (native-inputs (list autoconf automake pkg-config perl))
+    (inputs (list libx11 alsa-lib))
     (synopsis "Daemon that performs an action every time the X11 bell is rung")
     (description "nxbelld is a tiny utility to aid people who either don't
 like the default PC speaker beep, or use a sound driver that doesn't have
@@ -2059,11 +1989,9 @@ or playing a PCM encoded WAVE file.")
                 "18jd3k3pvlm5x1adyqw63z2b3f4ixh9mfvz9asvnskk3fm8jgw0i"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)))
+     (list imake))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxscrnsaver" ,libxscrnsaver)))
+     (list libx11 libxext libxscrnsaver))
     (arguments
      `(#:tests? #f
        #:phases
@@ -2112,7 +2040,7 @@ a user-configurable period of time.")
     (inputs `(("gtk3" ,gtk+)
               ("gdk" ,gdk-pixbuf)
               ("pango" ,pango)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      ;; The default configure puts the 'sm' binary in games/ instead of bin/ -
      ;; this fixes it:
@@ -2144,11 +2072,9 @@ commandline).")
                  (base32
                   "10hx7k7ga8g08akwz8qrsvj8iqr5nd4siiva6sjx789jvf0sak7r"))))
       (build-system cmake-build-system)
-      (inputs `(("glib" ,glib)
-                ("xcb-util" ,xcb-util)))
+      (inputs (list glib xcb-util))
       (native-inputs
-       `(("python-docutils" ,python-docutils)
-         ("pkg-config" ,pkg-config)))
+       (list python-docutils pkg-config))
       (arguments
        `(#:tests? #f))
       (synopsis "Use external screen locker on events")
@@ -2176,8 +2102,7 @@ before the system goes to sleep.")
     (arguments
      '(#:tests? #f)) ; Not clear how to make tests pass.
     (inputs
-     `(("xclip" ,xclip)
-       ("xsel" ,xsel)))
+     (list xclip xsel))
     (home-page "https://github.com/asweigart/pyperclip")
     (synopsis "Python clipboard module")
     (description
@@ -2201,7 +2126,7 @@ the X11 clipboard")
                 "1w49fayhwzn5rx0z1q2lrvm7z8jrd34lgb89p853a024bixc3cf2"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorg-server" ,xorg-server)))
+     (list xorg-server))
     (home-page "https://github.com/rg3/numlockx")
     (synopsis "Turns on the numlock key in X11")
     (description "@command{numlockx} is a tiny program that lets you turn on
@@ -2239,7 +2164,7 @@ to automatically turn it on on login.")
                (copy-file "xrandr-invert-colors.bin"
                           (string-append bin "/xrandr-invert-colors"))))))))
     (inputs
-     `(("libxrandr" ,libxrandr)))
+     (list libxrandr))
     (home-page "https://github.com/zoltanp/xrandr-invert-colors")
     (synopsis "Invert display colors")
     (description "This package provides a small utility for inverting the
@@ -2290,10 +2215,10 @@ colors on all monitors attached to an XRandR-capable X11 display server.")
                             (string-append out "/bin/sctd"))
                #t))))))
     (inputs
-     `(("coreutils" ,coreutils) ; sctd uses "date", "printf" and "sleep"
-       ("inetutils" ,inetutils) ; sctd uses "logger"
-       ("libxrandr" ,libxrandr)
-       ("sed" ,sed))) ; sctd uses "sed"
+     (list coreutils ; sctd uses "date", "printf" and "sleep"
+           inetutils ; sctd uses "logger"
+           libxrandr
+           sed)) ; sctd uses "sed"
     (home-page "https://www.umaxx.net")
     (synopsis "Set the color temperature of the screen")
     (description "@code{sct} is a lightweight utility to set the color
@@ -2318,8 +2243,7 @@ temperature of the screen.")
          "--with-xkb"
          "--with-default-authproto-module=/run/setuid-programs/authproto_pam")))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("pkg-config" ,pkg-config)))
+     (list pandoc pkg-config))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("libX11" ,libx11)
@@ -2373,12 +2297,9 @@ binary to setuid-binaries:
                 (string-append "\"" (assoc-ref inputs "xdg-utils")
                                "/bin/xdg-mime\""))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("coreutils" ,coreutils)
-       ("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xdg-utils" ,xdg-utils)))
+     (list coreutils wayland wayland-protocols xdg-utils))
     (home-page "https://github.com/bugaevc/wl-clipboard")
     (synopsis "Command-line copy/paste utilities for Wayland")
     (description "Wl-clipboard is a set of command-line copy/paste utilities for
@@ -2420,8 +2341,7 @@ Wayland.")
                (symlink "wl-clipboard-x11" (string-append bin "xsel")))
              #t)))))
     (inputs
-     `(("bash-minimal" ,bash-minimal)
-       ("wl-clipboard" ,wl-clipboard)))
+     (list bash-minimal wl-clipboard))
     (home-page "https://github.com/brunelli/wl-clipboard-x11")
     (synopsis "Use wl-clipboard as a drop-in replacement to X11 clipboard tools")
     (description "This package provides a wrapper script around
@@ -2444,8 +2364,7 @@ helper scripts for @code{xclip} and @code{xsel} to assist with the transition.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f)) ; no "check" target
-    (native-inputs `(("libx11" ,libx11)
-                     ("libxaw" ,libxaw)))
+    (native-inputs (list libx11 libxaw))
     (home-page "https://www.nongnu.org/autocutsel/")
     (synopsis "Automated X11 clipboard and cutbuffer synchronization")
     (description "@code{autocutsel} tracks changes in the server's cutbuffer
@@ -2469,17 +2388,15 @@ The cutbuffer and clipboard selection are always synchronized.")
         (base32 "08dyygclayyipa0p2qsxqa3fsfyflkrkhpi25dkc3ybkicvynk24"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("cppcheck" ,cppcheck)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list cppcheck perl pkg-config))
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("librsvg" ,librsvg)
-       ("libx11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("pango" ,pango)))
+     (list cairo
+           glib
+           librsvg
+           libx11
+           libxml2
+           libxrandr
+           pango))
     (arguments
      `(#:test-target "test"
        #:phases
@@ -2512,16 +2429,14 @@ can optionally use some appearance settings from XSettings, tint2 and GTK.")
         (base32 "1rsv42cl0s149sbpdxz9yqqjip3si95jv3dglwzrcm7pjfg7519v"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("libjpeg-turbo" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libxpm" ,libxpm)
-       ("pixman" ,pixman)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)))
+     (list libjpeg-turbo
+           libpng
+           libxpm
+           pixman
+           xcb-util
+           xcb-util-image))
     (home-page "https://github.com/stoeckmann/xwallpaper")
     (synopsis "Wallpaper setting utility for X")
     (description
@@ -2555,8 +2470,7 @@ backgrounds.")
                (install-file "README" doc)
                #t))))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 libxinerama))
     (home-page "https://www.lcdf.org/~eddietwo/xwrits/")
     (synopsis "Reminds you to take wrist breaks")
     (description "Xwrits reminds you to take wrist breaks for prevention or
@@ -2582,7 +2496,7 @@ Xwrits hides itself until you should take another break.")
         (base32 "14gnkz18dipsa2v24f4nm9syxaa7g21iqjm7y65jn849ka2jr1h8"))))
     (build-system scons-build-system)
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("googletest" ,googletest)
@@ -2725,10 +2639,12 @@ tools to complement clipnotify.")
                       (gawk              (assoc-ref inputs "gawk"))
                       (util-linux        (assoc-ref inputs "util-linux"))
                       (xdotool           (assoc-ref inputs "xdotool"))
-                      (xsel              (assoc-ref inputs "xsel")))
+                      (xsel              (assoc-ref inputs "xsel"))
+                      (guile             (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (prog)
                     (wrap-script (string-append out "/bin/" prog)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (dir)
                                 (string-append dir "/bin"))
@@ -2746,13 +2662,13 @@ tools to complement clipnotify.")
                (invoke "tests/test-clipmenu")
                #t)))))
       (inputs
-       `(("clipnotify" ,clipnotify)
-         ("coreutils-minimal" ,coreutils-minimal)
-         ("gawk" ,gawk)
-         ("guile" ,guile-3.0) ; for wrap-script
-         ("util-linux" ,util-linux)
-         ("xdotool" ,xdotool)
-         ("xsel" ,xsel)))
+       (list clipnotify
+             coreutils-minimal
+             gawk
+             guile-3.0 ; for wrap-script
+             util-linux
+             xdotool
+             xsel))
       (home-page "https://github.com/cdown/clipmenu")
       (synopsis "Simple clipboard manager using dmenu or rofi and xsel")
       (description "Start @command{clipmenud}, then run @command{clipmenu} to
@@ -2781,14 +2697,10 @@ After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.")
          "0qkq75grbd4wkx4nlvswgavpijk9ad0pzqyj89a0ayjsbsn36pqy"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake
+           `(,glib "bin") pkg-config))
     (inputs
-     `(("dbus-glib" ,dbus-glib)
-       ("glib" ,glib)
-       ("libx11" ,libx11)))
+     (list dbus-glib glib libx11))
     (home-page "https://github.com/qnikst/kbdd")
     (synopsis "Per-window keyboard layout switching daemon for X")
     (description "@command{kbdd} is a simple keyboard layout switching
@@ -2817,7 +2729,7 @@ create layout indicator widgets.")
                 "1gxpgifzy0hnpd0ymw3r32amzr32z3bgb90ldjzl438p6h1q0i26"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("catch2" ,catch-framework2)))
+     (list catch-framework2))
     (arguments
      `(#:configure-flags '("-DWITH_GIT_CATCH=off")
        #:phases
@@ -2855,7 +2767,7 @@ using @command{dmenu}.")
     (arguments
      `(#:glib-or-gtk? #t))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gtk3" ,gtk+)
        ("wayland" ,wayland)))
@@ -2887,9 +2799,9 @@ such as sway, similar to @command{rofi}.")
          (delete 'configure))
        #:tests? #f))
     (inputs
-     `(("python" ,python)))
+     (list python))
     (native-inputs
-     `(("python-sphinx" ,python-sphinx)))
+     (list python-sphinx))
     (home-page "https://github.com/jceb/dex")
     (synopsis "Execute DesktopEntry files")
     (description
@@ -2925,7 +2837,7 @@ and execute @file{.desktop} files of the Application type.")
                 (string-append (assoc-ref inputs "xauth") "/bin/" command)))))
          (delete 'configure))))         ; no configure script
     (inputs
-     `(("xauth" ,xauth)))
+     (list xauth))
     (home-page "https://github.com/Earnestly/sx")
     (synopsis "Start an xorg server")
     (description
@@ -2962,11 +2874,9 @@ and execute @file{.desktop} files of the Application type.")
              (let ((out (assoc-ref outputs "out")))
                (mkdir-p (string-append out "/bin"))))))))
     (inputs
-     `(("libx11" ,libx11)
-       ("imlib2" ,imlib2)
-       ("libxinerama" ,libxinerama)))
+     (list libx11 imlib2 libxinerama))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Imlib2-based wallpaper changer")
     (description
      "The @command{hsetroot} command composes wallpapers for X.
@@ -2999,12 +2909,9 @@ This package is the fork of hsetroot by Hyriand.")
                             (string-append "PREFIX = " out "\n")))
                          #true))))))
     (propagated-inputs
-     `(("wmctrl" ,wmctrl)
-       ("xdotool" ,xdotool)
-       ("xprop" ,xprop)))
+     (list wmctrl xdotool xprop))
     (native-inputs
-     `(("pandoc" ,pandoc)
-       ("perl" ,perl)))
+     (list pandoc perl))
     (synopsis "Run-or-raise application switcher for any X11 desktop")
     (description
      "Bind a key for any given application that will launch the application,
@@ -3027,9 +2934,7 @@ if there's more than one.")
         (base32 "199mlm127zk1lr8nrq22n68l2l8cjwc4cgwd67rg1i6497n2y0xc"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("perl" ,perl)
-       ("perl-tk" ,perl-tk)))
+     (list libx11 perl perl-tk))
     (arguments
      `(#:tests? #f                      ; There are none.
        #:make-flags
@@ -3084,10 +2989,9 @@ MouseKeys-acceleration management.")
          "0hhsddh3rs066rbsjksr8kcwg8lvglbvs67dq0r5wx5c1xcwb51w"))))
     (build-system meson-build-system)
     (inputs
-     `(("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)))
+     (list wayland wayland-protocols))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Day/night gamma adjustments for Wayland compositors")
     (home-page "https://sr.ht/~kennylevinsen/wlsunset/")
     (description
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 7a4fca4f43..689c1fcd6d 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -93,9 +93,8 @@
                 "0g86ywkx0ghzhhn96k88p67bbzlm1aqckly85izp07w80l1934ja"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
-    (inputs `(("gtk+" ,gtk+-2)))
+     (list pkg-config intltool))
+    (inputs (list gtk+-2))
     (home-page "https://www.xfce.org/")
     (synopsis "GTK+ theme engine for Xfce")
     (description
@@ -116,11 +115,8 @@
                 "10svnpc8ggasym1pfgh24bfr0ndqs6lc7v1wmpsizj0zbms8snb0"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("vala" ,vala)))
-    (propagated-inputs `(("glib" ,glib))) ; required by libxfce4util-1.0.pc
+     (list pkg-config gobject-introspection intltool vala))
+    (propagated-inputs (list glib)) ; required by libxfce4util-1.0.pc
     (home-page "https://www.xfce.org/")
     (synopsis "Basic utility library for Xfce")
     (description
@@ -176,9 +172,9 @@ Xfce Desktop Environment.")
        ("dbus" ,dbus)))
     (propagated-inputs
      ;; libxfconf-0.pc refers to all these.
-     `(("glib" ,glib)))
+     (list glib))
     (inputs
-     `(("libxfce4util" ,libxfce4util)))
+     (list libxfce4util))
     (home-page "https://www.xfce.org/")
     (synopsis "Configuration storage and query system for Xfce")
     (description
@@ -203,17 +199,13 @@ storage system.")
      `(#:configure-flags
        (list "--with-vendor-info=GNU Guix")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("gobject-introspection" ,gobject-introspection)))
+     (list pkg-config intltool gobject-introspection))
     (propagated-inputs
      `(("gtk+-3" ,gtk+)    ; required by libxfce4ui-2.pc
        ;; libxfce4kbd-private-3.pc refers to all these.
        ("libxfce4util" ,libxfce4util)
        ("xfconf" ,xfconf)))
-    (inputs `(("libsm" ,libsm)
-              ("libice" ,libice)
-              ("startup-notification" ,startup-notification)))
+    (inputs (list libsm libice startup-notification))
     (home-page "https://www.xfce.org/")
     (synopsis "Widgets library for Xfce")
     (description
@@ -255,23 +247,16 @@ to share commonly used Xfce widgets among the Xfce applications.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/catfish")
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))
        #:tests? #f))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-distutils-extra" ,python-distutils-extra)
-       ("intltool" ,intltool)))
+     (list pkg-config python-distutils-extra intltool))
     (inputs
-     `(("which" ,which)
-       ("xfconf" ,xfconf)
-       ("xdg-utils" ,xdg-utils)))
+     (list which xfconf xdg-utils))
     (propagated-inputs
-     `(("gtk+" ,gtk+)
-       ("python-dbus" ,python-dbus)
-       ("python-pexpect" ,python-pexpect)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)))
+     (list gtk+ python-dbus python-pexpect python-pycairo
+           python-pygobject))
     (home-page "https://docs.xfce.org/apps/catfish/start")
     (synopsis "File searching tool for Xfce")
     (description
@@ -305,9 +290,7 @@ it to your needs by using several command line options.")
              (for-each make-file-writable (find-files "."))
              #t)))))
     (native-inputs
-     `(("gtk+" ,gtk+)
-       ("optipng" ,optipng)
-       ("pkg-config" ,pkg-config)))
+     (list gtk+ optipng pkg-config))
     (home-page "https://shimmerproject.org/")
     (synopsis "Elementary icons extended and maintained for Xfce")
     (description "This is a fork of the upstream elementary project.  This icon
@@ -329,14 +312,12 @@ upstream occasionally.")
                 "17cybaml221jnw99aig3zajg2kbnn87p5sycj68wpwgvd99zb2af"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (propagated-inputs
      ;; exo-2.pc refers to all these.
-     `(("gtk+-3" ,gtk+)
-       ("libxfce4util" ,libxfce4util)))
+     (list gtk+ libxfce4util))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)))
+     (list libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Extension library for Xfce")
     (description
@@ -360,13 +341,10 @@ development.")
                 "07fjsgdjqxbcm84ga3cl495782k381k6mwksyrks3zf1l8klk4c4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list `(,glib "bin") gobject-introspection intltool pkg-config))
     (propagated-inputs
-     `(("gtk+-3" ,gtk+)                 ; required by garcon-gtk3-1.pc
-       ("libxfce4ui" ,libxfce4ui)))     ; required by garcon-gtk3-1.pc
+     (list gtk+ ; required by garcon-gtk3-1.pc
+           libxfce4ui))     ; required by garcon-gtk3-1.pc
     (home-page "https://www.xfce.org/")
     (synopsis "Implementation of the freedesktop.org menu specification")
     (description
@@ -390,23 +368,22 @@ merging features essential for loading menus modified with menu editors.")
                 "0rmga1l7da0pjrs6jlyq1nfn513r543v7cchshrif1341knpy2wv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-       ("glib:bin" ,glib "bin")         ; need glib-genmarshal
-       ("dbus-glib" ,dbus-glib)))       ; need dbus-binding-tool
+     (list pkg-config intltool
+           `(,glib "bin") ; need glib-genmarshal
+           dbus-glib))       ; need dbus-binding-tool
     (propagated-inputs
-     `(("glib" ,glib)))                 ; required by tumbler-1.pc
+     (list glib))                 ; required by tumbler-1.pc
     (inputs
-     `(("dbus" ,dbus)
-       ("gdk-pixbuf" ,gdk-pixbuf)
-       ("cairo" ,cairo) ;; Needed for pdf thumbnails (poppler-glibc.pc)
-       ("freetype" ,freetype)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libgsf" ,libgsf)
-       ("poppler" ,poppler)
-       ;; FIXME Provide gstreamer and gstreamer-tag to get video thumbnails
-       ;; ("gstreamer" ,gstreamer)
-       ))
+     (list dbus
+           gdk-pixbuf
+           cairo ;; Needed for pdf thumbnails (poppler-glibc.pc)
+           freetype
+           libjpeg-turbo
+           libgsf
+           poppler
+           ;; FIXME Provide gstreamer and gstreamer-tag to get video thumbnails
+           ;; ("gstreamer" ,gstreamer)
+           ))
     (home-page "https://www.xfce.org/")
     (synopsis "D-Bus service for applications to request thumbnails")
     (description
@@ -436,8 +413,7 @@ management D-Bus specification.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (string-append "plugins/clock/clock.c")
                (("/usr/share/zoneinfo")
-                (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
-             #t)))))
+                (search-input-directory inputs "share/zoneinfo"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
@@ -478,13 +454,8 @@ applications menu, workspace switcher and more.")
                (base32
                 "08n2cig9r2lccwvmk6v9vjiz0xqcp6x30m5b3q702v0m6ylg4z8h"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("intltool" ,intltool)))
-    (inputs `(("glib" ,glib)
-              ("gtk+" ,gtk+)
-              ("libxfce4util" ,libxfce4util)
-              ("libxfce4ui" ,libxfce4ui)
-              ("xfce4-panel" ,xfce4-panel)))
+    (native-inputs (list pkg-config intltool))
+    (inputs (list glib gtk+ libxfce4util libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin")
     (synopsis "Battery monitor panel plugin for Xfce4")
@@ -508,13 +479,9 @@ applications menu, workspace switcher and more.")
                 "1f4rjdvyplfkrdqg9179chzxx18k3lx29674j28piccgyvk5z2mb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("exo" ,exo)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxtst" ,libxtst)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list exo libxfce4ui libxtst xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-clipman-plugin")
     (synopsis "Clipboard manager for Xfce")
@@ -553,16 +520,9 @@ matching them against regular expressions.")
                                     (or (getenv "C_INCLUDE_PATH") "")))
              #t)))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("dbus-glib" ,dbus-glib)
-       ("dbus" ,dbus)))
+     (list intltool pkg-config dbus-glib dbus))
     (inputs
-     `(("exo" ,exo)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)
-       ("pulseaudio" ,pulseaudio)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list exo libnotify libxfce4ui pulseaudio xfce4-panel))
     (home-page "https://git.xfce.org/panel-plugins/xfce4-pulseaudio-plugin/")
     (synopsis "PulseAudio panel plugin for Xfce")
     (description
@@ -586,8 +546,7 @@ keys for controlling the audio volume.")
         (base32 "0wpcc9i505mh6vphg27ph43dw4n3z59mwy39416yzmw325q04kl5"))))
     (build-system cmake-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
      `(("xfce4-panel" ,xfce4-panel)
        ("garcon" ,garcon)
@@ -630,16 +589,15 @@ applications, and includes a search bar to search for applications.")
                 "0rvrz464y7ji989zvi2v85kg47444nqsdq9rv6k8dkbkdwzy2jxv"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("garcon" ,garcon)
-       ("librsvg" ,librsvg)
-       ("libwnck" ,libwnck)
-       ("libx11" ,libx11)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxklavier" ,libxklavier)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list garcon
+           (librsvg-for-system)
+           libwnck
+           libx11
+           libxfce4ui
+           libxklavier
+           xfce4-panel))
     (home-page "https://git.xfce.org/panel-plugins/xfce4-xkb-plugin/")
     (synopsis "XKB layout switching panel plug-in for Xfce")
     (description
@@ -669,12 +627,9 @@ per window.")
                 "1v77h5634n49idci2jiw0k7jjk0vzpsvgyx2fkp18l39jayykqxz"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("garcon" ,garcon)
-       ("gtk+" ,gtk+)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list garcon gtk+ libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce application finder")
     (description
@@ -718,16 +673,15 @@ your system in categories, so you can quickly find and launch them.")
                (substitute* "scripts/xflock4"
                  (("xset") (string-append xset "/bin/xset")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("iceauth" ,iceauth)
-       ("upower" ,upower)
-       ("polkit" ,polkit)
-       ("libsm" ,libsm)
-       ("libwnck" ,libwnck)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xset" ,xset)))
+     (list iceauth
+           upower
+           polkit
+           libsm
+           libwnck
+           libxfce4ui
+           xset))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce session manager")
     (description
@@ -754,24 +708,23 @@ allows you to shut down the computer from Xfce.")
                            "--enable-sound-settings"
                            "--enable-xrandr")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("garcon" ,garcon)
-       ("libnotify" ,libnotify)
-       ("libxcursor" ,libxcursor)
-       ("libxi" ,libxi)
-       ("libxklavier" ,libxklavier)
-       ("libxrandr" ,libxrandr)
-       ("libxfce4ui" ,libxfce4ui)
-       ("upower" ,upower) ;; TODO needs upower-glib
-       ("python" ,python) ;; for xfce4-compose-mail
-       ("xf86-input-libinput" ,xf86-input-libinput)))
+     (list exo
+           garcon
+           libnotify
+           libxcursor
+           libxi
+           libxklavier
+           libxrandr
+           libxfce4ui
+           upower ;; TODO needs upower-glib
+           python ;; for xfce4-compose-mail
+           xf86-input-libinput))
     (propagated-inputs
      ;; Some operations, such as changing icon themes, require these schemas
      ;; to be in the search path.
-     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
+     (list gsettings-desktop-schemas))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce settings manager")
     (description
@@ -793,19 +746,18 @@ like appearance, display, keyboard and mouse settings.")
                 "14lwi4ax0wj77980kkfhdf18b97339b17y8qc8gl2365mgswh1gi"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gvfs" ,gvfs)
-       ("libexif" ,libexif)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)
-       ("pcre" ,pcre)
-       ("xfce4-panel" ,xfce4-panel)
-       ("startup-notification" ,startup-notification)))
+     (list exo
+           gobject-introspection
+           gvfs
+           libexif
+           libgudev
+           libnotify
+           libxfce4ui
+           pcre
+           xfce4-panel
+           startup-notification))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce file manager")
     (description
@@ -827,13 +779,9 @@ fast.")
         (base32 "0zaliahfz9ci2md7g6w9mb7z5azi5n56gihbnwyzvds2n8cygh6j"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("exo" ,exo)
-       ("libgudev" ,libgudev)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list exo libgudev libnotify libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Removable media manager for Thunar")
     (description
@@ -858,15 +806,14 @@ and import the new pictures from your camera.")
                 "133ip28v6j3x4l413d81ixsisf32sa0xzd54n0nn8g6p9fh4rcmm"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libdrm" ,libdrm)
-       ("libwnck" ,libwnck)
-       ("libxcomposite" ,libxcomposite)
-       ("libxdamage" ,libxdamage)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxrandr" ,libxrandr)))
+     (list libdrm
+           libwnck
+           libxcomposite
+           libxdamage
+           libxfce4ui
+           libxrandr))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce window manager")
     (description
@@ -916,19 +863,16 @@ on the screen.")
 
        #:disallowed-references (,inkscape ,imagemagick)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)
-
-       ;; For our own ‘prepare-background-image’ phase.
-       ("inkscape" ,inkscape)
-       ("imagemagick" ,imagemagick)))
+     (list pkg-config intltool
+           ;; For our own ‘prepare-background-image’ phase.
+           inkscape imagemagick))
     (inputs
-     `(("exo" ,exo)
-       ("garcon" ,garcon)
-       ("libnotify" ,libnotify)
-       ("libwnck" ,libwnck)
-       ("libxfce4ui" ,libxfce4ui)
-       ("thunar" ,thunar)))
+     (list exo
+           garcon
+           libnotify
+           libwnck
+           libxfce4ui
+           thunar))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce desktop manager")
     (description
@@ -951,11 +895,9 @@ devices and folders.")
                 "1irxyg5vp6vyd9vxdqav6jhchfkmhlqq511386h644p0k30kfcvs"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("vte" ,vte)))
+     (list libxfce4ui vte))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce terminal emulator")
     (description
@@ -1029,7 +971,7 @@ on your desktop.")
        ("xfce4-xkb-plugin"        ,xfce4-xkb-plugin)))
     (propagated-inputs
      ;; Default font that applications such as IceCat require.
-     `(("font-dejavu"             ,font-dejavu)))
+     (list font-dejavu))
     (native-search-paths
      ;; For finding panel plugins.
      (package-native-search-paths xfce4-panel))
@@ -1054,14 +996,9 @@ system resources, while still being visually appealing and user friendly.")
                 "1wrvqiifaxsgcn1kh4vm2hwxi9lgm6mw4zrfld2zl0mm05y5i77b"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
+     (list pkg-config intltool))
     (inputs
-     `(("libxrandr" ,libxrandr)
-       ("gtk+" ,gtk+)
-       ("upower" ,upower)
-       ("libnotify" ,libnotify)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list libxrandr gtk+ upower libnotify libxfce4ui))
     (home-page "https://www.xfce.org/")
     (synopsis "Xfce Power Manager")
     (description
@@ -1088,15 +1025,9 @@ inhibit interface which allows applications to prevent automatic sleep.")
                 "008h8mlq82nwxb7kc8m8d6a51rwl2i9fgv4v6k5w30va46l2s0s7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libexif" ,libexif)
-       ("libxfce4ui" ,libxfce4ui)
-       ("librsvg" ,librsvg)
-       ("tumbler" ,tumbler)))
+     (list gtk+ libexif libxfce4ui tumbler))
     (home-page "https://docs.xfce.org/apps/ristretto/start")
     (synopsis "Fast and lightweight picture-viewer")
     (description
@@ -1120,15 +1051,14 @@ the desktop wallpaper.")
                 "1ya81si7xhqqbbc9lfcjg2i1pi1qdfw1pnjry7kf95f1w50244nd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libwnck" ,libwnck)
-       ("libxmu" ,libxmu)
-       ("gtk+" ,gtk+)
-       ;; FIXME: Remove libxext and libxt when libxmu propagates them.
-       ("libxext" ,libxext)
-       ("libxt" ,libxt)))
+     (list libwnck
+           libxmu
+           gtk+
+           ;; FIXME: Remove libxext and libxt when libxmu propagates them.
+           libxext
+           libxt))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-taskmanager")
     (synopsis "Easy to use task manager")
     (description
@@ -1158,14 +1088,9 @@ memory usage graphically, and it can display processes as a tree.")
              #t)))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libical" ,libical)
-       ("libnotify" ,libnotify)
-       ("popt" ,popt)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libical libnotify popt xfce4-panel))
     (home-page "https://www.xfce.org/projects/")
     (synopsis "Simple calendar application with reminders")
     (description
@@ -1190,12 +1115,9 @@ several different time zones.")
                 "0ib5s7kjbr9sy8nh89nfcc4w6qplacnk4s92iycijy2wcv389aqr"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("libnotify" ,libnotify)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui libnotify xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-notifyd")
     (synopsis "Show notification bubbles on Xfce")
     (description
@@ -1221,19 +1143,18 @@ sending standard messages over D-Bus using the
                 "09q3s2rkpf0ljzq6bv4hl9byvaggjq7lchfw5zaircwv5q9nwhc3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("exo" ,exo)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gst-plugins-good" ,gst-plugins-good)
-       ("gst-plugins-ugly" ,gst-plugins-ugly)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)
-       ("libburn" ,libburn)
-       ("libisofs" ,libisofs)
-       ("libxfce4ui" ,libxfce4ui)))
+     (list exo
+           gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           gst-plugins-ugly
+           glib
+           gtk+
+           libburn
+           libisofs
+           libxfce4ui))
     (home-page "https://goodies.xfce.org/projects/applications/xfburn")
     (synopsis "GTK+ based CD, DVD and Blu-ray burning application")
     (description
@@ -1271,13 +1192,11 @@ of data to either CD/DVD/BD.")
                 `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
                                                               "/share"))))))))))
     (native-inputs
-     `(("intltool" ,intltool)
-       ("glib" ,glib "bin") ; for glib-compile-schemas.
-       ("pkg-config" ,pkg-config)))
+     (list intltool
+           `(,glib "bin") ; for glib-compile-schemas.
+           pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-3)
-       ("xfconf" ,xfconf)))
+     (list gtk+ gtksourceview-3 xfconf))
     (home-page "https://git.xfce.org/apps/mousepad/")
     (synopsis "Simple text editor for Xfce")
     (description
@@ -1300,14 +1219,10 @@ of data to either CD/DVD/BD.")
               "196swmc4amab8xcwv4q9p8b43fzzi9xagg20gnyjvf5x7yssxj1k"))))
    (build-system gnu-build-system)
    (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("intltool" ,intltool)
-      ("glib:bin" ,glib "bin")))        ; glib-genmarshal
+    (list pkg-config intltool
+          `(,glib "bin")))        ; glib-genmarshal
    (inputs
-    `(("exo" ,exo)
-      ("libsoup" ,libsoup)
-      ("libxfce4ui" ,libxfce4ui)
-      ("xfce4-panel" ,xfce4-panel)))
+    (list exo libsoup-minimal-2 libxfce4ui xfce4-panel))
    (home-page "https://goodies.xfce.org/projects/applications/xfce4-screenshooter")
    (synopsis "Xfce's application to take screenshots")
    (description
@@ -1378,14 +1293,9 @@ A plugin for the Xfce panel is also available.")
                 "1q639iwwj7q2plgz0wdgdbi5wkgaq177ca9rnnlrnbdmid5z5fqk"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("xfconf" ,xfconf)
-       ("libnotify" ,libnotify)
-       ("pulseaudio" ,pulseaudio)
-       ("keybinder-3.0" ,keybinder-3.0)
-       ("gtk+" ,gtk+)))
+     (list xfconf libnotify pulseaudio keybinder-3.0 gtk+))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-volumed")
     (synopsis "XFCE volume keys daemon")
     (description
@@ -1408,11 +1318,9 @@ A plugin for the Xfce panel is also available.")
                 "1c51qf93lr6kr2g4nil21rj1h3h5kp3k50n9hcxvcy9wz3bxpxn2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-cpugraph-plugin")
     (synopsis "Display CPU load as a graph in the Xfce panel")
@@ -1441,11 +1349,9 @@ core or CPU.")
                 "1iaszzkagl1mb0cdafrvlfjnjklhhs9y90517par34sjiqbq1dsd"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-eyes-plugin")
     (synopsis "Display a pair of eyes for the Xfce panel")
@@ -1468,12 +1374,9 @@ watch your every step.")
                 "09b9k0n5xm115k44x74w4ad0xqklilyfh0hglsps7zj97pd7a5a3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-equake-plugin")
     (synopsis "Earthquake monitor for the Xfce panel")
@@ -1497,11 +1400,9 @@ each time a new earthquake occurs.")
                 "0h15mxq5lawlxyr6h1vxc60rkf0rpmnv81l0f52mrswww9dz3xp9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-datetime-plugin")
     (synopsis "Display date and time inside the Xfce panel")
@@ -1524,11 +1425,9 @@ and a calendar appears when you left-click on it.")
                 "10fsb9pyr2cr9dj1k3n96dq6g02g61g5y4z4jzfvskpgqc1nl0g4"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-calculator-plugin")
     (synopsis "Calculator for the Xfce panel")
@@ -1552,11 +1451,9 @@ precedence rules, and the following functions and common constants.")
                 "17kzy156xqnbk4apskg005p7r09q7zb8crifad5mbawc7ysihll1"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-cpufreq-plugin")
     (synopsis "Xfce panel plugin for displaying CPU frequency")
@@ -1579,11 +1476,9 @@ governor and frequencies supported and used by your system.")
                 "0n8wsnjvzw98z8r0f0zr8n2gicjz6hhislp86xrjh0r4xcnymcbk"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-diskperf-plugin")
     (synopsis "Display disk performance in the Xfce panel")
@@ -1606,12 +1501,9 @@ performance (bytes transferred per second).")
                 "0a72kqsjjh45swimqlpyrahdnplp0383v0i4phr4n6g8c1ixyry7"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)
-       ("gtk+-2" ,gtk+-2)))
+     (list libxfce4ui xfce4-panel gtk+-2))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-embed-plugin")
     (synopsis "Embed arbitrary applications inside the Xfce panel")
@@ -1641,11 +1533,9 @@ this very convenient.")
                 "01a1an5z4kpgi68lk98q7wga7sx676fcbnrsd5cpq4d736ifdn37"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-fsguard-plugin")
     (synopsis "Xfce panel plugin to monitor free disk space")
@@ -1671,11 +1561,9 @@ be clicked to open the chosen mount point.")
                 "0d81npcqnmkw2qaqa8c6igh9j5r4ivgb15zcjwxjkyhrzz89y4dj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin")
     (synopsis "Generic program output monitor for the Xfce panel")
@@ -1702,13 +1590,9 @@ button and a personalized tooltip.")
                 "0bmykjhd3gs1737fl3zn5gg6f3vlncak2xqz89zv5018znz1xy90"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libxfce4ui" ,libxfce4ui)
-       ("exo" ,exo)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 libxfce4ui exo xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-mailwatch-plugin")
     (synopsis "Mail watch plugin for the Xfce panel")
@@ -1740,11 +1624,9 @@ multi-mailbox mail watcher.  Currently, the protocols supported are:
                 "0q3pysdp85b3c7g3b59y3c69g4nw6bvbf518lnri4lxrnsvpizpf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin")
     (synopsis "Music Player Daemon plugin for the Xfce panel")
     (description "This is a simple client plugin for Music Player Daemon.
@@ -1783,11 +1665,9 @@ right-click menu
                 "1hlfnlxwwx0hkm82mcz777f3i22x6bh6k3gzl0yjnm4yj9adjk2q"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-mount-plugin")
     (synopsis "Mount/unmount plugin for the Xfce panel")
@@ -1812,11 +1692,9 @@ mounted or when unmounting fails.")
                 "036pvhfv1iynvj75va0xl8hpvnfckabyqm9jv56pb40p2072cxkc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-netload-plugin")
     (synopsis "Netload plugin for the Xfce Panel")
@@ -1839,14 +1717,9 @@ interfaces of your choice in the panel.")
                 "1chac4ki70axgvkmhw94m0srsv0pwiwqrqbh8di0y9n90fgj24gj"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("pkg-config" ,pkg-config)))
+     (list intltool desktop-file-utils pkg-config))
     (inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("exo" ,exo)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+-2 exo libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-places-plugin")
     (synopsis "Gnome-like Places menu for the Xfce panel")
@@ -1881,11 +1754,9 @@ opens up a menu with the following:
                 "1lyd64qc9w6qnpqjb5xk0mjq4l7riv6z7l9aws28clalb8prw9ra"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-smartbookmark-plugin")
     (synopsis "Perform custom searches in your browser from the Xfce panel")
@@ -1909,13 +1780,10 @@ favorite search engine or bug tracker right from the Xfce panel.")
                 "1d2n56g12dhnjznrq7xvr6d3brpp0lmm080xmgjb7ybc1yygpxrc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("glib:bin" ,glib "bin")))
+     (list intltool pkg-config
+           `(,glib "bin")))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("libdbusmenu" ,libdbusmenu)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui libdbusmenu xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-statusnotifier-plugin")
     (synopsis "Xfce panel plugin for status notifier items")
@@ -1941,11 +1809,9 @@ freedesktop.org specification.")
                 "1q840298jzdqlhc9lw49q32xzdhnbzcgvv69qq5slkc704s5w6vw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-stopwatch-plugin")
     (synopsis "Stopwatch plugin for the Xfce panel")
@@ -1967,12 +1833,9 @@ freedesktop.org specification.")
                 "0lknh5l30qs5c69wwjcblbyhczvdbxs59fqkb8mpqbfm05w01lan"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libgtop" ,libgtop)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libgtop libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-systemload-plugin")
     (synopsis "System load display plugin for the Xfce panel")
@@ -1996,12 +1859,9 @@ swap space and the system uptime in the Xfce4 panel.")
                 "1m42kmi0x3xb0lzj2nd7q2r5y5r2viqcvxfpbg1aafzzjjkfpn1x"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+ libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-time-out-plugin")
     (synopsis "Xfce panel plugin that encourages periodical breaks")
@@ -2026,11 +1886,9 @@ time.")
                 "1qr4m3n2l3rvsizsr3h7fyfajszfalqm7rhvjx2yjj8r3f8x4ljb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-timer-plugin")
     (synopsis "Simple countdown and alarm plugin for the Xfce panel")
@@ -2054,11 +1912,9 @@ period.")
                 "09gqp0jb5ccjh7ny798n5cy9skdx3hpis4kgvjpl4vidnrg5xnpb"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-verve-plugin")
     (synopsis "Command line for the Xfce panel")
@@ -2088,11 +1944,9 @@ for the Xfce panel.  It supports several features, such as:
                 "07a8nmc60in48licjj0gmwm77vb8divh1lb7jnib35n5a1ka6ypa"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list libxfce4ui xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-wavelan-plugin")
     (synopsis "Show stats from WLAN interface in Xfce panel")
@@ -2115,14 +1969,9 @@ lan interface (signal state, signal quality, network name (SSID)).")
                 "1z2k24d599mxf5gqa35i3xmc3gk2yvqs80hxxpyw06yma6ljw973"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
+     (list intltool pkg-config))
     (inputs
-     `(("gtk+" ,gtk+)
-       ("libsoup" ,libsoup)
-       ("libxfce4ui" ,libxfce4ui)
-       ("libxml2" ,libxml2)
-       ("xfce4-panel" ,xfce4-panel)))
+     (list gtk+ libsoup-minimal-2 libxfce4ui libxml2 xfce4-panel))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin")
     (synopsis "Show information about local weather in the Xfce panel")
@@ -2145,9 +1994,9 @@ local weather in the panel, using forecast data provided by the
                 "1iwkqj96x2s7fk4srg1pymvsiwb2rn6vvhy6hrmnc3hl1vqw2d6k"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (home-page "https://docs.xfce.org/xfce/xfce4-dev-tools/")
     (synopsis "Xfce developer tools")
     (description
diff --git a/gnu/packages/xfig.scm b/gnu/packages/xfig.scm
index 4dbde6356c..9004c79e22 100644
--- a/gnu/packages/xfig.scm
+++ b/gnu/packages/xfig.scm
@@ -46,8 +46,7 @@
     (build-system gnu-build-system)
     (native-inputs
      ;; For tests.
-     `(("desktop-file-utils" ,desktop-file-utils)
-       ("ghostscript" ,ghostscript)))
+     (list desktop-file-utils ghostscript))
     (inputs
      `(("libxaw3d" ,libxaw3d)
        ("libjpeg" ,libjpeg-turbo)
@@ -89,8 +88,7 @@ selected in various ways.  For text, 35 fonts are available.")
          "0i3p7qmg2w8qrad3pn42b0miwarql7yy0gpd49b1bpal6bqsiicf"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("imake" ,imake)
-       ("makedepend" ,makedepend)))
+     (list imake makedepend))
     (inputs
      `(("xfig"    ,xfig)
        ("libjpeg" ,libjpeg-turbo)
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 0c9c799067..ccd99de7c6 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -51,14 +52,14 @@
 (define-public libogg
   (package
    (name "libogg")
-   (version "1.3.4")
+   (version "1.3.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://downloads.xiph.org/releases/ogg/libogg-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1zlk33vxvxr0l9lhkbhkdwvylw96d2n0fnd3d8dl031hph9bqqy1"))))
+              "01b7050bghdvbxvw0gzv588fn4a27zh42ljpwzm4vrf8dziipnf4"))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags '("--disable-static")))
@@ -85,7 +86,7 @@ periodic timestamps for seeking.")
              (base32
               "0jwmf87x5sdis64rbv0l87mdpah1rbilkkxszipbzg128f9w8g5k"))))
    (build-system gnu-build-system)
-   (propagated-inputs `(("libogg" ,libogg)))
+   (propagated-inputs (list libogg))
    (arguments `(#:configure-flags '("LDFLAGS=-lm"
                                     "--disable-static")
                 #:parallel-tests? #f))
@@ -115,9 +116,9 @@ polyphonic) audio and music at fixed and variable bitrates from 16 to
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (inputs `(("libvorbis" ,libvorbis)))
+    (inputs (list libvorbis))
     ;; The .pc files refer to libogg.
-    (propagated-inputs `(("libogg" ,libogg)))
+    (propagated-inputs (list libogg))
     (synopsis "Library implementing the Theora video format")
     (description
      "The libtheora library implements the ogg theora video format,
@@ -142,10 +143,9 @@ compressed video format.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libogg" ,libogg)
-       ("speexdsp" ,speexdsp)))
+     (list libogg speexdsp))
     (home-page "https://gnu.org/software/speex")
     (synopsis "Library for patent-free audio compression format")
     (description
@@ -203,13 +203,9 @@ work from the @code{speex} codec.")
     ;; "out" would include only the ALSA back-end, while "pulse" would
     ;; contain 'lib/ao/plugins-4/libpulse.*'.
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
+     (list alsa-lib pulseaudio))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
+     (list pkg-config autoconf automake libtool))
     (synopsis "Cross platform audio library")
     (description
      "Libao is a cross-platform audio library that allows programs to
@@ -254,7 +250,7 @@ It currently supports:
    (arguments
     `(#:parallel-tests? #f))
    ;; FIXME: configure also looks for xmms, input could be added once it exists
-   (propagated-inputs `(("libogg" ,libogg))) ; required by flac.pc
+   (propagated-inputs (list libogg)) ; required by flac.pc
    (synopsis "Free lossless audio codec")
    (description
 "FLAC stands for Free Lossless Audio Codec, an audio format that is lossless,
@@ -275,14 +271,9 @@ meaning that audio is compressed in FLAC without any loss in quality.")
              (base32
               "0s3vr2nxfxlf1k75iqpp4l78yf4gil3f0v778kvlngbchvaq23n4"))))
    (build-system gnu-build-system)
-   (native-inputs `(("doxygen" ,doxygen)
-                    ("bison" ,bison)
-                    ("pkg-config" ,pkg-config)))
+   (native-inputs (list doxygen bison pkg-config))
    ;; FIXME: Add optional input liboggz
-   (inputs `(("libogg" ,libogg)
-             ("libpng" ,libpng)
-             ("python" ,python-wrapper)
-             ("zlib" ,zlib)))
+   (inputs (list libogg libpng python-wrapper zlib))
    (synopsis "Karaoke and text codec for embedding in ogg")
    (description
     "Kate is an overlay codec, originally designed for karaoke and text,
@@ -311,14 +302,14 @@ Kate stream.")
              (base32
               "1c7h4ivgfdyygz2hyh6nfibxlkz8kdk868a576qkkjgj5gn78xyv"))))
    (build-system gnu-build-system)
-   (inputs `(("ao" ,ao)
-             ("curl" ,curl)
-             ("flac" ,flac)
-             ("libkate" ,libkate)
-             ("libogg" ,libogg)
-             ("libvorbis" ,libvorbis)
-             ("speex" ,speex)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (inputs (list ao
+                 curl
+                 flac
+                 libkate
+                 libogg
+                 libvorbis
+                 speex))
+   (native-inputs (list pkg-config))
    (synopsis "Ogg vorbis tools")
    (description
     "Ogg vorbis is a non-proprietary, patent-and-royalty-free,
@@ -380,11 +371,9 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
                                               (assoc-ref %build-inputs "opus")
                                               "/include/opus"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libopusenc" ,libopusenc)
-       ("opusfile" ,opusfile)
-       ("flac" ,flac)))
+     (list libopusenc opusfile flac))
     (synopsis
      "Command line utilities to encode, inspect, and decode .opus files")
     (description "Opus is a royalty-free, highly versatile audio codec.
@@ -419,11 +408,9 @@ decoding .opus files.")
                (("opus_multistream\\.h") "opus/opus_multistream.h")))))))
     ;; Required by opusfile.pc and opusurl.pc.
     (propagated-inputs
-     `(("libogg" ,libogg)
-       ("openssl" ,openssl)
-       ("opus" ,opus)))
+     (list libogg openssl opus))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (synopsis "Versatile audio codec")
     (description
      "The opusfile library provides seeking, decode, and playback of Opus
@@ -445,9 +432,9 @@ windows systems.")
                 "1ffb0vhlymlsq70pxsjj0ksz77yfm2x0a1x8q50kxmnkm1hxp642"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("opus" ,opus)))
+     (list opus))
     (synopsis "Library for encoding Opus audio files and streams ")
     (description "The libopusenc libraries provide a high-level API for
 encoding Opus files and streams.")
@@ -468,16 +455,16 @@ encoding Opus files and streams.")
                 "0i2d9rhav0x6js2qhjf5iy6j2a7f0d11ail0lfv40hb1kygrgda9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libxslt" ,libxslt)
-       ("libxml2" ,libxml2)
-       ("openssl" ,openssl)
-       ("curl" ,curl)
-       ("libogg" ,libogg)
-       ("libvorbis" ,libvorbis)
-       ("libtheora" ,libtheora)
-       ("speex" ,speex)))
+     (list libxslt
+           libxml2
+           openssl
+           curl
+           libogg
+           libvorbis
+           libtheora
+           speex))
     (synopsis "Streaming media server")
     (description "Icecast is a streaming media server which currently supports
 Ogg (Vorbis and Theora), Opus, WebM and MP3 audio streams.  It can be used to
@@ -500,12 +487,10 @@ things in between.")
                 "1438da40y73y9068saxrbmm27qq6xqmmzsziwgmr8fb7i9k6irfr"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
      ;; shout.pc refers to all these.
-     `(("libtheora" ,libtheora)
-       ("libvorbis" ,libvorbis)
-       ("speex"     ,speex)))
+     (list libtheora libvorbis speex))
     (home-page "https://icecast.org/")
     (synopsis "Audio streaming library for icecast encoders")
     (description
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index a5d124601c..bc76a95c59 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
@@ -103,12 +103,9 @@
     (arguments
      `(#:glib-or-gtk? #t))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("pkg-config" ,pkg-config)))
+     (list gobject-introspection gtk-doc/stable pkg-config))
     (inputs
-     `(("appstream-glib" ,appstream-glib)
-       ("glib" ,glib)))
+     (list appstream-glib glib))
     (synopsis "Library to help create and query binary XML blobs")
     (description "Libxmlb library takes XML source, and converts it to a
 structured binary representation with a deduplicated string table; where the
@@ -121,8 +118,7 @@ the entire document.")
 (define-public expat
   (package
     (name "expat")
-    (version "2.2.9")
-    (replacement expat-2.4.1)
+    (version "2.4.1")
     (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
               (origin
                 (method url-fetch)
@@ -134,10 +130,22 @@ the entire document.")
                             "/expat-" version ".tar.xz")))
                 (sha256
                  (base32
-                  "1960mmgbb4cm64n1p0nz3hrs1pw03hkrfcw8prmnn4622mdrd9hy")))))
+                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'move-static-library
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out    (assoc-ref outputs "out"))
+                            (static (assoc-ref outputs "static")))
+                        (mkdir-p (string-append static "/lib"))
+                        (link (string-append out "/lib/libexpat.a")
+                              (string-append static "/lib/libexpat.a"))
+                        (delete-file (string-append out "/lib/libexpat.a"))
+                        (substitute* (string-append out "/lib/libexpat.la")
+                          (("old_library=.*")
+                           "old_library=''"))))))))
+    (outputs '("out" "static"))
     (home-page "https://libexpat.github.io/")
     (synopsis "Stream-oriented XML parser library written in C")
     (description
@@ -146,24 +154,6 @@ stream-oriented parser in which an application registers handlers for
 things the parser might find in the XML document (like start tags).")
     (license license:expat)))
 
-;; Replacement package to fix CVE-2013-0340.
-(define expat-2.4.1
-  (package
-    (inherit expat)
-    (version "2.4.1")
-    (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
-              (origin
-                (method url-fetch)
-                (uri (list (string-append "mirror://sourceforge/expat/expat/"
-                                          version "/expat-" version ".tar.xz")
-                           (string-append
-                            "https://github.com/libexpat/libexpat/releases/download/R_"
-                            (string-map dot->underscore version)
-                            "/expat-" version ".tar.xz")))
-                (sha256
-                 (base32
-                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))))
-
 (define-public libebml
   (package
     (name "libebml")
@@ -191,40 +181,48 @@ hierarchical form with variable field lengths.")
 (define-public libxml2
   (package
     (name "libxml2")
-    (version "2.9.10")
+    (version "2.9.12")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "07xynh8hcxb2yb1fs051xrgszjvj37wnxvxgsj10rzmqzy9y3zma"))))
+               "14hxwzmf5xqppx77z7i0ni9lpzg1a84dqpf8j8l1fvy570g6imn8"))
+             (patches (search-patches "libxml2-parent-pointers.patch"
+                                      "libxml2-terminating-newline.patch"
+                                      "libxml2-xpath-recursion-limit.patch"))))
     (build-system gnu-build-system)
-    (outputs '("out" "static"))
+    (outputs '("out" "static" "doc"))
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-after 'install 'move-static-libs
+                  (add-after 'install 'use-other-outputs
                     (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((src (string-append (assoc-ref outputs "out") "/lib"))
+                      (let ((src (assoc-ref outputs "out"))
+                            (doc (string-append (assoc-ref outputs "doc") "/share"))
                             (dst (string-append (assoc-ref outputs "static")
                                                 "/lib")))
+                        (mkdir-p doc)
                         (mkdir-p dst)
+                        (for-each (lambda (dir)
+                                    (rename-file (string-append src "/share/" dir)
+                                                 (string-append doc "/" dir)))
+                                  '("doc" "gtk-doc"))
                         (for-each (lambda (ar)
                                     (rename-file ar (string-append dst "/"
                                                                    (basename ar))))
-                                  (find-files src "\\.a$"))
+                                  (find-files (string-append src "/lib") "\\.a$"))
 
                         ;; Remove reference to the static library from the .la
                         ;; file such that Libtool does the right thing when both
                         ;; the shared and static variants are available.
-                        (substitute* (string-append src "/libxml2.la")
-                          (("^old_library='libxml2.a'") "old_library=''"))
-                        #t))))))
+                        (substitute* (string-append src "/lib/libxml2.la")
+                          (("^old_library='libxml2.a'") "old_library=''"))))))))
     (home-page "http://www.xmlsoft.org/")
     (synopsis "C parser for XML")
-    (inputs `(("xz" ,xz)))
-    (propagated-inputs `(("zlib" ,zlib))) ; libxml2.la says '-lz'.
-    (native-inputs `(("perl" ,perl)))
+    (inputs (list xz))
+    (propagated-inputs (list zlib)) ; libxml2.la says '-lz'.
+    (native-inputs (list perl))
     ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml'
     ;; sub-directory of any given package.
     (native-search-paths (list (search-path-specification
@@ -283,9 +281,9 @@ to output XPath results with a null delimiter.")))
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (inputs
-     `(("minizip" ,minizip)))
+     (list minizip))
     (home-page "https://github.com/jmcnamara/libxlsxwriter")
     (synopsis "C library for creating Excel XLSX files")
     (description
@@ -299,8 +297,9 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
     (name "python-libxml2")
     (source (origin
               (inherit (package-source libxml2))
-              (patches (cons (search-patch "python-libxml2-utf8.patch")
-                             (origin-patches (package-source libxml2))))))
+              (patches
+                (append (search-patches "python-libxml2-utf8.patch")
+                        (origin-patches (package-source libxml2))))))
     (build-system python-build-system)
     (outputs '("out"))
     (arguments
@@ -321,8 +320,7 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
                  (format #f "ROOT = r'~a'" libxml2))
                 ;; For 'iconv.h'.
                 (("/opt/include")
-                 (string-append glibc "/include"))))
-            #t)))))
+                 (string-append glibc "/include")))))))))
     (inputs `(("libxml2" ,libxml2)))
     (synopsis "Python bindings for the libxml2 library")))
 
@@ -360,7 +358,7 @@ formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
               ("zlib" ,zlib)
               ("xz" ,xz)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (description
      "Libxslt is an XSLT C library developed for the GNOME project.  It is
 based on libxml for XML parsing, tree manipulation and XPath support.")
@@ -434,9 +432,9 @@ based on libxml for XML parsing, tree manipulation and XPath support.")
                  (format #t "test suite not run~%"))
              #t)))))
     (inputs
-     `(("opensp" ,opensp)))
+     (list opensp))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "http://openjade.sourceforge.net/")
     (synopsis "ISO/IEC 10179:1996 standard DSSSL language implementation")
     (description "OpenJade is an implementation of Document Style Semantics
@@ -462,10 +460,7 @@ MIF, SGML2SGML, and FOT.")
          "0jlsg64pmy6ka5q5gy851nnyfgjzvhyxc576bhns3vi2x5ng07mh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-graph" ,perl-graph)
-       ("perl-parse-yapp" ,perl-parse-yapp)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-writer" ,perl-xml-writer)))
+     (list perl-graph perl-parse-yapp perl-xml-parser perl-xml-writer))
     (home-page "https://metacpan.org/release/Graph-ReadWrite")
     (synopsis "Modules for reading and writing directed graphs")
     (description "This is a collection of perl classes for reading and writing
@@ -501,18 +496,16 @@ the @code{Graph} class and write it out in a specific file format.")
              #t)))))
     (native-inputs
      ;; TODO package: perl-datetime-format-atom
-     `(("perl-html-tagset" ,perl-html-tagset)
-       ("perl-module-build-tiny" ,perl-module-build-tiny)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-html-tagset perl-module-build-tiny perl-module-install))
     (propagated-inputs
-     `(("perl-class-data-inheritable" ,perl-class-data-inheritable)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-timezone" ,perl-datetime-timezone)
-       ("perl-digest-sha1" ,perl-digest-sha1)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-uri" ,perl-uri)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-xpath" ,perl-xml-xpath)))
+     (list perl-class-data-inheritable
+           perl-datetime
+           perl-datetime-timezone
+           perl-digest-sha1
+           perl-libwww
+           perl-uri
+           perl-xml-libxml
+           perl-xml-xpath))
     (home-page "https://metacpan.org/release/XML-Atom")
     (synopsis "Atom feed and API implementation")
     (description
@@ -533,10 +526,9 @@ the @code{Graph} class and write it out in a specific file format.")
                 "0l5xmw2hd95ypppz3lyvp4sn02ccsikzjwacli3ydxfdz1bbh4d7"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)))
+     (list perl-module-build))
     (propagated-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-xml-tokeparser" ,perl-xml-tokeparser)))
+     (list perl-test-differences perl-xml-tokeparser))
     (home-page "https://metacpan.org/release/XML-Descent")
     (synopsis "Recursive descent XML parsing")
     (description
@@ -565,7 +557,7 @@ parsers for it.  @code{XML::Descent} allows such parsers to be created.")
                  (let ((expat (assoc-ref %build-inputs "expat")))
                    (list (string-append "EXPATLIBPATH=" expat "/lib")
                          (string-append "EXPATINCPATH=" expat "/include")))))
-    (inputs `(("expat" ,expat)))
+    (inputs (list expat))
     (license license:perl-license)
     (synopsis "Perl bindings to the Expat XML parsing library")
     (description
@@ -591,7 +583,7 @@ given at XML::Parser creation time.")
                (base32
                 "1hnpwb3lh6cbgwvjjgqzcp6jm4mp612qn6ili38adc9nhkwv8fc5"))))
     (build-system perl-build-system)
-    (propagated-inputs `(("perl-xml-parser" ,perl-xml-parser)))
+    (propagated-inputs (list perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-TokeParser")
     (synopsis "Simplified interface to XML::Parser")
     (description
@@ -616,7 +608,7 @@ corresponding to an @code{XML::Parser} event.")
                "1jy9af0ljyzj7wakqli0437zb2vrbplqj4xhab7bfj2xgfdhawa5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (license license:perl-license)
     (synopsis "Perl modules for working with XML")
     (description
@@ -640,10 +632,9 @@ combination with @code{XML::Parser}, PerlSAX, @code{XML::DOM},
          "1ks69xymv6zkj7hvaymjvb78ch81abri7kg4zrwxhdfsqb8a9g7h"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax" ,perl-xml-sax)))
+     (list perl-xml-namespacesupport perl-xml-sax))
     (inputs
-     `(("libxml2" ,libxml2)))
+     (list libxml2))
     (home-page "https://metacpan.org/release/XML-LibXML")
     (synopsis "Perl interface to libxml2")
     (description "This module implements a Perl interface to the libxml2
@@ -665,8 +656,7 @@ XML parser and the high performance DOM implementation.")
                 "19k50d80i9dipsl6ln0f4awv9wmdg0xm3d16z8mngmvh9c8ci66d"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-slurp-tiny" ,perl-file-slurp-tiny)
-       ("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-file-slurp-tiny perl-xml-libxml))
     (home-page "https://metacpan.org/release/XML-LibXML-Simple")
     (synopsis "XML::LibXML based XML::Simple clone")
     (description
@@ -688,9 +678,9 @@ XML parser and the high performance DOM implementation.")
          "0wyl8klgr65j8y8fzgwz9jlvfjwvxazna8j3dg9gksd2v973fpia"))))
     (build-system perl-build-system)
     (inputs
-     `(("libxslt" ,libxslt)))
+     (list libxslt))
     (propagated-inputs
-     `(("perl-xml-libxml" ,perl-xml-libxml)))
+     (list perl-xml-libxml))
     (home-page "https://metacpan.org/release/XML-LibXSLT")
     (synopsis "Perl bindings to GNOME libxslt library")
     (description "This Perl module is an interface to the GNOME project's
@@ -731,19 +721,13 @@ checks.")
                 "0klb8ghd405pdkmn25lp3i4j2lfydz8w581sk51p3zy788s0c9yk"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-test-manifest" ,perl-test-manifest)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+     (list perl-module-build perl-test-manifest perl-test-differences
+           perl-test-pod perl-test-pod-coverage))
     ;; XXX: The test which uses this modules does not run, even when it is included
     ;; it is ignored. ("perl-test-trailingspace" ,perl-test-trailingspace)
     (inputs
-     `(("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-datetime perl-datetime-format-mail
+           perl-datetime-format-w3cdtf perl-html-parser perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-RSS")
     (synopsis "Creates and updates RSS files")
     (description
@@ -766,8 +750,7 @@ that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
         (base32 "0am13vnv8qsjafr5ljakwnkhlwpk15sga02z8mxsg9is0j3w61j5"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-xml-namespacesupport perl-xml-sax-base))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -823,8 +806,7 @@ callback.")
                "1y6vh328zrh085d40852v4ij2l4g0amxykswxd1nfhd2pspds7sk"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-sax" ,perl-xml-sax)))
+     (list perl-xml-parser perl-xml-sax))
     (license license:perl-license)
     (synopsis "Perl module for easy reading/writing of XML files")
     (description
@@ -847,7 +829,7 @@ parser modules).")
                "0m7wj00a2kik7wj0azhs1zagwazqh3hlz4255n75q21nc04r06fz"))))
     (build-system perl-build-system)
     (inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (license license:perl-license)
     (synopsis "Perl regular expressions for XML tokens")
     (description
@@ -870,10 +852,7 @@ EntityRef, CharRef, Reference, Name, NmToken, and AttValue.")
                "0phpkc4li43m2g44hdcvyxzy9pymqwlqhh5hwp2xc0cv8l5lp8lb"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libwww" ,perl-libwww)
-       ("perl-libxml" ,perl-libxml)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-regexp" ,perl-xml-regexp)))
+     (list perl-libwww perl-libxml perl-xml-parser perl-xml-regexp))
     (license license:perl-license)
     (synopsis
      "Perl module for building DOM Level 1 compliant document structures")
@@ -898,8 +877,7 @@ that conforms to the API of the Document Object Model.")
                 "1drzwziwi96rfkh48qpw4l225mcbk8ppl2157nj92cslcpwwdk75"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-test-deep" ,perl-test-deep)))
+     (list perl-log-report perl-test-deep))
     (home-page "https://metacpan.org/release/XML-Compile-Tester")
     (synopsis "XML::Compile related regression testing")
     (description
@@ -921,12 +899,12 @@ This module provide functions which simplify writing tests for
                 "0psr5pwsk2biz2bfkigmx04v2rfhs6ybwcfmcrrg7gvh9bpp222b"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-types-serialiser" ,perl-types-serialiser)))
+     (list perl-log-report
+           perl-xml-compile-tester
+           perl-xml-libxml
+           perl-scalar-list-utils
+           perl-test-deep
+           perl-types-serialiser))
     (home-page "https://metacpan.org/release/XML-Compile")
     (synopsis "Compilation-based XML processing")
     (description
@@ -948,10 +926,8 @@ a schema.")
                 "181qf1s7ymgi7saph3cf9p6dbxkxyh1ja23na4dchhi8v5mi66sr"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)
-       ("perl-xml-libxml-simple" ,perl-xml-libxml-simple)))
+     (list perl-log-report perl-xml-compile perl-xml-compile-tester
+           perl-xml-libxml-simple))
     (home-page "https://metacpan.org/release/XML-Compile-Cache")
     (synopsis "Cache compiled XML translators")
     (description
@@ -971,12 +947,12 @@ a schema.")
                 "0pkcph562l2ij7rlwlvm58v6y062qsbydfpaz2qnph2ixqy0xfd1"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-file-slurp-tiny" ,perl-file-slurp-tiny)
-       ("perl-libwww" ,perl-libwww)
-       ("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-cache" ,perl-xml-compile-cache)
-       ("perl-xml-compile-tester" ,perl-xml-compile-tester)))
+     (list perl-file-slurp-tiny
+           perl-libwww
+           perl-log-report
+           perl-xml-compile
+           perl-xml-compile-cache
+           perl-xml-compile-tester))
     (home-page "https://metacpan.org/release/XML-Compile-SOAP")
     (synopsis "Base-class for SOAP implementations")
     (description
@@ -999,10 +975,8 @@ used.")
                 "09ayl442hzvn97q4ghn5rz4r82dm9w3l69hixhb29h9xq9ysi7ba"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-log-report" ,perl-log-report)
-       ("perl-xml-compile" ,perl-xml-compile)
-       ("perl-xml-compile-cache" ,perl-xml-compile-cache)
-       ("perl-xml-compile-soap" ,perl-xml-compile-soap)))
+     (list perl-log-report perl-xml-compile perl-xml-compile-cache
+           perl-xml-compile-soap))
     (home-page "https://metacpan.org/release/XML-Compile-WSDL11")
     (synopsis "Create SOAP messages defined by WSDL 1.1")
     (description
@@ -1025,25 +999,23 @@ server, collect the answer, and finally decoding the XML to Perl.")
                 "04frqhikmyq0i9ldraisbvppyjhqg6gz83l2rqpmp4f2h9n9k2lw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-uri" ,perl-uri)
-       ("perl-class-data-inheritable" ,perl-class-data-inheritable)))
+     (list perl-module-build perl-uri perl-class-data-inheritable))
     (propagated-inputs
-     `(("perl-class-errorhandler" ,perl-class-errorhandler)
-       ("perl-datetime" ,perl-datetime)
-       ("perl-datetime-format-flexible" ,perl-datetime-format-flexible)
-       ("perl-datetime-format-iso8601" ,perl-datetime-format-iso8601)
-       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
-       ("perl-datetime-format-natural" ,perl-datetime-format-natural)
-       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
-       ("perl-feed-find" ,perl-feed-find)
-       ("perl-html-parser" ,perl-html-parser)
-       ("perl-libwww-perl" ,perl-libwww)
-       ("perl-module-pluggable" ,perl-module-pluggable)
-       ("perl-uri-fetch" ,perl-uri-fetch)
-       ("perl-xml-atom" ,perl-xml-atom)
-       ("perl-xml-libxml" ,perl-xml-libxml)
-       ("perl-xml-rss" ,perl-xml-rss)))
+     (list perl-class-errorhandler
+           perl-datetime
+           perl-datetime-format-flexible
+           perl-datetime-format-iso8601
+           perl-datetime-format-mail
+           perl-datetime-format-natural
+           perl-datetime-format-w3cdtf
+           perl-feed-find
+           perl-html-parser
+           perl-libwww
+           perl-module-pluggable
+           perl-uri-fetch
+           perl-xml-atom
+           perl-xml-libxml
+           perl-xml-rss))
     (home-page "https://metacpan.org/release/XML-Feed")
     (synopsis "XML Syndication Feed Support")
     (description "@code{XML::Feed} is a syndication feed parser for both RSS and
@@ -1065,9 +1037,9 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom")
                 "03yxj7w5a43ibbpiqsvb3lswj2b71dydsx4rs2fw0p8n0l3i3j8w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-path-tiny" ,perl-path-tiny)))
+     (list perl-path-tiny))
     (propagated-inputs
-     `(("perl-xml-parser" ,perl-xml-parser)))
+     (list perl-xml-parser))
     (home-page "https://metacpan.org/release/XML-XPath")
     (synopsis "Parse and evaluate XPath statements")
     (description
@@ -1092,7 +1064,7 @@ the form of functions.")
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
        #:tests? #f))                    ; no tests
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://pugixml.org")
     (synopsis "Light-weight, simple and fast XML parser for C++ with XPath support")
     (description
@@ -1152,11 +1124,11 @@ code for classes that correspond to data structures defined by XMLSchema.")
                                                          "util-linux")
                                               "/bin/getopt"))))
     (native-inputs
-     `(("util-linux" ,util-linux)))
+     (list util-linux))
     (inputs
-     `(("util-linux" ,util-linux)                 ; for 'getopt'
-       ("libxml2" ,libxml2)                       ; for 'xmllint'
-       ("libxslt" ,libxslt)))                     ; for 'xsltproc'
+     (list util-linux ; for 'getopt'
+           libxml2 ; for 'xmllint'
+           libxslt))                     ; for 'xsltproc'
     (home-page "http://cyberelk.net/tim/software/xmlto/")
     (synopsis "Front-end to an XSL toolchain")
     (description
@@ -1178,14 +1150,11 @@ XSL-T processor.  It also performs any necessary post-processing.")
                 "0hy0nwz57n9r5wwab9xa66gzwlwvzs54nhlfn3jh8q13acl710z3"))))
     (build-system gnu-build-system)
     (propagated-inputs                  ; according to xmlsec1.pc
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list libxml2 libxslt))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libgcrypt" ,libgcrypt)
-       ("libltdl" ,libltdl)))
+     (list gnutls libgcrypt libltdl))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.aleksey.com/xmlsec/")
     (synopsis "XML Security Library")
     (description
@@ -1368,8 +1337,7 @@ C++ programming language.")
              (symlink "xml" (string-append bin "/xmlstarlet"))
              #t))))))
    (inputs
-    `(("libxslt" ,libxslt)
-      ("libxml2" ,libxml2)))
+    (list libxslt libxml2))
    (home-page "http://xmlstar.sourceforge.net/")
    (synopsis "Command line XML toolkit")
    (description "XMLStarlet is a set of command line utilities which can be
@@ -1526,7 +1494,7 @@ spreadsheet.")
            '()
            '(#:configure-flags '("--disable-sse2")))))
     (native-inputs
-     `(("perl" ,perl)))
+     (list perl))
     (home-page "https://xerces.apache.org/xerces-c/")
     (synopsis "Validating XML parser library for C++")
     (description "Xerces-C++ is a validating XML parser written in a portable
@@ -1550,10 +1518,7 @@ SAX2 APIs.")
        (sha256
         (base32 "0jr6ggzhd8aakdvppcl8scy9j9jafg82zbzr4ih996sz8lrj90fn"))))
     (native-inputs
-     `(("expat" ,expat)
-       ("make" ,gnu-make)
-       ("minizip" ,minizip)
-       ("which" ,which)))
+     (list expat gnu-make minizip which))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1592,7 +1557,7 @@ Excel(TM) since version 2007.")
        (modify-phases %standard-phases
          (replace 'install (install-jars "jar")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://simple.sourceforge.net/")
     (synopsis "XML serialization framework for Java")
     (description "Simple is a high performance XML serialization and
@@ -1663,7 +1628,7 @@ by @code{Tree::XPathEngine}.")
          "0p5785c1dsk6kdp505vapb5h54k8krrz8699hpgm9igf7dni5llg"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-xml-sax-base))
     (home-page "https://metacpan.org/release/XML-Filter-BufferText")
     (synopsis "Filter to put all characters() in one event")
     (description "This is a very simple filter.  One common cause of
@@ -1687,10 +1652,8 @@ characters into a single event.")
                 "1w1cd1ybxdvhmnxdlkywi3x5ka3g4md42kyynksjc09vyizd0q9x"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libxml" ,perl-libxml)
-       ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext)
-       ("perl-xml-namespacesupport" ,perl-xml-namespacesupport)
-       ("perl-xml-sax-base" ,perl-xml-sax-base)))
+     (list perl-libxml perl-xml-filter-buffertext
+           perl-xml-namespacesupport perl-xml-sax-base))
     (home-page "https://metacpan.org/release/XML-SAX-Writer")
     (synopsis "SAX2 XML Writer")
     (description
@@ -1712,7 +1675,7 @@ characters into a single event.")
          "11d45a1sz862va9rry3p2m77pwvq3kpsvgwhc5ramh9mbszbnk77"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-libxml" ,perl-libxml)))
+     (list perl-libxml))
     (home-page "https://metacpan.org/release/XML-Handler-YAWriter")
     (synopsis "Yet another Perl SAX XML Writer")
     (description "YAWriter implements Yet Another @code{XML::Handler::Writer}.
@@ -1732,22 +1695,22 @@ It provides a flexible escaping technique and pretty printing.")
                 "1bc0hrz4jp6199hi29sdxmb9gyy45whla9hd19yqfasgq8k5ixzy"))))
     (build-system perl-build-system)
     (inputs
-     `(("expat" ,expat)))
+     (list expat))
     (propagated-inputs
-     `(("perl-html-tidy" ,perl-html-tidy)
-       ("perl-html-tree" ,perl-html-tree)
-       ("perl-io-captureoutput" ,perl-io-captureoutput)
-       ("perl-io-string" ,perl-io-string)
-       ("perl-io-stringy" ,perl-io-stringy)
-       ("perl-libxml" ,perl-libxml)
-       ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext)
-       ("perl-xml-handler-yawriter" ,perl-xml-handler-yawriter)
-       ("perl-xml-parser" ,perl-xml-parser)
-       ("perl-xml-sax-writer" ,perl-xml-sax-writer)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-xml-xpathengine" ,perl-xml-xpathengine)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-tree-xpathengine" ,perl-tree-xpathengine)))
+     (list perl-html-tidy
+           perl-html-tree
+           perl-io-captureoutput
+           perl-io-string
+           perl-io-stringy
+           perl-libxml
+           perl-xml-filter-buffertext
+           perl-xml-handler-yawriter
+           perl-xml-parser
+           perl-xml-sax-writer
+           perl-xml-simple
+           perl-xml-xpathengine
+           perl-test-pod
+           perl-tree-xpathengine))
     (home-page "https://metacpan.org/release/XML-Twig")
     (synopsis "Perl module for processing huge XML documents in tree mode")
     (description "@code{XML::Twig} is an XML transformation module.  Its
@@ -1817,7 +1780,7 @@ the Xerces-J XML parser and Xalan-J XSLT processor and specifies these APIs:
      `(#:jar-name (string-append "xml-resolver.jar")
        #:tests? #f)); no tests
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://xerces.apache.org/xml-commons/")
     (synopsis "Catalog-based entity and URI resolution")
     (description "The resolver class implements the full semantics of OASIS Technical
@@ -1877,9 +1840,7 @@ with XPath too.")
     (inherit java-jaxen-bootstrap)
     (name "java-jaxen")
     (inputs
-     `(("java-jdom" ,java-jdom)
-       ("java-xom" ,java-xom)
-       ("java-dom4j" ,java-dom4j)))))
+     (list java-jdom java-xom java-dom4j))))
 
 (define-public java-xom
   (package
@@ -1917,11 +1878,8 @@ with XPath too.")
              (delete-file "src/nu/xom/tools/XHTMLJavaDoc.java")
              #t)))))
     (inputs
-     `(("java-jdom" ,java-jdom)
-       ("java-junit" ,java-junit)
-       ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-jaxen-bootstrap" ,java-jaxen-bootstrap)
-       ("java-xerces" ,java-xerces)))
+     (list java-jdom java-junit java-classpathx-servletapi
+           java-jaxen-bootstrap java-xerces))
     (home-page "https://xom.nu/")
     (synopsis "XML Object Model")
     (description "XOM is a new XML Object Model for processing XML with Java 
@@ -1947,7 +1905,7 @@ that strives for correctness and simplicity.")
        #:jar-name "xsdlib.jar"
        #:jdk ,icedtea-8))
     (inputs
-     `(("java-xerces" ,java-xerces)))
+     (list java-xerces))
     (home-page (string-append "https://web.archive.org/web/20161127144537/"
                               "https://msv.java.net//"))
     (synopsis "Sun Multi-Schema Validator")
@@ -2139,8 +2097,7 @@ public boolean removeAttributeByName(String name, String name2) {\n
        ("java-xpp3" ,java-xpp3)
        ("java-xsdlib" ,java-xsdlib)))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-xerces" ,java-xerces)))
+     (list java-testng java-xerces))
     (home-page "https://dom4j.github.io/")
     (synopsis "Flexible XML framework for Java")
     (description "Dom4j is a flexible XML framework for Java.  DOM4J works
@@ -2181,9 +2138,9 @@ low memory footprint.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-xpp3" ,java-xpp3)))
+     (list java-xpp3))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "http://kxml.org")
     (synopsis "XML pull parser")
     (description "kXML is a small XML pull parser, specially designed for
@@ -2246,7 +2203,7 @@ and from a Java application.  It provides a standard pull parser interface.")
                             "**/BadgerFishDOMTest.java"
                             "**/MappedDOMTest.java")))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus/jettison")
     (synopsis "StAX implementation for JSON")
     (description "Jettison is a Java library for converting XML to JSON and
@@ -2350,9 +2307,9 @@ and back again.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-xmlpull-api-v1" ,java-xmlpull-api-v1)))
+     (list java-xmlpull-api-v1))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/x-stream/mxparser")
     (synopsis "Streaming pull XML parser forked from @code{java-xpp3}")
     (description "Xml Pull Parser (in short XPP) is a streaming pull XML
@@ -2380,10 +2337,10 @@ changes of the Plexus fork. It is an implementation of the XMLPULL V1 API
                "18zwbj6i2hpcn5riiyp8i6rml0sfv60dd7phw1x8g4r4lj2bbxf9"))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)))
+     (list curl))
     (native-inputs
-     `(;; For tools, if ever needed.
-       ("perl" ,perl)))
+     (list ;; For tools, if ever needed.
+           perl))
     (arguments
      `(#:make-flags ; Add $libdir to the RUNPATH of all the executables.
        (list (string-append "LDFLAGS_PERSONAL=-Wl,-rpath=" %output "/lib"))
@@ -2495,15 +2452,18 @@ The central program included in this package is @code{onsgmls}, which replaces
 (define-public python-elementpath
   (package
     (name "python-elementpath")
-    (version "1.4.0")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "elementpath" version))
        (sha256
         (base32
-         "15h7d41v48q31hzjay7qzixdv531hnga3h35hksk7x52pgqcrkz7"))))
+         "1kxx573ywqfh6j6aih2i6hhsya6kz79qq4bgz6yskwk6b18jyr8z"))))
     (build-system python-build-system)
+    ;; The test suite is not run, to avoid a dependency cycle with
+    ;; python-xmlschema.
+    (arguments `(#:tests? #f))
     (home-page
      "https://github.com/sissaschool/elementpath")
     (synopsis
@@ -2520,13 +2480,20 @@ because lxml.etree already has its own implementation of XPath 1.0.")
 (define-public python-lxml
   (package
     (name "python-lxml")
-    (version "4.4.2")
+    (version "4.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "lxml" version))
        (sha256
-        (base32 "01nvb5j8vs9nk4z5s3250b1m22b4d08kffa36if3g1mdygdrvxpg"))))
+        (base32 "0s14r1w2x9sdlcsw8mxiqgw4rz5zs5lpqpxrfyn4a1mkndqqbdrr"))
+       ;; Adapt a test to libxml2 2.9.12, taken from this commit:
+       ;; https://github.com/lxml/lxml/commit/852ed1092bd80b6b9a51db24371047e
+       (modules '((guix build utils)))
+       (snippet
+        '(substitute* "src/lxml/tests/test_etree.py"
+             (("self\\.assertEqual\\(\\{'hha': None\\}, el\\.nsmap\\)")
+              "self.assertEqual({}, el.nsmap)")))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2534,8 +2501,7 @@ because lxml.etree already has its own implementation of XPath 1.0.")
                     (lambda _
                       (invoke "make" "test"))))))
     (inputs
-     `(("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)))
+     (list libxml2 libxslt))
     (home-page "https://lxml.de/")
     (synopsis "Python XML processing library")
     (description
@@ -2549,7 +2515,7 @@ libxml2 and libxslt.")
 (define-public python-xmlschema
   (package
     (name "python-xmlschema")
-    (version "1.1.2")
+    (version "1.2.5")
     (source (origin
               ;; Unit tests are not distributed with the PyPI archive.
               (method git-fetch)
@@ -2559,25 +2525,24 @@ libxml2 and libxslt.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03bz5mp45y4shmlc1gxq1h69vjx60z1acg9cy4kq7fczgx8qg9jw"))))
+                "0rsa75x86gdjalvy4riq7613szb616hff80crx006chyppzdkxmq"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
-                 (begin
-                   (setenv "PYTHONPATH"
-                           (string-append "./build/lib:"
-                                          (getenv "PYTHONPATH")))
-                   (invoke "python" "-m" "unittest" "-v"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                 ;; Disable test_export_remote__issue_187, which is known to
+                 ;; fail (see:
+                 ;; https://github.com/sissaschool/xmlschema/issues/206).
+                 (invoke "python" "-m" "unittest" "-v"
+                         "-k" "not test_export_remote__issue_187")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
-     `(("python-lxml" ,python-lxml)))   ;for tests
+     (list python-lxml))   ;for tests
     (propagated-inputs
-     `(("python-elementpath" ,python-elementpath)))
+     (list python-elementpath))
     (home-page "https://github.com/sissaschool/xmlschema")
     (synopsis "XML Schema validator and data conversion library")
     (description
@@ -2601,8 +2566,7 @@ XML data to JSON and other formats.")
          "08cadlb9vsb4pmzc99lz3a2lx6qcfazyvgk10pcqijvyxlwcdn2h"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-coverage" ,python-coverage)
-       ("python-nose" ,python-nose)))
+     (list python-coverage python-nose))
     (home-page "https://github.com/martinblech/xmltodict")
     (synopsis "Work with XML like you are working with JSON")
     (description "This package provides a Python library to convert XML to
diff --git a/gnu/packages/xnee.scm b/gnu/packages/xnee.scm
index 5cd20cbef1..26c33c754f 100644
--- a/gnu/packages/xnee.scm
+++ b/gnu/packages/xnee.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -38,15 +38,17 @@
               (base32
                "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("CFLAGS=-O2 -g -fcommon")))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)
-       ("xorgproto" ,xorgproto)))
+     (list gtk+-2
+           libx11
+           libxext
+           libxi
+           libxtst
+           xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.gnu.org/software/xnee/")
     (synopsis "Record, replay and distribute user actions under X11")
     (description
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index a63e3392f8..85a93dee30 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -2,11 +2,11 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2017, 2018, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Cyrill Schenkel <cyrill.schenkel@gmail.com>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
@@ -24,11 +24,12 @@
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;;
@@ -52,7 +53,9 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
@@ -66,6 +69,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -84,6 +88,7 @@
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
@@ -101,6 +106,16 @@
 
 
 
+;; When cross-compiling certain packages, "--disable-malloc0returnsnull"
+;; needs to be passed.  Otherwise, the configure script will try to run a
+;; binary for the host on the build machine.
+(define (malloc0-flags)
+  (if (%current-target-system)
+      ;; At least on glibc-based systems, malloc(0) evaluates to a non-NULL
+      ;; pointer (except in out-of-memory situations).  On other systems,
+      ;; --enable-malloc0returnsnull might be required instead.
+      '("--disable-malloc0returnsnull")
+      '()))
 
 ;; packages without propagated input
 ;; (rationale for this separation: The packages in PROPAGATED_INPUTS need to
@@ -137,7 +152,7 @@
        (base32 "00m7l90ws72k1qm101sd2rx92ckd50cszyng5d4dd77jncbf9lmq"))))
     (build-system gnu-build-system)
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (inputs
       `(("xorg-cf-files" ,xorg-cf-files)
         ("xorgproto" ,xorgproto)))
@@ -188,9 +203,9 @@ autotools system.")
                 "0pdngiy8zdhsiqx2am75yfcl36l7kd7d7nl0rss8shcdvsqgmx29"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (home-page "https://www.x.org/")
     (synopsis "Symlink directory into tree")
     (description "Create a shadow directory of symbolic links to another
@@ -213,9 +228,9 @@ directory tree.")
             "18hiscgljrz10zjcws25bis32nyrg3hzgmiq6scrh7izqmgz0kab"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxfont" ,libxfont2)))
+      (list libxfont2))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Convert X font from BDF to PCF")
     (description
@@ -227,18 +242,18 @@ which can be read by any architecture.")
 (define-public xorgproto
   (package
     (name "xorgproto")
-    (version "2019.2")
+    (version "2021.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://xorg/individual/proto/"
+              (uri (string-append "ftp://ftp.freedesktop.org/pub/xorg//individual/proto/"
                                   "xorgproto-" version ".tar.bz2"))
               (sha256
                (base32
-                "13kvir8dz9dvzhvyfndpff1z7k8h14s7kkl7mbl427andhax1v26"))))
+                "05d0kib351qmnlfimaznaw0220fr0ym7fx2gn9h2jqxxilxncbxa"))))
     (build-system gnu-build-system)
     (propagated-inputs
      ;; To get util-macros in (almost?) all package inputs.
-     `(("util-macros" ,util-macros)))
+     (list util-macros))
     (home-page "https://cgit.freedesktop.org/xorg/proto/xorgproto")
     (synopsis "Xorg protocol headers")
     (description
@@ -261,7 +276,7 @@ the core protocol and (many) extensions for the X Window System.")
           (base32
             "07hvfm84scz8zjw14riiln2v4w03jlhp756ypwhq27g48jmic8a6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg BigReqsProto protocol headers")
     (description
@@ -286,9 +301,9 @@ requests that exceed 262140 bytes in length.")
             "1z0crmf669hirw4s7972mmp8xig80kfndja9h559haqbpvq5k4q4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg CompositeProto protocol headers")
     (description
@@ -312,7 +327,7 @@ the damage protocol.")
           (base32
             "0nzwr5pv9hg7c21n995pdiv0zqhs91yz3r8rn3aska4ykcp12z2w"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DamageProto protocol headers")
     (description
@@ -336,7 +351,7 @@ the damage protocol.")
           (base32
             "02b5x9dkgajizm8dqyx2w6hmqx3v25l67mgf35nj6sz0lgk52877"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DMXProto protocol headers")
     (description
@@ -418,11 +433,9 @@ provided.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)
-       ("libxmu" ,libxmu)
-       ("libxt" ,libxt)))
+     (list libxaw libxmu libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Tool to browse and edit X Toolkit resource specifications")
     (description
@@ -451,9 +464,9 @@ Resources file.")
           (base32 "0caafx0yqqnqyvbalxhh3mb0r9v36xmcy5zjhygb2i508dhy35mx"))))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontscale" ,mkfontscale)))
+      (list mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg font encoding files")
     (description "Xorg font encoding files.")
@@ -488,11 +501,9 @@ Resources file.")
              "0m60f5bd0caambrk8ksknb5dks7wzsg7g7xaf0j21jxmx8rq9h5j"))
     (build-system gnu-build-system)
     (inputs
-      `(("bdftopcf" ,bdftopcf)
-        ("font-util" ,font-util)
-        ("mkfontdir" ,mkfontdir)))
+      (list bdftopcf font-util mkfontdir))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         ;; install fonts into subdirectory of package output instead of
@@ -513,11 +524,9 @@ Resources file.")
              "02advcv9lyxpvrjv8bjh1b797lzg6jvhipclz49z8r8y98g4l0n6"))
     (build-system gnu-build-system)
     (inputs
-      `(("bdftopcf" ,bdftopcf)
-        ("font-util" ,font-util)
-        ("mkfontdir" ,mkfontdir)))
+      (list bdftopcf font-util mkfontdir))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -541,7 +550,7 @@ Resources file.")
              name version
              "0xjjjindczv3g7m1597l0x19zz75xy70wh5garghz61fpzl1l4gk"))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after
@@ -576,10 +585,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1x246dfnxnmflzf0qzy62k8jdpkb6jkgspcjgbk8jcq9lw99npah"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg arabic-misc font")
     (description "Xorg arabic-misc font.")
@@ -606,10 +614,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0ai1v4n61k8j9x2a1knvfbl2xjxk3xxmqaq3p9vpqrspc69k31kf"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg cronyx-cyrillic font")
     (description "Xorg cronyx-cyrillic font.")
@@ -632,10 +639,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0yzza0l4zwyy7accr1s8ab7fjqkpwggqydbm2vc19scdby5xz7g1"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg dec-misc font")
     (description "Xorg dec-misc font.")
@@ -654,10 +660,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0rx8q02rkx673a7skkpnvfkg28i8gmqzgf25s9yi0lar915sn92q"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg isas-misc font")
     (description "Xorg isas-misc font.")
@@ -677,10 +682,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1dldxlh54zq1yzfnrh83j5vm0k4ijprrs5yl18gm3n9j1z0q2cws"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg micro-misc font")
     (description "Xorg micro-misc font.")
@@ -696,10 +700,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0q2ybxs8wvylvw95j6x9i800rismsmx4b587alwbfqiw6biy63z4"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg misc-cyrillic fonts")
     (description "Xorg misc-cyrillic fonts.")
@@ -715,10 +718,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1q2azkdwc4x3kh53xclwpf9q654k70lhiyns1cjq594wvxnhz339"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("mkfontscale" ,mkfontscale)))
+      (list mkfontdir mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg misc-ethiopic fonts")
     (description "Xorg misc-ethiopic fonts.")
@@ -738,11 +740,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "150pq6n8n984fah34n3k133kggn9v0c5k07igv29sxp1wi07krxq"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("font-util" ,font-util)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir font-util bdftopcf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -761,10 +761,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "13qghgr1zzpv64m0p42195k1kc77pksiv059fdvijz1n6kdplpxx"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg mutt-misc fonts")
     (description "Xorg mutt-misc fonts.")
@@ -780,11 +779,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0nkym3n48b4v36y4s927bbkjnsmicajarnf6vlp7wxp0as304i74"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("font-util" ,font-util)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir font-util bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
       `(#:configure-flags (list
         (string-append "--with-fontrootdir=" %output "/share/fonts/X11"))))
@@ -803,10 +800,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0yayf1qlv7irf58nngddz2f1q04qkpr5jwp4aja2j5gyvzl32hl2"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg screen-cyrillic fonts")
     (description "Xorg screen-cyrillic fonts.")
@@ -822,10 +818,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1xfgcx4gsgik5mkgkca31fj3w72jw9iw76qyrajrsz1lp8ka6hr0"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg sony-misc fonts")
     (description "Xorg sony-misc fonts.")
@@ -841,10 +836,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "1q6jcqrffg9q5f5raivzwx9ffvf7r11g6g0b125na1bhpz5ly7s8"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg sun-misc fonts")
     (description "Xorg sun-misc fonts.")
@@ -865,7 +859,7 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
         (sha256
           (base32 "10i2a8b3d1h3w7klsqf31iz7zbd6l8wglil54fkhdb1385281n1s"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg font utilities")
     (description
@@ -882,10 +876,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "181n1bgq8vxfxqicmy1jpm1hnr6gwn1kdhl6hr4frjigs1ikpldb"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("bdftopcf" ,bdftopcf)))
+      (list mkfontdir bdftopcf))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg winitzki-cyrillic font")
     (description "Xorg winitzki-cyrillic font.")
@@ -901,10 +894,9 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
              "0jp3zc0qfdaqfkgzrb44vi9vi0a8ygb35wp082yz7rvvxhmg9sya"))
     (build-system gnu-build-system)
     (inputs
-      `(("mkfontdir" ,mkfontdir)
-        ("mkfontscale" ,mkfontscale)))
+      (list mkfontdir mkfontscale))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg xfree86-type1 font")
     (description "Xorg xfree86-type1 font.")
@@ -926,7 +918,7 @@ For example: @code{6x10}, @code{9x15bold}, etc.")
           (base32
             "1f2sdsd74y34nnaf4m1zlcbhyv8xb6irnisc99f84c4ivnq4d415"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FontsProto protocol headers")
     (description
@@ -950,7 +942,7 @@ the fonts protocol.")
           (base32
             "0h5ykmcddwid5qj6sbrszgkcypwn3mslvswxpgy2n2iixnyr9amd"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg GLProto protocol headers")
     (description
@@ -975,9 +967,9 @@ rendering commands to the X server.")
             "1ik0mdidmyvy48hn8p2hwvf3535rf3m96hhf0mvcqrbj44x23vp6"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libice" ,libice)))
+      (list libice))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "ICE authority file utility")
     (description
@@ -1003,7 +995,7 @@ authentication records.")
           (base32
             "07gk7v006zqn3dcfh16l06gnccy7xnqywf3vl9c209ikazsnlfl9"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg InputProto protocol headers")
     (description
@@ -1027,7 +1019,7 @@ devices management such as graphic tablets.")
           (base32
             "0mxqj1pzhjpz9495vrjnpi10kv2n1s4vs7di0sh3yvipfq5j30pq"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg KBProto protocol headers")
     (description
@@ -1058,11 +1050,9 @@ of new capabilities and controls for text keyboards.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg DMX library")
     (description
@@ -1085,8 +1075,8 @@ of new capabilities and controls for text keyboards.")
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("xorgproto" ,xorgproto)))
+    (native-inputs (list pkg-config))
+    (inputs (list xorgproto))
     (home-page "https://www.x.org/")
     (synopsis "Xorg shared memory fences library")
     (description
@@ -1115,10 +1105,9 @@ synchronization between the X server and direct-rendering clients.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("zlib" ,zlib)
-        ("xorgproto" ,xorgproto)))
+      (list zlib xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/lib/libfontenc")
     (synopsis "Xorg font encoding library")
     (description "Xorg font encoding library.")
@@ -1140,10 +1129,9 @@ synchronization between the X server and direct-rendering clients.")
           (base32 "03xxyvpfa3rhqcld4p2chkil482jn9cp80hj17jdybcv2hkkgqf8"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xtrans" ,xtrans)
-        ("xorgproto" ,xorgproto)))
+      (list xtrans xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Font Service client library")
     (description
@@ -1189,10 +1177,9 @@ themselves.")
                   (string-append "-L" zlib "/lib -lz")))
                #t))))))
     (inputs
-     `(("zlib" ,zlib)
-       ("pciutils" ,pciutils)))                   ;for 'pci.ids.gz'
+     (list zlib pciutils))                   ;for 'pci.ids.gz'
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg PCI access library")
     (description "Xorg Generic PCI access library.")
@@ -1214,7 +1201,7 @@ themselves.")
           (base32
             "0cz7s9w8lqgzinicd4g36rjg08zhsbyngh0w68c3np8nlc8mkl74"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Library with pthread stubs")
     (description
@@ -1244,12 +1231,12 @@ hit when running single-threaded.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libice" ,libice))) ; SMlib.h includes ICElib.h
+      (list libice)) ; SMlib.h includes ICElib.h
     (inputs
       `(("xtrans" ,xtrans)
         ("libuuid" ,util-linux "lib")))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Session Management library")
     (description "Xorg Session Management library.")
@@ -1272,11 +1259,9 @@ hit when running single-threaded.")
             "1p0flwb67xawyv6yhri9w17m1i4lji5qnd0gq8v1vsfb8zw7rw15"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg WindowsWM library")
     (description
@@ -1306,11 +1291,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
      ;; xcomposite.pc refers to all these.
-      `(("xorgproto" ,xorgproto)
-        ("libxfixes" ,libxfixes)
-        ("libx11" ,libx11)))
+      (list xorgproto libxfixes libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Composite library")
     (description
@@ -1336,10 +1319,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libbsd" ,libbsd)
-        ("xorgproto" ,xorgproto)))
+      (list libbsd xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Display Manager Control Protocol library")
     (description "Xorg Display Manager Control Protocol library.")
@@ -1369,10 +1351,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
         ("freetype" ,freetype)
         ("fontconfig" ,fontconfig)))
     (inputs
-      `(("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FreeType library")
     (description
@@ -1387,22 +1368,23 @@ configuration files.")
     (name "libxkbfile")
     (version "1.1.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libxkbfile-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "1irq9crvscd3yb8sr802dhvvfr35jdy1n2yz094xplmd42mbv3bm"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://xorg/individual/lib/libxkbfile-"
+             version
+             ".tar.bz2"))
+       (sha256
+        (base32
+         "1irq9crvscd3yb8sr802dhvvfr35jdy1n2yz094xplmd42mbv3bm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
-    (inputs
-      `(("libx11" ,libx11)))
+    (propagated-inputs
+     ;; Required in xkbfile.pc.
+     (list libx11 kbproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XKB file handling library")
     (description "Xorg XKB file handling library.")
@@ -1427,11 +1409,9 @@ configuration files.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libxt" ,libxt)
-        ("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)))
+      (list libxt xorgproto libxext))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xmu library")
     (description
@@ -1461,9 +1441,7 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("libxt" ,libxt)
-        ("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)))
+      (list libxt xorgproto libxext))
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
@@ -1476,7 +1454,7 @@ treat it as part of their software base when porting.")
 (define-public libxres
   (package
     (name "libxres")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -1486,16 +1464,14 @@ treat it as part of their software base when porting.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1m0jr0lbz9ixpp9ihk68349q0i7ry2379lnfzdy4mrl86ijc2xgz"))))
+            "049b7dk6hx47161hg47ryjrm6pwsp27r5pby05b0wqb1pcggprmn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Resource extension library")
     (description "X Resource extension library.")
@@ -1520,11 +1496,9 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 libxext xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Screen Saver library")
     (description "X11 Screen Saver extension client library.")
@@ -1546,12 +1520,11 @@ treat it as part of their software base when porting.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)))
+     (list libx11 libxext))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XFree86-DGA library")
     (description "Client library for the XFree86-DGA extension.")
@@ -1577,9 +1550,9 @@ treat it as part of their software base when porting.")
         (patches (search-patches "luit-posix.patch"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libfontenc" ,libfontenc)))
+      (list libfontenc))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Convert terminal I/O from legacy encodings to UTF-8")
     (description
@@ -1606,8 +1579,8 @@ input from UTF-8 into the locale's encoding.")
             "072h9nzh8s5vqfz35dli4fba36fnr219asjrb7p89n8ph0paan6m"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+      (list xorgproto))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg makedepend utility")
     (description
@@ -1630,12 +1603,9 @@ input from UTF-8 into the locale's encoding.")
           (base32 "1ixsnsm2mn0zy9ksdid0lj6irnhvasfik9mz8bbrs5sajzmra16a"))))
     (build-system gnu-build-system)
     (inputs
-      `(("zlib" ,zlib)
-        ("xorgproto" ,xorgproto)
-        ("freetype" ,freetype)
-        ("libfontenc" ,libfontenc)))
+      (list zlib xorgproto freetype libfontenc))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an index of scalable font files for X server")
     (description
@@ -1685,7 +1655,7 @@ mechanism than copying the contents of the source pixmap.")
           (base32
             "06liap8n4s25sgp27d371cc7yg9a08dxcr3pmdjp761vyin3360j"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg PrintProto protocol headers")
     (description
@@ -1709,7 +1679,7 @@ network-transparent printing system.")
           (base32
             "0s4496z61y5q45q20gldwpf788b9nsa8hb13gnck1mwwwwrmarsc"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RandRProto protocol headers")
     (description
@@ -1735,7 +1705,7 @@ window of a screen.")
           (base32
             "0w3kgr1zabwf79bpc28dcnj0fpni6r53rpi82ngjbalj5s6m8xx7"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RecordProto protocol headers")
     (description
@@ -1759,7 +1729,7 @@ of user actions in the X Window System.")
           (base32
             "0dr5xw6s0qmqg0q5pdkb4jkdhaja0vbfqla79qh5j1xjj9dmlwq6"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg RenderProto protocol headers")
     (description
@@ -1783,7 +1753,7 @@ as the foundation of a new rendering model within the X Window System.")
           (base32
             "0638iyfiiyjw1hg3139pai0j6m65gkskrvd9684zgc6ydcx00riw"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg ResourceProto protocol headers")
     (description
@@ -1807,7 +1777,7 @@ query the X server about its usage of various resources.")
           (base32
             "0rfdbfwd35d761xkfifcscx56q0n56043ixlmv70r4v4l66hmdwb"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg ScrnSaverProto protocol headers")
     (description
@@ -1829,9 +1799,9 @@ features and to query screensaver info on specific windows.")
         (base32 "0crczl25zynkrslmm8sjaxszhrh4i33m7h5fg4wfdb3k8aarxjyz"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Register X sessions in system utmp/utmpx databases")
     (description
@@ -1857,11 +1827,9 @@ used with other display managers such as gdm or kdm.")
             "1xdrxs65v7d0rw1yaz0vsz55w4hxym99216p085ya9978j379wlg"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxkbfile" ,libxkbfile)
-        ("xkeyboard-config" ,xkeyboard-config)
-        ("libx11" ,libx11)))
+      (list libxkbfile xkeyboard-config libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-xkb-config-root="
@@ -1892,10 +1860,9 @@ listed on the command line.")
             "0rkjyzmsdqmlrkx8gy2j4q6iksk58hcc92xzdprkf8kml9ar3wbc"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxmu" ,libxmu)))
+      (list libxt libxmu))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Session Manager Proxy")
     (description
@@ -1907,7 +1874,7 @@ management to participate in an X11R6 session.")
 (define-public util-macros
   (package
     (name "util-macros")
-    (version "1.19.2")
+    (version "1.19.3")
     (source
       (origin
         (method url-fetch)
@@ -1917,9 +1884,9 @@ management to participate in an X11R6 session.")
                ".tar.bz2"))
         (sha256
           (base32
-            "04p7ydqxgq37jklnfj18b70zsifiz4h50wvrk94i2112mmv37r6p"))))
+            "0w8ryfqylprz37zj9grl4jzdsqq67ibfwq5raj7vm1i7kmp2x08g"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1961,7 +1928,7 @@ generate new versions of their configure scripts with autoconf.")
           (base32
             "00m7rh3pwmsld4d5fpii3xfk5ciqn17kkk38gfpzrrh8zn4ki067"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg VideoProto protocol headers")
     (description
@@ -1985,7 +1952,7 @@ mainly to rescale video playback in the video controller hardware.")
           (base32
             "0syjxgy4m8l94qrm03nvn5k6bkxc8knnlld1gbllym97nvnv0ny0"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg WindowsWMProto protocol headers")
     (description
@@ -2012,12 +1979,9 @@ server.")
             "0d3wh6z6znwhfdiv0zaggfj0xgish98xa10yy76b9517zj7hnzhw"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("libxft" ,libxft)
-        ("libxmu" ,libxmu)
-        ("libxrender" ,libxrender)))
+      (list libx11 libxft libxmu libxrender))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X server performance benchmarker")
     (description
@@ -2038,13 +2002,9 @@ server.")
         (base32 "032klzzw8r09z36x1272ssd79bcisz8j5p8gbdy111fiknvx27bd"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxmu" ,libxmu)
-       ("libxext" ,libxext)
-       ("libxau" ,libxau)
-       ("libx11" ,libx11)))
+     (list libxmu libxext libxau libx11))
     (native-inputs
-     `(("cmdtest" ,cmdtest)
-       ("pkg-config" ,pkg-config)))
+     (list cmdtest pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X authority file utility")
     (description
@@ -2069,10 +2029,9 @@ information used in connecting to the X server.")
             "1plssg0s3pbslg6rfzxp9sx8ryvn8l32zyvc8zp9zsbsfwjg69rs"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-util" ,xcb-util)))
+     (list libxcb xcb-util))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Control display backlight")
     (description
@@ -2098,7 +2057,7 @@ the same way.")
           (base32
             "1vh73sc13s7w5r6gnc6irca56s7998bja7wgdivkfn8jccawgw5r"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X bitmaps")
     (description
@@ -2129,9 +2088,9 @@ legacy X clients.")
                                        ,%app-defaults-dir "\n")))
                      #t)))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Hand calculator for the X Window system")
     (description "Xcalc is a scientific calculator desktop accessory that can
@@ -2150,8 +2109,15 @@ emulate a TI-30 or an HP-10C.")
                "https://xcb.freedesktop.org/dist/xcb-proto-"
                version ".tar.xz"))
         (sha256
-          (base32
-           "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))))
+         (base32
+          "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; fractions.gcd has been deprecated since python-3.5.
+            (substitute* "xcbgen/align.py"
+              (("from fractions import gcd") "from math import gcd"))
+            #t))))
     (build-system gnu-build-system)
     (native-inputs
       `(("pkg-config" ,pkg-config) ("python" ,python-minimal-wrapper)))
@@ -2185,7 +2151,7 @@ generators in individual language bindings.")
           (base32
             "1pyjv45wivnwap2wvsbrzdvjc5ql8bakkbkrvcv6q9bjjf33ccmi"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XCMiscProto protocol headers")
     (description
@@ -2210,9 +2176,9 @@ to query the server for available resource IDs.")
             "1ik7gzlp2igz183x70883000ygp99r20x3aah6xhaslbpdhm6n75"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Device Color Characterization utility")
     (description
@@ -2239,10 +2205,9 @@ X11 Inter-Client Communication Conventions Manual (ICCCM).")
             "16a96li0s0ggg60v7f6ywxmsrmxdfizcw55ccv7sp4qjfisca7pf"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcursor" ,libxcursor)
-        ("xcursorgen" ,xcursorgen)))
+      (list libxcursor xcursorgen))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-cursordir="
@@ -2255,65 +2220,56 @@ X11 Inter-Client Communication Conventions Manual (ICCCM).")
 X server: @code{handhelds}, @code{redglass} and @code{whiteglass}.")
     (license license:x11)))
 
-
 (define-public hackneyed-x11-cursors
-  ;; The current release 0.8 suffers from non-deterministic build problems.
-  (let ((revision "1")
-        (commit "9423cef2e2e5ff6b1d65d61f7108c97bc7f5fdfb"))
-    (package
-      (name "hackneyed-x11-cursors")
-      (version (git-version "0.8.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://gitlab.com/Enthymeme/hackneyed-x11-cursors.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0f637i76sdwz3nm1g1iynamq6j0i6k3c70fpl0fmd0dlynm8ga96"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f                    ;no test suite
-         #:make-flags (list (string-append "PREFIX=" %output))
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (add-before 'build 'set-inkscape-environment-variable
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((inkscape (string-append (assoc-ref inputs "inkscape")
-                                              "/bin/inkscape")))
-                 (setenv "INKSCAPE" inkscape)
-                 #t)))
-           (add-before 'build 'placate-inkscape-warnings
-             (lambda _
-               (setenv "HOME" (getcwd))
-               #t))
-           (add-after 'build 'generate-black-cursors
-             (lambda* (#:key make-flags parallel-build #:allow-other-keys)
-               (let ((build (assoc-ref %standard-phases 'build))
-                     (make-flags/extended
-                      `(,@make-flags
-                        "THEME_NAME=Hackneyed-Dark"
-                        "COMMON_SOURCE=theme/common-dark.svg"
-                        "RSVG_SOURCE=theme/right-handed-dark.svg"
-                        "LSVG_SOURCE=theme/left-handed-dark.svg")))
-                 (build #:make-flags make-flags/extended
-                        #:parallel-build parallel-build))))
-           (add-after 'install 'install-black-cursors
-             (lambda* (#:key make-flags #:allow-other-keys)
-               (apply invoke `("make" "install" ,@make-flags
-                               "THEME_NAME=Hackneyed-Dark")))))))
-      (native-inputs `(("imagemagick" ,imagemagick)
-                       ("inkscape" ,inkscape)
-                       ("xcursorgen" ,xcursorgen)))
-      (home-page "https://gitlab.com/Enthymeme/hackneyed-x11-cursors")
-      (synopsis "Classic cursor theme for X11")
-      (description "Hackneyed is a scalable cursor theme mildly resembling old
+  (package
+    (name "hackneyed-x11-cursors")
+    (version "0.8.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/Enthymeme/hackneyed-x11-cursors.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1mjwbny4rid9dzz6xfb8l5rkwki41sfhdp970cf3w2pi9kyg1njs"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test suite
+       #:make-flags (list (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'set-inkscape-environment-variable
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((inkscape (search-input-file inputs "/bin/inkscape")))
+               (setenv "INKSCAPE" inkscape))))
+         (add-before 'build 'placate-inkscape-warnings
+           (lambda _
+             (setenv "HOME" (getcwd))))
+         (add-after 'build 'generate-black-cursors
+           (lambda* (#:key make-flags parallel-build #:allow-other-keys)
+             (let ((build (assoc-ref %standard-phases 'build))
+                   (make-flags/extended
+                    `(,@make-flags
+                      "THEME_NAME=Hackneyed-Dark"
+                      "COMMON_SOURCE=theme/common-dark.svg"
+                      "RSVG_SOURCE=theme/right-handed-dark.svg"
+                      "LSVG_SOURCE=theme/left-handed-dark.svg")))
+               (build #:make-flags make-flags/extended
+                      #:parallel-build parallel-build))))
+         (add-after 'install 'install-black-cursors
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke `("make" "install" ,@make-flags
+                             "THEME_NAME=Hackneyed-Dark")))))))
+    (native-inputs (list imagemagick inkscape xcursorgen))
+    (home-page "https://gitlab.com/Enthymeme/hackneyed-x11-cursors")
+    (synopsis "Classic cursor theme for X11")
+    (description "Hackneyed is a scalable cursor theme mildly resembling old
 Windows 3.x cursors.  The cursors are available in white and black colors.  A
 left-handed version of the cursors is also included.")
-      (license license:x11))))
+    (license license:x11)))
 
 (define-public xcursorgen
   (package
@@ -2331,10 +2287,9 @@ left-handed version of the cursors is also included.")
             "0ggbv084cavp52hjgcz3vdj0g018axs0m23c03lpc5sgn92gidim"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcursor" ,libxcursor)
-        ("libpng" ,libpng)))
+      (list libxcursor libpng))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an X cursor file from PNG images")
     (description
@@ -2358,18 +2313,18 @@ left-handed version of the cursors is also included.")
             "0ldgrj4w2fa8jng4b3f3biaj0wyn8zvya88pnk70d7k12pcqw8rh"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)
-        ("libxxf86vm" ,libxxf86vm)
-        ("libxxf86dga" ,libxxf86dga)
-        ("libxtst" ,libxtst)
-        ("libxrender" ,libxrender)
-        ("libxinerama" ,libxinerama)
-        ("libxi" ,libxi)
-        ("libxcomposite" ,libxcomposite)
-        ("libdmx" ,libdmx)))
-    (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list xorgproto
+            libx11
+            libxxf86vm
+            libxxf86dga
+            libxtst
+            libxrender
+            libxinerama
+            libxi
+            libxcomposite
+            libdmx))
+    (native-inputs
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg display information utility")
     (description
@@ -2397,10 +2352,9 @@ available.")
             "0lcx8h3zd11m4w8wf7dyp89826d437iz78cyrix436bqx31x5k6r"))))
     (build-system gnu-build-system)
     (inputs
-      `(("mesa" ,mesa)
-        ("libx11" ,libx11)))
+      (list mesa libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Query DRI configuration information")
     (description
@@ -2424,13 +2378,11 @@ DRI (Direct Rendering Infrastructure) drivers.")
           (base32
             "1ql592pdhddhkipkrsxn929y9l2nn02a5fh2z3dx47kmzs5y006p"))))
     (build-system gnu-build-system)
+    (arguments `(#:configure-flags ',(malloc0-flags)))
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxrender libxrandr xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xev")
     (synopsis "Print contents of X events")
     (description
@@ -2459,7 +2411,7 @@ usage.")
           (base32
             "1c2vma9gqgc2v06rfxdiqgwhxmzk2cbmknwf1ng3m76vr0xb5x7k"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XExtProto protocol headers")
     (description
@@ -2473,7 +2425,7 @@ XC-APPGROUP, XTEST.")
 (define-public libevdev
   (package
     (name "libevdev")
-    (version "1.9.1")
+    (version "1.11.0")
     (source
      (origin
        (method url-fetch)
@@ -2481,11 +2433,11 @@ XC-APPGROUP, XTEST.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1jvsphdrs1i54ccjcn6ll26jy42am7h28lbsvwa6pmxgqm43qq7m"))))
+         "1l628xblk36vh7aqia1fw6hh62af7va0pd70h28112l5i4afmx33"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
-    (native-inputs `(("python" ,python)))
+    (native-inputs (list python))
     (home-page "https://www.freedesktop.org/wiki/Software/libevdev/")
     (synopsis "Wrapper library for evdev devices")
     (description
@@ -2518,7 +2470,7 @@ devices, thus making direct access unnecessary.")
         ("libevdev" ,libevdev)
         ("mtdev" ,mtdev)
         ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2535,7 +2487,7 @@ including most mice, keyboards, tablets and touchscreens.")
 (define-public xf86-input-libinput
   (package
     (name "xf86-input-libinput")
-    (version "1.0.1")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2543,14 +2495,14 @@ including most mice, keyboards, tablets and touchscreens.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0nr4r9x8c7y1l0ipivjch5zps093mxmg2nqmfn2934am26fc9ppx"))))
+                "05ldqr10f2rrnshyk3lc773rz0gp3ccdzwa8n7lsc94i850jl7g1"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
        (list (string-append "--with-sdkdir="
                             %output "/include/xorg"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("libinput" ,libinput-minimal)
        ("xorg-server" ,xorg-server)))
@@ -2578,8 +2530,8 @@ provide all features that libinput supports it does little beyond.")
           (base32
             "1awfq496d082brgjbr60lhm6jvr9537rflwxqdfqwfzjy3n6jxly"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2608,8 +2560,8 @@ It is used to control the pointer with a joystick device.")
           (base32
             "12032yg412kyvnmc5fha1in7mpi651d8sa1bk4138s2j2zr01jgp"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Keyboard input driver for X server")
     (description
@@ -2632,8 +2584,8 @@ It is used to control the pointer with a joystick device.")
           (base32
             "1iawr1wyl2qch1mqszcs0s84i92mh4xxprflnycbw1adc18b7v4k"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2664,12 +2616,8 @@ as USB mice.")
           (base32
             "0xhm03qywwfgkpfl904d08lx00y28m1b6lqmks5nxizixwk3by3s"))))
     (build-system gnu-build-system)
-    (inputs `(("libx11" ,libx11)
-              ("libxi" ,libxi)
-              ("libevdev" ,libevdev)
-              ("mtdev" ,mtdev)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list libx11 libxi libevdev mtdev xorg-server))
+    (native-inputs (list pkg-config))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-sdkdir="
@@ -2700,8 +2648,8 @@ as USB mice.")
           (base32
             "171k8b8s42s3w73l7ln9jqwk88w4l7r1km2blx1vy898c854yvpr"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Void (null) input driver for X server")
     (description
@@ -2711,17 +2659,17 @@ as USB mice.")
 (define-public xf86-video-amdgpu
   (package
     (name "xf86-video-amdgpu")
-    (version "19.1.0")
+    (version "21.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://xorg/individual/driver/"
                            "xf86-video-amdgpu-" version ".tar.bz2"))
        (sha256
-        (base32 "0pgy4ihnja0vm8504qw7qxh3pdpa3p9k6967nz15m6b1mvha83jg"))))
+        (base32 "125dq85n46yqmnmr2hknxwcqicwlvz2b2phf0m963fpg9l1j6y30"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "AMD Radeon video driver for X server")
     (description
@@ -2745,8 +2693,8 @@ X server.")
            "07p5vdsj2ckxb6wh02s61akcv4qfg6s1d5ld3jn3lfaayd3f1466"))
         (patches (search-patches "xf86-video-ark-remove-mibstore.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Ark Logic video driver for X server")
     (description
@@ -2767,8 +2715,8 @@ X server.")
                (base32
                 "1pm2cy81ma7ldsw0yfk28b33h9z2hcj5rccrxhfxfgvxsiavrnqy"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (synopsis "ASpeed Technologies video driver for X server")
     (description
      "xf86-video-ast is an ASpeed Technologies video driver for the Xorg
@@ -2776,27 +2724,31 @@ X server.")
     (license license:x11)))
 
 (define-public xf86-video-ati
-  (package
-    (name "xf86-video-ati")
-    (version "19.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://xorg/individual/driver/"
-                           "xf86-video-ati-" version ".tar.bz2"))
-       (sha256
-        (base32 "0j9w4axsqlycv4v14g53xyhkm9h7d27b2fcv9lrzb9gf54b5m7v5"))))
-    (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (home-page "https://www.x.org/wiki/")
-    (synopsis "ATI Radeon video driver for X server")
-    (description
-     "xf86-video-ati is an ATI Radeon video driver for the Xorg
+  ;; The current release is too old to build with our inputs.
+  (let ((commit "5eba006e4129e8015b822f9e1d2f1e613e252cda")
+        (revision "1"))
+    (package
+      (name "xf86-video-ati")
+      (version (git-version "19.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.freedesktop.org/xorg/driver/xf86-video-ati.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1n49wx0v13jh8vv17sxgrmmpi1mk3n2wph07jfmxmzqahpcn4lkn"))))
+      (build-system gnu-build-system)
+      (inputs (list mesa xorgproto xorg-server))
+      (native-inputs
+       (list pkg-config autoconf automake libtool))
+      (home-page "https://www.x.org/wiki/")
+      (synopsis "ATI Radeon video driver for X server")
+      (description
+       "xf86-video-ati is an ATI Radeon video driver for the Xorg
 X server.")
-    (license license:x11)))
+      (license license:x11))))
 
 
 (define-public xf86-video-cirrus
@@ -2814,8 +2766,8 @@ X server.")
           (base32
             "1asifc6ld2g9kap15vfhvsvyl69lj7pw3d9ra9mi4najllh7pj7d"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Cirrus Logic video driver for X server")
     (description
@@ -2835,8 +2787,8 @@ X server.")
        (sha256
         (base32 "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Dummy video driver for X server")
     (description
@@ -2859,8 +2811,8 @@ X server.")
           (base32
             "16a66zr0l1lmssa07i3rzy07djxnb45c17ks8c71h8l06xgxihyw"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Framebuffer device video driver for X server")
     (description
@@ -2894,17 +2846,20 @@ framebuffer device.")
          ("xorg-server" ,xorg-server)
          ("zlib" ,zlib)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config autoconf automake libtool))
        ;; This driver is only supported on ARM systems.
       (supported-systems '("armhf-linux" "aarch64-linux"))
       (arguments
        `(#:configure-flags
          (list (string-append "--with-xorg-conf-dir="
                               (assoc-ref %outputs "out")
-                              "/share/X11/xorg.conf.d"))))
+                              "/share/X11/xorg.conf.d"))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'bootstrap
+             (lambda _
+               ;; autogen.sh calls configure unconditionally.
+               (invoke "autoreconf" "-vfi"))))))
       (home-page "https://www.x.org/wiki/")
       (synopsis "Adreno video driver for X server")
       (description
@@ -2925,8 +2880,8 @@ It supports a variety of Adreno graphics chipsets.")
        (sha256
         (base32 "0r2dz0agg0k5wrqdbicji6mh6svzyl0xgqk76hpcfdlzn2zx15zl"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (supported-systems
      ;; This driver is only supported on i686 systems.
      (filter (lambda (system) (string-prefix? "i686-" system))
@@ -2983,9 +2938,8 @@ compositing.  Both support Xv overlay and dynamic rotation with XRandR.")
           (base32
            "1lkpspvrvrp9s539bhfdjfh4andaqyk63l6zjn8m3km95smk6a45"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "GLINT/Permedia video driver for X server")
     (description
@@ -3009,8 +2963,8 @@ X server.")
           (base32
            "1snhpv1igrhifcls3r498kjd14ml6x2xvih7zk9xlsd1ymmhlb4g"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "I128 video driver for X server")
     (description
@@ -3043,10 +2997,7 @@ X server.")
                 ("libxfont" ,libxfont2)
                 ("xorg-server" ,xorg-server)))
       (native-inputs
-       `(("pkg-config" ,pkg-config)
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)))
+       (list pkg-config autoconf automake libtool))
       (supported-systems
        ;; This driver is only supported on Intel systems.
        (filter (lambda (system) (or (string-prefix? "i686-" system)
@@ -3076,13 +3027,12 @@ It supports a variety of Intel graphics chipsets.")
         (sha256
           (base32
            "171wg8r6py1l138s58rlapin3rlpwsg9spmvhc7l68mm3g3hf1vs"))
-        (patches (search-patches "xf86-video-mach64-glibc-2.20.patch"))))
+        (patches (search-patches "xf86-video-mach64-glibc-2.20.patch"
+                                 "xf86-video-mach64-bool-to-boolean.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Mach64 video driver for X server")
     (description
@@ -3109,10 +3059,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
            "0yaxpgyyj9398nzzr5vnsfxcis76z46p9814yzj8179yl7hld296"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Matrox video driver for X server")
     (description
@@ -3134,9 +3082,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
             "0r4h673kw8fl7afc30anwbjlbhp82mg15fvaxf470xg7z983k0wk"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "NeoMagic video driver for X server")
     (description
@@ -3186,8 +3133,8 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
            "0bdk3pc5y0n7p53q4gc2ff7bw16hy5hwdjjxkm5j3s7hdyg6960z"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "NVIDIA video driver for X server")
     (description
@@ -3208,10 +3155,11 @@ supported, and the RENDER extension is not accelerated by this driver.")
        (uri (string-append "mirror://xorg/individual/driver/xf86-video-nouveau-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "0sqm1jwjg15sp8v7039y2hsbhph8gpjd2bdzcqqiij2mgbi254s9"))))
+        (base32 "0sqm1jwjg15sp8v7039y2hsbhph8gpjd2bdzcqqiij2mgbi254s9"))
+       (patches (search-patches "xf86-video-nouveau-fixup-ABI.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://nouveau.freedesktop.org")
     (synopsis "NVIDIA video driver for X server")
     (description
@@ -3234,14 +3182,14 @@ graphics cards.")
          (base32
           "0x9gq3hw6k661k82ikd1y2kkk4dmgv310xr5q59dwn4k6z37aafs"))))
     (build-system gnu-build-system)
-    (inputs `(("libx11" ,libx11)
-              ("libxext" ,libxext)
-              ("libxvmc" ,libxvmc)
-              ("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list libx11
+                  libxext
+                  libxvmc
+                  mesa
+                  xorgproto
+                  xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Openchrome video driver for X server")
     (description
@@ -3265,12 +3213,9 @@ UniChrome Pro and Chrome9 integrated graphics processors.")
                 "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxfont" ,libxfont2)
-        ("spice-protocol" ,spice-protocol)
-        ("xorg-server" ,xorg-server)
-        ("xorgproto" ,xorgproto)))
+      (list libxfont2 spice-protocol xorg-server xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (synopsis "Qxl video driver for X server")
     (description "xf86-video-qxl is a video driver for the Xorg X server.
 This driver is intended for the spice qxl virtio device.")
@@ -3289,11 +3234,9 @@ This driver is intended for the spice qxl virtio device.")
                (base32
                 "0mz0v5mqmmbncr2drd5zvia1fb7frz2xqwflhhqbnaxx5j48c740"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "ATI Rage 128 video driver for X server")
     (description
@@ -3317,10 +3260,8 @@ This driver is intended for ATI Rage 128 based cards.")
           (base32
            "11pcrsdpdrwk0mrgv83s5nsx8a9i4lhmivnal3fjbrvi3zdw94rc"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Savage video driver for X server")
     (description
@@ -3344,8 +3285,8 @@ This driver is intended for ATI Rage 128 based cards.")
            "1g2r6gxqrmjdff95d42msxdw6vmkg2zn5sqv0rxd420iwy8wdwyh"))
         (patches (search-patches "xf86-video-siliconmotion-fix-ftbfs.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Silicon Motion video driver for X server")
     (description
@@ -3369,11 +3310,9 @@ Xorg X server.")
          (base32
           "0nrs6cjldlhakx5987fiiggjrlzilsbdc7l9pz22x1iwslbkz78i"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
+    (inputs (list mesa xorgproto xorg-server))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Sis video driver for X server")
     (description
@@ -3397,8 +3336,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
             "04fgwgk02m4nimlv67rrg1wnyahgymrn6rb2cjj1l8bmzkii4glr"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "GX/TurboGX video driver for X server")
     (description
@@ -3421,8 +3360,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
             "07z3ngifwg2d4jgq8pms47n5lr2yn0ai72g86xxjnb3k20n5ym7s"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "SUNFFB video driver for X server")
     (description
@@ -3445,10 +3384,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
           (base32
            "0qc5wzwf1n65si9rc37bh224pzahh7gp67vfimbxs0b9yvhq0i9g"))))
     (build-system gnu-build-system)
-    (inputs `(("mesa" ,mesa)
-              ("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list mesa xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "3Dfx video driver for X server")
     (description
@@ -3472,9 +3409,8 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
            "0cb161lvdgi6qnf1sfz722qn38q7kgakcvj7b45ba3i0020828r0"))
         (patches (search-patches "xf86-video-tga-remove-mibstore.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "TGA video driver for X server")
     (description
@@ -3498,9 +3434,8 @@ X server.")
           (base32
            "0gxcar434kx813fxdpb93126lhmkl3ikabaljhcj5qn3fkcijlcy"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Trident video driver for X server")
     (description
@@ -3527,8 +3462,8 @@ X server.")
           (base32
             "0nf6ai74c60xk96kgr8q9mx6lrxm5id3765ws4d801irqzrj85hz"))))
     (build-system gnu-build-system)
-    (inputs `(("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "VESA video driver for X server")
     (description
@@ -3586,8 +3521,7 @@ X server.")
                (format #t "decompressing x86emu source code~%")
                (with-directory-excursion "libs"
                  (let ((srcs (assoc-ref inputs "xorg-server-sources"))
-                       (tar-binary (string-append (assoc-ref inputs "tar")
-                                                  "/bin/tar")))
+                       (tar-binary (search-input-file inputs "/bin/tar")))
                    (invoke tar-binary "xvf" srcs "--strip-components=3"
                            "--wildcards" "*/hw/xfree86/x86emu/")
                    ;; extract license:
@@ -3652,14 +3586,13 @@ server driver works.")
            "0v06qhm059klq40m2yx4wypzb7h53aaassbjfmm6clcyclj1k5s7"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("llvm" ,llvm)
-       ("mesa" ,mesa)                   ; for xatracker
-       ("xorg-server" ,xorg-server)))
+     (list libx11
+           libxext
+           llvm
+           mesa ; for xatracker
+           xorg-server))
     (native-inputs
-     `(("eudev" ,eudev)
-       ("pkg-config" ,pkg-config)))
+     (list eudev pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "VMware SVGA video driver for X server")
     (description
@@ -3684,9 +3617,8 @@ server driver works.")
         (patches
          (search-patches "xf86-video-voodoo-pcitag.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xorgproto" ,xorgproto)
-              ("xorg-server" ,xorg-server)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs (list xorgproto xorg-server))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Voodoo/Voodoo2 video driver for X server")
     (description
@@ -3807,10 +3739,9 @@ configuring modelines and gamma.")
             "1lr2nb1fhg5fk2fchqxdxyl739602ggwhmgl2wiv5c8qbidw7w8f"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxxf86vm" ,libxxf86vm)
-        ("libx11" ,libx11)))
+      (list libxxf86vm libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Alter a monitor's gamma correction")
     (description
@@ -3835,11 +3766,9 @@ monitor via the X video mode extension.")
             "15n3mnd4i5kh4z32qv11580qjgvnng0wry2y753ljrqkkrbkrp52"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libxau" ,libxau)
-        ("libx11" ,libx11)))
+      (list libxmu libxau libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xhost")
     (synopsis "Xorg server access control utility")
     (description
@@ -3863,7 +3792,7 @@ allowed to make connections to the X server.")
           (base32
             "0ns8abd27x7gbp4r44z3wc5k9zqxxj8zjnazqpcyr4n17nxp8xcp"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XineramaProto protocol headers")
     (description
@@ -3894,15 +3823,15 @@ alternative implementations like XRandR or TwinView.")
             "1vb6xdd1xmk5f7pwc5zcbxfray5sf1vbnscqwf2yl8lv7gfq38im"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("libxinerama" ,libxinerama)
-        ("libxext" ,libxext)
-        ("libxi" ,libxi)
-        ("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libxrender
+            libxrandr
+            libxinerama
+            libxext
+            libxi
+            libx11
+            xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Configure input devices for X server")
     (description
@@ -3910,10 +3839,10 @@ alternative implementations like XRandR or TwinView.")
     (license license:x11)))
 
 
-(define xkbcomp-intermediate            ;used as input for xkeyboard-config
+(define-public xkbcomp-intermediate        ;used as input for xkeyboard-config
   (package
     (name "xkbcomp-intermediate")
-    (version "1.4.4")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
@@ -3921,14 +3850,12 @@ alternative implementations like XRandR or TwinView.")
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0zpjkbap9160pdd6jpgb5f0yg5281w0rkkx1l0i7g887lq1ydk2r"))))
+         "0pmhshqinwqh5rip670l3szjpywky67hv232ql6gvdj489n0hlb8"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libxkbfile" ,libxkbfile)
-       ("libx11" ,libx11)))
+     (list xorgproto libxkbfile libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Compile XKB keyboard description")
     (description
@@ -3943,11 +3870,16 @@ explicitly specify most aspects of keyboard behaviour on per-key basis
 and to more closely track the logical and physical state of the
 keyboard.  It also includes a number of keyboard controls designed to
 make keyboards more accessible to people with physical impairments.")
-    (license license:x11)))
+    (license license:x11)
+
+    ;; The only reason this package is public is to make sure it's built and
+    ;; published by the continuous integration tool.
+    (properties '((hidden? . #t)))))
 
 (define-public xkbcomp ; using xkeyboard-config as input
   (package (inherit xkbcomp-intermediate)
     (name "xkbcomp")
+    (properties '())
     (inputs
       `(,@(package-inputs xkbcomp-intermediate)
         ("xkeyboard-config" ,xkeyboard-config)))
@@ -3974,10 +3906,9 @@ make keyboards more accessible to people with physical impairments.")
             "0sprjx8i86ljk0l7ldzbz2xlk8916z5zh78cafjv8k1a63js4c14"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxkbfile" ,libxkbfile)
-        ("libx11" ,libx11)))
+      (list libxkbfile libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "XKB event daemon demo")
     (description
@@ -3998,11 +3929,9 @@ requested commands if they occur.")
           (base32 "1yi3232g25hhp241irncd8znv3090k2gm0yjcdnz08h89y1zwn2v"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("libxkbfile" ,libxkbfile)
-        ("xorgproto" ,xorgproto)))
+     (list libx11 libxkbfile xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Visualise an XKB keyboard layout description")
     (description
@@ -4028,11 +3957,9 @@ one from a running X server.")
             "0c412isxl65wplhl7nsk12vxlri29lk48g3p52hbrs3m0awqm8fj"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxaw" ,libxaw)
-        ("xorgproto" ,xorgproto)))
+      (list libxt libxaw xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "XKB utilities")
     (description
@@ -4050,21 +3977,20 @@ extension to the X11 protocol.  It includes:
 (define-public xkeyboard-config
   (package
     (name "xkeyboard-config")
-    (version "2.31")
+    (version "2.34")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
-              "mirror://xorg/individual/data/xkeyboard-config/xkeyboard-config-"
+              "ftp://ftp.freedesktop.org/pub/xorg//individual/data/xkeyboard-config/xkeyboard-config-"
               version
               ".tar.bz2"))
         (sha256
           (base32
-            "18xddaxh83zm698syh50w983jg6b7b8zgv0dfaf7ha485hgihi6s"))))
+            "1kmq2ykwmh10sd6155gml4jhdxmvsll6xdg7zw86czpfhrvd48dk"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("xkbcomp-intermediate" ,xkbcomp-intermediate)))
+      (list libx11 xkbcomp-intermediate))
     (native-inputs
       `(("gettext" ,gettext-minimal)
         ("perl" ,perl)
@@ -4096,10 +4022,9 @@ can be combined together using the @code{rules} component of this database.")
             "0szzd9nzn0ybkhnfyizb876irwnjsnb78rcaxx6prb71jmmbpw65"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list libxmu libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Kill a client by its X resource")
     (description
@@ -4125,9 +4050,9 @@ programs that have displayed undesired windows on a user's screen.")
             "10m3a046jvaw5ywx4y65kl84lsxqan70gww1g1r7cf96ijaqz1jp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xlsatoms")
     (synopsis "List interned X server atoms")
     (description
@@ -4151,9 +4076,9 @@ programs that have displayed undesired windows on a user's screen.")
             "1h8931sn34mcip6vpi4v7hdmr1r58gkbw4s2p97w98kykks2lgvp"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "List client applications running on a display")
     (description
@@ -4178,10 +4103,9 @@ running on X server.")
          "0s6kxgv78chkwsqmhw929f4pf91gq63f4yvixxnan1h00cx0pf49"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libx11" ,libx11)))
+     (list xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "List fonts available from an X server")
     (description
@@ -4207,12 +4131,9 @@ protocol.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libx11" ,libx11)
-       ("libxaw" ,libxaw)
-       ("libxmu" ,libxmu)
-       ("libxt" ,libxt)))
+     (list libx11 libxaw libxmu libxt))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Browse and select X font names")
     (description
@@ -4274,10 +4195,9 @@ containing one glyph per cell.")
             "0z28331i2pm16x671fa9qwsfqdmr6a43bzwmp0dm17a3sx0hjgs7"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list xorgproto libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xmodmap")
     (synopsis "Modify keymaps and button mappings on X server")
     (description
@@ -4308,7 +4228,7 @@ tastes.")
           (base32
             "0k5pffyi5bx8dmfn033cyhgd3gf6viqj3x769fqixifwhbgy2777"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg SGML documentation tools")
     (description
@@ -4337,11 +4257,9 @@ refers to the included common xorg.css stylesheet.")
             "07qy9lwjvxighcmg6qvjkgagad3wwvidrfx0jz85lgynz3qy0dmr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list xorgproto libxmu libx11))
     (native-inputs
-        `(("pkg-config" ,pkg-config)))
+        (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Print an X window dump from xwd")
     (description
@@ -4364,10 +4282,9 @@ it for output on various types of printers.")
          "18ckr8g1z50zkc01hprkpm1npwbq32yqib4b3l98c95z2q1yv4lv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libx11" ,libx11)
-       ("xorgproto" ,xorgproto)))
+     (list libx11 xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display X server properties")
     (description
@@ -4391,12 +4308,9 @@ an X server.")
             "0ql75s1n3dm2m3g1ilb9l6hqh15r0v709bgghpwazy3jknpnvivv"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxrender" ,libxrender)
-        ("libxrandr" ,libxrandr)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxrender libxrandr xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Command line interface to X RandR extension")
     (description
@@ -4418,10 +4332,9 @@ and Reflect (RandR) extension.")
           (base32 "1d78prd8sfszq2rwwlb32ksph4fymf988lp75aj8iysg44f06pag"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libx11" ,libx11)))
+      (list libxmu libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xrdb")
     (synopsis "X server resource database utility")
     (description
@@ -4449,9 +4362,9 @@ file.")
             "0lv3rlshh7s0z3aqx5ahnnf8cl082m934bk7gv881mz8nydznz98"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Refresh all or part of an X screen")
     (description
@@ -4477,12 +4390,9 @@ up your screen.")
             "0my987wjvra7l92ry6q44ky383yg3phzxhdbn3lqhapm1ll9bzg4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxmu" ,libxmu)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxmu libxext libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "User preference utility for X server")
     (description
@@ -4506,11 +4416,9 @@ up your screen.")
             "0z21mqvmdl6rl63q77479wgkfygnll57liza1i3va7sr4fx45i0h"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxmu" ,libxmu)
-        ("libxcursor" ,libxcursor)
-        ("xbitmaps" ,xbitmaps)))
+      (list libxmu libxcursor xbitmaps))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Root window parameter setting utility for X server")
     (description
@@ -4534,7 +4442,7 @@ a display running X server.")
           (base32
             "0wyp0yc6gi72hwc3kjmvm3vkj9p6s407cb6dxx37jh9wb68l8z1p"))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (native-inputs (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Network Transport layer library")
     (description
@@ -4561,11 +4469,9 @@ libICE, the X font server, and related components.")
             "0gz7fvxavqlrqynpfbrm2nc9yx8h0ksnbnv34fj7n1q6cq6j4lq3"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxext" ,libxext)
-        ("libxv" ,libxv)
-        ("libx11" ,libx11)))
+      (list libxext libxv libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xvinfo")
     (synopsis "Print out X-Video extension adaptor information")
     (description
@@ -4588,11 +4494,9 @@ extension.")
           (base32 "06q36fh55r62ms0igfxsanrn6gv8lh794q1bw9xzw51p2qs2papv"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libxt" ,libxt)
-        ("libxkbfile" ,libxkbfile)
-        ("xorgproto" ,xorgproto)))
+      (list libxt libxkbfile xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Dump current contents of X window or screen to file")
     (description
@@ -4621,10 +4525,9 @@ dump and twice when the dump is completed.")
             "03h8clirhw5ki1xxp18xbf5vynm7r0dwspsgfin6cxn4vx0m8h3s"))))
     (build-system gnu-build-system)
     (inputs
-      `(("libx11" ,libx11)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Window information utility for X server")
     (description
@@ -4649,10 +4552,9 @@ Various information is displayed depending on which options are selected.")
             "1a8hdgy40smvblnh3s9f0vkqckl68nmivx7d48zk34m8z18p16cr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list xorgproto libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display an X window dump from xwd")
     (description
@@ -4676,9 +4578,9 @@ formatted dump file, such as produced by xwd.")
             "1c76zcjs39ljil6f6jpx1x17c8fnvwazz7zvl3vbjfcrlmm7rjmv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "X color name database")
     (description
@@ -4703,9 +4605,9 @@ formatted dump file, such as produced by xwd.")
             "1ki4wiq2iivx5g4w5ckzbjbap759kfqd72yg18m3zpbb4hqkybxs"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg FixesProto protocol headers")
     (description
@@ -4732,11 +4634,9 @@ cannot be adequately worked around on the client side of the wire.")
     (build-system gnu-build-system)
     (propagated-inputs
       ;; These are all in the Requires or Requires.private field of xdamage.pc
-      `(("libxfixes" ,libxfixes)
-        ("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)))
+      (list libxfixes xorgproto libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Damage Extension library")
     (description "Xorg library for the XDamage extension.")
@@ -4758,20 +4658,20 @@ cannot be adequately worked around on the client side of the wire.")
           (base32
             "0azqxllcsfxc3ilhz6kwc6x7m8wc477p59ir9p0yrsldx766zbar"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 40% of the total
     (arguments
      `(#:configure-flags
        (list "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             (string-append "--mandir="
+                            (assoc-ref %outputs "doc")
+                            "/share/man")
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libxau" ,libxau)
-        ("libx11" ,libx11)))
+      (list libxau libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Common extensions library")
     (description
@@ -4795,14 +4695,13 @@ cannot be adequately worked around on the client side of the wire.")
             "086p0axqj57nvkaqa6r00dnr9kyrn1m8blgf0zjy25zpxkbxn200"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xinerama protocol library")
     (description "API for Xinerama extension to X11 protocol.")
@@ -4825,12 +4724,11 @@ cannot be adequately worked around on the client side of the wire.")
             "0mwc2jwmq03b1m9ihax5c6gw2ln8rc70zz4fsj3kb7440nchqdkz"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("printproto" ,printproto)))
+      (list printproto))
     (inputs
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)))
+      (list libx11 libxext))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Print Client library")
     (description "Xorg Print Client library.")
@@ -4854,17 +4752,13 @@ cannot be adequately worked around on the client side of the wire.")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+       (list "--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Render Extension library")
     (description "Library for the Render Extension to the X11 protocol.")
@@ -4888,12 +4782,11 @@ cannot be adequately worked around on the client side of the wire.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxi" ,libxi)
-       ("xorgproto" ,xorgproto)))
+     (list libxi xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg library for Xtest and Record extensions")
     (description
@@ -4925,14 +4818,13 @@ protocol and arbitrary X extension protocol.")
             "125hn06bd3d8y97hm2pbf5j55gg4r2hpd3ifad651i4sr7m16v6j"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '(,@(malloc0-flags) "--disable-static")))
     (propagated-inputs
-     `(("xorgproto" ,xorgproto)))
+     (list xorgproto))
     (inputs
-      `(("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list libxext libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XVideo Extension library")
     (description "Library for the X Video Extension to the X11 protocol.")
@@ -4974,14 +4866,12 @@ protocol and arbitrary X extension protocol.")
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/mkfontdir")
                `("PATH" ":" prefix
-                 (,(string-append (assoc-ref inputs "mkfontscale")
-                                  "/bin"))))
-             #t)))))
+                 (,(dirname
+                    (search-input-file inputs "/bin/mkfontscale"))))))))))
     (inputs
-      `(("mkfontscale" ,mkfontscale)))
+      (list mkfontscale))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("automake" ,automake))) ;For up to date 'config.guess' and 'config.sub'.
+     (list pkg-config automake)) ;For up to date 'config.guess' and 'config.sub'.
     (home-page "https://www.x.org/wiki/")
     (synopsis "Create an index of X font files in a directory")
     (description
@@ -5006,9 +4896,9 @@ script around the mkfontscale program.")
             "0ivpxz0rx2a7nahkpkhfgymz7j0pwzaqvyqpdgw9afmxl1yp9yf6"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("util-macros" ,util-macros))) ; to get util-macros in (almost?) all package inputs
+      (list util-macros)) ; to get util-macros in (almost?) all package inputs
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg X11Proto protocol headers")
     (description
@@ -5041,12 +4931,11 @@ common definitions and porting layer.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libbsd" ,libbsd)
-        ("xtrans" ,xtrans)))
+      (list libbsd xtrans))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Inter-Client Exchange library")
     (description "Xorg Inter-Client Exchange library.")
@@ -5071,9 +4960,9 @@ common definitions and porting layer.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Authorization library")
     (description
@@ -5084,7 +4973,7 @@ an X Window System display.")
 (define-public libxfixes
   (package
     (name "libxfixes")
-    (version "5.0.3")
+    (version "6.0.0")
     (source
       (origin
         (method url-fetch)
@@ -5094,16 +4983,16 @@ an X Window System display.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1miana3y4hwdqdparsccmygqr3ic3hs5jrqfzp70hvi2zwxd676y"))))
+            "0k2v4i4r24y3kdr5ici1qqhp69djnja919xfqp54c2rylm6s5hd7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Fixes Extension library")
     (description "Library for the XFixes Extension to the X11 protocol.")
@@ -5127,14 +5016,11 @@ an X Window System display.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("freetype" ,freetype)
-        ("libfontenc" ,libfontenc)
-        ("xorgproto" ,xorgproto)))
+      (list freetype libfontenc xorgproto))
     (inputs
-      `(("zlib" ,zlib)
-        ("xtrans" ,xtrans)))
+      (list zlib xtrans))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Font handling library")
     (description
@@ -5173,15 +5059,17 @@ new API's in libXft, or the legacy API's in libX11.")
           (base32
             "0q8hz3slga3w3ch8wp0k7ay9ilhz315qnab0w1y2x9w3cf7hv8rn"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 28% of the total
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags (list "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man")
+                               ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)
-        ("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxfixes" ,libxfixes)))
+      (list xorgproto libx11 libxext libxfixes))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Input Extension library")
     (description "Library for the XInput Extension to the X11 protocol.")
@@ -5203,15 +5091,12 @@ new API's in libXft, or the legacy API's in libX11.")
             "08z0mqywrm7ij8bxlfrx0d2wy6kladdmkva1nw5k6qix82z0xsla"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
       ;; In accordance with xrandr.pc.
-      `(("libx11" ,libx11)
-        ("libxext" ,libxext)
-        ("libxrender" ,libxrender)
-        ("xorgproto" ,xorgproto)))
+      (list libx11 libxext libxrender xorgproto))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Resize and Rotate Extension library")
     (description
@@ -5234,15 +5119,13 @@ new API's in libXft, or the legacy API's in libX11.")
             "1kbdjsvkm5l7axv7g477qj18sab2wnqhliy6197syzizgfbsfgbb"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '(,@(malloc0-flags) "--disable-static")))
     (propagated-inputs
-      `(("libxv" ,libxv)))
+      (list libxv))
     (inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxext" ,libxext)
-        ("libx11" ,libx11)))
+      (list xorgproto libxext libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XvMC library")
     (description "Xorg XvMC library.")
@@ -5264,14 +5147,13 @@ new API's in libXft, or the legacy API's in libX11.")
             "0mydhlyn72i7brjwypsqrpkls3nm6vxw0li8b2nw0caz7kwjgvmg"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags '("--disable-static" ,@(malloc0-flags))))
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("xorgproto" ,xorgproto)))
+      (list libxext xorgproto))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-       `(("pkg-config" ,pkg-config)))
+       (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XF86 Video Mode Extension library")
     (description
@@ -5295,19 +5177,20 @@ protocol.")
           (base32
            "0d2chjgyn5lr9sfhacfvqgnj9l9faz11vn322a06jd6lk3dxcpm5"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))                      ;5.5 MiB of man pages
     (propagated-inputs
-      `(("libpthread-stubs" ,libpthread-stubs)
-        ("libxau" ,libxau)
-        ("libxdmcp" ,libxdmcp)))
+      (list libpthread-stubs libxau libxdmcp))
     (inputs
-      `(("xcb-proto" ,xcb-proto)
-        ("libxslt" ,libxslt)))
+      (list xcb-proto libxslt))
     (native-inputs
       `(("pkg-config" ,pkg-config)
         ("python" ,python-minimal-wrapper)))
     (arguments
-     `(#:configure-flags '("--enable-xkb"
-                           "--disable-static")))
+     `(#:configure-flags (list "--enable-xkb"
+                               "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man"))))
     (home-page "https://xcb.freedesktop.org/")
     (synopsis "The X C Binding (XCB) library")
     (description
@@ -5326,78 +5209,97 @@ over Xlib, including:
 - easy extension implementation: interfaces auto-generated from XML-XCB.")
     (license license:x11)))
 
+(define-public libxcvt
+  (package
+    (name "libxcvt")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.x.org/releases/individual"
+                                  "/lib/libxcvt-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0acc7vrj5kfb19zvyl7f29rnsvx383dvwc19k70r8prm1lccxsr7"))))
+    (build-system meson-build-system)
+    (home-page "https://gitlab.freedesktop.org/xorg/lib/libxcvt")
+    (synopsis "VESA Coordinated Video Timings (CVT) library")
+    (description "@code{libxcvt} is a library providing a standalone version
+of the X server implementation of the VESA Coordinated Video Timings (CVT)
+standard timing modelines generator.  @code{libxcvt} also provides a
+standalone version of the command line tool @command{cvt} copied from the Xorg
+implementation and is meant to be a direct replacement to the version provided
+by the Xorg server.")
+    (license license:x11)))
 
 (define-public xorg-server
   (package
     (name "xorg-server")
-    (version "1.20.11")
+    (version "21.1.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "mirror://xorg/individual/xserver/"
-                            "xorg-server-" version ".tar.bz2"))
-        (sha256
-         (base32
-          "0jacqgin8kcyy8fyv0lhgb4if8g9hp60rm3ih3s1mgps7xp7jk4i"))
-        (patches
-         (list
-          ;; See:
-          ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
-          ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
-          (origin
-            (method url-fetch)
-            (uri (string-append
-                  "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
-                  "/plain/06_use-intel-only-on-pre-gen4.diff"))
-            (sha256
-             (base32
-              "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
-            (file-name "xorg-server-use-intel-only-on-pre-gen4.diff"))))))
+     (origin
+       (method url-fetch)
+
+       (uri (string-append "https://xorg.freedesktop.org/archive/individual"
+                           "/xserver/xorg-server-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0md7dqsc5qb30gym06c4zc2cjsdc5ps8nywk1bkcpix05kppybkq"))
+       (patches
+        (list
+         ;; See:
+         ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
+         ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
+                 "/plain/06_use-intel-only-on-pre-gen4.diff"))
+           (sha256
+            (base32
+             "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
+           (file-name "xorg-server-use-intel-only-on-pre-gen4.diff"))))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("libpciaccess" ,libpciaccess)
-        ("mesa" ,mesa)
-        ("pixman" ,pixman)
-        ("xorgproto" ,xorgproto)))
+     ;; The following libraries are required by xorg-server.pc.
+     (list libpciaccess libxcvt mesa pixman xorgproto))
     (inputs
-      `(("udev" ,eudev)
-        ("dbus" ,dbus)
-        ("libdmx" ,libdmx)
-        ("libepoxy" ,libepoxy)
-        ("libgcrypt" ,libgcrypt)
-        ("libxau" ,libxau)
-        ("libxaw" ,libxaw)
-        ("libxdmcp" ,libxdmcp)
-        ("libxfixes" ,libxfixes)
-        ("libxfont2" ,libxfont2)
-        ("libxkbfile" ,libxkbfile)
-        ("libxrender" ,libxrender)
-        ("libxres" ,libxres)
-        ("libxshmfence" ,libxshmfence)
-        ("libxt" ,libxt)
-        ("libxv" ,libxv)
-        ("xkbcomp" ,xkbcomp)
-        ("xkeyboard-config" ,xkeyboard-config)
-        ("xtrans" ,xtrans)
-        ("zlib" ,zlib)
-        ;; Inputs for Xephyr
-        ("xcb-util" ,xcb-util)
-        ("xcb-util-image" ,xcb-util-image)
-        ("xcb-util-keysyms" ,xcb-util-keysyms)
-        ("xcb-util-renderutil" ,xcb-util-renderutil)
-        ("xcb-util-wm" ,xcb-util-wm)))
+     `(("udev" ,eudev)
+       ("dbus" ,dbus)
+       ("libdmx" ,libdmx)
+       ("libepoxy" ,libepoxy)
+       ("libgcrypt" ,libgcrypt)
+       ("libxau" ,libxau)
+       ("libxaw" ,libxaw)
+       ("libxdmcp" ,libxdmcp)
+       ("libxfixes" ,libxfixes)
+       ("libxfont2" ,libxfont2)
+       ("libxkbfile" ,libxkbfile)
+       ("libxrender" ,libxrender)
+       ("libxres" ,libxres)
+       ("libxshmfence" ,libxshmfence)
+       ("libxt" ,libxt)
+       ("libxv" ,libxv)
+       ("xkbcomp" ,xkbcomp)
+       ("xkeyboard-config" ,xkeyboard-config)
+       ("xtrans" ,xtrans)
+       ("zlib" ,zlib)
+       ;; Inputs for Xephyr
+       ("xcb-util" ,xcb-util)
+       ("xcb-util-image" ,xcb-util-image)
+       ("xcb-util-keysyms" ,xcb-util-keysyms)
+       ("xcb-util-renderutil" ,xcb-util-renderutil)
+       ("xcb-util-wm" ,xcb-util-wm)))
     (native-inputs
      `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (arguments
-     `(#:parallel-tests? #f
-       #:configure-flags
+     `(#:configure-flags
        (list (string-append "--with-xkb-path="
                             (assoc-ref %build-inputs "xkeyboard-config")
                             "/share/X11/xkb")
              (string-append "--with-xkb-output="
                             "/tmp") ; FIXME: This is a bit doubtful; where should
-                                    ; the compiled keyboard maps go?
+                                        ; the compiled keyboard maps go?
              (string-append "--with-xkb-bin-directory="
                             (assoc-ref %build-inputs "xkbcomp")
                             "/bin")
@@ -5406,19 +5308,19 @@ over Xlib, including:
              ;; It's not used anyway, so set it to empty.
              "--with-default-font-path="
 
+             ;; Enable the X security extensions (ssh -X).
+             "--enable-xcsecurity"
+
              ;; The default is to use "uname -srm", which captures the kernel
              ;; version and makes builds non-reproducible.
              "--with-os-name=GNU"
-
-             "--with-os-vendor=GuixSD"    ;not strictly needed, but looks nice
-
+             "--with-os-vendor=Guix"    ; not strictly needed, but looks nice
 
              ;; For the log file, etc.
              "--localstatedir=/var"
-             ;; For sddm
+             ;; For sddm.
              "--enable-kdrive"
              "--enable-xephyr")
-
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
@@ -5437,9 +5339,7 @@ over Xlib, including:
                (("^BUILD_DATE=.*$")
                 "BUILD_DATE=19700101\n")
                (("^BUILD_TIME=.*$")
-                "BUILD_TIME=000001\n"))
-
-             #t)))))
+                "BUILD_TIME=000001\n")))))))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg implementation of the X Window System")
     (description
@@ -5460,47 +5360,147 @@ draggable titlebars and borders.")
 (define-public xorg-server-for-tests
   (hidden-package
    (package
-     (inherit xorg-server)
-     (version "1.20.10")
-     (source
-       (origin
-         (method url-fetch)
-         (uri (string-append "mirror://xorg/individual/xserver/"
-                             "xorg-server-" version ".tar.bz2"))
-         (sha256
-          (base32
-           "16bwrf0ag41l7jbrllbix8z6avc5yimga7ihvq4ch3a5hb020x4p"))
-         (patches
-          (list
-           ;; See:
-           ;;   https://lists.fedoraproject.org/archives/list/devel@lists.
-           ;;      fedoraproject.org/message/JU655YB7AM4OOEQ4MOMCRHJTYJ76VFOK/
-           (origin
-             (method url-fetch)
-             (uri (string-append
-                   "http://pkgs.fedoraproject.org/cgit/rpms/xorg-x11-server.git"
-                   "/plain/06_use-intel-only-on-pre-gen4.diff"))
-             (sha256
-              (base32
-               "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q"))
-             (file-name "xorg-server-use-intel-only-on-pre-gen4.diff")))))))))
+     (inherit xorg-server))))
+
+(define-public eglexternalplatform
+  (package
+    (name "eglexternalplatform")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/NVIDIA/eglexternalplatform")
+         (commit version)))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "0lr5s2xa1zn220ghmbsiwgmx77l156wk54c7hybia0xpr9yr2nhb"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-pkgconfig
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "eglexternalplatform.pc"
+               (("/usr")
+                (assoc-ref outputs "out")))))
+         (add-after 'install 'revise
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/include/EGL"))
+               (rename-file
+                (string-append out "/interface")
+                (string-append out "/include/EGL"))
+               (mkdir-p (string-append out "/share/pkgconfig"))
+               (rename-file
+                (string-append out "/eglexternalplatform.pc")
+                (string-append out "/share/pkgconfig/eglexternalplatform.pc"))
+               (for-each delete-file-recursively
+                         (list
+                          (string-append out "/samples")
+                          (string-append out "/COPYING")
+                          (string-append out "/README.md")))))))))
+    (synopsis "EGL External Platform interface")
+    (description "EGLExternalPlatform is an specification of the EGL External
+Platform interface for writing EGL platforms and their interactions with modern
+window systems on top of existing low-level EGL platform implementations.  This
+keeps window system implementation specifics out of EGL drivers by using
+application-facing EGL functions.")
+    (home-page "https://github.com/NVIDIA/eglexternalplatform")
+    (license license:expat)))
+
+(define-public egl-wayland
+  (package
+    (name "egl-wayland")
+    (version "1.1.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/NVIDIA/egl-wayland")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1iz86cpc4v7izckrcslllnw0vvvgsxg1sr65yb8s9d0f8xa8djdd"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list libglvnd ;needed for headers
+           mesa-headers pkg-config))
+    (inputs
+     (list mesa wayland wayland-protocols))
+    (propagated-inputs
+     (list eglexternalplatform))
+    (synopsis "EGLStream-based Wayland external platform")
+    (description "EGL-Wayland is an implementation of a EGL External Platform
+library to add client-side Wayland support to EGL on top of EGLDevice and
+EGLStream families of extensions.")
+    (home-page "https://github.com/NVIDIA/egl-wayland")
+    (license license:expat)))
 
 (define-public xorg-server-xwayland
-  (package/inherit xorg-server
+  (package
     (name "xorg-server-xwayland")
-    (inputs
-     `(("wayland" ,wayland)
-       ("wayland-protocols" ,wayland-protocols)
-       ,@(package-inputs xorg-server)))
+    (version "21.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://xorg.freedesktop.org/archive/individual"
+                           "/xserver/xwayland-" version ".tar.xz"))
+       (sha256
+        (base32
+         "18pqvg76grbsyxa3mm3j06i1l8cwb28nbn2gcnqpsk7x75zpbhpb"))))
+    (inputs (list font-dejavu
+                  dbus
+                  egl-wayland
+                  eudev
+                  libfontenc
+                  libdrm
+                  libepoxy
+                  libgcrypt
+                  libtirpc
+                  libxfont2
+                  libxkbfile
+                  pixman
+                  wayland
+                  wayland-protocols
+                  xkbcomp
+                  xkeyboard-config
+                  xorgproto
+                  xtrans))
+    (native-inputs (list pkg-config))
+    (build-system meson-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments xorg-server)
-       ((#:configure-flags flags)
-        `(cons* "--enable-xwayland" "--disable-xorg"
-                "--disable-docs"    "--disable-devel-docs"
-                "--disable-xvfb"    "--disable-xnest"
-                "--disable-xquartz" "--disable-xwin"
-                ,flags))))
-    (synopsis "Xorg server with wayland backend")))
+     `(#:configure-flags
+       (list "-Dxwayland_eglstream=true"
+             (string-append "-Dxkb_dir="
+                            (assoc-ref %build-inputs "xkeyboard-config")
+                            "/share/X11/xkb")
+             (string-append "-Dxkb_bin_dir="
+                            (assoc-ref %build-inputs "xkbcomp") "/bin")
+             ;; The build system insist on providing a default font path; give
+             ;; that of dejavu, the same used for our fontconfig package.
+             (string-append "-Ddefault_font_path="
+                            (assoc-ref %build-inputs "font-dejavu")
+                            "/share/fonts")
+             "-Dxkb_output_dir=/tmp"
+             (format #f "-Dbuilder_string=\"Build ID: ~a ~a\"" ,name ,version)
+             "-Dxcsecurity=true"
+             "-Ddri3=true"
+             "-Dglamor=true"
+             ;; For the log file, etc.
+             "--localstatedir=/var")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-/bin/sh
+                    (lambda _
+                      (substitute* (find-files "." "\\.c$")
+                        (("/bin/sh") (which "sh"))))))))
+    (synopsis "Xorg server with Wayland backend")
+    (description "Xwayland is an X server for running X clients under
+Wayland.")
+    (home-page "https://www.x.org/wiki/")
+    (license license:x11)))
 
 
 ;; packages of height 4 in the propagated-inputs tree
@@ -5508,18 +5508,15 @@ draggable titlebars and borders.")
 (define-public libx11
   (package
     (name "libx11")
-    (version "1.6.10")
+    (version "1.7.2")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libX11-"
-               version
-               ".tar.bz2"))
+        (uri (string-append "mirror://xorg/individual/lib/libX11-"
+                            version ".tar.bz2"))
         (sha256
           (base32
-            "09k2pqmqbn2m1bpgl7jfxyqxaaxsnzbnp2bp8ycmqldqi5ln4j5g"))))
-    (replacement libx11/fixed)
+            "0v7aj8q3rlchdyfwdna7n7vgpyzyir391dlv5rwy9fxagbikbyhw"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ;8 MiB of man pages + XML
@@ -5529,36 +5526,18 @@ draggable titlebars and borders.")
                             (assoc-ref %outputs "doc")
                             "/share/man")
              "--disable-static"
-
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("xorgproto" ,xorgproto)
-        ("libxcb" ,libxcb)))
+      (list xorgproto libxcb))
     (inputs
-      `(("xtrans" ,xtrans)))
+      (list xtrans))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorgproto" ,xorgproto)))
+     (list pkg-config xorgproto))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Core X11 protocol client library")
     (description "Xorg Core X11 protocol client library.")
     (license license:x11)))
 
-(define-public libx11/fixed
-  (package
-    (inherit libx11)
-    (version "1.7.1A")
-    (source
-      (origin
-        (method url-fetch)
-        (uri "mirror://xorg/individual/lib/libX11-1.7.1.tar.bz2")
-        (sha256
-          (base32
-            "0isxad59hvdwggbxqqjjjg3zmih9xiq4d9mdsnqbyb2nmbg46kp6"))))))
-
 ;; packages of height 5 in the propagated-inputs tree
 
 (define-public libxcursor
@@ -5566,34 +5545,28 @@ draggable titlebars and borders.")
     (name "libxcursor")
     (version "1.2.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libXcursor-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "10l7c9fm0jmpkm9ab9dz8r6m1pr87vvgqjnbx1psz50h4pwfklrs"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://xorg/individual/lib/libXcursor-"
+             version
+             ".tar.bz2"))
+       (sha256
+        (base32
+         "10l7c9fm0jmpkm9ab9dz8r6m1pr87vvgqjnbx1psz50h4pwfklrs"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libxrender" ,libxrender)
-        ("libxfixes" ,libxfixes)
-        ("xorgproto" ,xorgproto)))
+     (list libx11 libxrender libxfixes xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
-;; TODO: add XCURSOR_PATH=.../share/icons to profile search paths, so
-;; libXcursor finds cursors installed into a profile.  If we solve bugs
-;; <http://bugs.gnu.org/20255> and <http://bugs.gnu.org/22138>, we can fix
-;; this with a search-path as follows:
-;;
-;;    (native-search-paths
-;;     (list (search-path-specification
-;;            (variable "XCURSOR_PATH")
-;;            (files '("share/icons")))))
+     (list pkg-config))
+    ;; FIXME: The search path below won't be very effective until the bugs
+    ;; <http://bugs.gnu.org/20255> and <http://bugs.gnu.org/22138> are solved.
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XCURSOR_PATH")
+            (files '("share/icons")))))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Cursor management library")
     (description "Xorg Cursor management library.")
@@ -5602,7 +5575,7 @@ draggable titlebars and borders.")
 (define-public libxt
   (package
     (name "libxt")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -5612,7 +5585,7 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-           "0cbqlyssr8aia88c8i7z59z9d0kp3p2hp6683xhz9ndyv8qza7dk"))
+           "0q1x7842r8rcn2m0q4q9f69h4qa097fyizs8brzx5ns62s7w1737"))
         (patches (search-patches "libxt-guix-search-paths.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
@@ -5623,18 +5596,13 @@ draggable titlebars and borders.")
                             (assoc-ref %outputs "doc")
                             "/share/man")
              "--disable-static"
-             ;; Disable zero malloc check that fails when cross-compiling.
-             ,@(if (%current-target-system)
-                   '("--disable-malloc0returnsnull")
-                   '()))))
+             ,@(malloc0-flags))))
     (propagated-inputs
-      `(("libx11" ,libx11)
-        ("libice" ,libice)
-        ("libsm" ,libsm)))
+      (list libx11 libice libsm))
     (inputs
-      `(("libx11" ,libx11)))
+      (list libx11))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg XToolkit Intrinsics library")
     (description "Xorg XToolkit Intrinsics library.")
@@ -5644,7 +5612,7 @@ draggable titlebars and borders.")
 (define-public libxaw
   (package
     (name "libxaw")
-    (version "1.0.13")
+    (version "1.0.14")
     (source
       (origin
         (method url-fetch)
@@ -5654,19 +5622,16 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1kdhxplwrn43d9jp3v54llp05kwx210lrsdvqb6944jp29rhdy4f"))))
+            "13kg59r3086383g1dyhnwxanhp2frssh9062mrgn34nzlf7gkbkn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxpm" ,libxpm)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxpm libxt))
     (inputs
-      `(("xorgproto" ,xorgproto)))
+      (list xorgproto))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+      (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xaw library")
     (description
@@ -5688,13 +5653,9 @@ Intrinsics (Xt) Library.")
          "1iv8kdb18n9vk3is5fyh6l40ipq9mkgx8ppj86byf464vr1ais7l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libxt" ,libxt)
-       ("libxmu" ,libxmu)
-       ("libxext" ,libxext)
-       ("xorgproto" ,xorgproto)))
+     (list libxt libxmu libxext xorgproto))
     (native-inputs
-     `(("bison" ,bison)
-       ("pkg-config" ,pkg-config)))
+     (list bison pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Tab Window Manager for the X Window System")
     (description "Twm is a window manager for the X Window System.
@@ -5718,9 +5679,9 @@ keyboard focus, and user-specified key and pointer button bindings.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util/")
     (synopsis "Core XCB utility functions")
     (description
@@ -5756,13 +5717,11 @@ The XCB util module provides the following libraries:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (propagated-inputs
-     `(("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-image" ,xcb-util-image)))
+     (list xcb-util-renderutil xcb-util-image))
     (home-page "https://cgit.freedesktop.org/xcb/util-cursor/")
     (synopsis "Port of libxcursor")
     (description "XCB-util-cursor is a port of libxcursor.")
@@ -5791,10 +5750,9 @@ The XCB util module provides the following libraries:
      (build-system gnu-build-system)
      (outputs '("out"))
      (inputs
-      `(("util-macros" ,util-macros)
-        ("xcb-proto" ,xcb-proto)))
+      (list util-macros xcb-proto))
      (propagated-inputs
-      `(("libxcb" ,libxcb)))
+      (list libxcb))
      (native-inputs
       `(("autoconf" ,autoconf)
         ("automake" ,automake)
@@ -5840,11 +5798,11 @@ numbers.")
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (inputs
-     `(("xcb-util" ,xcb-util)))
+     (list xcb-util))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-image/")
     (synopsis "XCB port of Xlib's XImage and XShmImage")
     (description
@@ -5876,9 +5834,9 @@ The XCB util-image module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-keysyms/")
     (synopsis "Standard X constants and conversion to/from keycodes")
     (description
@@ -5910,9 +5868,9 @@ The XCB util-keysyms module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-renderutil/")
     (synopsis "Convenience functions for the Render extension")
     (description
@@ -5944,10 +5902,9 @@ The XCB util-renderutil module provides the following library:
     (arguments
      '(#:configure-flags '("--disable-static")))
     (propagated-inputs
-     `(("libxcb" ,libxcb)))
+     (list libxcb))
     (native-inputs
-     `(("m4" ,m4)
-       ("pkg-config" ,pkg-config)))
+     (list m4 pkg-config))
     (home-page "https://cgit.freedesktop.org/xcb/util-wm/")
     (synopsis "Client and window-manager helpers for ICCCM and EWMH")
     (description
@@ -5978,12 +5935,11 @@ The XCB util-wm module provides the following libraries:
                 "1fdbakx59vyh474skjydj1bbglpby3y03nl7mxn0z9v8gdhqz6yy"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xorgproto" ,xorgproto)
-       ("libx11" ,libx11)))
+     (list xorgproto libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (propagated-inputs
-     `(("xauth" ,xauth)))
+     (list xauth))
     (home-page "https://www.x.org/")
     (synopsis "Commands to start the X Window server")
     (description
@@ -6011,13 +5967,11 @@ user-friendly mechanism to start the X server.")
             "0i653s8g25cc0mimkwid9366bqkbyhdyjhckx7bw77j20hzrkfid"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("libxext" ,libxext)
-        ("libxmu" ,libxmu)
-        ("libxt" ,libxt)))
+      (list libxext libxmu libxt))
     (inputs
-     `(("libx11" ,libx11)))
+     (list libx11))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg Xaw3d library")
     (description
@@ -6042,14 +5996,14 @@ Intrinsics (Xt) Library.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxmu" ,libxmu)
-       ("libx11" ,libx11)
-       ("libxaw" ,libxaw)
-       ("libxrender" ,libxrender)
-       ("libxft" ,libxft)
-       ("libxkbfile" ,libxkbfile)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list libxmu
+           libx11
+           libxaw
+           libxrender
+           libxft
+           libxkbfile))
+    (native-inputs
+     (list pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xclock")
     (synopsis "Analog / digital clock for X")
     (description "The xclock program displays the time in analog or digital
@@ -6076,9 +6030,9 @@ form.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Display or capture a magnified part of a X11 screen")
     (description "Xmag displays and captures a magnified snapshot of a portion
@@ -6105,9 +6059,9 @@ of an X11 screen.")
        (list (string-append "--with-appdefaultdir="
                             %output ,%app-defaults-dir))))
     (inputs
-     `(("libxaw" ,libxaw)))
+     (list libxaw))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Displays a message or query in a window")
     (description
@@ -6149,7 +6103,7 @@ to answer a question.  Xmessage can also exit after a specified time.")
                  (("=xterm")
                   (string-append "=" out "/bin/xterm")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("luit" ,luit)
        ("libXft" ,libxft)
@@ -6208,24 +6162,18 @@ programs that cannot use the window system directly.")
        ;; Tests require a running X11 server.
        #:tests? #f))
     (native-inputs
-     `(("perl-extutils-depends" ,perl-extutils-depends)
-       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)))
+     (list perl-extutils-depends perl-extutils-pkgconfig
+           perl-module-install perl-test-deep perl-test-exception))
     (propagated-inputs
-     `(("perl-data-dump" ,perl-data-dump)
-       ("perl-mouse" ,perl-mouse)
-       ("perl-mousex-nativetraits" ,perl-mousex-nativetraits)
-       ("perl-try-tiny" ,perl-try-tiny)
-       ("perl-xml-descent" ,perl-xml-descent)
-       ("perl-xml-simple" ,perl-xml-simple)
-       ("perl-xs-object-magic" ,perl-xs-object-magic)))
+     (list perl-data-dump
+           perl-mouse
+           perl-mousex-nativetraits
+           perl-try-tiny
+           perl-xml-descent
+           perl-xml-simple
+           perl-xs-object-magic))
     (inputs
-     `(("libxcb" ,libxcb)
-       ("xcb-proto" ,xcb-proto)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-wm" ,xcb-util-wm)))
+     (list libxcb xcb-proto xcb-util xcb-util-wm))
     (home-page "https://metacpan.org/release/X11-XCB")
     (synopsis "Perl bindings for libxcb")
     (description
@@ -6275,10 +6223,9 @@ perl programs to display windows and graphics on X11 servers.")
         (base32 "1x3kvic52jgp2mvd5wzrqrprqi82cdk8l4075v8b33ksvj9mjqiw"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-encode-hanextra" ,perl-encode-hanextra)
-       ("perl-module-util" ,perl-module-util)))
+     (list perl-encode-hanextra perl-module-util))
     (propagated-inputs
-     `(("perl-x11-protocol" ,perl-x11-protocol)))
+     (list perl-x11-protocol))
     (home-page "https://metacpan.org/release/X11-Protocol-Other")
     (synopsis "Miscellaneous helpers for @code{X11::Protocol} connections")
     (description
@@ -6304,16 +6251,14 @@ Conventions Manual) and some of the @dfn{EWMH}
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config autoconf automake))
     (inputs
-     `(("libX11" ,libx11)
-       ("libXext" ,libxext)
-       ("libXcomposite" ,libxcomposite)
-       ("libXfixes" ,libxfixes)
-       ("libXdamage" ,libxdamage)
-       ("libXrender" ,libxrender)))
+     (list libx11
+           libxext
+           libxcomposite
+           libxfixes
+           libxdamage
+           libxrender))
     (synopsis "X Compositing manager using RENDER")
     (description "xcompmgr is a sample compositing manager for X servers
 supporting the XFIXES, DAMAGE, RENDER, and COMPOSITE extensions.  It enables
@@ -6371,9 +6316,7 @@ basic eye-candy effects.")
               ("dbus" ,dbus)               ; For dbus-launch command.
               ("python-lz4" ,python-lz4) ; Faster compression than zlib.
               ("python-netifaces" ,python-netifaces)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("pandoc" ,pandoc)
-                     ("python-cython" ,python-cython)))
+    (native-inputs (list pkg-config pandoc python-cython))
     (arguments
      `(#:configure-flags '("--without-Xdummy"
 						   "--without-Xdummy_wrapper"
@@ -6422,7 +6365,8 @@ basic eye-candy effects.")
                ;; The trailing -- is intentional, so we only replace it inside
                ;; a command line.
                (("dbus-launch --")
-                (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch --")))
+                (string-append (search-input-file inputs "/bin/dbus-launch")
+                               " --")))
              ;; /run/user does not exist on guix system
              (substitute* "./xpra/scripts/config.py"
                (("socket-dir.*: \"\",")
@@ -6464,11 +6408,7 @@ X11 servers, Windows, or macOS.")
          "1p7sl0js47ja4glmax93ci59h02ipqw3wxkh4f1qgaz5qjy9nn9l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("anthy" ,anthy)
-       ("libedit" ,libedit)
-       ("libxft" ,libxft)
-       ("m17n-lib" ,m17n-lib)
-       ("ncurses" ,ncurses)))
+     (list anthy libedit libxft m17n-lib ncurses))
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("intltool" ,intltool)
@@ -6535,6 +6475,10 @@ and embedded platforms.")
      `(("gtk" ,gtk+)
        ("gtk" ,gtk+-2)
        ,@(package-inputs uim)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments uim)
+       ((#:configure-flags configure-flags)
+        (append configure-flags (list "CFLAGS=-O2 -g -fcommon")))))
     (synopsis "Multilingual input method framework (GTK+ support)")))
 
 (define-public uim-qt
@@ -6548,7 +6492,8 @@ and embedded platforms.")
      (substitute-keyword-arguments (package-arguments uim)
        ((#:configure-flags configure-flags)
         (append configure-flags (list "--with-qt5-immodule"
-                                      "--with-qt5")))))
+                                      "--with-qt5"
+                                      "CPPFLAGS=-fcommon")))))
     (synopsis "Multilingual input method framework (Qt support)")))
 
 (define-public keynav
@@ -6567,15 +6512,15 @@ and embedded platforms.")
          "1gizjhji3yspxxxvb90js3z1bv18rbf5phxg8rciixpj3cccff8z"))))
     (build-system gnu-build-system)
     (inputs
-     `(("cairo" ,cairo)
-       ("glib" ,glib)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("libxtst" ,libxtst)
-       ("xdotool" ,xdotool)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list cairo
+           glib
+           libx11
+           libxext
+           libxinerama
+           libxtst
+           xdotool))
+    (native-inputs
+     (list pkg-config))
     (arguments
      `(#:tests? #f ;No tests.
        #:phases
@@ -6628,10 +6573,8 @@ mouse click.  You can do everything mouse can do with a keyboard.")
                 "0rya202y87dwl35jnmq8hs3arzdrv5z4vf1xmi0py4rnmhdpszaw"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs `(("libxcomposite" ,libxcomposite)
-              ("libxdamage" ,libxdamage)
-              ("libxrender" ,libxrender)))
+     (list pkg-config))
+    (inputs (list libxcomposite libxdamage libxrender))
     (synopsis "Set the transparency of X11 windows")
     (description "@command{transset} is a simple program for X servers
 supporting the XFIXES, DAMAGE, and COMPOSITE extensions.  It lets the
@@ -6674,9 +6617,7 @@ user set the transparency on a window.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)))
+     (list pkg-config autoconf automake))
     (synopsis "Resize fonts in the BDF format")
     (description
      "This package provides @command{bdfresize}, a command to magnify or
@@ -6735,13 +6676,13 @@ output.")
                                                  "bash")
                                       "/bin/bash"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("bdftopcf" ,bdftopcf)
-       ("bdfresize" ,bdfresize)
-       ("sharutils" ,sharutils)         ; for 'uuencode'
-       ("perl" ,perl)))
+     (list pkg-config
+           bdftopcf
+           bdfresize
+           sharutils ; for 'uuencode'
+           perl))
     (inputs
-     `(("perl" ,perl)))                 ; used by 'ckbcomp'
+     (list perl))                 ; used by 'ckbcomp'
     (synopsis "Set up the Linux console font and keyboard")
     (description
      "console-setup provides the console with the same keyboard
@@ -6778,10 +6719,9 @@ Thai).")
         (base32 "0858wn2p14bxpv9lvaz2bz1rk6zk0g8zgxf8iy595m8fqv4q2fya"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("libpng" ,libpng)
-       ("libxcursor" ,libxcursor)))
+     (list libpng libxcursor))
     (synopsis "Decode X cursors")
     (description
      "xcur2png is a program decomposes an X cursor into a set of PNG images and
@@ -6822,7 +6762,7 @@ changed.")
                (base32
                 "16jqparb33lfq4cvd9l3jgd7fq86fk9gv2ixc8vgqibid6cnhi0x"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("glib" ,glib)
        ("gettext" ,gettext-minimal)
@@ -6899,11 +6839,10 @@ box, and a calendar.  It uses GTK+, and will match your desktop theme.")
                (install-file "xvfb-run" bin)
                (install-file "xvfb-run.1" man)))))))
     (inputs
-     `(("util-linux" ,util-linux)       ; for getopt
-       ("xauth" ,xauth)
-       ("xorg-server" ,xorg-server)))
+     (list util-linux ; for getopt
+           xauth xorg-server))
     (native-inputs
-     `(("xterm" ,xterm)))               ; for the test
+     (list xterm))               ; for the test
     ;; This script is not part of the upstream xorg-server.  It is provided only
     ;; as a patch added to Debian's package.
     (home-page "https://packages.debian.org/sid/xorg-server-source")
@@ -6942,9 +6881,7 @@ the server and cleaning up before returning the exit status of the command.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("imlib2" ,imlib2)
-       ("libx11" ,libx11)
-       ("libxinerama" ,libxinerama)))
+     (list imlib2 libx11 libxinerama))
     (home-page "https://github.com/ttzhou/setroot")
     (synopsis "Simple X background setter inspired by imlibsetroot and feh")
     (description "Setroot is a lightweight X background setter with feh's
diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm
index a7966736e8..ea0ec89b0b 100644
--- a/gnu/packages/zig.scm
+++ b/gnu/packages/zig.scm
@@ -44,11 +44,11 @@
          "zig-use-system-paths.patch"))))
     (build-system cmake-build-system)
     (inputs
-     `(("clang" ,clang-12) ; Clang propagates llvm.
-       ("lld" ,lld)))
+     (list clang-12 ; Clang propagates llvm.
+           lld))
     ;; Zig compiles fine with GCC, but also needs native LLVM libraries.
     (native-inputs
-     `(("llvm" ,llvm-12)))
+     (list llvm-12))
     (arguments
      `(#:configure-flags
        (list ,@(if (%current-target-system)
diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm
index bb9270968c..4d4805c7be 100644
--- a/gnu/packages/zile.scm
+++ b/gnu/packages/zile.scm
@@ -121,8 +121,8 @@ default Emacs configuration, but it carries a much lighter feature set.")
                   "0wlli8hqal9ikmbl3a49kyhzyf164jk6mdbir3bclq2gxszs532d"))
                 (file-name (string-append name "-" version "-checkout"))))
       (inputs
-       `(("guile" ,guile-2.0)
-         ,@(package-inputs zile)))
+       (modify-inputs (package-inputs zile)
+         (prepend guile-2.0)))
       (native-inputs
        `(("m4" ,m4)                               ;for 'bootstrap'
          ("autoconf" ,autoconf)
diff --git a/gnu/packages/zwave.scm b/gnu/packages/zwave.scm
index 2019ec32df..4d8286e334 100644
--- a/gnu/packages/zwave.scm
+++ b/gnu/packages/zwave.scm
@@ -74,12 +74,9 @@
        ;; the device XML database and it's not entirely clear what to get from
        ;; them.
        #:tests? #f))
-    (native-inputs `(("which" ,which)
-                     ("pkg-config" ,pkg-config)
-                     ("perl" ,perl)               ;for tests
-                     ("perl-xml-simple" ,perl-xml-simple)))
-    (inputs `(("hidapi" ,hidapi)
-              ("eudev" ,eudev)))
+    (native-inputs (list which pkg-config perl ;for tests
+                         perl-xml-simple))
+    (inputs (list hidapi eudev))
     (home-page "http://www.openzwave.net/")
     (synopsis "Access Z-Wave devices from C++ programs")
     (description
diff --git a/gnu/services.scm b/gnu/services.scm
index 1655218f2d..68fa4ebb63 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -319,7 +319,13 @@ the resulting list of services.  Each clause must have the form:
 
 where TYPE is a service type, such as 'guix-service-type', and VARIABLE is an
 identifier that is bound within BODY to the value of the service of that
-TYPE.  Consider this example:
+TYPE.
+
+Clauses can also remove services of a given type:
+
+  (delete TYPE)
+
+Consider this example:
 
   (modify-services %base-services
     (guix-service-type config =>
diff --git a/gnu/services/cups.scm b/gnu/services/cups.scm
index d965014cd8..2e86845e51 100644
--- a/gnu/services/cups.scm
+++ b/gnu/services/cups.scm
@@ -419,6 +419,9 @@ queues.  The URI @url{file:///dev/null} is always allowed.")
    (string "lp")
    "Specifies the group name or ID that will be used when executing external
 programs.")
+  (log-file-group
+   (string "lpadmin")
+   "Specifies the group name or ID that will be used for log files.")
   (log-file-perm
    (string "0644")
    "Specifies the permissions for all log files that the scheduler writes.")
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 8e983ef0be..39225a4bd6 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -116,7 +116,7 @@ host	all	all	::1/128 	md5"))
   (ident-file        postgresql-config-file-ident-file
                      (default %default-postgres-ident))
   (socket-directory  postgresql-config-file-socket-directory
-                     (default #false))
+                     (default "/var/run/postgresql"))
   (extra-config      postgresql-config-file-extra-config
                      (default '())))
 
@@ -364,7 +364,7 @@ and stores the database cluster in @var{data-directory}."
   postgresql-role-configuration make-postgresql-role-configuration
   postgresql-role-configuration?
   (host             postgresql-role-configuration-host ;string
-                    (default "/tmp"))
+                    (default "/var/run/postgresql"))
   (log              postgresql-role-configuration-log ;string
                     (default "/var/log/postgresql_roles.log"))
   (roles            postgresql-role-configuration-roles
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index ddb20bd0bb..85a4c3ec9a 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
@@ -301,10 +301,19 @@ tuples, are all set as environment variables when the bus daemon launches it."
   polkit-configuration make-polkit-configuration
   polkit-configuration?
   (polkit   polkit-configuration-polkit           ;file-like
-            (default polkit))
+            (default %default-polkit))
   (actions  polkit-configuration-actions          ;list of file-like
             (default '())))
 
+(define %default-polkit
+  ;; The default polkit package.
+  (let-system (system target)
+    ;; Since mozjs depends on Rust, which is currently x86_64-only, use
+    ;; polkit-duktape on other systems.
+    (if (string-prefix? "x86_64-" (or target system))
+        polkit-mozjs
+        polkit-duktape)))
+
 (define %polkit-accounts
   (list (user-group (name "polkitd") (system? #t))
         (user-account
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 64d0e85301..c6761ca784 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
@@ -40,6 +40,7 @@
   #:use-module (gnu services sound)
   #:use-module ((gnu system file-systems)
                 #:select (%elogind-file-systems file-system))
+  #:autoload   (gnu services sddm) (sddm-service-type)
   #:use-module (gnu system)
   #:use-module (gnu system setuid)
   #:use-module (gnu system shadow)
@@ -1021,7 +1022,7 @@ rules."
                         (use-modules (guix build utils))
                         (let ((directory "/tmp/.X11-unix"))
                           (mkdir-p directory)
-                          (chmod directory #o777))))))
+                          (chmod directory #o1777))))))
 
 ;;;
 ;;; Enlightenment desktop service.
@@ -1187,9 +1188,17 @@ or setting its password with passwd.")))
 ;;; The default set of desktop services.
 ;;;
 
-(define %desktop-services
+(define* (desktop-services-for-system #:optional
+                                      (system (or (%current-target-system)
+                                                  (%current-system))))
   ;; List of services typically useful for a "desktop" use case.
-  (cons* (service gdm-service-type)
+
+  ;; Since GDM depends on Rust (gdm -> gnome-shell -> gjs -> mozjs -> rust)
+  ;; and Rust is currently unavailable on non-x86_64 platforms, default to
+  ;; SDDM there (FIXME).
+  (cons* (if (string-prefix? "x86_64" system)
+             (service gdm-service-type)
+             (service sddm-service-type))
 
          ;; Screen lockers are a pretty useful thing and these are small.
          (screen-locker-service slock)
@@ -1248,4 +1257,7 @@ or setting its password with passwd.")))
 
          %base-services))
 
+(define-syntax %desktop-services
+  (identifier-syntax (desktop-services-for-system)))
+
 ;;; desktop.scm ends here
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 47d50e48da..82a7d25602 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,6 +49,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
   #:use-module (gnu system shadow)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system trivial)
   #:use-module (guix gexp)
   #:use-module (guix store)
@@ -869,6 +871,24 @@ the GNOME desktop environment.")
        (apply execl (string-append #$dbus "/bin/dbus-daemon")
               (program-arguments)))))
 
+;; Wrapper script for Wayland sessions, similar to Xsession.
+;;
+;; See `xinitrc`.  By default, it launches the specified session through a
+;; login shell.  With the default Guix configuration, this should source
+;; /etc/profile, setting up the Guix profile environment variables.  However,
+;; gdm launches its own graphical session through the same method, so we need
+;; to ignore this case, since `gdm` doesn't have a login shell.
+(define gdm-wayland-session-wrapper
+  (program-file
+   "gdm-wayland-session-wrapper"
+   #~((let* ((user (getpw (getuid)))
+	    (name (passwd:name user))
+	    (shell (passwd:shell user))
+	    (args (cdr (command-line))))
+        (if (string=? name "gdm")
+	    (apply execl (cons (car args) args))
+	    (execl shell shell "--login" "-c" (string-join args)))))))
+
 (define-record-type* <gdm-configuration>
   gdm-configuration make-gdm-configuration
   gdm-configuration?
@@ -883,7 +903,10 @@ the GNOME desktop environment.")
   (xorg-configuration gdm-configuration-xorg
                       (default (xorg-configuration)))
   (x-session gdm-configuration-x-session
-             (default (xinitrc))))
+             (default (xinitrc)))
+  (wayland? gdm-configuration-wayland? (default #f))
+  (wayland-session gdm-configuration-wayland-session
+                   (default gdm-wayland-session-wrapper)))
 
 (define (gdm-configuration-file config)
   (mixed-text-file "gdm-custom.conf"
@@ -909,8 +932,9 @@ the GNOME desktop environment.")
                    ;; See also
                    ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39281>.
                    "InitialSetupEnable=false\n"
-                   ;; Enable me once X is working.
-                   "WaylandEnable=false\n"
+                   "WaylandEnable=" (if (gdm-configuration-wayland? config)
+                                        "true"
+                                        "false") "\n"
                    "\n"
                    "[debug]\n"
                    "Enable=" (if (gdm-configuration-debug? config)
@@ -976,7 +1000,17 @@ the GNOME desktop environment.")
                                   ;; can depend on GNOME Shell directly.
                                   (cons #$gnome-shell
                                         '#$(gdm-configuration-gnome-shell-assets
-                                            config)))))))))
+                                            config)))))
+                           ;; Add XCURSOR_PATH so that mutter can find its
+                           ;; cursors.  gdm doesn't login so doesn't source
+                           ;; the corresponding line in /etc/profile.
+                           "XCURSOR_PATH=/run/current-system/profile/share/icons"
+                           (string-append
+                            "GDK_PIXBUF_MODULE_FILE="
+                            #$gnome-shell "/" #$%gdk-pixbuf-loaders-cache-file)
+                           (string-append
+                            "GDM_WAYLAND_SESSION="
+                            #$(gdm-configuration-wayland-session config))))))
          (stop #~(make-kill-destructor))
          (respawn? #t))))
 
diff --git a/gnu/system.scm b/gnu/system.scm
index 9de0f79b44..088c62ddde 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -170,6 +170,7 @@
             %setuid-programs
             %sudoers-specification
             %base-packages
+            %base-packages-artwork
             %base-packages-interactive
             %base-packages-linux
             %base-packages-networking
@@ -266,6 +267,7 @@
                       (default (operating-system-default-essential-services
                                 this-operating-system)))
   (services operating-system-user-services        ; list of services
+            (thunked)                     ;allow for system-dependent services
             (default %base-services))
 
   (pam-services operating-system-pam-services     ; list of PAM services
@@ -789,6 +791,10 @@ of PROVENANCE-SERVICE-TYPE to its services."
   (list ath9k-htc-firmware
         openfwwf-firmware))
 
+(define %base-packages-artwork
+  ;; Default set of artwork packages.
+  (list guix-icons))
+
 (define %base-packages-utils
   ;; Default set of  utilities packages.
  (cons* procps psmisc which
@@ -850,6 +856,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
   ;; Default set of packages globally visible.  It should include anything
   ;; required for basic administrator tasks.
   (append (list e2fsprogs)
+          %base-packages-artwork
           %base-packages-interactive
           %base-packages-linux
           %base-packages-networking
@@ -881,6 +888,19 @@ syntactically correct."
                                "--check" "--file" #$file)
                        (copy-file #$file #$output)))))
 
+(define (os-release)
+  (plain-file "os-release"
+              "\
+NAME=\"Guix System\"
+ID=guix
+PRETTY_NAME=\"Guix System\"
+LOGO=guix-icon
+HOME_URL=\"https://guix.gnu.org\"
+DOCUMENTATION_URL=\"https://guix.gnu.org/en/manual\"
+SUPPORT_URL=\"https://guix.gnu.org/en/help\"
+BUG_REPORT_URL=\"https://lists.gnu.org/mailman/listinfo/bug-guix\"
+"))
+
 (define* (operating-system-etc-service os)
   "Return a <service> that builds a directory containing the static part of
 the /etc directory."
@@ -986,7 +1006,8 @@ then
   source /run/current-system/profile/etc/profile.d/bash_completion.sh
 fi\n")))
     (etc-service
-     `(("services" ,(file-append net-base "/etc/services"))
+     `(("os-release" ,#~#$(os-release))
+       ("services" ,(file-append net-base "/etc/services"))
        ("protocols" ,(file-append net-base "/etc/protocols"))
        ("rpc" ,(file-append net-base "/etc/rpc"))
        ("login.defs" ,#~#$login.defs)
diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index 18bbe5ba32..dcbc93e3bf 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -147,8 +147,7 @@ data format changes between libc versions."
 
 (define %default-locale-libcs
   ;; The libcs for which we build locales by default.
-  ;; List the previous and current libc to ease transition.
-  (list glibc))
+  (list glibc-2.31 glibc))
 
 (define %default-locale-definitions
   ;; Arbitrary set of locales that are built by default.  They are here mostly
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 7c57222716..59f0a02c8b 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -164,7 +165,12 @@ XTerm*utf8: always
 XTerm*metaSendsEscape: true\n"))
         (gdbinit   (plain-file "gdbinit" "\
 # Tell GDB where to look for separate debugging files.
-set debug-file-directory ~/.guix-profile/lib/debug
+guile
+(use-modules (gdb))
+(execute (string-append \"set debug-file-directory \"
+                        (or (getenv \"GDB_DEBUG_FILE_DIRECTORY\")
+                            \"~/.guix-profile/lib/debug\")))
+end
 
 # Authorize extensions found in the store, such as the
 # pretty-printers of libstdc++.
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index f1541cf30c..2487539b61 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -538,7 +538,7 @@ the operating system."
                      ;; Even as root in a VM, the initializer would fail due to
                      ;; lack of privileges if we use a root-directory that is on
                      ;; a file system that is shared with the host (e.g., /tmp).
-                     (root-directory "/guixsd-system-root"))
+                     (root-directory "/guix-system-root"))
                 (set-path-environment-variable "PATH" '("bin" "sbin") '(#+tar))
                 (mkdir root-directory)
                 (initialize root-directory)
@@ -708,8 +708,8 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
             '())
 
      "-no-reboot"
-     "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
-     "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
+     "-object" "rng-random,filename=/dev/urandom,id=guix-vm-rng"
+     "-device" "virtio-rng-pci,rng=guix-vm-rng"
 
      #$@(map virtfs-option shared-fs)
      (format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on"
@@ -787,7 +787,7 @@ it is mostly useful when FULL-BOOT?  is true."
   virtual-machine?
   (operating-system virtual-machine-operating-system) ;<operating-system>
   (qemu             virtual-machine-qemu              ;<package>
-                    (default qemu))
+                    (default qemu-minimal))
   (graphic?         virtual-machine-graphic?      ;Boolean
                     (default #f))
   (memory-size      virtual-machine-memory-size   ;integer (MiB)
diff --git a/gnu/tests/audio.scm b/gnu/tests/audio.scm
index 7bf7d4ef14..8aa6d1e818 100644
--- a/gnu/tests/audio.scm
+++ b/gnu/tests/audio.scm
@@ -48,9 +48,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mpd")
 
           (test-assert "service is running"
@@ -70,8 +68,7 @@
              '(system* #$(file-append mpd-mpc "/bin/mpc"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
   (gexp->derivation "mpd-test" test))
 
 (define %test-mpd
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 9429a10b75..38d4317e52 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -87,6 +87,7 @@ Otherwise assume that there is no password for root."
           (use-modules (gnu build marionette)
                        (guix build syscalls)
                        (srfi srfi-1)
+                       (srfi srfi-19)
                        (srfi srfi-26)
                        (srfi srfi-64)
                        (ice-9 match))
@@ -94,9 +95,7 @@ Otherwise assume that there is no password for root."
           (define marionette
             (make-marionette #$command))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "basic")
 
           #$(and initialization
@@ -198,6 +197,16 @@ info --version")
                      (pk 'services services)
                      '(root #$@(operating-system-shepherd-service-names os)))))
 
+          (test-equal "libc honors /etc/localtime"
+            -7200          ;CEST = GMT+2
+            ;; Assume OS is configured to have a CEST timezone.
+            (let* ((sept-2021 (time-second
+                               (date->time-utc
+                                (make-date 0 0 00 12 01 09 2021 7200)))))
+              (marionette-eval
+               `(tm:gmtoff (localtime ,sept-2021))
+               marionette)))
+
           (test-equal "/var/log/messages is not world-readable"
             #o640                                ;<https://bugs.gnu.org/40405>
             (begin
@@ -486,10 +495,11 @@ info --version")
 
           (test-assert "screendump"
             (begin
-              (marionette-control (string-append "screendump " #$output
-                                                 "/tty1.ppm")
-                                  marionette)
-              (file-exists? "tty1.ppm")))
+              (let ((capture
+                     (string-append #$output "/tty1.ppm")))
+                (marionette-control
+                 (string-append "screendump " capture) marionette)
+                (file-exists? capture))))
 
           (test-assert "screen text"
             (let ((text (marionette-screen-text marionette
@@ -505,8 +515,7 @@ info --version")
                                      "root@"
                                      #$(operating-system-host-name os))))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -642,9 +651,7 @@ in a loop.  See <http://bugs.gnu.org/26931>.")
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cleanup")
 
           (test-assert "dirty service worked"
@@ -657,8 +664,7 @@ in a loop.  See <http://bugs.gnu.org/26931>.")
                                 (scandir "/tmp"))
                              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cleanup" test))
 
@@ -713,9 +719,7 @@ non-ASCII names from /tmp.")
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mcron")
 
           (test-assert "service running"
@@ -752,8 +756,7 @@ non-ASCII names from /tmp.")
                                 result)
                              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -824,6 +827,7 @@ non-ASCII names from /tmp.")
           (mkdir #$output)
           (chdir #$output)
 
+          (test-runner-current (system-test-runner))
           (test-begin "avahi")
 
           (test-assert "nscd PID file is created"
@@ -902,8 +906,7 @@ non-ASCII names from /tmp.")
                     (= (hostent:addrtype result) AF_INET)))))
 
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "nss-mdns" test))
 
diff --git a/gnu/tests/ci.scm b/gnu/tests/ci.scm
index a8b39fcd01..5294514c66 100644
--- a/gnu/tests/ci.scm
+++ b/gnu/tests/ci.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
@@ -70,9 +70,7 @@ HTTP-PORT."
             ;; port 8080 in the host.
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "laminar")
 
           (test-assert "service running"
@@ -116,8 +114,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "laminar-test" test))
 
diff --git a/gnu/tests/cups.scm b/gnu/tests/cups.scm
index 4e922e5023..4c7d78b7c8 100644
--- a/gnu/tests/cups.scm
+++ b/gnu/tests/cups.scm
@@ -54,9 +54,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cups")
 
           ;; Wait for the web interface to become ready.
@@ -80,8 +78,7 @@
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cups-test" test))
 
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index c8d11e10c0..a20de1a8c7 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -61,9 +61,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "memcached")
 
           ;; Wait for memcached to be up and running.
@@ -115,8 +113,7 @@
              '(file-exists? "/var/log/memcached")
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "memcached-test" test))
 
@@ -179,9 +176,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "postgresql")
 
           (test-assert "service running"
@@ -233,16 +228,14 @@
                 (let* ((port (open-pipe*
                               OPEN_READ
                               #$(file-append postgresql "/bin/psql")
-                              "-tAh" "/tmp"
-                              "-c" "SELECT 1 FROM pg_database WHERE
+                              "-tA" "-c" "SELECT 1 FROM pg_database WHERE
  datname='root'"))
                        (output (get-string-all port)))
                   (close-pipe port)
                   (string-contains output "1")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "postgresql-test" test))
 
@@ -283,9 +276,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "mysql")
 
           (test-assert "service running"
@@ -341,8 +332,7 @@
                   output))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "mysql-test" test))
 
diff --git a/gnu/tests/desktop.scm b/gnu/tests/desktop.scm
index 6aa22fd49b..57069c0ede 100644
--- a/gnu/tests/desktop.scm
+++ b/gnu/tests/desktop.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,9 +43,7 @@
           (define marionette
             (make-marionette '(#$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "elogind")
 
           ;; Log in as root on tty1, and check what 'loginctl' returns.
@@ -83,8 +81,7 @@
                       (guest-file "/root/seats")
                       (guest-file "/root/users")))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "elogind" test))
 
diff --git a/gnu/tests/dict.scm b/gnu/tests/dict.scm
index c50e3cd6da..4d9702360c 100644
--- a/gnu/tests/dict.scm
+++ b/gnu/tests/dict.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -79,9 +79,7 @@
           (define %dico-socket
             (socket PF_INET SOCK_STREAM 0))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dicod")
 
           ;; Wait for the service to be started.
@@ -117,8 +115,7 @@
                      (string-contains result "hello")
                      result))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dicod" test))
 
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index 92611b0a8d..bc119988b7 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -76,9 +76,7 @@ inside %DOCKER-OS."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
 
           (test-assert "service running"
@@ -143,8 +141,7 @@ inside %DOCKER-OS."
                         (string->number response4))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "docker-test" test))
 
@@ -221,9 +218,7 @@ inside %DOCKER-OS."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
 
           (test-assert "service running"
@@ -288,8 +283,7 @@ inside %DOCKER-OS."
                          "status" "guix-daemon")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "docker-system-test" test))
 
diff --git a/gnu/tests/file-sharing.scm b/gnu/tests/file-sharing.scm
index 9a8ee6a593..d1343e2eba 100644
--- a/gnu/tests/file-sharing.scm
+++ b/gnu/tests/file-sharing.scm
@@ -91,9 +91,7 @@
                       (port-forwardings
                        `((9091 . ,%transmission-daemon-rpc-port)))))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "transmission-daemon")
 
           ;; Make sure the "transmission" user and group have been created.
@@ -259,8 +257,7 @@
                                   "--auth" auth-string
                                   "--session-info"))))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "transmission-daemon-test" test))
 
diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm
index c29b885a5e..f647e9554c 100644
--- a/gnu/tests/ganeti.scm
+++ b/gnu/tests/ganeti.scm
@@ -112,9 +112,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ganeti")
 
           ;; Ganeti uses the Shepherd to start/stop daemons, so make sure
@@ -244,8 +242,7 @@
                          "destroy" "--yes-do-it"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append "ganeti-" hypervisor "-test") test))
 
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
index af7d8f0b21..69cac7c1aa 100644
--- a/gnu/tests/guix.scm
+++ b/gnu/tests/guix.scm
@@ -74,9 +74,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "guix-build-coordinator")
 
           (test-assert "service running"
@@ -99,8 +97,7 @@
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "guix-build-coordinator-test" test))
 
@@ -199,9 +196,7 @@ host	all	all	::1/128 	trust"))))))
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "guix-data-service")
 
           (test-assert "service running"
@@ -235,8 +230,7 @@ host	all	all	::1/128 	trust"))))))
                             #:decode-body? #t)))
               (response-code response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "guix-data-service-test" test))
 
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 38785ae0bd..9602efebe7 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -925,7 +925,7 @@ reboot\n")
 
   (operating-system
     (host-name "bootroot")
-    (timezone "Europe/Madrid")
+    (timezone "Europe/Paris")
     (locale "en_US.UTF-8")
 
     (bootloader (bootloader-configuration
@@ -1168,7 +1168,7 @@ RAID-0 (stripe) root partition.")
 
   (operating-system
     (host-name "hurd")
-    (timezone "America/Montreal")
+    (timezone "Europe/Paris")
     (locale "en_US.UTF-8")
     (bootloader (bootloader-configuration
                  (bootloader grub-bootloader)
@@ -1679,9 +1679,12 @@ build (current-guix) and then store a couple of full system images.")
     ;; encryption support.  The installer produces a UUID for the partition;
     ;; this "UUID" is explicitly set in 'gui-test-program' to the value shown
     ;; below.
-    (swap-devices (if encrypted?
-                      '()
-                      (list (uuid "11111111-2222-3333-4444-123456789abc"))))
+    (swap-devices
+     (if encrypted?
+         '()
+         (list
+          (swap-space
+           (target (uuid "11111111-2222-3333-4444-123456789abc"))))))
     (services (cons (service dhcp-client-service-type)
                     (operating-system-user-services %minimal-os-on-vda)))))
 
diff --git a/gnu/tests/ldap.scm b/gnu/tests/ldap.scm
index 197c1bfb28..d5403b3539 100644
--- a/gnu/tests/ldap.scm
+++ b/gnu/tests/ldap.scm
@@ -69,9 +69,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ldap")
 
           ;; Set up LDAP directory server
@@ -148,8 +146,7 @@ suffix = dc=example,dc=com")))
                               #$(file-append coreutils "/bin/true")))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "ldap-test" test))
 
diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm
index fc8945b77f..69cb013267 100644
--- a/gnu/tests/linux-modules.scm
+++ b/gnu/tests/linux-modules.scm
@@ -76,23 +76,26 @@ that MODULES are actually loaded."
     (marionette-operating-system
      base-os
      #:imported-modules '((guix combinators))))
+
   (define vm (virtual-machine os))
+
   (define (test script)
     (with-imported-modules '((gnu build marionette))
       #~(begin
           (use-modules (gnu build marionette)
                        (srfi srfi-64))
+
           (define marionette
             (make-marionette (list #$vm)))
-          (mkdir #$output)
-          (chdir #$output)
+
+          (test-runner-current (system-test-runner #$output))
           (test-begin "loadable-kernel-modules")
           (test-assert "script successfully evaluated"
             (marionette-eval
              '(primitive-load #$script)
              marionette))
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
+
   (gexp->derivation "loadable-kernel-modules"
                     (test (modules-loaded?-program os module-names))))
 
diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
index eb8952b33a..f13751b72f 100644
--- a/gnu/tests/mail.scm
+++ b/gnu/tests/mail.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
@@ -85,9 +85,7 @@ match from any for local action inbound
                   code
                   (read-reply-code port))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "opensmptd")
 
           (test-assert "service is running"
@@ -157,8 +155,7 @@ match from any for local action inbound
                          (sleep 1) (wait (- n 1))))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "opensmtpd-test" test))
 
@@ -230,9 +227,7 @@ acl_check_data:
           (define smtp (socket AF_INET SOCK_STREAM 0))
           (define addr (make-socket-address AF_INET INADDR_LOOPBACK 1025))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "exim")
 
           (test-assert "service is running"
@@ -285,8 +280,7 @@ acl_check_data:
                                  (lambda (x) (not (string-prefix? "." x))))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "exim-test" test))
 
@@ -338,9 +332,7 @@ acl_check_data:
           (define message "From: test@example.com\n\
 Subject: Hello Nice to meet you!")
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dovecot")
 
           ;; Wait for dovecot to be up and running.
@@ -399,8 +391,7 @@ Subject: Hello Nice to meet you!")
                        get-string-all)))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dovecot-test" test))
 
@@ -489,9 +480,7 @@ Subject: Hello Nice to meet you!")
           (define message "From: test@example.com\n\
 Subject: Hello Nice to meet you!")
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "getmail")
 
           ;; Wait for dovecot to be up and running.
@@ -577,8 +566,7 @@ Subject: Hello Nice to meet you!")
               marionette)
              message))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "getmail-test" test))
 
diff --git a/gnu/tests/messaging.scm b/gnu/tests/messaging.scm
index 176e3d08cb..202a1c2f73 100644
--- a/gnu/tests/messaging.scm
+++ b/gnu/tests/messaging.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -98,9 +98,7 @@
                     (else
                      (error "file didn't show up" file)))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "xmpp")
 
           ;; Wait for XMPP service to be up and running.
@@ -128,8 +126,7 @@
               (system* freetalk-bin "-s" #$script.ft)
               (host-wait-for-file #$witness)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -191,9 +188,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "bitlbee")
 
           (test-assert "service started"
@@ -231,8 +226,7 @@
               (->bool (string-contains (pk 'message (read-line sock))
                                        "BitlBee"))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "bitlbee-test" test))
 
@@ -264,9 +258,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "quassel")
 
           (test-assert "service started"
@@ -281,8 +273,7 @@
               '(file-exists? "/var/lib/quassel/quasselCert.pem")
               marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "quassel-test" test))
 
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index 8630f5818c..ae0a8e0845 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -63,9 +63,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert "prometheus-node-exporter running"
@@ -87,8 +85,7 @@
                             (http-get "http://localhost:8080")))
                 (response-code response))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -165,9 +162,7 @@ cat ~a | sudo -u zabbix psql zabbix;
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -296,9 +291,7 @@ zabbix||{}
             (test-url "/")
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index 246e0a15fa..2bcc7f70dc 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -197,9 +197,7 @@ port 7, and a dict service on port 2628."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "inetd")
 
           ;; Make sure the PID file is created.
@@ -230,8 +228,7 @@ port 7, and a dict service on port 2628."
                 (close dict)
                 response)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "inetd-test" test))
 
@@ -304,9 +301,7 @@ port 7, and a dict service on port 2628."
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "openvswitch")
 
           ;; Make sure the bridge is created.
@@ -356,8 +351,7 @@ port 7, and a dict service on port 2628."
                   (logand flags IFF_UP)))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "openvswitch-test" test))
 
@@ -421,9 +415,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "dhcpd")
 
           (test-assert "pid file exists"
@@ -456,8 +448,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
                        (current-services))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "dhcpd-test" test))
 
@@ -516,9 +507,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
                        (current-services))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "tor")
 
           ;; Test the usual Tor service.
@@ -550,8 +539,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
               (wait-for-unix-socket "/var/run/tor/socks-sock"
                                     marionette/unix-socks-socket)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "tor-test" test))
 
@@ -643,9 +631,7 @@ COMMIT
                            (loop (read-line in)))))))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "iptables")
 
           (test-equal "iptables-save dumps the same rules that were loaded"
@@ -674,8 +660,7 @@ COMMIT
           ;;      marionette)
           ;;     (wait-for-tcp-port inetd-echo-port marionette #:timeout 5)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "iptables" test))
 
@@ -739,9 +724,7 @@ COMMIT
              marionette))
 
           (marionette-eval '(use-modules (guix ipfs)) marionette)
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "ipfs")
 
           ;; Test the IPFS service.
@@ -761,8 +744,7 @@ COMMIT
             test-bv
             (read-contents (add-data test-bv)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
   (gexp->derivation "ipfs-test" test))
 
 (define %test-ipfs
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index a0c091eadb..7b7dd8c360 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -92,9 +92,7 @@
                        (error "Socket didn't show up: " ,file))))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "rpc-daemon")
 
           ;; Wait for the rpcbind daemon to be up and running.
@@ -130,8 +128,7 @@
              '(zero? (system* "rpcinfo" "-p"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation name test))
 
@@ -198,9 +195,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "nfs-daemon")
           (marionette-eval
            '(begin
@@ -252,8 +247,7 @@
                                      "nfs-server:/" "/remote" "-v"))
                      (file-exists? "/remote/hello")))
              marionette))
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "nfs-server-test" test))
 
@@ -310,9 +304,7 @@ directories can be mounted.")
           (use-modules (gnu build marionette)
                        (srfi srfi-64))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "start-nfs-boot-test")
 
           ;;; Start up NFS server host.
@@ -401,8 +393,7 @@ directories can be mounted.")
               (call-with-input-file "/export/mounts" display))
            server-marionette)
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "nfs-root-fs-test" test))
 
diff --git a/gnu/tests/package-management.scm b/gnu/tests/package-management.scm
index 087eaf923e..fe897944d0 100644
--- a/gnu/tests/package-management.scm
+++ b/gnu/tests/package-management.scm
@@ -60,9 +60,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -105,9 +103,7 @@ derivation {
                                 "guix-test.nix")))
              marionette))
 
-	  (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+	  (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
diff --git a/gnu/tests/reconfigure.scm b/gnu/tests/reconfigure.scm
index 001b5d185a..2fd7c6854d 100644
--- a/gnu/tests/reconfigure.scm
+++ b/gnu/tests/reconfigure.scm
@@ -79,9 +79,7 @@ generation of the system profile."
                           entries)))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "switch-to-system")
 
           (let ((generations-prior (system-generations marionette)))
@@ -112,8 +110,7 @@ generation of the system profile."
                                  "jakob")
                marionette)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "switch-to-system" (test (switch-system-program os))))
 
@@ -153,9 +150,7 @@ Shepherd (PID 1) by unloading obsolete services and loading new services."
                 (map live-service-canonical-name (current-services)))
              marionette))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "upgrade-services")
 
           (let ((services-prior (running-services marionette)))
@@ -176,8 +171,7 @@ Shepherd (PID 1) by unloading obsolete services and loading new services."
             (test-assert "script stopped obsolete service"
               (not (memq 'dummy (running-services marionette)))))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation
    "upgrade-services"
@@ -220,9 +214,7 @@ bootloader's configuration file."
                      (second (string-split (match:substring parameter) #\=)))
                    (list-matches "system=[^ ]*" grub-cfg))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "install-bootloader")
 
           (test-assert "no prior menu entry for system generation"
@@ -236,8 +228,7 @@ bootloader's configuration file."
           (test-assert "menu entry created for system generation"
             (member #$os (generations-in-grub-cfg marionette)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (let* ((bootloader ((compose bootloader-configuration-bootloader
                                operating-system-bootloader)
diff --git a/gnu/tests/rsync.scm b/gnu/tests/rsync.scm
index 24e60d9d9d..91f2b41cec 100644
--- a/gnu/tests/rsync.scm
+++ b/gnu/tests/rsync.scm
@@ -54,9 +54,7 @@ PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "rsync")
 
           ;; Wait for rsync to be up and running.
@@ -106,8 +104,7 @@ PORT."
                     (read-line port))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "rsync-test" test))
 
diff --git a/gnu/tests/security-token.scm b/gnu/tests/security-token.scm
index 1169a4b9fd..07270c0bfd 100644
--- a/gnu/tests/security-token.scm
+++ b/gnu/tests/security-token.scm
@@ -44,9 +44,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "pcscd")
 
           (test-assert "pcscd is alive"
@@ -59,8 +57,7 @@
                        (current-services))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "pcscd" test))
 
diff --git a/gnu/tests/singularity.scm b/gnu/tests/singularity.scm
index 1fc2773a00..f4b9776b48 100644
--- a/gnu/tests/singularity.scm
+++ b/gnu/tests/singularity.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,9 +72,7 @@
           (define marionette
             (make-marionette (list #$(virtual-machine os))))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "singularity")
 
           (test-assert "singularity exec /bin/guile (as root)"
@@ -126,8 +124,7 @@
                         "--debug" "run" #$image "-c" "(use-modules (json))"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "singularity-test" test))
 
diff --git a/gnu/tests/ssh.scm b/gnu/tests/ssh.scm
index 10438ad22a..791ff7b73f 100644
--- a/gnu/tests/ssh.scm
+++ b/gnu/tests/ssh.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
@@ -108,9 +108,7 @@ root with an empty password."
                         ('denied
                          (loop rest)))))))))
 
-            (mkdir #$output)
-            (chdir #$output)
-
+            (test-runner-current (system-test-runner #$output))
             (test-begin "ssh-daemon")
 
             ;; Wait for sshd to be up and running.
@@ -209,8 +207,7 @@ root with an empty password."
                    (channel-request-exec channel "path-witness")
                    (zero? (channel-get-exit-status channel))))))
 
-            (test-end)
-            (exit (= (test-runner-fail-count (test-runner-current)) 0))))))
+            (test-end)))))
 
   (gexp->derivation name test))
 
diff --git a/gnu/tests/telephony.scm b/gnu/tests/telephony.scm
index aeb6500c47..998bdbccf9 100644
--- a/gnu/tests/telephony.scm
+++ b/gnu/tests/telephony.scm
@@ -138,9 +138,7 @@ accounts provisioning feature of the service."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "jami")
 
           (test-assert "service is running"
@@ -341,8 +339,7 @@ accounts provisioning feature of the service."
                              account-details)))))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (if provisioning?
                         "jami-provisioning-test"
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index a7cde1f163..fd3dba88ba 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
 ;;;
@@ -132,9 +132,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "cgit")
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -210,8 +208,7 @@ HTTP-PORT."
             (test-url "/test/tree/does-not-exist" 404)
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "cgit-test" test))
 
@@ -270,9 +267,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "git-http")
 
           ;; Wait for nginx to be up and running.
@@ -302,8 +297,7 @@ HTTP-PORT."
               (call-with-input-file "/tmp/clone/README"
                 get-string-all)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "git-http" test))
 
@@ -367,9 +361,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "gitolite")
 
           ;; Wait for sshd to be up and running.
@@ -410,8 +402,7 @@ HTTP-PORT."
             (test-assert "pushing, and the associated hooks"
               (invoke #$(file-append git "/bin/git") "push")))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "gitolite" test))
 
@@ -458,7 +449,8 @@ HTTP-PORT."
   (define vm
     (virtual-machine
      (operating-system os)
-     (port-forwardings `((8081 . ,http-port)))))
+     (port-forwardings `((8081 . ,http-port)))
+     (memory-size 1024)))
 
   (define test
     (with-imported-modules '((gnu build marionette))
@@ -472,9 +464,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "gitile")
 
           ;; XXX: Shepherd reads the config file *before* binding its control
@@ -540,8 +530,7 @@ HTTP-PORT."
             (test-url "/test/tree/-/does-not-exist" 404)
             (test-url "/does-not-exist" 404))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "gitile-test" test))
 
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index 9f9d3a5e26..628cd0549b 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
@@ -73,9 +73,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "libvirt")
 
           (test-assert "service running"
@@ -107,8 +105,7 @@
                          "-c" "qemu:///system" "connect"))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "libvirt-test" test))
 
@@ -193,9 +190,7 @@
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "childhurd")
 
           (test-assert "service running"
@@ -250,8 +245,7 @@
                  (open-input-pipe #$run-uname-over-ssh)))
              marionette))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "childhurd-test" test))
 
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index fb0713addc..4e8eceaa2b 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -113,9 +113,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert #$(string-append name " service running")
@@ -150,8 +148,7 @@ HTTP-PORT."
                       marionette)))
                  '())
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -309,9 +306,7 @@ HTTP-PORT, along with php-fpm."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "php-fpm")
 
           (test-assert "php-fpm running"
@@ -350,9 +345,7 @@ HTTP-PORT, along with php-fpm."
                   (and matches
                        (match:substring matches 0))))))
 
-          (test-end)
-
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "php-fpm-test" test))
 
@@ -394,9 +387,7 @@ HTTP-PORT, along with php-fpm."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin #$name)
 
           (test-assert "hpcguix-web running"
@@ -422,8 +413,7 @@ HTTP-PORT, along with php-fpm."
                #:times 10
                #:delay 5)))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation (string-append name "-test") test))
 
@@ -487,9 +477,7 @@ HTTP-PORT."
             ;; port 8080 in the host.
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "tailon")
 
           (test-assert "service running"
@@ -513,8 +501,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "tailon-test" test))
 
@@ -631,9 +618,7 @@ HTTP-PORT."
           (define marionette
             (make-marionette (list #$vm)))
 
-          (mkdir #$output)
-          (chdir #$output)
-
+          (test-runner-current (system-test-runner #$output))
           (test-begin "patchwork")
 
           (test-assert "patchwork-postgresql-user-and-service started"
@@ -668,8 +653,7 @@ HTTP-PORT."
              #:times 10
              #:delay 5))
 
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+          (test-end))))
 
   (gexp->derivation "patchwork-test" test))
 
diff --git a/guix/build-system/android-ndk.scm b/guix/build-system/android-ndk.scm
index dbfa626a19..211fd11311 100644
--- a/guix/build-system/android-ndk.scm
+++ b/guix/build-system/android-ndk.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,8 @@
   #:use-module (guix search-paths)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -34,62 +36,51 @@
     (guix build syscalls)
     ,@%gnu-build-system-modules))
 
-(define* (android-ndk-build store name inputs
-                      #:key
-                      (tests? #t)
-                      (test-target #f)
-                      (phases '(@ (guix build android-ndk-build-system)
-                                  %standard-phases))
-                      (outputs '("out"))
-                      (make-flags ''())
-                      (search-paths '())
-                      (system (%current-system))
-                      (guile #f)
-                      (imported-modules %android-ndk-build-system-modules)
-                      (modules '((guix build android-ndk-build-system)
-                                 (guix build utils))))
+(define* (android-ndk-build name inputs
+                            #:key
+                            source
+                            (tests? #t)
+                            (test-target #f)
+                            (phases '%standard-phases)
+                            (outputs '("out"))
+                            (make-flags #~'())
+                            (search-paths '())
+                            (system (%current-system))
+                            (guile #f)
+                            (imported-modules %android-ndk-build-system-modules)
+                            (modules '((guix build android-ndk-build-system)
+                                       (guix build utils))))
   "Build SOURCE using Android NDK, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (android-ndk-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:test-target ,test-target
-                    #:tests? ,tests?
-                    #:phases ,phases
-                    #:make-flags (cons* "-f"
-                                         ,(string-append
-                                          (derivation->output-path
-                                           (car (assoc-ref inputs "android-build")))
-                                          "/share/android/build/core/main.mk")
-                                         ,make-flags)
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          (android-ndk-build #:name #$name
+                             #:source #+source
+                             #:system #$system
+                             #:test-target #$test-target
+                             #:tests? #$tests?
+                             #:phases #$phases
+                             #:bootstrap-scripts '() ;no autotools machinery
+                             #:make-flags
+                             (cons* "-f"
+                                    #$(file-append (gexp-input-thing
+                                                    (car (assoc-ref inputs
+                                                                    "android-build")))
+                                                   "/share/android/build/core/main.mk")
+                                    #$make-flags)
+                             #:outputs #$(outputs->gexp outputs)
+                             #:search-paths '#$(sexp->gexp
+                                                (map search-path-specification->sexp
+                                                     search-paths))
+                             #:inputs #$(input-tuples->gexp inputs)))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad  ((guile (package->derivation (or guile (default-guile))
+                                                   system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
@@ -98,7 +89,7 @@
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:inputs #:native-inputs #:outputs))
+    '(#:target #:inputs #:native-inputs #:outputs))
 
   (and (not target) ;; TODO: support cross-compilation
        (bag
diff --git a/guix/build-system/ant.scm b/guix/build-system/ant.scm
index 1809d1f3d2..08a4c996f9 100644
--- a/guix/build-system/ant.scm
+++ b/guix/build-system/ant.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -73,7 +75,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:jdk #:ant #:zip #:inputs #:native-inputs))
+    '(#:target #:jdk #:ant #:zip #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -94,8 +96,9 @@
          (build ant-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (ant-build store name inputs
+(define* (ant-build name inputs
                     #:key
+                    source
                     (tests? #t)
                     (test-target "check")
                     (configure-flags ''())
@@ -107,8 +110,7 @@
                     (test-exclude (list "**/Abstract*.java"))
                     (source-dir "src")
                     (test-dir "src/test")
-                    (phases '(@ (guix build ant-build-system)
-                                %standard-phases))
+                    (phases '%standard-phases)
                     (outputs '("out"))
                     (search-paths '())
                     (system (%current-system))
@@ -119,49 +121,35 @@
                                (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (ant-build #:name ,name
-                  #:source ,(match (assoc-ref inputs "source")
-                              (((? derivation? source))
-                               (derivation->output-path source))
-                              ((source)
-                               source)
-                              (source
-                               source))
-                  #:make-flags ,make-flags
-                  #:configure-flags ,configure-flags
-                  #:system ,system
-                  #:tests? ,tests?
-                  #:test-target ,test-target
-                  #:build-target ,build-target
-                  #:jar-name ,jar-name
-                  #:main-class ,main-class
-                  #:test-include (list ,@test-include)
-                  #:test-exclude (list ,@test-exclude)
-                  #:source-dir ,source-dir
-                  #:test-dir ,test-dir
-                  #:phases ,phases
-                  #:outputs %outputs
-                  #:search-paths ',(map search-path-specification->sexp
-                                        search-paths)
-                  #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (ant-build #:name #$name
+                     #:source #+source
+                     #:make-flags #$make-flags
+                     #:configure-flags #$configure-flags
+                     #:system #$system
+                     #:tests? #$tests?
+                     #:test-target #$test-target
+                     #:build-target #$build-target
+                     #:jar-name #$jar-name
+                     #:main-class #$main-class
+                     #:test-include (list #$@test-include)
+                     #:test-exclude (list #$@test-exclude)
+                     #:source-dir #$source-dir
+                     #:test-dir #$test-dir
+                     #:phases #$phases
+                     #:outputs #$(outputs->gexp outputs)
+                     #:search-paths '#$(sexp->gexp
+                                        (map search-path-specification->sexp
+                                             search-paths))
+                     #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                               ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad  ((guile (package->derivation (or guile (default-guile))
+                                                   system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define ant-build-system
   (build-system
diff --git a/guix/build-system/asdf.scm b/guix/build-system/asdf.scm
index 4edf6857b5..a0f4634db0 100644
--- a/guix/build-system/asdf.scm
+++ b/guix/build-system/asdf.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,7 +23,8 @@
   #:use-module (guix utils)
   #:use-module (guix memoization)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module ((guix build utils)
                 #:select ((package-name->name+version
@@ -92,46 +94,33 @@
          (build asdf-build/source)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (asdf-build/source store name inputs
+(define* (asdf-build/source name inputs
                             #:key source outputs
-                            (phases '(@ (guix build asdf-build-system)
-                                        %standard-phases/source))
+                            (phases '%standard-phases/source)
                             (search-paths '())
                             (system (%current-system))
                             (guile #f)
                             (imported-modules %asdf-build-system-modules)
                             (modules %asdf-build-modules))
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (asdf-build/source #:name ,name
-                          #:source ,(match (assoc-ref inputs "source")
-                                      (((? derivation? source))
-                                       (derivation->output-path source))
-                                      ((source) source)
-                                      (source source))
-                          #:system ,system
-                          #:phases ,phases
-                          #:outputs %outputs
-                          #:search-paths ',(map search-path-specification->sexp
-                                                search-paths)
-                          #:inputs %build-inputs)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (asdf-build/source #:name #$name
+                             #:source #+source
+                             #:system #$system
+                             #:phases #$phases
+                             #:outputs #$(outputs->gexp outputs)
+                             #:search-paths '#$(sexp->gexp
+                                                (map search-path-specification->sexp
+                                                     search-paths))
+                             #:inputs #$(input-tuples->gexp inputs)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define* (package-with-build-system from-build-system to-build-system
                                     from-prefix to-prefix
@@ -278,19 +267,18 @@ set up using CL source package conventions."
            (arguments (strip-keyword-arguments private-keywords arguments))))))
 
 (define (asdf-build lisp-type)
-  (lambda* (store name inputs
-                  #:key source outputs
-                  (tests? #t)
-                  (asd-files ''())
-                  (asd-systems ''())
-                  (test-asd-file #f)
-                  (phases '(@ (guix build asdf-build-system)
-                              %standard-phases))
-                  (search-paths '())
-                  (system (%current-system))
-                  (guile #f)
-                  (imported-modules %asdf-build-system-modules)
-                  (modules %asdf-build-modules))
+  (lambda* (name inputs
+                 #:key source outputs
+                 (tests? #t)
+                 (asd-files ''())
+                 (asd-systems ''())
+                 (test-asd-file #f)
+                 (phases '%standard-phases)
+                 (search-paths '())
+                 (system (%current-system))
+                 (guile #f)
+                 (imported-modules %asdf-build-system-modules)
+                 (modules %asdf-build-modules))
 
     (define systems
       (if (null? (cadr asd-systems))
@@ -305,44 +293,32 @@ set up using CL source package conventions."
           asd-systems))
 
     (define builder
-      `(begin
-         (use-modules ,@modules)
-         (parameterize ((%lisp (string-append
-                                (assoc-ref %build-inputs ,lisp-type)
-                                "/bin/" ,lisp-type))
-                        (%lisp-type ,lisp-type))
-           (asdf-build #:name ,name
-                       #:source ,(match (assoc-ref inputs "source")
-                                   (((? derivation? source))
-                                    (derivation->output-path source))
-                                   ((source) source)
-                                   (source source))
-                       #:asd-files ,asd-files
-                       #:asd-systems ,systems
-                       #:test-asd-file ,test-asd-file
-                       #:system ,system
-                       #:tests? ,tests?
-                       #:phases ,phases
-                       #:outputs %outputs
-                       #:search-paths ',(map search-path-specification->sexp
-                                             search-paths)
-                       #:inputs %build-inputs))))
-
-    (define guile-for-build
-      (match guile
-        ((? package?)
-         (package-derivation store guile system #:graft? #f))
-        (#f
-         (let* ((distro (resolve-interface '(gnu packages commencement)))
-                (guile (module-ref distro 'guile-final)))
-           (package-derivation store guile system #:graft? #f)))))
-
-    (build-expression->derivation store name builder
-                                  #:inputs inputs
-                                  #:system system
-                                  #:modules imported-modules
-                                  #:outputs outputs
-                                  #:guile-for-build guile-for-build)))
+      (with-imported-modules imported-modules
+        #~(begin
+            (use-modules #$@(sexp->gexp modules))
+            (parameterize ((%lisp (search-input-file
+                                   #$(input-tuples->gexp inputs)
+                                   (string-append "bin/" #$lisp-type)))
+                           (%lisp-type #$lisp-type))
+              (asdf-build #:name #$name
+                          #:source #+source
+                          #:asd-files #$asd-files
+                          #:asd-systems #$systems
+                          #:test-asd-file #$test-asd-file
+                          #:system #$system
+                          #:tests? #$tests?
+                          #:phases #$phases
+                          #:outputs #$(outputs->gexp outputs)
+                          #:search-paths '#$(sexp->gexp
+                                             (map search-path-specification->sexp
+                                                  search-paths))
+                          #:inputs #$(input-tuples->gexp inputs))))))
+
+    (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                    system #:graft? #f)))
+      (gexp->derivation name builder
+                        #:system system
+                        #:guile-for-build guile))))
 
 (define asdf-build-system/sbcl
   (build-system
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index e53d2a7523..60c35eed07 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
@@ -26,7 +26,8 @@
   #:use-module (guix search-paths)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -71,8 +72,9 @@ to NAME and VERSION."
     (guix build json)
     ,@%cargo-utils-modules))
 
-(define* (cargo-build store name inputs
+(define* (cargo-build name inputs
                       #:key
+                      source
                       (tests? #t)
                       (test-target #f)
                       (vendor-dir "guix-vendor")
@@ -82,8 +84,7 @@ to NAME and VERSION."
                       (features ''())
                       (skip-build? #f)
                       (install-source? #t)
-                      (phases '(@ (guix build cargo-build-system)
-                                  %standard-phases))
+                      (phases '%standard-phases)
                       (outputs '("out"))
                       (search-paths '())
                       (system (%current-system))
@@ -94,47 +95,35 @@ to NAME and VERSION."
   "Build SOURCE using CARGO, and with INPUTS."
 
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (cargo-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:test-target ,test-target
-                    #:vendor-dir ,vendor-dir
-                    #:cargo-build-flags ,cargo-build-flags
-                    #:cargo-test-flags ,cargo-test-flags
-                    #:cargo-package-flags ,cargo-package-flags
-                    #:features ,features
-                    #:skip-build? ,skip-build?
-                    #:install-source? ,install-source?
-                    #:tests? ,(and tests? (not skip-build?))
-                    #:phases ,phases
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          (cargo-build #:name #$name
+                       #:source #+source
+                       #:system #$system
+                       #:test-target #$test-target
+                       #:vendor-dir #$vendor-dir
+                       #:cargo-build-flags #$(sexp->gexp cargo-build-flags)
+                       #:cargo-test-flags #$(sexp->gexp cargo-test-flags)
+                       #:cargo-package-flags #$(sexp->gexp cargo-package-flags)
+                       #:features #$(sexp->gexp features)
+                       #:skip-build? #$skip-build?
+                       #:install-source? #$install-source?
+                       #:tests? #$(and tests? (not skip-build?))
+                       #:phases #$(if (pair? phases)
+                                      (sexp->gexp phases)
+                                      phases)
+                       #:outputs #$(outputs->gexp outputs)
+                       #:inputs #$(input-tuples->gexp inputs)
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (gexp->derivation name builder
+                    #:system system
+                    #:target #f
+                    #:guile-for-build guile))
 
 (define (package-cargo-inputs p)
   (apply
@@ -222,7 +211,7 @@ any dependent crates. This can be a benefits:
  - It avoids waiting for quadratic builds from source: cargo always builds
  dependencies within the current workspace. This is largely due to Rust not
  having a stable ABI and other resolutions that cargo applies. This means that
- if we have a depencency chain of X -> Y -> Z and we build each definition
+ if we have a dependency chain of X -> Y -> Z and we build each definition
  independently the following will happen:
   * Cargo will build and test crate Z
   * Cargo will build crate Z in Y's workspace, then build and test Y
@@ -253,7 +242,7 @@ any dependent crates. This can be a benefits:
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:rust #:inputs #:native-inputs #:outputs
+    '(#:target #:rust #:inputs #:native-inputs #:outputs
       #:cargo-inputs #:cargo-development-inputs))
 
   (and (not target) ;; TODO: support cross-compilation
diff --git a/guix/build-system/chicken.scm b/guix/build-system/chicken.scm
index 10f1469e88..07666d1321 100644
--- a/guix/build-system/chicken.scm
+++ b/guix/build-system/chicken.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 raingloom <raingloom@riseup.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -19,7 +20,9 @@
 
 (define-module (guix build-system chicken)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -55,7 +58,7 @@ EXTENSION is the file name extension, such as '.tar.gz'."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:chicken #:inputs #:native-inputs))
+    '(#:target #:chicken #:inputs #:native-inputs))
 
   ;; TODO: cross-compilation support
   (and (not target)
@@ -77,60 +80,45 @@ EXTENSION is the file name extension, such as '.tar.gz'."
          (build chicken-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (chicken-build store name inputs
-                   #:key
-                   (phases '(@ (guix build chicken-build-system)
-                               %standard-phases))
-                   (outputs '("out"))
-                   (search-paths '())
-                   (egg-name "")
-                   (unpack-path "")
-                   (build-flags ''())
-                   (tests? #t)
-                   (system (%current-system))
-                   (guile #f)
-                   (imported-modules %chicken-build-system-modules)
-                   (modules '((guix build chicken-build-system)
-                              (guix build union)
-                              (guix build utils))))
+(define* (chicken-build name inputs
+                        #:key
+                        source
+                        (phases '%standard-phases)
+                        (outputs '("out"))
+                        (search-paths '())
+                        (egg-name "")
+                        (unpack-path "")
+                        (build-flags ''())
+                        (tests? #t)
+                        (system (%current-system))
+                        (guile #f)
+                        (imported-modules %chicken-build-system-modules)
+                        (modules '((guix build chicken-build-system)
+                                   (guix build union)
+                                   (guix build utils))))
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (chicken-build #:name ,name
-                 #:source ,(match (assoc-ref inputs "source")
-                             (((? derivation? source))
-                              (derivation->output-path source))
-                             ((source)
-                              source)
-                             (source
-                              source))
-                 #:system ,system
-                 #:phases ,phases
-                 #:outputs %outputs
-                 #:search-paths ',(map search-path-specification->sexp
-                                       search-paths)
-                 #:egg-name ,egg-name
-                 #:unpack-path ,unpack-path
-                 #:build-flags ,build-flags
-                 #:tests? ,tests?
-                 #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (chicken-build #:name #$name
+                         #:source #+source
+                         #:system #$system
+                         #:phases #$phases
+                         #:outputs #$(outputs->gexp outputs)
+                         #:search-paths '#$(sexp->gexp
+                                            (map search-path-specification->sexp
+                                                 search-paths))
+                         #:egg-name #$egg-name
+                         #:unpack-path #$unpack-path
+                         #:build-flags #$build-flags
+                         #:tests? #$tests?
+                         #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system
-                             #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define chicken-build-system
   (build-system
diff --git a/guix/build-system/clojure.scm b/guix/build-system/clojure.scm
index 607f67aaec..39b7f44e89 100644
--- a/guix/build-system/clojure.scm
+++ b/guix/build-system/clojure.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,7 +25,9 @@
                 #:select (standard-packages)
                 #:prefix gnu:)
 
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module ((guix search-paths)
                 #:select
@@ -102,26 +104,9 @@
              (arguments (strip-keyword-arguments private-keywords
                                                  arguments))))))
 
-(define-with-docs source->output-path
-  "Convert source input to output path."
-  (match-lambda
-    (((? derivation? source))
-     (derivation->output-path source))
-    ((source)
-     source)
-    (source
-     source)))
-
-(define-with-docs maybe-guile->guile
-  "Find the right guile."
-  (match-lambda
-    ((and maybe-guile (? package?))
-     maybe-guile)
-    (#f ; default
-     (@* (gnu packages commencement) guile-final))))
-
-(define* (clojure-build store name inputs
+(define* (clojure-build name inputs
                         #:key
+                        source
                         (source-dirs `',%source-dirs)
                         (test-dirs `',%test-dirs)
                         (compile-dir %compile-dir)
@@ -133,7 +118,7 @@
                         (aot-include `',%aot-include)
                         (aot-exclude `',%aot-exclude)
 
-                        doc-dirs ; no sensible default
+                        doc-dirs                  ; no sensible default
                         (doc-regex %doc-regex)
 
                         (tests? %tests?)
@@ -149,48 +134,45 @@
                         (imported-modules %clojure-build-system-modules)
                         (modules %default-modules))
   "Build SOURCE with INPUTS."
-  (let ((builder `(begin
-                    (use-modules ,@modules)
-                    (clojure-build #:name ,name
-                                   #:source ,(source->output-path
-                                              (assoc-ref inputs "source"))
-
-                                   #:source-dirs ,source-dirs
-                                   #:test-dirs ,test-dirs
-                                   #:compile-dir ,compile-dir
-
-                                   #:jar-names ,jar-names
-                                   #:main-class ,main-class
-                                   #:omit-source? ,omit-source?
-
-                                   #:aot-include ,aot-include
-                                   #:aot-exclude ,aot-exclude
-
-                                   #:doc-dirs ,doc-dirs
-                                   #:doc-regex ,doc-regex
-
-                                   #:tests? ,tests?
-                                   #:test-include ,test-include
-                                   #:test-exclude ,test-exclude
-
-                                   #:phases ,phases
-                                   #:outputs %outputs
-                                   #:search-paths ',(map search-path-spec->sexp
-                                                         search-paths)
-                                   #:system ,system
-                                   #:inputs %build-inputs)))
-
-        (guile-for-build (package-derivation store
-                                             (maybe-guile->guile guile)
-                                             system
-                                             #:graft? #f)))
-
-    (build-expression->derivation store name builder
-                                  #:inputs inputs
-                                  #:system system
-                                  #:modules imported-modules
-                                  #:outputs outputs
-                                  #:guile-for-build guile-for-build)))
+  (define builder
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          (clojure-build #:name #$name
+                         #:source #+source
+
+                         #:source-dirs #$source-dirs
+                         #:test-dirs #$test-dirs
+                         #:compile-dir #$compile-dir
+
+                         #:jar-names #$jar-names
+                         #:main-class #$main-class
+                         #:omit-source? #$omit-source?
+
+                         #:aot-include #$aot-include
+                         #:aot-exclude #$aot-exclude
+
+                         #:doc-dirs #$doc-dirs
+                         #:doc-regex #$doc-regex
+
+                         #:tests? #$tests?
+                         #:test-include #$test-include
+                         #:test-exclude #$test-exclude
+
+                         #:phases #$phases
+                         #:outputs #$(outputs->gexp outputs)
+                         #:search-paths '#$(sexp->gexp
+                                            (map search-path-spec->sexp
+                                                 search-paths))
+                         #:system #$system
+                         #:inputs #$(input-tuples->gexp inputs)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define clojure-build-system
   (build-system
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
index f590b6ea42..2056c04153 100644
--- a/guix/build-system/cmake.scm
+++ b/guix/build-system/cmake.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
@@ -21,7 +21,9 @@
 
 (define-module (guix build-system cmake)
   #:use-module (guix store)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
+  #:use-module (guix monads)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
@@ -61,7 +63,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    `(#:source #:cmake #:inputs #:native-inputs #:outputs
+    `(#:cmake #:inputs #:native-inputs
       ,@(if target '() '(#:target))))
 
   (bag
@@ -95,8 +97,8 @@
     (build (if target cmake-cross-build cmake-build))
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (cmake-build store name inputs
-                      #:key (guile #f)
+(define* (cmake-build name inputs
+                      #:key guile source
                       (outputs '("out")) (configure-flags ''())
                       (search-paths '())
                       (make-flags ''())
@@ -111,8 +113,7 @@
                       (strip-flags ''("--strip-debug"))
                       (strip-directories ''("lib" "lib64" "libexec"
                                             "bin" "sbin"))
-                      (phases '(@ (guix build cmake-build-system)
-                                  %standard-phases))
+                      (phases '%standard-phases)
                       (system (%current-system))
                       (substitutable? #t)
                       (imported-modules %cmake-build-system-modules)
@@ -120,62 +121,57 @@
                                  (guix build utils))))
   "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
 provides a 'CMakeLists.txt' file as its build system."
-  (define builder
-    `(begin
-       (use-modules ,@modules)
-       (cmake-build #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:outputs %outputs
-                    #:inputs %build-inputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:phases ,phases
-                    #:configure-flags ,configure-flags
-                    #:make-flags ,make-flags
-                    #:out-of-source? ,out-of-source?
-                    #:build-type ,build-type
-                    #:tests? ,tests?
-                    #:test-target ,test-target
-                    #:parallel-build? ,parallel-build?
-                    #:parallel-tests? ,parallel-tests?
-                    #:validate-runpath? ,validate-runpath?
-                    #:patch-shebangs? ,patch-shebangs?
-                    #:strip-binaries? ,strip-binaries?
-                    #:strip-flags ,strip-flags
-                    #:strip-directories ,strip-directories)))
+  (define build
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          #$(with-build-variables inputs outputs
+              #~(cmake-build #:source #+source
+                             #:system #$system
+                             #:outputs %outputs
+                             #:inputs %build-inputs
+                             #:search-paths '#$(sexp->gexp
+                                                (map search-path-specification->sexp
+                                                     search-paths))
+                             #:phases #$(if (pair? phases)
+                                            (sexp->gexp phases)
+                                            phases)
+                             #:configure-flags #$(if (pair? configure-flags)
+                                                     (sexp->gexp configure-flags)
+                                                     configure-flags)
+                             #:make-flags #$make-flags
+                             #:out-of-source? #$out-of-source?
+                             #:build-type #$build-type
+                             #:tests? #$tests?
+                             #:test-target #$test-target
+                             #:parallel-build? #$parallel-build?
+                             #:parallel-tests? #$parallel-tests?
+                             #:validate-runpath? #$validate-runpath?
+                             #:patch-shebangs? #$patch-shebangs?
+                             #:strip-binaries? #$strip-binaries?
+                             #:strip-flags #$(sexp->gexp strip-flags)
+                             #:strip-directories #$(sexp->gexp strip-directories))))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:substitutable? substitutable?
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:guile-for-build guile)))
 
 
 ;;;
 ;;; Cross-compilation.
 ;;;
 
-(define* (cmake-cross-build store name
+(define* (cmake-cross-build name
                             #:key
-                            target native-drvs target-drvs
-                            (guile #f)
+                            target
+                            build-inputs target-inputs host-inputs
+                            source guile
                             (outputs '("out"))
                             (configure-flags ''())
                             (search-paths '())
@@ -193,8 +189,7 @@ provides a 'CMakeLists.txt' file as its build system."
                                             "--enable-deterministic-archives"))
                             (strip-directories ''("lib" "lib64" "libexec"
                                                   "bin" "sbin"))
-                            (phases '(@ (guix build cmake-build-system)
-                                        %standard-phases))
+                            (phases '%standard-phases)
                             (substitutable? #t)
                             (system (%current-system))
                             (build (nix-system->gnu-triplet system))
@@ -205,78 +200,58 @@ provides a 'CMakeLists.txt' file as its build system."
 with INPUTS.  This assumes that SOURCE provides a 'CMakeLists.txt' file as its
 build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name path)
-                     `(,name . ,path)))
-                  native-drvs))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          (define %build-host-inputs
+            #+(input-tuples->gexp build-inputs))
+
+          (define %build-target-inputs
+            (append #$(input-tuples->gexp host-inputs)
+                    #+(input-tuples->gexp target-inputs)))
 
-         (define %build-target-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name (? package? pkg) sub ...)
-                     (let ((drv (package-cross-derivation store pkg
-                                                          target system)))
-                       `(,name . ,(apply derivation->output-path drv sub))))
-                    ((name path)
-                     `(,name . ,path)))
-                  target-drvs))
+          (define %build-inputs
+            (append %build-host-inputs %build-target-inputs))
 
-         (cmake-build #:source ,(match (assoc-ref native-drvs "source")
-                                  (((? derivation? source))
-                                   (derivation->output-path source))
-                                  ((source)
-                                   source)
-                                  (source
-                                   source))
-                      #:system ,system
-                      #:build ,build
-                      #:target ,target
-                      #:outputs %outputs
-                      #:inputs %build-target-inputs
-                      #:native-inputs %build-host-inputs
-                      #:search-paths ',(map search-path-specification->sexp
-                                            search-paths)
-                      #:native-search-paths ',(map
-                                               search-path-specification->sexp
-                                               native-search-paths)
-                      #:phases ,phases
-                      #:configure-flags ,configure-flags
-                      #:make-flags ,make-flags
-                      #:out-of-source? ,out-of-source?
-                      #:build-type ,build-type
-                      #:tests? ,tests?
-                      #:test-target ,test-target
-                      #:parallel-build? ,parallel-build?
-                      #:parallel-tests? ,parallel-tests?
-                      #:validate-runpath? ,validate-runpath?
-                      #:patch-shebangs? ,patch-shebangs?
-                      #:strip-binaries? ,strip-binaries?
-                      #:strip-flags ,strip-flags
-                      #:strip-directories ,strip-directories))))
+          (define %outputs
+            #$(outputs->gexp outputs))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                               ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          (cmake-build #:source #+source
+                       #:system #$system
+                       #:build #$build
+                       #:target #$target
+                       #:outputs %outputs
+                       #:inputs %build-target-inputs
+                       #:native-inputs %build-host-inputs
+                       #:search-paths '#$(map search-path-specification->sexp
+                                              search-paths)
+                       #:native-search-paths '#$(map
+                                                 search-path-specification->sexp
+                                                 native-search-paths)
+                       #:phases #$phases
+                       #:configure-flags #$configure-flags
+                       #:make-flags #$make-flags
+                       #:out-of-source? #$out-of-source?
+                       #:build-type #$build-type
+                       #:tests? #$tests?
+                       #:test-target #$test-target
+                       #:parallel-build? #$parallel-build?
+                       #:parallel-tests? #$parallel-tests?
+                       #:validate-runpath? #$validate-runpath?
+                       #:patch-shebangs? #$patch-shebangs?
+                       #:strip-binaries? #$strip-binaries?
+                       #:strip-flags #$strip-flags
+                       #:strip-directories #$strip-directories))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs (append native-drvs target-drvs)
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:substitutable? substitutable?
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:guile-for-build guile)))
 
 (define cmake-build-system
   (build-system
diff --git a/guix/build-system/copy.scm b/guix/build-system/copy.scm
index d1bf8fb654..4894ba46fb 100644
--- a/guix/build-system/copy.scm
+++ b/guix/build-system/copy.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,8 @@
 (define-module (guix build-system copy)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -59,7 +61,7 @@
                 #:rest arguments)
   "Return a bag for NAME from the given arguments."
   (define private-keywords
-    '(#:source #:target #:inputs #:native-inputs))
+    '(#:target #:inputs #:native-inputs))
 
   (bag
     (name name)
@@ -75,8 +77,9 @@
     (build copy-build)
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (copy-build store name inputs
-                     #:key (guile #f)
+(define* (copy-build name inputs
+                     #:key
+                     guile source
                      (outputs '("out"))
                      (install-plan ''(("." "./")))
                      (search-paths '())
@@ -90,49 +93,43 @@
                      (phases '(@ (guix build copy-build-system)
                                  %standard-phases))
                      (system (%current-system))
+                     (target #f)
                      (imported-modules %copy-build-system-modules)
                      (modules '((guix build copy-build-system)
                                 (guix build utils))))
   "Build SOURCE using INSTALL-PLAN, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (copy-build #:source ,(match (assoc-ref inputs "source")
-                               (((?  derivation? source))
-                                (derivation->output-path source))
-                               ((source)
-                                source)
-                               (source
-                                source))
-                   #:system ,system
-                   #:outputs %outputs
-                   #:inputs %build-inputs
-                   #:install-plan ,install-plan
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:phases ,phases
-                   #:out-of-source? ,out-of-source?
-                   #:validate-runpath? ,validate-runpath?
-                   #:patch-shebangs? ,patch-shebangs?
-                   #:strip-binaries? ,strip-binaries?
-                   #:strip-flags ,strip-flags
-                   #:strip-directories ,strip-directories)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          #$(with-build-variables inputs outputs
+              #~(copy-build #:source #+source
+                            #:system #$system
+                            #:outputs %outputs
+                            #:inputs %build-inputs
+                            #:install-plan #$(if (pair? install-plan)
+                                                 (sexp->gexp install-plan)
+                                                 install-plan)
+                            #:search-paths '#$(sexp->gexp
+                                               (map search-path-specification->sexp
+                                                    search-paths))
+                            #:phases #$(if (pair? phases)
+                                           (sexp->gexp phases)
+                                           phases)
+                            #:out-of-source? #$out-of-source?
+                            #:validate-runpath? #$validate-runpath?
+                            #:patch-shebangs? #$patch-shebangs?
+                            #:strip-binaries? #$strip-binaries?
+                            #:strip-flags #$(sexp->gexp strip-flags)
+                            #:strip-directories #$(sexp->gexp strip-directories))))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target #f
+                      #:guile-for-build guile)))
 
 (define copy-build-system
   (build-system
diff --git a/guix/build-system/dub.scm b/guix/build-system/dub.scm
index 5a31a2f51a..55ad7decb8 100644
--- a/guix/build-system/dub.scm
+++ b/guix/build-system/dub.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
@@ -24,7 +24,8 @@
   #:use-module (guix search-paths)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -56,57 +57,43 @@
     (guix build syscalls)
     ,@%gnu-build-system-modules))
 
-(define* (dub-build store name inputs
-                      #:key
-                      (tests? #t)
-                      (test-target #f)
-                      (dub-build-flags ''())
-                      (phases '(@ (guix build dub-build-system)
-                                  %standard-phases))
-                      (outputs '("out"))
-                      (search-paths '())
-                      (system (%current-system))
-                      (guile #f)
-                      (imported-modules %dub-build-system-modules)
-                      (modules '((guix build dub-build-system)
-                                 (guix build utils))))
+(define* (dub-build name inputs
+                    #:key
+                    source
+                    (tests? #t)
+                    (test-target #f)
+                    (dub-build-flags ''())
+                    (phases '%standard-phases)
+                    (outputs '("out"))
+                    (search-paths '())
+                    (system (%current-system))
+                    (guile #f)
+                    (imported-modules %dub-build-system-modules)
+                    (modules '((guix build dub-build-system)
+                               (guix build utils))))
   "Build SOURCE using DUB, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (dub-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:test-target ,test-target
-                    #:dub-build-flags ,dub-build-flags
-                    #:tests? ,tests?
-                    #:phases ,phases
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (dub-build #:name #$name
+                     #:source #+source
+                     #:system #$system
+                     #:test-target #$test-target
+                     #:dub-build-flags #$dub-build-flags
+                     #:tests? #$tests?
+                     #:phases #$phases
+                     #:outputs #$(outputs->gexp outputs)
+                     #:search-paths '#$(sexp->gexp
+                                        (map search-path-specification->sexp
+                                             search-paths))
+                     #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
@@ -118,7 +105,7 @@
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:ldc #:dub #:pkg-config #:inputs #:native-inputs #:outputs))
+    '(#:target #:ldc #:dub #:pkg-config #:inputs #:native-inputs #:outputs))
 
   (and (not target) ;; TODO: support cross-compilation
        (bag
diff --git a/guix/build-system/dune.scm b/guix/build-system/dune.scm
index 5b33ef6841..12100fd8e8 100644
--- a/guix/build-system/dune.scm
+++ b/guix/build-system/dune.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 pukkamustard <pukkamustard@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -21,7 +22,7 @@
 (define-module (guix build-system dune)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module ((guix build-system gnu) #:prefix gnu:)
@@ -72,7 +73,7 @@
            "--profile" "release")))
 
   (define private-keywords
-    '(#:source #:target #:dune #:findlib #:ocaml #:inputs #:native-inputs))
+    '(#:target #:dune #:findlib #:ocaml #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (let ((base (ocaml:lower name
@@ -94,8 +95,9 @@
                        `(#:dune-release-flags ,dune-release-flags)
                        (strip-keyword-arguments private-keywords arguments)))))))
 
-(define* (dune-build store name inputs
-                     #:key (guile #f)
+(define* (dune-build name inputs
+                     #:key
+                     guile source
                      (outputs '("out"))
                      (search-paths '())
                      (build-flags ''())
@@ -122,51 +124,40 @@
   "Build SOURCE using OCAML, and with INPUTS. This assumes that SOURCE
 provides a 'setup.ml' file as its build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (dune-build #:source ,(match (assoc-ref inputs "source")
-                               (((? derivation? source))
-                                (derivation->output-path source))
-                               ((source)
-                                source)
-                               (source
-                                source))
-                   #:system ,system
-                   #:outputs %outputs
-                   #:inputs %build-inputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:phases ,phases
-                   #:test-flags ,test-flags
-                   #:build-flags ,build-flags
-                   #:out-of-source? ,out-of-source?
-                   #:jbuild? ,jbuild?
-                   #:package ,package
-                   #:dune-release-flags ,dune-release-flags
-                   #:tests? ,tests?
-                   #:test-target ,test-target
-                   #:install-target ,install-target
-                   #:validate-runpath? ,validate-runpath?
-                   #:patch-shebangs? ,patch-shebangs?
-                   #:strip-binaries? ,strip-binaries?
-                   #:strip-flags ,strip-flags
-                   #:strip-directories ,strip-directories)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
+          (dune-build #:source #$source
+                      #:system #$system
+                      #:outputs (list #$@(map (lambda (name)
+                                                #~(cons #$name
+                                                        (ungexp output name)))
+                                              outputs))
+                      #:inputs (map (lambda (tuple)
+                                      (apply cons tuple))
+                                    '#$inputs)
+                      #:search-paths '#$(map search-path-specification->sexp
+                                             search-paths)
+                      #:phases #$phases
+                      #:test-flags #$test-flags
+                      #:build-flags #$build-flags
+                      #:out-of-source? #$out-of-source?
+                      #:jbuild? #$jbuild?
+                      #:package #$package
+                      #:dune-release-flags #$dune-release-flags
+                      #:tests? #$tests?
+                      #:test-target #$test-target
+                      #:install-target #$install-target
+                      #:validate-runpath? #$validate-runpath?
+                      #:patch-shebangs? #$patch-shebangs?
+                      #:strip-binaries? #$strip-binaries?
+                      #:strip-flags #$strip-flags
+                      #:strip-directories #$strip-directories))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (gexp->derivation name builder
+                    #:system system
+                    #:target #f
+                    #:guile-for-build guile))
 
 (define dune-build-system
   (build-system
diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm
index ac05ff420e..3df68789ff 100644
--- a/guix/build-system/emacs.scm
+++ b/guix/build-system/emacs.scm
@@ -23,7 +23,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -81,13 +82,12 @@
          (build emacs-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (emacs-build store name inputs
+(define* (emacs-build name inputs
                       #:key source
                       (tests? #f)
                       (parallel-tests? #t)
                       (test-command ''("make" "check"))
-                      (phases '(@ (guix build emacs-build-system)
-                                  %standard-phases))
+                      (phases '%standard-phases)
                       (outputs '("out"))
                       (include (quote %default-include))
                       (exclude (quote %default-exclude))
@@ -100,43 +100,29 @@
                                  (guix build emacs-utils))))
   "Build SOURCE using EMACS, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (emacs-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:test-command ,test-command
-                    #:tests? ,tests?
-                    #:parallel-tests? ,parallel-tests?
-                    #:phases ,phases
-                    #:outputs %outputs
-                    #:include ,include
-                    #:exclude ,exclude
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (emacs-build #:name #$name
+                       #:source #+source
+                       #:system #$system
+                       #:test-command #$test-command
+                       #:tests? #$tests?
+                       #:parallel-tests? #$parallel-tests?
+                       #:phases #$phases
+                       #:outputs #$(outputs->gexp outputs)
+                       #:include #$include
+                       #:exclude #$exclude
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define emacs-build-system
   (build-system
diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm
index d40a4985f8..74dc80b5db 100644
--- a/guix/build-system/font.scm
+++ b/guix/build-system/font.scm
@@ -17,6 +17,9 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build-system font)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix derivations)
@@ -69,13 +72,12 @@
     (build font-build)
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (font-build store name inputs
+(define* (font-build name inputs
                      #:key source
                      (tests? #t)
                      (test-target "test")
                      (configure-flags ''())
-                     (phases '(@ (guix build font-build-system)
-                                 %standard-phases))
+                     (phases '%standard-phases)
                      (outputs '("out"))
                      (search-paths '())
                      (system (%current-system))
@@ -85,41 +87,32 @@
                                 (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (font-build #:name ,name
-                   #:source ,(match (assoc-ref inputs "source")
-                               (((? derivation? source))
-                                (derivation->output-path source))
-                               ((source)
-                                source)
-                               (source
-                                source))
-                   #:configure-flags ,configure-flags
-                   #:system ,system
-                   #:test-target ,test-target
-                   #:tests? ,tests?
-                   #:phases ,phases
-                   #:outputs %outputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          #$(with-build-variables inputs outputs
+              #~(font-build #:name #$name
+                            #:source #+source
+                            #:configure-flags #$configure-flags
+                            #:system #$system
+                            #:test-target #$test-target
+                            #:tests? #$tests?
+                            #:phases #$(if (pair? phases)
+                                           (sexp->gexp phases)
+                                           phases)
+                            #:outputs %outputs
+                            #:search-paths '#$(sexp->gexp
+                                               (map search-path-specification->sexp
+                                                    search-paths))
+                            #:inputs %build-inputs)))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target #f
+                      #:guile-for-build guile)))
 
 (define font-build-system
   (build-system
diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
index fb1f8fb930..aa9703829b 100644
--- a/guix/build-system/glib-or-gtk.scm
+++ b/guix/build-system/glib-or-gtk.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,15 +22,21 @@
 (define-module (guix build-system glib-or-gtk)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
+  #:use-module ((guix build glib-or-gtk-build-system)
+                #:select (%gdk-pixbuf-loaders-cache-file))
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
   #:use-module (ice-9 match)
   #:export (%glib-or-gtk-build-system-modules
             glib-or-gtk-build
-            glib-or-gtk-build-system))
+            glib-or-gtk-cross-build
+            glib-or-gtk-build-system)
+  #:re-export (%gdk-pixbuf-loaders-cache-file)) ;for convenience
 
 ;; Commentary:
 ;;
@@ -80,33 +87,45 @@
                 #:key source inputs native-inputs outputs system target
                 (glib (default-glib))
                 (implicit-inputs? #t)
+                (implicit-cross-inputs? #t)
                 (strip-binaries? #t)
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:glib #:inputs #:native-inputs
-      #:outputs #:implicit-inputs?))
-
-  (and (not target)                               ;XXX: no cross-compilation
-       (bag
-         (name name)
-         (system system)
-         (host-inputs (if source
-                          `(("source" ,source))
-                          '()))
-         (build-inputs `(,@native-inputs
-                         ,@inputs
-                         ("glib:bin" ,glib "bin") ; to compile schemas
-                         ,@(if implicit-inputs?
-                               (standard-packages)
-                               '())))
-         (outputs outputs)
-         (build glib-or-gtk-build)
-         (arguments (strip-keyword-arguments private-keywords arguments)))))
-
-(define* (glib-or-gtk-build store name inputs
-                            #:key (guile #f)
+    `(#:glib #:inputs #:native-inputs
+      #:outputs #:implicit-inputs? #:implicit-cross-inputs?
+      ,@(if target '() '(#:target))))
+
+  (bag
+    (name name)
+    (system system) (target target)
+    (host-inputs `(,@(if source
+                         `(("source" ,source))
+                         '())
+                   ,@(if target
+                         inputs
+                         '())))
+    (build-inputs `(,@native-inputs
+                    ,@(if target '() inputs)
+                    ("glib:bin" ,glib "bin") ; to compile schemas
+                    ;; Keep standard inputs of gnu-build-system.
+                    ,@(if (and target implicit-cross-inputs?)
+                          (standard-cross-packages target 'host)
+                          '())
+                    ,@(if implicit-inputs?
+                          (standard-packages)
+                          '())))
+    ;; Keep standard inputs of 'gnu-build-system'.
+    (target-inputs (if (and target implicit-cross-inputs?)
+                       (standard-cross-packages target 'target)
+                       '()))
+    (outputs outputs)
+    (build (if target glib-or-gtk-cross-build glib-or-gtk-build))
+    (arguments (strip-keyword-arguments private-keywords arguments))))
+
+(define* (glib-or-gtk-build name inputs
+                            #:key guile source
                             (outputs '("out"))
                             (search-paths '())
                             (configure-flags ''())
@@ -132,70 +151,143 @@
                             allowed-references
                             disallowed-references)
   "Build SOURCE with INPUTS.  See GNU-BUILD for more details."
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-derivation store p system)))
-     (((? package? p) output)
-      (derivation->output-path (package-derivation store p system)
-                               output))
-     ((? string? output)
-      output)))
+  (define build
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          #$(with-build-variables inputs outputs
+              #~(glib-or-gtk-build #:source #+source
+                                   #:system #$system
+                                   #:outputs %outputs
+                                   #:inputs %build-inputs
+                                   #:search-paths '#$(sexp->gexp
+                                                      (map search-path-specification->sexp
+                                                           search-paths))
+                                   #:phases #$(if (pair? phases)
+                                                  (sexp->gexp phases)
+                                                  phases)
+                                   #:glib-or-gtk-wrap-excluded-outputs
+                                   #$glib-or-gtk-wrap-excluded-outputs
+                                   #:configure-flags #$configure-flags
+                                   #:make-flags #$make-flags
+                                   #:out-of-source? #$out-of-source?
+                                   #:tests? #$tests?
+                                   #:test-target #$test-target
+                                   #:parallel-build? #$parallel-build?
+                                   #:parallel-tests? #$parallel-tests?
+                                   #:validate-runpath? #$validate-runpath?
+                                   #:patch-shebangs? #$patch-shebangs?
+                                   #:strip-binaries? #$strip-binaries?
+                                   #:strip-flags #$(sexp->gexp strip-flags)
+                                   #:strip-directories
+                                   #$(sexp->gexp strip-directories))))))
 
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:graft? #f
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
+
+(define* (glib-or-gtk-cross-build name
+                                  #:key
+                                  target
+                                  build-inputs target-inputs host-inputs
+                                  guile source
+                                  (outputs '("out"))
+                                  (search-paths '())
+                                  (native-search-paths '())
+                                  (configure-flags ''())
+                                  ;; Disable icon theme cache generation.
+                                  (make-flags ''("gtk_update_icon_cache=true"))
+                                  (out-of-source? #f)
+                                  (tests? #f)
+                                  (test-target "check")
+                                  (parallel-build? #t)
+                                  (parallel-tests? #t)
+                                  (validate-runpath? #t)
+                                  (make-dynamic-linker-cache? #f)
+                                  (patch-shebangs? #t)
+                                  (strip-binaries? #t)
+                                  (strip-flags ''("--strip-debug"))
+                                  (strip-directories ''("lib" "lib64" "libexec"
+                                                        "bin" "sbin"))
+                                  (phases '(@ (guix build glib-or-gtk-build-system)
+                                              %standard-phases))
+                                  (glib-or-gtk-wrap-excluded-outputs ''())
+                                  (system (%current-system))
+                                  (build (nix-system->gnu-triplet system))
+                                  (imported-modules %glib-or-gtk-build-system-modules)
+                                  (modules %default-modules)
+                                  allowed-references
+                                  disallowed-references)
+  "Cross-build SOURCE with INPUTS.  See GNU-BUILD for more details."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (glib-or-gtk-build #:source ,(match (assoc-ref inputs "source")
-                                      (((? derivation? source))
-                                       (derivation->output-path source))
-                                      ((source)
-                                       source)
-                                      (source
-                                       source))
-                          #:system ,system
-                          #:outputs %outputs
-                          #:inputs %build-inputs
-                          #:search-paths ',(map search-path-specification->sexp
-                                                search-paths)
-                          #:phases ,phases
-                          #:glib-or-gtk-wrap-excluded-outputs
-                           ,glib-or-gtk-wrap-excluded-outputs
-                          #:configure-flags ,configure-flags
-                          #:make-flags ,make-flags
-                          #:out-of-source? ,out-of-source?
-                          #:tests? ,tests?
-                          #:test-target ,test-target
-                          #:parallel-build? ,parallel-build?
-                          #:parallel-tests? ,parallel-tests?
-                          #:validate-runpath? ,validate-runpath?
-                          #:patch-shebangs? ,patch-shebangs?
-                          #:strip-binaries? ,strip-binaries?
-                          #:strip-flags ,strip-flags
-                          #:strip-directories ,strip-directories)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:disallowed-references
-                                (and disallowed-references
-                                     (map canonicalize-reference
-                                          disallowed-references))
-                                #:guile-for-build guile-for-build))
+    #~(begin
+        (use-modules #$@(sexp->gexp modules))
+
+        (define %build-host-inputs
+          #+(input-tuples->gexp build-inputs))
+
+        (define %build-target-inputs
+          (append #$(input-tuples->gexp host-inputs)
+                  #+(input-tuples->gexp target-inputs)))
+
+        (define %build-inputs
+          (append %build-host-inputs %build-target-inputs))
+
+        (define %outputs
+          #$(outputs->gexp outputs))
+
+        (glib-or-gtk-build #:source #+source
+                           #:system #$system
+                           #:build #$build
+                           #:target #$target
+                           #:outputs %outputs
+                           #:inputs %build-target-inputs
+                           #:native-inputs %build-host-inputs
+                           #:search-paths '#$(sexp->gexp
+                                              (map search-path-specification->sexp
+                                                   search-paths))
+                           #:native-search-paths '#$(sexp->gexp
+                                                     (map search-path-specification->sexp
+                                                          native-search-paths))
+                           #:phases #$(if (pair? phases)
+                                          (sexp->gexp phases)
+                                          phases)
+                           #:glib-or-gtk-wrap-excluded-outputs
+                           #$glib-or-gtk-wrap-excluded-outputs
+                           #:configure-flags #$configure-flags
+                           #:make-flags #$make-flags
+                           #:out-of-source? #$out-of-source?
+                           #:tests? #$tests?
+                           #:test-target #$test-target
+                           #:parallel-build? #$parallel-build?
+                           #:parallel-tests? #$parallel-tests?
+                           #:validate-runpath? #$validate-runpath?
+                           #:make-dynamic-linker-cache? #$make-dynamic-linker-cache?
+                           #:patch-shebangs? #$patch-shebangs?
+                           #:strip-binaries? #$strip-binaries?
+                           #:strip-flags #$(sexp->gexp strip-flags)
+                           #:strip-directories
+                           #$(sexp->gexp strip-directories))))
+
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:modules imported-modules
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
 
 (define glib-or-gtk-build-system
   (build-system
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 6b481ad45c..651415098e 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix memoization)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
@@ -215,7 +217,7 @@ use `--strip-all' as the arguments to `strip'."
     (arguments
      (let ((a (default-keyword-arguments (package-arguments p)
                 '(#:configure-flags '()
-                  #:strip-flags '("--strip-debug")))))
+                  #:strip-flags '("--strip-unneeded")))))
        (substitute-keyword-arguments a
          ((#:configure-flags flags)
           `(cons* "--disable-shared" "LDFLAGS=-static" ,flags))
@@ -281,7 +283,7 @@ standard packages used as implicit inputs of the GNU build system."
                 #:rest arguments)
   "Return a bag for NAME from the given arguments."
   (define private-keywords
-    `(#:source #:inputs #:native-inputs #:outputs
+    `(#:inputs #:native-inputs #:outputs
       #:implicit-inputs? #:implicit-cross-inputs?
       ,@(if target '() '(#:target))))
 
@@ -324,10 +326,22 @@ standard packages used as implicit inputs of the GNU build system."
   ;; Regexp matching license files.
   "^(COPYING.*|LICEN[CS]E.*|[Ll]icen[cs]e.*|Copy[Rr]ight(\\.(txt|md))?)$")
 
-(define* (gnu-build store name input-drvs
-                    #:key (guile #f)
+(define %bootstrap-scripts
+  ;; Typical names of Autotools "bootstrap" scripts.
+  #~%bootstrap-scripts)
+
+(define %strip-flags
+  #~'("--strip-unneeded" "--enable-deterministic-archives"))
+
+(define %strip-directories
+  #~'("lib" "lib64" "libexec" "bin" "sbin"))
+
+(define* (gnu-build name inputs
+                    #:key
+                    guile source
                     (outputs '("out"))
                     (search-paths '())
+                    (bootstrap-scripts %bootstrap-scripts)
                     (configure-flags ''())
                     (make-flags ''())
                     (out-of-source? #f)
@@ -337,11 +351,10 @@ standard packages used as implicit inputs of the GNU build system."
                     (parallel-tests? #t)
                     (patch-shebangs? #t)
                     (strip-binaries? #t)
-                    (strip-flags ''("--strip-debug"
-                                    "--enable-deterministic-archives"))
-                    (strip-directories ''("lib" "lib64" "libexec"
-                                          "bin" "sbin"))
+                    (strip-flags %strip-flags)
+                    (strip-directories %strip-directories)
                     (validate-runpath? #t)
+                    (make-dynamic-linker-cache? #t)
                     (license-file-regexp %license-file-regexp)
                     (phases '%standard-phases)
                     (locale "en_US.utf8")
@@ -368,78 +381,58 @@ SUBSTITUTABLE? determines whether users may be able to use substitutes of the
 returned derivations, or whether they should always build it locally.
 
 ALLOWED-REFERENCES can be either #f, or a list of packages that the outputs
-are allowed to refer to.  Likewise for DISALLOWED-REFERENCES, which lists
-packages that must not be referenced."
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)))
-     (((? package? p) output)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)
-                               output))
-     ((? string? output)
-      output)))
-
+are allowed to refer to."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (gnu-build #:source ,(match (assoc-ref input-drvs "source")
-                              (((? derivation? source))
-                               (derivation->output-path source))
-                              ((source)
-                               source)
-                              (source
-                               source))
-                  #:system ,system
-                  #:build ,build
-                  #:outputs %outputs
-                  #:inputs %build-inputs
-                  #:search-paths ',(map search-path-specification->sexp
-                                        search-paths)
-                  #:phases ,phases
-                  #:locale ,locale
-                  #:configure-flags ,configure-flags
-                  #:make-flags ,make-flags
-                  #:out-of-source? ,out-of-source?
-                  #:tests? ,tests?
-                  #:test-target ,test-target
-                  #:parallel-build? ,parallel-build?
-                  #:parallel-tests? ,parallel-tests?
-                  #:patch-shebangs? ,patch-shebangs?
-                  #:strip-binaries? ,strip-binaries?
-                  #:validate-runpath? ,validate-runpath?
-                  #:license-file-regexp ,license-file-regexp
-                  #:strip-flags ,strip-flags
-                  #:strip-directories ,strip-directories)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system
-                             #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs input-drvs
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:substitutable? substitutable?
-
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:disallowed-references
-                                (and disallowed-references
-                                     (map canonicalize-reference
-                                          disallowed-references))
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          #$(with-build-variables inputs outputs
+              #~(gnu-build #:source #+source
+                           #:system #$system
+                           #:build #$build
+                           #:outputs %outputs
+                           #:inputs %build-inputs
+                           #:search-paths '#$(sexp->gexp
+                                              (map search-path-specification->sexp
+                                                   search-paths))
+                           #:phases #$(if (pair? phases)
+                                          (sexp->gexp phases)
+                                          phases)
+                           #:locale #$locale
+                           #:bootstrap-scripts #$bootstrap-scripts
+                           #:configure-flags #$(if (pair? configure-flags)
+                                                   (sexp->gexp configure-flags)
+                                                   configure-flags)
+                           #:make-flags #$(if (pair? make-flags)
+                                              (sexp->gexp make-flags)
+                                              make-flags)
+                           #:out-of-source? #$out-of-source?
+                           #:tests? #$tests?
+                           #:test-target #$test-target
+                           #:parallel-build? #$parallel-build?
+                           #:parallel-tests? #$parallel-tests?
+                           #:patch-shebangs? #$patch-shebangs?
+                           #:license-file-regexp #$license-file-regexp
+                           #:strip-binaries? #$strip-binaries?
+                           #:validate-runpath? #$validate-runpath?
+                           #:make-dynamic-linker-cache? #$make-dynamic-linker-cache?
+                           #:license-file-regexp #$license-file-regexp
+                           #:strip-flags #$strip-flags
+                           #:strip-directories #$strip-directories)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    ;; Note: Always pass #:graft? #f.  Without it, ALLOWED-REFERENCES &
+    ;; co. would be interpreted as referring to grafted packages.
+    (gexp->derivation name builder
+                      #:system system
+                      #:target #f
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
 
 
 ;;;
@@ -475,15 +468,16 @@ is one of `host' or `target'."
                    `(("cross-libc:static" ,libc "static"))
                    '()))))))))
 
-(define* (gnu-cross-build store name
+(define* (gnu-cross-build name
                           #:key
-                          target native-drvs target-drvs
-                          (guile #f)
-                          source
+                          target
+                          build-inputs target-inputs host-inputs
+                          guile source
                           (outputs '("out"))
                           (search-paths '())
                           (native-search-paths '())
 
+                          (bootstrap-scripts %bootstrap-scripts)
                           (configure-flags ''())
                           (make-flags ''())
                           (out-of-source? #f)
@@ -492,11 +486,15 @@ is one of `host' or `target'."
                           (parallel-build? #t) (parallel-tests? #t)
                           (patch-shebangs? #t)
                           (strip-binaries? #t)
-                          (strip-flags ''("--strip-debug"
-                                          "--enable-deterministic-archives"))
-                          (strip-directories ''("lib" "lib64" "libexec"
-                                                "bin" "sbin"))
+                          (strip-flags %strip-flags)
+                          (strip-directories %strip-directories)
                           (validate-runpath? #t)
+
+                          ;; We run 'ldconfig' to generate ld.so.cache and it
+                          ;; generally can't do that for cross-built binaries
+                          ;; ("ldconfig: foo.so is for unknown machine 40.").
+                          (make-dynamic-linker-cache? #f)
+
                           (license-file-regexp %license-file-regexp)
                           (phases '%standard-phases)
                           (locale "en_US.utf8")
@@ -510,102 +508,67 @@ is one of `host' or `target'."
   "Cross-build NAME for TARGET, where TARGET is a GNU triplet.  INPUTS are
 cross-built inputs, and NATIVE-INPUTS are inputs that run on the build
 platform."
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-cross-derivation store p
-                                                         target system)))
-     (((? package? p) output)
-      (derivation->output-path (package-cross-derivation store p
-                                                         target system)
-                               output))
-     ((? string? output)
-      output)))
-
   (define builder
-    `(begin
-       (use-modules ,@modules)
-
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                   ((name (? derivation? drv) sub ...)
-                    `(,name . ,(apply derivation->output-path drv sub)))
-                   ((name path)
-                    `(,name . ,path)))
-                  native-drvs))
-
-         (define %build-target-inputs
-           ',(map (match-lambda
-                   ((name (? derivation? drv) sub ...)
-                    `(,name . ,(apply derivation->output-path drv sub)))
-                   ((name (? package? pkg) sub ...)
-                    (let ((drv (package-cross-derivation store pkg
-                                                         target system)))
-                      `(,name . ,(apply derivation->output-path drv sub))))
-                   ((name path)
-                    `(,name . ,path)))
-                  target-drvs))
-
-         (gnu-build #:source ,(match (assoc-ref native-drvs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:build ,build
-                    #:target ,target
-                    #:outputs %outputs
-                    #:inputs %build-target-inputs
-                    #:native-inputs %build-host-inputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:native-search-paths ',(map
-                                             search-path-specification->sexp
-                                             native-search-paths)
-                    #:phases ,phases
-                    #:locale ,locale
-                    #:configure-flags ,configure-flags
-                    #:make-flags ,make-flags
-                    #:out-of-source? ,out-of-source?
-                    #:tests? ,tests?
-                    #:test-target ,test-target
-                    #:parallel-build? ,parallel-build?
-                    #:parallel-tests? ,parallel-tests?
-                    #:patch-shebangs? ,patch-shebangs?
-                    #:strip-binaries? ,strip-binaries?
-                    #:validate-runpath? ,validate-runpath?
-                    #:license-file-regexp ,license-file-regexp
-                    #:strip-flags ,strip-flags
-                    #:strip-directories ,strip-directories))))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs (append native-drvs target-drvs)
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:substitutable? substitutable?
-
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:disallowed-references
-                                (and disallowed-references
-                                     (map canonicalize-reference
-                                          disallowed-references))
-                                #:guile-for-build guile-for-build))
+    #~(begin
+        (use-modules #$@(sexp->gexp modules))
+
+        (define %build-host-inputs
+          #+(input-tuples->gexp build-inputs))
+
+        (define %build-target-inputs
+          (append #$(input-tuples->gexp host-inputs)
+                  #+(input-tuples->gexp target-inputs)))
+
+        (define %build-inputs
+          (append %build-host-inputs %build-target-inputs))
+
+        (define %outputs
+          #$(outputs->gexp outputs))
+
+        (gnu-build #:source #+source
+                   #:system #$system
+                   #:build #$build
+                   #:target #$target
+                   #:outputs %outputs
+                   #:inputs %build-target-inputs
+                   #:native-inputs %build-host-inputs
+                   #:search-paths '#$(sexp->gexp
+                                      (map search-path-specification->sexp
+                                           search-paths))
+                   #:native-search-paths '#$(sexp->gexp
+                                             (map
+                                              search-path-specification->sexp
+                                              native-search-paths))
+                   #:phases #$phases
+                   #:locale #$locale
+                   #:bootstrap-scripts #$bootstrap-scripts
+                   #:configure-flags #$configure-flags
+                   #:make-flags #$make-flags
+                   #:out-of-source? #$out-of-source?
+                   #:tests? #$tests?
+                   #:test-target #$test-target
+                   #:parallel-build? #$parallel-build?
+                   #:parallel-tests? #$parallel-tests?
+                   #:patch-shebangs? #$patch-shebangs?
+                   #:license-file-regexp #$license-file-regexp
+                   #:strip-binaries? #$strip-binaries?
+                   #:validate-runpath? #$validate-runpath?
+                   #:make-dynamic-linker-cache? #$make-dynamic-linker-cache?
+                   #:license-file-regexp #$license-file-regexp
+                   #:strip-flags #$strip-flags
+                   #:strip-directories #$strip-directories)))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:modules imported-modules
+                      #:substitutable? substitutable?
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
 
 (define gnu-build-system
   (build-system
diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm
index 757e63afe9..18824c79d9 100644
--- a/guix/build-system/go.scm
+++ b/guix/build-system/go.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -21,7 +22,9 @@
 
 (define-module (guix build-system go)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -116,7 +119,7 @@ commit hash and its date rather than a proper release tag."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:go #:inputs #:native-inputs))
+    '(#:target #:go #:inputs #:native-inputs))
 
   (bag
     (name name)
@@ -150,10 +153,10 @@ commit hash and its date rather than a proper release tag."
     (build (if target go-cross-build go-build))
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (go-build store name inputs
+(define* (go-build name inputs
                    #:key
-                   (phases '(@ (guix build go-build-system)
-                               %standard-phases))
+                   source
+                   (phases '%standard-phases)
                    (outputs '("out"))
                    (search-paths '())
                    (install-source? #t)
@@ -171,53 +174,38 @@ commit hash and its date rather than a proper release tag."
                               (guix build union)
                               (guix build utils))))
   (define builder
-   `(begin
-      (use-modules ,@modules)
-      (go-build #:name ,name
-                #:source ,(match (assoc-ref inputs "source")
-                                 (((? derivation? source))
-                                  (derivation->output-path source))
-                                 ((source)
-                                  source)
-                                 (source
-                                  source))
-                #:system ,system
-                #:phases ,phases
-                #:outputs %outputs
-                #:goarch ,goarch
-                #:goos ,goos
-                #:search-paths ',(map search-path-specification->sexp
-                                      search-paths)
-                #:install-source? ,install-source?
-                #:import-path ,import-path
-                #:unpack-path ,unpack-path
-                #:build-flags ,build-flags
-                #:tests? ,tests?
-                #:allow-go-reference? ,allow-go-reference?
-                #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
+          (go-build #:name #$name
+                    #:source #+source
+                    #:system #$system
+                    #:phases #$phases
+                    #:outputs #$(outputs->gexp outputs)
+                    #:goarch #$goarch
+                    #:goos #$goos
+                    #:search-paths '#$(sexp->gexp
+                                       (map search-path-specification->sexp
+                                            search-paths))
+                    #:install-source? #$install-source?
+                    #:import-path #$import-path
+                    #:unpack-path #$unpack-path
+                    #:build-flags #$build-flags
+                    #:tests? #$tests?
+                    #:allow-go-reference? #$allow-go-reference?
+                    #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system
-                             #:graft? #f)))))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
-
-(define* (go-cross-build store name
+(define* (go-cross-build name
                          #:key
-                         target native-drvs target-drvs
-                         (phases '(@ (guix build go-build-system)
-                                     %standard-phases))
+                         source target
+                         build-inputs target-inputs host-inputs
+                         (phases '%standard-phases)
                          (outputs '("out"))
                          (search-paths '())
                          (native-search-paths '())
@@ -225,7 +213,7 @@ commit hash and its date rather than a proper release tag."
                          (import-path "")
                          (unpack-path "")
                          (build-flags ''())
-                         (tests? #f) ; nothing can be done
+                         (tests? #f)              ; nothing can be done
                          (allow-go-reference? #f)
                          (system (%current-system))
                          (goarch (first (go-target target)))
@@ -237,73 +225,53 @@ commit hash and its date rather than a proper release tag."
                                     (guix build utils))))
   "Cross-build NAME using GO, where TARGET is a GNU triplet and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name path)
-                     `(,name . ,path)))
-                  native-drvs))
+    #~(begin
+        (use-modules #$@(sexp->gexp modules))
 
-         (define %build-target-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name (? package? pkg) sub ...)
-                     (let ((drv (package-cross-derivation store pkg
-                                                          target system)))
-                       `(,name . ,(apply derivation->output-path drv sub))))
-                    ((name path)
-                     `(,name . ,path)))
-                  target-drvs))
+        (define %build-host-inputs
+          #+(input-tuples->gexp build-inputs))
 
-         (go-build #:name ,name
-                   #:source ,(match (assoc-ref native-drvs "source")
-                                    (((? derivation? source))
-                                     (derivation->output-path source))
-                                    ((source)
-                                     source)
-                                    (source
-                                      source))
-                   #:system ,system
-                   #:phases ,phases
-                   #:outputs %outputs
-                   #:target ,target
-                   #:goarch ,goarch
-                   #:goos ,goos
-                   #:inputs %build-target-inputs
-                   #:native-inputs %build-host-inputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:native-search-paths ',(map
-                                             search-path-specification->sexp
-                                             native-search-paths)
-                   #:install-source? ,install-source?
-                   #:import-path ,import-path
-                   #:unpack-path ,unpack-path
-                   #:build-flags ,build-flags
-                   #:tests? ,tests?
-                   #:allow-go-reference? ,allow-go-reference?
-                   #:inputs %build-inputs))))
+        (define %build-target-inputs
+          (append #$(input-tuples->gexp host-inputs)
+              #+(input-tuples->gexp target-inputs)))
+
+        (define %build-inputs
+          (append %build-host-inputs %build-target-inputs))
 
-    (define guile-for-build
-      (match guile
-             ((? package?)
-              (package-derivation store guile system #:graft? #f))
-             (#f                               ; the default
-              (let* ((distro (resolve-interface '(gnu packages commencement)))
-                     (guile  (module-ref distro 'guile-final)))
-                (package-derivation store guile system #:graft? #f)))))
+        (define %outputs
+          #$(outputs->gexp outputs))
+
+        (go-build #:name #$name
+                  #:source #+source
+                  #:system #$system
+                  #:phases #$phases
+                  #:outputs %outputs
+                  #:target #$target
+                  #:goarch #$goarch
+                  #:goos #$goos
+                  #:inputs %build-target-inputs
+                  #:native-inputs %build-host-inputs
+                  #:search-paths '#$(map search-path-specification->sexp
+                                         search-paths)
+                  #:native-search-paths '#$(map
+                                            search-path-specification->sexp
+                                            native-search-paths)
+                  #:install-source? #$install-source?
+                  #:import-path #$import-path
+                  #:unpack-path #$unpack-path
+                  #:build-flags #$build-flags
+                  #:tests? #$tests?
+                  #:allow-go-reference? #$allow-go-reference?
+                  #:inputs %build-inputs)))
 
-    (build-expression->derivation store name builder
-                                  #:system system
-                                  #:inputs (append native-drvs target-drvs)
-                                  #:outputs outputs
-                                  #:modules imported-modules
-                                  #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:guile-for-build guile)))
 
 (define go-build-system
   (build-system
diff --git a/guix/build-system/guile.scm b/guix/build-system/guile.scm
index 45e735b987..f64f214675 100644
--- a/guix/build-system/guile.scm
+++ b/guix/build-system/guile.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +20,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix monads)
+  #:use-module (guix gexp)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -75,7 +76,7 @@
   ;; denominator between Guile 2.0 and 2.2.
   ''("-Wunbound-variable" "-Warity-mismatch" "-Wformat"))
 
-(define* (guile-build store name inputs
+(define* (guile-build name inputs
                       #:key source
                       (guile #f)
                       (phases '%standard-phases)
@@ -91,47 +92,34 @@
                                  (guix build utils))))
   "Build SOURCE using Guile taken from the native inputs, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (guile-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:source-directory ,source-directory
-                    #:scheme-file-regexp ,scheme-file-regexp
-                    #:not-compiled-file-regexp ,not-compiled-file-regexp
-                    #:compile-flags ,compile-flags
-                    #:phases ,phases
-                    #:system ,system
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
-
-(define* (guile-cross-build store name
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
+
+          (guile-build #:name #$name
+                       #:source #+source
+                       #:source-directory #$source-directory
+                       #:scheme-file-regexp #$scheme-file-regexp
+                       #:not-compiled-file-regexp #$not-compiled-file-regexp
+                       #:compile-flags #$compile-flags
+                       #:phases #$phases
+                       #:system #$system
+                       #:outputs #$(outputs->gexp outputs)
+                       #:inputs #$(input-tuples->gexp inputs)
+                       #:search-paths '#$(map search-path-specification->sexp
+                                              search-paths)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target #f
+                      #:guile-for-build guile)))
+
+(define* (guile-cross-build name
                             #:key
                             (system (%current-system)) target
-                            native-drvs target-drvs
+                            build-inputs target-inputs host-inputs
                             (guile #f)
                             source
                             (outputs '("out"))
@@ -146,68 +134,42 @@
                             (modules '((guix build guile-build-system)
                                        (guix build utils))))
   (define builder
-    `(begin
-       (use-modules ,@modules)
-
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name path)
-                     `(,name . ,path)))
-                  native-drvs))
-
-         (define %build-target-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name (? package? pkg) sub ...)
-                     (let ((drv (package-cross-derivation store pkg
-                                                          target system)))
-                       `(,name . ,(apply derivation->output-path drv sub))))
-                    ((name path)
-                     `(,name . ,path)))
-                  target-drvs))
-
-         (guile-build #:source ,(match (assoc-ref native-drvs "source")
-                                  (((? derivation? source))
-                                   (derivation->output-path source))
-                                  ((source)
-                                   source)
-                                  (source
-                                   source))
-                      #:system ,system
-                      #:target ,target
-                      #:outputs %outputs
-                      #:source-directory ,source-directory
-                      #:not-compiled-file-regexp ,not-compiled-file-regexp
-                      #:compile-flags ,compile-flags
-                      #:inputs %build-target-inputs
-                      #:native-inputs %build-host-inputs
-                      #:search-paths ',(map search-path-specification->sexp
-                                            search-paths)
-                      #:native-search-paths ',(map
-                                               search-path-specification->sexp
-                                               native-search-paths)
-                      #:phases ,phases))))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs (append native-drvs target-drvs)
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:substitutable? substitutable?
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
+
+          (define %build-host-inputs
+            #+(input-tuples->gexp build-inputs))
+
+          (define %build-target-inputs
+            (append #$(input-tuples->gexp host-inputs)
+                    #+(input-tuples->gexp target-inputs)))
+
+          (define %outputs
+            #$(outputs->gexp outputs))
+
+          (guile-build #:source #+source
+                       #:system #$system
+                       #:target #$target
+                       #:outputs %outputs
+                       #:source-directory #$source-directory
+                       #:not-compiled-file-regexp #$not-compiled-file-regexp
+                       #:compile-flags #$compile-flags
+                       #:inputs %build-target-inputs
+                       #:native-inputs %build-host-inputs
+                       #:search-paths '#$(map search-path-specification->sexp
+                                              search-paths)
+                       #:native-search-paths '#$(map
+                                                 search-path-specification->sexp
+                                                 native-search-paths)
+                       #:phases #$phases))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:guile-for-build guile)))
 
 (define guile-build-system
   (build-system
diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm
index 72e37f2b0e..dc83512d30 100644
--- a/guix/build-system/haskell.scm
+++ b/guix/build-system/haskell.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -23,7 +24,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix download)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
@@ -125,7 +127,7 @@ version REVISION."
                                (cons name propagated-names))))))
                        extra-directories))))))))
 
-(define* (haskell-build store name inputs
+(define* (haskell-build name inputs
                         #:key source
                         (haddock? #t)
                         (haddock-flags ''())
@@ -136,8 +138,7 @@ version REVISION."
                         (parallel-build? #f)
                         (configure-flags ''())
                         (extra-directories ''())
-                        (phases '(@ (guix build haskell-build-system)
-                                    %standard-phases))
+                        (phases '%standard-phases)
                         (outputs '("out" "static"))
                         (search-paths '())
                         (system (%current-system))
@@ -148,50 +149,43 @@ version REVISION."
   "Build SOURCE using HASKELL, and with INPUTS.  This assumes that SOURCE
 provides a 'Setup.hs' file as its build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (haskell-build #:name ,name
-                      #:source ,(match (assoc-ref inputs "source")
-                                  (((? derivation? source))
-                                   (derivation->output-path source))
-                                  ((source)
-                                   source)
-                                  (source
-                                   source))
-                      #:cabal-revision ,(match (assoc-ref inputs
-                                                          "cabal-revision")
-                                          (((? derivation? revision))
-                                           (derivation->output-path revision))
-                                          (revision revision))
-                      #:configure-flags ,configure-flags
-                      #:extra-directories ,extra-directories
-                      #:haddock-flags ,haddock-flags
-                      #:system ,system
-                      #:test-target ,test-target
-                      #:tests? ,tests?
-                      #:parallel-build? ,parallel-build?
-                      #:haddock? ,haddock?
-                      #:phases ,phases
-                      #:outputs %outputs
-                      #:search-paths ',(map search-path-specification->sexp
-                                            search-paths)
-                      #:inputs %build-inputs)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          #$(with-build-variables inputs outputs
+              #~(haskell-build #:name #$name
+                               #:source #+source
+
+                               ;; XXX: INPUTS contains <gexp-input> records as
+                               ;; opposed to raw lowerable objects, hence the
+                               ;; use of ungexp-splicing.
+                               #:cabal-revision
+                               #$@(match (assoc-ref inputs "cabal-revision")
+                                    (#f '(#f))
+                                    (lst lst))
+
+                               #:configure-flags #$configure-flags
+                               #:extra-directories #$extra-directories
+                               #:extra-directories #$extra-directories
+                               #:haddock-flags #$haddock-flags
+                               #:system #$system
+                               #:test-target #$test-target
+                               #:tests? #$tests?
+                               #:parallel-build? #$parallel-build?
+                               #:haddock? #$haddock?
+                               #:phases #$phases
+                               #:outputs #$(outputs->gexp outputs)
+                               #:search-paths '#$(sexp->gexp
+                                                  (map search-path-specification->sexp
+                                                       search-paths))
+                               #:inputs #$(input-tuples->gexp inputs))))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define haskell-build-system
   (build-system
diff --git a/guix/build-system/julia.scm b/guix/build-system/julia.scm
index 8ceac090c7..6261f8a55a 100644
--- a/guix/build-system/julia.scm
+++ b/guix/build-system/julia.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,7 +23,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -74,11 +77,11 @@
          (build julia-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (julia-build store name inputs
+(define* (julia-build name inputs
                       #:key source
                       (tests? #t)
-                      (phases '(@ (guix build julia-build-system)
-                                  %standard-phases))
+                      (parallel-tests? #t)
+                      (phases '%standard-phases)
                       (outputs '("out"))
                       (search-paths '())
                       (system (%current-system))
@@ -90,41 +93,28 @@
                                  (guix build utils))))
   "Build SOURCE using Julia, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (julia-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:tests? ,tests?
-                    #:phases ,phases
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs
-                    #:julia-package-name ,julia-package-name
-                    #:julia-package-uuid ,julia-package-uuid)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (julia-build #:name #$name
+                       #:source #+source
+                       #:system #$system
+                       #:tests? #$tests?
+                       #:parallel-tests? #$parallel-tests?
+                       #:phases #$phases
+                       #:outputs #$(outputs->gexp outputs)
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:inputs #$(input-tuples->gexp inputs)
+                       #:julia-package-name #$julia-package-name
+                       #:julia-package-uuid #$julia-package-uuid))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define julia-build-system
   (build-system
diff --git a/guix/build-system/linux-module.scm b/guix/build-system/linux-module.scm
index 548ed7a9aa..0eab919deb 100644
--- a/guix/build-system/linux-module.scm
+++ b/guix/build-system/linux-module.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -21,7 +22,8 @@
 (define-module (guix build-system linux-module)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -115,7 +117,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    `(#:source #:target #:gcc #:kmod #:linux #:inputs #:native-inputs
+    `(#:target #:gcc #:kmod #:linux #:inputs #:native-inputs
       ,@(if target '() '(#:target))))
 
   (bag
@@ -149,13 +151,12 @@
     (build (if target linux-module-build-cross linux-module-build))
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (linux-module-build store name inputs
+(define* (linux-module-build name inputs
                              #:key
-                             target
+                             source target
                              (search-paths '())
                              (tests? #t)
-                             (phases '(@ (guix build linux-module-build-system)
-                                         %standard-phases))
+                             (phases '%standard-phases)
                              (outputs '("out"))
                              (make-flags ''())
                              (parallel-build? #t)
@@ -169,50 +170,37 @@
                                         (guix build utils))))
   "Build SOURCE using LINUX, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (linux-module-build #:name ,name
-                     #:source ,(match (assoc-ref inputs "source")
-                                      (((? derivation? source))
-                                       (derivation->output-path source))
-                                      ((source)
-                                       source)
-                                      (source
-                                       source))
-                     #:source-directory ,source-directory
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:phases ,phases
-                     #:system ,system
-                     #:target ,target
-                     #:arch ,(system->arch (or target system))
-                     #:tests? ,tests?
-                     #:outputs %outputs
-                     #:make-flags ,make-flags
-                     #:parallel-build? ,parallel-build?
-                     #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (linux-module-build #:name #$name
+                              #:source #+source
+                              #:source-directory #$source-directory
+                              #:search-paths '#$(sexp->gexp
+                                                 (map search-path-specification->sexp
+                                                      search-paths))
+                              #:phases #$phases
+                              #:system #$system
+                              #:target #$target
+                              #:arch #$(system->arch (or target system))
+                              #:tests? #$tests?
+                              #:outputs #$(outputs->gexp outputs)
+                              #:make-flags #$make-flags
+                              #:parallel-build? #$parallel-build?
+                              #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build
-                                #:substitutable? substitutable?))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile
+                      #:substitutable? substitutable?)))
 
 (define* (linux-module-build-cross
-          store name
+          name
           #:key
-          target native-drvs target-drvs
+          source target
+          build-inputs target-inputs host-inputs
           (guile #f)
           (outputs '("out"))
           (make-flags ''())
@@ -220,8 +208,7 @@
           (search-paths '())
           (native-search-paths '())
           (tests? #f)
-          (phases '(@ (guix build linux-module-build-system)
-                      %standard-phases))
+          (phases '%standard-phases)
           (system (%current-system))
           (substitutable? #t)
           (imported-modules
@@ -229,70 +216,43 @@
           (modules '((guix build linux-module-build-system)
                      (guix build utils))))
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name path)
-                     `(,name . ,path)))
-                  native-drvs))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-         (define %build-target-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name (? package? pkg) sub ...)
-                     (let ((drv (package-cross-derivation store pkg
-                                                          target system)))
-                       `(,name . ,(apply derivation->output-path drv sub))))
-                    ((name path)
-                     `(,name . ,path)))
-                  target-drvs))
+          (define %build-host-inputs
+            '#+(input-tuples->gexp build-inputs))
 
-         (linux-module-build #:name ,name
-                             #:source ,(match (assoc-ref native-drvs "source")
-                                         (((? derivation? source))
-                                          (derivation->output-path source))
-                                         ((source)
-                                          source)
-                                         (source
-                                          source))
-                             #:system ,system
-                             #:target ,target
-                             #:arch ,(system->arch (or target system))
-                             #:outputs %outputs
-                             #:make-flags ,make-flags
-                             #:inputs %build-target-inputs
-                             #:native-inputs %build-host-inputs
-                             #:search-paths
-                             ',(map search-path-specification->sexp
-                                    search-paths)
-                             #:native-search-paths
-                             ',(map
-                                search-path-specification->sexp
-                                native-search-paths)
-                             #:phases ,phases
-                             #:tests? ,tests?))))
+          (define %build-target-inputs
+            (append #$(input-tuples->gexp host-inputs)
+                    #+(input-tuples->gexp target-inputs)))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          (linux-module-build #:name #$name
+                              #:source #+source
+                              #:system #$system
+                              #:target #$target
+                              #:arch #$(system->arch (or target system))
+                              #:outputs #$(outputs->gexp outputs)
+                              #:make-flags #$make-flags
+                              #:inputs %build-target-inputs
+                              #:native-inputs %build-host-inputs
+                              #:search-paths
+                              '#$(sexp->gexp
+                                  (map search-path-specification->sexp
+                                       search-paths))
+                              #:native-search-paths
+                              '#$(map
+                                  search-path-specification->sexp
+                                  native-search-paths)
+                              #:phases #$phases
+                              #:tests? #$tests?))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs (append native-drvs target-drvs)
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:guile-for-build guile-for-build
-                                #:substitutable? substitutable?))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile
+                      #:substitutable? substitutable?)))
 
 (define linux-module-build-system
   (build-system
diff --git a/guix/build-system/maven.scm b/guix/build-system/maven.scm
index 2dceefccc1..0af5922692 100644
--- a/guix/build-system/maven.scm
+++ b/guix/build-system/maven.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,8 @@
 (define-module (guix build-system maven)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -119,7 +121,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:jdk #:maven #:maven-plugins #:inputs #:native-inputs))
+    '(#:target #:jdk #:maven #:maven-plugins #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -140,70 +142,56 @@
          (build maven-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (maven-build store name inputs
-                       #:key (guile #f)
-                       (outputs '("out"))
-                       (search-paths '())
-                       (out-of-source? #t)
-                       (validate-runpath? #t)
-                       (patch-shebangs? #t)
-                       (strip-binaries? #t)
-                       (exclude %default-exclude)
-                       (local-packages '())
-                       (tests? #t)
-                       (strip-flags ''("--strip-debug"))
-                       (strip-directories ''("lib" "lib64" "libexec"
-                                             "bin" "sbin"))
-                       (phases '(@ (guix build maven-build-system)
-                                   %standard-phases))
-                       (system (%current-system))
-                       (imported-modules %maven-build-system-modules)
-                       (modules '((guix build maven-build-system)
-                                  (guix build maven pom)
-                                  (guix build utils))))
+(define* (maven-build name inputs
+                      #:key
+                      source (guile #f)
+                      (outputs '("out"))
+                      (search-paths '())
+                      (out-of-source? #t)
+                      (validate-runpath? #t)
+                      (patch-shebangs? #t)
+                      (strip-binaries? #t)
+                      (exclude %default-exclude)
+                      (local-packages '())
+                      (tests? #t)
+                      (strip-flags ''("--strip-debug"))
+                      (strip-directories ''("lib" "lib64" "libexec"
+                                            "bin" "sbin"))
+                      (phases '%standard-phases)
+                      (system (%current-system))
+                      (imported-modules %maven-build-system-modules)
+                      (modules '((guix build maven-build-system)
+                                 (guix build maven pom)
+                                 (guix build utils))))
   "Build SOURCE using PATCHELF, and with INPUTS. This assumes that SOURCE
 provides its own binaries."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (maven-build #:source ,(match (assoc-ref inputs "source")
-                                 (((? derivation? source))
-                                  (derivation->output-path source))
-                                 ((source)
-                                  source)
-                                 (source
-                                  source))
-                     #:system ,system
-                     #:outputs %outputs
-                     #:inputs %build-inputs
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:phases ,phases
-                     #:exclude (quote ,exclude)
-                     #:local-packages (quote ,local-packages)
-                     #:tests? ,tests?
-                     #:out-of-source? ,out-of-source?
-                     #:validate-runpath? ,validate-runpath?
-                     #:patch-shebangs? ,patch-shebangs?
-                     #:strip-binaries? ,strip-binaries?
-                     #:strip-flags ,strip-flags
-                     #:strip-directories ,strip-directories)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (maven-build #:source #+source
+                       #:system #$system
+                       #:outputs #$(outputs->gexp outputs)
+                       #:inputs #$(input-tuples->gexp inputs)
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:phases #$phases
+                       #:exclude '#$exclude
+                       #:local-packages '#$local-packages
+                       #:tests? #$tests?
+                       #:out-of-source? #$out-of-source?
+                       #:validate-runpath? #$validate-runpath?
+                       #:patch-shebangs? #$patch-shebangs?
+                       #:strip-binaries? #$strip-binaries?
+                       #:strip-flags #$(sexp->gexp strip-flags)
+                       #:strip-directories #$(sexp->gexp strip-directories)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define maven-build-system
   (build-system
diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm
index b68bcb80de..ba7441a3eb 100644
--- a/guix/build-system/meson.scm
+++ b/guix/build-system/meson.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,9 +20,10 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build-system meson)
-  #:use-module (guix store)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -28,7 +31,8 @@
   #:use-module (guix packages)
   #:use-module (ice-9 match)
   #:export (%meson-build-system-modules
-            meson-build-system))
+            meson-build-system
+            make-cross-file))
 
 ;; Commentary:
 ;;
@@ -38,6 +42,68 @@
 ;;
 ;; Code:
 
+(define (make-machine-alist triplet)
+  "Make an association list describing what should go into
+the ‘host_machine’ section of the cross file when cross-compiling
+for TRIPLET."
+  `((system . ,(cond ((target-hurd? triplet) "gnu")
+                     ((target-linux? triplet) "linux")
+                     ((target-mingw? triplet) "windows")
+                     (#t (error "meson: unknown operating system"))))
+    (cpu_family . ,(cond ((target-x86-32? triplet) "x86")
+                         ((target-x86-64? triplet) "x86_64")
+                         ((target-arm32? triplet) "arm")
+                         ((target-aarch64? triplet) "aarch64")
+                         ((target-powerpc? triplet)
+                          (if (target-64bit? triplet)
+                              "ppc64"
+                              "ppc"))
+                         (#t (error "meson: unknown architecture"))))
+    (cpu . ,(cond ((target-x86-32? triplet) ; i386, ..., i686
+                   (substring triplet 0 4))
+                  ((target-x86-64? triplet) "x86_64")
+                  ((target-aarch64? triplet) "armv8-a")
+                  ((target-arm32? triplet) "armv7")
+                  ;; According to #mesonbuild on OFTC, there does not appear
+                  ;; to be an official-ish list of CPU types recognised by
+                  ;; Meson, the "cpu" field is not used by Meson itself and
+                  ;; most software doesn't look at this field, except perhaps
+                  ;; for selecting optimisations, so set it to something
+                  ;; arbitrary.
+                  (#t "strawberries")))
+    (endian . ,(cond ((string-prefix? "powerpc64le-" triplet) "little")
+                     ((string-prefix? "mips64el-" triplet) "little")
+                     ((target-x86-32? triplet) "little")
+                     ((target-x86-64? triplet) "little")
+                     ;; At least in Guix.  Aarch64 and 32-bit arm
+                     ;; have a big-endian mode as well.
+                     ((target-arm? triplet) "little")
+                     (#t (error "meson: unknown architecture"))))))
+
+(define (make-binaries-alist triplet)
+  "Make an associatoin list describing what should go into
+the ‘binaries’ section of the cross file when cross-compiling for
+TRIPLET."
+  `((c . ,(cc-for-target triplet))
+    (cpp . ,(cxx-for-target triplet))
+    (pkgconfig . ,(pkg-config-for-target triplet))
+    (objcopy . ,(string-append triplet "-objcopy"))
+    (ar . ,(string-append triplet "-ar"))
+    (ld . ,(string-append triplet "-ld"))
+    (strip . ,(string-append triplet "-strip"))))
+
+(define (make-cross-file triplet)
+  (computed-file "cross-file"
+    (with-imported-modules '((guix build meson-configuration))
+      #~(begin
+          (use-modules (guix build meson-configuration))
+          (call-with-output-file #$output
+            (lambda (port)
+              (write-section-header port "host_machine")
+              (write-assignments port '#$(make-machine-alist triplet))
+              (write-section-header port "binaries")
+              (write-assignments port '#$(make-binaries-alist triplet))))))))
+
 (define %meson-build-system-modules
   ;; Build-side modules imported by default.
   `((guix build meson-build-system)
@@ -55,7 +121,7 @@
   "Return the default meson package."
   ;; Lazily resolve the binding to avoid a circular dependency.
   (let ((module (resolve-interface '(gnu packages build-tools))))
-    (module-ref module 'meson-for-build)))
+    (module-ref module 'meson)))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
@@ -66,33 +132,44 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    `(#:source #:meson #:ninja #:inputs #:native-inputs #:outputs #:target))
-
-  (and (not target) ;; TODO: add support for cross-compilation.
-       (bag
-         (name name)
-         (system system)
-         (build-inputs `(("meson" ,meson)
-                         ("ninja" ,ninja)
-                         ,@native-inputs
-                         ,@inputs
-                         ;; Keep the standard inputs of 'gnu-build-system'.
-                         ,@(standard-packages)))
-         (host-inputs (if source
-                          `(("source" ,source))
-                          '()))
-         (outputs outputs)
-         (build meson-build)
-         (arguments (strip-keyword-arguments private-keywords arguments)))))
-
-(define* (meson-build store name inputs
-                      #:key (guile #f)
+    `(#:meson #:ninja #:inputs #:native-inputs #:outputs
+      ,@(if target
+            '()
+            '(#:target))))
+
+  (bag
+    (name name)
+    (system system) (target target)
+    (build-inputs `(("meson" ,meson)
+                    ("ninja" ,ninja)
+                    ,@native-inputs
+                    ,@(if target '() inputs)
+                    ;; Keep the standard inputs of 'gnu-build-system'.
+                    ,@(if target
+                          (standard-cross-packages target 'host)
+                          '())
+                    ,@(standard-packages)))
+    (host-inputs `(,@(if source
+                         `(("source" ,source))
+                         '())
+                   ,@(if target inputs '())))
+    ;; Keep the standard inputs of 'gnu-buid-system'.
+    (target-inputs (if target
+                       (standard-cross-packages target 'target)
+                       '()))
+    (outputs outputs)
+    (build (if target meson-cross-build meson-build))
+    (arguments (strip-keyword-arguments private-keywords arguments))))
+
+(define* (meson-build name inputs
+                      #:key
+                      guile source
                       (outputs '("out"))
                       (configure-flags ''())
                       (search-paths '())
                       (build-type "debugoptimized")
                       (tests? #t)
-                      (test-target "test")
+                      (test-options ''())
                       (glib-or-gtk? #f)
                       (parallel-build? #t)
                       (parallel-tests? #f)
@@ -104,8 +181,7 @@
                                             "bin" "sbin"))
                       (elf-directories ''("lib" "lib64" "libexec"
                                           "bin" "sbin"))
-                      (phases '(@ (guix build meson-build-system)
-                                  %standard-phases))
+                      (phases '%standard-phases)
                       (system (%current-system))
                       (imported-modules %meson-build-system-modules)
                       (modules '((guix build meson-build-system)
@@ -114,76 +190,154 @@
                       disallowed-references)
   "Build SOURCE using MESON, and with INPUTS, assuming that SOURCE
 has a 'meson.build' file."
+  (define builder
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          (define build-phases
+            #$(let ((phases (if (pair? phases) (sexp->gexp phases) phases)))
+                (if glib-or-gtk?
+                    phases
+                    #~(modify-phases #$phases
+                        (delete 'glib-or-gtk-compile-schemas)
+                        (delete 'glib-or-gtk-wrap)))))
+
+          #$(with-build-variables inputs outputs
+              #~(meson-build #:source #+source
+                             #:system #$system
+                             #:outputs %outputs
+                             #:inputs %build-inputs
+                             #:search-paths '#$(sexp->gexp
+                                                (map search-path-specification->sexp
+                                                     search-paths))
+                             #:phases build-phases
+                             #:configure-flags
+                             #$(if (pair? configure-flags)
+                                   (sexp->gexp configure-flags)
+                                   configure-flags)
+                             #:build-type #$build-type
+                             #:tests? #$tests?
+                             #:test-options #$(sexp->gexp test-options)
+                             #:parallel-build? #$parallel-build?
+                             #:parallel-tests? #$parallel-tests?
+                             #:validate-runpath? #$validate-runpath?
+                             #:patch-shebangs? #$patch-shebangs?
+                             #:strip-binaries? #$strip-binaries?
+                             #:strip-flags #$(sexp->gexp strip-flags)
+                             #:strip-directories #$(sexp->gexp strip-directories)
+                             #:elf-directories #$(sexp->gexp elf-directories))))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target #f
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
 
-  ;; TODO: Copied from build-system/gnu, factorize this!
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)))
-     (((? package? p) output)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)
-                               output))
-     ((? string? output)
-      output)))
+(define* (meson-cross-build name
+                            #:key
+                            target
+                            build-inputs host-inputs target-inputs
+                            guile source
+                            (outputs '("out"))
+                            (configure-flags ''())
+                            (search-paths '())
+                            (native-search-paths '())
 
+                            (build-type "debugoptimized")
+                            (tests? #f)
+                            (test-options ''())
+                            (glib-or-gtk? #f)
+                            (parallel-build? #t)
+                            (parallel-tests? #f)
+                            (validate-runpath? #t)
+                            (patch-shebangs? #t)
+                            (strip-binaries? #t)
+                            (strip-flags ''("--strip-debug"))
+                            (strip-directories ''("lib" "lib64" "libexec"
+                                                  "bin" "sbin"))
+                            (elf-directories ''("lib" "lib64" "libexec"
+                                                "bin" "sbin"))
+                            ;; See 'gnu-cross-build' for why this needs to be
+                            ;; disabled when cross-compiling.
+                            (make-dynamic-linker-cache? #f)
+                            (phases '%standard-phases)
+                            (system (%current-system))
+                            (imported-modules %meson-build-system-modules)
+                            (modules '((guix build meson-build-system)
+                                       (guix build utils)))
+                            allowed-references
+                            disallowed-references)
+  "Cross-build SOURCE for TARGET using MESON, and with INPUTS, assuming that
+SOURCE has a 'meson.build' file."
+  (define cross-file
+    (make-cross-file target))
+  (define inputs
+    (if (null? target-inputs)
+        (input-tuples->gexp host-inputs)
+        #~(append #$(input-tuples->gexp host-inputs)
+              #+(input-tuples->gexp target-inputs))))
   (define builder
-    `(let ((build-phases (if ,glib-or-gtk?
-                             ,phases
-                             (modify-phases ,phases
-                               (delete 'glib-or-gtk-compile-schemas)
-                               (delete 'glib-or-gtk-wrap)))))
-       (use-modules ,@modules)
-       (meson-build #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:outputs %outputs
-                    #:inputs %build-inputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:phases build-phases
-                    #:configure-flags ,configure-flags
-                    #:build-type ,build-type
-                    #:tests? ,tests?
-                    #:test-target ,test-target
-                    #:parallel-build? ,parallel-build?
-                    #:parallel-tests? ,parallel-tests?
-                    #:validate-runpath? ,validate-runpath?
-                    #:patch-shebangs? ,patch-shebangs?
-                    #:strip-binaries? ,strip-binaries?
-                    #:strip-flags ,strip-flags
-                    #:strip-directories ,strip-directories
-                    #:elf-directories ,elf-directories)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:disallowed-references
-                                (and disallowed-references
-                                     (map canonicalize-reference
-                                          disallowed-references))))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          (define build-phases
+            #$(let ((phases (if (pair? phases) (sexp->gexp phases) phases)))
+                (if glib-or-gtk?
+                    phases
+                    #~(modify-phases #$phases
+                        (delete 'glib-or-gtk-compile-schemas)
+                        (delete 'glib-or-gtk-wrap)))))
+
+          ;; Do not use 'with-build-variables', as there should be
+          ;; no reason to use %build-inputs and friends.
+          (meson-build #:source #+source
+                       #:system #$system
+                       #:build #$(nix-system->gnu-triplet system)
+                       #:target #$target
+                       #:outputs #$(outputs->gexp outputs)
+                       #:inputs #$inputs
+                       #:native-inputs #+(input-tuples->gexp build-inputs)
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:native-search-paths '#$(sexp->gexp
+                                                 (map search-path-specification->sexp
+                                                      native-search-paths))
+                       #:phases build-phases
+                       #:make-dynamic-linker-cache? #$make-dynamic-linker-cache?
+                       #:configure-flags `("--cross-file" #+cross-file
+                                           ,@#$(if (pair? configure-flags)
+                                                   (sexp->gexp configure-flags)
+                                                   configure-flags))
+                       #:build-type #$build-type
+                       #:tests? #$tests?
+                       #:test-options #$(sexp->gexp test-options)
+                       #:parallel-build? #$parallel-build?
+                       #:parallel-tests? #$parallel-tests?
+                       #:validate-runpath? #$validate-runpath?
+                       #:patch-shebangs? #$patch-shebangs?
+                       #:strip-binaries? #$strip-binaries?
+                       #:strip-flags #$(sexp->gexp strip-flags)
+                       #:strip-directories #$(sexp->gexp strip-directories)
+                       #:elf-directories #$(sexp->gexp elf-directories)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:substitutable? substitutable?
+                      #:allowed-references allowed-references
+                      #:disallowed-references disallowed-references
+                      #:guile-for-build guile)))
 
 (define meson-build-system
   (build-system
diff --git a/guix/build-system/minify.scm b/guix/build-system/minify.scm
index 9d53760685..7d4745ab32 100644
--- a/guix/build-system/minify.scm
+++ b/guix/build-system/minify.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -54,7 +56,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:inputs #:native-inputs))
+    '(#:target #:inputs #:native-inputs))
 
   (bag
     (name name)
@@ -70,11 +72,11 @@
     (build minify-build)
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (minify-build store name inputs
+(define* (minify-build name inputs
                        #:key
+                       source
                        (javascript-files #f)
-                       (phases '(@ (guix build minify-build-system)
-                                   %standard-phases))
+                       (phases '%standard-phases)
                        (outputs '("out"))
                        (system (%current-system))
                        search-paths
@@ -84,38 +86,24 @@
                                   (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (minify-build #:name ,name
-                     #:source ,(match (assoc-ref inputs "source")
-                                 (((? derivation? source))
-                                  (derivation->output-path source))
-                                 ((source)
-                                  source)
-                                 (source
-                                  source))
-                     #:javascript-files ,javascript-files
-                     #:phases ,phases
-                     #:outputs %outputs
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (minify-build #:name #$name
+                        #:source #+source
+                        #:javascript-files #$javascript-files
+                        #:phases #$phases
+                        #:outputs #$(outputs->gexp outputs)
+                        #:search-paths '#$(sexp->gexp
+                                           (map search-path-specification->sexp
+                                                search-paths))
+                        #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                               ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define minify-build-system
   (build-system
diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm
index 98f63f87ef..735f8dd06e 100644
--- a/guix/build-system/node.scm
+++ b/guix/build-system/node.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,9 +19,11 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build-system node)
+  #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -48,7 +51,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:node #:inputs #:native-inputs))
+    '(#:target #:node #:inputs #:native-inputs))
 
   (and (not target)                    ;XXX: no cross-compilation
        (bag
@@ -67,12 +70,13 @@
          (build node-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (node-build store name inputs
+(define* (node-build name inputs
                      #:key
+                     source
+                     (npm-flags ''())
                      (test-target "test")
                      (tests? #t)
-                     (phases '(@ (guix build node-build-system)
-                                 %standard-phases))
+                     (phases '%standard-phases)
                      (outputs '("out"))
                      (search-paths '())
                      (system (%current-system))
@@ -82,38 +86,27 @@
                                 (guix build utils))))
   "Build SOURCE using NODE and INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (node-build #:name ,name
-                   #:source ,(match (assoc-ref inputs "source")
-                               (((? derivation? source))
-                                (derivation->output-path source))
-                               ((source) source)
-                               (source source))
-                   #:system ,system
-                   #:test-target ,test-target
-                   #:tests? ,tests?
-                   #:phases ,phases
-                   #:outputs %outputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (node-build #:name #$name
+                      #:source #+source
+                      #:system #$system
+                      #:npm-flags #$npm-flags
+                      #:test-target #$test-target
+                      #:tests? #$tests?
+                      #:phases #$phases
+                      #:outputs #$(outputs->gexp outputs)
+                      #:search-paths '#$(sexp->gexp
+                                         (map search-path-specification->sexp
+                                              search-paths))
+                      #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define node-build-system
   (build-system
diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm
index 5513216c25..e7d6d96f0e 100644
--- a/guix/build-system/ocaml.scm
+++ b/guix/build-system/ocaml.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,7 @@
 (define-module (guix build-system ocaml)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -206,7 +207,7 @@ pre-defined variants."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:ocaml #:findlib #:inputs #:native-inputs))
+    '(#:target #:ocaml #:findlib #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -226,8 +227,9 @@ pre-defined variants."
          (build ocaml-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (ocaml-build store name inputs
-                      #:key (guile #f)
+(define* (ocaml-build name inputs
+                      #:key
+                      guile source
                       (outputs '("out")) (configure-flags ''())
                       (search-paths '())
                       (make-flags ''())
@@ -253,51 +255,35 @@ pre-defined variants."
   "Build SOURCE using OCAML, and with INPUTS. This assumes that SOURCE
 provides a 'setup.ml' file as its build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (ocaml-build #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:system ,system
-                    #:outputs %outputs
-                    #:inputs %build-inputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:phases ,phases
-                    #:configure-flags ,configure-flags
-                    #:test-flags ,test-flags
-                    #:make-flags ,make-flags
-                    #:build-flags ,build-flags
-                    #:out-of-source? ,out-of-source?
-                    #:use-make? ,use-make?
-                    #:tests? ,tests?
-                    #:test-target ,test-target
-                    #:install-target ,install-target
-                    #:validate-runpath? ,validate-runpath?
-                    #:patch-shebangs? ,patch-shebangs?
-                    #:strip-binaries? ,strip-binaries?
-                    #:strip-flags ,strip-flags
-                    #:strip-directories ,strip-directories)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@modules)
+          (ocaml-build #:source #$source
+                       #:system #$system
+                       #:outputs #$(outputs->gexp outputs)
+                       #:inputs #$(input-tuples->gexp inputs)
+                       #:search-paths '#$(map search-path-specification->sexp
+                                              search-paths)
+                       #:phases #$phases
+                       #:configure-flags #$configure-flags
+                       #:test-flags #$test-flags
+                       #:make-flags #$make-flags
+                       #:build-flags #$build-flags
+                       #:out-of-source? #$out-of-source?
+                       #:use-make? #$use-make?
+                       #:tests? #$tests?
+                       #:test-target #$test-target
+                       #:install-target #$install-target
+                       #:validate-runpath? #$validate-runpath?
+                       #:patch-shebangs? #$patch-shebangs?
+                       #:strip-binaries? #$strip-binaries?
+                       #:strip-flags #$strip-flags
+                       #:strip-directories #$strip-directories))))
+
+  (gexp->derivation name builder
+                    #:system system
+                    #:target #f
+                    #:guile-for-build guile))
 
 (define ocaml-build-system
   (build-system
diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm
index 06af1dd20e..db0a916fb2 100644
--- a/guix/build-system/perl.scm
+++ b/guix/build-system/perl.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +19,8 @@
 (define-module (guix build-system perl)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
@@ -57,7 +59,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:perl #:inputs #:native-inputs))
+    '(#:target #:perl #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -76,8 +78,8 @@
          (build perl-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (perl-build store name inputs
-                     #:key
+(define* (perl-build name inputs
+                     #:key source
                      (search-paths '())
                      (tests? #t)
                      (parallel-build? #t)
@@ -95,46 +97,37 @@
                                 (guix build utils))))
   "Build SOURCE using PERL, and with INPUTS.  This assumes that SOURCE
 provides a `Makefile.PL' file as its build system."
-  (define builder
-    `(begin
-       (use-modules ,@modules)
-       (perl-build #:name ,name
-                   #:source ,(match (assoc-ref inputs "source")
-                               (((? derivation? source))
-                                (derivation->output-path source))
-                               ((source)
-                                source)
-                               (source
-                                source))
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:make-maker? ,make-maker?
-                   #:make-maker-flags ,make-maker-flags
-                   #:module-build-flags ,module-build-flags
-                   #:phases ,phases
-                   #:system ,system
-                   #:test-target "test"
-                   #:tests? ,tests?
-                   #:parallel-build? ,parallel-build?
-                   #:parallel-tests? ,parallel-tests?
-                   #:outputs %outputs
-                   #:inputs %build-inputs)))
+  (define build
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          #$(with-build-variables inputs outputs
+              #~(perl-build #:name #$name
+                            #:source #+source
+                            #:search-paths '#$(sexp->gexp
+                                               (map search-path-specification->sexp
+                                                    search-paths))
+                            #:make-maker? #$make-maker?
+                            #:make-maker-flags #$make-maker-flags
+                            #:module-build-flags #$(sexp->gexp module-build-flags)
+                            #:phases #$(if (pair? phases)
+                                           (sexp->gexp phases)
+                                           phases)
+                            #:system #$system
+                            #:test-target "test"
+                            #:tests? #$tests?
+                            #:parallel-build? #$parallel-build?
+                            #:parallel-tests? #$parallel-tests?
+                            #:outputs %outputs
+                            #:inputs %build-inputs)))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:guile-for-build guile)))
 
 (define perl-build-system
   (build-system
diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm
index 80895162f8..efade6f74b 100644
--- a/guix/build-system/python.scm
+++ b/guix/build-system/python.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,9 +20,13 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build-system python)
+  #:use-module ((gnu packages) #:select (search-auxiliary-file))
+  #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix memoization)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
@@ -70,6 +75,10 @@ extension, such as '.tar.gz'."
   (let ((python (resolve-interface '(gnu packages python))))
     (module-ref python 'python-2)))
 
+(define sanity-check.py
+  ;; The script used to validate the installation of a Python package.
+  (search-auxiliary-file "python/sanity-check.py"))
+
 (define* (package-with-explicit-python python old-prefix new-prefix
                                        #:key variant-property)
   "Return a procedure of one argument, P.  The procedure creates a package with
@@ -140,7 +149,7 @@ pre-defined variants."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:python #:inputs #:native-inputs))
+    '(#:target #:python #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -154,19 +163,19 @@ pre-defined variants."
                         ;; Keep the standard inputs of 'gnu-build-system'.
                         ,@(standard-packages)))
          (build-inputs `(("python" ,python)
+                         ("sanity-check.py" ,(local-file sanity-check.py))
                          ,@native-inputs))
          (outputs outputs)
          (build python-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (python-build store name inputs
-                       #:key
+(define* (python-build name inputs
+                       #:key source
                        (tests? #t)
                        (test-target "test")
                        (use-setuptools? #t)
                        (configure-flags ''())
-                       (phases '(@ (guix build python-build-system)
-                                   %standard-phases))
+                       (phases '%standard-phases)
                        (outputs '("out"))
                        (search-paths '())
                        (system (%current-system))
@@ -176,43 +185,35 @@ pre-defined variants."
                                   (guix build utils))))
   "Build SOURCE using PYTHON, and with INPUTS.  This assumes that SOURCE
 provides a 'setup.py' file as its build system."
-  (define builder
-    `(begin
-       (use-modules ,@modules)
-       (python-build #:name ,name
-                     #:source ,(match (assoc-ref inputs "source")
-                                 (((? derivation? source))
-                                  (derivation->output-path source))
-                                 ((source)
-                                  source)
-                                 (source
-                                  source))
-                     #:configure-flags ,configure-flags
-                     #:system ,system
-                     #:test-target ,test-target
-                     #:tests? ,tests?
-                     #:use-setuptools? ,use-setuptools?
-                     #:phases ,phases
-                     #:outputs %outputs
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:inputs %build-inputs)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (define build
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          #$(with-build-variables inputs outputs
+              #~(python-build #:name #$name
+                              #:source #+source
+                              #:configure-flags #$configure-flags
+                              #:use-setuptools? #$use-setuptools?
+                              #:system #$system
+                              #:test-target #$test-target
+                              #:tests? #$tests?
+                              #:phases #$(if (pair? phases)
+                                             (sexp->gexp phases)
+                                             phases)
+                              #:outputs %outputs
+                              #:search-paths '#$(sexp->gexp
+                                                 (map search-path-specification->sexp
+                                                      search-paths))
+                              #:inputs %build-inputs)))))
+
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:guile-for-build guile)))
 
 (define python-build-system
   (build-system
diff --git a/guix/build-system/qt.scm b/guix/build-system/qt.scm
index e1368db1d9..003a065aa6 100644
--- a/guix/build-system/qt.scm
+++ b/guix/build-system/qt.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -23,9 +23,10 @@
 (define-module (guix build-system qt)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module ((guix build qt-utils)
                 #:select (%qt-wrap-excluded-inputs))
-  #:use-module (guix derivations)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system cmake)
@@ -75,7 +76,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    `(#:source #:cmake #:inputs #:native-inputs #:outputs
+    `(#:cmake #:inputs #:native-inputs #:outputs
       ,@(if target '() '(#:target))))
 
   (bag
@@ -109,8 +110,9 @@
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
 
-(define* (qt-build store name inputs
-                   #:key (guile #f)
+(define* (qt-build name inputs
+                   #:key
+                   source (guile #f)
                    (outputs '("out")) (configure-flags ''())
                    (search-paths '())
                    (make-flags ''())
@@ -125,8 +127,7 @@
                    (strip-flags ''("--strip-debug"))
                    (strip-directories ''("lib" "lib64" "libexec"
                                          "bin" "sbin"))
-                   (phases '(@ (guix build qt-build-system)
-                               %standard-phases))
+                   (phases '%standard-phases)
                    (qt-wrap-excluded-outputs ''())
                    (qt-wrap-excluded-inputs %qt-wrap-excluded-inputs)
                    (system (%current-system))
@@ -136,61 +137,50 @@
   "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
 provides a 'CMakeLists.txt' file as its build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (qt-build #:source ,(match (assoc-ref inputs "source")
-                                  (((? derivation? source))
-                                   (derivation->output-path source))
-                                  ((source)
-                                   source)
-                                  (source
-                                   source))
-                 #:system ,system
-                 #:outputs %outputs
-                 #:inputs %build-inputs
-                 #:search-paths ',(map search-path-specification->sexp
-                                       search-paths)
-                 #:phases ,phases
-                 #:qt-wrap-excluded-outputs ,qt-wrap-excluded-outputs
-                 #:qt-wrap-excluded-inputs ,qt-wrap-excluded-inputs
-                 #:configure-flags ,configure-flags
-                 #:make-flags ,make-flags
-                 #:out-of-source? ,out-of-source?
-                 #:build-type ,build-type
-                 #:tests? ,tests?
-                 #:test-target ,test-target
-                 #:parallel-build? ,parallel-build?
-                 #:parallel-tests? ,parallel-tests?
-                 #:validate-runpath? ,validate-runpath?
-                 #:patch-shebangs? ,patch-shebangs?
-                 #:strip-binaries? ,strip-binaries?
-                 #:strip-flags ,strip-flags
-                 #:strip-directories ,strip-directories)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (qt-build #:source #+source
+                    #:system #$system
+                    #:outputs #$(outputs->gexp outputs)
+                    #:inputs #$(input-tuples->gexp inputs)
+                    #:search-paths '#$(sexp->gexp
+                                       (map search-path-specification->sexp
+                                            search-paths))
+                    #:phases #$(if (pair? phases)
+                                   (sexp->gexp phases)
+                                   phases)
+                    #:qt-wrap-excluded-outputs #$qt-wrap-excluded-outputs
+                    #:qt-wrap-excluded-inputs #$qt-wrap-excluded-inputs
+                    #:configure-flags #$configure-flags
+                    #:make-flags #$make-flags
+                    #:out-of-source? #$out-of-source?
+                    #:build-type #$build-type
+                    #:tests? #$tests?
+                    #:test-target #$test-target
+                    #:parallel-build? #$parallel-build?
+                    #:parallel-tests? #$parallel-tests?
+                    #:validate-runpath? #$validate-runpath?
+                    #:patch-shebangs? #$patch-shebangs?
+                    #:strip-binaries? #$strip-binaries?
+                    #:strip-flags #$strip-flags
+                    #:strip-directories #$strip-directories))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 
 ;;;
 ;;; Cross-compilation.
 ;;;
 
-(define* (qt-cross-build store name
+(define* (qt-cross-build name
                          #:key
-                         target native-drvs target-drvs
+                         source target
+                         build-inputs target-inputs host-inputs
                          (guile #f)
                          (outputs '("out"))
                          (configure-flags ''())
@@ -199,7 +189,7 @@ provides a 'CMakeLists.txt' file as its build system."
                          (make-flags ''())
                          (out-of-source? #t)
                          (build-type "RelWithDebInfo")
-                         (tests? #f) ; nothing can be done
+                         (tests? #f)              ; nothing can be done
                          (test-target "test")
                          (parallel-build? #t) (parallel-tests? #f)
                          (validate-runpath? #t)
@@ -209,8 +199,7 @@ provides a 'CMakeLists.txt' file as its build system."
                                          "--enable-deterministic-archives"))
                          (strip-directories ''("lib" "lib64" "libexec"
                                                "bin" "sbin"))
-                         (phases '(@ (guix build qt-build-system)
-                                     %standard-phases))
+                         (phases '%standard-phases)
                          (system (%current-system))
                          (build (nix-system->gnu-triplet system))
                          (imported-modules %qt-build-system-modules)
@@ -220,77 +209,53 @@ provides a 'CMakeLists.txt' file as its build system."
 with INPUTS.  This assumes that SOURCE provides a 'CMakeLists.txt' file as its
 build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (let ()
-         (define %build-host-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name path)
-                     `(,name . ,path)))
-                  native-drvs))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          (define %build-host-inputs
+            #+(input-tuples->gexp build-inputs))
 
-         (define %build-target-inputs
-           ',(map (match-lambda
-                    ((name (? derivation? drv) sub ...)
-                     `(,name . ,(apply derivation->output-path drv sub)))
-                    ((name (? package? pkg) sub ...)
-                     (let ((drv (package-cross-derivation store pkg
-                                                          target system)))
-                       `(,name . ,(apply derivation->output-path drv sub))))
-                    ((name path)
-                     `(,name . ,path)))
-                  target-drvs))
+          (define %build-target-inputs
+            (append #$(input-tuples->gexp host-inputs)
+                    #+(input-tuples->gexp target-inputs)))
 
-         (qt-build #:source ,(match (assoc-ref native-drvs "source")
-                                    (((? derivation? source))
-                                     (derivation->output-path source))
-                                    ((source)
-                                     source)
-                                    (source
-                                     source))
-                   #:system ,system
-                   #:build ,build
-                   #:target ,target
-                   #:outputs %outputs
-                   #:inputs %build-target-inputs
-                   #:native-inputs %build-host-inputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:native-search-paths ',(map
-                                            search-path-specification->sexp
-                                            native-search-paths)
-                   #:phases ,phases
-                   #:configure-flags ,configure-flags
-                   #:make-flags ,make-flags
-                   #:out-of-source? ,out-of-source?
-                   #:build-type ,build-type
-                   #:tests? ,tests?
-                   #:test-target ,test-target
-                   #:parallel-build? ,parallel-build?
-                   #:parallel-tests? ,parallel-tests?
-                   #:validate-runpath? ,validate-runpath?
-                   #:patch-shebangs? ,patch-shebangs?
-                   #:strip-binaries? ,strip-binaries?
-                   #:strip-flags ,strip-flags
-                   #:strip-directories ,strip-directories))))
+          (define %outputs
+            #$(outputs->gexp outputs))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                               ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          (qt-build #:source #+source
+                    #:system #$system
+                    #:build #$build
+                    #:target #$target
+                    #:outputs %outputs
+                    #:inputs %build-target-inputs
+                    #:native-inputs %build-host-inputs
+                    #:search-paths '#$(sexp->gexp
+                                       (map search-path-specification->sexp
+                                            search-paths))
+                    #:native-search-paths '#$(map
+                                              search-path-specification->sexp
+                                              native-search-paths)
+                    #:phases #$phases
+                    #:configure-flags #$configure-flags
+                    #:make-flags #$make-flags
+                    #:out-of-source? #$out-of-source?
+                    #:build-type #$build-type
+                    #:tests? #$tests?
+                    #:test-target #$test-target
+                    #:parallel-build? #$parallel-build?
+                    #:parallel-tests? #$parallel-tests?
+                    #:validate-runpath? #$validate-runpath?
+                    #:patch-shebangs? #$patch-shebangs?
+                    #:strip-binaries? #$strip-binaries?
+                    #:strip-flags #$strip-flags
+                    #:strip-directories #$strip-directories))))
 
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs (append native-drvs target-drvs)
-                                #:outputs outputs
-                                #:modules imported-modules
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define qt-build-system
   (build-system
diff --git a/guix/build-system/r.scm b/guix/build-system/r.scm
index 96d37d5ea6..2c82390ba6 100644
--- a/guix/build-system/r.scm
+++ b/guix/build-system/r.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -82,7 +84,7 @@ release corresponding to NAME and VERSION."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:r #:inputs #:native-inputs))
+    '(#:target #:r #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -101,13 +103,13 @@ release corresponding to NAME and VERSION."
          (build r-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (r-build store name inputs
+(define* (r-build name inputs
                   #:key
+                  source
                   (tests? #t)
                   (test-target "tests")
                   (configure-flags ''())
-                  (phases '(@ (guix build r-build-system)
-                              %standard-phases))
+                  (phases '%standard-phases)
                   (outputs '("out"))
                   (search-paths '())
                   (system (%current-system))
@@ -118,42 +120,28 @@ release corresponding to NAME and VERSION."
                              (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (r-build #:name ,name
-                #:source ,(match (assoc-ref inputs "source")
-                            (((? derivation? source))
-                             (derivation->output-path source))
-                            ((source)
-                             source)
-                            (source
-                             source))
-                #:configure-flags ,configure-flags
-                #:system ,system
-                #:tests? ,tests?
-                #:test-target ,test-target
-                #:phases ,phases
-                #:outputs %outputs
-                #:search-paths ',(map search-path-specification->sexp
-                                      search-paths)
-                #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (r-build #:name #$name
+                   #:source #+source
+                   #:configure-flags #$configure-flags
+                   #:system #$system
+                   #:tests? #$tests?
+                   #:test-target #$test-target
+                   #:phases #$phases
+                   #:outputs #$(outputs->gexp outputs)
+                   #:search-paths '#$(sexp->gexp
+                                      (map search-path-specification->sexp
+                                           search-paths))
+                   #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build
-                                #:substitutable? substitutable?))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile
+                      #:substitutable? substitutable?)))
 
 (define r-build-system
   (build-system
diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm
index a02e2bad3a..05a4d9c2ad 100644
--- a/guix/build-system/rakudo.scm
+++ b/guix/build-system/rakudo.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,8 @@
 (define-module (guix build-system rakudo)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -71,7 +73,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs))
+    '(#:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -96,12 +98,12 @@
          (build rakudo-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (rakudo-build store name inputs
+(define* (rakudo-build name inputs
                        #:key
+                       source
                        (search-paths '())
                        (tests? #t)
-                       (phases '(@ (guix build rakudo-build-system)
-                                   %standard-phases))
+                       (phases '%standard-phases)
                        (outputs '("out"))
                        (system (%current-system))
                        (guile #f)
@@ -112,39 +114,25 @@
                                   (guix build utils))))
   "Build SOURCE using PERL6, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (rakudo-build #:name ,name
-                     #:source ,(match (assoc-ref inputs "source")
-                                      (((? derivation? source))
-                                       (derivation->output-path source))
-                                      ((source)
-                                       source)
-                                      (source
-                                        source))
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:phases ,phases
-                     #:system ,system
-                     #:tests? ,tests?
-                     #:outputs %outputs
-                     #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (rakudo-build #:name #$name
+                        #:source #+source
+                        #:search-paths '#$(sexp->gexp
+                                           (map search-path-specification->sexp
+                                                search-paths))
+                        #:phases #$phases
+                        #:system #$system
+                        #:tests? #$tests?
+                        #:outputs #$(outputs->gexp outputs)
+                        #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:system system
-                                #:inputs inputs
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define rakudo-build-system
   (build-system
diff --git a/guix/build-system/renpy.scm b/guix/build-system/renpy.scm
index 5ed59bf5a5..f1070951ee 100644
--- a/guix/build-system/renpy.scm
+++ b/guix/build-system/renpy.scm
@@ -1,4 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -21,7 +23,8 @@
   #:use-module (guix utils)
   #:use-module (guix memoization)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -53,7 +56,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:renpy #:inputs #:native-inputs))
+    '(#:target #:renpy #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -72,57 +75,43 @@
          (build renpy-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (renpy-build store name inputs
-                       #:key
-                       (phases '(@ (guix build renpy-build-system)
-                                   %standard-phases))
-                       (configure-flags ''())
-                       (outputs '("out"))
-                       (output "out")
-                       (game "game")
-                       (search-paths '())
-                       (system (%current-system))
-                       (guile #f)
-                       (imported-modules %renpy-build-system-modules)
-                       (modules '((guix build renpy-build-system)
-                                  (guix build utils))))
+(define* (renpy-build name inputs
+                      #:key
+                      source
+                      (phases '%standard-phases)
+                      (configure-flags ''())
+                      (outputs '("out"))
+                      (output "out")
+                      (game "game")
+                      (search-paths '())
+                      (system (%current-system))
+                      (guile #f)
+                      (imported-modules %renpy-build-system-modules)
+                      (modules '((guix build renpy-build-system)
+                                 (guix build utils))))
   "Build SOURCE using RENPY, and with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (renpy-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                     #:configure-flags ,configure-flags
-                     #:system ,system
-                     #:phases ,phases
-                     #:outputs %outputs
-                     #:output ,output
-                     #:game ,game
-                     #:search-paths ',(map search-path-specification->sexp
-                                           search-paths)
-                     #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (renpy-build #:name #$name
+                       #:source #+source
+                       #:configure-flags #$configure-flags
+                       #:system #$system
+                       #:phases #$phases
+                       #:outputs #$(outputs->gexp outputs)
+                       #:output #$output
+                       #:game #$game
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:inputs #$(input-tuples->gexp inputs)))))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
 
 (define renpy-build-system
   (build-system
diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index 8142e8551a..342daf7978 100644
--- a/guix/build-system/ruby.scm
+++ b/guix/build-system/ruby.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,8 @@
 (define-module (guix build-system ruby)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
@@ -54,7 +56,7 @@ NAME and VERSION."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:ruby #:inputs #:native-inputs))
+    '(#:target #:ruby #:inputs #:native-inputs))
 
   (and (not target)                    ;XXX: no cross-compilation
        (bag
@@ -73,13 +75,12 @@ NAME and VERSION."
          (build ruby-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (ruby-build store name inputs
-                     #:key
+(define* (ruby-build name inputs
+                     #:key source
                      (gem-flags ''())
                      (test-target "test")
                      (tests? #t)
-                     (phases '(@ (guix build ruby-build-system)
-                                 %standard-phases))
+                     (phases '%standard-phases)
                      (outputs '("out"))
                      (search-paths '())
                      (system (%current-system))
@@ -88,42 +89,33 @@ NAME and VERSION."
                      (modules '((guix build ruby-build-system)
                                 (guix build utils))))
   "Build SOURCE using RUBY and INPUTS."
-  (define builder
-    `(begin
-       (use-modules ,@modules)
-       (ruby-build #:name ,name
-                   #:source ,(match (assoc-ref inputs "source")
-                               (((? derivation? source))
-                                (derivation->output-path source))
-                               ((source)
-                                source)
-                               (source
-                                source))
-                   #:system ,system
-                   #:gem-flags ,gem-flags
-                   #:test-target ,test-target
-                   #:tests? ,tests?
-                   #:phases ,phases
-                   #:outputs %outputs
-                   #:search-paths ',(map search-path-specification->sexp
-                                         search-paths)
-                   #:inputs %build-inputs)))
+  (define build
+    #~(begin
+        (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+        #$(with-build-variables inputs outputs
+            #~(ruby-build #:name #$name
+                          #:source #+source
+                          #:system #$system
+                          #:gem-flags #$gem-flags
+                          #:test-target #$test-target
+                          #:tests? #$tests?
+                          #:phases #$(if (pair? phases)
+                                         (sexp->gexp phases)
+                                         phases)
+                          #:outputs %outputs
+                          #:search-paths '#$(sexp->gexp
+                                             (map search-path-specification->sexp
+                                                  search-paths))
+                          #:inputs %build-inputs))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:modules imported-modules
+                      #:guile-for-build guile)))
 
 (define ruby-build-system
   (build-system
diff --git a/guix/build-system/scons.scm b/guix/build-system/scons.scm
index aad455c419..74901b3478 100644
--- a/guix/build-system/scons.scm
+++ b/guix/build-system/scons.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,8 @@
 (define-module (guix build-system scons)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix monads)
+  #:use-module (guix gexp)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -53,7 +55,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:scons #:inputs #:native-inputs))
+    '(#:target #:scons #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -72,15 +74,15 @@
          (build scons-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (scons-build store name inputs
+(define* (scons-build name inputs
                       #:key
+                      (source #f)
                       (tests? #t)
                       (scons-flags ''())
-                      (build-targets ''())
+                      (build-targets #~'())
                       (test-target "test")
-                      (install-targets ''("install"))
-                      (phases '(@ (guix build scons-build-system)
-                                  %standard-phases))
+                      (install-targets #~'("install"))
+                      (phases '%standard-phases)
                       (outputs '("out"))
                       (search-paths '())
                       (system (%current-system))
@@ -91,43 +93,33 @@
   "Build SOURCE using SCons, and with INPUTS.  This assumes that SOURCE
 provides a 'SConstruct' file as its build system."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (scons-build #:name ,name
-                    #:source ,(match (assoc-ref inputs "source")
-                                (((? derivation? source))
-                                 (derivation->output-path source))
-                                ((source)
-                                 source)
-                                (source
-                                 source))
-                    #:scons-flags ,scons-flags
-                    #:system ,system
-                    #:build-targets ,build-targets
-                    #:test-target ,test-target
-                    #:tests? ,tests?
-                    #:install-targets ,install-targets
-                    #:phases ,phases
-                    #:outputs %outputs
-                    #:search-paths ',(map search-path-specification->sexp
-                                          search-paths)
-                    #:inputs %build-inputs)))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+          #$(with-build-variables inputs outputs
+              #~(scons-build #:name #$name
+                             #:source #+source
+                             #:scons-flags #$(sexp->gexp scons-flags)
+                             #:system #$system
+                             #:build-targets #$build-targets
+                             #:test-target #$test-target
+                             #:tests? #$tests?
+                             #:install-targets #$install-targets
+                             #:phases #$(if (pair? phases)
+                                            (sexp->gexp phases)
+                                            phases)
+                             #:outputs %outputs
+                             #:inputs %build-inputs
+                             #:search-paths
+                             '#$(sexp->gexp
+                                 (map search-path-specification->sexp
+                                      search-paths)))))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (gexp->derivation name builder
+                    #:system system
+                    #:target #f
+                    #:guile-for-build guile))
 
 (define scons-build-system
   (build-system
diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm
index 8bbca0ccb7..09907c67d8 100644
--- a/guix/build-system/texlive.scm
+++ b/guix/build-system/texlive.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +22,8 @@
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
-  #:use-module (guix derivations)
+  #:use-module (guix monads)
+  #:use-module (guix gexp)
   #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
@@ -42,8 +45,8 @@
 
 ;; These variables specify the SVN tag and the matching SVN revision.  They
 ;; are taken from https://www.tug.org/svn/texlive/tags/
-(define %texlive-tag "texlive-2019.3")
-(define %texlive-revision 51265)
+(define %texlive-tag "texlive-2021.3")
+(define %texlive-revision 59745)
 
 (define (texlive-origin name version locations hash)
   "Return an <origin> object for a TeX Live package consisting of multiple
@@ -59,13 +62,17 @@ name for the checkout directory."
     (file-name (string-append name "-" version "-checkout"))
     (sha256 hash)))
 
-(define (texlive-ref component id)
+(define* (texlive-ref component #:optional id)
   "Return a <svn-reference> object for the package ID, which is part of the
-given Texlive COMPONENT."
+given Texlive COMPONENT.  If ID is not provided, COMPONENT is used as the top
+level package ID."
   (svn-reference
    (url (string-append "svn://www.tug.org/texlive/tags/"
                        %texlive-tag "/Master/texmf-dist/"
-                       "source/" component "/" id))
+                       "source/" component
+                       (if id
+                           (string-append "/" id)
+                           "")))
    (revision %texlive-revision)))
 
 (define %texlive-build-system-modules
@@ -96,7 +103,7 @@ given Texlive COMPONENT."
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:inputs #:native-inputs
+    '(#:target #:inputs #:native-inputs
       #:texlive-latex-base #:texlive-bin))
 
   (bag
@@ -110,18 +117,29 @@ given Texlive COMPONENT."
                    ;; Keep the standard inputs of 'gnu-build-system'.
                    ,@(standard-packages)))
     (build-inputs `(("texlive-bin" ,texlive-bin)
-                    ("texlive-latex-base" ,texlive-latex-base)
+                    ,@(if texlive-latex-base
+                          `(("texlive-latex-base" ,texlive-latex-base))
+                          '())
                     ,@native-inputs))
     (outputs outputs)
     (build texlive-build)
     (arguments (strip-keyword-arguments private-keywords arguments))))
 
-(define* (texlive-build store name inputs
+(define* (texlive-build name inputs
                         #:key
+                        source
                         (tests? #f)
                         tex-directory
                         (build-targets #f)
-                        (tex-format "luatex")
+                        (tex-engine #f)
+
+                        ;; FIXME: This would normally default to "luatex" but
+                        ;; LuaTeX has a bug where sometimes it corrupts the
+                        ;; heap and aborts. This causes the build of texlive
+                        ;; packages to fail at random. The problem is being
+                        ;; tracked at <https://issues.guix.gnu.org/48064>.
+                        (tex-format "pdftex")
+
                         (phases '(@ (guix build texlive-build-system)
                                     %standard-phases))
                         (outputs '("out"))
@@ -135,43 +153,34 @@ given Texlive COMPONENT."
                                    (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
-    `(begin
-       (use-modules ,@modules)
-       (texlive-build #:name ,name
-                      #:source ,(match (assoc-ref inputs "source")
-                                       (((? derivation? source))
-                                        (derivation->output-path source))
-                                       ((source)
-                                        source)
-                                       (source
-                                        source))
-                      #:tex-directory ,tex-directory
-                      #:build-targets ,build-targets
-                      #:tex-format ,tex-format
-                      #:system ,system
-                      #:tests? ,tests?
-                      #:phases ,phases
-                      #:outputs %outputs
-                      #:search-paths ',(map search-path-specification->sexp
-                                            search-paths)
-                      #:inputs %build-inputs)))
-
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                               ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build
-                                #:substitutable? substitutable?))
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+
+          #$(with-build-variables inputs outputs
+              #~(texlive-build #:name #$name
+                               #:source #+source
+                               #:tex-directory #$tex-directory
+                               #:build-targets #$build-targets
+                               #:tex-engine #$(if tex-engine
+                                                  tex-engine
+                                                  tex-format)
+                               #:tex-format #$tex-format
+                               #:system #$system
+                               #:tests? #$tests?
+                               #:phases #$(if (pair? phases)
+                                              (sexp->gexp phases)
+                                              phases)
+                               #:outputs %outputs
+                               #:inputs %build-inputs
+                               #:search-paths '#$(sexp->gexp
+                                                  (map search-path-specification->sexp
+                                                       search-paths)))))))
+
+  (gexp->derivation name builder
+                    #:system system
+                    #:target #f
+                    #:substitutable? substitutable?))
 
 (define texlive-build-system
   (build-system
diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm
index b50ef7cd92..378ae481b9 100644
--- a/guix/build-system/trivial.scm
+++ b/guix/build-system/trivial.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,24 +19,16 @@
 (define-module (guix build-system trivial)
   #:use-module (guix store)
   #:use-module (guix utils)
-  #:use-module (guix derivations)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix build-system)
   #:use-module (ice-9 match)
   #:export (trivial-build-system))
 
-(define (guile-for-build store guile system)
-  (match guile
-    ((? package?)
-     (package-derivation store guile system #:graft? #f))
-    (#f                                         ; the default
-     (let* ((distro (resolve-interface '(gnu packages commencement)))
-            (guile  (module-ref distro 'guile-final)))
-       (package-derivation store guile system #:graft? #f)))))
-
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
-                guile builder modules allowed-references)
+                guile builder (modules '()) allowed-references)
   "Return a bag for NAME."
   (bag
     (name name)
@@ -54,65 +46,50 @@
                  #:modules ,modules
                  #:allowed-references ,allowed-references))))
 
-(define* (trivial-build store name inputs
+(define* (trivial-build name inputs
                         #:key
-                        outputs guile system builder (modules '())
+                        outputs guile
+                        system builder (modules '())
                         search-paths allowed-references)
   "Run build expression BUILDER, an expression, for SYSTEM.  SOURCE is
 ignored."
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)))
-     (((? package? p) output)
-      (derivation->output-path (package-derivation store p system
-                                                   #:graft? #f)
-                               output))
-     ((? string? output)
-      output)))
-
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:outputs outputs
-                                #:modules modules
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:guile-for-build
-                                (guile-for-build store guile system)))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f))
+                      (builder -> (if (pair? builder)
+                                      (sexp->gexp builder)
+                                      builder)))
+    (gexp->derivation name (with-build-variables inputs outputs builder)
+                      #:system system
+                      #:target #f
+                      #:graft? #f
+                      #:modules modules
+                      #:allowed-references allowed-references
+                      #:guile-for-build guile)))
 
-(define* (trivial-cross-build store name
+(define* (trivial-cross-build name
                               #:key
-                              target native-drvs target-drvs
+                              target
+                              source build-inputs target-inputs host-inputs
                               outputs guile system builder (modules '())
                               search-paths native-search-paths
                               allowed-references)
   "Run build expression BUILDER, an expression, for SYSTEM.  SOURCE is
 ignored."
-  (define canonicalize-reference
-    (match-lambda
-     ((? package? p)
-      (derivation->output-path (package-cross-derivation store p system)))
-     (((? package? p) output)
-      (derivation->output-path (package-cross-derivation store p system)
-                               output))
-     ((? string? output)
-      output)))
-
-  (build-expression->derivation store name builder
-                                #:inputs (append native-drvs target-drvs)
-                                #:system system
-                                #:outputs outputs
-                                #:modules modules
-                                #:allowed-references
-                                (and allowed-references
-                                     (map canonicalize-reference
-                                          allowed-references))
-                                #:guile-for-build
-                                (guile-for-build store guile system)))
+  (mlet %store-monad  ((guile (package->derivation (or guile (default-guile))
+                                                   system #:graft? #f))
+                       (builder -> (if (pair? builder)
+                                       (sexp->gexp builder)
+                                       builder)))
+    (gexp->derivation name (with-build-variables
+                               (append build-inputs target-inputs host-inputs)
+                               outputs
+                             builder)
+                      #:system system
+                      #:target target
+                      #:graft? #f
+                      #:modules modules
+                      #:allowed-references allowed-references
+                      #:guile-for-build guile)))
 
 (define trivial-build-system
   (build-system
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
index 044d2a0829..e8cd5520b8 100644
--- a/guix/build-system/waf.scm
+++ b/guix/build-system/waf.scm
@@ -19,6 +19,8 @@
 (define-module (guix build-system waf)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix derivations)
   #:use-module (guix search-paths)
@@ -52,7 +54,7 @@
                 #:rest arguments)
   "Return a bag for NAME."
   (define private-keywords
-    '(#:source #:target #:python #:inputs #:native-inputs))
+    '(#:target #:python #:inputs #:native-inputs))
 
   (and (not target)                               ;XXX: no cross-compilation
        (bag
@@ -71,58 +73,46 @@
          (build waf-build) ; only change compared to 'lower' in python.scm
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
-(define* (waf-build store name inputs
-                       #:key
-                       (tests? #t)
-                       (test-target "check")
-                       (configure-flags ''())
-                       (phases '(@ (guix build waf-build-system)
-                                   %standard-phases))
-                       (outputs '("out"))
-                       (search-paths '())
-                       (system (%current-system))
-                       (guile #f)
-                       (imported-modules %waf-build-system-modules)
-                       (modules '((guix build waf-build-system)
-                                  (guix build utils))))
+(define* (waf-build name inputs
+                    #:key source
+                    (tests? #t)
+                    (test-target "check")
+                    (configure-flags #~'())
+                    (phases '%standard-phases)
+                    (outputs '("out"))
+                    (search-paths '())
+                    (system (%current-system))
+                    (guile #f)
+                    (imported-modules %waf-build-system-modules)
+                    (modules '((guix build waf-build-system)
+                               (guix build utils))))
   "Build SOURCE with INPUTS.  This assumes that SOURCE provides a 'waf' file
 as its build system."
-  (define builder
-    `(begin
-       (use-modules ,@modules)
-       (waf-build #:name ,name
-                  #:source ,(match (assoc-ref inputs "source")
-                              (((? derivation? source))
-                               (derivation->output-path source))
-                              ((source)
-                               source)
-                              (source
-                               source))
-                  #:configure-flags ,configure-flags
-                  #:system ,system
-                  #:test-target ,test-target
-                  #:tests? ,tests?
-                  #:phases ,phases
-                  #:outputs %outputs
-                  #:search-paths ',(map search-path-specification->sexp
-                                        search-paths)
-                  #:inputs %build-inputs)))
+  (define build
+    #~(begin
+        (use-modules #$@(sexp->gexp modules))
 
-  (define guile-for-build
-    (match guile
-      ((? package?)
-       (package-derivation store guile system #:graft? #f))
-      (#f                                         ; the default
-       (let* ((distro (resolve-interface '(gnu packages commencement)))
-              (guile  (module-ref distro 'guile-final)))
-         (package-derivation store guile system #:graft? #f)))))
+        #$(with-build-variables inputs outputs
+            #~(waf-build #:name #$name
+                         #:source #+source
+                         #:configure-flags #$configure-flags
+                         #:system #$system
+                         #:test-target #$test-target
+                         #:tests? #$tests?
+                         #:phases #$phases
+                         #:outputs %outputs
+                         #:search-paths '#$(sexp->gexp
+                                            (map search-path-specification->sexp
+                                                 search-paths))
+                         #:inputs %build-inputs))))
 
-  (build-expression->derivation store name builder
-                                #:inputs inputs
-                                #:system system
-                                #:modules imported-modules
-                                #:outputs outputs
-                                #:guile-for-build guile-for-build))
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name build
+                      #:system system
+                      #:target #f
+                      #:modules imported-modules
+                      #:guile-for-build guile)))
 
 (define waf-build-system
   (build-system
diff --git a/guix/build/copy-build-system.scm b/guix/build/copy-build-system.scm
index a86f0cde29..fb2d1db056 100644
--- a/guix/build/copy-build-system.scm
+++ b/guix/build/copy-build-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,7 +59,7 @@ In the above, FILTERS are optional.
       one of the elements in the list.
     - With `#:include-regexp`, install subpaths matching the regexps in the list.
     - The `#:exclude*` FILTERS work similarly.  Without `#:include*` flags,
-      install every subpath but the files matching the `#:exlude*` filters.
+      install every subpath but the files matching the `#:exclude*` filters.
       If both `#:include*` and `#:exclude*` are specified, the exclusion is done
       on the inclusion list.
 
@@ -133,8 +134,8 @@ given, then the predicate always returns DEFAULT-VALUE."
              file-list))))
 
   (define* (install source target #:key include exclude include-regexp exclude-regexp)
-    (set! target (string-append (assoc-ref outputs "out") "/" target))
-    (let ((filters? (or include exclude include-regexp exclude-regexp)))
+    (let ((final-target (string-append (assoc-ref outputs "out") "/" target))
+          (filters? (or include exclude include-regexp exclude-regexp)))
       (when (and (not (file-is-directory? source))
                  filters?)
         (error "Cannot use filters when SOURCE is a file."))
@@ -143,12 +144,12 @@ given, then the predicate always returns DEFAULT-VALUE."
                  (and (file-is-directory? source)
                       filters?))))
         (if multi-files-in-source?
-            (install-file-list source target
+            (install-file-list source final-target
                                #:include include
                                #:exclude exclude
                                #:include-regexp include-regexp
                                #:exclude-regexp exclude-regexp)
-            (install-simple source target)))))
+            (install-simple source final-target)))))
 
   (for-each (lambda (plan) (apply install plan)) install-plan)
   #t)
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index f13162d6c4..e6b88ad640 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -120,24 +120,10 @@ environment variable\n" source-directory))
   "Substitute the absolute \"/bin/\" directory with the right location in the
 store in '.el' files."
 
-  (define (file-contains-nul-char? file)
-    (call-with-input-file file
-      (lambda (in)
-        (let loop ((line (read-line in 'concat)))
-          (cond
-           ((eof-object? line) #f)
-           ((string-index line #\nul) #t)
-           (else (loop (read-line in 'concat))))))
-      #:binary #t))
-
   (let* ((out (assoc-ref outputs "out"))
          (elpa-name-ver (store-directory->elpa-name-version out))
          (el-dir (string-append out %install-dir "/" elpa-name-ver))
-         ;; (ice-9 regex) uses libc's regexp routines, which cannot deal with
-         ;; strings containing NULs.  Filter out such files.  TODO: Remove
-         ;; this workaround when <https://bugs.gnu.org/30116> is fixed.
-         (el-files (remove file-contains-nul-char?
-                           (find-files (getcwd) "\\.el$"))))
+         (el-files (find-files (getcwd) "\\.el$")))
     (define (substitute-program-names)
       (substitute* el-files
         (("\"/bin/([^.]\\S*)\"" _ cmd-name)
diff --git a/guix/build/glib-or-gtk-build-system.scm b/guix/build/glib-or-gtk-build-system.scm
index ba680fd1a9..475a94ae4f 100644
--- a/guix/build/glib-or-gtk-build-system.scm
+++ b/guix/build/glib-or-gtk-build-system.scm
@@ -2,6 +2,8 @@
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +29,8 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (%standard-phases
+            %gdk-pixbuf-loaders-cache-file
+            generate-gdk-pixbuf-loaders-cache
             glib-or-gtk-build))
 
 ;; Commentary:
@@ -50,12 +54,24 @@
   "Check for the existence of \"libdir/gtk-v.0\" in INPUTS.  Return a list
 with all found directories."
   (let* ((version
-          (if (string-match "gtk\\+-3"
-                            (or (assoc-ref inputs "gtk+")
-                                (assoc-ref inputs "source")
-                                "gtk+-3")) ; we default to version 3
-              "3.0"
-              "2.0"))
+          (cond
+           ((string-match "gtk-4"
+                          (or (assoc-ref inputs "gtk")
+                              (assoc-ref inputs "source")
+                              ""))
+            "4.0")
+           ((string-match "gtk\\+-3"
+                          (or (assoc-ref inputs "gtk+")
+                              (assoc-ref inputs "source")
+                              ""))
+            "3.0")
+           ((string-match "gtk\\+-2"
+                          (or (assoc-ref inputs "gtk+")
+                              (assoc-ref inputs "source")
+                              ""))
+            "2.0")
+           (else
+            "4.0"))) ; We default to version 4.0.
          (gtk-module
           (lambda (input prev)
             (let* ((in (match input
@@ -136,69 +152,41 @@ Wrapping is not applied to outputs whose name is listed in
 GLIB-OR-GTK-WRAP-EXCLUDED-OUTPUTS.  This is useful when an output is known not
 to contain any GLib or GTK+ binaries, and where wrapping would gratuitously
 add a dependency of that output on GLib and GTK+."
+  ;; Do not require bash to be present in the package inputs
+  ;; even when there is nothing to wrap.
+  ;; Also, calculate (sh) only once to prevent some I/O.
+  (define %sh (delay (search-input-file inputs "bin/bash")))
+  (define (sh) (force %sh))
   (define handle-output
     (match-lambda
-     ((output . directory)
-      (unless (member output glib-or-gtk-wrap-excluded-outputs)
-        (let* ((bindir       (string-append directory "/bin"))
-               (libexecdir   (string-append directory "/libexec"))
-               (bin-list     (append (find-files bindir ".*")
-                                     (find-files libexecdir ".*")))
-               (datadirs     (data-directories
-                              (alist-cons output directory inputs)))
-               (gtk-mod-dirs (gtk-module-directories
-                              (alist-cons output directory inputs)))
-               (gio-mod-dirs (gio-module-directories
-                              (alist-cons output directory inputs)))
-               (data-env-var
-                (if (not (null? datadirs))
-                    `("XDG_DATA_DIRS" ":" prefix ,datadirs)
-                    #f))
-               (gtk-mod-env-var
-                (if (not (null? gtk-mod-dirs))
-                    `("GTK_PATH" ":" prefix ,gtk-mod-dirs)
-                    #f))
-               (gio-mod-env-var 
-                (if (not (null? gio-mod-dirs))
-                    `("GIO_EXTRA_MODULES" ":" prefix ,gio-mod-dirs)
-                    #f)))
-          (cond
-           ((and data-env-var gtk-mod-env-var gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gtk-mod-env-var
-                           gio-mod-env-var)
-                      bin-list))
-           ((and data-env-var gtk-mod-env-var (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and data-env-var (not gtk-mod-env-var) gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gio-mod-env-var)
-                      bin-list))
-           ((and (not data-env-var) gtk-mod-env-var gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           gio-mod-env-var
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and data-env-var (not gtk-mod-env-var) (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           data-env-var)
-                      bin-list))
-           ((and (not data-env-var) gtk-mod-env-var (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and (not data-env-var) (not gtk-mod-env-var) gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           gio-mod-env-var)
-                      bin-list))))))))
-
-  (for-each handle-output outputs)
-  #t)
+      ((output . directory)
+       (unless (member output glib-or-gtk-wrap-excluded-outputs)
+         (let* ((bindir       (string-append directory "/bin"))
+                (libexecdir   (string-append directory "/libexec"))
+                (bin-list     (filter (negate wrapped-program?)
+                                      (append (find-files bindir ".*")
+                                          (find-files libexecdir ".*"))))
+                (datadirs     (data-directories
+                               (alist-cons output directory inputs)))
+                (gtk-mod-dirs (gtk-module-directories
+                               (alist-cons output directory inputs)))
+                (gio-mod-dirs (gio-module-directories
+                               (alist-cons output directory inputs)))
+                (env-vars `(,@(if (not (null? datadirs))
+                                  (list `("XDG_DATA_DIRS" ":" prefix ,datadirs))
+                                  '())
+                            ,@(if (not (null? gtk-mod-dirs))
+                                  (list `("GTK_PATH" ":" prefix ,gtk-mod-dirs))
+                                  '())
+                            ,@(if (not (null? gio-mod-dirs))
+                                  (list `("GIO_EXTRA_MODULES" ":"
+                                          prefix ,gio-mod-dirs))
+                                  '()))))
+           (for-each (lambda (program)
+                       (apply wrap-program program #:sh (sh) env-vars))
+                     bin-list))))))
+
+  (for-each handle-output outputs))
 
 (define* (compile-glib-schemas #:key outputs #:allow-other-keys)
   "Implement phase \"glib-or-gtk-compile-schemas\": compile \"glib\" schemas
@@ -211,11 +199,58 @@ if needed."
                             (not (file-exists?
                                   (string-append schemasdir "/gschemas.compiled"))))
                    (invoke "glib-compile-schemas" schemasdir)))))
-            outputs)
-  #t)
+            outputs))
+
+;; This file is to be generated by the
+;; `generate-gdk-pixbuf-loaders-cache' build phase defined below.
+(define %gdk-pixbuf-loaders-cache-file
+  "lib/gdk-pixbuf-2.0/2.10.0/loaders.cache")
+
+(define (generate-gdk-pixbuf-loaders-cache directories outputs)
+  "Generate the loaders.cache file used by gdk-pixbuf to locate the available
+loaders among DIRECTORIES, and set the GDK_PIXBUF_MODULE_FILE environment
+variable.  The cache file is installed under OUTPUTS.  Return the first cache
+file name if one was created else #f."
+  (let* ((loaders (append-map
+                   (cut find-files <> "^libpixbufloader-.*\\.so$")
+                   directories))
+         (outputs* (map (cut string-append <> "/"
+                             %gdk-pixbuf-loaders-cache-file)
+                        outputs))
+         (loaders.cache (first outputs*))
+         (loaders.cache-copies (cdr outputs*)))
+    (if (not (null? loaders))
+        (begin
+          (mkdir-p (dirname loaders.cache))
+          (setenv "GDK_PIXBUF_MODULE_FILE" loaders.cache)
+          (apply invoke "gdk-pixbuf-query-loaders" "--update-cache" loaders)
+          (for-each (lambda (f)
+                      (mkdir-p (dirname f))
+                      (copy-file loaders.cache f))
+                    loaders.cache-copies)
+          loaders.cache)
+        #f)))
+
+(define* (generate-gdk-pixbuf-loaders-cache-file #:key inputs outputs
+                                                 #:allow-other-keys)
+  "Build phase that Wraps the GENERATE-GDK-PIXBUF-LOADERS-CACHE procedure."
+  ;; Conditionally compute the cache file if the gdk-pixbuf command is
+  ;; available on PATH (it comes with gdk-pixbuf).
+  (when (which "gdk-pixbuf-query-loaders")
+    (let ((loaders.cache (generate-gdk-pixbuf-loaders-cache
+                          (map cdr inputs)
+                          (filter-map identity
+                                      (list
+                                       (assoc-ref outputs "out")
+                                       (assoc-ref outputs "bin")
+                                       (assoc-ref outputs "lib"))))))
+      (when loaders.cache
+        (format #t "GDK_PIXBUF_MODULE_FILE set to `~a'~%" loaders.cache)))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
+      generate-gdk-pixbuf-loaders-cache-file)
     (add-after 'install 'glib-or-gtk-compile-schemas compile-glib-schemas)
     (add-after 'install 'glib-or-gtk-wrap wrap-all-programs)))
 
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 2e7dff2034..d0f7413268 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (rnrs io ports)
   #:export (%standard-phases
             %license-file-regexp
+            %bootstrap-scripts
             dump-file-contents
             gnu-build))
 
@@ -57,23 +59,26 @@
   "Set the 'SOURCE_DATE_EPOCH' environment variable.  This is used by tools
 that incorporate timestamps as a way to tell them to use a fixed timestamp.
 See https://reproducible-builds.org/specs/source-date-epoch/."
-  (setenv "SOURCE_DATE_EPOCH" "1")
-  #t)
+  (setenv "SOURCE_DATE_EPOCH" "1"))
 
 (define (first-subdirectory directory)
-  "Return the file name of the first sub-directory of DIRECTORY."
+  "Return the file name of the first sub-directory of DIRECTORY or false, when
+there are none."
   (match (scandir directory
                   (lambda (file)
                     (and (not (member file '("." "..")))
                          (file-is-directory? (string-append directory "/"
                                                             file)))))
-    ((first . _) first)))
+    ((first . _) first)
+    (_ #f)))
 
 (define* (set-paths #:key target inputs native-inputs
                     (search-paths '()) (native-search-paths '())
                     #:allow-other-keys)
   (define input-directories
-    (match inputs
+    ;; The "source" input can be a directory, but we don't want it for search
+    ;; paths.  See <https://issues.guix.gnu.org/44924>.
+    (match (alist-delete "source" inputs)
       (((_ . dir) ...)
        dir)))
 
@@ -113,9 +118,7 @@ See https://reproducible-builds.org/specs/source-date-epoch/."
                                                #:separator separator
                                                #:type type
                                                #:pattern pattern)))
-              native-search-paths))
-
-  #t)
+              native-search-paths)))
 
 (define* (install-locale #:key
                          (locale "en_US.utf8")
@@ -134,15 +137,13 @@ chance to be set."
       (setenv (locale-category->string locale-category) locale)
 
       (format (current-error-port) "using '~a' locale for category ~s~%"
-              locale (locale-category->string locale-category))
-      #t)
+              locale (locale-category->string locale-category)))
     (lambda args
       ;; This is known to fail for instance in early bootstrap where locales
       ;; are not available.
       (format (current-error-port)
               "warning: failed to install '~a' locale: ~a~%"
-              locale (strerror (system-error-errno args)))
-      #t)))
+              locale (strerror (system-error-errno args))))))
 
 (define* (unpack #:key source #:allow-other-keys)
   "Unpack SOURCE in the working directory, and change directory within the
@@ -156,13 +157,25 @@ working directory."
         ;; Preserve timestamps (set to the Epoch) on the copied tree so that
         ;; things work deterministically.
         (copy-recursively source "."
-                          #:keep-mtime? #t))
+                          #:keep-mtime? #t)
+        ;; Make the source checkout files writable, for convenience.
+        (for-each (lambda (f)
+                    (false-if-exception (make-file-writable f)))
+                  (find-files ".")))
       (begin
-        (if (string-suffix? ".zip" source)
-            (invoke "unzip" source)
-            (invoke "tar" "xvf" source))
-        (chdir (first-subdirectory "."))))
-  #t)
+        (cond
+         ((string-suffix? ".zip" source)
+          (invoke "unzip" source))
+         ((tarball? source)
+          (invoke "tar" "xvf" source))
+         (else
+          (let ((name (strip-store-file-name source))
+                (command (compressor source)))
+            (copy-file source name)
+            (when command
+              (invoke command "--decompress" name)))))
+        ;; Attempt to change into child directory.
+        (and=> (first-subdirectory ".") chdir))))
 
 (define %bootstrap-scripts
   ;; Typical names of Autotools "bootstrap" scripts.
@@ -205,8 +218,7 @@ working directory."
                 (invoke "autoreconf" "-vif")
                 (format #t "no 'configure.ac' or anything like that, \
 doing nothing~%"))))
-      (format #t "GNU build system bootstrapping not needed~%"))
-  #t)
+      (format #t "GNU build system bootstrapping not needed~%")))
 
 ;; See <http://bugs.gnu.org/17840>.
 (define* (patch-usr-bin-file #:key native-inputs inputs
@@ -220,8 +232,7 @@ things like the ABI being used."
     (for-each (lambda (file)
                 (when (executable-file? file)
                   (patch-/usr/bin/file file)))
-              (find-files "." "^configure$")))
-  #t)
+              (find-files "." "^configure$"))))
 
 (define* (patch-source-shebangs #:key source #:allow-other-keys)
   "Patch shebangs in all source files; this includes non-executable
@@ -233,8 +244,7 @@ $CONFIG_SHELL, but some don't, such as `mkinstalldirs' or Automake's
                         (lambda (file stat)
                           ;; Filter out symlinks.
                           (eq? 'regular (stat:type stat)))
-                        #:stat lstat))
-  #t)
+                        #:stat lstat)))
 
 (define (patch-generated-file-shebangs . rest)
   "Patch shebangs in generated files, including `SHELL' variables in
@@ -249,9 +259,7 @@ makefiles."
                         #:stat lstat))
 
   ;; Patch `SHELL' in generated makefiles.
-  (for-each patch-makefile-SHELL (find-files "." "^(GNU)?[mM]akefile$"))
-
-  #t)
+  (for-each patch-makefile-SHELL (find-files "." "^(GNU)?[mM]akefile$")))
 
 (define* (configure #:key build target native-inputs inputs outputs
                     (configure-flags '()) out-of-source?
@@ -381,8 +389,7 @@ makefiles."
                        `("-j" ,(number->string (parallel-job-count)))
                        '())
                  ,@make-flags)))
-      (format #t "test suite not run~%"))
-  #t)
+      (format #t "test suite not run~%")))
 
 (define* (install #:key (make-flags '()) #:allow-other-keys)
   (apply invoke "make" "install" make-flags))
@@ -400,7 +407,8 @@ makefiles."
     (match-lambda
      ((_ . dir)
       (list (string-append dir "/bin")
-            (string-append dir "/sbin")))))
+            (string-append dir "/sbin")
+            (string-append dir "/libexec")))))
 
   (define output-bindirs
     (append-map bin-directories outputs))
@@ -415,8 +423,7 @@ makefiles."
       (for-each (lambda (dir)
                   (let ((files (list-of-files dir)))
                     (for-each (cut patch-shebang <> path) files)))
-                output-bindirs)))
-  #t)
+                output-bindirs))))
 
 (define* (strip #:key target outputs (strip-binaries? #t)
                 (strip-command (if target
@@ -425,7 +432,7 @@ makefiles."
                 (objcopy-command (if target
                                      (string-append target "-objcopy")
                                      "objcopy"))
-                (strip-flags '("--strip-debug"
+                (strip-flags '("--strip-unneeded"
                                "--enable-deterministic-archives"))
                 (strip-directories '("lib" "lib64" "libexec"
                                      "bin" "sbin"))
@@ -514,8 +521,7 @@ makefiles."
                                   (let ((sub (string-append dir "/" d)))
                                     (and (directory-exists? sub) sub)))
                                 strip-directories)))
-                 outputs)))
-  #t)
+                 outputs))))
 
 (define* (validate-runpath #:key
                            (validate-runpath? #t)
@@ -560,9 +566,7 @@ phase after stripping."
                               outputs)))
         (unless (every* validate dirs)
           (error "RUNPATH validation failed")))
-      (format (current-error-port) "skipping RUNPATH validation~%"))
-
-  #t)
+      (format (current-error-port) "skipping RUNPATH validation~%")))
 
 (define* (validate-documentation-location #:key outputs
                                           #:allow-other-keys)
@@ -582,8 +586,7 @@ and 'man/'.  This phase moves directories to the right place if needed."
 
   (match outputs
     (((names . directories) ...)
-     (for-each validate-output directories)))
-  #t)
+     (for-each validate-output directories))))
 
 (define* (reset-gzip-timestamps #:key outputs #:allow-other-keys)
   "Reset embedded timestamps in gzip files found in OUTPUTS."
@@ -599,8 +602,7 @@ and 'man/'.  This phase moves directories to the right place if needed."
 
   (match outputs
     (((names . directories) ...)
-     (for-each process-directory directories)))
-  #t)
+     (for-each process-directory directories))))
 
 (define* (compress-documentation #:key outputs
                                  (compress-documentation? #t)
@@ -616,7 +618,7 @@ DOCUMENTATION-COMPRESSOR-FLAGS."
     (let ((target (readlink link)))
       (delete-file link)
       (symlink (string-append target compressed-documentation-extension)
-               link)))
+               (string-append link compressed-documentation-extension))))
 
   (define (has-links? file)
     ;; Return #t if FILE has hard links.
@@ -679,8 +681,7 @@ DOCUMENTATION-COMPRESSOR-FLAGS."
       (match outputs
         (((names . directories) ...)
          (for-each maybe-compress directories)))
-      (format #t "not compressing documentation~%"))
-  #t)
+      (format #t "not compressing documentation~%")))
 
 (define* (delete-info-dir-file #:key outputs #:allow-other-keys)
   "Delete any 'share/info/dir' file from OUTPUTS."
@@ -689,8 +690,7 @@ DOCUMENTATION-COMPRESSOR-FLAGS."
            (let ((info-dir-file (string-append directory "/share/info/dir")))
              (when (file-exists? info-dir-file)
                (delete-file info-dir-file)))))
-            outputs)
-  #t)
+            outputs))
 
 
 (define* (patch-dot-desktop-files #:key outputs inputs #:allow-other-keys)
@@ -730,8 +730,74 @@ which cannot be found~%"
                          (("^TryExec=([^/[:blank:]\r\n]*)(.*)$" _ binary rest)
                           (string-append "TryExec="
                                          (which binary) rest)))))))))
-            outputs)
-  #t)
+            outputs))
+
+(define* (make-dynamic-linker-cache #:key outputs
+                                    (make-dynamic-linker-cache? #t)
+                                    #:allow-other-keys)
+  "Create a dynamic linker cache under 'etc/ld.so.cache' in each of the
+OUTPUTS.  This reduces application startup time by avoiding the 'stat' storm
+that traversing all the RUNPATH entries entails."
+  (define (make-cache-for-output directory)
+    (define bin-directories
+      (filter-map (lambda (sub-directory)
+                    (let ((directory (string-append directory "/"
+                                                    sub-directory)))
+                      (and (directory-exists? directory)
+                           directory)))
+                  '("bin" "sbin" "libexec")))
+
+    (define programs
+      ;; Programs that can benefit from the ld.so cache.
+      (append-map (lambda (directory)
+                    (if (directory-exists? directory)
+                        (find-files directory
+                                    (lambda (file stat)
+                                      (and (executable-file? file)
+                                           (elf-file? file))))
+                        '()))
+                  bin-directories))
+
+    (define library-path
+      ;; Directories containing libraries that PROGRAMS depend on,
+      ;; recursively.
+      (delete-duplicates
+       (append-map (lambda (program)
+                     (map dirname (file-needed/recursive program)))
+                   programs)))
+
+    (define cache-file
+      (string-append directory "/etc/ld.so.cache"))
+
+    (define ld.so.conf
+      (string-append (or (getenv "TMPDIR") "/tmp")
+                     "/ld.so.conf"))
+
+    (unless (null? library-path)
+      (mkdir-p (dirname cache-file))
+      (guard (c ((invoke-error? c)
+                 ;; Do not treat 'ldconfig' failure as an error.
+                 (format (current-error-port)
+                         "warning: 'ldconfig' failed:~%")
+                 (report-invoke-error c (current-error-port))))
+        ;; Create a config file to tell 'ldconfig' where to look for the
+        ;; libraries that PROGRAMS need.
+        (call-with-output-file ld.so.conf
+          (lambda (port)
+            (for-each (lambda (directory)
+                        (display directory port)
+                        (newline port))
+                      library-path)))
+
+        (invoke "ldconfig" "-f" ld.so.conf "-C" cache-file)
+        (format #t "created '~a' from ~a library search path entries~%"
+                cache-file (length library-path)))))
+
+  (if make-dynamic-linker-cache?
+      (match outputs
+        (((_ . directories) ...)
+         (for-each make-cache-for-output directories)))
+      (format #t "ld.so cache not built~%")))
 
 (define %license-file-regexp
   ;; Regexp matching license files.
@@ -796,8 +862,7 @@ which cannot be found~%"
                                                         package))
                     (map (cut string-append source "/" <>) files)))
         (format (current-error-port)
-                "failed to find license files~%"))
-    #t))
+                "failed to find license files~%"))))
 
 (define %standard-phases
   ;; Standard build phases, as a list of symbol/procedure pairs.
@@ -813,6 +878,7 @@ which cannot be found~%"
             validate-documentation-location
             delete-info-dir-file
             patch-dot-desktop-files
+            make-dynamic-linker-cache
             install-license-files
             reset-gzip-timestamps
             compress-documentation)))
@@ -840,26 +906,30 @@ in order.  Return #t if all the PHASES succeeded, #f otherwise."
              (exit 1)))
     ;; The trick is to #:allow-other-keys everywhere, so that each procedure in
     ;; PHASES can pick the keyword arguments it's interested in.
-    (every (match-lambda
-             ((name . proc)
-              (let ((start (current-time time-monotonic)))
-                (format #t "starting phase `~a'~%" name)
-                (let ((result (apply proc args))
-                      (end    (current-time time-monotonic)))
-                  (format #t "phase `~a' ~:[failed~;succeeded~] after ~,1f seconds~%"
-                          name result
-                          (elapsed-time end start))
-
-                  ;; Issue a warning unless the result is #t.
-                  (unless (eqv? result #t)
-                    (format (current-error-port) "\
-## WARNING: phase `~a' returned `~s'.  Return values other than #t
-## are deprecated.  Please migrate this package so that its phase
-## procedures report errors by raising an exception, and otherwise
-## always return #t.~%"
-                            name result))
-
-                  ;; Dump the environment variables as a shell script, for handy debugging.
-                  (system "export > $NIX_BUILD_TOP/environment-variables")
-                  result))))
-           phases)))
+    (for-each (match-lambda
+                ((name . proc)
+                 (let ((start (current-time time-monotonic)))
+                   (define (end-of-phase success?)
+                     (let ((end (current-time time-monotonic)))
+                       (format #t "phase `~a' ~:[failed~;succeeded~] after ~,1f seconds~%"
+                               name success?
+                               (elapsed-time end start))
+
+                       ;; Dump the environment variables as a shell script,
+                       ;; for handy debugging.
+                       (system "export > $NIX_BUILD_TOP/environment-variables")))
+
+                   (format #t "starting phase `~a'~%" name)
+                   (with-throw-handler #t
+                     (lambda ()
+                       (apply proc args)
+                       (end-of-phase #t))
+                     (lambda args
+                       ;; This handler executes before the stack is unwound.
+                       ;; The exception is automatically re-thrown from here,
+                       ;; and we should get a proper backtrace.
+                       (format (current-error-port)
+                               "error: in phase '~a': uncaught exception:
+~{~s ~}~%" name args)
+                       (end-of-phase #f))))))
+              phases)))
diff --git a/guix/build/gremlin.scm b/guix/build/gremlin.scm
index e8ea66dfb3..2a74d51dd9 100644
--- a/guix/build/gremlin.scm
+++ b/guix/build/gremlin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,6 +41,17 @@
             elf-dynamic-info-runpath
             expand-origin
 
+            file-dynamic-info
+            file-runpath
+            file-needed
+            file-needed/recursive
+
+            missing-runpath-error?
+            missing-runpath-error-file
+            runpath-too-long-error?
+            runpath-too-long-error-file
+            set-file-runpath
+
             validate-needed-in-runpath
             strip-runpath))
 
@@ -215,7 +226,9 @@ string table if the type is a string."
     (#f #f)
     ((? elf-segment? dynamic)
      (let ((entries (dynamic-entries elf dynamic)))
-       (%elf-dynamic-info (find (matching-entry DT_SONAME) entries)
+       (%elf-dynamic-info (and=> (find (matching-entry DT_SONAME)
+                                       entries)
+                                 dynamic-entry-value)
                           (filter-map (lambda (entry)
                                         (and (= (dynamic-entry-type entry)
                                                 DT_NEEDED)
@@ -232,6 +245,63 @@ string table if the type is a string."
                                               dynamic-entry-value))
                               '()))))))
 
+(define (file-dynamic-info file)
+  "Return the <elf-dynamic-info> record of FILE, or #f if FILE lacks dynamic
+info."
+  (call-with-input-file file
+    (lambda (port)
+      (elf-dynamic-info (parse-elf (get-bytevector-all port))))))
+
+(define (file-runpath file)
+  "Return the DT_RUNPATH dynamic entry of FILE as a list of strings, or #f if
+FILE lacks dynamic info."
+  (and=> (file-dynamic-info file) elf-dynamic-info-runpath))
+
+(define (file-needed file)
+  "Return the list of DT_NEEDED dynamic entries of FILE, or #f if FILE lacks
+dynamic info."
+  (and=> (file-dynamic-info file) elf-dynamic-info-needed))
+
+(define (file-needed/recursive file)
+  "Return two values: the list of absolute .so file names FILE depends on,
+recursively, and the list of .so file names that could not be found.  File
+names are resolved by searching the RUNPATH of the file that NEEDs them.
+
+This is similar to the info returned by the 'ldd' command."
+  (let loop ((files  (list file))
+             (result '())
+             (not-found '()))
+    (match files
+      (()
+       (values (reverse result)
+               (reverse (delete-duplicates not-found))))
+      ((file . rest)
+       (match (file-dynamic-info file)
+         (#f
+          (loop rest result not-found))
+         (info
+          (let ((runpath (elf-dynamic-info-runpath info))
+                (needed  (elf-dynamic-info-needed info)))
+            (if (and runpath needed)
+                (let* ((runpath  (map (cute expand-origin <> (dirname file))
+                                      runpath))
+                       (resolved (map (cut search-path runpath <>)
+                                      needed))
+                       (failed   (filter-map (lambda (needed resolved)
+                                               (and (not resolved)
+                                                    (not (libc-library? needed))
+                                                    needed))
+                                             needed resolved))
+                       (needed   (remove (lambda (value)
+                                           (or (not value)
+                                               ;; XXX: quadratic
+                                               (member value result)))
+                                         resolved)))
+                  (loop (append rest needed)
+                        (append needed result)
+                        (append failed not-found)))
+                (loop rest result not-found)))))))))
+
 (define %libc-libraries
   ;; List of libraries as of glibc 2.21 (there are more but those are
   ;; typically mean to be LD_PRELOADed and thus do not appear as NEEDED.)
@@ -364,4 +434,49 @@ according to DT_NEEDED."
       (false-if-exception (close-port port))
       (apply throw key args))))
 
-;;; gremlin.scm ends here
+
+(define-condition-type &missing-runpath-error &elf-error
+  missing-runpath-error?
+  (file      missing-runpath-error-file))
+
+(define-condition-type &runpath-too-long-error &elf-error
+  runpath-too-long-error?
+  (file      runpath-too-long-error-file))
+
+(define (set-file-runpath file path)
+  "Set the value of the DT_RUNPATH dynamic entry of FILE, which must name an
+ELF file, to PATH, a list of strings.  Raise a &missing-runpath-error or
+&runpath-too-long-error when appropriate."
+  (define (call-with-input+output-file file proc)
+    (let ((port (open-file file "r+b")))
+      (guard (c (#t (close-port port) (raise c)))
+        (proc port)
+        (close-port port))))
+
+  (call-with-input+output-file file
+    (lambda (port)
+      (let* ((elf     (parse-elf (get-bytevector-all port)))
+             (entries (dynamic-entries elf (dynamic-link-segment elf)))
+             (runpath (find (lambda (entry)
+                              (= DT_RUNPATH (dynamic-entry-type entry)))
+                            entries))
+             (path    (string->utf8 (string-join path ":"))))
+        (unless runpath
+          (raise (condition (&missing-runpath-error (elf elf)
+                                                    (file file)))))
+
+        ;; There might be padding left beyond RUNPATH in the string table, but
+        ;; we don't know, so assume there's no padding.
+        (unless (<= (bytevector-length path)
+                    (bytevector-length
+                     (string->utf8 (dynamic-entry-value runpath))))
+          (raise (condition (&runpath-too-long-error (elf #f #;elf)
+                                                     (file file)))))
+
+        (seek port (dynamic-entry-offset runpath) SEEK_SET)
+        (put-bytevector port path)
+        (put-u8 port 0)))))
+
+;;; Local Variables:
+;;; eval: (put 'call-with-input+output-file 'scheme-indent-function 1)
+;;; End:
diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index 41c69665c6..b4e0044567 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019, 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,8 +75,7 @@ Project.toml)."
                                       julia-package-name
                                       (project.toml->name "Project.toml")))))
     (mkdir-p package-dir)
-    (copy-recursively (getcwd) package-dir))
-  #t)
+    (copy-recursively (getcwd) package-dir)))
 
 (define* (precompile #:key source inputs outputs julia-package-name
                      #:allow-other-keys)
@@ -99,15 +99,22 @@ Project.toml)."
      ;; element of DEPOT_PATH.  Once the cache file exists, this hack is not
      ;; needed anymore (like in the check phase).  If the user install new
      ;; packages, those will be installed and precompiled in the home dir.
-     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using " package)))
-  #t)
+     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using "
+                    package))))
 
 (define* (check #:key tests? source inputs outputs julia-package-name
-                #:allow-other-keys)
+                parallel-tests? #:allow-other-keys)
   (when tests?
     (let* ((out (assoc-ref outputs "out"))
            (package (or julia-package-name (project.toml->name "Project.toml")))
-           (builddir (string-append out "/share/julia/")))
+           (builddir (string-append out "/share/julia/"))
+           (job-count (if parallel-tests?
+                          (parallel-job-count)
+                          1))
+           ;; The --proc argument of Julia *adds* extra processors rather than
+           ;; specify the exact count to use, so zero must be specified to
+           ;; disable parallel processing...
+           (additional-procs (max 0 (1- job-count))))
       ;; With a patch, SOURCE_DATE_EPOCH is honored
       (setenv "SOURCE_DATE_EPOCH" "1")
       (setenv "JULIA_DEPOT_PATH" builddir)
@@ -115,14 +122,21 @@ Project.toml)."
               (string-append builddir "loadpath/" ":"
                              (or (getenv "JULIA_LOAD_PATH")
                                  "")))
+      (setenv "JULIA_CPU_THREADS" (number->string job-count))
       (setenv "HOME" "/tmp")
-      (invoke "julia" "--depwarn=yes"
-              (string-append builddir "loadpath/"
-                             package "/test/runtests.jl"))))
-  #t)
+      (apply invoke "julia"
+             `("--depwarn=yes"
+               ,@(if parallel-tests?
+                     ;; XXX: ... but '--procs' doesn't accept 0 as a valid
+                     ;; value, so just omit the argument entirely.
+                     (list (string-append  "--procs="
+                                           (number->string additional-procs)))
+                     '())
+               ,(string-append builddir "loadpath/"
+                               package "/test/runtests.jl"))))))
 
-(define* (link-depot #:key source inputs outputs julia-package-name julia-package-uuid
-                     #:allow-other-keys)
+(define* (link-depot #:key source inputs outputs
+                     julia-package-name julia-package-uuid  #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package-name (or
                         julia-package-name
@@ -137,10 +151,11 @@ println(Base.version_slug(Base.UUID(\"~a\"),
     ;; When installing a package, julia looks first at in the JULIA_DEPOT_PATH
     ;; for a path like packages/PACKAGE/XXXX
     ;; Where XXXX is a slug encoding the package UUID and SHA1 of the files
-    ;; Here we create a link with the correct path to enable julia to find the package
+    ;; Here we create a link with the correct path to enable julia to find the
+    ;; package
     (mkdir-p (string-append out "/share/julia/packages/" package-name))
-    (symlink package-dir (string-append out "/share/julia/packages/" package-name "/" slug)))
-  #t)
+    (symlink package-dir (string-append out "/share/julia/packages/"
+                                        package-name "/" slug))))
 
 (define (julia-create-package-toml outputs source
                                    name uuid version
@@ -166,8 +181,7 @@ version = \"" version "\"
                   (display (string-append (car (car dep)) " = \"" (cdr (car dep)) "\"\n")
                            f))
                 deps))
-    (close-port f))
-  #t)
+    (close-port f)))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm
index 8a02cb68dd..17d2637f87 100644
--- a/guix/build/lisp-utils.scm
+++ b/guix/build/lisp-utils.scm
@@ -281,7 +281,7 @@ DEPENDENCY-PREFIXES to ensure references to those libraries are retained."
                               type
                               compress?
                               #:allow-other-keys)
-  "Generate an executable by using asdf operation TYPE, containing whithin the
+  "Generate an executable by using asdf operation TYPE, containing within the
 image all DEPENDENCIES, and running ENTRY-PROGRAM in the case of an
 executable.  Link in any asd files from DEPENDENCY-PREFIXES to ensure
 references to those libraries are retained."
diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scm
index 9e35e47a7f..193a76b7cb 100644
--- a/guix/build/maven/pom.scm
+++ b/guix/build/maven/pom.scm
@@ -293,7 +293,7 @@ this repository contains."
                                #:key with-plugins? with-build-dependencies?
                                      with-modules? (excludes '())
                                      (local-packages '()))
-  "Open @var{pom-file}, and override its content, rewritting its dependencies
+  "Open @var{pom-file}, and override its content, rewriting its dependencies
 to set their version to the latest version available in the @var{inputs}.
 
 @var{#:with-plugins?} controls whether plugins are also overridden.
diff --git a/guix/build/meson-build-system.scm b/guix/build/meson-build-system.scm
index 8043a84abb..61ce45367d 100644
--- a/guix/build/meson-build-system.scm
+++ b/guix/build/meson-build-system.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -63,16 +64,17 @@
                            (number->string (parallel-job-count))
                            "1")))
 
-(define* (check #:key test-target parallel-tests? tests?
+(define* (check #:key tests? test-options parallel-tests?
                 #:allow-other-keys)
-  (setenv "MESON_TESTTHREADS"
-          (if parallel-tests?
-              (number->string (parallel-job-count))
-              "1"))
   (if tests?
-      (invoke "ninja" test-target)
-      (format #t "test suite not run~%"))
-  #t)
+      (begin
+        (setenv "MESON_TESTTHREADS"
+                (if parallel-tests?
+                    (number->string (parallel-job-count))
+                    "1"))
+        ;; Always provide "-t 0" to disable the 30 s default timeout.
+        (apply invoke "meson" "test" "--print-errorlogs" "-t" "0" test-options))
+      (format #t "test suite not run~%")))
 
 (define* (install #:rest args)
   (invoke "ninja" "install"))
@@ -100,7 +102,7 @@ for example libraries only needed for the tests."
                                             (find-files dir elf-pred))
                                           existing-elf-dirs))))
          (for-each strip-runpath elf-list)))))
-  (for-each handle-output outputs)
+  (for-each handle-output (alist-delete "debug" outputs))
   #t)
 
 (define %standard-phases
diff --git a/guix/build/meson-configuration.scm b/guix/build/meson-configuration.scm
new file mode 100644
index 0000000000..1aac5f8f0a
--- /dev/null
+++ b/guix/build/meson-configuration.scm
@@ -0,0 +1,56 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;;
+;;; 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 (guix build meson-configuration)
+  #:use-module (ice-9 match)
+  #:export (write-section-header write-assignment write-assignments))
+
+;; Commentary:
+;;
+;; Utilities for generating a ‘Cross build definition file’ for
+;; the Meson build system.  Configuration values are currently
+;; never escaped.  In practice this is unlikely to be a problem
+;; in the build environment.
+;;
+;; Code:
+
+(define (write-section-header port section-name)
+  "Write a section header for a section named SECTION-NAME to PORT."
+  (format port "[~a]~%" section-name))
+
+(define (write-assignment port key value)
+  "Write an assignment of VALUE to KEY to PORT.
+
+VALUE must be a string (without any special characters such as quotes),
+a boolean or an integer.  Lists are currently not supported"
+  (match value
+    ((? string?)
+     (format port "~a = '~a'~%" key value))
+    ((? integer?)
+     (format port "~a = ~a~%" key value))
+    (#f
+     (format port "~a = true~%" key))
+    (#t
+     (format port "~a = false~%" key))))
+
+(define* (write-assignments port alist)
+  "Write the assignments in ALIST, an association list, to PORT."
+  (for-each (match-lambda
+              ((key . value)
+               (write-assignment port key value)))
+            alist))
diff --git a/guix/build/minify-build-system.scm b/guix/build/minify-build-system.scm
index c5a876726f..5789ca3f0f 100644
--- a/guix/build/minify-build-system.scm
+++ b/guix/build/minify-build-system.scm
@@ -23,6 +23,7 @@
   #:use-module (guix build utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
   #:use-module (ice-9 popen)
   #:export (%standard-phases
             minify-build
@@ -42,14 +43,17 @@
          (minified (open-pipe* OPEN_READ "uglifyjs" file)))
     (call-with-output-file installed
       (cut dump-port minified <>))
-    #t))
+    (match (close-pipe minified)
+      (0 #t)
+      (status
+       (error "uglify-js failed" status)))))
 
 (define* (build #:key javascript-files
                 #:allow-other-keys)
   (let ((files (or javascript-files
                    (find-files "src" "\\.js$"))))
     (mkdir-p "guix/build")
-    (every (cut minify <> #:directory "guix/build/") files)))
+    (for-each (cut minify <> #:directory "guix/build/") files)))
 
 (define* (install #:key outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
@@ -60,8 +64,7 @@
         (if (not (zero? (stat:size (stat file))))
           (install-file file js)
           (error "File is empty: " file)))
-      (find-files "guix/build" "\\.min\\.js$")))
-  #t)
+      (find-files "guix/build" "\\.min\\.js$"))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
diff --git a/guix/build/python-build-system.scm b/guix/build/python-build-system.scm
index 09bd8465c8..08871f60cd 100644
--- a/guix/build/python-build-system.scm
+++ b/guix/build/python-build-system.scm
@@ -6,6 +6,11 @@
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
+;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +32,7 @@
   #:use-module (guix build utils)
   #:use-module (ice-9 match)
   #:use-module (ice-9 ftw)
+  #:use-module (ice-9 format)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (%standard-phases
@@ -128,6 +134,15 @@
              (apply invoke "python" "./setup.py" command params)))
       (error "no setup.py found")))
 
+(define* (sanity-check #:key tests? inputs outputs #:allow-other-keys)
+  "Ensure packages depending on this package via setuptools work properly,
+their advertised endpoints work and their top level modules are importable
+without errors."
+  (let ((sanity-check.py (assoc-ref inputs "sanity-check.py")))
+    ;; Make sure the working directory is empty (i.e. no Python modules in it)
+    (with-directory-excursion "/tmp"
+      (invoke "python" sanity-check.py (site-packages inputs outputs)))))
+
 (define* (build #:key use-setuptools? #:allow-other-keys)
   "Build a given Python package."
   (call-setuppy "build" '() use-setuptools?)
@@ -154,65 +169,86 @@
          (major+minor (take components 2)))
     (string-join major+minor ".")))
 
+(define (python-output outputs)
+  "Return the path of the python output, if there is one, or fall-back to out."
+  (or (assoc-ref outputs "python")
+      (assoc-ref outputs "out")))
+
 (define (site-packages inputs outputs)
   "Return the path of the current output's Python site-package."
-  (let* ((out (assoc-ref outputs "out"))
+  (let* ((out (python-output outputs))
          (python (assoc-ref inputs "python")))
-    (string-append out "/lib/python"
-                   (python-version python)
-                   "/site-packages/")))
+    (string-append out "/lib/python" (python-version python) "/site-packages")))
 
 (define (add-installed-pythonpath inputs outputs)
-  "Prepend the Python site-package of OUTPUT to PYTHONPATH.  This is useful
-when running checks after installing the package."
-  (let ((old-path (getenv "PYTHONPATH"))
-        (add-path (site-packages inputs outputs)))
-    (setenv "PYTHONPATH"
-            (string-append add-path
-                           (if old-path (string-append ":" old-path) "")))
-    #t))
+  "Prepend the site-package of OUTPUT to GUIX_PYTHONPATH.  This is useful when
+running checks after installing the package."
+  (setenv "GUIX_PYTHONPATH" (string-append (site-packages inputs outputs) ":"
+                                           (getenv "GUIX_PYTHONPATH"))))
+
+(define* (add-install-to-pythonpath #:key inputs outputs #:allow-other-keys)
+  "A phase that just wraps the 'add-installed-pythonpath' procedure."
+  (add-installed-pythonpath inputs outputs))
 
-(define* (install #:key outputs (configure-flags '()) use-setuptools?
+(define* (add-install-to-path #:key outputs #:allow-other-keys)
+  "Adding Python scripts to PATH is also often useful in tests."
+  (setenv "PATH" (string-append (assoc-ref outputs "out")
+                                "/bin:"
+                                (getenv "PATH"))))
+
+(define* (install #:key inputs outputs (configure-flags '()) use-setuptools?
                   #:allow-other-keys)
   "Install a given Python package."
-  (let* ((out (assoc-ref outputs "out"))
-         (params (append (list (string-append "--prefix=" out))
+  (let* ((out (python-output outputs))
+         (python (assoc-ref inputs "python"))
+         (major-minor (map string->number
+                           (take (string-split (python-version python) #\.) 2)))
+         (<3.7? (match major-minor
+                   ((major minor)
+                    (or (< major 3) (and (= major 3) (< minor 7))))))
+         (params (append (list (string-append "--prefix=" out)
+                               "--no-compile")
                          (if use-setuptools?
                              ;; distutils does not accept these flags
                              (list "--single-version-externally-managed"
-                                    "--root=/")
+                                   "--root=/")
                              '())
                          configure-flags)))
     (call-setuppy "install" params use-setuptools?)
-    #t))
+    ;; Rather than produce potentially non-reproducible .pyc files on Pythons
+    ;; older than 3.7, whose 'compileall' module lacks the
+    ;; '--invalidation-mode' option, do not generate any.
+    (unless <3.7?
+      (invoke "python" "-m" "compileall" "--invalidation-mode=unchecked-hash"
+              out))))
 
 (define* (wrap #:key inputs outputs #:allow-other-keys)
   (define (list-of-files dir)
     (find-files dir (lambda (file stat)
                       (and (eq? 'regular (stat:type stat))
-                           (not (wrapper? file))))))
+                           (not (wrapped-program? file))))))
 
   (define bindirs
     (append-map (match-lambda
-                 ((_ . dir)
-                  (list (string-append dir "/bin")
-                        (string-append dir "/sbin"))))
+                  ((_ . dir)
+                   (list (string-append dir "/bin")
+                         (string-append dir "/sbin"))))
                 outputs))
 
-  (let* ((out  (assoc-ref outputs "out"))
-         (python (assoc-ref inputs "python"))
-         (var `("PYTHONPATH" prefix
-                ,(cons (string-append out "/lib/python"
-                                      (python-version python)
-                                      "/site-packages")
-                       (search-path-as-string->list
-                        (or (getenv "PYTHONPATH") ""))))))
+  ;; Do not require "bash" to be present in the package inputs
+  ;; even when there is nothing to wrap.
+  ;; Also, calculate (sh) only once to prevent some I/O.
+  (define %sh (delay (search-input-file inputs "bin/bash")))
+  (define (sh) (force %sh))
+
+  (let* ((var `("GUIX_PYTHONPATH" prefix
+                ,(search-path-as-string->list
+                  (or (getenv "GUIX_PYTHONPATH") "")))))
     (for-each (lambda (dir)
                 (let ((files (list-of-files dir)))
-                  (for-each (cut wrap-program <> var)
+                  (for-each (cut wrap-program <> #:sh (sh) var)
                             files)))
-              bindirs)
-    #t))
+              bindirs)))
 
 (define* (rename-pth-file #:key name inputs outputs #:allow-other-keys)
   "Rename easy-install.pth to NAME.pth to avoid conflicts between packages
@@ -220,16 +256,11 @@ installed with setuptools."
   ;; Even if the "easy-install.pth" is not longer created, we kept this phase.
   ;; There still may be packages creating an "easy-install.pth" manually for
   ;; some good reason.
-  (let* ((out (assoc-ref outputs "out"))
-         (python (assoc-ref inputs "python"))
-         (site-packages (string-append out "/lib/python"
-                                       (python-version python)
-                                       "/site-packages"))
+  (let* ((site-packages (site-packages inputs outputs))
          (easy-install-pth (string-append site-packages "/easy-install.pth"))
          (new-pth (string-append site-packages "/" name ".pth")))
     (when (file-exists? easy-install-pth)
-      (rename-file easy-install-pth new-pth))
-    #t))
+      (rename-file easy-install-pth new-pth))))
 
 (define* (ensure-no-mtimes-pre-1980 #:rest _)
   "Ensure that there are no mtimes before 1980-01-02 in the source tree."
@@ -241,32 +272,49 @@ installed with setuptools."
     (ftw "." (lambda (file stat flag)
                (unless (<= early-1980 (stat:mtime stat))
                  (utime file early-1980 early-1980))
-               #t))
-    #t))
+               #t))))
 
 (define* (enable-bytecode-determinism #:rest _)
   "Improve determinism of pyc files."
   ;; Use deterministic hashes for strings, bytes, and datetime objects.
   (setenv "PYTHONHASHSEED" "0")
-  #t)
+  ;; Prevent Python from creating .pyc files when loading modules (such as
+  ;; when running a test suite).
+  (setenv "PYTHONDONTWRITEBYTECODE" "1"))
+
+(define* (ensure-no-cythonized-files #:rest _)
+  "Check the source code for @code{.c} files which may have been pre-generated
+by Cython."
+  (for-each
+    (lambda (file)
+      (let ((generated-file
+              (string-append (string-drop-right file 3) "c")))
+        (when (file-exists? generated-file)
+          (format #t "Possible Cythonized file found: ~a~%" generated-file))))
+    (find-files "." "\\.pyx$")))
 
 (define %standard-phases
   ;; The build phase only builds C extensions and copies the Python sources,
-  ;; while the install phase byte-compiles and copies them to the prefix
-  ;; directory.  The tests are run after the install phase because otherwise
-  ;; the cached .pyc generated during the tests execution seem to interfere
-  ;; with the byte compilation of the install phase.
+  ;; while the install phase copies then byte-compiles the sources to the
+  ;; prefix directory.  The check phase is moved after the installation phase
+  ;; to ease testing the built package.
   (modify-phases gnu:%standard-phases
     (add-after 'unpack 'ensure-no-mtimes-pre-1980 ensure-no-mtimes-pre-1980)
     (add-after 'ensure-no-mtimes-pre-1980 'enable-bytecode-determinism
       enable-bytecode-determinism)
+    (add-after 'enable-bytecode-determinism 'ensure-no-cythonized-files
+      ensure-no-cythonized-files)
     (delete 'bootstrap)
     (delete 'configure)                 ;not needed
     (replace 'build build)
     (delete 'check)                     ;moved after the install phase
     (replace 'install install)
-    (add-after 'install 'check check)
-    (add-after 'install 'wrap wrap)
+    (add-after 'install 'add-install-to-pythonpath add-install-to-pythonpath)
+    (add-after 'add-install-to-pythonpath 'add-install-to-path
+      add-install-to-path)
+    (add-after 'add-install-to-path 'wrap wrap)
+    (add-after 'wrap 'check check)
+    (add-after 'check 'sanity-check sanity-check)
     (add-before 'strip 'rename-pth-file rename-pth-file)))
 
 (define* (python-build #:key inputs (phases %standard-phases)
diff --git a/guix/build/qt-build-system.scm b/guix/build/qt-build-system.scm
index a6955ce4c2..c63bd5ed21 100644
--- a/guix/build/qt-build-system.scm
+++ b/guix/build/qt-build-system.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2019, 2020, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
diff --git a/guix/build/qt-utils.scm b/guix/build/qt-utils.scm
index 5d3a4d22e6..fa018a93ac 100644
--- a/guix/build/qt-utils.scm
+++ b/guix/build/qt-utils.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -133,7 +134,10 @@ add a dependency of that output on Qt."
   (define (find-files-to-wrap output-dir)
     (append-map
      (lambda (dir)
-       (if (directory-exists? dir) (find-files dir ".*") (list)))
+       (if (directory-exists? dir)
+           (find-files dir (lambda (file stat)
+                             (not (wrapped-program? file))))
+           (list)))
      (list (string-append output-dir "/bin")
            (string-append output-dir "/sbin")
            (string-append output-dir "/libexec")
diff --git a/guix/build/rakudo-build-system.scm b/guix/build/rakudo-build-system.scm
index dbdeb1ccd2..5cf1cc55bc 100644
--- a/guix/build/rakudo-build-system.scm
+++ b/guix/build/rakudo-build-system.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,7 +98,8 @@
     (map (cut string-append dir "/" <>)
          (or (scandir dir (lambda (f)
                             (let ((s (stat (string-append dir "/" f))))
-                              (eq? 'regular (stat:type s)))))
+                              (and (eq? 'regular (stat:type s))
+                                   (not (wrapped-program? f))))))
              '())))
 
   (define bindirs
@@ -107,6 +109,12 @@
                         (string-append dir "/sbin"))))
                 outputs))
 
+  ;; Do not require bash to be present in the package inputs
+  ;; even when there is nothing to wrap.
+  ;; Also, calculate (sh) only once to prevent some I/O.
+  (define %sh (delay (search-input-file inputs "bin/bash")))
+  (define (sh) (force %sh))
+
   (let* ((out  (assoc-ref outputs "out"))
          (var `("PERL6LIB" "," prefix
                 ,(cons (string-append out "/share/perl6/lib,"
@@ -116,7 +124,7 @@
                         (or (getenv "PERL6LIB") "") #\,)))))
     (for-each (lambda (dir)
                 (let ((files (list-of-files dir)))
-                  (for-each (cut wrap-program <> var)
+                  (for-each (cut wrap-program <> #:sh (sh) var)
                             files)))
               bindirs)
     #t))
diff --git a/guix/build/rpath.scm b/guix/build/rpath.scm
deleted file mode 100644
index 75a1fef5ef..0000000000
--- a/guix/build/rpath.scm
+++ /dev/null
@@ -1,59 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 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 (guix build rpath)
-  #:use-module (ice-9 popen)
-  #:use-module (ice-9 rdelim)
-  #:export (%patchelf
-            file-rpath
-            augment-rpath))
-
-;;; Commentary:
-;;;
-;;; Tools to manipulate the RPATH and RUNPATH of ELF binaries.  Currently they
-;;; rely on PatchELF.
-;;;
-;;; Code:
-
-(define %patchelf
-  ;; The `patchelf' command.
-  (make-parameter "patchelf"))
-
-(define %not-colon
-  (char-set-complement (char-set #\:)))
-
-(define (file-rpath file)
-  "Return the RPATH (or RUNPATH) of FILE as a list of directory names, or #f
-on failure."
-  (let* ((p (open-pipe* OPEN_READ (%patchelf) "--print-rpath" file))
-         (l (read-line p)))
-    (and (zero? (close-pipe p))
-         (string-tokenize l %not-colon))))
-
-(define (augment-rpath file dir)
-  "Add DIR to the front of the RPATH and RUNPATH of FILE.  Return the new
-RPATH as a list, or #f on failure."
-  (let* ((rpath  (or (file-rpath file) '()))
-         (rpath* (cons dir rpath)))
-    (format #t "~a: changing RPATH from ~s to ~s~%"
-            file rpath rpath*)
-    (and (zero? (system* (%patchelf) "--set-rpath"
-                         (string-join rpath* ":") file))
-         rpath*)))
-
-;;; rpath.scm ends here
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index c957a61115..9aceb187a4 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015 Pjotr Prins <pjotr.public01@thebird.nl>
 ;;; Copyright © 2015, 2016 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,13 +74,19 @@ directory."
 
 (define* (replace-git-ls-files #:key source #:allow-other-keys)
   "Many gemspec files downloaded from outside rubygems.org use `git ls-files`
-to list of the files to be included in the built gem.  However, since this
+to list the files to be included in the built gem.  However, since this
 operation is not deterministic, we replace it with `find`."
-  (when (not (gem-archive? source))
+  (unless (gem-archive? source)
     (let ((gemspec (first-gemspec)))
+      ;; Do not include the freshly built .gem itself as it causes problems.
+      ;; Strip the first 2 characters ("./") to more exactly match the output
+      ;; given by 'git ls-files'.  This is useful to prevent breaking regexps
+      ;; that could be used to filter the list of files.
       (substitute* gemspec
-        (("`git ls-files`") "`find . -type f |sort`")
-        (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))))
+        (("`git ls-files`")
+         "`find . -type f -not -regex '.*\\.gem$' | sort | cut -c3-`")
+        (("`git ls-files -z`")
+         "`find . -type f -not -regex '.*\\.gem$' -print0 | sort -z | cut -zc3-`"))))
   #t)
 
 (define* (extract-gemspec #:key source #:allow-other-keys)
@@ -129,11 +136,7 @@ is #f."
                   #:allow-other-keys)
   "Install the gem archive SOURCE to the output store item.  Additional
 GEM-FLAGS are passed to the 'gem' invocation, if present."
-  (let* ((ruby-version
-          (match:substring (string-match "ruby-(.*)\\.[0-9]$"
-                                         (assoc-ref inputs "ruby"))
-                           1))
-         (out (assoc-ref outputs "out"))
+  (let* ((out (assoc-ref outputs "out"))
          (vendor-dir (string-append out "/lib/ruby/vendor_ruby"))
          (gem-file (first-matching-file "\\.gem$"))
          (gem-file-basename (basename gem-file))
@@ -144,8 +147,8 @@ GEM-FLAGS are passed to the 'gem' invocation, if present."
     (setenv "GEM_VENDOR" vendor-dir)
 
     (or (zero?
-          ;; 'zero? system*' allows the custom error handling to function as
-          ;; expected, while 'invoke' raises its own exception.
+         ;; 'zero? system*' allows the custom error handling to function as
+         ;; expected, while 'invoke' raises its own exception.
          (apply system* "gem" "install" gem-file
                 "--verbose"
                 "--local" "--ignore-dependencies" "--vendor"
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 63bd017d1d..45f95c509d 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -125,6 +125,8 @@
             with-file-lock
             with-file-lock/no-wait
 
+            set-child-subreaper!
+
             set-thread-name
             thread-name
 
@@ -1433,6 +1435,11 @@ handler if the lock is already held by another process."
 
 (define PR_SET_NAME 15)                           ;<linux/prctl.h>
 (define PR_GET_NAME 16)
+(define PR_SET_CHILD_SUBREAPER 36)
+
+(define (set-child-subreaper!)
+  "Set the CHILD_SUBREAPER capability for the current process."
+  (%prctl PR_SET_CHILD_SUBREAPER 1 0 0 0))
 
 (define %max-thread-name-length
   ;; Maximum length in bytes of the process name, including the terminating
diff --git a/guix/build/texlive-build-system.scm b/guix/build/texlive-build-system.scm
index 841c631dae..353fb934a6 100644
--- a/guix/build/texlive-build-system.scm
+++ b/guix/build/texlive-build-system.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,46 +35,19 @@
 ;;
 ;; Code:
 
-(define (compile-with-latex format file)
-  (invoke format
+(define (compile-with-latex engine format file)
+  (invoke engine
           "-interaction=nonstopmode"
           "-output-directory=build"
-          (string-append "&" format)
+          (if format (string-append "&" format) "-ini")
           file))
 
-(define* (configure #:key inputs #:allow-other-keys)
-  (let* ((out       (string-append (getcwd) "/.texlive-union"))
-         (texmf.cnf (string-append out "/share/texmf-dist/web2c/texmf.cnf")))
-    ;; Build a modifiable union of all inputs (but exclude bash)
-    (match inputs
-      (((names . directories) ...)
-       (union-build out (filter directory-exists? directories)
-                    #:create-all-directories? #t
-                    #:log-port (%make-void-port "w"))))
-
-    ;; The configuration file "texmf.cnf" is provided by the
-    ;; "texlive-bin" package.  We take it and override only the
-    ;; setting for TEXMFROOT and TEXMF.  This file won't be consulted
-    ;; by default, though, so we still need to set TEXMFCNF.
-    (substitute* texmf.cnf
-      (("^TEXMFROOT = .*")
-       (string-append "TEXMFROOT = " out "/share\n"))
-      (("^TEXMF = .*")
-       "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-    (setenv "TEXMFCNF" (dirname texmf.cnf))
-    (setenv "TEXMF" (string-append out "/share/texmf-dist"))
-
-    ;; Don't truncate lines.
-    (setenv "error_line" "254") ; must be less than 255
-    (setenv "half_error_line" "238") ; must be less than error_line - 15
-    (setenv "max_print_line" "1000"))
+(define* (build #:key inputs build-targets tex-engine tex-format
+                #:allow-other-keys)
   (mkdir "build")
-  #t)
-
-(define* (build #:key inputs build-targets tex-format #:allow-other-keys)
-  (every (cut compile-with-latex tex-format <>)
-         (if build-targets build-targets
-             (scandir "." (cut string-suffix? ".ins" <>)))))
+  (for-each (cut compile-with-latex tex-engine tex-format <>)
+            (if build-targets build-targets
+                (scandir "." (cut string-suffix? ".ins" <>)))))
 
 (define* (install #:key outputs tex-directory #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
@@ -81,13 +56,12 @@
     (mkdir-p target)
     (for-each delete-file (find-files "." "\\.(log|aux)$"))
     (for-each (cut install-file <> target)
-              (find-files "build" ".*"))
-    #t))
+              (find-files "build" ".*"))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
     (delete 'bootstrap)
-    (replace 'configure configure)
+    (delete 'configure)
     (replace 'build build)
     (delete 'check)
     (replace 'install install)))
diff --git a/guix/build/union.scm b/guix/build/union.scm
index 961ac3298b..bf75c67c52 100644
--- a/guix/build/union.scm
+++ b/guix/build/union.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com>
 ;;;
@@ -99,8 +99,9 @@ identical, #f otherwise."
   ;; a warning doesn't make sense.  For example, "icon-theme.cache" is
   ;; regenerated by a profile hook which shadows the file provided by
   ;; individual packages, and "gschemas.compiled" is made available to
-  ;; applications via 'glib-or-gtk-build-system'.
-  '("icon-theme.cache" "gschemas.compiled"))
+  ;; applications via 'glib-or-gtk-build-system'; "etc/ld.so.cache" is created
+  ;; for most packages.
+  '("icon-theme.cache" "gschemas.compiled" "ld.so.cache"))
 
 (define (warn-about-collision files)
   "Handle the collision among FILES by emitting a warning and choosing the
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 419c10195b..3beb7da67a 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -1,10 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2018, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,9 +52,14 @@
             package-name->name+version
             parallel-job-count
 
+            compressor
+            tarball?
+            %xz-parallel-args
+
             directory-exists?
             executable-file?
             symbolic-link?
+            call-with-temporary-output-file
             call-with-ascii-input-file
             elf-file?
             ar-file?
@@ -72,6 +80,11 @@
             search-path-as-string->list
             list->search-path-as-string
             which
+            search-input-file
+            search-input-directory
+            search-error?
+            search-error-path
+            search-error-file
 
             every*
             alist-cons-before
@@ -89,7 +102,7 @@
             patch-/usr/bin/file
             fold-port-matches
             remove-store-references
-            wrapper?
+            wrapped-program?
             wrap-program
             wrap-script
 
@@ -134,12 +147,39 @@
 
 
 ;;;
+;;; Compression helpers.
+;;;
+
+(define (compressor file-name)
+  "Return the name of the compressor package/binary used to compress or
+decompress FILE-NAME, based on its file extension, else false."
+  (cond ((string-suffix? "gz"  file-name)  "gzip")
+        ((string-suffix? "Z"   file-name)  "gzip")
+        ((string-suffix? "bz2" file-name)  "bzip2")
+        ((string-suffix? "lz"  file-name)  "lzip")
+        ((string-suffix? "zip" file-name)  "unzip")
+        ((string-suffix? "xz"  file-name)  "xz")
+        (else #f)))                ;no compression used/unknown file extension
+
+(define (tarball? file-name)
+  "True when FILE-NAME has a tar file extension."
+  (string-match "\\.(tar(\\..*)?|tgz|tbz)$" file-name))
+
+(define (%xz-parallel-args)
+  "The xz arguments required to enable bit-reproducible, multi-threaded
+compression."
+  (list "--memlimit=50%"
+        (format #f "--threads=~a" (max 2 (parallel-job-count)))))
+
+
+;;;
 ;;; Directories.
 ;;;
 
 (define (%store-directory)
   "Return the directory name of the store."
-  (or (getenv "NIX_STORE")
+  (or (getenv "NIX_STORE_DIR")          ;outside of builder
+      (getenv "NIX_STORE")              ;inside builder, set by the daemon
       "/gnu/store"))
 
 (define (store-file-name? file)
@@ -197,6 +237,22 @@ introduce the version part."
   "Return #t if FILE is a symbolic link (aka. \"symlink\".)"
   (eq? (stat:type (lstat file)) 'symlink))
 
+(define (call-with-temporary-output-file proc)
+  "Call PROC with a name of a temporary file and open output port to that
+file; close the file and delete it when leaving the dynamic extent of this
+call."
+  (let* ((directory (or (getenv "TMPDIR") "/tmp"))
+         (template  (string-append directory "/guix-file.XXXXXX"))
+         (out       (mkstemp! template)))
+    (dynamic-wind
+      (lambda ()
+        #t)
+      (lambda ()
+        (proc template out))
+      (lambda ()
+        (false-if-exception (close out))
+        (false-if-exception (delete-file template))))))
+
 (define (call-with-ascii-input-file file proc)
   "Open FILE as an ASCII or binary file, and pass the resulting port to
 PROC.  FILE is closed when PROC's dynamic extent is left.  Return the
@@ -322,11 +378,13 @@ name."
                            #:key
                            (log (current-output-port))
                            (follow-symlinks? #f)
-                           keep-mtime?)
+                           (copy-file copy-file)
+                           keep-mtime? keep-permissions?)
   "Copy SOURCE directory to DESTINATION.  Follow symlinks if FOLLOW-SYMLINKS?
-is true; otherwise, just preserve them.  When KEEP-MTIME? is true, keep the
-modification time of the files in SOURCE on those of DESTINATION.  Write
-verbose output to the LOG port."
+is true; otherwise, just preserve them.  Call COPY-FILE to copy regular files.
+When KEEP-MTIME? is true, keep the modification time of the files in SOURCE on
+those of DESTINATION.  When KEEP-PERMISSIONS? is true, preserve file
+permissions.  Write verbose output to the LOG port."
   (define strip-source
     (let ((len (string-length source)))
       (lambda (file)
@@ -343,16 +401,21 @@ verbose output to the LOG port."
                              (symlink target dest)))
                           (else
                            (copy-file file dest)
-                           (when keep-mtime?
-                             (set-file-time dest stat))))))
+                           (when keep-permissions?
+                             (chmod dest (stat:perms stat)))))
+                        (when keep-mtime?
+                          (set-file-time dest stat))))
                     (lambda (dir stat result)     ; down
                       (let ((target (string-append destination
                                                    (strip-source dir))))
-                        (mkdir-p target)
-                        (when keep-mtime?
-                          (set-file-time target stat))))
+                        (mkdir-p target)))
                     (lambda (dir stat result)     ; up
-                      result)
+                      (let ((target (string-append destination
+                                                   (strip-source dir))))
+                        (when keep-mtime?
+                          (set-file-time target stat))
+                        (when keep-permissions?
+                          (chmod target (stat:perms stat)))))
                     (const #t)                    ; skip
                     (lambda (file stat errno result)
                       (format (current-error-port) "i/o error: ~a: ~a~%"
@@ -365,6 +428,16 @@ verbose output to the LOG port."
                         stat
                         lstat)))
 
+(define-syntax-rule (warn-on-error expr file)
+  (catch 'system-error
+    (lambda ()
+      expr)
+    (lambda args
+      (format (current-error-port)
+              "warning: failed to delete ~a: ~a~%"
+              file (strerror
+                    (system-error-errno args))))))
+
 (define* (delete-file-recursively dir
                                   #:key follow-mounts?)
   "Delete DIR recursively, like `rm -rf', without following symlinks.  Don't
@@ -375,10 +448,10 @@ errors."
                         (or follow-mounts?
                             (= dev (stat:dev stat))))
                       (lambda (file stat result)   ; leaf
-                        (delete-file file))
+                        (warn-on-error (delete-file file) file))
                       (const #t)                   ; down
                       (lambda (dir stat result)    ; up
-                        (rmdir dir))
+                        (warn-on-error (rmdir dir) dir))
                       (const #t)                   ; skip
                       (lambda (file stat errno result)
                         (format (current-error-port)
@@ -546,6 +619,40 @@ PROGRAM could not be found."
   (search-path (search-path-as-string->list (getenv "PATH"))
                program))
 
+(define-condition-type &search-error &error
+  search-error?
+  (path         search-error-path)
+  (file         search-error-file))
+
+(define (search-input-file inputs file)
+  "Find a file named FILE among the INPUTS and return its absolute file name.
+
+FILE must be a string like \"bin/sh\". If FILE is not found, an exception is
+raised."
+  (match inputs
+    (((_ . directories) ...)
+     ;; Accept both "bin/sh" and "/bin/sh" as FILE argument.
+     (let ((file (string-trim file #\/)))
+       (or (search-path directories file)
+           (raise
+            (condition (&search-error (path directories) (file file)))))))))
+
+(define (search-input-directory inputs directory)
+  "Find a sub-directory named DIRECTORY among the INPUTS and return its
+absolute file name.
+
+DIRECTORY must be a string like \"xml/dtd/docbook\".  If DIRECTORY is not
+found, an exception is raised."
+  (match inputs
+    (((_ . directories) ...)
+     (or (any (lambda (parent)
+                (let ((directory (string-append parent "/" directory)))
+                  (and (directory-exists? directory)
+                       directory)))
+              directories)
+         (raise (condition
+                 (&search-error (path directories) (file directory))))))))
+
 
 ;;;
 ;;; Phases.
@@ -746,6 +853,31 @@ PROC's result is returned."
       (lambda (key . args)
         (false-if-exception (delete-file template))))))
 
+(define (unused-private-use-code-point s)
+  "Find a code point within a Unicode Private Use Area that is not
+present in S, and return the corresponding character object.  If one
+cannot be found, return false."
+  (define (scan lo hi)
+    (and (<= lo hi)
+         (let ((c (integer->char lo)))
+           (if (string-index s c)
+               (scan (+ lo 1) hi)
+               c))))
+  (or (scan   #xE000   #xF8FF)
+      (scan  #xF0000  #xFFFFD)
+      (scan #x100000 #x10FFFD)))
+
+(define (replace-char c1 c2 s)
+  "Return a string which is equal to S except with all instances of C1
+replaced by C2.  If C1 and C2 are equal, return S."
+  (if (char=? c1 c2)
+      s
+      (string-map (lambda (c)
+                    (if (char=? c c1)
+                        c2
+                        c))
+                  s)))
+
 (define (substitute file pattern+procs)
   "PATTERN+PROCS is a list of regexp/two-argument-procedure pairs.  For each
 line of FILE, and for each PATTERN that it matches, call the corresponding
@@ -764,16 +896,26 @@ end of a line; by itself it won't match the terminating newline of a line."
         (let loop ((line (read-line in 'concat)))
           (if (eof-object? line)
               #t
-              (let ((line (fold (lambda (r+p line)
-                                  (match r+p
-                                    ((regexp . proc)
-                                     (match (list-matches regexp line)
-                                       ((and m+ (_ _ ...))
-                                        (proc line m+))
-                                       (_ line)))))
-                                line
-                                rx+proc)))
-                (display line out)
+              ;; Work around the fact that Guile's regexp-exec does not handle
+              ;; NUL characters (a limitation of the underlying GNU libc's
+              ;; regexec) by temporarily replacing them by an unused private
+              ;; Unicode code point.
+              ;; TODO: Use SRFI-115 instead, once available in Guile.
+              (let* ((nul* (or (and (string-index line #\nul)
+                                    (unused-private-use-code-point line))
+                               #\nul))
+                     (line* (replace-char #\nul nul* line))
+                     (line1* (fold (lambda (r+p line)
+                                     (match r+p
+                                       ((regexp . proc)
+                                        (match (list-matches regexp line)
+                                          ((and m+ (_ _ ...))
+                                           (proc line m+))
+                                          (_ line)))))
+                                   line*
+                                   rx+proc))
+                     (line1 (replace-char nul* #\nul line1*)))
+                (display line1 out)
                 (loop (read-line in 'concat)))))))))
 
 
@@ -800,7 +942,7 @@ sub-expression.  For example:
      ((\"hello\")
       \"good morning\\n\")
      ((\"foo([a-z]+)bar(.*)$\" all letters end)
-      (string-append \"baz\" letter end)))
+      (string-append \"baz\" letters end)))
 
 Here, anytime a line of FILE contains \"hello\", it is replaced by \"good
 morning\".  Anytime a line of FILE matches the second regexp, ALL is bound to
@@ -853,29 +995,45 @@ match the terminating newline of a line."
 ;;;
 
 (define* (dump-port in out
+                    #:optional len
                     #:key (buffer-size 16384)
                     (progress (lambda (t k) (k))))
-  "Read as much data as possible from IN and write it to OUT, using chunks of
-BUFFER-SIZE bytes.  Call PROGRESS at the beginning and after each successful
-transfer of BUFFER-SIZE bytes or less, passing it the total number of bytes
-transferred and the continuation of the transfer as a thunk."
+  "Read LEN bytes from IN or as much data as possible if LEN is #f, and write
+it to OUT, using chunks of BUFFER-SIZE bytes.  Call PROGRESS at the beginning
+and after each successful transfer of BUFFER-SIZE bytes or less, passing it
+the total number of bytes transferred and the continuation of the transfer as
+a thunk."
   (define buffer
     (make-bytevector buffer-size))
 
   (define (loop total bytes)
     (or (eof-object? bytes)
+        (and len (= total len))
         (let ((total (+ total bytes)))
           (put-bytevector out buffer 0 bytes)
           (progress total
                     (lambda ()
                       (loop total
-                            (get-bytevector-n! in buffer 0 buffer-size)))))))
+                            (get-bytevector-n! in buffer 0
+                                               (if len
+                                                   (min (- len total) buffer-size)
+                                                   buffer-size))))))))
 
   ;; Make sure PROGRESS is called when we start so that it can measure
   ;; throughput.
   (progress 0
             (lambda ()
-              (loop 0 (get-bytevector-n! in buffer 0 buffer-size)))))
+              (loop 0 (get-bytevector-n! in buffer 0
+                                         (if len
+                                             (min len buffer-size)
+                                             buffer-size))))))
+
+(define AT_SYMLINK_NOFOLLOW
+  ;; Guile 2.0 did not define this constant, hence this hack.
+  (let ((variable (module-variable the-root-module 'AT_SYMLINK_NOFOLLOW)))
+    (if variable
+        (variable-ref variable)
+        256)))                                    ;for GNU/Linux
 
 (define (set-file-time file stat)
   "Set the atime/mtime of FILE to that specified by STAT."
@@ -883,7 +1041,8 @@ transferred and the continuation of the transfer as a thunk."
          (stat:atime stat)
          (stat:mtime stat)
          (stat:atimensec stat)
-         (stat:mtimensec stat)))
+         (stat:mtimensec stat)
+         AT_SYMLINK_NOFOLLOW))
 
 (define (get-char* p)
   ;; We call it `get-char', but that's really a binary version
@@ -1108,14 +1267,14 @@ known as `nuke-refs' in Nixpkgs."
   (program    wrap-error-program)
   (type       wrap-error-type))
 
-(define (wrapper? prog)
-  "Return #t if PROG is a wrapper as produced by 'wrap-program'."
+(define (wrapped-program? prog)
+  "Return #t if PROG is a program that was moved and wrapped by 'wrap-program'."
   (and (file-exists? prog)
        (let ((base (basename prog)))
          (and (string-prefix? "." base)
               (string-suffix? "-real" base)))))
 
-(define* (wrap-program prog #:rest vars)
+(define* (wrap-program prog #:key (sh (which "bash")) #:rest vars)
   "Make a wrapper for PROG.  VARS should look like this:
 
   '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES)
@@ -1142,7 +1301,12 @@ programs that expect particular shared libraries to be in $LD_LIBRARY_PATH, or
 modules in $GUILE_LOAD_PATH, etc.
 
 If PROG has previously been wrapped by 'wrap-program', the wrapper is extended
-with definitions for VARS."
+with definitions for VARS. If it is not, SH will be used as interpreter."
+  (define vars/filtered
+    (match vars
+      ((#:sh _ . vars) vars)
+      (vars vars)))
+
   (define wrapped-file
     (string-append (dirname prog) "/." (basename prog) "-real"))
 
@@ -1184,6 +1348,9 @@ with definitions for VARS."
        (format #f "export ~a=\"$~a${~a:+:}~a\""
                var var var (string-join rest ":")))))
 
+  (when (wrapped-program? prog)
+    (error (string-append prog " is a wrapper. Refusing to wrap.")))
+
   (if already-wrapped?
 
       ;; PROG is already a wrapper: add the new "export VAR=VALUE" lines just
@@ -1193,7 +1360,7 @@ with definitions for VARS."
         (for-each (lambda (var)
                     (display (export-variable var) port)
                     (newline port))
-                  vars)
+                  vars/filtered)
         (display last port)
         (close-port port))
 
@@ -1205,8 +1372,8 @@ with definitions for VARS."
           (lambda (port)
             (format port
                     "#!~a~%~a~%exec -a \"$0\" \"~a\" \"$@\"~%"
-                    (which "bash")
-                    (string-join (map export-variable vars) "\n")
+                    sh
+                    (string-join (map export-variable vars/filtered) "\n")
                     (canonicalize-path wrapped-file))))
 
         (chmod prog-tmp #o755)
@@ -1307,7 +1474,7 @@ not supported."
                 (lambda ()
                   (call-with-ascii-input-file prog
                     (lambda (p)
-                      (format out header)
+                      (display header out)
                       (dump-port p out)
                       (close out)
                       (chmod template mode)
diff --git a/guix/deprecation.scm b/guix/deprecation.scm
index 04d4d4a337..c66c9367f6 100644
--- a/guix/deprecation.scm
+++ b/guix/deprecation.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +21,8 @@
   #:use-module (guix diagnostics)
   #:autoload   (guix utils) (source-properties->location)
   #:export (define-deprecated
+
+            define-deprecated/public
             define-deprecated/alias
             warn-about-deprecation))
 
@@ -39,6 +41,8 @@
         (warning location (G_ "'~a' is deprecated~%")
                  variable))))
 
+(define-syntax public (syntax-rules ()))          ;private syntactic keyword
+
 (define-syntax define-deprecated
   (lambda (s)
     "Define a deprecated variable or procedure, along these lines:
@@ -53,6 +57,8 @@ This will write a deprecation warning to GUIX-WARNING-PORT."
        #'(define-deprecated proc replacement
            (lambda* (formals ...) body ...)))
       ((_ variable replacement exp)
+       #'(define-deprecated private variable replacement exp))
+      ((_ visibility variable replacement exp)
        (identifier? #'variable)
        (with-syntax ((real (datum->syntax
                             #'variable
@@ -74,11 +80,23 @@ This will write a deprecation warning to GUIX-WARNING-PORT."
                     #'(real args (... ...)))
                    (id
                     (identifier? #'id)
-                    #'real)))))))
+                    #'real))))
+
+             ;; When asking for public visibility, export both REAL and
+             ;; VARIABLE.  Exporting REAL is useful when defining deprecated
+             ;; packages: there must be a public variable bound to a package
+             ;; so that the (guix discover) machinery finds it.
+             #,(if (free-identifier=? #'visibility #'public)
+                   #'(export real variable)
+                   #'(begin)))))
       ((_ variable alias)
        (identifier? #'alias)
        #'(define-deprecated variable alias alias)))))
 
+(define-syntax-rule (define-deprecated/public body ...)
+  "Like 'define/deprecated', but export all the newly introduced bindings."
+  (define-deprecated public body ...))
+
 (define-syntax-rule (define-deprecated/alias deprecated replacement)
   "Define as an alias a deprecated variable, procedure, or macro, along
 these lines:
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 33f4dc5d9d..f77ea179f4 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -1243,20 +1243,21 @@ MODULES are compiled."
         (hash-set! %module-cache key result)
         result)))
 
-(define* (build-expression->derivation store name exp ;deprecated
-                                       #:key
-                                       (system (%current-system))
-                                       (inputs '())
-                                       (outputs '("out"))
-                                       hash hash-algo recursive?
-                                       (env-vars '())
-                                       (modules '())
-                                       guile-for-build
-                                       references-graphs
-                                       allowed-references
-                                       disallowed-references
-                                       local-build? (substitutable? #t)
-                                       (properties '()))
+(define-deprecated (build-expression->derivation store name exp
+                                                 #:key
+                                                 (system (%current-system))
+                                                 (inputs '())
+                                                 (outputs '("out"))
+                                                 hash hash-algo recursive?
+                                                 (env-vars '())
+                                                 (modules '())
+                                                 guile-for-build
+                                                 references-graphs
+                                                 allowed-references
+                                                 disallowed-references
+                                                 local-build? (substitutable? #t)
+                                                 (properties '()))
+  gexp->derivation                                ;unbound, but that's okay
   "Return a derivation that executes Scheme expression EXP as a builder
 for derivation NAME.  INPUTS must be a list of (NAME DRV-PATH SUB-DRV)
 tuples; when SUB-DRV is omitted, \"out\" is assumed.  MODULES is a list
diff --git a/guix/gexp.scm b/guix/gexp.scm
index f3d278b3e6..01dca902f7 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -40,6 +40,7 @@
   #:use-module (ice-9 match)
   #:export (gexp
             gexp?
+            sexp->gexp
             with-imported-modules
             with-extensions
             let-system
@@ -106,6 +107,10 @@
             lowered-gexp-load-path
             lowered-gexp-load-compiled-path
 
+            with-build-variables
+            input-tuples->gexp
+            outputs->gexp
+
             gexp->derivation
             gexp->file
             gexp->script
@@ -113,6 +118,7 @@
             mixed-text-file
             file-union
             directory-union
+
             imported-files
             imported-modules
             compiled-modules
@@ -197,6 +203,18 @@ As a result, the S-expression will be approximate if GEXP has references."
 
 (set-record-type-printer! <gexp> write-gexp)
 
+(define (gexp-with-hidden-inputs gexp inputs)
+  "Add INPUTS, a list of <gexp-input>, to the references of GEXP.  These are
+\"hidden inputs\" because they do not actually appear in the expansion of GEXP
+returned by 'gexp->sexp'."
+  (make-gexp (append inputs (gexp-references gexp))
+             (gexp-self-modules gexp)
+             (gexp-self-extensions gexp)
+             (let ((extra (length inputs)))
+               (lambda args
+                 (apply (gexp-proc gexp) (drop args extra))))
+             (gexp-location gexp)))
+
 
 ;;;
 ;;; Methods.
@@ -271,14 +289,17 @@ OBJ must be an object that has an associated gexp compiler, such as a
         (#f
          (raise (condition (&gexp-input-error (input obj)))))
         (lower
-         ;; Cache in STORE the result of lowering OBJ.
-         (mcached (mlet %store-monad ((lowered (lower obj system target)))
-                    (if (and (struct? lowered)
-                             (not (derivation? lowered)))
-                        (loop lowered)
-                        (return lowered)))
-                  obj
-                  system target graft?))))))
+         ;; Cache in STORE the result of lowering OBJ.  If OBJ is a
+         ;; derivation, bypass the cache.
+         (if (derivation? obj)
+             (return obj)
+             (mcached (mlet %store-monad ((lowered (lower obj system target)))
+                        (if (and (struct? lowered)
+                                 (not (derivation? lowered)))
+                            (loop lowered)
+                            (return lowered)))
+                      obj
+                      system target graft?)))))))
 
 (define* (lower+expand-object obj
                               #:optional (system (%current-system))
@@ -293,9 +314,11 @@ expand to file names, but it's possible to expand to a plain data type."
        (raise (condition (&gexp-input-error (input obj)))))
       (lower
        (mlet* %store-monad ((graft?  (grafting?))
-                            (lowered (mcached (lower obj system target)
-                                              obj
-                                              system target graft?)))
+                            (lowered (if (derivation? obj)
+                                         (return obj)
+                                         (mcached (lower obj system target)
+                                                  obj
+                                                  system target graft?))))
          ;; LOWER might return something that needs to be further
          ;; lowered.
          (if (struct? lowered)
@@ -662,7 +685,8 @@ SUFFIX."
   expander => (lambda (obj lowered output)
                 (match obj
                   (($ <file-append> base suffix)
-                   (let* ((expand (lookup-expander base))
+                   (let* ((expand (or (lookup-expander base)
+                                      (lookup-expander lowered)))
                           (base   (expand base lowered output)))
                      (string-append base (string-concatenate suffix)))))))
 
@@ -1607,7 +1631,8 @@ last one is created from the given <scheme-file> object."
                            (guile (%guile-for-build))
                            (module-path %load-path)
                            (extensions '())
-                           (deprecation-warnings #f))
+                           (deprecation-warnings #f)
+                           (optimization-level 1))
   "Return a derivation that builds a tree containing the `.go' files
 corresponding to MODULES.  All the MODULES are built in a context where
 they can refer to each other.  When TARGET is true, cross-compile MODULES for
@@ -1618,127 +1643,178 @@ TARGET, a GNU triplet."
                                                  #:system system
                                                  #:guile guile
                                                  #:module-path
-                                                 module-path)))
+                                                 module-path))
+                      (extensions (mapm %store-monad
+                                        (lambda (extension)
+                                          (lower-object extension system
+                                                        #:target #f))
+                                        extensions)))
     (define build
-      (gexp
-       (begin
-         (primitive-load (ungexp %utils-module))  ;for 'mkdir-p'
-
-         (use-modules (ice-9 ftw)
-                      (ice-9 format)
-                      (srfi srfi-1)
-                      (srfi srfi-26)
-                      (system base target)
-                      (system base compile))
-
-         (define (regular? file)
-           (not (member file '("." ".."))))
-
-         (define (process-entry entry output processed)
-           (if (file-is-directory? entry)
-               (let ((output (string-append output "/" (basename entry))))
-                 (mkdir-p output)
-                 (process-directory entry output processed))
-               (let* ((base   (basename entry ".scm"))
-                      (output (string-append output "/" base ".go")))
-                 (format #t "[~2@a/~2@a] Compiling '~a'...~%"
-                         (+ 1 processed (ungexp total))
-                         (ungexp (* total 2))
-                         entry)
-
-                 (ungexp-splicing
-                  (if target
-                      (gexp ((with-target (ungexp target)
+      (gexp-with-hidden-inputs
+       (gexp
+        (begin
+          (primitive-load (ungexp %utils-module)) ;for 'mkdir-p'
+
+          (use-modules (ice-9 ftw)
+                       (ice-9 format)
+                       (srfi srfi-1)
+                       (srfi srfi-26)
+                       (system base target)
+                       (system base compile))
+
+          (define modules
+            (getenv "modules"))
+
+          (define total
+            (string->number (getenv "module count")))
+
+          (define extensions
+            (string-split (getenv "extensions") #\space))
+
+          (define target
+            (getenv "target"))
+
+          (define optimization-level
+            (string->number (getenv "optimization level")))
+
+          (define optimizations-for-level
+            (or (and=> (false-if-exception
+                        (resolve-interface '(system base optimize)))
+                       (lambda (iface)
+                         (module-ref iface 'optimizations-for-level))) ;Guile 3.0
+                (const '())))
+
+          (define (regular? file)
+            (not (member file '("." ".."))))
+
+          (define (process-entry entry output processed)
+            (if (file-is-directory? entry)
+                (let ((output (string-append output "/" (basename entry))))
+                  (mkdir-p output)
+                  (process-directory entry output processed))
+                (let* ((base   (basename entry ".scm"))
+                       (output (string-append output "/" base ".go")))
+                  (format #t "[~2@a/~2@a] Compiling '~a'...~%"
+                          (+ 1 processed total)
+                          (* total 2)
+                          entry)
+
+                  (with-target (or target %host-type)
                                (lambda ()
                                  (compile-file entry
                                                #:output-file output
                                                #:opts
-                                               %auto-compilation-options)))))
-                      (gexp ((compile-file entry
-                                           #:output-file output
-                                           #:opts %auto-compilation-options)))))
-
-                 (+ 1 processed))))
-
-         (define (process-directory directory output processed)
-           (let ((entries (map (cut string-append directory "/" <>)
-                               (scandir directory regular?))))
-             (fold (cut process-entry <> output <>)
-                   processed
-                   entries)))
-
-         (define* (load-from-directory directory
-                                       #:optional (loaded 0))
-           "Load all the source files found in DIRECTORY."
-           ;; XXX: This works around <https://bugs.gnu.org/15602>.
-           (let ((entries (map (cut string-append directory "/" <>)
-                               (scandir directory regular?))))
-             (fold (lambda (file loaded)
-                     (if (file-is-directory? file)
-                         (load-from-directory file loaded)
-                         (begin
-                           (format #t "[~2@a/~2@a] Loading '~a'...~%"
-                                   (+ 1 loaded) (ungexp (* 2 total))
-                                   file)
-                           (save-module-excursion
-                            (lambda ()
-                              (primitive-load file)))
-                           (+ 1 loaded))))
-                   loaded
-                   entries)))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.2 'line) (else _IOLBF)))
-
-         (define mkdir-p
-           ;; Capture 'mkdir-p'.
-           (@ (guix build utils) mkdir-p))
-
-         ;; Add EXTENSIONS to the search path.
-         (set! %load-path
-           (append (map (lambda (extension)
-                          (string-append extension
-                                         "/share/guile/site/"
-                                         (effective-version)))
-                        '((ungexp-native-splicing extensions)))
-                   %load-path))
-         (set! %load-compiled-path
-           (append (map (lambda (extension)
-                          (string-append extension "/lib/guile/"
-                                         (effective-version)
-                                         "/site-ccache"))
-                        '((ungexp-native-splicing extensions)))
-                   %load-compiled-path))
-
-         (set! %load-path (cons (ungexp modules) %load-path))
-
-         ;; Above we loaded our own (guix build utils) but now we may need to
-         ;; load a compile a different one.  Thus, force a reload.
-         (let ((utils (string-append (ungexp modules)
-                                     "/guix/build/utils.scm")))
-           (when (file-exists? utils)
-             (load utils)))
-
-         (mkdir (ungexp output))
-         (chdir (ungexp modules))
-
-         (load-from-directory ".")
-         (process-directory "." (ungexp output) 0))))
-
-    ;; TODO: Pass MODULES as an environment variable.
+                                               `(,@%auto-compilation-options
+                                                 ,@(optimizations-for-level
+                                                    optimization-level)))))
+
+                  (+ 1 processed))))
+
+          (define (process-directory directory output processed)
+            (let ((entries (map (cut string-append directory "/" <>)
+                                (scandir directory regular?))))
+              (fold (cut process-entry <> output <>)
+                    processed
+                    entries)))
+
+          (define* (load-from-directory directory
+                                        #:optional (loaded 0))
+            "Load all the source files found in DIRECTORY."
+            ;; XXX: This works around <https://bugs.gnu.org/15602>.
+            (let ((entries (map (cut string-append directory "/" <>)
+                                (scandir directory regular?))))
+              (fold (lambda (file loaded)
+                      (if (file-is-directory? file)
+                          (load-from-directory file loaded)
+                          (begin
+                            (format #t "[~2@a/~2@a] Loading '~a'...~%"
+                                    (+ 1 loaded) (* 2 total)
+                                    file)
+                            (save-module-excursion
+                             (lambda ()
+                               (primitive-load file)))
+                            (+ 1 loaded))))
+                    loaded
+                    entries)))
+
+          (setvbuf (current-output-port)
+                   (cond-expand (guile-2.2 'line) (else _IOLBF)))
+
+          (define mkdir-p
+            ;; Capture 'mkdir-p'.
+            (@ (guix build utils) mkdir-p))
+
+          ;; Remove environment variables for internal consumption.
+          (unsetenv "modules")
+          (unsetenv "module count")
+          (unsetenv "extensions")
+          (unsetenv "target")
+          (unsetenv "optimization level")
+
+          ;; Add EXTENSIONS to the search path.
+          (set! %load-path
+            (append (map (lambda (extension)
+                           (string-append extension
+                                          "/share/guile/site/"
+                                          (effective-version)))
+                         extensions)
+                    %load-path))
+          (set! %load-compiled-path
+            (append (map (lambda (extension)
+                           (string-append extension "/lib/guile/"
+                                          (effective-version)
+                                          "/site-ccache"))
+                         extensions)
+                    %load-compiled-path))
+
+          (set! %load-path (cons modules %load-path))
+
+          ;; Above we loaded our own (guix build utils) but now we may need to
+          ;; load a compile a different one.  Thus, force a reload.
+          (let ((utils (string-append modules
+                                      "/guix/build/utils.scm")))
+            (when (file-exists? utils)
+              (load utils)))
+
+          (mkdir (ungexp output))
+          (chdir modules)
+
+          (load-from-directory ".")
+          (process-directory "." (ungexp output) 0)))
+       (append (map gexp-input extensions)
+               (list (gexp-input modules)))))
+
     (gexp->derivation name build
+                      #:script-name "compile-modules"
                       #:system system
                       #:target target
                       #:guile-for-build guile
                       #:local-build? #t
                       #:env-vars
-                      (case deprecation-warnings
-                        ((#f)
-                         '(("GUILE_WARN_DEPRECATED" . "no")))
-                        ((detailed)
-                         '(("GUILE_WARN_DEPRECATED" . "detailed")))
-                        (else
-                         '())))))
+                      `(("modules"
+                         . ,(if (derivation? modules)
+                                (derivation->output-path modules)
+                                modules))
+                        ("module count" . ,(number->string total))
+                        ("extensions"
+                         . ,(string-join
+                             (map (match-lambda
+                                    ((? derivation? drv)
+                                     (derivation->output-path drv))
+                                    ((? string? str) str))
+                                  extensions)))
+                        ("optimization level"
+                         . ,(number->string optimization-level))
+                        ,@(if target
+                              `(("target" . ,target))
+                              '())
+                        ,@(case deprecation-warnings
+                            ((#f)
+                             '(("GUILE_WARN_DEPRECATED" . "no")))
+                            ((detailed)
+                             '(("GUILE_WARN_DEPRECATED" . "detailed")))
+                            (else
+                             '()))))))
 
 
 ;;;
@@ -1806,6 +1882,72 @@ Assume MODULES are compiled with GUILE."
                                          extensions))
                               %load-compiled-path)))))))))
 
+(define* (input-tuples->gexp inputs #:key native?)
+  "Given INPUTS, a list of label/gexp-input tuples, return a gexp that expands
+to an input alist."
+  (define references
+    (map (match-lambda
+           ((label input) input))
+         inputs))
+
+  (define labels
+    (match inputs
+      (((labels . _) ...)
+       labels)))
+
+  (define (proc . args)
+    (cons 'quote (list (map cons labels args))))
+
+  ;; This gexp is more efficient than an equivalent hand-written gexp: fewer
+  ;; allocations, no need to scan long list-valued <gexp-input> records in
+  ;; search of file-like objects, etc.
+  (make-gexp references '() '() proc
+             (source-properties inputs)))
+
+(define (outputs->gexp outputs)
+  "Given OUTPUTS, a list of output names, return a gexp that expands to an
+output alist."
+  (define references
+    (map gexp-output outputs))
+
+  (define (proc . args)
+    `(list ,@(map (lambda (name)
+                    `(cons ,name ((@ (guile) getenv) ,name)))
+                  outputs)))
+
+  ;; This gexp is more efficient than an equivalent hand-written gexp.
+  (make-gexp references '() '() proc
+             (source-properties outputs)))
+
+(define (with-build-variables inputs outputs body)
+  "Return a gexp that surrounds BODY with a definition of the legacy
+'%build-inputs', '%outputs', and '%output' variables based on INPUTS, a list
+of name/gexp-input tuples, and OUTPUTS, a list of strings."
+
+  ;; These two variables are defined for backward compatibility.  They are
+  ;; used by package expressions.  These must be top-level defines so that
+  ;; 'use-modules' form in BODY that are required for macro expansion work as
+  ;; expected.
+  (gexp (begin
+          (define %build-inputs
+            (ungexp (input-tuples->gexp inputs)))
+          (define %outputs
+            (ungexp (outputs->gexp outputs)))
+          (define %output
+            (assoc-ref %outputs "out"))
+
+          (ungexp body))))
+
+(define (sexp->gexp sexp)
+  "Turn SEXP into a gexp without any references.
+
+Using this is a way for the caller to tell that SEXP doesn't need to be
+scanned for file-like objects, thereby reducing processing costs.  This is
+particularly useful if SEXP is a long list or a deep tree."
+  (make-gexp '() '() '()
+             (lambda () sexp)
+             (source-properties sexp)))
+
 (define* (gexp->script name exp
                        #:key (guile (default-guile))
                        (module-path %load-path)
diff --git a/guix/grafts.scm b/guix/grafts.scm
index 4c69eb35a2..0ffda8f9aa 100644
--- a/guix/grafts.scm
+++ b/guix/grafts.scm
@@ -42,6 +42,7 @@
             graft-derivation/shallow
 
             %graft?
+            without-grafting
             set-grafting
             grafting?))
 
@@ -341,6 +342,17 @@ DRV, and graft DRV itself to refer to those grafted dependencies."
   ;; Whether to honor package grafts by default.
   (make-parameter #t))
 
+(define (call-without-grafting thunk)
+  (lambda (store)
+    (values (parameterize ((%graft? #f))
+              (run-with-store store (thunk)))
+            store)))
+
+(define-syntax-rule (without-grafting mexp ...)
+  "Bind monadic expressions MEXP in a dynamic extent where '%graft?' is
+false."
+  (call-without-grafting (lambda () (mbegin %store-monad mexp ...))))
+
 (define-inlinable (set-grafting enable?)
   ;; This monadic procedure enables grafting when ENABLE? is true, and
   ;; disables it otherwise.  It returns the previous setting.
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index 7478866515..1389576cad 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -137,9 +137,9 @@
   (map (lambda (name)
          (case (%input-style)
            ((specification)
-            (list name (list 'unquote (list 'specification->package name))))
+            `(specification->package ,name))
            (else
-            (list name (list 'unquote (string->symbol name))))))
+            (string->symbol name))))
        (sort names string-ci<?)))
 
 (define* (maybe-inputs package-inputs #:optional (type 'inputs))
@@ -149,7 +149,7 @@ package definition."
     (()
      '())
     ((package-inputs ...)
-     `((,type (,'quasiquote ,(format-inputs package-inputs)))))))
+     `((,type (list ,@(format-inputs package-inputs)))))))
 
 (define %cran-url "https://cran.r-project.org/web/packages/")
 (define %cran-canonical-url "https://cran.r-project.org/package=")
diff --git a/guix/import/egg.scm b/guix/import/egg.scm
index ff9f5a0247..0b88020554 100644
--- a/guix/import/egg.scm
+++ b/guix/import/egg.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -249,12 +250,9 @@ not work."
           (let ((name (prettify-name (extract-name name))))
             ;; Dependencies are sometimes specified as symbols and sometimes
             ;; as strings
-            (list (string-append (if system? "" package-name-prefix)
-                                 name)
-                  (list 'unquote
-                        (string->symbol (string-append
-                                         (if system? "" package-name-prefix)
-                                         name))))))
+            (string->symbol (string-append
+                             (if system? "" package-name-prefix)
+                             name))))
 
         (define egg-propagated-inputs
           (let ((dependencies (assoc-ref egg-content 'dependencies)))
@@ -293,7 +291,7 @@ not work."
              '())
             ((inputs ...)
              (list (list input-type
-                         (list 'quasiquote inputs))))))
+                         `(list ,@inputs))))))
 
         (values
          `(package
@@ -321,7 +319,7 @@ not work."
             (license ,egg-licenses))
          (filter (lambda (name)
                    (not (member name '("srfi-4"))))
-                 (map (compose guix-name->egg-name first)
+                 (map (compose guix-name->egg-name symbol->string)
                       (append egg-propagated-inputs
                               egg-native-inputs)))))))
 
diff --git a/guix/import/elpa.scm b/guix/import/elpa.scm
index 2483677b39..d20e274db7 100644
--- a/guix/import/elpa.scm
+++ b/guix/import/elpa.scm
@@ -353,9 +353,7 @@ type '<elpa-package>'."
                           (elpa-package-inputs pkg))))
 
   (define dependencies
-    (map (lambda (n)
-           (let ((new-n (elpa-name->package-name n)))
-             (list new-n (list 'unquote (string->symbol new-n)))))
+    (map (compose string->symbol elpa-name->package-name)
          dependencies-names))
 
   (define (maybe-inputs input-type inputs)
@@ -363,8 +361,7 @@ type '<elpa-package>'."
       (()
        '())
       ((inputs ...)
-       (list (list input-type
-                   (list 'quasiquote inputs))))))
+       (list (list input-type `(list ,@inputs))))))
 
   (define melpa-source
     (melpa-recipe->origin melpa-recipe))
diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index 418d716be6..0e5bb7e635 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -110,12 +111,7 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES."
      ,@(if (null? dependencies)
            '()
            `((propagated-inputs
-              (,'quasiquote
-               ,(map (lambda (name)
-                       `(,name
-                         (,'unquote
-                          ,(string->symbol name))))
-                     dependencies)))))
+              (list ,@(map string->symbol dependencies)))))
      (synopsis ,synopsis)
      (description ,description)
      (home-page ,home-page)
diff --git a/guix/import/hackage.scm b/guix/import/hackage.scm
index 0d5616ca62..6ef1e7a675 100644
--- a/guix/import/hackage.scm
+++ b/guix/import/hackage.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -267,14 +268,12 @@ the hash of the Cabal file."
      hackage-dependencies))
 
   (define dependencies
-    (map (lambda (name)
-           (list name (list 'unquote (string->symbol name))))
+    (map string->symbol
          (map hackage-name->package-name
               hackage-dependencies)))
 
   (define native-dependencies
-    (map (lambda (name)
-           (list name (list 'unquote (string->symbol name))))
+    (map string->symbol
          (map hackage-name->package-name
               hackage-native-dependencies)))
   
@@ -284,8 +283,8 @@ the hash of the Cabal file."
        '())
       ((inputs ...)
        (list (list input-type
-                   (list 'quasiquote inputs))))))
-  
+                   `(list ,@inputs))))))
+
   (define (maybe-arguments)
     (match (append (if (not include-test-dependencies?)
                        '(#:tests? #f)
diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index eb384ba426..d9fdf4527a 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -306,10 +307,8 @@ path to the repository."
           (map dependency->native-input depends)))
 
 (define (dependency-list->inputs lst)
-  (map
-   (lambda (dependency)
-     (list dependency (list 'unquote (string->symbol dependency))))
-   (ocaml-names->guix-names lst)))
+  (map string->symbol
+       (ocaml-names->guix-names lst)))
 
 (define* (opam-fetch name #:optional (repositories-specs '("opam")))
   (or (fold (lambda (repository others)
@@ -321,9 +320,9 @@ path to the repository."
             (filter-map get-opam-repository repositories-specs))
       (warning (G_ "opam: package '~a' not found~%") name)))
 
-(define* (opam->guix-package name #:key (repo '()) version)
-  "Import OPAM package NAME from REPOSITORIES (a list of names, URLs or local
-paths, always including OPAM's official repository).  Return a 'package' sexp
+(define* (opam->guix-package name #:key (repo 'opam) version)
+  "Import OPAM package NAME from REPOSITORY (a directory name) or, if
+REPOSITORY is #f, from the official OPAM repository.  Return a 'package' sexp
 or #f on failure."
   (and-let* ((with-opam (if (member "opam" repo) repo (cons "opam" repo)))
              (opam-file (opam-fetch name with-opam))
@@ -362,10 +361,10 @@ or #f on failure."
                                           'ocaml-build-system))
                        ,@(if (null? inputs)
                            '()
-                           `((propagated-inputs ,(list 'quasiquote inputs))))
+                           `((propagated-inputs (list ,@inputs))))
                        ,@(if (null? native-inputs)
                            '()
-                           `((native-inputs ,(list 'quasiquote native-inputs))))
+                           `((native-inputs (list ,@native-inputs))))
                        ,@(if (equal? name (guix-name->opam-name (ocaml-name->guix-name name)))
                            '()
                            `((properties
diff --git a/guix/import/print.scm b/guix/import/print.scm
index 767b0528d5..66016145cb 100644
--- a/guix/import/print.scm
+++ b/guix/import/print.scm
@@ -32,6 +32,14 @@
   #:use-module (ice-9 match)
   #:export (package->code))
 
+(define (redundant-input-labels? inputs)
+  "Return #t if input labels in the INPUTS list are redundant."
+  (every (match-lambda
+           ((label (? package? package) . _)
+            (string=? label (package-name package)))
+           (_ #f))
+         inputs))
+
 (define (package->code package)
   "Return an S-expression representing the source code that produces PACKAGE
 when evaluated."
@@ -148,8 +156,24 @@ when evaluated."
       (obj
        obj)))
 
-  (define (package-lists->code lsts)
-    (list 'quasiquote (object->code lsts #t)))
+  (define (inputs->code inputs)
+    (if (redundant-input-labels? inputs)
+        `(list ,@(map (match-lambda    ;no need for input labels ("new style")
+                        ((_ package)
+                         (let* ((module (package-module-name package))
+                                (name   (variable-name package module)))
+                           (variable-reference module name)))
+                        ((_ package output)
+                         (let* ((module (package-module-name package))
+                                (name   (variable-name package module)))
+                           (list 'quasiquote
+                                 (list
+                                  (list 'unquote
+                                        (variable-reference module name))
+                                  output)))))
+                      inputs))
+        (list 'quasiquote                  ;preserve input labels (deprecated)
+              (object->code inputs #t))))
 
   (let ((name                (package-name package))
         (version             (package-version package))
@@ -192,13 +216,13 @@ when evaluated."
              (outs `((outputs (list ,@outs)))))
          ,@(match native-inputs
              (() '())
-             (pkgs `((native-inputs ,(package-lists->code pkgs)))))
+             (pkgs `((native-inputs ,(inputs->code pkgs)))))
          ,@(match inputs
              (() '())
-             (pkgs `((inputs ,(package-lists->code pkgs)))))
+             (pkgs `((inputs ,(inputs->code pkgs)))))
          ,@(match propagated-inputs
              (() '())
-             (pkgs `((propagated-inputs ,(package-lists->code pkgs)))))
+             (pkgs `((propagated-inputs ,(inputs->code pkgs)))))
          ,@(if (lset= string=? supported-systems %supported-systems)
                '()
                `((supported-systems (list ,@supported-systems))))
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index bbbabe4c09..343e7c0a0a 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -189,7 +189,7 @@ the input field."
     (()
      '())
     ((package-inputs ...)
-     `((,input-type (,'quasiquote ,package-inputs))))))
+     `((,input-type (list ,@package-inputs))))))
 
 (define %requirement-name-regexp
   ;; Regexp to match the requirement name in a requirement specification.
@@ -408,15 +408,8 @@ return the unaltered list of upstream dependency names."
     (remove (cut string=? "argparse" <>) deps))
 
   (define (requirement->package-name/sort deps)
-    (sort
-     (map (lambda (input)
-            (let ((guix-name (python->package-name input)))
-              (list guix-name (list 'unquote (string->symbol guix-name)))))
-          deps)
-     (lambda args
-       (match args
-         (((a _ ...) (b _ ...))
-          (string-ci<? a b))))))
+    (map string->symbol
+         (sort (map python->package-name deps) string-ci<?)))
 
   (define process-requirements
     (compose requirement->package-name/sort strip-argparse))
diff --git a/guix/lint.scm b/guix/lint.scm
index ac2e7b3841..8bbbe210d6 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -82,6 +82,7 @@
   #:export (check-description-style
             check-inputs-should-be-native
             check-inputs-should-not-be-an-input-at-all
+            check-input-labels
             check-wrapper-inputs
             check-patch-file-names
             check-patch-headers
@@ -522,6 +523,37 @@ of a package, and INPUT-NAMES, a list of package specifications such as
          (package-input-intersection (package-direct-inputs package)
                                      input-names))))
 
+(define (check-input-labels package)
+  "Emit a warning for labels that differ from the corresponding package name."
+  (define (check input-kind package-inputs)
+    (define (warning label name)
+      (make-warning package
+                    (G_ "label '~a' does not match package name '~a'")
+                    (list label name)
+                    #:field input-kind))
+
+    (append-map (match-lambda
+                  (((? string? label) (? package? dependency))
+                   (if (string=? label (package-name dependency))
+                       '()
+                       (list (warning label (package-name dependency)))))
+                  (((? string? label) (? package? dependency) output)
+                   (let ((expected (string-append (package-name dependency)
+                                                  ":" output)))
+                     (if (string=? label expected)
+                         '()
+                         (list (warning label expected)))))
+                  (_
+                   '()))
+                (package-inputs package)))
+
+  (append-map (match-lambda
+                ((kind proc)
+                 (check kind proc)))
+              `((native-inputs ,package-native-inputs)
+                (inputs ,package-inputs)
+                (propagated-inputs ,package-propagated-inputs))))
+
 (define (report-wrap-program-error package wrapper-name)
   "Warn that \"bash-minimal\" is missing from 'inputs', while WRAPPER-NAME
 requires it."
@@ -1775,6 +1807,10 @@ them for PACKAGE."
      (description "Identify inputs that shouldn't be inputs at all")
      (check       check-inputs-should-not-be-an-input-at-all))
    (lint-checker
+     (name        'input-labels)
+     (description "Identify input labels that do not match package names")
+     (check       check-input-labels))
+   (lint-checker
      (name        'wrapper-inputs)
      (description "Make sure 'wrap-program' can finds its interpreter.")
      (check       check-wrapper-inputs))
diff --git a/guix/packages.scm b/guix/packages.scm
index a3602a3d7a..b00fa2f702 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -23,6 +24,8 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix packages)
+  #:use-module ((guix build utils) #:select (compressor tarball?
+                                                        strip-store-file-name))
   #:use-module (guix utils)
   #:use-module (guix records)
   #:use-module (guix store)
@@ -53,6 +56,7 @@
   #:re-export (%current-system
                %current-target-system
                search-path-specification)         ;for convenience
+  #:re-export-and-replace (delete)                ;used as syntactic keyword
   #:replace ((define-public* . define-public))
   #:export (content-hash
             content-hash?
@@ -108,6 +112,18 @@
             deprecated-package
             package-field-location
 
+            this-package-input
+            this-package-native-input
+
+            lookup-package-input
+            lookup-package-native-input
+            lookup-package-propagated-input
+            lookup-package-direct-input
+
+            prepend                               ;syntactic keyword
+            replace                               ;syntactic keyword
+            modify-inputs
+
             package-direct-sources
             package-transitive-sources
             package-direct-inputs
@@ -277,8 +293,8 @@ as base32.  Otherwise, it must be a bytevector."
              (default '()) (delayed))
 
   (snippet   origin-snippet (default #f))         ; sexp or #f
-  (patch-flags  origin-patch-flags                ; list of strings
-                (default '("-p1")))
+  (patch-flags  origin-patch-flags                ; string-list gexp
+                (default %default-patch-flags))
 
   ;; Patching requires Guile, GNU Patch, and a few more.  These two fields are
   ;; used to specify these dependencies when needed.
@@ -326,6 +342,9 @@ specifications to 'hash'."
 
 (set-record-type-printer! <origin> print-origin)
 
+(define %default-patch-flags
+  #~("-p1"))
+
 (define (origin-actual-file-name origin)
   "Return the file name of ORIGIN, either its 'file-name' field or the file
 name of its URI."
@@ -372,7 +391,7 @@ from forcing GEXP-PROMISE."
   ;; This is the list of system types that are supported.  By default, we
   ;; expect all packages to build successfully here.
   '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "mips64el-linux" "i586-gnu"
-    "powerpc64le-linux"))
+    "powerpc64le-linux" "powerpc-linux"))
 
 (define %hurd-systems
   ;; The GNU/Hurd systems for which support is being developed.
@@ -383,7 +402,16 @@ from forcing GEXP-PROMISE."
   ;;
   ;; XXX: MIPS is unavailable in CI:
   ;; <https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00790.html>.
-  (fold delete %supported-systems '("mips64el-linux")))
+  (fold delete %supported-systems '("mips64el-linux" "powerpc-linux")))
+
+(define-inlinable (sanitize-inputs inputs)
+  "Sanitize INPUTS by turning it into a list of name/package tuples if it's
+not already the case."
+  (cond ((null? inputs) inputs)
+        ((and (pair? (car inputs))
+              (string? (caar inputs)))
+         inputs)
+        (else (map add-input-label inputs))))
 
 (define-syntax current-location-vector
   (lambda (s)
@@ -495,11 +523,14 @@ Texinfo.  Otherwise, return the string."
              (default '()) (thunked))
 
   (inputs package-inputs                  ; input packages or derivations
-          (default '()) (thunked))
+          (default '()) (thunked)
+          (sanitize sanitize-inputs))
   (propagated-inputs package-propagated-inputs    ; same, but propagated
-                     (default '()) (thunked))
+                     (default '()) (thunked)
+                     (sanitize sanitize-inputs))
   (native-inputs package-native-inputs    ; native input packages/derivations
-                 (default '()) (thunked))
+                 (default '()) (thunked)
+                 (sanitize sanitize-inputs))
 
   (outputs package-outputs                ; list of strings
            (default '("out")))
@@ -534,6 +565,24 @@ Texinfo.  Otherwise, return the string."
                        (default (current-definition-location))
                        (innate)))
 
+(define (add-input-label input)
+  "Add an input label to INPUT."
+  (match input
+    ((? package? package)
+     (list (package-name package) package))
+    (((? package? package) output)                ;XXX: ugly?
+     (list (package-name package) package output))
+    ((? gexp-input?)       ;XXX: misplaced because 'native?' field is ignored?
+     (let ((obj    (gexp-input-thing input))
+           (output (gexp-input-output input)))
+       `(,(if (package? obj)
+              (package-name obj)
+              "_")
+         ,obj
+         ,@(if (string=? output "out") '() (list output)))))
+    (x
+     `("_" ,x))))
+
 (set-record-type-printer! <package>
                           (lambda (package port)
                             (let ((loc    (package-location package))
@@ -590,6 +639,7 @@ it has in Guix."
 user interfaces, ignores."
   (package
     (inherit p)
+    (location (package-location p))
     (properties `((hidden? . #t)
                   ,@(package-properties p)))))
 
@@ -613,12 +663,6 @@ object."
 (define (package-field-location package field)
   "Return the source code location of the definition of FIELD for PACKAGE, or
 #f if it could not be determined."
-  (define (goto port line column)
-    (unless (and (= (port-column port) (- column 1))
-                 (= (port-line port) (- line 1)))
-      (unless (eof-object? (read-char port))
-        (goto port line column))))
-
   (match (package-location package)
     (($ <location> file line column)
      (match (search-path %load-path file)
@@ -628,7 +672,7 @@ object."
             ;; In general we want to keep relative file names for modules.
             (call-with-input-file file-found
               (lambda (port)
-                (goto port line column)
+                (go-to-location port line column)
                 (match (read port)
                   (('package inits ...)
                    (let ((field (assoc field inits)))
@@ -651,6 +695,18 @@ object."
         #f)))
     (_ #f)))
 
+(define-syntax-rule (this-package-input name)
+  "Return the input NAME of the package being defined--i.e., an input
+from the ‘inputs’ or ‘propagated-inputs’ field.  Native inputs are not
+considered.  If this input does not exist, return #f instead."
+  (or (lookup-package-input this-package name)
+      (lookup-package-propagated-input this-package name)))
+
+(define-syntax-rule (this-package-native-input name)
+  "Return the native package input NAME of the package being defined--i.e.,
+an input from the ‘native-inputs’ field.  If this native input does not
+exist, return #f instead."
+  (lookup-package-native-input this-package name))
 
 ;; Error conditions.
 
@@ -701,8 +757,12 @@ identifiers.  The result is inferred from the file names of patches."
   (let* ((canonical (module-ref (resolve-interface '(gnu packages base))
                                 'canonical-package))
          (ref       (lambda (module var)
-                      (canonical
-                       (module-ref (resolve-interface module) var)))))
+                      ;; Make sure 'canonical-package' is not influenced by
+                      ;; '%current-target-system' since we're going to use the
+                      ;; native package anyway.
+                      (parameterize ((%current-target-system #f))
+                        (canonical
+                         (module-ref (resolve-interface module) var))))))
     `(("tar"   ,(ref '(gnu packages base) 'tar))
       ("xz"    ,(ref '(gnu packages compression) 'xz))
       ("bzip2" ,(ref '(gnu packages compression) 'bzip2))
@@ -735,7 +795,7 @@ the build code of derivation."
                            #:key
                            inputs
                            (snippet #f)
-                           (flags '("-p1"))
+                           (flags %default-patch-flags)
                            (modules '())
                            (guile-for-build (%guile-for-build))
                            (system (%current-system)))
@@ -759,20 +819,7 @@ specifies modules in scope when evaluating SNIPPET."
           ((package) package)
           (#f        #f)))))
 
-  (define decompression-type
-    (cond ((string-suffix? "gz" source-file-name)  "gzip")
-          ((string-suffix? "Z" source-file-name)  "gzip")
-          ((string-suffix? "bz2" source-file-name) "bzip2")
-          ((string-suffix? "lz" source-file-name)  "lzip")
-          ((string-suffix? "zip" source-file-name) "unzip")
-          (else "xz")))
-
-  (define original-file-name
-    ;; Remove the store prefix plus the slash, hash, and hyphen.
-    (let* ((sans (string-drop source-file-name
-                              (+ (string-length (%store-prefix)) 1)))
-           (dash (string-index sans #\-)))
-      (string-drop sans (+ 1 dash))))
+  (define original-file-name (strip-store-file-name source-file-name))
 
   (define (numeric-extension? file-name)
     ;; Return true if FILE-NAME ends with digits.
@@ -785,11 +832,9 @@ specifies modules in scope when evaluating SNIPPET."
 
   (define (tarxz-name file-name)
     ;; Return a '.tar.xz' file name based on FILE-NAME.
-    (let ((base (cond ((numeric-extension? file-name)
-                       original-file-name)
-                      ((checkout? file-name)
-                       (string-drop-right file-name 9))
-                      (else (file-sans-extension file-name)))))
+    (let ((base (if (numeric-extension? file-name)
+                    original-file-name
+                    (file-sans-extension file-name))))
       (string-append base
                      (if (equal? (file-extension base) "tar")
                          ".xz"
@@ -798,22 +843,27 @@ specifies modules in scope when evaluating SNIPPET."
   (define instantiate-patch
     (match-lambda
       ((? string? patch)                          ;deprecated
-       (interned-file patch #:recursive? #t))
+       (local-file patch #:recursive? #t))
       ((? struct? patch)                          ;origin, local-file, etc.
-       (lower-object patch system))))
-
-  (mlet %store-monad ((tar ->     (lookup-input "tar"))
-                      (xz ->      (lookup-input "xz"))
-                      (patch ->   (lookup-input "patch"))
-                      (locales -> (lookup-input "locales"))
-                      (decomp ->  (lookup-input decompression-type))
-                      (patches    (sequence %store-monad
-                                            (map instantiate-patch patches))))
+       patch)))
+
+  (let ((tar     (lookup-input "tar"))
+        (gzip    (lookup-input "gzip"))
+        (bzip2   (lookup-input "bzip2"))
+        (lzip    (lookup-input "lzip"))
+        (xz      (lookup-input "xz"))
+        (patch   (lookup-input "patch"))
+        (locales (lookup-input "locales"))
+        (comp    (and=> (compressor source-file-name) lookup-input))
+        (patches (map instantiate-patch patches)))
     (define build
       (with-imported-modules '((guix build utils))
         #~(begin
             (use-modules (ice-9 ftw)
+                         (ice-9 match)
+                         (ice-9 regex)
                          (srfi srfi-1)
+                         (srfi srfi-26)
                          (guix build utils))
 
             ;; The --sort option was added to GNU tar in version 1.28, released
@@ -839,66 +889,8 @@ specifies modules in scope when evaluating SNIPPET."
                             (lambda (name)
                               (not (member name '("." "..")))))))
 
-            ;; Encoding/decoding errors shouldn't be silent.
-            (fluid-set! %default-port-conversion-strategy 'error)
-
-            (when #+locales
-              ;; First of all, install a UTF-8 locale so that UTF-8 file names
-              ;; are correctly interpreted.  During bootstrap, LOCALES is #f.
-              (setenv "LOCPATH"
-                      (string-append #+locales "/lib/locale/"
-                                     #+(and locales
-                                            (version-major+minor
-                                             (package-version locales)))))
-              (setlocale LC_ALL "en_US.utf8"))
-
-            (setenv "PATH" (string-append #+xz "/bin" ":"
-                                          #+decomp "/bin"))
-
-            ;; SOURCE may be either a directory or a tarball.
-            (if (file-is-directory? #+source)
-                (let* ((store     (%store-directory))
-                       (len       (+ 1 (string-length store)))
-                       (base      (string-drop #+source len))
-                       (dash      (string-index base #\-))
-                       (directory (string-drop base (+ 1 dash))))
-                  (mkdir directory)
-                  (copy-recursively #+source directory))
-                #+(if (string=? decompression-type "unzip")
-                      #~(invoke "unzip" #+source)
-                      #~(invoke (string-append #+tar "/bin/tar")
-                                "xvf" #+source)))
-
-            (let ((directory (first-file ".")))
-              (format (current-error-port)
-                      "source is under '~a'~%" directory)
-              (chdir directory)
-
-              (for-each apply-patch '#+patches)
-
-              (let ((result #+(if snippet
-                                  #~(let ((module (make-fresh-user-module)))
-                                      (module-use-interfaces!
-                                       module
-                                       (map resolve-interface '#+modules))
-                                      ((@ (system base compile) compile)
-                                       '#+snippet
-                                       #:to 'value
-                                       #:opts %auto-compilation-options
-                                       #:env module))
-                                  #~#t)))
-                ;; Issue a warning unless the result is #t.
-                (unless (eqv? result #t)
-                  (format (current-error-port) "\
-## WARNING: the snippet returned `~s'.  Return values other than #t
-## are deprecated.  Please migrate this package so that its snippet
-## reports errors by raising an exception, and otherwise returns #t.~%"
-                          result))
-                (unless result
-                  (error "snippet returned false")))
-
-              (chdir "..")
-
+            (define (repack directory output)
+              ;; Write to OUTPUT a compressed tarball containing DIRECTORY.
               (unless tar-supports-sort?
                 (call-with-output-file ".file_list"
                   (lambda (port)
@@ -907,22 +899,97 @@ specifies modules in scope when evaluating SNIPPET."
                               (find-files directory
                                           #:directories? #t
                                           #:fail-on-error? #t)))))
-              (apply invoke
-                     (string-append #+tar "/bin/tar")
-                     "cvfa" #$output
+
+              (apply invoke #+(file-append tar "/bin/tar")
+                     "cvfa" output
                      ;; Avoid non-determinism in the archive.  Set the mtime
                      ;; to 1 as is the case in the store (software like gzip
                      ;; behaves differently when it stumbles upon mtime = 0).
                      "--mtime=@1"
-                     "--owner=root:0"
-                     "--group=root:0"
+                     "--owner=root:0" "--group=root:0"
                      (if tar-supports-sort?
-                         `("--sort=name"
-                           ,directory)
+                         `("--sort=name" ,directory)
                          '("--no-recursion"
-                           "--files-from=.file_list")))))))
+                           "--files-from=.file_list"))))
+
+            ;; Encoding/decoding errors shouldn't be silent.
+            (fluid-set! %default-port-conversion-strategy 'error)
 
-    (let ((name (tarxz-name original-file-name)))
+            (when #+locales
+              ;; First of all, install a UTF-8 locale so that UTF-8 file names
+              ;; are correctly interpreted.  During bootstrap, LOCALES is #f.
+              (setenv "LOCPATH"
+                      (string-append #+locales "/lib/locale/"
+                                     #+(and locales
+                                            (version-major+minor
+                                             (package-version locales)))))
+              (setlocale LC_ALL "en_US.utf8"))
+
+            (setenv "PATH"
+                    (string-append #+xz "/bin"
+                                   (if #+comp
+                                       (string-append ":" #+comp "/bin")
+                                       "")))
+
+            (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+
+            ;; SOURCE may be either a directory, a tarball or a simple file.
+            (let ((name (strip-store-file-name #+source))
+                  (command (and=> #+comp (cut string-append <> "/bin/"
+                                              (compressor #+source)))))
+              (if (file-is-directory? #+source)
+                  (copy-recursively #+source name)
+                  (cond
+                   ((tarball? #+source)
+                    (invoke (string-append #+tar "/bin/tar") "xvf" #+source))
+                   ((and=> (compressor #+source) (cut string= "unzip" <>))
+                    ;; Note: Referring to the store unzip here (#+unzip)
+                    ;; would introduce a cycle.
+                    (invoke "unzip" #+source))
+                   (else
+                    (copy-file #+source name)
+                    (when command
+                      (invoke command "--decompress" name))))))
+
+            (let* ((file (first-file "."))
+                   (directory (if (file-is-directory? file)
+                                  file
+                                  ".")))
+              (format (current-error-port) "source is at '~a'~%" file)
+
+              (with-directory-excursion directory
+
+                (for-each apply-patch '#+patches)
+
+                #+(if snippet
+                      #~(let ((module (make-fresh-user-module)))
+                          (module-use-interfaces!
+                           module
+                           (map resolve-interface '#+modules))
+                          ((@ (system base compile) compile)
+                           '#+(if (pair? snippet)
+                                  (sexp->gexp snippet)
+                                  snippet)
+                           #:to 'value
+                           #:opts %auto-compilation-options
+                           #:env module))
+                      #~#t))
+
+              ;; If SOURCE is a directory (such as a checkout), return a
+              ;; directory.  Otherwise create a tarball.
+              (cond
+               ((file-is-directory? #+source)
+                (copy-recursively directory #$output
+                                  #:log (%make-void-port "w")))
+               ((or #+comp (tarball? #+source))
+                (repack directory #$output))
+               (else                    ;single uncompressed file
+                (copy-file file #$output)))))))
+
+    (let ((name (if (or (checkout? original-file-name)
+                        (not (compressor original-file-name)))
+                    original-file-name
+                    (tarxz-name original-file-name))))
       (gexp->derivation name build
                         #:graft? #f
                         #:system system
@@ -987,6 +1054,94 @@ preserved, and only duplicate propagated inputs are removed."
       ((input rest ...)
        (loop rest (cons input result) propagated first? seen)))))
 
+(define (lookup-input inputs name)
+  "Lookup NAME among INPUTS, an input list."
+  ;; Note: Currently INPUTS is assumed to be an input list that contains input
+  ;; labels.  In the future, input labels will be gone and this procedure will
+  ;; check package names.
+  (match (assoc-ref inputs name)
+    ((obj) obj)
+    ((obj _) obj)
+    (#f #f)))
+
+(define (lookup-package-input package name)
+  "Look up NAME among PACKAGE's inputs.  Return it if found, #f otherwise."
+  (lookup-input (package-inputs package) name))
+
+(define (lookup-package-native-input package name)
+  "Look up NAME among PACKAGE's native inputs.  Return it if found, #f
+otherwise."
+  (lookup-input (package-native-inputs package) name))
+
+(define (lookup-package-propagated-input package name)
+  "Look up NAME among PACKAGE's propagated inputs.  Return it if found, #f
+otherwise."
+  (lookup-input (package-propagated-inputs package) name))
+
+(define (lookup-package-direct-input package name)
+  "Look up NAME among PACKAGE's direct inputs.  Return it if found, #f
+otherwise."
+  (lookup-input (package-direct-inputs package) name))
+
+(define (replace-input name replacement inputs)
+  "Replace input NAME by REPLACEMENT within INPUTS."
+  (map (lambda (input)
+         (match input
+           (((? string? label) . _)
+            (if (string=? label name)
+                (match replacement        ;does REPLACEMENT specify an output?
+                  ((_ _) (cons label replacement))
+                  (_     (list label replacement)))
+                input))))
+       inputs))
+
+(define-syntax prepend
+  (lambda (s)
+    (syntax-violation 'prepend
+                      "'prepend' may only be used within 'modify-inputs'"
+                      s)))
+
+(define-syntax replace
+  (lambda (s)
+    (syntax-violation 'replace
+                      "'replace' may only be used within 'modify-inputs'"
+                      s)))
+
+(define-syntax modify-inputs
+  (syntax-rules (delete prepend append replace)
+    "Modify the given package inputs, as returned by 'package-inputs' & co.,
+according to the given clauses.  The example below removes the GMP and ACL
+inputs of Coreutils and adds libcap:
+
+  (modify-inputs (package-inputs coreutils)
+    (delete \"gmp\" \"acl\")
+    (append libcap))
+
+Other types of clauses include 'prepend' and 'replace'.
+
+The first argument must be a labeled input list; the result is also a labeled
+input list."
+    ;; Note: This macro hides the fact that INPUTS, as returned by
+    ;; 'package-inputs' & co., is actually an alist with labels.  Eventually,
+    ;; it will operate on list of inputs without labels.
+    ((_ inputs (delete name) clauses ...)
+     (modify-inputs (alist-delete name inputs)
+                    clauses ...))
+    ((_ inputs (delete names ...) clauses ...)
+     (modify-inputs (fold alist-delete inputs (list names ...))
+                    clauses ...))
+    ((_ inputs (prepend lst ...) clauses ...)
+     (modify-inputs (append (map add-input-label (list lst ...)) inputs)
+                    clauses ...))
+    ((_ inputs (append lst ...) clauses ...)
+     (modify-inputs (append inputs (map add-input-label (list lst ...)))
+                    clauses ...))
+    ((_ inputs (replace name replacement) clauses ...)
+     (modify-inputs (replace-input name replacement inputs)
+                    clauses ...))
+    ((_ inputs)
+     inputs)))
+
 (define (package-direct-sources package)
   "Return all source origins associated with PACKAGE; including origins in
 PACKAGE's inputs."
@@ -1331,10 +1486,6 @@ matching package and returns a replacement for that package."
 ;;; Package derivations.
 ;;;
 
-(define %derivation-cache
-  ;; Package to derivation-path mapping.
-  (make-weak-key-hash-table 100))
-
 (define (cache! cache package system thunk)
   "Memoize in CACHE the return values of THUNK as the derivation of PACKAGE on
 SYSTEM."
@@ -1362,56 +1513,51 @@ Return the cached result when available."
             (#f (cache! cache package key thunk))
             (value value)))
          (#f
-          (cache! cache package key thunk)))))
-    ((_ package system body ...)
-     (cached (=> %derivation-cache) package system body ...))))
-
-(define* (expand-input store package input system #:optional cross-system)
-  "Expand INPUT, an input tuple, such that it contains only references to
-derivation paths or store paths.  PACKAGE is only used to provide contextual
-information in exceptions."
-  (define (intern file)
-    ;; Add FILE to the store.  Set the `recursive?' bit to #t, so that
-    ;; file permissions are preserved.
-    (add-to-store store (basename file) #t "sha256" file))
-
-  (define derivation
-    (if cross-system
-        (cut package-cross-derivation store <> cross-system system
-             #:graft? #f)
-        (cut package-derivation store <> system #:graft? #f)))
+          (cache! cache package key thunk)))))))
 
-  (match input
-    (((? string? name) (? package? package))
-     (list name (derivation package)))
-    (((? string? name) (? package? package)
-      (? string? sub-drv))
-     (list name (derivation package)
-           sub-drv))
-    (((? string? name)
-      (and (? string?) (? derivation-path?) drv))
-     (list name drv))
-    (((? string? name)
-      (and (? string?) (? file-exists? file)))
-     ;; Add FILE to the store.  When FILE is in the sub-directory of a
-     ;; store path, it needs to be added anyway, so it can be used as a
-     ;; source.
-     (list name (intern file)))
-    (((? string? name) (? struct? source))
-     ;; 'package-source-derivation' calls 'lower-object', which can throw
-     ;; '&gexp-input-error'.  However '&gexp-input-error' lacks source
-     ;; location info, so we catch and rethrow here (XXX: not optimal
-     ;; performance-wise).
-     (guard (c ((gexp-input-error? c)
-                (raise (condition
-                        (&package-input-error
-                         (package package)
-                         (input   (gexp-error-invalid-input c)))))))
-       (list name (package-source-derivation store source system))))
-    (x
-     (raise (condition (&package-input-error
-                        (package package)
-                        (input   x)))))))
+(define* (expand-input package input system #:key target)
+  "Expand INPUT, an input tuple, to a name/<gexp-input> tuple.  PACKAGE is
+only used to provide contextual information in exceptions."
+  (with-monad %store-monad
+    (match input
+      ;; INPUT doesn't need to be lowered here because it'll be lowered down
+      ;; the road in the gexp that refers to it.  However, packages need to be
+      ;; special-cased to pass #:graft? #f (only the "tip" of the package
+      ;; graph needs to have #:graft? #t).  Lowering them here also allows
+      ;; 'bag->derivation' to delete non-eq? packages that lead to the same
+      ;; derivation.
+      (((? string? name) (? package? package))
+       (mlet %store-monad ((drv (if target
+                                    (package->cross-derivation package
+                                                               target system
+                                                               #:graft? #f)
+                                    (package->derivation package system
+                                                         #:graft? #f))))
+         (return (list name (gexp-input drv #:native? (not target))))))
+      (((? string? name) (? package? package) (? string? output))
+       (mlet %store-monad ((drv (if target
+                                    (package->cross-derivation package
+                                                               target system
+                                                               #:graft? #f)
+                                    (package->derivation package system
+                                                         #:graft? #f))))
+         (return (list name (gexp-input drv output #:native? (not target))))))
+
+      (((? string? name) (? file-like? thing))
+       (return (list name (gexp-input thing #:native? (not target)))))
+      (((? string? name) (? file-like? thing) (? string? output))
+       (return (list name (gexp-input thing output #:native? (not target)))))
+      (((? string? name)
+        (and (? string?) (? file-exists? file)))
+       ;; Add FILE to the store.  When FILE is in the sub-directory of a
+       ;; store path, it needs to be added anyway, so it can be used as a
+       ;; source.
+       (return (list name (gexp-input (local-file file #:recursive? #t)
+                                      #:native? (not target)))))
+      (x
+       (raise (condition (&package-input-error
+                          (package package)
+                          (input   x))))))))
 
 (define %bag-cache
   ;; 'eq?' cache mapping packages to system+target+graft?-dependent bags.
@@ -1459,45 +1605,51 @@ and return it."
                                  (&package-error
                                   (package package))))))))))))
 
-(define %graft-cache
-  ;; 'eq?' cache mapping package objects to a graft corresponding to their
-  ;; replacement package.
-  (make-weak-key-hash-table 200))
+(define (input-graft system)
+  "Return a monadic procedure that, given a package with a graft, returns a
+graft, and #f otherwise."
+  (with-monad %store-monad
+    (match-lambda*
+      (((? package? package) output)
+       (let ((replacement (package-replacement package)))
+         (if replacement
+             ;; XXX: We should use a separate cache instead of abusing the
+             ;; object cache.
+             (mcached (mlet %store-monad ((orig (package->derivation package system
+                                                                     #:graft? #f))
+                                          (new  (package->derivation replacement system
+                                                                     #:graft? #t)))
+                        (return (graft
+                                  (origin orig)
+                                  (origin-output output)
+                                  (replacement new)
+                                  (replacement-output output))))
+                      package 'graft output system)
+             (return #f))))
+      (_
+       (return #f)))))
 
-(define (input-graft store system)
-  "Return a procedure that, given a package with a replacement and an output name,
-returns a graft, and #f otherwise."
-  (match-lambda*
-    (((? package? package) output)
-     (let ((replacement (package-replacement package)))
-       (and replacement
-            (cached (=> %graft-cache) package (cons output system)
-                    (let ((orig (package-derivation store package system
-                                                    #:graft? #f))
-                          (new  (package-derivation store replacement system
-                                                    #:graft? #t)))
-                      (graft
-                        (origin orig)
-                        (origin-output output)
-                        (replacement new)
-                        (replacement-output output)))))))))
-
-(define (input-cross-graft store target system)
+(define (input-cross-graft target system)
   "Same as 'input-graft', but for cross-compilation inputs."
-  (match-lambda*
-    (((? package? package) output)
-     (let ((replacement (package-replacement package)))
-       (and replacement
-            (let ((orig (package-cross-derivation store package target system
-                                                  #:graft? #f))
-                  (new  (package-cross-derivation store replacement
-                                                  target system
-                                                  #:graft? #t)))
-              (graft
-                (origin orig)
-                (origin-output output)
-                (replacement new)
-                (replacement-output output))))))))
+  (with-monad %store-monad
+    (match-lambda*
+      (((? package? package) output)
+       (let ((replacement (package-replacement package)))
+         (if replacement
+             (mlet %store-monad ((orig (package->cross-derivation package
+                                                                  target system
+                                                                  #:graft? #f))
+                                 (new  (package->cross-derivation replacement
+                                                                  target system
+                                                                  #:graft? #t)))
+               (return (graft
+                         (origin orig)
+                         (origin-output output)
+                         (replacement new)
+                         (replacement-output output))))
+             (return #f))))
+      (_
+       (return #f)))))
 
 (define* (fold-bag-dependencies proc seed bag
                                 #:key (native? #t))
@@ -1532,7 +1684,7 @@ dependencies; otherwise, restrict to target dependencies."
       ((head . tail)
        (loop tail result visited)))))
 
-(define* (bag-grafts store bag)
+(define* (bag-grafts bag)
   "Return the list of grafts potentially applicable to BAG.  Potentially
 applicable grafts are collected by looking at direct or indirect dependencies
 of BAG that have a 'replacement'.  Whether a graft is actually applicable
@@ -1541,158 +1693,199 @@ to (see 'graft-derivation'.)"
   (define system (bag-system bag))
   (define target (bag-target bag))
 
-  (define native-grafts
-    (let ((->graft (input-graft store system)))
-      (parameterize ((%current-system system)
-                     (%current-target-system #f))
-        (fold-bag-dependencies (lambda (package output grafts)
-                                 (match (->graft package output)
-                                   (#f    grafts)
-                                   (graft (cons graft grafts))))
-                               '()
-                               bag))))
-
-  (define target-grafts
-    (if target
-        (let ((->graft (input-cross-graft store target system)))
+  (mlet %store-monad
+      ((native-grafts
+        (let ((->graft (input-graft system)))
           (parameterize ((%current-system system)
-                         (%current-target-system target))
+                         (%current-target-system #f))
             (fold-bag-dependencies (lambda (package output grafts)
-                                     (match (->graft package output)
-                                       (#f    grafts)
-                                       (graft (cons graft grafts))))
-                                   '()
-                                   bag
-                                   #:native? #f)))
-        '()))
-
-  ;; We can end up with several identical grafts if we stumble upon packages
-  ;; that are not 'eq?' but map to the same derivation (this can happen when
-  ;; using things like 'package-with-explicit-inputs'.)  Hence the
-  ;; 'delete-duplicates' call.
-  (delete-duplicates
-   (append native-grafts target-grafts)))
-
-(define* (package-grafts store package
-                         #:optional (system (%current-system))
-                         #:key target)
+                                     (mlet %store-monad ((grafts grafts))
+                                       (>>= (->graft package output)
+                                            (match-lambda
+                                              (#f    (return grafts))
+                                              (graft (return (cons graft grafts)))))))
+                                   (return '())
+                                   bag))))
+
+       (target-grafts
+        (if target
+            (let ((->graft (input-cross-graft target system)))
+              (parameterize ((%current-system system)
+                             (%current-target-system target))
+                (fold-bag-dependencies
+                 (lambda (package output grafts)
+                   (mlet %store-monad ((grafts grafts))
+                     (>>= (->graft package output)
+                          (match-lambda
+                            (#f    (return grafts))
+                            (graft (return (cons graft grafts)))))))
+                 (return '())
+                 bag
+                 #:native? #f)))
+            (return '()))))
+
+    ;; We can end up with several identical grafts if we stumble upon packages
+    ;; that are not 'eq?' but map to the same derivation (this can happen when
+    ;; using things like 'package-with-explicit-inputs'.)  Hence the
+    ;; 'delete-duplicates' call.
+    (return (delete-duplicates
+             (append native-grafts target-grafts)))))
+
+(define* (package-grafts* package
+                          #:optional (system (%current-system))
+                          #:key target)
   "Return the list of grafts applicable to PACKAGE as built for SYSTEM and
 TARGET."
   (let* ((package (or (package-replacement package) package))
          (bag     (package->bag package system target)))
-    (bag-grafts store bag)))
-
-(define* (bag->derivation store bag
-                          #:optional context)
+    (bag-grafts bag)))
+
+(define package-grafts
+  (store-lower package-grafts*))
+
+(define-inlinable (derivation=? drv1 drv2)
+  "Return true if DRV1 and DRV2 are equal."
+  (or (eq? drv1 drv2)
+      (string=? (derivation-file-name drv1)
+                (derivation-file-name drv2))))
+
+(define (input=? input1 input2)
+  "Return true if INPUT1 and INPUT2 are equivalent."
+  (match input1
+    ((label1 obj1 . outputs1)
+     (match input2
+       ((label2 obj2 . outputs2)
+        (and (string=? label1 label2)
+             (equal? outputs1 outputs2)
+             (or (and (derivation? obj1) (derivation? obj2)
+                      (derivation=? obj1 obj2))
+                 (equal? obj1 obj2))))))))
+
+(define* (bag->derivation bag #:optional context)
   "Return the derivation to build BAG for SYSTEM.  Optionally, CONTEXT can be
 a package object describing the context in which the call occurs, for improved
 error reporting."
   (if (bag-target bag)
-      (bag->cross-derivation store bag)
-      (let* ((system     (bag-system bag))
-             (inputs     (bag-transitive-inputs bag))
-             (input-drvs (map (cut expand-input store context <> system)
-                              inputs))
-             (paths      (delete-duplicates
-                          (append-map (match-lambda
-                                       ((_ (? package? p) _ ...)
-                                        (package-native-search-paths
-                                         p))
-                                       (_ '()))
-                                      inputs))))
-
-        (apply (bag-build bag)
-               store (bag-name bag) input-drvs
+      (bag->cross-derivation bag)
+      (mlet* %store-monad ((system ->  (bag-system bag))
+                           (inputs ->  (bag-transitive-inputs bag))
+                           (input-drvs (mapm %store-monad
+                                             (cut expand-input context <> system)
+                                             inputs))
+                           (paths ->   (delete-duplicates
+                                        (append-map (match-lambda
+                                                      ((_ (? package? p) _ ...)
+                                                       (package-native-search-paths
+                                                        p))
+                                                      (_ '()))
+                                                    inputs))))
+        ;; It's possible that INPUTS contains packages that are not 'eq?' but
+        ;; that lead to the same derivation.  Delete those duplicates to avoid
+        ;; issues down the road, such as duplicate entries in '%build-inputs'.
+        (apply (bag-build bag) (bag-name bag)
+               (delete-duplicates input-drvs input=?)
                #:search-paths paths
                #:outputs (bag-outputs bag) #:system system
                (bag-arguments bag)))))
 
-(define* (bag->cross-derivation store bag
-                                #:optional context)
+(define* (bag->cross-derivation bag #:optional context)
   "Return the derivation to build BAG, which is actually a cross build.
 Optionally, CONTEXT can be a package object denoting the context of the call.
 This is an internal procedure."
-  (let* ((system      (bag-system bag))
-         (target      (bag-target bag))
-         (host        (bag-transitive-host-inputs bag))
-         (host-drvs   (map (cut expand-input store context <> system target)
-                           host))
-         (target*     (bag-transitive-target-inputs bag))
-         (target-drvs (map (cut expand-input store context <> system)
-                           target*))
-         (build       (bag-transitive-build-inputs bag))
-         (build-drvs  (map (cut expand-input store context <> system)
-                           build))
-         (all         (append build target* host))
-         (paths       (delete-duplicates
-                       (append-map (match-lambda
-                                    ((_ (? package? p) _ ...)
-                                     (package-search-paths p))
-                                    (_ '()))
-                                   all)))
-         (npaths      (delete-duplicates
-                       (append-map (match-lambda
-                                    ((_ (? package? p) _ ...)
-                                     (package-native-search-paths
-                                      p))
-                                    (_ '()))
-                                   all))))
-
-    (apply (bag-build bag)
-           store (bag-name bag)
-           #:native-drvs build-drvs
-           #:target-drvs (append host-drvs target-drvs)
+  (mlet* %store-monad ((system ->   (bag-system bag))
+                       (target ->   (bag-target bag))
+                       (host ->     (bag-transitive-host-inputs bag))
+                       (host-drvs   (mapm %store-monad
+                                          (cut expand-input context <>
+                                               system #:target target)
+                                          host))
+                       (target* ->  (bag-transitive-target-inputs bag))
+                       (target-drvs (mapm %store-monad
+                                          (cut expand-input context <> system)
+                                          target*))
+                       (build ->    (bag-transitive-build-inputs bag))
+                       (build-drvs  (mapm %store-monad
+                                          (cut expand-input context <> system)
+                                          build))
+                       (all ->      (append build target* host))
+                       (paths ->    (delete-duplicates
+                                     (append-map (match-lambda
+                                                   ((_ (? package? p) _ ...)
+                                                    (package-search-paths p))
+                                                   (_ '()))
+                                                 all)))
+                       (npaths ->   (delete-duplicates
+                                     (append-map (match-lambda
+                                                   ((_ (? package? p) _ ...)
+                                                    (package-native-search-paths
+                                                     p))
+                                                   (_ '()))
+                                                 all))))
+
+    (apply (bag-build bag) (bag-name bag)
+           #:build-inputs (delete-duplicates build-drvs input=?)
+           #:host-inputs (delete-duplicates host-drvs input=?)
+           #:target-inputs (delete-duplicates target-drvs input=?)
            #:search-paths paths
            #:native-search-paths npaths
            #:outputs (bag-outputs bag)
            #:system system #:target target
            (bag-arguments bag))))
 
-(define* (package-derivation store package
-                             #:optional (system (%current-system))
-                             #:key (graft? (%graft?)))
+(define bag->derivation*
+  (store-lower bag->derivation))
+
+(define graft-derivation*
+  (store-lift graft-derivation))
+
+(define* (package->derivation package
+                              #:optional (system (%current-system))
+                              #:key (graft? (%graft?)))
   "Return the <derivation> object of PACKAGE for SYSTEM."
 
   ;; Compute the derivation and cache the result.  Caching is important
   ;; because some derivations, such as the implicit inputs of the GNU build
   ;; system, will be queried many, many times in a row.
-  (cached package (cons system graft?)
-          (let* ((bag (package->bag package system #f #:graft? graft?))
-                 (drv (bag->derivation store bag package)))
-            (if graft?
-                (match (bag-grafts store bag)
-                  (()
-                   drv)
-                  (grafts
-                   (let ((guile (package-derivation store (guile-for-grafts)
-                                                    system #:graft? #f)))
-                     ;; TODO: As an optimization, we can simply graft the tip
-                     ;; of the derivation graph since 'graft-derivation'
-                     ;; recurses anyway.
-                     (graft-derivation store drv grafts
-                                       #:system system
-                                       #:guile guile))))
-                drv))))
-
-(define* (package-cross-derivation store package target
-                                   #:optional (system (%current-system))
-                                   #:key (graft? (%graft?)))
+  (mcached (mlet* %store-monad ((bag -> (package->bag package system #f
+                                                      #:graft? graft?))
+                                (drv (bag->derivation bag package)))
+             (if graft?
+                 (>>= (bag-grafts bag)
+                      (match-lambda
+                        (()
+                         (return drv))
+                        (grafts
+                         (mlet %store-monad ((guile (package->derivation
+                                                     (guile-for-grafts)
+                                                     system #:graft? #f)))
+                           (graft-derivation* drv grafts
+                                              #:system system
+                                              #:guile guile)))))
+                 (return drv)))
+           package system #f graft?))
+
+(define* (package->cross-derivation package target
+                                    #:optional (system (%current-system))
+                                    #:key (graft? (%graft?)))
   "Cross-build PACKAGE for TARGET (a GNU triplet) from host SYSTEM (a Guix
 system identifying string)."
-  (cached package (list system target graft?)
-          (let* ((bag (package->bag package system target #:graft? graft?))
-                 (drv (bag->derivation store bag package)))
-            (if graft?
-                (match (bag-grafts store bag)
-                  (()
-                   drv)
-                  (grafts
-                   (graft-derivation store drv grafts
-                                     #:system system
-                                     #:guile
-                                     (package-derivation store (guile-for-grafts)
-                                                         system #:graft? #f))))
-                drv))))
+  (mcached (mlet* %store-monad ((bag -> (package->bag package system target
+                                                      #:graft? graft?))
+                                (drv (bag->derivation bag package)))
+             (if graft?
+                 (>>= (bag-grafts bag)
+                      (match-lambda
+                        (()
+                         (return drv))
+                        (grafts
+                         (mlet %store-monad ((guile (package->derivation
+                                                     (guile-for-grafts)
+                                                     system #:graft? #f)))
+                           (graft-derivation* drv grafts
+                                              #:system system
+                                              #:guile guile)))))
+                 (return drv)))
+           package system target graft?))
 
 (define* (package-output store package
                          #:optional (output "out") (system (%current-system)))
@@ -1740,11 +1933,11 @@ unless you know what you are doing."
                   out)
               store))))
 
-(define package->derivation
-  (store-lift package-derivation))
+(define package-derivation
+  (store-lower package->derivation))
 
-(define package->cross-derivation
-  (store-lift package-cross-derivation))
+(define package-cross-derivation
+  (store-lower package->cross-derivation))
 
 (define-gexp-compiler (package-compiler (package <package>) system target)
   ;; Compile PACKAGE to a derivation for SYSTEM, optionally cross-compiled for
@@ -1764,7 +1957,7 @@ unless you know what you are doing."
              (content-hash-value hash)
              name #:system system))
     (($ <origin> uri method hash name (= force (patches ...)) snippet
-        (flags ...) inputs (modules ...) guile-for-build)
+                 flags inputs (modules ...) guile-for-build)
      ;; Patches and/or a snippet.
      (mlet %store-monad ((source (method uri
                                          (content-hash-algorithm hash)
diff --git a/guix/profiles.scm b/guix/profiles.scm
index ffdd5f57f6..1d354ecb78 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com>
-;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2017, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
@@ -1180,6 +1180,52 @@ MANIFEST.  Single-file bundles are required by programs such as Git and Lynx."
                     `((type . profile-hook)
                       (hook . emacs-subdirs))))
 
+(define (gdk-pixbuf-loaders-cache-file manifest)
+  "Return a derivation that produces a loaders cache file for every gdk-pixbuf
+loaders discovered in MANIFEST."
+  (define gdk-pixbuf                    ;lazy reference
+    (module-ref (resolve-interface '(gnu packages gtk)) 'gdk-pixbuf))
+
+  (mlet* %store-monad
+      ((gdk-pixbuf (manifest-lookup-package manifest "gdk-pixbuf"))
+       (librsvg (manifest-lookup-package manifest "librsvg"))
+       (gdk-pixbuf-bin -> (if (string? gdk-pixbuf)
+                              (string-append gdk-pixbuf "/bin")
+                              (file-append gdk-pixbuf "/bin"))))
+
+    (define build
+      (with-imported-modules (source-module-closure
+                              '((guix build glib-or-gtk-build-system)))
+        #~(begin
+            (use-modules (guix build glib-or-gtk-build-system))
+            (setenv "PATH" (string-append #$gdk-pixbuf-bin ":" (getenv "PATH")))
+
+            (generate-gdk-pixbuf-loaders-cache
+             ;; XXX: MANIFEST-LOOKUP-PACKAGE transitively searches through
+             ;; every input referenced by the manifest, while MANIFEST-INPUTS
+             ;; only retrieves the immediate inputs as well as their
+             ;; propagated inputs; to avoid causing an empty output derivation
+             ;; we must ensure that the inputs contain at least one
+             ;; loaders.cache file.  This is why we include gdk-pixbuf or
+             ;; librsvg when they are transitively found.
+             (list #$@(if gdk-pixbuf
+                          (list gdk-pixbuf)
+                          '())
+                   #$@(if librsvg
+                          (list librsvg)
+                          '())
+                   #$@(manifest-inputs manifest))
+             (list #$output)))))
+
+    (if gdk-pixbuf
+        (gexp->derivation "gdk-pixbuf-loaders-cache-file" build
+                          #:local-build? #t
+                          #:substitutable? #f
+                          #:properties
+                          '((type . profile-hook)
+                            (hook . gdk-pixbuf-loaders-cache-file)))
+        (return #f))))
+
 (define (glib-schemas manifest)
   "Return a derivation that unions all schemas from manifest entries and
 creates the Glib 'gschemas.compiled' file."
@@ -1799,10 +1845,10 @@ MANIFEST."
         ghc-package-cache-file
         ca-certificate-bundle
         emacs-subdirs
+        gdk-pixbuf-loaders-cache-file
         glib-schemas
         gtk-icon-themes
         gtk-im-modules
-        texlive-configuration
         xdg-desktop-database
         xdg-mime-database))
 
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 9e1f270dfb..38bc021665 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (guix scripts)
   #:use-module (guix ui)
   #:use-module (guix gexp)
+  #:use-module ((guix build utils) #:select (%xz-parallel-args))
   #:use-module (guix utils)
   #:use-module (guix store)
   #:use-module ((guix status) #:select (with-status-verbosity))
@@ -79,29 +81,34 @@
   compressor?
   (name       compressor-name)      ;string (e.g., "gzip")
   (extension  compressor-extension) ;string (e.g., ".lz")
-  (command    compressor-command))  ;gexp (e.g., #~("/gnu/store/…/gzip" "-9n"))
+  (command    compressor-command))  ;gexp (e.g., #~(list "/gnu/store/…/gzip"
+                                    ;                    "-9n" ))
 
 (define %compressors
   ;; Available compression tools.
   (list (compressor "gzip"  ".gz"
-                    #~(#+(file-append gzip "/bin/gzip") "-9n"))
+                    #~(list #+(file-append gzip "/bin/gzip") "-9n"))
         (compressor "lzip"  ".lz"
-                    #~(#+(file-append lzip "/bin/lzip") "-9"))
+                    #~(list #+(file-append lzip "/bin/lzip") "-9"))
         (compressor "xz"    ".xz"
-                    #~(#+(file-append xz "/bin/xz") "-e"))
+                    #~(append (list #+(file-append xz "/bin/xz")
+                                    "-e")
+                              (%xz-parallel-args)))
         (compressor "bzip2" ".bz2"
-                    #~(#+(file-append bzip2 "/bin/bzip2") "-9"))
+                    #~(list #+(file-append bzip2 "/bin/bzip2") "-9"))
         (compressor "zstd" ".zst"
                     ;; The default level 3 compresses better than gzip in a
                     ;; fraction of the time, while the highest level 19
                     ;; (de)compresses more slowly and worse than xz.
-                    #~(#+(file-append zstd "/bin/zstd") "-3"))
+                    #~(list #+(file-append zstd "/bin/zstd") "-3"))
         (compressor "none" "" #f)))
 
 ;; This one is only for use in this module, so don't put it in %compressors.
 (define bootstrap-xz
   (compressor "bootstrap-xz" ".xz"
-              #~(#+(file-append %bootstrap-coreutils&co "/bin/xz") "-e")))
+              #~(append (list #+(file-append %bootstrap-coreutils&co "/bin/xz")
+                              "-e")
+                        (%xz-parallel-args))))
 
 (define (lookup-compressor name)
   "Return the compressor object called NAME.  Error out if it could not be
@@ -298,7 +305,7 @@ its source property."
           (apply invoke tar "-cvf" #$output "."
                  (tar-base-options
                   #:tar tar
-                  #:compressor '#+(and=> compressor compressor-command)))))))
+                  #:compressor #+(and=> compressor compressor-command)))))))
 
 (define* (self-contained-tarball name profile
                                  #:key target
@@ -574,11 +581,13 @@ the image."
                                ,@(source-module-closure
                                   `((guix docker)
                                     (guix build store-copy)
+                                    (guix build utils) ;for %xz-parallel-args
                                     (guix profiles)
                                     (guix search-paths))
                                   #:select? not-config?))
         #~(begin
             (use-modules (guix docker) (guix build store-copy)
+                         (guix build utils)
                          (guix profiles) (guix search-paths)
                          (srfi srfi-1) (srfi srfi-19)
                          (ice-9 match))
@@ -625,7 +634,7 @@ the image."
                                        #~(list (string-append #$profile "/"
                                                               #$entry-point)))
                                 #:extra-files directives
-                                #:compressor '#+(compressor-command compressor)
+                                #:compressor #+(compressor-command compressor)
                                 #:creation-time (make-time time-utc 0 1))))))
 
   (gexp->derivation (string-append name ".tar"
@@ -804,7 +813,7 @@ Section: misc
             (apply invoke tar
                    `(,@(tar-base-options
                         #:tar tar
-                        #:compressor '#+(and=> compressor compressor-command))
+                        #:compressor #+(and=> compressor compressor-command))
                      "-cvf" ,control-tarball-file-name
                      "control"
                      ,@(if postinst-file '("postinst") '())
diff --git a/guix/scripts/style.scm b/guix/scripts/style.scm
new file mode 100644
index 0000000000..86a46f693c
--- /dev/null
+++ b/guix/scripts/style.scm
@@ -0,0 +1,548 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 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/>.
+
+;;; Commentary:
+;;;
+;;; This script updates package definitions so they use the "simplified" style
+;;; for input lists, as in:
+;;;
+;;;  (package
+;;;    ;; ...
+;;;    (inputs (list foo bar baz)))
+;;;
+;;; Code:
+
+(define-module (guix scripts style)
+  #:autoload   (gnu packages) (specification->package fold-packages)
+  #:use-module (guix scripts)
+  #:use-module ((guix scripts build) #:select (%standard-build-options))
+  #:use-module (guix combinators)
+  #:use-module (guix ui)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (guix i18n)
+  #:use-module (guix diagnostics)
+  #:use-module (ice-9 control)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 rdelim)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-37)
+  #:export (guix-style))
+
+
+;;;
+;;; Comment-preserving reader.
+;;;
+
+;; A comment.
+(define-record-type <comment>
+  (comment str margin?)
+  comment?
+  (str     comment->string)
+  (margin? comment-margin?))
+
+(define (read-with-comments port)
+  "Like 'read', but include <comment> objects when they're encountered."
+  ;; Note: Instead of implementing this functionality in 'read' proper, which
+  ;; is the best approach long-term, this code is a later on top of 'read',
+  ;; such that we don't have to rely on a specific Guile version.
+  (let loop ((blank-line? #t)
+             (return (const 'unbalanced)))
+    (match (read-char port)
+      ((? eof-object? eof)
+       eof)                                       ;oops!
+      (chr
+       (cond ((eqv? chr #\newline)
+              (loop #t return))
+             ((char-set-contains? char-set:whitespace chr)
+              (loop blank-line? return))
+             ((memv chr '(#\( #\[))
+              (let/ec return
+                (let liip ((lst '()))
+                  (liip (cons (loop (match lst
+                                      (((? comment?) . _) #t)
+                                      (_ #f))
+                                    (lambda ()
+                                      (return (reverse lst))))
+                              lst)))))
+             ((memv chr '(#\) #\]))
+              (return))
+             ((eq? chr #\')
+              (list 'quote (loop #f return)))
+             ((eq? chr #\`)
+              (list 'quasiquote (loop #f return)))
+             ((eq? chr #\,)
+              (list (match (peek-char port)
+                      (#\@
+                       (read-char port)
+                       'unquote-splicing)
+                      (_
+                       'unquote))
+                    (loop #f return)))
+             ((eqv? chr #\;)
+              (unread-char chr port)
+              (comment (read-line port 'concat)
+                       (not blank-line?)))
+             (else
+              (unread-char chr port)
+              (read port)))))))
+
+
+;;;
+;;; Comment-preserving pretty-printer.
+;;;
+
+(define* (pretty-print-with-comments port obj
+                                     #:key
+                                     (indent 0)
+                                     (max-width 78)
+                                     (long-list 5))
+  (let loop ((indent indent)
+             (column indent)
+             (delimited? #t)                  ;true if comes after a delimiter
+             (obj obj))
+    (match obj
+      ((? comment? comment)
+       (if (comment-margin? comment)
+           (begin
+             (display " " port)
+             (display (comment->string comment) port))
+           (begin
+             ;; When already at the beginning of a line, for example because
+             ;; COMMENT follows a margin comment, no need to emit a newline.
+             (unless (= column indent)
+               (newline port)
+               (display (make-string indent #\space) port))
+             (display (comment->string comment) port)))
+       (display (make-string indent #\space) port)
+       indent)
+      (('quote lst)
+       (unless delimited? (display " " port))
+       (display "'" port)
+       (loop indent (+ column (if delimited? 1 2)) #t lst))
+      (('quasiquote lst)
+       (unless delimited? (display " " port))
+       (display "`" port)
+       (loop indent (+ column (if delimited? 1 2)) #t lst))
+      (('unquote lst)
+       (unless delimited? (display " " port))
+       (display "," port)
+       (loop indent (+ column (if delimited? 1 2)) #t lst))
+      (('modify-inputs inputs clauses ...)
+       ;; Special-case 'modify-inputs' to have one clause per line and custom
+       ;; indentation.
+       (let ((head "(modify-inputs "))
+         (display head port)
+         (loop (+ indent 4)
+               (+ column (string-length head))
+               #t
+               inputs)
+         (let* ((indent (+ indent 2))
+                (column (fold (lambda (clause column)
+                                (newline port)
+                                (display (make-string indent #\space)
+                                         port)
+                                (loop indent indent #t clause))
+                              indent
+                              clauses)))
+           (display ")" port)
+           (+ column 1))))
+      ((head tail ...)
+       (unless delimited? (display " " port))
+       (display "(" port)
+       (let* ((new-column (loop indent (+ 1 column) #t head))
+              (indent (+ indent (- new-column column)))
+              (long?  (> (length tail) long-list)))
+         (define column
+           (fold2 (lambda (item column first?)
+                    (define newline?
+                      ;; Insert a newline if ITEM is itself a list, or if TAIL
+                      ;; is long, but only if ITEM is not the first item.
+                      (and (or (pair? item) long?)
+                           (not first?) (not (comment? item))))
+
+                    (when newline?
+                      (newline port)
+                      (display (make-string indent #\space) port))
+                    (let ((column (if newline? indent column)))
+                      (values (loop indent
+                                    column
+                                    (= column indent)
+                                    item)
+                              (comment? item))))
+                  (+ 1 new-column)
+                  #t                              ;first
+                  tail))
+         (display ")" port)
+         (+ column 1)))
+      (_
+       (let* ((str (object->string obj))
+              (len (string-length str)))
+         (if (> (+ column 1 len) max-width)
+             (begin
+               (newline port)
+               (display (make-string indent #\space) port)
+               (display str port)
+               (+ indent len))
+             (begin
+               (unless delimited? (display " " port))
+               (display str port)
+               (+ column (if delimited? 1 2) len))))))))
+
+(define (object->string* obj indent)
+  (call-with-output-string
+    (lambda (port)
+      (pretty-print-with-comments port obj
+                                  #:indent indent))))
+
+
+;;;
+;;; Simplifying input expressions.
+;;;
+
+(define (label-matches? label name)
+  "Return true if LABEL matches NAME, a package name."
+  (or (string=? label name)
+      (and (string-prefix? "python-" label)
+           (string-prefix? "python2-" name)
+           (string=? (string-drop label (string-length "python-"))
+                     (string-drop name (string-length "python2-"))))))
+
+(define* (simplify-inputs location package str inputs
+                          #:key (label-matches? label-matches?))
+  "Simplify the inputs field of PACKAGE (a string) at LOCATION; its current
+value is INPUTS the corresponding source code is STR.  Return a string to
+replace STR."
+  (define (simplify-input-expression return)
+    (match-lambda
+      ((label ('unquote symbol)) symbol)
+      ((label ('unquote symbol) output)
+       (list 'quasiquote
+             (list (list 'unquote symbol) output)))
+      (_
+       ;; Expression doesn't look like a simple input.
+       (warning location (G_ "~a: complex expression, \
+bailing out~%")
+                package)
+       (return str))))
+
+  (define (simplify-input exp input return)
+    (define package* package)
+
+    (match input
+      ((or ((? string? label) (? package? package))
+           ((? string? label) (? package? package)
+            (? string?)))
+       ;; If LABEL doesn't match PACKAGE's name, then simplifying would incur
+       ;; a rebuild, and perhaps it would break build-side code relying on
+       ;; this specific label.
+       (if (label-matches? label (package-name package))
+           ((simplify-input-expression return) exp)
+           (begin
+             (warning location (G_ "~a: input label \
+'~a' does not match package name, bailing out~%")
+                      package* label)
+             (return str))))
+      (_
+       (warning location (G_ "~a: non-trivial input, \
+bailing out~%")
+                package*)
+       (return str))))
+
+  (define (simplify-expressions exp inputs return)
+    ;; Simplify the expressions in EXP, which correspond to INPUTS, and return
+    ;; a list of expressions.  Call RETURN with a string when bailing out.
+    (let loop ((result '())
+               (exp exp)
+               (inputs inputs))
+      (match exp
+        (((? comment? head) . rest)
+         (loop (cons head result) rest inputs))
+        ((head . rest)
+         (match inputs
+           ((input . inputs)
+            ;; HEAD (an sexp) and INPUT (an input tuple) are correlated.
+            (loop (cons (simplify-input head input return) result)
+                  rest inputs))
+           (()
+            ;; If EXP and INPUTS have a different length, that
+            ;; means EXP is a non-trivial input list, for example
+            ;; with input-splicing, conditionals, etc.
+            (warning location (G_ "~a: input expression is too short~%")
+                     package)
+            (return str))))
+        (()
+         ;; It's possible for EXP to contain fewer elements than INPUTS, for
+         ;; example in the case of input splicing.  No bailout here.  (XXX)
+         (reverse result)))))
+
+  (define inputs-exp
+    (call-with-input-string str read-with-comments))
+
+  (match inputs-exp
+    (('list _ ...)                                ;already done
+     str)
+    (('modify-inputs _ ...)                       ;already done
+     str)
+    (('quasiquote                                 ;prepending inputs
+      (exp ...
+           ('unquote-splicing
+            ((and symbol (or 'package-inputs 'package-native-inputs
+                             'package-propagated-inputs))
+             arg))))
+     (let/ec return
+       (object->string*
+        (let ((things (simplify-expressions exp inputs return)))
+          `(modify-inputs (,symbol ,arg)
+                          (prepend ,@things)))
+        (location-column location))))
+    (('quasiquote                                 ;replacing an input
+      ((and exp ((? string? to-delete) ('unquote replacement)))
+       ('unquote-splicing
+        ('alist-delete (? string? to-delete)
+                       ((and symbol
+                             (or 'package-inputs 'package-native-inputs
+                                 'package-propagated-inputs))
+                        arg)))))
+     (let/ec return
+       (object->string*
+        (let ((things (simplify-expressions (list exp)
+                                            (list (car inputs))
+                                            return)))
+          `(modify-inputs (,symbol ,arg)
+                          (replace ,to-delete ,replacement)))
+        (location-column location))))
+
+    (('quasiquote                                 ;removing an input
+      (exp ...
+           ('unquote-splicing
+            ('alist-delete (? string? to-delete)
+                           ((and symbol
+                                 (or 'package-inputs 'package-native-inputs
+                                     'package-propagated-inputs))
+                            arg)))))
+     (let/ec return
+       (object->string*
+        (let ((things (simplify-expressions exp inputs return)))
+          `(modify-inputs (,symbol ,arg)
+                          (delete ,to-delete)
+                          (prepend ,@things)))
+        (location-column location))))
+    (('fold 'alist-delete                         ;removing several inputs
+            ((and symbol
+                  (or 'package-inputs 'package-native-inputs
+                      'package-propagated-inputs))
+             arg)
+            ('quote ((? string? to-delete) ...)))
+     (object->string*
+      `(modify-inputs (,symbol ,arg)
+                      (delete ,@to-delete))
+      (location-column location)))
+    (('quasiquote                    ;removing several inputs and adding others
+      (exp ...
+           ('unquote-splicing
+            ('fold 'alist-delete
+                   ((and symbol
+                         (or 'package-inputs 'package-native-inputs
+                             'package-propagated-inputs))
+                    arg)
+                   ('quote ((? string? to-delete) ...))))))
+     (let/ec return
+       (object->string*
+        (let ((things (simplify-expressions exp inputs return)))
+          `(modify-inputs (,symbol ,arg)
+                          (delete ,@to-delete)
+                          (prepend ,@things)))
+        (location-column location))))
+    (('quasiquote (exp ...))
+     (let/ec return
+       (object->string*
+        `(list ,@(simplify-expressions exp inputs return))
+        (location-column location))))
+    (_
+     (warning location (G_ "~a: unsupported input style, \
+bailing out~%")
+              package)
+     str)))
+
+(define (edit-expression/dry-run properties rewrite-string)
+  "Like 'edit-expression' but display what would be edited without actually
+doing it."
+  (edit-expression properties
+                   (lambda (str)
+                     (unless (string=? (rewrite-string str) str)
+                       (info (source-properties->location properties)
+                             (G_ "would be edited~%")))
+                     str)))
+
+(define* (simplify-package-inputs package
+                                  #:key (policy 'silent)
+                                  (edit-expression edit-expression))
+  "Edit the source code of PACKAGE to simplify its inputs field if needed.
+POLICY is a symbol that defines whether to simplify inputs; it can one of
+'silent (change only if the resulting derivation is the same), 'safe (change
+only if semantics are known to be unaffected), and 'always (fearlessly
+simplify inputs!).  Call EDIT-EXPRESSION to actually edit the source of
+PACKAGE."
+  (for-each (lambda (field-name field)
+              (match (field package)
+                (()
+                 #f)
+                (inputs
+                 (match (package-field-location package field-name)
+                   (#f
+                    ;; If the location of FIELD-NAME is not found, it may be
+                    ;; that PACKAGE inherits from another package.
+                    #f)
+                   (location
+                    (edit-expression
+                     (location->source-properties location)
+                     (lambda (str)
+                       (define matches?
+                         (match policy
+                           ('silent
+                            ;; Simplify inputs only when the label matches
+                            ;; perfectly, such that the resulting derivation
+                            ;; is unchanged.
+                            label-matches?)
+                           ('safe
+                            ;; If PACKAGE has no arguments, labels are known
+                            ;; to have no effect: this is a "safe" change, but
+                            ;; it may change the derivation.
+                            (if (null? (package-arguments package))
+                                (const #t)
+                                label-matches?))
+                           ('always
+                            ;; Assume it's gonna be alright.
+                            (const #t))))
+
+                       (simplify-inputs location
+                                        (package-name package)
+                                        str inputs
+                                        #:label-matches? matches?))))))))
+            '(inputs native-inputs propagated-inputs)
+            (list package-inputs package-native-inputs
+                  package-propagated-inputs)))
+
+(define (package-location<? p1 p2)
+  "Return true if P1's location is \"before\" P2's."
+  (let ((loc1 (package-location p1))
+        (loc2 (package-location p2)))
+    (and loc1 loc2
+         (if (string=? (location-file loc1) (location-file loc2))
+             (< (location-line loc1) (location-line loc2))
+             (string<? (location-file loc1) (location-file loc2))))))
+
+
+;;;
+;;; Options.
+;;;
+
+(define %options
+  ;; Specification of the command-line options.
+  (list (find (lambda (option)
+                (member "load-path" (option-names option)))
+              %standard-build-options)
+
+        (option '(#\n "dry-run") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'dry-run? #t result)))
+        (option '(#\e "expression") #t #f
+                (lambda (opt name arg result)
+                  (alist-cons 'expression arg result)))
+        (option '("input-simplification") #t #f
+                (lambda (opt name arg result)
+                  (let ((symbol (string->symbol arg)))
+                    (unless (memq symbol '(silent safe always))
+                      (leave (G_ "~a: invalid input simplification policy~%")
+                             arg))
+                    (alist-cons 'input-simplification-policy symbol
+                                result))))
+
+        (option '(#\h "help") #f #f
+                (lambda args
+                  (show-help)
+                  (exit 0)))
+        (option '(#\V "version") #f #f
+                (lambda args
+                  (show-version-and-exit "guix style")))))
+
+(define (show-help)
+  (display (G_ "Usage: guix style [OPTION]... [PACKAGE]...
+Update package definitions to the latest style.\n"))
+  (display (G_ "
+  -n, --dry-run          display files that would be edited but do nothing"))
+  (display (G_ "
+  -L, --load-path=DIR    prepend DIR to the package module search path"))
+  (display (G_ "
+  -e, --expression=EXPR  consider the package EXPR evaluates to"))
+  (display (G_ "
+      --input-simplification=POLICY
+                         follow POLICY for package input simplification, one
+                         of 'silent', 'safe', or 'always'"))
+  (newline)
+  (display (G_ "
+  -h, --help             display this help and exit"))
+  (display (G_ "
+  -V, --version          display version information and exit"))
+  (newline)
+  (show-bug-report-information))
+
+(define %default-options
+  ;; Alist of default option values.
+  '((input-simplification-policy . silent)))
+
+
+;;;
+;;; Entry point.
+;;;
+
+(define-command (guix-style . args)
+  (category packaging)
+  (synopsis "update the style of package definitions")
+
+  (define (parse-options)
+    ;; Return the alist of option values.
+    (parse-command-line args %options (list %default-options)
+                        #:build-options? #f))
+
+  (let* ((opts     (parse-options))
+         (packages (filter-map (match-lambda
+                                 (('argument . spec)
+                                  (specification->package spec))
+                                 (('expression . str)
+                                  (read/eval str))
+                                 (_ #f))
+                               opts))
+         (edit     (if (assoc-ref opts 'dry-run?)
+                       edit-expression/dry-run
+                       edit-expression))
+         (policy   (assoc-ref opts 'input-simplification-policy)))
+    (for-each (lambda (package)
+                (simplify-package-inputs package #:policy policy
+                                         #:edit-expression edit))
+              ;; Sort package by source code location so that we start editing
+              ;; files from the bottom and going upward.  That way, the
+              ;; 'location' field of <package> records is not invalidated as
+              ;; we modify files.
+              (sort (if (null? packages)
+                        (fold-packages cons '() #:select? (const #t))
+                        packages)
+                    (negate package-location<?)))))
diff --git a/guix/status.scm b/guix/status.scm
index f351a56d92..eefe18365f 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -381,6 +381,8 @@ the current build phase."
      (G_ "building CA certificate bundle..."))
     ('emacs-subdirs
      (G_ "listing Emacs sub-directories..."))
+    ('gdk-pixbuf-loaders-cache-file
+     (G_ "generating GdkPixbuf loaders cache..."))
     ('glib-schemas
      (G_ "generating GLib schema cache..."))
     ('gtk-icon-themes
diff --git a/guix/store.scm b/guix/store.scm
index 7388953d15..a93e9596d9 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -1353,7 +1353,11 @@ on the build output of a previous derivation."
   "Return a build handler that accumulates THINGS and returns an <unresolved>
 object, only for build requests on EXPECTED-STORE."
   (lambda (continue store things mode)
-    (if (and (eq? store expected-store)
+    ;; Note: Do not compare STORE and EXPECTED-STORE with 'eq?' because
+    ;; 'cache-object-mapping' and similar functional "setters" change the
+    ;; store's object identity.
+    (if (and (eq? (store-connection-socket store)
+                  (store-connection-socket expected-store))
              (= mode (build-mode normal)))
         (unresolved things continue)
         (continue #t))))
diff --git a/guix/store/roots.scm b/guix/store/roots.scm
index 58653507f8..222f69c5c0 100644
--- a/guix/store/roots.scm
+++ b/guix/store/roots.scm
@@ -50,7 +50,7 @@
 
 (define (gc-roots)
   "Return the list of garbage collector roots (\"GC roots\").  This includes
-\"regular\" roots fount in %GC-ROOTS-DIRECTORY as well as indirect roots that
+\"regular\" roots found in %GC-ROOTS-DIRECTORY as well as indirect roots that
 are user-controlled symlinks stored anywhere on the file system."
   (define (regular? file)
     (match file
diff --git a/guix/svn-download.scm b/guix/svn-download.scm
index e5fe8f1840..55ce0d7351 100644
--- a/guix/svn-download.scm
+++ b/guix/svn-download.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
 ;;; Copyright © 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -137,7 +137,7 @@ HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f."
                               #$(svn-multi-reference-recursive? ref)
                               #:user-name #$(svn-multi-reference-user-name ref)
                               #:password #$(svn-multi-reference-password ref)))
-                 '#$(svn-multi-reference-locations ref)))))
+                 '#$(sexp->gexp (svn-multi-reference-locations ref))))))
 
   (mlet %store-monad ((guile (package->derivation guile system)))
     (gexp->derivation (or name "svn-checkout") build
diff --git a/guix/tests.scm b/guix/tests.scm
index e1c194340c..4cd1ad6cf9 100644
--- a/guix/tests.scm
+++ b/guix/tests.scm
@@ -20,12 +20,13 @@
   #:use-module ((guix config) #:select (%storedir %localstatedir))
   #:use-module (guix store)
   #:use-module (guix derivations)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix base32)
   #:use-module (guix serialization)
   #:use-module (guix monads)
   #:use-module ((guix utils) #:select (substitute-keyword-arguments))
-  #:use-module ((guix build utils) #:select (mkdir-p))
+  #:use-module ((guix build utils) #:select (mkdir-p compressor))
   #:use-module ((gcrypt hash) #:hide (sha256))
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages base)
@@ -60,7 +61,9 @@
             dummy-package
             dummy-origin
 
-            gnu-make-for-tests))
+            gnu-make-for-tests
+
+            test-file))
 
 ;;; Commentary:
 ;;;
@@ -135,17 +138,21 @@ no external store to talk to."
           (open-connection))
         (const #f)))
 
-    (dynamic-wind
-      (const #t)
-      (lambda ()
-        ;; Since we're using a different store we must clear the
-        ;; package-derivation cache.
-        (hash-clear! (@@ (guix packages) %derivation-cache))
-
-        (proc store))
-      (lambda ()
-        (when store
-          (close-connection store))))))
+    (let ((store-variable (getenv "NIX_STORE_DIR")))
+      (dynamic-wind
+        (lambda ()
+          ;; This environment variable is set by 'pre-inst-env' but it
+          ;; influences '%store-directory' in (guix build utils), which is
+          ;; itself used in (guix packages).  Thus, unset it before going any
+          ;; further.
+          (unsetenv "NIX_STORE_DIR"))
+        (lambda ()
+          (proc store))
+        (lambda ()
+          (when store-variable
+            (setenv "NIX_STORE_DIR" store-variable))
+          (when store
+            (close-connection store)))))))
 
 (define-syntax-rule (with-external-store store exp ...)
   "Evaluate EXP with STORE bound to the external store rather than the
@@ -439,6 +446,42 @@ default values, and with EXTRA-FIELDS set as specified."
      (native-inputs '())                          ;no need for 'pkg-config'
      (inputs %bootstrap-inputs-for-tests))))
 
+
+;;;
+;;; Test utility procedures.
+
+(define (test-file store name content)
+  "Create a simple file in STORE with CONTENT (a string), compressed according
+to its file name extension.  Return both its file name and its hash."
+  (let* ((ext (string-index-right name #\.))
+         (name-sans-ext (if ext
+                            (string-take name (string-index-right name #\.))
+                            name))
+         (comp (compressor name))
+         (command #~(if #+comp
+                        (string-append #+%bootstrap-coreutils&co
+                                       "/bin/" #+comp)
+                        #f))
+         (f (with-imported-modules '((guix build utils))
+              (computed-file name
+                             #~(begin
+                                 (use-modules (guix build utils)
+                                              (rnrs io simple))
+                                 (with-output-to-file #+name-sans-ext
+                                   (lambda _
+                                     (format #t #+content)))
+                                 (when #+command
+                                   (invoke #+command #+name-sans-ext))
+                                 (copy-file #+name #$output)))))
+         (file-drv (run-with-store store (lower-object f)))
+         (file (derivation->output-path file-drv))
+         (file-drv-outputs (derivation-outputs file-drv))
+         (_ (build-derivations store (list file-drv)))
+         (file-hash (derivation-output-hash
+                     (assoc-ref file-drv-outputs "out"))))
+    (values file file-hash)))
+
+;;;
 ;; Local Variables:
 ;; eval: (put 'call-with-derivation-narinfo 'scheme-indent-function 1)
 ;; eval: (put 'call-with-derivation-substitute 'scheme-indent-function 2)
diff --git a/guix/utils.scm b/guix/utils.scm
index 7a00640d85..9596ff8582 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -7,9 +7,11 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2018, 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -35,11 +37,14 @@
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-39)
+  #:use-module (srfi srfi-71)
   #:use-module (ice-9 ftw)
   #:use-module (rnrs io ports)                    ;need 'port-position' etc.
   #:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!))
   #:use-module (guix memoization)
-  #:use-module ((guix build utils) #:select (dump-port mkdir-p delete-file-recursively))
+  #:use-module ((guix build utils)
+                #:select (dump-port mkdir-p delete-file-recursively
+                          call-with-temporary-output-file %xz-parallel-args))
   #:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync))
   #:use-module ((guix combinators) #:select (fold2))
   #:use-module (guix diagnostics)           ;<location>, &error-location, etc.
@@ -48,6 +53,7 @@
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
   #:use-module ((ice-9 iconv) #:prefix iconv:)
+  #:use-module (ice-9 vlist)
   #:autoload   (zlib) (make-zlib-input-port make-zlib-output-port)
   #:use-module (system foreign)
   #:re-export (<location>                         ;for backwards compatibility
@@ -65,7 +71,9 @@
 
                &fix-hint
                fix-hint?
-               condition-fix-hint)
+               condition-fix-hint
+
+               call-with-temporary-output-file)
   #:export (strip-keyword-arguments
             default-keyword-arguments
             substitute-keyword-arguments
@@ -78,13 +86,18 @@
             %current-system
             %current-target-system
             package-name->name+version
+            target-linux?
+            target-hurd?
             target-mingw?
             target-x86-32?
             target-x86-64?
             target-arm32?
             target-aarch64?
             target-arm?
+            target-ppc32?
+            target-ppc64le?
             target-powerpc?
+            target-riscv64?
             target-64bit?
             cc-for-target
             cxx-for-target
@@ -106,7 +119,6 @@
             tarball-sans-extension
             compressed-file?
             switch-symlinks
-            call-with-temporary-output-file
             call-with-temporary-directory
             with-atomic-file-output
 
@@ -117,6 +129,7 @@
             cache-directory
 
             readlink*
+            go-to-location
             edit-expression
 
             filtered-port
@@ -248,6 +261,18 @@ a symbol such as 'xz."
                            '()))
     (_             (error "unsupported compression scheme" compression))))
 
+(define (compressed-port compression input)
+  "Return an input port where INPUT is compressed according to COMPRESSION,
+a symbol such as 'xz."
+  (match compression
+    ((or #f 'none) (values input '()))
+    ('bzip2        (filtered-port `(,%bzip2 "-c") input))
+    ('xz           (filtered-port `(,%xz "-c" ,@(%xz-parallel-args)) input))
+    ('gzip         (filtered-port `(,%gzip "-c") input))
+    ('lzip         (values (lzip-port 'make-lzip-input-port/compressed input)
+                           '()))
+    (_             (error "unsupported compression scheme" compression))))
+
 (define (call-with-decompressed-port compression port proc)
   "Call PROC with a wrapper around PORT, a file port, that decompresses data
 read from PORT according to COMPRESSION, a symbol such as 'xz."
@@ -327,43 +352,129 @@ a list of command-line arguments passed to the compression program."
         (unless (every (compose zero? cdr waitpid) pids)
           (error "compressed-output-port failure" pids))))))
 
+(define %source-location-map
+  ;; Maps inode/device tuples to "source location maps" used by
+  ;; 'go-to-location'.
+  (make-hash-table))
+
+(define (source-location-key/stamp stat)
+  "Return two values: the key for STAT in %SOURCE-LOCATION-MAP, and a stamp
+used to invalidate corresponding entries."
+  (let ((key   (list (stat:ino stat) (stat:dev stat)))
+        (stamp (list (stat:mtime stat) (stat:mtimensec stat)
+                     (stat:size stat))))
+    (values key stamp)))
+
+(define* (go-to-location port line column)
+  "Jump to LINE and COLUMN (both one-indexed) in PORT.  Maintain a source
+location map such that this can boil down to seek(2) and a few read(2) calls,
+which can drastically speed up repetitive operations on large files."
+  (let* ((stat       (stat port))
+         (key stamp  (source-location-key/stamp stat))
+
+         ;; Look for an up-to-date source map for KEY.  The map is a vlist
+         ;; where each entry gives the byte offset of the beginning of a line:
+         ;; element 0 is the offset of the first line, element 1 the offset of
+         ;; the second line, etc.  The map is filled lazily.
+         (source-map (match (hash-ref %source-location-map key)
+                       (#f
+                        (vlist-cons 0 vlist-null))
+                       ((cache-stamp ... map)
+                        (if (equal? cache-stamp stamp) ;invalidate?
+                            map
+                            (vlist-cons 0 vlist-null)))))
+         (last       (vlist-length source-map)))
+    ;; Jump to LINE, ideally via SOURCE-MAP.
+    (if (<= line last)
+        (seek port (vlist-ref source-map (- line 1)) SEEK_SET)
+        (let ((target line)
+              (offset (vlist-ref source-map (- last 1))))
+          (seek port offset SEEK_SET)
+          (let loop ((source-map (vlist-reverse source-map))
+                     (line last))
+            (if (< line target)
+                (match (read-char port)
+                  (#\newline
+                   (loop (vlist-cons (ftell port) source-map)
+                         (+ 1 line)))
+                  ((? eof-object?)
+                   (error "unexpected end of file" port line))
+                  (chr (loop source-map line)))
+                (hash-set! %source-location-map key
+                           `(,@stamp
+                             ,(vlist-reverse source-map)))))))
+
+    ;; Read up to COLUMN.
+    (let ((target column))
+      (let loop ((column 1))
+        (when (< column target)
+          (match (read-char port)
+            (#\newline (error "unexpected end of line" port))
+            (#\tab (loop (+ 8 column)))
+            (chr (loop (+ 1 column)))))))
+
+    ;; Update PORT's position info.
+    (set-port-line! port (- line 1))
+    (set-port-column! port (- column 1))))
+
+(define (move-source-location-map! source target line)
+  "Move the source location map from SOURCE up to LINE to TARGET.  SOURCE and
+TARGET must be stat buffers as returned by 'stat'."
+  (let* ((source-key (source-location-key/stamp source))
+         (target-key target-stamp (source-location-key/stamp target)))
+    (match (hash-ref %source-location-map source-key)
+      (#f #t)
+      ((_ ... source-map)
+       ;; Strip the source map and update the associated stamp.
+       (let ((source-map (vlist-take source-map (max line 1))))
+         (hash-remove! %source-location-map source-key)
+         (hash-set! %source-location-map target-key
+                    `(,@target-stamp ,source-map)))))))
+
 (define* (edit-expression source-properties proc #:key (encoding "UTF-8"))
   "Edit the expression specified by SOURCE-PROPERTIES using PROC, which should
 be a procedure that takes the original expression in string and returns a new
 one.  ENCODING will be used to interpret all port I/O, it default to UTF-8.
 This procedure returns #t on success."
+  (define file   (assq-ref source-properties 'filename))
+  (define line   (assq-ref source-properties 'line))
+  (define column (assq-ref source-properties 'column))
+
   (with-fluids ((%default-port-encoding encoding))
-    (let* ((file   (assq-ref source-properties 'filename))
-           (line   (assq-ref source-properties 'line))
-           (column (assq-ref source-properties 'column))
-           (in     (open-input-file file))
-           ;; The start byte position of the expression.
-           (start  (begin (while (not (and (= line (port-line in))
-                                           (= column (port-column in))))
-                            (when (eof-object? (read-char in))
-                              (error (format #f "~a: end of file~%" in))))
-                          (ftell in)))
-           ;; The end byte position of the expression.
-           (end    (begin (read in) (ftell in))))
-      (seek in 0 SEEK_SET) ; read from the beginning of the file.
-      (let* ((pre-bv  (get-bytevector-n in start))
-             ;; The expression in string form.
-             (str     (iconv:bytevector->string
-                       (get-bytevector-n in (- end start))
-                       (port-encoding in)))
-             (post-bv (get-bytevector-all in))
-             (str*    (proc str)))
-        ;; Verify the edited expression is still a scheme expression.
-        (call-with-input-string str* read)
-        ;; Update the file with edited expression.
-        (with-atomic-file-output file
-          (lambda (out)
-            (put-bytevector out pre-bv)
-            (display str* out)
-            ;; post-bv maybe the end-of-file object.
-            (when (not (eof-object? post-bv))
-              (put-bytevector out post-bv))
-            #t))))))
+    (call-with-input-file file
+      (lambda (in)
+        (let* ( ;; The start byte position of the expression.
+               (start  (begin (go-to-location in (+ 1 line) (+ 1 column))
+                              (ftell in)))
+               ;; The end byte position of the expression.
+               (end    (begin (read in) (ftell in))))
+          (seek in 0 SEEK_SET)          ; read from the beginning of the file.
+          (let* ((pre-bv  (get-bytevector-n in start))
+                 ;; The expression in string form.
+                 (str     (iconv:bytevector->string
+                           (get-bytevector-n in (- end start))
+                           (port-encoding in)))
+                 (post-bv (get-bytevector-all in))
+                 (str*    (proc str)))
+            ;; Modify FILE only if there are changes.
+            (unless (string=? str* str)
+              ;; Verify the edited expression is still a scheme expression.
+              (call-with-input-string str* read)
+              ;; Update the file with edited expression.
+              (with-atomic-file-output file
+                (lambda (out)
+                  (put-bytevector out pre-bv)
+                  (display str* out)
+                  ;; post-bv maybe the end-of-file object.
+                  (when (not (eof-object? post-bv))
+                    (put-bytevector out post-bv))
+                  #t))
+
+              ;; Due to 'with-atomic-file-output', IN and FILE no longer share
+              ;; the same inode, but we can reassign the source map up to LINE
+              ;; to the new file.
+              (move-source-location-map! (stat in) (stat file)
+                                         (+ 1 line)))))))))
 
 
 ;;;
@@ -533,8 +644,23 @@ a character other than '@'."
     (idx (values (substring spec 0 idx)
                  (substring spec (1+ idx))))))
 
+(define* (target-linux? #:optional (target (or (%current-target-system)
+                                               (%current-system))))
+  "Does the operating system of TARGET use the Linux kernel?"
+  (->bool (string-contains target "linux")))
+
+(define* (target-hurd? #:optional (target (or (%current-target-system)
+                                              (%current-system))))
+  "Does TARGET represent the GNU(/Hurd) system?"
+  (and (string-suffix? "-gnu" target)
+       (not (string-contains target "linux"))))
+
 (define* (target-mingw? #:optional (target (%current-target-system)))
+  "Is the operating system of TARGET Windows?"
   (and target
+       ;; The "-32" doesn't mean TARGET is 32-bit, as "x86_64-w64-mingw32"
+       ;; is a valid triplet (see the (gnu ci) module) and 'w64' and 'x86_64'
+       ;; are 64-bit.
        (string-suffix? "-mingw32" target)))
 
 (define* (target-x86-32? #:optional (target (or (%current-target-system)
@@ -567,10 +693,23 @@ architecture (x86_64)?"
                                              (%current-system))))
   (or (target-arm32? target) (target-aarch64? target)))
 
+(define* (target-ppc32? #:optional (target (or (%current-target-system)
+                                               (%current-system))))
+  (string-prefix? "powerpc-" target))
+
+(define* (target-ppc64le? #:optional (target (or (%current-target-system)
+                                               (%current-system))))
+  (string-prefix? "powerpc64le-" target))
+
 (define* (target-powerpc? #:optional (target (or (%current-target-system)
                                                  (%current-system))))
   (string-prefix? "powerpc" target))
 
+(define* (target-riscv64? #:optional (target (or (%current-target-system)
+                                                 (%current-system))))
+  "Is the architecture of TARGET a 'riscv64' machine?"
+  (string-prefix? "riscv64" target))
+
 (define* (target-64bit? #:optional (system (or (%current-target-system)
                                                (%current-system))))
   (any (cut string-prefix? <> system) '("x86_64" "aarch64" "mips64" "powerpc64")))
@@ -758,22 +897,6 @@ REPLACEMENT."
                        (substring str start index)
                        pieces))))))))
 
-(define (call-with-temporary-output-file proc)
-  "Call PROC with a name of a temporary file and open output port to that
-file; close the file and delete it when leaving the dynamic extent of this
-call."
-  (let* ((directory (or (getenv "TMPDIR") "/tmp"))
-         (template  (string-append directory "/guix-file.XXXXXX"))
-         (out       (mkstemp! template)))
-    (dynamic-wind
-      (lambda ()
-        #t)
-      (lambda ()
-        (proc template out))
-      (lambda ()
-        (false-if-exception (close out))
-        (false-if-exception (delete-file template))))))
-
 (define (call-with-temporary-directory proc)
   "Call PROC with a name of a temporary directory; close the directory and
 delete it when leaving the dynamic extent of this call."
diff --git a/m4/guix.m4 b/m4/guix.m4
index 05d409a674..e778a56004 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -1,7 +1,7 @@
 dnl GNU Guix --- Functional package management for GNU
 dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 dnl Copyright © 2014 Mark H Weaver <mhw@netris.org>
-dnl Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+dnl Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 dnl Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 dnl
 dnl This file is part of GNU Guix.
@@ -89,7 +89,7 @@ courageous and port the GNU System distribution to it (see
   # Currently only Linux-based systems are supported, and only on some
   # platforms.
   case "$guix_system" in
-    x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux)
+    x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|powerpc-linux)
       ;;
     *)
       if test "x$guix_courageous" = "xyes"; then
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index ee0adbcf3c..a8ce6c3e8f 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -141,5 +141,6 @@ guix/scripts/perform-download.scm
 guix/scripts/refresh.scm
 guix/scripts/repl.scm
 guix/scripts/shell.scm
+guix/scripts/style.scm
 guix/scripts/system/reconfigure.scm
 nix/nix-daemon/guix-daemon.cc
diff --git a/tests/build-utils.scm b/tests/build-utils.scm
index 654b480ed9..6b131c0af8 100644
--- a/tests/build-utils.scm
+++ b/tests/build-utils.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2015, 2016, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,7 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 
-(define-module (test-build-utils)
+(define-module (test build-utils)
   #:use-module (guix tests)
   #:use-module (guix build utils)
   #:use-module ((guix utils)
@@ -241,4 +243,49 @@ print('hello world')"))
                                            "/some/other/path")))
          #f)))))
 
+(test-equal "substitute*, text contains a NUL byte, UTF-8"
+  "c\0d"
+  (with-fluids ((%default-port-encoding "UTF-8")
+                (%default-port-conversion-strategy 'error))
+    ;; The GNU libc is locale sensitive.  Depending on the value of LANG, the
+    ;; test could fail with "string contains #\\nul character: ~S" or "cannot
+    ;; convert wide string to output locale".
+    (setlocale LC_ALL "en_US.UTF-8")
+    (call-with-temporary-output-file
+     (lambda (file port)
+       (format port "a\0b")
+       (flush-output-port port)
+
+       (substitute* file
+         (("a") "c")
+         (("b") "d"))
+
+       (with-input-from-file file
+         (lambda _
+           (get-string-all (current-input-port))))))))
+
+(test-equal "search-input-file: exception if not found"
+  `((path)
+    (file . "does-not-exist"))
+  (guard (e ((search-error? e)
+             `((path . ,(search-error-path e))
+               (file . ,(search-error-file e)))))
+    (search-input-file '() "does-not-exist")))
+
+(test-equal "search-input-file: can find if existent"
+  (which "guile")
+  (search-input-file
+    `(("guile/bin" . ,(dirname (which "guile"))))
+    "guile"))
+
+(test-equal "search-input-file: can search in multiple directories"
+  (which "guile")
+  (call-with-temporary-directory
+    (lambda (directory)
+      (search-input-file
+        `(("irrelevant" . ,directory)
+          ("guile/bin" . ,(dirname (which "guile"))))
+        "guile"))))
+
+
 (test-end)
diff --git a/tests/builders.scm b/tests/builders.scm
index fdcf38ded3..2853227465 100644
--- a/tests/builders.scm
+++ b/tests/builders.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,22 +18,28 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 
-(define-module (test-builders)
+(define-module (tests builders)
   #:use-module (guix download)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build gnu-build-system)
+  #:use-module (guix build utils)
+  #:use-module (guix build-system python)
+  #:use-module (guix grafts)
   #:use-module (guix store)
+  #:use-module (guix monads)
   #:use-module (guix utils)
   #:use-module (guix base32)
   #:use-module (guix derivations)
   #:use-module (gcrypt hash)
   #:use-module (guix tests)
-  #:use-module ((guix packages)
-                #:select (package?
-                          package-derivation package-native-search-paths))
+  #:use-module (guix packages)
   #:use-module (gnu packages bootstrap)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 textual-ports)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-64))
 
 ;; Test the higher-level builders.
@@ -43,6 +50,9 @@
 (define url-fetch*
   (store-lower url-fetch))
 
+;; Globally disable grafts because they can trigger early builds.
+(%graft? #f)
+
 
 (test-begin "builders")
 
@@ -78,4 +88,116 @@
 (test-assert "gnu-build-system"
   (build-system? gnu-build-system))
 
+(define unpack (assoc-ref %standard-phases 'unpack))
+
+(define compressors '(("gzip"  . "gz")
+                      ("xz"    . "xz")
+                      ("bzip2" . "bz2")
+                      (#f      . #f)))
+
+(for-each
+ (match-lambda
+   ((comp . ext)
+
+    (unless (network-reachable?) (test-skip 1)) ;for bootstrap binaries
+    (test-equal (string-append "gnu-build-system unpack phase, "
+                               "single file (compression: "
+                               (if comp comp "None") ")")
+      "expected text"
+      (let*-values
+          (((name) "test")
+           ((compressed-name) (if ext
+                                  (string-append name "." ext)
+                                  name))
+           ((file hash) (test-file %store compressed-name "expected text")))
+        (call-with-temporary-directory
+         (lambda (dir)
+           (with-directory-excursion dir
+             (unpack #:source file)
+             (call-with-input-file name get-string-all))))))))
+ compressors)
+
+
+;;;
+;;; Test the sanity-check phase of the Python build system.
+;;;
+
+(define* (make-python-dummy name #:key (setup-py-extra "")
+                            (init-py "") (use-setuptools? #t))
+  (dummy-package (string-append "python-dummy-" name)
+    (version "0.1")
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f
+       #:use-setuptools? ,use-setuptools?
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'unpack
+           (lambda _
+             (mkdir-p "dummy")
+             (with-output-to-file "dummy/__init__.py"
+               (lambda _
+                 (display ,init-py)))
+             (with-output-to-file "setup.py"
+               (lambda _
+                 (format #t "\
+~a
+setup(
+     name='dummy-~a',
+     version='0.1',
+     packages=['dummy'],
+     ~a
+     )"
+                         (if ,use-setuptools?
+                             "from setuptools import setup"
+                             "from distutils.core import setup")
+                         ,name ,setup-py-extra))))))))))
+
+(define python-dummy-ok
+  (make-python-dummy "ok"))
+
+;; distutil won't install any metadata, so make sure our script does not fail
+;; on a otherwise fine package.
+(define python-dummy-no-setuptools
+  (make-python-dummy
+   "no-setuptools" #:use-setuptools? #f))
+
+(define python-dummy-fail-requirements
+  (make-python-dummy "fail-requirements"
+                     #:setup-py-extra "install_requires=['nonexistent'],"))
+
+(define python-dummy-fail-import
+  (make-python-dummy "fail-import" #:init-py "import nonexistent"))
+
+(define python-dummy-fail-console-script
+  (make-python-dummy "fail-console-script"
+                     #:setup-py-extra (string-append "entry_points={'console_scripts': "
+                                                     "['broken = dummy:nonexistent']},")))
+
+(define (check-build-success store p)
+  (unless store (test-skip 1))
+  (test-assert (string-append "python-build-system: " (package-name p))
+    (let* ((drv (package-derivation store p)))
+      (build-derivations store (list drv)))))
+
+(define (check-build-failure store p)
+  (unless store (test-skip 1))
+  (test-assert (string-append "python-build-system: " (package-name p))
+    (let ((drv (package-derivation store p)))
+      (guard (c ((store-protocol-error? c)
+                 (pk 'failure c #t)))             ;good!
+        (build-derivations store (list drv))
+        #f))))                                    ;bad: it should have failed
+
+(with-external-store store
+  (for-each (lambda (p) (check-build-success store p))
+            (list
+             python-dummy-ok
+             python-dummy-no-setuptools))
+  (for-each (lambda (p) (check-build-failure store p))
+            (list
+             python-dummy-fail-requirements
+             python-dummy-fail-import
+             python-dummy-fail-console-script)))
+
 (test-end "builders")
diff --git a/tests/cran.scm b/tests/cran.scm
index 70d2277198..e59b7daef7 100644
--- a/tests/cran.scm
+++ b/tests/cran.scm
@@ -117,15 +117,9 @@ Date/Publication: 2015-07-14 14:15:16
                       (? string? hash)))))
          ('properties ('quasiquote (('upstream-name . "My-Example"))))
          ('build-system 'r-build-system)
-         ('inputs
-          ('quasiquote
-           (("cairo" ('unquote 'cairo)))))
+         ('inputs ('list 'cairo))
          ('propagated-inputs
-          ('quasiquote
-           (("r-bh" ('unquote 'r-bh))
-            ("r-proto" ('unquote 'r-proto))
-            ("r-rcpp" ('unquote 'r-rcpp))
-            ("r-scales" ('unquote 'r-scales)))))
+          ('list 'r-bh 'r-proto 'r-rcpp 'r-scales))
          ('home-page "http://gnu.org/s/my-example")
          ('synopsis "Example package")
          ('description
diff --git a/tests/egg.scm b/tests/egg.scm
index 99dd0a3fc7..a7d3378dd7 100644
--- a/tests/egg.scm
+++ b/tests/egg.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -86,16 +87,9 @@
     ('build-system 'chicken-build-system)
     ('arguments ('quasiquote ('#:egg-name "foo")))
     ('native-inputs
-     ('quasiquote
-      (("chicken-test" ('unquote chicken-test))
-       ("chicken-srfi-1" ('unquote chicken-srfi-1))
-       ("chicken-begin-syntax" ('unquote chicken-begin-syntax)))))
-    ('inputs
-     ('quasiquote
-      (("libgit2" ('unquote libgit2)))))
-    ('propagated-inputs
-     ('quasiquote
-      (("chicken-datatype" ('unquote chicken-datatype)))))
+     ('list 'chicken-test 'chicken-srfi-1 'chicken-begin-syntax))
+    ('inputs ('list 'libgit2))
+    ('propagated-inputs ('list 'chicken-datatype))
     ('home-page "https://wiki.call-cc.org/egg/foo")
     ('synopsis "Example egg")
     ('description #f)
@@ -108,16 +102,9 @@
     ('source (? file-like? source))
     ('build-system 'chicken-build-system)
     ('arguments ('quasiquote ('#:egg-name "bar")))
-    ('native-inputs
-     ('quasiquote
-      (("chicken-test" ('unquote chicken-test))
-       ("chicken-begin-syntax" ('unquote chicken-begin-syntax)))))
-    ('inputs
-     ('quasiquote
-      (("libgit2" ('unquote libgit2)))))
-    ('propagated-inputs
-     ('quasiquote
-      (("chicken-datatype" ('unquote chicken-datatype)))))
+    ('native-inputs ('list 'chicken-test 'chicken-begin-syntax))
+    ('inputs ('list 'libgit2))
+    ('propagated-inputs ('list 'chicken-datatype))
     ('home-page "https://wiki.call-cc.org/egg/bar")
     ('synopsis "Example egg")
     ('description #f)
diff --git a/tests/gem.scm b/tests/gem.scm
index 751bba656f..c8fe15398e 100644
--- a/tests/gem.scm
+++ b/tests/gem.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,10 +94,7 @@
                      ('base32
                       "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
          ('build-system 'ruby-build-system)
-         ('propagated-inputs
-          ('quasiquote
-           (("bundler" ('unquote 'bundler))
-            ("ruby-bar" ('unquote 'ruby-bar)))))
+         ('propagated-inputs ('list 'bundler 'ruby-bar))
          ('synopsis "A cool gem")
          ('description "This package provides a cool gem")
          ('home-page "https://example.com")
@@ -132,9 +130,7 @@
                   ('base32
                    "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
               ('build-system 'ruby-build-system)
-              ('propagated-inputs
-               ('quasiquote
-                (('"bundler" ('unquote 'bundler)))))
+              ('propagated-inputs ('list 'bundler))
               ('synopsis "Another cool gem")
               ('description "Another cool gem")
               ('home-page "https://example.com")
@@ -165,10 +161,7 @@
                   ('base32
                    "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
               ('build-system 'ruby-build-system)
-              ('propagated-inputs
-               ('quasiquote
-                (("bundler" ('unquote 'bundler))
-                 ("ruby-bar" ('unquote 'ruby-bar)))))
+              ('propagated-inputs ('list 'bundler 'ruby-bar))
               ('synopsis "A cool gem")
               ('description "This package provides a cool gem")
               ('home-page "https://example.com")
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 0758a49f5f..ad8e1d57b8 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -127,6 +127,13 @@
          (null? (gexp-inputs exp))
          (gexp->sexp* exp))))
 
+(test-equal "sexp->gexp"
+  '(a b (c d) e)
+  (let ((exp (sexp->gexp '(a b (c d) e))))
+    (and (gexp? exp)
+         (null? (gexp-inputs exp))
+         (gexp->sexp* exp))))
+
 (test-equal "unquote"
   '(display `(foo ,(+ 2 3)))
   (let ((exp (gexp (display `(foo ,(+ 2 3))))))
@@ -434,6 +441,17 @@
                   '(system-binding)))
             (x x)))))
 
+(test-assert "let-system in file-append"
+  (let ((mixed (file-append (let-system (system target)
+                              (if (not target) grep sed))
+                            "/bin"))
+        (grep  (file-append grep "/bin"))
+        (sed   (file-append sed "/bin")))
+    (and (equal? (gexp->sexp* #~(list #$mixed))
+                 (gexp->sexp* #~(list #$grep)))
+         (equal? (gexp->sexp* #~(list #$mixed) "powerpc64le-linux-gnu")
+                 (gexp->sexp* #~(list #$sed) "powerpc64le-linux-gnu")))))
+
 (test-assert "ungexp + ungexp-native"
   (let* ((exp    (gexp (list (ungexp-native %bootstrap-guile)
                              (ungexp coreutils)
@@ -1463,6 +1481,42 @@ importing.* \\(guix config\\) from the host"
                      (string=? (readlink (string-append comp "/text"))
                                text)))))))
 
+(test-assert "lower-object, computed-file + grafts"
+  ;; The reference graph should refer to grafted packages when grafts are
+  ;; enabled.  See <https://issues.guix.gnu.org/50676>.
+  (let* ((base    (package
+                    (inherit (dummy-package "trivial"))
+                    (build-system trivial-build-system)
+                    (arguments
+                     `(#:guile ,%bootstrap-guile
+                       #:builder (mkdir %output)))))
+         (pkg     (package
+                    (inherit base)
+                    (version "1.1")
+                    (replacement (package
+                                   (inherit base)
+                                   (version "9.9")))))
+         (exp      #~(begin
+                       (use-modules (ice-9 rdelim))
+                       (let ((item (call-with-input-file "graph" read-line)))
+                         (call-with-output-file #$output
+                           (lambda (port)
+                             (display item port))))))
+         (computed (computed-file "computed" exp
+                                  #:options
+                                  `(#:references-graphs (("graph" ,pkg)))))
+         (drv0     (package-derivation %store pkg #:graft? #t))
+         (drv1     (parameterize ((%graft? #t))
+                     (run-with-store %store
+                       (lower-object computed)))))
+    (build-derivations %store (list drv1))
+
+    ;; The graph obtained in COMPUTED should refer to the grafted version of
+    ;; PKG, not to PKG itself.
+    (string=? (call-with-input-file (derivation->output-path drv1)
+                get-string-all)
+              (derivation->output-path drv0))))
+
 (test-equal "lower-object, computed-file, #:system"
   '("mips64el-linux")
   (run-with-store %store
diff --git a/tests/gremlin.scm b/tests/gremlin.scm
index b0bb7a8e49..9af899c89a 100644
--- a/tests/gremlin.scm
+++ b/tests/gremlin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,9 +23,12 @@
   #:use-module (guix build gremlin)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-64)
   #:use-module (rnrs io ports)
   #:use-module (ice-9 popen)
+  #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 regex)
   #:use-module (ice-9 match))
 
 (define %guile-executable
@@ -57,6 +60,44 @@
                        (string-take lib (string-contains lib ".so")))
                      (elf-dynamic-info-needed dyninfo))))))
 
+(unless (and %guile-executable (not (getenv "LD_LIBRARY_PATH"))
+             (file-needed %guile-executable) ;statically linked?
+             ;; When Guix has been built on a foreign distro, using a
+             ;; toolchain and libraries from that foreign distro, it is not
+             ;; unusual for the runpath to be empty.
+             (pair? (file-runpath %guile-executable)))
+  (test-skip 1))
+(test-assert "file-needed/recursive"
+  (let* ((needed (file-needed/recursive %guile-executable))
+         (pipe   (dynamic-wind
+                   (lambda ()
+                     ;; Tell ld.so to list loaded objects, like 'ldd' does.
+                     (setenv "LD_TRACE_LOADED_OBJECTS" "yup"))
+                   (lambda ()
+                     (open-pipe* OPEN_READ %guile-executable))
+                   (lambda ()
+                     (unsetenv "LD_TRACE_LOADED_OBJECTS")))))
+    (define ldd-rx
+      (make-regexp "^[[:blank:]]+([[:graph:]]+ => )?([[:graph:]]+) .*$"))
+
+    (define (read-ldd-output port)
+      ;; Read from PORT output in GNU ldd format.
+      (let loop ((result '()))
+        (match (read-line port)
+          ((? eof-object?)
+           (reverse result))
+          ((= (cut regexp-exec ldd-rx <>) m)
+           (if m
+               (loop (cons (match:substring m 2) result))
+               (loop result))))))
+
+    (define ground-truth
+      (remove (cut string-prefix? "linux-vdso.so" <>)
+              (read-ldd-output pipe)))
+
+    (and (zero? (close-pipe pipe))
+         (lset= string=? (pk 'truth ground-truth) (pk 'needed needed)))))
+
 (test-equal "expand-origin"
   '("OOO/../lib"
     "OOO"
@@ -96,4 +137,49 @@
                 (close-pipe pipe)
                 str)))))))
 
+(unless c-compiler
+  (test-skip 1))
+(test-equal "set-file-runpath + file-runpath"
+  "hello\n"
+  (call-with-temporary-directory
+   (lambda (directory)
+     (with-directory-excursion directory
+       (call-with-output-file "t.c"
+         (lambda (port)
+           (display "int main () { puts(\"hello\"); }" port)))
+
+       (invoke c-compiler "t.c"
+               "-Wl,--enable-new-dtags" "-Wl,-rpath=/xxxxxxxxx")
+
+       (let ((original-runpath (file-runpath "a.out")))
+         (and (member "/xxxxxxxxx" original-runpath)
+              (guard (c ((runpath-too-long-error? c)
+                         (string=? "a.out" (runpath-too-long-error-file c))))
+                (set-file-runpath "a.out" (list (make-string 777 #\y))))
+              (let ((runpath (delete "/xxxxxxxxx" original-runpath)))
+                (set-file-runpath "a.out" runpath)
+                (equal? runpath (file-runpath "a.out")))
+              (let* ((pipe (open-input-pipe "./a.out"))
+                     (str  (get-string-all pipe)))
+                (close-pipe pipe)
+                str)))))))
+
+(unless c-compiler
+  (test-skip 1))
+(test-equal "elf-dynamic-info-soname"
+  "libfoo.so.2"
+  (call-with-temporary-directory
+   (lambda (directory)
+     (with-directory-excursion directory
+       (call-with-output-file "t.c"
+         (lambda (port)
+           (display "// empty file" port)))
+       (invoke c-compiler "t.c"
+               "-shared" "-Wl,-soname,libfoo.so.2")
+       (let* ((dyninfo (elf-dynamic-info
+                       (parse-elf (call-with-input-file "a.out"
+                                    get-bytevector-all))))
+              (soname  (elf-dynamic-info-soname dyninfo)))
+	 soname)))))
+
 (test-end "gremlin")
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 46c8afc901..86e41e2927 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -288,7 +288,7 @@ guix build --target=arm-linux-gnueabihf --dry-run \
      -e '(@ (gnu packages base) coreutils)'
 
 # Replacements.
-drv1=`guix build guix --with-input=guile@2.0=guile@2.2 -d`
+drv1=`guix build guix --with-input=guile-zstd=idutils -d`
 drv2=`guix build guix -d`
 test "$drv1" != "$drv2"
 
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index f4fc2e39ed..95fe95b437 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -199,7 +199,7 @@ then
 
     # Make sure the bootstrap binaries are all listed where they belong.
     grep -E "^export PATH=\"$profile/bin\""         "$tmpdir/a"
-    grep -E "^export CPATH=\"$profile/include\""    "$tmpdir/a"
+    grep -E "^export C_INCLUDE_PATH=\"$profile/include\"" "$tmpdir/a"
     grep -E "^export LIBRARY_PATH=\"$profile/lib\"" "$tmpdir/a"
     for dep in bootstrap-binaries-0 gcc-bootstrap-0 glibc-bootstrap-0
     do
@@ -213,8 +213,8 @@ then
     # as returned by '--search-paths'.
     guix environment --bootstrap --no-substitutes --pure \
          -e '(@ (guix tests) gnu-make-for-tests)' \
-         -- /bin/sh -c 'echo $PATH $CPATH $LIBRARY_PATH' > "$tmpdir/b"
-    ( . "$tmpdir/a" ; echo $PATH $CPATH $LIBRARY_PATH ) > "$tmpdir/c"
+         -- /bin/sh -c 'echo $PATH $C_INCLUDE_PATH $LIBRARY_PATH' > "$tmpdir/b"
+    ( . "$tmpdir/a" ; echo $PATH $C_INCLUDE_PATH $LIBRARY_PATH ) > "$tmpdir/c"
     cmp "$tmpdir/b" "$tmpdir/c"
 
     rm "$tmpdir"/*
@@ -235,7 +235,7 @@ then
 
     # Make sure the bootstrap binaries are all listed where they belong.
     grep -E "^export PATH=\"$profile/bin\""         "$tmpdir/a"
-    grep -E "^export CPATH=\"$profile/include\""    "$tmpdir/a"
+    grep -E "^export C_INCLUDE_PATH=\"$profile/include\"" "$tmpdir/a"
     grep -E "^export LIBRARY_PATH=\"$profile/lib\"" "$tmpdir/a"
     for dep in bootstrap-binaries-0 gcc-bootstrap-0 glibc-bootstrap-0 \
 				    guile-bootstrap
diff --git a/tests/guix-shell.sh b/tests/guix-shell.sh
index d8cae9d614..23ff1c5bcf 100644
--- a/tests/guix-shell.sh
+++ b/tests/guix-shell.sh
@@ -97,9 +97,9 @@ then
     profile=`grep "^export PATH" "$tmpdir/a" | sed -r 's|^.*="(.*)/bin"|\1|'`
 
     # Make sure the bootstrap binaries are all listed where they belong.
-    grep -E "^export PATH=\"$profile/bin\""         "$tmpdir/a"
-    grep -E "^export CPATH=\"$profile/include\""    "$tmpdir/a"
-    grep -E "^export LIBRARY_PATH=\"$profile/lib\"" "$tmpdir/a"
+    grep -E "^export PATH=\"$profile/bin\""               "$tmpdir/a"
+    grep -E "^export C_INCLUDE_PATH=\"$profile/include\"" "$tmpdir/a"
+    grep -E "^export LIBRARY_PATH=\"$profile/lib\""       "$tmpdir/a"
     for dep in bootstrap-binaries-0 gcc-bootstrap-0 glibc-bootstrap-0
     do
 	guix gc --references "$profile" | grep "$dep"
diff --git a/tests/hackage.scm b/tests/hackage.scm
index ba694661f3..189b9af173 100644
--- a/tests/hackage.scm
+++ b/tests/hackage.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -175,9 +176,7 @@ library
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
-    ('inputs
-     ('quasiquote
-      (("ghc-http" ('unquote 'ghc-http)))))
+    ('inputs ('list 'ghc-http))
     ('home-page "http://test.org")
     ('synopsis (? string?))
     ('description (? string?))
@@ -217,13 +216,8 @@ library
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
-    ('inputs
-     ('quasiquote
-      (("ghc-b" ('unquote 'ghc-b))
-       ("ghc-http" ('unquote 'ghc-http)))))
-    ('native-inputs
-     ('quasiquote
-      (("ghc-haskell-gi" ('unquote 'ghc-haskell-gi)))))
+    ('inputs ('list 'ghc-b 'ghc-http))
+    ('native-inputs ('list 'ghc-haskell-gi))
     ('home-page "http://test.org")
     ('synopsis (? string?))
     ('description (? string?))
@@ -342,9 +336,7 @@ executable cabal
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
-    ('inputs
-     ('quasiquote
-      (("ghc-http" ('unquote 'ghc-http)))))
+    ('inputs ('list 'ghc-http))
     ('arguments
      ('quasiquote
       ('#:cabal-revision
@@ -405,9 +397,7 @@ executable cabal
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
-    ('inputs
-     ('quasiquote
-      (("ghc-http" ('unquote 'ghc-http)))))
+    ('inputs ('list 'ghc-http))
     ('home-page "http://test.org")
     ('synopsis (? string?))
     ('description (? string?))
diff --git a/tests/lint.scm b/tests/lint.scm
index 9a91dd5426..e9663e69f9 100644
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@ -380,6 +380,20 @@
                               `(("python-setuptools" ,python-setuptools))))))
      (check-inputs-should-not-be-an-input-at-all pkg))))
 
+(test-assert "input labels: no warnings"
+  (let ((pkg (dummy-package "x"
+               (inputs `(("glib" ,glib)
+                         ("pkg-config" ,pkg-config))))))
+    (null? (check-input-labels pkg))))
+
+(test-equal "input labels: one warning"
+  "label 'pkgkonfig' does not match package name 'pkg-config'"
+  (single-lint-warning-message
+   (let ((pkg (dummy-package "x"
+                (inputs `(("glib" ,glib)
+                          ("pkgkonfig" ,pkg-config))))))
+     (check-input-labels pkg))))
+
 (test-equal "explicit #:sh argument to 'wrap-program' is acceptable"
   '()
   (let* ((phases
@@ -586,7 +600,7 @@
       (single-lint-warning-message (check-patch-headers pkg)))))
 
 (test-equal "derivation: invalid arguments"
-  "failed to create x86_64-linux derivation: (wrong-type-arg \"map\" \"Wrong type argument: ~S\" (invalid-module) ())"
+  "failed to create x86_64-linux derivation: (match-error \"match\" \"no matching pattern\" invalid-module)"
   (match (let ((pkg (dummy-package "x"
                                    (arguments
                                     '(#:imported-modules (invalid-module))))))
diff --git a/tests/opam.scm b/tests/opam.scm
index 31b4ea41ff..b5f02f809b 100644
--- a/tests/opam.scm
+++ b/tests/opam.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -101,13 +102,9 @@ url {
                                ('base32
                                 (? string? hash)))))
                    ('build-system 'ocaml-build-system)
-                   ('propagated-inputs
-                    ('quasiquote
-                     (("ocaml-zarith" ('unquote 'ocaml-zarith)))))
+                   ('propagated-inputs ('list 'ocaml-zarith))
                    ('native-inputs
-                    ('quasiquote
-                     (("ocaml-alcotest" ('unquote 'ocaml-alcotest))
-                      ("ocamlbuild" ('unquote 'ocamlbuild)))))
+                    ('list 'ocaml-alcotest 'ocamlbuild))
                    ('home-page "https://example.org/")
                    ('synopsis "Some example package")
                    ('description "This package is just an example.")
diff --git a/tests/pack.scm b/tests/pack.scm
index e9b4c36e0e..98bfedf21c 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -54,7 +54,7 @@
   ;; Compressor that uses the bootstrap 'gzip'.
   ((@ (guix scripts pack) compressor) "gzip"
    ".gz"
-   #~(#+(file-append %bootstrap-coreutils&co "/bin/gzip") "-6n")))
+   #~(list #+(file-append %bootstrap-coreutils&co "/bin/gzip") "-6n")))
 
 (define %tar-bootstrap %bootstrap-coreutils&co)
 
diff --git a/tests/packages.scm b/tests/packages.scm
index 266b5aeb7a..3506f94f91 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -1,6 +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 © Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,13 +19,14 @@
 ;;; 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 (test-packages)
+(define-module (tests packages)
   #:use-module (guix tests)
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module (guix grafts)
-  #:use-module ((guix gexp) #:select (local-file local-file-file))
+  #:use-module (guix gexp)
   #:use-module (guix utils)
+  #:use-module ((guix build utils) #:select (tarball?))
   #:use-module ((guix diagnostics)
                 ;; Rename the 'location' binding to allow proper syntax
                 ;; matching when setting the 'location' field of a package.
@@ -32,6 +35,7 @@
                                   (else name))))
   #:use-module ((gcrypt hash) #:prefix gcrypt:)
   #:use-module (guix derivations)
+  #:use-module (guix download)
   #:use-module (guix packages)
   #:use-module (guix grafts)
   #:use-module (guix search-paths)
@@ -51,6 +55,7 @@
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
@@ -133,7 +138,7 @@
   ;; inputs.  See <https://bugs.gnu.org/35872>.
   (let* ((dep (dummy-package "dep" (version "2")))
          (old (dummy-package "foo" (version "1")
-                             (propagated-inputs `(("dep" ,dep)))))
+                             (propagated-inputs (list dep))))
          (drv (package-derivation %store old))
          (tx  (mock ((gnu packages) find-best-packages-by-name
                      (const (list old)))
@@ -221,7 +226,7 @@
              (bar (dummy-package "bar" (version "0")
                                  (replacement old)))
              (new (dummy-package "foo" (version "1")
-                                 (inputs `(("bar" ,bar)))))
+                                 (inputs (list bar))))
              (tx  (mock ((gnu packages) find-best-packages-by-name
                          (const (list new)))
                         (transaction-upgrade-entry
@@ -282,13 +287,13 @@
 (test-assert "package-transitive-inputs"
   (let* ((a (dummy-package "a"))
          (b (dummy-package "b"
-              (propagated-inputs `(("a" ,a)))))
+              (propagated-inputs (list a))))
          (c (dummy-package "c"
-              (inputs `(("a" ,a)))))
+              (inputs (list a))))
          (d (dummy-package "d"
               (propagated-inputs `(("x" "something.drv")))))
          (e (dummy-package "e"
-              (inputs `(("b" ,b) ("c" ,c) ("d" ,d))))))
+              (inputs (list b c d)))))
     (and (null? (package-transitive-inputs a))
          (equal? `(("a" ,a)) (package-transitive-inputs b))
          (equal? `(("a" ,a)) (package-transitive-inputs c))
@@ -334,19 +339,19 @@
          (b (dummy-package "b"
               (build-system trivial-build-system)
               (supported-systems '("x" "y"))
-              (inputs `(("a" ,a)))))
+              (inputs (list a))))
          (c (dummy-package "c"
               (build-system trivial-build-system)
               (supported-systems '("y" "z"))
-              (inputs `(("b" ,b)))))
+              (inputs (list b))))
          (d (dummy-package "d"
               (build-system trivial-build-system)
               (supported-systems '("x" "y" "z"))
-              (inputs `(("b" ,b) ("c" ,c)))))
+              (inputs (list b c))))
          (e (dummy-package "e"
               (build-system trivial-build-system)
               (supported-systems '("x" "y" "z"))
-              (inputs `(("d" ,d))))))
+              (inputs (list d)))))
     (list (package-transitive-supported-systems a)
           (package-transitive-supported-systems b)
           (package-transitive-supported-systems c)
@@ -376,13 +381,13 @@
                      (build-system trivial-build-system))))))
     (let* ((a (dummy-package/no-implicit "a"))
            (b (dummy-package/no-implicit "b"
-                (propagated-inputs `(("a" ,a)))))
+                (propagated-inputs (list a))))
            (c (dummy-package/no-implicit "c"
-                (inputs `(("a" ,a)))))
+                (inputs (list a))))
            (d (dummy-package/no-implicit "d"
-                (native-inputs `(("b" ,b)))))
+                (native-inputs (list b))))
            (e (dummy-package/no-implicit "e"
-                (inputs `(("c" ,c) ("d" ,d))))))
+                (inputs (list c d)))))
       (lset= eq?
              (list a b c d e)
              (package-closure (list e))
@@ -405,12 +410,11 @@
        (u (dummy-origin))
        (i (dummy-origin))
        (a (dummy-package "a"))
-       (b (dummy-package "b"
-            (inputs `(("a" ,a) ("i" ,i)))))
+       (b (dummy-package "b" (inputs (list a i))))
        (c (package (inherit b) (source o)))
        (d (dummy-package "d"
             (build-system trivial-build-system)
-            (source u) (inputs `(("c" ,c))))))
+            (source u) (inputs (list c)))))
   (test-assert "package-direct-sources, no source"
     (null? (package-direct-sources a)))
   (test-equal "package-direct-sources, #f source"
@@ -478,7 +482,7 @@
               (supported-systems '("x86_64-linux"))))
          (p (dummy-package "foo"
               (build-system gnu-build-system)
-              (inputs `(("d" ,d)))
+              (inputs (list d))
               (supported-systems '("x86_64-linux" "armhf-linux")))))
     (and (supported-package? p "x86_64-linux")
          (not (supported-package? p "i686-linux"))
@@ -603,6 +607,11 @@
     (build-derivations %store (list drv))
     (call-with-input-file output get-string-all)))
 
+
+;;;
+;;; Source derivation with snippets.
+;;;
+
 (unless (network-reachable?) (test-skip 1))
 (test-equal "package-source-derivation, snippet"
   "OK"
@@ -658,11 +667,96 @@
     (and (build-derivations %store (list (pk 'snippet-drv drv)))
          (call-with-input-file out get-string-all))))
 
+;; Note: lzip is not part of bootstrap-coreutils&co, so is not included to
+;; avoid having to rebuild the world.
+(define compressors '(("gzip"  . "gz")
+                      ("xz"    . "xz")
+                      ("bzip2" . "bz2")
+                      (#f      . #f)))
+
+(for-each
+ (match-lambda
+   ((comp . ext)
+    (unless (network-reachable?) (test-skip 1))
+    (test-equal (string-append "origin->derivation, single file with snippet "
+                               "(compression: " (if comp comp "None") ")")
+      "2 + 2 = 4"
+      (let*-values
+          (((name) "maths")
+           ((compressed-name) (if comp
+                                  (string-append name "." ext)
+                                  name))
+           ((file hash) (test-file %store compressed-name "2 + 2 = 5"))
+           ;; Create an origin using the above computed file and its hash.
+           ((source) (origin
+                       (method url-fetch)
+                       (uri (string-append "file://" file))
+                       (file-name compressed-name)
+                       (patch-inputs `(("tar"   ,%bootstrap-coreutils&co)
+                                       ("xz"    ,%bootstrap-coreutils&co)
+                                       ("bzip2" ,%bootstrap-coreutils&co)
+                                       ("gzip"  ,%bootstrap-coreutils&co)))
+                       (patch-guile %bootstrap-guile)
+                       (modules '((guix build utils)))
+                       (snippet `(substitute* ,name
+                                   (("5") "4")))
+                       (hash (content-hash hash))))
+           ;; Build origin.
+           ((drv) (run-with-store %store (origin->derivation source)))
+           ((out) (derivation->output-path drv)))
+        ;; Decompress the resulting tar.xz and return its content.
+        (and (build-derivations %store (list drv))
+             (if (tarball? out)
+                 (let* ((bin #~(string-append #+%bootstrap-coreutils&co
+                                              "/bin"))
+                        (f (computed-file
+                            name
+                            (with-imported-modules '((guix build utils))
+                              #~(begin
+                                  (use-modules (guix build utils))
+                                  (setenv "PATH" #+bin)
+                                  (invoke "tar" "xvf" #+out)
+                                  (copy-file #+name #$output)))))
+                        (drv (run-with-store %store (lower-object f)))
+                        (_ (build-derivations %store (list drv))))
+                   (call-with-input-file (derivation->output-path drv)
+                     get-string-all))
+                 (call-with-input-file out get-string-all)))))))
+ compressors)
+
 (test-assert "return value"
   (let ((drv (package-derivation %store (dummy-package "p"))))
     (and (derivation? drv)
          (file-exists? (derivation-file-name drv)))))
 
+(test-assert "package-derivation, inputs deduplicated"
+  (let* ((dep (dummy-package "dep"))
+         (p0  (dummy-package "p" (inputs (list dep))))
+         (p1  (package (inherit p0)
+                       (inputs `(("dep" ,(package (inherit dep)))
+                                 ,@(package-inputs p0))))))
+    ;; Here P1 ends up with two non-eq? copies of DEP, under the same label.
+    ;; They should be deduplicated so that P0 and P1 lead to the same
+    ;; derivation rather than P1 ending up with duplicate entries in its
+    ;; '%build-inputs' variable.
+    (string=? (derivation-file-name (package-derivation %store p0))
+              (derivation-file-name (package-derivation %store p1)))))
+
+(test-assert "package-derivation, different system"
+  ;; Make sure the 'system' argument of 'package-derivation' is respected.
+  (let* ((system (if (string=? (%current-system) "x86_64-linux")
+                     "aarch64-linux"
+                     "x86_64-linux"))
+         (drv    (package-derivation %store (dummy-package "p")
+                                     system #:graft? #f)))
+    (define right-system?
+      (mlambdaq (drv)
+        (and (string=? (derivation-system drv) system)
+             (every (compose right-system? derivation-input-derivation)
+                    (derivation-inputs drv)))))
+
+    (right-system? drv)))
+
 (test-assert "package-output"
   (let* ((package  (dummy-package "p"))
          (drv      (package-derivation %store package)))
@@ -690,7 +784,7 @@
 
 (let ((dummy (dummy-package "foo" (inputs `(("x" ,(current-module)))))))
   (test-equal "&package-input-error"
-    (list dummy (current-module))
+    (list dummy `("x" ,(current-module)))
     (guard (c ((package-input-error? c)
                (list (package-error-package c)
                      (package-error-invalid-input c))))
@@ -701,7 +795,7 @@
   (parameterize ((%graft? #f))
     (let* ((dep (dummy-package "dep"))
            (p   (dummy-package "p"
-                  (inputs `(("dep" ,dep "non-existent"))))))
+                  (inputs (list `(,dep "non-existent"))))))
       (guard (c ((derivation-missing-output-error? c)
                  (and (string=? (derivation-missing-output c) "non-existent")
                       (equal? (package-derivation %store dep)
@@ -802,21 +896,47 @@
       (build-derivations %store (list d))
       #f)))
 
+(test-assert "trivial with #:allowed-references + grafts"
+  (let* ((g (package
+              (inherit %bootstrap-guile)
+              (replacement (package
+                             (inherit %bootstrap-guile)
+                             (version "9.9")))))
+         (p (package
+              (inherit (dummy-package "trivial"))
+              (build-system trivial-build-system)
+              (inputs (list g))
+              (arguments
+               `(#:guile ,g
+                 #:allowed-references (,g)
+                 #:builder (mkdir %output)))))
+         (d0 (package-derivation %store p #:graft? #f))
+         (d1 (parameterize ((%graft? #t))
+               (package-derivation %store p #:graft? #t))))
+    ;; D1 should be equal to D2 because there's nothing to graft.  In
+    ;; particular, its #:disallowed-references should be lowered in the same
+    ;; way (ungrafted) whether or not #:graft? is true.
+    (string=? (derivation-file-name d1) (derivation-file-name d0))))
+
 (test-assert "search paths"
   (let* ((p (make-prompt-tag "return-search-paths"))
+         (t (make-parameter "guile-0"))
          (s (build-system
-             (name 'raw)
-             (description "Raw build system with direct store access")
-             (lower (lambda* (name #:key source inputs system target
-                                   #:allow-other-keys)
-                      (bag
-                        (name name)
-                        (system system) (target target)
-                        (build-inputs inputs)
-                        (build
-                         (lambda* (store name inputs
+              (name 'raw)
+              (description "Raw build system with direct store access")
+              (lower (lambda* (name #:key source inputs system target
+                                    #:allow-other-keys)
+                       (bag
+                         (name name)
+                         (system system) (target target)
+                         (build-inputs inputs)
+                         (build
+                          (lambda* (name inputs
                                          #:key outputs system search-paths)
-                           search-paths)))))))
+                            (if (string=? name (t))
+                                (abort-to-prompt p search-paths)
+                                (gexp->derivation name
+                                                  #~(mkdir #$output))))))))))
          (x (list (search-path-specification
                    (variable "GUILE_LOAD_PATH")
                    (files '("share/guile/site/2.0")))
@@ -841,8 +961,10 @@
                                (lambda (k search-paths)
                                  search-paths))))))
       (and (null? (collect (package-derivation %store a)))
-           (equal? x (collect (package-derivation %store b)))
-           (equal? x (collect (package-derivation %store c)))))))
+           (parameterize ((t "guile-foo-0"))
+             (equal? x (collect (package-derivation %store b))))
+           (parameterize ((t "guile-bar-0"))
+             (equal? x (collect (package-derivation %store c))))))))
 
 (test-assert "package-transitive-native-search-paths"
   (let* ((sp (lambda (name)
@@ -853,12 +975,12 @@
          (p1 (dummy-package "p1" (native-search-paths (sp "PATH1"))))
          (p2 (dummy-package "p2"
                (native-search-paths (sp "PATH2"))
-               (inputs `(("p0" ,p0)))
-               (propagated-inputs `(("p1" ,p1)))))
+               (inputs (list p0))
+               (propagated-inputs (list p1))))
          (p3 (dummy-package "p3"
                (native-search-paths (sp "PATH3"))
-               (native-inputs `(("p0" ,p0)))
-               (propagated-inputs `(("p2" ,p2))))))
+               (native-inputs (list p0))
+               (propagated-inputs (list p2)))))
     (lset= string=?
            '("PATH1" "PATH2" "PATH3")
            (map search-path-specification-variable
@@ -912,7 +1034,7 @@
          (dep*  (package (inherit dep) (replacement new)))
          (dummy (dummy-package "dummy"
                   (arguments '(#:implicit-inputs? #f))
-                  (inputs `(("dep" ,dep*))))))
+                  (inputs (list dep*)))))
     (equal? (package-grafts %store dummy)
             (list (graft
                     (origin (package-derivation %store dep))
@@ -944,11 +1066,11 @@
          (dep   (package (inherit new) (version "0.0")))
          (dep*  (package (inherit dep) (replacement new)))
          (prop  (dummy-package "propagated"
-                  (propagated-inputs `(("dep" ,dep*)))
+                  (propagated-inputs (list dep*))
                   (arguments '(#:implicit-inputs? #f))))
          (dummy (dummy-package "dummy"
                   (arguments '(#:implicit-inputs? #f))
-                  (inputs `(("prop" ,prop))))))
+                  (inputs (list prop)))))
     (equal? (package-grafts %store dummy)
             (list (graft
                     (origin (package-derivation %store dep))
@@ -961,16 +1083,16 @@
          (dep  (package (inherit new) (version "0") (replacement new)))
          (p1   (dummy-package "intermediate1"
                  (arguments '(#:implicit-inputs? #f))
-                 (inputs `(("dep" ,dep)))))
+                 (inputs (list dep))))
          (p2   (dummy-package "intermediate2"
                  (arguments '(#:implicit-inputs? #f))
                  ;; Here we copy DEP to have an equivalent package that is not
                  ;; 'eq?' to DEP.  This is similar to what happens with
                  ;; 'package-with-explicit-inputs' & co.
-                 (inputs `(("dep" ,(package (inherit dep)))))))
+                 (inputs (list (package (inherit dep))))))
          (p3   (dummy-package "final"
                  (arguments '(#:implicit-inputs? #f))
-                 (inputs `(("p1" ,p1) ("p2" ,p2))))))
+                 (inputs (list p1 p2)))))
     (equal? (package-grafts %store p3)
             (list (graft
                     (origin (package-derivation %store
@@ -988,8 +1110,7 @@
             (p0* (package (inherit p0) (version "1.1")))
             (p1  (dummy-package "p1"
                    (arguments '(#:implicit-inputs? #f))
-                   (inputs `(("p0" ,p0)
-                             ("p0:lib" ,p0 "lib"))))))
+                   (inputs (list p0 `(,p0 "lib"))))))
     (lset= equal? (pk (package-grafts %store p1))
            (list (graft
                    (origin (package-derivation %store p0))
@@ -1037,7 +1158,7 @@
                                #t)))))
          (p2r (dummy-package "P2"
                 (build-system trivial-build-system)
-                (inputs `(("p1" ,p1)))
+                (inputs (list p1))
                 (arguments
                  `(#:guile ,%bootstrap-guile
                    #:builder (let ((out (assoc-ref %outputs "out")))
@@ -1058,7 +1179,7 @@
                                #t)))))
          (p3  (dummy-package "p3"
                 (build-system trivial-build-system)
-                (inputs `(("p2" ,p2)))
+                (inputs (list p2))
                 (arguments
                  `(#:guile ,%bootstrap-guile
                    #:builder (let ((out (assoc-ref %outputs "out")))
@@ -1116,18 +1237,18 @@
                        (bag (name name) (system system) (target target)
                             (build-inputs native-inputs)
                             (host-inputs inputs)
-                            (build (lambda* (store name inputs
-                                                   #:key system target
-                                                   #:allow-other-keys)
-                                     (build-expression->derivation
-                                      store "foo" '(mkdir %output))))))))
+                            (build (lambda* (name inputs
+                                                  #:key system target
+                                                  #:allow-other-keys)
+                                     (gexp->derivation "foo"
+                                                       #~(mkdir #$output))))))))
          (bs    (build-system
                   (name 'build-system-without-cross-compilation)
                   (description "Does not support cross compilation.")
                   (lower lower)))
          (dep   (dummy-package "dep" (build-system bs)))
          (pkg   (dummy-package "example"
-                  (native-inputs `(("dep" ,dep)))))
+                  (native-inputs (list dep))))
          (do-not-build (lambda (continue store lst . _) lst)))
     (equal? (with-build-handler do-not-build
               (parameterize ((%current-target-system "powerpc64le-linux-gnu")
@@ -1154,9 +1275,9 @@
 (test-assert "package->bag, propagated inputs"
   (let* ((dep    (dummy-package "dep"))
          (prop   (dummy-package "prop"
-                   (propagated-inputs `(("dep" ,dep)))))
+                   (propagated-inputs (list dep))))
          (dummy  (dummy-package "dummy"
-                   (inputs `(("prop" ,prop)))))
+                   (inputs (list prop))))
          (inputs (bag-transitive-inputs (package->bag dummy #:graft? #f))))
     (match (assoc "dep" inputs)
       (("dep" package)
@@ -1169,7 +1290,7 @@
                                        `(("libxml2" ,libxml2))
                                        '()))))
          (pkg (dummy-package "foo"
-                (native-inputs `(("dep" ,dep)))))
+                (native-inputs (list dep))))
          (bag (package->bag pkg (%current-system) "i586-gnu")))
     (equal? (parameterize ((%current-system "x86_64-linux"))
               (bag-transitive-inputs bag))
@@ -1182,19 +1303,20 @@
                                        `(("libxml2" ,libxml2))
                                        '()))))
          (pkg (dummy-package "foo"
-                (native-inputs `(("dep" ,dep)))))
+                (native-inputs (list dep))))
          (bag (package->bag pkg (%current-system) "foo86-hurd")))
     (equal? (parameterize ((%current-target-system "foo64-gnu"))
               (bag-transitive-inputs bag))
             (parameterize ((%current-target-system #f))
               (bag-transitive-inputs bag)))))
 
-(test-assert "bag->derivation"
+(test-assertm "bag->derivation"
   (parameterize ((%graft? #f))
     (let ((bag (package->bag gnu-make))
           (drv (package-derivation %store gnu-make)))
       (parameterize ((%current-system "foox86-hurd")) ;should have no effect
-        (equal? drv (bag->derivation %store bag))))))
+        (mlet %store-monad ((bag-drv (bag->derivation bag)))
+          (return (equal? drv bag-drv)))))))
 
 (test-assert "bag->derivation, cross-compilation"
   (parameterize ((%graft? #f))
@@ -1203,7 +1325,8 @@
            (drv    (package-cross-derivation %store gnu-make target)))
       (parameterize ((%current-system "foox86-hurd") ;should have no effect
                      (%current-target-system "foo64-linux-gnu"))
-        (equal? drv (bag->derivation %store bag))))))
+        (mlet %store-monad ((bag-drv (bag->derivation bag)))
+          (return (equal? drv bag-drv)))))))
 
 (when (or (not (network-reachable?)) (shebang-too-long?))
   (test-skip 1))
@@ -1486,11 +1609,11 @@
                     (build-system trivial-build-system)))
          (glib    (dummy-package "glib"
                     (build-system trivial-build-system)
-                    (propagated-inputs `(("libffi" ,libffi)))))
+                    (propagated-inputs (list libffi))))
          (gobject (dummy-package "gobject-introspection"
                     (build-system trivial-build-system)
-                    (inputs `(("glib" ,glib)))
-                    (propagated-inputs `(("libffi" ,libffi)))))
+                    (inputs (list glib))
+                    (propagated-inputs (list libffi))))
          (rewrite (package-input-rewriting/spec
                    `(("glib" . ,identity)))))
     (and (= (length (package-transitive-inputs gobject))
@@ -1507,11 +1630,11 @@
                     (build-system trivial-build-system)))
          (glib    (dummy-package "glib"
                     (build-system trivial-build-system)
-                    (propagated-inputs `(("libffi" ,libffi)))))
+                    (propagated-inputs (list libffi))))
          (gobject (dummy-package "gobject-introspection"
                     (build-system trivial-build-system)
-                    (inputs `(("glib" ,glib)))
-                    (propagated-inputs `(("libffi" ,libffi)))))
+                    (inputs (list glib))
+                    (propagated-inputs (list libffi))))
          (rewrite (package-input-rewriting `((,glib . ,glib)))))
     (and (= (length (package-transitive-inputs gobject))
             (length (package-transitive-inputs (rewrite gobject))))
@@ -1789,6 +1912,39 @@
   (package-location (specification->package "guile@2"))
   (specification->location "guile@2"))
 
+(test-eq "this-package-input, exists"
+  hello
+  (package-arguments
+   (dummy-package "a"
+     (inputs `(("hello" ,hello)))
+     (arguments (this-package-input "hello")))))
+
+(test-eq "this-package-input, exists in propagated-inputs"
+  hello
+  (package-arguments
+   (dummy-package "a"
+     (propagated-inputs `(("hello" ,hello)))
+     (arguments (this-package-input "hello")))))
+
+(test-eq "this-package-input, does not exist"
+  #f
+  (package-arguments
+   (dummy-package "a"
+     (arguments (this-package-input "hello")))))
+
+(test-eq "this-package-native-input, exists"
+  hello
+  (package-arguments
+   (dummy-package "a"
+     (native-inputs `(("hello" ,hello)))
+     (arguments (this-package-native-input "hello")))))
+
+(test-eq "this-package-native-input, does not exists"
+  #f
+  (package-arguments
+   (dummy-package "a"
+     (arguments (this-package-native-input "hello")))))
+
 (test-end "packages")
 
 ;;; Local Variables:
diff --git a/tests/print.scm b/tests/print.scm
index 1527251b01..d9710d1ed3 100644
--- a/tests/print.scm
+++ b/tests/print.scm
@@ -61,8 +61,8 @@
                (base32
                 "070pwb7brdcn1mfvplkd56vjc7lbz4iznzkqvfsakvgbv68k71ah"))))
     (build-system (@ (guix build-system gnu) gnu-build-system))
-    (inputs `(("coreutils" ,(@ (gnu packages base) coreutils))
-              ("glibc" ,(@ (gnu packages base) glibc) "debug")))
+    (inputs (list (@ (gnu packages base) coreutils)
+                  `(,(@ (gnu packages base) glibc) "debug")))
     (home-page "http://gnu.org")
     (synopsis "Dummy")
     (description "This is a dummy package.")
diff --git a/tests/pypi.scm b/tests/pypi.scm
index ad869ac31f..1ea5f02643 100644
--- a/tests/pypi.scm
+++ b/tests/pypi.scm
@@ -249,13 +249,8 @@ Requires-Dist: pytest (>=3.1.0); extra == 'testing'
                                  ('base32
                                   (? string? hash)))))
                      ('build-system 'python-build-system)
-                     ('propagated-inputs
-                      ('quasiquote
-                       (("python-bar" ('unquote 'python-bar))
-                        ("python-foo" ('unquote 'python-foo)))))
-                     ('native-inputs
-                      ('quasiquote
-                       (("python-pytest" ('unquote 'python-pytest)))))
+                     ('propagated-inputs ('list 'python-bar 'python-foo))
+                     ('native-inputs ('list 'python-pytest))
                      ('home-page "http://example.com")
                      ('synopsis "summary")
                      ('description "summary")
@@ -324,13 +319,8 @@ Requires-Dist: pytest (>=3.1.0); extra == 'testing'
                                ('base32
                                 (? string? hash)))))
                    ('build-system 'python-build-system)
-                   ('propagated-inputs
-                    ('quasiquote
-                     (("python-bar" ('unquote 'python-bar))
-                      ("python-baz" ('unquote 'python-baz)))))
-                   ('native-inputs
-                    ('quasiquote
-                     (("python-pytest" ('unquote 'python-pytest)))))
+                   ('propagated-inputs ('list 'python-bar 'python-baz))
+                   ('native-inputs ('list 'python-pytest))
                    ('home-page "http://example.com")
                    ('synopsis "summary")
                    ('description "summary")
@@ -426,13 +416,8 @@ Requires-Dist: pytest (>=3.1.0); extra == 'testing'
                                 (? string? hash)))))
                    ('properties ('quote (("upstream-name" . "foo-99"))))
                    ('build-system 'python-build-system)
-                   ('propagated-inputs
-                    ('quasiquote
-                     (("python-bar" ('unquote 'python-bar))
-                      ("python-foo" ('unquote 'python-foo)))))
-                   ('native-inputs
-                    ('quasiquote
-                     (("python-pytest" ('unquote 'python-pytest)))))
+                   ('propagated-inputs ('list 'python-bar 'python-foo))
+                   ('native-inputs ('list 'python-pytest))
                    ('home-page "http://example.com")
                    ('synopsis "summary")
                    ('description "summary")
diff --git a/tests/store.scm b/tests/store.scm
index de12f6831e..5df28adf0d 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -598,7 +598,8 @@
                  (d (build-expression->derivation
                      %store "foo" `(display ,s)
                      #:guile-for-build
-                     (package-derivation s %bootstrap-guile (%current-system)))))
+                     (package-derivation %store %bootstrap-guile
+                                         (%current-system)))))
             (guard (c ((store-protocol-error? c) #t))
               (build-derivations %store (list d))))))))
    "Here’s a Greek letter: λ."))
diff --git a/tests/style.scm b/tests/style.scm
new file mode 100644
index 0000000000..ada9197fc1
--- /dev/null
+++ b/tests/style.scm
@@ -0,0 +1,366 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 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 (tests-style)
+  #:use-module (guix packages)
+  #:use-module (guix scripts style)
+  #:use-module ((guix utils) #:select (call-with-temporary-directory))
+  #:use-module ((guix build utils) #:select (substitute*))
+  #:use-module (guix diagnostics)
+  #:use-module (gnu packages acl)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-64)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 pretty-print))
+
+(define (call-with-test-package inputs proc)
+  (call-with-temporary-directory
+   (lambda (directory)
+     (call-with-output-file (string-append directory "/my-packages.scm")
+       (lambda (port)
+         (pretty-print
+          `(begin
+             (define-module (my-packages)
+               #:use-module (guix)
+               #:use-module (guix licenses)
+               #:use-module (gnu packages acl)
+               #:use-module (gnu packages base)
+               #:use-module (gnu packages multiprecision)
+               #:use-module (srfi srfi-1))
+
+             (define base
+               (package
+                 (inherit coreutils)
+                 (inputs '())
+                 (native-inputs '())
+                 (propagated-inputs '())))
+
+             (define (sdl-union . lst)
+               (package
+                 (inherit base)
+                 (name "sdl-union")))
+
+             (define-public my-coreutils
+               (package
+                 (inherit base)
+                 ,@inputs
+                 (name "my-coreutils"))))
+          port)))
+
+     (proc directory))))
+
+(define test-directory
+  ;; Directory where the package definition lives.
+  (make-parameter #f))
+
+(define-syntax-rule (with-test-package fields exp ...)
+  (call-with-test-package fields
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      ;; Run as a separate process to make sure FILE is reloaded.
+      (system* "guix" "style" "-L" directory "my-coreutils")
+      (system* "cat" file)
+
+      (load file)
+      (parameterize ((test-directory directory))
+        exp ...))))
+
+(define* (read-lines port line #:optional (count 1))
+  "Read COUNT lines from PORT, starting from LINE."
+  (let loop ((lines '())
+             (count count))
+    (cond ((< (port-line port) (- line 1))
+           (read-char port)
+           (loop lines count))
+          ((zero? count)
+           (string-concatenate-reverse lines))
+          (else
+           (match (read-line port 'concat)
+             ((? eof-object?)
+              (loop lines 0))
+             (line
+              (loop (cons line lines) (- count 1))))))))
+
+(define* (read-package-field package field #:optional (count 1))
+  (let* ((location (package-field-location package field))
+         (file (location-file location))
+         (line (location-line location)))
+    (call-with-input-file (if (string-prefix? "/" file)
+                              file
+                              (string-append (test-directory) "/"
+                                             file))
+      (lambda (port)
+        (read-lines port line count)))))
+
+
+(test-begin "style")
+
+(test-equal "nothing to rewrite"
+  '()
+  (with-test-package '()
+    (package-direct-inputs (@ (my-packages) my-coreutils))))
+
+(test-equal "input labels, mismatch"
+  (list `(("foo" ,gmp) ("bar" ,acl))
+        "      (inputs `((\"foo\" ,gmp) (\"bar\" ,acl)))\n")
+  (with-test-package '((inputs `(("foo" ,gmp) ("bar" ,acl))))
+    (list (package-direct-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs))))
+
+(test-equal "input labels, simple"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "      (inputs (list gmp acl))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl))))
+    (list (package-direct-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs))))
+
+(test-equal "input labels, long list with one item per line"
+  (list (concatenate (make-list 4 `(("gmp" ,gmp) ("acl" ,acl))))
+        "\
+        (list gmp
+              acl
+              gmp
+              acl
+              gmp
+              acl
+              gmp
+              acl))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl)
+                                 ("gmp" ,gmp) ("acl" ,acl)
+                                 ("gmp" ,gmp) ("acl" ,acl)
+                                 ("gmp" ,gmp) ("acl" ,acl))))
+    (list (package-direct-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs 8))))
+
+(test-equal "input labels, sdl-union"
+  "\
+        (list gmp acl
+              (sdl-union 1 2 3 4)))\n"
+  (with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl)
+                                 ("sdl-union" ,(sdl-union 1 2 3 4)))))
+    (read-package-field (@ (my-packages) my-coreutils) 'inputs 2)))
+
+(test-equal "input labels, output"
+  (list `(("gmp" ,gmp "debug") ("acl" ,acl))
+        "      (inputs (list `(,gmp \"debug\") acl))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp "debug") ("acl" ,acl))))
+    (list (package-direct-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs))))
+
+(test-equal "input labels, prepend"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "\
+        (modify-inputs (package-propagated-inputs coreutils)
+          (prepend gmp acl)))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl)
+                                 ,@(package-propagated-inputs coreutils))))
+    (list (package-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs 2))))
+
+(test-equal "input labels, prepend + delete"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "\
+        (modify-inputs (package-propagated-inputs coreutils)
+          (delete \"gmp\")
+          (prepend gmp acl)))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp)
+                                 ("acl" ,acl)
+                                 ,@(alist-delete "gmp"
+                                                 (package-propagated-inputs coreutils)))))
+    (list (package-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs 3))))
+
+(test-equal "input labels, prepend + delete multiple"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "\
+        (modify-inputs (package-propagated-inputs coreutils)
+          (delete \"foo\" \"bar\" \"baz\")
+          (prepend gmp acl)))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp)
+                                 ("acl" ,acl)
+                                 ,@(fold alist-delete
+                                         (package-propagated-inputs coreutils)
+                                         '("foo" "bar" "baz")))))
+    (list (package-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs 3))))
+
+(test-equal "input labels, replace"
+  (list '()                                 ;there's no "gmp" input to replace
+        "\
+        (modify-inputs (package-propagated-inputs coreutils)
+          (replace \"gmp\" gmp)))\n")
+  (with-test-package '((inputs `(("gmp" ,gmp)
+                                 ,@(alist-delete "gmp"
+                                                 (package-propagated-inputs coreutils)))))
+    (list (package-inputs (@ (my-packages) my-coreutils))
+          (read-package-field (@ (my-packages) my-coreutils) 'inputs 2))))
+
+(test-equal "input labels, 'safe' policy"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "\
+      (inputs (list gmp acl))\n")
+  (call-with-test-package '((inputs `(("GMP" ,gmp) ("ACL" ,acl)))
+                            (arguments '()))      ;no build system arguments
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (system* "guix" "style" "-L" directory "my-coreutils"
+               "--input-simplification=safe")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs)))))
+
+(test-equal "input labels, 'safe' policy, nothing changed"
+  (list `(("GMP" ,gmp) ("ACL" ,acl))
+        "\
+      (inputs `((\"GMP\" ,gmp) (\"ACL\" ,acl)))\n")
+  (call-with-test-package '((inputs `(("GMP" ,gmp) ("ACL" ,acl)))
+                            ;; Non-empty argument list, so potentially unsafe
+                            ;; input simplification.
+                            (arguments
+                             '(#:configure-flags
+                               (assoc-ref %build-inputs "GMP"))))
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (system* "guix" "style" "-L" directory "my-coreutils"
+               "--input-simplification=safe")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs)))))
+
+(test-equal "input labels, margin comment"
+  (list `(("gmp" ,gmp))
+        `(("acl" ,acl))
+        "      (inputs (list gmp)) ;margin comment\n"
+        "      (native-inputs (list acl)) ;another one\n")
+  (call-with-test-package '((inputs `(("gmp" ,gmp)))
+                            (native-inputs `(("acl" ,acl))))
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (substitute* file
+        (("\"gmp\"(.*)$" _ rest)
+         (string-append "\"gmp\"" (string-trim-right rest)
+                        " ;margin comment\n"))
+        (("\"acl\"(.*)$" _ rest)
+         (string-append "\"acl\"" (string-trim-right rest)
+                        " ;another one\n")))
+      (system* "cat" file)
+
+      (system* "guix" "style" "-L" directory "my-coreutils")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (package-native-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs)
+            (read-package-field (@ (my-packages) my-coreutils) 'native-inputs)))))
+
+(test-equal "input labels, margin comment on long list"
+  (list (concatenate (make-list 4 `(("gmp" ,gmp) ("acl" ,acl))))
+        "\
+        (list gmp ;margin comment
+              acl
+              gmp ;margin comment
+              acl
+              gmp ;margin comment
+              acl
+              gmp ;margin comment
+              acl))\n")
+  (call-with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl)
+                                      ("gmp" ,gmp) ("acl" ,acl)
+                                      ("gmp" ,gmp) ("acl" ,acl)
+                                      ("gmp" ,gmp) ("acl" ,acl))))
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (substitute* file
+        (("\"gmp\"(.*)$" _ rest)
+         (string-append "\"gmp\"" (string-trim-right rest)
+                        " ;margin comment\n")))
+      (system* "cat" file)
+
+      (system* "guix" "style" "-L" directory "my-coreutils")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs 8)))))
+
+(test-equal "input labels, line comment"
+  (list `(("gmp" ,gmp) ("acl" ,acl))
+        "\
+      (inputs (list gmp
+                    ;; line comment!
+                    acl))\n")
+  (call-with-test-package '((inputs `(("gmp" ,gmp) ("acl" ,acl))))
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (substitute* file
+        ((",gmp\\)(.*)$" _ rest)
+         (string-append ",gmp)\n   ;; line comment!\n" rest)))
+
+      (system* "guix" "style" "-L" directory "my-coreutils")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs 3)))))
+
+(test-equal "input labels, modify-inputs and margin comment"
+  (list `(("gmp" ,gmp) ("acl" ,acl) ("mpfr" ,mpfr))
+        "\
+        (modify-inputs (package-propagated-inputs coreutils)
+          (prepend gmp ;margin comment
+                   acl ;another one
+                   mpfr)))\n")
+  (call-with-test-package '((inputs
+                             `(("gmp" ,gmp) ("acl" ,acl) ("mpfr" ,mpfr)
+                               ,@(package-propagated-inputs coreutils))))
+    (lambda (directory)
+      (define file
+        (string-append directory "/my-packages.scm"))
+
+      (substitute* file
+        ((",gmp\\)(.*)$" _ rest)
+         (string-append ",gmp) ;margin comment\n" rest))
+        ((",acl\\)(.*)$" _ rest)
+         (string-append ",acl) ;another one\n" rest)))
+
+      (system* "guix" "style" "-L" directory "my-coreutils")
+
+      (load file)
+      (list (package-inputs (@ (my-packages) my-coreutils))
+            (read-package-field (@ (my-packages) my-coreutils) 'inputs 4)))))
+
+(test-end)
+
+;; Local Variables:
+;; eval: (put 'with-test-package 'scheme-indent-function 1)
+;; eval: (put 'call-with-test-package 'scheme-indent-function 1)
+;; End:
diff --git a/tests/utils.scm b/tests/utils.scm
index 2b7db73905..648e91f242 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -289,6 +290,22 @@ skip these tests."
    (string-closest "hello" '("kikoo" "helo" "hihihi" "halo"))
    (string-closest "hello" '("aaaaa" "12345" "hellohello" "h"))))
 
+(test-equal "target-linux?"
+  '(#t #f #f #t)
+  (map target-linux?
+       '("i686-linux-gnu" "i686-w64-mingw32"
+         ;; Checking that "gnu" is present is not sufficient,
+         ;; as GNU/Hurd exists.
+         "i686-pc-gnu"
+         ;; Some targets have a suffix.
+         "arm-linux-gnueabihf")))
+
+(test-equal "target-mingw?"
+  '(#f #f #t)
+  (map target-mingw?
+       '("i686-linux-gnu" "i686-pc-gnu"
+         "i686-w64-mingw32")))
+
 (test-equal "target-x86-32?"
   '(#f #f #f #t #t #t #t #f)
   ;; These are (according to Wikipedia) two RISC architectures